/////////////////////////////////////////
/// Validation
/// Version 1.3	- Increase the version when you change this file.
/// Created by Covadis.
/////////////////////////////////////////

function is_empty(sender, args)
{
	return (args.Value.length > 0);
}	

function is_email(sender, args)
{
	var str = args.Value;
	var at = "@";
	var dot = ".";
	var lat = str.indexOf(at);
	var lstr = str.length;
	var ldot = str.indexOf(dot);
	return args.Value.match(/\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/);
}

/*
 *	Toegevoegd op 22-5-2006 door Lucas
 */
function is_postcode(sender, args)
{
	return args.Value.match(/^[0-9]{4}[ ]?[a-zA-Z]{2}$/);
}

function is_minute(tekst)
{
	if(tekst != ''){
		if(parseInt(tekst) < 60){
			return true;
		}
		else
		{
			return false;
		}
	}
	else
	{
		return true;
	}
}

function is_hour(tekst)
{
	if(tekst != ''){
		if(parseInt(tekst) <= 800){
			return true;
		}
		else
		{
			return false;
		}
	}
	else
	{
		return true;
	}
}

/*
*	Toegevoegd op 13-8-2007 door Paul
*/
function is_bankaccount(sender, args)
{
	if(args.Value != '') {
		if(args.Value.length >= 9 && args.Value.length <= 10) {
			// bankrekening
			
			// ### Totaal.
			var iTotal = 0;

			// ### Langs alle nummers heen lopen.
			for(i = 0; i < (args.Value.length);i++)
			{
				iTotal += (args.Value.substr(i, 1) * (9 - i));
			}
			
			// ### Totaal getal delen door 11.
			if (iTotal % 11 != 0)
			{
				return false;
			} else{
				return true;
			}
		} else {
			// postbank girorekening
			if(args.Value.substr(0,1) == 'p') {
				return true;
			} else {
				return false;
			}
		}
	} else {
		return true;
	}
}

function is_numeric(sender, args)
{
	return !isNaN(args.Value);
}

function is_checked(sender, args)
{
	retval = true;
	if(args.Form[sender.name].length)
	{
		for(cnt_elements=0; cnt_elements < args.Form[sender.name].length; cnt_elements++)
		{
			if(args.Form[sender.name][cnt_elements].checked)
			{
				retval = false;
			}
		}
	}
	else
	{		
		if(args.Form[sender.name].checked)
		{
			retval = false;
		}
	}
	return !retval;
}

function execute_function(validation_type, form_element, form_object)
{
	sender = form_element;
	value = sender.value;
	args = {
		IsValid:true,
		Value:value,
		Form:form_object,
		Element:sender
		};
	var evalValue = eval(validation_type);
	if (typeof(evalValue) == "function")
	{
		evalValue = eval(validation_type + "(sender, args)");
	}
	return evalValue;
}

function validateForm(form_object)
{
	IsValid = true;
	for(i=0; i < form_object.elements.length; i++)
	{
		if(form_object.elements[i].getAttribute("validationmethod") == null)
			continue;
		if(form_object.elements[i].getAttribute("validationmethod").length > 0)
		{
			params 		= form_object.elements[i].getAttribute("validationmethod").split(";");
			validmsgs	= form_object.elements[i].getAttribute("validationmsg").split(";");
			
			var elementValidationResult = true;
			var validationCancelled = false;
			for(j=0; j < params.length; j++)
			{								
				var validationResult = execute_function(params[j], form_object.elements[i], form_object);
				if (!validationResult)
					elementValidationResult = false;
				args = {
					IsValid:validationResult,
					CancelValidating:false,
					Form:form_object,
					Element:form_object.elements[i],
					Message:validmsgs[j]
					};
				onelementmethodvalidated(sender, args);
				if (args.CancelValidating)
				{
					validationCancelled = true;
					break;
				}
			}
			
			args = {
				IsValid:elementValidationResult,
				CancelValidating:false,
				Form:form_object,
				Element:form_object.elements[i]
				};
			onelementvalidated(form_object, args);
			if (!elementValidationResult)
				IsValid = false;
			if (args.CancelValidating)
			{
				validationCancelled = true;
				break;
			}
				
		}
	}
	return IsValid;
}

