//======================================================
//=== General Functions used by the WebformGenerator ===
//======================================================
function getAllInputFields(aoParentNode, asarrInputFieldID) {
	var loarrChildNodes = aoParentNode.childNodes;
	for (var i=0; i < loarrChildNodes.length; i++ ) {
		var loElementsChildren = loarrChildNodes[i].childNodes;
		if (isInputField(loarrChildNodes[i].type)){
			asarrInputFieldID[asarrInputFieldID.length] = loarrChildNodes[i].id;
		} else if (loElementsChildren.length > 0) {
			getAllInputFields(loarrChildNodes[i], asarrInputFieldID)
		}
	}
	return asarrInputFieldID;
}

//This function checks the type of an HTML-element and determines if the fieldtype belongs to an input-field
function isInputField(asType) {
	var lbRecognized = false;
	switch(asType){
		case "hidden": {lbRecognized = true; break}
		case "text": {lbRecognized = true; break}
		case "select-one": {lbRecognized = true; break}
		case "radio": {lbRecognized = true; break}
		case "textarea": {lbRecognized = true; break}
		case "checkbox": {lbRecognized = true; break}
		default: {break}
	}
	return lbRecognized
}


function getErrorBoxes() { //Needs two vars to be declared outside this function:  gsarrFieldID & gsarrErrorBox.
	var i;
	var lsPrefix;
	var lsLastErrorBox;
	var lsLastFieldSet;
	gsarrFieldID = new Array();
	gsarrErrorBox = new Array();
	gsarrFieldSets = new Array();
	gsarrLabels = new Array();
	for (i=0;i<=gsarrFormItems.length-1;i++) {
		lsPrefix = gsarrFormItems[i].substring(0,2);
		if (lsPrefix == "Fi") { //FieldSet
			lsLastFieldSet = gsarrFormItems[i];
		}
		else if (lsPrefix == "Er") { //ErrorBox
			lsLastErrorBox = gsarrFormItems[i]
		}
		else if ((lsPrefix == "ed") || (lsPrefix == "rb") || (lsPrefix == "sb") || (lsPrefix == "cb")) { //TextField, RadioButtons, SelectBox or CheckBox(es).
			gsarrFieldID[gsarrFieldID.length] = gsarrFormItems[i];
			gsarrErrorBox[gsarrErrorBox.length] = lsLastErrorBox;
			gsarrFieldSets[gsarrFieldSets.length] = lsLastFieldSet;
			gsarrLabels[gsarrLabels.length] = gsarrFormLabels[i];
		}
	}
}

function addMarketingData(aoObj, asMarketingPixels) {
	if(asMarketingPixels != "") {
		var i;
		var loEl;
		var lsarrPixels = asMarketingPixels.split("#NEXT#");
		for (i=0;i<=lsarrPixels.length-1;i++) {
			loEl = document.createElement("IFRAME");
			loEl.src = lsarrPixels[i];
			loEl.width = 0;
			loEl.height = 0;
			loEl.border = 0;
			loEl.frameBorder = 0;
			aoObj.appendChild(loEl);
		}
	}
}

function hideByClass(asarrItems, asClass) {
	var i;
	var loObj;
	for (i=0;i<=asarrItems.length-1;i++) {
		try {
			loObj = document.getElementById(asarrItems[i]);
			if (loObj.className == asClass) {
				loObj.style.display = "none";
			}
		} catch (e) {}
	}
}

function dsbClickEventPre(aoSender) {
	swapEmailField("PRE",aoSender)
}

function dsbClickEventPost(aoSender) {
	swapEmailField("POST",aoSender)
}

function StartForm() {
	gsOriginalErrorBoxContent = document.getElementById("ErrorBoxAlgemeen").innerHTML;
	gsarrFormItems = document.getElementById("allElementID").innerHTML.split("#NEXT#");
	gsarrFormLabels = document.getElementById("allElementLabel").innerHTML.split("#NEXT#");
}

function getHandleFormURL() {
	var lsFileName = "handleform.aspx";
	var lsCurrentURL = window.location.href;
	if (lsCurrentURL.indexOf("://localhost:") != -1) {
		return lsFileName;
    }
    else {
		return "/webservices/request/" + lsFileName;
	}
}

//==========================================================
//=== End General Functiosn used by the WebformGenerator ===
//==========================================================

