var req;

function JSWebservicesHandlerFactory() {
  var counter = 0;
  var handlers = new Array();

  function createHandler(formName, iPostcode, iHuisnr, iPlaats, iStraat) {
    var id = getRandomId();
    handlers[id] = new WebservicesHandler(id, formName, iPostcode, iHuisnr, iPlaats, iStraat);
  }
  this.createWebservicesHandler = createHandler;

  function getRandomId() {
    return counter++ + new Date().getTime();
  }

  function handlerOnBlur(id) {
    var handler = handlers[id];
    var postcode = FormManager.getInput(handler.iPostcode, handler.formName).value.replace(/\s/g,'');
    var huisnr = FormManager.getInput(handler.iHuisnr, handler.formName).value;
    if (postcode!="" && huisnr!="" && postcode.match(/^\d{4}[a-z]{2}$/i) && huisnr.match(/^\d+$/) && (handler.vPostcode!=postcode || handler.vHuisnr!=huisnr)) {
      var qs = webservicesActionURL + "?handlerId=" + id + "&postcode=" + postcode + "&huisnummer=" + huisnr;
      if (window.XMLHttpRequest) {
        req = new XMLHttpRequest();
      } else if (window.ActiveXObject) {
        req = new ActiveXObject("Microsoft.XMLHTTP");
      }
      req.open("GET", qs, true);
      req.onreadystatechange = processReqChange;
      req.send(null);
    }
  }
  this.handlerOnBlur = handlerOnBlur;

  function processReqChange() {
    if (req.readyState == 4 && req.status == 200) {
      var hId = req.responseXML.getElementsByTagName("handler")[0];
      var hPlaats = req.responseXML.getElementsByTagName("plaats")[0];
      var hStraat = req.responseXML.getElementsByTagName("straat")[0];

      var id = hId.childNodes[0].nodeValue;
      var handler = handlers[id];
      handler.vPostcode = FormManager.getInput(handler.iPostcode, handler.formName).value.replace(/\s/g,'');
      handler.vHuisnr = FormManager.getInput(handler.iHuisnr, handler.formName).value;
      var plaats = hPlaats.hasChildNodes() ? hPlaats.childNodes[0].nodeValue : "";
      var straat = hStraat.hasChildNodes() ? hStraat.childNodes[0].nodeValue : "";
      FormManager.getInput(handler.iPlaats, handler.formName).value = plaats;
      FormManager.getInput(handler.iStraat, handler.formName).value = straat;
   //   if (plaats == "" && straat == "") {
   //     alert("De door u ingevoerde postcode en/of huisnummer is of zijn niet correct. U kunt uw gegevens nu corrigeren. Als u dit niet doet worden uw gegevens eventueel met foute adresgegevens verstuurd.");
   //   }
       //DEZSBPVS-482
      if (plaats == "" && straat == "") {
      document.getElementById("huisnummerError").innerHTML='Dit huisnummer wordt niet herkend, vul hieronder het adres in';
      document.getElementById("straatError").innerHTML='<img src="/images/spacer.gif" width="16px" height="16px">';
      document.getElementById("plaatsError").innerHTML='<img src="/images/spacer.gif" width="16px" height="16px">';
      FormManager.getInput(handler.iPlaats, handler.formName).disabled = false;
      FormManager.getInput(handler.iStraat, handler.formName).disabled = false;
      //document.getElementById("straatError").style.display='block';
      //document.getElementById("plaatsError").style.display='block';
      }else{
      document.getElementById("straatError").innerHTML='<img src="/images/registration_green_right_check.jpg">';
      document.getElementById("plaatsError").innerHTML='<img src="/images/registration_green_right_check.jpg">';
      //document.getElementById("straatError").style.display='block';
      //document.getElementById("plaatsError").style.display='block';
      FormManager.getInput(handler.iPlaats, handler.formName).disabled = true;
      FormManager.getInput(handler.iStraat, handler.formName).disabled = true;
      //DEZSBPVS-482
      }
    }
  }
}

function WebservicesHandler(id, formName, iPostcode, iHuisnr, iPlaats, iStraat) {
  var oPostcode = FormManager.getInput(iPostcode, formName);
  var oHuisnr = FormManager.getInput(iHuisnr, formName);
  var oPlaats = FormManager.getInput(iPlaats, formName);
  var oStraat = FormManager.getInput(iStraat, formName);
  if (oPostcode!=null && oHuisnr!=null && oPlaats!=null && oStraat!=null && webservicesActionURL!="") {
    this.formName = formName;
    this.iPostcode = iPostcode;
    this.iHuisnr = iHuisnr;
    this.iPlaats = iPlaats;
    this.iStraat = iStraat;
    this.vPostcode = oPostcode.value.replace(/\s/g,'');
    this.vHuisnr = oHuisnr.value;
    oPostcode.onblur = new Function("WebservicesHandlerFactory.handlerOnBlur("+id+")");
    oHuisnr.onblur = new Function("WebservicesHandlerFactory.handlerOnBlur("+id+")");
  }
}

WebservicesHandlerFactory = new JSWebservicesHandlerFactory();

