//-----------------------------------------
var aFormLocalIDs = new Array();
var aFormsProcessed = new Array();

//-----------------------------------------
function DynamicForm_AttachLoadEvent(FormLocalID)
{
    aFormLocalIDs[aFormLocalIDs.length] = FormLocalID;
    aFormsProcessed[aFormsProcessed.length] = false;
    CrossBrowser_AttachLoadEvent(DynamicForm_OnLoad);
    // try to hide loading message
    var divFormPleaseWaitNoJS = document.getElementById('divFormPleaseWaitNoJS-FL' + FormLocalID);
    if (divFormPleaseWaitNoJS)
	    divFormPleaseWaitNoJS.style.display = "none";
}

//-----------------------------------------
function DynamicForm_OnLoad()
{	
	for (var i=0; i < aFormLocalIDs.length; i++)
	{
		if (!aFormsProcessed[i])
		{
			aFormsProcessed[i] = true;
			var sFormLocalID = aFormLocalIDs[i];
			// set the form loaded to false
			var hdnFormLoaded = document.getElementById('hdnFormLoaded-FL' + sFormLocalID);
			if (hdnFormLoaded)
				hdnFormLoaded.value = "false";					
			// check to see if we need to load passport values
			var hdnFormPassportProtected = document.getElementById('hdnFormPassportProtected-FL' + sFormLocalID);
			var sPassportProtected = "0";
			if (hdnFormPassportProtected)
				sPassportProtected = hdnFormPassportProtected.value;
			
			var bShowForm = true;
			if (sPassportProtected == "1")
			{
				var hdnFormAfterFirstSubmissionCode = document.getElementById('hdnFormAfterFirstSubmissionCode-FL' + sFormLocalID);
				var sAfterFirstSubmissionCode = "";
				if (hdnFormAfterFirstSubmissionCode)
					sAfterFirstSubmissionCode = hdnFormAfterFirstSubmissionCode.value;
				if (sAfterFirstSubmissionCode == "EDIT_ANSWERS" || sAfterFirstSubmissionCode == "ONE_SUBMISSION")
				{
					bShowForm = false;
					// set timeout - will switch please wait to error after 5 seconds
					setTimeout("DynamicForm_ShowGeneralError('" + sFormLocalID + "')", 5000);	
					// get data				
					DynamicForm_GetSubmissionData(sFormLocalID);
				}
			}
			if (bShowForm)
				DynamicForm_ShowForm(sFormLocalID);
		}
	}
}

//-----------------------------------------
function DynamicForm_GetSubmissionData(FormLocalID)
{
	try
	{
		var hdnFormDataLookupURL = document.getElementById("hdnFormDataLookupURL-FL" + FormLocalID);
		var sFormDataLookupURL = "";
		if (hdnFormDataLookupURL)
		{
			sFormDataLookupURL = hdnFormDataLookupURL.value;
			var sXMLURL = sFormDataLookupURL + "FormLocalID=" + FormLocalID;
			CrossBrowser_GetAsyncRequest(sXMLURL, null, null, "DynamicForm_PopulateSubmissionData", FormLocalID);
		}
	}
	catch(e)
	{ ; }
}

//-----------------------------------------
function DynamicForm_ShowGeneralError(FormLocalID)
{
	var hdnFormLoaded = document.getElementById('hdnFormLoaded-FL' + FormLocalID);
	var sFormLoaded = "false";
	if (hdnFormLoaded)
		sFormLoaded = hdnFormLoaded.value;
	if (sFormLoaded == "false")
	{	
		// hide the div that says "please wait, please enable javascript"
		var divFormPleaseWaitNoJS = document.getElementById('divFormPleaseWaitNoJS-FL' + FormLocalID);
		if (divFormPleaseWaitNoJS)
			divFormPleaseWaitNoJS.style.display = "none";
		// hide the form
		var divForm = document.getElementById('divForm-FL' + FormLocalID);				
		if (divForm)
			divForm.style.display = "none";
		// hide the only one submission allowed error
		var divFormOneSubmissionAllowed = document.getElementById('divFormOneSubmissionAllowed-FL' + FormLocalID);				
		if (divFormOneSubmissionAllowed)
			divFormOneSubmissionAllowed.style.display = "none";
		// show the error loading form div
		var divFormErrorLoadingForm = document.getElementById('divFormErrorLoadingForm-FL' + FormLocalID);
		if (divFormErrorLoadingForm)
			divFormErrorLoadingForm.style.display = "";	
	}
}