//========================
//=== Begin validation ===
//========================
function sendFormData(aoButton) {
    aoButton.disabled = true;
	getErrorBoxes();
	resetErrorState();

	//If server does not respond within 20000ms, display errormessage and re-enable submit-button. -> Casper changed to 600000 because of bug...
	var k = setTimeout('handleServerTimeOut("Server timeout")',600000);
	var lbIsTabbedForm = false;
		
	if (document.getElementById("divTab1")){
		lbIsTabbedForm = true;
		var loCurrentTab = findParentTabDiv(aoButton);
		var liTabNr = parseInt(loCurrentTab.id.replace("divTab", ""));
		var lsarrInputFieldID = validateInputFields(aoButton);
		var lbIsLastTab = goGENFUNC.existsInArray(lsarrInputFieldID, "edLastTab");
		if (lbIsLastTab){
			document.getElementById("edLastTab").value = "submit form";
		}
	}
	
	goAsyncHTTP.httpRequest(getHandleFormURL(), getElementsAndValues(), setResponse);

	function setResponse(aoHTTPXML) {
		var loMainTitle = document.getElementById("mainTitle");
		var loMainText = document.getElementById("mainText");
		var loErrorBox;
		
		try	{
		eval(aoHTTPXML.responseText);
		} catch (e) {
			handleBadResponse("Server response could not be evaluated (unvalid JavaScript-code).\r\n\r\n" + aoHTTPXML.responseText);
		}

		if (lsErrorFields != "") {
			var lsarrEnhancedFields = lsEnhancedFields.split("#NEXT#");
			var lsarrEnhancedTexts = lsEnhancedTexts.split("#NEXT#");

			if (lbIsTabbedForm) {
				var lsarrErrorIndex = getErrorIndexes(lsErrorFields, lsarrInputFieldID);
				var lbTabIsErrorFree = false; //Used to store  if errors exist, to set errortext in document.
				
				if (lsarrErrorIndex.length > 0) {
					// Errorfields were found in current Tab
					var lsarrErrorFields = makeNewArrayFromSelection(lsErrorFields.split("#NEXT#"), lsarrErrorIndex);
					var lsarrErrorTexts = makeNewArrayFromSelection(lsErrorTexts.split("#NEXT#"), lsarrErrorIndex);

					handleErrorFields(lsarrErrorFields, lsarrErrorTexts);

				} else {
					// All fields in current tab are valid but this form still contains error fields --> goto next tab
					var lsNextTab = "divTab" + (liTabNr + 1);
					document.getElementById(loCurrentTab.id).style.display = "none";
					document.getElementById(lsNextTab).style.display = "block";
					lbTabIsErrorFree = true;
				}
			} else {
				var lsarrErrorFields = lsErrorFields.split("#NEXT#");
				var lsarrErrorTexts = lsErrorTexts.split("#NEXT#");

				handleErrorFields(lsarrErrorFields, lsarrErrorTexts);
			}
			
			//Loop through enhancedfields
			for (i=0;i<=lsarrEnhancedFields.length-1;i++) {
				if (lsarrEnhancedFields[i] != "") {
					document.getElementById(lsarrEnhancedFields[i]).value = lsarrEnhancedTexts[i];
				}
			}
		
			//If errors exist, set the mainErrorText
			try {
				if ((lbIsTabbedForm && !lbTabIsErrorFree) | !lbIsTabbedForm){
				loMainText.className = "error";
				loMainText.innerHTML = lsMainErrorText;
				window.scrollTo(0,goDOM.findPos(loMainText)[1]-100)
				} else {
					loMainText.innerHTML = "";
				}
			} catch (e) {}
		}
		else if (lsSummaryFields != "") {
			// Tijdelijke melding naar de gebruiker --> permanente oplossing wordt aan gewerkt
			var lsWebpageName = document.getElementById("hidWebpageName").value;
			var lsFormName = document.getElementById("hidFormName").value;
			var lbSavings = false;
			switch(lsWebpageName){
				case "inetsparenextra_aanvraagformulier": {lbSavings = true; break}
				case "dsbbank_vaste_termijn_deposito": {lbSavings = true; break}
				case "dsbbank_zakelijk_sparen": {lbSavings = true; break}
				case "dsbbank_zakelijk_deposito_sparen": {lbSavings = true; break}
				default: {break}
			}
            try {
				loMainText.className = "";
				if (lsFormName.substring(0,18) == "Contact_Uitgebreid"){
					loMainTitle.innerHTML = "Bedankt voor uw verzoek";
					loMainText.innerHTML = "Bedankt, uw verzoek is goed ontvangen. Wij nemen zo spoedig mogelijk contact met u op. Hieronder ziet u een samenvatting van de door u ingevulde gegevens.";
				} else if (lsWebpageName == "zilvervloot_aanvraagformulier") {
					loMainTitle.innerHTML = "Bedankt voor uw aanvraag<div class=\"snelPrinten\"><a href=\"javascript:window.print()\">Print deze pagina</a></div>";
					loMainText.innerHTML = "Bedankt, uw aanvraag is goed ontvangen. Hieronder ziet u een samenvatting van de door u ingevulde gegevens.";
				} else {
					if (lbSavings == true) {
						loMainTitle.innerHTML = "Bedankt voor uw aanvraag";
						loMainText.innerHTML = "Bedankt, uw aanvraag is goed ontvangen. Wegens de enorme vraag naar (internet)spaarrekeningen kan het helaas <u>enkele dagen</u> duren voordat wij contact met u kunnen opnemen. Onze excuses voor deze vertraging. Hieronder ziet u een samenvatting van de door u ingevulde gegevens."
					} else {
						if (lsWebpageName == "dsbank_si_aanvraagformulier"){
							loMainTitle.innerHTML = "Zahvaljujemo se vam za vašo vlogo";
							loMainText.innerHTML = "Vloga je bila uspešno oddana.  Na e-mail naslov, ki ste ga vnesli, vam bomo poslali dokumente v roku enega delovnega dne.  V nadaljevanju lahko pregledate povzetek vnešenih podatkov.";
						} else {
							loMainTitle.innerHTML = "Bedankt voor uw aanvraag";
							loMainText.innerHTML = "Bedankt, uw aanvraag is goed ontvangen. Wij nemen zo spoedig mogelijk contact met u op. Hieronder ziet u een samenvatting van de door u ingevulde gegevens.";
						}
					}
				}
			} catch (e) {}
			addMarketingData(loMainText, lsMarketingPixels);

			// In case HandleForm gives no SummaryGroupTitles, pass an empty string to BuildSummaryPage
			var lsSummaryGroupTitlesLocal;
			if (typeof lsSummaryGroupTitles != "undefined") {
				lsSummaryGroupTitlesLocal = lsSummaryGroupTitles;
			} else {
				lsSummaryGroupTitlesLocal = "";
			}

			BuildSummaryPage(lsSummaryFields, lsSummaryTexts, lsSummaryGroupTitlesLocal, "frmDSBWebform")
		}
		else {
			//Error
			handleBadResponse("Server response did not contain any data (valid JavaScript-code).\r\n\r\n" + aoHTTPXML.responseText)
		}
		aoButton.disabled = false;
	}
	
	function handleErrorFields(asarrErrorFields, asarrErrorTexts) {
		var i;
		hideByClass(gsarrFormItems, "notes")
		//Loop through errorfields
		for (i=0;i<=asarrErrorFields.length-1;i++) {
			if (asarrErrorFields[i].substring(0,2) == "rb") {
				var i2;
				for (i2=0;i2<=10;i2++) {
					try {
						document.getElementById(asarrErrorFields[i] + "_" + i2).className = "error";
						document.getElementById("lbl" + asarrErrorFields[i] + "_" + i2).className = "error";
					} catch (e) {
						break;
					}
				}
			} else {
				try {
					document.getElementById(asarrErrorFields[i]).className = "error";
				} catch (e) {}
			}
				
				//Apply errorclass to label
			try {
				document.getElementById("lbl" + asarrErrorFields[i]).className = "error";
			} catch (e) {}
				
			//Place ErrorNotification in ErrorBox
			for (i2=0;i2<=gsarrFieldID.length-1;i2++) {
				if (gsarrFieldID[i2] == asarrErrorFields[i]) {
					loErrorBox = document.getElementById(gsarrErrorBox[i2]);
					loErrorBox.innerHTML = loErrorBox.innerHTML + "<h5>" + gsarrLabels[i2] + "</h5><p>" + asarrErrorTexts[i] + "</p>";
					loErrorBox.style.display = "inline";
				}
			}
		}
	}

	function BuildSummaryPage(asSummaryFields, asSummaryTexts, asSummaryGroupTitles, asTargetElement) {
		var lsarrSummaryFields = asSummaryFields.split("#NEXT#");
		var lsarrSummaryTexts = asSummaryTexts.split("#NEXT#");
		var lsarrSummaryGroupTitles = new Array();
		var i;
		var i2;
		var lbDivOpen = false;
		var lsString;
		var loForm = document.getElementById(asTargetElement);

		if (asSummaryGroupTitles != "") {
			lsarrSummaryGroupTitles = asSummaryGroupTitles.split("#NEXT#");
		} else { // Fill with dummy data:
			lsarrSummaryGroupTitles[0] = "De gegevens die u invulde"
			for (i=1; i<lsarrSummaryFields.length; i++) {
				lsarrSummaryGroupTitles[i] = "";
			}
		}

		lsString = "<fieldset class=\"SummaryFieldset\"><legend>Samenvatting</legend>";

		//Add summary-elements to fieldsets
		for (i=0;i<=lsarrSummaryFields.length-1;i++) {
			//Place SummaryItems in FieldSets
			for (i2=0;i2<=gsarrFieldID.length-1;i2++) {
				if (gsarrFieldID[i2] == lsarrSummaryFields[i]) {
					if (lsarrSummaryGroupTitles[i] != "") {
						if ( lbDivOpen ) { // before starting second group, close the first
							lsString += "</div>"
			            }
			            else {
							lbDivOpen = true;
						}
						lsString += "<h4 class=\"SummaryGroupHeading\">" +lsarrSummaryGroupTitles[i] + "</h4>"
						lsString += "<div class=\"SummaryGroup\">"
					}
					if (lsarrSummaryTexts[i] != "") {
						lsString += "<label for=" + gsarrFieldID[i2] + " id=lbl" + gsarrFieldID[i2] + ">" + gsarrLabels[i2] + "</label><span id=" + gsarrFieldID[i2] + ">" + lsarrSummaryTexts[i] + "</span><br>";
					}
				}
			}
		}
		lsString += "</div>"; // close the last group
		lsString += "</fieldset>";
		loForm.innerHTML = lsString;
		//window.scrollTo(0,0)
	}

	function resetErrorState() {
		var i;
		var i2;
		var loElement;
		var lsarrElements = new Array;
		lsarrElements = getAllInputFields(document.getElementById("frmDSBWebform"), lsarrElements);
		for(i=0;i<lsarrElements.length;i++) {
			loElement = document.getElementById(lsarrElements[i]);
			if (loElement.name.substring(0,2) == "rb") {
				for (i2=0;i2<=10;i2++) {
					try {
						document.getElementById(loElement.name + "_" + i2).className = "";
						document.getElementById("lbl" + loElement.name + "_" + i2).className = "";
					} catch (e) {
						break;
					}
				}
			}
			else {
				try {
					loElement = document.getElementById(loElement.name);
					if (loElement.className == "error") {
						loElement.className = "";
					}
				}
				catch (e) {}
			}
			try {
				document.getElementById("lbl" + loElement.name).className = "";
			} catch (e) {}
		}
		for (i=0;i<gsarrErrorBox.length;i++) {
			try {
				loElement = document.getElementById(gsarrErrorBox[i])
				loElement.innerHTML = gsOriginalErrorBoxContent;
				loElement.style.display = "none";
			}
			catch (e) {
				//Probably the current ErrorBox is not visible
			}
		}
		return true;
	}
}

