PageSourceSearch

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

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

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.