//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!Generic Form Validation Code!!!!!!!!!!!!!!!!!!!!!!!!!!!
function FormValidate(oForm) {
	//This function is designed to be a generic form validator.  
	//	(REQ) - Required
	//	(TXT) - Text Validation
	//	(DAT) - Date Validation
	//	(NUM) - Numeric Validation
	//  (CRY) - Country Validation
	//	(STT) - State Validation
	//	(PRV) - Province Validation
	//	(SEL) - Select Box
	//  (OTH) - Other has been selected
	//  (SAM) - Sample - used with REQNUM to require a number in sample quantity range
	//Name the fields something suitable for user display
	//	eg.	If the field "REQTXTProduction_Address" is left empty, the user will 
	//		be prompted that the field "Production Address" was left empty
	//	(OOx) - This is used for one - or - the other.  X is a number so that you can have more than one.

	var strName
	var blnReq
	var strReqs
	var strInvalidTypes
	var msg
	var CountryValue
	var StateValue
	var ProvinceValue
	var CountyField
	var StateField
	var ProvinceField
	var aTempArray
	var j
	var FirstName
	var LastName
	var Phone
	var AvailableCompany
	var UnavailableCompany
	var SELOTHName
	var TXTOTHName
	strName = ""
	strReqs = ""
	msg = ""
	strInvalidTypes = ""
	var blnOOx
	var strOOxNames = ""
	var strOOxNumber = ""
	var strOOxNumbers = ""
	var strOOxName = ""
	var strUpperCaseValue = ""
	var k
	var strIFYRADNum




	for (var i = 0; i < oForm.length; i++) {
		strName = oForm.elements[i].name
		// Matt Colin 12/27/05 Added e-mail validation.
		if (strName.indexOf('REQTXTEmail') != -1) {
			var apos = oForm.REQTXTEmail.value.indexOf('@')
			var dotpos = oForm.REQTXTEmail.value.lastIndexOf('.')
			if (apos < 1 || dotpos - apos < 2) {
			    strInvalidTypes += "\n  You must enter a valid email address in form name@domain."
			}
		}
		if ((strName.indexOf('REQ') != -1) && (strName.indexOf('CRY') == -1) && (strName.indexOf('SEL') == -1) && trim(oForm.elements[i].value) == "") {
			strReqs = strReqs + "\n     " + GetUserField(strName)
		}
		if (strName.indexOf('IFYRAD') != -1 && oForm.elements[i].value == 'Yes' && oForm.elements[i].checked == true) {
			strIFYRADNum = strName.substring(6, 8)
			for (j = 0; j < oForm.length; j++) {
				if (oForm.elements[j].name.indexOf('IFYTXT' + strIFYRADNum) != -1 || oForm.elements[j].name.indexOf('IFYNUM' + strIFYRADNum) != -1) {
					if (oForm.elements[j].value == "") {
						strInvalidTypes += "\n\n- Since you selected Yes for " + GetUserField(strName)
						strInvalidTypes += "\n   you must supply a value for " + GetUserField(oForm.elements[j].name)
					}
				}
			}
		}
		if ((strName.indexOf('SEL') != -1) && strName.indexOf('REQ') != -1 && strName.indexOf('CRY') == -1) {
			if (oForm.elements[i].selectedIndex == -1 || oForm.elements[i].value == "") {
				strReqs = strReqs + "\n     " + GetUserField(strName)
			}
			else {
				if (strName.indexOf('VIA') != -1) {
					if (oForm.elements[i].value.indexOf('UPS') == 0) {
					}
					else {
						for (j = 0; j < oForm.length; j++) {
							if ((oForm.elements[j].name.indexOf('VIA') != -1) && (oForm.elements[j].name.indexOf('CAR') != -1)) {
								if (oForm.elements[j].value == "") {
									strInvalidTypes += "\n\n- Since did not select a UPS Ship Via from " + GetUserField(strName)
									strInvalidTypes += "\n   you must enter a Carrier Account Number in " + GetUserField(oForm.elements[j].name)
								}
							}
						}
					}
				}
			}
		}
		if ((strName.indexOf('SEL') != -1) && strName.indexOf('OTH') != -1) {
			SELOTHName = ""
			TXTOTHName = ""
			if (oForm.elements[i].options[oForm.elements[i].selectedIndex].value == "Other") {
				SELOTHName = strName
				TXTOTHName = StringReplace(SELOTHName, "SEL", "TXT")
				for (j = 0; j < oForm.length; j++) {
					if (oForm.elements[j].name == TXTOTHName) {
						if (oForm.elements[j].value == "") {
							strInvalidTypes += "\n\n- Since you selected Other from " + GetUserField(SELOTHName)
							strInvalidTypes += "\n   you must enter the information in " + GetUserField(TXTOTHName)
						}
					}
				}
			}
			if (oForm.elements[i].options[oForm.elements[i].selectedIndex].value == "") {
				SELOTHName = strName
				TXTOTHName = StringReplace(SELOTHName, "SEL", "TXT")
				for (j = 0; j < oForm.length; j++) {
					if (oForm.elements[j].name == TXTOTHName) {
						if (oForm.elements[j].value == "") {
							strInvalidTypes += "\n\n- You must either select an option from the " + GetUserField(SELOTHName)
							strInvalidTypes += "\n   field or enter the information in the text box below it."
						}
					}
				}
			}
		}

		if ((strName.indexOf('TXT') != -1) && strName.indexOf('OTH') != -1) {
			SELOTHName = ""
			TXTOTHName = ""
			if (oForm.elements[i].value != "") {
				TXTOTHName = strName
				SELOTHName = StringReplace(TXTOTHName, "TXT", "SEL")
				for (j = 0; j < oForm.length; j++) {
					if (oForm.elements[j].name == SELOTHName) {
						if (oForm.elements[j].options[oForm.elements[j].selectedIndex].value != "Other") {
							if (oForm.elements[j].options[oForm.elements[j].selectedIndex].value != "") {
								strInvalidTypes += "\n\n- For other information in the " + GetUserField(TXTOTHName) + " field to be submitted"
								strInvalidTypes += "\n   you must select other from the " + GetUserField(SELOTHName) + " select box."
							}
						}
					}
				}
			}
		}

		if ((strName.indexOf('SEL') != -1) && strName.indexOf('COM') != -1) {
			if (strName.indexOf('Available') != -1) {
				AvailableCompany = strName
				UnavailableCompany = StringReplace(AvailableCompany, "Available_Company", "Unavailable_Company")
				if (oForm.elements[i].options[oForm.elements[i].selectedIndex].value == "") {
					for (j = 0; j < oForm.length; j++) {
						if (oForm.elements[j].name == UnavailableCompany) {
							if (oForm.elements[j].options[oForm.elements[j].selectedIndex].value == "") {
								if (strReqs.indexOf('You must select a company from') == -1) {
									strReqs += "\n\n- You must select a company from " + GetUserField(AvailableCompany)
									strReqs += "\n  or " + GetUserField(UnavailableCompany)
								}
							}
						}
					}
				}
			}
			if (strName.indexOf('Unavailable') != -1) {
				UnavailableCompany = strName
				AvailableCompany = StringReplace(UnavailableCompany, "Unavailable_Company", "Available_Company")
				if (oForm.elements[i].options[oForm.elements[i].selectedIndex].value == "") {
					for (j = 0; j < oForm.length; j++) {
						if (oForm.elements[j].name == AvailableCompany) {
							if (oForm.elements[j].options[oForm.elements[j].selectedIndex].value == "") {
								if (strReqs.indexOf('You must select a company from') == -1) {
									strReqs += "\n\n- You must select a company from " + GetUserField(AvailableCompany)
									strReqs += "\n  or " + GetUserField(UnavailableCompany)
								}
							}
						}
					}
				}
			}
		}

		if (strName.indexOf('TXT') != -1) {
			//text validation code
			//nothing to do to validate text 
		}

		if (strName.indexOf('DAT') != -1) {

			if (isDate(oForm.elements[i].value) || oForm.elements[i].value == "") {
				//Do Nothing
			}
			else {
				if (strName != "__EVENTVALIDATION") {
					if (strName.indexOf('BLD')) {
						strInvalidTypes += "\n\n- The " + GetUserField(strName) + " must be a valid date in mm/dd/yyyy format."
					}
					else {
						strInvalidTypes += "\n\n- The " + GetUserField(strName) + " must be a valid date in mm/dd/yyyy format."
					}
				}
			}
		}

		if (strName.indexOf('PWD') != -1) {
			if (strName.indexOf('_Verification') == -1) {
				strPWDName = strName
				strPWDValue = oForm.elements[i].value
				strPWDVerName = strPWDName + "_Verification"
				for (j = 0; j < oForm.length; j++) {
					if (oForm.elements[j].name == strPWDVerName) {
						if (oForm.elements[j].value != strPWDValue) {
							strInvalidTypes += "\n\n- The " + GetUserField(strPWDName) + " field does not equal the " + GetUserField(strPWDVerName) + " field."
						}
					}
				}
			}
		}

		if (strName.indexOf('OO') != -1) {
			strOOxNumber = strName.charAt(strName.indexOf('OO') + 2)
			if (strOOxNumbers.indexOf(strOOxNumber) == -1) {
				strOOxNumbers += ", " + strOOxNumber
				strOOxNames = ""
				strOOxName = 'OO' + strOOxNumber
				blnOOx = false
				for (j = 0; j < oForm.length; j++) {
					if (oForm.elements[j].name.indexOf(strOOxName) != -1) {
						if (oForm.elements[j].name.indexOf("CHK") != -1) {
							if (oForm.elements[j].checked == false) {
								strOOxNames += "\n     " + GetUserField(oForm.elements[j].name)
								//keep searching for one that does have a value
							}
							else {
								blnOOx = true
								break
							}
						}
						else if (oForm.elements[j].name.indexOf("SEL") != -1) {
							if (oForm.elements[j].options[oForm.elements[j].selectedIndex].value == "") {
								strOOxNames += "\n     " + GetUserField(oForm.elements[j].name)
								//keep searching for one that does have a value
							}
							else {
								blnOOx = true
								break
							}
						}
						else {
							if (oForm.elements[j].value == "") {
								strOOxNames += "\n     " + GetUserField(oForm.elements[j].name)
								//keep searching for one that does have a value
							}
							else {
								blnOOx = true
								break
							}
						}

					}
				}
				if (blnOOx == false) {
					strInvalidTypes += "\n\n- You must enter a value in at least one of the following fields:"
					strInvalidTypes += strOOxNames
				}
			}
		}

		if (strName.indexOf('XML') != -1) {
			strUpperCaseValue = oForm.elements[i].value.toUpperCase()
			if (strUpperCaseValue.indexOf('SAMTEC') != -1) {
				strInvalidTypes = strInvalidTypes + "\n\n- The " + GetUserField(strName) + " field was provided for your email address, \n  not that of a Samtec Associate."
			}
		}

		if (strName.indexOf('CON') != -1) {
			//code for validating contact info
			if (oForm.elements[i].value != "") {
				if (strName.indexOf('FNM') != -1) {
					//code for first name
					FirstName = strName
					LastName = StringReplace(FirstName, "First", "Last")
					LastName = StringReplace(LastName, "FNM", "LNM")
					Phone = StringReplace(FirstName, "First_Name", "Phone")
					Phone = StringReplace(Phone, "FNM", "PHN")
					for (j = 0; j < oForm.length; j++) {
						if ((oForm.elements[j].name == LastName) || (oForm.elements[j].name == Phone)) {
							if (oForm.elements[j].value == "") {
								strInvalidTypes += "\n\n- Since you have entered information in the " + GetUserField(FirstName) + " field,"
								strInvalidTypes += "\n  you must also supply information in the " + GetUserField(LastName)
								strInvalidTypes += "\n  and " + GetUserField(Phone) + " fields."
								break
							}
						}
					}
				}
				if (strName.indexOf('LNM') != -1) {
					//code for last name
					LastName = strName
					FirstName = StringReplace(LastName, "Last", "First")
					FirstName = StringReplace(FirstName, "LNM", "FNM")
					Phone = StringReplace(FirstName, "First_Name", "Phone")
					Phone = StringReplace(Phone, "FNM", "PHN")
					for (j = 0; j < oForm.length; j++) {
						if ((oForm.elements[j].name == FirstName) || (oForm.elements[j].name == Phone)) {
							if (oForm.elements[j].value == "") {
								strInvalidTypes += "\n\n- Since you have entered information in the " + GetUserField(LastName) + " field,"
								strInvalidTypes += "\n  you must also supply information in the " + GetUserField(FirstName)
								strInvalidTypes += "\n  and " + GetUserField(Phone) + " fields."
								break
							}
						}
					}
				}
				if (strName.indexOf('PHN') != -1) {
					//code for phone
					Phone = strName
					FirstName = StringReplace(Phone, "Phone", "First_Name")
					FirstName = StringReplace(FirstName, "PHN", "FNM")
					LastName = StringReplace(FirstName, "First", "Last")
					LastName = StringReplace(LastName, "FNM", "LNM")
					for (j = 0; j < oForm.length; j++) {
						if ((oForm.elements[j].name == FirstName) || (oForm.elements[j].name == LastName)) {
							if (oForm.elements[j].value == "") {
								strInvalidTypes += "\n\n- Since you have entered information in the " + GetUserField(Phone) + " field,"
								strInvalidTypes += "\n  you must also supply information in the " + GetUserField(FirstName)
								strInvalidTypes += "\n  and " + GetUserField(LastName) + " fields."
								break
							}
						}
					}
				}

			}
		}

		if ((strName.indexOf('NUM') != -1) && (isNaN(oForm.elements[i].value))) {
			//number validation code
			strInvalidTypes = strInvalidTypes + "\n- The field " + GetUserField(strName) + " must be numeric without punctuation (e.g. commas, dollar signs etc.) except decimals."
		}
		else {
			if (strName.indexOf('SAM') != -1) {
				//sample quantity validation
				if ((oForm.elements[i].value.valueOf() < 1) || (oForm.elements[i].value.valueOf() > 50)) {
					strInvalidTypes = strInvalidTypes + "\n- The field " + GetUserField(strName) + " must be greater than 1 and less than 50"
				}
			}
		}

		if (strName.indexOf('CRY') != -1) {
			//country validation code

			//This code takes the name of the country field, pulls out the word "Country" and swaps it with "State" and "Province"
			//And, then it pulls out the "CRY" and swaps it with "STT" and "PRV"
			//It also removes the "REQ" because State And Province shouldn't be required unless the proper country is selected
			//therefore creating the names of the related state and province fields
			CountryField = oForm.elements[i].name
			CountryField = StringReplace(CountryField, "REQ", "")
			StateField = StringReplace(CountryField, "Country", "State")
			StateField = StringReplace(StateField, "CRY", "STT")
			ProvinceField = StringReplace(CountryField, "Country", "Province")
			ProvinceField = StringReplace(ProvinceField, "CRY", "PRV")

			if (strName.indexOf('REQ') != -1) {
				if (oForm.elements[i].options[oForm.elements[i].selectedIndex].value == "") {
					strReqs = strReqs + "\n     " + GetUserField(strName)
				}
			}
			if (oForm.elements[i].options[oForm.elements[i].selectedIndex].value == "211") {
				for (j = 0; j < oForm.length; j++) {
					if ((oForm.elements[j].name == StateField) && (oForm.elements[j].options[oForm.elements[j].selectedIndex].value == "")) {
						strInvalidTypes = strInvalidTypes + "\n\n- Since the United States has been selected in " + GetUserField(CountryField)
						strInvalidTypes = strInvalidTypes + ",\n  you must select a state from " + GetUserField(StateField)
						break;
					}
				}
			}
			else {
				for (j = 0; j < oForm.length; j++) {
					if ((oForm.elements[j].name == StateField) && (oForm.elements[j].options[oForm.elements[j].selectedIndex].value != "")) {
						strInvalidTypes = strInvalidTypes + "\n\n- Since the United States has not been selected in " + GetUserField(CountryField)
						strInvalidTypes = strInvalidTypes + ",\n  you must not select a state from " + GetUserField(StateField)
						break;
					}
				}
			}

			if (oForm.elements[i].options[oForm.elements[i].selectedIndex].value == "34") {
				for (j = 0; j < oForm.length; j++) {
					if ((oForm.elements[j].name == ProvinceField) && (oForm.elements[j].options[oForm.elements[j].selectedIndex].value == "")) {
						strInvalidTypes = strInvalidTypes + "\n\n- Since the Canada has been selected in " + GetUserField(CountryField)
						strInvalidTypes = strInvalidTypes + ",\n  you must select a province from " + GetUserField(ProvinceField)
						break;
					}
				}
			}
			else {
				for (j = 0; j < oForm.length; j++) {
					if ((oForm.elements[j].name == ProvinceField) && (oForm.elements[j].options[oForm.elements[j].selectedIndex].value != "")) {
						strInvalidTypes = strInvalidTypes + "\n\n- Since the Canada has not been selected in " + GetUserField(CountryField)
						strInvalidTypes = strInvalidTypes + ",\n  you must not select a province from " + GetUserField(ProvinceField)
						break;
					}
				}
			}

		}

	}

	if ((strReqs != "") || (strInvalidTypes != "")) {
		msg = "__________________________________________________________________\n\n"
		msg += "The form was not submitted because of the following error(s).\n"
		msg += "Please correct these error(s) and re-submit.\n"
		msg += "__________________________________________________________________\n\n"

		if (strReqs != "") {
			msg += "- The following required field(s) are empty:"
			msg += strReqs
		}
		msg += strInvalidTypes
		alert(msg);
		return false;
	}
	else {
	    //oForm.submit()
	    return true;
	}

}