//When the server does not respond quick enough, or the response is not valid, report error, display errormessage and reenable submit-button.
function handleServerTimeOut(asErrorMessage) {
	if (gsHttpStatus == "") {
		handleBadResponse(asErrorMessage)
	}
}

//If the server did not act as expected, report eror, and apply changes to userinterface.
function handleBadResponse(asErrorMessage) {
	// if we had a Httpstatus, we don't need to execute this code, the Submit button has already been enabled.
	goGENFUNC.handleError("WebformGeneratorJS", "sendFormData", "error", asErrorMessage);
	if (document.getElementById("ErrorBoxAlgemeen")) {
		document.getElementById("ErrorBoxAlgemeen").innerHTML="<H4>Er is een fout opgetreden bij het versturen van de data. Probeer opnieuw alstublieft.</H4>";
		document.getElementById("ErrorBoxAlgemeen").style.display=""
	}
	if (document.getElementById("btnSubmit")) {
		document.getElementById("btnSubmit").disabled = false
	}
	return
}
//======================
//=== End validation ===
//======================

//==============================================================================
// === Functions used to get all (sibling) form items ID's in a tabbed form ===
//==============================================================================

//Returns an array containing the ID's of all input-elements within the current DIV.
function validateInputFields(aoButton) {
	var lsarrInputFieldID = new Array;
	var loParentNode = findParentTabDiv(aoButton);
	lsarrInputFieldID = getAllInputFields(loParentNode, lsarrInputFieldID);
	lsarrInputFieldID = resolveRadioButtons(lsarrInputFieldID)
  
	//This routine gets an array with all input-elements within a div. Because a radiobutton has multiple id's (elements), 
	//this routine will return a new array where the multipe radio-elements are replaced for one element with the main-radiobutton-name.
	function resolveRadioButtons(asarrInputFieldID) {
		var lsarrInputFieldID = new Array;
		var lsPrefix;
		var lsRadioButtonID;
		for (var i=0; i<asarrInputFieldID.length; i++){
			lsPrefix = asarrInputFieldID[i].substring(0,2);
			if (lsPrefix == "rb"){
				lsRadioButtonID = document.getElementById(asarrInputFieldID[i]).name;
				if (!goGENFUNC.existsInArray(lsarrInputFieldID, lsRadioButtonID)){
					lsarrInputFieldID[lsarrInputFieldID.length] = lsRadioButtonID;
				}
			} else {
				lsarrInputFieldID[lsarrInputFieldID.length] = asarrInputFieldID[i];
			}
		}
		return lsarrInputFieldID;
	}

	return lsarrInputFieldID;
}