//-----------------------------------------
function DynamicForm_ShowOnlyOneSubmissionError(FormLocalID)
{
	// set the form loaded to true
	var hdnFormLoaded = document.getElementById('hdnFormLoaded-FL' + FormLocalID);
	if (hdnFormLoaded)
		hdnFormLoaded.value = "true";	
	// hide the div that says "please wait, please enable javascript"
	var divFormPleaseWaitNoJS = document.getElementById('divFormPleaseWaitNoJS-FL' + FormLocalID);
	if (divFormPleaseWaitNoJS)
		divFormPleaseWaitNoJS.style.display = "none";
	// hide the error loading form div
	var divFormErrorLoadingForm = document.getElementById('divFormErrorLoadingForm-FL' + FormLocalID);
	if (divFormErrorLoadingForm)
		divFormErrorLoadingForm.style.display = "none";	
	// hide the form
	var divForm = document.getElementById('divForm-FL' + FormLocalID);				
	if (divForm)
		divForm.style.display = "none";
	// show the only one submission allowed error
	var divFormOneSubmissionAllowed = document.getElementById('divFormOneSubmissionAllowed-FL' + FormLocalID);				
	if (divFormOneSubmissionAllowed)
		divFormOneSubmissionAllowed.style.display = "";		
}

//-----------------------------------------
function DynamicForm_ShowForm(FormLocalID)
{
	// set the form loaded to true
	var hdnFormLoaded = document.getElementById('hdnFormLoaded-FL' + FormLocalID);
	if (hdnFormLoaded)
		hdnFormLoaded.value = "true";		
	// hide the div that says "please wait, please enable javascript"
	var divFormPleaseWaitNoJS = document.getElementById('divFormPleaseWaitNoJS-FL' + FormLocalID);
	if (divFormPleaseWaitNoJS)
		divFormPleaseWaitNoJS.style.display = "none";
	// hide the error loading form div
	var divFormErrorLoadingForm = document.getElementById('divFormErrorLoadingForm-FL' + FormLocalID);
	if (divFormErrorLoadingForm)
		divFormErrorLoadingForm.style.display = "none";	
	// hide the only one submission allowed error
	var divFormOneSubmissionAllowed = document.getElementById('divFormOneSubmissionAllowed-FL' + FormLocalID);				
	if (divFormOneSubmissionAllowed)
		divFormOneSubmissionAllowed.style.display = "none";				
	// show the form
	var divForm = document.getElementById('divForm-FL' + FormLocalID);				
	if (divForm)
		divForm.style.display = "";
}