function isDate(strDate) {
	// strDate must be of the format mm/dd/ccyy for this function to return true
	// 
	var aDate

	aDate = strDate.split("/")
	if (aDate.length == 3) {
		for (var i = 0; i < 3; i++) {
			if (isNaN(aDate[i])) {
				return false
			}
		}
		if (aDate[0] == 1 || aDate[0] == 3 || aDate[0] == 5 || aDate[0] == 7 || aDate[0] == 8 || aDate[0] == 10 || aDate[0] == 12) {
			if (aDate[1] >= 1 && aDate[1] <= 31) {
				if (aDate[2] >= 0) {
					return true
				}
				else {
					return false
				}
			}
			else {
				return false
			}
		}
		if (aDate[0] == 2) {
			if (aDate[1] >= 1 && aDate[1] <= 29) {
				if (aDate[2] >= 0) {
					return true
				}
				else {
					return false
				}
			}
			else {
				return false
			}
		}
		if (aDate[0] == 4 || aDate[0] == 6 || aDate[0] == 9 || aDate[0] == 11) {
			if (aDate[1] >= 1 && aDate[1] <= 30) {
				if (aDate[2] >= 0) {
					return true
				}
				else {
					return false
				}
			}
			else {
				return false
			}
		}
		if (aDate[2] < 1 || aDate[2] > 12) {
			return false
		}
	}
	else {
		return false
	}
}

