//Check expiration date
function isexpdate(vobjmonth, vobjyear, lboffset, lbempty)
{
 var lbvalid;
 if (lbempty == true)
 {
      lbvalid = true;
 }
 else
 {
  var vimonth = parseInt(vobjmonth.value);
  var viyear = parseInt(vobjyear.value);
  
  if (1 <= vimonth && vimonth <= 12 && viyear >= 2005 && viyear != -1)
  {
   lbvalid = true;
  }
  else
  {
   lbvalid = false;
  }  
 }
 setmark(vobjmonth, lboffset, lbvalid, '', 'isexpdate');
}

function notempty(lobjtest, lboffset) {
	var lbvalid = true;
   lobjtest.value=lobjtest.value.Trim();
   if (lobjtest.value.length==0) {
     lbvalid = false;
   }
   setmark(lobjtest, lboffset, lbvalid, '', 'notempty');
}

function islist(lobjtest, lboffset, lbempty, lserrmsg) {
   var lbvalid = true;
   if (lobjtest.value==-1 && lbempty==false) lbvalid = false;
   setmark(lobjtest, lboffset, lbvalid, lserrmsg, 'islist');
}

function ischeck(lobjtest, lboffset, limin, limax) {
   var lbvalid = false;
   var litel = 0;
	var coll = document.getElementsByTagName("input");
	for (var licount=0; licount < coll.length;licount++){
		if (coll[licount].type == "checkbox" && coll[licount].name == lobjtest.name){
			if (coll[licount].value!=-1 && coll[licount].checked==true) litel += 1;
		}
	}
	lbvalid = (litel >= limin);
   if (lbvalid == true && limax >= limin){
		lbvalid = (litel <= limax);
   }
   setmark(lobjtest, lboffset, lbvalid, '', 'ischeck');
}

function ischeckother(lobjtest, lboffset, lbother, limin, limax) {
// lbother = true if this checkbox has an other-field
// limin = minimum number of checked boxes
// limax = maximum number of checked boxes
	var lbvalid = false;
   var lbvalidOther = true;
   var litel = 0;
	var coll = document.getElementsByTagName("input");
	for (var licount=0; licount < coll.length;licount++){
		if (coll[licount].type == "checkbox" && coll[licount].name == lobjtest.name){
			if (coll[licount].value!=-1 && coll[licount].checked==true) {
				litel += 1;
				if(document.getElementById("txp" + coll[licount].id)) {
					liminstr = eval("limin_txp" + coll[licount].id);
					limaxstr = eval("limax_txp" + coll[licount].id);
					lbvalidOther = isstringother2(document.getElementById("txp" + coll[licount].id).value, lboffset, liminstr, limaxstr, "Fout!!");
				}
			}
		}
	}

	if(litel >= limin && litel <= limax)
		lbvalid = true;
	if(lbvalid == true)
		lbvalid = lbvalidOther;
		
   setmark(lobjtest, lboffset, lbvalid, '', 'ischeckother');
}

function isradio(lobjtest, lboffset, lbempty, lserrmsg) {
	var lbvalid = lbempty;
   var litel = 0;
   if (lbempty == false)
   {
		var coll = document.getElementsByTagName("input")
		for (var licount=0; licount < coll.length;licount++)
		{
			if (coll[licount].type == "radio" && coll[licount].name == lobjtest.name)
			{
				if (coll[licount].value!=-1 && coll[licount].checked==true) litel += 1;
			}
		}
		lbvalid = (litel == 1);
	}
	setmark(lobjtest, lboffset, lbvalid, lserrmsg, 'isradio');
	
	return lbvalid;
}

