function AddFieldForVal(ItemId, ItemName, ValType, MinLength, MaxLength) {
	arrVal[arrVal.length] = new Array(ItemId, ItemName, ValType, MinLength, MaxLength);
}
	
function RemoveFieldForVal(ItemId) {
	for (var i = 0; i < arrVal.length; i++) {
		if (arrVal[i][0] == ItemId) {
			arrVal.splice(i, 1);
			// don't exit loop... control may have been added multiple times.
			//return;
		}
	}
	var oEle = document.getElementById(ItemId);
	if (oEle) {
		resetField(oEle);
	}
}

function validateForm(objForm) {
	for(iIndex in arrVal) {
		if(!validateField(arrVal[iIndex]))
			return false;
	}
	return true;
}

function validateField(arrEle) {
	// Get the values from the Element's array
	var sItemId = arrEle[0];
	var sItemName = arrEle[1];
	var sValType = arrEle[2];
	var iMinLength = arrEle[3];
	var iMaxLength = arrEle[4];
	
	// try to get hold of the object
	try { 
		var oEle = document.getElementById(sItemId);
	}
	catch(e) {
		var oEle = null;
	}

	if (oEle) {
		if (sValType == "checkbox") {
			if (iMinLength > 0 && !oEle.checked) {
				var strMessage = sItemName + " is required and was left blank. Please select it.";
				throwError(oEle, strMessage)
				return false;
			}
		}
		else if (sValType == "radio") {
			if (iMinLength > 0 && !IsRadioGroupChecked(sItemId)) {
				var strMessage = sItemName + " is required and was not selected. Please select it.";
				throwRadioError(oEle, strMessage)
				return false;
			}
		}
		else {
			var sValue = oEle.value;
			resetField(oEle);
			
			// First check for Min Length
			if(iMinLength > 0 && sValue.length < iMinLength) {
				if(iMinLength == 1)
					var strMessage = "The " + sItemName + " field is required and was left blank. Please enter a value.";
				else
					var strMessage = "The " + sItemName + " field must be at least " + iMinLength + " characters in length. Please enter a longer value.";
					
				throwError(oEle, strMessage)
				return false;
			}

			// Then Check for Max Length
			if(iMaxLength > 0 && sValue.length > iMaxLength) {
				var strMessage = "The " + sItemName + " field must be no more than " + iMinLength + " characters in length. Please enter a shorter value.";
				throwError(oEle, strMessage)
				return false;
			}					

			if(sValue.length > 0) {
				// Now check against Validation Regular Expression
				var regEx = getRegExFromTypeCode(sValType);
				if(!sValue.match(regEx)) {
					//Failed RegEx check
					var strMessage = "The " + sItemName + " field does not appear valid and/or contains characters that are not allowed.";
					throwError(oEle, strMessage)
					return false;
					
				}
			}					
		}				
	}
	else {
		// can't attach to the object so we'll have to skip it.
	}
	return true; //Passes Inspection
}

function throwError(oEle, Message) {
	if (oEle.tagName.toLowerCase() == 'select') {
		oEle.focus();
		if(!strErrBGColor || strErrBGColor.length < 7)
			strErrBGColor = "#FFFF99";
		oEle.style.backgroundColor = strErrBGColor;
	}
	else {
		oEle.focus();
		oEle.select();
		if(!strErrBGColor || strErrBGColor.length < 7)
			strErrBGColor = "#FFFF99";
		oEle.style.backgroundColor = strErrBGColor;
	}
	alert(Message);
}

function throwRadioError(oEle, Message) {
	oEle.focus();
	alert(Message);
}

function resetField(oEle) {
	oEle.style.backgroundColor = "";
}

function getRegExFromTypeCode(strCode) {
	var regEx = null;
	switch(strCode.toLowerCase())
	{
		case "text":
			regEx = /^[\w$()*+?'";:,.!@#%&_ \t\-]*$/ig;
			break;
		case "integer":
			regEx = /^[\d]*$/ig;
			break;
		case "currency":
			regEx = /^[$]?[\d,]*[.]?[\d]*$/ig;
			break;
		case "name":
			regEx = /^[A-Za-z .'"]*$/ig;
			break;
		case "account":
			regEx = /^[\d- ]*$/ig;
			break;
		case "code":
			regEx = /^[\w- ]*$/ig;
			break;
		case "address":
			regEx = /^[\w #'"();,.-]*$/ig;
			break;
		case "decimal":
			regEx = /^[\d.]*$/ig;
			break;
		case "email":
			regEx = /^[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/ig;
			break;
		case "phone":
			regEx = /^\(?[0-9]{0,3}\)?[-. ]?[0-9]{3}[-. ]?[0-9]{4}$/ig;
			break;
		case "date":
			regEx = /^(0?[1-9]|1[012])[- \x2F.](0?[1-9]|[12][0-9]|3[01])[- \x2F.](19|20)?[0-9]{2}$/ig;
			break;
		case "time":
			regEx = /^[\d]{1,2}[:][\d]{1,2}[ ]?[amp]{0,2}$/ig;
			break;
		case "datetime":
			regEx = /^[\d-:.amp \x2F]*$/ig;
			break;
		case "checkbox":
			break;
		default:
			regEx = /^[\w$()*+?'";:,!@#%&_ \t\-]*$/ig;
			break;
	}
	return regEx;
}

function IsRadioGroupChecked(groupName) {
	var oGroup = document.getElementsByName(groupName);
	for (var i = 0; i < oGroup.length; i++) {
		if (oGroup[i].checked == true) {
			return true;
		}
	}
	return false;
}
