// Form Validation
strMessages = "";
function validate_field(objField, strTypes, strMessage, objExtraArgs) {
	var arrTypes = strTypes.split("|");
	var bolValid = true;
	for (var intPosition in arrTypes) {
		var strType = arrTypes[intPosition];
		with (objField) {
			switch (strType) {
				case "required":
					if (value == null || value == "") bolValid = false;
					break;
				case "checked":
					if (!checked) bolValid = false;
					break;
				case "email":
					if (value.length != 0) {
						var objRegExp = new RegExp("^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$", "i");
						if (!objRegExp.test(value)) bolValid = false;
					}
					break;
				case "uszip":
					if (value.length != 0) {
						var objRegExp = new RegExp("^([0-9]{5})(-[0-9]{4})?$");
						if (!objRegExp.test(value)) bolValid = false;
					}
					break;
				case "phone":
					if (value.length != 0) {
						var objRegExp = new RegExp("^[0-9]{3}[-\/\.][0-9]{3}[-\/\.][0-9]{4}$");
						if (!objRegExp.test(value)) bolValid = false;
					}
					break;
				case "url":
					if (value.length != 0) {
						var objRegExp = new RegExp("^[a-z]{3,5}(://){1}[\w~+\-]+\\.{1}[a-z]{2,}.*$", "i");
						if (!objRegExp.test(value)) bolValid = false;
					}
					break;
				case "match":
					if (value != objExtraArgs.strMatch) bolValid = false;
					break;
				case "length":
					if (value.length != objExtraArgs.intLength) bolValid = false;
					break;
				case "minlength":
					if (value.length < objExtraArgs.intMinLength) bolValid = false;
					bolValid = (value.length >= objExtraArgs.intMinLength);
					break;
				case "maxlength":
					if (value.length > objExtraArgs.intMaxLength) bolValid = false;
					break;
				case "numeric":
					strValidChars = "";
					if (objExtraArgs.strNumberType == "whole") {
						strValidChars = "0123456789";
					} else {
						strValidChars = "0123456789.-";
					}
					var strChar;
					if (value.length == 0) {
						bolValid = false;
					} else {
						for (var i = 0; i < value.length; i++) {
							strChar = value.charAt(i);
							if (strValidChars.indexOf(strChar) == -1) {
								bolValid = false;
								break;
							}
						}
					}
					break;
				case "creditcard_number":
					var intCheck = 0;
					var intDigit = 0;
					var bolEven = false;
					var strValue = value.replace(/\D/g, "");
					for (n = strValue.length - 1; n >= 0; n--) {
						var strDigit = strValue.charAt(n);
						var intDigit = parseInt(strDigit, 10);
						if (bolEven) {
							if ((intDigit *= 2) > 9) intDigit -= 9;
						}
						intCheck += intDigit;
						bolEven = !bolEven;
					}
					if ((intCheck % 10) != 0) bolValid = false;
					break;
				case "creditcard_code":
					if (value.length != 0) {
						strValidChars = "0123456789";
						for (i = 0; i < value.length; i++) {
							strChar = value.charAt(i);
							if (strValidChars.indexOf(strChar) == -1) {
								bolValid = false;
								break;
							}
						}
						if (objExtraArgs.strCardType == "amex" && value.length != 4) {
							bolValid = false;
						} else if(objExtraArgs.strCardType != "amex" && value.length != 3) {
							bolValid = false;
						}
					}
					break;
				case "year":
					if (value.length != 0) {
						strValidChars = "0123456789";
						for (i = 0; i < value.length; i++) {
							strChar = value.charAt(i);
							if (strValidChars.indexOf(strChar) == -1) {
								bolValid = false;
								break;
							}
						}
						if(value.length != 4) {
							bolValid = false;
						}
					}
					break;
				case "month_numeric":
					if (value.length != 0) {
						strValidChars1 = "123456789";
						strValidChars2 = "012";
						if (value.charAt(0) == 0) {
							if (strValidChars1.indexOf(value.charAt(1)) == -1) bolValid = false;
						} else if (value.charAt(0) == 1) {
							if (strValidChars2.indexOf(value.charAt(1)) == -1) bolValid = false;
						} else {
							bolValid = false;
						}
					}
					break;
			}
		}
	}
	if (!bolValid) {
		strMessages += "<div class=\"error\">" + strMessage + "</div>";
		$(objField).addClass("error");
		location.href = "#messages";
		objField.focus();
	}
	return bolValid;
}

// Display validation error messages
function displayMessages() {
	if (strMessages != "") $("#messages").html(strMessages);
	strMessages = "";
}

// 
function resetFieldErrors(objForm) {
	$(objForm).find(".error").removeClass("error");
}