

/**************************************************
*                                                 *
*	functies van het document                      *
*                                                 *
***************************************************/
var optionalImageSrc = "";
var requiredImageSrc = "";

/**************************************************

	formulieren initialiseren 

	alle formulieren van het document initialiseren.
	door alle layers van het document loopen.
***************************************************/


	function initForms(doc)
	{

		if(!doc)
		{
			doc = document;
		}
		for(var f=0; f< doc.forms.length; f++)
		{
			initEachForm(doc.forms[f], doc);
		}
	}

/**************************************************

	een formulier initialiseren 

	methodes en properties toevoegen aan 
	het formulier en aan de formulier elementen
***************************************************/
	function initEachForm(form, doc)
	{
		form.setoptionalcheckbox = setoptionalcheckbox;
		form.setformatfirstcheckbox = setformatfirstcheckbox;
		form.setbeautifiedfirstcheckbox = setbeautifiedfirstcheckbox;
		form.setOptional = setOptional;
		form.setRequired = setRequired;
		form.setBeautified = setBeautified;
		form.setlabelname = setlabelname;
		if ( !(isundefined(typeof(doIt))) )
		{
			form.doIt = doIt;
		}
		form.verify = verify;
		form.verifyElement = verifyElement;
		form.resetElements = resetElements;
		form.setFormat = setFormat;
		form.setMin = setMin;
		form.setMax = setMax;
		form.setBusinessDays = setBusinessDays;
		form.initAllElements = initAllElements;
		form.update = update;
		form.setBullet = setBullet;
		
		form.doc = doc;
		
		form.emptyFields = "";
    		form.errors = "";
    		form.scriptErrors = "";
		form.errorMsg = new ErrorMsg();
		form.getMsg = getMsg;
		
		form.initBullets = initBullets;
		form.bulletPrefix = "bullet_";
		form.bulletSuffix = "";

		form.openPopWindow = openPopWindow;
		form.initPopWindow = initPopWindow;
		form.popWindowTemplate = "";
		form.popWindowWidth = 0;
		form.popWindowHeight = 0;
		form.defaultMsg = null;
		form.setDefaultMsg = setDefaultMsg;
		form.quietMode = false;
		form.setQuiet = setQuiet;
	   	form.initAllElements();
	}

/**************************************************
*                                                 *
*	formulier methodes                             *
*                                                 *
***************************************************/
	function getMsg(msg, name, value)
	{
		var text = "";
		text = eval("this.errorMsg."+msg);
		if(name)
			text = text.replace(/<NAME>/, name);
		if ( !(isundefined(value)) )
			text = text.replace(/<VALUE>/, value);

		return(text);
	}
	function setDefaultMsg(defaultMsg)
	{
		if(defaultMsg)
			this.defaultMsg = defaultMsg;
		else
			this.defaultMsg = "";
	}
	function setQuiet(value) // wel of geen popup bij verify (true of false)
	{
		this.quietMode = value;
	}
	function openPopWindow(msg) 
	{
		var opt = "toolbar=no,menubar=0,scrollbars=1,resizable=1,width=" + this.popWindowWidth + ",height=" + this.popWindowHeight;
		if(msg)
		{
			msg = msg.replace(/\n/g,"<br>");
			msg = escape(msg);
		}
		var url = this.popWindowTemplate + "?" + msg;
		window.open(url,'bericht',opt);
	}

	function initPopWindow(popWindowTemplate, popWindowWidth, popWindowHeight) 
	{
		this.popWindowTemplate = popWindowTemplate;
		this.popWindowWidth = popWindowWidth;
		this.popWindowHeight = popWindowHeight;
	}

	function update()
	{
		if(optionalImageSrc && requiredImageSrc)
		{
			for(var e = 0; e < this.elements.length; e++)
			{
				element = this.elements[e];
	
				this.setBullet(element);
			}	
		}
    	for(var i = 0; i < this.length; i++) 
    	{
	    	element = this.elements[i];
    		element.verified = false;
		}
	}

	function initBullets(optional, required)
	{
		optionalImageSrc = optional;
		requiredImageSrc = required;
	}

	function setBullet(element)
	{
		bulletImage = this.bulletPrefix + element.name + this.bulletSuffix;
		
		if(this.doc.images[bulletImage])
		{
			if(element.optional)
			{
				this.doc.images[bulletImage].src = optionalImageSrc;
			}
			else
			{
				this.doc.images[bulletImage].src = requiredImageSrc;
			}
		}
	}

// toevoeging 27 aug 2001:EB, een extra propertie voor een beautified name
	function initAllElements()
	{
		var element;
		
		for(var e = 0; e < this.elements.length; e++)
		{
			element = this.elements[e];
			initElement(element);
			element.optional = true;
			element.beautified = element.name;
			element.labelname = element.name+"Lbl";
		}

	}

	function initElement(element)
	{

		
		initElementVerify(element);

		if(element.format)
		{
			initElementVerifyFormat(element);
			initElementVerifyConstraints(element);
		}
	}

