

function validateForm() {
	
	var d = document;
	
	// initialize the form parameters into field objects
	var sFirstName = d.getElementById("sFirstName");
	var sLastName = d.getElementById("sLastName");
	var sAddressLine1 = d.getElementById("sMailingAddressLineOne");
	var sAddressLine2 = d.getElementById("sMailingAddressLineTwo");
	var sCity = d.getElementById("sCity");
	var sPostalCode = d.getElementById("sPostalCode");
	var sStateProvince = d.getElementById("sStateProvinceCode");
	var SyCountryID = d.getElementById("SyCountryID");
	var sEmailAddress = d.getElementById("sEmailAddress");
	var sDobMonth = d.getElementById("sDobMonth");
	var sDobDay = d.getElementById("sDobDay");
	var sDobYear = d.getElementById("sDobYear");
	var AdProgramID = d.getElementById("AdProgramID");
	var sPhone = d.getElementById("sPhone");
	var sWorkPhone = d.getElementById("sWorkPhone");
	var sInternationalPhone = d.getElementById("sInternationalPhone");
	
	// create an array to hold error messages in
	var aErrorMessages = new Array();
	var sErrorMessageOutput = "";
	
	// create utility variables for comparison, etc.
	var sInvalidCharacter;
	var blnQuickPass = true;
	
	// require first name
	if (sFirstName.value == "") { aErrorMessages[aErrorMessages.length] = getErrorMessage("FIRSTNAMEREQUIRED"); }
	
	// require last name
	if (sLastName.value == "") { aErrorMessages[aErrorMessages.length] = getErrorMessage("LASTNAMEREQUIRED"); }
	
	// require address line 1
	if (sAddressLine1.value == "") { aErrorMessages[aErrorMessages.length] =  getErrorMessage("MAILINGADDRESSREQUIRED"); }
	
	// require city
	if (sCity.value == "") { aErrorMessages[aErrorMessages.length] = getErrorMessage("CITYREQUIRED"); }
	
	// require state
	if (sStateProvince.value == "none") { aErrorMessages[aErrorMessages.length] = getErrorMessage("ENTERASTATEPROVINCE"); }
	
	// require country
	if (SyCountryID.value == 0) { aErrorMessages[aErrorMessages.length] = getErrorMessage("COUNTRYREQUIRED"); }
	
	// disallow @ characters from address line 1
	if (sAddressLine1.value != "") {
		sInvalidCharacter = "@";
		blnQuickPass = true;
		for (var i=0; i < sAddressLine1.value.length; i++) { if (sInvalidCharacter.indexOf(sAddressLine1.value.charAt(i)) != -1) { blnQuickPass = false; break; } }
		if (blnQuickPass == false) { aErrorMessages[aErrorMessages.length] = getErrorMessage("INVALIDADDRESS"); }
	}
	
	// disallow @ characters from address line 2
	if (sAddressLine2.value != "") {
		sInvalidCharacter = "@";
		blnQuickPass = true;
		for (var i=0; i < sAddressLine2.value.length; i++) { if (sInvalidCharacter.indexOf(sAddressLine2.value.charAt(i)) != -1) { blnQuickPass = false; break; } }
		if (blnQuickPass == false) { aErrorMessages[aErrorMessages.length] = getErrorMessage("INVALIDADDRESS"); }
	}
	
	// require zip code if a state has been selected
	if ((sStateProvince.value != "none") && (sStateProvince.value != "..") && (sPostalCode.value == "")) {
		aErrorMessages[aErrorMessages.length] = getErrorMessage("POSTALCODEREQUIREDBECAUSEOFSTATE");
	}
	
	// require zip code if USA has been selected as country 
	if ((SyCountryID.value == 1) && (sPostalCode.value == "")) {
		aErrorMessages[aErrorMessages.length] = getErrorMessage("POSTALCODEREQUIREDBECAUSEOFCOUNTRY");
	}
	
	// require zip if nothing has been selected at all
	if ((SyCountryID.value == 0) && (sStateProvince.value == "none") && (sPostalCode.value == "")) {
		aErrorMessages[aErrorMessages.length] = getErrorMessage("INVALIDPOSTALCODE");
	}
	
	// Look to see if AdProgramID is null.
	// If it is, we should look for radio buttons.
	if (!AdProgramID) {
		
		// Get a list of all inputs
		var Inputs = document.getElementsByTagName('input');
		
		// Set up booleans to flag our findings
		var blnFoundCheckedRadio = false;
		var blnFoundDegreeRadio = false;
		
		// Loop through all the inputs found.
		for (var i = 0; i < Inputs.length; i++) {
			
			// Look at the current input
			var input = Inputs[i];
				
			// Try to determine the class of the input using 'className'
			var inputClass = String(input.getAttribute('className'));
			
			// Check that value.  IE uses 'class' so we might need to go that route
			if (inputClass == "null" || inputClass == "undefined"){
				var inputClass = String(input.getAttribute('class'));
			}
			
			// Test to see if the current button class is "radiobutton"
			if (inputClass == "radiobutton") {
				
				// The class is 'radiobutton'. Flag that we have found a radio button.
				blnFoundDegreeRadio = true;
				
				// Check to see if the radio button we found is checked or not and flag accordingly
				if (input.checked) { blnFoundCheckedRadio = true; }
			}
		}
		
		// Look for non-selected degree radio buttons
		if ((blnFoundDegreeRadio) && (!blnFoundCheckedRadio)) {
			aErrorMessages[aErrorMessages.length] = getErrorMessage("PROGRAMOFINTERESTREQUIRED");
		}	
	}
	
	// AdProgramID was found
	else {
		if ((AdProgramID.value == "") || (AdProgramID.value == 0)) {
			aErrorMessages[aErrorMessages.length] = getErrorMessage("PROGRAMOFINTERESTREQUIRED");
		}
	}
	
	
	
	// if a date of birth is entered, make sure it's complete
	if ((sDobMonth.value != "") || (sDobDay.value != "") || (sDobYear.value != "")) {
		if ((sDobMonth.value == "") || (sDobDay.value == "") || (sDobYear.value == "")) {
			aErrorMessages[aErrorMessages.length] = getErrorMessage("INCOMPLETEBIRTHDATE");
		}
	}
	
	// disallow non-numeric characters in the phone number, except dash
	if (RunRegEx(sPhone.value,"^([0-9]*-?)*$") == false) {
		aErrorMessages[aErrorMessages.length] = getErrorMessage("INVALIDHOMEPHONE");
	}
	
	if (RunRegEx(sWorkPhone.value,"^([0-9]*-?)*$") == false) {
		aErrorMessages[aErrorMessages.length] = getErrorMessage("INVALIDWORKPHONE");
	}
	
	if (RunRegEx(sInternationalPhone.value,"^([0-9]*-?)*$") == false) {
		aErrorMessages[aErrorMessages.length] = getErrorMessage("INVALIDINTERNATIONALPHONE");
	}

	
	if (aErrorMessages.length) {
		sErrorMessageOutput = "There were some problems with your form:\n-------------------------\n";
		for (var i=0; i < aErrorMessages.length; i++) {
			sErrorMessageOutput = sErrorMessageOutput + aErrorMessages[i] + "\n";
		}
		alert(sErrorMessageOutput);
		return false;
	}
	
	
}


function getErrorMessage(sMessageToFind) {
	var sMessageToReturn = "";
	for (i=0; i < arDynamicErrorMessages.length; i++) {
		if (arDynamicErrorMessages[i][0] == sMessageToFind) {
			sMessageToReturn = arDynamicErrorMessages[i][1];
			break;
		}
	}
	return sMessageToReturn;
}

function RunRegEx(sSourceString, sRegularExpression) {
	var re = new RegExp(sRegularExpression);
	if (sSourceString.match(re)) { return true; } else { return false; }
}


