// ** AJAX Implementatie **
function AjaxInput(inputName, inputType, addDefaultOption)
{
	this.inputName = inputName;
	this.hiddenInputName = inputName + "_HIDDEN";
	this.inputType = inputType;
	this.addDefaultOption = addDefaultOption;
}

function AjaxOutput(outputName, outputType, outputValue, outputDescription, persistOptions, escapeHidden)
{
	this.outputName			= outputName;
	this.outputValue		= outputValue;
	this.outputType			= outputType;
	this.outputDescription	= outputDescription;
	this.persistOptions		= persistOptions;
	this.escapeHidden		= escapeHidden;
}

function generateFieldHTML(outputType, outputName, telexstate)
{
	sHTML = '<' + outputType + ' ';
	var elemAttributes = selectNodes(telexstate, "//attributes[@field='" + outputName + "']/attribute")

	for(i=0; i<elemAttributes.length; i++) {
		var name = elemAttributes[i].getAttribute("name");
		var value = elemAttributes[i].getAttribute("value");
		sHTML += name + '="' + value + '" ';
	}
	
	sHTML += '></' + outputType + '>';

	return(sHTML);
}

function checkBouwjaar(bouwjaar) 
{
	if (bouwjaar == null || bouwjaar == "") 
	{
		alert('U heeft geen bouwjaar opgegeven.');
		return false;
	}
	else if (isNaN(bouwjaar)) 
	{
		alert('U heeft een ongeldig bouwjaar opgegeven.');
		return false;	
	}

	return true;
}

function checkBouwmaand(bouwmaand) 
{
	if (bouwmaand == null || bouwmaand == "") 
	{
		alert('U heeft geen bouwmaand opgegeven.');
		return false;
	}
	return true;
}

function vulDropdown2d(formName, fieldName, options)
{
	var field = document.forms[formName].elements[fieldName];
	field.length = 1;

	for (var i=0; i < options.length; i++) 
	{
		var elOptNew = document.createElement('option');
		elOptNew.value = options[i][0];
		elOptNew.text = options[i][1];		

		var elOptOld = field.options[i+1]; 

		try {
			field.add(elOptNew, elOptOld);
		}
		catch(ex) {
			field.add(elOptNew, i+1);
		}
	}
}

function vulDropdown(formName, fieldName, options)
{
	var field = document.forms[formName].elements[fieldName];
	field.length = 1;

	for (var i=0; i < options.length; i++) 
	{
		var elOptNew = document.createElement('option');
		elOptNew.text = options[i];
		elOptNew.value = options[i];

		var elOptOld = field.options[i+1]; 

		try {
			field.add(elOptNew, elOptOld);
		}
		catch(ex) {
			field.add(elOptNew, i+1);
		}
	}
}

function RestoreBeveiliging(formName, fieldName, stateFieldName) 
{
	var telexvalue = document.forms[formName].elements[stateFieldName].value.replace('&quot;', '"');
	var telexstate = loadXml(telexvalue);
	var rootObj = telexstate.documentElement;

	var inputObject = document.forms[formName].elements[fieldName];
	
	inputObject.length = 0;
	
	// Afvragen of het telexstate veld leeg is.
	if (document.forms[formName].elements["telexstate"].value != "<fieldAttributes></fieldAttributes>") 
	{
		if(selectNodes(telexstate, "//options[@field='" + fieldName + "']/option").length != 0)
		{
			var elemOptions = selectNodes(telexstate, "//options[@field='" + fieldName + "']/option")
			
			for(var j = 0; j < elemOptions.length; j++)
			{
				var name = elemOptions[j].getAttribute("name");
				var value = elemOptions[j].getAttribute("value");
				
				var oOption = new Option("", value);
				inputObject.appendChild(oOption);
				oOption.appendChild(document.createTextNode(name));
			}
					
		}
	}
}

function showAjaxLoader(veldnaam)
{
	try {
		var veld	   = document.getElementById(veldnaam);
		var veldParent = veld.parentNode;					

		veldParent.innerHTML += " <img name='ajax-preloader' src='" + commonDir + "images/ajax-loader.gif' />";
	}
	catch(e) {}
}