/****************/
				function verifyCheckbox()
				{
					var check = true;
				  	var checkboxName, checkboxChecked, checkboxElement;
				
					if(!this.verified)
					{
						checkboxChecked = false;
				
						for(var j=0; j<this.form.elements.length; j++)
						{
							e2 = this.form.elements[j];
							if(e2.name == this.name)
							{
								if(e2.checked)
								{
									checkboxChecked = true;
								}
								e2.verified = true;
							}
						}
						if(!checkboxChecked)
						{
							this.form.emptyFields += "\n          " + this.beautified;
							check = false;
						}
						checkboxChecked = false;
						return(check);
					}
				}

				function verifyText()
				{
					var check = true;

					if ((this.value == null) || (this.value == "") || isblank(this.value)) 
					{  
						this.form.emptyFields += "\n          " + this.beautified;
						check = false;
					}
					return(check);
				}

				function verifySelect()
				{
					var check = true;
					if (this.selectedIndex == 0)
					{
						this.form.emptyFields += "\n          " + this.beautified;
						check = false;
					}
					return(check);
				}
				function verifySelectMultiple()
				{
					var check = true;
					if (this.selectedIndex == -1)
					{
						this.form.emptyFields += "\n          " + this.beautified;
						check = false;
					}
					return(check);
				}
	function initElementVerify(element)
	{
			if((element.type == "checkbox") || (element.type == "radio"))
			{
				element.verify = verifyCheckbox;
			}
			else if((element.type == "file") || (element.type == "password") || (element.type == "text") || (element.type == "textarea"))
			{
				element.verify = verifyText;
			}
			else if(element.type == "select-one")
			{
				element.verify = verifySelect;
			}
			else if(element.type == "select-multiple")
			{
				element.verify = verifySelectMultiple;
			}
	}

/**************************************************

	check of de waarden van het element tussen min en max zijn.

	als het element is van type numeric, dan zijn
	min en max waardes. 

	als het element is van type string of stringstrict, dan zijn
	min en max het aantal characters. 
	als het element is van type MMDDYYYY, DDMMYYYY: min en max zijn het aantal dagen.
	als element.businessDays is true, dan zijn het werkdagen

***************************************************/
				function verifyNumericConstraints()
				{
					var check = true;

					if(this.min)
					{
						if(this.value.length < this.min)
						{
							this.form.errors += this.form.getMsg("errorStringMin", this.beautified, this.min) + "\n";
							check = false;
						}
					}
					if(this.max)
					{
						if(this.value.length > this.max)
						{
							this.form.errors += this.form.getMsg("errorStringMax", this.beautified, this.max) + "\n";
							check = false;
						}
					}
					return(check);
				}

				function verifyStringConstraints()
				{
					var check = true;

					if(this.min)
					{
						if(this.value.length < this.min)
						{
							this.form.errors += this.form.getMsg("errorStringMin", this.beautified, this.min) + "\n";
							check = false;
						}
					}
					if(this.max)
					{
						if(this.value.length > this.max)
						{
							this.form.errors += this.form.getMsg("errorStringMax", this.beautified, this.max) + "\n";
							check = false;
						}
					}
					return(check);
				}
				function verifyDateConstraints()
				{
					var check = true;

					var datePat = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{2}|\d{4})$/;
					var matchArray = this.value.match(datePat); 
	
					if(matchArray)
					{
						switch(this.format)
						{
							case "MMDDYYYY":
								var maand = matchArray[1];
								var dag   = matchArray[3];
								var jaar  = matchArray[4];
							break;
							case "DDMMYYYY":
								var dag = matchArray[1];
								var maand   = matchArray[3];
								var jaar  = matchArray[4];
							break;
						}
						var nowDate = new Date();
						var formDate = new Date();
						formDate.setYear(jaar);
						formDate.setMonth(maand-1);
						formDate.setDate(dag);
						var dagen = daysBetween(nowDate, formDate);

						if ( !(isundefined(this.min )) )
						{
							if(this.businessDays)
							{
								var deliveryDate = getDeliveryDateObj(this.min);
								var deliveryDays = daysBetween(nowDate, deliveryDate);
								if(deliveryDays > dagen)
								{
									this.form.errors += this.form.getMsg("errorBussinessDaysMin", this.beautified, this.min) + "\n";
									check = false;
								}
							}
							else
							{
								if(dagen < this.min)
								{
									this.form.errors += this.form.getMsg("errorDaysMin", this.beautified, this.min) + "\n";
									check = false;
								}
							}
						}
						if ( !(isundefined(this.max )) )
						{
							if(this.businessDays)
							{
								var deliveryDate = getDeliveryDateObj(this.max);
								var deliveryDays = daysBetween(nowDate, deliveryDate);
								if(deliveryDays < dagen)
								{
									this.form.errors += this.form.getMsg("errorBussinessDaysMax", this.beautified, this.max) + "\n";
									check = false;
								}
							}
							else
							{
								if(dagen > this.max)
								{
									this.form.errors += this.form.getMsg("errorDaysMax", this.beautified, this.max) + "\n";
									check = false;
									
									if ( !(isundefined(this.labelname )) )
									{
										if ( !(isundefined( document.getElementById(this.labelname)  ))) 
										{
											document.getElementById(this.labelname).aantallabelfouten = "een";
											
											document.getElementById(this.labelname).className = "labelError";
											// alleen hier doorgevoerd voor foutmelding bij datum is toekomst
								
										}
									}
								}
							}
						}
					}
					return(check);
				}






				function verifyDateConstraints2()
				{
					var check = true;

					var datePat = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{2}|\d{4})$/;
					var matchArray = this.value.match(datePat); 
	
					if(matchArray)
					{
						switch(this.format)
						{
							case "MMDDYY":
								var maand = matchArray[1];
								var dag   = matchArray[3];
								var jaar  = matchArray[4];
							break;
							case "DDMMYY":
								var dag = matchArray[1];
								var maand   = matchArray[3];
								var jaar  = matchArray[4];
							break;
						}


						jaar = 20 + jaar;



						var nowDate = new Date();
						var formDate = new Date();
						formDate.setYear(jaar);
						formDate.setMonth(maand-1);
						formDate.setDate(dag);
						var dagen = daysBetween(nowDate, formDate);

						if ( !(isundefined(this.min )) )
						{
							if(this.businessDays)
							{
								var deliveryDate = getDeliveryDateObj(this.min);
								var deliveryDays = daysBetween(nowDate, deliveryDate);
								if(deliveryDays > dagen)
								{
									this.form.errors += this.form.getMsg("errorBussinessDaysMin", this.beautified, this.min) + "\n";
									check = false;
								}
							}
							else
							{
								if(dagen < this.min)
								{
									this.form.errors += this.form.getMsg("errorDaysMin", this.beautified, this.min) + "\n";
									check = false;
								}
							}
						}
						if ( !(isundefined(this.max )) )
						{
							if(this.businessDays)
							{
								var deliveryDate = getDeliveryDateObj(this.max);
								var deliveryDays = daysBetween(nowDate, deliveryDate);
								if(deliveryDays < dagen)
								{
									this.form.errors += this.form.getMsg("errorBussinessDaysMax", this.beautified, this.max) + "\n";
									check = false;
								}
							}
							else
							{
								if(dagen > this.max)
								{
									this.form.errors += this.form.getMsg("errorDaysMax", this.beautified, this.max) + "\n";
									check = false;
									
									if ( !(isundefined(this.labelname )) )
									{
										if ( !(isundefined( document.getElementById(this.labelname)  ))) 
										{
											document.getElementById(this.labelname).aantallabelfouten = "een";
											
											document.getElementById(this.labelname).className = "labelError";
											// alleen hier doorgevoerd voor foutmelding bij datum is toekomst
								
										}
									}
								}
							}
						}
					}
					return(check);
				}




	function initElementVerifyConstraints(element)
	{
			if((element.format == "numeric"))
			{
				element.verifyConstraints = verifyNumericConstraints;
			}
			else if((element.format == "string") || (element.format == "stringstrict"))
			{
				element.verifyConstraints = verifyStringConstraints;
			}
			else if((element.format == "MMDDYYYY") || (element.format == "DDMMYYYY"))
			{
				element.verifyConstraints = verifyDateConstraints;
			}
			else if((element.format == "MMDDYY") || (element.format == "DDMMYY"))
			{
				element.verifyConstraints = verifyDateConstraints2;
			}
			else 
			{
				if(element.min || element.max)
				{
					element.form.scriptErrors += "\n          " + this.form.getMsg("verifyConstraints", element.beautified) + "\n";
				}
			}	
		
	}

