var kleurOK = "#E5FFE5";
var kleurError = "#FFE5E5";

function setColor(eenElement, kleur) {
	if (eenElement.style) {
		if (window.addEventListener && (eenElement.type == "radio" || eenElement.type == "checkbox")) {
			eenElement.parentNode.style.backgroundColor = kleur;
			eenElement.parentNode.style.border = "thin groove";
			eenElement.parentNode.style.margin = "1px";
			eenElement.parentNode.style.padding = "3px";
			eenElement.parentNode.style.lineHeight = "130%";
		}
		else if (eenElement.type == "radio") {
			eenElement.parentNode.style.border = "thin groove";
			eenElement.parentNode.style.margin = "1px";
		}
		eenElement.style.backgroundColor = kleur;
	}
}


if (window.addEventListener) {
	window.addEventListener('load',firstFocus,false);
}
else {
	window.attachEvent('onload',firstFocus);
}

function firstFocus() {
	for (j = document.forms.length - 1; j >= 0; j--) {
		var eenForm = document.forms[j];
		if (window.addEventListener) {
			eenForm.addEventListener('submit',doValidate,false);
		}
		else {
			eenForm.attachEvent('onsubmit',doValidate);
		}
		for (var i = 0; i < eenForm.length; i++) {
			eenForm.elements[i].lastPass = false;
			if (window.addEventListener) { // Mozilla, Netscape, Firefox
				eenForm.elements[i].addEventListener('submit',doValidate,false);
				eenForm.elements[i].addEventListener('keyup',doValidate,false);
				eenForm.elements[i].addEventListener('change',doValidate,false);
				eenForm.elements[i].addEventListener('click',doValidate,false);
				eenForm.elements[i].addEventListener('keypress',KeyboardHandler,false);
				eenForm.elements[i].addEventListener('keyup',ArrowHandler,false);
			}
			else { // IE
				eenForm.elements[i].attachEvent('onsubmit',doValidate);
				eenForm.elements[i].attachEvent('onkeyup',doValidate);
				eenForm.elements[i].attachEvent('onchange',doValidate);
				eenForm.elements[i].attachEvent('onclick',doValidate);
				eenForm.elements[i].attachEvent('onkeypress',KeyboardHandler);
				eenForm.elements[i].attachEvent('onkeyup',ArrowHandler);
			}
		}
		document.body.style.visibility = "visible";
		for (var x = 0; x < eenForm.length; x++) {
			if (
			(eenForm.elements[x].type == "text") ||
			(eenForm.elements[x].type == "textarea") ||
			(eenForm.elements[x].type.toString().charAt(0) == "s")
			) {
				eenForm.elements[x].focus();
				doValidate(eenForm);
				break;
			}
		}
		updateForm(eenForm);
	}
}

function doValidate(e) {
	if (!e) var e = window.event;

	var eenElement = getElement(e);
	dump(eenElement);
	var pass = true;
	var firstone = 0;
	var autoFocus = 0;
	var passval = true;
	var which;

	switch(e.type) {
		case 'load' : { which = e; break; }
		case 'submit' : { which = eenElement; break; }
		case 'keyup' : { which = eenElement.form; break; }
		case 'change' : { which = eenElement.form; break; }
		case 'click'	: { which = eenElement.form; break; }
		default : { which = document.forms[0]; break; }
		//default : { return; }
	}
	for (var i = which.length - 1;i >= 0; i--) {
		var self = which.elements[i];

		attLength = self.attributes.length;
		mask = false;
		for (t = 0; t < attLength; t++) {
			if (self.attributes[t].name == "validate") {
				mask = self.attributes[t].value;
			}
		}
		if ((mask || self.dbtype) && !self.readOnly) { // Has 'validate' field
			if ( (self.venabled == undefined) || (self.venabled == 1) ) { // Is enabled to validate
				if (mask.charAt(0) == "/") { // Validate is a regular expression
					if (self.type == "checkbox" || self.type == "radio") {
						pass = String(self.checked).match(eval(mask));
					}
					else {
						pass = self.value.match(eval(mask));
					}
				}
				else {
					pass = eval(mask); // Validate is a javascript function
				}
				if (pass) {
					self.pass = true;
					if ((self.pass != self.lastPass) || (e.type == 'click')) {
						try {
							eval (self.onvalid);
						}
						catch(r) {
							alert(r.description + ' in veld ' + self.name)
						}
					}
				}
				else {
					self.pass = false;
					if ((self.pass != self.lastPass) || (e.type == 'click')) {
						try {
							eval (self.oninvalid);
						}
						catch(r) {
							alert(r.description + ' in veld ' + self.name)
						}
					}
				}
			}
			else {
			}
		}
		self.lastPass = pass;
	}
	firstone = updateForm(which);
}

function getElement(eenEvent) {
	if (eenEvent.srcElement)
	{
		return eenEvent.srcElement;
	}
	else {
		return eenEvent.target;
	}
}

