window.onload = initForms;

function initForms() 
	{
	for (var i=0;i<document.forms.length;i++)
		{
		if (document.forms[i].className.indexOf("validcheck") > -1)
			{
			document.forms[i].onsubmit = function()
				{
				return validForm();
				}
			}
		if (document.forms[i].className.indexOf("checkboxes") > -1)
			{
			document.forms[i].onsubmit = function()
				{
				return countcboxes();
				}
			}
		}
	}
	
function validForm()
	{
	var allGood = true;
	var allTags = document.getElementsByTagName("*");
	for (var i=0;i<allTags.length;i++)
		{
		if(!validTag(allTags[i]))
			{
			allGood = false;
			}
		}
	return allGood;


	function validTag(thisTag)
		{
		var outClass = "";
		var allClasses = thisTag.className.split(" ");
		for (var j=0;j<allClasses.length;j++)
			{
			outClass += validBasedOnClass(allClasses[j])+" ";
			}
		thisTag.className = outClass;
		if (outClass.indexOf("invalid") > -1)
			{
			thisTag.focus();
			if (thisTag.nodeName == "INPUT")
				{
				thisTag.select();
				}
			return false;
			}
		return true;
		
		function validBasedOnClass(thisClass)
			{
			var classBack = "";
			switch(thisClass)
				{
				case "":
				case "invalid":
					break;
				case "reqd":
					if (allGood && thisTag.value == "")
						{
						classBack = " invalid ";
						}
					classBack += thisClass;
					break;
				case "email":
					if (allGood && !validEmail(thisTag.value)) 
					{
					classBack = " invalid ";
					alert("You must enter a valid email address");
					break;
					}
				case "postcode":
					if (allGood && !validPostcode(thisTag.value)) 
					{
					classBack = " invalid ";
					alert("You must enter a valid UK post code");
					break;
					}	
				default:
					classBack += thisClass;
				}
				return classBack;
			}
			
			function validEmail(email)
				{
				var re = /^[a-z0-9_\+-]+(\.[a-z0-9_\+-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*\.([a-z]{2,4})$/;
				return re.test(email);
				}
			
			function validPostcode(postcode)
				{
				var re = /[A-Z]{1,2}[0-9]{1,2} ?[0-9][A-Z]{2}/i;
				return re.test(postcode);
				}

				
			function invalidLabel(parentTag)
				{
				if(parentTag.nodeName == "LABEL") 
					{
					parentTag.className += " invalid";
					}
				}
		}
	}		
	
function countcboxes()
	{
		var j = 0;
		var allTags = document.getElementsByTagName("*");
		for (var i=0;i<allTags.length;i++)
			{
				if (allTags[i].className.indexOf("pcheck") > -1)
					{
					if (allTags[i].checked)
						{
						j++;
						}					
					}
			}
			
		if (j < 3)
			{
			alert ("You must select at least three parties.");
			return (false);
			} else {
			return (true);
			}

	}

