/*CHECKFIELD vars

vArgChecker v1.1

R	varchar veld verplicht
E	email, : option emailnamefield ,emailnamefield2 doublechecker
NE	email optioneel
P	Postcode verplicht
N	nummer verplicht
NN	nummer optioneel
T	telefoon verplicht
NT	telefoon optioneel
I	Radiobutton verplicht
C	checkbox verplicht
BL	Geboortedatum+ legal age check 18 jaar
F	Filetypes + verplicht
NF  Filetypes + optioneel
BANK check bankrekening  (elf-proef)

function returns 
object.myStatus true or false
object.message = htmlmessage code
*/

function vArgChecker(myArgs,cssOk,cssError,translateFields) {
	if (translateFields == undefined) translateFields = {};

	function isEmail( email ) {
		var re1 = /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)|(\,)/;
		var re2 = /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/;
		var l = true;
		if (email.length < 8) l = false;
		return ( !re1.test(email) && re2.test(email) && l );
	}
	
	function isPostcode( postcode ) {
		var re2 = /^([1-9])([0-9]){3}\h*([a-zA-Z]){2}$/;
		return (re2.test(postcode));
	}
	
	function isTelefoon( telefoon ) {
		var tel = telefoon.replace("-","").replace(" ","");
		var re2 = /^([0]|[0]{2}[3][1]|[+][3][1])[0-9]{9}$/;
		return (re2.test(tel));
	}
	
	
	function checkBirthDay(v) {
		if (Number(v) && v > 0 && v < 32 ){
			return true;
		}else {
			return false;
		};
	}
	
	
	function checkBirthMonth(v) {
		if (Number(v) && v > 0 && v < 13 ){
			return true;
		}else {
			return false;
		};
	}
	
	function checkBirthYear(v) {
		var now_date = new Date();
		if (Number(v) && v > 1900 && v < now_date.getFullYear() ){
			return true;
		}else {
			return false;
		};
	}
	
	function checkBirthLegal(d,m,y,legalAge) {
		var check = false;
		var now_date = new Date();
		var currentDate = {day:now_date.getDate() ,month:(now_date.getMonth()+1),year:now_date.getFullYear(),hour:now_date.getHours()};
		if (y <(currentDate.year-legalAge) ||(y ==(currentDate.year-legalAge) && (m < currentDate.month ||(m== currentDate.month && d <= currentDate.day)))) {
			check = true;
		}
		return check;
	
	}
	
	function  isFileType(f,t){
		var types = t.split(',');
		var file = f.split('.');
		var ext = file[file.length-1];
		return $.inArray(ext,types);
	}
	
	function checkAccountNumber(accountnumber) {
		// verwijder alle tekens die geen cijfers zijn
		accountnumber=accountnumber.replace(/\D/, "");
		totalchars=accountnumber.length;
		var som=0;
		// loop door de 9 cijfers met de 11 proef formule
		for (i=1; i<10; i++) {
			number=accountnumber.charAt(i-1);
			som+=number*(10-i);
		} 
		// geef resultaat van check terug
		if (som % 11==0 && totalchars==9) {
			return true
		} else {
			return false
		}
	}