//-----------------------------------------
function DynamicForm_PopulateSubmissionData(oXMLRequest, FormLocalID) {
	try {
	    var oXML = oXMLRequest.responseXML;
	    
		// mark this form as loaded
		var hdnFormLoaded = document.getElementById('hdnFormLoaded-FL' + FormLocalID);
		if (hdnFormLoaded)
			hdnFormLoaded.value = "true";
		// get afterfirstsubmissioncode
		var hdnFormAfterFirstSubmissionCode = document.getElementById('hdnFormAfterFirstSubmissionCode-FL' + FormLocalID);
		var sAfterFirstSubmissionCode = "";
		if (hdnFormAfterFirstSubmissionCode)
			sAfterFirstSubmissionCode = hdnFormAfterFirstSubmissionCode.value;
				
		if (sAfterFirstSubmissionCode == "ONE_SUBMISSION")
		{
			var oAnswerNodes = oXML.documentElement.getElementsByTagName("FORMSUBMISSIONANSWER");
			if (oAnswerNodes.length > 0)
				DynamicForm_ShowOnlyOneSubmissionError(FormLocalID);
		}
		else if (sAfterFirstSubmissionCode == "EDIT_ANSWERS")
		{
			// successly fetched data - show the form
			DynamicForm_ShowForm(FormLocalID);
	
			var bSetupPivot = false;
			var oAnswerNodes = oXML.documentElement.getElementsByTagName("FORMSUBMISSIONANSWER");
			for (var i = 0; i < oAnswerNodes.length; i++)
			{
				var sPivotAnswerID = oAnswerNodes[i].getAttribute("PivotAnswerID");
				var sQuestionID = oAnswerNodes[i].getAttribute("FormQuestionID");
				var sAnswerID = oAnswerNodes[i].getAttribute("FormAnswerID");
				var sAnswerText = oAnswerNodes[i].getAttribute("AnswerText");
				var sNoAnswer = oAnswerNodes[i].getAttribute("NoAnswer");
				var sOther = oAnswerNodes[i].getAttribute("Other");
				var sNoneAbove = oAnswerNodes[i].getAttribute("NoneAbove");
	
				// the first time through the loop we should setup the pivot question
				if (!bSetupPivot)
				{
					bSetupPivot = true;
					if (sPivotAnswerID != "0")
					{
						var hdnPivotQuestionID = document.getElementById("hdnPivotQuestionID-FL" + FormLocalID);
						if (hdnPivotQuestionID)
						{			
							var ddlPivot = document.getElementById("question-FL" + FormLocalID + "Q" + hdnPivotQuestionID.value + "P0");
							if (ddlPivot)
							{
								for (var j = 0; j < ddlPivot.options.length; j++)
								{
									if (ddlPivot.options[j].value == sPivotAnswerID)
									{
										ddlPivot.options[j].selected = true;
										break;
									}
								}						
								DynamicForm_PivotQuestion_OnChange(ddlPivot);
							}
						}
					}
				}
		
				var bQuestionInPivot = false;
				var hdnQuestionInPivotRow = document.getElementsByName("hdnQuestionInPivotRowFL" + FormLocalID + "Q" + sQuestionID);
				if (hdnQuestionInPivotRow.length > 0)
					bQuestionInPivot = true;

				var sTypeCode = "";
				var sHdnQuestionTypeFieldID = "hdnQuestionTypeFL" + FormLocalID + "Q" + sQuestionID + "P";
				if (bQuestionInPivot)
					sHdnQuestionTypeFieldID += sPivotAnswerID;
				else
					sHdnQuestionTypeFieldID += "0";
				var hdnQuestionType = document.getElementById(sHdnQuestionTypeFieldID);
				if (hdnQuestionType)
					sTypeCode = hdnQuestionType.value;

				switch (sTypeCode)
				{
					case "TEXT_SIMPLE":
					case "TEXT_LONG":
						var sFieldID = "question-FL" + FormLocalID + "Q" + sQuestionID + "P";
						if (bQuestionInPivot)
							sFieldID += sPivotAnswerID;
						else
							sFieldID += "0";
						var oField = document.getElementById(sFieldID);
						if (oField && sAnswerText)
							oField.value = sAnswerText;
						break;
					case "DROPDOWN_SIMPLE":
						var sFieldID = "question-FL" + FormLocalID + "Q" + sQuestionID + "P";
						if (bQuestionInPivot)
							sFieldID += sPivotAnswerID;
						else
							sFieldID += "0";			
						var oField = document.getElementById(sFieldID);
						if (oField)
						{
							if (sNoneAbove == "1")
								sAnswerID = "-2";
							if (sOther == "1")
								sAnswerID = "-1";
							for (var j = 0; j < oField.options.length; j++)
							{
								if (oField.options[j].value == sAnswerID)
								{
									oField.options[j].selected = true;
									break;
								}
							}
							if (sOther == "1")
							{							
								if (bQuestionInPivot)						
									DynamicForm_Dropdown_OnChange(FormLocalID, sQuestionID, sPivotAnswerID, false);
								else
									DynamicForm_Dropdown_OnChange(FormLocalID, sQuestionID, "0", false);
								var sOtherFieldID = "txtOther-" + sFieldID;
								var oOtherField = document.getElementById(sOtherFieldID);
								if (oOtherField && sAnswerText)
									oOtherField.value = sAnswerText;				
							}
						}
						break;
					case "TEXT_THREELINE":
						if (sAnswerText)
						{
							var sFieldID = "question-FL" + FormLocalID + "Q" + sQuestionID + "P";
							if (bQuestionInPivot)
								sFieldID += sPivotAnswerID;
							else
								sFieldID += "0";
							var aAnswerSplit = sAnswerText.split(",");
							if (aAnswerSplit.length > 0)
							{
								var oField1 = document.getElementById(sFieldID);
								if (oField1)
									oField1.value = trim(aAnswerSplit[0]);
							}
							if (aAnswerSplit.length > 1)
							{
								var oField2 = document.getElementById(sFieldID + "-2");
								if (oField2)
									oField2.value = trim(aAnswerSplit[1]);
							}
							if (aAnswerSplit.length > 2)
							{
								
								var oField3 = document.getElementById(sFieldID + "-3");
								if (oField3)
								{
									var sField3Val = "";
									for (var j = 2; j < aAnswerSplit.length; j++)
									{
										if (j != 2) sField3Val += ", ";
										sField3Val += trim(aAnswerSplit[j]);
									}
									oField3.value = trim(sField3Val);
								}
							}
						}
						break;
					case "CHECKBOX_LIST":
					case "CHECKBOX_LIST_WIDE":
						var sBaseFieldID = "question-FL" + FormLocalID + "Q" + sQuestionID + "P";
						if (bQuestionInPivot)
							sBaseFieldID += sPivotAnswerID;
						else
							sBaseFieldID += "0";
						var sFieldID = sBaseFieldID;
						if (sNoneAbove == "1")
							sFieldID = "chkNoneAbove-" + sFieldID;
						else if (sOther == "1")
							sFieldID = "chkOther-" + sFieldID;
						else
							sFieldID += "A" + sAnswerID;
						var oField = document.getElementById(sFieldID);
						if (oField)
							oField.checked = true;
						if (sOther == "1")
						{
							if (bQuestionInPivot)						
								DynamicForm_OtherCheckbox_OnClick(FormLocalID, sQuestionID, sPivotAnswerID, false);
							else
								DynamicForm_OtherCheckbox_OnClick(FormLocalID, sQuestionID, "0", false);
							var sOtherFieldID = "txtOther-" + sBaseFieldID;
							var oOtherField = document.getElementById(sOtherFieldID);
							if (oOtherField && sAnswerText)
								oOtherField.value = sAnswerText;								
						}
						break;
					case "RADIO_LIST":
					case "RADIO_LIST_WIDE":
						var sBaseFieldID = "question-FL" + FormLocalID + "Q" + sQuestionID + "P";
						if (bQuestionInPivot)
							sBaseFieldID += sPivotAnswerID;
						else
							sBaseFieldID += "0";
						var sFieldID = sBaseFieldID;
						if (sNoneAbove == "1")
							sFieldID = "rdoNoneAbove-" + sFieldID;
						else if (sOther == "1")
							sFieldID = "rdoOther-" + sFieldID;
						else
							sFieldID += "A" + sAnswerID;
						var oField = document.getElementById(sFieldID);
						if (oField)
							oField.checked = true;
						if (sOther == "1")
						{
							if (bQuestionInPivot)						
								DynamicForm_OtherRadio_OnClick(FormLocalID, sQuestionID, sPivotAnswerID, false);
							else
								DynamicForm_OtherRadio_OnClick(FormLocalID, sQuestionID, "0", false);
							var sOtherFieldID = "txtOther-" + sBaseFieldID;
							var oOtherField = document.getElementById(sOtherFieldID);
							if (oOtherField && sAnswerText)
								oOtherField.value = sAnswerText;								
						}
						break;
					case "CHECKBOX_SINGLE":
						if (sNoAnswer == "0")
						{
							var sFieldID = "question-FL" + FormLocalID + "Q" + sQuestionID + "P";
							if (bQuestionInPivot)
								sFieldID += sPivotAnswerID;
							else
								sFieldID += "0";
							var oField = document.getElementById(sFieldID);
							if (oField)
								oField.checked = true;
						}
						break;				
				}
			}
		}
	}
	catch(e)
	{ 
		// mark this form as not loaded
		var hdnFormLoaded = document.getElementById('hdnFormLoaded-FL' + FormLocalID);
		if (hdnFormLoaded)
			hdnFormLoaded.value = "false";
		DynamicForm_ShowGeneralError(FormLocalID);
	}	
}

