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";	}

		}

	}

	

}


