PageSourceSearch

https://oldfashionedweek.com/js/vendor/plugins.js?ver=622797546

js oldfashionedweek.com collected 2026-09-28 08:17:29 UTC 23,517 bytes, 546 lines download raw bytes

1/** XENOPSI Common JS functions v.1.2.0 (June 2015) **/
2(function ($) {
3    $.expr[':'].external = function (obj) {
4        return !obj.href.match(/^mailto:/) && !obj.href.match(/^tel:/) && !obj.href.match(/^#/) && !obj.href == "" && !obj.href.match(/^javascript:/) && (obj.target.toLowerCase() == "_blank" || (obj.hostname.replace(/^www\./i, '') != document.location.hostname.replace(/^www\./i, '')));
5    };
6}(jQuery));
7var _xm = {
8    timmers: [], refresh: function (elm, forceRefresh) {
9        if ((typeof elm == "undefined")) {
10            elm = $(document);
11        }
12        if ((typeof forceRefresh == "undefined")) {
13            forceRefresh = false;
14        }
15        elm.find('a[href="#"]').each(function (i, v) {
16            if ($(this).data('xmAnchor') != true) {
17                $(this).data('xmAnchor', true).click(function (e) {
18                    e.preventDefault();
19                });
20            }
21        });
22        elm.find("input:text , input:password, textarea").each(function (i, v) {
23            if ($(this).data('xmInput') != true) {
24                $(this).data('xmInput', true).focus(function () {
25                    if ($(this).attr("data-title") && $(this).val() == $(this).attr("data-title")) {
26                        $(this).val("");
27                    }
28                }).blur(function () {
29                    if ($(this).val() == "" && $(this).attr("data-title")) {
30                        $(this).val($(this).attr("data-title"));
31                    }
32                });
33            }
34        });
35        elm.find('a:external').each(function (i, v) {
36            if ($(this).data('xmExternal') != true) {
37                $(this).data('xmExternal', true).click(function (e) {
38                    if (!$(this)[0].hasAttribute('data-track')) {
39                        if ($(this).data("title")) {
40                            _xm.pushEvent("outbound", $(this).data("title"), $(this).attr("href"));
41                        } else {
42                            _xm.pushEvent("outbound", $(this).attr("href"));
43                        }
44                    }
45                });
46            }
47        });
48        elm.find("[data-track]").each(function (i, v) {
49            if ($(this).data('xmTrack') != true) {
50                $(this).data('xmTrack', true).click(function (e) {
51                    var tc = $(this).data("track");
52                    _xm.pushString(tc);
53                    if ($(this).attr("href") == "#") e.preventDefault();
54                })
55            }
56        });
57        elm.find("[data-track-hover]").each(function (i, v) {
58            if ($(this).data('xmTrackHover') != true) {
59                $(this).data('xmTrackHover', true).mouseenter(function (e) {
60                    var tc = $(this).data("track-hover");
61                    _xm.pushString(tc);
62                })
63            }
64        });
65        elm.find('form').each(function (i, v) {
66            _xm.setupForm($(this));
67        })
68
69        elm.find("[data-init]").each(function () {
70            if ($(this).attr('data-initialized') != 1) {
71                var funName = $(this).data("init");
72                window[funName]();
73                $(this).attr('data-initialized', 1);
74            }
75        });
76    }, pushEvent: function (_cat, _act, _param, _value) {
77        if (typeof _value != 'undefined') {
78            gtag('event', _param, {'event_category': _act,  'event_label': _cat, 'value': _value});
79        } else if (typeof _param != 'undefined') {
80            gtag('event', _param, {'event_category': _act,  'event_label': _cat});
81        } else if (typeof _act != 'undefined') {          
82            gtag('event', _act, {'event_category': _cat,  'event_label': _act});
83        } else if (typeof _cat != 'undefined') {
84            gtag('event', _act, {'event_category': 'Click',  'event_label': _act});
85        }
86    }, pushString: function (str) {
87        var arr = str.split("|");
88        if (arr.length > 3) {
89            _xm.pushEvent(arr[0], arr[1], arr[2], arr[3]);
90        } else if (arr.length > 2) {
91            _xm.pushEvent(arr[0], arr[1], arr[2]);
92        } else if (arr.length > 1) {
93            _xm.pushEvent(arr[0], arr[1]);
94        } else {
95            _xm.pushEvent(arr[0], "click");
96        }
97    }, timerStart: function (_cat) {
98        var ct = new Date().getTime();
99        _xm.timmers[_cat] = ct;
100    }, timerEnd: function (_cat, _act, _param) {
101        var ct = new Date().getTime();
102        var ts = _xm.timmers[_cat];
103        if (ts) {
104            var timeSpent = ct - ts;
105            _xm.timmers[_cat] = null;
106            if (typeof _param == 'undefined') {
107                gtag('event', 'timing', {'event_category': _act,  'event_label': _
107cat, 'value': timeSpent});
108            } else {
109                gtag('event', _param, {'event_category': _act,  'event_label': _cat, 'value': timeSpent});
110            }
111        }
112    }, cleanupDefaults: function ($frm) {
113        $(".asterik").removeClass("error").html($(".asterik").data("title"));
114        $frm.find("input[type='text'], textarea").each(function (index, element) {
115            if ($(this).val() == $(this).data("title")) $(this).val("");
116        });
117    }, resetForm: function ($frm) {
118        $frm[0].reset();
119        $frm.find('[data-title]').trigger('blur');
120        $frm.find('select').trigger('chosen:updated');
121    }, setupForm: function ($form) {
122        var fieldVal = '';
123        $form.find('[data-empty]').each(function (i, v) {
124
125            var $field = $(this);
126            if (!$field.attr('data-title')) {
127                $field.attr('data-title', '');
128            }
129            if ($field.attr('name'))
130                fieldVal += $field.attr('name') + "|empty|" + $field.data("title") + "|" + $field.data("empty") + "~";
131            if ($field.data('validate')) {
132                fieldVal += $field.attr('name') + "|" + $field.data('validate') + "|" + $field.data("title") + "|" + $field.data("invalid") + "~";
133            }
134        });
135        if ($form.find('input[name="xmsetup"]').length == 0) {
136            $form.prepend('<input type="hidden" name="xmsetup">');
137        }
138        $form.find('input[name="xmsetup"]').val(fieldVal);
139        var notRequiredFields = '';
140        $form.find('input[type="text"],input[type="email"],input[type="url"],input[type="time"],input[type="date"], textarea, select').not('[data-empty]').each(function (i, v) {
141            var $field = $(this);
142            if ($field.attr('name'))
143                notRequiredFields += $field.attr('name') + "|" + $field.data("title") + "~";
144        });
145        if ($form.find('input[name="xmsetupignore"]').length == 0) {
146            $form.prepend('<input type="hidden" name="xmsetupignore">');
147        }
148        $form.find('input[name="xmsetupignore"]').val(notRequiredFields);
149        $form.find('[data-title]').trigger('blur');
150        if ($form.attr('data-action')) {
151            $form.find("input[type='text']").off("keypress").on("keypress", function (e) {
152                if (e.which == 13) {
153                    e.preventDefault();
154                    _xm.submitForm($form);
155                }
156            });
157            $form.find('button[type="submit"], input[type="submit"]').off("
157click").on("click", function (e) {
158                _xm.submitForm($form);
159            });
160        }
161    }, validateForm: function ($frm) {
162        var isValid = true;
163        var errorMessage = '';
164        var $errorField;
165        _xm.removeAllErrors();
166        $frm.find('[data-empty]').each(function (i, v) {
167            var $field = $(this);
168            if (($field.is(':checkbox') && !$field.is(':checked')) || Validate.empty($field.val()) || $field.val() == $field.attr("data-title")) {
169                $field.addClass("error");
170                $errorField = $field;
171                errorMessage = $field.attr("data-empty");
172                if (DEVICE_TYPE == 'phone') {
173                    alert(errorMessage);
174                    $field.focus();
175                }
176                else
177                    $(_xm.getErrorHTML(errorMessage)).insertBefore($errorField);
178                if ($field.is('select')) {
179                    setTimeout(function () {
180                        $field.first().trigger('chosen:open');
181                    }, 200);
182                } else {
183                    $field.focus();
184                }
185                $field.on('change', function () {
186                    $field.siblings('.xm-tooltip').remove()
187                });
188                return isValid = false;
189            }
190            if (isValid && $field.attr('data-validate')) {
191                if (!Validate[$field.attr('data-validate')]($field.val())) {
192                    $field.addClass("error");
193                    $errorField = $field;
194                    errorMessage = $field.attr("data-invalid");
195                    if (DEVICE_TYPE == 'phone') alert(errorMessage);
196                    else
197                        $(_xm.getErrorHTML(errorMessage)).insertBefore($errorField);
198                    $field.focus();
199                    $field.on('change', function () {
200                        $field.siblings('.xm-tooltip').remove()
201                    });
202                    return isValid = false;
203                }
204            }
205        });
206        if (!isValid) {
207            return {result: false, field: $errorField, error: errorMessage};
208        } else {
209            return true;
210        }
211
212    }, submitForm: function ($form) {
213        if ($form.attr('data-submitting') == true) {
214            return false;
215        }
216        var isValid = _xm.validateForm($form);
217        //$('[name=instagram],[name=facebook],[name=website]').on('blur',function(){
218        var urlPatt = new RegExp(/^(http(s)?:\/\/)?(www\.)?[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/);
219        var hasNumber = /\d/;
220
221        if($('[name=phone_number]').length > 0){
222            if(hasNumber.test($("input[name=phone_number]").val()) == true && $("input[name=phone_number]").val().search(/_/) >= 0) {
223                $("input[name=phone_number]").focus();
224                $("input[name=phone_number]").before('<div class="xm-tooltip">'+$("input[name=phone_number]").attr('data-invalid')+'</div>');
225                isValid = false;
226            }
227        }
228        
229        if($('[name=instagram]').length > 0){
230            if($('[name=instagram]').val() != ''){
231                if(!urlPatt.test($('[name=instagram]').val())){
232                    $('[name=instagram]').focus();
233                    $('[name=instagram]').before('<div class="xm-tooltip">Please enter a valid url</div>');
234                    isValid = false;
235                }
236            }
237        }
238
239        if($('[name=facebook]').length > 0){
240            if($('[name=facebook]').val() != ''){
241                if(!urlPatt.test($('[name=facebook]').val())){
242                    $('[name=facebook]').focus();
243                    $('[name=facebook]').before('<div class="xm-tooltip">Please enter a valid url</div>');
244                    isValid = false;
245                }
246            }
247        }
248
249        if($('[name=website]').length > 0){
250            if($('[name=website]').val() != ''){
251                if(!urlPatt.test($('[name=website]').val())){
252                    $('[name=website]').focus();
253                    $('[name=website]').before('<div class="xm-tooltip">Please enter a valid url</div>');
254                    isValid = false;
255                }
256            }
257        }
258
259        if($('#ingredients').length > 0){
260            if($('#ingredients').val().indexOf('Elijah Craig') == -1 ){
261                $('.ingredients-area').before("<div class='xm-tooltip'>"+$('.ingredients-area').attr('data-invalid')+"</div>");
262                isValid = false;
263            }
264        }
265        
266        if (isValid != true) {
267            //_xm.removeAllErrors();
268            _xm.pushEvent($form.attr('id'), 'error', isValid.error);
269            if (DEVICE_TYPE == 'phone') {
270                //alert(isValid.error);
271            } else {
272                // $form.prepend(_xm.getErrorHTML(isValid.error));
273            }
274        } else {
275            _xm.cleanupDefaults($form);
276            $form.attr('data-submitting', true);
277            $.ajax({
278                url: $form.attr('data-action'), type: 'POST', data: $form.serialize(), cache: false, dataType: 'json',
279                success: function (data) {
280                    if (data.success == true) {
281                        _xm.resetForm($form);
282                        $form.prepend(_xm.getThankyouHTML($form.attr('data-thankyou')));
283                        _xm.pushEvent($form.attr('id'), 'submit', "complete");
284                        if ($form.attr('data-submit-complete')) {
285                            var funName = $form.data("submit-complete");
286                            window[funName](data);
287                        }
288                        if ($form.attr('data-track-submit')) {
289                            _xm.pushString($form.attr('data-track-submit'));
290                        }
291                    } else {
292                        if (typeof data.errors.field != 'undefined') {
293                        	
294                        	 if (DEVICE_TYPE == 'phone')
295                        	 {
296                        		 alert(data.errors.reason);
297                        		 $('input[name="'+data.errors.field +'"]').focus()
298                        		 $.scrollTo($('input[name="'+data.errors.field +'"]').offset().top - 200, 400, {axis: "y"}); 
299                        	 }
300                        	
301                        		 var $errorfield = $form.find('[name="' + data.errors.field + '"]').first();
302                        		 if ($errorfield.length == 1) {
303                        			 $(_xm.getErrorHTML(_xm.getErrorHTML(data.errors.reason))).insertBefore($errorfield);
304                        			 
305                        		 } else {
306                        			 $form.prepend(_xm.getErrorHTML(data.errors.reason));
307                        		 }
308                        	
309                        } else
310                            $form.prepend(_xm.getErrorHTML(data.errors.reason));
311                    }
312                    $form.attr('data-submitting', false);
313                },
314                error: function (jqXHR, textStatus, errorThrown) {
315                    $form.attr('data-submitting', false);
316                }
317            });
318        }
319
320    }, removeAllErrors: function () {
321        $('.xm-tooltip').remove();
322        $('.alert').remove();
323        $("form").find('.error').removeClass('error');
324        $("form").find(".valid").removeClass('valid');
325        $("form").find(".invalid").removeClass('invalid');
326    }, getErrorHTML: function (str) {
327        return '<div class="xm-tooltip">' + str + '</div>';
328        return '<div class="alert alert-danger">' + str + '</div>';
329    }, getThankyouHTML: function (str) {
330        return '<div class="alert alert-success">' + str + '</div>';
331    }
332};
333$(document).ready(function () {
334    _xm.refresh();
335    $('[data-mask]').each(function () {
336        if ($(this).data('mask') == 'email') {
337            $(this).inputmask({
338                showMaskOnHover: false,
339                mask: "*{1,20}[.*{1,20}][.*{1,20}][.*{1,20}]@*{1,20}[.*{2,6}][.*{1,2}]",
340                greedy: false,
341                onBeforePaste: function (pastedValue, opts) {
342                    pastedValue = pastedValue.toLowerCase();
343                    return pastedValue.replace("mailto:", "");
344                },
345                definitions: {
346                    '*': {
347                        validator: "[0-9A-Za-z!#$%&'*+/=?^_`{|}~\-]",
348                        cardinality: 1,
349                        casing: "lower"
350                    }
351                }
352            });
353        } else {
354            $(this).inputmask({
355                showMaskOnHover: false,
356                mask: $(this).data('mask')
357            });
358        }
359    });
360    if (DEVICE_TYPE != 'computer') {
361        $('input[data-keyboard]').each(function () {
362            if ($(this).data('keyboard') == 'float') {
363                $(this).attr('type', 'number');
364                $(this).attr('pattern', '[0-9]*\.[0-9]*');
365                $(this).attr('inputmode', 'numeric');
366            } else if ($(this).data('keyboard') == 'number') {
367                $(this).attr('type', 'number');
368                $(this).attr('pattern', '[0-9]*');
369                $(this).attr('inputmode', 'numeric');
370            } else if ($(this).data('keyboard') == 'phone') {
371                $(this).attr('type', 'tel');
372                $(this).attr('pattern', '([0-9]3) [0-9]3-[0-9]4');
373                $(this).attr('inputmode', 'numeric');
374            } else if ($(this).data('keyboard') == 'zip') {
375                $(this).attr('type', 'tel');
376                $(this).attr('pattern', '[0-9]*');
377                $(this).attr('inputmode', 'numeric');
378            } else if ($(this).data('keyboard') == 'email') {
379                $(this).attr('type', 'email');
380            }
381        });
382    }
383
384    if ($('.xpMaterial').length) {
385        $('.xpMaterial').find(".form-control").each(function () {
386            if ($(this).val() != "") {
387                $(this).parent('.xpMaterial').addClass('notempty');
388            } else {
389                $(this).parent('.xpMaterial').removeClass('notempty');
390            }
391        });
392
393        $('.form-control').focusout(function () {
394            if ($(this).val() != "") {
395                $(this).parent('.xpMaterial').addClass('notempty');
396            } else {
397                $(this).parent('.xpMaterial').removeClass('notempty');
398            }
399        });
400        $('.form-control').focusin(function () {
401            $(this).parent('.xpMaterial').addClass('notempty');
402        });
403
404        $('.form-control').on('change keyup', function () {
405            if ($(this).val() != "") {
406                $(this).parent('.xpMaterial').addClass('notempty');
407            } else {
408                $(this).parent('.xpMaterial').removeClass('notempty');
409            }
410        });
411        $('select.chosen-select').change(function () {
412            var materialVal = $(this).chosen({disable_search_threshold: 5}).val();
413            if (materialVal != '' || materialVal.length > 0) {
414                $(this).parent('.xpMaterial').addClass('notempty');
415            } else {
416                $(this).parent('.xpMaterial').removeClass('notempty');
417            }
418        }).trigger('change');
419    }
420
421});
422$(window).on("load",function () {
423    $('[data-class-onload]').each(function (i, v) {
424        var p = $(this).attr('data-class-onload').split('|');
425        for (var i = 0; i < p.length; i++) {
426            $(this).addClass(p[i]);
427        }
428    });
429    //lazy loading
430    // $("img").unveil(0, function () {
431    //     $(this).on("load",function () {
432    //         this.style.opacity = 1;
433    //     });
434    // });
435    // $("img").trigger("unveil");
436});
437// End XenoPsi Common JS functions
438var callAjax = function (config) {
439    var xhr;
440    var attempt = 0;
441    var maxAttempts = config.maxAttempts || 5;
442
443    function processCall() {
444        if (attempt++ < maxAttempts) {
445            xhr = $.ajax({
446                type: config.type || 'GET',
447                url: config.url,
448                data: config.data,
449                success: function (responseData, textStatus, jqXHR) {
450                    config.success(responseData);
451                },
452                error: function (jqXHR, textStatus, errorThrown) {
453                    setTimeout(processCall, config.retryAfter || 1000);
454                }
455            });
456        }
457        else {
458            if (xhr && xhr.readystate != 4) {
459                xhr.abort();
460            }
461            xhr = null;
462            config.error();
463        }
464    }
465
466    processCall();
467    return {
468        abort: function () {
469            attempt = maxAttempts; //no more attempts after abort
470            if (xhr && xhr.readystate != 4) {
471                xhr.abort();
472            }
473        }
474    }
475};
476// Avoid `console` errors in browsers that lack a console.
477!function () {
478    for (var o, e = function () {
479    }, n = ["assert", "clear", "count", "debug", "dir", "dirxml", "error", "exception", "group", "groupCollapsed", "groupEnd", "info", "log", "markTimeline", "profile", "profileEnd", "table", "time", "timeEnd", "timeStamp", "trace", "warn"], r = n.length, i = window.console = window.console || {}; r--;)o = n[r], i[o] || (i[o] = e)
480}();
481//Validate Plugin
482var Validate = {};
483Validate.isset = function (t) {
484    return !!t
485}, Validate.empty = function (t) {
486    return 0 == t.replace(/\s+/g, "").length
487}, Validate.email = function (t) {
488    return /[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/i.test(t)
489}, Validate.date = function (t, e) {
490    var a = Date.parse(t);
491    if (isFinite(a))return !0;
492    if (e) {
493        var n = new Date;
494        return t = t.replace(/\d{4}/, n.getFullYear()), a = Date.parse(t), isFinite(a)
495    }
496    return !1
497}, Validate.zip = function (t, e) {
498    var a = e ? /^\d{5}-\d{4}$/ : /^\d{5}$/;
499    return a.test(t)
500}, Validate.phone = function (t) {
501    return /^\(?([0-9]{3})\)?[-.\s]?([0-9]{3})[-.\s]?([0-9]{4})$/.test(t)
502}, Validate.creditCard = function (t) {
503    var e = /^[\d-\s]$/.test(t);
504    return e ? Validate.luhn(t) : !1
505}, Validate.luhn = function (t) {
506    for (var e = t.replace(/\d+/g, ""), a = e.split(""), n = a.length, r = n % 2, i = 0, u = 0; n > u; u++) {
507        var d = a[u];
508        u % 2 == r && (d *= 2, d > 9 && (d -= 9)), i += d
509    }
510    return i % 10 == 0
511}, Validate.integer = function (t) {
512    return /^\-?\d+$/.test(t)
513}, Validate.numeric = function (t) {
514    return /^-?(?:\d+|\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test(t)
515}, Validate.currency = function (t) {
516    return /^\$-?(?:\d+|\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test(t)
517}, Validate.ip = function (t) {
518    return /^((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){3}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})$/.test(t)
519}, Validate.ssn = function (t) {
520    return /^\d{3}-\d{2}-\d{4}$/.test(t)
521}, Validate.tin = function (t) {
522    return /^\d{2}-\d{7}$/.test(t)
523}, Validate.base64 = function (t) {
524    return /[^a-zA-Z0-9\/\+=]/i.test(t)
525}, Validate.alpha = function (t) {
526    return /^[a-z]$/i.test(t)
527}, Validate.alphaNumeric = function (t) {
528    return /^[a-z0-9]$/i.test(t)
529}, Validate.lowercase = function (t) {
530    return t.toLowerCase() == t
531}, Validate.uppercase = function (t) {
532    return t.toUpperCase() == t
533}, Validate.min = function (t, e) {
534    return t.length >= e
535}, Validate.max = function (t, e) {
536    return t.length <= e
537}, Validate.between = function (t, e, a) {
538    return t.length >= e && t.length <= a
539}, Validate.username = function (t) {
540    return /^[0-9a-zA-Z]+$/.test(t) && t.length >= 3
541},Validate.age = function (t) {
542    return true;
543},Validate.serialno = function (t, e) {
544    var a = e ? /^\d{7}-\d{7}$/ : /^\d{7}$/;
545    return a.test(t)
546};

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.