function hideAjaxLoader(veldnaam)
{
	try
	{
		var veld		= document.getElementById(veldnaam);
		var veldParent	= veld.parentNode;

		veldParent.removeChild(document.getElementById("ajax-preloader"));
	}
	catch(e) {}
}

function ajaxFunctions(formName)
{
	this.ajaxOphalenAutoGegevensOpKenteken = function(fieldName)
	{
		var field = document.getElementById(fieldName);
		var kenteken = field.value;
		var url = GetAutoTelexUrl(formName);
		
		if (isKenteken(kenteken) && kenteken != "")
		{
			showAjaxLoader("OB_KENTEKE");

			nl.Turien.Ajax.AutoTelex.OphalenAutoGegevensOpKenteken(url, kenteken, this.ophalenAutoGegevensOpKenteken_CallBack);
		} 
		else 
		{
			alert('U heeft een ongeldig kenteken ingegeven.');
		}
	}
	
	this.ophalenAutoGegevensOpKenteken_CallBack = function(response)
	{
		if (response.error != null)
		{
			hideAjaxLoader("OB_KENTEKE");
			alert("Er is een fout opgetreden bij het ophalen van autogegevens.");
			return;
		}
		
		var autogegevens = response.value;
		
		if (autogegevens == null || typeof(autogegevens) != "object")
		{
			hideAjaxLoader("OB_KENTEKE");
			alert("Er is geen voertuig gevonden op basis van het ingevoerde kenteken.");
			return;
		}

		var Maanden = ["Januari", "Februari", "Maart", "April", "Mei", "Juni", "Juli", "Augustus", "September", "Oktober", "November", "December"];
		
		// Voor de standaard velden de waardes zetten.			
		var AjaxOutputs = new Array();
		AjaxOutputs[0]  = new AjaxOutput("st_autotelexkey", "hidden", autogegevens[0]);
		AjaxOutputs[1]  = new AjaxOutput("OB_BOUWJR",  "readonly", autogegevens[1], autogegevens[1]);
		AjaxOutputs[2]  = new AjaxOutput("OB_BOUWMND", "readonly", autogegevens[2], Maanden[autogegevens[2]-1], true);
		AjaxOutputs[3]  = new AjaxOutput("OB_AFMWE", "readonly", autogegevens[3], autogegevens[3]);
		AjaxOutputs[4]  = new AjaxOutput("ob_totaalbedrag_voertuig", "input", autogegevens[4], autogegevens[4]);
		AjaxOutputs[5]  = new AjaxOutput("OB_VWACA", "readonly", autogegevens[5], autogegevens[5]);
		AjaxOutputs[6]  = new AjaxOutput("OB_MERK", "readonly", autogegevens[6], autogegevens[6], true);
		AjaxOutputs[7]  = new AjaxOutput("OB_MODEL", "readonly", autogegevens[7], autogegevens[7]);
		AjaxOutputs[8]  = new AjaxOutput("OB_TYPE", "readonly", autogegevens[0], autogegevens[8]);
		AjaxOutputs[9]  = new AjaxOutput("OB_UITVOMS", "readonly", autogegevens[9], autogegevens[9]);
		AjaxOutputs[10] = new AjaxOutput("OB_KENTEKE", "readonly", autogegevens[11], autogegevens[11]);
		//AjaxOutputs[11] = new AjaxOutput("ob_alarmeis", "readonly", autogegevens[12], autogegevens[12], false , true);
		AjaxOutputs[11] = new AjaxOutput("ob_alarmeis", "hidden", autogegevens[10]);
		AjaxOutputs[12] = new AjaxOutput("ob_alarmeis_toelichting", "readonly", autogegevens[13], autogegevens[13], false , true);
		
		
		SetAjaxOutput(formName, "telexstate", AjaxOutputs);
		
		// Het beveiligingsveld moet apart worden afgehandeld, alle alarmen onder de minimum waarde moeten worden verwijderd.
		SetBevKlasse(formName, "OB_TNOKLAS", autogegevens[10], "telexstate");
		
		hideAjaxLoader("OB_KENTEKE");
	}
	
	this.ajaxOphalenAutoGegevens = function(sType, bouwjaar, bouwmaand)
	{
		var typeid   = document.forms[formName].elements[sType].value;
		var bouwjr   = document.forms[formName].elements[bouwjaar].value;
		var bouwmnd  = document.forms[formName].elements[bouwmaand].value;
		var url = GetAutoTelexUrl(formName);
	
		// leegmaken van het Uitvoeringen veld
		document.forms[formName].elements["OB_UITVOMS"].length = 1;

		nl.Turien.Ajax.AutoTelex.OphalenAutoGegevens(url, typeid, bouwjr, bouwmnd, this.ophalenAutoGegevens_CallBack);
	}

	this.ophalenAutoGegevens_CallBack = function(response)
	{
		if (response.error != null)
		{
			alert("Er is een fout opgetreden bij het ophalen van de auto gegevens.");
			return;
		}

		var autogegevens = response.value;

		if (autogegevens == null || typeof(autogegevens) != "object")
		{
			alert("Er zijn geen autogegevens gevonden op basis van het ingevoerde merk, model, type, bouwjaar en bouwmaand.");
			return;
		}
		
		var Maanden = ["Januari", "Februari", "Maart", "April", "Mei", "Juni", "Juli", "Augustus", "September", "Oktober", "November", "December"];
		
		// Voor de standaard velden de waardes zetten.			
		var AjaxOutputs = new Array();
		AjaxOutputs[0] =  new AjaxOutput("OB_BOUWJR",  "readonly", autogegevens[0], autogegevens[0]);
		AjaxOutputs[1] =  new AjaxOutput("OB_BOUWMND", "readonly", autogegevens[1], Maanden[autogegevens[1]-1], true);
		AjaxOutputs[2] =  new AjaxOutput("OB_AFMWE", "readonly", autogegevens[2], autogegevens[2]);
		AjaxOutputs[3] =  new AjaxOutput("OB_VWACA", "readonly", autogegevens[3], autogegevens[3]);
		AjaxOutputs[4] =  new AjaxOutput("OB_MERK", "readonly", autogegevens[4], autogegevens[4], true);
		AjaxOutputs[5] =  new AjaxOutput("OB_MODEL", "readonly", autogegevens[5], autogegevens[5]);
		AjaxOutputs[6] =  new AjaxOutput("OB_TYPE", "readonly", autogegevens[9], autogegevens[6]);
		AjaxOutputs[7] =  new AjaxOutput("OB_UITVOMS", "readonly", autogegevens[7], autogegevens[7]);
		AjaxOutputs[8] =  new AjaxOutput("st_autotelexkey", "hidden", autogegevens[9]);
		// AjaxOutputs[9] =  new AjaxOutput("ob_alarmeis", "readonly", autogegevens[10], autogegevens[10], false, true);
		AjaxOutputs[9] = new AjaxOutput("ob_alarmeis", "hidden", autogegevens[8]);
		AjaxOutputs[10] = new AjaxOutput("ob_alarmeis_toelichting", "readonly", autogegevens[11], autogegevens[11], false, true);
		AjaxOutputs[11] =  new AjaxOutput("ob_totaalbedrag_voertuig", "input", autogegevens[3], autogegevens[3]);
				
		SetAjaxOutput(formName, "telexstate", AjaxOutputs);
		
		// Het beveiligingsveld moet apart worden afgehandeld, alle alarmen onder de minimum waarde moeten worden verwijderd.
		if (FieldExistsInHTML("OB_TNOKLAS"))
		{
			SetBevKlasse(formName, "OB_TNOKLAS", autogegevens[8], "telexstate");
		}
	}
	
	this.ajaxOphalenTypes = function(merk, model, bouwjaar, bouwmaand)
	{
		var merkid   = document.forms[formName].elements[merk].value;
		var modelid  = document.forms[formName].elements[model].value;
		var bouwjr   = document.forms[formName].elements[bouwjaar].value;
		var bouwmnd  = document.forms[formName].elements[bouwmaand].value;
		var url = GetAutoTelexUrl(formName);
	
		// leegmaken van het types veld
		document.forms[formName].elements["OB_TYPE"].length = 1;

		showAjaxLoader("OB_TYPE");

		nl.Turien.Ajax.AutoTelex.OphalenTypes(url, merkid, modelid, bouwjr, bouwmnd, this.ophalenTypes_CallBack);
	}

	this.ophalenTypes_CallBack = function(response)
	{
		if (response.error != null)
		{
			hideAjaxLoader("OB_TYPE");
			alert("Er is een fout opgetreden bij het ophalen van de types.");
			return;
		}

		var types = response.value;

		if (types == null || typeof(types) != "object")
		{
			hideAjaxLoader("OB_TYPE");
			alert("Er zijn geen types gevonden op basis van het ingevoerde merk, model, bouwjaar en bouwmaand.");
			return;
		}

		vulDropdown2d(formName, "OB_TYPE", types);
		
		hideAjaxLoader("OB_TYPE");
	}

	this.ajaxOphalenModellen = function(merk, bouwjaar, bouwmaand)
	{
		var bouwjr  = document.forms[formName].elements[bouwjaar].value;
		var bouwmnd = document.forms[formName].elements[bouwmaand].value;
		var merkid  = document.forms[formName].elements[merk].value;
		var url = GetAutoTelexUrl(formName);
	
		// leegmaken van het model en types veld
		document.forms[formName].elements["OB_MODEL"].length = 1;
		document.forms[formName].elements["OB_TYPE"].length = 1;

		if (!checkBouwmaand(bouwmnd) || !checkBouwjaar(bouwjr)) 
		{
			document.getElementById(merk).value = '';
			return;
		}
		
		showAjaxLoader("OB_MODEL");
		
		nl.Turien.Ajax.AutoTelex.OphalenModellen(url, merkid, bouwjr, bouwmnd, this.ophalenModellen_CallBack);
	}

	this.ophalenModellen_CallBack = function(response)
	{
		if (response.error != null)
		{
			hideAjaxLoader("OB_MODEL");
			alert("Er is een fout opgetreden bij het ophalen van modellen.");
			return;
		}
		
		var modellen = response.value;
		
		if (modellen == null || typeof(modellen) != "object")
		{
			hideAjaxLoader("OB_MODEL");
			alert("Er zijn geen modellen gevonden op basis van het ingevoerde merk, bouwjaar en bouwmaand.");
			return;
		}
		
		vulDropdown(formName, "OB_MODEL", modellen);
		
		hideAjaxLoader("OB_MODEL");
	}

	this.herstelFormulierVelden = function() 
	{
		var AjaxInputs = new Array();
		
		AjaxInputs[0]  = new AjaxInput("st_autotelexkey", "hidden");
		AjaxInputs[1]  = new AjaxInput("OB_BOUWJR", "input");
		AjaxInputs[2]  = new AjaxInput("OB_BOUWMND", "select");
		AjaxInputs[3]  = new AjaxInput("OB_AFMWE", "input");
		AjaxInputs[4]  = new AjaxInput("ob_totaalbedrag_voertuig", "input");
		AjaxInputs[5]  = new AjaxInput("OB_VWACA", "input");
		AjaxInputs[6]  = new AjaxInput("OB_MERK", "select");
		AjaxInputs[7]  = new AjaxInput("OB_MODEL", "select", true);
		AjaxInputs[8]  = new AjaxInput("OB_TYPE", "select", true);
		AjaxInputs[9]  = new AjaxInput("OB_UITVOMS", "select", true);
		AjaxInputs[10] = new AjaxInput("ob_alarmeis", "hiddenatlocation");
		AjaxInputs[11] = new AjaxInput("ob_alarmeis_toelichting", "hiddenatlocation");
		AjaxInputs[12] = new AjaxInput("OB_KENTEKE", "input");
		
		if (FieldExistsInHTML("OB_TNOKLAS"))
		{
			if(document.forms[formName].OB_TNOKLAS != null)
			{
				RestoreBeveiliging(formName, "OB_TNOKLAS", "telexstate");
			}
		}
		
		RestoreForm(formName, "telexstate", AjaxInputs);
	}
}

