//global vars
var xmlhttp, p_xmlhttp;
var prev_kvknr, prev_kvknr_s;
var prev_postcode_c, prev_postcode_l, prev_huisnr;
var prev_p_postcode_c, prev_p_postcode_l, prev_p_huisnr;
var lock_rn;

//getting cross-browser xmlhttp object
function getXMLHTTP() {
	var xmlhttpO;

	try { xmlhttpO = new ActiveXObject("Msxml2.XMLHTTP"); }
	catch (e) { try { xmlhttpO = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) { xmlhttpO = false; } }

	if (!xmlhttpO && typeof XMLHttpRequest != 'undefined') {
		try { xmlhttpO = new XMLHttpRequest();	} catch (e) { xmlhttpO = false; }
	}

	return xmlhttpO;
}

function delayrefreshNaw() { setTimeout('refreshNaw()', 1); }
function refreshNaw() {
	if (lock_rn) { return; }	//locking mechanism, when multiple events are triggered at the same time, only run once (because of the confirm)
	else { lock_rn = true; }

	var kvknr, kvknr_s, request;

	//check if field has changed and if the form is empty (prev_kvknr than is undefined)
	kvknr = document.forms.vermelding.kvknr.value;
	kvknr_s = document.forms.vermelding.kvknr_s.value;
	if ((kvknr_s != prev_kvknr_s && typeof prev_kvknr_s != 'undefined') || (kvknr != prev_kvknr && typeof prev_kvknr != 'undefined')) {
		if (document.forms.vermelding.cookie_save) {
			prev_kvknr = undefined; prev_kvknr_s = undefined;
			lock_rn = false; return;
		}

		if (confirm('Als u een ander KvK nummer opgeeft wordt het formulier weer gewist. Wilt u doorgaan?')) {
			if (kvknr_s != prev_kvknr_s && typeof prev_kvknr_s != 'undefined') {
				clearForm(true); prev_kvknr_s = undefined;
			} else {
				clearForm(); prev_kvknr = undefined; prev_kvknr_s = undefined;
			}
			lock_rn = false;
			refreshNaw();						//in a rare case an explicit call is needed (no harm)
		} else {
			document.forms.vermelding.kvknr.value = prev_kvknr;	//restore old values
			document.forms.vermelding.kvknr_s.value = prev_kvknr_s;
			lock_rn = false;
			return;
		}
	} else if (kvknr.length==8 && ((kvknr != prev_kvknr) || (kvknr_s != prev_kvknr_s && kvknr_s.length==4))) {	//check number too, when ok getnaw and enableform
		prev_kvknr = kvknr;						//presave (fillForm does it too, but only when KvK no. is known)

		xmlhttp = getXMLHTTP();
		request = '/rpcs/getnaw?kvknr=' + kvknr;
		if (kvknr_s.length==4) {
			prev_kvknr_s = kvknr_s;					//presave when length is correct
			request += '&kvknr_s=' + kvknr_s;
		}
		xmlhttp.open('GET', request, true);
		xmlhttp.onreadystatechange = fillForm;
		xmlhttp.send(null);
	}
	lock_rn = false;
}

function delayrefreshAdresPost() { setTimeout('refreshAdres(true)', 1); }
function delayrefreshAdres() { setTimeout('refreshAdres()', 1); }
function refreshAdresPost() { refreshAdres(true); }
function refreshAdres(post) {
	var request, post;
	var postcode_c, postcode_l, huisnr;
	var cmp_postcode_c, cmp_postcode_l, cmp_huisnr;				//references to compare with

	//determine which field values and references to use and save old values
	if (post) {
		postcode_c = document.forms.vermelding.p_postcode_c.value; cmp_postcode_c = prev_p_postcode_c;
		postcode_l = document.forms.vermelding.p_postcode_l.value; cmp_postcode_l = prev_p_postcode_l;
		huisnr = document.forms.vermelding.p_huisnr.value; cmp_huisnr = prev_p_huisnr;
		prev_p_postcode_c = postcode_c; prev_p_postcode_l = postcode_l; prev_p_huisnr = huisnr;
	} else {
		postcode_c = document.forms.vermelding.postcode_c.value; cmp_postcode_c = prev_postcode_c;
		postcode_l = document.forms.vermelding.postcode_l.value; cmp_postcode_l = prev_postcode_l;
		huisnr = document.forms.vermelding.huisnr.value; cmp_huisnr = prev_huisnr;
		prev_postcode_c = postcode_c; prev_postcode_l = postcode_l; prev_huisnr = huisnr;
	}

	//conditions of change for a clear and new request
	if (postcode_c.length==4 && (
		(postcode_c != cmp_postcode_c) ||
		(postcode_l.length < 2 && cmp_postcode_l.length==2) ||
		(postcode_l.length==2 && cmp_postcode_l.length < 2) ||
		(postcode_l.length==2 && cmp_huisnr != huisnr)
		)) {
			if (post) { p_xmlhttp = getXMLHTTP(); } else { xmlhttp = getXMLHTTP(); }
			request = '/rpcs/getadres?postcode_c=' + postcode_c;

			if (postcode_l.length==2) { request += '&postcode_l=' + postcode_l; }
			if (huisnr.length > 0) { request += '&huisnr=' + huisnr; }

			if (post) {
				p_xmlhttp.open('GET', request, true);
				p_xmlhttp.onreadystatechange = fillAdresPost;
				p_xmlhttp.send(null);
			} else {
				xmlhttp.open('GET', request, true);
				xmlhttp.onreadystatechange = fillAdresNPost;
				xmlhttp.send(null);
			}
	//only clear
	} else if (postcode_c.length != 4) { clearAdres(post); }
}

