var errorMsg = "";

function validateForms()
{
	
	if ( !document.getElementsByTagName)
	{
		return false;
	}

	elementsForms = document.getElementsByTagName("form");
		
	for ( var i = 0; i < elementsForms.length; i++ )
	{
		if ( elementsForms[i].getAttribute("alt") != "escape" )
		{
			elementsForms[i].onsubmit = function()
			{
				if ( !validateForm(this) )
				{
					alert("The following errors have occurred:\n" + errorMsg);
					errorMsg = "";

					if ( document.getElementById("loaderContainer") )
					{
						removeOverlay();
					}
					
					return false;
				}
				else
				{
					return true;
				}
			}
		}
	}

}

function getMessage(element)
{
	return element.getAttribute("title") ? element.getAttribute("title") : element.getAttribute("alt");
}

function validateForm(currentForm)
{
	var blnvalidate = true;
	var elementsInputs;
	
	elementsInputs = currentForm.getElementsByTagName("input");

	for ( var i=0; i<elementsInputs.length; i++ )
	{
		if ( /req_email$/.test(elementsInputs[i].className) )
		{
			if ( !validateEmail(elementsInputs[i].value) )
			{
				blnvalidate = false;
				errorMsg += "- " + getMessage(elementsInputs[i]) + "\n";
			}
		}
		else if ( /req$/.test(elementsInputs[i].className) )
		{
			if ( !elementsInputs[i].value )
			{
				blnvalidate = false;
				errorMsg += "- " + getMessage(elementsInputs[i]) + "\n";
			}		
		}
		else if ( /req_tel$/.test(elementsInputs[i].className) )
		{
			if ( !validateTelephone(elementsInputs[i].value) )
			{
				blnvalidate = false;
				errorMsg += "- " + getMessage(elementsInputs[i]) + "\n";
			}		
		}		
		else if ( /req_date$/.test(elementsInputs[i].className) )
		{
			if ( !validateDate(elementsInputs[i].value) )
			{
				blnvalidate = false;
				errorMsg += "- " + getMessage(elementsInputs[i]) + "\n";
			}		
		}				
		else if ( /req_img$/.test(elementsInputs[i].className) )
		{
			if ( !validateImg(elementsInputs[i].value) )
			{
				blnvalidate = false;
				errorMsg += "- " + getMessage(elementsInputs[i]) + "\n";
			}		
		}
		else if ( /req_float$/.test(elementsInputs[i].className) )
		{
			if ( !validateFloat(elementsInputs[i].value) )
			{
				blnvalidate = false;
				errorMsg += "- " + getMessage(elementsInputs[i]) + "\n";
			}		
		}	
		else if ( /req_postcode$/.test(elementsInputs[i].className) )
		{
			if ( !validatePostcode(elementsInputs[i].value) )
			{
				blnvalidate = false;
				errorMsg += "- " + getMessage(elementsInputs[i]) + "\n";
			}		
		}		
		else if ( /req_keyword$/.test(elementsInputs[i].className) )
		{
			if ( !validateKeyword(elementsInputs[i].value ) )
			{
				blnvalidate = false;	
				errorMsg += "- " + getMessage(elementsInputs[i]) + "\n";
			}		
			else if ( keyword_array.in_array(elementsInputs[i].value) )
			{
				blnvalidate = false;	
				errorMsg += "- keyword already in use\n";
			}
		}	
	}	
	
	if ( currentForm.getElementsByTagName("textarea").length > 0 )
	{
		chkTextArea = currentForm.getElementsByTagName("textarea");

		for ( var i=0; i<chkTextArea.length; i++ )
		{	
			if ( /req$/.test(chkTextArea[i].className) )
			{
				if ( !chkTextArea[i].value )
				{
					blnvalidate = false;
					errorMsg += "- " + getMessage(chkTextArea[i]) + "\n";
				}
			}
		}			
	}

	if ( currentForm.getElementsByTagName("select").length > 0 )
	{
		chkSelect = currentForm.getElementsByTagName("select");

		for ( var i=0; i<chkSelect.length; i++ )
		{			
			if ( /req$/.test(chkSelect[i].className) )
			{
				if ( !chkSelect[i].value )
				{
					blnvalidate = false;
					errorMsg += "- " + getMessage(chkSelect[i]) + "\n";
				}	
			}
		}
	}
		
	return blnvalidate;
	
}

function validateDate(value)
{
	var filter = /^(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d$/;

	if ( !filter.test(value) )
	{
		return false;
	}
	
	return true;
}

function validateEmail(value)
{
	var filter = /^.+@.+\..{2,4}$/;

	if ( !filter.test(value) )
	{
		return false;
	}
	
	return true;
}

function validateTelephone(value)
{
	var filter = /^([0-9 ]{7,})$/;

	if ( !filter.test(value) )
	{
		return false;
	}
	
	return true;

}

function validateFloat(value)
{

	var filter = /^[£]?((\d+)|(\d{1,3}(\,\d{3})+))(\.\d{2})?$$/;

	if ( !filter.test(value) )
	{
		return false;
	}
	
	return true;

}

function validateKeyword(value)
{
	return true;
	var filter = /([ \.]+)/;

	if ( !filter.test(value) )
	{
		return true;
	}
	
	return false;

}

function validateImg(value)
{
	var filter = /(jpg|jpeg|gif)/;

	if ( value == "" )
	{
		return true;
	}

	if ( filter.test(value.toLowerCase()) )
	{
		return true;
	}
	
	return false;

}

function validatePostcode(value)
{
	test = value; 
	size = test.length

 	test = test.toUpperCase(); //Change to uppercase

	while (test.slice(0,1) == " ") //Strip leading spaces
  	{
  		test = test.substr(1,size-1);
  		size = test.length
  	}
 
 	while(test.slice(size-1,size)== " ") //Strip trailing spaces
 	{
 		test = test.substr(0,size-1);size = test.length
  	}
 
 	
 	if (size < 6 || size > 8)
 	{ //Code length rule
  		return false;
  	}
 
 	if (!(isNaN(test.charAt(0))))
 	{ //leftmost character must be alpha character rule
   		return false;
	}
 
 	if (isNaN(test.charAt(size-3)))
 	{ //first character of inward code must be numeric rule
   		return false;
  	}
 
 	if (!(isNaN(test.charAt(size-2))))
 	{ //second character of inward code must be alpha rule
 		return false;
  	}
 
 	if (!(isNaN(test.charAt(size-1))))
 	{ //third character of inward code must be alpha rule
 		return false;
  	}
 


	return true;
}

function addConfirmDeletes()
{
	if ( !document.getElementsByTagName)
	{
		return false;
	}

	elementsInputs = document.getElementsByTagName("a");
	
	for ( var i = 0; i < elementsInputs.length; i++ )
	{
		if ( /confirm$/.test(elementsInputs[i].className) )
		{
			elementsInputs[i].onclick = function()
			{
				if (confirm("Really delete?") )
				{
					return true;
				}
				else
				{
					return false;				
				}
			}
		}
	}
}

addLoadEvent(addConfirmDeletes);
addLoadEvent(validateForms);
	