function SetAjaxOutput(formName, stateFieldName, outputs)
{
	var telexvalue = document.forms[formName].elements[stateFieldName].value.replace('&quot;', '"');
	var telexstate = loadXml(telexvalue);
	
	for(var i = 0; i < outputs.length; i++)
	{
		var outputName  = outputs[i].outputName;
		
		if(FieldExistsInHTML(outputName))
		{
			var outputType  = outputs[i].outputType;
			var outputValue = outputs[i].outputValue;
			var outputDescription = outputs[i].outputDescription;
			var persistOptions = outputs[i].persistOptions;
			var escapeHidden = outputs[i].escapeHidden;
			
			if(outputs[i].outputValue == null)
			{
				outputs[i].outputValue = "";
			}
			
			// Type van de node bepalen
			var nodeType = document.forms[formName].elements[outputName].nodeName;
			
			// Attributen toevoegen aan de telex state.
			var rootObj = telexstate.documentElement;
			var elemAttributes = TelexStateAddAttributes(formName, outputName, stateFieldName);

			if (nodeType == "SELECT") 
			{
				if (persistOptions) {
					// Bij een dropdown de options opslaan in de telex state als dit is aangegeven.
					var elemOptions = TelexStateAddOptions(formName, outputName, stateFieldName);
					
					if (elemOptions != null) rootObj.appendChild(elemOptions);
				}
			}
				
			if (elemAttributes != null) rootObj.appendChild(elemAttributes);
			
			if(document.forms[formName].elements[outputName].type != "hidden")
			{
				// Bepalen wat er met de output gedaan moet worden (veld readonly zetten, of alleen waarde zetten)
				if (outputType == "input") 
				{
					document.forms[formName].elements[outputName].value = outputValue; 
				} 
				else
				{
					if(outputDescription)
					{
						if(outputDescription != "")
						{
							var parentNode = document.forms[formName].elements[outputName].parentNode;					

							parentNode.innerHTML = outputDescription;
							parentNode.innerHTML += '<input type="hidden" name="' + outputName + '_HIDDEN" value="' + outputValue + '"/>';
						}
						else
						{
							document.forms[formName].elements[outputName].parentNode.innerHTML = outputValue;
						}
					}
					else
					{
						document.forms[formName].elements[outputName].value = outputValue;
					}
				}
			}
			else if (escapeHidden)
			{
				var parentNode = document.forms[formName].elements[outputName].parentNode;
				parentNode.innerHTML = outputValue;
				parentNode.innerHTML += '<input type="hidden" name="' + outputName + '_HIDDEN" value="' + outputValue + '"/>';
			}
			else
			{
				document.forms[formName].elements[outputName].value = outputValue;
			}
		}
	}
	
	document.forms[formName].elements[stateFieldName].value = telexstate.xml;
	
	HideTelexLink();
	ShowVoertuigGegevens();
	
	// dumpTelexState(telexstate.xml, formName);
}

