function fcnValidateForm(objFormName) {
		// Instantiate the regular expression object so that we
		// can strip out HTML for all text-input boxes
		objRegExp = new RegExp("<{1}[/]*([A-Za-z0-9]|[^A-Za-z0-9>])*>{1}", "g");
		// Loop through all of the elements of the form object
		intPasswordFieldCount = 0;
		intEmailFieldCount = 0;
		for (i=0;i<objFormName.elements.length;i++) {
		// select which type of element the form element is, and run the appropriate 
		// code to notify users of problems

		strFieldType = objFormName.elements[i].name.substring(0,3);
		strFieldName = objFormName.elements[i].name.substring(3);
		strFieldName = fcnSplitWords(strFieldName);
		switch (strFieldType) {
			/*case "mo.":
				if ((objFormName.elements[i].value == "0.00") || (objFormName.elements[i].value == "")){
					alert("You must select a checkbox.");
					objFormName.elements[i].focus();
					return false;
				}
					objFormName.elements[i].value = objFormName.elements[i].value.replace(objRegExp, "");
					break;*/
		
			case "cpi":
				if (objFormName.elements[i].value == "") {
				//alert(strFieldName);
					switch (strFieldName){
						case '.card-number':
							alert("Your Credit Card Number cannot be left blank.");
							break;
						case '.card-exp':
							alert("Your Credit Card Expiration Date cannot be left blank.");
							break;
						case '.card-name':
							alert("Your Credit Card Name cannot be left blank.");
							break;
						case '.card-address':
							alert("Your Credit Card Address cannot be left blank.");
							break;
						case '.card-city':
							alert("Your Credit Card City cannot be left blank.");
							break;
						case '.card-state':
							alert("Your Credit Card State cannot be left blank.");
							break;
						case '.card-zip':
							alert("Your Credit Card Zip cannot be left blank.");
							break;
						}
						if (strFieldName != '.card-exp'){
							objFormName.elements[i].focus();
						}
					return false;
				}
				/*
				if ((objFormName.nonTransactionType.value == 'CC') && (strFieldName == '.card-number')){
					if (!(fcnValidCrediCard(objFormName.elements[i]))) {
						alert("Your Credit Card Number appears to be invalid.")
						return false;
					}
				}
				*/
					objFormName.elements[i].value = objFormName.elements[i].value.replace(objRegExp, "");
					break;
		
			case "txt":
				if (objFormName.elements[i].value == "") {
					alert("Your "+strFieldName+" cannot be left blank.");
					objFormName.elements[i].focus();
					return false;
				}
					objFormName.elements[i].value = objFormName.elements[i].value.replace(objRegExp, "");
					break;
			case "Alt": //Only for the AlternateSource dropdown on seminar registration page
					if (objFormName.elements[i].selectedIndex == 0) {
					var t = objFormName.elements['AltSrcTitle'].value;
					alert(t);
					objFormName.elements[i].focus();
					return false;
				}
				break;
			case "eml":
				if (objFormName.elements[i].name != "emlEmailFrom"){
					intEmailFieldCount++;
				}
				
				objFormName.elements[i].value = objFormName.elements[i].value.replace(/ /g, "");
				//objFormName.elements[i].value = objFormName.elements[i].value.replace(/,/g, ".");
				if (!(fcnIsEmailAddress(objFormName.elements[i]))) {
					alert("You must enter a valid e-mail address: user@domain.com");
					objFormName.elements[i].focus();
					objFormName.elements[i].value = objFormName.elements[i].value.replace(objRegExp, "");
					return false;
				}
				if (intEmailFieldCount == 2) {
					if (!(CompareEmailAddresses(objFormName.elements[i-1], objFormName.elements[i]))) {
						return false;
					}
				}
				
					objFormName.elements[i].value = objFormName.elements[i].value.replace(objRegExp, "");
					break;
			case "sel":
				if (objFormName.elements[i].selectedIndex == 0) {
					alert("You must select a "+strFieldName+".");
					objFormName.elements[i].focus();
					return false;
				}
				break;
			case "zip":
				if (objFormName.elements[i].value.length == 0) {
						alert("Please enter your zip code.");
						objFormName.elements[i].focus();
						return false;
				} else {
					if (!(fcnIsZipcode(objFormName.elements[i])))	{
						alert("Please input a valid, five-digit zip code.");
						objFormName.elements[i].select();
						return false;
						}
				}
				objFormName.elements[i].value = objFormName.elements[i].value.replace(objRegExp, "");
				break;
			case "phn":
				if (objFormName.elements[i].value.length == 0) {
						alert("Please enter your "+strFieldName+" phone.");
						objFormName.elements[i].focus();
						return false;
				} else {
					if (!(fcnIsPhoneNumber(objFormName.elements[i]))) {
						alert("Please enter a valid telephone number with area-code: e.g. (333) 333-4444");
						objFormName.elements[i].select();
						return false;
					}
				}
				objFormName.elements[i].value = objFormName.elements[i].value.replace(objRegExp, "");
				break;
			case "pwd":
				intPasswordFieldCount++;
				if (objFormName.elements[i].value == "") {
					alert("Your "+strFieldName+" cannot be left blank.");
					objFormName.elements[i].focus();
					return false;
				}
				if (objFormName.elements[i].value.length < 4) {
					alert("Your password must be at least 4 characters long.");
					objFormName.elements[i].focus();
					return false;
				}
				if (intPasswordFieldCount == 2) {
					if (!(ComparePasswords(objFormName.elements[i-1], objFormName.elements[i]))) {
						return false;
					}
				}
				objFormName.elements[i].value = objFormName.elements[i].value.replace(objRegExp, "");
				break;
			case "non":
				objFormName.elements[i].value = objFormName.elements[i].value.replace(objRegExp, "");
				break;
			case "prv":
				if (!(objFormName.elements[i].checked)) {
					alert("I'm Sorry! We can not process your order at this time due to your refusal to accept our Privacy Policy.");
					objFormName.elements[i].focus();
					return false;
				}
				break;
		}
	}
return true;
}

