/*************************/
/*Inbouwen Postcode check*/
/*CHO 14-12-2006		 */
/*************************/

/*
UI aanpassingen:
In UI opnemen script AjaxPostcodeCheck. 
Zet verwijzing in User Component ctrlHtmlTop.ascx naar javascript.

XML aanpassingen:
Pas volgorder adres velden aan:
	Postcode; Huisnummer; Huisnummer Toevoeging; Straat; Plaats; Land
Neem 3 hidden field op voor Straat; Plaats en Land
Aanpasen submit button. Maak er gewone button van en op het onClick event aanroepen van de function
CheckDataOnSubmit()
Let op gebruik ClearFieldGroups als er Fieldgroups in het form staan!!

Opnemen scripts onderdeel:

	<scripts>
		<![CDATA[
		
			// Script om de adresgegevens op te halen.
			GetValuesOnLoad();
			
			function BepaalFormName()
			{
				return "BasisVerzekeringPolisaanvraag";
			}	
		]]>	
	</scripts>

View aanpassingen:
Zet onBlur events op huisnummer, deze staan in functions van BaseComponents
Voor VP_HUISNR gebruik ZetOnBlurEventVP.
Voor VZ_HUISNR gebruik ZetOnBlurEvent.
Voor afwijkende naam huisnr gebruik ZetOnBlurEventAfwijkendeVelden.

*/

function AjaxVelden()
{
	this.veldPostcode;
	this.veldHuisnummer;
	this.veldAdres;
	this.veldPlaats;
	this.veldLand;
	
	this.veldHTMLAdres;
	this.veldHTMLPlaats;
	this.veldHTMLLand;
	
	this.attributeNameAdres;
	this.attributeNamePlaats;
	this.attributeNameLand;
}

function AjaxPostcodeCheck()
{
	myVelden = new AjaxVelden();
	
	this.getAdres = function(objectPrefix, index, afwijkendeVeldNamen)
	{
		zetInnerValues(myVelden, objectPrefix, index, afwijkendeVeldNamen);
		
		if(inputVeldAanwezig(myVelden.veldHTMLAdres))
		{
			var postcode = getObjectValue(myVelden.veldPostcode);
			var huisnummer = getObjectValue(myVelden.veldHuisnummer);
				
			showLoaders(myVelden);
					
			if(postcode.length >= 6 && huisnummer.length > 0)
			{
				nl.Turien.Ajax.AjaxPostcodeCheck.GetAdres(postcode, huisnummer, this.getAdres_CallBack);
			}
			else
			{
				rollbackAdresGegevens(myVelden);		
				hideLoaders(myVelden);
			}
		}
	}
	
	this.getAdres_Synchroon = function(objectPrefix, index, afwijkendeVeldNamen)
	{
		zetInnerValues(myVelden, objectPrefix, index, afwijkendeVeldNamen);
					
		if(inputVeldAanwezig(myVelden.veldHTMLAdres))
		{
			var postcode = getObjectValue(myVelden.veldPostcode);
			var huisnummer = getObjectValue(myVelden.veldHuisnummer);
					
			if(postcode != "" && huisnummer != "") 
			{
				result = nl.Turien.Ajax.AjaxPostcodeCheck.GetAdres(postcode, huisnummer);	

				if(result.value != null)	
				{
					zetWaarden(myVelden, result);
				}
			}
		}		
	}
	
	this.getAdres_CallBack = function(result)
	{
		if(result.value == null || result.value == "Vul a.u.b. alleen cijfers in bij het huisnummer.")
		{
			if(result.value == null)
				alert('Er zijn geen gegevens aangetroffen voor de opgegeven adresgegevens.');
			else
				alert(result.value);
				
			rollbackAdresGegevens(myVelden);
			hideLoaders(myVelden);
			return;
		}	
		if(!inputVeldAanwezig(myVelden.veldPlaats)) 
		{
			rollbackAdresGegevens(myVelden);
		}
		
		zetWaarden(myVelden, result);
		hideLoaders(myVelden);			
	}	
}

