1window.fastLookupMap = false; 2 3$(document).ready(function() { 4 5 autoCompleteSearching=false; //global 6 var jqAddressFields = $('.autoCompleteAddress'); 7 jqAddressFields.after('<div class="matchedAddresses"></div>'); 8 jqAddressFields.on('keyup',function (event) { 9 //console.log("autoCompleteAddress keyup" + this.value); 10 autoCompleteField = $(this); //global 11 12 autoCompleteSection = autoCompleteField.closest('.cmsFormElements'); //typical in checkout 13 if (autoCompleteField.hasClass('autoCompleteFullAddress')) 14 autoCompleteSection = autoCompleteField.parent(); 15 if (!autoCompleteSection.length) 16 autoCompleteSection = autoCompleteField.closest('table'); 17 if (!autoCompleteSection.length) 18 autoCompleteSection = autoCompleteField.closest('fieldset'); //typical in CMS 19 if (!autoCompleteSection.length) 20 autoCompleteSection = autoCompleteField.closest('form'); //backstop 21 if (event.which>30 && !autoCompleteSearching) { 22 if (this.value.length > 5 ) { 23 24 autoCompleteSection.find('.matchedAddresses').text('searching').fadeIn(500); 25 var searchCountry = autoCompleteSection.find('.autoCompleteAddressCountry').val(); 26 if (!searchCountry) searchCountry = autoCompleteSection.find('.autoCompleteAddressCountryCode option:selected').first().text(); 27 var searchData = 'lookupAddress='+escape(this.value)+'&lookupCountry='+escape(searchCountry); 28 29 if (top.security_cid && top.security_cid ) 30 searchData+= '&cid='+top.security_cid; 31 32 if (!window.fastLookupMap) window.fastLookupMap = new Map(); 33 var foundResult = window.fastLookupMap.get(searchData); 34 35 if (foundResult && foundResult.length>1) { 36 autoCompleteSection.find('.matchedAddresses').html(foundResult); 37 console.log('autoCompleteAddress hit from cache ' + searchData); 38 } 39 else { 40 autoCompleteSearching = true; 41 42 console.log("autoCompleteAddress loading " + searchData); 43 jQuery.post('/webapps/cms/widgets/api/nzpost/lookupAddressJsCallback.html',searchData,function(resultHTML){ 44 autoCompleteSection.find('.matchedAddresses').html(resultHTML).delay(10000).fadeOut(); 45 window.fastLookupMap.set(searchData,resultHTML); 46 autoCompleteSearching = false; 47 }); 48 49 } 50 } 51 else { 52 $('.matchedAddresses').text('').hide(); 53 } 54 } 55 }); 56 57}); 58 59function autoCompleteAddressCallback(getAddressURI,fullAddress) { 60 //autoCompleteField is global set already 61 if (autoCompleteField.hasClass('autoCompleteFullAddress')) { 62 if (autoCompleteField.is('textarea')) 63 fullAddress = fullAddress.replace(/, /g,'\n'); 64 autoCompleteField.val(fullAddress).change(); 65 $('.matchedAddresses').text('').hide(); 66 return; 67 } 68 $('.matchedAddresses').text('fetching address..'); 69 $('.matchedAddresses').fadeOut(500).hide(); 70 console.log('autoCompleteAddressCallback ' + getAddressURI); 71 jQuery.getJSON( getAddressURI, function( data ) { 72 //a second lookup is required to get the address components... 73 console.log(data); 74 if (data.address) { 75 //global autoCompleteSection 76 autoCompleteSection.find('.autoCompleteAddress').val(data.address); 77 autoCompleteSection.find('.autoCompleteAddressSuburb').val(data.suburb); 78 if (data.city) 79 autoCompleteSection.find('.autoCompleteAddressCity').val(data.city); 80 else 81 autoCompleteSection.find('.autoCompleteAddressCity').val(data.suburb); 82 autoCompleteSection.find('.autoCompleteAddressCode').val(data.postcode); 83 autoCompleteSection.find('.autoCompleteAddressState').val(data.state); 84 autoCompleteSection.find('.autoCompleteAddressCountry').val(data.country); 85 autoCompleteSection.find('.autoCompleteAddressCountryCode').val(data.countryCode); 86 autoCompleteSection.find('.autoCompleteAddress').change(); //trigger any auto save.. 87 $('.matchedAddresses').text('').hide(); 88 } else { 89 autoCompleteSection.find('.matchedAddresses').text('Error loading address.') 90 } 91 }); 92} 93 94 95 96 97/* 98This one is used on one liner address, eg checkout fast address lookup... rather than a split address... 99*/ 100var autoCompleteSearching=false; 101window.fastLookupMap = false;
102window.autoCompleteAddress = function(element,searchURL) { 103 console.log("##autoCompleteAddress " + autoCompleteSearching); 104 if (element.value.length >= 6 && !autoCompleteSearching && window.jQuery) { 105 var serializedFormData = jQuery(element.form).serialize(); 106 console.log('autoCompleteAddress serializedFormData ' + serializedFormData); 107 if (!window.fastLookupMap) window.fastLookupMap = new Map(); 108 var foundResult = window.fastLookupMap.get(serializedFormData); 109 if (foundResult && foundResult.length>1) { 110 jQuery(element.form).find('.matchedAddresses').html(foundResult); 111 console.log('autoCompleteAddress hit from cache '); 112 } 113 else { 114 autoCompleteSearching = true; 115 jQuery(element.form).find('.matchedAddresses').text(''); 116 console.log('autoCompleteAddress load address from server '); 117 $.post(searchURL,serializedFormData+'&dosearchforaddress=1',function(resultHTML){ 118 jQuery(element.form).find('.matchedAddresses').html(resultHTML); 119 window.fastLookupMap.set(serializedFormData,resultHTML); 120 autoCompleteSearching = false; 121 }); 122 } 123 } 124 else { 125 jQuery(element.form).find('.matchedAddresses').text(''); 126 } 127}; 128 129
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.