PageSourceSearch

https://www.broadjam.com/assets/skins/broadjam4/js/functions.js

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