/**********************************************************************************************
 *	Filename: postcodecheck_ajax.js
 *	Written by Dennis Coorn
 *    
 *	Met de onderstaande functies worden er voor gezorgd dat:
 *	- Na het invullen van de postcode cijfers verspringt naar de postcode letters
 *	- Als men de postcode letters weghaald met backspace de cursor verspringt naar postcode cijfers
 *	- Als de gehele postcode is ingevuld wordt er via AJAX een zoekopdracht opgestart om de straat
 *	  en plaats op te zoeken
 *	- Als er een foutieve postcode wordt ingevuld wordt er een melding gegeven in het TD veld met ID 'melding'
 *	- De zoek resultaten die terug komen (XML) worden verwerkt met de showResults() functie.
 *	- Als er meerdere straatnamen bekend bij een postcode wordt er een drop-down menu weer gegeven. Mocht
 *	  de straatnaam er alsnog niet bij staat dan kan er een adres worden toegevoegd d.m.v. het toevoegen van een
 *	  extra adres veld.
 *
 *	Het formulier moet in ieder geval de volgende items bevatten:
 *	- Het invul veld van de postcode moet in 2e zijn gedeeld (4 cijfers & 2 letters)
 *	- De zoekopdracht wordt geactiveerd door onKeyup='checkPostcode()'
 *	- Het invul veld van de straatnaam moet als ID 'straatnaam'
 *	- Het invul veld van de plaatsnaam moet als ID 'plaatsnaam'
 *	- Er moet een lege td met als ID 'melding' in staan, zodat er een foutmelding voor een foutieve postcode weer
 *	  gegeven kan worden.
 *
 *	LET OP:
 *	Het volgende 5 waardes moet na het invoegen van deze javascript worden gedefinieerd.
 *	pcCijferVeldNaam 	> Veldnaam van de postcode cijfers
 *	pcLetterVeldNaam 	> Veldnaam van de postcode letters 
 *	formfieldClassName 	> Class van het invoerveld (indien van toepassing)
 *	formfieldExtraAttribute 	> Extra attributen voor het invoerveld (bv: size)
 *	afterFormfield 		> Extra html code voor na het invoerveld (bv: &nbsp;)
 *		
 **********************************************************************************************/

if (document.getElementsByTagName && document.createElement) {
	var head = document.getElementsByTagName('head')[0];
	var script = document.createElement('script');
	script.setAttribute('type', 'text/javascript');
	script.setAttribute('src', 'http://www.clicks4sales.nl/~algemeen/functies/javascript/ajax.js');
	head.appendChild(script);
}

function returnKey(e){
	var code;
	if (!e) var e = window.event;
	if (e.keyCode) code = e.keyCode;
	else if (e.which) code = e.which;
	
	return code;
}

var lockAutotab = false;
function checkKey(e){
	if(returnKey(e)==9){ 
		lockAutotab=true; 
		window.setTimeout("lockAutotab=false;", 400); 
	}
}

function autotab(original,destination, e){
	if(!lockAutotab){
		if(returnKey(e)!=37 && returnKey(e)!=38 && (returnKey(e)!=39 || getCursor(original)==4) && returnKey(e)!=40){
			if (original.getAttribute&&original.value.length==original.getAttribute("maxlength")){ 
				destination.focus(); 
				setCursor(destination, 2);
			}
		}
	}
}

function returntab(original,destination, e){	
	if(returnKey(e)==8){
		if (original.getAttribute&&original.value.length==0){ 
			destination.focus(); 
			setCursor(destination, 4);
		}
	}else if(returnKey(e)==37 && getCursor(original)==0 && original.length!=0){
		destination.focus(); 
		setCursor(destination, 4);
	}
}

var check = 0;
function checkPostcode(formulier){
	var postcodeCijfer = formulier[pcCijferVeldNaam];
	var postcodeLetter = formulier[pcLetterVeldNaam];
	if(document.getElementById("melding")){ var melding = document.getElementById("melding"); }

	if(postcodeCijfer.value.length==4 && (postcodeLetter.value.length==2 || postcodeLetter.value=="-")){
		postcodeLetter.value = postcodeLetter.value.toUpperCase();
		if(postcodeCijfer.value.match(/^\d{4}$/) && (postcodeLetter.value.match(/^[A-Z]{2}$/) || postcodeLetter.value=="-")){
			if(document.getElementById("melding")){ melding.innerHTML = "&nbsp;"; }
			document.body.style.cursor = "progress";
			//document.write("/functions/postcodecheck_local.php?" + encodeURI('http://www.slegt.nl/~algemeen/functies/php/postcodecheck.php?wijkcode='+postcodeCijfer.value+'&lettercombinatie='+postcodeLetter.value));
			loadXMLDoc("/functions/postcodecheck_local.php?" + encodeURI('http://www.clicks4sales.nl/~algemeen/functies/php/postcodecheck.php?wijkcode='+postcodeCijfer.value+'&lettercombinatie='+postcodeLetter.value));
		}else{ if(document.getElementById("melding")){ melding.innerHTML = "Uw postcode is niet correct"; } }
	}else{ if(document.getElementById("melding")){ melding.innerHTML = "&nbsp;"; } }
}

