
var RequiredFieldNotSelectable_constant = new String("NotSelectable");
var RequiredFieldBackgroundColor="#FFFFCC";
var RequiredFieldErrorColor="#FFCC66";
var RequiredFieldCustomMessageUse=false;
var RequiredFieldErrorMessages=new Array();
var RequiredFieldDefinitionAry=new Array();
var RequiredFieldObjectAry=new Array();
var RequiredField_origColor_Ary = new Array();
var RequiredFieldPEMessages=new Array();
var RequiredFieldValidTypes=new Array("AlphaNumeric","Alpha","Numeric","Phone","Email","Date","Currency","TrainID","EquipmentID","Time", "Milepost");
var RequiredField_LayeredTabs=false;
var RequiredFieldVRFCount=0;
var RequiredFieldErrorFound=false;
var ricolaRFDelimeter=new String("-=-1856-=-");
var RFvalidDateMonthsAry=new Array("none","January","February","March","April","May","June","July","August","September","October","November","December");
var RequiredFieldStandardEMessages=new Array(
"No Item Selected in the Dropdown Box",
"Invalid Option Selected in the Dropdown Box",
"Required Field Was Left Empty",
"Field can only contain letters",
"Field can only contain numbers",
"E-mail address is formatted incorrectly, please re-enter in a ____@______.___ format",
"Invalid Month","Field cannot contain a \".\"",
"Currency Field is formatted incorrectly; it can contain only numbers",
"If the currency field contains a decimal, it must be formatted with two digits after the decimal",
"Field contains more than one decimal",
"Field contains commas that are delimited incorrectly, please reformat in a ###,###,### style format.",
"The Train-ID is not of format 1-8 Letters/Numbers and then ending in 2 Numbers.",
"The Equipment ID was entered incorrectly, it did not have the format of 1 to 4 letters and then 1 to 6 numbers.",
"Time Field invalid, hours inputted greater then 23",
"Time Field invalid, hours inputted greater then 12",
"Time Field invalid, minutes inputted greater then 59",
"Time Field invalid, seconds inputted greater then 59",
"The milepost was entered incorrectly. Mileposts begin with an optional hyphen, followed by 1 to 4 digits, and (optionally) a decimal point followed by 1 to 3 more digits."
);


/*****************************************************************************************************************/

function RICOLARequiredFields_NotSelectable(inNS_Str) {
	if (arguments.length < 1) {
		var inNS_Str = new String("NotSelectable");
	}
	RequiredFieldNotSelectable_constant = inNS_Str;
	return true;
}

/*****************************************************************************************************************/


function clearValidateRequiredField() {
	for (var i=0; i < RequiredFieldObjectAry.length; i++) {
		if (RequiredFieldObjectAry[i].length) {
			for (var x=0; x < RequiredFieldObjectAry[i].length; x++) {
				RequiredFieldObjectAry[i][x].style.backgroundColor = RequiredField_origColor_Ary[i];
			}
		} else {
			RequiredFieldObjectAry[i].style.backgroundColor = RequiredField_origColor_Ary[i];
		}
	}
	RequiredFieldCustomMessageUse=false;
	RequiredFieldErrorMessages=new Array();
	RequiredFieldDefinitionAry=new Array();
	RequiredFieldObjectAry=new Array();
	RequiredFieldPEMessages=new Array();
	RequiredField_origColor_Ary = new Array();
	RequiredFieldVRFCount=0;
	RequiredFieldErrorFound=false;
}

/*****************************************************************************************************************/

function validateRequiredField() {
	RequiredFieldVRFCount++;
	if (arguments.length < 2) {
		alert("Required Fields Error #4404:\n\nThere was not enough paramenters specified for the validateRequiredField() function #" + RequiredFieldVRFCount + ".  There needs to be at least 2 parameters specified (only " + arguments.length + " was specified).  For more information, please check the documentation at http://home.www.uprr.com/emp/it/hf/ricola/required/");
		return false;
	}
	if ((typeof arguments[0] != "object") && ((typeof arguments[0] == "string") && (typeof eval(arguments[0]) != "object")) ) {
		alert("Required Fields Error #4405:\n\nThe first parameter was not an object of the form for the validateRequiredField() function #" + RequiredFieldVRFCount + ".  Please pass in a valid fully-qualified form element.\n\nExample:\n\tdocuments.forms[0].AddressLineOne\n\nFor more information, please check the documentation at http://home.www.uprr.com/emp/it/hf/ricola/required/");
		return false;
	}
	var i=0;
	var validType=false;
	var RFType=-1856;
	for (i=0; i < RequiredFieldValidTypes.length; i++) {
		if (arguments[1].toLowerCase().indexOf(RequiredFieldValidTypes[i].toLowerCase()) != -1) {
			validType=true;
			RFType=i;
			break;
		}
	}
	if (!validType) {
		alert("Required Fields Error #4406:\n\nThe second parameter passed, \"" + arguments[1] + "\", is not at valid type for the validateRequiredField() function #" + RequiredFieldVRFCount + ".  For more information, please check the documentation at http://home.www.uprr.com/emp/it/hf/ricola/required/");
		return false;
	}
	var y=0;
	y=arguments[1].indexOf("~");
	if (y != -1) {  // Was a General Error Message Specified?
		RequiredFieldPEMessages[RequiredFieldPEMessages.length]=arguments[1].substring((y + 1));
	} else {
		RequiredFieldPEMessages[RequiredFieldPEMessages.length]=ricolaRFDelimeter;
	}
	var x=RequiredFieldDefinitionAry.length;
	if ((typeof arguments[0] == "string") && (typeof eval(arguments[0]) == "object")) {
		RequiredFieldObjectAry[RequiredFieldObjectAry.length]=eval(arguments[0]);
	} else {
		RequiredFieldObjectAry[RequiredFieldObjectAry.length]=arguments[0];
	}
	if (arguments[0].length) {
		RequiredField_origColor_Ary[RequiredField_origColor_Ary.length]=arguments[0][0].style.backgroundColor;
	} else {
		RequiredField_origColor_Ary[RequiredField_origColor_Ary.length]=arguments[0].style.backgroundColor;
	}
	RequiredFieldDefinitionAry[x] = RFType;
	for (i=2; i<arguments.length; i++) {
		if (arguments[i].toLowerCase().indexOf("required") != -1) {
			if (arguments[0].type) {
				arguments[0].style.backgroundColor= RequiredFieldBackgroundColor;
			} else if (arguments[0].length > 1) {
				for (var c=0; c < arguments[0].length; c++) {
					arguments[0][c].style.backgroundColor= RequiredFieldBackgroundColor;
				}
			}
		}
		RequiredFieldDefinitionAry[x]+= ricolaRFDelimeter + arguments[i];
	}
	return true;
}

