// ----------------------------------------------------------------------------------------------------------------------------------------
// form.validation functions
// ----------------------------------------------------------------------------------------------------------------------------------------

// ----------------------------------------------------------------------------------------------------------------------------------------
// function isFormModified
// bepaald of een of meerdere velden in het formulier zijn gewijzigd
// ----------------------------------------------------------------------------------------------------------------------------------------

function isFormModified(oForm) {
	var el, opt, hasDefault, i = 0, j;
	while (el = oForm.elements[i++]) {
		switch (el.type) {
			case 'text' :
            case 'textarea' :
            case 'hidden' :
	         	if (!/^\s*$/.test(el.value) && el.value != el.defaultValue) return true;
                break;

			case 'checkbox' :
			case 'radio' :
               	if (el.checked != el.defaultChecked) return true;
              	break;

            case 'select-one' :
       		case 'select-multiple' :
             	j = 0, hasDefault = false;
             	while (opt = el.options[j++]) if (opt.defaultSelected) hasDefault = true;

             	j = hasDefault ? 0 : 1;

             	while (opt = el.options[j++]) if (opt.selected != opt.defaultSelected) return true;
             	break;
		}
	}

	return false;
}

// ----------------------------------------------------------------------------------------------------------------------------------------
// MASKING
// ----------------------------------------------------------------------------------------------------------------------------------------

addEvent = function(o, e, f, s){
    var r = o[r = "_" + (e = "on" + e)] = o[r] || (o[e] ? [[o[e], o]] : []), a, c, d;
    r[r.length] = [f, s || o], o[e] = function(e){
        try{
            (e = e || event).preventDefault || (e.preventDefault = function(){e.returnValue = false;});
            e.stopPropagation || (e.stopPropagation = function(){e.cancelBubble = true;});
            e.target || (e.target = e.srcElement || null);
            e.key = (e.which + 1 || e.keyCode + 1) - 1 || 0;
        }catch(f){}
        for(d = 1, f = r.length; f; r[--f] && (a = r[f][0], o = r[f][1], a.call ? c = a.call(o, e) : (o._ = a, c = o._(e), o._ = null), d &= c !== false));
        return e = null, !!d;
    }
};

removeEvent = function(o, e, f, s){
    for(var i = (e = o["_on" + e] || []).length; i;)
        if(e[--i] && e[i][0] == f && (s || o) == e[i][1])
            return delete e[i];
    return false;
};

MaskInput = function(f, m){
    function mask(e){
        var patterns = {"1": /[A-Z]/i, "2": /[0-9]/, "4": /[À-ÿ]/i, "8": /./ },
            rules = { "a": 3, "A": 7, "9": 2, "C":5, "c": 1, "*": 8};
        function accept(c, rule){
            for(var i = 1, r = rules[rule] || 0; i <= r; i<<=1)
                if(r & i && patterns[i].test(c))
                    break;
                return i <= r || c == rule;
        }
        var k, mC, r, c = String.fromCharCode(k = e.key), l = f.value.length;
        (!k || k == 8 ? 1 : (r = /^(.)\^(.*)$/.exec(m)) && (r[0] = r[2].indexOf(c) + 1) + 1 ?
            r[1] == "O" ? r[0] : r[1] == "E" ? !r[0] : accept(c, r[1]) || r[0]
            : (l = (f.value += m.substr(l, (r = /[A|9|C|\*]/i.exec(m.substr(l))) ?
            r.index : l)).length) < m.length && accept(c, m.charAt(l))) || e.preventDefault();
    	}

    	for(var i in !/^(.)\^(.*)$/.test(m) && (f.maxLength = m.length), {keypress: 0, keyup: 1})
        	addEvent(f, i, mask);
};

// ----------------------------------------------------------------------------------------------------------------------------------------
// END MASKING
// ----------------------------------------------------------------------------------------------------------------------------------------

// ----------------------------------------------------------------------------------------------------------------------------------------
// function checkZipcode
// ----------------------------------------------------------------------------------------------------------------------------------------
function checkZipcode(obj) {
	var zipcode=obj.value.toUpperCase();

	if (zipcode=='0000ZZ') {
		obj.value=zipcode;
		return true;
	}

	/*
	zipcode=zipcode.split(' ');
	zipcode=zipcode.join('');
	*/

	obj.value=zipcode;

	rExp = /^[1-9]\d{3} [A-Z]{2}$/;
	if (!rExp.exec(zipcode)) {
	  /*
		openAlertBox(
			"De ingevoerde Postcode komt niet overeen met het volgende formaat: "+
			"9999 ZZ.<br><br>"+
			"Probeer opnieuw en voer de postcode in het correcte formaat in.",
			"POSTCODE",300,100);
	  */

		alert(
			"De ingevoerde Postcode komt niet overeen met het volgende formaat\n\n"+
			"\t9999 ZZ\n\n"+
			"Probeer het opnieuw en voer de postcode in het correcte formaat in.");

		obj.focus();

		return false;
	}

	obj.value=zipcode;
	return true;
}
// ----------------------------------------------------------------------------------------------------------------------------------------
// einde function checkZipcode
// ----------------------------------------------------------------------------------------------------------------------------------------

