var check = 0;

//definitie van de talen
var veld_verplicht;
var geldig_nummer;
var moet_nummer;
var geheel_getal;
var geldig_email;
var geldige_emails;
var geldige_datum;
var geldige_postcode;
var error_header;

//check of de taal gezet is
if (typeof errortaal == 'undefined') {
	var errortaal = 'nl';
}
if (errortaal == 'en-gb') {
	//ENGELS
	veld_verplicht					= "You must fill in '##ALIAS##'.\n";
	geldig_nummer						= "- '##ALIAS##' is not a valid number.\n";
	moet_nummer							= "- '##ALIAS##' must be a number.\n";
	geheel_getal						= "- '##ALIAS##' must be a positive integer.\n";   
	geldig_email						= " - '##ALIAS##' is not a valid e-mail address.\n";
	geldige_emails					= " - '##ALIAS##' does not contain valid e-mail addresses.\n";
	geldige_datum_mmddyy		= " - '##ALIAS##' is not a valid date format (MM-DD-YY).\n";
	geldige_datum_ddmmyy		= " - '##ALIAS##' is not a valid date format (DD-MM-YY).\n";
	geldige_datum_mmddyyyy	= " - '##ALIAS##' is not a valid date format (MM-DD-YYYY).\n";
	geldige_datum_ddmmyyyy	= " - '##ALIAS##' is not a valid date format (DD-MM-YYYY).\n";
	geldige_postcode				= " - '##ALIAS##' is not a valid postcode.\n";
	error_header						= "The form contains the following errors:\n";
} else {
	if (errortaal == 'fr') {
		veld_verplicht					= "Vous devez compléter le champ suivant : '##ALIAS##'.\n";
		geldig_nummer						= "- '##ALIAS##' n'est pas un nombre valide.\n";
		moet_nummer							= "- '##ALIAS##' doit être un nombre.\n";
		geheel_getal						= "- '##ALIAS##' doit être un nombre entier positif.\n";   
		geldig_email						= " - '##ALIAS##' n'est pas une adresse mail valide.\n";
		geldige_emails					= " - '##ALIAS##' ne contient pas d'adresses mail valides.\n";
		geldige_datum_mmddyy		= " - '##ALIAS##' n'est pas un format de date valide (MM-JJ-AA).\n";
		geldige_datum_ddmmyy		= " - '##ALIAS##' n'est pas un format de date valide (JJ-MM-AA).\n";
		geldige_datum_mmddyyyy	= " - '##ALIAS##' n'est pas un format de date valide (MM-JJ-AAAA).\n";
		geldige_datum_ddmmyyyy	= " - '##ALIAS##' n'est pas un format de date valide (JJ-MM-AAAA).\n";
		geldige_postcode				= " - '##ALIAS##' n'est pas un code postal valide.\n";
		error_header						= "Le formulaire contient les erreurs suivantes:\n";
	} else {
		//NEDERLANDS (STANDAARD)
		veld_verplicht					= "Het veld '##ALIAS##' is verplicht.\n";
		geldig_nummer						= "- Het veld '##ALIAS##' bevat geen geldig nummer.\n";
		moet_nummer							= "- Het veld '##ALIAS##' moet een nummer zijn.\n";
		geheel_getal						= "- Het veld '##ALIAS##' moet een geheel getal groter dan 0 zijn.\n";   
		geldig_email						= " - Het veld '##ALIAS##' is geen geldig e-mail adres.\n";
		geldige_emails					= " - Het veld '##ALIAS##' bevat ongeldige e-mail adressen.\n";
		geldige_datum_mmddyy		= " - Het veld '##ALIAS##' is geen geldige datum formaat (MM-DD-YY).\n";
		geldige_datum_ddmmyy		= " - Het veld '##ALIAS##' is geen geldig datum formaat (DD-MM-YY).\n";
		geldige_datum_mmddyyyy	= " - Het veld '##ALIAS##' is geen geldig datum formaat (MM-DD-YYYY).\n";
		geldige_datum_ddmmyyyy	= " - Het veld '##ALIAS##' is geen geldig datum formaat (DD-MM-YYYY).\n";
		geldige_postcode				= " - Het veld '##ALIAS##' is geen geldige postcode.\n";
		error_header						= "Het formulier bevat de volgende fouten:\n";
	}
}

// A utility function that returns true if a string contains only 
// whitespace characters.
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;
}

