PageSourceSearch

https://icoiig.es/js/functions.js

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