//globale vars
var _id=0
var _check  = new Object();
var myFirstTime = false;

// [JV] this document.write creates errors in some AJAX situations; this has to be fixed (?)
// besides of this: we have now in every cms website BPManager validation? That is quite useless, is'nt it?

//if(typeof valObj == "undefined"){
//	document.write('<scr'+'ipt type="text/javascript" src="/js/data/validation.js" ></scr'+'ipt>');
//}

function getValidationrules(){
	var strValidationrules = "";
	strValidationrules = "checkEmail(oElement)" + "___" + "e-mail adres" + "\t";
	strValidationrules += "checkTelephone(oElement)" + "___" + "telefoonnummer" + "\t";
	strValidationrules += "checkPostcode(oElement)" + "___" + "postcode veld" + "\t";
	strValidationrules += "checkIsNummeric(oElement)" + "___" + "nummeriek veld" + "\t";
	strValidationrules += "checkNotEmpty(oElement)" + "___" + "verplicht veld" + "\t";
	strValidationrules += "checkDD(oElement)" + "___" + "0-31 (dag)" + "\t";
	strValidationrules += "checkMM(oElement)" + "___" + "0-12 (maand)" + "\t";
	strValidationrules += "checkYYYY(oElement)" + "___" + "jaartal" + "\t";
	strValidationrules += "checkJJJJ(oElement)" + "___" + "jaartal" + "\t";
	strValidationrules += "checkCaps(oElement)" + "___" + "Formateer Aaaa" + "\t";
	strValidationrules += "checkAllCaps(oElement)" + "___" + "Formateer AAAA" + "\t";
	strValidationrules += "checkCheckboxNotEmpty(oElement, prefix)" + "___" + "checkbox" + "\t";
	strValidationrules += "checkRadio(oElement)" + "___" + "radio" + "\t";
	strValidationrules += "checkDate(oElement)" + "___" + "datum" + "\t";
	strValidationrules += "checkTime(oElement)" + "___" + "tijd" + "\t";
	strValidationrules += "checkSofinr(oElement)" + "___" + "sofinummer" + "\t";
	strValidationrules += "checkKenteken(oElement)" + "___" + "kenteken" + "\t";
	strValidationrules += "checkKentekentwee(oElement)" + "___" + "kenteken twee" + "\t";
	return strValidationrules;
	
}

function PPFormValidator(oForm){
	if (oForm.tagName.toLowerCase()!='form') return;
	var arrFormElements = oForm.elements;
	for (var iFormElement=0;iFormElement< arrFormElements.length; iFormElement++){
		if (arrFormElements[iFormElement].getAttribute('validationrules')) {
			if (arrFormElements[iFormElement].getAttribute('mandatory') == "false" && arrFormElements[iFormElement].value=="") {
				continue;
			}
			if (!PPElementValidation(arrFormElements[iFormElement])) return false;
		}
	}
	return true;
}