// Gets an array containing the indexes of the errorfields of the current DIV.
function getErrorIndexes(asErrorFields, asarrInputFieldID) {
	var lsarrErrorFields = asErrorFields.split("#NEXT#");
	var liarrErrorIndexes = new Array;
	for (var i=0; i<lsarrErrorFields.length; i++){
		for (var j=0; j<asarrInputFieldID.length; j++){
			if (lsarrErrorFields[i] == asarrInputFieldID[j]){
				liarrErrorIndexes[liarrErrorIndexes.length] = i;
			}
		}
	}
	return liarrErrorIndexes;
}

function findParentTabDiv(aoControl){
	var loParentNode = aoControl.parentNode;
	var lsParentID = loParentNode.id.substring(0,6);
	if (lsParentID != "divTab"){
		findParentTabDiv(loParentNode)
	} else {
		return loParentNode;
	}
}

// Creates a new array, and uses the aiarrIndexArray as a filter.
function makeNewArrayFromSelection(arrSourceArray, aiarrIndexArray){
	var larrTargetArray = new Array;
	for (var i=0; i<aiarrIndexArray.length; i++){
		larrTargetArray[larrTargetArray.length] = arrSourceArray[aiarrIndexArray[i]];
	}
	return larrTargetArray;
}
//===================================
// === End tabbed form functions ===
//===================================