// Accepts a string object as input, checks to see if the string 
// contains '@' and '.'
function fcnIsEmailAddress(txtFieldName) {
	strSpecialCharCount = 0;
	objTempString = new String(txtFieldName.value);
	objTempSpring = txtFieldName;
	for (j=0;j<txtFieldName.value.length;j++) {
		switch (objTempString.charAt(j)) {
			case "@":
				strSpecialCharCount++;
				break;
			case ".":
				strSpecialCharCount++;
				break;
			case ",":
				strSpecialCharCount--;
				break;
		}
	}
		if (strSpecialCharCount >= 2) {
			return true;
		} else {return false;}
}

// Accepts a string object as input, checks to see if there are at least
// 5 integers, and returns either true or false.
function fcnIsZipcodeOld(txtFieldName) {
    strIntegerCount = 0;
	objTempZipString = new String(txtFieldName.value);
	objTempZipString.value = txtFieldName.value;
	for (j=0;j<txtFieldName.value.length;j++) {
		if (!(isNaN(objTempZipString.charAt(j)))) {
			strIntegerCount++;
		}
	}
	if ((strIntegerCount == 5)||(strIntegerCount == 9)) {
			return true;
		} else {
			return false;
		}
}

//validate-us-ca-postal', 'Please enter a valid US zip code or Canadian postal code.'
function fcnIsZipcode(txtFieldName) {
    //var regex = /((^\d{5}([- |]\d{4})?$)|(^[A-Z]\d[A-Z][- |]\d[A-Z]\d$))/;
    var regex = /(^\d{5}([- |]\d{4})?$)|(^[A-Z]\d[A-Z]\d[A-Z]\d$)|([A-Za-z]\d[A-Za-z]( |-)?\d[A-Za-z]\d)$/;
    var objTempZipString = new String(txtFieldName.value);
    objTempZipString = objTempZipString.toUpperCase();
    if (regex.test(objTempZipString)) {
        return true;
    } else {
        return false;
    }
}

// Accepts a string object as input, checks to see if there are at least
// 10 integers, and returns either true or false.
function fcnIsPhoneNumber(txtFieldName) {
	strIntegerCount = 0;
	objTempPhoneString = new String(txtFieldName.value);
	objTempPhoneString.value = txtFieldName.value;
	for (j=0;j<txtFieldName.value.length;j++) {
		if (!(isNaN(objTempPhoneString.charAt(j)))) {
			strIntegerCount++;
		}
	}
	if ((strIntegerCount >= 10) && (strIntegerCount <= 17)) {
			return true;
		} else {
			return false;
		}
}

