PageSourceSearch

https://reyna.paris/js/functions.js

js reyna.paris collected 2026-09-29 03:09:44 UTC 76,488 bytes, 2,280 lines download raw bytes

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