/**************************************************

	check of een text, textarea, password, file,  element
	het juiste formaat bevat.
	formaten zijn:
	
	numeric: een nummer
	string: een string, met of zonder nummers, maar geen nummer alleen
	stringstrict: hetzelfde als string, maar characters atotz, A tot Z, en 0 tot 9
	email: geldig email adres
	cc: meerdere emails adressen met puntkommas
	MMDDYY, DDMMYY, MMDDYYYY, DDMMYYYY: datums
	
***************************************************/


						function verifyTrue()
						{
							return true;
						}

						function verifyDDMMYYYYofnietaanwezigFormat()
						{

							var check = true;

				
							for(var j=0; j<this.form.elements.length; j++)
							{
								
								if(this.form.elements[j].name == this.name + "onbekend")
								{
									if(this.form.elements[j].checked)
									{
										return true;
									} else
									{

										var checkDate = isValidDate(this.value, "DDMMYYYY");

										if (!checkDate) 
										{
											this.form.errors += this.form.getMsg("errorDDMMYYYYofnietaanwezigFormat", this.beautified) + "\n";
											check = false;
										}
										return(check);

									}
									
								}
							}


							return(check);
						}



						function verifyStringofnietaanwezigFormat()
						{ 
							var check = true;

				
							for(var j=0; j<this.form.elements.length; j++)
							{
								
								if(this.form.elements[j].name == this.name + "onbekend")
								{
									if(this.form.elements[j].checked)
									{
										return true;
									} else
									{

										var checkinvul = (this.value.toString().length != 0);

										if (!checkinvul) 
										{
											this.form.errors += this.form.getMsg("errorStringofnietaanwezigFormat", this.beautified) + "\n";
											check = false;
										}
										return(check);

									}
									
								}
							}

							return(check);
						}



						function verifyMinstenseenFormat()
						{
							var check = true;
							check = minstenseencheckboxaangevinkt(((this.name).toString()).substring(0 ,4), this.form)
							if (!check)
							{
								this.form.errors += this.form.getMsg("errorMinstenseenFormat", this.beautified) + "\n";

							}
							return(check);
						}

						function verifyBankFormat()
						{
							var check = true;
							var sbank = "";
							sbank = BankNr(this.value);
					 		if ( (isundefined( sbank )  )) 
							{
				            			this.form.errors += this.form.getMsg("errorBankFormat", this.beautified) + "\n";
								check = false;
				            		} else
							{
								this.value = sbank;
							}

							return(check);

						}



						function verifyTelefoonNederland()
						{
							var check = true;
							
							var matchArray = this.value.match(/0\d{9}/);

							

					 		if ((!matchArray) || (this.value.toString().length != 10))
							{
				            			this.form.errors += this.form.getMsg("errorTelFormat", this.beautified) + "\n";
								check = false;
				            		} 

							return(check);

						}



						function verifyNumericFormat()
						{
							var check = true;

					 		if (isNaN(this.value))
							{
				            	this.form.errors += this.form.getMsg("errorNumericFormat", this.beautified) + "\n";
								check = false;
				            }
							return(check);
						}
						function verifyStringFormat()
						{
							var check = true;
							if(this.value == this.value.match(/[\d|,|\.]+/))
							{
								this.form.errors += this.form.getMsg("errorStringFormat", this.beautified) + "\n";
								check = false;
				            }
							return(check);
						}
						function verifyStringstrictFormat()
						{
							var check = true;

							if(this.value != this.value.match(/\w+/) || (this.value == this.value.match(/[\d|,|\.]+/)))
							{
								this.form.errors += this.form.getMsg("errorStringStrictFormat", this.beautified) + "\n";
								check = false;
				            }
							return(check);
						}
						function verifyEmailFormat()
						{
							var check = true;

							var r1 = new RegExp("(@.*@)|(\\.\\.)|(@\\.)|(^\\.)");
							var r2 = new RegExp("^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)$");
							if(r1.test(this.value) || !r2.test(this.value))
							{
								this.form.errors += this.form.getMsg("errorEmailFormat", this.beautified) + "\n";
								check = false;
							}
							return(check);
						}
						function verifyCcFormat()
						{
							var check = true;
							var arrbcc = this.value.split(";");

							for(var i = 0; i < arrbcc.length; i++)
							{
								var arrcheck = arrbcc[i];
								var r1 = new RegExp("(@.*@)|(\\.\\.)|(@\\.)|(^\\.)");
								var r2 = new RegExp("^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$");
								if(r1.test(arrcheck) || !r2.test(arrcheck))
								{
									this.form.errors += this.form.getMsg("errorCCFormat", this.beautified) + "\n";
									check = false;
								}
							}
							return(check);
						}
						function verifyMMDDYYFormat()
						{
							var check = true;
							var checkDate = isValidDate(this.value, "MMDDYY");

							if (!checkDate) 
							{
								this.form.errors += this.form.getMsg("errorMMDDYYFormat", this.beautified) + "\n";
								check = false;
							}
							return(check);
						}
						function verifyDDMMYYFormat()
						{
							var check = true;
							var checkDate = isValidDate(this.value, "DDMMYY");

							if (!checkDate)
							{
								this.form.errors += this.form.getMsg("errorDDMMYYFormat", this.beautified) + "\n";
								check = false;
							}
							return(check);
						}
						function verifyMMDDYYYYFormat()
						{
							var check = true;
							var checkDate = isValidDate(this.value, "MMDDYYYY");

							if (!checkDate) 
							{
								this.form.errors += this.form.getMsg("errorMMDDYYYYFormat", this.beautified) + "\n";
								check = false;
							}
							return(check);
						}
						function verifyDDMMYYYYFormat()
						{
							var check = true;
							var checkDate = isValidDate(this.value, "DDMMYYYY");

							if (!checkDate) 
							{
								this.form.errors += this.form.getMsg("errorDDMMYYYYFormat", this.beautified) + "\n";
								check = false;
							}
							return(check);
						}

						function verifyEuroFormat()
						{
							var check = true;
							
							var euroPat = /^((\d+)|(\d{1,3}(\.\d{3})+))(\,\d{2})?\s*$/;
							var matchArray = this.value.match(euroPat); 
							
							if(!matchArray)
							
							//var r1 = new RegExp(/^((\d+)|(\d{1,3}(\.\d{3})+))(\,\d{2})?\s*$/);
							//if(!r1.test(this.value))
							{
								this.form.errors += this.form.getMsg("errorEuroFormat", this.beautified) + "\n";
								check = false;
							}
							return(check);
						}
						
						function verifyPostcodeFormat()
							{
							var check = true;
							var pcPat = /^([1-9][0-9]{3})( ?)([a-zA-Z]{2})$/;
							var matchArray = this.value.match(pcPat); 
									
							if(!matchArray)
								//var r1 = new RegExp(/^([1-9][0-9]{3})( ?)([a-zA-Z]{2})$/);
								//if(!r1.test(this.value))
							{
								this.form.errors += this.form.getMsg("errorPostCodeFormat", this.beautified) + "\n";
								check = false;
							}
							return(check);
						}

						function verifyMaxkarsFormat()
							{
							var check = true;
							if((this.value.toString().length > this.form.maxkars.value))
							{
								this.form.errors += this.form.getMsg("errorMaxkarsFormat", this.beautified, this.value.toString().length - this.form.maxkars.value) + "\n";
								check = false;
							}
							return(check);
						}


	function initElementVerifyFormat(element)
	{


				switch(element.format)
				{
					case "numeric":
						element.verifyFormat = verifyNumericFormat;
					break;
					case "string":
						element.verifyFormat = verifyStringFormat;
					break;
					case "stringstrict":
						element.verifyFormat = verifyStringstrictFormat;
					break;
					case "email":
						element.verifyFormat = verifyEmailFormat;
					break;
					case "cc":
						element.verifyFormat = verifyCcFormat;
					break;
					case "MMDDYY":
						element.verifyFormat = verifyMMDDYYFormat;
					break;
					case "DDMMYY":
						element.verifyFormat = verifyDDMMYYFormat;
					break;
					case "MMDDYYYY":
						element.verifyFormat = verifyMMDDYYYYFormat;
					break;
					case "DDMMYYYY":
						element.verifyFormat = verifyDDMMYYYYFormat;
					break;
					case "DDMMYYYYofnietaanwezig":
						element.verifyFormat = verifyDDMMYYYYofnietaanwezigFormat;
						element.checkanyway = "checkanyway"			
					break;
					case "stringofnietaanwezig":
						element.verifyFormat = verifyStringofnietaanwezigFormat;
						element.checkanyway = "checkanyway"				
					break;
					case "euro":
						element.verifyFormat = verifyEuroFormat;
					break;
					case "postcode":
						element.verifyFormat = verifyPostcodeFormat;
					break;
					case "minstenseen":
						element.verifyFormat = verifyMinstenseenFormat;
						element.checkanyway = "checkanyway"
					break;
					case "bankrekening":
						element.verifyFormat = verifyBankFormat;
					break;
					case "maxkars":
						element.verifyFormat = verifyMaxkarsFormat;
					break;
					case "niets":
						element.verifyFormat = verifyTrue;
						element.checkanyway = ""
						
					break;
					case "telned":
						element.verifyFormat = verifyTelefoonNederland;
					break;
					default:
						element.verifyFormat = '';
				}			
		
	}