function RestoreForm(formName, stateFieldName, inputs)
{
	var telexvalue = document.forms[formName].elements[stateFieldName].value.replace('&quot;', '"');
	var telexstate = loadXml(telexvalue);

	for(var i = 0; i < inputs.length; i++)
	{
		var inputName = inputs[i].inputName;
		
		//alert("input: " + inputName + " in HTML?: " + FieldExistsInHTML(inputName) + " In Telex?: " + FieldExistsInTelexState(inputName, telexstate));
		
		if(FieldExistsInHTML(inputName) && FieldExistsInTelexState(inputName, telexstate))
		{
			var inputType		 = inputs[i].inputType;
			var hiddenInputName  = inputs[i].hiddenInputName;
			var addDefaultOption = inputs[i].addDefaultOption;
			
			try
			{
				switch(inputType)
				{	
					case "input" :
						// deze afvraging is nodig voor als je van hidden inputs de value gaat vervangen terwijl de inputType "input" is
						// parentNode is dan <form>, dus alles wat onder <form> hangt wordt vervangen door 1 input.
						
						if(document.forms[formName].elements[hiddenInputName].parentNode.tagName == "FORM") 
						{
							var found = false;
							for(k=0; k<document.getElementsByName(hiddenInputName).length; k++) 
							{
								if(document.getElementsByName(hiddenInputName)[k].tagName == "SPAN") {

									var oChild = document.forms[formName].elements[hiddenInputName];

									document.getElementsByName(hiddenInputName)[k].parentNode.innerHTML = generateFieldHTML(inputType, inputName, telexstate);

									document.forms[formName].removeChild(oChild);
									found = true;
								}
							}
							if(!found)
							{
								document.forms[formName].elements[inputName].value = "";
							}
						} 
						else
						{
							document.forms[formName].elements[hiddenInputName].parentNode.innerHTML = generateFieldHTML(inputType, inputName, telexstate);
						}
						break;
					
					case "hiddenatlocation":
						document.forms[formName].elements[hiddenInputName].parentNode.innerHTML = generateFieldHTML("input", inputName, telexstate);
						break;
						
					case "hidden" :
						document.forms[formName].elements[inputName].value = "";
						break;

					case "select" :
						// deze afvraging is nodig voor als je van hidden inputs de value gaat vervangen terwijl de inputType "input" is
						// parentNode is dan <form>, dus alles wat onder <form> hangt wordt vervangen door 1 input.
						if (document.forms[formName].elements[inputName] != null) 
						{
							if(document.forms[formName].elements[inputName].parentNode.tagName == "FORM") 
							{
								document.forms[formName].removeChild(document.forms[formName].elements[inputName]);
							}
						}

						if(document.forms[formName].elements[hiddenInputName].parentNode.tagName == "FORM") 
						{
							document.forms[formName].removeChild(document.forms[formName].elements[hiddenInputName]);
							for(k=0; k<document.getElementsByName(InputName).length; k++) 
							{
								if(document.getElementsByName(inputName)[k].tagName == "SPAN") 
								{
									document.getElementsByName(inputName)[k].parentNode.innerHTML = generateFieldHTML(inputType, inputName, telexstate);
									inputObject = document.getElementsByName(inputName)[k];
								}
							}
						}
						else 
						{
							document.forms[formName].elements[hiddenInputName].parentNode.innerHTML = generateFieldHTML(inputType, inputName, telexstate);
							inputObject = document.forms[formName].elements[inputName];
						}

						if(selectNodes(telexstate, "//options[@field='" + inputName + "']/option").length != 0)
						{
							var elemOptions = selectNodes(telexstate, "//options[@field='" + inputName + "']/option")
							
							for(var j = 0; j < elemOptions.length; j++)
							{
								var name = elemOptions[j].getAttribute("name");
								var value = elemOptions[j].getAttribute("value");
								
								var oOption = new Option("", value);
								inputObject.appendChild(oOption);
								oOption.appendChild(document.createTextNode(name));
							}
						} 
						else if (addDefaultOption != null && addDefaultOption == true) 
						{
							// Default optie toevoegen aan het veld:
							var oOption = new Option("", "");
							inputObject.appendChild(oOption);
							oOption.appendChild(document.createTextNode("Maak hier uw keuze"));
						}
						break;

					case "radio":
						break;
				}
			}
			catch(e)
			{
			//	alert(e.message);
			}
		}
	}
	
	document.forms[formName].elements[stateFieldName].value = "<fieldAttributes></fieldAttributes>";
	// dumpTelexState(telexstate.xml, formName);
	
	ShowTelexLink();
}