function rollbackAdresGegevens(myVelden)
{	
	if(inputVeldAanwezig(myVelden.attributeNameAdres))
	{
		document.getElementById(myVelden.attributeNameAdres).value	= getObjectValue(myVelden.veldHTMLAdres);
		document.getElementById(myVelden.attributeNameAdres).className = 'GrayBackground';
		document.getElementById(myVelden.attributeNameAdres).readOnly = false;
		
		document.getElementById(myVelden.attributeNamePlaats).value	= getObjectValue(myVelden.veldHTMLPlaats);
		document.getElementById(myVelden.attributeNamePlaats).className = 'GrayBackground';
		document.getElementById(myVelden.attributeNamePlaats).readOnly = false;
		
		if (myVelden.veldLand != "geen_land_veld")
		{
			document.getElementById(myVelden.attributeNameLand).value	= getObjectValue(myVelden.veldHTMLLand);
			document.getElementById(myVelden.attributeNameLand).className = 'GrayBackground';
			document.getElementById(myVelden.attributeNameLand).readOnly = false;
		}
	}
}

function zetInnerValues(myVelden, objectPrefix, index, afwijkendeVeldNamen)
{
	if(objectPrefix == 'VP')
	{
		myVelden.veldPostcode	= objectPrefix + "_PCODE";
		myVelden.veldHuisnummer = objectPrefix + "_HUISNR";
		myVelden.veldAdres		= objectPrefix + "_STRAAT";
		myVelden.veldPlaats		= objectPrefix + "_PLAATS";
		myVelden.veldLand		= objectPrefix + "_LAND";
		
		myVelden.veldHTMLAdres	= "innerHTML_" + objectPrefix + "_Straat";
		myVelden.veldHTMLPlaats = "innerHTML_" + objectPrefix + "_Plaats";
		myVelden.veldHTMLLand	= "innerHTML_" + objectPrefix + "_Land";
	}
	else if(objectPrefix == 'VZ'|| objectPrefix == 'BS')
	{
		myVelden.veldPostcode	= objectPrefix + "_PCODE___" + index;
		myVelden.veldHuisnummer	= objectPrefix + "_HUISNR___" + index;
		myVelden.veldAdres		= objectPrefix + "_STRAAT___" + index;
		myVelden.veldPlaats		= objectPrefix + "_PLAATS___" + index;
		myVelden.veldLand		= objectPrefix + "_LAND___" + index;
		
		myVelden.veldHTMLAdres	= "innerHTML_" + objectPrefix + "_Straat___" + index;
		myVelden.veldHTMLPlaats = "innerHTML_" + objectPrefix + "_Plaats___" + index;
		myVelden.veldHTMLLand	= "innerHTML_" + objectPrefix + "_Land___" + index;
	}
	else
	{
		myVelden.veldPostcode	= afwijkendeVeldNamen[0];
		myVelden.veldHuisnummer = afwijkendeVeldNamen[1];
		myVelden.veldAdres		= afwijkendeVeldNamen[2];
		myVelden.veldPlaats		= afwijkendeVeldNamen[3];
		myVelden.veldLand		= afwijkendeVeldNamen[4];
		
		myVelden.veldHTMLAdres	= "innerHTML_" + afwijkendeVeldNamen[2];
		myVelden.veldHTMLPlaats = "innerHTML_" + afwijkendeVeldNamen[3];
		myVelden.veldHTMLLand	= "innerHTML_" + afwijkendeVeldNamen[4];
	}
	
	myVelden.attributeNameAdres		= myVelden.veldAdres;
	myVelden.attributeNamePlaats	= myVelden.veldPlaats;
	myVelden.attributeNameLand		= myVelden.veldLand;
}

function zetAttributes(myVelden)
{
	if(!inputVeldAanwezig(myVelden.attributeNameAdres))
	{
		document.getElementById(myVelden.veldAdres).parentNode.attributes['id'].value	= myVelden.attributeNameAdres;	
		document.getElementById(myVelden.veldPlaats).parentNode.attributes['id'].value	= myVelden.attributeNamePlaats;
		if (myVelden.veldLand != "geen_land_veld")
		{
			document.getElementById(myVelden.veldLand).parentNode.attributes['id'].value	= myVelden.attributeNameLand;
		}
	}
}
	

