PageSourceSearch

https://charbonnel.co.uk/wp-content/plugins/postcodes4u-address-fi…?ver=bef4e54cd6aebd9082fd63baef11c489

js charbonnel.co.uk collected 2026-10-03 22:16:30 UTC 113,562 bytes, 2,954 lines download raw bytes

1// --------------------------------------------------------------------------------------------------------------------------------------------
2//   POSTCODES4U JavaScript
3// ======================================================================================
4//   Updated 06/02/2019
5//   GF Issue Fixed 18/02/19
6//   CF7 Single Line Address Issue Fixed
7//   New 'No County' option
8//   Modified to work with Material Design Framework &
9//     with-woocommerce-checkout-manager
10//   Version 9. (1.5.9) 30/03/2020
11//
12//   Version 10. (1.5.10) - 18/05/2020
13//     Modified for work with Select2 JQuery select boxes
14//
15//   Version 1.111. (1.5.11) - 06/01/2021
16//     Modified for work CF7 Conditional Fields - repeating fields
17//
18//   Version 1.112+13 - Internal Test Versions
19//
20//   Version 14. (1.5.14) - 22/03/2021
21//     Tided up Error Handling
22//
23//   Version 15. (1.5.15) Jquery not available enhancements 25/04/2021
24//
25//   Version 16. (1.5.16) Added Show Postcode Lookup Warning Messages Option 20/07/2021
26//   
27//   Version 17. (1.5.17) Updated GF Form Show Hidden Address Option and Custom Button Labels 30/07/2021
28//
29//   Version 18. (1.5.18) Updated CF for Multiple Addresses (CF7 5.8 Issue) - Add AdHoc AddressLine and Address Block Fields 14/08/2023
30//
31//   Version 19. (1.5.19) Updated CF for Multiple Addresses (CF7 5.8 Issue) - Add AdHoc AddressLine and Address Block Fields 14/08/2023
32
33//   Version 20  (1.6.0) Use Ajax Calls to Postcodes4u Webservice - No Postcodes4u Username and Key on Form Integrations 2026.07.24
34//   
35//   Version 21  (1.6.1) Updated to Ajax Call changes, Fix/Enhance Ajax Call Error Handling and Alerts, Tidy Up Code. 2026.07.26
36//
37//   Version 22  (1.6.2) Updated to Ajax Call changes, Fix Outstanding WooCommerce issues and Tidy Ajax Calls/Paths (lower case). 2026.07.27
38//  --------------------------------------------------------------------------------------------------------------------------------------------
39
40// Public Variables
41var pc4uCallingFormCode = "";
42var pc4uFormPostcodeFieldId = "";
43var pc4uFormPostcodeFieldName = "";
44var pc4uFieldObjectForPostcode = null;
45//  General Field Data for 'AdHoc' Lookup Call
46var pc4uFormAddressCompanyFieldId = "";
47var pc4uFormAddressLine1FieldId = "";
48var pc4uFormAddressLine2FieldId = "";
49var pc4uFormAddressLine3FieldId = "";
50var pc4uFormAddressTownFieldId = "";
51var pc4uFormAddressCountyFieldId = "";
52// Address Line and Block KRF 2023.08.14
53var pc4uFormAddressLineFieldId = "";
54var pc4uFormAddressBlockFieldId = "";
55
56// New Option To Show Postcode Lookup Warnings. - KRF 2021.07.20
57var pc4uShowLookupWarnings = '0';
58
59// New Option For custom Postcode dropdown message - KRF 2021.07.29 
60var pc4uSelectAddressText = 'Select an address:';
61
62// Address Summary Fields
63var pc4uFormAddressSummaryLineId = "";
64var pc4uFormAddressSummaryBlockId = "";
65
66// Address Country and Country Type
67var pc4uFormAddressNationCountryFieldId = "";
68var pc4uFormAddressNationCountryType = "text"; // Defaults to text - other options are 'dropdown' and 'wp_dropdown'
69// Address Select Dropdown
70var pc4uFormAddressDropdownFieldId = "";
71// Lookup Code - Source of Lookup 'CF7, 'WooCommerce' etc
72var pc4uLookupFormCode = "";
73
74// ===============================================
75// Pc4uSearchBegin
76// ===============
77// Postcodes4u Lookup Called From Basic 'Blog' Form
78//    Alert Messages Improved - KRF 2026-07-26
79// ==================================================
80function Pc4uSearchBegin() {
81
82    pc4uCallingFormCode = "";
83    pc4uFormPostcodeFieldId = "pc4uPostcode";
84    pc4uFormAddressDropdownFieldId = "pc4uDropdown";
85    pc4uFormPostcodeFieldName = "";
86    pc4uFieldObjectForPostcode = null;
87    var oPostcodeField = document.getElementById(pc4uFormPostcodeFieldId);
88
89    if(oPostcodeField) {
90        oPostcodeField.value.toUpperCase();
91
92        pc4uPostcodeSearchBegin(oPostcodeField.value);
93    } else {
94         // Cannot Find Postcode Field
95        alert("POSTCODES4u FORM ERROR\n\nPostcode Search Call Invalid\n - No Postc
95ode Field Specified.");
96
97        // Ensure No Address Lookups are displayed
98        pc4uCallingFormCode = "";
99
100        // Clear Advanced Form (CF7) Values
101        pc4uFormPostcodeFieldId = "";
102        pc4uFormPostcodeFieldName ="";
103	pc4uFieldObjectForPostcode = null;
104    }
105}
106
107// ===============================================
108// Pc4uAdHocSearchBegin
109// ====================
110// Postcodes4u Lookup Called From Gravity Form
111//    Alert Messages Improved - KRF 2026-07-26
112// ===============================================
113function Pc4uAdHocSearchBegin(adhoc_postcode_fieldId, adhoc_dropdown_fieldId) {
114
115    pc4uCallingFormCode = "pc4uAdHocPostcode";
116    pc4uFormPostcodeFieldId = adhoc_postcode_fieldId;
117    pc4uFormPostcodeFieldName = "";
118    pc4uFieldObjectForPostcode = null;
119    pc4uFormAddressDropdownFieldId = adhoc_dropdown_fieldId;
120    //
121    var oPostcodeField = document.getElementById(pc4uFormPostcodeFieldId);
122    var oDropdownField = document.getElementById(pc4uFormAddressDropdownFieldId);
123
124    if(oPostcodeField && oDropdownField) {
125        pc4uPostcodeSearchBegin(oPostcodeField.value);
126     } else {
127        if(!oPostcodeField) {
128            // Cannot Find Postcode Field
129            alert("POSTCODES4u FORM ERROR\n\nPostcode Search Call Invalid\n - No Postcode Field Specified.");
130        } else {
131            alert("POSTCODES4u FORM ERROR\n\nPostcode Search Call Invalid\n - No Postcode Address 'Dropdown' Specified.");
132        }
133        // Ensure No Address Lookups are displayed
134        pc4uCallingFormCode = "";
135
136        // Clear Advanced Form (CF7 & GF) Values
137        pc4uFormPostcodeFieldId = "";
138        pc4uFormPostcodeFieldName ="";
139        pc4uFieldObjectForPostcode = null;
140    }
141}
142
143// ===============================================
144// Pc4uGfSearchBegin
145// =================
146// Postcodes4u Lookup Called From Gravity Form
147//    Alert Messages Improved - KRF 2026-07-26
148// ===============================================
149function Pc4uGfSearchBegin(grav_fieldId) {
150
151pc4uCallingFormCode = "";
152    pc4uFormPostcodeFieldId = "pc4uPostcode";
153    pc4uFormAddressDropdownFieldId = pc4uFormPostcodeFieldId +  '_' + "pc4uGfDropdown";
154
155    pc4uCallingFormCode = "pc4uGravPostcode";
156    pc4uFormPostcodeFieldId = grav_fieldId;
157    pc4uFormPostcodeFieldName = "";
158    pc4uFieldObjectForPostcode = null;
159    var oPostcodeField = document.getElementById(grav_fieldId + '_5');
160
161    if(oPostcodeField) {
162        oPostcodeField.value.toUpperCase();
163
164        pc4uPostcodeSearchBegin(oPostcodeField.value);
165    } else {
166         // Cannot Find Postcode Field
167        alert("POSTCODES4u GRAVITY FORM ERROR\n\nPostcode Search Call Invalid - No Postcode Field Specified.");
168
169        // Ensure No Address Lookups are displayed
170        pc4uCallingFormCode = "";
171
172        // Clear Advanced Form (CF7 & GF) Values
173        pc4uFormPostcodeFieldId = "";
174        pc4uFormPostcodeFieldName ="";
175        pc4uFieldObjectForPostcode = null;
176    }
177}
178
179// =====================================================
180// Pc4uWooSearchBillingBegin
181// =========================
182// Postcodes4u Lookup Called From WooCommerce Checkout
183// - Billing Address
184//    Alert Messages Improved - KRF 2026-07-26
185// =====================================================
186function Pc4uWooSearchBillingBegin() {
187    // Ensure Billing county is set to UK
188   var dCountry = document.getElementById("billing_country");
189    if (dCountry == null || dCountry.value == "GB" || dCountry.value == null || dCountry.value == "") {
190        // Process WooCommerce Billing Postcode
191        pc4uCallingFormCode = "pc4uWooBilling";
192        // Clear Advanced Form (CF7) Values
193        pc4uFormPostcodeFieldId = "billing_postcode";
194        pc4uFormPostcodeFieldName ="";
195	pc4uFieldObjectForPostcode = null;
196        pc4uFormAddressDropdownFieldId ="pc4uWooBillingDropdown";
197
198        var oPostcodeField = document.getElementById(pc4uFormPostcodeFieldId);
199        if(oPostcodeField) {
200            oPostcodeField.value.toUpperCase();
201            pc4uPostcodeSearchBegin(oPostcodeField.value);
202        } else {
203             // Cannot Find Postcode Field
204            alert("POSTCODES4u WOOCOMMERCE BILLING FORM ERROR\n\nPostcode Search Call Invalid\n - No Postc
204ode Field Specified.");
205
206            // Ensure No Address Lookups are displayed
207            pc4uCallingFormCode = "";
208
209            // Clear Advanced Form (CF7 & GF) Values
210            pc4uFormPostcodeFieldId = "";
211            pc4uFormPostcodeFieldName ="";
212            pc4uFieldObjectForPostcode = null;
213        }
214    } else {
215        // Invalid Country
216        alert("POSTCODES4u WOOCOMMERCE BILLING FORM ERROR\n\nPostcode Search is only valid when the country is set as the UK.");
217
218        pc4uCallingFormCode = "";
219
220        // Clear Advanced Form (CF7 & GF) Values
221        pc4uFormPostcodeFieldId = "";
222        pc4uFormPostcodeFieldName ="";
223	pc4uFieldObjectForPostcode = null;
224
225        // Ensure No Address Lookups are displayed
226        var lookupDropdown = document.getElementById("pc4uWooBillingDropdown");
227
228        // Use New 'Hide' Function KRF 2020.04.30
229        // -- Do Not Clear Dropdown
230        hidePc4uAddressDropdown(lookupDropdown, false);
231    }
232}
233
234// ====================================================
235// Pc4uWooSearchShippingBegin
236// ==========================
237// Postcodes4u Lookup Called From WooCommerce Checkout
238// - Shipping Address
239//    Alert Messages Improved - KRF 2026-07-26
240// ====================================================
241function Pc4uWooSearchShippingBegin() {
242    // Ensure Shipping county is set to UK
243    var dCountry = document.getElementById("shipping_country");
244    if (dCountry == null || dCountry.value == "GB" || dCountry.value == null || dCountry.value == "") {
245        // Process WooCommerce Shipping Postcode
246        pc4uCallingFormCode = "pc4uWooShipping";
247
248        // Clear Advanced Form (CF7 & GF) Values
249        pc4uFormPostcodeFieldId = "shipping_postcode";
250        pc4uFormPostcodeFieldName ="";
251	pc4uFieldObjectForPostcode = null;
252        pc4uFormAddressDropdownFieldId = "pc4uWooShippingDropdown";
253
254        var oPostcodeField = document.getElementById(pc4uFormPostcodeFieldId);
255        if(oPostcodeField) {
256            oPostcodeField.value.toUpperCase();
257            pc4uPostcodeSearchBegin(oPostcodeField.value);
258        } else {
259             // Cannot Find Postcode Field
260            alert("POSTCODES4u WOOCOMMERCE SHIPPING FORM ERROR\n\nPostcode Search Call Invalid - No Postcode Field Specified.");
261
262            // Ensure No Address Lookups are displayed
263            pc4uCallingFormCode = "";
264
265            // Clear Advanced Form (CF7 & GF) Values
266            pc4uFormPostcodeFieldId = "";
267            pc4uFormPostcodeFieldName ="";
268            pc4uFieldObjectForPostcode = null;
269        }      
270    } else {
271        // Invalid Country
272        alert("POSTCODES4u WOOCOMMERCE SHIPPING FORM ERROR\n\nPostcode Search is only valid when the country is set as the UK.");
273        pc4uCallingFormCode = "";
274
275        // Clear Advanced Form (CF7 && GF) Values
276        pc4uFormPostcodeFieldId = "";
277        pc4uFormPostcodeFieldName ="";
278	pc4uFieldObjectForPostcode = null;
279
280        // Ensure No Address Lookups are displayed
281        var lookupDropdown = document.getElementById("pc4uWooShippingDropdown");
282        if (lookupDropdown !== null) {
283            // Use New 'Hide' Function KRF 2020.04.30
284            // -- Do Not Clear Dropdown
285            hidePc4uAddressDropdown(lookupDropdown, false);
286        }
287    }
288}
289
290// ===============================================
291// Pc4uCF7SearchBegin
292// ==================
293// Postcodes4u Lookup Called From Contact Form 7
294// Added support for Multi Forms
295// Alert Messages Improved - KRF 2026-07-26
296// ===============================================
297function Pc4uCF7SearchBegin(cf7PostCodeFieldDiv, cf7PostCodeFieldSet, cf7PostCodeForm, cf7PostCodeTagName, cf7TagField) {
298    pc4uFieldObjectForPostcode = null;
299    var postcodeSearchValue = "" ;
300
301    // Process Contact Form 7 Postcode
302    pc4uCallingFormCode = "pc4uCF7Postcode";
303    pc4uFormPostcodeFieldId = "";
304    pc4uFormPostcodeFieldName = "";
305    pc4uFormPostcodeDropdownFieldName = "";
306
307    // Ensure Contact Form 7 Field Set
308    // Decode Postcode Field Id
309    if(cf7TagField) {
310        if(cf7TagField.id) {
311            pc4uFormPostcodeFieldId = cf7TagField.id;
312            pc4uFormPostcodeFieldName = cf7PostCodeTagName;
313            pc4uFieldObjectForPostcode = null;
314            cf7TagField.value.toUpperCase();
315            postcodeSearchValue = cf7TagField.value;
316        } else {
317            // Check For Single Entry Array
318            if(cf7TagField.length == 1) {
319                pc4uFormPostcodeFieldId = cf7TagField["0"].id;
320                pc4uFormPostcodeFieldName = cf7TagField["0"].name;
321                pc4uFieldObjectForPostcode = null;
322                cf7TagField["0"].value.toUpperCase();
323                postcodeSearchValue = cf7TagField["0"].value;
324            }
325        }
326    }
327
328    // Decode Postcode DropdownID
329    pc4uFormAddressDropdownFieldId = "pc4uCF7Dropdown";
330    if(cf7PostCodeTagName) {
331         pc4uFormAddressDropdownFieldId = pc4uFormAddressDropdownFieldId + "_" + cf7PostCodeTagName;
332    }
333
334    // Check For Div Group
335    if(cf7PostCodeFieldDiv || cf7PostCodeFieldSet) {
336        if(cf7PostCodeFieldDiv) {
337            pc4uFieldObjectForPostcode = cf7PostCodeFieldDiv;
338        } else {
339            // Process Form/Fieldsets
340            pc4uFieldObjectForPostcode = cf7PostCodeFieldSet;
341        }
342
343        var oChildField = pc4uFieldObjectForPostcode.querySelectorAll("[id*='pc4upostcode']");  // Search for fields containing
344        if(oChildField && oChildField.length > 0) {
345            pc4uFormPostcodeFieldId  = oChildField.id;
346            //pc4uFormPostcodeFieldId  = "pc4upostcode"
347            pc4uFormPostcodeFieldName = "pc4upostcode";
348            oChildField[0].value.toUpperCase();
349            postcodeSearchValue = oChildField[0].value
350        }
351
352        // Get Dropdown
353        oChildField = pc4uFieldObjectForPostcode.querySelectorAll("[id*='pc4uCF7Dropdown']");  // Search for fields containing
354        if(oChildField && oChildField.length > 0) {
355            pc4uFormAddressDropdownFieldId  = oChildField[0].id;
356        }
357    }
358
359    if(pc4uFormPostcodeFieldName === "") {
360        if(cf7PostCodeForm) {
361            oFieldElements = cf7PostCodeForm.elements;
362            if(oFieldElements && oFieldElements.length > 0) {
363                for (var i = 0; i < oFieldElements.length; i++) {
364                    if(oFieldElements[i].id.indexOf("pc4upostcode") !== -1) {
365                        pc4uFormPostcodeFieldId  = oFieldElements[i].id;
366                        pc4uFormPostcodeFieldName = "pc4upostcode";
367                        pc4uFieldObjectForPostcode = cf7PostCodeForm;
368                        //
369                        oFieldElements[i].value.toUpperCase();
370                        postcodeSearchValue = oFieldElements[i].value
371                        break ;
372                    }
373                }
374            } else {
375                // IE Compatability  - Use QuerySelect
376                //
377                var oChildForm = cf7PostCodeForm.querySelectorAll("[id*='pc4upostcode']"); // Search for 'Includes'
378                if(oChildForm && oChildForm.length > 0) {
379                    pc4uFormPostcodeFieldId  = oChildForm[0].id;
380                    // pc4uFormPostcodeFieldId  = "pc4upostcode"
381                    pc4uFormPostcodeFieldName = "pc4upostcode";
382                    pc4uFieldObjectForPostcode = cf7PostCodeForm;
383
384                    oChildForm[0].value.toUpperCase();
385                    postcodeSearchValue = oChildForm[0].value
386                }
387            }
388        }
389    }
390
391    if(pc4uFormPostcodeFieldId || pc4uFormPostcodeFieldName) {
392
393        pc4uPostcodeSearchBegin(postcodeSearchValue);
394    } else {
395        // Invalid Field Tag
396        alert("POSTCODES4u CONTACT FORM 7 ERROR\n\nPostcode Search Call Invalid\n - No Postc
396ode Field Specified.");
397
398        // Ensure No Address Lookups are displayed
399        var lookupDropdown = null;
400        if(pc4uCf7PostcodeForm.elements && pc4uCf7PostcodeForm.elements.length > 0) {
401            lookupDropdown = pc4uCf7PostcodeForm.elements[pc4uFormAddressDropdownFieldId];
402        } else {
403             // IE Compatability  - Use QuerySelect
404             var oChildDrop = cf7PostCodeFieldSet.querySelectorAll("[id*='" + pc4uCF7Dropdown + "']"); // Search For 'Includes'
405             if(oChildDrop && oChildDrop.length > 0) {
406                 lookupDropdown = oChildDrop[0];
407             }
408        }
409
410        if(lookupDropdown) {
411            // Use New 'Hide' Function KRF 2020.04.30
412            // -- Do Not Clear Dropdown
413            hidePc4uAddressDropdown(lookupDropdown, false);
414        }
415        pc4uCallingFormCode = "";
416
417        // Clear Advanced Form (CF7 & GF) Values
418        pc4uFormPostcodeFieldId = "";
419        pc4uFormPostcodeFieldName ="";
420	pc4uFieldObjectForPostcode = null;
421    }
422}
423
424// ===============================================
425// pc4uPostcodeSearchBegin
426// Postcodes4u Lookup Common 'Start Search Process'
427//  Generate Postcodes4u Search Request
428//  Updated 2020.01.30 To Suppress Lookups
429//     when no address selected
430//  Updated 2026.07.24 - New Ajax Calls with
431//     Hidden Key and Username
432// ===============================================
433function pc4uPostcodeSearchBegin( searchPostcode) {
434    var scriptTag = document.getElementById("postcodes4youelement");
435    var headTag = document.getElementsByTagName("head").item(0);
436    var strUrl = "";
437
438    var pc4uShowWarnings = '0';
439    var pc4uSelectAddressDropdownText = "Select an address:";
440    var searchError = false ;
441
442
443    // Get 'Show Warnings' Option
444    var oField = document.getElementById("pc4ushow_warnings");
445    if(oField) {
446        pc4uShowWarnings = (oField.textContent).trim();
447    } else {
448        oField = document.querySelector("[id^='pc4ushow_warnings']");
449        //oField = document.querySelector("[data-orig_id='pc4ushow_warnings']");
450        if(oField) {
451            pc4uShowWarnings = (oField.textContent).trim();
452        }   
453    }
454    pc4uShowLookupWarnings = pc4uShowWarnings;
455
456    // Get 'Select Address Dropdown' Text
457    var oField = document.getElementById("pc4uselect_text");
458    if(oField) {
459        pc4uSelectAddressDropdownText = (oField.textContent).trim();
460    } else {    
461        oField = document.querySelector("[id^='pc4uselect_text']");
462        //oField = document.querySelector("[data-orig_id='pc4ushow_warnings']");
463        if(oField) {
464            pc4uSelectAddressDropdownText = (oField.textContent).trim();
465        }
466        if(pc4uSelectAddressDropdownText == '') {
467            pc4uSelectAddressDropdownText = "Select an address:";
468        }
469    }
470    
471    pc4uSelectAddressText = pc4uSelectAddressDropdownText;
472
473
474    // Ensure Postcode is specified
475    if (searchPostcode !== null && searchPostcode != "" && searchPostcode.trim() != "") {
476        searchPostcode = searchPostcode.trim();
477        
478        // CALL AJAX - KRF 2026-07-06 
479        jQuery.ajax({
480                type : "POST",
481                // dataType : "json",
482                url : my_ajax_obj.ajax_url,
483                
484                data : {
485                    action: 'pc4u_searchpostcode',
486                    nonce: my_ajax_obj.nonce,
487                    security: my_ajax_obj.nonce,
488                    postcode: searchPostcode
489                },
490                success : function(response) {   
491                    Pc4uSearchEnd(response);
492                },
493		
494                error: function (xhr, ajaxOptions, thrownError) {
495                    alert(xhr.status);
496                    alert(thrownError);
497                },
498                complete: function(){
499                    // alert("Complete");
500                }
501        });
502    } else {
503        // NO POSTCODE SPECIFIED
504        if(pc4uShowWarnings === '1') {
505            alert("POSTCODES4u SEARCH ERROR\n\n NO POSTCODE SPECIFIED");
506        }
507        searchError = true;
508    }
509
510    // Display Hidden Gravity Form If Error
511    if(searchError) {        
512        if (pc4uCallingFormCode == "pc4uGravPostcode") {
513            // If Gravity Form Ensure NOT Hidden
514            showPc4uGFHiddenAddress(pc4uFormPostcodeFieldId)
515        } 
516    }
517}
518
519// =================================================================
520// Pc4uSearchEnd
521// =============
522// Postcodes4u Lookup 'Return 'Callback' Function
523//  Show matching Postcode Addresses Postcodes4u Search Request
524//  Modified for 1.4.2 For Multiple CF7 Forms
525//  Modified for 1.4.3 For Gravity Form
526//  Modified for 1.6.0 New Ajax Calls - For Hidden Postcodes4u Key 
527//  and Username    -  Updated 2026.07.24
528//  Modified for 1.6.1  Fix Error Checking/Reporting Issues  
529//     Updated 2026.07.26
530// =================================================================
531function Pc4uSearchEnd(oResponse) {
532    var pc4uDropdownFieldID = "pc4uDropdown";
533    var pc4uDropdownFieldName = "";
534    var oForm = null;
535    var lookupDropdown;
536    var oResponseData ;
537    var noSearchResuts = false ;
538    var ajaxError = false ;
539    
540    var errorMsg = '';
541    
542    // Decode Calling Form Code - Dropdown List  Field
543    if (pc4uCallingFormCode == "pc4uWooBilling") {
544        pc4uDropdownFieldID = "pc4uWooBillingDropdown"
545
546    } else {
547        if (pc4uCallingFormCode == "pc4uWooShipping") {
548            pc4uDropdownFieldID = "pc4uWooShippingDropdown"
549        } else {
550            if(pc4uCallingFormCode == "pc4uCF7Postcode") {
551                pc4uDropdownFieldID = pc4uFormAddressDropdownFieldId
552                pc4uDropdownFieldName = "pc4uCF7Dropdown";
553                oForm = pc4uFieldObjectForPostcode;
554            } else {
555                if (pc4uCallingFormCode == "pc4uGravPostcode") {
556                    pc4uDropdownFieldID = pc4uFormPostcodeFieldId +  '_' + "pc4uGfDropdown";
557                } else {
558                    if (pc4uCallingFormCode == "pc4uAdHocPostcode") {
559                        pc4uDropdownFieldID = pc4uFormAddressDropdownFieldId;
560
561                    } else {
562                        if (pc4uCallingFormCode == "" ||pc4uCallingFormCode == "pc4u") {
563                            pc4uDropdownFieldID = "pc4uDropdown";
564                        }
565                    }
566		}
567            }
568        }
569    }
570
571    // Get Dropdown - Use Form Object If Provides (Initially for CF7)
572    if(oForm ) {
573        // Check Elements Object Exists (Modern Browser)
574        if(oForm.elements && oForm.elements.length > 0) {
575            lookupDropdown = oForm.elements[pc4uFormAddressDropdownFieldId];
576        } else {
577            // Legacy Browser (IE)
578            var oLegacyObj = oForm.querySelectorAll("[id*='"+pc4uDropdownFieldID+"']");
579            if(oLegacyObj && oLegacyObj.length > 0) {
580                lookupDropdown = oLegacyObj[0];
581            }
582        }
583    } else {
584        lookupDropdown = document.getElementById(pc4uDropdownFieldID);
585    }
586
587    // Check For Error - Updated/Improved for V1.6+ Ajax Calls
588    if(CheckForAjaxError(oResponse, "POSTCODES4u SEARCH POSTCODE ERROR") === true  ) {
589        
590        //  ERROR DETECTED
591        // Clear DropDown List
592        if(lookupDropdown) {
593            // Use New 'Hide' Function KRF 2020.04.30
594            // -- Clear Dropdown
595            hidePc4uAddressDropdown(lookupDropdown, true);
596        }
597    } else {
598        //  NO ERROR DETECTED
599        oResponseData = oResponse.data;
600
601        // --- PROCESS VALID POSTCODE SEARCH RESPONSE --------
602        // Return Address List
603        var addresslist = oResponse.data["Summaries"];
604
605        //Check if there were any items found
606        if (addresslist.length == 0) {
607            // Clear DropDown List - ID HardCoded in Plugin
608            if(lookupDropdown) {
609
610                // Use New 'Hide' Function KRF 2020.04.30
611                // -- Clear Dropdown
612                hidePc4uAddressDropdown(lookupDropdown, true);
613            }
614            if(pc4uShowLookupWarnings === '1') {
615                alert("POSTCODES4u WARNING\n\n ** INVALID POSTCODE **\n\nNo matching items (addresses) found for postcode");
616            }
617            noSearchResuts = true ;
618        } else {
619            try{
620                lookupDropdown.innerHTML = "";
621                lookupDropdown.options.add(new Option(pc4uSelectAddressText, "", true, true));
622                for (var j = 0; j < addresslist.length; j++) {
623                    lookupDropdown.options.add(new Option(addresslist[j].StreetAddress + ", " + addresslist[j].Place, addresslist[j].Id));
624                }
625
626                // Use New 'Show' Pc4u Address Dropdown Function KRF 2020.04.30
627                showPc4uAddressDropdown(lookupDropdown);
628            }
629            catch (e) {
630                //Ignore unless Warnings On
631                if(pc4uShowLookupWarnings === '1') {
632                    alert("POSTCODES4u WARNING\n\nSearchEnd Dropdown Error:"+ e.message);
633                }
634            }
635        }
636    }
637
638    if(noSearchResuts) {
639        var showAddressWhenComplete;
640        if (pc4uCallingFormCode == "pc4uGravPostcode") {
641            // Gravity Forms
642            showAddressWhenComplete = document.getElementById(pc4uFormPostcodeFieldId+"_pc4uGfPostcodeLookupAddress");
643
644            // If Gravity Form Ensure NOT Hidden
645            if(showAddressWhenComplete) {
646                showAddressWhenComplete.style.display = ''; 
647            }
648        }
649    }
650    // Clear Calling Form Details
651    pc4uCallingFormCode = "";
652}
653
654// ===========================================================
655// Pc4uSearchIdGfBegin
656// ===================
657// Postcodes4u Lookup Contact Form 7 'Select Address Process'
658//  Return Selected Address Details
659// ===========================================================
660function Pc4uSearchIdGfBegin() {
661    return Pc4uSearchIdBegin("pc4uGravPostcode");
662}
663
664// ===========================================================
665// Pc4uSearchIdCf7Begin
666// ====================
667// Postcodes4u Lookup Contact Form 7 'Select Address Process'
668//  Return Selected Address Details
669//  - Modified for 1.4.2 to work with Multiple Forms
670// ===========================================================
671function Pc4uSearchIdCf7Begin(cf7PostCodeFieldDiv, cf7PostCodeFieldSet, cf7PostCodeForm) {
672    return Pc4uFormSearchIdBegin(cf7PostCodeFieldDiv, cf7PostCodeFieldSet, cf7PostCodeForm,"pc4uCF7Postcode");
673}
674
675// ==============================================================
676// Pc4uSearchIdAdHocBegin
677// ======================
678//   Postcodes4u Lookup Contact Form 7 'Select Address Process'
679//    Return Selected Address Details
680//  All Fields are Optional - Esp Country COuntry Type, 
681//   AddressLIne & AddressBlock
682//   Updated KRF 23.08.14 Include Optional AddressLine and Block
683//   Fields.
684// ==============================================================
685function Pc4uSearchIdAdHocBegin(addCompanyId, addAddress1Id, addAddress2Id, addAddress3Id, addAddressTownId, addAddressCountyId, addressNationCountryId, addressNationCountryType, addAddressLineId, addAddressBlockId) {
686    pc4uFormAddressCompanyFieldId = addCompanyId;
687    pc4uFormAddressLine1FieldId = addAddress1Id;
688    pc4uFormAddressLine2FieldId = addAddress2Id;
689    pc4uFormAddressLine3FieldId = addAddress3Id;
690    pc4uFormAddressTownFieldId = addAddressTownId;
691    pc4uFormAddressCountyFieldId = addAddressCountyId;
692    // Optional Country Display Options
693    pc4uFormAddressNationCountryFieldId = addressNationCountryId;    
694    pc4uFormAddressNationCountryType = "";
695    
696    // Optional Address Line and Block Display Options
697    pc4uFormAddressLineFieldId = "";
698    pc4uFormAddressBlockFieldId = "";
699    // Country
700    if(pc4uFormAddressNationCountryFieldId){
701        if(addressNationCountryType) {
702            pc4uFormAddressNationCountryType = addressNationCountryType;
703        } else {
704            pc4uFormAddressNationCountryType = "text";
705        }
706    }
707    // Address Line
708    if(addAddressLineId) {
709        pc4uFormAddressLineFieldId = addAddressLineId;
710    }
711    
712    // Address Block
713    if(addAddressBlockId) {
714        pc4uFormAddressBlockFieldId = addAddressBlockId;
715    }
716    
717    return Pc4uSearchIdBegin("pc4uAdHocPostcode");
718}
719
720// ====================================================
721// Pc4uSearchIdBegin
722// =================
723// Postcodes4u Lookup Common 'Select Address Process'
724//  Return Selected Address Details
725//  Updated 2020.01.30 TO Suppress Lookups
726//     when no address selected
727//  Updated 2026.07.24 - New Ajax Calls
728//   - Hidden Pc4u Username and Key
729//  Updated 2026.07.26 - New Ajax Calls Error Handling 
730//    updates. Plus Copy tidy up
731// ====================================================
732function Pc4uSearchIdBegin(lookupcode) {
733    var pc4uDropdownFieldID = "pc4uDropdown";
734    pc4uLookupFormCode = lookupcode;
735
736    if (pc4uLookupFormCode == "pc4uWooBilling") {
737        pc4uDropdownFieldID = "pc4uWooBillingDropdown";
738    } else {
739        if (pc4uLookupFormCode == "pc4uWooShipping") {
740            pc4uDropdownFieldID = "pc4uWooShippingDropdown";
741        } else {
742            if (pc4uLookupFormCode == "pc4uCF7Postcode") {
743                pc4uDropdownFieldID = "pc4uCF7Dropdown";
744            }else {
745            	if (pc4uLookupFormCode == "pc4uGravPostcode") {
746            	    pc4uDropdownFieldID =  pc4uFormPostcodeFieldId +  '_' + "pc4uGfDropdown";
747                }else {
748                    if (pc4uLookupFormCode == "pc4uAdHocPostcode") {
749                        pc4uDropdownFieldID = pc4uFormAddressDropdownFieldId;
750                    } else {
751                         if (pc4uLookupFormCode == "" ||  (pc4uLookupFormCode == "pc4u")) {
752                            pc4uDropdownFieldID = "pc4uDropdown";
753                         }
754                    }
755                }
756            }
757        }
758    }
759
760    var AddrId = "";
761    var pc4uShowWarnings = '0';
762
763    var oField = document.getElementById(pc4uDropdownFieldID);
764    if(oField) {
765        AddrId = oField.value;
766    }
767
768    // Ensure Value id an Address ID
769    if(AddrId && !isNaN(AddrId)) {
770                         
771        // CALL AJAX - KRF 2026-07-24
772        jQuery.ajax({
773                type : "POST",
774                // dataType : "json",
775                url : my_ajax_obj.ajax_url,
776                
777                data : {
778                    action: 'pc4u_selectaddress',
779                    nonce: my_ajax_obj.nonce,
780                    security: my_ajax_obj.nonce, 
781                    addressid: AddrId
782                },
783                success : function(response) {   
784                    Pc4uSearchIdEnd(response);
785                },
786		
787                error: function (xhr, ajaxOptions, thrownError) {
788                    alert(xhr.status);
789                    alert(thrownError);
790                },
791                complete: function(){
792                    //  alert("Complete");
793                }
794        });
795        
796    } else {
797        // NO ID - Assume Form Not Displayed - Ignore
798    }
799}
800
801
802
803// ====================================================
804// Pc4uFormSearchIdBegin
805// =====================
806// Postcodes4u Lookup Common 'Select Address Process'
807//  Return Selected Address Details
808//   - Modified for 1.4.2 to work with Multiple Forms
809//  Updated 2026.07.24 - New Ajax Calls
810//   - Hidden Pc4u Username and Key
811// ====================================================
812function Pc4uFormSearchIdBegin(cf7PostCodeFieldDiv, cf7PostCodeFieldSet, cf7PostCodeForm, lookupcode) {
813    var pc4uDropdownFieldID = "pc4uDropdown";
814    var pc4uDropdownFieldName = "";
815    var pc4ObjElements = null;
816    pc4uLookupFormCode = lookupcode;
817
818    var lookupDropdown;
819
820    if (pc4uLookupFormCode == "pc4uWooBilling") {
821        pc4uDropdownFieldID = "pc4uWooBillingDropdown";
822        pc4uFieldObjectForPostcode = null;
823        lookupDropdown = document.getElementById(pc4uDropdownFieldID);
824    } else {
825        if (pc4uLookupFormCode == "pc4uWooShipping") {
826            pc4uDropdownFieldID = "pc4uWooShippingDropdown";
827            pc4uFieldObjectForPostcode = null;
828            lookupDropdown = document.getElementById(pc4uDropdownFieldID);
829        } else {
830            if (pc4uLookupFormCode == "pc4uCF7Postcode") {
831                pc4uDropdownFieldID = pc4uFormAddressDropdownFieldId
832                pc4uDropdownFieldName = "pc4uCF7Dropdown";
833
834                if(cf7PostCodeFieldDiv || cf7PostCodeFieldSet || cf7PostCodeForm) {
835                    if(cf7PostCodeFieldDiv) {
836                        pc4ObjElements = cf7PostCodeFieldDiv.querySelectorAll("*")
837                        if(pc4ObjElements && pc4ObjElements.length > 0) {
838                            //Legacy (IE) Browser Code - Use QuerySelect
839                            var oFieldSetDrop = cf7PostCodeFieldDiv.querySelectorAll("[id*='"+pc4uDropdownFieldID+"']");
840                            if(oFieldSetDrop && oFieldSetDrop.length > 0) {
841                                lookupDropdown = oFieldSetDrop[0];
842                                pc4uFieldObjectForPostcode = cf7PostCodeFieldDiv;
843                            }
844                        }
845                    }
846                    if(!lookupDropdown) {
847                        if(cf7PostCodeFieldSet) {
848                            //Legacy (IE) Browser Code - Use QuerySelect
849                            var oFieldSetDrop = cf7PostCodeFieldSet.querySelectorAll("[id*='"+pc4uDropdownFieldID+"']");
850                            if(oFieldSetDrop && oFieldSetDrop.length > 0) {
851                                lookupDropdown = oFieldSetDrop[0];
852                                pc4uFieldObjectForPostcode = cf7PostCodeFieldSet;
853                            }
854                        }
855                    }
856                    if(!lookupDropdown) {
857                        if(cf7PostCodeForm) {
858                            if(cf7PostCodeForm.elements && cf7PostCodeForm.elements.length > 0) {
859                                // Modern Browser Code
860                                lookupDropdown = cf7PostCodeForm.elements[pc4uDropdownFieldName];
861                                pc4uFieldObjectForPostcode = cf7PostCodeForm;
862                            } else {
863                                //Legacy (IE) Browser Code - Use QuerySelect
864                                var oFormDrop = cf7PostCodeForm.querySelectorAll("[id*='"+pc4uDropdownFieldID+"']");
865                                if(oFormDrop && oFormDrop.length > 0) {
866                                    lookupDropdown = oFormDrop[0];
867                                    pc4uFieldObjectForPostcode = cf7PostCodeForm;
868                                }
869                            }
870                        }
871                    }
872                } else {
873                    pc4uFieldObjectForPostcode = null;
874                }
875
876                if(!lookupDropdown) {
877                     // Last Change - Check Document
878                    if(document.elements && document.elements.length > 0) {
879                        lookupDropdown = document.elements(pc4uDropdownFieldName);
880                    } else {
881                        //Legacy (IE) Browser Code - Use QuerySelect
882                        var oFormDrop = cf7PostCodeForm.querySelectorAll("[id*='"+pc4uDropdownFieldID+"']");
883                        if(oFormDrop && oFormDrop.length > 0) {
884                            lookupDropdown = oFormDrop[0];
885                        }
886                    }
887                }
888            }
889        }
890    }
891
892    var AddrId = lookupDropdown.value;    
893    var pc4uShowWarnings = '0';
894
895    // Ensure Value id an Address ID
896    if(AddrId && !isNaN(AddrId)) {
897        
898        // CALL AJAX - KRF 2026-07-24
899        jQuery.ajax({
900                type : "POST",
901                // dataType : "json",
902                url : my_ajax_obj.ajax_url,
903                
904                data : {
905                    action: 'pc4u_selectaddress',
906                    nonce: my_ajax_obj.nonce,
907                    security: my_ajax_obj.nonce,
908                    addressid: AddrId
909                },
910                success : function(response) {   
911                    Pc4uSearchIdEnd(response);
912                },
913		
914                error: function (xhr, ajaxOptions, thrownError) {
915                    alert(xhr.status);
916                    alert(thrownError);
917                },
918                complete: function(){
919                     // alert("Complete");
920                }
921        });
922    } else {
923        // NO ID - Assume Form Not Displayed - Ignore
924    }
925}
926
927// ====================================================================
928// Pc4uSearchIdEnd
929// ===============
930// Postcodes4u Lookup 'Single Address Select Return 'Callback' Function
931//  Populate Relavant Address Form with Returned Details
932//  Modified for 1.6.0 New Ajax Calls - For Hidden Postcodes4u Key 
933//  and Username    -  Updated 2026.07.24
934//  Modified for 1.6.1  Fix Error Checking/Reporting Issues  
935//     Updated 2026.07.25
936//  Updated 2026.07.26 - New Ajax Calls Error Handling 
937//    updates. Plus Copy tidy up
938// ====================================================================
939function Pc4uSearchIdEnd(oResponse) {
940
941    var showGfAddressWhenComplete = document.getElementById(pc4uFormPostcodeFieldId+"_pc4uGfPostcodeLookupAddress");
942
943    var oResponseData;
944    var ajaxError = false;
945    var errorMsg = '';    
946    
947    // Check For Error - Updated/Improved for V1.6+ Ajax Calls
948    if(CheckForAjaxError(oResponse, "POSTCODES4u SELECT ADDRESS ERROR") === true  ) {
949    
950        // If Gravity Form Ensure NOT Hidden
951        if(showGfAddressWhenComplete) {
952            //
953            showGfAddressWhenComplete.style.display = "inline";
954        }
955    } else {
956        // NO ERROR DETECTED  -
957        // Decode Address Response
958        var oResponseData = oResponse.data;
959        if(oResponseData === null || oResponseData.length ===0) {
960            // Error
961        } else {
962            //Check if there were any items found
963            var pc4uAddressObg = oResponseData["Address"];             
964        }
965        
966        if(pc4uAddressObg === null) {            
967
968            // If Gravity Form Ensure NOT Hidden
969            if(showGfAddressWhenComplete) {
970                //
971                showGfAddressWhenComplete.style.display = "inline";
972            }
973        } else {
974            // Decode Address            
975
976            // Get Alt Address Format Setting
977            var altAddressFmt = "";
978            var altAddressFmtElement = document.getElementById('pc4ualt_address_disp');
979            if (altAddressFmtElement != null && altAddressFmtElement.value != '') {
980                altAddressFmt = altAddressFmtElement.textContent;
981            }
982            // Get County Value Setting
983            var countyDisp = "";
984            var countyNameElement = document.getElementById('pc4ucounty_disp');
985            if (countyNameElement != null && countyNameElement.value != '') {
986                countyDisp = countyNameElement.textContent;
987            }
988
989            // Decode Calling Form Code - Dropdown List  Field
990            if (pc4uLookupFormCode == "pc4uWooBilling") {
991                // Woo Commerce Billing
992                Pc4uProcessWooBillingAddress(pc4uAddressObg, altAddressFmt, countyDisp);
993
994            } else {
995                if (pc4uLookupFormCode == "pc4uWooShipping") {
996                    // Woo Commerce Shipping
997                    Pc4uProcessWooShippingAddress(pc4uAddressObg, altAddressFmt, countyDisp);
998
999                } else {
1000                    if (pc4uLookupFormCode == "pc4uCF7Postcode") {
1001                        // Contact Form 7
1002                        Pc4uProcessCf7Address(pc4uAddressObg, altAddressFmt, countyDisp);
1003
1004                    } else {
1005			if (pc4uLookupFormCode == "pc4uGravPostcode") {
1006                            // Gravity Form
1007	                    Pc4uProcessGravAddress(pc4uAddressObg, altAddressFmt, countyDisp);
1008                        } else {
1009                            if (pc4uLookupFormCode == "pc4uAdHocPostcode") {
1010                                // 'AdHoc' Postcode - Fields Specified
1011                                Pc4uProcessAdHocAddress(pc4uAddressObg, altAddressFmt, countyDisp);
1012                            } else {
1013                                // Default Form (3x)
1014                                Pc4uProcess3xAddress( pc4uAddressObg, altAddressFmt, countyDisp);
1015                            }
1016                        }
1017                    }
1018                }
1019            }
1020        }
1021    }
1022}
1023
1024// ====================================================================
1025// Pc4uProcessWooBillingAddress
1026// ============================
1027//  Populate #WooCommerce Billing Address
1028//  with Returned Address Details
1029// ====================================================================
1030function Pc4uProcessWooBillingAddress( respAddress, addressFmt, countyDisp) {
1031    // Woo Commerce Billing Form
1032    var companyFieldFound = false ;
1033    var townFieldFound = false ;
1034
1035    // Address Components
1036    var addressCompany = "";
1037    var addressLine1 = "";
1038    var addressLine2 = "";
1039    var addressLine3 = "";
1040    var addressTown = "";
1041    var addressCounty = "";
1042    var addressPostcode = "";
1043
1044    // WooCommerce Billing Form - Fields
1045    var addresssCompanyField ;
1046    var addressLine1Field ;
1047    var addressLine2Field ;
1048    var addressLine3Field ;
1049    var addressTownField ;
1050    var addressCountyField ;
1051    var addressPostcodeField ;
1052    var addressCountryField ;
1053
1054    // Get Company & Town Fields
1055    addresssCompanyField = document.getElementById("billing_company");
1056    if(addresssCompanyField) {
1057        companyFieldFound = true ;
1058    }
1059    addressTownField = document.getElementById("billing_city");
1060    if(addressTownField) {
1061        townFieldFound = true ;
1062    }
1063
1064    // Get Remaining Address Fields
1065    addressLine1Field = document.getElementById("billing_address_1");
1066    addressLine2Field = document.getElementById("billing_address_2");
1067    addressLine3Field = document.getElementById("billing_address_3");
1068    addressCountyField = document.getElementById("billing_state");
1069    addressPostcodeField = document.getElementById("billing_postcode");
1070    addressCountryField = document.getElementById("billing_country");
1071
1072
1073    var fmtAddress ;
1074
1075    if( addressFmt.trim() == '1') {
1076        // Alternative Address Format
1077        // Decode
1078        fmtAddress = Pc4uDecodeAddressFormat1( respAddress, companyFieldFound, townFieldFound, countyDisp);
1079    } else {
1080         // NORMAL ADDRESS - RAW RETURNED DATA
1081        fmtAddress = Pc4uReturnRawAddress(respAddress, companyFieldFound, townFieldFound, countyDisp);
1082    }
1083
1084    addressCompany = fmtAddress.AddCompany;
1085    addressLine1 = fmtAddress.AddLine1;
1086    addressLine2 = fmtAddress.AddLine2;
1087    addressLine3 = fmtAddress.AddLine3;
1088    addressTown = fmtAddress.AddTown;
1089    addressCounty = fmtAddress.AddCounty;
1090    addressPostcode = fmtAddress.AddPostcode.toUpperCase();
1091
1092    //Populate Address Fields
1093    if(addresssCompanyField) {
1094        addresssCompanyField.value = addressCompany;
1095    }
1096    if(addressLine1Field){
1097        addressLine1Field.value = addressLine1;
1098    }
1099
1100    //Pack Line 3 Details onto Line 2 If 3 Not Found
1101    if(addressLine2Field){
1102        addressLine2Field.value = addressLine2;
1103
1104        if(!addressLine3Field) {
1105            if(addressLine3 !== "") {
1106                if(addressLine2Field.value !== "") {
1107                    addressLine2Field.value = addressLine2Field.value.trim() + ", ";
1108                }
1109                addressLine2Field.value += addressLine3;
1110                addressLine3 = "";
1111            }
1112        }
1113    }
1114    if(addressLine3Field){
1115        addressLine3Field.value = addressLine3;
1116    }
1117
1118    if(addressTownField){
1119        addressTownField.value = addressTown;
1120    }
1121    if(addressCountyField) {
1122        addressCountyField.value = addressCounty;
1123    }
1124    if(addressPostcodeField) {
1125        addressPostcodeField.value = addressPostcode;
1126    }
1127    // Set Country to UK (GB)
1128    if(addressCountryField){
1129        addressCountryField.value = "GB";
1130    }
1131
1132    // Clear/Reset Dropdown
1133    var lookupDropdown = document.getElementById("pc4uWooBillingDropdown");
1134
1135    // Use New 'Hide' Pc4u Address Dropdown Function KRF 2020.04.30
1136    //  -- Clear Dropdown
1137    hidePc4uAddressDropdown(lookupDropdown, true);
1138}
1139
1140// ======================================================================
1141// Pc4uProcessWooShippingAddress
1142// =============================
1143//  Populate WooCommerce Shipping Address
1144//  with Returned Address Details
1145// ======================================================================
1146function Pc4uProcessWooShippingAddress( respAddress, addressFmt, countyDisp) {
1147    // Woo Commerce Shipping Form
1148    var companyFieldFound = false ;
1149    var townFieldFound = false ;
1150
1151    // Address Components
1152    var addressCompany = "";
1153    var addressLine1 = "";
1154    var addressLine2 = "";
1155    var addressLine3 = "";
1156    var addressTown = "";
1157    var addressCounty = "";
1158    var addressPostcode = "";
1159
1160    // WooCommerce Shipping Form - Fields
1161    var addresssCompanyField ;
1162    var addressLine1Field ;
1163    var addressLine2Field ;
1164    var addressLine3Field ;
1165    var addressTownField ;
1166    var addressCountyField ;
1167    var addressPostcodeField ;
1168    var addressCountryField ;
1169
1170     // Get Company & Town Fields
1171    addresssCompanyField= document.getElementById("shipping_company");
1172    if(addresssCompanyField){
1173        companyFieldFound = true ;
1174    }
1175    addressTownField = document.getElementById("shipping_city");
1176    if(addressTownField){
1177        townFieldFound = true ;
1178    }
1179    // Get Remaining Address Fields
1180    addressLine1Field = document.getElementById("shipping_address_1");
1181    addressLine2Field = document.getElementById("shipping_address_2");
1182    addressLine3Field = document.getElementById("shipping_address_3");
1183    addressCountyField = document.getElementById("shipping_state");
1184    addressPostcodeField = document.getElementById("shipping_postcode");
1185    addressCountryField = document.getElementById("shipping_country");
1186
1187    var fmtAddress;
1188
1189    if( addressFmt.trim() == '1') {
1190        // ALTERNATE 'PACKED' FORMAT
1191        fmtAddress = Pc4uDecodeAddressFormat1( respAddress, companyFieldFound, townFieldFound, countyDisp);
1192    } else {
1193        // NORMAL ADDRESS - RAW RETURNED DATA
1194        fmtAddress = Pc4uReturnRawAddress(respAddress, companyFieldFound, townFieldFound, countyDisp);
1195    }
1196
1197    addressCompany = fmtAddress.AddCompany;
1198    addressLine1 = fmtAddress.AddLine1;
1199    addressLine2 = fmtAddress.AddLine2;
1200    addressLine3 = fmtAddress.AddLine3;
1201    addressTown = fmtAddress.AddTown;
1202    addressCounty = fmtAddress.AddCounty;
1203    addressPostcode = fmtAddress.AddPostcode.toUpperCase();
1204
1205    // Populate Company Details
1206    if(addresssCompanyField) {
1207        addresssCompanyField.value = addressCompany;
1208    }
1209
1210    //Populate Address Line 1-3 Fields
1211    if(addressLine1Field){
1212        addressLine1Field.value = addressLine1;
1213    }
1214
1215    //..Pack Line 3 Details onto Line 2 If 3 Not Found
1216    if(addressLine2Field){
1217        addressLine2Field.value = addressLine2;
1218
1219        if(!addressLine3Field) {
1220            if(addressLine3 !== "") {
1221                if(addressLine2Field.value !== "") {
1222                    addressLine2Field.value = addressLine2Field.value.trim() + ", ";
1223                }
1224                addressLine2Field.value += addressLine3;
1225                addressLine3 = "";
1226            }
1227        }
1228    }
1229    // Address 3 (If Present)
1230    if(addressLine3Field){
1231        addressLine3Field.value = addressLine3;
1232    }
1233
1234    // Town Field
1235    if(addressTownField){
1236        addressTownField.value = addressTown;
1237    }
1238
1239    // County Field
1240    if(addressCountyField) {
1241        addressCountyField.value = addressCounty;
1242    }
1243
1244    // Postcode Field
1245    if(addressPostcodeField) {
1246        addressPostcodeField.value = addressPostcode;
1247    }
1248    // Set Country to UK (GB)
1249    if(addressCountryField){
1250        addressCountryField.value = "GB";
1251    }
1252
1253    // Clear/Reset Dropdown
1254    var lookupDropdown = document.getElementById("pc4uWooShippingDropdown");
1255
1256    // Use New 'Hide' Pc4u Address Dropdown Function KRF 2020.04.30
1257    // -- Clear Pc4u Dropdown
1258    hidePc4uAddressDropdown(lookupDropdown, true);
1259}
1260
1261
1262// ====================================================================
1263// Pc4uProcessCf7Address
1264// =====================
1265//  Populate Contact Form 7 Address
1266//  with Returned Address Details
1267//  - Modified in 1.4.2 for multiple CF7 Forms
1268// ====================================================================
1269function Pc4uProcessCf7Address( respAddress, addressFmt, countyDisp) {
1270
1271    var oCf7Form = pc4uFieldObjectForPostcode;
1272
1273    var fillEmptyFields = true ;
1274
1275    // Contact Form7 Form - Fields
1276    var addresssCompanyField ;
1277    var addressLine1Field ;
1278    var addressLine2Field ;
1279    var addressLine3Field ;
1280    var addressTownField ;
1281    var addressCountyField ;
1282    var addressPostcodeField ;
1283    var addressSelectField ;
1284
1285    var addressSummaryLineField ;
1286    var addressSummaryBlockField ;
1287
1288    var addressHiddenField ;
1289
1290    // Needed for Address Decode
1291    var companyFieldFound = false ;
1292    var townFieldFound = false ;
1293
1294    // Address Components
1295    var addressCompany = "";
1296    var addressLine1 = "";
1297    var addressLine2 = "";
1298    var addressLine3 = "";
1299    var addressTown = "";
1300    var addressCounty = "";
1301    var addressPostcode = "";
1302
1303    var addressSummaryLine = "";
1304    var addressSummaryBlock = "";
1305
1306    var addressSummaryBlock = "";
1307
1308    // Decode Address Fields
1309    var cf7Fields = Pc4uExtractCF7FormFields( oCf7Form);
1310
1311    addresssCompanyField = cf7Fields.FormCompany;
1312    addressLine1Field = cf7Fields.FormAddLine1;
1313    addressLine2Field = cf7Fields.FormAddLine2;
1314    addressLine3Field = cf7Fields.FormAddLine3;
1315    addressTownField = cf7Fields.FormTown;
1316    addressCountyField = cf7Fields.FormCounty;
1317    addressSelectField = cf7Fields.FormSelectAddress;
1318
1319    addressSummaryLineField = cf7Fields.FormAddressSummaryLine;
1320    addressSummaryBlockField = cf7Fields.FormAddressSummaryBlock;
1321
1322    addressHiddenField = cf7Fields.FormAddressHiddenArea;
1323
1324    //Ensure Postcode Is Upper Case
1325    addressPostcodeField = cf7Fields.FormPostcode
1326
1327
1328    if( addresssCompanyField) {
1329        companyFieldFound = true ;
1330    }
1331    if(addressTownField) {
1332        townFieldFound = true ;
1333    }
1334
1335    // Process Address Data IAW Format
1336    var fmtAddress ;
1337    if( addressFmt.trim() === '1') {
1338        // ALTERNATE 'PACKED' FORMAT
1339
1340        // Decode
1341        fmtAddress = Pc4uDecodeAddressFormat1( respAddress, companyFieldFound, townFieldFound, countyDisp);
1342    } else {
1343        fmtAddress = Pc4uReturnRawAddress(respAddress, companyFieldFound, townFieldFound, countyDisp);
1344    }
1345    addressCompany = fmtAddress.AddCompany;
1346    addressLine1 = fmtAddress.AddLine1;
1347    addressLine2 = fmtAddress.AddLine2;
1348    addressLine3 = fmtAddress.AddLine3;
1349    addressTown = fmtAddress.AddTown;
1350    addressCounty = fmtAddress.AddCounty;
1351    addressPostcode = fmtAddress.AddPostcode.toUpperCase();
1352
1353    addressSummaryLine = fmtAddress.AddDetailsLine;
1354    addressSummaryBlock = fmtAddress.AddDetailsBlock;
1355
1356    // Populate Address Fields
1357    // - Note - All Fields Are 'Optional'
1358
1359    // Company
1360    if(addresssCompanyField) {
1361        addresssCompanyField.value = addressCompany;
1362        addresssCompanyField.focus();
1363    }
1364    // ADDRESS LINE1
1365    if(addressLine1Field) {
1366        addressLine1Field.value = addressLine1;
1367        addressLine1Field.focus();
1368    }
1369    // ADDRESS LINE2
1370    if(addressLine2Field) {
1371        addressLine2Field.value = addressLine2;
1372        addressLine2Field.focus();
1373
1374        if(!addressLine3Field) {
1375            if(addressLine3 !== "") {
1376                if(addressLine2Field.value !== "") {
1377                    addressLine2Field.value = addressLine2Field.value.trim() + ", ";
1378                }
1379                addressLine2Field.value += addressLine3;
1380                addressLine3 = "";
1381
1382                addressLine2Field.focus();
1383            }
1384        }
1385    }
1386    // Address 3 (If Present)
1387    if(addressLine3Field){
1388        addressLine3Field.value = addressLine3;
1389        addressLine3Field.focus();
1390    }
1391
1392    // Town/City
1393    if(addressTownField) {
1394        addressTownField.value = addressTown;
1395        addressTownField.focus();
1396    }
1397    // County
1398    if(addressCountyField) {
1399        addressCountyField.value = addressCounty;
1400        addressCountyField.focus();
1401    }
1402    // Postcode
1403    if(addressPostcodeField) {
1404        addressPostcodeField.value = addressPostcode;
1405        add
1405ressPostcodeField.focus();
1406    }
1407
1408    // Address Line (If Present)
1409    if(addressSummaryLineField) {
1410        addressSummaryLineField.value = addressSummaryLine;
1411        addressSummaryLineField.focus();
1412    }
1413
1414    // Address Block (If Present)
1415    if(addressSummaryBlockField) {
1416        addressSummaryBlockField.value = addressSummaryBlock;
1417        addressSummaryBlockField.focus();
1418    }
1419
1420    // Clear Address Select DropDown List
1421    if(addressSelectField) {
1422        // Use New 'Hide' Pc4u Address Dropdown Function KRF 2020.04.30
1423        // -- Clear Pc4u Dropdown
1424        hidePc4uAddressDropdown(addressSelectField, true );
1425    }
1426
1427    // If Ensure 'Fields Populated' is required - do not allow empty Address Fie;ds
1428    if(fillEmptyFields) {
1429
1430        if(addresssCompanyField && !addresssCompanyField.value){
1431            addresssCompanyField.value = " ";
1432        }
1433
1434        if(addressLine1Field && !addressLine1Field.value){
1435            addressLine1Field.value = " ";
1436        }
1437        if(addressLine2Field && !addressLine2Field.value){
1438            addressLine2Field.value = " ";
1439        }
1440
1441        if(addressLine3Field && !addressLine3Field.value){
1442            addressLine3Field.value = " ";
1443        }
1444        if(addressTownField && !addressTownField.value){
1445            addressTownField.value = " ";
1446        }
1447        if(addressCountyField && !addressCountyField.value){
1448            addressCountyField.value = " ";
1449        }
1450        if(addressPostcodeField && !addressPostcodeField.value){
1451            addressPostcodeField.value = " ";
1452        }
1453    }
1454
1455    // If Display When Complete Div Available than Display It
1456    Pc4uShowHiddenCf7Address(addressHiddenField);
1457}
1458
1459
1460// ====================================================================
1461// Pc4uShowHiddenCf7Address
1462// ========================
1463// - Unhide Contact Form 7 Address
1464// ====================================================================
1465function Pc4uShowHiddenCf7Address( cf7addressHiddenField) {
1466    if(cf7addressHiddenField) {        
1467        // If Display When Complete Div Available than Display It
1468        if(cf7addressHiddenField) {
1469            //
1470            cf7addressHiddenField.style.display = '';
1471        }
1472    }
1473}
1474
1475
1476// ====================================================================
1477// Pc4uProcessGravAddress
1478// ======================
1479//  Populate Gravity Form Address
1480//  with Returned Address Details
1481// ====================================================================
1482function Pc4uProcessGravAddress( respAddress, addressFmt, countyDisp) {
1483    var companyFieldFound = false ;
1484    var townFieldFound = false ;
1485    var separateNameNumberFieldFound = false ;
1486
1487    var fillEmptyFields = true ;
1488
1489    // Ensure
1490    var populateEmpty = true ;
1491
1492    // Address Components
1493    var addressCompany = "";
1494    var addressLine1 = "";  // Complete Address Line 1
1495    var addressLine2 = "";
1496    var addressLine3 = "";
1497    var addressTown = "";
1498    var addressCounty = "";
1499    var addressPostcode = "";
1500
1501    // Used when separate House Name/No and Street
1502    var addressLine1_NameNumberOnly = ""; // Optional
1503    var addressLine1_StreetOnly = ""; // Optional
1504    var addressLine2_StreetOnly = ""; // Optional
1505
1506    // Gravity Form - Fields
1507    var addresssCompanyField ;
1508    var addressLine1_NameNumberField ; //Optional
1509    var addressLine1Field ;
1510    var addressLine2Field ;
1511    var addressLine3Field ;
1512    var addressTownField ;
1513    var addressCountyField ;
1514    var addressPostcodeField ;
1515
1516     // Get Company & Town Fields
1517     // // GF No Company Field
1518    //addresssCompanyField= document.getElementById("pc4uCompany");
1519    //if(addresssCompanyField){
1520    //    companyFieldFound = true ;
1521    //}
1522    addressTownField = document.getElementById(pc4uFormPostcodeFieldId + '_3');
1523    if(addressTownField){
1524        townFieldFound = true ;
1525    }
1526    // Get Remaining Address Fields
1527
1528    // Look For Optional Address Line 1 Name/Number Field
1529    addressLine1_NameNumberField = document.getElementById(pc4uFormPostcodeFieldId + '_7');
1530    if(addressLine1_NameNumberField) {
1531        separateNameNumberFieldFound = true;
1532    }
1533
1534    addressLine1Field = document.getElementById(pc4uFormPostcodeFieldId + '_1');
1535    addressLine2Field = document.getElementById(pc4uFormPostcodeFieldId + '_2');
1536    //addressLine3Field = document.getElementById("pc4uAddress3");
1537
1538    addressCountyField = document.getElementById(pc4uFormPostcodeFieldId + '_4');
1539    addressPostcodeField = document.getElementById(pc4uFormPostcodeFieldId + '_5');
1540
1541    var fmtAddress;
1542    if( addressFmt.trim() == '1') {
1543    	// Alternative Address Format
1544        // Decode
1545        fmtAddress = Pc4uDecodeAddressFormat1( respAddress, companyFieldFound, townFieldFound, countyDisp, populateEmpty);
1546    } else {
1547        // NORMAL ADDRESS - RAW RETURNED DATA
1548        fmtAddress = Pc4uReturnRawAddress(respAddress, companyFieldFound, townFieldFound, countyDisp, populateEmpty);
1549    }
1550
1551    addressCompany = fmtAddress.AddCompany;
1552
1553    addressLine1 = fmtAddress.AddLine1;
1554    addressLine2 = fmtAddress.AddLine2;
1555    addressLine3 = fmtAddress.AddLine3;
1556    addressTown = fmtAddress.AddTown;
1557    addressCounty = fmtAddress.AddCounty;
1558    addressPostcode = fmtAddress.AddPostcode.toUpperCase();
1559
1560    // Used when separate House Name/No and Street
1561    addressLine1_NameNumberOnly = fmtAddress.AddLine1_NameNumOnly;
1562    addressLine1_StreetOnly = fmtAddress.AddLine1_StreetOnly;
1563    addressLine2_StreetOnly = fmtAddress.AddLine2_StreetOnly;
1564
1565
1566    //Populate Address Fields
1567    if(addresssCompanyField && addressCompany) {
1568        addresssCompanyField.value = addressCompany;
1569    }
1570
1571    // Check For Separate Name/Number and Street Name
1572    if(separateNameNumberFieldFound){
1573        if(addressLine1_NameNumberField) {
1574            addressLine1_NameNumberField.value = addressLine1_NameNumberOnly;
1575        }
1576        if(addressLine1Field) {
1577            addressLine1Field.value = "";
1578            if(addressCompany) {
1579                addressLine1Field.value += addressCompany ;
1580
1581                if(addressLine2_StreetOnly) {
1582                    addressLine1Field.value += ", " +addressLine1_StreetOnly;
1583                    if(addressLine2Field){
1584                        addressLine2Field.value = addressLine2_StreetOnly;
1585                    }
1586                } else {
1587                    // No Street 2
1588                    addressLine2Field.value = addressLine1_StreetOnly;
1589                }
1590            } else {
1591                // No Company - Just Populate Street Address 1 & 2
1592                addressLine1Field.value = addressLine1_StreetOnly;
1593                addressLine2Field.value = addressLine2_StreetOnly;
1594            }
1595        } else {
1596            if(addressLine2Field){
1597                addressLine2Field.value = addressLine2_StreetOnly;
1598            }
1599        }
1600    } else {
1601        // No Separate Street Name - Normal Processing
1602        if(addressLine1Field){
1603            addressLine1Field.value = addressLine1;
1604        }
1605
1606        if(addressLine2Field){
1607            addressLine2Field.value = addressLine2;
1608
1609            if(!addressLine3Field) {
1610                if(addressLine3 !== "") {
1611                    if(addressLine2Field.value !== "") {
1612                        addressLine2Field.value = addressLine2Field.value.trim() + ", ";
1613                    }
1614                    addressLine2Field.value += addressLine3;
1615                    addressLine3 = "";
1616                }
1617            }
1618        }
1619    }
1620
1621    // Address 3 (If Present)
1622    if(addressLine3Field){
1623        addressLine3Field.value = addressLine3;
1624    }
1625
1626    if(addressTownField){
1627        addressTownField.value = addressTown;
1628    }
1629    if(addressCountyField) {
1630        addressCountyField.value = addressCounty;
1631    }
1632    if(addressPostcodeField) {
1633        addressPostcodeField.value = addressPostcode;
1634    }
1635
1636    // If Ensure 'Fields Populated' is required - do not allow empty Address Fie;ds
1637    if(fillEmptyFields) {
1638        if(addresssCompanyField && !addresssCompanyField.value){
1639            addresssCompanyField.value = " ";
1640        }
1641
1642        if(addressLine1Field && !addressLine1Field.value){
1643            addressLine1Field.value = " ";
1644        }
1645        if(addressLine2Field && !addressLine2Field.value){
1646            addressLine2Field.value = " ";
1647        }
1648
1649        if(addressLine3Field && !addressLine3Field.value){
1650            addressLine3Field.value = " ";
1651        }
1652        if(addressTownField && !addressTownField.value){
1653            addressTownField.value = " ";
1654        }
1655        if(addressCountyField && !addressCountyField.value){
1656            addressCountyField.value = " ";
1657        }
1658        if(addressPostcodeField && !addressPostcodeField.value){
1659            addressPostcodeField.value = " ";
1660        }
1661    }
1662
1663    // Clear DropDown List -
1664    var dropdown = document.getElementById(pc4uFormPostcodeFieldId +"_pc4uGfDropdown");
1665
1666    // Use New 'Hide' Pc4u Address Dropdown Function KRF 2020.04.30
1667    // -- Clear Pc4u Dropdown
1668    hidePc4uAddressDropdown(dropdown, true);
1669
1670    
1671    // If Display When Complete Div Available than Display It
1672    showPc4uGFHiddenAddress(pc4uFormPostcodeFieldId);
1673    //var showAddressWhenComplete = document.getElementById(pc4uFormPostcodeFieldId+"_pc4uGfPostcodeLookupAddress");
1674    //if(showAddressWhenComplete) {
1675      //  //
1676      //  showAddressWhenComplete.style.display = '';    
1677    //}
1678}
1679
1680
1681// ====================================================================
1682// Pc4uProcessAdHocAddress
1683// =======================
1684// Populate 'AdHoc' address with specified
1685//   address fields with Returned Address Details
1686//  KRF 23.08.14 - Add AddressLine and Block
1687// ====================================================================
1688function Pc4uProcessAdHocAddress ( respAddress, addressFmt, countyDisp) {
1689    // AdHoc Address - Specified Fields
1690    var companyFieldFound = false ;
1691    var townFieldFound = false ;
1692
1693    // Address Components
1694    var addressCompany = "";
1695    var addressLine1 = "";
1696    var addressLine2 = "";
1697    var addressLine3 = "";
1698    var addressTown = "";
1699    var addressCounty = "";
1700    var addressPostcode = "";
1701    // Address Summary Line and Block Values
1702    var addressSummaryLine = "";
1703    var addressSummaryBlock = "";
1704
1705    // 'AdHoc Form - Fields
1706    var addresssCompanyField ;
1707    var addressLine1Field ;
1708    var addressLine2Field ;
1709    var addressLine3Field ;
1710    var addressTownField ;
1711    var addressCountyField ;
1712    var addressPostcodeField ;
1713
1714    var addressCountryField ;
1715    // Address Summary Line and Block Field IDs
1716    var addressSummaryLineField ;
1717    var addressSummaryBlockField ;
1718
1719    // Get Company & Town Fields
1720    addresssCompanyField= document.getElementById(pc4uFormAddressCompanyFieldId);
1721    if(addresssCompanyField){
1722        companyFieldFound = true ;
1723    }
1724    addressTownField = document.getElementById(pc4uFormAddressTownFieldId);
1725    if(addressTownField){
1726        townFieldFound = true ;
1727    }
1728    // Get Remaining Address Fields
1729    addressLine1Field = document.getElementById(pc4uFormAddressLine1FieldId);
1730    addressLine2Field = document.getElementById(pc4uFormAddressLine2FieldId);
1731    addressLine3Field = document.getElementById(pc4uFormAddressLine3FieldId);
1732
1733    addressCountyField = document.getElementById(pc4uFormAddressCountyFieldId);
1734    addressPostcodeField = document.getElementById(pc4uFormPostcodeFieldId);
1735
1736    addressCountryField = document.getElementById(pc4uFormAddressNationCountryFieldId);
1737    
1738    // Try For Summary Line and Block
1739    addressSummaryLineField = document.getElementById(pc4uFormAddressLineFieldId);
1740    addressSummaryBlockField = document.getElementById(pc4uFormAddressBlockFieldId);
1741
1742    var fmtAddress ;
1743    if( addressFmt.trim() == '1') {
1744    	// Alternative Address Format
1745        // Decode
1746        fmtAddress = Pc4uDecodeAddressFormat1( respAddress, companyFieldFound, townFieldFound, countyDisp);
1747    } else {
1748        fmtAddress = Pc4uReturnRawAddress(respAddress, companyFieldFound, townFieldFound, countyDisp);
1749    }
1750
1751    addressCompany = fmtAddress.AddCompany;
1752    addressLine1 = fmtAddress.AddLine1;
1753    addressLine2 = fmtAddress.AddLine2;
1754    addressLine3 = fmtAddress.AddLine3;
1755    addressTown = fmtAddress.AddTown;
1756    addressCounty = fmtAddress.AddCounty;
1757    addressPostcode = fmtAddress.AddPostcode.toUpperCase();
1758    addressSummaryLine = fmtAddress.AddDetailsLine;
1759    addressSummaryBlock = fmtAddress.AddDetailsBlock;
1760        
1761    //Populate Address Fields
1762    if(addresssCompanyField) {
1763        addresssCompanyField.value = addressCompany;
1764    }
1765    if(addressLine1Field){
1766        addressLine1Field.value = addressLine1;
1767    }
1768    if(addressLine2Field){
1769        addressLine2Field.value = addressLine2;
1770
1771        if(!addressLine3Field) {
1772            if(addressLine3 !== "") {
1773                if(addressLine2Field.value !== "") {
1774                    addressLine2Field.value = addressLine2Field.value.trim() + ", ";
1775                }
1776                addressLine2Field.value += addressLine3;
1777                addressLine3 = "";
1778            }
1779        }
1780    }
1781    // Address 3 (If Present)
1782    if(addressLine3Field){
1783        addressLine3Field.value = addressLine3;
1784    }
1785
1786    if(addressTownField){
1787        addressTownField.value = addressTown;
1788    }
1789    if(addressCountyField) {
1790        addressCountyField.value = addressCounty;
1791    }
1792    if(addressPostcodeField) {
1793        addressPostcodeField.value = addressPostcode;
1794    }
1795
1796    // Optionally Process Country - FORCE UK/GB
1797    if(addressCountryField) {
1798        var AddressType = "text";
1799        if(pc4uFormAddressNationCountryType) {
1800            if(pc4uFormAddressNationCountryType = "wp_dropdown") {
1801                // WordPress Country Field
1802                addressCountryField.value = "GB";
1803            } else {
1804                if(pc4uFormAddressNationCountryType = "dropdown") {
1805                    // General Dropdown Field
1806                    addressCountryField.value = "United Kingdom";
1807                    addressCountryField.selected = true;
1808                } else {
1809                    // Default Text Field
1810                    addressCountryField.value = "United Kingdom";
1811                }
1812            }
1813        }
1814    }
1815    
1816    // Summary (Single Line) Address
1817    if(addressSummaryLineField) {
1818        addressSummaryLineField.value = addressSummaryLine;
1819    }
1820
1821    // Summary (Block) Address
1822    if(addressSummaryBlockField) {
1823        addressSummaryBlockField.value = addressSummaryBlock;
1824    }
1825
1826
1827    // Clear DropDown List -
1828    var dropdown = document.getElementById(pc4uFormAddressDropdownFieldId);
1829
1830    // Use New 'Hide' Pc4u Address Dropdown Function KRF 2020.04.30
1831    // -- Clear Pc4u Dropdown
1832    hidePc4uAddressDropdown(dropdown, true);
1833}
1834
1835// ====================================================================
1836// Pc4uProcess3xAddress
1837// ====================
1838// Populate 3X Basic Contact Form Address
1839//  with Returned Address Details
1840// ====================================================================
1841function Pc4uProcess3xAddress( respAddress, addressFmt, countyDisp) {
1842    // Default Form (3x)
1843
1844    var companyFieldFound = false ;
1845    var townFieldFound = false ;
1846
1847    // Address Components
1848    var addressCompany = "";
1849    var addressLine1 = "";
1850    var addressLine2 = "";
1851    var addressLine3 = "";
1852    var addressTown = "";
1853    var addressCounty = "";
1854    var addressPostcode = "";
1855
1856    // 3X Contact Form - Fields
1857    var addresssCompanyField ;
1858    var addressLine1Field ;
1859    var addressLine2Field ;
1860    var addressLine3Field ;
1861    var addressTownField ;
1862    var addressCountyField ;
1863    var addressPostcodeField ;
1864
1865     // Get Company & Town Fields
1866    addresssCompanyField= document.getElementById("pc4uCompany");
1867    if(addresssCompanyField){
1868        companyFieldFound = true ;
1869    }
1870    addressTownField = document.getElementById("pc4uTown");
1871    if(addressTownField){
1872        townFieldFound = true ;
1873    }
1874    // Get Remaining Address Fields
1875    addressLine1Field = document.getElementById("pc4uAddress1");
1876    addressLine2Field = document.getElementById("pc4uAddress2");
1877    addressLine3Field = document.getElementById("pc4uAddress3");
1878
1879    addressCountyField = document.getElementById("pc4uCounty");
1880    addressPostcodeField = document.getElementById("pc4uPostcode");
1881
1882    var fmtAddress ;
1883    if( addressFmt.trim() == '1') {
1884    	// Alternative Address Format
1885        // Decode
1886        fmtAddress = Pc4uDecodeAddressFormat1( respAddress, companyFieldFound, townFieldFound, countyDisp);
1887    } else {
1888        fmtAddress = Pc4uReturnRawAddress(respAddress, companyFieldFound, townFieldFound, countyDisp);
1889    }
1890
1891    addressCompany = fmtAddress.AddCompany;
1892    addressLine1 = fmtAddress.AddLine1;
1893    addressLine2 = fmtAddress.AddLine2;
1894    addressLine3 = fmtAddress.AddLine3;
1895    addressTown = fmtAddress.AddTown;
1896    addressCounty = fmtAddress.AddCounty;
1897    addressPostcode = fmtAddress.AddPostcode.toUpperCase();
1898
1899    //Populate Address Fields
1900    if(addresssCompanyField) {
1901        addresssCompanyField.value = addressCompany;
1902    }
1903    if(addressLine1Field){
1904        addressLine1Field.value = addressLine1;
1905    }
1906    if(addressLine2Field){
1907        addressLine2Field.value = addressLine2;
1908
1909        if(!addressLine3Field) {
1910            if(addressLine3 !== "") {
1911                if(addressLine2Field.value !== "") {
1912                    addressLine2Field.value = addressLine2Field.value.trim() + ", ";
1913                }
1914                addressLine2Field.value += addressLine3;
1915                addressLine3 = "";
1916            }
1917        }
1918    }
1919    // Address 3 (If Present)
1920    if(addressLine3Field){
1921        addressLine3Field.value = addressLine3;
1922    }
1923
1924    if(addressTownField){
1925        addressTownField.value = addressTown;
1926    }
1927    if(addressCountyField) {
1928        addressCountyField.value = addressCounty;
1929    }
1930    if(addressPostcodeField) {
1931        addressPostcodeField.value = addressPostcode;
1932    }
1933
1934    // Clear DropDown List - ID HardCoded in Plugin
1935    var dropdown = document.getElementById("pc4uDropdown");
1936
1937    // Use New 'Hide' Pc4u Address Dropdown Function KRF 2020.04.30
1938    // -- Clear Pc4u Dropdown
1939    hidePc4uAddressDropdown(dropdown, true);
1940}
1941
1942
1943// ====================================================================
1944// Pc4uDecodeAddressFormat1
1945// ========================
1946//  - Return Address in an array using
1947//   Address Format 1 - 'Alternative' Or No Duplicate Address Format
1948// ====================================================================
1949function Pc4uDecodeAddressFormat1( procAddress, companyFieldPresent, townFieldPresent, countyDisp, populateEmpty) {
1950
1951    var companyFieldFound = false ;
1952    var townFieldFound = false ;
1953
1954    var addressCompany = "";
1955
1956    var addressLine1 = "";
1957    var addressLine2 = "";
1958    var addressLine3 = "";
1959    var addressTown = "";
1960    var addressCounty = "";
1961    var addressPostcode = "";
1962
1963    // Address Details As Line or Text Block
1964    var addressDetailsLine = "";
1965    var addressDetailsBlock = "";
1966
1967    // Separate Building No/Street
1968    var addressLine1_NameNum_Only = "";
1969    var addressLine1_Street_Only = "";
1970    var addressLine2_Street_Only = "";
1971
1972    // Process Company and Town Fields
1973    addressCompany = procAddress.Company;
1974    if(companyFieldPresent && companyFieldPresent === true) {
1975        companyFieldFound = true ;
1976    }
1977
1978    if(townFieldPresent && townFieldPresent === true) {
1979        townFieldFound = true ;
1980        addressTown = procAddress.PostTown;
1981    }
1982
1983    // Process Address Lines 1, 2, 3 and 4
1984    // Check Address Line1
1985    if((companyFieldFound === true && procAddress.Line1 === procAddress.Company) ||
1986        (townFieldFound === true && procAddress.Line1 === procAddress.PostTown) ||
1987        (procAddress.Line1 === procAddress.County) ||
1988        (procAddress.Line1 === procAddress.Postcode)) {
1989        // Company, Town, County or Postcode on address Line1
1990    } else {
1991        addressLine1 = procAddress.Line1;
1992    }
1993    // Check Address Line2
1994    if((companyFieldFound === true && procAddress.Line2 === procAddress.Company) ||
1995       (townFieldFound === true && procAddress.Line2 === procAddress.PostTown) ||
1996       (procAddress.Line2 === procAddress.County) ||
1997       (procAddress.Line2 === procAddress.Postcode)) {
1998        // Company, Town, County or Postcode on address Line2
1999    } else {
2000        if(addressLine1 === "") {
2001            addressLine1 = procAddress.Line2;
2002        } else {
2003            addressLine2 = procAddress.Line2;
2004        }
2005    }
2006    // Check Address Line3
2007    if(addressLine2 === "" && (companyFieldFound === true && procAddress.Line3 === procAddress.Company) ||
2008        (townFieldFound === true && procAddress.Line3 === procAddress.PostTown) ||
2009        (procAddress.Line3 === procAddress.County) ||
2010        (procAddress.Line3 === procAddress.Postcode)) {
2011        // Company, Town, County or Postcode on address Line3
2012    } else {
2013        if(addressLine1 === "") {
2014            addressLine1 = procAddress.Line3;
2015        } else {
2016            if(addressLine2 === "") {
2017                addressLine2 = procAddress.Line3;
2018            } else {
2019                addressLine3 = procAddress.Line3;
2020            }
2021        }
2022    }
2023
2024    // Process Separate Address Line1 Details
2025    if(procAddress.SubBuilding) {
2026        addressLine1_NameNum_Only = procAddress.SubBuilding + ", " ;
2027    }
2028    if(procAddress.BuildingName) {
2029        addressLine1_NameNum_Only += procAddress.BuildingName;
2030    } else {
2031        addressLine1_NameNum_Only += procAddress.BuildingNumber;
2032    }
2033
2034    addressLine1_Street_Only = procAddress.PrimaryStreet;
2035    addressLine2_Street_Only = procAddress.SecondaryStreet;
2036
2037    // Process County
2038    if(countyDisp === '1') {
2039        // Administrative County
2040        addressCounty = procAddress.AdministrativeCounty
2041    } else{
2042        if(countyDisp === '2') {
2043            // Postal County
2044            addressCounty = procAddress.PostalCounty;
2045        } else {
2046            if(countyDisp === '3') {
2047                // Traditional County
2048                addressCounty = procAddress.TraditionalCounty;
2049      	    } else {
2050                if(countyDisp === '4') {
2051                    addressCounty = ""
2052                } else {
2053                    // Default County
2054                    addressCounty = procAddress.County;
2055                }
2056            }
2057        }
2058    }
2059
2060    // Process Postcode
2061    addressPostcode = procAddress.Postcode.toUpperCase();
2062
2063    // ----------------------------------------
2064    // Populate Address Details Line & Block
2065    // Assume ALL Fields - Ensure No Duplication
2066
2067    //   Company
2068    if(addressCompany) {
2069        if(addressDetailsLine) {
2070            addressDetailsLine = addressDetailsLine + ', ';
2071            addressDetailsBlock = addressDetailsBlock + '\n';
2072        }
2073        addressDetailsLine = addressDetailsLine + addressCompany
2074        addressDetailsBlock = addressDetailsBlock + addressCompany
2075    }
2076
2077    // Check Address Line1
2078    if((procAddress.Line1 === procAddress.Company) ||
2079        (procAddress.Line1 === procAddress.PostTown) ||
2080        (procAddress.Line1 === procAddress.County) ||
2081        (procAddress.Line1 === procAddress.Postcode)) {
2082        // Company, Town, County or Postcode on address Line1
2083    } else {
2084        if(procAddress.Line1) {
2085            if(addressDetailsLine) {
2086                addressDetailsLine = addressDetailsLine + ', ';
2087                addressDetailsBlock = addressDetailsBlock + '\n';
2088            }
2089            addressDetailsLine = addressDetailsLine + procAddress.Line1
2090            addressDetailsBlock = addressDetailsBlock + procAddress.Line1
2091        }
2092    }
2093
2094    // Check Address Line2
2095    if((procAddress.Line2 === procAddress.Company) ||
2096       (procAddress.Line2 === procAddress.PostTown) ||
2097       (procAddress.Line2 === procAddress.County) ||
2098       (procAddress.Line2 === procAddress.Postcode)) {
2099        // Company, Town, County or Postcode on address Line2
2100    } else {
2101        if(procAddress.Line2) {
2102            if(addressDetailsLine) {
2103                addressDetailsLine = addressDetailsLine + ', ';
2104                addressDetailsBlock = addressDetailsBlock + '\n';
2105            }
2106            addressDetailsLine = addressDetailsLine + procAddress.Line2
2107            addressDetailsBlock = addressDetailsBlock + procAddress.Line2
2108        }
2109    }
2110    // Check Address Line3
2111    if((procAddress.Line3 === procAddress.Company) ||
2112        (procAddress.Line3 === procAddress.PostTown) ||
2113        (procAddress.Line3 === procAddress.County) ||
2114        (procAddress.Line3 === procAddress.Postcode)) {
2115        // Company, Town, County or Postcode on address Line3
2116    } else {
2117         if(procAddress.Line3) {
2118            if(addressDetailsLine) {
2119                addressDetailsLine = addressDetailsLine + ', ';
2120                addressDetailsBlock = addressDetailsBlock + '\n';
2121            }
2122            addressDetailsLine = addressDetailsLine + procAddress.Line3
2123            addressDetailsBlock = addressDetailsBlock + procAddress.Line3
2124        }
2125    }
2126
2127    if(procAddress.PostTown) {
2128        if(addressDetailsLine) {
2129            addressDetailsLine = addressDetailsLine + ', ' ;
2130            addressDetailsBlock = addressDetailsBlock + '\n' ;
2131        }
2132        addressDetailsLine = addressDetailsLine + procAddress.PostTown;
2133        addressDetailsBlock = addressDetailsBlock + procAddress.PostTown;
2134    }
2135    if(addressCounty) {
2136        if(addressDetailsLine) {
2137            addressDetailsLine = addressDetailsLine + ', ' ;
2138            addressDetailsBlock = addressDetailsBlock + '\n' ;
2139        }
2140        addressDetailsLine = addressDetailsLine + addressCounty;
2141        addressDetailsBlock = addressDetailsBlock + addressCounty;
2142    }
2143
2144    if(procAddress.Postcode) {
2145        if(addressDetailsLine) {
2146            addressDetailsLine = addressDetailsLine + ', ' ;
2147            addressDetailsBlock = addressDetailsBlock + '\n' ;
2148        }
2149        addressDetailsLine = addressDetailsLine + procAddress.Postcode;
2150        addressDetailsBlock = addressDetailsBlock + procAddress.Postcode;
2151    }
2152
2153    // Return Address Details as string array
2154    return  {
2155        AddCompany: addressCompany,
2156        AddLine1: addressLine1,
2157        AddLine2: addressLine2,
2158        AddLine3: addressLine3,
2159        AddTown: addressTown,
2160        AddCounty: addressCounty,
2161        AddPostcode: addressPostcode,
2162
2163        AddLine1_NameNumOnly: addressLine1_NameNum_Only,
2164        AddLine1_StreetOnly: addressLine1_Street_Only,
2165        AddLine2_StreetOnly: addressLine2_Street_Only,
2166
2167        AddDetailsLine: addressDetailsLine,
2168        AddDetailsBlock: addressDetailsBlock
2169
2170    };
2171}
2172
2173
2174// ====================================================================
2175// Pc4uReturnRawAddress 
2176// ====================
2177// - Return Address in an array using 
2178//   Address Format 0 - 'RAW' Format
2179// ====================================================================
2180function Pc4uReturnRawAddress( procAddress, companyFieldPresent, townFieldPresent, countyDisp, populateEmpty) {
2181
2182    var addressCompany = "";
2183    var addressLine1 = "";
2184    var addressLine2 = "";
2185    var addressLine3 = "";
2186    var addressTown = "";
2187    var addressCounty = "";
2188    var addressPostcode = "";
2189    var addressDetailsLine = "";
2190    var addressDetailsBlock = "";
2191
2192    // Separate Building No/Street
2193    var addressLine1_NameNum_Only = "";
2194    var addressLine1_Street_Only = "";
2195    var addressLine2_Street_Only = "";
2196
2197    // Set Company - PostTown and Postcode
2198    addressCompany = procAddress.Company;
2199    addressTown = procAddress.PostTown;
2200    addressPostcode = procAddress.Postcode.toUpperCase();
2201
2202    //Process Address Lines 1 and 2
2203    addressLine1 = procAddress.Line1;
2204    addressLine2 = procAddress.Line2;
2205    addressLine3 = procAddress.Line3;
2206
2207    // Process Separate Address Line Details
2208    if(procAddress.SubBuilding) {
2209        addressLine1_NameNum_Only = procAddress.SubBuilding + ", " ;
2210    }
2211    if(procAddress.BuildingName) {
2212        addressLine1_NameNum_Only += procAddress.BuildingName;
2213    } else {
2214        addressLine1_NameNum_Only += procAddress.BuildingNumber;
2215    }
2216    addressLine1_Street_Only = procAddress.PrimaryStreet;
2217    addressLine2_Street_Only = procAddress.SecondaryStreet;
2218
2219    // Process County
2220    if(countyDisp === '1') {
2221        // Administrative County
2222        addressCounty = procAddress.AdministrativeCounty;
2223    } else{
2224        if(countyDisp === '2') {
2225            // Postal County
2226            addressCounty = procAddress.PostalCounty;
2227        } else {
2228            if(countyDisp === '3') {
2229                // Traditional County
2230                addressCounty = procAddress.TraditionalCounty;
2231            	if(countyDisp === '4') {
2232					addressCounty = ""
2233				} else {
2234					// Default County
2235					addressCounty = procAddress.County;
2236                }
2237            }
2238        }
2239    }
2240
2241    // ---------------------------------------
2242    // Populate Address Details Line & Block
2243    // No Duplicate Check
2244    if(addressCompany) {
2245        if(addressDetailsLine) {
2246            addressDetailsLine = addressDetailsLine + ', ';
2247            addressDetailsBlock = addressDetailsBlock + '\n';
2248        }
2249        addressDetailsLine = addressDetailsLine + addressCompany
2250        addressDetailsBlock = addressDetailsBlock + addressCompany
2251    }
2252
2253    if(addressLine1) {
2254        if(addressDetailsLine) {
2255            addressDetailsLine = addressDetailsLine + ', ' ;
2256            addressDetailsBlock = addressDetailsBlock + '\n' ;
2257        }
2258        addressDetailsLine = addressDetailsLine + addressLine1;
2259        addressDetailsBlock = addressDetailsBlock + addressLine1;
2260    }
2261
2262    if(addressLine2) {
2263        if(addressDetailsLine) {
2264            addressDetailsLine = addressDetailsLine + ', ' ;
2265            addressDetailsBlock = addressDetailsBlock + '\n' ;
2266        }
2267        addressDetailsLine = addressDetailsLine + addressLine2;
2268        addressDetailsBlock = addressDetailsBlock + addressLine2;
2269    }
2270    if(addressLine3) {
2271        if(addressDetailsLine) {
2272            addressDetailsLine = addressDetailsLine + ', ' ;
2273            addressDetailsBlock = addressDetailsBlock + '\n' ;
2274        }
2275        addressDetailsLine = addressDetailsLine + addressLine3;
2276        addressDetailsBlock = addressDetailsBlock + addressLine3;
2277    }
2278    if(addressTown) {
2279        if(addressDetailsLine) {
2280            addressDetailsLine = addressDetailsLine + ', ' ;
2281            addressDetailsBlock = addressDetailsBlock + '\n' ;
2282        }
2283        addressDetailsLine = addressDetailsLine + addressTown;
2284        addressDetailsBlock = addressDetailsBlock + addressTown;
2285    }
2286    if(addressCounty) {
2287        if(addressDetailsLine) {
2288            addressDetailsLine = addressDetailsLine + ', ' ;
2289            addressDetailsBlock = addressDetailsBlock + '\n' ;
2290        }
2291        addressDetailsLine = addressDetailsLine + addressCounty;
2292        addressDetailsBlock = addressDetailsBlock + addressCounty;
2293    }
2294
2295    if(addressPostcode) {
2296        if(addressDetailsLine) {
2297            addressDetailsLine = addressDetailsLine + ', ' ;
2298            addressDetailsBlock = addressDetailsBlock + '\n' ;
2299        }
2300        addressDetailsLine = addressDetailsLine + addressPostcode;
2301        addressDetailsBlock = addressDetailsBlock + addressPostcode;
2302    }
2303
2304    // Return Address Details as string array
2305    return  {
2306        AddCompany: addressCompany,
2307        AddLine1: addressLine1,
2308        AddLine2: addressLine2,
2309        AddLine3: addressLine3,
2310        AddTown: addressTown,
2311        AddCounty: addressCounty,
2312        AddPostcode: addressPostcode,
2313
2314        AddLine1_NameNumOnly: addressLine1_NameNum_Only,
2315        AddLine1_StreetOnly: addressLine1_Street_Only,
2316        AddLine2_StreetOnly: addressLine2_Street_Only,
2317
2318        AddDetailsLine: addressDetailsLine,
2319        AddDetailsBlock: addressDetailsBlock
2320    };
2321}
2322
2323// ====================================================================
2324// Pc4uExtractCF7FormFields
2325// ========================
2326//  - Return Address Form Fields in an array
2327// ====================================================================
2328function Pc4uExtractCF7FormFields( oformObject) {
2329
2330    var formObjectValid = false ;
2331    var oFormElements ;
2332
2333    var oFormLegacyDropDownElements ;
2334    var oNonFormAddressElements;
2335    var testAddressFields ;
2336
2337    var addressCompany = null;
2338    var addressLine1 = null;
2339    var addressLine2 = null;
2340    var addressLine3 = null;
2341    var addressTown = null;
2342    var addressCounty = null;
2343    var addressPostcode = null;
2344    var addressSummaryLine = null;
2345    var addressSummaryBlock = null;
2346
2347    var addressSelectDropdown = null;
2348
2349    var addressHiddenDiv = null;
2350
2351    if(oformObject) {
2352        // Legacy Browser (IE) Get All Input and Select Objects
2353        oFormElements = oformObject.querySelectorAll("*");
2354
2355        if(oFormElements && oFormElements.length > 0) {
2356            formObjectValid = true;
2357        }
2358
2359        if(formObjectValid){
2360            for (var i = 0; i < oFormElements.length; i++) {
2361                // Note Not Using 'includes' of Legacy Browser Compatability
2362                if(oFormElements[i].id.indexOf("pc4uCf7Company") !== -1 ||
2363                   oFormElements[i].classList.contains("pc4uCf7Company")) {
2364                    addressCompany = oFormElements[i];
2365                } else {
2366                    if(oFormElements[i].id.indexOf("pc4uCF7Address1") !== -1 || 
2367                       oFormElements[i].classList.contains("pc4uCF7Address1") ) {
2368                        addressLine1 = oFormElements[i];
2369                    } else {
2370                        if(oFormElements[i].id.indexOf("pc4uCF7Address2") !== -1 ||
2371                           oFormElements[i].classList.contains("pc4uCF7Address2") ) {
2372                            addressLine2 = oFormElements[i];
2373                        } else {
2374                            if(oFormElements[i].id.indexOf("pc4uCF7Address3") !== -1 ||
2375                               oFormElements[i].classList.contains("pc4uCF7Address3") ) {                            
2376                                addressLine3 = oFormElements[i];
2377                            } else {
2378                                if(oFormElements[i].id.indexOf("pc4uCF7City") !== -1 ||
2379                                    oFormElements[i].classList.contains("pc4uCF7City")) {
2380                                    addressTown = oFormElements[i];
2381                                } else {
2382                                    if(oFormElements[i].id.indexOf("pc4uCF7County") !== -1 ||
2383                                       oFormElements[i].classList.contains("pc4uCF7County") ) {
2384                                        addressCounty = oFormElements[i];
2385                                    } else {
2386                                        if(oFormElements[i].id.indexOf("pc4upostcode") !== -1 ||
2387                                            oFormElements[i].classList.contains("pc4upostcode")) {
2388                                            addressPostcode = oFormElements[i];
2389                                        }else {
2390                                            if(oFormElements[i].id.indexOf("pc4uCF7Dropdown") !== -1 ||
2391                                               oFormElements[i].classList.contains("pc4uCF7Dropdown") ) {
2392                                                addressSelectDropdown = oFormElements[i];
2393                                            } else {
2394                                                if(oFormElements[i].id.indexOf("pc4uCF7AddressLine") !== -1 ||
2395                                                   oFormElements[i].classList.contains("pc4uCF7AddressLine")) {
2396                                                    addressSummaryLine = oFormElements[i];
2397                                                } else {
2398                                                    if(oFormElements[i].id.indexOf("pc4uCF7AddressBlock") !== -1 ||
2399                                                        oFormElements[i].classList.contains("pc4uCF7AddressBlock")) {
2400                                                        addressSummaryBlock = oFormElements[i];
2401                                                    }
2402                                                }
2403                                            }
2404                                        }
2405                                    }
2406                                }
2407                            }
2408                        }
2409                    }
2410                }
2411            }
2412
2413            // Get Any 'Hidden Address Fields' Form Div
2414            if(addressHiddenDiv == null) {
2415                oNonFormAddressElements = oformObject.querySelectorAll("[id*='pc4uCF7AddressHidden']");
2416                if(oFormLegacyDropDownElements && oFormLegacyDropDownElements.length > 0) {
2417                    addressHiddenDiv = oFormLegacyDropDownElements[0];
2418                }
2419            }
2420
2421            // Legacy Browser (IE) Postcode Dropdown Test
2422            if(addressSelectDropdown == null) {
2423                oFormLegacyDropDownElements = oformObject.querySelectorAll("[id*='pc4uCF7Dropdown']");
2424                if(oFormLegacyDropDownElements && oFormLegacyDropDownElements.length > 0) {
2425                    addressSelectDropdown = oFormLegacyDropDownElements[0];
2426                }
2427            }
2428        }
2429    }
2430
2431    // If Form Valid and Has Elements - Try to Use It
2432    if(formObjectValid) {
2433        // If No 'ID' Matched - then try for field names
2434        if(addressCompany == null) {
2435            testAddressFields = oFormElements["Company"];
2436            if(testAddressFields && testAddressFields.length === 1 && testAddressFields[0].type === "text") {
2437                // Single Entry Found
2438                addressCompany = testAddressFields[0];
2439            }
2440        }
2441        if(addressLine1 == null) {
2442            testAddressFields = oFormElements["Street"];
2443            if(testAddressFields && testAddressFields.length === 1 && testAddressFields[0].type === "text") {
2444                // Single Entry Found
2445                addressLine1 = testAddressFields[0];
2446            }
2447            if(addressLine1 == null) {
2448                testAddressFields = oFormElements["Address1"];
2449                if(testAddressFields && testAddressFields.length === 1 && testAddressFields[0].type === "text") {
2450                    // Single Entry Found
2451                    addressLine1 = testAddressFields[0];
2452                }
2453            }
2454        }
2455        if(addressLine2 == null) {
2456            testAddressFields = oFormElements["Address2"];
2457            if(testAddressFields && testAddressFields.length === 1 && testAddressFields[0].type === "text") {
2458                // Single Entry Found
2459                addressLine2 = testAddressFields[0];
2460            }
2461        }
2462        if(addressLine3 == null) {
2463            testAddressFields = oFormElements["Address3"];
2464            if(testAddressFields && testAddressFields.length === 1 && testAddressFields[0].type === "text") {
2465                // Single Entry Found
2466                addressLine3 = testAddressFields[0];
2467            }
2468        }
2469        if(addressTown == null) {
2470            testAddressFields = oFormElements["City"];
2471            if(testAddressFields && testAddressFields.length === 1 && testAddressFields[0].type === "text") {
2472                // Single Entry Found
2473                addressTown = testAddressFields[0];
2474            }
2475            if(addressTown == null) {
2476                testAddressFields = oFormElements["Town"];
2477                if(testAddressFields && testAddressFields.length === 1 && testAddressFields[0].type === "text") {
2478                    // Single Entry Found
2479                    addressTown = testAddressFields[0];
2480                }
2481            }
2482        }
2483
2484        if(addressCounty == null) {
2485            testAddressFields = oFormElements["County"];
2486            if(testAddressFields && testAddressFields.length === 1 && testAddressFields[0].type === "text") {
2487                // Single Entry Found
2488                addressCounty = testAddressFields[0];
2489            }
2490        }
2491        if(addressPostcode == null) {
2492            testAddressFields = oFormElements["Postcode"];
2493            if(testAddressFields && testAddressFields.length === 1 && testAddressFields[0].type === "text") {
2494                // Single Entry Found
2495                addressPostcode = testAddressFields[0];
2496            }
2497        }
2498        if(addressSelectDropdown == null) {
2499            testAddressFields = oFormElements["pc4uCF7Dropdown"];
2500            if(testAddressFields && testAddressFields.length === 1 && testAddressFields[0].type === "text") {
2501                // Single Entry Found
2502                addressSelectDropdown = testAddressFields[0];
2503            }
2504        }
2505         if(addressSummaryLine == null) {
2506            testAddressFields = oFormElements["pc4uCF7AddressLine"];
2507            if(testAddressFields && testAddressFields.length === 1 && testAddressFields[0].type === "text") {
2508                // Single Entry Found
2509                addressSummaryLine = testAddressFields[0];
2510            }
2511        }
2512        if(addressSummaryBlock == null) {
2513            testAddressFields = oFormElements["pc4uCF7AddressBlock"];
2514            if(testAddressFields && testAddressFields.length === 1 && testAddressFields[0].type === "text") {
2515                // Single Entry Found
2516                addressSummaryBlock = testAddressFields[0];
2517            }
2518        }
2519
2520        // Single 'Hidden Address' Area
2521        oNonFormAddressElements = oformObject.querySelectorAll("[id*='pc4uCF7AddressHidden']");
2522        if(oNonFormAddressElements && oNonFormAddressElements.length > 0) {
2523            addressHiddenDiv = oNonFormAddressElements[0];
2524        }
2525    }
2526
2527    // Check If No Form or No Address Found
2528    if(!formObjectValid ||
2529        (!(addressCompany)&& !(addressPostcode) &&!(addressLine1)&&!(addressLine2)&&!(addressLine3)&&!(addressTown)&&!(addressCounty))){
2530
2531        // DECODE FIELDS FROM ENTIRE DOCUMENT
2532        // --------------------------------------------
2533
2534        // - Use 'Legacy' Methods to ensure all browser compatability
2535
2536        // Postcode Field
2537        oNonFormAddressElements = document.querySelectorAll("[id*='pc4uCf7Postcode']");
2538        if(oNonFormAddressElements && oNonFormAddressElements.length > 0) {
2539            addressPostcodeField = oFormLegacyDropDownElements[0];
2540        }
2541
2542        // Company Field
2543        oNonFormAddressElements = document.querySelectorAll("[id*='pc4uCf7Company']");
2544        if(oNonFormAddressElements && oNonFormAddressElements.length > 0) {
2545            addresssCompanyField = oNonFormAddressElements[0];
2546        }
2547        if(addresssCompanyField) {
2548            companyFieldFound = true ;
2549        } else {
2550            // ID Not Found - Try for Fields named 'Company
2551            testAddressFields = document.getElementsByName("Company");
2552            if(testAddressFields && testAddressFields.length === 1 && testAddressFields[0].type === "text") {
2553                // Single Entry Found
2554                addresssCompanyField = testAddressFields[0];
2555                companyFieldFound = true ;
2556            }
2557        }
2558
2559        // 'Town' / 'City' Field
2560        oNonFormAddressElements = document.querySelectorAll("[id*='pc4uCF7City']");
2561        if(oNonFormAddressElements && oNonFormAddressElements.length > 0) {
2562            addressTownField = oNonFormAddressElements[0];
2563        }
2564        if(addressTownField) {
2565            townFieldFound = true ;
2566        } else {
2567             // ID Not Found - Try for Fields named 'City' or 'Town'
2568            testAddressFields = document.getElementsByName("City");
2569            if(testAddressFields){
2570                if(testAddressFields.length === 1 && testAddressFields[0].type === "text") {
2571                    // Single Entry Found
2572                    addressTownField = testAddressFields[0];
2573                    townFieldFound = true ;
2574                }
2575            }
2576            if(!townFieldFound) {
2577                testAddressFields = document.getElementsByName("Town");
2578                if(testAddressFields){
2579                    if(testAddressFields.length === 1 && testAddressFields[0].type === "text") {
2580                        // Single Entry Found
2581                        addressTownField = testAddressFields[0];
2582                        townFieldFound = true ;
2583                    }
2584                }
2585            }
2586            if(testField.length == 1 && testField[0].type == "text") {
2587                // Single Entry Found
2588                addresssCompanyField = testField[0];
2589                townFieldFound = true ;
2590            }
2591        }
2592
2593        // Address Line 1  - 'Street' or 'Address1'
2594        addressFieldFound = false ;
2595        oNonFormAddressElements = document.querySelectorAll("[id*='pc4uCF7Address1']");
2596        if(oNonFormAddressElements && oNonFormAddressElements.length > 0) {
2597            addressLine1Field = oNonFormAddressElements[0];
2598        }
2599        if(addressLine1Field) {
2600            addressFieldFound = true ;
2601        } else {
2602             // ID Not Found - Try for Fields named 'Street' or 'Address1'
2603            testAddressFields = document.getElementsByName("Street");
2604            if(testAddressFields){
2605                if(testAddressFields.length === 1 && testAddressFields[0].type === "text") {
2606                    // Single Entry Found
2607                    addressLine1Field = testAddressFields[0];
2608                    addressFieldFound = true ;
2609                }
2610            }
2611            if(!addressFieldFound) {
2612                testAddressFields = document.getElementsByName("Address1");
2613                if(testAddressFields){
2614                    if(testAddressFields.length === 1 && testAddressFields[0].type === "text") {
2615                        // Single Entry Found
2616                        addressLine1Field = testAddressFields[0];
2617                        addressFieldFound = true ;
2618                    }
2619                }
2620            }
2621        }
2622
2623        // Address Line 2  - 'Address2'
2624        addressFieldFound = false ;
2625        oNonFormAddressElements = document.querySelectorAll("[id*='pc4uCF7Address2']");
2626        if(oNonFormAddressElements && oNonFormAddressElements.length > 0) {
2627            addressLine2Field = oNonFormAddressElements[0];
2628        }
2629        if(addressLine2Field) {
2630            addressFieldFound = true ;
2631        } else {
2632             // ID Not Found - Try for Fields named 'Address2'
2633            testAddressFields = document.getElementsByName("Address2");
2634            if(testAddressFields){
2635                if(testAddressFields.length === 1 && testAddressFields[0].type === "text") {
2636                    // Single Entry Found
2637                    addressLine2Field = testAddressFields[0];
2638                    addressFieldFound = true ;
2639                }
2640            }
2641        }
2642
2643        // Address Line 3  - 'Address3'
2644        addressFieldFound = false ;
2645        oNonFormAddressElements = document.querySelectorAll("[id*='pc4uCF7Address3']");
2646        if(oNonFormAddressElements && oNonFormAddressElements.length > 0) {
2647            addressLine3Field = oNonFormAddressElements[0];
2648        }
2649        if(addressLine3Field) {
2650            addressFieldFound = true ;
2651        } else {
2652             // ID Not Found - Try for Fields named 'Address3'
2653            testAddressFields = document.getElementsByName("Address3");
2654            if(testAddressFields){
2655                if(testAddressFields.length === 1 && testAddressFields[0].type === "text") {
2656                    // Single Entry Found
2657                    addressLine3Field = testAddressFields[0];
2658                    addressFieldFound = true ;
2659                }
2660            }
2661        }
2662
2663        // Address 'County' Line  - 'County'
2664        addressFieldFound = false ;
2665        oNonFormAddressElements = document.querySelectorAll("[id*='pc4uCF7County']");
2666        if(oNonFormAddressElements && oNonFormAddressElements.length > 0) {
2667            addressCountyField = oNonFormAddressElements[0];
2668        }
2669        if(addressCountyField) {
2670            addressFieldFound = true ;
2671        } else {
2672            // ID Not Found - Try for Fields named 'County'
2673            testAddressFields = document.getElementsByName("County");
2674            if(testAddressFields){
2675                if(testAddressFields.length === 1 && testAddressFields[0].type === "text") {
2676                    // Single Entry Found
2677                    addressCountyField = testAddressFields[0];
2678                    addressFieldFound = true ;
2679                }
2680            }
2681        }
2682
2683        // Single 'Summary' Address Line
2684        addressFieldFound = false ;
2685        oNonFormAddressElements = document.querySelectorAll("[id*='pc4uCF7AddressLine']");
2686        if(oNonFormAddressElements && oNonFormAddressElements.length > 0) {
2687            addressSummaryLine = oNonFormAddressElements[0];
2688        }
2689        // Single 'Summary' Address Block
2690        addressFieldFound = false ;
2691        oNonFormAddressElements = document.querySelectorAll("[id*='pc4uCF7AddressBlock']");
2692        if(oNonFormAddressElements && oNonFormAddressElements.length > 0) {
2693            addressSummaryBlock = oNonFormAddressElements[0];
2694        }
2695
2696        // Postcode AddressSelect Dropdown
2697        oNonFormAddressElements = document.querySelectorAll("[id*='pc4uCF7Dropdown']");
2698        if(oNonFormAddressElements && oNonFormAddressElements.length > 0) {
2699            addressSelectDropdown = oFormLegacyDropDownElements[0];
2700        }
2701
2702         // Single 'Hidden Address' Area
2703        addressFieldFound = false ;
2704        oNonFormAddressElements = document.querySelectorAll("[id*='pc4uCF7AddressHidden']");
2705        if(oNonFormAddressElements && oNonFormAddressElements.length > 0) {
2706            addressHiddenDiv = oNonFormAddressElements[0];
2707        }
2708    }
2709
2710
2711    // Return Address Details as Control array
2712    return  {
2713        FormCompany: addressCompany,
2714        FormAddLine1: addressLine1,
2715        FormAddLine2: addressLine2,
2716        FormAddLine3: addressLine3,
2717        FormTown: addressTown,
2718        FormCounty: addressCounty,
2719        FormPostcode: addressPostcode,
2720        FormSelectAddress: addressSelectDropdown,
2721
2722        FormAddressSummaryLine: addressSummaryLine,
2723        FormAddressSummaryBlock: addressSummaryBlock,
2724        FormAddressHiddenArea: addressHiddenDiv
2725
2726    };
2727}
2728
2729// --------------------------------------------------------------------------
2730// legacyHtmlObjectSearch
2731// =======================
2732// Seaach for Object on Form.
2733// --------------------------------------------------------------------------
2734function legacyHtmlObjectSearch(searchObj, searchID){
2735    //Early return
2736    if( searchObj.id === searchID ){
2737      return searchObj;
2738    }
2739    var result, p;
2740    for (p in searchObj) {
2741        if( searchObj.hasOwnProperty(p) && typeof searchObj[p] === 'object' ) {
2742            result = legacyHtmlObjectSearch(searchObj[p], searchID);
2743            if(result){
2744                return result;
2745            }
2746        }
2747    }
2748    return result;
2749
2750}
2751
2752
2753// --------------------------------------------------------------------------
2754// showPc4uAddressDropdown
2755// =======================
2756// Function to SHOW PC4u Address Selection Dropdown
2757//  Added KRF 2020.04.30
2758// --------------------------------------------------------------------------
2759function showPc4uAddressDropdown(dropdownObj){
2760    if(dropdownObj) {
2761        // Use JQuery Show if available - 2021.04.25
2762         try {
2763             jQuery(dropdownObj).show();
2764
2765             // Check If Show Worked -
2766             if (jQuery(dropdownObj).css('display') === 'none') {
2767                 dropdownObj.style.display = '';
2768             } else {
2769                 dropdownObj.style.display = '';
2770             }
2771         }
2772         catch(err){
2773             dropdownObj.style.display = '';
2774         }
2775
2776        // Check for Select2 Container - Needs Showing Too - KRF 2020.04.29
2777        try {
2778            var ddPrev = jQuery(dropdownObj).prev();
2779            if(ddPrev && ddPrev.hasClass('select2-container')){
2780
2781                try {
2782                    ddPrev.show();
2783                }
2784                catch(err){
2785                    ddPrev.style.display = '';
2786                }
2787                ddPrev.css('display','block');
2788            }
2789        }
2790        catch(error) {
2791            // Do Nothing
2792        }
2793        // Fix for IOS - For CF7 Mostly
2794        setTimeout(function(){
2795            dropdownObj.focus();
2796            // lookupDropdown.options[0].selected = true;
2797        },500);
2798        //lookupDropdown.focus();
2799    }
2800}
2801
2802// ----------------------------------------------------------------
2803//  hidePc4uAddressDropdown
2804//  =======================
2805// Function to HIDE PC4u Address Selection Dropdown
2806//  Added KRF 2020.04.30
2807// ----------------------------------------------------------------
2808function hidePc4uAddressDropdown(dropdownObj, bClearDropdown){
2809     if(dropdownObj) {
2810         // Use JQuery Hide if available - 2021.04.25
2811         try {
2812            jQuery(dropdownObj).hide();
2813            if (jQuery(dropdownObj).css('display') !== 'none') {
2814                 dropdownObj.style.display = 'none';
2815            } else {
2816                dropdownObj.style.display = 'none';
2817            }
2818         }
2819         catch(err){
2820             dropdownObj.style.display = 'none';
2821         }
2822
2823        // Check for Select2 Container - Needs Hiding Too - KRF 2020.04.29
2824        try {
2825            var ddPrev = jQuery(dropdownObj).pre
2825v();
2826            if(ddPrev && ddPrev.hasClass('select2-container')){
2827                try {
2828                    ddPrev.hide();
2829                }
2830                catch(err){
2831                     ddPrev.style.display = 'none';
2832                }
2833            }
2834        }
2835        catch(error) {
2836            // Do Nothing
2837        }
2838
2839        // Clear Dropdown list if required
2840        if(bClearDropdown && bClearDropdown === true){
2841            dropdownObj.options.length = 0;
2842            try {
2843                jQuery(dropdownObj).empty();
2844
2845                if(ddPrev && ddPrev.hasClass('select2-container')){
2846                    ddPrev.select2('val', '0');
2847                    ddPrev.select2({placeholder: "Select an address:",
2848                            allowClear: true });
2849                }
2850            }
2851            catch(error) {
2852                // Do Nothing
2853            }
2854        }
2855     }
2856}
2857
2858// ----------------------------------------------------------------
2859// showPc4uGFHiddenAddress
2860// =======================
2861// Function to Show GravityForms 'Hidden Address Fields
2862//  Used to display Address when selected - or when Manual
2863//   Address is required for a Hidden GravityForms Address
2864//  Added KRF 2021.07.29
2865// ----------------------------------------------------------------
2866function showPc4uGFHiddenAddress(gfPc4uAddressFieldID){
2867    
2868    var showHiddenGfAddress = document.getElementById(gfPc4uAddressFieldID+"_pc4uGfPostcodeLookupAddress");
2869    if(showHiddenGfAddress) {
2870        //
2871        showHiddenGfAddress.style.display = '';    
2872    }
2873    var showHiddenGfManualAddressButton = document.getElementById(gfPc4uAddressFieldID+"_pc4uGFManualAddress");
2874    if(showHiddenGfManualAddressButton) {        //
2875        showHiddenGfManualAddressButton.style.display = 'none';    
2876    }    
2877}
2878
2879
2880// ------------------------------------------------------------------------
2881// CheckForAjaxError
2882// =================
2883// Function to Check If Ajax Response is an Error
2884// PARAMETERS - Full Message Response 'oResponse' and Error Msg Title
2885// RETURN  If Error is found it is displayed and the function returns 'True'
2886// .. a return of 'False' mean no error is detected
2887//
2888
2889//  Added KRF 2026.07.26
2890function CheckForAjaxError(oResponse, sErrorMsgTitle = "Error Detected"){
2891    $errorMessage = '';
2892    $ajaxErrorFound = false;
2893    $oResponseData = null;
2894    $oResponseDataError = null;
2895    // Check For Error - Updated/Omproved for V1.6+ Ajax Calls
2896    try {
2897        if(oResponse === null || typeof oResponse == "undefined" ) {           
2898            $ajaxErrorFound = true  ;
2899            $errorMessage = 'No Response To Postcodes4u Call';
2900        } else {
2901            // Valid Response - Get Response Data
2902            $oResponseData = oResponse.data;
2903            if($oResponseData !== null && typeof $oResponseData != "undefined") {
2904                $oResponseDataError = $oResponseData["Error"];
2905            }
2906            // Check Success State
2907            if(oResponse.success === true) {                
2908                // Response Data Valid - Success True
2909                // Check for Error in 'Data'   
2910                
2911                if(typeof $oResponseDataError != "undefined") {
2912                    // Get Error Message
2913                    $ajaxErrorFound = true ;                     
2914                    $errorMessage = $oResponseDataError.Description;                    
2915                }
2916            } else {
2917                // Response = Not Success
2918                // Get Error Message
2919                if(typeof $oResponseDataError == "undefined") {
2920                    $ajaxErrorFound = true                
2921                    $errorMessage = "Unknown Error Detected";
2922                    
2923                } else {
2924                    $ajaxErrorFound = true
2925                    $errorMessage = $oResponseDataError.Description;
2926                }    
2927            }                
2928        }    
2929    } catch(e) {
2930        $ajaxErrorFound = true;
2931        $errorMessage =  e.message;        
2932    }
2933   
2934    // IF ERROR FOUND THEN DISPLAY IT
2935    if($ajaxErrorFound === true) {
2936        // Error Message Clarifyer for the WordPress Plugin
2937        if($errorMessage === 'The specified product key is invali
2937d') {
2938            $errorMessage = 'The Postcodes4u product key is not valid. \n\n' +
2939                            'Please check that your Postcodes4u Key is properly setup in the Postcodes4u Plugin settings.';
2940        } else {
2941            if($errorMessage === 'The specified username was not found') {
2942                $errorMessage = 'The Postcodes4u Username is not valid. \n\n' +
2943                               'Please check that your Postcodes4u Username is properly setup in the Postcodes4u Plugin settings.';
2944            }
2945        }
2946    
2947        // DISPLAY ERROR MESSAGE        
2948        $errorMessage = sErrorMsgTitle + '\n\n' + $errorMessage;
2949        alert($errorMessage);        
2950        console.log($errorMessage);
2951    }
2952    
2953    return $ajaxErrorFound;
2954}

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.