window.onload = initForms;

function initForms() {
	
	document.getElementById("months").selectedIndex=0;
	document.getElementById("months").onchange=populateDays;

	for(var i=0;i<document.forms.length;i++) {
		document.forms[i].onsubmit = function() {return validForm();}
	}
}

function populateDays() {
	var monthDays = new Array(0,31,29,31,30,31,30,31,31,30,31,30,31);
	var monthStr = this.options[this.selectedIndex].value;
	
	if(monthStr != "") {
		var theMonth = parseInt(monthStr);
		
		document.getElementById("days").options.length =0;
		for(var i=0; i<monthDays[theMonth]; i++) {
			document.getElementById("days").options[i] = new Option(i+1);
		}
		document.getElementById("years").options.length =0;
		for(var j=0; j<201; j++) {
			document.getElementById("years").options[j] = new Option(j+1920);
		}
	}
}

function clearTextArea(thisField) {
	var fieldText = thisField.value;
	
    thisField.value="";
	thisField.select();
}

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.nodeName == "input" || thisTag.nodeName=="textarea") {
				thisTag.select();
			}
			return false;
		}
		return true;
		
		function validBasedOnClass(thisClass) {
			var classBack = "";
			
			switch(thisClass) {
				case "":
				case "invalid":
					break;
				case "reqd":
					if(allGood && thisTag.value == "") {
						alert("Please complete this form.");
						classBack="invalid ";
					}
					classBack += thisClass;
					break;
				case "email":
					if(thisTag.value) {
						if(allGood && !validEmail(thisTag.value)) {
							classBack="invalid ";
						}
					}
					classBack += thisClass;
					break;
				default:
					classBack += thisClass;
			}
			return classBack;
		}
		
		function validEmail(email) {
			var invalidChars = "/:,;";
			var inputStr = email;
			
			for(var i=0;i<invalidChars.length;i++) {
				var badChar=invalidChars.charAt(i);
				if(inputStr.indexOf(badChar) > -1) {
					alert("Bad Character - This email address is not valid: " +inputStr);
					return false;
				}
			}
	
			var atPos=inputStr.indexOf("@" ,1);
			if(atPos == -1) {
				alert("No @ character - This email address is not valid: " +inputStr);
				return false;
			}
	
			if(inputStr.indexOf("@", atPos+1) != -1) {
				alert("More than one @ in the address - This email address is not valid: " +inputStr);
				return false;
			}
	
			var periodPos=inputStr.indexOf(".",atPos);
			if(periodPos == -1) {
				alert("misplaced or missing '.' - This email address is not valid: " +inputStr);
				return false;
			}
	
			if(periodPos+3 > inputStr.length) {
				alert("not enough characters after '.' - This email address is not valid: " +inputStr);
				return false;
			}
			return true;
		}
	}
}

function checkEmail(email) {
	var invalidChars = "/:,;";
	var inputStr = email.value;
		
	for(var i=0;i<invalidChars.length;i++) {
		var badChar=invalidChars.charAt(i);
		if(inputStr.indexOf(badChar) > -1) {
			alert("Bad Character - This email address is not valid: " +inputStr);
			email.focus();
			
			
			return false;
		}
	}
	var atPos=inputStr.indexOf("@" ,1);
	if(atPos == -1) {
		alert("No @ character - This email address is not valid: " +inputStr);
		email.select();
		return false;
	}
	
	if(inputStr.indexOf("@", atPos+1) != -1) {
		alert("More than one @ in the address - This email address is not valid: " +inputStr);
		email.select();
		return false;
	}
	var periodPos=inputStr.indexOf(".",atPos);
	if(periodPos == -1) {
		alert("misplaced or missing '.' - This email address is not valid: " +inputStr);
		email.select();
		return false;
	}
	
	if(periodPos+3 > inputStr.length) {
		alert("not enough characters after '.' - This email address is not valid: " +inputStr);
		email.select();
		return false;
	}
	return true;
}


