PageSourceSearch

https://woodshowglobal.com/assets/js/global-newsLetter.js

js woodshowglobal.com collected 2026-09-29 06:06:41 UTC 22,164 bytes, 482 lines download raw bytes

1window.cfields = [];
2window._show_thank_you = function(id, message, trackcmp_url, email) {
3    var form = document.getElementById('_form_' + id + '_'), thank_you = form.querySelector('._form-thank-you');
4    form.querySelector('._form-content').style.display = 'none';
5    thank_you.innerHTML = message;
6    thank_you.style.display = 'block';
7    const vgoAlias = typeof visitorGlobalObjectAlias === 'undefined' ? 'vgo' : visitorGlobalObjectAlias;
8    var visitorObject = window[vgoAlias];
9    if (email && typeof visitorObject !== 'undefined') {
10        visitorObject('setEmail', email);
11        visitorObject('update');
12    } else if (typeof(trackcmp_url) != 'undefined' && trackcmp_url) {
13        // Site tracking URL to use after inline form submission.
14        _load_script(trackcmp_url);
15    }
16    if (typeof window._form_callback !== 'undefined') window._form_callback(id);
17};
18window._show_error = function(id, message, html) {
19    var form = document.getElementById('_form_' + id + '_'),
20        err = document.createElement('div'),
21        button = form.querySelector('button'),
22        old_error = form.querySelector('._form_error');
23    if (old_error) old_error.parentNode.removeChild(old_error);
24    err.innerHTML = message;
25    err.className = '_error-inner _form_error _no_arrow';
26    var wrapper = document.createElement('div');
27    wrapper.className = '_form-inner';
28    wrapper.appendChild(err);
29    button.parentNode.insertBefore(wrapper, button);
30    var submitButton = form.querySelector('[id^="_form"][id$="_submit"]');
31    submitButton.disabled = false;
32    submitButton.classList.remove('processing');
33    if (html) {
34        var div = document.createElement('div');
35        div.className = '_error-html';
36        div.innerHTML = html;
37        err.appendChild(div);
38    }
39};
40window._load_script = function(url, callback, isSubmit) {
41    var head = document.querySelector('head'), script = document.createElement('script'), r = false;
42    var submitButton = document.querySelector('#_form_365_submit');
43    script.type = 'text/javascript';
44    script.charset = 'utf-8';
45    script.src = url;
46    if (callback) {
47        script.onload = script.onreadystatechange = function() {
48            if (!r && (!this.readyState || this.readyState == 'complete')) {
49                r = true;
50                callback();
51            }
52        };
53    }
54    script.onerror = function() {
55        if (isSubmit) {
56            if (script.src.length > 10000) {
57                _show_error("365", "Sorry, your submission failed. Please shorten your responses and try again.");
58            } else {
59                _show_error("365", "Sorry, your submission failed. Please try again.");
60            }
61            submitButton.disabled = false;
62            submitButton.classList.remove('processing');
63        }
64    }
65
66    head.appendChild(script);
67};
68(function() {
69    if (window.location.search.search("excludeform") !== -1) return false;
70    var getCookie = function(name) {
71        var match = document.cookie.match(new RegExp('(^|; )' + name + '=([^;]+)'));
72        return match ? match[2] : null;
73    }
74    var setCookie = function(name, value) {
75        var now = new Date();
76        var time = now.getTime();
77        var expireTime = time + 1000 * 60 * 60 * 24 * 365;
78        now.setTime(expireTime);
79        document.cookie = name + '=' + value + '; expires=' + now + ';path=/; Secure; SameSite=Lax;';
80    }
81            var addEvent = function(element, event, func) {
82        if (element.addEventListener) {
83            element.addEventListener(event, func);
84        } else {
85            var oldFunc = element['on' + event];
86            element['on' + event] = function() {
87                oldFunc.apply(this, arguments);
88                func.apply(this, arguments);
89            };
90        }
91    }
92    var _removed = false;
93        var form_to_submit = document.getElementById('_form_365_');
94    var allInputs = form_to_submit.querySelectorAll('input, select, textarea'), tooltips = [], submitted = false;
95
96    var getUrlParam = function(name) {
97        var params = new URLSearchParams(window.location.search);
98        return params.get(name) || false;
99    };
100
101    var acctDateFormat = "%d/%B/%Y";
102    var getNormalizedDate = function(date, acctFormat) {
103        var decodedDate = decodeURIComponent(date);
104        if (Date.parse(decodedDate)) {
105            var dateObj = new Date(decodedDate);
106            var year = dateObj.getFullYear();
107            var month = dateObj.getMonth() + 1;
108            var day = dateObj.getDate();
109            return `${year}-${month < 10 ? `0${month}` : month}-${day < 10 ? `0${day}` : day}`;
110        } else if (acctFormat.match(/(%d|%e).*%m/gm) !== null) {
111            return decodedDate.replace(/(\d{1,2}).*(\d{1,2}).*(\d{4})/gm, '$3-$1-$2');
112        }
113        return false;
114    };
115
116    var getNormalizedTime = function(time) {
117        var hour, minutes;
118        var decodedTime = decodeURIComponent(time);
119        var timeParts = Array.from(decodedTime.matchAll(/(\d{1,2}):(\d{1,2})\W*([AaPp][Mm])?/gm))[0];
120        if (timeParts[3]) { // 12 hour format
121            var isPM = timeParts[3].toLowerCase() === 'pm';
122            if (isPM) {
123                hour = parseInt(timeParts[1]) === 12 ? '12' : `${parseInt(timeParts[1]) + 12}`;
124            } else {
125                hour = parseInt(timeParts[1]) === 12 ? '0' : timeParts[1];
126            }
127        } else { // 24 hour format
128            hour = timeParts[1];
129        }
130        var normalizedHour = parseInt(hour) < 10 ? `0${hour}` : hour;
131        var minutes = timeParts[2];
132        return `${normalizedHour}:${minutes}`;
133    };
134
135    for (var i = 0; i < allInputs.length; i++) {
136        var regexStr = "field\\[(\\d+)\\]";
137        var results = new RegExp(regexStr).exec(allInputs[i].name);
138        if (results != undefined) {
139            allInputs[i].dataset.name = allInputs[i].name.match(/\[time\]$/)
140                ? `${window.cfields[results[1]]}_time`
141                : window.cfields[results[1]];
142        } else {
143            allInputs[i].dataset.name = allInputs[i].name;
144        }
145        var fieldVal = getUrlParam(allInputs[i].dataset.name);
146
147        if (fieldVal) {
148            if (allInputs[i].dataset.autofill === "false") {
149                continue;
150            }
151            if (allInputs[i].type == "radio" || allInputs[i].type == "checkbox") {
152                if (allInputs[i].value == fieldVal) {
153                    allInputs[i].checked = true;
154                }
155            } else if (allInputs[i].type == "date") {
156                allInputs[i].value = getNormalizedDate(fieldVal, acctDateFormat);
157            } else if (allInputs[i].type == "time") {
158                allInputs[i].value = getNormalizedTime(fieldVal);
159            } else {
160                allInputs[i].value = fieldVal;
161            }
162        }
163    }
164
165    var remove_tooltips = function() {
166        for (var i = 0; i < tooltips.length; i++) {
167            tooltips[i].tip.parentNode.removeChild(tooltips[i].tip);
168        }
169        tooltips = [];
170    };
171    var remove_tooltip = function(elem) {
172        for (var i = 0; i < tooltips.length; i++) {
173            if (tooltips[i].elem === elem) {
174                tooltips[i].tip.parentNode.removeChild(tooltips[i].tip);
175                tooltips.splice(i, 1);
176                return;
177            }
178        }
179    };
180    var create_tooltip = function(elem, text) {
181        var tooltip = document.createElement('div'),
182            arrow = document.createElement('div'),
183            inner = document.createElement('div'), new_tooltip = {};
184        if (elem.type != 'radio' && elem.type != 'checkbox') {
185            tooltip.className = '_error';
186            arrow.className = '_error-arrow';
187            inner.className = '_error-inner';
188            inner.innerHTML = text;
189            tooltip.appendChild(arrow);
190            tooltip.appendChild(inner);
191            elem.parentNode.appendChild(tooltip);
192        } else {
193            tooltip.className = '_error-inner _no_arrow';
194            tooltip.innerHTML = text;
195            elem.parentNode.insertBefore(tooltip, elem);
196            new_tooltip.no_arrow = true;
197        }
198        new_tooltip.tip = tooltip;
199        new_tooltip.elem = elem;
200        tooltips.push(new_tooltip);
201        return new_tooltip;
202    };
203    var resize_tooltip = function(tooltip) {
204        var rect = tooltip.elem.getBoundingClientRect();
205        var doc = document.documentElement,
206            scrollPosition = rect.top - ((window.pageYOffset || doc.scrollTop)  - (doc.clientTop || 0));
207        if (scrollPosition < 40) {
208            tooltip.tip.className = tooltip.tip.className.replace(/ ?(_above|_below) ?/g, '') + ' _below';
209        } else {
210            tooltip.tip.className = tooltip.tip.className.replace(/ ?(_above|_below) ?/g, '') + ' _above';
211        }
212    };
213    var resize_tooltips = function() {
214        if (_removed) return;
215        for (var i = 0; i < tooltips.length; i++) {
216            if (!tooltips[i].no_arrow) resize_tooltip(tooltips[i]);
217        }
218    };
219    var validate_field = function(elem, remove) {
220        var tooltip = null, value = elem.value, no_error = true;
221        remove ? remove_tooltip(elem) : false;
222        if (elem.type != 'checkbox') elem.className = elem.className.replace(/ ?_has_error ?/g, '');
223        if (elem.getAttribute('required') !== null) {
224            if (elem.type == 'radio' || (elem.type == 'checkbox' && /any/.test(elem.className))) {
225                var elems = form_to_submit.elements[elem.name];
226                if (!(elems instanceof NodeList || elems instanceof HTMLCollection) || elems.length <= 1) {
227                    no_error = elem.checked;
228                }
229                else {
230                    no_error = false;
231                    for (var i = 0; i < elems.length; i++) {
232                        if (elems[i].checked) no_error = true;
233                    }
234                }
235                if (!no_error) {
236                    tooltip = create_tooltip(elem, "Please select an option.");
237                }
238            } else if (elem.type =='checkbox') {
239                var elems = form_to_submit.elements[elem.name], found = false, err = [];
240                no_error = true;
241                for (var i = 0; i < elems.length; i++) {
242                    if (elems[i].getAttribute('required') === null) continue;
243                    if (!found && elems[i] !== elem) return true;
244                    found = true;
245                    elems[i].className = elems[i].className.replace(/ ?_has_error ?/g, '');
246                    if (!elems[i].checked) {
247                        no_error = false;
248                        elems[i].className = elems[i].className + ' _has_error';
249                        err.push("Checking %s is required".replace("%s", elems[i].value));
250                    }
251                }
252                if (!no_error) {
253                    tooltip = create_tooltip(elem, err.join('<br/>'));
254                }
255            } else if (elem.tagName == 'SELECT') {
256                var selected = true;
257                if (elem.multiple) {
258                    selected = false;
259                    for (var i = 0; i < elem.options.length; i++) {
260                        if (elem.options[i].selected) {
261                            selected = true;
262                            break;
263                        }
264                    }
265                } else {
266                    for (var i = 0; i < elem.options.length; i++) {
267                        if (elem.options[i].selected
268                            && (!elem.options[i].value
269                            || (elem.options[i].value.match(/\n/g)))
270                        ) {
271                            selected = false;
272                        }
273                    }
274                }
275                if (!selected) {
276                    elem.className = elem.className + ' _has_error';
277                    no_error = false;
278                    tooltip = create_tooltip(elem, "Please select an option.");
279                }
280            } else if (value === undefined || value === null || value === '') {
281                elem.className = elem.className + ' _has_error';
282                no_error = false;
283                tooltip = create_tooltip(elem, "This field is required.");
284            }
285        }
286        if (no_error && (elem.id == 'field[]' || elem.id == 'ca[11][v]')) {
287            if (elem.className.includes('phone-input-error')) {
288                elem.className = elem.className + ' _has_error';
289                no_error = false;
290            }
291        }
292        if (no_error && elem.name == 'email') {
293            if (!value.match(/^[\+_a-z0-9-'&=]+(\.[\+_a-z0-9-']+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,})$/i)) {
294                elem.className = elem.className + ' _has_error';
295                no_error = false;
296                tooltip = create_tooltip(elem, "Enter a valid email address.");
297            }
298        }
299        if (no_error && /date_field/.test(elem.className)) {
300            if (!value.match(/^\d\d\d\d-\d\d-\d\d$/)) {
301                elem.className = elem.className + ' _has_error';
302                no_error = false;
303                tooltip = create_tooltip(elem, "Enter a valid date.");
304            }
305        }
306        tooltip ? resize_tooltip(tooltip) : false;
307        return no_error;
308    };
309    var needs_validate = function(el) {
310        if(el.getAttribute('required') !== null){
311            return true
312        }
313        if(el.name === 'email' && el.value !== ""){
314            return true
315        }
316
317        if((el.id == 'field[]' || el.id == 'ca[11][v]') && el.className.includes('phone-input-error')){
318            return true
319        }
320
321        return false
322    };
323    var validate_form = function(e) {
324        var err = form_to_submit.querySelector('._form_error'), no_error = true;
325        if (!submitted) {
326            submitted = true;
327            for (var i = 0, len = allInputs.length; i < len; i++) {
328                var input = allInputs[i];
329                if (needs_validate(input)) {
330                    if (input.type == 'tel') {
331                        addEvent(input, 'blur', function() {
332                            this.value = this.value.trim();
333                            validate_field(this, true);
334                        });
335                    }
336                    if (input.type == 'text' || input.type == 'number' || input.type == 'time') {
337                        addEvent(input, 'blur', function() {
338                            this.value = this.value.trim();
339                            validate_field(this, true);
340                        });
341                        addEvent(input, 'input', function() {
342                            validate_field(this, true);
343                        });
344                    } else if (input.type == 'radio' || input.type == 'checkbox') {
345                        (function(el) {
346                            var radios = form_to_submit.elements[el.name];
347                            for (var i = 0; i < radios.length; i++) {
348                                addEvent(radios[i], 'click', function() {
349                                    validate_field(el, true);
350                                });
351                            }
352                        })(input);
353                    } else if (input.tagName == 'SELECT') {
354                        addEvent(input, 'change', function() {
355                            validate_field(this, true);
356                        });
357                    } else if (input.type == 'textarea'){
358                        addEvent(input, 'input', function() {
359                            validate_field(this, true);
360                        });
361                    }
362                }
363            }
364        }
365        remove_tooltips();
366        for (var i = 0, len = allInputs.length; i < len; i++) {
367            var elem = allInputs[i];
368            if (needs_validate(elem)) {
369                if (elem.tagName.toLowerCase() !== "select") {
370                    elem.value = elem.value.trim();
371                }
372                validate_field(elem) ? true : no_error = false;
373            }
374        }
375        if (!no_error && e) {
376            e.preventDefault();
377        }
378        resize_tooltips();
379        return no_error;
380    };
381    addEvent(window, 'resize', resize_tooltips);
382    addEvent(window, 'scroll', resize_tooltips);
383
384    var hidePhoneInputError = function(inputId) {
385        var errorMessage =  document.getElementById("error-msg-" + inputId);
386        var input = document.getElementById(inputId);
387        errorMessage.classList.remove("phone-error");
388        errorMessage.classList.add("phone-error-hidden");
389        input.classList.remove("phone-input-error");
390    };
391
392    var initializePhoneInput = function(input, defaultCountry) {
393        return window.intlTelInput(input, {
394            utilsScript: "https://unpkg.com/[email protected]/build/js/utils.js",
395            autoHideDialCode: false,
396            separateDialCode: true,
397            initialCountry: defaultCountry,
398            preferredCountries: []
399        });
400    }
401
402    var setPhoneInputEventListeners = function(inputId, input, iti) {
403        input.addEventListener('blur', function() {
404            var errorMessage = document.getElementById("error-msg-" + inputId);
405            if (input.value.trim()) {
406                if (iti.isValidNumber()) {
407                    iti.setNumber(iti.getNumber());
408                    if (errorMessage.classList.contains("phone-error")){
409                        hidePhoneInputError(inputId);
410                    }
411                } else {
412                    showPhoneInputError(inputId)
413                }
414            } else {
415                if (errorMessage.classList.contains("phone-error")){
416                    hidePhoneInputError(inputId);
417                }
418            }
419        });
420
421        input.addEventListener("countrychange", function() {
422            iti.setNumber('');
423        });
424
425        input.addEventListener("keydown", function(e) {
426            var charCode = (e.which) ? e.which : e.keyCode;
427            if (charCode > 31 && (charCode < 48 || charCode > 57) && charCode !== 8) {
428                e.preventDefault();
429            }
430        });
431    };
432
433    var showPhoneInputError = function(inputId) {
434        var errorMessage =  document.getElementById("error-msg-" + inputId);
435        var input = document.getElementById(inputId);
436        errorMessage.classList.add("phone-error");
437        errorMessage.classList.remove("phone-error-hidden");
438        input.classList.add("phone-input-error");
439    };
440
441
442    window['recaptcha_callback'] = function() {
443  // Get all recaptchas in the DOM (there may be more than one form on the page).
444  var recaptchas = document.getElementsByClassName("g-recaptcha");
445  for (var i in recaptchas) {
446    // Set the recaptcha element ID, so the recaptcha can be applied to each element.
447    var recaptcha_id = "recaptcha_" + i;
448    recaptchas[i].id = recaptcha_id;
449    var el = document.getElementById(recaptcha_id);
450    if (el != null) {
451      var sitekey = el.getAttribute("data-sitekey");
452      var stoken = el.getAttribute("data-stoken");
453      try{
454        grecaptcha.render(recaptcha_id, {"sitekey":sitekey,"stoken":stoken});
455      }
456      catch(e){
457
458      }
459    }
460  }
461};    _load_script(
462        "https://www.google.com/recaptcha/api.js?onload=recaptcha_callback&render=explicit"
463    );
464    var _form_serialize = function(form){if(!form||form.nodeName!=="FORM"){return }var i,j,q=[];for(i=0;i<form.elements.length;i++){if(form.elements[i].name===""){continue}switch(form.elements[i].nodeName){case"INPUT":switch(form.elements[i].type){case"tel":q.push(form.elements[i].name+"="+encodeURIComponent(form.elements[i].previousSibling.querySelector('div.iti__selected-dial-code').innerText)+encodeURIComponent(" ")+encodeURIComponent(form.elements[i].value));break;case"text":case"number":case"date":case"time":case"hidden":case"password":case"button":case"reset":case"submit":q.push(form.elements[i].name+"="+encodeURIComponent(form.elements[i].value));break;case"checkbox":case"radio":if(form.elements[i].checked){q.push(form.elements[i].name+"="+encodeURIComponent(form.elements[i].value))}break;case"file":break}break;case"TEXTAREA":q.push(form.elements[i].name+"="+encodeURIComponent(form.elements[i].value));break;case"SELECT":switch(form.elements[i].type){case"select-one":q.push(form.elements[i].name+"="+encodeURIComponent(form.elements[i].value));break;case"select-multiple":for(j=0;j<form.elements[i].options.length;j++){if(form.elements[i].options[j].selected){q.push(form.elements[i].name+"="+encodeURIComponent(form.elements[i].options[j].value))}}break}break;case"BUTTON":switch(form.elements[i].type){case"reset":case"submit":case"button":q.push(form.elements[i].name+"="+encodeURIComponent(form.elements[i].value));break}break}}return q.join("&")};
465    var form_submit = function(e) {
466        e.preventDefault();
467        if (validate_form()) {
468            // use this trick to get the submit button & disable it using plain 
468javascript
469            var submitButton = e.target.querySelector('#_form_365_submit');
470            submitButton.disabled = true;
471            submitButton.classList.add('processing');
472                        var serialized = _form_serialize(
473                document.getElementById('_form_365_')
474            ).replace(/%0A/g, '\\n');
475            var err = form_to_submit.querySelector('._form_error');
476            err ? err.parentNode.removeChild(err) : false;
477            _load_script('//ac.strategic.ae/proc.php?' + serialized + '&jsonp=true', null, true);
478        }
479        return false;
480    };
481    addEvent(form_to_submit, 'submit', form_submit);
482})();

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.