window.onload = initForms;

function initForms()
{
	for (var i=0; i< document.forms.length; i++)
	{	
		document.forms[i].onsubmit = function()
		{	return validForm(this.name);	}
	}
}

function validForm(formular)
{
	var allGood = true;
	var allTags = document.forms[formular].getElementsByTagName("*");

	for (var i=0; i<allTags.length; i++)
	{
		if(allTags[i].type=="text" || allTags[i].type=="textarea" || allTags[i].type=="select-one" || allTags[i].type=="checkbox" || allTags[i].type=="radio" || allTags[i].type=="password")
		{
			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)
		{
			invalidLabel(thisTag.parentNode);
			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(thisTag.type=="text" || thisTag.type=="textarea" || thisTag.type=="password" || thisTag.type=="select-one")
					{
						if (allGood && thisTag.value == "") classBack = "invalid ";
						classBack += thisClass;
					}
					if(thisTag.type=="checkbox")
					{
						if (allGood && thisTag.checked == false) classBack = "invalid ";
						classBack += thisClass;
					}
					break;
				case "radio":
					if (allGood && !radioPicked(thisTag.name)) classBack = "invalid ";
					classBack += thisClass;
					break;
				case "isNum":
					if (allGood && !isNum(thisTag.value)) classBack = "invalid ";
					classBack += thisClass;
					break;
				case "email":
					if (allGood && !validEmail(thisTag.value)) classBack = "invalid ";
					classBack += thisClass;
					break;
				default:
					if (allGood && !crossCheck(thisTag,thisClass)) classBack = "invalid ";
					classBack += thisClass;
			}
			return classBack;
		}
				
		function crossCheck(inTag,otherFieldID)
		{
			if (!document.getElementById(otherFieldID))
			{	return false;	}
			return (inTag.value != "" || document.getElementById(otherFieldID).value != "");
		}
		
		function radioPicked(radioName)
		{
			var radioSet = "";

			for (var k=0; k<document.forms.length; k++)
			{
				if (!radioSet)
				{	radioSet = document.forms[k][radioName];	}
			}
			if (!radioSet)
			{	return false;	}
			for (k=0; k<radioSet.length; k++)
			{
				if (radioSet[k].checked)
				{	return true;	}
			}
			return false;
		}
		
		
		function isNum(passedVal)
		{
			if (passedVal == "")
			{	return false;	}
			for (var k=0; k<passedVal.length; k++)
			{
				if (passedVal.charAt(k) < "0")
				{	return false;	}
				if (passedVal.charAt(k) > "9")
				{	return false;	}
			}
			return true;
		}
		
		function validEmail(email)
		{
			var invalidChars = " /:,;";
		
			if (email == "")
			{	return false;	}
			for (var k=0; k<invalidChars.length; k++)
			{
				var badChar = invalidChars.charAt(k);
				if (email.indexOf(badChar) > -1)
				{	return false;	}
			}
			var atPos = email.indexOf("@",1);
			if (atPos == -1)
			{	return false;	}
			if (email.indexOf("@",atPos+1) != -1)
			{	return false;	}
			var periodPos = email.indexOf(".",atPos);
			if (periodPos == -1)
			{	return false;	}
			if (periodPos+3 > email.length)
			{	return false;	}
			
			return true;
		}
		
		function invalidLabel(parentTag)
		{
			if (parentTag.nodeName == "LABEL")
			{	parentTag.className += " invalid";	}
		}
	}
	
}