function PPElementValidation(oElement, showErrorMessage){
	var successfull = true;
	if(typeof showErrorMessage == "undefined"){
		showErrorMessage = true;
	}
	var validationRequired = true;
	var failed = false;

	var strValidationRequired = oElement.getAttribute('validationrequired');
	if (strValidationRequired == "no" &&
		typeof oElement.type != 'undefined' &&
		oElement.type.toLowerCase () == 'text' && // only 'input type=text' at the moment
		oElement.value == '') // if empty, don't even check
			validationRequired = false;

	var strValidationRules = oElement.getAttribute('validationrules');
	if (strValidationRules !="") {
		var result = strValidationRules.split ("\t");
		if (result != null) {
			for (i=0;i<result.length;i++) {
				result[i].replace(/\&\#9\;/ig,"");
				arrOption = result[i].split ("___");

				if (arrOption.length>1)
					strCurRule = arrOption[0];
				else
					strCurRule = result[i];

				if (strCurRule) {
					if (validationRequired) {	// hier wordt de validatiefunctie uitgevoerd
						try {
							var successfull = eval (strCurRule);
						} catch(err) {}
						
						if(successfull == false){
							if(showErrorMessage != false){
								var strMeldingType = oElement.getAttribute('errormsgtype');
								if (strMeldingType == null)
									strMeldingType = 'alert';

								var strMeldingClass = oElement.getAttribute('errormsgstylename');
								var strMeldingTxt = oElement.getAttribute('errormsg');
								var strMeldingErrorLocation= oElement.getAttribute('errorlocation');
								if (strMeldingTxt == "")
									strMeldingTxt = "U heeft het veld niet juist ingevuld!"

								if (strMeldingType.toLowerCase()=='txtstring') {
									if(typeof strMeldingErrorLocation == "undefined" || strMeldingErrorLocation == null || strMeldingErrorLocation == ""){
										var br = document.createElement ('BR');
										oElement.parentNode.insertBefore ( br, oElement );
										var span = document.createElement ('SPAN');
										br.parentNode.insertBefore(span, br.nextSibling);
										span.innerHTML = "&nbsp;"+strMeldingTxt;
										span.className = strMeldingClass;
										var br2 = document.createElement ('BR');
										span.parentNode.insertBefore(br2, span.nextSibling);
										try{
											oElement.focus();
										}
										catch(err){
											//element not visible and cant have focus
										}
									}
									else{
										var locationArr = strMeldingErrorLocation.split(":::");
										var errorElement = document.getElementById(locationArr[0]);
										if(errorElement != null){
											strErrorMsg = "<div id=\""+locationArr[1]+"\"><img src=\"/images/wizard/alert.gif\" width=\"21\" height=\"22\" alt=\"Fout!\" border=\"0\"><p class=helpbody id=\""+locationArr[1]+"\">&nbsp;"+strMeldingTxt+"</p></div>";
											var found = false;
											for(var i = 0; i < errorElement.childNodes.length; i++){
												if(errorElement.childNodes[i].id == locationArr[1]){
													found = true;
													// Replace the text if the element already exists. It can be changed.
													errorElement.childNodes[i].innerHTML = "<img src=\"/images/wizard/alert.gif\" width=\"21\" height=\"22\" alt=\"Fout!\" border=\"0\"><p class=helpbody id=\""+locationArr[1]+"\">&nbsp;"+strMeldingTxt+"</p>";
													break;
												}
											}
											if(!found){
												errorElement.innerHTML = errorElement.innerHTML + strErrorMsg;
											}
										}
									}
								} else {
									alert (strMeldingTxt);
									try{
										oElement.focus();
									}
									catch(err){
										//element not visible and cant have focus
									}
								}
							}
							return false;
						}
					}
					// Only remove error messages if they should be shown also.
					if (showErrorMessage) {
						//Else it is valid
						var strMeldingErrorLocation= oElement.getAttribute('errorlocation');
						if(typeof strMeldingErrorLocation != "undefined" && strMeldingErrorLocation != null && strMeldingErrorLocation != ""){
							var locationArr = strMeldingErrorLocation.split(":::");
							var errorElement = document.getElementById(locationArr[0]);
							if(errorElement != null){
								for(var i = 0; i < errorElement.childNodes.length; i++){
									if(errorElement.childNodes[i].id == locationArr[1]){
										errorElement.removeChild(errorElement.childNodes[i]);
										break;
									}
								}
							}
						}
					}
				}
			}
		}
	}
	return successfull;
}

// de errorchecks per type


/*	ValideerKenteken
	Valideer of de ingevoerde tekst alleen uit letters van het alfabet bestaat. */
function checkKenteken(invoerVeld)
{	
	var invoer = invoerVeld.value;
	if(invoer.length != 8) {
		return false;
	}
	//parseer formaat XX-XX-XX
	
	//index positie 2 en 5 moeten een "-" bevatten
	if((invoer.charAt(2) != '-') || (invoer.charAt(5) != '-'))
	{
		if((invoer.charAt(2) != '-') || (invoer.charAt(6) != '-'))
		{
			if((invoer.charAt(1) != '-') || (invoer.charAt(5) != '-')){
				return false;
			} else {
				//controleer karakters op letter of cijfer paren X-XXX-XX
				if (!ValideerAlfabetisch(invoer.substr(0, 1)) && !checkCijfers(invoer.substr(0, 1))) {
					return false;
				}
				if (!ValideerAlfabetisch(invoer.substr(2, 3)) && !checkCijfers(invoer.substr(2, 3))) {
					return false;
				}
				if (!ValideerAlfabetisch(invoer.substr(6, 1)) && !checkCijfers(invoer.substr(6, 1))) {
					return false;
				}
			}
		} else {
			//controleer karakters op letter of cijfer paren XX-XXX-XX
			if (!ValideerAlfabetisch(invoer.substr(0, 2)) && !checkCijfers(invoer.substr(0, 2))) {
				return false;
			}
			if (!ValideerAlfabetisch(invoer.substr(3, 3)) && !checkCijfers(invoer.substr(3, 3))) {
				return false;
			}
			if (!ValideerAlfabetisch(invoer.substr(7, 1)) && !checkCijfers(invoer.substr(7, 1))) {
				return false;
			}			
		}
	} else {
		//controleer karakters op letter of cijfer paren XX-XX-XX
		if (!ValideerAlfabetisch(invoer.substr(0, 2)) && !checkCijfers(invoer.substr(0, 2)))
		{
			return false;
		}
		if (!ValideerAlfabetisch(invoer.substr(3, 2)) && !checkCijfers(invoer.substr(3, 2)))
		{
			return false;
		}
		if (!ValideerAlfabetisch(invoer.substr(6, 2)) && !checkCijfers(invoer.substr(6, 2)))
		{
			return false;
		}
	}
	return true;
}


//kenteken mag ook zonder koppelstreepjes worden ingevoerd
function checkKentekentwee(invoerVeld) {	
	var invoer = invoerVeld.value;
	if(invoer.length != 6) {
		if(invoer.length == 8)
			return checkKenteken(invoerVeld);
		else
			return false;
	}
	//parseer formaat XXXXXX
	
	//controleer karakters op letter of cijfer paren
	if (!ValideerAlfabetisch(invoer.substr(0, 1)) && !checkCijfers(invoer.substr(0, 1))) {
		return false;
	}
	if (!ValideerAlfabetisch(invoer.substr(1, 1)) && !checkCijfers(invoer.substr(1, 1))) {
		return false;
	}
	if (!ValideerAlfabetisch(invoer.substr(2, 1)) && !checkCijfers(invoer.substr(2, 1))) {
		return false;
	}
	if (!ValideerAlfabetisch(invoer.substr(3, 1)) && !checkCijfers(invoer.substr(3, 1))) {
		return false;
	}
	if (!ValideerAlfabetisch(invoer.substr(4, 1)) && !checkCijfers(invoer.substr(4, 1))) {
		return false;
	}
	if (!ValideerAlfabetisch(invoer.substr(5, 1)) && !checkCijfers(invoer.substr(5, 1))) {
		return false;
	}
	return true;
}

function checkCijfers(cijfers) {
	for (i = 0; i < cijfers.length ; i++) {
		if (!((cijfers.charCodeAt(i) > 47) && (cijfers.charCodeAt(i) < 58)))
			return false;
	}
	
	return true;
}

/*	ValideerAlfabetisch
	Valideer of de ingevoerde tekst alleen uit letters van het alfabet bestaat. */
function ValideerAlfabetisch(invoerVeld) {	
	for (i = 0; i < invoerVeld.length ; i++) {
		if (!(((invoerVeld.charCodeAt(i) > 64) && (invoerVeld.charCodeAt(i) < 91)) ||
			((invoerVeld.charCodeAt(i) > 96) && (invoerVeld.charCodeAt(i) < 123))))
			return false;
	}
	
	return true;
}

//Used by checkEmail(), but might be reusable. Checks if a valid ip address in given.
function checkIPAddress(ipaddress, IPArray) {
	var ipDomainPat=/^\[?(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]?$/;
	if(typeof IPArray == "undefined"){
		var IPArray=ipaddress.match(ipDomainPat);
	}
	if (IPArray !== null) {
		for (var i=1;i<=4;i++) {
			if (IPArray[i] < 0 || ((i == 4 && IPArray[i]>254) || (i != 4 && IPArray[i]>255))){
				return false;
		   }
		}
		return true;
	}
	return false;
}

//Used by checkEmail(), but might be reusable. Checks the part before the @ sign
function checkEmailUsername(user){
	var userPat = /^[.!#$%*\/?|^{}`~&'+\-=_\d\w]+$/;
	if(userPat.test(user) && user.charAt(0) != "." && user.charAt(user.length - 1) != "."){
		var newUser = user.toLowerCase();
		if(newUser == user){
			return true;
		}else{
			return newUser;
		}		
	}else{
		return false;
	}
}

//Checks emailaddresses( username@domainname/ipaddress )
function checkEmail(element) {
	if(typeof element != "undefined" && typeof element.value != "undefined"){
		var value = element.value;
	}else{
		return false;
	}
	var emailPat=/^(.+)@(.+)$/;
	var ipDomainPat=/^\[?(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]?$/;

	var matchArray=value.match(emailPat);
	if (matchArray==null) {
		return false;
	}
	var user=matchArray[1];
	var domain=matchArray[2];
	if(checkEmailUsername(user) === false){
		return false;
	}
	var IPArray = domain.match(ipDomainPat);
	if (IPArray !== null) {
		return checkIPAddress(null, IPArray);
	}else if(checkDomain(domain) === false){
		return false;
	}else{
		var newValue = value.toLowerCase();
		if(newValue == value){
			return true;
		}else{
			return newValue;
		}
	}
}

function checkTelephone(element){
	if(typeof element != "undefined" && typeof element.value != "undefined"){
		var orgTelefoonnummer = element.value;
	}else{
		return false;
	}
	var internationalPat = /^(\+|00)(\d+)$/;
	var nationalPat = /^((0(\d{9}))|(0800(\d{4,}))|(090(\d{5,})))$/;
	var removePat = /[^+\d]/g;
	telefoonnummer = orgTelefoonnummer.replace(removePat, "");
	var success = false;
	if(internationalPat.test(telefoonnummer)){
		success = true;
	}else{
		success = nationalPat.test(telefoonnummer);
	}
	if(success){
		return (orgTelefoonnummer !== telefoonnummer) ? telefoonnummer : true;
	}else{
		return success;
	}
}

function checkIsNummeric(myField){
	if (!myField.value.match(/^[0-9]+$/)) {
		 return false;
	}
	if(typeof myField.maxNumber != "undefined") {
			if(parseInt(myField.value) > parseInt(myField.maxNumber)) {
				return false;
			}
	}
	if(typeof myField.minNumber != "undefined") {
			if(parseInt(myField.value) < parseInt(myField.minNumber)) {
				return false;
			}
	}
	
	return true;
}


function checkIsNummeric2(myField,num){
	//nummeriek , eventueel met een komma en twee decimalen (00 of 00,00)
	if (myField.value.match(/^[0-9]+(\,[0-9]{2})?$/)) return true;
	else return false;
}

function checkDD( myField){
	if (myField.value.match(/^[0-9]{1,2}$/)){
		if (myField.value >=1 && myField.value <= 31) return true;
	}
	else return false;
}


function checkMM( myField){
	if (myField.value.match(/^[0-9]{1,2}$/)){
		if (myField.value >=1 && myField.value <= 12) return true;
	}
	else return false;
}

function checkYYYY( myField){
	if (myField.value.match(/^[0-9]{4}$/)){
		jaar= new Date()
		if (myField.value <= jaar.getFullYear()) return true;
		
	}
	else return false;
}

function checkJJJJ( myField){
	if (myField.value.match(/^[0-9]{4}$/)){
		jaar= new Date()
		if (myField.value <= 3000) return true;
		
	}
	else return false;
}


function checkPostcode(element){
	if(typeof element != "undefined" && typeof element.value != "undefined"){
		var value = element.value;
	}else{
		return false;
	}
	var matchArr = value.match(/^([0-9]{4})(\s*)([a-zA-Z]{2})$/);
	if (matchArr)
		return matchArr[1] + " " + matchArr[3].toUpperCase();
	else
		return false;
}

function CheckPostcode2(myField){
	return myField.value.match(/^([0-9]{4})(\s*)([a-zA-Z]{2})/)
}

function checkNotEmpty(myField){
	//is niet helemaal goed. Ook checken op rare tekens, anders dan [a-zA-Z0-9] - bv: _-()*&
	myValue = myField.value
	if (!myValue.match('[a-zA-Z0-9]') || myValue.length<1){
		return false;
	}

	if(typeof myField.maxChars != "undefined"){
		if(myValue.length > parseInt(myField.maxChars)){
			return false;
		}
	}
	if(typeof myField.minChars != "undefined"){
		if(myValue.length < parseInt(myField.minChars)){
			return false;
		}
	}
	return true;
}

function checkCaps(myField){
	//veranderd de ingevulde woorden in onderkast, en de eerste letter in een hoofdetter
	myValue = myField.value
	if (!myValue.match('[a-zA-Z0-9]') || myValue.length<1){
		return false;
	}else{
		return makeCaps(myField);
	}
}

function checkAllCaps(myField){
	//veranderd de ingevulde woorden in kapitalen
	myValue = myField.value
	if (!myValue.match('[a-zA-Z0-9]') || myValue.length<1){
		return false
	}else{
		return makeAllCaps(myField)
	}
}

function makeCaps (myField){
	myValueArray = myField.value.split(" ")
	var waarden = "";
	for(items in myValueArray){
		startCap = myValueArray[items].slice(0,1).toUpperCase();
		rest = myValueArray[items].slice(1, myValueArray[items].length).toLowerCase();
		if (waarden=="") waarden = startCap + rest;
		else waarden += " " + startCap + rest;
	}
	myValueArray = waarden.split("-")
	if (myValueArray.length>1){
		waarden="";
		for(items in myValueArray){
			startCap = myValueArray[items].slice(0,1).toUpperCase();
			rest = myValueArray[items].slice(1, myValueArray[items].length).toLowerCase();
			if (waarden=="") waarden = startCap + rest;
			else waarden += "-" + startCap + rest;
		}
	}
	myValueArray = waarden.split("- ")
	if (myValueArray.length>1){
		waarden="";
		for(items in myValueArray){
			startCap = myValueArray[items].slice(0,1).toUpperCase();
			rest = myValueArray[items].slice(1, myValueArray[items].length).toLowerCase();
			if (waarden=="") waarden = startCap + rest;
			else waarden += "- " + startCap + rest;
		}
	}
	myField.value = waarden;
	return true;
}

function makeAllCaps (myField){
	myField.value = myField.value.toUpperCase()
	return true;
}

function checkRadio(myObject){
	myRadios = document.getElementsByName(myObject.name)
	for(i=0;i<myRadios.length;i++){
		if (myRadios[i].checked==true) return true;
	}
	return false;
}

function checkChecked(myObject){
	if (myObject.checked!=true){
		return false;
	} 
	return true;
}

function checkSelected(myObject){
	//	** Nog invulling aan geven **
	return true;
}

/**
 * 	@function		checkSelectBox
 *	@description	Controleert of er inderdaad een ('niet lege') keuze is gemaakt middels een select-pulldown als deze niet disabled is
 *	@input			Object om te checken
 *	@return 		{ true | false }
 */
function checkSelectBox(myObject){
	if (myObject.disabled != true) {
		if (myObject.options[myObject.selectedIndex]) {
			if (myObject.options[myObject.selectedIndex].innerHTML == '') {
				return false;
			}
		}
	}
	return true;
}



/**
 * 	@function		checkAtLeastOneChecked
 *	@description	Controleert of er niet minimaal 1 vinkvakje in een aangegeven element (span of div-je!) aangevinkt is of niet.
 *	@input			Object om te checken (meestal een DIV om de checkboxes heen)
 *	@return 		{ true | false }
 */
 function checkAtLeastOneChecked(myObject){
	if (myObject) {
		children = myObject.all;
		theValues = new Object ();
		for (var i=0;i< children.length; i++){
			if (children[i].checked==true) {
				return true;
			}
		}
	}
	return false;
}


function checkDomainnameSyntax(element){
	if(typeof element != "undefined" && typeof element.value != "undefined"){
		var domain = element.value;
		return checkDomain(domain);
	}else{
		return false;
	}
}

function checkDomain(domain) {
	var nummericPat=/^\d+$/;
	var specialChars = "\\(\\)><@,;:\\\\\\\"\\.\\[\\]";
	var validChars = "\[^\\s" + specialChars + "\]";
	var atom = validChars + '+';
	var knownDomsPat = /^(arpa|aero|asia|biz|cat|com|coop|edu|gov|info|int|jobs|mil|mobi|museum|name|net|org|pro|tel|travel)$/;
	for (i=0; i<domain.length; i++) {
		if (domain.charCodeAt(i)>127) {
			return false;
	   }
	}
	var atomPat=new RegExp("^" + atom + "$");
	var domArr=domain.split(".");
	var len=domArr.length;
	for (i=0;i<len;i++) {
		if (domArr[i].search(atomPat)==-1) {
			return false;
		}
	}
	if (domArr[domArr.length-1].length!=2 && domArr[domArr.length-1].search(knownDomsPat)==-1) {
		return false;
	}
	if (len<2) {
		return false;
	}
	if (nummericPat.test(domArr[len - 1])) {
		return false;
	}
	var newDomain = domain.toLowerCase();
	if(newDomain == domain){
		return true;
	}else{
		return newDomain;
	}
}

/**
 * 	@function		checkEmailnameSyntax
 *	@description	Controleert of ingevulde e-mailnaam (gedeelte voor de @) wel een correcte syntax heeft.
 *					Voorlopig alleen letters en cijfers toestaan, leeg mag ook
 *	@input			Object om te checken
 *	@return 		{ true | false }
 */
 function checkEmailnameSyntax(myObject){
	if (myObject) {
		myValue = myObject.value

		if(myValue==""){
			return true;	//Leeg mag.
		}
		//Alleen a-z, A-Z en 0-9
		if ( !myValue.match('[a-zA-Z0-9]') && myValue.length<2 ){
			return false;	//Did not match criteria
		}

		//De volgende leestekens blocken:
		var iChars = "!?/^~`\\*|,\":<>[]{}`\';()@&$#% ";
		for (var i = 0; i < myValue.length; i++) {
			if (iChars.indexOf(myValue.charAt(i)) != -1) {
				return false;	//Did not match criteria
			}
		}

		//Convert de tekst naar lowercase, mocht er 1 of meerdere capital(s) in voor komen.
		myObject.value = myValue.toLowerCase();
	}
	return true;
}


/**
 * 	@function		checkBanknummer
 *	@description	Gebruik de 11-proef om te controleren of het meegegeven nummer mogelijkerwijs een legitiem banknummer is
 *	@input			myObject : HTML-Object met daarin als value de string met het te controleren banknummer
 *	@return 		true indien legitiem banknummer, false indien geen banknummer
 */
function checkBanknummer(myObject) {

	if (myObject) {
		BankNumber = myObject.value;
		if( BankNumber ) {
			var BankNumber_Length = BankNumber.length;

			//Negen getallen inclusief de punten is maximaal 12 lang. "123456789" als banknummer mag trouwens ook niet...
			if( BankNumber_Length > 12 || BankNumber_Length < 6 || BankNumber=="123456789" || BankNumber=="12.34.56.789" ) {

				return false;

			} else {

				var ValidChars = "0123456789."; //Deze mogen dus wel
				var Char;
				for (i = 0; i < BankNumber.length; i++) { 
					Char = BankNumber.charAt(i); 
					if (ValidChars.indexOf(Char) == -1){
						return false;
					}
				}

				BankNumber	= BankNumber.replace(/\./g, ''); //Haal eerst de punten er uit (12.34.56.789 wordt 123456789)
				var total	= 0;
				for(var c=0;c<BankNumber.length;c++) { //Doe nu de 11-proef.
					total	= total + parseInt( ( BankNumber.substring(c,c+1) * (9-c) ) );
				}
				if( ( (total/11)+'' ).indexOf('.') > 0 ) {
					return false;
				} else {
					return true;
				}

			}

		} else {
			return false; //Geen Banknummer als value gevondenmeegegeven
		}

	} else {
			return false; //Geen HTML-Object meegegeven
	}

}


/**
 * 	@function		checkSamePasswordValues
 *	@description	Controleert van twee invulvelden binnen het opgegeven HTML-Object (span of div)
 *					of de password bevestiging gelijk is aan het password zelf. De beide invulvelden moeten
 *					een attribuut met de naam "component_data_name" hebben, en elk heeft daarvoor een VERPLICHTE value.
 *					Deze values staan vast, en moeten hetzelfde blijven. 
 *					Als deze 2 values er niet zijn, dan pikt deze controle de waarden niet op en wordt een false teruggegeven!!!
 *					Voorbeeld van een correct stuk HTML:
 *
 *	<span id="wachtwoordspan" validationrules="checkSamePasswordValues(oElement)___verplicht veld&#9;" errormsg="FOUT!!!" errormsgtype="alert">
 *		<input type="password" name="co__1" id="co__1" component_data_name="ppadmin_password">
 *		<input type="password" name="co__2" id="co__2" component_data_name="ppadmin_password_check">
 *	</span>
 *
 *	@input			myObject : HTML-Object met daarin de te controleren Password-values
 *	@return 		true/false
 */
function checkSamePasswordValues(myObject) {

	if (myObject) {
		children = myObject.all;
		var password				= '';
		var password_confirmation	= '';

		//Haal de ingevulde waarden voor de passwords eerst op:
		for (var i=0;i< children.length; i++){
			var component_data_name		= '';
			oCurcomponent = children[i];
			component_data_name = oCurcomponent.getAttribute("component_data_name");
			if( component_data_name && (component_data_name!="") ){
				switch (component_data_name) {
				case 'ppadmin_password':			//Eerste verplichte veldnaam (zodat dit gaat werken)
					password = oCurcomponent.value;
					break;
				case 'ppadmin_password_check':		//Tweede verplichte veldnaam (zodat dit gaat werken)
					password_confirmation = oCurcomponent.value;
					break;
				default:
					break;
				}
			}
		}

		//Controleer nu de Passwords :
		if ( password && password!='' ) {									//Hadden we een password gevonden?
			if ( password_confirmation && password_confirmation!='' ) {		//Hadden we een password bevestiging gevonden?
				if( password == password_confirmation ) {					//Waren ze dan ook exact gelijk?
					return true;											//ja, dus true.
				}
			}
		}

	}
	return false;
}

function checkCheckboxNotEmpty(myObject, prefix, minCount, maxCount) {
	if (typeof prefix == 'undefined')
		return (true);
		
	if (typeof minCount == 'undefined') minCount = 1;
	if (typeof maxCount == 'undefined') maxCount = 99;

	var objForm=myObject.form;
	var countChecks=0;
	var found = false;
	var result;
		
	for (i=0; i<objForm.elements.length;i++) {
		if (objForm.elements[i].name.indexOf(prefix) >= 0) {
			found = true;
			if (objForm.elements[i].checked==true) {
				countChecks++;
			}
		}		
	}

	if (found) {
		result = (countChecks >= minCount) && (countChecks <= maxCount);
	} else {
		result = false;
	}
		
	return (result);
}

function checkSofinr(myObject){
	sofinr = myObject.value; 
	laatstegetal = sofinr.substr(8);
	
	if (sofinr.length == 8)
		sofinr = '0' + sofinr;
	
	checksum = 0;
	if (isNaN(sofinr) == true || sofinr.length!=9) { 
		return false;
	} 
	else { 
		for(i=0;i<8;i++) { 
	 		checksum += (sofinr.charAt(i)*(9-i)); 
		} 
		if(checksum%11 != laatstegetal)
			return false;
		else
			return true;
	}
}

function checkDate(myObject) {
	var testarr=myObject.value.split("-");
	if (testarr.length != 3) {
		if(myObject.value!='') {
			return false;
		}
		return false;
	} else {
		if (isNaN(testarr[0]) || isNaN(testarr[1]) || isNaN(testarr[2]) || testarr[0] < 1 || testarr[1] < 1 || testarr[2] < 1) {
			return false;
		} else {
			if ((testarr[0] > 31) || (testarr[1] >12) || (testarr[2]<1900) || (testarr[2] > 2099)) {
				return false;
			} else {
				if (( testarr[2] < 1900 ) || ( testarr[2] > 2099 )) {//kleiner dan 2000 
					return false;
				}
				if (( testarr[1] == 4 || testarr[1] == 6 || testarr[1] == 9 || testarr[1] == 11 ) && ( testarr[0] > 30 ))	{ 
					return false;
				}
				if (testarr[1] == 2) {
					if ((testarr[2] % 4 == 0) && (testarr[2] % 100 != 0) || (testarr[2] % 400 == 0)) {
						if (testarr[0] >29)	{
							return false;
						}
					} else {
						if (testarr[0] >28)	{
							return false;
						}
					}
				}

			}
		}
	}
//alert("checkDate");
	var minPast = myObject.getAttribute("minPast");
	var maxPast = myObject.getAttribute("maxPast");
	var minFuture = myObject.getAttribute("minFuture");
	var maxFuture = myObject.getAttribute("maxFuture");
	// Should we check on dates if they are some time in the past or future?
	if (minPast !== null|| 
			minFuture !== null ||
			(maxPast !== null && maxFuture !== null)) {
		// If the date is valid, then we must check to so if the date lies in the 
		// valid ranges if defined.
		var currentDate = new Date();
		var givenDate = new Date();
		var oneDay = 24 * 60 * 60 * 1000;
		givenDate.setFullYear(testarr[2], testarr[1] - 1, testarr[0]);
		
		var daysDiff = Math.ceil((givenDate.getTime() - currentDate.getTime()) / (oneDay));
		var yearsDiff = Math.floor((currentDate.getTime() - givenDate.getTime()) / (365.25 * 24 * 60 * 60 * 1000));
		
		if (minPast !== null) {
			// The date must be in the past. It can't be in the future.
			var useYears = (minPast.indexOf("J") >= 0);
			var _minPast = parseInt(minPast.replace("J", ""));
			
			// Invert the daysDiff because we are looking in the past.
			daysDiff = -daysDiff;
			
			// If the given date is smaller then the minimum past date, then 
			// this date is invalid.
			if (!useYears && daysDiff < _minPast) {
				// Alert used for testing.
				//alert('Datum dient minimaal ' + minPast + ' dag(en) in het verleden te liggen.');
				myObject.setAttribute("errormsg",'Datum dient minimaal ' + _minPast + ' dag(en) in het verleden te liggen.');
				return false;
			} else if (useYears && yearsDiff < _minPast) {
				// Alert used for testing.
				//alert('Datum dient minimaal ' + minPast + ' jaar in het verleden te liggen.');
				myObject.setAttribute("errormsg", 'Datum dient minimaal ' + _minPast + ' jaar in het verleden te liggen.');
				return false;
			}
			
			if (maxPast !== null) {
				
				// The date can't be to far in the past either.
				useYears = (maxPast.indexOf("J") >= 0);
				var _maxPast = parseInt(maxPast.replace("J", ""));
				
				// If the given date is greater then the maximum past date, then 
				// this date is invalid.
				if (!useYears && daysDiff > _maxPast) {
					// Alert used for testing.
					myObject.setAttribute("errormsg",'Datum mag maximaal ' + _maxPast + ' dag(en) in het verleden liggen.');
					return false;
				} else if (useYears && yearsDiff > _maxPast) {
					// Alert used for testing.
					myObject.setAttribute("errormsg",'Datum mag maximaal ' + _maxPast + ' jaar in het verleden liggen.');
					return false;
				}
			}
		} else if (minFuture !== null) {
			// The date must be in the future. It can't be in the past.
			var useYears = (minFuture.indexOf("J") >= 0);
			var _minFuture = parseInt(minFuture.replace("J", ""));
			
			// If the given date is smaller then the minimum future date, then 
			// this date is invalid.
			if (!useYears && daysDiff < _minFuture) {
				// Alert used for testing.
				//alert('Datum dient minimaal ' + minFuture + ' dag(en) in de toekomst te liggen.');
				myObject.setAttribute("errormsg", 'Datum dient minimaal ' + _minFuture + ' dag(en) in de toekomst te liggen.');
				return false;
			} else if (useYears && yearsDiff < _minFuture) {
				// Alert used for testing.
				//alert('Datum dient minimaal ' + minFuture + ' jaar in de toekomst te liggen.');
				myObject.setAttribute("errormsg", 'Datum dient minimaal ' + _minFuture + ' jaar in de toekomst te liggen.');
				return false;
			}
			
			if (maxFuture !== null) {
				// The date can't be to far in the future either.
				useYears = (maxFuture.indexOf("J") >= 0);
				var _maxFuture = parseInt(maxFuture.replace("J", ""));
				
				// If the given date is greater then the maximum future date, 
				// then this date is invalid.
				if (!useYears && daysDiff > _maxFuture) {
					// Alert used for testing.
					//alert('Datum mag maximaal ' + maxFuture + ' dag(en) in de toekomst liggen.');
					myObject.setAttribute("errormsg", 'Datum mag maximaal ' + _maxFuture + ' dag(en) in de toekomst liggen.');
					return false;
				} else if (useYears && yearsDiff > _maxFuture) {
					// Alert used for testing.
					//alert('Datum mag maximaal ' + maxFuture + ' jaar in de toekomst liggen.');
					myObject.setAttribute("errormsg", 'Datum mag maximaal ' + _maxFuture + ' jaar in de toekomst liggen.');
					return false;
				}
			}
		} else if (maxPast !== null && maxFuture !== null) {
			// The date must lie within the given period.
			var useYears = (maxPast.indexOf("J") >= 0);
			
			// Invert maxPast so it can be used within the period validation.
			var _maxPast = -parseInt(maxPast.replace("J", ""));
			var _maxFuture = parseInt(maxFuture.replace("J", ""));
			
			if (!useYears && (daysDiff < maxPast || daysDiff > _maxFuture)) {
				// The date doesn't lies lie within the valid period.
				//alert('Datum mag maximaal ' + (-maxPast) + ' jaar in het verleden en maximaal ' + maxFuture + ' jaar in de toekomst liggen.');
				myObject.setAttribute("errormsg", 'Datum mag maximaal ' + (-_maxPast) + ' jaar in het verleden en maximaal ' + maxFuture + ' jaar in de toekomst liggen.');
				return false;
			} else if (useYears && (yearsDiff < maxPast || yearsDiff > _maxFuture)) {
				// The date doesn't lies lie within the valid period.
				//alert('Datum mag maximaal ' + (-maxPast) + ' jaar in het verleden en maximaal ' + maxFuture + ' jaar in de toekomst liggen.');
				myObject.setAttribute("errormsg", 'Datum mag maximaal ' + (-_maxPast) + ' jaar in het verleden en maximaal ' + maxFuture + ' jaar in de toekomst liggen.');
				return false;
			}
		}
	}
	
	return true;
}


function checkTime(myObject) {
	var testArr=myObject.value.split(":");
	if (testArr.length == 2) {
	
		if (isNaN(testArr[0]) || isNaN(testArr[1])) {
			return false;
		}
		// hh:mm
		if (testArr[0] < 0 || testArr[0] > 23) {
			return false;
		} else
		if (testArr[1] < 0 || testArr[1] > 59) {
			return false;
		}
	} else if (testArr.length == 3) {
	
		if (isNaN(testArr[0]) || isNaN(testArr[1]) || isNaN(testArr[2])) {
			return false;
		}
	
		// hh:mm:ss
		if (testArr[0] < 0 || testArr[0] > 23) {
			return false;
		} else
		if (testArr[1] < 0 || testArr[1] > 59) {
			return false;
		} else
		if (testArr[2] < 0 || testArr[2] > 59) {
			return false;
		}
	} else {
		// error
		return false;
	}
	return true;
	
}

function checkIsNummeric3(myField){
	//nummeriek , eventueel met een komma en twee decimalen (00 of 00,00)
	if (myField.value.match(/^[0-9]+([\.\,][0-9]{2})?$/)) return true;
	else return false;
}

function checkTelephone2(myField){
	// een hele eenvoudige telefoonnummercheck
	if (myField.value.match(/^\+?[0-9\-\s\(\)]{10,15}$/)) return true;
	else return false;
}

function checkIsNummeric4(myField){
	//nummeriek , eventueel met een komma en twee decimalen (00 of 00,00)
	if (myField.value.match(/^P?[0-9]+$/)) return true;
	else return false;
}