function verify(field, type, alias, optional)
{

    var msg;
	var hasvalue = false;
    var error = "";
	arrbcc = new Array;
	arrcheck = new Array;
	var datePat = "";
	
	switch (field.type)
	{
	case "checkbox":
	case "radio":
		// 20040519AR "Verplicht controle" toegevoegd voor checkboxen en radiobuttons.
		// Controle van ValueType is hiervoor niet geimplementeerd.
		hasvalue = verifyCheckbox(field);
		break;
		
	case "select-one":
		// 20061120HS "Verplicht controle toegevoegd voor selects.
		var i = field.selectedIndex;
		if (i == -1 || field.options[i].value == '')
		{
		   hasvalue = false;
		}
		else
		{
		   hasvalue = true;
		}
		break;

	default:
		if ((field.value == null) || (field.value == "") || isblank(field.value)) 
		{
			hasvalue = false;
		}
		else
		{
			hasvalue = true;
		}
		break;
	}
		
	if (!optional && !hasvalue)
	{
		error = replacevar(veld_verplicht, '##ALIAS##', alias);
	}
	
	if(hasvalue){
		switch(type){
			case "numeric":
                var v = parseFloat(field.value);
				if (isNaN(v))
				{
                   error = replacevar(geldig_nummer, '##ALIAS##', alias);                
                }
			break;
			case "numericstrict":
		 		if (isNaN(field.value))
				{
                   error = replacevar(moet_nummer, '##ALIAS##', alias);;                    
                }
			break;
			case "numericnatural":
		 		if (isNaN(field.value))
				{
                   error = replacevar(moet_nummer, '##ALIAS##', alias);
                }
				else if (Math.abs(field.value)!=field.value||Math.round(field.value)!=field.value||field.value==0) {
					error = replacevar(geheel_getal, '##ALIAS##', alias);   
				}
			break;
			case "email":
				var r1 = new RegExp("(@.*@)|(\\.\\.)|(@\\.)|(^\\.)");
				//var r2 = new RegExp("^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)$");
				//MAK200822 geen  karakters [] om maildomein heen meer toestaan
				var r2 = new RegExp("^.+\\@[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,4}|[0-9]{1,3})[\\s]*$");
				if(r1.test(field.value) || !r2.test(field.value))
				{
					error = replacevar(geldig_email, '##ALIAS##', alias);
				}
/*
20050131AR
OUDE CHECK VERVANGEN DOOR REGULIERE EXPRESSIE CHECK HIERBOVEN
				arrcheck = field.value.split("@");
				if (arrcheck[0] == null || arrcheck[0].length < 1 || arrcheck[1] == null || arrcheck[1].length < 1 || arrcheck.length > 2)
				{
					error = " - Het veld '" + alias + "' is geen geldig e-mail adres.\n";
				}
				else if (arrcheck[1].lastIndexOf(".") == -1)
				{
					error = " - Het veld '" + alias + "' is geen geldig e-mail adres.\n";
				}
*/
			break;
			case "cc":
				var arrbcc = field.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})[\\s]*(\\]?)$");
					if(r1.test(arrcheck) || !r2.test(arrcheck))
					{
						error = replacevar(geldige_emails, '##ALIAS##', alias);
					}
				}

/*
20050131AR
OUDE CHECK VERVANGEN DOOR REGULIERE EXPRESSIE CHECK HIERBOVEN
				arrbcc = field.value.split(";");
				for(i=0;i<arrbcc.length;i++){
					arrcheck = arrbcc[i].split("@");
					if (arrcheck[0] == null || arrcheck[0].length < 1 || arrcheck[1] == null || arrcheck[1].length < 1 || arrcheck.length > 2)
					{
						error = " - Het veld '" + alias + "' bevat ongeldige e-mail adressen.\n";
					}
					else if (arrcheck[1].lastIndexOf(".") == -1)
					{
						error = " - Het veld '" + alias + "' bevat ongeldige e-mail adressen.\n";
					}
				}
*/

			break;
			case "MMDDYY":
				checkDate = isValidDate(field.value, "MMDDYY");
				if (!checkDate) {
					error = replacevar(geldige_datum_mmddyy, '##ALIAS##', alias);
				}
			break;
			case "DDMMYY":
				checkDate = isValidDate(field.value, "DDMMYY");
				if (!checkDate) {
					error = replacevar(geldige_datum_ddmmyy, '##ALIAS##', alias);
				}
				 
			break;
			case "MMDDYYYY":
				checkDate = isValidDate(field.value, "MMDDYYYY");
				if (!checkDate) {
					error = replacevar(geldige_datum_mmddyyyy, '##ALIAS##', alias);
				}
			break;
			case "DDMMYYYY":
				checkDate = isValidDate(field.value, "DDMMYYYY");
				if (!checkDate) {
					error = replacevar(geldige_datum_ddmmyyyy, '##ALIAS##', alias);
				}
			break;
			case "postcode":
				checkPostCode = isValidPostCode(field.value);
				if (!checkPostCode) {
					error = replacevar(geldige_postcode, '##ALIAS##', alias);
				}
			break;
		}
	}
	
		
	if (!error)
	{
		return 0;
	}
	else
	{
		msg  = "______________________________________________________\n\n"     
	    msg += error_header;
	    msg += "______________________________________________________\n\n" ;
		
		if (error)
		{
			msg += error;
		}
		
		alert(msg);
	    return -1;
	}
}

function verifyCheckbox(field)
{
  	var checkboxChecked;

		checkboxChecked = false;

		for(var j=0; (j<field.form.elements.length) && !checkboxChecked; j++)
		{
			e2 = field.form.elements[j];
			if(e2.name == field.name)
			{
				if(e2.checked)
				{
					checkboxChecked = true;
				}
			}
		}
		return(checkboxChecked);
}


function isValidPostCode(postcode)
{
	var pcPat
	
	//pcPat = /^(\d{4,4})([a-z_?]{2,2}|[A-Z_?]{2,2})$/;
	pcPat = /^([1-9][0-9]{3})( ?)([a-zA-Z]{2})$/;
	var matchArray = postcode.match(pcPat);
	
	if (matchArray == null) 
	{
		return false;
	}
	
	return true;
}

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
	
	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("Month "+month+" doesn't have 31 days!")
		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("February " + year + " doesn't have " + day + " days!");
			return false;
		}
	}
	
	// date is valid
	return true;  
}

function submitform (f, action) {

	for(var i = 0; i < f.length; i++)
	{
		if (f.elements[i].type=='text' || f.elements[i].type=='textarea' || f.elements[i].type=='password' || f.elements[i].type == "checkbox" || f.elements[i].type == "radio" || f.elements[i].type=='select-one'){
			if (f.elements[i].onchange){
				f.elements[i].onchange();
				
			}
			if (check==-1){
				i = f.length;
			}
		}
	}
	if (check==0){
		if(action!=''){
			f.action = action;
		}
		f.submit();
	}
	
	check=0;	
}

function replacevar(iVar, iSource, iTarget) {
	return iVar.replace(iSource, iTarget );
}