/**************************************************************************************************************************/

function RequiredFieldErrorMessage(inItem, inItemNum, inErrNum, inCustMessage, inSysCustMessage) {
	if (inItemNum != -19) {
		if (inItem.type) {
			inItem.style.backgroundColor = RequiredFieldErrorColor;
		} else if (inItem.length > 1) {
			for (var c=0; c < inItem.length; c++) {
				inItem[c].style.backgroundColor = RequiredFieldErrorColor;
			}
		}
	}
	if (inCustMessage != ricolaRFDelimeter) {
		RequiredFieldErrorMessages[RequiredFieldErrorMessages.length]=inCustMessage;
	} else if (inErrNum == -1856) {
		RequiredFieldErrorMessages[RequiredFieldErrorMessages.length]=inSysCustMessage;
	} else {
		RequiredFieldErrorMessages[RequiredFieldErrorMessages.length]=RequiredFieldStandardEMessages[inErrNum];
	}
	if ((inItemNum != -19) && (RequiredFieldErrorMessages.length == 1)) {
		if (inItem.type) {
			RequiredFieldSetFocus(inItem);
		} else if (inItem.length > 1) {
			RequiredFieldSetFocus(inItem[0]);
		}
	}
}
/*   adfasdf a */
/**************************************************************************************************************************/

function RICOLARequiredFields_CheckFocusAbility(inItem) {
	if ((inItem.type == "hidden") || (inItem.readOnly) || (inItem.disabled)) {
		return false;
	}
	return true;
}

/**************************************************************************************************************************/

function RequiredFieldCustomMessage(inMsg, inItem) {
	if (arguments.length < 1) {
		alert("Required Fields Error #4408:\n\nThe Custom Message Function did not have atleast one parameter passed to it.\n\nPlease check the documentation at http://home.www.uprr.com/emp/it/hf/ricola/required/ for more information");
		return false;
	}
	if (arguments.length < 2) {
		RequiredFieldErrorMessage(0,-19,0,inMsg,inMsg);
	} else {
		RequiredFieldErrorMessage(inItem,0,0,inMsg,inMsg);
	}
	RequiredFieldErrorFound=true;
	RequiredFieldCustomMessageUse=true;
}
/**************************************************************************************************************************/
function RequiredFieldSetFocus(inItem) {
	inItem.style.backgroundColor=RequiredFieldErrorColor;
	if (RICOLARequiredFields_CheckFocusAbility(inItem)) {
		try {
			inItem.focus();
		} catch (ex) {
			if (document.getElementById("CurrentBodyTab0_0")) {  // if Layered Tabs Exist
				for (var i=0; i < TabNameAry.length; i++) {
					try {
						ActiveLayerP((i + 1));
						inItem.focus();
					} catch (ei) {
						// nothing
					}
				}
			}

		}
		/*
		if (document.getElementById("CurrentBodyTab0_0")) {  // if Layered Tabs Exist
			alert("Exists");
		} else {
			inItem.focus();
		}
		*/
	}
}
/**************************************************************************************************************************/

function RFhidelayer(lay) {
	var ie4 = (document.all) ? true : false;
	var ns6 = (document.getElementById && !document.all) ? true : false;
	if (ie4) {document.all[lay].style.display = "none";}
	if (ns6) {document.getElementById([lay]).style.display = "none";}
}

/**************************************************************************************************************************/

function RFshowlayer(lay) {
	var ie4 = (document.all) ? true : false;
	var ns6 = (document.getElementById && !document.all) ? true : false;
	if (ie4) {document.all[lay].style.display = "inline";}
	if (ns6) {document.getElementById([lay]).style.display = "block";}
}

/**************************************************************************************************************************/

function RFwritetolayer(lay,txt) {
	var ie4 = (document.all) ? true : false;
	var ns6 = (document.getElementById && !document.all) ? true : false;
	if (ie4) {
		document.all[lay].innerHTML = txt;
	}
	if (ns6) {
		over = document.getElementById([lay]);
		range = document.createRange();
		range.setStartBefore(over);
		domfrag = range.createContextualFragment(txt);
		while (over.hasChildNodes()) {
			over.removeChild(over.lastChild);
		}
		over.appendChild(domfrag);
	}
}

/**************************************************************************************************************************/

