// Copyright 1998 Edwin Martin
// 1.0   ( 9 maart 98): first release
// 1.1   (13 maart 98): added e-mail check
// 1.2   ( 2 april 98): radiobuttons supported
// 1.3   ( 4 juni  98): geen komma's in e-mail adres (compuserve) en wat kleine verbeteringen
// 1.4   ( 5 juni  98): MSIE 3.02 hack
// 1.5   ( 8 juni  98): MSIE 4 reparatie
// 1.6   (15 juni  98): cijfer achter '@' weer mogelijk
// 1.7	 (14 dec   98): domain .cc toegevoegd
// 1.8   (28 feb   03): veldnamen met een code ("tmp_") ervoor mooi weergeven bij fouten
//			 tijdsweergave controleren^M
// Aanpassingen > 2010 Gerik Mik
// 1.9   (26 mei   11): afgelopen jaar meerdere aanpassingen. Functions validateAfstand, validateDate, validateTime
//
var form;
var req;
var nonfilled;
var countryCodes="|ad|ae|af|ag|ai|al|am|an|ao|aq|ar|as|at|au|aw|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cs|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|fx|ga|gb|gd|ge|gf|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|in|io|iq|ir|is|it|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nt|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|pt|pw|py|qa|re|ro|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zr|zw|com|edu|gov|int|mil|net|org|pro|arpa|nato|info|name|biz";

function isInteger(s){
	var i;
    for (i = 0; i < s.length; i++){   
        // Check that current character is number.
        var c = s.charAt(i);
        if (((c < "0") || (c > "9"))) return false;
    }
    // All characters are numbers.
    return true;
}

function stripCharsInBag(s, bag){
	var i;
    var returnString = "";
    // Search through string's characters one by one.
    // If character is not in bag, append to returnString.
    for (i = 0; i < s.length; i++){   
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }
    return returnString;
}

function daysInFebruary (year){
	// February has 29 days in any year evenly divisible by four,
    // EXCEPT for centurial years which are not also divisible by 400.
    return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
}
function DaysArray(n) {
	for (var i = 1; i <= n; i++) {
		this[i] = 31;
		if (i==4 || i==6 || i==9 || i==11) {this[i] = 30;}
		if (i==2) {this[i] = 29;}
   } 
   return this;
}

function checkEmail(email){
	var at;
	var c;
	var pos;
	if(email.indexOf(',')!=-1){
		if(email.toLowerCase().indexOf('compuserve.com')!=-1)
			return "in een compuserve-adres dient u de komma's door punten te vervangen";
		else
			return "een e-mail adres mag geen komma's bevatten";
	}
	at=email.indexOf('@');
	if(at==0)
		return "er staat niets voor het @-teken";
	else if(at==-1)
		return "een e-mail adres hoort een @-teken te bevatten";
	c=email.charAt(at+1).toLowerCase();
	if((c<'a'||c>'z')&&(c<'0'||c>'9'))
		return "achter het @-teken hoort een letter of cijfer te staan";
	if(email.indexOf('..',at)!=-1)
		return "achter het @-teken staan twee punten achter elkaar";
	for(pos=at+1;pos<email.length;pos++){
		c=email.charAt(pos).toLowerCase();
		if((c<'a'||c>'z')&&(c<'0'||c>'9')&&c!='.'&&c!='-')
			return "het e-mail adres bevat het ongeldige teken '"+c+"'";
	}
	pos=email.lastIndexOf('.');
	if(pos==-1)
		return "de domeinnaam bevat geen punt";
	c=email.substring(pos+1,email.length);
	if(countryCodes.indexOf('|'+c+'|')==-1)
		return "er bestaan geen domeinnamen die eindigen op ."+c;
	return null;
}