// ----------------------------------------------------------------------------------------------------------------------------------------
// function checkNumberFormat
// ----------------------------------------------------------------------------------------------------------------------------------------
function checktNumberFormat(str) {
	str.value=trim(str.value);

	var num=new Number(str.value);
	num=num.toFixed(2);
	if (num=="NaN") {
		alert('Er is een onjuist bedrag ingevoerd. Het juiste invoer formaat is EUR 9.99');
		str.value='0.00';
	}
	else {
		str.value=num;
	}
}
// ----------------------------------------------------------------------------------------------------------------------------------------
// einde function checkNumberFormat
// ----------------------------------------------------------------------------------------------------------------------------------------

// ----------------------------------------------------------------------------------------------------------------------------------------
// function checkDate
// ----------------------------------------------------------------------------------------------------------------------------------------
function checkDate(obj) {
	var dateobj=trim(obj.value);

	if (dateobj=='') { return true; }
	else {
		if (dateobj.length<10) {
			/*
			openAlertBox(
				"De ingevoerde Datum komt niet overeen met het volgende formaat<br><br>DD-MM-JJJJ.<br><br>Voer een geldig Datum formaat in.",
				"DATUM",300,100);
			globalvar =obj;
			setTimeout("globalvar.focus()",250);
			*/

			alert("De ingevoerde Datum komt niet overeen met het volgende formaat\n\nDD-MM-JJJJ.\n\nVoer een geldig Datum formaat in.");
			obj.focus();
			return false;
		}
		return true;
	}
}
// ----------------------------------------------------------------------------------------------------------------------------------------
// einde function checkDate
// ----------------------------------------------------------------------------------------------------------------------------------------

// ----------------------------------------------------------------------------------------------------------------------------------------
// function checkPhoneNumber
// ----------------------------------------------------------------------------------------------------------------------------------------
function checkPhoneNumber(obj,execSweepToggle) {
	var len=trim(obj.value).length;
	var phnumber=obj.value;

	_0900=false;
	if (phnumber.substr(0,4)=='0900') {
		maxLen=14; // 0900-8844 | 0900-123456789 (14)
		seppos=phnumber.search('-');
		if (seppos==4) {
			telstr=phnumber.substr(5);
			_0900=(telstr.length>=4);
		}
	}
	else {
		maxLen=11; // 1234 - 123456 (11)
	}

	if ( (!_0900) && (len<=10) || (len>maxLen) ) {
		/*
		openAlertBox(
			'Er is een onjuist Telefoonnummer ingevoerd.<br><br>'+
			'Telefoonnummer kan minimaal uit '+maxLen+' cijfers bestaan, het kengetal en het '+
			'telefoonnummer dienen gescheiden te zijn door het - teken<br><br>'+
			'Of als het gaat om 0900 nummers dan kunnen de volgende regels gehanteerd worden:<br><br>'+
			'0900-1234 of 0900-123456789',
			'Telefoonnummer',400,250);

		globalvar =obj;
		setTimeout("globalvar.focus()",250);
		*/
		alert(
			'Er is een onjuist Telefoonnummer ingevoerd.\n\n'+
			'Telefoonnummer kan minimaal uit '+maxLen+' cijfers bestaan, het kengetal en het '+
			'telefoonnummer dienen gescheiden te zijn door het - teken\n\n'+
			'Of als het gaat om 0900 nummers dan kunnen de volgende regels gehanteerd worden:\n\n'+
			'0900-1234 of 0900-123456789'
		);

		obj.focus();

		return false;
	}

	return true;
}
// ----------------------------------------------------------------------------------------------------------------------------------------
// einde function checkPhoneNumber
// ----------------------------------------------------------------------------------------------------------------------------------------

// ----------------------------------------------------------------------------------------------------------------------------------------
// function checkAccountNumber
// ----------------------------------------------------------------------------------------------------------------------------------------
function elf_proef(bankrekeningnummer) {
	// verwijder alle tekens die geen cijfers zijn
	bankrekeningnummer=bankrekeningnummer.replace(/\D/, "");
	aantal_tekens=bankrekeningnummer.length;
	var som=0;

	// loop door de 9 cijfers met de 11 proef formule
	for (i=1; i<10; i++) {
		getal=bankrekeningnummer.charAt(i-1);
		som+=getal*(10-i);
	}

	// geef resultaat van check terug
	if (som % 11==0 && aantal_tekens==9) { return true }
	else { return false }
}