//=============================================================================================================
//=== Exceptions in the form, show div MortgageDetails only when 2 objects have a specific value (UsableForms can't do this) ===
//=============================================================================================================
//Show/hide an extra fieldset with mortgagedetails in some situations
function toggleMortgageDetails() {
	//Get the value of LoanPurpose and HousingSituation in variables.
	var loLoanPurpose = document.getElementById("sbLoanPurpose");
	var loHousingSituation = document.getElementById("sbHousingSituation");
	var lsLoanPurpose = loLoanPurpose[loLoanPurpose.selectedIndex].getAttribute('rel');
	var lsHousingSituation = loHousingSituation[loHousingSituation.selectedIndex].getAttribute('rel');
	//If requestor needs a mortgage and already owns a house (probably has a mortgage already), show extra mortgage-field.
	if ((lsLoanPurpose == "LoanPurpose.Mortgage") && (lsHousingSituation == "HousingSituation.Own")) {
		document.getElementById("Hypotheekgegevens").style.display = "block";
	}
	else {
		document.getElementById("Hypotheekgegevens").style.display = "none";
	}
}

//Used for Extended_RequestForm (if user would like to receive contract by email).
function swapEmailField(asMode,aoSender) {
	var lbSwapForward = (aoSender.id == "rbContractPer_0")
	if ((aoSender.id == "rbContractPer_0") || (aoSender.id == "rbContractPer_1") || (aoSender.id == "lblrbContractPer_1")) {
		if ((!lbSwapForward) && (asMode == "PRE")) { //Swap emailfield from alternate position to original
			document.getElementById("edEmailAddress").value = document.getElementById("edEmailAddressContractPerEmail").value; //PRE
			document.getElementById("edEmailAddressContractPerEmail").value = '';
			document.getElementById("divEmailAddressNormal").style.display = "block"
		}
		else if ((lbSwapForward) && (asMode == "POST")) { //Swap emailfield from original position to alternate
			document.getElementById("edEmailAddressContractPerEmail").value = document.getElementById("edEmailAddress").value; //POST
			document.getElementById("edEmailAddress").value = '';
			document.getElementById("divEmailAddressNormal").style.display = "none"
		}
	}
}

