	var validationErrorMessage = new Object();
	validationErrorMessage['required'] = 'Champ obligatoire';
	validationErrorMessage['numeric'] = 'Champ num\351rique';
//	validationErrorMessage['postcode'] = 'This field must hold a Dutch postal code';
//	validationErrorMessage['pattern'] = 'Pattern incorrect';
	validationErrorMessage['email'] = 'Adresse email erron\351e';
	validationErrorMessage['list'] = 'Vous devez choisir une heure de visite.';
	
	var validationFunctions = new Object();
	validationFunctions["required"] = isRequired;
//	validationFunctions["pattern"] = isPattern;
//	validationFunctions["postcode"] = isPostCode;
	validationFunctions["numeric"] = isNumeric;
	validationFunctions["email"] = isEmail;
	validationFunctions["list"] = isList;
	
	function addEventSimple(obj,evt,fn) {
		if (obj.addEventListener)
			obj.addEventListener(evt,fn,false);
		else if (obj.attachEvent)
			obj.attachEvent('on'+evt,fn);
	}
	
	function removeEventSimple(obj,evt,fn) {
		if (obj.removeEventListener)
			obj.removeEventListener(evt,fn,false);
		else if (obj.detachEvent)
			obj.detachEvent('on'+evt,fn);
	}
	
	function isRequired(formField) {
		switch (formField.type) {
			case 'text':
			case 'textarea':
			case 'select-one':
				if (formField.value) return true;
				return false;
			case 'radio':
				var radios = formField.form[formField.name];
				for (var i=0;i<radios.length;i++) {
					if (radios[i].checked) return true;
				}
				return false;
			case 'checkbox':
				return formField.checked;
		}
	}

	function isList(formField) {
		if (formField.value != -1) return true;
		return false;
	}

	function isPattern(formField,pattern) {
		var pattern = pattern || formField.getAttribute('pattern');
		var regExp = new RegExp("^"+pattern+"$","");
		var correct = regExp.test(formField.value);
		if (!correct && formField.getAttribute('patternDesc'))
			correct = formField.getAttribute('patternDesc');
		return correct;
	}
	
/*	function isPostCode(formField) {
		return isPattern(formField,"\\d{4}\\s*\\D{2}");
	}*/
	
	function isNumeric(formField) {
//		return isPattern(formField,"\\d+");
		return isPattern(formField,"[\\d\\s]+");
	}
	

	function isEmail(formField) {
//	return isPattern(formField,"\\w*@\\w*\.\\w{2,4}");
	return isPattern(formField,"[\\w-\\.]+@([\\w-]+\\.)+[\\w-]{2,4}");
	}
	
	function emptyFunction() {
		return true;
	}
	
	/*********************************/
	
	var W3CDOM = document.createElement && document.getElementsByTagName;
	
	function validateForms() {
		if (!W3CDOM) return;
		var forms = document.forms;
		for (var i=0;i<forms.length;i++) {
			forms[i].onsubmit = validate;
		}
	}
	
	addEventSimple(window,'load',validateForms);
	
	function validate() {
		var els = this.elements;
		var validForm = true;
		var firstError = null;
		for (var i=0;i<els.length;i++) {
			if (els[i].removeError) els[i].removeError();
			var req = els[i].getAttribute('validation');
			if (!req) continue;
			var reqs = req.split(' ');
			if (els[i].getAttribute('pattern')) reqs[reqs.length] = 'pattern';
			for (var j=0;j<reqs.length;j++) {
				if (!validationFunctions[reqs[j]]) validationFunctions[reqs[j]] = emptyFunction;
				var OK = validationFunctions[reqs[j]](els[i]);
				if (OK != true) {
					var errorMessage = OK || validationErrorMessage[reqs[j]];
					writeError(els[i],errorMessage)
					validForm = false;
					if (!firstError) firstError = els[i];
					break;
				}
			}
		}
	
		if (!validForm) {
//			alert("Fouten zijn gevonden");
//			location.hash = '#topOfForm';
		}
		return validForm;
		
	}
	
	function writeError(obj,message) {
		obj.className += ' errorMessage';
		obj.onchange = removeError;
		if (obj.errorMessage || obj.parentNode.errorMessage) return;
		var errorMessage = document.createElement('label');
		errorMessage.className = 'errorMessage';
//		errorMessage.setAttribute('for',obj.id);
//		errorMessage.setAttribute('htmlFor',obj.id);
		errorMessage.appendChild(document.createTextNode(message));
		obj.parentNode.appendChild(errorMessage);
		obj.errorMessage = errorMessage;
		obj.parentNode.errorMessage = errorMessage;
	}
	
	function removeError() {
		this.className = this.className.replace(/errorMessage/,'');
		if (this.errorMessage) {
			this.parentNode.removeChild(this.errorMessage);
			this.errorMessage = null;
			this.parentNode.errorMessage = null;
		}
		this.onchange = null;
	}