// Main function


	function translate(id){
		if (translateFields[id] != undefined) {
			return translateFields[id];
		}else {
			return id;
		}
	}

	var myStatus = true;
	var formname = myArgs[0];
	var successdiv = myArgs[1];
	var myMessage = "<h1>Niet alle velden zijn correct ingevuld:</h1><br>";

	for (i = 2; i < myArgs.length; i=i+2 ) {

		if (myArgs[i+1] =="BL" || myArgs[i+1] =="B") {
			var myElement1 = eval('document.forms[\''+formname+'\'].'+myArgs[i]+"1");
			var myElement2 = eval('document.forms[\''+formname+'\'].'+myArgs[i]+"2");
			var myElement3 = eval('document.forms[\''+formname+'\'].'+myArgs[i]+"3");
			$("#"+myElement1.id+", #"+myElement2.id+", #"+myElement3.id).css(cssOk);
		}else {
			var myElement = eval('document.forms[\''+formname+'\'].'+myArgs[i]);
			if (myElement != undefined && myElement.style != undefined) {$("#"+myElement.id).css(cssOk)};
		}
		
		// check for wrong fieldnames
		if (myElement == undefined) {
				alert('fieldname not present in form: '+myArgs[i]);
		return false;
		}

// fieldname exists
		switch(myArgs[i+1]) {
			case 'R': //varfield
			if (myElement.value == ''){ 
				$("#"+myElement.id).css(cssError);
				myMessage += "<br>- <span class=\"vBoxErrorField\">"+translate(myElement.id)+"</span> is niet correct.";
				myStatus=false;
			};
			break;
			case 'E': //email 
			if (myElement.value == '' || !isEmail(myElement.value)){ 
				$("#"+myElement.id).css(cssError);
				myMessage += "<br>- <span class=\"vBoxErrorField\">Email adres</span> is niet correct.";
				myStatus=false;
			};
			// email2 checkup
				if ($("#"+myElement.id).val() != $("#"+myElement.id+"2").val() && $("#"+myElement.id+"2").attr('id') != undefined){ 
					$("#"+myElement.id+"2").css(cssError);
					myMessage += "<br>- <span class=\"vBoxErrorField\">Bevestigingsemail</span> is niet gelijk.";
					myStatus=false;
				}else if($("#"+myElement.id+"2").attr('id') != undefined) {
					$("#"+myElement.id+"2").css(cssError);
				}
			break;
			case 'NE': //email 
			if (myElement.value != '' && !isEmail(myElement.value)){ 
				$("#"+myElement.id).css(cssError);
				myMessage += "<br>- <span class=\"vBoxErrorField\">Email adres</span> is niet correct.";
				myStatus=false;
			};
			break;
			case 'P': //postcode 
			if (myElement.value == '' || !isPostcode(myElement.value)){ 
				$("#"+myElement.id).css(cssError);
				myMessage += "<br>- <span class=\"vBoxErrorField\">"+translate(myElement.id)+"</span> is niet correct.";
				myStatus=false;
			};
			break;
			case 'N': //Number 
			if (myElement.value == '' || !Number(myElement.value)){ 
				$("#"+myElement.id).css(cssError);
				myMessage += "<br>- <span class=\"vBoxErrorField\">"+translate(myElement.id)+"</span> is niet correct.";
				myStatus=false;
			};
			break;
			case 'NN': //Number but not optional
			if (myElement.value != '' && !Number(myElement.value)){ 
				$("#"+myElement.id).css(cssError);
				myMessage += "<br>- <span class=\"vBoxErrorField\">"+translate(myElement.id)+"</span> is niet correct.";
				myStatus=false;
			};
			break;
			case 'T': //Telephone 
			if (myElement.value == '' || !isTelefoon(myElement.value)){ 
				$("#"+myElement.id).css(cssError);
				myMessage += "<br>- <span class=\"vBoxErrorField\">"+translate(myElement.id)+"</span> is niet correct.";
				myStatus=false;
			};
			break;
			case 'NT': //Telephone
			if (myElement.value != '' && !isTelefoon(myElement.value)){ 
				$("#"+myElement.id).css(cssError);
				myMessage += "<br>- <span class=\"vBoxErrorField\">"+translate(myElement.id)+"</span> is niet correct.";
				myStatus=false;
			};
			break;

			case 'I': //radiobuttons
			var radioChecked = false;
			$('input[name='+myArgs[i]+']:radio:checked').each(function(c){
				if ($(this).val() != false)  radioChecked = true;												 
			});			 
			if (!radioChecked) {
				//eval('document.getElementById(\''+myArgs[i]+'_alert\').style.border = \'solid 1px #FF0000\';');
				myMessage += "<br>- <span class=\"vBoxErrorField\">"+translate(myArgs[i])+"</span> is niet gekozen.";
				myStatus=false;
			}
			break;
			case 'C': //checkbox 
			if (!$("#"+myElement.id).attr('checked')){ 
				$("#"+myElement.id).css(cssError);
				myMessage += "<br>- <span class=\"vBoxErrorField\">"+translate(myElement.name)+"</span> is niet aangevinkt.";
				myStatus=false;
			};
			break;
			case 'BL': //birthcheck + legal age 
			var birthCheck = true;
			if (!checkBirthDay($("#"+myElement1.id).val()) ){ 
				$("#"+myElement1.id).css(cssError);
				myMessage += "<br>- <span class=\"vBoxErrorField\">"+translate(myElement1.id)+"</span> is niet correct.";
				birthCheck=false;
			}
			if ( !checkBirthMonth($("#"+myElement2.id).val())){ 
				$("#"+myElement2.id).css(cssError);
				myMessage += "<br>- <span class=\"vBoxErrorField\">"+translate(myElement2.id)+"</span> is niet correct.";
				birthCheck=false;
			}
			if ( !checkBirthYear($("#"+myElement3.id).val())){ 
				$("#"+myElement3.id).css(cssError);
				myMessage += "<br>- <span class=\"vBoxErrorField\">"+translate(myElement3.id)+"</span> is niet correct.";
				birthCheck=false;
			}
			if (birthCheck && !checkBirthLegal($("#"+myElement1.id).val(), $("#"+myElement2.id).val(), $("#"+myElement3.id).val(), 18) ){ 
				$("#"+myElement1.id+", #"+myElement2.id+", #"+myElement3.id).css(cssError);
				myMessage += "<br>- Je bent nog geen 18 jaar.";
				birthCheck=false;
			};
			if (!birthCheck) {
				myStatus = birthCheck;
			}
			break;
			case 'F': // Filetype checker
			if (isFileType(myElement.value,myArgs[i+2]) ==-1) {
				myMessage += "<br>- <span class=\"vBoxErrorField\">"+translate(myElement.id)+"</span> type is niet correct of geen bestand gekozen.";
				myStatus=false;
				$("#"+myElement.id).css(cssError);
			}
			i=i+1;
			break;
			case 'NF': // Filetype checker
			if (isFileType(myElement.value,myArgs[i+2]) == -1 && myElement.value.length > 0)
			{
				$("#"+myElement.id).css(cssError);
				myMessage += "<br>- <span class=\"vBoxErrorField\">"+translate(myElement.id)+"</span> type is niet correct.";
				myStatus=false;
			}
			i=i+1;
			break;
			case 'BANK':
			if (myElement.value == '' || !checkAccountNumber(myElement.value)){ 
				$("#"+myElement.id).css(cssError);
				myMessage += "<br>- <span class=\"vBoxErrorField\">"+translate(myElement.id)+"</span> is niet correct.";
				myStatus=false;
			};
			break;

		}
	}
	return {'status' : myStatus, 'message' : myMessage };
}