/**************************************************

	setOptional: de optional property van een of meerdere elementen zetten op true;
	setRequired: de optional property van een of meerdere elementen zetten op true;
	flag call:
	indien het argument is _ALL of _NONE worden alle elementen van het formulier op resp. true of false gezet.
	element call:
	een of meer namen van elementen.

***************************************************/
	function setOptional()
	{
		var flagCall = false;
		var element;

		if(arguments.length == 1)
		{
			switch(arguments[0])
			{
				case "_ALL":
					for(var e=0; e<this.elements.length; e++)
					{
						this.elements[e].optional = true;
						if (!(isundefined( this.elements[e].labelname )  )) 
						{
							if ( !(isundefined(  document.getElementById(this.elements[e].labelname )) ))
							{
								document.getElementById(this.elements[e].labelname).aantallabelfouten = "geen";
								//alert(document.getElementById(this.elements[e].labelname).name);
							}
						}
						
					}
					flagCall = true;
				break;
				case "_NONE":
					for(var e=0; e<this.elements.length; e++)
					{
						this.elements[e].optional = false;
						if (!(isundefined( this.elements[e].labelname )  )) 
						{
							if ( !(isundefined(  document.getElementById(this.elements[e].labelname )) ))
							{
								document.getElementById(this.elements[e].labelname).aantallabelfouten = "geen";
								//alert(document.getElementById(this.elements[e].labelname).name);
							}
						}
						
					}
					flagCall = true;
				break;
				default:	break;
			}
		}
		if(!flagCall)
		{
			for(var e=0; e<this.elements.length; e++)
			{
				element = this.elements[e];

				for(var a=0; a<arguments.length; a++)
				{
					if(element.name == arguments[a])
					{
						element.optional = true;
						if (element.labelname != undefined)
						{
							if ( !(isundefined(  document.getElementById( document.getElementById(element.labelname)  )) ))
							{
								document.getElementById(element.labelname).aantallabelfouten = "geen";
								//alert(document.getElementById(element.labelname).name);
							}
						}
						
					}
				}
			}
		}
	}

	function setRequired()
	{
		var flagCall = false;
		var element;

		if(arguments.length == 1)
		{
			switch(arguments[0])
			{
				case "_ALL":
					for(var e=0; e<this.elements.length; e++)
					{
						this.elements[e].optional = false;
						if (!(isundefined( this.elements[e].labelname )  )) 
						{
							if ( !(isundefined(  document.getElementById(this.elements[e].labelname )) ))
							{
								document.getElementById(this.elements[e].labelname).aantallabelfouten = "geen";
								//alert(document.getElementById(this.elements[e].labelname).name);
							}
						}
						
					}
					flagCall = true;
				break;
				case "_NONE":
					for(var e=0; e<this.elements.length; e++)
					{
						this.elements[e].optional = true;
						if (!(isundefined( this.elements[e].labelname )  )) 
						{
							if ( !(isundefined(  document.getElementById(this.elements[e].labelname )) ))
							{
								document.getElementById(this.elements[e].labelname).aantallabelfouten = "geen";
								//alert(document.getElementById(this.elements[e].labelname).name);
							}
						}
						
					}
					flagCall = true;
				break;
				default:	break;
			}
		}
		if(!flagCall)
		{
			for(var e=0; e<this.elements.length; e++)
			{
				element = this.elements[e];

				for(var a=0; a<arguments.length; a++)
				{
					if(element.name == arguments[a])
					{
						element.optional = false;
						
						element.labelname = element.name+"Lbl";
						if (element.labelname != undefined)
						{
							if ( !(isundefined(  document.getElementById( document.getElementById(element.labelname)  )) ))
							{
								document.getElementById(element.labelname).aantallabelfouten = "geen";
								//alert(document.getElementById(element.labelname).name);
							}
						}
					}
				}
			}
		}
	}
	
	// er zijn 1 of 2 argumenten, bij 2 elementen is de beautify naam het 2e element, de 1e is de naam van het veld
	function setBeautified()
	{
		var element;

		for(var e=0; e<this.elements.length; e++)
		{
			element = this.elements[e];


			if(element.name == arguments[0] && arguments.length>1)
			{
				element.beautified = arguments[1];

			}
		}
	}
	

	function setlabelname()
	{
		var element;
		for(var e=0; e<this.elements.length; e++)
		{
			element = this.elements[e];

			if(element.name == arguments[0] && arguments.length>1)
			{


				element.labelname = arguments[1];


				document.getElementById(arguments[1]).aantallabelfouten = "geen"



			//// omdat er door meer elementen naar dezelfde label verwezen kan worden
			////zo wordt ie fout en daarna weer goed gezet


			}




		}
	}	 

