// web context var context = "/nl"; EventListener.addEvent(window, "load", function(e){ var zf1 = new ZipFiller(document.getElementById("postalcode"),document.getElementById("number1"), document.getElementById("street"),document.getElementById("city"), document.getElementById("lookup"), null, null); }); // Contact Address Blok EventListener.addEvent(window, "load", function(e){ var zf2 = new ZipFiller(document.getElementById("contactAddressPostcode"),document.getElementById("contactAddressHouseNumber"), document.getElementById("contactAddressStreet"),document.getElementById("contactAddressCity"), document.getElementById("contactAddressLookup"), document.getElementById("_notNetherland_J"), document.getElementById("_notNetherland_N")); }); // New Contact Address Blok EventListener.addEvent(window, "load", function(e){ var zf3 = new ZipFiller(document.getElementById("newContactAddressPostcode"),document.getElementById("newContactAddressHouseNumber"), document.getElementById("newContactAddressStreet"),document.getElementById("newContactAddressCity"), document.getElementById("newContactAddressLookup"), document.getElementById("_newNotNetherland_J"), document.getElementById("_newNotNetherland_N")); }); // Address Blok EventListener.addEvent(window, "load", function(e){ var zf4 = new ZipFiller(document.getElementById("addressPostcode"),document.getElementById("addressHouseNumber"), document.getElementById("addressStreet"),document.getElementById("addressCity"), document.getElementById("addressLookup"), null, null); }); // New Address Blok EventListener.addEvent(window, "load", function(e){ var zf5 = new ZipFiller(document.getElementById("newAddressPostcode"),document.getElementById("newAddressHouseNumber"), document.getElementById("newAddressStreet"),document.getElementById("newAddressCity"), document.getElementById("newAddressLookup"), null, null); }); // Dutch Contact Address Blok EventListener.addEvent(window, "load", function(e){ var zf6 = new ZipFiller(document.getElementById("dutchContactAddressPostcode"),document.getElementById("dutchContactAddressHouseNumber"), document.getElementById("dutchContactAddressStreet"),document.getElementById("dutchContactAddressCity"), document.getElementById("dutchContactAddressLookup"), null, null); }); /* Lost Boys 2006. De inhoud van dit bestand is in opdracht vervaardigd en eigendom van onze opdrachtgever. Niet hergebruiken zonder toestemming. Neem voor vragen contact op met Lost Boys, www.lostboys.nl. The contents of this file have been produced for and are the property of our client. Do not reuse without permission. Any questions? Please contact Lost Boys, www.lostboys.nl. */ ZipFiller = function (zipNode, numNode, streetNode, cityNode, lookupNode, foreignNodeYes, foreignNodeNo) { if(!zipNode || !numNode || !streetNode || !cityNode) return; this.foreignYes = foreignNodeYes; this.foreignNo = foreignNodeNo; this.zip = zipNode; this.num = numNode; this.street = streetNode; this.city = cityNode; //Hold the value to return when the user switched to foreign address this.storedNum = this.num.value; this.storedZip = this.zip.value; // if we have JavaScript support, we dont need the lookup link if(lookupNode) lookupNode.parentNode.removeChild(lookupNode); if (this.foreignYes && this.foreignNo) { EventListener.addEvent(this.foreignYes, "change", this.scope(this.foreignChange)); EventListener.addEvent(this.foreignNo, "change", this.scope(this.foreignChange)); } //july 2010: postbox fix. Do not disable street/city when 'postbox.checked==true' var postbox = document.getElementById("command.newContactAddress.hasPostBox"); //Disable the street and city field if (this.foreignYes && this.foreignNo) { if (this.foreignYes.checked == true || (postbox && postbox.checked == true)) { this.street.readOnly = false; this.city.readOnly = false; } else { this.street.readOnly = true; this.city.readOnly = true; } } else { this.street.readOnly = true; this.city.readOnly = true; } EventListener.addEvent(this.zip, "change", this.scope(this.getAddress)); EventListener.addEvent(this.num, "change", this.scope(this.getAddress)); if (window.XMLHttpRequest) { this.xmlhttp = new XMLHttpRequest(); } else if (window.ActiveXObject) { try { this.xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) { this.xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } } //If zip and number are filled we get the street and city straight a way. if (this.zip.value != "" && this.num.value != "") { this.getAddress(); } } ZipFiller.prototype.foreignChange = function () { if (this.foreignYes && this.foreignNo) { if (this.foreignYes.checked == true) { this.street.readOnly = false; this.city.readOnly = false; } else { this.street.readOnly = true; this.city.readOnly = true; this.resetAddress(); this.num.value = this.storedNum; this.zip.value = this.storedZip; this.getAddress(); } } } ZipFiller.prototype.getAddress = function () { // Keep the stored values in sync. this.storedNum = this.num.value; this.storedZip = this.zip.value; if (this.zip.value != "" && this.num.value != "") { this.resetAddress(); try { this.removeErrorMessage(); this.message("Straatnaam en woonplaats worden opgezocht"); var contextPath = ""; if (context) { contextPath = context } this.xmlhttp.open("GET", "https://" + window.location.host + contextPath + "/system/postcoderesponder.jsp?postcode="+this.zip.value+"&houseNumber="+this.num.value+"&rnd="+Math.random(), true); //this.xmlhttp.open("GET", "static/xml/zipfiller.xml?rnd="+Math.random(), true); var app = this; this.xmlhttp.onreadystatechange = function() { if (app.xmlhttp.readyState == 4 && app.xmlhttp.status == 200) { app.removeErrorMessage(); app.fillAddress(app.xmlhttp.responseXML); } }; this.xmlhttp.send(null); } catch (e) { alert(e); } } } ZipFiller.prototype.fillAddress = function (xml) { if (xml != null) { var element1 = xml.getElementsByTagName("straatnaam"); var element2 = xml.getElementsByTagName("woonplaats"); if ((element1 != null) && (element2 != null) && (element1.length > 0) && (element2.length > 0)) { var node1 = element1[0]; var node2 = element2[0]; if ((node1 != null) && (node2 != null)) { this.street.value = this.getValue(node1); this.city.value = this.getValue(node2); this.removeErrorMessage(); } else { this.errorMessage("Algemene foutmelding: geen geldige XML gevonden."); this.resetAddress(); } } else { var errorNodes = xml.getElementsByTagName("errormessage"); if(errorNodes != null & errorNodes.length > 0){ var errorNode = errorNodes[0]; if (errorNode != null) { this.errorMessage(this.getValue(errorNode)); } else { this.errorMessage("Algemene foutmelding: geen geldige XML gevonden."); } } this.resetAddress(); } } else { this.errorMessage("Algemene foutmelding: geen geldige XML gevonden. Geen response"); this.resetAddress(); } } ZipFiller.prototype.resetAddress = function () { this.street.value = ""; this.city.value = ""; } ZipFiller.prototype.removeErrorMessage = function () { if (this.error) { this.num.parentNode.parentNode.removeChild(this.error); this.error = null; } this.num.parentNode.parentNode.className = this.num.parentNode.parentNode.className.replace(/error/g, ""); this.num.parentNode.className = this.num.parentNode.className.replace(/error/g, ""); this.zip.parentNode.className = this.zip.parentNode.className.replace(/error/g, ""); // to remove errors from server side validation this.removeErrorMessageByParentNode(this.num.parentNode.parentNode); this.removeErrorMessageByParentNode(this.zip.parentNode); } ZipFiller.prototype.removeErrorMessageByParentNode = function (parentNode) { var spans = null; spans = parentNode.getElementsByTagName("span"); for (var i=0; i < spans.length; i++) { if (spans[i].className.search(/error/) > -1) { parentNode.removeChild(spans[i]); } } } ZipFiller.prototype.errorMessage = function (txt) { if(!this.error) { var error = document.createElement("span"); error.className = "errormessage show"; error.appendChild(document.createTextNode(txt)); this.error = this.num.parentNode.parentNode.appendChild(error); this.zip.parentNode.appendChild(error.cloneNode(true)); // make border arround input boxes red this.num.parentNode.parentNode.className = this.num.parentNode.parentNode.className + " error"; this.num.parentNode.className = this.num.parentNode.className + " error"; this.zip.parentNode.className = this.zip.parentNode.className + " error"; } } ZipFiller.prototype.message = function (txt) { if(!this.error) { var error = document.createElement("span"); error.className = "errormessage show"; error.appendChild(document.createTextNode(txt)); this.error = this.num.parentNode.parentNode.appendChild(error); } } ZipFiller.prototype.getValue = function (element) {//some DOM's add a text Node, some don't var s = (element.firstChild) ? element.firstChild.nodeValue : element.nodeValue; s = s.replace( /^\s+/g, "" ); s = s.replace( /\s+$/g, "" ); return s; } ZipFiller.prototype.scope = function(method) { var scope = this; return function() { return method.apply(scope, arguments); } }