function refreshBik(cSelect) {
	var cSelect, bName;

	//remove first option (help text) once
	if (!cSelect.options[0].value || cSelect.options[0].value == cSelect.options[0].childNodes[0].nodeValue) {
		cSelect.remove(0);
	}

	//determine which select box to fill
	if (cSelect.id=="cbs_sector") { bName = "afdeling"; }
	else if (cSelect.id=="afdeling") { bName = "klasse"; }
	else { bName = "branche"; }

	xmlhttp = getXMLHTTP();
	xmlhttp.open('GET', '/rpcs/listbik?bik=' + cSelect.value + '&name=' + bName, true);
	xmlhttp.onreadystatechange = fillBik;
	xmlhttp.send(null);
}

function fillBik() {
	var sName, cSelect, nOption, bSelect;
	var values, descs;

	if (xmlhttp.readyState==4 && xmlhttp.status==200) {
		xmldoc = xmlhttp.responseXML;

		//determine which select box to fill
		sName = xmldoc.getElementsByTagName('list')[0].getAttribute('name');
		cSelect = brancheWin.document.getElementById(sName);

		//clear box and add help text
		while (cSelect.options.length) { cSelect.remove(0); }
		nOption = brancheWin.document.createElement("OPTION");
		nOption.text = 'maak uw keuze';
		cSelect.options.add(nOption);

		//same for the ones below
		if (sName=='afdeling' || sName=='klasse') {
			bSelect = brancheWin.document.getElementById('branche');
			while (bSelect.options.length) { bSelect.remove(0); }
			nOption = brancheWin.document.createElement("OPTION");
			nOption.text = 'kies eerst de ' + sName;
			bSelect.options.add(nOption);
		}
		if (sName=='afdeling') {
			bSelect = brancheWin.document.getElementById('klasse');
			while (bSelect.options.length) { bSelect.remove(0); }
			nOption = brancheWin.document.createElement("OPTION");
			nOption.text = 'kies eerst de ' + sName;
			bSelect.options.add(nOption);
		}

		//insert new descs/values
		values = xmldoc.getElementsByTagName('value');
		descs = xmldoc.getElementsByTagName('desc');
		for (var i = 0; i < values.length; i++) {
			nOption = brancheWin.document.createElement("OPTION");
			nOption.text = descs[i].childNodes[0].nodeValue;
			nOption.value = values[i].childNodes[0].nodeValue;
			cSelect.options.add(nOption);
		}
	}
}	

function fillForm() {
	var elm, xmldoc, naw, errcode;

	if (xmlhttp.readyState==4 && xmlhttp.status==200) {
		xmldoc = xmlhttp.responseXML;

		if (naw = xmldoc.getElementsByTagName('naw')[0]) {
			disableForm(document.forms.vermelding.bedrijfsnaam, false);

			for (var i = 0; i < naw.childNodes.length; i++) {
				elm = naw.childNodes[i];
				if (document.forms.vermelding[elm.nodeName] && elm.childNodes[0]) {
					document.forms.vermelding[elm.nodeName].value = elm.childNodes[0].nodeValue;
					try { eval('prev_' + elm.nodeName + ' = elm.childNodes[0].nodeValue'); } finally {}
				}
			}

			//adres fields
			elm = xmldoc.getElementsByTagName('straat')[0]; if (elm.childNodes[0]) { document.getElementById('adres').innerHTML = elm.childNodes[0].nodeValue; }
			elm = xmldoc.getElementsByTagName('plaats')[0]; if (elm.childNodes[0]) { document.getElementById('adres').innerHTML += ', ' + elm.childNodes[0].nodeValue; }
			elm = xmldoc.getElementsByTagName('p_straat')[0]; if (elm.childNodes[0]) { document.getElementById('p_adres').innerHTML = elm.childNodes[0].nodeValue; }
			elm = xmldoc.getElementsByTagName('p_plaats')[0]; if (elm.childNodes[0]) { document.getElementById('p_adres').innerHTML += ', ' + elm.childNodes[0].nodeValue; }

			//branches
			elm = xmldoc.getElementsByTagName('branche');
			for (var i = 0; i < elm.length && i < 6; i++) {
				if (i > 0) {					//show extra field
					document.getElementById('branche' + i).style.display = 'block';
				}
				//assign values
				document.forms.vermelding['rid[]'][i].value = elm[i].getElementsByTagName('rid')[0].childNodes[0].nodeValue;
				document.forms.vermelding['desc[]'][i].value = elm[i].getElementsByTagName('desc')[0].childNodes[0].nodeValue;
			}
		} else if (errcode = xmldoc.getElementsByTagName('code')[0]) {
			if (errcode.childNodes[0].nodeValue=='300') {	//multiple choices
				force_kvk_s = true; view_kvknr_s(true);
			} else {
				disableForm(document.forms.vermelding.bedrijfsnaam, false);
			}
		}
	}
}

