function validateEmail(s_email)
{
	var i = s_email.indexOf(' ',0);
	while(i > -1)
	{
		s_email = s_email.substring(0,i) + 
		s_email.substring((i + 1),s_email.length);
		i = s_email.indexOf(' ',0);
	}
	if((s_email.length < 6) ||
	   (s_email.indexOf('@',0) < 1) ||
	   (s_email.lastIndexOf('@') != s_email.indexOf('@',0)) ||
	   (s_email.lastIndexOf('@') > (s_email.length - 5)) ||
	   (s_email.lastIndexOf('.') > (s_email.length - 3)) ||
	   (s_email.lastIndexOf('.') < (s_email.length - 4)) ||
	   (s_email.indexOf('..',0) > -1) ||
	   (s_email.indexOf('@.',0) > -1) ||
	   (s_email.indexOf('.@',0) > -1) ||
	   (s_email.indexOf(',',0) > -1))
	{
		return false;
	}
	return true;
}

function validateName(sVal)
{ 
	var regex=/^([a-zA-Z\s]{2,32})$/;
	return regex.test(sVal);
}

function validateNumeric(sVal)
{ 
	var regex=/^(\d|-)?(\d|,)*\.?\d*$/;
 	return regex.test(sVal);
}

function validateCode(sVal)
{ 
	var regex=/^([a-z0-9]{4})$/;
	return regex.test(sVal);
}

// TODO
function validatePassw(sVal)
{
	var regex=/^([a-z0-9]{6, 16})$/;
	return regex.test(sVal);
}

// generieke form validatie - in onLoad attachFormHandler aangeroepen

// koppelt alle forms aan een nieuwe instantie van FormValidation
function attachFormHandler()
{
	var objForms = document.getElementsByTagName('form');
	for (var i=0; i<objForms.length; i++)
	{
		var objForm = objForms[i];
		new FormValidation.init(objForm);
	}
}

