function GetXmlHttpObject()
{
  var xmlHttp=null;
  try { // Firefox, Opera 8.0+, Safari
    xmlHttp=new XMLHttpRequest();
  }
  catch (e) { // Internet Explorer
    try {
      xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
    }
    catch (e) {
      xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
  }
  return xmlHttp;
}

function vulVeld(field,veldtype,idPostcode,idPlaats)
{
	if (xmlHttp.readyState==4) {
		var objField = document.getElementById(field);

		if( veldtype == 'straat') {

			// Geen geldige invoer ?
			if( xmlHttp.responseText == "Ongeldige invoer" ) {
				alert('De ingevoerde postcode voldoet niet aan het juiste formaat.');
				return false;
			}

			var adres = '';
			var plaats = '';


			// Niets gevonden ?
			if( xmlHttp.responseText == "Niet gevonden" || xmlHttp.responseText.length == 0 ) {
				//alert('Er kon geen straat gevonden worden bij de ingevoerde postcode');
				return false;
			}

			var index = xmlHttp.responseText.indexOf(';');
			if( index >= 0 ) {
				plaats = xmlHttp.responseText.substring(index+1);
				adres = xmlHttp.responseText.substring(0,index);
			}
			else {
				adres = xmlHttp.responseText;
			}

			// Wel iets gevonden en nog niks ingevuld, dan invoeren
			if( objField.value.length == 0 ) {
				document.getElementById(idPostcode).value = document.getElementById(idPostcode).value.substring(0,7).replace(/\s+$/,'');
				if( plaats.length > 0 ) document.getElementById(idPlaats).value = plaats;
				objField.value = adres;
				return true;
			}

			// Wel iets gevonden en al iets ingevuld wat afwijkt, dan vraag om te overschrijven
			if( objField.value.toUpperCase().indexOf(adres.toUpperCase()) == -1 ) { // Adres wijkt af

				if ( confirm("Het huidig ingevoerde adres en plaats komt niet overeen met de controle (" + adres + ", " + plaats+"), wilt u de huidige invoer vervangen ?") ) {
					objField.value = adres;
					if( plaats.length > 0 ) document.getElementById(idPlaats).value = plaats;
				}

				if( document.getElementById(idPlaats).value.length == 0 )
					document.getElementById(idPlaats).value = plaats;

				document.getElementById(idPostcode).value = document.getElementById(idPostcode).value.substring(0,7).replace(/\s+$/,'');
				return true;
			}

			document.getElementById(idPlaats).value = plaats;
			document.getElementById(idPostcode).value = document.getElementById(idPostcode).value.substring(0,7).replace(/\s+$/,'');
		} // veldtype straat

		if( veldtype == 'postcode') {

			// Geen geldige invoer ?
			if( xmlHttp.responseText == "Ongeldige invoer" ) {
				//alert('Geen geldige invoer');
				return false;
			}

			// Niets gevonden ?
			if( xmlHttp.responseText == "Niet gevonden" || xmlHttp.responseText.length == 0 ) {
				//alert('Er kon geen postcode gevonden worden bij de ingevoerde straat/plaats');
				return false;
			}

			// Eén resultaat en nog niets ingevoerd, dan invoeren
			if( xmlHttp.responseText.indexOf('>1') == -1 && objField.value.length == 0 ) {
				objField.value = xmlHttp.responseText;
				return true;
			}

			// Eén resultaat en al iets ingevoerd wat afwijkt, dan vraag om te overschrijven
			if( xmlHttp.responseText.indexOf('>1') == -1 && objField.value.toUpperCase() != xmlHttp.responseText.toUpperCase() ) {
				if ( confirm("De huidig ingevoerde postcode komt niet overeen met de controle (" + xmlHttp.responseText + "), wilt u de huidige invoer vervangen ?") ) {
					objField.value = xmlHttp.responseText;
					return true;
				}
			}

			// Meer resultaten, (Straat zonder Huisnr of Straat in meerdere plaatsen)
			if( xmlHttp.responseText.indexOf('>1') == 0 ) {
				var arPostcodes = xmlHttp.responseText.substring(3).split(';');
				var message = "Bij de ingevoerde straatnaam zijn " + arPostcodes.length + " postcodes gevonden.\nGeef een huisnummer en/of plaatsnaam voor een kleinere selectie";

				if( arPostcodes.length > 10 ) {
					message += ".";
					//alert(message);
					return false;
				}
				else {
					message += " of vul een van de gevonden postcodes in:\n\n";
					for( var i = 0; i< arPostcodes.length; i++) {
						if( objField.value.toUpperCase() == arPostcodes[i] ) {
							return true;
						}
						message += "- " + arPostcodes[i] + '\n';
					}
					//alert(message);
					return false;
				}
			}

		} // veldtype postcode
	} // readystate 4
}

function getStraat(idPostcode, idStraat, idPlaats, idHuisnr)
{
	var obj = document.getElementById(idPostcode);
	if( obj.value.length == 0 ) {
		return false;
	}

	xmlHttp=GetXmlHttpObject();
	if (xmlHttp!=null) {
		xmlHttp.onreadystatechange=function() { vulVeld(idStraat,'straat',idPostcode, idPlaats) };
		xmlHttp.open("GET","postcode.asp?xPostcode=" + obj.value,false);
		xmlHttp.send(null);
	}
}

function getPostcode(idStraat, idPlaats, idPostcode, idHuisnr)
{	
	var obj = document.getElementById(idStraat).value + ' ' + document.getElementById(idHuisnr).value;
	if( obj.length == 1 ) return false;

	xmlHttp=GetXmlHttpObject();
	if (xmlHttp!=null) {
		xmlHttp.onreadystatechange=function() { vulVeld(idPostcode,'postcode') };
		xmlHttp.open("GET","postcode.asp?xStraat=" + obj+"&xPlaats=" + document.getElementById(idPlaats).value,false);
		xmlHttp.send(null);
	}
}