function isradioother(lobjtest, lboffset, lbempty, lbother, limin, limax, lsxpt, vserrmsg) {
// lobjtest is the radiobutton calling this function
// lbother is true if the calling radiobutton is linked with an other-field (via its id)
// limin and limax denote the minimum and maximum number of characters if lbother is true
   var lbvalid = lbempty;	// If checked list may remain empty, then immediately return empty
   var litel = 0;
   var licount = 0;
   
   //if (lbempty == false)
   //{
		if(lsxpt == null) lsxpt = "";
		var coll = document.getElementsByTagName("input");
		for (var licount=0; licount < coll.length;licount++)
		{
			if (coll[licount].type == "radio" && coll[licount].name == lobjtest.name)
			{
				//if (coll[licount].checked==true){
				// Arrived at a checked radiobutton
					if (lbother == false)
					{
						// Other-field is not checked. If this is not the always checked -1 value, then count it
						//if (coll[licount].value!=-1) litel += 1;
						
						if (lbempty == true){
							litel += 1;
							
						}
						else{
							litel = isradio(lobjtest, lboffset, lbempty, vserrmsg);
						}
						
					}
					else
					{
						// If this radio contains an other-field (linked via id)
						var lsElemName = "txp" + coll[licount].id;
						if (document.getElementById(lsElemName))
						{
							// Other-field exists
							if (document.getElementById(lsElemName).value.length >= limin && document.getElementById(lsElemName).value.length <= limax){
								litel += 1;
							}
							else{
								litel = 0;
							}
						}
						else
						{
							// Other field does not exist. This is possible if isradioother is called by another radiobutton than the clicked radiobutton (for example when checkvalues is called onload)
							// Since coll[licount].checked = true, count this one if it is not the always checked value of -1!
							//if (coll[licount].value!=-1) litel += 1;
						}
					}
				//}
			}
		}
		// If list of checked radios is 1, then return true
		//alert('test3');
		lbvalid = (litel > 0);
		
		if (false == lbvalid){
			//alert('testing');
		}
	//}
   setmark(lobjtest, lboffset, lbvalid, vserrmsg, 'isradioother');
}
  
function isnumber(lobjtest, lboffset, lbempty, lserrmsg) {
   var lbvalid = true;
   var lbclear = false;
   if (lobjtest.value.length==0 && lbempty==false) lbvalid = false;
   if (lobjtest.value.length==0 && lbempty==true) lbclear = true;
   var lsNum = "0123456789";
   for (var llicnt = 0; llicnt < lobjtest.value.length; llicnt++) {
      if (lsNum.indexOf(lobjtest.value.charAt(llicnt)) == -1) {
         lbvalid = false;
         break;
      }
   }
   
   if(lbclear == false)
		setmark(lobjtest, lboffset, lbvalid, lserrmsg, 'isnumber');
	else
		clearmark(lobjtest, lboffset);
}

function israngenumber(lobjtest, lboffset, lbempty, limin, limax, lserrmsg) {
   var lbvalid = true;
   var lbclear = false;
   if (lobjtest.value.length == 0 && lbempty == false) lbvalid = false;
   var lsNum = "0123456789";
   for (var llicnt = 0; llicnt < lobjtest.value.length; llicnt++) {
      if (lsNum.indexOf(lobjtest.value.charAt(llicnt)) == -1) {
         lbvalid = false;
         break;
      }
   }
   
   if(lbvalid == true && lbclear == false && (lobjtest.value < limin || lobjtest.value > limax) && lobjtest.value.length != 0)
		lbvalid = false;

   if(lbclear == false){
		setmark(lobjtest, lboffset, lbvalid, lserrmsg, 'israngenumber');
	}
	else{
		clearmark(lobjtest, lboffset);
	}
	
	return lbvalid;
}

function isfloat(lobjtest, lboffset, lbempty) {
	var lbvalid = false;
   if (lobjtest.value.length==0 && lbempty==true) lbvalid = true;
   if (/^[0-9]+[\.\,]{0,1}[0-9]*$/i.test(lobjtest.value)) lbvalid = true;
   setmark(lobjtest, lboffset, lbvalid, '', 'isfloat');
}

function isminmax(lobjtest, lboffset, liMin, liMax) {
	var lbvalid = true;
   if (lobjtest.value.length==0) lbvalid = false;
   var lsNum = "0123456789";
   for (var llicnt = 0; llicnt < lobjtest.value.length; llicnt++) {
      if (lsNum.indexOf(lobjtest.value.charAt(llicnt)) == -1) {
         lbvalid = false;
         break;
      }
   }
   if (lbvalid == true){
   	  if (lobjtest.value < liMin) lbvalid = false;
	  if (liMax > liMin && lbvalid == true){
   	  	 if (lobjtest.value > liMax) lbvalid = false;
	  }
   }
   setmark(lobjtest, lboffset, lbvalid, '', 'isminmax');
}