function checkValidateFields() {
	var showPleaseWait=false;
	var i=0;
	var x=0;
	var y=0;
	var currErrMessage=new String("");
	RequiredFieldErrorFound=false;
	for (i=0; i<arguments.length; i++) {
		if (arguments[i].toLowerCase().indexOf("pleasewait") != -1) {
			showPleaseWait=true;
		}

	}
	for (i=0; i < RequiredFieldObjectAry.length; i++) {
		var RFary=new Array();
		RFary=RequiredFieldDefinitionAry[i].toString().split(ricolaRFDelimeter);
		if (RequiredFieldObjectAry[i].type) {
			RequiredFieldObjectAry[i].style.backgroundColor="#FFFFFF";
		} else if (RequiredFieldObjectAry[i].length > 1) {
			for (var c=0; c < RequiredFieldObjectAry[i].length; c++) {
				RequiredFieldObjectAry[i][c].style.backgroundColor="#FFFFFF";
			}
		}
		for (x=1; x < RFary.length; x++) {		// Required Check
			if (RFary[x].toString().toLowerCase().indexOf("required") != -1) {
				if (RequiredFieldObjectAry[i].type) {
					RequiredFieldObjectAry[i].style.backgroundColor= RequiredFieldBackgroundColor;
				} else if (RequiredFieldObjectAry[i].length > 1) {
					for (var c=0; c < RequiredFieldObjectAry[i].length; c++) {
						RequiredFieldObjectAry[i][c].style.backgroundColor= RequiredFieldBackgroundColor;		;
					}
				}
//				RequiredFieldObjectAry[i].style.backgroundColor= RequiredFieldBackgroundColor;
				y=RFary[x].toString().indexOf("~");
				if (y != -1) {  // Was a Error Message Specified?
					currErrMessage=RFary[x].toString().substring((y + 1));
				} else {
					currErrMessage=ricolaRFDelimeter;
				}
				if (!RequiredFieldObjectAry[i].type) {		// many of this id, so it must be radio or checkbox
					var numChecked=0;
					var howManyNeedChecked=1;
					for (var c=0; c < RequiredFieldObjectAry[i].length; c++) {
						if (RequiredFieldObjectAry[i][c].checked) { numChecked++; }
					}
					for (var c=1; c < RFary.length; c++) {	// See how many need to be checked
						if (RFary[c].search(/^count:\s*\d+\s*$/i) != -1) {
							howManyNeedChecked=parseInt(RFary[c].replace(/^count:\s*(\d+)\s*$/i, "$1") ,10);
							c = RFary.length;
						}
					}
					if (numChecked < howManyNeedChecked) {
						RequiredFieldErrorMessage(RequiredFieldObjectAry[i],i,-1856,currErrMessage, "Not enough items checked (" + howManyNeedChecked + " needed)");
						RequiredFieldErrorFound=true;
					}
				} else if ((RequiredFieldObjectAry[i].type.indexOf("checkbox") != -1) || (RequiredFieldObjectAry[i].type.indexOf("radio") != -1)) {  // Is a Radio or Checkbox but there is only one of them and is required.
					if (!RequiredFieldObjectAry[i].checked) {
						RequiredFieldErrorMessage(RequiredFieldObjectAry[i],i,-1856,currErrMessage, "Please check the radio/checkbox before submitting.");
						RequiredFieldErrorFound=true;
					}
				} else if (RequiredFieldObjectAry[i].type.indexOf("select-multiple") != -1) {
					if (RequiredFieldObjectAry[i].selectedIndex == -1) {
						RequiredFieldErrorMessage(RequiredFieldObjectAry[i],i,0,currErrMessage);
						RequiredFieldErrorFound=true;
					}
				} else if (RequiredFieldObjectAry[i].type.indexOf("select-one") != -1) {
					if (RequiredFieldObjectAry[i].options[RequiredFieldObjectAry[i].selectedIndex].value.toLowerCase() == RequiredFieldNotSelectable_constant.toLowerCase()) {
						RequiredFieldErrorMessage(RequiredFieldObjectAry[i],i,1,currErrMessage);
						RequiredFieldErrorFound=true;
					}
				} else if ((RequiredFieldObjectAry[i].type.indexOf("text") != -1) || (RequiredFieldObjectAry[i].type.indexOf("textarea"))) {
					RequiredFieldObjectAry[i].value = RequiredFieldObjectAry[i].value.toString().replace(/^\s*/, "").replace(/\s*$/, "");
					if (RequiredFieldObjectAry[i].value == "") {
						RequiredFieldErrorMessage(RequiredFieldObjectAry[i],i,2,currErrMessage);
						RequiredFieldErrorFound=true;
					}
				}
				break;
			}
		}
		switch (RFary[0].toString()) {   // Specific Checking for Values
		case "0":	// Alphanumeric
			break;
		case "1":	// Alpha
			if (RequiredFieldObjectAry[i].value != "") {
				var oSearchString=new String(RequiredFieldObjectAry[i].value);
				var FoundException=false;
				for (x=1; x < RFary.length; x++) {
					if (RFary[x].toString().toLowerCase().indexOf("exception:") != -1) {
						if (RFary[x].replace(/^exception:\s*(.*)/i,"$1") == oSearchString) {  // Found Exception
							FoundException=true;
							break;
						}
					}
				}
				if (FoundException) { break; }
				var tempAllowStr=new String("");
				for (x=1; x < RFary.length; x++) {
					if (RFary[x].toString().toLowerCase().indexOf("allow:") != -1) {
						tempAllowStr+=RFary[x].replace(/allow:\s*(.+)/i,"$1");
					}
				}
				var currRegExpStr="[^a-z " + tempAllowStr + "]";
				var currRegExp=new RegExp(currRegExpStr,"i");
				if (oSearchString.search(currRegExp) != -1) {
					RequiredFieldErrorMessage(RequiredFieldObjectAry[i],i,3,RequiredFieldPEMessages[i]);
					RequiredFieldErrorFound=true;
				}
			}
			break;
		case "2":	// Numeric
			if (RequiredFieldObjectAry[i].value != "") {
				var numRequiredFieldErrorFound=false;
				var oSearchString=new String(RequiredFieldObjectAry[i].value);
				var FoundException=false;
				for (x=1; x < RFary.length; x++) {
					if (RFary[x].toString().toLowerCase().indexOf("exception:") != -1) {
						if (RFary[x].replace(/^exception:\s*(.*)/i,"$1") == oSearchString) {  // Found Exception
							FoundException=true;
							break;
						}
					}
				}
				if (FoundException) { break; }
				RequiredFieldObjectAry[i].value=oSearchString.replace(/\s*/g,""); // Removes Spaces in number
				oSearchString=RequiredFieldObjectAry[i].value;
				var tempAllowStr=new String("");
				for (x=1; x < RFary.length; x++) {
					if (RFary[x].toString().toLowerCase().indexOf("allow:") != -1) {
						tempAllowStr+=RFary[x].replace(/allow:\s*(.+)/i,"$1");
					}
				}
				var currRegExpStr="[^\\.\\d" + tempAllowStr + "]";
				var currRegExp=new RegExp(currRegExpStr,"i");
				if (oSearchString.search(currRegExp) != -1) {
					RequiredFieldErrorMessage(RequiredFieldObjectAry[i],i,4,RequiredFieldPEMessages[i]);
					RequiredFieldErrorFound=true;
					numRequiredFieldErrorFound=true;
				} else if ((tempAllowStr.indexOf(",") != -1) && (oSearchString.indexOf(",") != -1) && (oSearchString.search(/^(\d{1,3})(\,\d{3})*\.?\d*$/g) != 0)) {  // Comma's are set up wrong
					RequiredFieldErrorFound=true;
					numRequiredFieldErrorFound=true;
					RequiredFieldErrorMessage(RequiredFieldObjectAry[i],i,11,ricolaRFDelimeter);
//				} else if ((tempAllowStr.indexOf("-") != -1) && (oSearchString.indexOf("-") != -1)) { 		// Putting the - in front
//					oSearchString="-" + oSearchString.replace(/-/g,"");
				}
				RequiredFieldObjectAry[i].value=oSearchString;
				if (!numRequiredFieldErrorFound) {
					var fieldToCompareToVal=0;
					var tempFTCT=new String("");
					var currFieldCVal=0;
					var currExpr=new String("");
					for (x=1; x < RFary.length; x++) {
						if (RFary[x].toString().search(/^([<>=]{1,2}):/) != -1) {  // Is a compare
							if (RFary[x].indexOf("~") == -1) {
								var currErrorMessage=ricolaRFDelimeter;
							} else {
								var currErrorMessage=RFary[x].replace(/.*~(.*)/,"$1");
								RFary[x]=RFary[x].substring(0,RFary[x].indexOf("~"));
							}
							tempFTCT=RFary[x].replace(/^([<>=]{1,2}):\s*(.*)/,"$2").replace(/^\s*/g, "").replace(/\s*$/g, "");
							if (tempFTCT.search(/[^\d.-]/) == -1) {	// Comparing Number, not field
								fieldToCompareToVal=parseFloat(tempFTCT);
							} else {	// Comparing HTML Field, not static number
								fieldToCompareToVal=eval(tempFTCT + ".value");		// Get's the value of the Field to Compare To
								fieldToCompareToVal=parseFloat(fieldToCompareToVal.replace(/[^\d.-]/g,"")); // Translate to pure number
							}
							currFieldCVal=parseFloat(oSearchString.replace(/[^\d.-]/g,""));  // Translate to pure number
							currExpr=currFieldCVal + " " + RFary[x].replace(/^([<>=]{1,2}):.*/,"$1") + " " + fieldToCompareToVal;
							if (!eval(currExpr)) {
								RequiredFieldErrorFound=true;
								RequiredFieldErrorMessage(RequiredFieldObjectAry[i],i,-1856,currErrorMessage,oSearchString + " is not " + RFary[x].replace(/^([<>=]{1,2}):.*/,"$1") + " " + fieldToCompareToVal);
							}
						}
					}
				}
			}
			break;
		case "3":	// Phone
			if (RequiredFieldObjectAry[i].value != "") {
				var oSearchString=new String(RequiredFieldObjectAry[i].value);
				var FoundException=false;
				for (x=1; x < RFary.length; x++) {
					if (RFary[x].toString().toLowerCase().indexOf("exception:") != -1) {
						if (RFary[x].replace(/^exception:\s*(.*)/i,"$1") == oSearchString) {  // Found Exception
							FoundException=true;
							break;
						}
					}
				}
				if (FoundException) { break; }
				var currFormat=new String("(###)###-####");
				var allowInternational=false;
				for (x=1; x < RFary.length; x++) {
					if (RFary[x].search(/allow:\s*international/i) != -1) {
						allowInternational=true;
					} else if (RFary[x].search(/format:/i) != -1) {
						currFormat=RFary[x].replace(/format:\s*(.+)/i,"$1");
					}
				}
				var currRegExpStr=currFormat.replace(/([\\\+\(\)\$\^\*\&\/\.\|\?\[\]\{\}])/g,"\\$1");
				currRegExpStr=currRegExpStr.replace(/#/g,"\\d");
				if ((allowInternational) && (oSearchString.replace(/\D/g,"").search(/^1?011/) != -1)) {
					break;		// if International number
				}
				var currRegExp=new RegExp("^" + currRegExpStr + "$","i");
				if (oSearchString.search(currRegExp) == -1) {  // Did not match format
					RequiredFieldErrorMessage(RequiredFieldObjectAry[i],i,-1856,RequiredFieldPEMessages[i],"The Phone number needs to be in the format: " + currFormat);
					RequiredFieldErrorFound=true;
				}
			}
			break;
		case "4":	// E-mail
			if (RequiredFieldObjectAry[i].value != "") {
				var oSearchString=new String(RequiredFieldObjectAry[i].value);
				var FoundException=false;
				for (x=1; x < RFary.length; x++) {
					if (RFary[x].toString().toLowerCase().indexOf("exception:") != -1) {
						if (RFary[x].replace(/^exception:\s*(.*)/i,"$1") == oSearchString) {  // Found Exception
							FoundException=true;
							break;
						}
					}
				}
				if (FoundException) { break; }
				oSearchString=oSearchString.replace(/@internet$/i,"");	// Removes the @INTERNET at end if there
				oSearchString=oSearchString.replace(/@up$/i,"@up.com");	// If user just specified @UP
				RequiredFieldObjectAry[i].value=oSearchString;
				if (oSearchString.search(/^[a-z0-9\._\-]+?@[a-z0-9\._\-]+\.[a-z0-9]+$/i) == -1) {
					RequiredFieldErrorMessage(RequiredFieldObjectAry[i],i,5,RequiredFieldPEMessages[i]);
					RequiredFieldErrorFound=true;
				}
			}
			break;
		case "5":	// Date
			if (RequiredFieldObjectAry[i].value != "") {
				var cou=0;
				var dateRequiredFieldErrorFound=false;
				var oSearchString=new String(RequiredFieldObjectAry[i].value);
				var FoundException=false;
				for (x=1; x < RFary.length; x++) {
					if (RFary[x].toString().toLowerCase().indexOf("exception:") != -1) {
						if (RFary[x].replace(/^exception:\s*(.*)/i,"$1") == oSearchString) {  // Found Exception
							FoundException=true;
							break;
						}
					}
				}
				if (FoundException) { break; }
				var currFormat="MM/DD/YYYY";
				var isValidFormat=false;
				var currDelimiter=new String("");
				var monPos=currFormat.search(/mm/i);
				var dayPos=currFormat.search(/dd/i);
				var yearPos=currFormat.search(/yy/i);
				for (x=1; x < RFary.length; x++) {
					if (RFary[x].search(/format:/i) != -1) {
						currFormat=RFary[x].replace(/format:\s*(.+)/i,"$1");
						monPos=currFormat.search(/mm/i);
						dayPos=currFormat.search(/dd/i);
						yearPos=currFormat.search(/yy/i);
						if ((monPos == -1) || (dayPos == -1) || (yearPos == -1)) {
							alert("Required Fields Error #4407:\n\nThe Date verify has an invalid format passed to it.\n\nFor more information on valid formats that can be specified, please check the documentation at http://home.www.uprr.com/emp/it/hf/ricola/required/");
							return false;
						}
					}
				}
				currDelimiter=currFormat.replace(/[MDY]/gi,"").substring(0,1);
				var currRegExpStr=currFormat.replace(/([\\\+\(\)\$\^\*\&\/\.\|\?\[\]\{\}])/g,"\\$1");
				currRegExpStr=currRegExpStr.replace(/mmm/i,"(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)")
				currRegExpStr=currRegExpStr.replace(/mm/i,"\\d\\d");
				currRegExpStr=currRegExpStr.replace(/dd/i,"\\d\\d");
				currRegExpStr=currRegExpStr.replace(/yyyy/i,"\\d\\d\\d\\d");
				currRegExpStr=currRegExpStr.replace(/yy/i,"\\d\\d");
				var currRegExp=new RegExp("^" + currRegExpStr + "$","i");
				if (oSearchString.search(currRegExp) == -1) {
					RequiredFieldErrorMessage(RequiredFieldObjectAry[i],i,-1856,RequiredFieldPEMessages[i],"Date was not formatted correctly, please re-enter in this format: " + currFormat.toUpperCase());
					RequiredFieldErrorFound=true;
					break;
				}
				var useMMM=(currFormat.search(/mmm/i) != -1)? true : false;
				var useYYYY=(currFormat.search(/yyyy/i) != -1)? true : false;
				var currDate=new Date();
				var tmonNum=-1;
				if (useMMM) {
					 var tempDateStr=oSearchString.substring(monPos,(monPos + 3)).toLowerCase();
					 for (x=1; x < RFvalidDateMonthsAry.length; x++) {
					 	if (tempDateStr == RFvalidDateMonthsAry[x].substring(0,3).toLowerCase()) {
							tmonNum=x;
						}
					 }
				} else {
					tmonNum=parseInt(oSearchString.substring(monPos,(monPos + 2)),10);
				}
				if ((tmonNum < 1) || (tmonNum > 12)) {
					RequiredFieldErrorMessage(RequiredFieldObjectAry[i],i,6,RequiredFieldPEMessages[i]);
					RequiredFieldErrorFound=true;
					dateRequiredFieldErrorFound=true;
					break;
				}
				var tdayNum=parseInt(oSearchString.substring(dayPos,(dayPos + 2)),10);
				if (useYYYY) {
					var tyearNum=parseInt(oSearchString.substring(yearPos,(yearPos + 4)),10);
				} else {
					var tyearNum=parseInt(oSearchString.substring(yearPos,(yearPos + 2)),10);
					tyearNum=(tyearNum > 60)? tyearNum+=1900 : tyearNum+=2000;
				}
				var LastDayAry=new Array(0,31,28,31,30,31,30,31,31,30,31,30,31);
				var LastDayLeapAry=new Array(0,31,29,31,30,31,30,31,31,30,31,30,31);
				var dayCheck=((tyearNum % 4) == 0)? LastDayLeapAry[tmonNum] : LastDayAry[tmonNum];
				if ((tdayNum < 1) || (tdayNum > dayCheck)) {
					RequiredFieldErrorMessage(RequiredFieldObjectAry[i],i,-1856,RequiredFieldPEMessages[i],"\"" + tdayNum + "\" is not a valid day of " + RFvalidDateMonthsAry[tmonNum]);
					RequiredFieldErrorFound=true;
					dateRequiredFieldErrorFound=true;
					break;
				}
				if (!dateRequiredFieldErrorFound) {
					var fieldToCompareToVal=0;
					var fieldToCompareToMVal=0;
					var fieldToCompareToDVal=0;
					var fieldToCompareToYVal=0;
					var tempFTCT=new String("");
					var currFieldCVal=(tyearNum * 10000) + (tmonNum * 100) + tdayNum;
					var currExpr=new String("");
					for (x=1; x < RFary.length; x++) {
						if (RFary[x].toString().search(/^([<>=]{1,2}):/) != -1) {  // Is a compare
							if (RFary[x].indexOf("~") == -1) {
								var currErrorMessage=ricolaRFDelimeter;
							} else {
								var currErrorMessage=RFary[x].replace(/.*~(.*)/,"$1");
								RFary[x]=RFary[x].substring(0,RFary[x].indexOf("~"));
							}
							tempFTCT=RFary[x].replace(/^([<>=]{1,2}):\s*(.*)/,"$2");
							fieldToCompareToVal=eval(tempFTCT + ".value");		// Get's the value of the Field to Compare To
	// Verify that the Compare To field is a valid Date Here
				// IF Comparing Dates, they must be of the same format

							if (fieldToCompareToVal.search(currRegExp) == -1) {
								var isAlreadyCheckedByRF=false;
								for (cou=0; cou < RequiredFieldObjectAry.length; cou++) {
									if (RequiredFieldObjectAry[cou] == eval(tempFTCT)) {
										isAlreadyCheckedByRF=true;
									}
								}
								if (!isAlreadyCheckedByRF) {
									RequiredFieldErrorMessage(eval(tempFTCT),i,-1856,RequiredFieldPEMessages[i],"Date was not formatted correctly, please re-enter in this format: " + currFormat.toUpperCase());
									RequiredFieldErrorFound=true;
								}
								break;
							}

							if (useMMM) {
								 var compareTempDateStr=fieldToCompareToVal.substring(monPos,(monPos + 3)).toLowerCase();
								 for (cou=1; cou < RFvalidDateMonthsAry.length; cou++) {
								 	if (compareTempDateStr == RFvalidDateMonthsAry[cou].substring(0,3).toLowerCase()) {
										fieldToCompareToMVal=cou;
									}
								 }
							} else {
								fieldToCompareToMVal=parseInt(fieldToCompareToVal.substring(monPos,(monPos + 2)),10);
							}
							if ((fieldToCompareToMVal < 1) || (fieldToCompareToMVal > 12)) {   // Invalid Month
								var isAlreadyCheckedByRF=false;
								for (cou=0; cou < RequiredFieldObjectAry.length; cou++) {
									if (RequiredFieldObjectAry[cou] == eval(tempFTCT)) {
										isAlreadyCheckedByRF=true;
									}
								}
								if (!isAlreadyCheckedByRF) {
									RequiredFieldErrorMessage(eval(tempFTCT),i,6,RequiredFieldPEMessages[i]);
									RequiredFieldErrorFound=true;
								}
								break;
							}
							fieldToCompareToDVal=parseInt(fieldToCompareToVal.substring(dayPos,(dayPos + 2)),10);
							if (useYYYY) {
								fieldToCompareToYVal=parseInt(fieldToCompareToVal.substring(yearPos,(yearPos + 4)),10);
							} else {
								fieldToCompareToYVal=parseInt(fieldToCompareToVal.substring(yearPos,(yearPos + 2)),10);
								fieldToCompareToYVal=(fieldToCompareToYVal > 60)? tyearNum+=1900 : tyearNum+=2000;
							}
							var FTCdayCheck=((fieldToCompareToYVal % 4) == 0)? LastDayLeapAry[fieldToCompareToMVal] : LastDayAry[fieldToCompareToMVal];
							if ((fieldToCompareToDVal < 1) || (fieldToCompareToDVal > FTCdayCheck)) {
								var isAlreadyCheckedByRF=false;
								for (cou=0; cou < RequiredFieldObjectAry.length; cou++) {
									if (RequiredFieldObjectAry[cou] == eval(tempFTCT)) {
										isAlreadyCheckedByRF=true;
									}
								}
								if (!isAlreadyCheckedByRF) {
									RequiredFieldErrorMessage(eval(tempFTCT),i,-1856,RequiredFieldPEMessages[i],"\"" + fieldToCompareToDVal + "\" is not a valid day of " + RFvalidDateMonthsAry[fieldToCompareToMVal]);
									RequiredFieldErrorFound=true;
								}
								break;
							}

							fieldToCompareToVal=(fieldToCompareToYVal * 10000) + (fieldToCompareToMVal * 100) + fieldToCompareToDVal; // Translate to pure number
							currExpr=currFieldCVal + " " + RFary[x].replace(/^([<>=]{1,2}):.*/,"$1") + " " + fieldToCompareToVal;
//							alert("In Date Compare:\n" + currExpr);
							if (!eval(currExpr)) {
								RequiredFieldErrorFound=true;
								RequiredFieldErrorMessage(RequiredFieldObjectAry[i],i,-1856,currErrorMessage,oSearchString + " is not " + RFary[x].replace(/^([<>=]{1,2}):.*/,"$1") + " " + eval(tempFTCT + ".value"));
							}
						}
					}
				}
			}
			break;
		case "6":	// Currency
			if (RequiredFieldObjectAry[i].value != "") {
				var currencyRequiredFieldErrorFound=false;
				var oSearchString=new String(RequiredFieldObjectAry[i].value);
				var FoundException=false;
				for (x=1; x < RFary.length; x++) {
					if (RFary[x].toString().toLowerCase().indexOf("exception:") != -1) {
						if (RFary[x].replace(/^exception:\s*(.*)/i,"$1") == oSearchString) {  // Found Exception
							FoundException=true;
							break;
						}
					}
				}
				if (FoundException) { break; }
				RequiredFieldObjectAry[i].value=oSearchString.replace(/[\s*\$]/g,"");  // Removes Spaces & $ in number
				oSearchString=RequiredFieldObjectAry[i].value;
				var tempAllowStr=new String("");
				var AllowDollarSign=true;
				var AllowDecimal=true;
				for (x=1; x < RFary.length; x++) {
					if (RFary[x].toString().toLowerCase().indexOf("allow:") != -1) {
						tempAllowStr+=RFary[x].replace(/allow:\s*(.+)/i,"$1");
					} else if (RFary[x].toString().toLowerCase().indexOf("no dollar sign") != -1) {
						AllowDollarSign=false;
					} else if (RFary[x].toString().toLowerCase().indexOf("no decimal") != -1) {
						AllowDecimal=false;
					}
				}
				if (AllowDecimal) { tempAllowStr+= "\."; }
				var currRegExpStr="[^\\d" + tempAllowStr + "]";
				var currRegExp=new RegExp(currRegExpStr,"gi");
				if (oSearchString.search(currRegExp) != -1) {
					RequiredFieldErrorFound=true;
					currencyRequiredFieldErrorFound=true;
					if ((!AllowDecimal) && (oSearchString.indexOf(".") != -1)) {
						RequiredFieldErrorMessage(RequiredFieldObjectAry[i],i,7,RequiredFieldPEMessages[i]);
					} else {
						RequiredFieldErrorMessage(RequiredFieldObjectAry[i],i,8,RequiredFieldPEMessages[i]);
					}
				} else if ((AllowDecimal) && (oSearchString.indexOf(".") != -1) && (oSearchString.search(/\.\d\d$/) == -1)) {  // Not two digits after the decimal point
					RequiredFieldErrorFound=true;
					currencyRequiredFieldErrorFound=true;
					RequiredFieldErrorMessage(RequiredFieldObjectAry[i],i,9,RequiredFieldPEMessages[i]);
				} else if ((AllowDecimal) && (oSearchString.indexOf(".") != -1) && (oSearchString.indexOf(".") != oSearchString.lastIndexOf("."))) {   // multiple decimal points
					RequiredFieldErrorFound=true;
					currencyRequiredFieldErrorFound=true;
					RequiredFieldErrorMessage(RequiredFieldObjectAry[i],i,10,RequiredFieldPEMessages[i]);
				} else if ((tempAllowStr.indexOf(",") != -1) && (oSearchString.indexOf(",") != -1) && (oSearchString.search(/^(\d{1,3})(\,\d{3})*(\.\d\d)?$/g) != 0)) {  // Comma's are set up wrong
					RequiredFieldErrorFound=true;
					currencyRequiredFieldErrorFound=true;
					RequiredFieldErrorMessage(RequiredFieldObjectAry[i],i,11,RequiredFieldPEMessages[i]);
				}
				if (AllowDollarSign) {
					if ((tempAllowStr.indexOf("-") != -1) && (oSearchString.indexOf("-") != -1)) {
						oSearchString=oSearchString.replace(/-/g,"");
						oSearchString = "-$" + oSearchString;
					} else {
						oSearchString = "$" + oSearchString;
					}
				}
				RequiredFieldObjectAry[i].value=oSearchString;
				if (!currencyRequiredFieldErrorFound) {
					var fieldToCompareToVal=0;
					var tempFTCT=new String("");
					var currFieldCVal=0;
					var currExpr=new String("");
					for (x=1; x < RFary.length; x++) {
						if (RFary[x].toString().search(/^([<>=]{1,2}):/) != -1) {  // Is a compare
							if (RFary[x].indexOf("~") == -1) {
								var currErrorMessage=ricolaRFDelimeter;
							} else {
								var currErrorMessage=RFary[x].replace(/.*~(.*)/,"$1");
								RFary[x]=RFary[x].substring(0,RFary[x].indexOf("~"));
							}
							tempFTCT=RFary[x].replace(/^([<>=]{1,2}):\s*(.*)/,"$2");
							fieldToCompareToVal=eval(tempFTCT + ".value");		// Get's the value of the Field to Compare To
							fieldToCompareToVal=parseFloat(fieldToCompareToVal.replace(/[^\d.-]/g,"")); // Translate to pure number
							currFieldCVal=parseFloat(oSearchString.replace(/[^\d.-]/g,""));  // Translate to pure number
							currExpr=currFieldCVal + " " + RFary[x].replace(/^([<>=]{1,2}):.*/,"$1") + " " + fieldToCompareToVal;
							if (!eval(currExpr)) {
								RequiredFieldErrorFound=true;
								RequiredFieldErrorMessage(RequiredFieldObjectAry[i],i,-1856,currErrorMessage,oSearchString + " is not " + RFary[x].replace(/^([<>=]{1,2}):.*/,"$1") + " " + eval(tempFTCT + ".value"));
							}
						}
					}
				}
			}
			break;
		case "7":	// Train ID
			if (RequiredFieldObjectAry[i].value != "") {
				var oSearchString=new String(RequiredFieldObjectAry[i].value);
				if (oSearchString.search(/^[0-9]?[A-Z0-9]{1,7}\s*\d{2}$/i) == -1) {
					RequiredFieldErrorMessage(RequiredFieldObjectAry[i],i,12,RequiredFieldPEMessages[i]);
					RequiredFieldErrorFound=true;
				}
			}
			break;
		case "8":	// Equipment ID
			if (RequiredFieldObjectAry[i].value != "") {
				var oSearchString=new String(RequiredFieldObjectAry[i].value);
				if (oSearchString.search(/^[A-Z]{1,4}\s*\d{1,6}$/i) == -1) {
					RequiredFieldErrorMessage(RequiredFieldObjectAry[i],i,13,RequiredFieldPEMessages[i]);
					RequiredFieldErrorFound=true;
				}
			}
			break;
		case "9":	// Time
			if (RequiredFieldObjectAry[i].value != "") {
				var oSearchString=new String(RequiredFieldObjectAry[i].value);
				var useMilitary=true;
				var useAMPM=false;
				var useSeconds=false;
				var useTimeZone=false;
				var mustUseTimeZone=false;
				var defaultTimeZone=new String("");
				var DoubDStr="";
				var argStr = new String();
				for (x=1; x < RFary.length; x++) {
					argStr = RFary[x].toString().replace(/\~.*/, "").replace(/^\s*/, "").replace(/\s*$/, "");
					if (argStr.search(/^ampm:\s*1\s*$/i) != -1) {
						useAMPM=true;
					} else if (argStr.search(/^seconds:\s*1$/i) != -1) {
						useSeconds=true;
					} else if (argStr.search(/^style:\s*12$/i) != -1) {
						useMilitary=false;
					} else if (argStr.search(/^doubledigit:\s*0$/i) != -1) {
						DoubDStr = "1,";
					} else if (argStr.search(/^timezone\s*:\s*\w+\s*$/i) != -1) {
						if (argStr.replace(/^timezone\s*:\s*(\w+)\s*$/,"$2") == "1") {
							useTimeZone=true;
						} else if (argStr.replace(/^timezone\s*:\s*(\w+)\s*$/,"$2") == "2") {
							useTimeZone=true;
							mustUseTimeZone=true;
						} else if (argStr.replace(/^timezone\s*:\s*(\w+)\s*$/,"$2") != "0") {
							useTimeZone=true;
							defaultTimeZone=argStr.replace(/^timezone\s*:\s*(\S+)\s*$/,"$2");
						}
					}
				}
				var timehold=new String("(\\d{" + DoubDStr + "2}):(\\d{" + DoubDStr + "2})");
				var timeExplain=((DoubDStr.length == 0)? "##" : "#") + ":##";
				if (useSeconds) {
					timehold+=":(\\d{" + DoubDStr + "2})";
					timeExplain+=":##";
				}
				if (useAMPM) {
					timehold+="\\s*(A|P|AM|PM)";
					timeExplain+=" (A or P)"
				}
				if (useTimeZone) {
					timehold+="\\s+(ET|CT|MT|PT|EST|EDT|CST|CDT|MST|MDT|PST|PDT)";
					timeExplain+=" (ET|CT|MT|PT)";
					if (!mustUseTimeZone) {
						timehold+="?";
					}
				}
				var currRegExp=new RegExp("^" + timehold + "$","i");
				if (oSearchString.search(currRegExp) == -1) {	// Doesn't meet time require
					RequiredFieldErrorMessage(RequiredFieldObjectAry[i],i,-1856,"Time Field not formatted correctly, please use the format " + timeExplain);
					RequiredFieldErrorFound=true;
				} else if (useMilitary && ( parseInt(oSearchString.replace(currRegExp,"$1"),10) > 23) ) {	// Hours greater than 23
					RequiredFieldErrorMessage(RequiredFieldObjectAry[i],i,14,RequiredFieldPEMessages[i]);
					RequiredFieldErrorFound=true;
				} else if (!useMilitary && (parseInt(oSearchString.replace(currRegExp,"$1"),10) > 12)) {	// Hours greater than 12
					RequiredFieldErrorMessage(RequiredFieldObjectAry[i],i,15,RequiredFieldPEMessages[i]);
					RequiredFieldErrorFound=true;
				} else if (parseInt(oSearchString.replace(currRegExp,"$2"),10) >= 60) {		// Minutes > 59
					RequiredFieldErrorMessage(RequiredFieldObjectAry[i],i,16,RequiredFieldPEMessages[i]);
					RequiredFieldErrorFound=true;
				} else if (useSeconds && (parseInt(oSearchString.replace(currRegExp,"$3"),10) >= 60)) {	// Seconds > 59
					RequiredFieldErrorMessage(RequiredFieldObjectAry[i],i,17,RequiredFieldPEMessages[i]);
					RequiredFieldErrorFound=true;
				}
			}
			break;
			case "10":	// Milepost
				if (RequiredFieldObjectAry[i].value != "") {
					var oSearchString=new String(RequiredFieldObjectAry[i].value);

					// Does the milepost contain an optional decimal?
					if (oSearchString.search(/\./) != -1) {

						/* Milepost contains a decimal, so create an array
						   containing each side of the decimal and evaluate
						   the elements individually */

						// Split milepost value at decimal
						var mp = oSearchString.split(".");

						// Milepost should contain, at most, 1 decimal point
						if (mp.length > 2) {
							RequiredFieldErrorMessage(RequiredFieldObjectAry[i],i,18,RequiredFieldPEMessages[i]);
							RequiredFieldErrorFound=true;
						}

						// Evaluate milepost "prefix"
						var mp_pre = /^-{0,1}[0-9]{1,4}$/.exec(mp[0]);

						// Evaluate milepost "suffix"
						var mp_suf = /^[0-9]{0,3}$/.exec(mp[1]);

						// Return an error if appropriate
						if (mp_pre == null || mp_suf == null) {
							RequiredFieldErrorMessage(RequiredFieldObjectAry[i],i,18,RequiredFieldPEMessages[i]);
							RequiredFieldErrorFound=true;
						}

					} else {

						// No decimal
						var mp = /^-{0,1}[0-9]{1,4}\.{0,1}$/.exec(oSearchString);

						// Return an error if appropriate
						if (mp == null) {
							RequiredFieldErrorMessage(RequiredFieldObjectAry[i],i,18,RequiredFieldPEMessages[i]);
							RequiredFieldErrorFound=true;
						}
					}
				}
			break;

		}

		RFary=null;
	}
	if (RequiredFieldCustomMessageUse) { RequiredFieldErrorFound = true; }
	if (RequiredFieldErrorFound) {
		RFshowlayer("RequiredFieldErrorMessageDIV");
		var outputRFErrorText=new String("<UL>");
		for(i=0; i < RequiredFieldErrorMessages.length; i++) {
			outputRFErrorText+="<LI>" + RequiredFieldErrorMessages[i] + "</LI>\n";
		}
		outputRFErrorText+="</UL>";
		outputRFErrorText+="<TABLE BORDER='0' CELLPADDING='0' CELLSPACING='3'><TR><TD COLSPAN='3' STYLE='font-weight: bold;' CLASS='InfoMessage'>Legend:</TD></TR>\n";
		outputRFErrorText+="<TR><TD NOWRAP>&nbsp;&nbsp;&nbsp;</TD><TD><TABLE BORDER='1' CELLPADDING='0' CELLSPACING='0'><TR><TD BGCOLOR='" + RequiredFieldBackgroundColor + "'  NOWRAP CLASS='InfoMessageReqField'STYLE='background-color: " + RequiredFieldBackgroundColor + " !important; filter:none;'>&nbsp;&nbsp;&nbsp;&nbsp;</TD></TR></TABLE></TD><TD CLASS='InfoMessage'> denotes \"Required\" fields</TD></TR>";
		outputRFErrorText+="<TR><TD NOWRAP>&nbsp;</TD><TD><TABLE BORDER='1' CELLPADDING='0' CELLSPACING='0'><TR><TD BGCOLOR='" + RequiredFieldErrorColor + "' NOWRAP CLASS='InfoMessageReqFieldError' STYLE='background-color: " + RequiredFieldErrorColor + " !important; filter:none;'>&nbsp;&nbsp;&nbsp;&nbsp;</TD></TR></TABLE></TD><TD CLASS='InfoMessage'> denotes that there is an error in that field</TD></TR>";
		outputRFErrorText+="</TABLE>";

		RFwritetolayer("RequiredFieldActualErrorsDIV",outputRFErrorText);
		RequiredFieldErrorMessages.length=0;
		RequiredFieldCustomMessageUse=false;
		return false;
	}
	RFhidelayer("RequiredFieldErrorMessageDIV");
	if (showPleaseWait) {
		PleaseWaitSubmit('','0');
	}
	return true;
}

