var validationMessage = new Object();
validationMessage['required'] = 'This field is required';
validationMessage['pattern'] = 'Patroon incorrect (schrijf svp. normale error message in patternDesc attribuut)';


/** HIER CUSTOM FUNCTIES DEFINIEREN **/

var validationFunctions = new Object();
validationFunctions["required"] = isRequired;
validationFunctions["pattern"] = isPattern;


function isRequired(obj)
{
	if (!obj.value)
		return false;
	else
		return true;
}

function isPattern(obj,pattern)
{
	if (!pattern) var pattern = obj.getAttribute('pattern');
	var regExp = new RegExp("^"+pattern+"$","");
	var correct = regExp.test(obj.value);
	if (!correct && obj.getAttribute('patternDesc'))
		correct = obj.getAttribute('patternDesc');
	return correct;
}


// Defaultfunctie voor ongedefinieerde waardes in "validation"

function empty()
{
	return true;
}

/*********************************/

/** DIT IS DE VASTE KERN, SVP NIET WIJZIGEN **/

function initFormValidation() {
	var x = document.forms;
	for (var i=0;i<x.length;i++)
	{
		document.forms[i].onsubmit = function () {
			return validate(this);
		};
	}
}


function validate(theForm)
{
	var x = theForm.elements;
	var valideFormulier = true;
	var eersteFout = null;
	for (var i=0;i<x.length;i++)
	{

//		if (isInWaitingRoom && isInWaitingRoom(x[i])) continue; // alleen in combi met Usable Forms

		if (x[i].className.indexOf('foutmelding') != -1)
			x[i].className = x[i].className.substring(0,x[i].className.lastIndexOf(' '));
		

		var req = x[i].getAttribute('validation');
		if (!req) continue;
		var reqs = req.split(' ');
		if (x[i].getAttribute('pattern'))
			reqs[reqs.length] = 'pattern';
		for (var j=0;j<reqs.length;j++)
		{
			if (reqs[j] != 'required' && !x[i].value) break;
			if (!validationFunctions[reqs[j]])
				validationFunctions[reqs[j]] = empty;
			var OK = validationFunctions[reqs[j]](x[i]);
			if (OK != true)
			{
				var foutMelding = (OK == false) ? validationMessage[reqs[j]] : OK;
				meldFout(x[i],foutMelding)
				valideFormulier = false;
				if (!eersteFout)
					eersteFout = x[i];
			}
		}


	}
	
/*	if (!valideFormulier)
	{
		alert("Errors have been found");
//		eersteFout.focus();
	} */
	return valideFormulier;
	
}

function meldFout(obj,boodschap)
{
	obj.className += ' foutmelding';
	if (obj.onchange)
		obj.oldChangeHandler = obj.onchange
	obj.onchange = verwijderFout;
	if (obj.foutMelding || obj.parentNode.foutMelding) return;
	var sp = document.createElement('span');
	sp.className = 'foutmelding';
	sp.appendChild(document.createTextNode(boodschap));
	obj.parentNode.insertBefore(sp,obj);
	obj.foutMelding = sp;
	obj.parentNode.foutMelding = sp;
}

function verwijderFout()
{
	this.className = this.className.substring(0,this.className.lastIndexOf(' '));	
	if (this.foutMelding) 	{
		this.parentNode.removeChild(this.foutMelding);
		this.foutMelding = null;
		this.parentNode.foutMelding = null;
	}
	this.onchange = null;
	if (this.oldChangeHandler) {
		this.onchange = this.oldChangeHandler;
		this.oldChangeHandler = null;
		this.onchange();
	}
}

// push and shift for IE5

function Array_push() {
	var A_p = 0
	for (A_p = 0; A_p < arguments.length; A_p++) {
		this[this.length] = arguments[A_p]
	}
	return this.length
}

if (typeof Array.prototype.push == "undefined") {
	Array.prototype.push = Array_push
}

function Array_shift() {
	var A_s = 0
	var response = this[0]
	for (A_s = 0; A_s < this.length-1; A_s++) {
		this[A_s] = this[A_s + 1]
	}
	this.length--
	return response
}

if (typeof Array.prototype.shift == "undefined") {
	Array.prototype.shift = Array_shift
}