function isRadioChecked(rbName) {
	if (rbName.form[rbName.name].checked) return true; //als het 1 radiobutton is is het geen array
	var count = rbName.form[rbName.name].length;
	for (var t = 0; t < count; t++) {
		if (rbName.form[rbName.name][t].checked) {
			return true;
		}
	}
	return false;
}

function isCheckboxChecked(cbName) {
	if (cbName.form[cbName.name].checked) return true;
	return false;
}

function KeyboardHandler(event) {
	var eenElement = getElement(event);

	var content = eenElement.value;
	var fields = eenElement.form.elements.length;
	var picFormatters = "09aAxX@_";
	var key = event.keyCode;
	var char = String.fromCharCode(key);
	var direction = 0;
	if (eenElement.allowed) {
		alert(char + " match against " + eenElement.allowed + " = " + char.match(eval(eenElement.allowed)));
		if ( char.match(eval(eenElement.allowed)) ) {
		}
		else {
			event.returnValue = false;
			return false;
		}
	}
	if (eenElement.denied) {
		if ( char.match(eval(eenElement.denied)) ) {
			event.returnValue = false;
			return false;
		}
	}
	if (content.length >= eenElement.maxLength) {
		return;
	}
	if (eenElement.picture) {
		var picOK = true;
		var picClass = eenElement.picture.charAt(eenElement.value.length);
		event.returnValue = false;
		switch (picClass) {
			case '9' : if (isKeyDigit() == -1) { picOK = false; return; }
			; break;
			case 'x' : if (isKeyUpperCase != -1) { keyLowercase(); }
			if (isKeyLowerCase() == -1) { picOK = false; return; }
			; break;
			case 'X' : if (isKeyLowerCase != -1) { keyUppercase(); }
			if (isKeyUpperCase() == -1) { picOK = false; return; }
			; break;
			case 'a' : if (isKeyUpperCase != -1) { keyLowercase(); }
			break;
			case 'A' : if (isKeyLowerCase != -1) { keyUppercase(); }
			break;

		}
		if (picFormatters.indexOf(picClass) < 0) {
			picOK = false;
		}
		if (picOK) {
			content = content + String.fromCharCode(event.keyCode);
		}
		else {
			content = content + picClass;
		}
		if (content.length <= eenElement.maxLength) {
			var picNext = eenElement.picture.charAt(content.length);
			if (picFormatters.indexOf(picNext) < 0) {
				content = content + picNext;
			}
		}
		eenElement.value = content;
	}
}

function ArrowHandler(event) {
	var eenElement = getElement(event);

	var content = eenElement.value;
	var fields = eenElement.form.elements.length;
	var key = event.keyCode;
	var direction = 0;
	var i;
	if (eenElement.autonext == true) {
		if (eenElement.value.length >= eenElement.maxLength) {
			direction = 1;
		}
	}
	if (event.keyCode == 38) {
		direction = -1;
	}
	if (event.keyCode == 40) {
		direction = 1;
	}
	if (eenElement.type != 'text') {
		direction = 0;
	}
	if (direction == 0) {
		return;
	}
	for (i = 0; i < fields; i++) {
		if (eenElement == eenElement.form.elements[i]) {
			break;
		}
	}
	do {
		i += direction;
		if (i >= fields) {
			i = 0
		}
		if (i < 0) {
			i = fields-1;
		}
	}
	while ((eenElement.form.elements[i].type == 'hidden') || (eenElement.form.elements[i].type == 'submit') || (eenElement.form.elements[i].readOnly == true));
	eenElement.form.elements[i].focus();
}

function updateForm(which) {

	var passval = true;
	var firstone;
	for (var i = which.length-1;i >= 0;i--) {
		var self = which.elements[i];
		
		
		// Hier gaat het fout, `self` heeft alleen 'natuurlijke' attributen o_O
		
		attLength = self.attributes.length;
		
		mask = false;
		for (t = 0; t < attLength; t++) {
			
			if (self.attributes[t].name == "validate") {
				mask = self.attributes[t].value;
				
			}
		}
		
		if ((mask || self.dbtype) && !self.readOnly) {
			
			if ( (self.venabled == undefined) || (self.venabled == 1)) { // Is enabled to validate
				
				if (self.pass) {
					
					if (self.type == "radio") {
						var count = self.form[self.name].length;
						for (var j = 0; j < count; j++) {
							setColor(self.form[self.name][j], kleurOK);
						}
					}
					
					setColor(self, kleurOK);

				}
				else {
					if (self.type == "radio") {
						var count = self.form[self.name].length;
						for (var j = 0; j < count; j++) {
							setColor(self.form[self.name][j], kleurError);
						}
					}
					passval = false;
					firstone = self;
					setColor(self, kleurError);
				}
			}
			else {
				//if (self.type != 'button') self.className = "InputNV";
			}
		}
		else {
			//if (self.type != 'button') self.className = "InputNV";
		}
	}
	return firstone;
}

function betaalwijzeIsMachtiging(which) {
	if (which.form["bestellingBetaalwijze"][0].checked == which.form["bevestiging"].checked) return true;
	return false;
}

function dump(tekst) {
	//document.getElementById("dumpdiv").innerHTML = "Dump: " + tekst;
}

