/* quirksmode.org form validation script */
/* aangepast door Rutger Laurman - i-Aspect */

/* event adding */
   function addEventSimple(obj,evt,fn) {
		if (obj.addEventListener)
			obj.addEventListener(evt,fn,false);
		else if (obj.attachEvent)
			obj.attachEvent('on'+evt,fn);
	}

/* form validating */
   var validationErrorMessage = new Object();
   validationErrorMessage['required'] = ' ';
   validationErrorMessage['requiredsmall'] = 'Verplicht';
   validationErrorMessage['numeric'] = 'Dit veld moet numeriek zijn';
   validationErrorMessage['postcode'] = 'Dit veld moet een postcode zijn';
   validationErrorMessage['pattern'] = 'Patroon onjuist';
   validationErrorMessage['email'] = 'Onjuist email adres';
   validationErrorMessage['emailsmall'] = 'Onjuist email adres';

   var validationFunctions = new Object();
   validationFunctions["required"] = isRequired;
   validationFunctions["requiredsmall"] = isRequired;
   validationFunctions["pattern"] = isPattern;
   validationFunctions["postcode"] = isPostCode;
   validationFunctions["numeric"] = isnumeric;
   validationFunctions["emailsmall"] = isEmail;
   validationFunctions["email"] = isEmail;

   function isRequired(formField) {
   	switch (formField.type) {
   		case 'hidden':			
   		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 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+");
   }

   // aangepast, oude functie voldeed niet
   function isEmail(formField) {
   	var reg1 = /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/; // not valid
   	var reg2 = /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/; // valid
   	if (!reg1.test(formField.value) && reg2.test(formField.value))
        return true;
   	else
   	   return false;

   }

   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++) {
			if(forms[i].id=='zoekblok') continue;
	   		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("Het formulier is niet juist ingevuld");
   		/*location.hash = '#contactform';*/
   	}
   	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;
   }
*/
   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;
   }

/* custom extended email validation */
function validateEmail(email){
   if(email.length <= 0){
      return false;
   }
   var splitted = email.match("^(.+)@(.+)$");
   if(splitted == null) return false;
   if(splitted[1] != null ) {
      var regexp_user=/^\"?[\w-_\.]*\"?$/;
      if(splitted[1].match(regexp_user) == null) return false;
   }
   if(splitted[2] != null) {
      var regexp_domain=/^[\w-\.]*\.[A-Za-z]{2,4}$/;
      if(splitted[2].match(regexp_domain) == null) {
         var regexp_ip =/^\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\]$/;
         if(splitted[2].match(regexp_ip) == null) return false;
      }// if
      return true;
   }
   return false;
}