/**
* Library of functions called from the XSL-stylesheet, these functions are NOT used from the formDesigner
* @version $Id: validation.js,v 1.0 2006/7/12
* @author Ivo Toby <ivo@i-v-o.nl> 
* @copyright Internet Voor Ondernemers 2006
* @package WPS
*/
	
	//var aScripts = new Array('/wpsRepos/AJAX/general/init.js');
	//window._require(aScripts);

	function form_addAlert(elem, message){
		if (!($("form_error_" + elem.getAttribute("id")))){
			var aDiv = document.createElement("div");
			aDiv.setAttribute('id', "form_error_" + elem.getAttribute("id"));
			aDiv.setAttribute("class", "form_error");
			aDiv.appendChild(document.createTextNode(message));
			elem.parentNode.appendChild(aDiv);
		}
	}

	function form_removeAlert(elem){
		if ($("form_error_" + elem.getAttribute("id")) ) {
			elem.parentNode.removeChild($("form_error_" + elem.getAttribute("id")));
		}
	}

	function form_isNumber(elem){
		if (!isNumber(parseInt(elem.value))){
			elem.className = 'inValidElem';
			elem.value = '';
			gOk = false;
			form_addAlert(elem, 'Veld ' + elem.name+ ' moet een numerieke waarde bevatten.');
			return false;
		}else{
			gOk = true;
			form_removeAlert(elem);
			elem.className = '';
			elem.value = parseInt(elem.value);
			return true;
		}
	}
	
	function form_maxNum(elem, maxVal){
		if (parseInt(elem.value) > maxVal){
			elem.className = 'inValidElem';
			elem.value = '';
			gOk = false;
			form_addAlert(elem, 'Veld ' + elem.name+ ' mag niet hoger zijn dan ' + maxVal + ' .');
			return false;
		}else{
			gOk = true;
			form_removeAlert(elem);
			elem.className = '';
			return true;
		}
	}
	
	function form_minNum(elem, minVal){
		if (parseInt(elem.value) < minVal){
			elem.className = 'inValidElem';
			elem.value = '';
			gOk = false;
			form_addAlert(elem, 'Veld ' + elem.name+ ' mag niet lager zijn dan ' + minVal + ' .');
			return false;
		}else{
			gOk = true;
			form_removeAlert(elem);
			elem.className = '';
			return true;
		}
	}	
	
	function form_maxLength(elem, max){
		var str = new String(elem.value);
		if (str.length > max){
			elem.className = 'inValidElem';
			gOk = false;
			form_addAlert(elem, 'Veld ' + elem.name+ ' mag niet meer dan ' + max + ' karakters bevatten.');
			return false;
		}else{
			gOk = true;
			form_removeAlert(elem);
			elem.className = '';
			return true;
		}
	}
	
	function form_minLength(elem, min){
		var str = new String(elem.value);
		if (str.length < min){
			elem.className = 'inValidElem';
			gOk = false;
			form_addAlert(elem, 'Veld ' + elem.name+ ' mag niet minder dan ' + min + ' karakters bevatten.');
			return false;
		}else{
			gOk = true;
			form_removeAlert(elem);
			elem.className = '';
			return true;
		}
	}	
	
	function form_mandatory(elem, dummy){
		if (!elem.value){
			elem.className = 'inValidElem';
			gOk = false;
			//alert('Veld ' + elem.name+ ' is verplicht');
			form_addAlert(elem, 'Veld ' + elem.name+ ' is verplicht');
			return false;
		}else{
			gOk = true;
			form_removeAlert(elem);
			elem.className = '';
			return true;
		}
	}
	
	function form_isEmail(elem){
		if (!(emailCheck (elem.value))){
			elem.className = 'inValidElem';
			gOk = false;
			form_addAlert(elem, 'Veld ' + elem.name + ' bevat geen geldig emailadres');
			return false;
		}else{
			form_removeAlert(elem);
			gOk = true;
			elem.className = '';
			return true;
		}
	}
	
	
	function emailCheck (emailStr) {
		var checkTLD=1;
		var knownDomsPat=/^(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum)$/;
		var emailPat=/^(.+)@(.+)$/;
		var specialChars="\\(\\)><@,;:\\\\\\\"\\.\\[\\]";
		var validChars="\[^\\s" + specialChars + "\]";
		var quotedUser="(\"[^\"]*\")";
		var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;
		var atom=validChars + '+';
		var word="(" + atom + "|" + quotedUser + ")";
		var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
		var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$");
		var matchArray=emailStr.match(emailPat);

		if (matchArray==null) {
			return false;
		}

		var user=matchArray[1];
		var domain=matchArray[2];

		for (i=0; i<user.length; i++) {
			if (user.charCodeAt(i)>127) {
				return false;
			}
		}

		for (i=0; i<domain.length; i++) {
			if (domain.charCodeAt(i)>127) {
				return false;
			}
		}
		
		if (user.match(userPat)==null) {
			return false;
		}

		var IPArray=domain.match(ipDomainPat);
		
		if (IPArray!=null) {
			for (var i=1;i<=4;i++) {
				if (IPArray[i]>255) {
					return false;
		   		}
			}
			return true;
		}
		
		 
		var atomPat=new RegExp("^" + atom + "$");
		var domArr=domain.split(".");
		var len=domArr.length;

		for (i=0;i<len;i++) {
			if (domArr[i].search(atomPat)==-1) {
				return false;
		   }
		}

		if (checkTLD && domArr[domArr.length-1].length!=2 && domArr[domArr.length-1].search(knownDomsPat)==-1) {
			return false;
		}

		if (len<2) {
			return false;
		}
		
		return true;
	}
	