function checkAccountNumber(obj) {
	var rekeningnummer=obj.value;
	rekeningnummer=rekeningnummer.toUpperCase();

	if (rekeningnummer=='') { return true; }

	if (rekeningnummer.substring(0,1)=='P') { return true; }
	else {
		ok=(elf_proef(rekeningnummer));
		if (!ok) {
			/*
			openAlertBox(
				'Je hebt een ongeldig Bank rekeningnummer ingevoerd.<br><br>'+
				'Let op: Als je een (Post)giro nummer wilt invoeren, begin dit rekeningnummer dan met de letter P<br>'+
				'Voorbeeld: P12345','Bank- Gironummer',400,170);
			*/

			alert(
				'Je hebt een ongeldig Bank rekeningnummer ingevoerd.\n\n'+
				'Let op: Als je een (Post)giro nummer wilt invoeren, begin dit rekeningnummer dan met de letter P\n'+
				'Voorbeeld: P12345'
			)

			obj.focus();

			return false;
		}

		return true;
	}
}
// ----------------------------------------------------------------------------------------------------------------------------------------
// einde function checkAccountNumber
// ----------------------------------------------------------------------------------------------------------------------------------------

// ----------------------------------------------------------------------------------------------------------------------------------------
// function checkTextArea
// ----------------------------------------------------------------------------------------------------------------------------------------
function checkTextarea(obj,description) {
	if (obj.value=='') {
		/*
		openAlertBox(
			'Je bent vergeten het volgende veld in te vullen.<br><br><span class=padleft30px><b>'+description+'</b></span>',
			'VELD BEVAT GEEN WAARDE',300,120);
		*/

		alert(
			'Je bent vergeten het volgende veld in te vullen.\n\n'+
			'\t\t'+description+'\n'
		);

		obj.focus();
		return false;
	}

	return true;
}
// ----------------------------------------------------------------------------------------------------------------------------------------
// einde function checkTextArea
// ----------------------------------------------------------------------------------------------------------------------------------------