//-----------------------------------------
function DynamicForm_OnSubmit(FormLocalID)
{
	var sGenErrorRequired = document.getElementById("hdnGenErrorRequired-FL" + FormLocalID).value;
	var sGenErrorInvalid = document.getElementById("hdnGenErrorInvalid-FL" + FormLocalID).value;
	var sGenErrorInvalidText = document.getElementById("hdnGenErrorInvalidText-FL" + FormLocalID).value;
	var sGenErrorInvalidFile = document.getElementById("hdnGenErrorInvalidFile-FL" + FormLocalID).value;
	
	var sChosenPivotAnswerID = "0";
	var hdnPivotQuestionID = document.getElementById("hdnPivotQuestionID-FL" + FormLocalID);
	if (hdnPivotQuestionID)
	{
		var ddlPivot = document.getElementById("question-FL" + FormLocalID + "Q" + hdnPivotQuestionID.value + "P0");
		sChosenPivotAnswerID = ddlPivot.options[ddlPivot.selectedIndex].value;
	}
			
	var aValidations = document.getElementsByName("hdnValidationFL" + FormLocalID);
	for (var i = 0; i < aValidations.length; i++)
	{		
		var sValType = aValidations[i].getAttribute("valType");
		var sTypeCode = aValidations[i].getAttribute("typeCode");
		var sFieldID = aValidations[i].getAttribute("field");
		var sUseGenError = aValidations[i].getAttribute("useGenError");
		var sLocName = aValidations[i].getAttribute("locName");
		var sCustomError = aValidations[i].getAttribute("customError");
		var sValCode = aValidations[i].getAttribute("valCode");
		var sValRegEx = aValidations[i].getAttribute("valRegEx");
		var sRowPivotAnswerID = aValidations[i].getAttribute("rowPivotAnswerID");
		
		// first make sure the question is being displayed
		if (sRowPivotAnswerID == "0" || sRowPivotAnswerID == sChosenPivotAnswerID)
		{
			var oFocusField;
			var bErrorFound = false;
			
			switch (sValType)
			{
				case "other-required":
				case "other-invalidtext":
					switch (sTypeCode)
					{
						case "DROPDOWN_SIMPLE":
							oFocusField = document.getElementById(sFieldID);
							var sFieldValue = oFocusField[oFocusField.selectedIndex].value;
							if (sFieldValue == "-1")
							{
								oFocusField = document.getElementById("txtOther-" + sFieldID);
								sFieldValue = oFocusField.value;
								bErrorFound = !(DynamicForm_ValidateText(sValType, sFieldValue, sValCode, sValRegEx));
							}
							break;
						case "RADIO_LIST":
						case "RADIO_LIST_WIDE":
							var rdoOther = document.getElementById("rdoOther-" + sFieldID);
							if (rdoOther)
							{
								if (rdoOther.checked)
								{
									oFocusField = document.getElementById("txtOther-" + sFieldID);
									sFieldValue = oFocusField.value;
									bErrorFound = !(DynamicForm_ValidateText(sValType, sFieldValue, sValCode, sValRegEx));
								}
							}
							break;
						case "CHECKBOX_LIST":
						case "CHECKBOX_LIST_WIDE":
							var chkOther = document.getElementById("chkOther-" + sFieldID);
							if (chkOther)
							{
								if (chkOther.checked)
								{
									oFocusField = document.getElementById("txtOther-" + sFieldID);
									sFieldValue = oFocusField.value;
									bErrorFound = !(DynamicForm_ValidateText(sValType, sFieldValue, sValCode, sValRegEx));
								}
							}
							break;
					}
					break;
	            case "invalidfile":
	                if (sTypeCode == "FILE_ATTACHMENT") {
                        oFocusField = document.getElementById(sFieldID);
                        var sFieldValue = oFocusField.value;
                        bErrorFound = !DynamicForm_ValidateFile(sFieldValue);
	                }
	                break;
				default:		
					switch (sTypeCode)
					{
						case "TEXT_SIMPLE":
						case "TEXT_LONG":
						case "FILE_ATTACHMENT":
							oFocusField = document.getElementById(sFieldID);
							var sFieldValue = oFocusField.value;
							bErrorFound = !(DynamicForm_ValidateText(sValType, sFieldValue, sValCode, sValRegEx));
							break;
						case "DROPDOWN_SIMPLE":
						case "DROPDOWN_PIVOT":
							if (sValType == "required")
							{
								oFocusField = document.getElementById(sFieldID);
								var sFieldValue = oFocusField[oFocusField.selectedIndex].value;
								if (sFieldValue == "0")
									bErrorFound = true;
							}
							break;
						case "RADIO_LIST":
						case "RADIO_LIST_WIDE":
							if (sValType == "required")
							{
								var rdoOther = document.getElementById("rdoOther-" + sFieldID);
								var rdoNoneAbove = document.getElementById("rdoNoneAbove-" + sFieldID);
								var oAnswers = new Array();
								var oInputs = document.getElementsByTagName("input");
								for (var j = 0; j < oInputs.length; j++)
								{
									if (oInputs[j].id.substr(0, sFieldID.length) == sFieldID)
										oAnswers.push(oInputs[j]);
								}
								var bAnswerChecked = false;
								if (oAnswers.length > 0)
								{
									oFocusField = oAnswers[0];
									for (var j = 0; j < oAnswers.length; j++)
									{
										if (oAnswers[j].checked)
										{
											bAnswerChecked = true;
											break;
										}
									}
								}
								if (rdoNoneAbove)
									if (rdoNoneAbove.checked)
										bAnswerChecked = true;
								if (rdoOther)
									if (rdoOther.checked)
										bAnswerChecked = true;
								if (!bAnswerChecked)
									bErrorFound = true;
							}
							break;
						case "TEXT_THREELINE":
							oFocusField = document.getElementById(sFieldID);
							var sFieldValue = trim(oFocusField.value);
							var sPart2 = trim(document.getElementById(sFieldID + "-2").value);
							var sPart3 = trim(document.getElementById(sFieldID + "-3").value);
							if (sPart2 != "")
							{
								if (sFieldValue != "")
									sFieldValue += ", ";
								sFieldValue += sPart2;
							}
							if (sPart3 != "")
							{
								if (sFieldValue != "")
									sFieldValue += ", ";
								sFieldValue += sPart3;
							}
							bErrorFound = !(DynamicForm_ValidateText(sValType, sFieldValue, sValCode, sValRegEx));
							break;
						case "CHECKBOX_LIST":
						case "CHECKBOX_LIST_WIDE":
							if (sValType == "required")
							{
								var chkOther = document.getElementById("chkOther-" + sFieldID);
								var chkNoneAbove = document.getElementById("chkNoneAbove-" + sFieldID);
								var oAnswers = new Array();
								var oInputs = document.getElementsByTagName("input");
								for (var j = 0; j < oInputs.length; j++)
								{
									if (oInputs[j].id.substr(0, sFieldID.length) == sFieldID)
										oAnswers.push(oInputs[j]);
								}
								var bAnswerChecked = false;
								if (oAnswers.length > 0)
								{
									oFocusField = oAnswers[0];
									for (var j = 0; j < oAnswers.length; j++)
									{
										if (oAnswers[j].checked)
										{
											bAnswerChecked = true;
											break;
										}
									}
								}
								if (chkNoneAbove)
									if (chkNoneAbove.checked)
										bAnswerChecked = true;
								if (chkOther)
									if (chkOther.checked)
										bAnswerChecked = true;
								if (!bAnswerChecked)
									bErrorFound = true;
							}
							break;
						case "CHECKBOX_SINGLE":
							if (sValType == "required")
							{
								oFocusField = document.getElementById(sFieldID);
								if (!oFocusField.checked)
									bErrorFound = true;
							}
							break;
					}
					break;
			}

			if (bErrorFound)
			{
				if (sUseGenError == "1")
				{
					// generic errors are always used for "others" because their custom required/invalid error might be out of date because the rest of the question is not required
					switch (sValType)
					{
						case "other-required":					
						case "required":
							alert(sGenErrorRequired + " " + sLocName);
							break;
						case "invalid":
							alert(sGenErrorInvalid + " " + sLocName);
							break;
						case "other-invalidtext":
						case "invalidtext":
							alert(sGenErrorInvalidText + " " + sLocName);
							break;
			            case "invalidfile":
			                alert(sGenErrorInvalidFile + " " + sLocName);
			                break;
					}
				}
				else
				{
					alert(sCustomError);
				}
				oFocusField.focus();
				return false;
				break;
			}
		}
	}
	// done with all validation without returning false
	var oSubmitButton = document.getElementById("btnSubmit-FL" + FormLocalID);
	oSubmitButton.disabled = true;
	return true;
}