function isminmaxempty(lobjtest, lboffset, liMin, liMax, lbempty) {
	var lbvalid = true;
   if (lobjtest.value.length==0 && lbempty==true){
		lbvalid = true;
	}else{
		var lsNum = "0123456789";
		for (var llicnt = 0; llicnt < lobjtest.value.length; llicnt++) {
			if (lsNum.indexOf(lobjtest.value.charAt(llicnt)) == -1) {
				lbvalid = false;
				break;
			}
		}
		if (lbvalid == true){
   		if (lobjtest.value < liMin) lbvalid = false;
		if (liMax > liMin && lbvalid == true){
   	  		if (lobjtest.value > liMax) lbvalid = false;
		}
		}
	}
   setmark(lobjtest, lboffset, lbvalid, '', 'isminmaxempty');
}

function isstring(lobjtest, lboffset, liMin, liMax, lserrmsg) {
	var lbvalid = true;
   if (lobjtest.value.length < liMin || lobjtest.value.length > liMax) lbvalid = false;
   setmark(lobjtest, lboffset, lbvalid, lserrmsg, 'isstring');
}


function ispassword(lobjtest, lboffset, liMin, liMax, lserrmsg) {
	var lbvalid = true;
	if (lobjtest.value.length <= liMin || lobjtest.value.length > liMax)
		lbvalid = false;
	if(!lbvalid)
		clearmark(lobjtest, lboffset);
	else
		setmark(lobjtest, lboffset, lbvalid, lserrmsg, 'ispassword');
}

function isstringother2(lstest, lboffset, liMin, liMax, lserrmsg) {
// Called by radiobutton or checkbox
// Tests if object lstest contains more than liMin and less than liMax characters
	var lbvalid = true;
   if (lstest.length < liMin || lstest.length > liMax)
		lbvalid = false;
   return lbvalid;
}

function isstringother(lobjtest, lboffset, limin, limax) {
// Called by the other-textfield that belongs to a radiobutton or checkfield
// It ONLY checks the corresponding radiobutton or checkfield if text is entered into the other-field. Then it calls its onchange
	if(document.getElementById(lobjtest.id.substr(3))) {
		document.getElementById(lobjtest.id.substr(3)).checked = (lobjtest.value != "");
		document.getElementById(lobjtest.id.substr(3)).onclick();
	}
}

function isstringother_old(lobjtest, lboffset, limin, limax) {
	var lbvalid = true;
	var lsname = lobjtest.name;

	var liUscore = lsname.indexOf("_");
   if(liUscore > 0) {
		lsname = lsname.substr(3, liUscore - 3);
		liitem = lobjtest.name.substr(lobjtest.name.indexOf("_") + 1);
		
		for(i = 0; i < eval("document.forms.frmact." + lsname).length; i++) {
			if (eval("document.forms.frmact." + lsname)[i].value == liitem && eval("document.forms.frmact." + lsname)[i].checked == true){
				if (lobjtest.value.length < limin || lobjtest.value.length > limax) lbvalid = false;
				setmark(eval("document.forms.frmact." + lsname)[i], lboffset, lbvalid, '', 'isstringother');
				lobjtest.focus();
			}
		}
	}
	else {
		lsname = 'x' + lsname.substr(3, lsname.length - 3);
		if (document.getElementById(lsname) && document.getElementById(lsname).checked == true){
			if (lobjtest.value.length < limin || lobjtest.value.length > limax) lbvalid = false;
			setmark(document.getElementById(lsname), lboffset, lbvalid, '', 'isstringother');
			lobjtest.focus();
		}
	}
	
}
 
function istime(lobjtest, lboffset, lbempty) {
	var lbvalid = false;
   if (lobjtest.value.length==0 && lbempty==true) lbvalid = true;
   if (/^[0-1][0-9]:[0-5][0-9]$/.test(lobjtest.value) || /^2[0-3]:[0-5][0-9]$/.test(lobjtest.value)) lbvalid = true;
   setmark(lobjtest, lboffset, lbvalid, '', 'istime');
}