function StringReplace(strReplaceIn, strReplaceSearch, strReplaceWith) {
	var RetVal
	var aTempArray

	RetVal = strReplaceIn
	if (strReplaceIn.indexOf(strReplaceSearch) != -1) {
		aTempArray = strReplaceIn.split(strReplaceSearch)
		RetVal = aTempArray.join(strReplaceWith)
	}
	return RetVal;
}

function GetUserField(strName) {
	var UserField
	var aUserSplit
	var TempName
	var NameNumber

	TempName = strName
	if (TempName.indexOf('IFYRAD') != -1) {
		TempName = TempName.substring(8, TempName.length)
	}
	if (TempName.indexOf('IFYTXT') != -1) {
		TempName = TempName.substring(8, TempName.length)
	}
	if (TempName.indexOf('IFYNUM') != -1) {
		TempName = TempName.substring(8, TempName.length)
	}
	if (TempName.indexOf('REQ') != -1) {
		TempName = TempName.substring(0, TempName.indexOf('REQ')) + TempName.substring(TempName.indexOf('REQ') + 3, TempName.length)
	}
	if (TempName.indexOf('TXT') != -1) {
		TempName = TempName.substring(0, TempName.indexOf('TXT')) + TempName.substring(TempName.indexOf('TXT') + 3, TempName.length)
	}
	if (TempName.indexOf('DAT') != -1) {
		TempName = TempName.substring(0, TempName.indexOf('DAT')) + TempName.substring(TempName.indexOf('DAT') + 3, TempName.length)
	}
	if (TempName.indexOf('NUM') != -1) {
		TempName = TempName.substring(0, TempName.indexOf('NUM')) + TempName.substring(TempName.indexOf('NUM') + 3, TempName.length)
	}
	if (TempName.indexOf('CRY') != -1) {
		TempName = TempName.substring(0, TempName.indexOf('CRY')) + TempName.substring(TempName.indexOf('CRY') + 3, TempName.length)
	}
	if (TempName.indexOf('STT') != -1) {
		TempName = TempName.substring(0, TempName.indexOf('STT')) + TempName.substring(TempName.indexOf('STT') + 3, TempName.length)
	}
	if (TempName.indexOf('PRV') != -1) {
		TempName = TempName.substring(0, TempName.indexOf('PRV')) + TempName.substring(TempName.indexOf('PRV') + 3, TempName.length)
	}
	if (TempName.indexOf('SEL') != -1) {
		TempName = TempName.substring(0, TempName.indexOf('SEL')) + TempName.substring(TempName.indexOf('SEL') + 3, TempName.length)
	}
	if (TempName.indexOf('ITM') != -1) {
		TempName = TempName.substring(0, TempName.indexOf('ITM')) + TempName.substring(TempName.indexOf('ITM') + 3, TempName.length)
	}
	if (TempName.indexOf('CON') != -1) {
		TempName = TempName.substring(0, TempName.indexOf('CON')) + TempName.substring(TempName.indexOf('CON') + 3, TempName.length)
	}
	if (TempName.indexOf('FNM') != -1) {
		TempName = TempName.substring(0, TempName.indexOf('FNM')) + TempName.substring(TempName.indexOf('FNM') + 3, TempName.length)
	}
	if (TempName.indexOf('LNM') != -1) {
		TempName = TempName.substring(0, TempName.indexOf('LNM')) + TempName.substring(TempName.indexOf('LNM') + 3, TempName.length)
	}
	if (TempName.indexOf('PHN') != -1) {
		TempName = TempName.substring(0, TempName.indexOf('PHN')) + TempName.substring(TempName.indexOf('PHN') + 3, TempName.length)
	}
	if (TempName.indexOf('COM') != -1) {
		TempName = TempName.substring(0, TempName.indexOf('COM')) + TempName.substring(TempName.indexOf('COM') + 3, TempName.length)
	}
	if (TempName.indexOf('OTH') != -1) {
		TempName = TempName.substring(0, TempName.indexOf('OTH')) + TempName.substring(TempName.indexOf('OTH') + 3, TempName.length)
	}
	if (TempName.indexOf('SAM') != -1) {
		TempName = TempName.substring(0, TempName.indexOf('SAM')) + TempName.substring(TempName.indexOf('SAM') + 3, TempName.length)
	}
	if (TempName.indexOf('OO') != -1) {
		NameNumber = TempName.charAt(TempName.indexOf('OO') + 2)
		TempName = TempName.substring(0, TempName.indexOf('OO' + NameNumber)) + TempName.substring(TempName.indexOf('OO' + NameNumber) + 3, TempName.length)
	}
	if (TempName.indexOf('PWD') != -1) {
		TempName = TempName.substring(0, TempName.indexOf('PWD')) + TempName.substring(TempName.indexOf('PWD') + 3, TempName.length)
	}
	if (TempName.indexOf('XML') != -1) {
		TempName = TempName.substring(0, TempName.indexOf('XML')) + TempName.substring(TempName.indexOf('XML') + 3, TempName.length)
	}
	if (TempName.indexOf('CHK') != -1) {
		TempName = TempName.substring(0, TempName.indexOf('CHK')) + TempName.substring(TempName.indexOf('CHK') + 3, TempName.length)
	}
	if (TempName.indexOf('VIA') != -1) {
		TempName = TempName.substring(0, TempName.indexOf('VIA')) + TempName.substring(TempName.indexOf('VIA') + 3, TempName.length)
	}
	if (TempName.indexOf('CAR') != -1) {
		TempName = TempName.substring(0, TempName.indexOf('CAR')) + TempName.substring(TempName.indexOf('CAR') + 3, TempName.length)
	}
	if (TempName.indexOf('BLD') != -1) {
		TempName = TempName.substring(0, TempName.indexOf('BLD')) + TempName.substring(TempName.indexOf('BLD') + 3, TempName.length)
	}
	aUserSplit = TempName.split("_")
	UserField = aUserSplit.join(" ")

	return UserField
}

function trim(strVal) {
	strVal = StringReplace(strVal, ' ', '');
	return strVal;
}
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!Generic Form Validation Code!!!!!!!!!!!!!!!!!!!!!!!!!!!