function SetBevKlasse(formName, outputName, outputValue, stateFieldName)
{
	if (FieldExistsInHTML(outputName))
	{
		// Dropdown options van de beveiligingsklasse opslaan in de telex state
		var telexstate = loadXml(document.forms[formName].elements[stateFieldName].value);
		var rootObj = telexstate.documentElement;
		var elemOptions = TelexStateAddOptions(formName, outputName, stateFieldName);
		var elemAttributes = TelexStateAddAttributes(formName, outputName, stateFieldName);

		if (elemOptions != null) rootObj.appendChild(elemOptions);
		if (elemAttributes != null) rootObj.appendChild(elemAttributes);
		
		// Op basis van de outputValue van auto telex (minimum beveiligingsklasse), de dropdown options beperken.
		if (outputValue != null && outputValue != "") 
		{
			var options = document.forms[formName].elements[outputName].options;
			var found = false;

			for(var j = options.length - 1;j >= 1; j--)
			{
				opt = options[j];
				
				if(opt.value == null) 
				{
					value = '';
				} 
				else 
				{
					value = opt.value;
				}

				if (found == true)
				{
					document.forms[formName].elements[outputName].remove(j);
				} 
				
				if (value == outputValue)
				{
					found = true;
				}
			}
		}
		
		document.forms[formName].elements[stateFieldName].value = telexstate.xml;
	}
}