function zetWaarden(myVelden, result)
{
	waarden = result.value.split(",");
	
	//zetAttributes(myVelden);
	//zetInnerHTML(myVelden, waarden);

	if(inputVeldAanwezig(myVelden.attributeNameAdres))
	{
		document.getElementById(myVelden.attributeNameAdres).value = waarden[0];
		document.getElementById(myVelden.attributeNameAdres).className = 'readonlyTextbox';
		document.getElementById(myVelden.attributeNameAdres).readOnly=true;;
		
		document.getElementById(myVelden.attributeNamePlaats).value = waarden[1];
		document.getElementById(myVelden.attributeNamePlaats).className = 'readonlyTextbox';
		document.getElementById(myVelden.attributeNamePlaats).readOnly=true;
		
		if (myVelden.veldLand != "geen_land_veld")
		{
			document.getElementById(myVelden.attributeNameLand).value = waarden[2];
			document.getElementById(myVelden.attributeNameLand).className = 'readonlyTextbox';
			document.getElementById(myVelden.attributeNameLand).readOnly=true;
		}
	}
}

function zetInnerHTML(myVelden, waarden)
{
	if(inputVeldAanwezig(myVelden.veldAdres))
	{
		
		document.getElementById(myVelden.veldAdres).value			= waarden[0];
		document.getElementById(myVelden.veldHTMLAdres).value		= document.getElementById(myVelden.veldAdres).parentNode.innerHTML;
				
		document.getElementById(myVelden.veldPlaats).value			= waarden[1];
		document.getElementById(myVelden.veldHTMLPlaats).value		= document.getElementById(myVelden.veldPlaats).parentNode.innerHTML;
			
		if (myVelden.veldLand != "geen_land_veld")
		{
			/* Deze check is om een ander type landen tabel in Turien werkgeversportaal te kunnen gebruiken */
			if (document.getElementById(myVelden.veldLand).value != parseInt(document.getElementById(myVelden.veldLand).value)) {
				document.getElementById(myVelden.veldLand).value = "NL";
			}
			document.getElementById(myVelden.veldHTMLLand).value		= document.getElementById(myVelden.veldLand).parentNode.innerHTML;
		}
	}
}

function inputVeldAanwezig(veldNaam)
{
	return document.getElementById(veldNaam) != null ? true : false;
}

function getObjectValue(veldNaam)
{
	if(document.getElementById(veldNaam) != null)
		return document.getElementById(veldNaam).value;
}

function rollBackOnSubmit(myVelden)
{
	if(!inputVeldAanwezig(myVelden.veldAdres) && inputVeldAanwezig(myVelden.veldHTMLAdres))
	{
		document.getElementById(myVelden.attributeNameAdres).innerHTML	= getObjectValue(myVelden.veldHTMLAdres);
		document.getElementById(myVelden.attributeNamePlaats).innerHTML	= getObjectValue(myVelden.veldHTMLPlaats);
		if (myVelden.veldLand != "geen_land_veld")
		{
			document.getElementById(myVelden.attributeNameLand).innerHTML	= getObjectValue(myVelden.veldHTMLLand);
		}
	}
	
	var teller = 1;
	veldNaamZelfdeAdres = 'vz_zelfdeadres___' + teller;
	while(inputVeldAanwezig(veldNaamZelfdeAdres))
	{
		if(getCheckedValue(document.getElementsByName(veldNaamZelfdeAdres)) != "J" && getCheckedValue(document.getElementsByName(veldNaamZelfdeAdres)) != "")
		{
			rollBackDynamicField('VZ', myVelden, teller);
		}
		teller++;
		veldNaamZelfdeAdres = 'vz_zelfdeadres___' + teller;			
	}

	if(inputVeldAanwezig('st_verzn_is_rb___1'))
	{
		if (getCheckedValue(document.getElementById('st_verzn_is_rb___1')) !="J" && getCheckedValue(document.getElementById('st_verzn_is_rb___1')) !="")
		{
			teller = 1; 
			rollBackDynamicField('BS', myVelden, teller);
		}
	}
	if(inputVeldAanwezig('st_tweede_rb___2'))
	{
		if (getCheckedValue(document.getElementById('st_tweede_rb___2')) =="J")
		{
			teller = 2; 
			rollBackDynamicField('BS', myVelden, teller);
		}	
	}
}	

