PageSourceSearch

https://productioncarcare.com/js/functions.js

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