function islistdate(vobjday, vobjmonth, vobjyear, lboffset, lbempty, lserrmsg){

	var lbvalid = true;
	var viday = parseInt(vobjday.value);
	var vimonth = parseInt(vobjmonth.value);
	var viyear = parseInt(vobjyear.value);

   if (viday == -1 && vimonth == -1 && viyear == -1 && lbempty==true){
      lbvalid = true;
   }else{
		if (viday == -1 || viyear == -1){
			lbvalid = false;
		}else{
			switch (vimonth){
				case -1:
					lbvalid = false;
					break;
				case 4:
				case 6:
				case 9:
				case 11:
					if (viday == 31){
						lbvalid = false;
					}
					break;
				// check for february 29th
				case 2: 
				var lbLeap = (viyear % 4 == 0 && (viyear % 100 != 0 || viyear % 400 == 0));
				if (viday > 29 || (viday == 29 && !lbLeap)){
						lbvalid = false;
				}
				break;
			}
	   }
	}
	setmark(vobjday, lboffset, lbvalid, lserrmsg, 'islistdate');
}

function isdate(lobjtest, lboffset, lbempty) {
	var lbvalid = false;
   if (lobjtest.value.length==0 && lbempty==true){
      lbvalid = true;
   }else{
      if (lobjtest.value.length==10 && /^[0-3][0-9]-[0-1][0-9]-[1-2][0-9]{3}$/.test(lobjtest.value)){
			switch (lobjtest.value.substr(3,2)-1){
				case 0:
					lbvalid = (lobjtest.value.substr(0,2) <= 31);
					break;
				case 1:
					var liYear = lobjtest.value.substr(6,4);
					if ((liYear%4) == 0){
					  if ((liYear%100) == 0){
					    if ((liYear%400) == 0){
							lbvalid = (lobjtest.value.substr(0,2) <= 29);
					    }else{
							lbvalid = (lobjtest.value.substr(0,2) <= 28);
					    }
					  }else{
						lbvalid = (lobjtest.value.substr(0,2) <= 29);
					  }
					}else{
					 lbvalid = (lobjtest.value.substr(0,2) <= 28);
					}
					break;
				case 2:
					lbvalid = (lobjtest.value.substr(0,2) <= 31);
					break;
				case 3:
					lbvalid = (lobjtest.value.substr(0,2) <= 30);
					break;
				case 4:
					lbvalid = (lobjtest.value.substr(0,2) <= 31);
					break;
				case 5:
					lbvalid = (lobjtest.value.substr(0,2) <= 30);
					break;
				case 6:
					lbvalid = (lobjtest.value.substr(0,2) <= 31);
					break;
				case 7:
					lbvalid = (lobjtest.value.substr(0,2) <= 31);
					break;
				case 8:
					lbvalid = (lobjtest.value.substr(0,2) <= 30);
					break;
				case 9:
					lbvalid = (lobjtest.value.substr(0,2) <= 31);
					break;
				case 10:
					lbvalid = (lobjtest.value.substr(0,2) <= 30);
					break;
				case 11:
					lbvalid = (lobjtest.value.substr(0,2) <= 31);
					break;
			}	
		}
	}
   setmark(lobjtest, lboffset, lbvalid, '', 'isdate');
}

function iszip(lobjtest, lboffset, lbempty, lscountry, lserrmsg) {
	var lbvalid = false;
   if (lobjtest.value.length==0)
   {
		if(lbempty == true)
			lbvalid = true;
		else
			lbvalid = false;
	} else {
		if(lscountry == "NL") {
			if (/^\d{4}\s[a-zA-Z]{2}$/.test(lobjtest.value) || /^\d{4}[a-zA-Z]{2}$/.test(lobjtest.value))
				lbvalid = true;
		} else {
			lbvalid = true;
		}
	}
	setmark(lobjtest, lboffset, lbvalid, lserrmsg, 'iszip');
}
 