/**************************************************

	format zetten van een element

***************************************************/
	function setFormat(element, format)
	{
		this.elements[element].format = format;
	}

/**************************************************

	min zetten van een element

***************************************************/
	function setMin(element, min)
	{
		this.elements[element].min = min;
	}

/**************************************************

	max zetten van een element

***************************************************/
	function setMax(element, max)
	{
		this.elements[element].max = max;
	}

/**************************************************

	zijn de min en de max van een datum element 
	geteld in werkdagen

***************************************************/
	function setBusinessDays(element, flag)
	{
		this.elements[element].businessDays = flag;
	}




function getlabelname(s)
{
return s.labelname;
}
/**************************************************

	check het formulier
	
***************************************************/
	function verify()
	{


    	var msg="";
	   	var element;
	   
		this.emptyFields = "";
    	this.errors = "";
    	this.scriptErrors = "";

    	for(var i = 0; i < this.elements.length; i++) 
    	{
			element = this.elements[i];
			this.verifyElement(element);
		}
		this.update();

    	if (!this.emptyFields && !this.errors && !this.scriptErrors) return true;

		if(!this.defaultMsg)
			msg = this.getMsg("errorDefaultMsg");
		else
			msg = this.defaultMsg+"\n";

		if(this.scriptErrors) 
		{
			msg += this.getMsg("scriptErrorMsg") + this.scriptErrors + "\n"
			if (this.scriptErrors) msg += "\n";
		}

    	if (this.emptyFields) 
    	{
    	    msg += this.getMsg("emptyFieldsMsg") + this.emptyFields + "\n";
    	    if (this.errors) msg += "\n";
    	}
    	
    	msg += this.errors;
		this.emptyFields = "";
		this.errors = "";

		if(!this.quietMode)
		{
			if(this.popWindowTemplate)
			{
				this.openPopWindow(msg);
			}
			else
			{
		    	alert(msg);
			}
		}
    	return false;
	}

	function verifyElement(element)
	{

//
		var verify=true, verifyFormat=true, verifyConstraints=true;
		var check;
		var label = getlabelname(element);



		
	   initElement(element);



		if(!element.optional && element.verify)
		{
				verify = element.verify();
		}		
		if (((element.verifyFormat && element.value) || (element.verifyFormat && (element.checkanyway == "checkanyway" ))) && verify) //ook maar toegevoegd
		{



			verifyFormat = element.verifyFormat();
		}
		//if(element.verifyConstraints && element.value)
		if ((element.verifyConstraints && element.value) && verify && verifyFormat) // toegevoegd, nu alleen datum is toekomst melding als datum goed ingevuld
		{
			verifyConstraints = element.verifyConstraints();
		}	
		check = verify && verifyFormat && verifyConstraints;
		if(check)
		{


			if (!document.getElementById(label))
			{
				this.setOptional(element.name); 
			}else
			{



				if (document.getElementById(label).aantallabelfouten == "geen")
				{
		
					document.getElementById(label).className = "labelOk";
					this.setOptional(element.name); 
				} //toevoeging voor markeren labels 20041004JH
			}


		}else
		{
			if(!element.optional || !verifyFormat)
			{

				if (!document.getElementById(label))
				{

				}else
				{

					document.getElementById(label).aantallabelfouten = "een";

					document.getElementById(label).className = "labelError"; //toevoeging voor markeren labels 20041004JH
							
				}
					
			}
				
		}
				
		return(check)
	}
	