//-----------------------------------------
function DynamicForm_ValidateText(sValType, sFieldValue, sValCode, sValRegEx)
{
	switch (sValType)
	{
		case "other-required":
		case "required":
			if (trim(sFieldValue) == "")
				return false;
			break;
		case "invalid":
			var sFilter;
			switch (sValCode)
			{
				case "EMAIL":
					sFilter = /^([a-zA-Z0-9_\.\-+])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
					break;
				case "PHONE":
					sFilter = /^.*\d.*\d.*\d.*\d.*\d.*$/;
					break;
				case "CUSTOM":
					sFilter = new RegExp(sValRegEx);
					break;
			}
			if (trim(sFieldValue) != "" && !sFilter.test(sFieldValue))
				return false;
			break;
		case "other-invalidtext":
		case "invalidtext":
			if (ContainsHTML(sFieldValue))
				return false;
			break;
	}
	return true;
}

//-----------------------------------------
function DynamicForm_ValidateFile(sFieldValue) {
    
    if (trim(sFieldValue) != "") {
    
        var iLastDotIndex = sFieldValue.lastIndexOf('.');
        var sExtension = "";
        if (iLastDotIndex > 0) {
            sExtension = sFieldValue.substring(iLastDotIndex + 1, sFieldValue.length).toLowerCase();
        }
        else {
            return false; // no extension
        }
        var hdnAcceptedFileExtensions = document.getElementById("hdnAcceptedFileExtensions");
        var aAcceptedFileExtensions = hdnAcceptedFileExtensions.value.split(",");
        var bFoundExtension = false;
        for (var i = 0; i < aAcceptedFileExtensions.length; i++) {
            if (aAcceptedFileExtensions[i].toLowerCase() == sExtension.toLowerCase()) {
                bFoundExtension = true;
                break;
            }
        }
        return bFoundExtension;
    }
    else {
        return true;
    }
}				
//-----------------------------------------
function DynamicForm_PivotQuestion_OnChange(ddlPivot)
{
	var sSelectedPivotID = ddlPivot.options[ddlPivot.selectedIndex].value;
	
	var aTableRows = document.getElementsByTagName("TR");
	for (var i = 0; i < aTableRows.length; i++)
	{
		var sPivotID = aTableRows[i].getAttribute("pivotID");
		if (sPivotID != null)
		{
			if (sPivotID != "0")
			{
				if (sPivotID == sSelectedPivotID)
					aTableRows[i].style.display = "";
				else
					aTableRows[i].style.display = "none";
			}
		}	
	}
}