// globale validatie variable 
var FormValidation = {
	objForm : null,
	formvalidationSep : '',
	errDiv : null,
	extraFunc : null,
	init : function(oForm) {
		FormValidation.objForm = oForm;
		var sRules = FormValidation.objForm.className.split(' ');
		if(sRules.length >= 2)
		{
			if(sRules[0] == 'direct')
			{
				var objInputs = FormValidation.getInputElements();
				for (var i=0; i<objInputs.length; i++)
				{
					var objInput = objInputs[i];
					objInput.onblur = function(){FormValidation.validateInput(this, false)};
					objInput.onfocus = function(){FormValidation.resetInputError(this);};
				}
			}
			if(sRules[1] == 'alert')
				FormValidation.formvalidationSep = '\n';
			else
			{
				FormValidation.formvalidationSep = '<br/>';
				FormValidation.errDiv = document.getElementById(sRules[1]);
			}
			if(sRules.length == 3) // de exta validatie functie
				FormValidation.extraFunc = sRules[2];

			FormValidation.objForm.onsubmit = function(){return FormValidation.validateForm(this);}
		}
	},
	getInputElements : function() {
		var ret = Array(); var j = 0; var i;
		var objInputs = FormValidation.objForm.getElementsByTagName('input');
		for (i=0; i<objInputs.length; i++) {
			ret[j++] = objInputs[i];
		}
		var objInputs = FormValidation.objForm.getElementsByTagName('textarea');
		for (i=0; i<objInputs.length; i++) {
			ret[j++] = objInputs[i];
		}
		return ret;
	},
	unescapeHTML : function(s) { // uit prototype
	    var div = document.createElement('div');
		//s = s.replace(/<\/?[^>]+>/gi, '');
    	div.innerHTML = s.replace(/~/g, " ");
    	return div.childNodes[0] ? div.childNodes[0].nodeValue : '';
  	},
	getInputErrDiv : function(objInput) {
		var sRules = objInput.className.split(' ');
		if(sRules.length >= 5)
			return document.getElementById(sRules[3]);
	},
	resetInputError : function(objInput) {
		objInput.style.backgroundColor = '#ffffff';
		var myDivErr = FormValidation.getInputErrDiv(objInput);
		if(myDivErr)
		{
			myDivErr.style.display = 'none';
			//myDivErr.innerHTML = '';
		}
		return true;
	},
	validateForm : function() {
		var bFocus = true;
		var formvalidationErr = '';
		if(FormValidation.errDiv)
			FormValidation.errDiv.innerHTML='';
		var objInputs = FormValidation.getInputElements();
		for (var i=0; i<objInputs.length; i++)
		{
			var objInput = objInputs[i];
			var sTmp = FormValidation.validateInput(objInput, true);
			if(sTmp)
			{
				formvalidationErr += '- ' + sTmp + FormValidation.formvalidationSep;
				if(bFocus)
				{
					bFocus = false;
					//objInput.focus();
					/*
					objInput.style.backgroundColor = '#FF9D9D';
					var myDivErr = FormValidation.getInputErrDiv(objInput);
					if(myDivErr)
						myDivErr.style.display = 'block';*/
				}
			}
			
		}
		if(formvalidationErr == '' && FormValidation.extraFunc != null)
			formvalidationErr = eval(FormValidation.extraFunc + '(FormValidation.objForm)');
		if(formvalidationErr)
		{
			if(FormValidation.errDiv)
			{
				FormValidation.errDiv.innerHTML = 'The form was not filled in correctly<br/><br/>' + formvalidationErr;
			}
			else
			{
				alert('The form was not filled in correctly' + '\n\n' + formvalidationErr)
			}
			return false;
		}
		return true;
	},
	validateInput : function(objInput, doRet) {
		
		var sRules = objInput.className.split(' ');
		var sFeedback = '', sFormFeedback = '';
		if(sRules.length >= 5)
		{
			//alert('validating input ' + objInput.name + ' return = ' + doRet);
			if(FormValidation.errDiv && doRet == false)
				FormValidation.errDiv.innerHTML='';
			if(sRules[0] == 'validate')
			{
				var myDivErr = document.getElementById(sRules[3]);
				//alert(myDivErr);
				if(sRules[1] == 'required' && objInput.value == '')
				{
					sFormFeedback = FormValidation.unescapeHTML(sRules[4]) + '  is invalid';
					sFeedback = 'required';
				}
				if(sFeedback == '' && objInput.value != '')
				{
					if(sRules[2] == 'email')
					{
						if(validateEmail(objInput.value) == false)
						{
							if(sRules.length == 6)
							{
								sFormFeedback = FormValidation.unescapeHTML(sRules[5]);
								sFeedback = FormValidation.unescapeHTML(sRules[5]);
							}
							else
							{
								sFormFeedback = FormValidation.unescapeHTML(sRules[4]) + ' is invalid';
								sFeedback = 'invalid e-mail address';
							}
						}
					}
					else if(sRules[2] == 'name')
					{
						if(validateName(objInput.value) == false)
						{
							if(sRules.length == 6)
							{
								sFormFeedback = FormValidation.unescapeHTML(sRules[5]);
								sFeedback = FormValidation.unescapeHTML(sRules[5]);
							}
							else
							{
								sFormFeedback = FormValidation.unescapeHTML(sRules[4]) + ' is invalid';
								sFeedback = 'invalid name';
							}
						}
					}
					else if(sRules[2] == 'code')
					{
						if(validateCode(objInput.value) == false)
						{
							if(sRules.length == 6)
							{
								sFormFeedback = FormValidation.unescapeHTML(sRules[5]);
								sFeedback = FormValidation.unescapeHTML(sRules[5]);
							}
							else
							{
								sFormFeedback = FormValidation.unescapeHTML(sRules[4]) + ' is invalid';
								sFeedback = 'false';
							}
						}
					}
				}
				if(myDivErr)
				{
					if(sFeedback)
					{
						myDivErr.style.display = 'block';
						myDivErr.innerHTML = sFeedback;
						objInput.style.backgroundColor = '#FF9D9D';
					}
					else
					{
						myDivErr.style.display = 'none';
						myDivErr.innerHTML='';
						objInput.style.backgroundColor = '#ffffff';
					}
				}
			}
		}
		if(doRet)
			return sFormFeedback;
	}
};