function formCheck(theForm,req) {
	var firstc=0;
	var lastc=0;
	var verder=true;
	var nietIngevuld='';
	var melding='';
	var aantal=0;
        var plek=0
	var filled=true;
	var elementName;
	var email=null;
	var wrongEmail=null;
	var emailFirst=false;
	form = theForm;
	nonfilled=null;
	while(verder){
		lastc=req.indexOf(",",lastc+1);
		if(lastc==-1){
			 lastc=req.length;
			 verder=false;
		}
		if(req.charAt(firstc)==' ')
			firstc++;
		elementName=req.substring(firstc,lastc);
		if(!form[elementName]){
			alert("Foutje van de webmaster: '"+elementName+"' komt niet in het fomulier voor.");
			return false;
		}
                // alert("Element: '"+elementName+"' Inhoud:'"+form[elementName].value+"' ");
		if(form[elementName].type){
			if(form[elementName].type.substring(0,6)=='select')
				filled=form[elementName].selectedIndex>0;
			else {
				filled=form[elementName].value != '' && form[elementName].value.substring(0,1) != '?';
				if (elementName.toLowerCase()=='e-mail' ||
					elementName.toLowerCase()=='email' ||
					elementName.indexOf('email') > -1 		) {
					email=elementName;
					emailFirst=!nonfilled;
				} 
                                plek = elementName.indexOf("_");
                                plek = (plek > 0) ? plek + 1 : 0;
                                if (elementName.substring(plek, elementName.length).toLowerCase()=='afstand') {
                                    if(!validateAfstand(form[elementName])) {
                                       return false;
                                    }
                                }
                                if (elementName.substring(plek, elementName.length).toLowerCase()=='tijd') {
                                    if (!validateTime(form[elementName])) {
                                       return false;
                                    }
                                }
                                if (elementName.substring(plek, elementName.length).toLowerCase()=='datum') {
                                    if (!validateDate(form[elementName])) {
                                       return false; 
                                   }
                                }
                                if (elementName.substring(plek, elementName.length).toLowerCase()=='geboren') {
                                    if (!validateDate(form[elementName])) {
                                       return false;
                                   }
                                }
			}
		}else if(form[elementName].length){
			var radioCheck=false;
			for(var i=0;i<form[elementName].length;i++){
				if(form[elementName][i].checked)
					radioCheck=true;
			}
			filled=radioCheck;
		}else
			return true; // MSIE 3.02 hack
		if(!filled){
			if(!nonfilled)
				nonfilled=elementName;
			if(aantal>0)
				nietIngevuld+=', ';
			var pos = elementName.indexOf("_");
			pos = (pos > 0) ? pos + 1 : 0;
			nietIngevuld+=elementName.substring(pos, elementName.length);
			aantal++;
		}
		firstc=lastc+1;
	}
        nietIngevuld=nietIngevuld.replace(/handle/g, "email");
        nietIngevuld=nietIngevuld.replace(/evenement/g, "naam");
        nietIngevuld=nietIngevuld.replace(/tijd/g, "gelopen tijd");
        nietIngevuld=nietIngevuld.replace(/afstand/g, "gelopen afstand")
	if(email&&form[email].value!='')
		wrongEmail=checkEmail(form[email].value);
	if(aantal==1)
		melding="A.U.B "+nietIngevuld+" invullen";
	else if(aantal>0){
		var lastcomma=nietIngevuld.lastIndexOf(',');
		nietIngevuld=nietIngevuld.substring(0,lastcomma)+" en "+nietIngevuld.substring(lastcomma+2,nietIngevuld.length);
		melding="A.U.B "+nietIngevuld+" invullen";
	}
	if(wrongEmail){
		if(aantal>0)
			melding+=" en het ";
		else
			melding+="Het ";
		melding+="e-mail adres is niet juist ingevuld: "+wrongEmail;
	}
	if(wrongEmail||aantal>0)
		alert(melding+".");
	if(aantal>0&&!(wrongEmail&&emailFirst)&&form[nonfilled].type)
		if(form[nonfilled].type.substring(0,6)=='select'){
			form[nonfilled].focus();
			setTimeout("form[nonfilled].blur();",100);
			setTimeout("form[nonfilled].focus();",200);
			setTimeout("form[nonfilled].blur();",300);
			setTimeout("form[nonfilled].focus();",400);
		}else{
			form[nonfilled].value='   <  <  <';
			setTimeout("form[nonfilled].value='  <  <  <';",200);
			setTimeout("form[nonfilled].value=' <  <  <';",400);
			setTimeout("form[nonfilled].value='<  <  <';",600);
			setTimeout("form[nonfilled].value='';form[nonfilled].focus();",800);
		}
	else if(wrongEmail){
		form[email].select();
		form[email].focus();
	}
	return aantal==0&&!wrongEmail;
}