//-----------------------------------------
function DynamicForm_Dropdown_OnChange(FormLocalID, FormQuestionID, RowPivotAnswerID, Focus)
{
	var ddlDropdown = document.getElementById("question-FL" + FormLocalID + "Q" + FormQuestionID + "P" + RowPivotAnswerID);
	var sValue = ddlDropdown.options[ddlDropdown.selectedIndex].value;
	var divOther = document.getElementById("divOther-FL" + FormLocalID + "Q" + FormQuestionID + "P" + RowPivotAnswerID);
	if (divOther)
	{
		if (sValue == "-1")
		{
			divOther.style.display = "";
			if (Focus)
				document.getElementById("txtOther-question-FL" + FormLocalID + "Q" + FormQuestionID + "P" + RowPivotAnswerID).focus();
		}
		else
		{
			divOther.style.display = "none";
		}
	}
}

//-----------------------------------------
function DynamicForm_OtherCheckbox_OnClick(FormLocalID, FormQuestionID, RowPivotAnswerID, Focus)
{
	var chkOther = document.getElementById("chkOther-question-FL" + FormLocalID + "Q" + FormQuestionID + "P" + RowPivotAnswerID);
	var trOtherPrompt = document.getElementById("trOtherPrompt-FL" + FormLocalID + "Q" + FormQuestionID + "P" + RowPivotAnswerID);
	var trOtherInput = document.getElementById("trOtherInput-FL" + FormLocalID + "Q" + FormQuestionID + "P" + RowPivotAnswerID);
	if (chkOther.checked)
	{
		trOtherPrompt.style.display = "";
		trOtherInput.style.display = "";
		if (Focus)
			document.getElementById("txtOther-question-FL" + FormLocalID + "Q" + FormQuestionID + "P" + RowPivotAnswerID).focus();
	}
	else
	{
		trOtherPrompt.style.display = "none";
		trOtherInput.style.display = "none";
	}
}

