/////////////////////////////////////////
/// 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 is_equal(sender, args)
{
    var isEqual = false;
    if (args.Element.Value == args.Element.compare_to.Value){    
        isEqual = true;
        }
        
    return isEqual;
}

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;
}

// Global var ItemCount
var itemCount;
var Messages;

function validateElement(element)
{
			Messages = "";
			params 	= element.getAttribute("validationmethod").split(";");
			validmsgs	= element.getAttribute("validationmsg").split(";");
			
			var elementValidationResult = true;
			var validationCancelled = false;
			for(j=0; j < params.length; j++)
			{								
				var validationResult = execute_function(params[j], element, document.forms[0]);
				if (!validationResult)
					elementValidationResult = false;
				args = {
					IsValid:validationResult,
					CancelValidating:false,
					Form:document.forms[0],
					Element:element,
					Message:validmsgs[j]
					};
				onelementmethodvalidated(sender, args);
				
				if (args.CancelValidating)
				{
				
					/*
					if (params.length > 1)
					{
						if (j != 0)
						{
							var validationResult2 = execute_function(params[0], element, document.forms[0]);
							if (!validationResult2)
								Messages += " - " + validmsgs[0] + "\r\n";
							else	
								Messages += " - " + validmsgs[j] + "\r\n";
						}
					}
					else
					{
						Messages += " - " + args.Message + "\r\n";					
					}
					
					*/
					
					itemCount++;
					validationCancelled = true;
					continue;
					//break;
				}
			}
			
			args = {
				IsValid:elementValidationResult,
				CancelValidating:false,
				Form:document.forms[0],
				Element:element
				};
			onelementvalidated(document.forms[0], args);
			if (!elementValidationResult)
				IsValid = false;
			if (args.CancelValidating)
			{
				itemCount++;
				validationCancelled = true;
				//break;
			}
			
		//	if (!args.IsValid)
			//	alert(Messages)
}


function validateForm(form_object)
{
	Messages = "";
	itemCount = 0;
	IsValid = true;
	
	for(i=0; i < form_object.elements.length; i++)
	{
		if(form_object.elements[i].getAttribute("validationmethod") == null)
			continue;
		
		/*
		    if(paymentDropdown != undefined && paymentDropdown != 'undefined' || paymentDropdown != null)
		    {
		        if( form_object.elements[i].id == paymentDropdown && document.getElementById(paymentCode).value.length > 0)
		        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)
				{
					if (params.length > 1)
					{
						if (j != 0)
						{
							var validationResult2 = execute_function(params[0], form_object.elements[i], form_object);
							if (!validationResult2)
								Messages += " - " + validmsgs[0] + "\r\n";
							else	
								Messages += " - " + validmsgs[j] + "\r\n";	
						}
					}
					else
					{
						Messages += " - " + args.Message + "\r\n";					
					}
					
					itemCount++;
					validationCancelled = true;
					continue;
					//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)
			{
				itemCount++;
				validationCancelled = true;
				//break;
			}
				
		}
	}
	
	if (!IsValid)
		alert(Messages)
	
	return IsValid;
}

function onelementmethodvalidated(sender, args)
{
//	Messages += " - " + args.Message + "\r\n";
	//if (itemCount <= 0)
		
	messageboxonvalidationfailed(sender, args);
}

function onelementvalidated(sender, args)
{
	if (!args.IsValid)
	{
	    if (args.Message != undefined)
	    {
		Messages += args.Message + "\r\n";
		args.CancelValidating = true;
		}
	}
	// Uncomment dit wanneer de velden rood moeten worden wanneer het valideren fout ging.
		onelementvalidated = turnredonvalidationfailed;
}

function messageboxonvalidationfailed(sender, args)
{
	if (!args.IsValid)
	{
		try {			
			//args.Element.focus();
			args.Element.blur();	
			
			var el = document.getElementById("errorImage_" + args.Element.id);
					
		    if ( el == null)
		    {
		        var d = document.createElement("span");
                var html = "&nbsp;<img src=\"images/validation/error.png\" alt='Validator Image'>";
             
                d.setAttribute("id", "errorImage_" + args.Element.id);
                d.innerHTML = html;

                insertAfter(d, args.Element.nextSibling);
            }		
		}catch(e) {}
		args.CancelValidating = true;
	}
}

//create function, it expects 2 values.
function insertAfter(newElement,targetElement) {
	//target is what you want it to go after. Look for this elements parent.
	var parent = targetElement.parentNode;
	
	//if the parents lastchild is the targetElement...
	if(parent.lastchild == targetElement) {
		//add the newElement after the target element.
		parent.appendChild(newElement);
		} else {
		// else the target has siblings, insert the new element between the target and it's next sibling.
		//parent.insertBefore(newElement, targetElement)
		    parent.insertBefore(newElement, targetElement.nextSibling)
		}
}

function turnredonvalidationfailed(sender, args)
{
	if (args.Element.oldstyleborderBottom == null)
		args.Element.oldstyleborderBottom = args.Element.style.borderBottom;
	if (args.Element.oldstyleborderTop == null)
		args.Element.oldstyleborderTop = args.Element.style.borderTop;
	if (args.Element.oldstyleborderLeft == null)
		args.Element.oldstyleborderLeft = args.Element.style.borderLeft;
	if (args.Element.oldstyleborderRight == null)
		args.Element.oldstyleborderRight = args.Element.style.borderRight;
		
	if (args.IsValid)
	{	 	    
	    if (args.Element.type != "checkbox" && args.Element.tagName != "SELECT")
	    {
	        args.Element.style.borderBottom = "1px solid #cccccc";
		    args.Element.style.borderTop = "1px solid #cccccc"
		    args.Element.style.borderLeft = "none";
		    args.Element.style.borderRight = "none";
		    args.Element.style.backgroundColor = "#ffffff";
	    }
	    
	    if (args.Element.tagName == "SELECT")
	    {
	        args.Element.style.border = "1px solid #cccccc";
	    }

		var el = document.getElementById("errorImage_" + args.Element.id);
		if (el != null)
		{
		    el.parentNode.removeChild(el);
		}
	}
	else
	{
	    if (args.Element.type != "checkbox")
	    {
		args.Element.style.borderBottom = "2px solid #FF0000";
		args.Element.style.borderTop = "2px solid #FF0000";
		args.Element.style.borderLeft = "2px solid #FF0000";
		args.Element.style.borderRight = "2px solid #FF0000";		
		blinkBox(sender, args);
		args.CancelValidating = true;
		}
	}
}

function blinkBox(sender, args) {
	 var n = args.Element;
     var t = 2;
     var b = 0;
     var c = [ '#ff7770', '#ffffff' ];
  
  
    var i = setInterval(function() {
            
         if (b % 2 == 0)
         {
            document.getElementById(args.Element.id).style.backgroundColor = c[0];
         }
         else 
         {
            document.getElementById(args.Element.id).style.backgroundColor = c[1];
         }
           // n.style.backgroundColor != c[0] ? c[0] : c[1];        
         b++;
  
         if (b == t) {
             clearInterval(i);
         }
         
     }, 500);
 }
 