function validateForm(f) {
	inputs = f.getElementsByTagName("input");  // Grab all inputs in the form
	selects = f.getElementsByTagName("select");  // Grab all selects in the form
	for (i = 0; i < inputs.length; i++) {
		if (!checkField(inputs[i])) return false;
	}
	for (i = 0; i < selects.length; i++) {
		if (!checkField(selects[i])) return false;
	}
	return true;  // Return true if everything checks out
}

function checkField(obj) {
	if (obj.type == "hidden") return true;
	switch(obj.name) {
		case 'firstname':  // These cases just check for a length
		case 'lastname':
		case 'address':
		case 'city':
			if (obj.name == 'firstname') fieldtype = "a first name";
			else if (obj.name == 'lastname') fieldtype = "a last name";
			else if (obj.name == 'address') fieldtype = "a street address";
			else if (obj.name == 'city') fieldtype = "a city";
			if (obj.value.length < 1) {
				alert("Please enter " + fieldtype + ".");
				return false;
			} else return true;
			break;
		case 'dayphone':
			if (!checkPhone(obj)) {
				alert("Please enter a valid 10-digit daytime phone number,\nincluding an area code.");
				return false;
			} else return true;
			break;
		case 'evephone':
			if (obj.value == 'XXX-XXX-XXXX') obj.value = '';
			if (obj.value.length > 0 && !checkPhone(obj)) {
				alert("Please enter a valid 10-digit evening phone number\nincluding an area code.\nIf you don't have an evening phone number, leave the field blank.");
				return false;
			} else return true;
			break;
		case 'email':
			if ((obj.value.length < 1) || (obj.value.indexOf("@") < 1) || (obj.value.indexOf(".") == -1)) {
				alert("Please enter a valid e-mail address.");
				return false;
			} else return true;
			break;
		case 'zipcode':
		case 'zip':
		case 'postalcode':
			var zip = obj.value;
			if (zip.indexOf("-") == 5) zip = zip.substring(0,5);  // Remove the four-digit routing number from American Zip codes
			if ((zip.length > 5) || (isNaN(zip))) {  // Canadian Postal Code
				if ((/(d|f|i|o|q|u)/i.test(zip)) || (/(\W|\S)/.test(zip)) || (zip.length>7) || (zip.length<6) || (zip.indexOf("W")==0) || (zip.indexOf("Z")==0)) {
					alert("Please enter a valid postal code.");
					return false;
				} else return true;
			} else {  // American Zip Code
				if ((zip.length != 5) && (zip.length != 3)) {
					alert("Please enter a valid zip code.");
					return false;
				} else return true;
			}
			break;
		case 'state':  // These cases ensure that the first option is not the selected option
		case 'country':
		case 'gradyear':
		case 'programtype':
			if (obj.name == 'state') fieldtype = "a state";
			else if (obj.name == 'country') fieldtype = "a country";
			else if (obj.name == 'gradyear') fieldtype = "a graduation year";
			else if (obj.name == 'programtype') fieldtype = "a career field";
			if (obj.selectedIndex == 0) {
				alert("Please select " + fieldtype +".");
				return false;
			} else return true;
			break;
		default:
			return true;
			// Here, we can put the existing script that checks every field marked as required to ensure that it has a value.
	}
}

function checkPhone(obj) {
	formatPhone(obj);
	if (obj.value.length!=10 || isNaN(obj.value)) return false;
	// The rest of this function is based on code written by Jacob Greenberg
	var sAreaCode = obj.value.substring(0,3);
	var sPrefix = obj.value.substring(3,6);
	var sNumber = obj.value.substring(6,10);
	ary7NotAllowed = new Array('1234567','0000000','1111111','2222222','3333333','4444444','5555555','6666666','7777777','8888888','9999999','3456789','4567890')
	ary3NotAllowed = new Array('000','911','555','012','123');
	for (var i=0; i<ary3NotAllowed.length; i++) {  // Check Area Code and Prefix
		if (sPrefix.toString() == ary3NotAllowed[i].toString()) return false;
		else if (sAreaCode.toString() == ary3NotAllowed[i].toString()) return false;
	}
	for (var i=0; i<ary7NotAllowed.length; i++) {  // Check 7-digit number
		if (sPrefix.toString() + sNumber.toString() == ary7NotAllowed[i]) return false;
	}
	return true;
}

function formatPhone(f) {
	if (f.value.charAt(0) == "1") f.value=f.value.replace("1","");
	f.value=f.value.replace(/\D/g,"");
}