function rollBackDynamicField(objectPrefix, myVelden, teller)
{
		
		var veldnaaminputstraat = objectPrefix + '_STRAAT___' + teller;
		if(!inputVeldAanwezig(veldnaaminputstraat))
		{
			veldNaamHTMLStraat	= 'innerHTML_' + objectPrefix + '_STRAAT___' + teller;
			veldNaamHTMLPlaats	= 'innerHTML_' + objectPrefix + '_PLAATS___' + teller;
			if (myVelden.veldLand != "geen_land_veld")
			{
				veldNaamHTMLLand	= 'innerHTML_' + objectPrefix + '_LAND___' + teller;
			}
			
			attributeStraat		= 'TD_' + objectPrefix + '_STRAAT___' + teller;
			attributePlaats		= 'TD_' + objectPrefix + '_PLAATS___' + teller;
			if (myVelden.veldLand != "geen_land_veld")
			{
				attributeLand		= 'TD_' + objectPrefix + '_LAND___' + teller;
			}
			
			document.getElementById(attributeStraat).innerHTML	= getObjectValue(veldNaamHTMLStraat);
			document.getElementById(attributePlaats).innerHTML	= getObjectValue(veldNaamHTMLPlaats);
			if (myVelden.veldLand != "geen_land_veld")
			{
				document.getElementById(attributeLand).innerHTML	= getObjectValue(veldNaamHTMLLand);
			}
		}
}

function GetValuesOnLoad(veldenArray)
{
	myCheck = new AjaxPostcodeCheck();

	if(veldenArray != null)
	{
		myCheck.getAdres_Synchroon(null, null, veldenArray);
	}
	else if(document.getElementById('VP_PCODE') != null)
	{
		myCheck.getAdres_Synchroon('VP', null, null);
	}
	
	var tellerVZ = 1;
	veldNaamZelfdeAdres = 'vz_zelfdeadres___' + tellerVZ;
	while(document.getElementById(veldNaamZelfdeAdres) != null)
	{
		if(getCheckedValue(document.getElementsByName(veldNaamZelfdeAdres)) != "J" )
		{
			myCheck.getAdres_Synchroon('VZ', tellerVZ);
		}		
						
		tellerVZ++;
		veldNaamZelfdeAdres = 'vz_zelfdeadres___' + tellerVZ;
	}

	if(inputVeldAanwezig('st_verzn_is_rb___1'))
	{
		if (getCheckedValue(document.getElementById('st_verzn_is_rb___1')) !="J")
		{
			myCheck.getAdres_Synchroon('BS', '1');
		}
	}
	
	if(inputVeldAanwezig('st_tweede_rb___2'))
	{
		if (getCheckedValue(document.getElementById('st_tweede_rb___2')) =="J")
		{
			myCheck.getAdres_Synchroon('BS', '2');
		}
	}
}