function validateTime(myfield) {
	help = "\nTijd moet in het formaat: 'uu:mm:ss'.\nSeconden zijn optioneel."
	mytime = myfield.value
	tester1 = /[^:0-9]/
	tester2 = /[^0-9]/
	tTime = mytime.split(":")

	while (tTime.length < 3) {
		// seconds are left out. Add them now
		tTime[tTime.length] = '00';
		mytime = tTime.join(":");
	}

	if (tester1.test(mytime) | mytime.indexOf(":") < 1 | mytime.indexOf(":") > 2) {
	    if (confirm("Ongeldige invoer" + help)) {
		myfield.focus();
                myfield.select();
                return false;
            }
	} else {
            if (tester2.test(tTime[0]) | tester2.test(tTime[1]) | tester2.test(tTime[2]) | tTime[1] > 59 | tTime[2] > 59) {
		if (confirm("Ongeldig invoer" + help)) { 
			myfield.focus();
                        myfield.select();
                        return false;
                }
	    } else {
		// autocorrect
		myfield.value = mytime;
                return true;
            }
	}
        return true;
}


function validateDate(myfield) {
        dtStr=myfield.value;
        var dtCh= "-";
        var minYear=1900;
        var maxYear=2100;
	var daysInMonth = DaysArray(12);
	var pos1=dtStr.indexOf(dtCh);
	var pos2=dtStr.indexOf(dtCh,pos1+1);
	var strDay=dtStr.substring(0,pos1);
	var strMonth=dtStr.substring(pos1+1,pos2);
	var strYear=dtStr.substring(pos2+1);
	strYr=strYear;
	if (strDay.charAt(0)=="0" && strDay.length>1) {strDay=strDay.substring(1);}
	if (strMonth.charAt(0)=="0" && strMonth.length>1) {strMonth=strMonth.substring(1);}
	for (var i = 1; i <= 3; i++) {
		if (strYr.charAt(0)=="0" && strYr.length>1) {strYr=strYr.substring(1);}
	}
	month=parseInt(strMonth);
	day=parseInt(strDay);
	year=parseInt(strYr);
	if (pos1==-1 || pos2==-1){
		alert("Datum formaat is fout. Juiste formaat is: mm-dd-yyyy");
                myfield.focus();
                myfield.select();
		return false;
	}
	if (strMonth.length<1 || month<1 || month>12){
		alert("Maand " + month + " is geen geldige maand");
                myfield.focus();
                myfield.select();
		return false;
	}
	if (strDay.length<1 || day<1 || day>31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month]){
		alert("Dag " + day + " is geen geldige dag van de maand");
                myfield.focus();
                myfield.select();
		return false;
	}
	if (strYear.length != 4 || year==0 || year<minYear || year>maxYear){
		alert("Jaar is niet correct. Jaar moet 4 cijfers zijn en liggen tussen "+minYear+" en "+maxYear);
                myfield.focus(); 
                myfield.select();
		return false;
	}
	if (dtStr.indexOf(dtCh,pos2+1)!=-1 || isInteger(stripCharsInBag(dtStr, dtCh))==false){
                alert("Datum formaat is fout. Juiste formaat is: mm-dd-yyyy");
                myfield.focus();
                myfield.select();
		return false;
	}
	return true;
}

function validateAfstand(myfield) {
        afstand=myfield.value;
        if ( afstand < 42195) {
           alert("Afstand is in meters. Marathon (42195 meter) is de minimale afstand");
           myfield.focus();
           myfield.select();
           return false;
        }
        return true;
}

function exitPassword(passwd2) {
	// if second passwordbox isn't filled, jump to that one
	if(passwd2.value == "") {
		passwd2.focus();
		return false;
	}
	return true;
}

function matchPassword(passwd1, passwd2) {
	var pw1 = passwd1.value;
	var pw2 = passwd2.value;

	if (pw1 != pw2) {
		alert("De twee wachtwoorden komt niet met elkaar overeen.\nProbeer het nogmaals.");
		passwd2.value = "";
		passwd1.focus();
		return false;
	}
	return true;
}