// Accepts a string as input, and returns that string with spaces inbetween
// words.  For example fcnSplitWords will take 'ThisSentenceHasNoSpaces' and
// returns 'This Sentence Has No Spaces'.
function fcnSplitWords(strFieldName) {
	objTempString = new String(strFieldName);
	objTempString.value = strFieldName;
	var strTemp;
	strTemp = "";
	for (j=0;j<objTempString.value.length;j++) {
		if (((objTempString.charCodeAt(j) >= 97) && (objTempString.charCodeAt(j) <= 122)) && ((objTempString.charCodeAt(j+1) >= 65) && (objTempString.charCodeAt(j+1) <= 90))) {
			strTemp = strTemp + objTempString.charAt(j);
			strTemp = strTemp+" ";
		} else {
			strTemp = strTemp + objTempString.charAt(j);
			}
	}
	objTempString = strTemp;
	//strTemp = objTempString.toLowerCase();
	strTemp = objTempString;
	return strTemp;
	//return strTemp;
}

// Takes two password form fields, compares them, and returns whether they match or not
 function ComparePasswords(objFirstPassword, objSecondPassword) {
 	if (objFirstPassword.value != objSecondPassword.value) {
		alert("Your second password does not match the first.");
		objSecondPassword.select();
		return false;
	}
	if (objFirstPassword.value == objSecondPassword.value) {
		return true;
	}
 }
 
 // Takes two email addresses form fields, compares them, and returns whether they match or not
 function CompareEmailAddresses(objFirstEmailAddress, objSecondEmailAddress) {
 	if (objFirstEmailAddress.value != objSecondEmailAddress.value) {
		alert("Your Email Addresses Don't Match");
		objSecondEmailAddress.select();
		return false;
	}
	if (objFirstEmailAddress.value == objSecondEmailAddress.value) {
		return true;
	}
 }
 
 function CheckCreditCardExpiration(m, y, d) {
	// The following code compares the credit card exiration date 
	// to the current date to see if the card has expired
		var objNow = new Date();
		var objCardExp = new Date();
		strIndexMonth = m.selectedIndex;
		strIndexYear = y.selectedIndex;

		CurrentMonth = objNow.getMonth();
		CurrentMonth = CurrentMonth + 1;
		CurrentYear = objNow.getYear();
		CurrentYear += (CurrentYear < 1900) ? 1900 : 0;
		
		// Change single-digit months to double-digit months by prepending a zero to them
		if (CurrentMonth < 10) {
			CurrentMonth = "0"+CurrentMonth;
			}
		
		strExpMonth = m.options[strIndexMonth].value;
		strExpYear = y.options[strIndexYear].value;

		// Check the expiration dates

		if (strExpYear < CurrentYear) {
				alert("This card expired some year ago.")
				return false;
			} else {
				if ((strExpYear == CurrentYear) && (strExpMonth < CurrentMonth)) {
					alert("This card expired sometime this year.");
					return false;
				}
			}
		d.value = m.options[strIndexMonth].value + "/" + y.options[strIndexYear].value.substring(2,4);
		return true;
}

// Accepts a string object as input, checks to see if there are at between
// 13 and 16 integers, and returns either true or false.
function fcnValidCrediCard(txtFieldName) {
	strIntegerCount = 0;
	objTempString = new String(txtFieldName.value);
	objTempString.value = txtFieldName.value;
	strFirstNumber = 0;
	for (j=0;j<txtFieldName.value.length;j++) {
		if (j==0){
			strFirstNumber = objTempString.charAt(j);
		}
		if (!(isNaN(objTempString.charAt(j)))) {
			strIntegerCount++;
		}
	}
	
	//alert(((strIntegerCount >= 13)&&(strIntegerCount <= 16)));
	//alert(((strFirstNumber == 3) || (strFirstNumber == 4) || (strFirstNumber == 5)));
	//If number is between 13-16 numbers long AND begins with a 3,4 or 5
	if (((strIntegerCount >= 13)&&(strIntegerCount <= 16)) && ((strFirstNumber == 3) || (strFirstNumber == 4) || (strFirstNumber == 5))) {
			return true;
		} else {
			return false;
		}
}