PageSourceSearch

https://www.aromaticadventures.com/uploads/js/forms/autoCompleteAddress.js

js aromaticadventures.com collected 2026-09-27 11:15:24 UTC 5,354 bytes, 129 lines download raw bytes

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.