function CheckDataOnSubmit(VeldenArray)
{
	var correct = true;
	var wrongFields = '';
	myVelden = new AjaxVelden();
	
	if(VeldenArray != null)
	{
		zetInnerValues(myVelden, null, null, VeldenArray);
		
	}
	else
	{
		zetInnerValues(myVelden, 'VP', null, null);
	}
	
	if(!inputVeldAanwezig(myVelden.veldAdres) && inputVeldAanwezig(myVelden.veldPostcode))
	{
	
		var postcode = getObjectValue(myVelden.veldPostcode);
		var straat = document.getElementById(myVelden.attributeNameAdres).innerHTML;
		
		var result = nl.Turien.Ajax.AjaxPostcodeCheck.checkPostcodeStraat(postcode, straat);
		
		if(result.value)
		{
			correct = true;
		}
		else
		{	
			correct = false;
			wrongFields += 'Postcode verzekeringnemer\n';
		}
	}
	
	//if(correct)
	//{
	var teller = 1;
	var veldNaamZelfdeAdres = 'vz_zelfdeadres___' + teller;
	
	while(inputVeldAanwezig(veldNaamZelfdeAdres))
	{
		if(getCheckedValue(document.getElementsByName(veldNaamZelfdeAdres)) != "J" && getCheckedValue(document.getElementsByName(veldNaamZelfdeAdres)) != "")
		{
			CheckDataOnSubmitDynamic('VZ', teller, correct, wrongFields);			
		}
		teller++;	
		veldNaamZelfdeAdres = 'vz_zelfdeadres___' + teller;	
	}
	if(inputVeldAanwezig('st_verzn_is_rb___1'))
	{
		if (getCheckedValue(document.getElementById('st_verzn_is_rb___1')) != "J" && getCheckedValue(document.getElementById('st_verzn_is_rb___1')) != "")
		{
			
			CheckDataOnSubmitDynamic('BS', '1', correct, wrongFields);
		}
	}
	if(inputVeldAanwezig('st_tweede_rb___2'))
	{
		if (getCheckedValue(document.getElementById('st_tweede_rb___2')) == "J")
		{
			CheckDataOnSubmitDynamic('BS', '2', correct, wrongFields);
		}			
	}
	//}
	
	if(correct)
	{
		
		rollBackOnSubmit(myVelden);
		document.forms[BepaalFormName()].submit();
	}	
	else
	{
		alert('De opgegeven postcode komt niet overeen met de straat die bekend is in ons systeem. Corrigeer dit a.u.b. voor de volgende velden:\n' + wrongFields);
	}
}

function CheckDataOnSubmitDynamic(objectPrefix, teller, correct, wrongFields)
{
	var inputStraat = objectPrefix + '_STRAAT___' + teller;
	if(!inputVeldAanwezig(inputStraat))
	{
		var inputPCODE = objectPrefix + '_PCODE___' + teller;
		var TDinput_straat = 'TD_' + objectPrefix + '_STRAAT___' + teller;
							
		var postcode = getObjectValue(inputPCODE);
		var straat = document.getElementById(TDinput_straat).innerHTML;
		
		var result = nl.Turien.Ajax.AjaxPostcodeCheck.checkPostcodeStraat(postcode, straat);
							
		if(result.value)
		{
			correct = true;
		}
		else if (objectPrefix =='VZ')
		{
			correct = false;
			wrongFields += 'Postcode Verzekerde ' + teller + '\n';
		}
		else
		{
			correct = false;
			wrongFields += 'Postcode regelmatige bestuurder ' + teller + '\n';
		}
	}
}
function showLoaders(myVelden)
{
	if(validateHeaderAction(myVelden.veldPostcode))
	{
		showAjaxLoader(myVelden.veldPostcode);
	}
	
	if(validateHeaderAction(myVelden.veldHuisnummer))
	{
		showAjaxLoader(myVelden.veldHuisnummer);
	}
}

function hideLoaders(myVelden)
{
	if(validateHeaderAction(myVelden.veldPostcode))
	{
		hideAjaxLoader(myVelden.veldPostcode);		
	}
	
	if(validateHeaderAction(myVelden.veldHuisnummer))
	{
		hideAjaxLoader(myVelden.veldHuisnummer);
	}
}

function validateHeaderAction(veldnaam)
{
	if(inputVeldAanwezig(veldnaam))
	{
		if(document.getElementById(veldnaam).type != "hidden")
		{
			return true;
		}
	}

	return false;
}

function getAdresByPostcode(objectPrefix, index, VeldenArray)
{
	myCheck = new AjaxPostcodeCheck();
	myCheck.getAdres(objectPrefix, index, VeldenArray);
}

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) {}
}


