/*****  FILE OWNER - MIKEP *****/
/*
Documentation: http://www.worldgroups.com/ifpage.dll?t=Inhouse_Tools\FormValidator\FormValidatordoc
See HelpMain.htm for example deployment
All change requests for this file should be sent to Mike P
*/
/*****  BEGIN APP/SITE SPECIFIC CUSTOM VALIDATION FUNCTIONS *****/
function validateCreditCard(elementValue){ //hope to isolate in include called only by signup, etc.
  // Valid Input Syntax:
  // Type1: **************** (16 columns)
  // Type2: **** **** **** **** (19)
  // Type3: ****-****-****-**** (19)
  var CreditCard = elementValue;
  var Validity = false;
  var LN = CreditCard.length;
  if ((16 <= LN) && (LN <= 19)){
    LN --;
    CheckSum = 0;
    Dbl = false;
    for (Idx = LN; Idx >= 0; Idx --){
	Digit = CreditCard.substr(Idx, 1);
	if (("0" <= Digit && Digit <= "9")
	     || Digit == " " || Digit == "-"){
	    if (Digit != " " && Digit != "-"){ 
		Digit -= "0";
		if (Dbl){
		    Digit += Digit;
		    if (Digit > 9){
			Digit -= 9;
		    }
		}
		Dbl = !Dbl;
		CheckSum += Digit;
		if (CheckSum > 9){ 
		    CheckSum -= 10;
		}
	    }
	} else {
	    return(Validity);
	}
    }
    Validity = (CheckSum == 0) ? true : false;
  }
  if(Validity){
	if(validateCreditCard_NewFNstyle(elementValue)){
		return true;
	}else{
		return false;
	}
  }else{
	return false;
  }
}

// New credit card validation function added by AR 6/13/08 - See HUITF #5232
function validateCreditCard_NewFNstyle(nCC){
	var CardType = 'None';
		if(nCC.substr(0,1) == '4' && (nCC.length == 13 || nCC.length == 16)){CardType = 'VI'};
		if(nCC.substr(0,1) == '5' && nCC.length == 16){CardType = 'MC'};
		if(nCC.substr(0,1) == '6' && nCC.length == 16){CardType = 'DI'};
		if(nCC.substr(0,2) == '30' && nCC.length == 14){CardType = 'DC'};
		if(nCC.substr(0,2) == '36' && nCC.length == 14){CardType = 'DC'};
		if(nCC.substr(0,3) > '380' && nCC.substr(0,3) < '389' && nCC.length == 14){CardType = 'DC'};
		if(nCC.substr(0,3) == '389' && nCC.length == 14){CardType = 'CB'};
		if(nCC.substr(0,2) == '94' && nCC.length == 14){CardType = 'CB'};
		if(nCC.substr(0,2) == '95' && nCC.length == 14){CardType = 'CB'};
		if(nCC.substr(0,1) == '9' && nCC.length == 10){CardType = 'CB'};
		if(nCC.substr(0,4) > '3527' && nCC.substr(0,4) < '3590' && nCC.length == 14){CardType = 'JC'};
	if(CardType != 'None'){
		return true;
	}
	return false;
}

function validateEmailOrICQ(elementValue) {
	if (FormValidator.RegularExpressions.Email.test(elementValue) || FormValidator.RegularExpressions.Numeric.test(elementValue)){
		return true;
	}
	return false;
}
function validateFullName(elementValue) {
	var nSpaces = elementValue.indexOf(' ');
	if (elementValue.length < 6 || nSpaces < 1){
		return false;
	}
	return true;
}

/*****  END APP/SITE SPECIFIC CUSTOM VALIDATION FUNCTIONS *****/

/***** DO NOT EDIT BELOW THIS LINE *****/
var FormValidator = new _FormValidator();
var WPReservedCharacterData = [];