//-----------------------------------------
function DynamicForm_OtherRadio_OnClick(FormLocalID, FormQuestionID, RowPivotAnswerID, Focus)
{
	var trOtherPrompt = document.getElementById("trOtherPrompt-FL" + FormLocalID + "Q" + FormQuestionID + "P" + RowPivotAnswerID);
	var trOtherInput = document.getElementById("trOtherInput-FL" + FormLocalID + "Q" + FormQuestionID + "P" + RowPivotAnswerID);
	trOtherPrompt.style.display = "";
	trOtherInput.style.display = "";
	if (Focus)
		document.getElementById("txtOther-question-FL" + FormLocalID + "Q" + FormQuestionID + "P" + RowPivotAnswerID).focus();
}

//-----------------------------------------
function DynamicForm_Radio_OnClick(FormLocalID, FormQuestionID, RowPivotAnswerID)
{
	var trOtherPrompt = document.getElementById("trOtherPrompt-FL" + FormLocalID + "Q" + FormQuestionID + "P" + RowPivotAnswerID);
	var trOtherInput = document.getElementById("trOtherInput-FL" + FormLocalID + "Q" + FormQuestionID + "P" + RowPivotAnswerID);
	if (trOtherPrompt)
		trOtherPrompt.style.display = "none";
	if (trOtherInput)
		trOtherInput.style.display = "none";
}