/**************************************************

	formulier elementen die niet optional zijn resetten.

***************************************************/
	function resetElements()
	{
		var element;

		for(var e=0; e<this.elements.length; e++)
		{
			element = this.elements[e];
			if(!element.optional)
			{
				switch(element.type)
				{
					case "checkbox":		element.checked = false; break;
					case "file":			break;
					case "hidden":			element.value = ""; break;
					case "password":		element.value = ""; break;
					case "radio":			element.checked = false; break;
					case "reset":			break;
					case "submit":			break;
					case "button":			break;
					case "select-one":	element.selectedIndex = 0; break;
					case "select-multiple":		
						element.selectedIndex = -1; 
						break;
					case "text":			element.value = ""; break;
					case "textarea":		element.value = ""; break;
					default:					element.value = "";
				}
			}
		}
	}


	
/**************************************************
*                                                 *
*	utility functies                               *
*                                                 *
***************************************************/

/**************************************************

	check of string s is leeg

***************************************************/
	function isblank(s)
	{
		for(var i = 0; i < s.length; i++) 
		{
			var c = s.charAt(i);
			if ((c != ' ') && (c != '\n') && (c != '\t')) return false;     
		}
		return true;
	}

/**************************************************

	geldig datum

***************************************************/
	function isValidDate(dateStr, dateFormat)
	// Checks for the following valid date formats:
	// MM/DD/YY   MM/DD/YYYY   MM-DD-YY   MM-DD-YYYY
	// Also separates date into month, day, and year variables
	{
		var datePat;
		var month;
		var day;
		var year;

		if (dateFormat=="MMDDYY" || dateFormat=="DDMMYY")
		{
			datePat = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{2}|\d{4})$/;
		}
		else if (dateFormat=="MMDDYYYY" || dateFormat=="DDMMYYYY")
		{
			datePat = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{4})$/;
		}
	
		// is the format ok?
		var matchArray = dateStr.match(datePat); 
		
		if (matchArray == null) 
		{
			//alert("Date is not in a valid format.")
			return false;
		}
		
		// parse date into variables
		if (dateFormat=="MMDDYY" || dateFormat=="MMDDYYYY")
		{
			month = matchArray[1]; 
			day = matchArray[3];
		}
		else if (dateFormat=="DDMMYY" || dateFormat=="DDMMYYYY")
		{
			month = matchArray[3]; 
			day = matchArray[1];
		}	
		year = matchArray[4];
		
		// check month range
		if (month < 1 || month > 12) 
		{
			//alert("Month must be between 1 and 12.");
			return false;
		}

		if (day < 1 || day > 31) 
		{
			//alert("Day must be between 1 and 31.");
			return false;
		}
		
		if ((month==4 || month==6 || month==9 || month==11) && day==31)
		{
		//	alert(this.form.getMsg("error31Days", month));
			return false
		}
		
		// check for february 29th
		if (month == 2) 
		{ 
			var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
			if (day>29 || (day==29 && !isleap)) 
			{
			//	alert(this.form.getMsg("errorFebruary", year, day));
				return false;
			}
		}
		
		// date is valid
		return true;  
	}