var stdResultInfoBoxTimeout = null;
function validateForm(){
	FormValidator.Complete();
	return false;
}
function WPReservedCharacter(cReservedCharacter, cASCIIEquivilant, cSubstituteCharacter){
	this.ReservedCharacter = cReservedCharacter;
	this.ASCIIEquivilant =  cASCIIEquivilant;
	this.SubstituteCharacter = cSubstituteCharacter;
	WPReservedCharacterData.push(this)
}
new WPReservedCharacter('{{','&#123;&#123;','((');
new WPReservedCharacter('}}','&#125;&#125;','))');
new WPReservedCharacter('--','&#45;&#45;','==');
new WPReservedCharacter('\\*','&#42;','#'); //escaped due to being a reserved character in js regular expressions
//new WPReservedCharacter('\\|','&#124;','!'); //escaped due to being a reserved character in js regular expressions
new WPReservedCharacter('~','&#126;','=');
function _FormValidator(arrArgs){
	var cLocation = window.location.toString();
	var regExp = /pValidateErrorScrollPosition=(\d{0,})/i;
	if(regExp.exec(cLocation)){
		window.onload = function(){
			window.scrollTo(0,regExp.exec(cLocation)[1]);
		}
	}	
	this.oForm = null;
	this.Debug = "OFF";	
	this.Ajax = null;
	this.FormName=null;
	this.SaveScrollPosition = "OFF";
	this.SubmitButton = null;
	this.errorCount = 0;
	this.errorMessage = '';
	this.progressBarDelay = 1200;
	this.UploadProgressBar="OFF";
	this.AjaxDivWidth = '250';
	this.AjaxDivHeight= '';
	this.AjaxDivNameValues = "pHeaderMessage=stdCgiResult";
	this.AjaxDivOnComplete = null;
	this.AjaxDivGoBackHyperLink = "ON";
	this.RegularExpressions = new Object();
	this.FieldsToRemoveOnError=[];
	this.OnCompleteHandlerFunction = null;
	this.RegularExpressions.Numeric = new RegExp('^\\d+$');
	this.RegularExpressions.AlphaNumeric = new RegExp('^[a-zA-Z0-9]+$');
	this.RegularExpressions.ANSIchars = new RegExp('^[-a-zA-Z0-9# \.\(\)&\^!@\$%_~`\*\+=\?\|,;:\\\\/\'{}\[\\]]+$');
	this.RegularExpressions.VCHScreenname = new RegExp('^[a-zA-Z0-9_\-]{6,25}$');
	this.RegularExpressions.VCHScreennameSimple = new RegExp('^[a-zA-Z0-9_]{6,15}$');
	this.RegularExpressions.SpecialOfferCode = new RegExp('^[a-zA-Z0-9_]{1,100}$');
	this.RegularExpressions.AccountIDNum = new RegExp('^[a-zA-Z0-9_]{6,15}$');
	this.RegularExpressions.IFScreenname = new RegExp('^[a-zA-Z0-9]{6,25}$');
	this.RegularExpressions.IFPassword = new RegExp('^[a-zA-Z0-9]{8,15}$');
	this.RegularExpressions.VCHPassword = new RegExp('^[a-zA-Z0-9]{6,15}$');
	//this.RegularExpressions.Email = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/	
	this.RegularExpressions.Email = /^(([^<>()[\]\\.,%~;:\s@\"]+(\.[^<>()[\]\\.,%~;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/	
	this.RegularExpressions.IDCardName = new RegExp('^[a-zA-Z0-9\ ]{11,20}$');
	this.RegularExpressions.IDCardNameSimple = new RegExp('^[a-zA-Z0-9_]{11,20}$');
	this.RegularExpressions.IDCardPassword = new RegExp('^[a-zA-Z0-9]{8,15}$');
	this.RegularExpressions.P2Pscreenname = new RegExp('^[a-zA-Z0-9]{8,25}$');
	this.WPReservedCharacterTransformationType = "SubstituteCharacter"; // SubstituteCharacter | ASCIIequiv  | Custom
	this.WPReservedCharacterTransformationCustomFunction = null;
	this.QuickSaveEnabled = 'ON';
	this.GenericSubmitFields = 'OFF'
	this.AjaxDivDisabled = false;	
	this.AjaxCallbackFunction = null;
	this.arrGenericSubmitFields = [];
	this.arrIgnoreTransformationFields = [];//deprecated
	this.arrTransformationFields = [];
	this.isActive = false;
	if(arrArgs){
		this.oForm = document.forms[arrArgs[1]];
		this.Debug = arrArgs[0].replace(/Debug=/i,'');
		if(arrArgs[2]){ this.Ajax = arrArgs[2].replace(/ajax=/i,'');}
	}
}

_FormValidator.prototype.Initialize = function(){
	FormValidator = new _FormValidator(arguments);
}
_FormValidator.prototype.GetForm = function(){
	if(this.oForm == null)
		this.oForm = document.forms[this.FormName];
	return this.oForm;
}
_FormValidator.prototype.Complete = function(){
	var oForm = this.GetForm();
	this.isActive = true;
	if(oForm.f_chk_QuickSaveSnapShot){
		this.Custom('f_chk_QuickSaveSnapShot', QuickSaveSnapShot.validateModule)
	}
	if(oForm.fCaptChaInput){
		FormValidator.Require('fCaptChaInput');
	}
	if(this.OnCompleteHandlerFunction != null){	
		this.OnCompleteHandlerFunction(this.errorCount > 0 ? false : true);
	}
	var cFormAction = oForm.action;
	if(this.Ajax.match(/on/gi) && !cFormAction.match(/pShowAjaxFormSubmitHTTPErrorMessage/gi)){
		oForm.action = cFormAction + (cFormAction.indexOf("?") > -1 ? '&' : '?') + 'pShowAjaxFormSubmitHTTPErrorMessage=true&pRegCookie=OFF';
	}
	if (this.errorCount > 0) {
		if(oForm.elements['t']){
			var oTemplateField = oForm.elements['t'];
			oTemplateField.name = "temp_t";
		}
		if(this.FieldsToRemoveOnError.length > 0){
			var oElement, oParent;
			for(var i=0;i<this.FieldsToRemoveOnError.length;i++){
				oElement =  oForm.elements[this.FieldsToRemoveOnError[i]];				
				oParent = oElement.parentNode;				
				oParent.removeChild(oElement);
				i=i+1
			}
		}
		if(this.errorMessage == ''){
			this.AppendHiddenField("pValidateErrorform","error");
			this.AppendHiddenField("pValidateError"+oForm.name,"error");
			this.transformQuotes();
			oForm.method = "POST";	
			var cLocation = window.location.toString();
			if(oForm.encoding){//prevents encoding value check which errors in safari
				if(oForm.encoding.match(/multipart/i)){	
					oForm.removeAttribute('enctype');
				}
			}
			if(this.SaveScrollPosition.match(/on/i)){
				//var nScroll = (document.all)?document.body.scrollTop:window.pageYOffset; 
				var nScroll = window.pageYOffset || document.documentElement.scrollTop || 0; 			
				if(nScroll > 0){
					var regExp = /pValidateErrorScrollPosition=(\d{0,})/i;
					if(regExp.test(cLocation)){
						cLocation  = cLocation.replace(regExp,"pValidateErrorScrollPosition="+nScroll);
					}else{
						if(cLocation.match(/\?/)){
							cLocation += "&pValidateErrorScrollPosition="+nScroll;
						}else{
							cLocation += "?pValidateErrorScrollPosition="+nScroll;
						}
					}
				}
			}
			oForm.action = cLocation;
			oForm.submit();
		}else{
			var cAlertMessageHeader = '';
			if(document.getElementById('fValidateMessageForm'))
				cAlertMessageHeader = document.getElementById('fValidateMessageForm').innerHTML.replace(/\n/g,'') + "\n\n";
			alert(cAlertMessageHeader + this.errorMessage);
			this.errorMessage = '';
		}
	} else {	
		if(this.AjaxDivGoBackHyperLink.match(/on/i)){
			if(oForm.f_hid_AjaxDiv_RefererURL){
				if(oForm.f_hid_AjaxDiv_RefererURL.value != ''){
					this.AjaxDivNameValues = this.AjaxDivNameValues + "&pAjaxDivRefererURL=" + encodeURIComponent(oForm.f_hid_AjaxDiv_RefererURL.value);
				}
			}
		}
		this.RemoveSelectedIndexHiddenFields();		
		var arrPTags = document.getElementsByTagName('P');
		for(var i=0;i<arrPTags.length;i++){
			if(arrPTags[i].className.match(/frm-Error/)){
				arrPTags[i].style.visibility = 'hidden';
			}
		}
		this.processFormElements();
		if (this.Debug.match(/on/gi) && this.HasSimulationPermission()){
			this.formSubmitSimulation();
		}else{
			if(this.Ajax.match(/on/gi)){			
				var oSubmitName = (this.SubmitButton != null ? this.SubmitButton.name : this.SubmitButton);
				if(!this.AjaxDivDisabled){
					Ajax.ContentOnDemand(oSubmitName, oForm.name, this.AjaxDivWidth , this.AjaxDivHeight , this.AjaxDivNameValues , this.AjaxDivOnComplete);
				}else{
					Ajax.Execute(oForm.name, this.AjaxCallbackFunction)
				}
			}else{
				if(this.UploadProgressBar.match(/on/gi)){
					if(typeof(this.SubmitButton) == "string"){
						oSubmitName = oForm.elements[this.SubmitButton]
					}else{						
						oSubmitName = Ajax._findButton(oForm.name);
					}
					this.AjaxDivNameValues = "pHeaderMessage=SubmissionStatus";
					oForm = getObject(oForm);
					Ajax.ContentOnDemand(oSubmitName, "/ifpage.dll?t=site/includes/DynamicInfoBoxContent/StdUploadProgressBar", this.AjaxDivWidth , this.AjaxDivHeight , this.AjaxDivNameValues ,function(){setTimeout(function(){oForm.submit()},"1000")});
				}else{	
					oForm.submit();
				}
			}
		}
	}
	this.oForm = null;
	return false;
}
_FormValidator.prototype.RemoveSelectedIndexHiddenFields = function(){
	if(this.arrSelectedIndexHiddenFieldNames){
		var oForm = this.GetForm();
		for(var i=0;i<this.arrSelectedIndexHiddenFieldNames.length;i++){
			var oParent = oForm.elements[this.arrSelectedIndexHiddenFieldNames[i]].parentNode;			
			oParent.removeChild(oForm.elements[this.arrSelectedIndexHiddenFieldNames[i]]);
		}
	}
	this.arrSelectedIndexHiddenFieldNames = [];
}
_FormValidator.prototype.AddSelectedIndexHiddenFields = function(cElementName){
	var oForm = this.GetForm();
	var oElement = oForm.elements[cElementName];
	var cNewElementName = "pValidateError"+cElementName+"SelectedIndex"
	if(!this.arrSelectedIndexHiddenFieldNames){
		this.arrSelectedIndexHiddenFieldNames = [];
	}
	if(oElement.selectedIndex == 0){
		this.handleValidationError(cElementName);
		this.arrSelectedIndexHiddenFieldNames.push(cNewElementName);
		this.AppendHiddenField(cNewElementName,oElement.selectedIndex);
		return false;		
	}else{
		this.arrSelectedIndexHiddenFieldNames.push(cNewElementName);
		this.AppendHiddenField(cNewElementName,oElement.selectedIndex);	
		return true;
	}
}
_FormValidator.prototype.HasSimulationPermission = function(){
	if(document.getElementById('InHouse')){
		return true;
	}
	var cWindow = window.location.toString();
	if(cWindow.match(/pExposeSimulationControls=on/i)){
		return true;
	}
	return false;
}
_FormValidator.prototype.AppendHiddenField = function(cElName,cValue){
	var oForm = this.GetForm();
	if(!oForm.elements[cElName]){
		var newInput = document.createElement("input");
		newInput.setAttribute("type", "hidden");
		newInput.setAttribute("name", cElName);
		newInput.setAttribute("id", cElName);
		newInput.setAttribute("value", cValue);	
		oForm.appendChild(newInput);	
	}else{
		oForm.elements[cElName].value = cValue;
	}
}

_FormValidator.prototype.isOptional = function(args){
	for(var i=1;i<args.length;i++){
		if(typeof(args[i]) == 'string'){
			if(args[i].match(/optional/i)){
				return true;
			}
		}
	}
	return false;
}
function QuickSaveData(cElementName, cElementValue, cElementType, cIsMultiLang){
	this.Name = cElementName;
	this.Value = cElementValue;
	this.Type = cElementType;
	this.IsMultiLang = cIsMultiLang;
}
_FormValidator.prototype.removeHiddenElements = function(arrElementNames){
	var oForm = this.GetForm();
	for(var i=0;i<arrElementNames.length;i++){
		var oElement = oForm.elements[arrElementNames[i]];
		oForm.removeChild(oElement);	
	}
}

_FormValidator.prototype.processFormElements = function(){
	var oForm = this.GetForm();
	var bPerformQuickSave = false;	
	this.arrQuickSaveData = [];
	this.arrQuickSaveUrlGroups = [];
	var bProcessGenericSubmitFields = (this.GenericSubmitFields.match(/on/gi) ? true : false);
	var nTotalGenericSubmitFields = 0;
	if(oForm.elements['f_chk_QuickSaveSnapShot']){
		if(oForm.elements['f_chk_QuickSaveSnapShot'].checked && this.QuickSaveEnabled == 'ON'){
			if(oForm.elements['f_txt_QuickSaveSnapshotName_U'].value != ''){
				bPerformQuickSave = true;			
			}		
		}	
	}
	if(this.arrGenericSubmitFields.length > 0 ){
		this.removeHiddenElements(this.arrGenericSubmitFields);
		this.arrGenericSubmitFields.length = 0;
	}
	for(var i=0;i<oForm.elements.length;i++){
		var cValue = this.getElementValue(oForm.elements[i]);
		if(cValue == '')
			continue;
		if(this.arrTransformationFields.inArray(oForm.elements[i].name)){
			cValue = this.transformReservedCharacters(oForm.elements[i])
			oForm.elements[i].value = cValue;
		}	
		if(bPerformQuickSave ){		
			var cName = (oForm.elements[i].name || oForm.elements[i].id);
			if(cValue != '' && !cName.match(/QuickSaveSnapshot/gi)){
				this.arrQuickSaveData.push(new QuickSaveData(cName, cValue, oForm.elements[i].type, oForm.elements[i].isMultiLang));					
			}
		}		
		if(bProcessGenericSubmitFields){
			if(document.getElementById('spn_' + oForm.name + '_' + oForm.elements[i].name + '_Label')){								
				if(cValue != false){
					nTotalGenericSubmitFields++;
					if(nTotalGenericSubmitFields == 1 ){
						this.AppendHiddenField("f_hid_FormName" , oForm.name)
					}				
					this.arrGenericSubmitFields.push("f_hid_Element_"+nTotalGenericSubmitFields+"_Label")
					this.arrGenericSubmitFields.push("f_hid_Element_"+nTotalGenericSubmitFields+"_Name")
					this.arrGenericSubmitFields.push("f_hid_Element_"+nTotalGenericSubmitFields+"_Value")
					this.AppendHiddenField("f_hid_Element_"+nTotalGenericSubmitFields+"_Label" , getInnerText(document.getElementById('spn_' + oForm.name + '_' + oForm.elements[i].name + '_Label')))
					this.AppendHiddenField("f_hid_Element_"+nTotalGenericSubmitFields+"_Name" , oForm.elements[i].name)
					this.AppendHiddenField("f_hid_Element_"+nTotalGenericSubmitFields+"_Value" , cValue)
				}
			}
		}		
	}

	if(bPerformQuickSave){
		//alert(this.arrQuickSaveData.length);
		Ajax.requestType="POST"
		var cQuickSaveName = oForm.f_txt_QuickSaveSnapshotName_U.value;
		var cFormName = oForm.name;	
		var cQuickSaveSubmissionTimeStamp = new Date().getTime();	
		var cDBtarget =  document.getElementById('f_hid_DBtarget').value;
		for(var i=0;i<this.arrQuickSaveData.length;i++){
			//if(i<5){window.open("/membrg/CMDQuickSaveSnapshots.dll?pFormContext="+cDBtarget+"&pQuickSaveSubmissionTimeStamp="+cQuickSaveSubmissionTimeStamp+"&t=site/tools/CMDQuickSaveSnapshots/Includes/Data/stdResultAjax&pCommandName=Add_Single_QuickSave_Element&pQuickSaveName="+cQuickSaveName+"&pFormName="+cFormName+"&pAttrName1="+this.arrQuickSaveData[i].Name+"&pAttrValue1="+this.arrQuickSaveData[i].Value+ (this.arrQuickSaveData[i].Type != 'Text' ? "&pAttrType1="+this.arrQuickSaveData[i].Type : "") + (this.arrQuickSaveData[i].IsMultiLang == 'true' ? "&pAttrIsMultiLang1=T" : ""))}
			Ajax.Execute("/membrg/CMDQuickSaveSnapshots.dll?pFormContext="+cDBtarget+"&pQuickSaveSubmissionTimeStamp="+cQuickSaveSubmissionTimeStamp+"&t=site/tools/CMDQuickSaveSnapshots/Includes/Data/stdResultAjax&pCommandName=Add_Single_QuickSave_Element&pQuickSaveName="+cQuickSaveName+"&pFormName="+cFormName+"&pAttrName1="+this.arrQuickSaveData[i].Name+"&pAttrValue1="+encodeURIComponent(this.arrQuickSaveData[i].Value)+ (this.arrQuickSaveData[i].Type != 'Text' ? "&pAttrType1="+this.arrQuickSaveData[i].Type : "") + (this.arrQuickSaveData[i].IsMultiLang == 'true' ? "&pAttrIsMultiLang1=T": ""), function(){})		
			//this.arrQuickSaveUrlGroups.push("pAttrName"+(i+1)+"="+this.arrQuickSaveData[i].Name+"&pAttrValue"+(i+1)+"="+this.arrQuickSaveData[i].Value)	
		}	
		//alert(this.arrQuickSaveData.length);
		//window.open("/membrg/CMDQuickSaveSnapshots.dll?t=site/tools/CMDQuickSaveSnapshots/Includes/Data/stdResultAjax&pCommandName=Add_Single_QuickSave_Element&pQuickSaveName="+oForm.f_txt_QuickSaveSnapshotName_U.value+"&pFormName="+oForm.name+"&"+this.arrQuickSaveUrlGroups.join("&"))		
		//Ajax.Execute("/membrg/CMDQuickSaveSnapshots.dll?t=site/tools/CMDQuickSaveSnapshots/Includes/Data/stdResultAjax&pCommandName=Add_Single_QuickSave_Element&pQuickSaveName="+oForm.f_txt_QuickSaveSnapshotName_U.value+"&pFormName="+oForm.name+"&"+this.arrQuickSaveUrlGroups.join("&"), function(){})		
		//Ajax.Execute("/membrg/CMDQuickSaveSnapshots.dll?t=site/tools/CMDQuickSaveSnapshots/Includes/Data/stdResultAjax&pCommandName=Add_Multiple_QuickSave_Elements&pQuickSaveName="+oForm.f_txt_QuickSaveSnapshotName_U.value+"&pFormName="+oForm.name+"&"+this.arrQuickSaveUrlGroups.join("&"), function(){})		
	}
	
}
_FormValidator.prototype.getElementValue = function(oElement){
	var cValue = ''
	switch(oElement.type){
		case "radio":
			if(oElement.checked == true){
				return oElement.value;			
			}else{
				return false;
			}
		break;
		case "checkbox":
			if(oElement.checked == true){
				return oElement.value;				
			}else{
				return false;
			}
		break;	
		default:
			cValue = oElement.value
		break;		
	}
	return cValue;

}
_FormValidator.prototype.AddTransformationExceptionElement = function(cElementName){
	//this.arrIgnoreTransformationFields.push(cElementName)	
	//deprecated;
}
_FormValidator.prototype.ApplyReservedCharacterTransformation = function(cElementName){
	this.arrTransformationFields.push(cElementName)	
	//deprecated;
}
_FormValidator.prototype.transformReservedCharacters = function(oElement){
	var cValue = oElement.value
	switch (this.WPReservedCharacterTransformationType){
		case "SubstituteCharacter":
			for(var j=0;j<WPReservedCharacterData.length;j++){
				var regExpReservedChar = new RegExp(WPReservedCharacterData[j].ReservedCharacter,"g");
				cValue = cValue.replace(regExpReservedChar, WPReservedCharacterData[j].SubstituteCharacter)
			}		
		break;
		case "ASCIIequiv":
			for(var j=0;j<WPReservedCharacterData.length;j++){
				var regExpReservedChar = new RegExp(WPReservedCharacterData[j].ReservedCharacter,"g");
				cValue = cValue.replace(regExpReservedChar, WPReservedCharacterData[j].ASCIIEquivilant)
			}
		break;
		case "Custom":
			if(this.WPReservedCharacterTransformationCustomFunction != null){
				cValue = this.WPReservedCharacterTransformationCustomFunction(oElement);
			}
		
		break;				
	}
	return cValue;
}

_FormValidator.prototype.transformQuotes = function(){
	var oForm = this.GetForm();
	for(var i=0;i<oForm.elements.length;i++){
		if(oForm.elements[i].type == "text"){
			oForm.elements[i].value = oForm.elements[i].value.replace(/"/g,"''");
		}
	}
	return false;
}
_FormValidator.prototype.handleValidationError = function(cElName){
	this.errorCount++;
	if(!document.getElementById("fValidateMessage"+cElName)){
		this.AppendHiddenField("pValidateError"+arguments[0],"error");
	}else{
		var cAlertMessage = document.getElementById("fValidateMessage"+cElName).innerHTML;
		cAlertMessage = cAlertMessage.replace(/\n/g,'');
		this.errorMessage += "*" + cAlertMessage + "\n";
	}
}
_FormValidator.prototype.getDomain = function(){
	var cDomain = window.location.toString().match(/http\S*\.com/i);//only used for submitsimulate
	return cDomain;
}
_FormValidator.prototype.isCaseInsensitive = function(args){
	for(var i=2;i<args.length;i++){
		if(typeof(args[i]) == 'string'){
			if(args[i].match(/nocase/i)){
				return true;
			}
		}
	}
	return false;
}
/***** BEGIN CORE VALIDATION METHODS *****/
_FormValidator.prototype.Compare = function(){
	var oForm = this.GetForm();
	if(!oForm.elements[arguments[0]]){ return true;}
	if(this.isOptional(arguments) && oForm.elements[arguments[0]].value == ''){ return true;}
	if(oForm.elements[arguments[1]]){
		var cValueToCompare = oForm.elements[arguments[1]].value;
	}else{
		var cValueToCompare = arguments[1];
	}
	if(!this.isCaseInsensitive(arguments)){
		if(oForm.elements[arguments[0]].value == cValueToCompare){
			return true;
		}
	}else{
		if(oForm.elements[arguments[0]].value.toUpperCase() == cValueToCompare.toUpperCase()){
			return true;
		}		
	}
	//alert("Values Don't match");
	this.handleValidationError(arguments[0]);
	return false;
}
_FormValidator.prototype.RegularExpression = function(){
	var oForm = this.GetForm();
	if(!oForm.elements[arguments[0]]){ return true;}
	if(this.isOptional(arguments) && oForm.elements[arguments[0]].value == ''){ return true; }
	var cText = oForm.elements[arguments[0]].value;
	var regExp = arguments[1];
	if(regExp.test(cText)){
		if(cText != '')
		return true;
	}
//	alert(arguments[0] + ' invalid');
	this.handleValidationError(arguments[0]);
	return false;
}
_FormValidator.prototype.Require = function(){
	var oForm = this.GetForm();	
	if(!oForm.elements[arguments[0]]){ return true;}
	var oElement = oForm.elements[arguments[0]];	
	if(oElement.type.match(/select/i)){
		if(this.isOptional(arguments) && oElement.selectedIndex == 0){ return true; }
		return this.AddSelectedIndexHiddenFields(arguments[0]);
	}
	//alert(oElement.value);
	var cText = oElement.value;
	if(cText != ''){
		return true;
	}
	this.handleValidationError(arguments[0]);
	return false;
}
_FormValidator.prototype.Range = function(){
	var oForm = this.GetForm();
	if(!oForm.elements[arguments[0]]){ return true;}
	if(this.isOptional(arguments) && oForm.elements[arguments[0]].value == ''){return true;}
	var cText = oForm.elements[arguments[0]].value;
	var nValue1 = arguments[1];	
	var nValue2 = arguments[2];
	var regExNumeric = /(^-*\d+$)|(^-*\d+\.\d+$)/;
	if(regExNumeric.test(cText)){
		var nText = cText * 1;	
		if(nText >= nValue1 && nText <= nValue2){
			return true;
		}
	}
	//alert(arguments[0] + ' out of range');
	this.handleValidationError(arguments[0]);
	return false;
}
_FormValidator.prototype.Custom = function(){
	
	var oForm = this.GetForm();
	if(!oForm.elements[arguments[0]]){ return true;}
	if(this.isOptional(arguments) && oForm.elements[arguments[0]].value == ''){ return true;}
	var cText = oForm.elements[arguments[0]].value;
	if(arguments[1](cText, arguments)){
		if(oForm.elements[arguments[0]].type){
			if(oForm.elements[arguments[0]].type.match(/select/i)){
				return this.AddSelectedIndexHiddenFields(arguments[0]);
			}
		}
		if(cText != ''){
			return true;
		}		
	}else{
		this.AddSelectedIndexHiddenFields(arguments[0]);		
	}
	//alert("test="+arguments[0])
	this.handleValidationError(arguments[0]);
	return false;
}

_FormValidator.prototype.MultiLang = function(oMultiLang,cErrorFieldName){
	var oForm = this.GetForm();
	if(oMultiLang.isValid()){
		return true;	
	}
	this.handleValidationError(cErrorFieldName);
	return false;
}
/***** END CORE VALIDATION METHODS *****/

_FormValidator.prototype.DisableHTML = function(cElementName){
	var oForm = this.GetForm();
	if(!oForm.elements[cElementName]){ return true;}
	if(oForm.elements[cElementName]){
		var oElement = oForm.elements[cElementName];	
		var cValue = oElement.value;
		cValue = cValue.replace(/</gi,"[");
		cValue = cValue.replace(/>/gi,"]");
		oElement.value = cValue
	}
}
_FormValidator.prototype.StripHTML = function(cElementName){
	var oForm = this.GetForm();
	if(!oForm.elements[cElementName]){ return true;}
	var oElement = oForm.elements[cElementName];
	var cValue = oElement.value;
	cValue = cValue.replace(/(<([^>]+)>)/ig,"");
	oElement.value = cValue
}
_FormValidator.prototype.ConvertQuotes = function(cElementName){
	var oForm = this.GetForm();
	if(!oForm.elements[cElementName]){ return true;}
	var oElement = oForm.elements[cElementName];
	var cValue = oElement.value;
	cValue = cValue.replace(/'/ig,"&#39;");
	cValue = cValue.replace(/"/ig,"&#34;");
	oElement.value = cValue
}


_FormValidator.prototype.RemoveElementOnError = function(cElementName){//Created as a work-around for apps that incorrectly return an Err_ result and redirect to std out. UPDATE - Found to be valuable for Edit forms that fail validation (ie. FormValidator.RemoveElementOnError("fMode");)
	this.FieldsToRemoveOnError.push(cElementName);
}
_FormValidator.prototype.formSubmitSimulation = function() {
	var oForm = this.GetForm();
	var cFormName = oForm.name;
	var cStr = 	"*****InHouse Debug Display*****:\n\n";
	cStr += 	"Current Form Action:\n\n["+oForm.action+"]\n\n";
	cStr +=		"For form-submit options, press OK:\n\n";
	alert(cStr);
	var cDefaultAction = oForm.action.toString();
	var cDomain = this.getDomain();
	var cApp = cDefaultAction.substr(cDefaultAction.indexOf("/membrg"), cDefaultAction.length);
	cApp = cApp.toUpperCase();
	if(cApp.indexOf("?") > -1){
		cApp = cApp.substr(0,cApp.indexOf("?"))
	}
	cApp = cApp.substr(cApp.indexOf("MEMBRG/") + 7,cApp.length)
	var appCode = cApp.replace(/\/membrg\//gi,'')
	appCode = appCode.replace(/\.\w{0,}/gi,'');	
		var cSubmitPreference = confirm("Click 'OK' to submit using the default form action ("+cApp+"); Click 'Cancel' to simulate results using (FormSubmitSimulate.dll)");
		if(cSubmitPreference){
			renameTemp();
			if (myFormDebug(oForm.name)) {
				if(this.Ajax.match(/on/gi)){			
					if(!this.AjaxDivDisabled){	
						
						if(typeof(this.SubmitButton) == "string"){
							oSubmitName = this.SubmitButton
						}else if(this.SubmitButton != null){						
							oSubmitName = this.SubmitButton.name;
						}		
						
						Ajax.ContentOnDemand(oSubmitName, oForm.name, this.AjaxDivWidth , this.AjaxDivHeight , this.AjaxDivNameValues , this.AjaxDivOnComplete);
					}else{
						Ajax.Execute(oForm.name, this.AjaxCallbackFunction)
					}					
					//oForm.action = cDefaultAction
				}else{
					if(this.UploadProgressBar.match(/on/gi)){
						if(typeof(this.SubmitButton) == "string"){
							oSubmitName = oForm.elements[this.SubmitButton]
						}else{						
							oSubmitName = Ajax._findButton(oForm.name);
						}
						this.AjaxDivNameValues = "pHeaderMessage=SubmissionStatus";
						oForm = getObject(oForm);						
						Ajax.ContentOnDemand(oSubmitName, "/ifpage.dll?t=site/includes/DynamicInfoBoxContent/StdUploadProgressBar", this.AjaxDivWidth , this.AjaxDivHeight , this.AjaxDivNameValues , function(){setTimeout(function(){oForm.submit()},"1000")});
						//oForm.action = cDefaultAction
					}else{	
						oForm.submit();
					}
				}
				return false;
			}else{				
				return false;
			}
		}
		var errCode = prompt("Enter gCGiresultCodes (i.e., 'Success_G_Default') (optional):", "Success_G_Default");
		if(errCode == null) {errCode = "";}
		var cDefaultTemplateSuggestion = "";
		var behavior = "template";
		if(this.Ajax.match(/on/gi)){
			if(oForm.elements['t']){
				cDefaultTemplateSuggestion = "t="+oForm.elements['t'].value;
			}else{
				cDefaultTemplateSuggestion = "t=StdResultAjax";
			}					
		}else{
			if(appCode.match(/_stdout/gi)){
				cDefaultTemplateSuggestion = "t=StdOutput";
			}else{
				if(cDefaultTemplateSuggestion == ""){
					if(oForm.elements['t']){
						cDefaultTemplateSuggestion = "t="+oForm.elements['t'].value;
					}
				}						
			}
		}
		var cDefaultTemplate = prompt("Where to display output?  (suggested t parm)?", cDefaultTemplateSuggestion);
		if(!oForm.fDataSimINIPath){
			var resultPrefix = errCode.substr(0,1);
			if (resultPrefix.match(/s/i)) {
				var pResult = "Success";
			} else {
				var pResult = "Fail";
			}			
			if(this.Ajax.match(/on/gi)){
				pResult = "Success";
			}
			pResult = "Success"; //Always "success" to eliminate t= override by FSS.dll 11/24/06 -MP
			var arrUrl = cDefaultAction.split("?");
			if(arrUrl[1]){
				var cExtraArgs = "&" + arrUrl[1];
			}else{
				var cExtraArgs = "&";
			}
			if(resultPrefix == ""){
				resultPrefix = "I";
				errCode="Success_G_DummyDuh";
			}
			
			var cFormAction = cDomain+"/FormSubmitSimulate.dll?"+cDefaultTemplateSuggestion+"&pSimulated=Y&pAppCode="+appCode+"&pBehavior="+behavior+"&pResult="+pResult+"&pResultCode="+errCode+"&pResultPrefix="+resultPrefix + cExtraArgs;				
			// if the user clicks ok on the form Debug confirm then we submit the new form action  else the form submission stops
			if (myFormDebug(oForm.name)) {
				if(oForm.elements['t']){
					var oTemplateField = oForm.elements['t'];
					//oTemplateField.name = "temp_t";
				}	
				if(this.Ajax.match(/on/gi)){
					alert("Simulation URL: " + cFormAction + "&pDisplayGlobalVartestPage=false");
					oForm.action = cFormAction + "&pDisplayGlobalVartestPage=false";
					//stdResultInfoBoxTimeout = setTimeout("_ShowProgressBar('"+cFormName+"','"+this.SubmitButton+"')",this.progressBarDelay);						
					//Ajax.Execute(oForm.name, _PopulateInfoBox , oForm ,this.SubmitButton);

					var oSubmitName = (this.SubmitButton != null ? this.SubmitButton.name : this.SubmitButton);
					if(this.AjaxDivOnComplete == null){						
						this.AjaxDivOnComplete = function(){ oForm.action = cDefaultAction; };
					}else{						
						this.LocAjaxDivOnComplete = this.AjaxDivOnComplete;
						this.AjaxDivOnComplete = function(cResultCode , cResultCodeString){ FormValidator.LocAjaxDivOnComplete(cResultCode, cResultCodeString); oForm.action = cDefaultAction; }					
					}
					if(!this.AjaxDivDisabled){
						Ajax.ContentOnDemand(oSubmitName, oForm.name, this.AjaxDivWidth , this.AjaxDivHeight , this.AjaxDivNameValues , this.AjaxDivOnComplete);
					}else{
						Ajax.Execute(oForm.name, this.AjaxCallbackFunction)
					}									
				}else{
					oForm.action = cFormAction;
					if(this.UploadProgressBar.match(/on/gi)){
						if(typeof(this.SubmitButton) == "string"){
							oSubmitName = oForm.elements[this.SubmitButton]
						}else{						
							oSubmitName = Ajax._findButton(oForm.name);
						}
						this.AjaxDivNameValues = "pHeaderMessage=SubmissionStatus";
						oForm = getObject(oForm);
						Ajax.ContentOnDemand(oSubmitName, "/ifpage.dll?t=site/includes/DynamicInfoBoxContent/StdUploadProgressBar", this.AjaxDivWidth , this.AjaxDivHeight , this.AjaxDivNameValues , function(){setTimeout(function(){oForm.submit()},"1000")});
					}else{	
						alert(oForm.action);
						oForm.submit();
					}

				}
				return false;
			} else {
				renameTemp()
				oForm.action = cDefaultAction;
				return false;
			}
		}else{		
			var cCgiResultSimArgs = 'pResult=success'

			var resultPrefix = errCode.substr(0,1);
			if (resultPrefix.match(/s/i)) {
				var pResult = "Success";
			} else {
				var pResult = "Fail";
			}	
			cCgiResultSimArgs += "&pAppCode="+appCode+"&pResultCode="+errCode+"&pResultPrefix="+resultPrefix;
			var cTemplate = oForm.fDataSimTemplatePath.value;
			var cDataSimIni = oForm.fDataSimINIPath.value;
			var arrUrl = oForm.action.split("?");
			if(arrUrl[1]){
				var cExtraArgs = "&" + arrUrl[1];
			}else{
				var cExtraArgs = "&";
			}			
			if(oForm.method.match(/post/i)){
				oForm.action = cDomain+"/FormSubmitSimulate.dll?t="+cTemplate+"&pBehavior=template&"+cCgiResultSimArgs+"&DataSimINI="+cDataSimIni + cExtraArgs;
			}else{
				this.AppendHiddenField("t",cTemplate);
				this.AppendHiddenField("pBehavior","template");
				this.AppendHiddenField("pResult","success");
				this.AppendHiddenField("DataSimINI",cDataSimIni);
				oForm.action = cDomain+"/FormSubmitSimulate.dll";
			}
			if (myFormDebug(oForm.name)) {
				if(this.UploadProgressBar.match(/on/gi)){
					if(typeof(this.SubmitButton) == "string"){
						oSubmitName = oForm.elements[this.SubmitButton]
					}else{						
						oSubmitName = Ajax._findButton(oForm.name);
					}
					this.AjaxDivNameValues = "pHeaderMessage=SubmissionStatus";
					oForm = getObject(oForm);
					Ajax.ContentOnDemand(oSubmitName, "/ifpage.dll?t=site/includes/DynamicInfoBoxContent/StdUploadProgressBar", this.AjaxDivWidth , this.AjaxDivHeight , this.AjaxDivNameValues , function(){setTimeout(function(){oForm.submit()},"1000")});
				}else{	
					oForm.submit();
				}
			}else{
				oForm.action = cDefaultAction;
			}
			return false;
		}

	function renameTemp(){
		if(oForm.elements['temp_t']){
			var oTempTemplateField = oForm.elements['temp_t'];
			oTempTemplateField.name = "t";
		}		
	}
}

function myFormDebug(cFormName){
	var oForm = document.forms[cFormName];
	var arrListGroups = [];
	var arrDisplayData = [];
	var arrElements = oForm.elements;
	for(var i=0;i<arrElements.length;i++){
		if(arrElements[i].name == '' || arrElements[i].disabled == true) continue;
		if(arrElements[i].type == 'radio' || arrElements[i].type == 'checkbox'){ 
			if(!arrListGroups.inArray(arrElements[i].name)){	
				arrListGroups.push(arrElements[i].name);
				var cListData = transformList(arrElements,arrElements[i].name);
				if(cListData) arrDisplayData.push(cListData);
			}
		}else{
			if(!arrElements[i].type.match(/select/i)){
				arrDisplayData.push(arrElements[i].name + '=' + arrElements[i].value);
			}else if(arrElements[i].type.match(/select-multiple/i)){				
				for(var j=0;j<arrElements[i].options.length;j++){
					if(arrElements[i].options[j].selected){
						arrDisplayData.push(arrElements[i].name + '=' + arrElements[i].options[j].value);				
					}				
				}
			}else{
				if(arrElements[i].value != ''){
					arrDisplayData.push(arrElements[i].name + '=' + arrElements[i].value);
				}else{					
					arrDisplayData.push(arrElements[i].name + '=' + arrElements[i].options[arrElements[i].selectedIndex].innerHTML);
				}
			}
		}
	}
	return displayData();
	function displayData(){
		var cStr = '';
		cStr += "************* Form Debugger *****************\n\n";
		cStr += "Form Name = " + oForm.name + "\n";
		cStr += "Form action = " + oForm.action + "\n";
		cStr += "Form Method = " + oForm.method + "\n\n";
		cStr += arrDisplayData.join("\n");
		cStr += "\n\nWould you like to submit the form?";
		var bQuestion = confirm(cStr);
		if (bQuestion) {
			return true;
		}else {
			return false;
		}
	}
	function transformList(arrElements,cListName){
		var oList = arrElements[cListName];
		var arrList = [];
		if(arrElements[cListName].length){
			var nLength = arrElements[cListName].length;					
			for(var i=0;i<nLength;i++){
				if(oList[i].checked){
					arrList.push(oList[i].name + '=' +oList[i].value);
				}
			}
		}else{
			if(oList.checked){
				arrList.push(oList.name + '=' +oList.value);
			}				
		}
		if(arrList.length > 0){
			return arrList.join("\n");
		}else{
			return false;
		}
	}
}
