PageSourceSearch

https://www.locandamescoglia.com/wp-content/themes/locandamescoglia/assets/js/functions.js?ver=1.0.0

js locandamescoglia.com collected 2026-10-04 21:48:30 UTC 79,449 bytes, 2,384 lines download raw bytes

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