/**************************************************

	2 datums vergelijken
	Yehuda Shiran, Ph.D.
	http://webreference.com/js/tips/010220.html
	
***************************************************/
	var SECOND = 1000; // the number of milliseconds in a second
	var MINUTE = SECOND * 60; // the number of milliseconds in a minute
	var HOUR = MINUTE * 60; // the number of milliseconds in an hour
	var DAY = HOUR * 24; // the number of milliseconds in a day
	var WEEK = DAY * 7; // the number of milliseconds in a week

	function daysBetween(date1, date2) 
	{
		var nTime = date1.getTime(); // current time (UTC)
		var dTime = date2.getTime(); // specified time (UTC)
		var bTime = dTime - nTime;   // time difference
		return Math.round(bTime / DAY);
	}

	function getDeliveryDateObj(businessDaysLeftForDelivery) 
	{
		var now = new Date();
		var dayOfTheWeek = now.getDay();
		var calendarDays = businessDaysLeftForDelivery;
		var deliveryDay = dayOfTheWeek + businessDaysLeftForDelivery;
		if (deliveryDay >= 6) {
			businessDaysLeftForDelivery -= 6 - dayOfTheWeek;  //deduct this-week days
			calendarDays += 2;  //count this coming weekend
			deliveryWeeks = Math.floor(businessDaysLeftForDelivery / 5); //how many whole weeks?
			calendarDays += deliveryWeeks * 2;  //two days per weekend per week
		}
		now.setTime(now.getTime() + calendarDays * DAY);
		return now;
	}

 

