PageSourceSearch

https://abrappe.com.br/js/functions.js

js abrappe.com.br collected 2026-10-05 02:08:02 UTC 98,098 bytes, 2,313 lines download raw bytes

1/*! jRespond.js v 0.10 | Author: Jeremy Fields [[email protected]], 2013 | License: MIT */ ! function(a, b, c) { "object" == typeof module && module && "object" == typeof module.exports ? module.exports = c : (a[b] = c, "function" == typeof define && define.amd && define(b, [], function() { return c })) }(this, "jRespond", function(a, b, c) { "use strict"; return function(a) { var b = [],
2            d = [],
3            e = a,
4            f = "",
5            g = "",
6            i = 0,
7            j = 100,
8            k = 500,
9            l = k,
10            m = function() { var a = 0; return a = "number" != typeof window.innerWidth ? 0 !== document.documentElement.clientWidth ? document.documentElement.clientWidth : document.body.clientWidth : window.innerWidth },
11            n = function(a) { if (a.length === c) o(a);
12                else
13                    for (var b = 0; b < a.length; b++) o(a[b]) },
14            o = function(a) { var e = a.breakpoint,
15                    h = a.enter || c;
16                b.push(a), d.push(!1), r(e) && (h !== c && h.call(null, { entering: f, exiting: g }), d[b.length - 1] = !0) },
17            p = function() { for (var a = [], e = [], h = 0; h < b.length; h++) { var i = b[h].breakpoint,
18                        j = b[h].enter || c,
19                        k = b[h].exit || c; "*" === i ? (j !== c && a.push(j), k !== c && e.push(k)) : r(i) ? (j === c || d[h] || a.push(j), d[h] = !0) : (k !== c && d[h] && e.push(k), d[h] = !1) } for (var l = { entering: f, exiting: g }, m = 0; m < e.length; m++) e[m].call(null, l); for (var n = 0; n < a.length; n++) a[n].call(null, l) },
20            q = function(a) { for (var b = !1, c = 0; c < e.length; c++)
21                    if (a >= e[c].enter && a <= e[c].exit) { b = !0; break }
22                b && f !== e[c].label ? (g = f, f = e[c].label, p()) : b || "" === f || (f = "", p()) },
23            r = function(a) { if ("object" == typeof a) { if (a.join().indexOf(f) >= 0) return !0 } else { if ("*" === a) return !0; if ("string" == typeof a && f === a) return !0 } },
24            s = function() { var a = m();
25                a !== i ? (l = j, q(a)) : l = k, i = a, setTimeout(s, l) }; return s(), { addFunc: function(a) { n(a) }, getBreakpoint: function() { return f } } } }(this, this.document));
26
27var $ = jQuery.noConflict();
28
29// Scrolled
30$.fn.scrollEnd = function(callback, timeout) {
31    $(this).scroll(function() {
32        let container = $(this);
33        if (container.data('scrollTimeout')) {
34            clearTimeout(container.data('scrollTimeout'));
35        }
36        container.data('scrollTimeout', setTimeout(callback, timeout));
37    });
38};
39
40(function() {
41    let lastTime = 0;
42    let vendors = ['ms', 'moz', 'webkit', 'o'];
43    for (let x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
44        window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'];
45        window.cancelAnimationFrame = window[vendors[x] + 'CancelAnimationFrame'] ||
46            window[vendors[x] + 'CancelRequestAnimationFrame'];
47    }
48
49    if (!window.requestAnimationFrame)
50        window.requestAnimationFrame = function(callback, element) {
51            let currTime = new Date().getTime();
52            let timeToCall = Math.max(0, 16 - (currTime - lastTime));
53            let id = window.setTimeout(function() { callback(currTime + timeToCall); },
54                timeToCall);
55            lastTime = currTime + timeToCall;
56            return id;
57        };
58
59    if (!window.cancelAnimationFrame)
60        window.cancelAnimationFrame = function(id) {
61            clearTimeout(id);
62        };
63}());
64
65
66
67function debounce(func, wait, immediate) {
68    let timeout, args, context, timestamp, result;
69    return function() {
70        context = this;
71        args = arguments;
72        timestamp = new Date();
73        let later = function() {
74            let last = (new Date()) - timestamp;
75            if (last < wait) {
76                timeout = setTimeout(later, wait - last);
77            } else {
78                timeout = null;
79                if (!immediate) result = func.apply(context, args
79);
80            }
81        };
82        let callNow = immediate && !timeout;
83        if (!timeout) {
84            timeout = setTimeout(later, wait);
85        }
86        if (callNow) result = func.apply(context, args);
87        return result;
88    };
89}
90
91
92function onScrollSliderParallax() {
93    SEMICOLON.slider.sliderParallax();
94    SEMICOLON.slider.sliderElementsFade();
95}
96
97
98var SEMICOLON = SEMICOLON || {};
99
100(function($) {
101
102    // USE STRICT
103    "use strict";
104
105    SEMICOLON.initialize = {
106
107        init: function() {
108
109            SEMICOLON.initialize.defaults();
110            SEMICOLON.initialize.pageTransition();
111            SEMICOLON.initialize.goToTop();
112            SEMICOLON.initialize.lazyLoad();
113            SEMICOLON.initialize.lightbox();
114            SEMICOLON.initialize.resizeVideos();
115            SEMICOLON.initialize.dataResponsiveClasses();
116            SEMICOLON.initialize.dataResponsiveHeights();
117            SEMICOLON.initialize.stickFooterOnSmall();
118
119        },
120
121        execFunc: function(functionName, context) {
122            let args = Array.prototype.slice.call(arguments, 2),
123                namespaces = functionName.split("."),
124                func = namespaces.pop();
125
126            for (let i = 0; i < namespaces.length; i++) {
127                context = context[namespaces[i]];
128            }
129
130            if (typeof context[func] !== 'undefined') {
131                return context[func].apply(context, args);
132            } else {
133                console.log(functionName + ' Function does not exist');
134            }
135        },
136
137        execPlugin: function(element, settings, available) {
138            window.scwEvents = window.scwEvents || {};
139
140            let pluginActive = false,
141                pluginLinkingInterval;
142
143            if (available) {
144
145                if (settings.trigger && !scwEvents[settings.trigger]) {
146                    $window.trigger(settings.trigger);
147                    scwEvents[settings.trigger] = true;
148                }
149
150                if (settings.execfn) {
151                    SEMICOLON.initialize.execFunc(settings.execfn, window, element);
152                }
153
154                if (settings.class) {
155                    $body.addClass(settings.class);
156                }
157
158            } else {
159                if (settings.trigger && !scwEvents[settings.trigger]) {
160                    pluginLinkingInterval = setInterval(function plugFn() {
161                        let pluginFnExec = Function('return ' + settings.pluginfn)();
162                        if (pluginFnExec) {
163                            $window.trigger(settings.trigger);
164                            scwEvents[settings.trigger] = true;
165                            clearInterval(pluginLinkingInterval);
166                        }
167                        return plugFn;
168                    }(), 1000);
169                } else {
170                    pluginActive = true;
171                }
172
173                if (settings.execfn) {
174                    if (settings.trigger && !pluginActive) {
175                        $window.on(settings.trigger, function() {
176                            SEMICOLON.initialize.execFunc(settings.execfn, window, element);
177                        });
178                    } else {
179                        SEMICOLON.initialize.execFunc(settings.execfn, window, element);
180                    }
181                }
182
183                if (settings.class) {
184                    $body.addClass(settings.class);
185                }
186            }
187        },
188
189        jsLinking: function(element, settings) {
190            if (element.length < 1) {
191                return false;
192            }
193
194            if (settings.hiddendisable && (element.filter(':hidden').length == element.length)) {
195                return false;
196            }
197
198            let pluginFnExec = Function('return ' + settings.pluginfn)(),
199                jsPath = 'js/',
200                file,
201                disableAJAX = false;
202
203            if (typeof scwJsPath !== 'undefined') {
204                jsPath = scwJsPath + '/';
205            }
206
207            if (typeof scwDisableJsAJAX !== 'undefined' && scwDisableJsAJAX === true) {
208                disableAJAX = true;
209            }
210
211            if (/^(f|ht)tps?:\/\//i.test(window.decodeURIComponent(settings.file))) {
212                file = settings.file;
213            } else {
214                file = jsPath + settings.file;
215            }
216
217            if (pluginFnExec) {
218                SEMICOLON.initialize.execPlugin(element, settings, true);
219            } else {
220                if (!disableAJAX) {
221                    $.ajax({
222                        url: file,
223                        dataType: "script",
224                        cache: true,
225                        crossDomain: true,
226                        timeout: 5000,
227                    }).done(function() {
228                        SEMICOLON.initialize.execPlugin(element, settings, false);
229                    }).fail(function() {
230                        console.log(settings.error);
231                    });
232                } else {
233                    console.log(settings.error);
234                }
235            }
236        },
237
238        functions: function(settings) {
239            let element, parent, item;
240
241            if (typeof settings.element === 'object' && settings.element !== null) {
242                if (settings.element.parent !== 'undefined') {
243                    parent = settings.element.parent;
244                }
245                if (settings.element.el !== 'undefined') {
246                    settings.element = settings.element.el;
247                }
248            }
249
250            if (settings.element) {
251                item = settings.element;
252            } else {
253                item = settings.default;
254            }
255
256            if (parent === 'object') {
257                element = parent.find(item);
258            } else {
259                element = $(item);
260            }
261
262            this.jsLinking(element, settings);
263        },
264
265        defaults: function() {
266            let easingJs = {
267                default: 'body',
268                file: 'plugins.easing.js',
269                error: 'plugins.easing.js: Plugin could not be loaded',
270                pluginfn: 'typeof jQuery.easing["easeOutQuad"] !== "undefined"',
271                trigger: 'pluginEasingReady',
272                class: 'has-plugin-easing'
273            };
274
275            let bootstrapJs = {
276                default: 'body',
277                file: 'plugins.bootstrap.js',
278                error: 'plugins.bootstrap.js: Plugin could not be loaded',
279                pluginfn: 'typeof bootstrap !== "undefined"',
280                trigger: 'pluginBootstrapReady',
281                class: 'has-plugin-bootstrap'
282            };
283
284            let jRes = jRespond([{
285                label: 'smallest',
286                enter: 0,
287                exit: 575
288            }, {
289                label: 'handheld',
290                enter: 576,
291                exit: 767
292            }, {
293                label: 'tablet',
294                enter: 768,
295                exit: 991
296            }, {
297                label: 'laptop',
298                enter: 992,
299                exit: 1199
300            }, {
301                label: 'desktop',
302                enter: 1200,
303                exit: 10000
304            }]);
305
306            jRes.addFunc([{
307                breakpoint: 'desktop',
308                enter: function() { $body.addClass('device-xl'); },
309                exit: function() { $body.removeClass('device-xl'); }
310            }, {
311                breakpoint: 'laptop',
312                enter: function() { $body.addClass('device-lg'); },
313                exit: function() { $body.removeClass('device-lg'); }
314            }, {
315                breakpoint: 'tablet',
316                enter: function() { $body.addClass('device-md'); },
317                exit: function() { $body.removeClass('device-md'); }
318            }, {
319                breakpoint: 'handheld',
320                enter: function() { $body.addClass('device-sm'); },
321                exit: function() { $body.removeClass('device-sm'); }
322            }, {
323                breakpoint: 'smallest',
324                enter: function() { $body.addClass('device-xs'); },
325                exit: function() { $body.removeClass('device-xs'); }
326            }]);
327
328            SEMICOLON.initialize.functions(easingJs);
329            SEMICOLON.initialize.functions(bootstrapJs);
330
331            if (!'IntersectionObserver' in window) {
332                let intersectObserve = {
333                    default: 'body',
334                    file: 'intersection-observer.js',
335                    error: 'intersection-observer.js: Plugin could not be loaded',
336                    pluginfn: 'typeof window.IntersectionObserver !== "undefined"',
337                    trigger: 'intersectObservePolyfill',
338                    class: 'has-polyfill-intersection-observer'
339                };
340
341                SEMICOLON.initialize.functions(intersectObserve);
342            }
343        },
344
345        goToTop: function() {
346            let elementScrollSpeed = $goToTopEl.attr('data-speed'),
347                elementScrollEasing = $goToTopEl.attr('data-easing');
348
349            if (!elementScrollSpeed) { elementScrollSpeed = 700; }
350            if (!elementScrollEasing) { elementScrollEasing = 'easeOutQuad'; }
351
352            $goToTopEl.off('click').on('click', function() {
353                $('body,html').stop(true).animate({
354                    'scrollTop': 0
355                }, Number(elementScrollSpeed), elementScrollEasing);
356                return false;
357            });
358        },
359
360        goToTopScroll: function() {
361            let elementMobile = $goToTopEl.attr('data-mobile'),
362                elementOffset = $goToTopEl.attr('data-offset');
363
364            if (!elementOffset) { elementOffset = 450; }
365
366            if (elementMobile != 'true' && ($body.hasClass('device-sm') || $body.hasClass('device-xs'))) { return true; }
367
368            if ($window.scrollTop() > Number(elementOffset)) {
369                $goToTopEl.fadeIn();
370                $body.addClass('gototop-active');
371            } else {
372                $goToTopEl.fadeOut();
373                $body.removeClass('gototop-active');
374            }
375        },
376
377        lightbox: function(element) {
378            let settings = {
379                element: element,
380                default: '[data-lightbox]',
381                file: 'plugins.lightbox.js',
382                error: 'plugins.lightbox.js: Plugin could not be loaded',
383                execfn: 'SEMICOLON_lightboxInit',
384                pluginfn: '$().magnificPopup',
385                trigger: 'pluginLightboxReady',
386                class: 'has-plugin-lightbox'
387            };
388
389            SEMICOLON.initialize.functions(settings);
390        },
391
392        modal: function(element) {
393            let settings = {
394                element: element,
395                default: '.modal-on-load',
396                file: 'plugins.lightbox.js',
397                error: 'plugins.lightbox.js: Plugin could not be loaded',
398                execfn: 'SEMICOLON_modalInit',
399                pluginfn: '$().magnificPopup',
400                trigger: 'pluginLightboxReady',
401                class: 'has-plugin-lightbox'
402            };
403
404            SEMICOLON.initialize.functions(settings);
405        },
406
407        resizeVideos: function() {
408            let settings = {
409                default: 'iframe[src*="youtube"],iframe[src*="vimeo"],iframe[src*="dailymotion"],iframe[src*="maps.google.com"],iframe[src*="google.com/maps"]',
410                file: 'plugins.fitvids.js',
411                error: 'plugins.fitvids.js: Plugin could not be loaded',
412                execfn: 'SEMICOLON_resizeVideosInit',
413                pluginfn: '$().fitVids',
414                trigger: 'pluginfitVidsReady',
415                class: 'has-plugin-fitvids'
416            };
417
418            SEMICOLON.initialize.functions(settings);
419        },
420
421        pageTransition: function() {
422            let settings = {
423                default: '.page-transition',
424                file: 'plugins.pagetransition.js',
425                error: 'plugins.pagetransition.js: Plugin could not be loaded',
426                execfn: 'SEMICOLON_pageTransitionInit',
427                pluginfn: '$().animsition',
428                trigger: 'pluginPageTransitionReady',
429                class: 'has-plugin-animsition'
430            };
431
432            SEMICOLON.initialize.functions(settings);
433        },
434
435        lazyLoad: function(element) {
436            let settings = {
437                element: element,
438                default: '.lazy',
439                file: 'plugins.lazyload.js',
440                error: 'plugins.lazyload.js: Plugin could not be loaded',
441                execfn: 'SEMICOLON_lazyLoadInit',
442                pluginfn: 'typeof LazyLoad !== "undefined"',
443                trigger: 'pluginlazyLoadReady',
444                class: 'has-plugin-lazyload'
445            };
446
447            SEMICOLON.initialize.functions(settings);
448        },
449
450        topScrollOffset: function() {
451            let topOffsetScroll = 0;
452
453            if (($body.hasClass('device-xl') || $body.hasClass('device-lg')) && !SEMICOLON.isMobile.any()) {
454                if ($header.hasClass('sticky-header')) {
455                    if ($pagemenu.hasClass('dots-menu')) { topOffsetScroll = 100; } else { topOffsetScroll = 144; }
456                } else {
457                    if ($pagemenu.hasClass('dots-menu')) { topOffsetScroll = 140; } else { topOffsetScroll = 184; }
458                }
459
460                if (!$pagemenu.length) {
461                    if ($header.hasClass('sticky-header')) { topOffsetScroll = 100; } else { topOffsetScroll = 140; }
462                }
463            } else {
464                topOffsetScroll = 40;
465            }
466
467            return topOffsetScroll;
468        },
469
470        dataResponsiveClasses: function() {
471            let settings = {
472                default: '[data-class-xl],[data-class-lg],[data-class-md],[data-class-sm],[data-class-xs]',
473                file: 'plugins.dataclasses.js',
474                error: 'plugins.dataclasses.js: Plugin could not be loaded',
475                execfn: 'SEMICOLON_dataClassesInit',
476                pluginfn: 'typeof scwDataClassesPlugin !== "undefined"',
477                trigger: 'pluginDataClassesReady',
478                class: 'has-plugin-dataclasses'
479            };
480
481            SEMICOLON.initialize.functions(settings);
482        },
483
484        dataResponsiveHeights: function() {
485            let settings = {
486                default: '[data-height-xl],[data-height-lg],[data-height-md],[data-height-sm],[data-height-xs]',
487                file: 'plugins.dataheights.js',
488                error: 'plugins.dataheights.js: Plugin could not be loaded',
489                execfn: 'SEMICOLON_dataHeightsInit',
490                pluginfn: 'typeof scwDataHeightsPlugin !== "undefined"',
491                trigger: 'pluginDataHeightsReady',
492                class: 'has-plugin-dataheights'
493            };
494
495            SEMICOLON.initialize.functions(settings);
496        },
497
498        stickFooterOnSmall: function() {
499            $footer.css({ 'margin-top': '' });
500            let windowH = $window.height(),
501                wrapperH = $wrapper.height();
502
503            if (!$body.hasClass('sticky-footer') && $footer.length > 0 && $wrapper.has('#footer')) {
504                if (windowH > wrapperH) {
505                    $footer.css({ 'margin-top': (windowH - wrapperH) });
506                }
507            }
508        }
509
510    };
511
512    SEMICOLON.header = {
513
514        init: function() {
515
516            SEMICOLON.header.initialize();
517            SEMICOLON.header.menufunctions();
518            SEMICOLON.header.fullWidthMenu();
519            SEMICOLON.header.stickyMenu();
520            SEMICOLON.header.stickyPageMenu();
521            SEMICOLON.header.sideHeader();
522            SEMICOLON.header.sidePanel();
523            SEMICOLON.header.onePageScroll();
524            SEMICOLON.header.logo();
525            SEMICOLON.header.topsearch();
526            SEMICOLON.header.topcart();
527            SEMICOLON.header.miscFunctions();
528
529        },
530
531        initialize: function() {
532
533            if ($headerWrap.length > 0) {
534                if ($('.header-wrap-clone').length < 1) {
535                    $headerWrap.after('<div class="header-wrap-clone"></div>');
536                }
537                $headerWrapClone = $('.header-wrap-clone');
538            }
539
540            if ($pagemenu.length > 0) {
541                $pagemenu.find('#page-menu-wrap').after('<div class="page-menu-wrap-clone"></div>');
542                $pageMenuClone = $('.page-menu-wrap-clone');
543            }
544
545            let menuItemSubs = $('.menu-item:has(.sub-menu-container)');
546
547            menuItemSubs.addClass('sub-menu'); // , .primary-menu.with-arrows > .menu-container > .menu-item:has(.sub-menu-container) > .menu-link > div:not(:has(.icon-angle-down))
548            $('.top-links-item:has(.top-links-sub-menu,.top-links-section) > a:not(:has(.icon-angle-down)), .menu-item:not(.mega-menu-title):has(.sub-menu-container) > .menu-link > div:not(:has(.icon-angle-down)), .page-menu-item:has(.page-menu-sub-menu) > a > div:not(:has(.icon-angle-down))').append('<i class="icon-angle-down"></i>');
549            $('.menu-item:not(.mega-menu-title):has(.sub-menu-container):not(:has(.sub-menu-trigger))').append('<button class="sub-menu-trigger icon-chevron-right"></button>');
550
551            SEMICOLON.header.menuInvert();
552
553        },
554
555        menuInvert: function(subMenuEl) {
556
557            let submenus = subMenuEl || $('.mega-menu-content, .sub-menu-container, .top-links-section');
558
559            submenus.children().css({ 'display': 'block' });
560            submenus.css({ 'display': 'block' });
561            submenus.each(function(index, element) {
562                let $menuChildElement = $(element),
563                    menuChildOffset = $menuChildElement.offset(),
564                    menuChildWidth = $menuChildElement.width();
565
566                if (windowWidth - (menuChildWidth + menuChildOffset.left) < 0) {
567                    $menuChildElement.addClass('menu-pos-invert');
568                }
569            });
570            submenus.children().css({ 'display': '' });
571            submenus.css({ 'display': '' });
572
573        },
574
575        includeOffset: function() {
576            if ($headerInc.length < 1) {
577                return true;
578            }
579
580            let headerInc = $header.outerHeight();
581            if ($header.hasClass('floating-header') || $headerInc.hasClass('include-topbar')) {
582                headerInc = headerInc + $header.offset().top;
583            }
584            $headerInc.css({ 'margin-top': -headerInc });
585            SEMICOLON.slider.sliderParallax();
586        },
587
588        menufunctions: function() {
589
590            let menuItemSubs = $('.menu-item:has(.sub-menu-container)'),
591                menuItemSubsLinks = menuItemSubs.children('.menu-link'),
592                submenusT = '.mega-menu-content, .sub-menu-container',
593                submenus = $(submenusT),
594                menuItemT = '.menu-item',
595                subMenuT = '.sub-menu',
596                menuSpeed = primaryMenu.attr('data-trigger-speed') || 200,
597                subMenuTriggerT = '.sub-menu-trigger',
598                menuItemTrigger;
599
600            menuSpeed = Number(menuSpeed);
601
602            menuItemTrigger = menuItemSubs.children(subMenuTriggerT);
603
604            if ($body.hasClass('device-xl') || $body.hasClass('device-lg')) {
605                setTimeout(function() {
606                    if ($headerWrapClone.length > 0) {
607                        $headerWrapClone.css({ 'height': $headerWrap.outerHeight() });
608                    }
609                    SEMICOLON.header.includeOffset();
610                }, 1000);
611                primaryMenu.find(submenus).css({ 'display': '' });
612            } else {
613                $headerInc.css({ 'margin-top': '' });
614            }
615
616            if (($body.hasClass('overlay-menu') && primaryMenu.hasClass('on-click')) && ($body.hasClass('device-xl') || $body.hasClass('device-lg'))) {
617                menuItemSubsLinks.off('click').on('click', function(e) {
618                    let triggerEl = $(this);
619                    triggerEl.parents(subMenuT).siblings().find(submenus).stop(true, true).slideUp(menuSpeed);
620                    triggerEl.parent(menuItemT).children(submenusT).stop(true, true).slideToggle(menuSpeed);
621                    e.preventDefault();
622                });
623            } else if (($body.hasClass('side-header') && primaryMenu.hasClass('on-click')) || ($body.hasClass('device-md') || $body.hasClass('device-sm') || $body.hasClass('device-xs'))) {
624                menuItemTrigger.removeClass('icon-rotate-90');
625                $(menuItemT).find(submenus).filter(':not(:animated)').stop(true, true).slideUp(menuSpeed, function() {
626                    $body.toggleClass("primary-menu-open", false);
627                });
628
629                menuItemTrigger = menuItemTrigger.add(menuItemSubsLinks.filter('[href^="#"]'));
630
631                menuItemTrigger.off('click').on('click', function(e) {
632                    let triggerEl = $(this);
633                    triggerEl.parents(subMenuT).siblings().find(subMenuTriggerT).removeClass('icon-rotate-90');
634                    triggerEl.parents(subMenuT).siblings().find(submenus).filter(':not(:animated)').stop(true, true).slideUp(menuSpeed);
635                    triggerEl.parent(menuItemT).children(submenusT).filter(':not(:animated)').stop(true, true).slideToggle(menuSpeed);
636
637                    let subMenuTriggerEl = triggerEl.parent(menuItemT).children(subMenuTriggerT);
638
639                    if (!subMenuTriggerEl.hasClass('icon-rotate-90')) {
640                        subMenuTriggerEl.addClass('icon-rotate-90');
641                    } else {
642                        subMenuTriggerEl.removeClass('icon-rotate-90');
643                    }
644
645                    e.preventDefault();
646                });
647            } else if (($body.hasClass('overlay-menu') || $body.hasClass('side-header')) && ($body.hasClass('device-xl') || $body.hasClass('device-lg'))) {
648                primaryMenu.find(submenus).stop(true, true).slideUp(menuSpeed);
649                $(menuItemT).hover(function(e) {
650                    $(this).children(submenusT).stop(true, true).slideDown(menuSpeed);
651                }, function() {
652                    $(this).children(submenusT).stop(true, true).slideUp(menuSpeed);
653                });
654            } else {
655                if (primaryMenu.hasClass('on-click')) {
656                    menuItemSubsLinks.off('click').on('click', function(e) {
657                        let triggerEl = $(this);
658                        triggerEl.parents(subMenuT).siblings().find(submenus).removeClass('d-block');
659                        triggerEl.parent(menuItemT).children(submenusT).toggleClass('d-block');
660                        triggerEl.parent(menuItemT).siblings().removeClass('current');
661                        triggerEl.parent(menuItemT).toggleClass('current');
662                        e.preventDefault();
663                    });
664                }
665            }
666
667            if ($('.top-links').hasClass('on-click') || ($body.hasClass('device-md') || $body.hasClass('device-sm') || $body.hasClass('device-xs'))) {
668                $('.top-links-item:has(.top-links-sub-menu,.top-links-section) > a').on('click', function(e) {
669                    $(this).parents('li').siblings().find('.top-links-sub-menu,.top-links-section').removeClass('d-block');
670                    $(this).parent('li').children('.top-links-sub-menu,.top-links-section').toggleClass('d-block');
671                    e.preventDefault();
672                });
673            }
674
675            SEMICOLON.header.menuInvert($('.top-links-section'));
676
677            $('#primary-menu-trigger').off('click').on('click', function() {
678                if ($body.hasClass('device-md') || $body.hasClass('device-sm') || $body.hasClass('device-xs')) {
679                    if (primaryMenu.find('.mobile-primary-menu').length > 0) {
680                        $('.primary-menu:not(.mobile-menu-off-canvas) .mobile-primary-menu').stop(true, true).slideToggle(menuSpeed);
681                        $('.primary-menu.mobile-menu-off-canvas .mobile-primary-menu').toggleClass('d-block');
682                    } else {
683                        $('.primary-menu:not(.mobile-menu-off-canvas) .menu-container').stop(true, true).slideToggle(menuSpeed);
684                        $('.primary-menu.mobile-menu-off-canvas .menu-container').toggleClass('d-block');
685                    }
686                }
687                $body.toggleClass("primary-menu-open");
688                return false;
689            });
690
691            $('.menu-container:not(.mobile-primary-menu)').css({ 'display': '' });
692            if ($body.hasClass('device-xl') || $body.hasClass('device-lg')) {
693                primaryMenu.find('.mobile-primary-menu').removeClass('d-block');
694            }
695
696        },
697
698        fullWidthMenu: function() {
699
700            if ($body.hasClass('device-md') || $body.hasClass('device-sm') || $body.hasClass('device-xs')) {
701                $('.mega-menu-content, .top-search-form').css({ 'width': '' });
702                return true;
703            }
704
705            let headerWidth = $('.mega-menu:not(.mega-menu-full):not(.mega-menu-small) .mega-menu-content').parents('.header-row').width();
706
707            if ($header.find('.container-fullwidth').length > 0) {
708                $('.mega-menu:not(.mega-menu-full):not(.mega-menu-small) .mega-menu-content').css({ 'width': headerWidth });
709            }
710
711            if ($body.hasClass('stretched')) {
712                if ($header.hasClass('floating-header')) {
713                    $('.mega-menu:not(.mega-menu-full):not(.mega-menu-small) .mega-menu-content, .top-search-form').css({ 'width': headerWidth + 80 });
714                } else {
715                    $('.mega-menu:not(.mega-menu-full):not(.mega-menu-small) .mega-menu-content, .top-search-form').css({ 'width': headerWidth });
716                }
717            } else {
718                if ($header.hasClass('full-header')) {
719                    $('.mega-menu:not(.mega-menu-full):not(.mega-menu-small) .mega-menu-content').css({ 'width': headerWidth - 80 });
720                }
721            }
722
723            if ($header.find('.header-row').length > 1) {
724                let megaMenuContent = $('.menu-container > .mega-menu:not(.mega-menu-small) .mega-menu-content').eq(0),
725                    offset = $headerWrap.outerHeight() - megaMenuContent.parents('.header-row').outerHeight(),
726                    css = '.menu-container > .mega-menu:not(.mega-menu-small) .mega-menu-content { top: calc( 100% - ' + offset + 'px ); }',
727                    head = document.head || document.getElementsByTagName('head')[0],
728                    style = document.createElement('style');
729
730                head.appendChild(style);
731
732                style.type = 'text/css';
733                style.appendChild(document.createTextNode(css));
734            }
735        },
736
737        stickyMenu: function(headerOffset) {
738
739            windowScrT = $window.scrollTop();
740
741            if ($body.hasClass('device-xl') || $body.hasClass('device-lg')) {
742                if (windowScrT > headerOffset) {
743
744                    if (!$body.hasClass('side-header')) {
745                        $header.filter(':not(.no-sticky)').addClass('sticky-header');
746                        // if( !$headerWrap.hasClass('force-not-dark') ) { $headerWrap.removeClass('not-dark'); }
747                        SEMICOLON.header.stickyMenuClass();
748
749                        if (stickyShrink == 'true' && !$header.hasClass('no-sticky')) {
750                            if ((windowScrT - headerOffset) > Number(stickyShrinkOffset)) {
751                                $header.addClass('sticky-header-shrink');
752                                if (headerSizeCustom) {
753                                    logo.find('img').css({ 'height': Number(stickyLogoH) });
754                                    SEMICOLON.header.menuItemsSpacing(stickyMenuP);
755                                }
756                            } else {
757                                $header.removeClass('sticky-header-shrink');
758                                if (headerSizeCustom) {
759                                    logo.find('img').css({ 'height': Number(defLogoH) });
760                                    SEMICOLON.header.menuItemsSpacing(defMenuP);
761                                }
762                            }
763                        }
764                    }
765
766                } else {
767                    SEMICOLON.header.removeStickyness();
768                    if (headerSizeCustom) {
769                        logo.find('img').css({ 'height': Number(defLogoH) });
770                        SEMICOLON.header.menuItemsSpacing(defMenuP);
771                    }
772                }
773            }
774
775            if ($body.hasClass('device-xs') || $body.hasClass('device-sm') || $body.hasClass('device-md')) {
776                if (mobileSticky == 'true') {
777                    if (windowScrT > headerOffset) {
778                        $header.filter(':not(.no-sticky)').addClass('sticky-header');
779                        SEMICOLON.header.stickyMenuClass();
780                    } else {
781                        SEMICOLON.header.removeStickyness();
782                        SEMICOLON.header.responsiveMenuClass();
783                    }
784                } else {
785                    SEMICOLON.header.removeStickyness();
786                }
787                if (headerSizeCustom) {
788                    logo.find('img').css({ 'height': Number(mobileLogoH) });
789                    SEMICOLON.header.menuItemsSpacing('');
790                }
791            }
792        },
793
794        menuItemsSpacing: function(spacing) {
795
796            let item = primaryMenuMainItems;
797
798            if (!$body.hasClass('side-header') && !$body.hasClass('overlay-menu')) {
799                if (primaryMenu.hasClass('menu-spacing-margin')) {
800                    if (spacing == '') {
801                        item.css({ 'margin-top': '', 'margin-bottom': '' });
802                    } else {
803                        item.css({ 'margin-top': Number(spacing), 'margin-bottom': Number(spacing) });
804                    }
805                } else {
806                    if (spacing == '') {
807                        item.css({ 'padding-top': '', 'padding-bottom': '' });
808                    } else {
809                        item.css({ 'padding-top': Number(spacing), 'padding-bottom': Number(spacing) });
810                    }
811                }
812            }
813
814        },
815
816        stickyPageMenu: function(pageMenuOffset) {
817            if ($window.scrollTop() > pageMenuOffset) {
818                if ($body.hasClass('device-xl') || $body.hasClass('device-lg')) {
819                    $pagemenu.filter(':not(.dots-menu,.no-sticky)').addClass('sticky-page-menu');
820                    let headerHeight = $headerWrap.outerHeight();
821                    if ($header.length > 0 && !$header.hasClass('no-sticky')) {
822                        $pagemenu.filter('.sticky-page-menu:not(.dots-menu,.no-sticky)').find($pageMenuWrap).css({ 'top': headerHeight + 'px' });
823                    }
824                } else if ($body.hasClass('device-sm') || $body.hasClass('device-xs') || $body.hasClass('device-md')) {
825                    if ($pagemenu.attr('data-mobile-sticky') == 'true') {
826                        $pagemenu.filter(':not(.dots-menu,.no-sticky)').addClass('sticky-page-menu');
827                    }
828                }
829            } else {
830                $pagemenu.removeClass('sticky-page-menu');
831                $pagemenu.find($pageMenuWrap).css({ 'top': '' });
832            }
833        },
834
835        removeStickyness: function() {
836            if ($header.hasClass('sticky-header')) {
837                $header.removeClass('sticky-header');
838                $header.removeClass().addClass(oldHeaderClasses);
839                $headerWrap.removeClass().addClass(oldHeaderWrapClasses);
840                if (!$headerWrap.hasClass('force-not-dark')) { $headerWrap.removeClass('not-dark'); }
841                SEMICOLON.slider.swiperSliderMenu();
842                SEMICOLON.slider.revolutionSliderMenu();
843                if ($headerWrapClone.length > 0 && $headerWrap.outerHeight() > $headerWrapClone.outerHeight()) {
844                    $headerWrapClone.css({ 'height': $headerWrap.outerHeight() });
845                }
846            }
847            if (($body.hasClass('device-sm') || $body.hasClass('device-xs') || $body.hasClass('device-md')) && (typeof responsiveMenuClasses === 'undefined')) {
848                $header.removeClass().addClass(oldHeaderClasses);
849                $headerWrap.removeClass().addClass(oldHeaderWrapClasses);
850                if (!$headerWrap.hasClass('force-not-dark')) { $headerWrap.removeClass('not-dark'); }
851            }
852        },
853
854        sideHeader: function() {
855            $("#header-trigger").off('click').on('click', function() {
856                $('body.open-header').toggleClass("side-header-open");
857                return false;
858            });
859        },
860
861        sidePanel: function() {
862            $(".side-panel-trigger").off('click').on('click', function() {
863                $body.toggleClass("side-panel-open");
864                if ($body.hasClass('device-touch') && $body.hasClass('side-push-panel')) {
865                    $body.toggleClass("ohidden");
866                }
867                return false;
868            });
869        },
870
871        onePageScroll: function(element) {
872            let settings = {
873                element: element,
874                default: '.one-page-menu',
875                file: 'plugins.onepage.js',
876                error: 'plugins.onepage.js: Plugin could not be loaded',
877                execfn: 'SEMICOLON_onePageModule',
878                pluginfn: 'typeof scwOnePageModulePlugin !== "undefined"',
879                trigger: 'pluginOnePageModuleReady',
880                class: 'has-plugin-onepagemodule'
881            };
882
883            SEMICOLON.initialize.functions(settings);
884        },
885
886        logo: function() {
887            let sLogo = defaultLogo.find('img'),
888                rLogo = retinaLogo.find('img');
889            if (($header.hasClass('dark') || $body.hasClass('dark')) && !$headerWrap.hasClass('not-dark')) {
890                if (defaultDarkLogo && (sLogo.attr('src') != defaultDarkLogo)) {
891                    sLogo.attr('src', defaultDarkLogo);
892                }
893
894                if (retinaDarkLogo && (rLogo.attr('src') != retinaDarkLogo)) {
895                    rLogo.attr('src', retinaDarkLogo);
896                }
897            } else {
898                if (defaultLogoImg && (sLogo.attr('src') != defaultLogoImg)) {
899                    sLogo.attr('src', defaultLogoImg);
900                }
901
902                if (retinaLogoImg && (rLogo.attr('src') != retinaLogoImg)) {
903                    rLogo.attr('src', retinaLogoImg);
904                }
905            }
906
907            if ($header.hasClass('sticky-header')) {
908                if (defaultStickyLogo && (sLogo.attr('src') != defaultStickyLogo)) {
909                    sLogo.attr('src', defaultStickyLogo);
910                }
911
912                if (retinaStickyLogo && (rLogo.attr('src') != retinaStickyLogo)) {
913                    rLogo.attr('src', retinaStickyLogo);
914                }
915            }
916
917            if ($body.hasClass('device-md') || $body.hasClass('device-sm') || $body.hasClass('device-xs')) {
918                if (defaultMobileLogo && (sLogo.attr('src') != defaultMobileLogo)) {
919                    sLogo.attr('src', defaultMobileLogo);
920                }
921
922                if (retinaMobileLogo && (rLogo.attr('src') != retinaMobileLogo)) {
923                    rLogo.attr('src', retinaMobileLogo);
924                }
925            }
926        },
927
928        stickyMenuClass: function() {
929            let newClassesArray = '';
930
931            if (stickyMenuClasses) {
932                newClassesArray = stickyMenuClasses.split(/ +/);
933            }
934
935            let noOfNewClasses = newClassesArray.length;
936
937            if (noOfNewClasses > 0) {
938                let i = 0;
939                for (i = 0; i < noOfNewClasses; i++) {
940                    if (newClassesArray[i] == 'not-dark') {
941                        $header.removeClass('dark');
942                        $headerWrap.filter(':not(.not-dark)').addClass('not-dark');
943                    } else if (newClassesArray[i] == 'dark') {
944                        $headerWrap.removeClass('not-dark force-not-dark');
945                        if (!$header.hasClass(newClassesArray[i])) {
946                            $header.addClass(newClassesArray[i]);
947                        }
948                    } else if (!$header.hasClass(newClassesArray[i])) {
949                        $header.addClass(newClassesArray[i]);
950                    }
951                }
952            }
953        },
954
955        responsiveMenuClass: function() {
956            if ($body.hasClass('device-xl') || $body.hasClass('device-lg')) {
957                return true;
958            }
959
960            let newClassesArray = '';
961
962            if (responsiveMenuClasses) {
963                newClassesArray = responsiveMenuClasses.split(/ +/);
964            }
965
966            let noOfNewClasses = newClassesArray.length;
967
968            if (noOfNewClasses > 0) {
969                let i = 0;
970                for (i = 0; i < noOfNewClasses; i++) {
971                    if (newClassesArray[i] == 'not-dark') {
972                        $header.removeClass('dark');
973                        $headerWrap.addClass('not-dark');
974                    } else if (newClassesArray[i] == 'dark') {
975                        $headerWrap.removeClass('not-dark force-not-dark');
976                        if (!$header.hasClass(newClassesArray[i])) {
977                            $header.addClass(newClassesArray[i]);
978                        }
979                    } else if (!$header.hasClass(newClassesArray[i])) {
980                        $header.addClass(newClassesArray[i]);
981                    }
982                }
983            }
984
985            SEMICOLON.header.logo();
986        },
987
988        topsearch: function() {
989            $topSearch.parents('.header-row').addClass('top-search-parent');
990            let topSearchParent = $header.find('.top-search-parent');
991
992            $("#top-search-trigger").off('click').on('click', function(e) {
993                clearTimeout(topSearchTimeOut);
994                $body.toggleClass('top-search-open');
995                $topCart.toggleClass('top-cart-open', false);
996                if ($body.hasClass('device-md') || $body.hasClass('device-sm') || $body.hasClass('device-xs')) {
997                    primaryMenu.filter(':not(.mobile-menu-off-canvas)').find('.menu-container').slideUp(200);
998                    primaryMenu.filter('.mobile-menu-off-canvas').find('.menu-container').toggleClass('d-block', false);
999                }
1000                if ($body.hasClass('top-search-open')) {
1001                    topSearchParent.toggleClass('position-relative', true);
1002                } else {
1003                    topSearchTimeOut = setTimeout(function() {
1004                        topSearchParent.toggleClass('position-relative', false);
1005                    }, 750);
1006                }
1007                $body.toggleClass("primary-menu-open", false);
1008                $pagemenu.toggleClass('page-menu-open', false);
1009                if ($body.hasClass('top-search-open')) {
1010                    $topSearch.find('input').focus();
1011                }
1012                e.stopPropagation();
1013                e.preventDefault();
1014            });
1015        },
1016
1017        topcart: function() {
1018            if ($topCart.length < 1) {
1019                return true;
1020            }
1021
1022            $("#top-cart-trigger").off('click').on('click', function(e) {
1023                $pagemenu.toggleClass('page-menu-open', false);
1024                $topCart.toggleClass('top-cart-open');
1025                e.stopPropagation();
1026                e.preventDefault();
1027            });
1028        },
1029
1030        miscFunctions: function() {
1031            let topSearchParent = $header.find('.top-search-parent');
1032            $(document).on('click', function(event) {
1033                if (!$(event.target).closest('.top-search-form').length) {
1034                    $body.toggleClass('top-search-open', false);
1035                    topSearchTimeOut = setTimeout(function() {
1036                        topSearchParent.toggleClass('position-relative', false);
1037                    }, 750);
1038                }
1039                if (!$(event.target).closest('#top-cart').length) {
1040                    $topCart.toggleClass('top-cart-open', false);
1041                }
1042                if (!$(event.target).closest('#page-menu').length) { $pagemenu.toggleClass('page-menu-open', false); }
1043                if (!$(event.target).closest('#side-panel').length) { $body.toggleClass('side-panel-open', false); }
1044                if (!$(event.target).closest('.primary-menu.on-click').length) {
1045                    primaryMenu.filter('.on-click').find('.menu-container').find('.d-block').removeClass('d-block');
1046                    primaryMenu.filter('.on-click').find('.menu-item').removeClass('current');
1047                }
1048                if (primaryMenu.hasClass('mobile-menu-off-canvas')) {
1049                    if (!$(event.target).closest('.primary-menu.mobile-menu-off-canvas .menu-container').length) {
1050                        primaryMenu.filter('.mobile-menu-off-canvas').find('.menu-container').toggleClass('d-block', false);
1051                        $body.toggleClass("primary-menu-open", false);
1052                    }
1053                }
1054                if (!$(event.target).closest('.top-links.on-click').length) {
1055                    $('.top-links.on-click').find('.top-links-sub-menu,.top-links-section').removeClass('d-block');
1056                }
1057            });
1058        }
1059
1060    };
1061
1062    SEMICOLON.slider = {
1063
1064        init: function() {
1065
1066            SEMICOLON.slider.sliderDimensions();
1067            SEMICOLON.slider.sliderRun();
1068            SEMICOLON.slider.sliderParallax();
1069            SEMICOLON.slider.sliderElementsFade();
1070
1071        },
1072
1073        sliderDimensions: function() {
1074
1075            let parallaxElHeight = $sliderParallaxEl.outerHeight(),
1076                parallaxElWidth = $sliderParallaxEl.outerWidth(),
1077                slInner = $sliderParallaxEl.find('.slider-inner'),
1078                slSwiperW = $slider.find('.swiper-wrapper'),
1079                slSwiperS = $slider.find('.swiper-slide').first(),
1080                slFlexHeight = $slider.hasClass('h-auto') || $slider.hasClass('min-vh-0');
1081
1082            if ($body.hasClass('device-xl') || $body.hasClass('device-lg')) {
1083                setTimeout(function() {
1084                    slInner.height(parallaxElHeight);
1085                    if (slFlexHeight) {
1086                        parallaxElHeight = $sliderParallaxEl.find('.slider-inner').children().first().outerHeight();
1087                        $sliderParallaxEl.height(parallaxElHeight);
1088                        slInner.height(parallaxElHeight);
1089                    }
1090                }, 500);
1091
1092                if (slFlexHeight) {
1093                    let slSwiperFC = slSwiperS.children().first();
1094                    if (slSwiperFC.hasClass('container') || slSwiperFC.hasClass('container-fluid')) {
1095                        slSwiperFC = slSwiperFC.children().first();
1096                    }
1097                    if (slSwiperFC.outerHeight() > slSwiperW.outerHeight()) {
1098                        slSwiperW.css({ 'height': 'auto' });
1099                    }
1100                }
1101
1102                if ($body.hasClass('side-header')) {
1103                    slInner.width(parallaxElWidth);
1104                }
1105
1106                if (!$body.hasClass('stretched')) {
1107                    parallaxElWidth = $wrapper.outerWidth();
1108                    slInner.width(parallaxElWidth);
1109                }
1110            } else {
1111                slSwiperW.css({ 'height': '' });
1112                $sliderParallaxEl.css({ 'height': '' });
1113                slInner.css({ 'width': '', 'height': '' });
1114            }
1115        },
1116
1117        sliderRun: function(element) {
1118            let settings = {
1119                element: element,
1120                default: '.swiper_wrapper',
1121                file: 'plugins.swiper.js',
1122                error: 'plugins.swiper.js: Plugin could not be loaded',
1123                execfn: 'SEMICOLON_swiperInit',
1124                pluginfn: 'typeof Swiper !== "undefined"',
1125                trigger: 'pluginSwiperReady',
1126                class: 'has-plugin-swiper'
1127            };
1128
1129            SEMICOLON.initialize.functions(settings);
1130        },
1131
1132        sliderParallaxOffset: function() {
1133            let sliderParallaxOffsetTop = 0,
1134                headerHeight = $header.outerHeight();
1135            if ($body.hasClass('side-header') || $header.next('.include-header').length > 0) { headerHeight = 0; }
1136            if ($pageTitle.length > 0) {
1137                sliderParallaxOffsetTop = $pageTitle.outerHeight() + headerHeight;
1138            } else {
1139                sliderParallaxOffsetTop = headerHeight;
1140            }
1141
1142            if ($slider.next('#header').length > 0) { sliderParallaxOffsetTop = 0; }
1143
1144            return sliderParallaxOffsetTop;
1145        },
1146
1147        sliderParallaxSet: function(xPos, yPos, el) {
1148            if (el) {
1149                el.style.transform = "translate3d(" + xPos + ", " + yPos + "px, 0)";
1150            }
1151        },
1152
1153        sliderParallax: function() {
1154            if ($sliderParallaxEl.length < 1) {
1155                return true;
1156            }
1157
1158            let parallaxOffsetTop = SEMICOLON.slider.sliderParallaxOffset(),
1159                parallaxElHeight = $sliderParallaxEl.outerHeight(),
1160                transform, transform2;
1161
1162            xScrollPosition = window.pageXOffset;
1163            yScrollPosition = window.pageYOffset;
1164
1165            if (($body.hasClass('device-xl') || $body.hasClass('device-lg')) && !SEMICOLON.isMobile.any()) {
1166                if ((parallaxElHeight + parallaxOffsetTop + 50) > yScrollPosition) {
1167                    $sliderParallaxEl.addClass('slider-parallax-visible').removeClass('slider-parallax-invisible');
1168                    if (yScrollPosition > parallaxOffsetTop) {
1169                        if ($sliderParallaxEl.find('.slider-inner').length > 0) {
1170
1171                            transform = ((yScrollPosition - parallaxOffsetTop) * -.4);
1172                            transform2 = ((yScrollPosition - parallaxOffsetTop) * -.15);
1173
1174                            SEMICOLON.slider.sliderParallaxSet(0, transform, sliderParallaxElInner);
1175                            SEMICOLON.slider.sliderParallaxSet(0, transform2, sliderParallaxElCaption);
1176                        } else {
1177                            transform = ((yScrollPosition - parallaxOffsetTop) / 1.5);
1178                            transform2 = ((yScrollPosition - parallaxOffsetTop) / 7);
1179
1180                            SEMICOLON.slider.sliderParallaxSet(0, transform, sliderParallaxEl);
1181                            SEMICOLON.slider.sliderParallaxSet(0, transform2, sliderParallaxElCaption);
1182                        }
1183                    } else {
1184                        if ($sliderParallaxEl.find('.slider-inner').length > 0) {
1185                            SEMICOLON.slider.sliderParallaxSet(0, 0, sliderParallaxElInner);
1186                            SEMICOLON.slider.sliderParallaxSet(0, 0, sliderParallaxElCaption);
1187                        } else {
1188                            SEMICOLON.slider.sliderParallaxSet(0, 0, sliderParallaxEl);
1189                            SEMICOLON.slider.sliderParallaxSet(0, 0, sliderParallaxElCaption);
1190                        }
1191                    }
1192                } else {
1193                    $sliderParallaxEl.addClass('slider-parallax-invisible').removeClass('slider-parallax-visible');
1194                }
1195
1196                requestAnimationFrame(function() {
1197                    SEMICOLON.slider.sliderParallax();
1198                    SEMICOLON.slider.sliderElementsFade();
1199                });
1200            } else {
1201                if ($sliderParallaxEl.find('.slider-inner').length > 0) {
1202                    SEMICOLON.slider.sliderParallaxSet(0, 0, sliderParallaxElInner);
1203                    SEMICOLON.slider.sliderParallaxSet(0, 0, sliderParallaxElCaption);
1204                } else {
1205                    SEMICOLON.slider.sliderParallaxSet(0, 0, sliderParallaxEl);
1206                    SEMICOLON.slider.sliderParallaxSet(0, 0, sliderParallaxElCaption);
1207                }
1208                $sliderParallaxEl.addClass('slider-parallax-visible').removeClass('slider-parallax-invisible');
1209            }
1210        },
1211
1212        sliderElementsFade: function() {
1213            if ($sliderParallaxEl.length < 1) {
1214                return true;
1215            }
1216
1217            if (($body.hasClass('device-xl') || $body.hasClass('device-lg')) && !SEMICOLON.isMobile.any()) {
1218                let parallaxOffsetTop = SEMICOLON.slider.sliderParallaxOffset(),
1219                    parallaxElHeight = $sliderParallaxEl.outerHeight(),
1220                    tHeaderOffset;
1221
1222                if ($header.hasClass('transparent-header') || $body.hasClass('side-header')) {
1223                    tHeaderOffset = 100;
1224                } else {
1225                    tHeaderOffset = 0;
1226                }
1227                $sliderParallaxEl.filter('.slider-parallax-visible').find('.slider-arrow-left,.slider-arrow-right,.slider-caption,.slider-element-fade').css({ 'opacity': 1 - (((yScrollPosition - tHeaderOffset) * 1.85) / parallaxElHeight) });
1228            } else {
1229                $sliderParallaxEl.find('.slider-arrow-left,.slider-arrow-right,.slider-caption,.slider-element-fade').css({ 'opacity': 1 });
1230            }
1231        },
1232
1233        swiperSliderMenu: function(onWinLoad) {
1234            onWinLoad = typeof onWinLoad !== 'undefined' ? onWinLoad : false;
1235            if ($body.hasClass('device-xl') || $body.hasClass('device-lg') || ($header.hasClass('transparent-header-responsive') && !$body.hasClass('primary-menu-open'))) {
1236                let activeSlide = $slider.find('.swiper-slide.swiper-slide-active');
1237                SEMICOLON.slider.headerSchemeChanger(activeSlide, onWinLoad);
1238            }
1239        },
1240
1241        revolutionSliderMenu: function(onWinLoad) {
1242            onWinLoad = typeof onWinLoad !== 'undefined' ? onWinLoad : false;
1243            if ($body.hasClass('device-xl') || $body.hasClass('device-lg') || ($header.hasClass('transparent-header-responsive') && !$body.hasClass('primary-menu-open'))) {
1244                let activeSlide = $slider.find('.active-revslide');
1245                SEMICOLON.slider.headerSchemeChanger(activeSlide, onWinLoad);
1246            }
1247        },
1248
1249        headerSchemeChanger: function(activeSlide, onWinLoad) {
1250            if (activeSlide.length > 0) {
1251                let darkExists = false,
1252                    oldClassesArray, noOfOldClasses;
1253                if (activeSlide.hasClass('dark')) {
1254                    if (oldHeaderClasses) {
1255                        oldClassesArray = oldHeaderClasses.split(/ +/);
1256                    } else {
1257                        oldClassesArray = '';
1258                    }
1259
1260                    noOfOldClasses = oldClassesArray.length;
1261
1262                    if (noOfOldClasses > 0) {
1263                        let i = 0;
1264                        for (i = 0; i < noOfOldClasses; i++) {
1265                            if (oldClassesArray[i] == 'dark' && onWinLoad == true) {
1266                                darkExists = true;
1267                                break;
1268                            }
1269                        }
1270                    }
1271                    $('#header.transparent-header:not(.sticky-header,.semi-transparent,.floating-header)').addClass('dark');
1272                    if (!darkExists) {
1273                        $('#header.transparent-header.sticky-header,#header.transparent-header.semi-transparent.sticky-header,#header.transparent-header.floating-header.sticky-header').removeClass('dark');
1274                    }
1275                    $headerWrap.removeClass('not-dark');
1276                } else {
1277                    if ($body.hasClass('dark')) {
1278                        activeSlide.addClass('not-dark');
1279                        $('#header.transparent-header:not(.semi-transparent,.floating-header)').removeClass('dark');
1280                        $('#header.transparent-header:not(.sticky-header,.semi-transparent,.floating-header)').find('#header-wrap').addClass('not-dark');
1281                    } else {
1282                        $('#header.transparent-header:not(.semi-transparent,.floating-header)').removeClass('dark');
1283                        $headerWrap.removeClass('not-dark');
1284                    }
1285                }
1286                if ($header.hasClass('sticky-header')) {
1287                    SEMICOLON.header.stickyMenuClass();
1288                }
1289                SEMICOLON.header.logo();
1290            }
1291        }
1292
1293    };
1294
1295    SEMICOLON.portfolio = {
1296
1297        init: function() {
1298
1299            SEMICOLON.portfolio.revealDesc();
1300            SEMICOLON.portfolio.ajaxload();
1301
1302        },
1303
1304        revealDesc: function() {
1305            let $portfolioReveal = $('.portfolio-reveal');
1306
1307            if ($portfolioReveal < 1) {
1308                return true;
1309            }
1310
1311            $portfolioReveal.each(function() {
1312                let element = $(this),
1313                    elementItems = element.find('.portfolio-item');
1314                elementItems.each(function() {
1315                    let element = $(this).find('.portfolio-desc'),
1316                        elementHeight = element.outerHeight();
1317                    element.css({ 'margin-top': '-' + elementHeight + 'px' });
1318                });
1319            });
1320        },
1321
1322        ajaxload: function() {
1323            let settings = {
1324                default: '.portfolio-ajax',
1325                file: 'plugins.ajaxportfolio.js',
1326                error: 'plugins.ajaxportfolio.js: Plugin could not be loaded',
1327                execfn: 'SEMICOLON_portfolioAjaxloadInit',
1328                pluginfn: 'typeof scwAjaxPortfolioPlugin !== "undefined"',
1329                trigger: 'pluginAjaxPortfolioReady',
1330                class: 'has-plugin-ajaxportfolio'
1331            };
1332
1333            SEMICOLON.initialize.functions(settings);
1334        }
1335
1336    };
1337
1338    SEMICOLON.widget = {
1339
1340        init: function() {
1341
1342            SEMICOLON.widget.animations();
1343            SEMICOLON.widget.hoverAnimation();
1344            SEMICOLON.widget.youtubeBgVideo();
1345            SEMICOLON.widget.tabs();
1346            SEMICOLON.widget.toggles();
1347            SEMICOLON.widget.accordions();
1348            SEMICOLON.widget.counter();
1349            SEMICOLON.widget.countdown();
1350            SEMICOLON.widget.gmap();
1351            SEMICOLON.widget.roundedSkill();
1352            SEMICOLON.widget.progress();
1353            SEMICOLON.widget.twitterFeed();
1354            SEMICOLON.widget.flickrFeed();
1355            SEMICOLON.widget.instagramPhotos();
1356            SEMICOLON.widget.dribbbleShots();
1357            SEMICOLON.widget.navTree();
1358            SEMICOLON.widget.textRotator();
1359            SEMICOLON.widget.carousel();
1360            SEMICOLON.widget.linkScroll();
1361            SEMICOLON.widget.ajaxForm();
1362            SEMICOLON.widget.subscription();
1363            SEMICOLON.widget.shapeDivider();
1364            SEMICOLON.widget.stickySidebar();
1365            SEMICOLON.widget.cookieNotify();
1366            SEMICOLON.widget.cartQuantity();
1367            SEMICOLON.widget.readmore();
1368            SEMICOLON.widget.pricingSwitcher();
1369            SEMICOLON.widget.extras();
1370
1371        },
1372
1373        parallax: function(element) {
1374            let settings = {
1375                element: element,
1376                default: '.parallax,.page-title-parallax,.portfolio-parallax .portfolio-image',
1377                file: 'plugins.parallax.js',
1378                error: 'plugins.parallax.js: Plugin could not be loaded',
1379                execfn: 'SEMICOLON_parallaxInit',
1380                pluginfn: 'typeof skrollr !== "undefined"',
1381                trigger: 'pluginParallaxReady',
1382                class: 'has-plugin-parallax'
1383            };
1384
1385            SEMICOLON.initialize.functions(settings);
1386        },
1387
1388        animations: function(element) {
1389            let settings = {
1390                element: element,
1391                default: '[data-animate]',
1392                file: 'plugins.animations.js',
1393                error: 'plugins.animations.js: Plugin could not be loaded',
1394                execfn: 'SEMICOLON_animationsInit',
1395                pluginfn: 'typeof scwAnimationsPlugin !== "undefined"',
1396                trigger: 'pluginAnimationsReady',
1397                class: 'has-plugin-animations'
1398            };
1399
1400            SEMICOLON.initialize.functions(settings);
1401        },
1402
1403        hoverAnimation: function(element) {
1404            let settings = {
1405                element: element,
1406                default: '[data-hover-animate]',
1407                file: 'plugins.hoveranimation.js',
1408                error: 'plugins.hoveranimation.js: Plugin could not be loaded',
1409                execfn: 'SEMICOLON_hoverAnimationInit',
1410                pluginfn: 'typeof scwHoverAnimationPlugin !== "undefined"',
1411                trigger: 'pluginHoverAnimationReady',
1412                class: 'has-plugin-hoveranimation'
1413            };
1414
1415            SEMICOLON.initialize.functions(settings);
1416        },
1417
1418        gridInit: function(element) {
1419            let settings = {
1420                element: element,
1421                default: '.grid-container',
1422                file: 'plugins.isotope.js',
1423                error: 'plugins.isotope.js: Plugin could not be loaded',
1424                execfn: 'SEMICOLON_gridContainerInit',
1425                pluginfn: '$().isotope',
1426                trigger: 'pluginIsotopeReady',
1427                class: 'has-plugin-isotope'
1428            };
1429
1430            SEMICOLON.initialize.functions(settings);
1431        },
1432
1433        filterInit: function(element) {
1434            let settings = {
1435                element: element,
1436                default: '.grid-filter,.custom-filter',
1437                file: 'plugins.gridfilter.js',
1438                error: 'plugins.gridfilter.js: Plugin could not be loaded',
1439                execfn: 'SEMICOLON_gridFilterInit',
1440                pluginfn: '$().isotope && typeof scwGridFilterPlugin !== "undefined"',
1441                trigger: 'pluginGridFilterReady',
1442                class: 'has-plugin-isotope-filter'
1443            };
1444
1445            SEMICOLON.initialize.functions(settings);
1446        },
1447
1448        loadFlexSlider: function(element) {
1449            let settings = {
1450                element: element,
1451                default: '.fslider',
1452                file: 'plugins.flexslider.js',
1453                error: 'plugins.flexslider.js: Plugin could not be loaded',
1454                execfn: 'SEMICOLON_flexSliderInit',
1455                pluginfn: '$().flexslider',
1456                trigger: 'pluginFlexSliderReady',
1457                class: 'has-plugin-flexslider'
1458            };
1459
1460            SEMICOLON.initialize.functions(settings);
1461        },
1462
1463        html5Video: function(element) {
1464            let settings = {
1465                element: element,
1466                default: '.video-wrap:has(video)',
1467                file: 'plugins.html5video.js',
1468                error: 'plugins.html5video.js: Plugin could not be loaded',
1469                execfn: 'SEMICOLON_html5VideoInit',
1470                pluginfn: 'typeof scwHtml5VideoPlugin !== "undefined"',
1471                trigger: 'pluginHtml5VideoReady',
1472                class: 'has-plugin-html5video'
1473            };
1474
1475            SEMICOLON.initialize.functions(settings);
1476        },
1477
1478        youtubeBgVideo: function(element) {
1479            let settings = {
1480                element: element,
1481                default: '.yt-bg-player',
1482                file: 'plugins.youtube.js',
1483                error: 'plugins.youtube.js: Plugin could not be loaded',
1484                execfn: 'SEMICOLON_youtubeBgVideoInit',
1485                pluginfn: '$().YTPlayer',
1486                trigger: 'pluginYoutubeBgVideoReady',
1487                class: 'has-plugin-youtubebg'
1488            };
1489
1490            SEMICOLON.initialize.functions(settings);
1491        },
1492
1493        tabs: function(element) {
1494            let settings = {
1495                element: element,
1496                default: '.tabs,[data-plugin="tabs"]',
1497                file: 'plugins.tabs.js',
1498                error: 'plugins.tabs.js: Plugin could not be loaded',
1499                execfn: 'SEMICOLON_tabsInit',
1500                pluginfn: '$().tabs',
1501                trigger: 'pluginTabsReady',
1502                class: 'has-plugin-tabs'
1503            };
1504
1505            SEMICOLON.initialize.functions(settings);
1506        },
1507
1508        toggles: function(element) {
1509            let settings = {
1510                element: element,
1511                default: '.toggle',
1512                file: 'plugins.toggles.js',
1513                error: 'plugins.toggles.js: Plugin could not be loaded',
1514                execfn: 'SEMICOLON_togglesInit',
1515                pluginfn: 'typeof scwTogglesPlugin !== "undefined"',
1516                trigger: 'pluginTogglesReady',
1517                class: 'has-plugin-toggles'
1518            };
1519
1520            SEMICOLON.initialize.functions(settings);
1521        },
1522
1523        accordions: function(element) {
1524            let settings = {
1525                element: element,
1526                default: '.accordion',
1527                file: 'plugins.accordions.js',
1528                error: 'plugins.accordions.js: Plugin could not be loaded',
1529                execfn: 'SEMICOLON_accordionsInit',
1530                pluginfn: 'typeof scwAccordionsPlugin !== "undefined"',
1531                trigger: 'pluginAccordionsReady',
1532                class: 'has-plugin-accordions'
1533            };
1534
1535            SEMICOLON.initialize.functions(settings);
1536        },
1537
1538        counter: function(element) {
1539            let settings = {
1540                element: element,
1541                default: '.counter',
1542                file: 'plugins.counter.js',
1543                error: 'plugins.counter.js: Plugin could not be loaded',
1544                execfn: 'SEMICOLON_counterInit',
1545                pluginfn: '$().countTo',
1546                trigger: 'pluginCounterReady',
1547                class: 'has-plugin-counter'
1548            };
1549
1550            SEMICOLON.initialize.functions(settings);
1551        },
1552
1553        countdown: function(element) {
1554            let momentSettings = {
1555                element: element,
1556                default: '.countdown',
1557                file: 'components/moment.js',
1558                error: 'components/moment.js: Plugin could not be loaded',
1559                execfn: false,
1560                pluginfn: 'typeof moment !== "undefined"',
1561                trigger: 'pluginMomentReady',
1562                class: 'has-plugin-moment'
1563            };
1564
1565            let settings = {
1566                element: element,
1567                default: '.countdown',
1568                file: 'plugins.countdown.js',
1569                error: 'plugins.countdown.js: Plugin could not be loaded',
1570                execfn: 'SEMICOLON_countdownInit',
1571                pluginfn: '$().countdown',
1572                trigger: 'pluginCountdownReady',
1573                class: 'has-plugin-countdown'
1574            };
1575
1576            SEMICOLON.initialize.functions(momentSettings);
1577            SEMICOLON.initialize.functions(settings);
1578        },
1579
1580        gmap: function(element) {
1581            let googleSettings = {
1582                element: element,
1583                default: '.gmap',
1584                file: 'https://maps.google.com/maps/api/js?key=' + googleMapsAPI,
1585                error: 'Google Maps API could not be loaded',
1586                execfn: false,
1587                pluginfn: 'typeof google !== "undefined"',
1588                hiddendisable: true,
1589                class: 'has-plugin-gmapapi'
1590            };
1591
1592            let settings = {
1593                element: element,
1594                default: '.gmap',
1595                file: 'plugins.gmap.js',
1596                error: 'plugins.gmap.js: Plugin could not be loaded',
1597                execfn: 'SEMICOLON_gmapInit',
1598                pluginfn: 'typeof google !== "undefined" && $().gMap',
1599                hiddendisable: true,
1600                trigger: 'pluginGmapReady',
1601                class: 'has-plugin-gmap'
1602            };
1603
1604            SEMICOLON.initialize.functions(googleSettings);
1605            SEMICOLON.initialize.functions(settings);
1606        },
1607
1608        roundedSkill: function(element) {
1609            let settings = {
1610                element: element,
1611                default: '.rounded-skill',
1612                file: 'plugins.piechart.js',
1613                error: 'plugins.piechart.js: Plugin could not be loaded',
1614                execfn: 'SEMICOLON_roundedSkillInit',
1615                pluginfn: '$().easyPieChart',
1616                trigger: 'pluginRoundedSkillReady',
1617                class: 'has-plugin-piechart'
1618            };
1619
1620            SEMICOLON.initialize.functions(settings);
1621        },
1622
1623        progress: function(element) {
1624            let settings = {
1625                element: element,
1626                default: '.progress',
1627                file: 'plugins.progress.js',
1628                error: 'plugins.progress.js: Plugin could not be loaded',
1629                execfn: 'SEMICOLON_progressInit',
1630                pluginfn: 'typeof scwProgressPlugin !== "undefined"',
1631                trigger: 'pluginProgressReady',
1632                class: 'has-plugin-progress'
1633            };
1634
1635            SEMICOLON.initialize.functions(settings);
1636        },
1637
1638        twitterFeed: function(element) {
1639            let settings = {
1640                element: element,
1641                default: '.twitter-feed',
1642                file: 'plugins.twitter.js',
1643                error: 'plugins.twitter.js: Plugin could not be loaded',
1644                execfn: 'SEMICOLON_twitterFeedInit',
1645                pluginfn: 'typeof sm_format_twitter !== "undefined" && typeof sm_format_twitter3 !== "undefined"',
1646                trigger: 'pluginTwitterFeedReady',
1647                class: 'has-plugin-twitter'
1648            };
1649
1650            SEMICOLON.initialize.functions(settings);
1651        },
1652
1653        flickrFeed: function(element) {
1654            let settings = {
1655                element: element,
1656                default: '.flickr-feed',
1657                file: 'plugins.flickrfeed.js',
1658                error: 'plugins.flickrfeed.js: Plugin could not be loaded',
1659                execfn: 'SEMICOLON_flickrFeedInit',
1660                pluginfn: '$().jflickrfeed',
1661                trigger: 'pluginFlickrFeedReady',
1662                class: 'has-plugin-flickr'
1663            };
1664
1665            SEMICOLON.initialize.functions(settings);
1666        },
1667
1668        instagramPhotos: function(element) {
1669            let settings = {
1670                element: element,
1671                default: '.instagram-photos',
1672                file: 'plugins.instagram.js',
1673                error: 'plugins.instagram.js: Plugin could not be loaded',
1674                execfn: 'SEMICOLON_instagramPhotosInit',
1675                pluginfn: 'typeof scwInstagramPlugin !== "undefined"',
1676                trigger: 'pluginInstagramReady',
1677                class: 'has-plugin-instagram'
1678            };
1679
1680            SEMICOLON.initialize.functions(settings);
1681        },
1682
1683        dribbbleShots: function(element) {
1684            let settings = {
1685                element: element,
1686                default: '.dribbble-shots',
1687                file: 'plugins.dribbble.js',
1688                error: 'plugins.dribbble.js: Plugin could not be loaded',
1689                execfn: 'SEMICOLON_dribbbleShotsInit',
1690                pluginfn: '$.jribbble',
1691                trigger: 'pluginDribbbleReady',
1692                class: 'has-plugin-dribbble'
1693            };
1694
1695            let imagesLoadedSettings = {
1696                element: element,
1697                default: '.dribbble-shots',
1698                file: 'plugins.imagesloaded.js',
1699                error: 'plugins.imagesloaded.js: Plugin could not be loaded',
1700                pluginfn: '$().imagesLoaded',
1701                trigger: 'pluginImagesLoadedReady',
1702                class: 'has-plugin-imagesloaded'
1703            };
1704
1705            SEMICOLON.initialize.functions(settings);
1706            SEMICOLON.initialize.functions(imagesLoadedSettings);
1707        },
1708
1709        navTree: function(element) {
1710            let settings = {
1711                element: element,
1712                default: '.nav-tree',
1713                file: 'plugins.navtree.js',
1714                error: 'plugins.navtree.js: Plugin could not be loaded',
1715                execfn: 'SEMICOLON_navtreeInit',
1716                pluginfn: 'typeof scwNavTreePlugin !== "undefined"',
1717                trigger: 'pluginNavTreeReady',
1718                class: 'has-plugin-navtree'
1719            };
1720
1721            SEMICOLON.initialize.functions(settings);
1722        },
1723
1724        carousel: function(element) {
1725            let settings = {
1726                element: element,
1727                default: '.carousel-widget',
1728                file: 'plugins.carousel.js',
1729                error: 'plugins.carousel.js: Plugin could not be loaded',
1730                execfn: 'SEMICOLON_carouselInit',
1731                pluginfn: '$().owlCarousel',
1732                trigger: 'pluginCarouselReady',
1733                class: 'has-plugin-carousel'
1734            };
1735
1736            SEMICOLON.initialize.functions(settings);
1737        },
1738
1739        masonryThumbs: function(element) {
1740            let settings = {
1741                element: element,
1742                default: '.masonry-thumbs',
1743                file: 'plugins.masonrythumbs.js',
1744                error: 'plugins.masonrythumbs.js: Plugin could not be loaded',
1745                execfn: 'SEMICOLON_masonryThumbsInit',
1746                pluginfn: '$().isotope && typeof scwMasonryThumbsPlugin !== "undefined"',
1747                trigger: 'pluginMasonryThumbsReady',
1748                class: 'has-plugin-masonrythumbs'
1749            };
1750
1751            SEMICOLON.initialize.functions(settings);
1752        },
1753
1754        notifications: function(element) {
1755            let settings = {
1756                element: element,
1757                default: false,
1758                file: 'plugins.notify.js',
1759                error: 'plugins.notify.js: Plugin could not be loaded',
1760                execfn: 'SEMICOLON_notificationInit',
1761                pluginfn: 'typeof scwNotificationPlugin !== "undefined"',
1762                trigger: 'pluginNotifyReady',
1763                class: 'has-plugin-toast'
1764            };
1765
1766            SEMICOLON.initialize.functions(settings);
1767        },
1768
1769        textRotator: function(element) {
1770            let settings = {
1771                element: element,
1772                default: '.text-rotater',
1773                file: 'plugins.textrotator.js',
1774                error: 'plugins.textrotator.js: Plugin could not be loaded',
1775                execfn: 'SEMICOLON_textRotatorInit',
1776                pluginfn: '$().Morphext',
1777                trigger: 'pluginTextRotatorReady',
1778                class: 'has-plugin-textrotator'
1779            };
1780
1781            SEMICOLON.initialize.functions(settings);
1782        },
1783
1784        linkScroll: function(element) {
1785            let settings = {
1786                element: element,
1787                default: 'a[data-scrollto]',
1788                file: 'plugins.linkscroll.js',
1789                error: 'plugins.linkscroll.js: Plugin could not be loaded',
1790                execfn: 'SEMICOLON_linkScrollInit',
1791                pluginfn: 'typeof scwLinkScrollPlugin !== "undefined"',
1792                trigger: 'pluginLinkScrollReady',
1793                class: 'has-plugin-linkscroll'
1794            };
1795
1796            SEMICOLON.initialize.functions(settings);
1797        },
1798
1799        ajaxForm: function(element) {
1800            let formSettings = {
1801                element: element,
1802                default: '.form-widget',
1803                file: 'plugins.form.js',
1804                error: 'plugins.form.js: Plugin could not be loaded',
1805                execfn: false,
1806                pluginfn: '$().validate && $().ajaxSubmit',
1807                class: 'has-plugin-form'
1808            };
1809
1810            let settings = {
1811                element: element,
1812                default: '.form-widget',
1813                file: 'plugins.ajaxform.js',
1814                error: 'plugins.ajaxform.js: Plugin could not be loaded',
1815                execfn: 'SEMICOLON_ajaxFormInit',
1816                pluginfn: 'typeof scwAjaxFormPlugin !== "undefined"',
1817                trigger: 'pluginAjaxFormReady',
1818                class: 'has-plugin-ajaxform'
1819            };
1820
1821            SEMICOLON.initialize.functions(formSettings);
1822            SEMICOLON.initialize.functions(settings);
1823        },
1824
1825        subscription: function(element) {
1826            let formSettings = {
1827                element: element,
1828                default: '.subscribe-widget',
1829                file: 'plugins.form.js',
1830                error: 'plugins.form.js: Plugin could not be loaded',
1831                execfn: false,
1832                pluginfn: '$().validate && $().ajaxSubmit',
1833                class: 'has-plugin-form'
1834            };
1835
1836            let settings = {
1837                element: element,
1838                default: '.subscribe-widget',
1839                file: 'plugins.subscribe.js',
1840                error: 'plugins.subscribe.js: Plugin could not be loaded',
1841                execfn: 'SEMICOLON_subscribeFormInit',
1842                pluginfn: 'typeof scwSubscribeFormPlugin !== "undefined"',
1843                trigger: 'pluginSubscribeFormReady',
1844                class: 'has-plugin-subscribeform'
1845            };
1846
1847            SEMICOLON.initialize.functions(formSettings);
1848            SEMICOLON.initialize.functions(settings);
1849        },
1850
1851        shapeDivider: function(element) {
1852            let settings = {
1853                element: element,
1854                default: '.shape-divider',
1855                file: 'plugins.shapedivider.js',
1856                error: 'plugins.shapedivider.js: Plugin could not be loaded',
1857                execfn: 'SEMICOLON_shapeDividerInit',
1858                pluginfn: 'typeof scwShapeDividerPlugin !== "undefined"',
1859                trigger: 'pluginShapeDividerReady',
1860                class: 'has-plugin-shapedivider'
1861            };
1862
1863            SEMICOLON.initialize.functions(settings);
1864        },
1865
1866        ticker: function(element) {
1867            let settings = {
1868                element: element,
1869                default: '.scw-ticker',
1870                file: 'plugins.ticker.js',
1871                error: 'plugins.ticker.js: Plugin could not be loaded',
1872                execfn: 'SEMICOLON_tickerInit',
1873                pluginfn: 'typeof scwTickerPlugin !== "undefined"',
1874                trigger: 'pluginTickerReady',
1875                class: 'has-plugin-ticker'
1876            };
1877
1878            SEMICOLON.initialize.functions(settings);
1879        },
1880
1881        stickySidebar: function(element) {
1882            let settings = {
1883                element: element,
1884 
1884               default: '.sticky-sidebar-wrap',
1885                file: 'plugins.stickysidebar.js',
1886                error: 'plugins.stickysidebar.js: Plugin could not be loaded',
1887                execfn: 'SEMICOLON_stickySidebarInit',
1888                pluginfn: '$().scwStickySidebar',
1889                trigger: 'pluginStickySidebarReady',
1890                class: 'has-plugin-stickysidebar'
1891            };
1892
1893            SEMICOLON.initialize.functions(settings);
1894        },
1895
1896        cookieNotify: function(element) {
1897            let settings = {
1898                element: element,
1899                default: '.gdpr-settings,[data-cookies]',
1900                file: 'plugins.cookie.js',
1901                error: 'plugins.cookie.js: Plugin could not be loaded',
1902                execfn: 'SEMICOLON_cookieInit',
1903                pluginfn: 'typeof Cookies !== "undefined"',
1904                trigger: 'pluginCookieReady',
1905                class: 'has-plugin-cookie'
1906            };
1907
1908            SEMICOLON.initialize.functions(settings);
1909        },
1910
1911        cartQuantity: function() {
1912            let settings = {
1913                default: '.qty',
1914                file: 'plugins.quantity.js',
1915                error: 'plugins.quantity.js: Plugin could not be loaded',
1916                execfn: 'SEMICOLON_quantityInit',
1917                pluginfn: 'typeof scwQuantityPlugin !== "undefined"',
1918                trigger: 'pluginQuantityReady',
1919                class: 'has-plugin-quantity'
1920            };
1921
1922            SEMICOLON.initialize.functions(settings);
1923        },
1924
1925        readmore: function() {
1926            let settings = {
1927                default: '[data-readmore]',
1928                file: 'plugins.readmore.js',
1929                error: 'plugins.readmore.js: Plugin could not be loaded',
1930                execfn: 'SEMICOLON_readmoreInit',
1931                pluginfn: 'typeof scwReadMorePlugin !== "undefined"',
1932                trigger: 'pluginReadMoreReady',
1933                class: 'has-plugin-readmore'
1934            };
1935
1936            SEMICOLON.initialize.functions(settings);
1937        },
1938
1939        pricingSwitcher: function() {
1940            let settings = {
1941                default: '.pts-switcher',
1942                file: 'plugins.pricingswitcher.js',
1943                error: 'plugins.pricingswitcher.js: Plugin could not be loaded',
1944                execfn: 'SEMICOLON_pricingSwitcherInit',
1945                pluginfn: 'typeof scwPricingSwitcherPlugin !== "undefined"',
1946                trigger: 'pluginPricingSwitcherReady',
1947                class: 'has-plugin-pricing-switcher'
1948            };
1949
1950            SEMICOLON.initialize.functions(settings);
1951        },
1952
1953        extras: function() {
1954            let btsCheckIntevral = setInterval(function() {
1955                if ('pluginBootstrapReady' in scwEvents) {
1956                    if ($().tooltip) {
1957                        $('[data-bs-toggle="tooltip"]').tooltip({ container: 'body' });
1958                    } else {
1959                        console.log('extras: Bootstrap Tooltip not defined.');
1960                    }
1961
1962                    if ($().popover) {
1963                        $('[data-bs-toggle="popover"]').popover({ container: 'body' });
1964                    } else {
1965                        console.log('extras: Bootstrap Popover not defined.');
1966                    }
1967
1968                    clearInterval(btsCheckIntevral);
1969                }
1970            }, 1000);
1971
1972            $('.style-msg').on('click', '.close', function(e) {
1973                $(this).parents('.style-msg').slideUp();
1974                e.preventDefault();
1975            });
1976
1977            $('#page-menu-trigger').off('click').on('click', function() {
1978                $body.toggleClass('top-search-open', false);
1979                $pagemenu.toggleClass("page-menu-open");
1980                return false;
1981            });
1982
1983            $pagemenu.find('nav').off('click').on('click', function(e) {
1984                $body.toggleClass('top-search-open', false);
1985                $topCart.toggleClass('top-cart-open', false);
1986            });
1987
1988            if (SEMICOLON.isMobile.any()) {
1989                $body.addClass('device-touch');
1990            }
1991
1992            if ($body.hasClass('adaptive-color-scheme')) {
1993
1994                let adaptiveEl = $('[data-adaptive-light-class], [data-adaptive-dark-class]'),
1995                    adaptLightClass = adaptiveEl.attr('data-adaptive-light-class'),
1996                    adaptDarkClass = adaptiveEl.attr('data-adaptive-dark-class');
1997
1998                let adaptClasses = function(dark) {
1999                    if (dark) {
2000                        $body.toggleClass('dark', true);
2001                        adaptiveEl.removeClass(adaptLightClass).addClass(adaptDarkClass);
2002                    } else {
2003                        $body.toggleClass('dark', false);
2004                        adaptiveEl.removeClass(adaptDarkClass).addClass(adaptLightClass);
2005                    }
2006                    SEMICOLON.header.logo();
2007                };
2008
2009                if (window.matchMedia) {
2010                    adaptClasses(window.matchMedia('(prefers-color-scheme: dark)').matches);
2011
2012                    window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', function(e) {
2013                        adaptClasses(e.matches);
2014                    });
2015                }
2016            }
2017
2018            $body.off('click').on('click', 'a[href*="#"]', function() {
2019                $window.on('beforeunload', function() {
2020                    $window.scrollTop(0);
2021                });
2022            });
2023
2024            let linkElement = location.hash;
2025            if ($(linkElement).length > 0 && $('.one-page-menu').find('[data-href="' + linkElement + '"]').length > 0) {
2026                $window.scrollTop(0);
2027            }
2028        }
2029
2030    };
2031
2032    SEMICOLON.isMobile = {
2033        Android: function() {
2034            return navigator.userAgent.match(/Android/i);
2035        },
2036        BlackBerry: function() {
2037            return navigator.userAgent.match(/BlackBerry/i);
2038        },
2039        iOS: function() {
2040            return navigator.userAgent.match(/iPhone|iPad|iPod/i);
2041        },
2042        Opera: function() {
2043            return navigator.userAgent.match(/Opera Mini/i);
2044        },
2045        Windows: function() {
2046            return navigator.userAgent.match(/IEMobile/i);
2047        },
2048        any: function() {
2049            return (SEMICOLON.isMobile.Android() || SEMICOLON.isMobile.BlackBerry() || SEMICOLON.isMobile.iOS() || SEMICOLON.isMobile.Opera() || SEMICOLON.isMobile.Windows());
2050        }
2051    };
2052
2053    // Add your Custom JS Codes here
2054    SEMICOLON.customization = {
2055
2056        onReady: function() {
2057
2058            // Add JS Codes here to Run on Document Ready
2059
2060        },
2061
2062        onLoad: function() {
2063
2064            // Add JS Codes here to Run on Window Load
2065
2066        },
2067
2068        onResize: function() {
2069
2070            // Add JS Codes here to Run on Window Resize
2071
2072        }
2073
2074    }
2075
2076    SEMICOLON.documentOnResize = {
2077
2078        init: function() {
2079
2080            SEMICOLON.header.menufunctions();
2081            SEMICOLON.header.fullWidthMenu();
2082            SEMICOLON.header.stickyMenu();
2083            SEMICOLON.initialize.dataResponsiveHeights();
2084            SEMICOLON.initialize.stickFooterOnSmall();
2085            SEMICOLON.slider.sliderDimensions();
2086            SEMICOLON.slider.sliderParallax();
2087            SEMICOLON.widget.html5Video();
2088            SEMICOLON.widget.masonryThumbs();
2089            SEMICOLON.initialize.dataResponsiveClasses();
2090            SEMICOLON.customization.onResize();
2091
2092            windowWidth = $window.width();
2093
2094            $(window).trigger('scwWindowResize');
2095
2096        }
2097
2098    };
2099
2100    SEMICOLON.documentOnReady = {
2101
2102        init: function() {
2103            SEMICOLON.initialize.init();
2104            SEMICOLON.header.init();
2105            if ($slider.length > 0 || $sliderElement.length > 0) { SEMICOLON.slider.init(); }
2106            if ($portfolio.length > 0) { SEMICOLON.portfolio.init(); }
2107            SEMICOLON.widget.init();
2108            SEMICOLON.documentOnReady.windowscroll();
2109            SEMICOLON.customization.onReady();
2110        },
2111
2112        windowscroll: function() {
2113
2114            if ($header.length > 0) {
2115                headerOffset = $header.offset().top;
2116                $headerWrap.addClass('position-absolute');
2117                headerWrapOffset = $headerWrap.offset().top;
2118                $headerWrap.removeClass('position-absolute');
2119            }
2120
2121            let headerDefinedOffset = $header.attr('data-sticky-offset');
2122            if (typeof headerDefinedOffset !== 'undefined') {
2123                if (headerDefinedOffset == 'full') {
2124                    headerWrapOffset = $window.height();
2125                    let headerOffsetNegative = $header.attr('data-sticky-offset-negative');
2126                    if (typeof headerOffsetNegative !== 'undefined') {
2127                        headerWrapOffset = headerWrapOffset - headerOffsetNegative - 1;
2128                    }
2129                } else {
2130                    headerWrapOffset = Number(headerDefinedOffset);
2131                }
2132            } else {
2133                if (headerWrapOffset === 'undefined') {
2134                    headerWrapOffset = headerOffset;
2135                }
2136            }
2137
2138            let pageMenuWrap = $pagemenu.find('#page-menu-wrap'),
2139                offset = $headerWrap.outerHeight(),
2140                head = document.head || document.getElementsByTagName('head')[0],
2141                style = document.createElement('style'),
2142                css;
2143
2144            if ($pagemenu.length > 0) {
2145                $pageMenuClone.css({ 'height': $pagemenu.find('#page-menu-wrap').outerHeight() });
2146                setTimeout(function() {
2147                    if ($header.length > 0 && !$header.hasClass('no-sticky')) {
2148                        if ($body.hasClass('device-xl') || $body.hasClass('device-lg') || mobileSticky == 'true') {
2149                            pageMenuOffset = $pagemenu.offset().top - $headerWrap.outerHeight();
2150                            head.appendChild(style);
2151                            css = '#page-menu.sticky-page-menu:not(.dots-menu) #page-menu-wrap { top: ' + offset + 'px; }';
2152
2153                            style.type = 'text/css';
2154                            style.appendChild(document.createTextNode(css));
2155                        } else {
2156                            pageMenuOffset = $pagemenu.offset().top;
2157                        }
2158                    } else {
2159                        pageMenuOffset = $pagemenu.offset().top;
2160                    }
2161                }, 1000);
2162            }
2163
2164            SEMICOLON.header.stickyMenu(headerWrapOffset);
2165            SEMICOLON.header.stickyPageMenu(pageMenuOffset);
2166
2167            window.addEventListener('scroll', function() {
2168
2169                SEMICOLON.initialize.goToTopScroll();
2170                $('body.open-header.close-header-on-scroll').removeClass("side-header-open");
2171                SEMICOLON.header.stickyMenu(headerWrapOffset);
2172                SEMICOLON.header.stickyPageMenu(pageMenuOffset);
2173                SEMICOLON.header.logo();
2174
2175            });
2176
2177            window.addEventListener('DOMContentLoaded', onScrollSliderParallax, false);
2178
2179            $window.scrollEnd(function() {
2180                let headerHeight = $headerWrap.outerHeight();
2181                if ($headerWrapClone.length > 0 && headerHeight > $headerWrapClone.outerHeight()) {
2182                    $headerWrapClone.css({ 'height': headerHeight });
2183                    if ($body.hasClass('device-xl') || $body.hasClass('device-lg')) {
2184                        SEMICOLON.header.includeOffset();
2185                    }
2186                }
2187                if ($pagemenu.length > 0 && $header.length > 0 && !$header.hasClass('no-sticky')) {
2188                    if ($body.hasClass('device-xl') || $body.hasClass('device-lg')) {
2189                        $pagemenu.filter('.sticky-page-menu:not(.dots-menu,.no-sticky)').find($pageMenuWrap).css({ 'top': headerHeight + 'px' });
2190                    }
2191                }
2192            }, 500);
2193
2194            window.onfocus = function() {
2195                let headerHeight = $headerWrap.outerHeight();
2196                if ($headerWrapClone.length > 0 && headerHeight > $headerWrapClone.outerHeight()) {
2197                    $headerWrapClone.css({ 'height': headerHeight });
2198                }
2199            };
2200
2201        }
2202
2203    };
2204
2205    SEMICOLON.documentOnLoad = {
2206
2207        init: function() {
2208            SEMICOLON.slider.swiperSliderMenu(true);
2209            SEMICOLON.slider.revolutionSliderMenu(true);
2210            SEMICOLON.initialize.stickFooterOnSmall();
2211            SEMICOLON.widget.gridInit();
2212            let isoCheckInt = setInterval(function() {
2213                if ('pluginIsotopeReady' in scwEvents) {
2214                    SEMICOLON.widget.filterInit();
2215                    SEMICOLON.widget.masonryThumbs();
2216                    clearInterval(isoCheckInt);
2217                }
2218            }, 1000);
2219            SEMICOLON.widget.parallax();
2220            SEMICOLON.widget.loadFlexSlider();
2221            SEMICOLON.widget.html5Video();
2222            SEMICOLON.widget.ticker();
2223            SEMICOLON.header.responsiveMenuClass();
2224            SEMICOLON.initialize.modal();
2225            SEMICOLON.customization.onLoad();
2226
2227        }
2228
2229    };
2230
2231    let $window = $(window),
2232        windowScrT,
2233        $body = $('body'),
2234        $wrapper = $('#wrapper'),
2235        $header = $('#header'),
2236        $headerWrap = $('#header-wrap'),
2237        $headerInc = $('.include-header'),
2238        defLogoH = $header.attr('data-logo-height') || 100,
2239        stickyLogoH = $header.attr('data-sticky-logo-height') || 60,
2240        mobileSticky = $header.attr('data-mobile-sticky') || 'false',
2241        mobileLogoH = $header.attr('data-mobile-logo-height') || Number(defLogoH),
2242        mobileStickyLogoH = $header.attr('data-mobile-sticky-logo-height') || Number(stickyLogoH),
2243        defMenuP = $header.attr('data-menu-padding') || 39,
2244        stickyMenuP = $header.attr('data-sticky-menu-padding') || 19,
2245        headerSizeCustom = !$header.hasClass('header-size-lg') && !$header.hasClass('header-size-md') && !$header.hasClass('header-size-sm') && !$header.hasClass('header-size-custom'),
2246        stickyShrink = $header.attr('data-sticky-shrink') || 'true',
2247        stickyShrinkOffset = $header.attr('data-sticky-shrink-offset') || 300,
2248        primaryMenu = $('.primary-menu'),
2249        primaryMenuMainItems = primaryMenu.find('.menu-container:not(mobile-primary-menu):not(.custom-spacing)').children('.menu-item').children('.menu-link'),
2250        $headerWrapClone = '',
2251        initialHeaderWrapHeight = $headerWrap.outerHeight(),
2252        $headerRow = $headerWrap.find('.header-row:eq(0)'),
2253        $content = $('#content'),
2254        $footer = $('#footer'),
2255        windowWidth = $window.width(),
2256        oldHeaderClasses = $header.attr('class'),
2257        oldHeaderWrapClasses = $headerWrap.attr('class'),
2258        stickyMenuClasses = $header.attr('data-sticky-class'),
2259        responsiveMenuClasses = $header.attr('data-responsive-class'),
2260        logo = $('#logo'),
2261        defaultLogo = logo.find('.standard-logo'),
2262        defaultLogoWidth = defaultLogo.find('img').outerWidth(),
2263        retinaLogo = logo.find('.retina-logo'),
2264        defaultLogoImg = defaultLogo.find('img').attr('src'),
2265        retinaLogoImg = retinaLogo.find('img').attr('src'),
2266        defaultDarkLogo = defaultLogo.attr('data-dark-logo'),
2267        retinaDarkLogo = retinaLogo.attr('data-dark-logo'),
2268        defaultStickyLogo = defaultLogo.attr('data-sticky-logo'),
2269        retinaStickyLogo = retinaLogo.attr('data-sticky-logo'),
2270        defaultMobileLogo = defaultLogo.attr('data-mobile-logo'),
2271        retinaMobileLogo = retinaLogo.attr('data-mobile-logo'),
2272        topSearchTimeOut,
2273        $pagemenu = $('#page-menu'),
2274        $pageMenuClone = '',
2275        $pageMenuWrap = $pagemenu.find('#page-menu-wrap'),
2276        $onePageMenuEl = $('.one-page-menu'),
2277        $portfolio = $('.portfolio'),
2278        $shop = $('.shop'),
2279        $slider = $('#slider'),
2280        $sliderParallaxEl = $('.slider-parallax'),
2281        $sliderElement = $('.slider-element'),
2282        swiperSlider = '',
2283        $pageTitle = $('#page-title'),
2284        $topSearch = $('.top-search-form'),
2285        $topCart = $('#top-cart'),
2286        $topSocialEl = $('#top-social').find('li'),
2287        $goToTopEl = $('#gotoTop'),
2288        googleMapsAPI = 'YOUR-API-KEY',
2289        xScrollPosition,
2290        yScrollPosition,
2291        sliderParallaxEl = document.querySelector('.slider-parallax'),
2292        sliderParallaxElCaption = document.querySelector('.slider-parallax .slider-caption'),
2293        sliderParallaxElInner = document.querySelector('.slider-inner'),
2294        headerOffset = 0,
2295        headerWrapOffset = 0,
2296        pageMenuOffset = 0,
2297        resizeTimer;
2298
2299    $(document).ready(SEMICOLON.documentOnReady.init);
2300
2301    $window.on('load', SEMICOLON.documentOnLoad.init);
2302
2303    $window.on('resize', function() {
2304        let thisWindow = $(this);
2305        clearTimeout(resizeTimer);
2306        resizeTimer = setTimeout(function() {
2307            if (thisWindow.width() !== windowWidth) {
2308                SEMICOLON.documentOnResize.init();
2309            }
2310        }, 250);
2311    });
2312
2313})(jQuery);

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.