function TelexStateAddAttributes(formName, outputName, stateFieldName) 
{
	var elemAttributes;
	var telexvalue = document.forms[formName].elements[stateFieldName].value.replace('&quot;', '"');
	var telexstate = loadXml(telexvalue);

	// als xml nodelist met attributes nog niet aangemaakt is
	if(selectNodes(telexstate, "//attributes[@field='" + outputName + "']").length == 0)
	{
		//Input toevoegen aan xml object
		elemAttributes = telexstate.createElement("attributes");
		elemAttributes.setAttribute("field", outputName)

		var attributes = document.forms[formName].elements[outputName].attributes;

		for(var j = 0;j < attributes.length; j++)
		{
			attr = attributes[j];
			if(attr.specified)
			{
				if(attr.nodeValue == null) value = '';
				else value = attr.nodeValue;
				
				var elemAttribute = telexstate.createElement("attribute");
				elemAttribute.setAttribute("name", attr.nodeName);
				elemAttribute.setAttribute("value", value);
				
				elemAttributes.appendChild(elemAttribute);
			}
		}
	}
	
	return elemAttributes;
}

function TelexStateAddOptions(formName, outputName, stateFieldName) 
{
	var elemOptions;
	var telexvalue = document.forms[formName].elements[stateFieldName].value.replace('&quot;', '"');
	var telexstate = loadXml(telexvalue);

	// als xml nodelist met options nog niet aangemaakt is
	if(selectNodes(telexstate, "//options[@field='" + outputName + "']").length == 0)
	{
		//Input toevoegen aan xml object
		elemOptions = telexstate.createElement("options");
		elemOptions.setAttribute("field", outputName)

		var options = document.forms[formName].elements[outputName].options;

		for(var j = 0;j < options.length; j++)
		{
			opt = options[j];
			
			if(opt.value == null) 
			{
				value = '';
			} 
			else 
			{
				value = opt.value;
			}
			
			var elemOption = telexstate.createElement("option");
			elemOption.setAttribute("name", opt.innerText);
			elemOption.setAttribute("value", value);

			elemOptions.appendChild(elemOption);
		}
	}
	
	return elemOptions;
}

