//globale vars
var _id=0
var _check  = new Object();
var myFirstTime = false

function getValidationrules(){
	var strValidationrules = "";
//	strValidationrules = "Function1" + "___" + "Rule1" + "\t";
	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 += "checkCaps(oElement)" + "___" + "Formateer Aaaa" + "\t";
	strValidationrules += "checkAllCaps(oElement)" + "___" + "Formateer AAAA" + "\t";
	strValidationrules += "checkKenteken(oElement)" + "___" + "Kenteken veld" + "\t";
	strValidationrules += "checkArrayChecked(oElement)" + "___" + "array check" + "\t";
	
	return strValidationrules;
	
}

function FormValidator(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 (!PPElementValidation(arrFormElements[iFormElement])) return false;
		}
	}
	return true;
}


function PPElementValidation(oElement){
	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 (!eval (strCurRule)) {		// hier wordt de validatiefunctie uitgevoerd
						var strMeldingType = oElement.getAttribute('errormsgtype');
						var strMeldingClass = oElement.getAttribute('errormsgstylename');
						var strMeldingTxt = oElement.getAttribute('errormsg');
//						if (strMeldingTxt == "" || strMeldingTxt == null || strMeldingTxt == undefined) strMeldingTxt = get_i18n_text(2,"U heeft het veld niet juist ingevuld!");
						if (strMeldingTxt == "") strMeldingTxt = "U heeft het veld niet juist ingevuld!"
						if (strMeldingType.toLowerCase()=='txtstring') {
							strErrorMsg = "<br><span class='"+strMeldingClass+"'>&nbsp;"+strMeldingTxt+"</span><br>";
							oElement.insertAdjacentHTML ('beforeBegin', strErrorMsg);
							oElement.focus();
							return false;
						} else {
							alert (strMeldingTxt);
							oElement.focus();
							return false;
						}
					}
				}
			}
		}
	}
	return true;
}



// de errorchecks per type

function checkEmail(myField){
	// uit de code snippets: check e-mailadres#2
	// daar staat ook al het comment
	// The JavaScript Source!! http://javascript.internet.com 
	// V1.1.3: Sandeep V. Tamhankar (stamhankar@hotmail.com) 
	// Original:  Sandeep V. Tamhankar (stamhankar@hotmail.com) 
	
	emailStr = myField.value
	var checkTLD=1;
	var knownDomsPat=/^(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum)$/;
	var emailPat=/^(.+)@(.+)$/;
	var specialChars="\\(\\)><@,;:\\\\\\\"\\.\\[\\]";
	var validChars="\[^\\s" + specialChars + "\]";
	var quotedUser="(\"[^\"]*\")";
	var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;
	var atom=validChars + '+';
	var word="(" + atom + "|" + quotedUser + ")";
	var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
	var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$");
	var matchArray=emailStr.match(emailPat);
	if (matchArray==null) {
		return false;
	}
	var user=matchArray[1];
	var domain=matchArray[2];
	for (i=0; i<user.length; i++) {
		if (user.charCodeAt(i)>127) {
			return false;
		}
	}
	for (i=0; i<domain.length; i++) {
		if (domain.charCodeAt(i)>127) {
			return false;
	   }
	}
	if (user.match(userPat)==null) {
		return false;
	}
	var IPArray=domain.match(ipDomainPat);
	if (IPArray!=null) {
	for (var i=1;i<=4;i++) {
		if (IPArray[i]>255) {
			return false;
	   }
	}
	return true;
	}
	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 (checkTLD && domArr[domArr.length-1].length!=2 && domArr[domArr.length-1].search(knownDomsPat)==-1) {
		return false;
	}
	if (len<2) {
		return false;
	}
	return true;
}

function checkKenteken(myField){
	if (myField.value.match(/^[0-9a-zA-Z]{6}$/)) return true;
	else return false;
}

function checkTelephone(myField){
	// een hele eenvoudige telefoonnummercheck
	if (myField.value.match(/^[0-9\-\s\(\)]{10,13}$/)) return true;
	else return false;
}

function checkIsNummeric(myField){
	if (myField.value.match(/^[0-9]+$/)) return true;
	else return false;
}

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 checkPostcode(myField){
 	matchArr =  CheckPostcode2(myField)
	if (matchArr){ 
		//myField.value = matchArr[1] + " " + matchArr[3].toUpperCase()
		myField.value = matchArr[1] + matchArr[3].toUpperCase()
		return true;
	}
	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;
	}
	return true;
}

function checkCaps(myField){
	//verandert 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){
	//verandert 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 checkArrayChecked(myObject){
	myArraysChecked = document.getElementsByName(myObject.name)
	for(i=0;i<myArraysChecked.length;i++){
		if (myArraysChecked[i].checked==true) return true;
	} 
	return false;
}


// einde van de checks per type