function showResults(xmlData){
	document.body.style.cursor = "default";
	document.getElementById("straatnaam").className = formfieldClassName; 
	document.getElementById("plaatsnaam").className = formfieldClassName;
	
	if(document.getElementById("straatnaam").type=="select-one"){
		document.getElementById("straatnaam").parentNode.innerHTML = "<input id=\"straatnaam\" type=\"text\" name=\"adres_1\" readonly=\"readonly\" class=\""+formfieldClassName+" readonly\" '"+formfieldExtraAttribute+"' onkeyUp=\"saveStraatnaam(this.value);\">"+afterFormfield;
	}
	
	if(xmlData.getElementsByTagName("straatnaam").length>0){
		straatnamen = xmlData.getElementsByTagName("straatnaam");
		
		if(xmlData.getElementsByTagName("straatnaam").length>1){
			document.getElementById("straatnaam").parentNode.innerHTML = "<select id='straatnaam' class='"+formfieldClassName+"' name='adres_1' onchange='adresToevoegen(this.value); saveStraatnaam(this.value);'></select>"+afterFormfield;
			
			select = document.getElementById("straatnaam");
			for(var x=0; x<straatnamen.length; x++){
				select.options[x] = new Option(straatnamen[x].firstChild.data, straatnamen[x].firstChild.data, false, false);
			}
			select.options[x] = new Option("Anders", "Anders", false, false);
		}else{
			document.getElementById("straatnaam").value = straatnamen[0].firstChild.data; 
			document.getElementById("straatnaam").readOnly = true; 
			document.getElementById("straatnaam").className = "readonly "+formfieldClassName;
		}
	}else{ document.getElementById("straatnaam").parentNode.innerHTML = "<input id=\"straatnaam\" type=\"text\" name=\"adres_1\" class=\""+formfieldClassName+"\" '"+formfieldExtraAttribute+"' onkeyUp=\"saveStraatnaam(this.value);\">"+afterFormfield; }
	
	document.getElementById("straatnaam_hidden").value = document.getElementById("straatnaam").value;

	if(xmlData.getElementsByTagName("plaatsnaam").length>0){
		document.getElementById("plaatsnaam").value = xmlData.getElementsByTagName("plaatsnaam")[0].firstChild.data;
		document.getElementById("plaatsnaam").readOnly = true
		document.getElementById("plaatsnaam").className = "readonly "+formfieldClassName;
	}else{ 
		document.getElementById("plaatsnaam").value = "";
		document.getElementById("plaatsnaam").readOnly = false; 
		document.getElementById("plaatsnaam").className = formfieldClassName;
	}
	
	if(document.getElementById("gemeentenaam")){
		if(xmlData.getElementsByTagName("gemeentenaam").length>0){
			document.getElementById("gemeentenaam").value = xmlData.getElementsByTagName("gemeentenaam")[0].firstChild.data;
			document.getElementById("gemeentenaam").readOnly = true
			document.getElementById("gemeentenaam").className = "readonly "+formfieldClassName;
		}else{
			document.getElementById("gemeentenaam").value = "";
			document.getElementById("gemeentenaam").readOnly = false; 
			document.getElementById("gemeentenaam").className = formfieldClassName;
		}
	}
}

function createDropDown(straatnamen){
	select = document.getElementById("straatnaam");
	for(var x=0; x<straatnamen.length; x++){
		document.getElementById("straatnaam").options[x] = new Option(straatnamen[x].firstChild.data, straatnamen[x].firstChild.data, false, false);
	}
	document.getElementById("straatnaam").options[x] = new Option("Anders", "Anders", false, false);
}

var adres_toegevoegd = false;
function adresToevoegen(adresValue){
	var straatnaam = document.getElementById("straatnaam");
	
	if(adresValue=="Anders"){
		if(!(adres_toegevoegd)){
			adres_toegevoegd = true;
			straatnaam.name = "adres_2";
			straatnaam.parentNode.innerHTML += "<br><input type='text' class='"+formfieldClassName+"' name='adres' style='margin: 4px 0 0 0;' '"+formfieldExtraAttribute+"' onkeyup='saveStraatnaam(this.value); return false;'>"+afterFormfield;
			if(navigator.appName=="Netscape") window.setTimeout("setDropdown(("+(straatnaam.options.length-1)+"));", 100);
		}
	}else{
		if(adres_toegevoegd){
			adres_toegevoegd = false;
			straatnaam.name = "adres_1";
			straatnaam.options[(straatnaam.options.length-1)].selected=false;
			if(navigator.appName=="Netscape") window.setTimeout("setDropdown(("+straatnaam.selectedIndex+"));", 100);
			
			var html_straatnaam = straatnaam.parentNode.innerHTML;
			straatnaam.parentNode.innerHTML = html_straatnaam.substring(0, html_straatnaam.toLowerCase().indexOf("<br>"));
		}
	}
}

function setDropdown(index){
	var straatnaam = document.getElementById("straatnaam");
	straatnaam.options[index].selected=true;
}

function saveStraatnaam(value){ document.getElementById("straatnaam_hidden").value = value; }

var is_gecko = /gecko/i.test(navigator.userAgent);
var is_ie    = /MSIE/.test(navigator.userAgent);

function setCursor(input, start) {
	if (is_gecko) {
		input.setSelectionRange(start, start);
	} else {
		var range = input.createTextRange();
		range.collapse(true);
		range.moveStart("character", start);
		range.moveEnd("character", start - start);
		range.select();
	}
}

function getCursor(input) {
	if (is_gecko)
		return input.selectionEnd;
	var range = document.selection.createRange();
	var isCollapsed = range.compareEndPoints("StartToEnd", range) == 0;
	if (!isCollapsed)
		range.collapse(false);
	var b = range.getBookmark();
	return b.charCodeAt(2) - 2;
}