/////////////////////////////////////////
/// 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_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 onelementmethodvalidated(sender, args)
{
	messageboxonvalidationfailed(sender, args);
}

function onelementvalidated(sender, args)
{
	if (!args.IsValid)
		args.CancelValidating = true;
}

function messageboxonvalidationfailed(sender, args)
{
	if (!args.IsValid)
	{
		alert(args.Message);
		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;
	}
}