function DoValidateElement(sender)
{
	if(validateElement(document.forms[0], sender)) {
		if(sender.type == "text") {
			sender.style.border = "1px solid #909090";
		} else if(sender.type == "select-multiple" || sender.type == "select-one") {
			sender.parentNode.style.border = '2px solid beige';
		}
	} else {
		if(sender.type == "text") {
			sender.style.border = "2px solid red";
		} else if(sender.type == "select-multiple" || sender.type == "select-one") {
			sender.parentNode.style.border = '2px solid red';
			
		}
	}
}

function validateElement(form_object, form_element)
{
	var IsValid = true;
	if(form_element.getAttribute("validationmethod") != null) {
		if(form_element.getAttribute("validationmethod").length > 0)
		{
			params 		= form_element.getAttribute("validationmethod").split(";");
			validmsgs	= form_element.getAttribute("validationmsg").split(";");
			for(j=0; j < params.length; j++)
			{	
				var validationResult = execute_function(params[j], form_element, form_object);
				if (!validationResult) 
				{
					return false;
				}
			}
			return true;
		}
	}
	return false;		
}

function onelementmethodvalidated(sender, args)
{
	messageboxonvalidationfailed(sender, args);
}

function onelementvalidated(sender, args)
{
	if (!args.IsValid)
		args.CancelValidating = true;
}

function inArray(needle, haystack) {
	for(var i = 0; i < haystack.length; i++) {
		if(haystack[i] == needle) {
			return true;
		}
	}
	return false;
}

function messageboxonvalidationfailed(sender, args)
{
	if (!args.IsValid)
	{
		alert(args.Message);
		try 
		{
			args.Element.focus();			
		}
		catch(err)
		{			
			
			// fetch validation tab IDs
			if(validationTabs != null && validationTabs != '') {
				var arr_divs = validationTabs.split(";");				
				
				// go up the node tree to find the parent div				
				var target = args.Element;			
				var targetID = target.getAttribute("id");				
				while(target.nodeName != 'DIV' || !inArray(targetID, arr_divs)) {			
					// keep the node travel above the attribute setting.
					target = target.parentNode;					
					targetID = target.getAttribute("id");
				}				
				
				// show the parent tab
				var tabID = parseInt(targetID.substring(1,2)) - 1;
				tabs.set('activeIndex', tabID);
				
				// retry to focus on the erring element
				args.Element.focus();
			}	
		}
		args.CancelValidating = true;
	}
}

function turnredonvalidationfailed(sender, args)
{
	if (args.Element.oldstyleborder == null)
		args.Element.oldstyleborder = args.Element.style.border;
	if (args.IsValid)
	{
		args.Element.style.border = args.Element.oldstyleborder;
	}
	else
	{
		args.Element.style.border = "2px solid #FF0000";
		args.CancelValidating = true;
	}
}

function SetRedFields()
{
	var inputFields = document.forms[0].elements;
	for(i = 0; i < inputFields.length; i++) {
		try {
			if(inputFields[i].getAttribute("validationmethod") != null && inputFields[i].getAttribute("validationmethod") != "") {
				DoValidateElement(inputFields[i]);
			}
		} catch (err) {
			break;
		}
	}
}

function LeavePage(){
	return 'Niet opgeslagen gegevens zullen verloren gaan.';
}

function SetUnload(){
	//alert("test");
	window.onbeforeunload = null;
}

function isNumber(field) {
	var re = /^[0-9-'.'-',']*$/;
	if (!re.test(field.value)) {
		field.value = field.value.replace(/[^0-9-'.'-',']/g,"");
	}
}