function fillAdresPost() { fillAdres(true); }	//IE is not accepting params on calling event, small work-around
function fillAdresNPost() { fillAdres(false); }	//Safari will interpret the post value as an event when not explicit supplied as bool false
function fillAdres(post) {
	var post, xmldoc, elm, adres;

	if (post) { adres = document.getElementById('p_adres'); } else { adres = document.getElementById('adres'); }

	if ((post && p_xmlhttp.readyState==4 && p_xmlhttp.status==200) || (xmlhttp.readyState==4 && xmlhttp.status==200)) {
		if (post) { xmldoc = p_xmlhttp.responseXML; } else { xmldoc = xmlhttp.responseXML; }

		if (xmldoc) {	//use as a extra test, multiple events can trigger
			elm = xmldoc.getElementsByTagName('plaats')[0];
			if (elm && elm.childNodes[0]) {
				adres.innerHTML = elm.childNodes[0].nodeValue;

				elm = xmldoc.getElementsByTagName('straat')[0];
				if (elm.childNodes[0]) {
					adres.innerHTML = elm.childNodes[0].nodeValue + ', ' + adres.innerHTML;
				} else if (post && document.forms.vermelding.p_postcode_l.value.length==2 && document.forms.vermelding.p_huisnr.value.length > 0) {
					adres.innerHTML = 'Postbus, ' + adres.innerHTML;
				}
			}
		}
	}
}

function searchBik(field) {
	var field;

	//check length keyword
	if (field.value.length < 3) {
		alert('Geeft u a.u.b. een trefwoord op van minimaal 3 karakters.');
		brancheWin.focus();
		return;
	}

	xmlhttp = getXMLHTTP();
	xmlhttp.open('GET', '/rpcs/searchbik?s=' + field.value, true);
	xmlhttp.onreadystatechange = fillSearchList;
	xmlhttp.send(null);
}

function fillSearchList() {
	var values, descs, cbs_sectors, sTable, nRow, nCell;

	var cbs_sector_desc = new Array();
	cbs_sector_desc[1] = 'Landbouw en visserij';
	cbs_sector_desc[2] = 'Industrie';
	cbs_sector_desc[3] = 'Bouwnijverheid';
	cbs_sector_desc[4] = 'Handel';
	cbs_sector_desc[5] = 'Horeca';
	cbs_sector_desc[6] = 'Vervoer en communicatie';
	cbs_sector_desc[7] = 'Financiële instellingen';
	cbs_sector_desc[8] = 'Zakelijke diensten';
	cbs_sector_desc[9] = 'Overig';

	if (xmlhttp.readyState==4 && xmlhttp.status==200) {
		xmldoc = xmlhttp.responseXML;

		//list results
		values = xmldoc.getElementsByTagName('value');
		descs = xmldoc.getElementsByTagName('desc');
		cbs_sectors = xmldoc.getElementsByTagName('cbs_sector');

		sTable = brancheWin.document.getElementById('searchlist');
		while (sTable.rows.length > 1) { sTable.deleteRow(1); }	//empty previous result
		sTable.style.display = 'block';

		for (var i = 0; i < values.length; i++) {
			nRow = sTable.insertRow(-1);
			nCell = nRow.insertCell(-1); nCell.style.verticalAlign = 'top';
			nCell.innerHTML = cbs_sector_desc[cbs_sectors[i].childNodes[0].nodeValue];
			nCell = nRow.insertCell(-1); nCell.style.verticalAlign = 'top';
			nCell.innerHTML = '<a href="javascript: void(null)" onclick="window.opener.setBik(cField, this, \'' + values[i].childNodes[0].nodeValue + '\')">' + descs[i].childNodes[0].nodeValue + '</a>';
		}

		//nothing found
		if (values.length==0) {
			nRow = sTable.insertRow(-1);
			nCell = nRow.insertCell(-1); nCell.colSpan = 2;
			nCell.innerHTML = 'Geen overeenkomstige branches gevonden.';
		}
	}
}