function isphone(lobjtest, lboffset, lbempty, lscountry, lserrmsg) {
	var lbvalid = false;
   if (lobjtest.value.length==0 && lbempty==true) lbvalid = true;
   if (lscountry == 'NL'){
   if (/^\d{0,4}\s?\-?\s?(\(0\))?[1-9]{1}\d{5,8}$/.test(lobjtest.value) || /^\+?\d{0,2}\s?\-?\s?(\(0\))?[1-9]{1}\d{6,8}$/.test(lobjtest.value)) {
			lbvalid = true;
	}
	}else{
		if (lscountry == 111){
			if (/^\d{2,4}\s?\/?\s?[0-9\.]+$/.test(lobjtest.value)) {
			
				lbvalid = true;
			}
		}else{
			if (/^[+0-9][0-9][0-9\s\-\.\\\/]+$/.test(lobjtest.value)) {
			
				lbvalid = true;
			}
		}
	}
   setmark(lobjtest, lboffset, lbvalid, lserrmsg, 'isphone');
}

function isemail(lobjtest, lobjemail2, lboffset, lbempty, lserrmsg) {
	var lbvalid = false;
	if (lobjtest.value.length==0 && lbempty==true) lbvalid = true;
	if (/^[a-z_0-9\.\-]+@[a-z_0-9\.\-]+\.[a-z][a-z][a-z]*$/i.test(lobjtest.value)) lbvalid = true;
   
	if(lobjemail2){
		lobjemail2.onchange();

	}
	setmark(lobjtest, lboffset, lbvalid, lserrmsg, 'isemail');
}

function issameemail(lobjtest, lobjemail, lboffset, lserrmsg) {
	var lbvalid = false;
	if	(document.getElementById('img' + lobjtest.name) &&
		document.getElementById('img' + lobjtest.name).src.substring(11) != 'invalid.gif' &&
		lobjemail.value.length > 0 &&
		lobjtest.value == lobjemail.value)
		lbvalid = true;
	
	setmark(lobjtest, lboffset, lbvalid, lserrmsg, 'issameemail');
}

function isvalid_init() {
     this.notempty = notempty;
     this.isnumber = isnumber;
     this.islist = islist;
     this.ischeck = ischeck;
     this.ischeckother = ischeckother;
     this.isradio = isradio;
     this.isradioother = isradioother;
     this.isfloat = isfloat;
     this.isminmax = isminmax;
     this.isminmaxempty = isminmaxempty;
     this.isstring = isstring;
     this.isstringother = isstringother;
     this.istime = istime;
     this.islistdate = islistdate;
     this.isdate = isdate;
     this.iszip = iszip;
     this.isphone = isphone;
	 this.isemail = isemail;
	 this.ispassword = ispassword
	 this.issameemail = issameemail;
	 this.issegment = issegment;
     return this;
 }
function trimstring() {
 var lichar, licnt;
 var lsval = this;
 lichar = lsval.length - 1;
 licnt = -1;
 while (lsval.charAt(lichar)==' ' && lichar > licnt) --lichar;
 if (lichar!=(lsval.length-1)) lsval = lsval.slice(0,lichar+1);
 lichar = 0;
 licnt = lsval.length - 1;
 while (lsval.charAt(lichar)==' ' && lichar < licnt) ++lichar;
 if (lichar!=0) lsval = lsval.slice(lichar,lsval.length);
 return lsval;
}

function issegment(lobjtest, liobjmin, liobjmax, lboffset, limin, limax) {
   var lbvalid = false;
   var litel = 0;
	var coll = document.getElementsByTagName("input");
	for (var licount=0; licount < coll.length;licount++){
		if (coll[licount].type == "checkbox" && coll[licount].name.substring(3) >= liobjmin && coll[licount].name.substring(3) <= liobjmax){
			if (coll[licount].value!=-1 && coll[licount].checked==true) litel += 1;
		}
	}
	lbvalid = (litel >= limin);
   if (lbvalid == true && limax >= limin){
		lbvalid = (litel <= limax);
   }
   setmark(lobjtest, lboffset, lbvalid, '', 'issegment');
}

String.prototype.Trim = trimstring;
var isvalid = new Object;
isvalid = isvalid_init();