PageSourceSearch

https://acessibilidadenotrabalho.org/js/functions.js

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