function ShowVoertuigGegevens()
{
	if (FieldExistsInHTML('st_voertuiggegevens'))
	{
		document.forms[bepaalFormnaam()].elements['st_voertuiggegevens'].value = "1";

		ShowAdditionalFields('KentekenGegevens', 'collapse');
		ShowAdditionalFields('VoertuigGegevens', 'expand');
			
		ClearFieldGroups('VoertuigGegevens');
	}
}

function HideTelexLink() 
{
	if (FieldExistsInHTML('st_rdw_opvragen_tekst'))
		document.getElementById('st_rdw_opvragen_tekst').innerHTML = "";
	
	if (FieldExistsInHTML('st_rdw_wissen_tekst'))	
		document.getElementById('st_rdw_wissen_tekst').innerHTML = bepaalRDWWissenTekst();
	
}

function ShowTelexLink() 
{
	if (FieldExistsInHTML('st_rdw_opvragen_tekst'))
		document.getElementById('st_rdw_opvragen_tekst').innerHTML = bepaalRDWOphalenTekst();
	
	if (FieldExistsInHTML('st_rdw_wissen_tekst'))	
		document.getElementById('st_rdw_wissen_tekst').innerHTML = "";		
	
}

function dumpTelexState(xml, formName)
{
	if (FieldExistsInHTML("input_telexstate"))
	{
		document.forms[formName].elements["input_telexstate"].value = xml;
	}
}

function FieldExistsInHTML(fieldName)
{
	if (!isNull(document.getElementById(fieldName)) || !isNull(document.getElementById(fieldName + '_HIDDEN')))
	{
		return true;
	}
	else
	{
		return false;
	}
}

function FieldExistsInTelexState(fieldName, telexstate)
{
	if (selectNodes(telexstate, "//attributes[@field='" + fieldName + "']").length > 0)
	{
		return true;
	}
	else
	{
		return false;
	}
}

function GetAutoTelexUrl(formName)
{
	if (document.forms[formName].elements["st_autotelexurl"] != null)
		return document.forms[formName].elements["st_autotelexurl"].value;
		
	return "";
}