// ----------------------------------------------------------------------------------------------------------------------------------------
// function checkEmail
// ----------------------------------------------------------------------------------------------------------------------------------------
function emailCheck(obj) {
	emailStr=obj.value;
	if (emailStr=='') return true;

	/* The following variable tells the rest of the function whether or not
	to verify that the address ends in a two-letter country or well-known
	TLD.  1 means check it, 0 means don't. */

	var checkTLD=0;

	/* The following is the list of known TLDs that an e-mail address must end with. */

	var knownDomsPat=/^(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum)$/;

	/* The following pattern is used to check if the entered e-mail address
	fits the user@domain format.  It also is used to separate the username
	from the domain. */

	var emailPat=/^(.+)@(.+)$/;

	/* The following string represents the pattern for matching all special
	characters.  We don't want to allow special characters in the address.
	These characters include ( ) < > @ , ; : \ " . [ ] */

	var specialChars="\\(\\)><@,;:\\\\\\\"\\.\\[\\]";

	/* The following string represents the range of characters allowed in a
	username or domainname.  It really states which chars aren't allowed.*/

	var validChars="\[^\\s" + specialChars + "\]";

	/* The following pattern applies if the "user" is a quoted string (in
	which case, there are no rules about which characters are allowed
	and which aren't; anything goes).  E.g. "jiminy cricket"@disney.com
	is a legal e-mail address. */

	var quotedUser="(\"[^\"]*\")";

	/* The following pattern applies for domains that are IP addresses,
	rather than symbolic names.  E.g. joe@[123.124.233.4] is a legal
	e-mail address. NOTE: The square brackets are required. */

	var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;

	/* The following string represents an atom (basically a series of non-special characters.) */

	var atom=validChars + '+';

	/* The following string represents one word in the typical username.
	For example, in john.doe@somewhere.com, john and doe are words.
	Basically, a word is either an atom or quoted string. */

	var word="(" + atom + "|" + quotedUser + ")";

	// The following pattern describes the structure of the user

	var userPat=new RegExp("^" + word + "(\\." + word + ")*$");

	/* The following pattern describes the structure of a normal symbolic
	domain, as opposed to ipDomainPat, shown above. */

	var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$");

	/* Finally, let's start trying to figure out if the supplied address is valid. */

	/* Begin with the coarse pattern to simply break up user@domain into
	different pieces that are easy to analyze. */

	var matchArray=emailStr.match(emailPat);

	if (matchArray==null) {
		/* Too many/few @'s or something; basically, this address doesn't
		even fit the general mould of a valid e-mail address. */

		//openAlertBox("Email adres is niet correct ingevoerd.","EMAIL ADRES",300,100);
		if (emailStr!='') { alert("Email adres is niet correct ingevoerd."); }

		obj.focus();
		return false;
	}

	var user=matchArray[1];
	var domain=matchArray[2];

	// Start by checking that only basic ASCII characters are in the strings (0-127).

	for (i=0; i<user.length; i++) {
		if (user.charCodeAt(i)>127) {
			//openAlertBox("Het gebruikersnaam gedeelte (voor het @ teken) is niet correct gespeld.","EMAIL ADRES",300,100);
			alert("Het gebruikersnaam gedeelte (voor het @ teken) is niet correct gespeld.");
			return false;
   		}
	}

	for (i=0; i<domain.length; i++) {
		if (domain.charCodeAt(i)>127) {
			//openAlertBox("Het domein van het email adres bevat ongeldige tekens.","EMAIL ADRES",300,100);
			alert("Het domein van het email adres bevat ongeldige tekens.");

			obj.focus();
			return false;
   		}
	}

	// See if "user" is valid

	if (user.match(userPat)==null) {
		// user is not valid
		//openAlertBox("De gebruikersnaam is ongeldig.","EMAIL ADRES",300,100);
		alert("De gebruikersnaam is ongeldig.");

		obj.focus();
		return false;
	}

	/* if the e-mail address is at an IP address (as opposed to a symbolic
	host name) make sure the IP address is valid. */

	var IPArray=domain.match(ipDomainPat);
	if (IPArray!=null) {
		// this is an IP address

		for (var i=1;i<=4;i++) {
			if (IPArray[i]>255) {
				//openAlertBox("Doel IP adres is ongeldig.","EMAIL ADRES",300,100);
				alert("Doel IP adres is ongeldig.");

				obj.focus();
				return false;
   			}
		}
		return true;
	}

	// Domain is symbolic name.  Check if it's valid.

	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) {
			//openAlertBox("De domeinnaam van het email adres is ongeldig.","EMAIL ADRES",300,100);
			alert("De domeinnaam van het email adres is ongeldig.");

			obj.focus();
			return false;
   		}
	}

	/* domain name seems valid, but now make sure that it ends in a
	known top-level domain (like com, edu, gov) or a two-letter word,
	representing country (uk, nl), and that there's a hostname preceding
	the domain or country. */

	if (checkTLD && domArr[domArr.length-1].length!=2 && domArr[domArr.length-1].search(knownDomsPat)==-1) {
		//openAlertBox("Een email adres moet eindigen op een bekende domeinnaam of een tweeletterige land codering.","EMAIL ADRES",300,100);
		alert("Een email adres moet eindigen op een bekende domeinnaam of een tweeletterige land codering.");

		obj.focus();
		return false;
	}

	// Make sure there's a host name preceding the domain.

	if (len<2) {
		//openAlertBox("Het email adres bevat geen hostnaam.","EMAIL ADRES",300,100);
		alert("Het email adres bevat geen hostnaam.");

		obj.focus();
		return false;
	}

	// If we've gotten this far, everything's valid!
	return true;
}

function checkEmail(obj) {
	// setFieldToUpperCase(obj);
	if (obj.value!='') {
		var emailok=emailCheck(obj);
		return emailok;
	}
	else {
		return true;
	}
}
// ----------------------------------------------------------------------------------------------------------------------------------------
// einde function checkEmail
// ----------------------------------------------------------------------------------------------------------------------------------------

// ----------------------------------------------------------------------------------------------------------------------------------------
// function showTextAreaCounter
// uitbreiding op het TEXTAREA veld, het laat een voortgang balk zien die aangeeft hoeveel tekens in % er nog ingevoerd kan worden
// ----------------------------------------------------------------------------------------------------------------------------------------
function setcolor(obj,percentage,prop){ obj.style[prop] = "rgb(80%,"+(100-percentage)+"%,"+(100-percentage)+"%)"; }
function showTextAreaCounter(field,counter,maxlimit,linecounter) {
	// text width//
	var fieldWidth =  parseInt(field.offsetWidth);
	var charcnt = field.value.length;

	// trim the extra text
	if (charcnt > maxlimit) {
		field.value = field.value.substring(0, maxlimit);
	}

	else {
		// progress bar percentage
		var percentage = parseInt(100 - (( maxlimit - charcnt) * 100)/maxlimit) ;
		el(counter).style.width =  parseInt(((fieldWidth*percentage)/100))+"px";
		el(counter).innerHTML="Limiet: "+percentage+"%"
		// color correction on style from CCFFF -> CC0000
		setcolor(el(counter),percentage,"background-color");
	}
}
// ----------------------------------------------------------------------------------------------------------------------------------------
// einde function showTextAreaCounter
// ----------------------------------------------------------------------------------------------------------------------------------------

