// Copyright 1998 Telegraaf Elektronische Media
// Author: 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
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 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, required) {
	var firstc=0;
	var lastc=0;
	var verder=true;
	var nietIngevuld='';
	var melding='';
	var aantal=0;
	var filled=true;
	var elementName;
	var email=null;
	var wrongEmail=null;
	var emailFirst=false;
	var req = (typeof required == 'string') ? required : required.value;
	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;
		}
		if(form[elementName].type){
			switch(form[elementName].type) {
				case 'select':
					filled=form[elementName].selectedIndex>0;
					break;
				case 'checkbox':
					filled=form[elementName].checked;
					break;
				default:
					filled=form[elementName].value != '' && form[elementName].value.substring(0,1) != '?';
					if (elementName.toLowerCase()=='e-mail' || elementName.toLowerCase()=='email' ||
						elementName.indexOf('email') > 0) {
						email=elementName;
						emailFirst=!nonfilled;
					}
					break;
			}
		}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 (form[elementName].length) {
				displayName = (form[elementName][0].title) ? (form[elementName][0].title) : (form[elementName][0].id) ? form[elementName][0].id : elementName
			} else {
				displayName = (form[elementName].title) ? (form[elementName].title) : (form[elementName].id) ? form[elementName].id : elementName;
			}

			if(!nonfilled)
				nonfilled = elementName;

			if(aantal > 0)
				nietIngevuld +="\n";

			nietIngevuld += "- " + displayName;
			aantal++;
		}
		firstc=lastc+1;
	}
	if (email && form[email].value != '' )
		wrongEmail = checkEmail(form[email].value);
	if (aantal == 1)
		melding="Het veld "+nietIngevuld+" is nog niet ingevuld";
	else if(aantal > 0) {
		var lastcomma=nietIngevuld.lastIndexOf("\n");
		nietIngevuld=nietIngevuld.substring(0,lastcomma)+"\nen '"+nietIngevuld.substring(lastcomma+2,nietIngevuld.length) + "'";
		melding="Waarschuwing!\n De gegevens voor:\n"+nietIngevuld+" zijn nog niet ingevuld.";
	}
	if (wrongEmail){
		melding+="\nDit e-mail adres is niet juist ingevuld: "+wrongEmail;
	}
	if (wrongEmail||aantal>0)
		alert(melding+".");
	if (aantal > 0 && !(wrongEmail && emailFirst) && form[nonfilled].type) {
		switch(form[nonfilled].type) {
			case 'select':
				form[nonfilled].focus();
				setTimeout("form[nonfilled].blur();",100);
				setTimeout("form[nonfilled].focus();",200);
				setTimeout("form[nonfilled].blur();",300);
				setTimeout("form[nonfilled].focus();",400);
				break;
			case 'checkbox':
				form[nonfilled].focus();
				break;
			case 'radio':
				form[nonfilled][0].focus();
				break;
			case 'file':
				form[nonfilled].focus();
				break;
			default:
				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);
				break;
		}
	} else if(wrongEmail){
		form[email].select();
		form[email].focus();
	}
	return aantal==0&&!wrongEmail;
}