//Used for Extended_Contactform (the exporttype depends on the kind of question the visitor chooses)
function setAppNameForExport(aoRequestType) {
	try {
		var loAppNameForExport = document.getElementById("hidApplicationNameForExport");
		var lsRequestType = aoRequestType[aoRequestType.selectedIndex].getAttribute('rel');
		switch(lsRequestType) {
			case "Loans.CallMeNow":
				loAppNameForExport.value = "SphinxCallMeLater";
				break;
			default:
				loAppNameForExport.value = "Email";
				break;
		}
	} catch(e) {}
}

//Used for PostDirectKrediet. Temporary.
function updateExplBox(bProduct) {
if (bProduct=="PL") {
	document.getElementById("ExplBoxAlgemeen").innerHTML = '<h4>Uitleg</h4><h5>Persoonlijke Lening</h5><p>Iedere maand betaalt u hetzelfde bedrag aan rente en aflossing. Bovendien bepaalt u vooraf de looptijd van uw lening. U weet daardoor exact wanneer u van uw lening af bent.</p>';
	}
else if (bProduct=="DK") {
	document.getElementById("ExplBoxAlgemeen").innerHTML = '<h4>Uitleg</h4><h5>Doorlopend Krediet</h5><p>U kunt steeds geld opnemen tot het kredietlimiet. Over het opgenomen bedrag betaalt u per maand rente en aflossing.</p><h5>Gewenste aflossing</h5><p>Het aflossingspercentage bepaalt de maandtermijn en bestaat uit rente en aflossing</p>';
	}
}

//Used to get variable texts asynchronously.
function getVariableFormProperty(asDivName,asParamName,asKey1,asKey2,asKey3,asKey4) {

	//Clear and hide all elements when this function is called.
	try {
		document.getElementById("divExplanation").style.display = "none";
	} catch (e) {}

	//Check paramters before making the async-callback.
	if((asDivName) && (asParamName) && (asKey1)) {
		var lsURL = "/webservices/calculations/webformgenerator_getvariableproperties.aspx?websitename="+document.getElementById("hidWebsiteName").value+"&webpagename="+document.getElementById("hidWebpageName").value+"&propertyname="+asParamName+"&key1="+asKey1+"&Key2="+asKey2+"&key3="+asKey3+"&Key4="+asKey4;
		goAsyncHTTP.httpRequest(lsURL, "", setResponse);
	}

	function setResponse(aoHTTPXML) {
		if (aoHTTPXML) {
			if (aoHTTPXML.responseText != null) {
				try {
					goDOM.setInnerHTML(asDivName,aoHTTPXML.responseText);
					if (aoHTTPXML.responseText != "") {
						document.getElementById("divExplanation").style.display = "";
					}
				}
				catch (e) {
				}
			}
		}
	}
}
//=====================================
//=== End mortgagedetails-exception ===
//=====================================

//=============================
//=== Fieldset highlighting ===
//=============================
function changeFieldSet(aoObj) {
	if (goFieldSet == null) {
		goFieldSet = getParentFieldSet(aoObj);
		doHighlight(goFieldSet);
	}
	else {
		var loNewParent = getParentFieldSet(aoObj);
		if (goFieldSet.id != loNewParent.id) {
			deHighlight(goFieldSet);
			goFieldSet = loNewParent;
			doHighlight(goFieldSet);
		}
	}
}

function getParentFieldSet(aoObj) {
	var lbLoop = true;
	var loObj = aoObj;
	while (lbLoop) {
		loObj = loObj.parentNode;
		if ((loObj.tagName != "DIV") && (loObj.id.substring(0,3) != "sub")) {
			lbLoop = false;
		}
	}
	return loObj;
}

function doHighlight(aoEl) {
	aoEl.className = "FieldSetHighlighted"
}
function deHighlight(aoEl) {
	aoEl.className = ""
}
//=================================
//=== End Fieldset highlighting ===
//=================================

var goFieldSet; //Used for FieldSetHighlighting
var gsarrFormItems;
var gsarrFormLabels;
var gsarrFieldID; //Used together with lsarrErrorBox to map FieldID's to an ErrorBox
var gsarrErrorBox;
var gsarrFieldSets;
var gsarrLabels;
var gsOriginalErrorBoxContent;
//goGENFUNC.addCustomEvent(window,"load",StartForm);
