function addLoadEvent(func) { 
	var oldonload = window.onload; 
	if (typeof window.onload != 'function') { 
	    window.onload = func; 
	  } else { 
	    window.onload = function() { 
	      if (oldonload) { 
	        oldonload(); 
	      } 
	      func(); 
	    } 
	  } 
	} 

addLoadEvent(initForms);

function populateDays() {
	
	var monthDays = new Array(31,28,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("day").options.length = 0;
		
		for(var i=0; i<monthDays[theMonth]; i++) {
		
			document.getElementById("day").options[i] = new Option(i+1);
		
		}
	
	}

}


function initForms() {
	for (var i=0; i<document.forms.length; i++) {
		document.forms[i].onsubmit = function() {return validForm();}	
	}
	if(document.getElementById("month")) {
		document.getElementById("month").selectedIndex = 0;
		document.getElementById("month").onchange = populateDays;
	}
}

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) {
			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(allGood && thisTag.value == "") {
							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 "isPhone":
					if(allGood && !isPhone(thisTag.value)) {
						classBack = "invalid ";
					}
					classBack += thisClass;
					break;
				case "isZip":
					if(allGood && !isZip(thisTag.value)) {
						classBack = "invalid ";	
					}
					classBack += thisClass;
					break;
				case "email":
					if(allGood && !validEmail(thisTag.value)) {
						classBack = "invalid ";	
					}
					classBack += thisClass;
					break;
				case "isCC":
					if(allGood && !validCC(thisTag.value)) {
						classBack = "invalid ";	
					}
				classBack += thisClass;
					break;
				default:
					classBack += thisClass;
			}
			return classBack;
		}
		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) {
			var re = /^\d{10,15}$/;
			
			return re.test(passedVal);
		}
		
		function isPhone(phoneNumber) {
			var re = /^1?\W*([2-9][0-8][0-9])\W*([2-9][0-9]{2})\W*([0-9]{4})(\se?x?t?(\d*))?$/;
			
			return re.test(phoneNumber);
		}
		
		function isZip(inZip) {
			var re = /^\d{5}([\-]\d{4})?$/;
			
			return re.test(inZip);
		}
		
		function validEmail(email) {
			var re = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/;
			
			return re.test(email);
		}
		
		function validCC(CC) {
			var re = /^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\d{3})\d{11})$/;
			
			return re.test(CC);
		}
		
		function invalidLabel(parentTag) {
			if(parentTag.nodeName == "LABEL") {
				parentTag.className += "invalid";	
			}
		}
	}
}
