window.onload = initForms;

function initForms(){
	for (var i = 0; i < document.forms.length; i++){
		document.forms[i].onsubmit = function() {return validForm();}
	}
}

function validForm(){
	allGood = true; //Assume that everything is ok from the start.	
	var allTags = document.getElementsByTagName("*"); //Get All Tags On Page
	var alertMessage = "Some Fields Need Correction";
	for (var i=0; i<allTags.length; i++){
		if(!validTag(allTags[i])){ //Loop through all tagas and validate them
			allGood = false;	
		}
	}

	if (allGood == false){
		alert (alertMessage);	
	}
	return allGood; //Return True if all tags were ok!
	
	function validTag(thisTag){
		var outClass = "";
		var allClasses = thisTag.className.split(" "); //Split classnames into an array
		
		for (var j=0; j<allClasses.length; j++){
			outClass += validBasedOnClass (allClasses[j]) + " ";
		}
		thisTag.className = outClass;
		
		if(outClass.indexOf("invalid") > -1){
			invalidLabel(thisTag.name);
			thisTag.focus();
			if(thisTag.nodeName == "INPUT"){
				thisTag.select();	
			}
			return false;
		}
		//return false;
		return true;
		
		function invalidLabel(tagName){
			document.getElementById(tagName + "_label").className += " invalid";
		}
		function validBasedOnClass(thisClass){
			var classBack = "";	
			switch(thisClass){
				case "":
				case "invalid":
					break;
				case "reqd":
					if(allGood && thisTag.value == ""){
						classBack = "invalid ";
						alertMessage = "A value is missing for: " + thisTag.name;
					}
					classBack += thisClass;
					break;
				case "skills":
					if(allGood && !skillsPicked(thisTag.name)){
						classBack = "invalid ";	
						alertMessage = "Please select your current skills";
					}
					classBack += thisClass;
					break;
				case "email":
					if(allGood && !validEmail(thisTag.value)){
						classBack = "invalid ";	
						alertMessage = "Your email appears to be invalid!";
					}
					classBack += thisClass;
					break;
				default:
					classBack += thisClass;
			}
			return classBack;
		}
		
		function skillsPicked(skillsTag){
			var skillsPicked = "";
			
			for(var k=0; k<document.forms.length;k++){
				if(!skillsPicked){
					skillsPicked = document.forms[k][skillsTag];	
				}
			}
			if(!skillsPicked){
				return false;
			}
			
			for (k=0; k<skillsPicked.length; k++){
				if(skillsPicked[k].checked){
					return true;
				}
			}
			
			return false;
		}
		
		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.lenght){
				return false;
			}
			return true;
		}
	}
	
}