function BankNr(str){   
    var returnString = "";
    var weggeschreven = false;
    for (var i = 0; i < str.length; i++) {                
        var c = str.charAt(i);
        if (!isNaN(parseInt(c))) 
        {
        if (weggeschreven || (parseInt(c) != 0))
			{
			returnString += c;
			weggeschreven = true;
			}
		}
    }
    
    if (returnString.length <=7) 
    {
	if (returnString.length > 0 )
		{
		if ((parseInt(returnString) != 0) && (!isNaN(parseInt(returnString))))
			{
				return parseInt(returnString).toString();
			} else
			{
				return "";
			}
		}else
		{
			return "";
		}
		//postbank
    } else {
    

		if ((returnString.length ==9) || (returnString.length ==10))
		{
			var returnString2 = returnString;
			if (returnString.length ==9) returnString2 = "0" + returnString;
			var elfpr = 0;
			for (var i = 0; i < 10; i++) 
			{ 
				elfpr = elfpr + parseInt(returnString2.charAt(i)) * (10 - i);
			}

			if (elfpr % 11 == 0 )
			{
				return parseInt(returnString).toString();
			} else 
			{
				return "";
			}
		}else
		{
			return "";
		}
    }
    
}

function minstenseencheckboxaangevinkt(sdeelnaam, xform)
{

	var b = false;

	var jlen;

	var i;
	var element

	jlen = sdeelnaam.length;


	for (i = 0; i < xform.elements.length ; i++)
	{
		element = xform.elements[i];

		if ( (isundefined(element.name )) )
		{

		}else
		{


			if((((element.name).toString()).substring(0 ,jlen) == sdeelnaam))
			{

				if(element.type.toString() == "checkbox" )
				{
					if (element.checked){
						b = true;
						return b;
					}
				}
			}

		}
	}
	return b;
}


function setoptionalcheckbox(sdeelnaam)
{


	var jlen;

	var i;
	var element

	jlen = sdeelnaam.length;


	for (i = 0; i < this.elements.length ; i++)
	{
		element = this.elements[i];

		if ( (isundefined(element.name )) )
		{

		}else
		{


			if((((element.name).toString()).substring(0 ,jlen) == sdeelnaam))
			{

				if(element.type.toString() == "checkbox" )
				{
					this.setOptional(element.name);
				}
			}

		}
	}


}

function setformatfirstcheckbox(sdeelnaam, hetformaat)
{


	var jlen;

	var i;
	var element

	jlen = sdeelnaam.length;


	for (i = 0; i < this.elements.length ; i++)
	{
		element = this.elements[i];

		if ( (isundefined(element.name )) )
		{

		}else
		{


			if((((element.name).toString()).substring(0 ,jlen) == sdeelnaam))
			{

				if(element.type.toString() == "checkbox" )
				{
					this.setFormat(element.name, hetformaat);
					return 0;
				}
			}

		}
	}


}

function setbeautifiedfirstcheckbox(sdeelnaam, hetformaat, hetlabel)
{


	var jlen;

	var i;
	var element

	jlen = sdeelnaam.length;


	for (i = 0; i < this.elements.length ; i++)
	{
		element = this.elements[i];

		if ( (isundefined(element.name )) )
		{

		}else
		{


			if((((element.name).toString()).substring(0 ,jlen) == sdeelnaam))
			{

				if(element.type.toString() == "checkbox" )
				{
					this.setBeautified(element.name, hetformaat);
					this.setlabelname(element.name,hetlabel);
					return 0;
				}
			}

		}
	}


}

//////////////////////////////////////////////////////////////////////////////////////////////////


function datumupdate()
{
	

	if ( isValidDate(document.getElementById("geboortedatumdag").value.toString() +  '/' +   document.getElementById("geboortedatummaand").value.toString() +  '/' +   document.getElementById("geboortedatumjaar").value.toString(),"DDMMYYYY") )
	{
		if (!(verifyAge(document.getElementById("geboortedatumdag").value.toString() +  '/' +   document.getElementById("geboortedatummaand").value.toString() +  '/' +   document.getElementById("geboortedatumjaar").value.toString(),"DDMMYYYY") > document.getElementById("minleeftijd").value))
		{
document.getElementById("divvoornaam").style.display="";
		} else
		{//document.getElementById("divvoornaam").style.display="none";
			}
	} else
	{//document.getElementById("divvoornaam").style.display="none";
}

}




				function verifyAge(o,y)
				{
					var check = 99;

					var datePat = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{2}|\d{4})$/;
					var matchArray = o.match(datePat); 
	
					if(matchArray)
					{
						switch(y)
						{
							case "MMDDYYYY":
								var maand = matchArray[1];
								var dag   = matchArray[3];
								var jaar  = matchArray[4];
							break;
							case "DDMMYYYY":
								var dag = matchArray[1];
								var maand   = matchArray[3];
								var jaar  = matchArray[4];
							break;
						}
						var nowDate = new Date();
						var formDate = new Date();
						formDate.setYear(jaar);
						formDate.setMonth(maand-1);
						formDate.setDate(dag);
						



						if((formDate.getMonth() > nowDate.getMonth()) || (((formDate.getMonth() == nowDate.getMonth()) && ( formDate.getDate() > nowDate.getDate() ))))
							{

								check=nowDate.getFullYear() - formDate.getFullYear() - 1;
							}else
							{
								check=nowDate.getFullYear() - formDate.getFullYear() ;
							}


					}

					return(check);
				}


