PageSourceSearch

https://macaflight.com/wp-content/themes/thegem-elementor/js/thegem-menu_init.js?ver=6.9.10

js macaflight.com collected 2026-10-06 19:06:21 UTC 35,571 bytes, 1,073 lines download raw bytes

1function supportsTransitions() {
2	return getSupportedTransition() != '';
3}
4
5function getSupportedTransition() {
6	var b = document.body || document.documentElement,
7		s = b.style,
8		p = 'transition';
9
10	if (typeof s[p] == 'string') { return p; }
11
12	// Tests for vendor specific prop
13	var v = ['Moz', 'webkit', 'Webkit', 'Khtml', 'O', 'ms'];
14	p = p.charAt(0).toUpperCase() + p.substr(1);
15
16	for (var i=0; i<v.length; i++) {
17		if (typeof s[v[i] + p] == 'string') { return true; }
18	}
19
20	return '';
21}
22window.supportedTransition = getSupportedTransition();
23window.supportsTransitions = supportsTransitions();
24
25function supportsAnimations() {
26	return getSupportedAnimation() != '';
27}
28
29function getSupportedAnimation() {
30	var t,
31		el = document.createElement("fakeelement");
32
33	var animations = {
34		"animation"	  : "animationend",
35		"OAnimation"	 : "oAnimationEnd",
36		"MozAnimation"   : "animationend",
37		"WebkitAnimation": "webkitAnimationEnd",
38		'msAnimation' : 'MSAnimationEnd'
39	};
40
41	for (t in animations){
42		if (el.style[t] !== undefined) {
43			return t;
44		}
45	}
46	return '';
47}
48window.supportedAnimation = getSupportedAnimation();
49window.supportsAnimations = supportsAnimations();
50
51function getMobileMenuType() {
52	if(!document.getElementById('site-header')) return 'default';
53	var m = document.getElementById('site-header').className.match(/mobile-menu-layout-([a-zA-Z0-9]+)/);
54	window.gemMobileMenuType = m ? m[1] : 'default';
55	return window.gemMobileMenuType;
56}
57getMobileMenuType();
58
59(function() {
60	var logoFixTimeout = false;
61	window.thegemDesktopMenuLogoFixed = false;
62	window.thegemWasDesktop = false;
63	window.megaMenuWithSettingsFixed = false;
64
65	function getElementPosition(elem) {
66		var w = elem.offsetWidth,
67			h = elem.offsetHeight,
68			l = 0,
69			t = 0;
70
71		while (elem) {
72			l += elem.offsetLeft;
73			t += elem.offsetTop;
74			elem = elem.offsetParent;
75		}
76		return {"left":l, "top":t, "width": w, "height":h};
77	}
78
79	function fixMenuLogoPosition() {
80		if (logoFixTimeout) {
81			clearTimeout(logoFixTimeout);
82		}
83
84		var headerMain = document.querySelector('#site-header .header-main');
85		if (headerMain == null) {
86			return false;
87		}
88
89		var headerMainClass = headerMain.className;
90		if (headerMainClass.indexOf('logo-position-menu_center') == -1 || headerMainClass.indexOf('header-layout-fullwidth_hamburger') != -1 || headerMainClass.indexOf('header-layout-vertical') != -1) {
91			return false;
92		}
93
94		logoFixTimeout = setTimeout(function() {
95			var page = document.getElementById('page'),
96				primaryMenu = document.getElementById('primary-menu'),
97				primaryNavigation = document.getElementById('primary-navigation'),
98				windowWidth = page.offsetWidth,
99				pageComputedStyles = window.getComputedStyle(page, null),
100				pageMargin = parseFloat(pageComputedStyles['marginLeft']);
101
102			if (isNaN(pageMargin)) {
103				pageMargin = 0;
104			}
105
106			if (headerMainClass.indexOf('header-layout-fullwidth') != -1) {
107				var logoItem = primaryMenu.querySelector('.menu-item-logo'),
108					items = primaryNavigation.querySelectorAll('#primary-menu > li'),
109					lastItem = null;
110
111				for (var i = items.length - 1; i >=0; i--) {
112					if (items[i].className.indexOf('mobile-only') == -1) {
113						lastItem = items[i];
114						break;
115					}
116				}
117
118				primaryMenu.style.display = '';
119				logoItem.style.marginLeft = '';
120				logoItem.style.marginRight = '';
121
122				if (windowWidth < 1212 || lastItem === null) {
123					primaryMenu.classList.remove("menu_center-preload");
124					return;
125				}
126
127				window.thegemDesktopMenuLogoFixed = true;
128
129				primaryMenu.style.display = 'block';
130
131				var pageCenter = windowWidth / 2 + pageMargin,
132					logoOffset = getElementPosition(logoItem),
133					offset = pageCenter - logoOffset.left - logoItem.offsetWidth / 2;
134
135				logoItem.style.marginLeft = offset + 'px';
136
137				var primaryMenuOffsetWidth = primaryMenu.offsetWidth,
138					primaryMenuOffsetLeft = getElementPosition(primaryMenu).left,
139					lastItemOffsetWidth = lastItem.offsetWidth,
140					lastItemOffsetLeft = getElementPosition(lastItem).left,
141					rightItemsOffset = primaryMenuOffsetWidth - lastItemOffsetLeft - lastItemOffsetWidth + primaryMenuOffsetLeft;
142
143				logoItem.style.marginRight = rightItemsOffset + 'px';
144			} else {
145				if (windowWidth < 1212) {
146					primaryNavigation.style.textAlign = '';
147					primaryMenu.style.position = '';
148					primaryMenu.style.left = '';
149					primaryMenu.classList.remove("menu_center-preload");
150					return;
151				}
152
153				window.thegemDesktopMenuLogoFixed = true;
154
155				primaryNavigation.style.textAlign = 'left';
156				primaryMenu.style.left = 0 + 'px';
157
158				var pageCenter = windowWidth / 2,
159					primaryMenuOffsetLeft = getElementPosition(primaryMenu).left,
160					logoOffset = getElementPosition(document.querySelector('#site-header .header-main #primary-navigation .menu-item-logo')),
161					pageOffset = getElementPosition(page),
162					offset = pageCenter - (logoOffset.left - pageOffset.left) - document.querySelector('#site-header .header-main #primary-navigation .menu-item-logo').offsetWidth / 2;
163
164				if (primaryMenuOffsetLeft + offset >= 0) {
165					primaryMenu.style.position = 'relative';
166					primaryMenu.style.left = offset + 'px';
167				} else {
168					primaryMenu.style.position = '';
169					primaryMenu.style.left = '';
170				}
171			}
172			primaryMenu.classList.remove("menu_center-preload");
173			//primaryMenu.style.opacity = '1';
174		}, 50);
175	}
176
177	window.fixMenuLogoPosition = fixMenuLogoPosition;
178
179	if (window.gemOptions.clientWidth > 1212) {
180		window.addEventListener('load', function(event) {
181			window.fixMenuLogoPosition();
182		}, false);
183	}
184})();
185
186
187(function($) {
188	/* PRIMARY MENU */
189
190	var isVerticalMenu = $('.header-main').hasClass('header-layout-vertical'),
191		isHamburgerMenu = $('.header-main').hasClass('header-layout-fullwidth_hamburger'),
192		isPerspectiveMenu = $('#thegem-perspective').length > 0;
193
194	$(window).resize(function() {
195		window.updateGemClientSize(false);
196		window.updateGemInnerSize();
197	});
198
199	window.menuResizeTimeoutHandler = false;
200
201	var megaMenuSettings = {};
202
203	function getOffset(elem) {
204		if (elem.getBoundingClientRect && window.gemBrowser.platform.name != 'ios'){
205			var bound = elem.getBoundingClientRect(),
206				html = elem.ownerDocument.documentElement,
207				htmlScroll = getScroll(html),
208				elemScrolls = getScrolls(elem),
209				isFixed = (styleString(elem, 'position') == 'fixed');
210			return {
211				x: parseInt(bound.left) + elemScrolls.x + ((isFixed) ? 0 : htmlScroll.x) - html.clientLeft,
212				y: parseInt(bound.top)  + elemScrolls.y + ((isFixed) ? 0 : htmlScroll.y) - html.clientTop
213			};
214		}
215
216		var element = elem, position = {x: 0, y: 0};
217		if (isBody(elem)) return position;
218
219		while (element && !isBody(element)){
220			position.x += element.offsetLeft;
221			position.y += element.offsetTop;
222
223			if (window.gemBrowser.name == 'firefox'){
224				if (!borderBox(element)){
225					position.x += leftBorder(element);
226					position.y += topBorder(element);
227				}
228				var parent = element.parentNode;
229				if (parent && styleString(parent, 'overflow') != 'visible'){
230					position.x += leftBorder(parent);
231					position.y += topBorder(parent);
232				}
233			} else if (element != elem && window.gemBrowser.name == 'safari'){
234				position.x += leftBorder(element);
235				position.y += topBorder(element);
236			}
237
238			element = element.offsetParent;
239		}
240		if (window.gemBrowser.name == 'firefox' && !borderBox(elem)){
241			position.x -= leftBorder(elem);
242			position.y -= topBorder(elem);
243		}
244		return position;
245	};
246
247	function getScroll(elem){
248		return {x: window.pageXOffset || document.documentElement.scrollLeft, y: window.pageYOffset || document.documentElement.scrollTop};
249	};
250
251	function getScrolls(elem){
252		var element = elem.parentNode, position = {x: 0, y: 0};
253		while (element && !isBody(element)){
254			position.x += element.scrollLeft;
255			position.y += element.scrollTop;
256			element = element.parentNode;
257		}
258		return position;
259	};
260
261	function styleString(element, style) {
262		return $(element).css(style);
263	};
264
265	function styleNumber(element, style){
266		return parseInt(styleString(element, style)) || 0;
267	};
268
269	function borderBox(element){
270		return styleString(element, '-moz-box-sizing') == 'border-box';
271	};
272
273	function topBorder(element){
274		return styleNumber(element, 'border-top-width');
275	};
276
277	function leftBorder(element){
278		return styleNumber(element, 'border-left-width');
279	};
280
281	function isBody(element){
282		return (/^(?:body|html)$/i).test(element.tagName);
283	};
284
285
286	function checkMegaMenuSettings() {
287		if (window.customMegaMenuSettings == undefined || window.customMegaMenuSettings == null) {
288			return false;
289		}
290
291		var uri = window.location.pathname;
292
293		window.customMegaMenuSettings.forEach(function(item) {
294			for (var i = 0; i < item.urls.length; i++) {
295				if (uri.match(item.urls[i])) {
296					megaMenuSettings[item.menuItem] = item.data;
297				}
298			}
299		});
300	}
301
302	function fixMegaMenuWithSettings() {
303		if (isResponsiveMenuVisible() && !window.thegemWasDesktop) {
304			return false;
305		}
306
307		window.megaMenuWithSettingsFixed = true;
308
309		checkMegaMenuSettings();
310
311		$('#primary-menu > li.megamenu-enable').each(function() {
312			var m = this.className.match(/(menu-item-(\d+))/);
313			if (!m) {
314				return;
315			}
316
317			var itemId = parseInt(m[2]);
318			if (megaMenuSettings[itemId] == undefined || megaMenuSettings[itemId] == null) {
319				return;
320			}
321
322			var $item = $('> ul', this);
323
324			if (megaMenuSettings[itemId].masonry != undefined) {
325				if (megaMenuSettings[itemId].masonry) {
326					$item.addClass('megamenu-masonry');
327				} else {
328					$item.removeClass('megamenu-masonry');
329				}
330			}
331
332			if (megaMenuSettings[itemId].style != undefined) {
333				$(this).removeClass('megamenu-style-default megamenu-style-grid').addClass('megamenu-style-' + megaMenuSettings[itemId].style);
334			}
335
336			var css = {};
337
338			if (megaMenuSettings[itemId].backgroundImage != undefined) {
339				css.backgroundImage = megaMenuSettings[itemId].backgroundImage;
340			}
341
342			if (megaMenuSettings[itemId].backgroundPosition != undefined) {
343				css.backgroundPosition = megaMenuSettings[itemId].backgroundPosition;
344			}
345
346			if (megaMenuSettings[itemId].padding != undefined) {
347				css.padding = megaMenuSettings[itemId].padding;
348			}
349
350			if (megaMenuSettings[itemId].borderRight != undefined) {
351				css.borderRight = megaMenuSettings[itemId].borderRight;
352			}
353
354			$item.css(css);
355		});
356	}
357
358	function isResponsiveMenuVisible() {
359		// var menuToggleDisplay = $('.menu-toggle').css('display');
360		// return menuToggleDisplay == 'block' || menuToggleDisplay == 'inline-block';
361		return $('.primary-navigation .menu-toggle').is(':visible');
362	}
363	window.isResponsiveMenuVisible = isResponsiveMenuVisible;
364
365	function isTopAreaVisible() {
366		return window.gemSettings.topAreaMobileDisable ? window.gemOptions.clientWidth >= 768 : true;
367	}
368	window.isTopAreaVisible = isTopAreaVisible;
369
370	function isVerticalToggleVisible() {
371		return window.gemOptions.clientWidth > 1600;
372	}
373
374	$('#primary-menu > li.megamenu-enable').hover(
375		function() {
376			fix_megamenu_position(this);
377		},
378		function() {}
379	);
380
381	$('#primary-menu > li.megamenu-enable:hover').each(function() {
382		fix_megamenu_position(this);
383	});
384
385	$('#primary-menu > li.megamenu-enable').each(function() {
386		var $item = $('> ul', this);
387		if($item.length == 0) return;
388		$item.addClass('megamenu-item-inited');
389	});
390
391	function fix_megamenu_position(elem, containerWidthCallback) {
392		if (!$('.megamenu-inited', elem).length && isResponsiveMenuVisible()) {
393			return false;
394		}
395
396			var $item = $('> ul', elem);
397			if($item.length == 0) return;
398			var self = $item.get(0);
399
400			$item.addClass('megamenu-item-inited');
401
402			var default_item_css = {
403				width: 'auto',
404				height: 'auto'
405			};
406
407			if (!isVerticalMenu && !isHamburgerMenu && !isPerspectiveMenu) {
408				default_item_css.left = 0;
409			}
410
411			$item
412				.removeClass('megamenu-masonry-inited megamenu-fullwidth')
413				.css(default_item_css);
414
415			$(' > li', $item).css({
416				left: 0,
417				top: 0
418			}).each(function() {
419				var old_width = $(this).data('old-width') || -1;
420				if (old_width != -1) {
421					$(this).width(old_width).data('old-width', -1);
422				}
423			});
424
425			if (isResponsiveMenuVisible()) {
426				return;
427			}
428
429			if (containerWidthCallback !== undefined) {
430				var container_width = containerWidthCallback();
431			} else if (isVerticalMenu) {
432				var container_width = window.gemOptions.clientWidth - $('#site-header-wrapper').outerWidth();
433			} else if (isPerspectiveMenu) {
434				var container_width = window.gemOptions.clientWidth - $('#primary-navigation').outerWidth();
435			} else if (isHamburgerMenu) {
436				var container_width = window.gemOptions.clientWidth - $('#primary-menu').outerWidth();
437			} else {
438				var $container = $item.closest('.header-main'),
439					container_width = $container.width(),
440					container_padding_left = parseInt($container.css('padding-left')),
441					container_padding_right = parseInt($container.css('padding-right')),
442					parent_width = $item.parent().outerWidth();
443			}
444
445			var megamenu_width = $item.outerWidth();
446
447			if (megamenu_width > container_width) {
448				megamenu_width = container_width;
449				var new_megamenu_width = container_width - parseInt($item.css('padding-left')) - parseInt($item.css('padding-right'));
450				var columns = $item.data('megamenu-columns') || 4;
451				var column_width = parseFloat(new_megamenu_width - columns * parseInt($(' > li.menu-item:first', $item).css('margin-left'))) / columns;
452				var column_width_int = parseInt(column_width);
453				$(' > li', $item).each(function() {
454					$(this).data('old-width', $(this).width()).css('width', column_width_int);
455				});
456				$item.addClass('megamenu-fullwidth').width(new_megamenu_width - (column_width - column_width_int) * columns);
457			}
458
459			if (!isVerticalMenu && !isHamburgerMenu && !isPerspectiveMenu && containerWidthCallback === undefined) {
460				if (megamenu_width > parent_width) {
461					var left = -(megamenu_width - parent_width) / 2;
462				} else {
463					var left = 0;
464				}
465
466				var container_offset = getOffset($container[0]);
467				var megamenu_offset = getOffset(self);
468
469				if ((megamenu_offset.x - container_offset.x - container_padding_left + left) < 0) {
470					left = -(megamenu_offset.x - container_offset.x - container_padding_left);
471				}
472
473				if ((megamenu_offset.x + megamenu_width + left) > (container_offset.x + $container.outerWidth() - container_padding_right)) {
474					left -= (megamenu_offset.x + megamenu_width + left) - (container_offset.x + $container.outerWidth() - container_padding_right);
475				}
476
477				$item.css('left', left).css('left');
478			}
479
480			if ($item.hasClass('megamenu-masonry')) {
481				var positions = {},
482					max_bottom = 0;
483
484				$item.width($item.width() - 1);
485				var new_row_height = $('.megamenu-new-row', $item).outerHeight() + parseInt($('.megamenu-new-row', $item).css('margin-bottom'));
486
487				$('> li.menu-item', $item).each(function() {
488					var pos = $(this).position();
489					if (positions[pos.left] != null && positions[pos.left] != undefined) {
490						var top_position = positions[pos.left];
491					} else {
492						var top_position = pos.top;
493					}
494					positions[pos.left] = top_position + $(this).outerHeight() + new_row_height + parseInt($(this).css('margin-bottom'));
495					if (positions[pos.left] > max_bottom)
496						max_bottom = positions[pos.left];
497					$(this).css({
498						left: pos.left,
499						top: top_position
500					})
501				});
502
503				$item.height(max_bottom - new_row_height - parseInt($item.css('padding-top')) - 1);
504				$item.addClass('megamenu-masonry-inited');
505			}
506
507			if ($item.hasClass('megamenu-empty-right')) {
508				var mega_width = $item.width();
509				var max_rights = {
510					columns: [],
511					position: -1
512				};
513
514				$('> li.menu-item', $item).removeClass('megamenu-no-right-border').each(function() {
515					var pos = $(this).position();
516					var column_right_position = pos.left + $(this).width();
517
518					if (column_right_position > max_rights.position) {
519						max_rights.position = column_right_position;
520						max_rights.columns = [];
521					}
522
523					if (column_right_position == max_rights.position) {
524						max_rights.columns.push($(this));
525					}
526				});
527
528				if (max_rights.columns.length && max_rights.position >= (mega_width - 7)) {
529					max_rights.columns.forEach(function($li) {
530						$li.addClass('megamenu-no-right-border');
531					});
532				}
533			}
534
535			if (isVerticalMenu || isHamburgerMenu || isPerspectiveMenu) {
536				var clientHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight,
537					itemOffset = $item.offset(),
538					itemHeight = $item.outerHeight(),
539					scrollTop = $(window).scrollTop();
540
541				if (itemOffset.top - scrollTop + itemHeight > clientHeight) {
542					$item.css({
543						top: clientHeight - itemOffset.top + scrollTop - itemHeight - 20
544					});
545				}
546			}
547
548			$item.addClass('megamenu-inited');
549	}
550
551	window.fix_megamenu_position = fix_megamenu_position;
552
553	function primary_menu_reinit() {
554		if(isResponsiveMenuVisible()) {
555			if (window.gemMobileMenuType == 'default') {
556				var $submenuDisabled = $('#primary-navigation .dl-submenu-disabled');
557				if ($submenuDisabled.length) {
558					$submenuDisabled.addClass('dl-submenu').removeClass('dl-submenu-disabled');
559				}
560			}
561			if ($('#primary-menu').hasClass('no-responsive')) {
562				$('#primary-menu').removeClass('no-responsive');
563			}
564			if (!$('#primary-navigation').hasClass('responsive')) {
565				$('#primary-navigation').addClass('responsive');
566			}
567			$('.menu-overlay').addClass('mobile');
568			if (window.thegemDesktopMenuLogoFixed) {
569				window.fixMenuLogoPosition();
570			}
571
572			if($('body').hasClass('mobile-cart-position-top')) {
573				$('.mobile-cart > .minicart-menu-link.temp').remove();
574				$('#primary-navigation .menu-item-cart > *').appendTo('.mobile-cart');
575			}
576		} else {
577			window.thegemWasDesktop = true;
578
579			if (window.gemMobileMenuType == 'overlay' && !$('.header-layout-overlay').length && $('.menu-overlay').hasClass('active')) {
580				$('.mobile-menu-layout-overlay .menu-toggle').click();
581			}
582
583			$('#primary-navigation').addClass('without-transition');
584
585			if (window.gemMobileMenuType == 'default') {
586				$('#primary-navigation .dl-submenu').addClass('dl-submenu-disabled').removeClass('dl-submenu');
587			}
588			$('#primary-menu').addClass('no-responsive');
589			$('#primary-navigation').removeClass('responsive');
590			$('.menu-overlay').removeClass('mobile');
591
592			window.fixMenuLogoPosition();
593
594			if (!window.megaMenuWithSettingsFixed) {
595				fixMegaMenuWithSettings();
596			}
597
598			$('#primary-navigation').removeClass('without-transition');
599
600			if($('body').hasClass('mobile-cart-position-top')) {
601				$('.mobile-cart > .minicart-menu-link.temp').remove();
602				$('.mobile-cart > *').appendTo('#primary-navigation .menu-item-cart');
603			}
604		}
605	}
606
607	$(function() {
608		function getScrollY(elem){
609			return window.pageYOffset || document.documentElement.scrollTop;
610		}
611		$(document).on('click touchend', '.mobile-cart > a', function(e) {
612			e.preventDefault();
613			$('.mobile-cart .minicart').addClass('minicart-show');
614			$('body').data('scroll-position', getScrollY())
615			$('body').addClass('mobile-minicart-opened');
616		});
617		$(document).on('click', '.mobile-cart-header-close, .mobile-minicart-overlay', function(e) {
618			e.preventDefault();
619			$('.mobile-cart .minicart').removeClass('minicart-show');
620			$('body').removeClass('mobile-minicart-opened');
621			if($('body').data('scroll-position')) {
622				window.scrollTo(0, $('body').data('scroll-position'))
623			}
624		});
625
626		if (isResponsiveMenuVisible() && typeof window.gemResponsiveCartClicked !== 'undefined' && window.gemResponsiveCartClicked) {
627			console.log($('.mobile-cart-position-top .mobile-cart > a'));
628			$('.mobile-cart-position-top .mobile-cart > a').trigger('click');
629			window.gemResponsiveCartClicked = null;
630		}
631
632	});
633
634	if (window.gemMobileMenuType == 'default') {
635		$('#primary-navigation .submenu-languages').addClass('dl-submenu');
636	}
637	$('#primary-navigation ul#primary-menu > li.menu-item-language, #primary-navigation ul#primary-menu > li.menu-item-type-wpml_ls_menu_item').addClass('menu-item-parent');
638	$('#primary-navigation ul#primary-menu > li.menu-item-language > a, #primary-navigation ul#primary-menu > li.menu-item-type-wpml_ls_menu_item > a').after('<span class="menu-item-parent-toggle"></span>');
639
640	fixMegaMenuWithSettings();
641
642	if (window.gemMobileMenuType == 'default') {
643		var updateMobileMenuPosition = function() {
644			var siteHeaderHeight = $('#site-header').outerHeight(),
645				windowHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;
646
647			if ($('#thegem-perspective #primary-menu').length) {
648				$('#thegem-perspective > .mobile-menu-layout-default').css({
649					top: siteHeaderHeight
650				});
651			}
652
653			$('#primary-menu').css({
654				maxHeight: windowHeight - siteHeaderHeight
655			});
656		};
657
658		$(window).resize(function() {
659			if (isResponsiveMenuVisible() && $('#primary-menu').hasClass('dl-menuopen')) {
660				setTimeout(updateMobileMenuPosition, 50);
661			} else {
662				$('#primary-menu').css({
663					maxHeight: ''
664				});
665			}
666		});
667
668		$('#site-header .dl-trigger').on('click', function() {
669			updateMobileMenuPosition();
670		});
671
672		if (typeof $.fn.dlmenu === 'function') {
673			$('#primary-navigation').dlmenu({
674				animationClasses: {
675					classin : 'dl-animate-in',
676					classout : 'dl-animate-out'
677				},
678				onLevelClick: function (el, name) {
679					//$('html, body').animate({ scrollTop : 0 });
680				},
681				backLabel: thegem_dlmenu_settings.backLabel,
682				showCurrentLabel: thegem_dlmenu_settings.showCurrentLabel
683			});
684		}
685	}
686	primary_menu_reinit();
687
688	$('#primary-menu > li').hover(
689		function() {
690			var $items = $('ul:not(.minicart ul), .minicart, .minisearch', this);
691			$items.removeClass('invert vertical-invert');
692
693			if (!$(this).hasClass('megamenu-enable')) {
694				$items.css({top: ''});
695			}
696
697			if ($(this).hasClass('megamenu-enable') ||
698					$(this).closest('.header-layout-overlay').length ||
699					$(this).closest('.mobile-menu-layout-overlay').length && isResponsiveMenuVisible()) {
700				return;
701			}
702
703			var topItemTranslate = 0;
704			if ($('>ul', this).css('transform')) {
705				topItemTranslate = parseInt($('>ul', this).css('transform').split(',')[5]);
706			}
707			if (isNaN(topItemTranslate)) {
708				topItemTranslate = 0;
709			}
710			var windowScroll = $(window).scrollTop(),
711				siteHeaderOffset = $('#site-header').offset(),
712				siteHeaderOffsetTop = siteHeaderOffset.top - windowScroll,
713				siteHeaderHeight = $('#site-header').outerHeight(),
714				pageOffset = $('#page').offset(),
715				pageWidth = $('#page').width();
716
717			$items.each(function() {
718				var $item = $(this),
719					self = this,
720					$parentList = $item.parent().closest('ul');
721
722				var itemOffset = $item.offset(),
723					itemOffsetTop = itemOffset.top - windowScroll,
724					itemOffsetLeft = itemOffset.left;
725
726
727				var leftItemTranslate = 0;
728				if ($item.css('transform')) {
729					leftItemTranslate = parseInt(getComputedStyle(this).transform.split(',')[4]);
730					var levelUL = getLevelULByPrimaryMenu(self);
731					if (levelUL > 0) {
732						leftItemTranslate = leftItemTranslate*levelUL;
733					}
734				}
735				if (isNaN(leftItemTranslate)) {
736					leftItemTranslate = 0;
737				}
738
739				if ($parentList.hasClass('invert')) {
740					if ($parentList.offset().left - $item.outerWidth() > pageOffset.left) {
741						$item.addClass('invert');
742					}
743				} else {
744					if (itemOffsetLeft - leftItemTranslate - pageOffset.left + $item.outerWidth() > pageWidth) {
745						$item.addClass('invert');
746					}
747				}
748
749				if (isVerticalMenu || isPerspectiveMenu || isHamburgerMenu) {
750					if (itemOffsetTop - topItemTranslate + $item.outerHeight() > $(window).height()) {
751						$item.addClass('vertical-invert');
752						var itemOffsetFix = itemOffsetTop  - topItemTranslate + $item.outerHeight() - $(window).height();
753						if (itemOffsetTop - topItemTranslate - itemOffsetFix < 0) {
754							itemOffsetFix = 0;
755						}
756						$item.css({ top: -itemOffsetFix + 'px' });
757					}
758				} else {
759					if (itemOffsetTop - topItemTranslate + $item.outerHeight() > $(window).height()) {
760						$item.addClass('vertical-invert');
761						var itemOffsetFix = itemOffsetTop  - topItemTranslate + $item.outerHeight() - $(window).height();
762						if (itemOffsetTop - topItemTranslate - itemOffsetFix < siteHeaderOffsetTop + siteHeaderHeight) {
763							itemOffsetFix -= siteHeaderOffsetTop + siteHeaderHeight - (itemOffsetTop - topItemTranslate - itemOffsetFix);
764							if (itemOffsetFix < 0) {
765								itemOffsetFix = 0;
766							}
767						}
768						if(itemOffsetFix > 0) {
769							$item.css({ top: -itemOffsetFix + 'px' });
770						}
771					}
772				}
773			});
774		},
775		function() {}
776	);
777
778	function getLevelULByPrimaryMenu(item) {
779		var parentUL = $(item).parent('li').parent('ul');
780		var level = 0;
781
782		while (!parentUL.is('#primary-menu')) {
783			parentUL = parentUL.parent('li').parent('ul');
784			level++;
785		}
786
787		return level;
788	}
789
790	$('.hamburger-toggle').click(function(e) {
791		e.preventDefault();
792		$(this).closest('#primary-navigation').toggleClass('hamburger-active');
793		$('.hamburger-overlay').toggleClass('active');
794	});
795
796	$('.overlay-toggle, .mobile-menu-layout-overlay .menu-toggle').click(function(e) {
797		var $element = this;
798		e.preventDefault();
799		if($('.menu-overlay').hasClass('active')) {
800			$('.menu-overlay').removeClass('active');
801			$('.primary-navigation').addClass('close');
802			$('.primary-navigation').one('webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend', function(e) {
803				$('.primary-navigation').removeClass('overlay-active close');
804				$('.overlay-menu-wrapper').removeClass('active');
805			});
806			$(document).off('keydown.overlay-close');
807			$('#primary-menu').off('click.overlay-close');
808		} else {
809			$('.overlay-menu-wrapper').addClass('active');
810			$('.primary-navigation').off('webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend');
811			$('.primary-navigation').addClass('overlay-active').removeClass('close');
812			if (isResponsiveMenuVisible()) {
813				$('#site-header').removeClass('hidden');
814				$('.menu-overlay').addClass('mobile');
815			} else {
816				$('.menu-overlay').removeClass('mobile');
817			}
818			$('.menu-overlay').addClass('active');
819			$(document).on('keydown.overlay-close', function(event) {
820				if (event.keyCode == 27) {
821					$element.click();
822				}
823			});
824			$('#primary-menu').on('click.overlay-close', 'li:not(.menu-item-search)', function() {
825				$element.click();
826			});
827		}
828	});
829
830	$('.mobile-menu-layout-slide-horizontal .primary-navigation #primary-menu li.menu-item-current, .mobile-menu-layout-slide-vertical .primary-navigation #primary-menu li.menu-item-current').each(function() {
831		if (!isResponsiveMenuVisible()) {
832			return;
833		}
834
835		$(this).addClass('opened');
836		$('> ul', this).show();
837	});
838
839	function getScrollY(elem){
840		return window.pageYOffset || document.documentElement.scrollTop;
841	}
842
843	$('.mobile-menu-layout-slide-horizontal .menu-toggle, .mobile-menu-layout-slide-vertical .menu-toggle, .mobile-menu-slide-wrapper .mobile-menu-slide-close').click(function(e) {
844		if (!isResponsiveMenuVisible()) {
845			return;
846		}
847
848		e.preventDefault();
849		$('#site-header').removeClass('hidden');
850		$('.mobile-menu-slide-wrapper').one('webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend', function(e) {
851			$(this).removeClass('animation');
852		});
853		$('.mobile-menu-slide-wrapper').addClass('animation').toggleClass('opened');
854		$('#site-header').toggleClass('menu-slide-opened');
855		if($('.mobile-menu-slide-wrapper').hasClass('opened')) {
856			$('body').data('scroll-position', getScrollY())
857			$('body').addClass('menu-scroll-locked');
858		} else {
859			$('body').removeClass('menu-scroll-locked');
860			if($('body').data('scroll-position')) {
861				window.scrollTo(0, $('body').data('scroll-position'))
862			}
863		}
864		setTimeout(function() {
865			$(document).on('click.mobile-menu-out-click', function(e) {
866				if($('.mobile-menu-slide-wrapper').hasClass('opened')) {
867					if(!$(e.target).is('#site-header *') && !$(e.target).is('#thegem-perspective *')) {
868						e.preventDefault();
869						$('.mobile-menu-slide-wrapper .mobile-menu-slide-close').trigger('click');
870						$(document).off('click.mobile-menu-out-click');
871					}
872				}
873			});
874		}, 500);
875	});
876
877	if (isResponsiveMenuVisible() && typeof window.gemResponsiveMenuClicked !== 'undefined' && window.gemResponsiveMenuClicked) {
878		$('.primary-navigation .menu-toggle').trigger('click');
879		window.gemResponsiveMenuClicked = null;
880	}
881
882	$('.mobile-menu-layout-slide-horizontal .primary-navigation #primary-menu .menu-item-parent-toggle, .mobile-menu-layout-slide-vertical .primary-navigation #primary-menu .menu-item-parent-toggle').on('click', function(e) {
883		if (!isResponsiveMenuVisible()) {
884			return;
885		}
886
887		e.preventDefault();
888		var self = this;
889		$(this).closest('li').toggleClass('opened');
890		$(this).siblings('ul').slideToggle(200, function() {
891			if (!$(self).closest('li').hasClass('opened')) {
892				$(self).siblings('ul').find('li').removeClass('opened');
893				$(self).siblings('ul').css('display', '');
894				$(self).siblings('ul').find('ul').css('display', '');
895			}
896		});
897	});
898
899	$('.header-layout-overlay #primary-menu .menu-item-parent-toggle, .mobile-menu-layout-overlay .primary-navigation #primary-menu .menu-item-parent-toggle').on('click', function(e) {
900		//if(!$('#primary-menu').hasClass('no-responsive')) return ;
901
902		e.preventDefault();
903		e.stopPropagation();
904
905		if (!$('#primary-menu').hasClass('no-responsive') && !$(this).hasClass('menu-item-parent-toggle')) {
906			return;
907		}
908
909		var $itemLink = $(this);
910		var $item = $itemLink.closest('li');
911		if($item.hasClass('menu-item-parent') && ($item.closest('ul').hasClass('nav-menu') || $item.parent().closest('li').hasClass('menu-overlay-item-open'))) {
912			e.preventDefault();
913			if($item.hasClass('menu-overlay-item-open')) {
914				$(' > ul, .menu-overlay-item-open > ul', $item).each(function() {
915					$(this).css({height: $(this).outerHeight()+'px'});
916				});
917				setTimeout(function() {
918					$(' > ul, .menu-overlay-item-open > ul', $item).css({height: ''});
919					$('.menu-overlay-item-open', $item).add($item).removeClass('menu-overlay-item-open');
920				}, 50);
921			} else {
922				var $oldActive = $('.primary-navigation .menu-overlay-item-open').not($item.parents());
923				$('> ul', $oldActive).not($item.parents()).each(function() {
924					$(this).css({height: $(this).outerHeight()+'px'});
925				});
926				setTimeout(function() {
927					$('> ul', $oldActive).not($item.parents()).css({height: ''});
928					$oldActive.removeClass('menu-overlay-item-open');
929				}, 50);
930				$('> ul', $item).css({height: 'auto'});
931				var itemHeight = $('> ul', $item).outerHeight();
932				$('> ul', $item).css({height: ''});
933				setTimeout(function() {
934					$('> ul', $item).css({height: itemHeight+'px'});
935					$item.addClass('menu-overlay-item-open');
936					$('> ul', $item).one('webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend', function() {
937						$('> ul', $item).css({height: 'auto'});
938					});
939				}, 50);
940			}
941		}
942	});
943
944	$('.vertical-toggle').click(function(e) {
945		e.preventDefault();
946		$(this).closest('#site-header-wrapper').toggleClass('vertical-active');
947	});
948
949	$(function() {
950		$(window).resize(function() {
951			if (window.menuResizeTimeoutHandler) {
952				clearTimeout(window.menuResizeTimeoutHandler);
953			}
954			window.menuResizeTimeoutHandler = setTimeout(primary_menu_reinit, 50);
955		});
956	});
957
958	$('#primary-navigation').on('click', 'a', function(e) {
959		var $item = $(this);
960		if($('#primary-menu').hasClass('no-responsive') && window.gemSettings.isTouch && $item.next('ul').length) {
961			e.preventDefault();
962		}
963	});
964
965	$(document).on('click', function(e) {
966		if ($('.hamburger-overlay').hasClass('active') && !$(e.target).closest("#primary-menu").length && !$(e.target).closest(".hamburger-toggle").length) {
967			$('.hamburger-toggle').trigger('click');
968		}
969
970		if ($("#site-header-wrapper").hasClass('vertical-active')) {
971			if (!$("#site-header-wrapper").is(e.target) && $("#site-header-wrapper").has(e.target).length === 0) {
972				$('.vertical-toggle').trigger('click');
973			}
974		}
975	});
976
977})(jQuery);
978
979// Menu perspective
980(function($) {
981	var transitionEndEvent = {
982			'WebkitTransition': 'webkitTransitionEnd',
983			'MozTransition': 'transitionend',
984			'OTransition': 'oTransitionEnd',
985			'msTransition': 'MSTransitionEnd',
986			'transition': 'transitionend'
987		}[ window.supportedTransition ],
988		clickEventName = 'click';
989
990	function initPerspective() {
991		var $menuToggleButton = $('.perspective-toggle'),
992			$perspective = $('#thegem-perspective'),
993			$page = $('#page');
994
995		if (!$perspective.length) {
996			return false;
997		}
998
999		$menuToggleButton.on(clickEventName, function(event) {
1000			if ($perspective.hasClass('animate')) {
1001				return;
1002			}
1003
1004			var documentScrollTop = $(window).scrollTop();
1005			$(window).scrollTop(0);
1006
1007			var pageWidth = $page.outerWidth(),
1008				perspectiveWidth = $perspective.outerWidth(),
1009				pageCss = {
1010					width: pageWidth
1011				};
1012
1013			if (pageWidth < perspectiveWidth) {
1014				pageCss.marginLeft = $page[0].offsetLeft;
1015			}
1016
1017			$page.css(pageCss);
1018
1019			$perspective.addClass('modalview animate');
1020			$page.scrollTop(documentScrollTop);
1021			//$(window).trigger('perspective-modalview-opened');
1022			event.preventDefault();
1023			event.stopPropagation ? event.stopPropagation() : (event.cancelBubble=true);
1024		});
1025
1026		$('#primary-navigation').on(clickEventName, function(event) {
1027			if (isResponsiveMenuVisible()) {
1028				return;
1029			}
1030			event.stopPropagation ? event.stopPropagation() : (event.cancelBubble=true);
1031		});
1032
1033		$('#thegem-perspective .perspective-menu-close').on(clickEventName, function(event) {
1034			$perspective.click();
1035			event.preventDefault();
1036			event.stopPropagation ? event.stopPropagation() : (event.cancelBubble=true);
1037		});
1038
1039		$perspective.on(clickEventName, function(event) {
1040			if (!$perspective.hasClass('animate')) {
1041				return;
1042			}
1043
1044			var onEndTransitionCallback = function(event) {
1045				if (window.supportsTransitions && (event.originalEvent.target.id !== 'page' || event.originalEvent.propertyName.indexOf('transform' ) == -1)) {
1046					return;
1047				}
1048
1049				$(this).off(transitionEndEvent, onEndTransitionCallback);
1050				var pageScrollTop = $page.scrollTop();
1051				$perspective.removeClass('modalview');
1052				$page.css({
1053					width: '',
1054					marginLeft: ''
1055				});
1056				$(window).scrollTop(pageScrollTop);
1057				$page.scrollTop(0);
1058				$(window).resize();
1059				//$(window).trigger('perspective-modalview-closed');
1060			};
1061
1062			if (window.supportsTransitions) {
1063				$perspective.on(transitionEndEvent, onEndTransitionCallback);
1064			} else {
1065				onEndTransitionCallback.call();
1066			}
1067
1068			$perspective.removeClass('animate');
1069		});
1070	}
1071
1072	initPerspective();
1073})(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.