// source --> https://dermepil.ro/pitesti/wp-content/themes/thegem/js/thegem-menu_init.js?ver=5.9.5.2 
function supportsTransitions() {
	return getSupportedTransition() != '';
}

function getSupportedTransition() {
	var b = document.body || document.documentElement,
		s = b.style,
		p = 'transition';

	if (typeof s[p] == 'string') { return p; }

	// Tests for vendor specific prop
	var v = ['Moz', 'webkit', 'Webkit', 'Khtml', 'O', 'ms'];
	p = p.charAt(0).toUpperCase() + p.substr(1);

	for (var i=0; i<v.length; i++) {
		if (typeof s[v[i] + p] == 'string') { return true; }
	}

	return '';
}
window.supportedTransition = getSupportedTransition();
window.supportsTransitions = supportsTransitions();

function supportsAnimations() {
	return getSupportedAnimation() != '';
}

function getSupportedAnimation() {
	var t,
		el = document.createElement("fakeelement");

	var animations = {
		"animation"	  : "animationend",
		"OAnimation"	 : "oAnimationEnd",
		"MozAnimation"   : "animationend",
		"WebkitAnimation": "webkitAnimationEnd",
		'msAnimation' : 'MSAnimationEnd'
	};

	for (t in animations){
		if (el.style[t] !== undefined) {
			return t;
		}
	}
	return '';
}
window.supportedAnimation = getSupportedAnimation();
window.supportsAnimations = supportsAnimations();

function getMobileMenuType() {
	if(!document.getElementById('site-header')) return 'default';
	var m = document.getElementById('site-header').className.match(/mobile-menu-layout-([a-zA-Z0-9]+)/);
	window.gemMobileMenuType = m ? m[1] : 'default';
	return window.gemMobileMenuType;
}
getMobileMenuType();

(function() {
	var logoFixTimeout = false;
	window.thegemDesktopMenuLogoFixed = false;
	window.thegemWasDesktop = false;
	window.megaMenuWithSettingsFixed = false;

	function getElementPosition(elem) {
		var w = elem.offsetWidth,
			h = elem.offsetHeight,
			l = 0,
			t = 0;

		while (elem) {
			l += elem.offsetLeft;
			t += elem.offsetTop;
			elem = elem.offsetParent;
		}
		return {"left":l, "top":t, "width": w, "height":h};
	}

	function fixMenuLogoPosition() {
		if (logoFixTimeout) {
			clearTimeout(logoFixTimeout);
		}

		var headerMain = document.querySelector('#site-header .header-main');
		if (headerMain == null) {
			return false;
		}

		var headerMainClass = headerMain.className;
		if (headerMainClass.indexOf('logo-position-menu_center') == -1 || headerMainClass.indexOf('header-layout-fullwidth_hamburger') != -1 || headerMainClass.indexOf('header-layout-vertical') != -1) {
			return false;
		}

		logoFixTimeout = setTimeout(function() {
			var page = document.getElementById('page'),
				primaryMenu = document.getElementById('primary-menu'),
				primaryNavigation = document.getElementById('primary-navigation'),
				windowWidth = page.offsetWidth,
				pageComputedStyles = window.getComputedStyle(page, null),
				pageMargin = parseFloat(pageComputedStyles['marginLeft']);

			if (isNaN(pageMargin)) {
				pageMargin = 0;
			}

			if (headerMainClass.indexOf('header-layout-fullwidth') != -1) {
				var logoItem = primaryMenu.querySelector('.menu-item-logo'),
					items = primaryNavigation.querySelectorAll('#primary-menu > li'),
					lastItem = null;

				for (var i = items.length - 1; i >=0; i--) {
					if (items[i].className.indexOf('mobile-only') == -1) {
						lastItem = items[i];
						break;
					}
				}

				primaryMenu.style.display = '';
				logoItem.style.marginLeft = '';
				logoItem.style.marginRight = '';

				if (windowWidth < 1212 || lastItem === null) {
					primaryMenu.classList.remove("menu_center-preload");
					return;
				}

				window.thegemDesktopMenuLogoFixed = true;

				primaryMenu.style.display = 'block';

				var pageCenter = windowWidth / 2 + pageMargin,
					logoOffset = getElementPosition(logoItem),
					offset = pageCenter - logoOffset.left - logoItem.offsetWidth / 2;

				logoItem.style.marginLeft = offset + 'px';

				var primaryMenuOffsetWidth = primaryMenu.offsetWidth,
					primaryMenuOffsetLeft = getElementPosition(primaryMenu).left,
					lastItemOffsetWidth = lastItem.offsetWidth,
					lastItemOffsetLeft = getElementPosition(lastItem).left,
					rightItemsOffset = primaryMenuOffsetWidth - lastItemOffsetLeft - lastItemOffsetWidth + primaryMenuOffsetLeft;

				logoItem.style.marginRight = rightItemsOffset + 'px';
			} else {
				if (windowWidth < 1212) {
					primaryNavigation.style.textAlign = '';
					primaryMenu.style.position = '';
					primaryMenu.style.left = '';
					primaryMenu.classList.remove("menu_center-preload");
					return;
				}

				window.thegemDesktopMenuLogoFixed = true;

				primaryNavigation.style.textAlign = 'left';
				primaryMenu.style.left = 0 + 'px';

				var pageCenter = windowWidth / 2,
					primaryMenuOffsetLeft = getElementPosition(primaryMenu).left,
					logoOffset = getElementPosition(document.querySelector('#site-header .header-main #primary-navigation .menu-item-logo')),
					pageOffset = getElementPosition(page),
					offset = pageCenter - (logoOffset.left - pageOffset.left) - document.querySelector('#site-header .header-main #primary-navigation .menu-item-logo').offsetWidth / 2;

				if (primaryMenuOffsetLeft + offset >= 0) {
					primaryMenu.style.position = 'relative';
					primaryMenu.style.left = offset + 'px';
				} else {
					primaryMenu.style.position = '';
					primaryMenu.style.left = '';
				}
			}
			primaryMenu.classList.remove("menu_center-preload");
			//primaryMenu.style.opacity = '1';
		}, 50);
	}

	window.fixMenuLogoPosition = fixMenuLogoPosition;

	if (window.gemOptions.clientWidth > 1212) {
		window.addEventListener('load', function(event) {
			window.fixMenuLogoPosition();
		}, false);
	}
})();


(function($) {
	/* PRIMARY MENU */

	var isVerticalMenu = $('.header-main').hasClass('header-layout-vertical'),
		isHamburgerMenu = $('.header-main').hasClass('header-layout-fullwidth_hamburger'),
		isPerspectiveMenu = $('#thegem-perspective').length > 0;

	$(window).on('resize', function() {
		window.updateGemClientSize(false);
		window.updateGemInnerSize();
	});

	window.menuResizeTimeoutHandler = false;

	var megaMenuSettings = {};

	function getOffset(elem) {
		if (elem.getBoundingClientRect && window.gemBrowser.platform.name != 'ios'){
			var bound = elem.getBoundingClientRect(),
				html = elem.ownerDocument.documentElement,
				htmlScroll = getScroll(html),
				elemScrolls = getScrolls(elem),
				isFixed = (styleString(elem, 'position') == 'fixed');
			return {
				x: bound.left + elemScrolls.x + ((isFixed) ? 0 : htmlScroll.x) - html.clientLeft,
				y: bound.top  + elemScrolls.y + ((isFixed) ? 0 : htmlScroll.y) - html.clientTop
			};
		}

		var element = elem, position = {x: 0, y: 0};
		if (isBody(elem)) return position;

		while (element && !isBody(element)){
			position.x += element.offsetLeft;
			position.y += element.offsetTop;

			if (window.gemBrowser.name == 'firefox'){
				if (!borderBox(element)){
					position.x += leftBorder(element);
					position.y += topBorder(element);
				}
				var parent = element.parentNode;
				if (parent && styleString(parent, 'overflow') != 'visible'){
					position.x += leftBorder(parent);
					position.y += topBorder(parent);
				}
			} else if (element != elem && window.gemBrowser.name == 'safari'){
				position.x += leftBorder(element);
				position.y += topBorder(element);
			}

			element = element.offsetParent;
		}
		if (window.gemBrowser.name == 'firefox' && !borderBox(elem)){
			position.x -= leftBorder(elem);
			position.y -= topBorder(elem);
		}
		return position;
	};

	function getScroll(elem){
		return {x: window.pageXOffset || document.documentElement.scrollLeft, y: window.pageYOffset || document.documentElement.scrollTop};
	};

	function getScrolls(elem){
		var element = elem.parentNode, position = {x: 0, y: 0};
		while (element && !isBody(element)){
			position.x += element.scrollLeft;
			position.y += element.scrollTop;
			element = element.parentNode;
		}
		return position;
	};

	function styleString(element, style) {
		return $(element).css(style);
	};

	function styleNumber(element, style){
		return parseInt(styleString(element, style)) || 0;
	};

	function borderBox(element){
		return styleString(element, '-moz-box-sizing') == 'border-box';
	};

	function topBorder(element){
		return styleNumber(element, 'border-top-width');
	};

	function leftBorder(element){
		return styleNumber(element, 'border-left-width');
	};

	function isBody(element){
		return (/^(?:body|html)$/i).test(element.tagName);
	};


	function checkMegaMenuSettings() {
		if (window.customMegaMenuSettings == undefined || window.customMegaMenuSettings == null) {
			return false;
		}

		var uri = window.location.pathname;

		window.customMegaMenuSettings.forEach(function(item) {
			for (var i = 0; i < item.urls.length; i++) {
				if (uri.match(item.urls[i])) {
					megaMenuSettings[item.menuItem] = item.data;
				}
			}
		});
	}

	function fixMegaMenuWithSettings() {
		if (isResponsiveMenuVisible() && !window.thegemWasDesktop) {
			return false;
		}

		window.megaMenuWithSettingsFixed = true;

		checkMegaMenuSettings();

		$('#primary-menu > li.megamenu-enable').each(function() {
			var m = this.className.match(/(menu-item-(\d+))/);
			if (!m) {
				return;
			}

			var itemId = parseInt(m[2]);
			if (megaMenuSettings[itemId] == undefined || megaMenuSettings[itemId] == null) {
				return;
			}

			var $item = $('> ul', this);

			if (megaMenuSettings[itemId].masonry != undefined) {
				if (megaMenuSettings[itemId].masonry) {
					$item.addClass('megamenu-masonry');
				} else {
					$item.removeClass('megamenu-masonry');
				}
			}

			if (megaMenuSettings[itemId].style != undefined) {
				$(this).removeClass('megamenu-style-default megamenu-style-grid').addClass('megamenu-style-' + megaMenuSettings[itemId].style);
			}

			var css = {};

			if (megaMenuSettings[itemId].backgroundImage != undefined) {
				css.backgroundImage = megaMenuSettings[itemId].backgroundImage;
			}

			if (megaMenuSettings[itemId].backgroundPosition != undefined) {
				css.backgroundPosition = megaMenuSettings[itemId].backgroundPosition;
			}

			if (megaMenuSettings[itemId].padding != undefined) {
				css.padding = megaMenuSettings[itemId].padding;
			}

			if (megaMenuSettings[itemId].borderRight != undefined) {
				css.borderRight = megaMenuSettings[itemId].borderRight;
			}

			$item.css(css);
		});
	}

	function isResponsiveMenuVisible() {
		// var menuToggleDisplay = $('.menu-toggle').css('display');
		// return menuToggleDisplay == 'block' || menuToggleDisplay == 'inline-block';
		return $('.primary-navigation .menu-toggle').is(':visible');
	}
	window.isResponsiveMenuVisible = isResponsiveMenuVisible;

	function isTopAreaVisible() {
		return window.gemSettings.topAreaMobileDisable ? window.gemOptions.clientWidth >= 768 : true;
	}
	window.isTopAreaVisible = isTopAreaVisible;

	function isVerticalToggleVisible() {
		return window.gemOptions.clientWidth > 1600;
	}

	$('#primary-menu > li.megamenu-enable').on('mouseenter', function() {
			fix_megamenu_position(this);
	});

	$('#primary-menu > li.megamenu-enable:hover').each(function() {
		fix_megamenu_position(this);
	});

	$('#primary-menu > li.megamenu-enable').each(function() {
		var $item = $('> ul', this);
		if($item.length == 0) return;
		$item.addClass('megamenu-item-inited');
	});

	function fix_megamenu_position(elem, containerWidthCallback) {
		if (!$('.megamenu-inited', elem).length && isResponsiveMenuVisible()) {
			return false;
		}

			var $item = $('> ul', elem);
			if($item.length == 0) return;
			var self = $item.get(0);

			$item.addClass('megamenu-item-inited');

			var default_item_css = {
				width: 'auto',
				height: 'auto'
			};

			if (!isVerticalMenu && !isHamburgerMenu && !isPerspectiveMenu) {
				default_item_css.left = 0;
			}

			$item
				.removeClass('megamenu-masonry-inited megamenu-fullwidth')
				.css(default_item_css);

			$(' > li', $item).css({
				left: 0,
				top: 0
			}).each(function() {
				var old_width = $(this).data('old-width') || -1;
				if (old_width != -1) {
					$(this).width(old_width).data('old-width', -1);
				}
			});

			if (isResponsiveMenuVisible()) {
				return;
			}

			if (containerWidthCallback !== undefined) {
				var container_width = containerWidthCallback();
			} else if (isVerticalMenu) {
				var container_width = window.gemOptions.clientWidth - $('#site-header-wrapper').outerWidth();
			} else if (isPerspectiveMenu) {
				var container_width = window.gemOptions.clientWidth - $('#primary-navigation').outerWidth();
			} else if (isHamburgerMenu) {
				var container_width = window.gemOptions.clientWidth - $('#primary-menu').outerWidth();
			} else {
				var $container = $item.closest('.header-main'),
					container_width = $container.width(),
					container_padding_left = parseInt($container.css('padding-left')),
					container_padding_right = parseInt($container.css('padding-right')),
					parent_width = $item.parent().outerWidth();
			}

			var megamenu_width = $item.outerWidth();

			if (megamenu_width > container_width) {
				megamenu_width = container_width;
				var new_megamenu_width = container_width - parseInt($item.css('padding-left')) - parseInt($item.css('padding-right'));
				var columns = $item.data('megamenu-columns') || 4;
				var margin = 0;
				$(' > li.menu-item', $item).each(function (index) {
					if (index < columns) {
						margin += parseInt($(this).css('margin-left'));
					}
				});
				var column_width = parseFloat(new_megamenu_width - margin) / columns;
				var column_width_int = parseInt(column_width);
				$(' > li', $item).each(function() {
					$(this).data('old-width', $(this).width()).css('width', column_width_int);
				});
				$item.addClass('megamenu-fullwidth').width(new_megamenu_width - (column_width - column_width_int) * columns);
			}

			if (!isVerticalMenu && !isHamburgerMenu && !isPerspectiveMenu && containerWidthCallback === undefined) {
				if (megamenu_width > parent_width) {
					var left = -(megamenu_width - parent_width) / 2;
				} else {
					var left = 0;
				}

				var container_offset = getOffset($container[0]);
				var megamenu_offset = getOffset(self);

				if ((megamenu_offset.x - container_offset.x - container_padding_left + left) < 0) {
					left = -(megamenu_offset.x - container_offset.x - container_padding_left);
				}

				if ((megamenu_offset.x + megamenu_width + left) > (container_offset.x + $container.outerWidth() - container_padding_right)) {
					left -= (megamenu_offset.x + megamenu_width + left) - (container_offset.x + $container.outerWidth() - container_padding_right);
				}

				$item.css('left', left).css('left');
			}

			if ($item.hasClass('megamenu-masonry')) {
				var positions = {},
					max_bottom = 0;

				$item.width($item.width() - 1);
				var new_row_height = $('.megamenu-new-row', $item).outerHeight() + parseInt($('.megamenu-new-row', $item).css('margin-bottom'));

				$('> li.menu-item', $item).each(function() {
					var pos = $(this).position();
					if (positions[pos.left] != null && positions[pos.left] != undefined) {
						var top_position = positions[pos.left];
					} else {
						var top_position = pos.top;
					}
					positions[pos.left] = top_position + $(this).outerHeight() + new_row_height + parseInt($(this).css('margin-bottom'));
					if (positions[pos.left] > max_bottom)
						max_bottom = positions[pos.left];
					$(this).css({
						left: pos.left,
						top: top_position
					})
				});

				$item.height(max_bottom - new_row_height - parseInt($item.css('padding-top')) - 1);
				$item.addClass('megamenu-masonry-inited');
			}

			if ($item.hasClass('megamenu-empty-right')) {
				var mega_width = $item.width();
				var max_rights = {
					columns: [],
					position: -1
				};

				$('> li.menu-item', $item).removeClass('megamenu-no-right-border').each(function() {
					var pos = $(this).position();
					var column_right_position = pos.left + $(this).width();

					if (column_right_position > max_rights.position) {
						max_rights.position = column_right_position;
						max_rights.columns = [];
					}

					if (column_right_position == max_rights.position) {
						max_rights.columns.push($(this));
					}
				});

				if (max_rights.columns.length && max_rights.position >= (mega_width - 7)) {
					max_rights.columns.forEach(function($li) {
						$li.addClass('megamenu-no-right-border');
					});
				}
			}

			if (isVerticalMenu || isHamburgerMenu || isPerspectiveMenu) {
				var clientHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight,
					itemOffset = $item.offset(),
					itemHeight = $item.outerHeight(),
					scrollTop = $(window).scrollTop();

				if (itemOffset.top - scrollTop + itemHeight > clientHeight) {
					$item.css({
						top: clientHeight - itemOffset.top + scrollTop - itemHeight - 20
					});
				}
			}

			$item.addClass('megamenu-inited');
	}

	window.fix_megamenu_position = fix_megamenu_position;

	$('#primary-menu > li.megamenu-template-enable').each(function() {

		if ($(this).parents('.thegem-te-menu > nav').hasClass("thegem-te-menu__overlay")) {
			$(this).removeClass('megamenu-template-enable');
			$(this).find('.megamenu-template').remove();
			return;
		}

		let $item = $('.megamenu-template', this);
		if ($item.length == 0) return;
		fix_megamenu_template_position(this);

		if ($item.data('template')) {
			let templateID = $item.data('template');
			$.ajax({
				url: thegem_dlmenu_settings.ajax_url,
				data: {
					'action': 'get_megamenu_template',
					'id': templateID
				},
				dataType: 'json',
				method: 'POST',
				success: function (response) {
					if (response.status === 'success') {
						$item.html(response.data);
					}
				},
				error: function () {
					console.log('loading megamenu template ajax error');
				}
			});
		}
		$item.addClass('megamenu-template-item-inited');

		$(this).on('mouseenter', function() {
				fix_megamenu_template_position(this);
		});
	});

	function fix_megamenu_template_position(elem, containerWidthCallback) {
		if (!$('.megamenu-template-inited', elem).length && isResponsiveMenuVisible()) {
			return false;
		}

		let $item = $('.megamenu-template', elem);
		if ($item.length == 0) return;
		let self = $item.get(0);

		$item.addClass('megamenu-template-item-inited');
		let isWidth100 = $item.hasClass("template-width-fullwidth");

		let default_item_css = {
			// 	width: 'auto',
			// 	height: 'auto'
		};

		if (!isVerticalMenu && !isHamburgerMenu && !isPerspectiveMenu) {
			default_item_css.left = 0;
		}

		$item.css(default_item_css);

		if (isResponsiveMenuVisible()) {
			return;
		}

		let $container = $item.closest('.header-main'),
			container_width,
			container_padding_left,
			container_padding_right,
			parent_width;
		if (containerWidthCallback !== undefined) {
			container_width = containerWidthCallback();
		} else if (isVerticalMenu) {
			container_width = window.gemOptions.clientWidth - $('#site-header-wrapper').outerWidth();
		} else if (isPerspectiveMenu) {
			container_width = window.gemOptions.clientWidth - $('#primary-navigation').outerWidth();
		} else if (isHamburgerMenu) {
			container_width = window.gemOptions.clientWidth - $('#primary-menu').outerWidth();
		} else {
			container_width = $container.width();
			container_padding_left = parseFloat($container.css('padding-left'));
			container_padding_right = parseFloat($container.css('padding-right'));
			parent_width = $item.parent().outerWidth();
		}

		let megamenu_width = $item.outerWidth();

		if (isWidth100 || megamenu_width > document.body.clientWidth) {
			$item.css('width', document.body.clientWidth);
		} else if ($item.hasClass("template-width-boxed") && !isVerticalMenu && !isHamburgerMenu && !isPerspectiveMenu) {
			$item.css('width', container_width);
		}
		megamenu_width = $item.outerWidth();

		if (!isVerticalMenu && !isHamburgerMenu && !isPerspectiveMenu && containerWidthCallback === undefined) {
			let left = 0;

			let container_offset = getOffset($container[0]);
			let megamenu_offset = getOffset(self);

			if (isWidth100) {
				left = -megamenu_offset.x;
			} else {
				if (megamenu_width > container_width) {
					left = container_offset.x - megamenu_offset.x - (megamenu_width - container_width)/2;
				} else if (megamenu_width === container_width) {
					left = container_offset.x - megamenu_offset.x + container_padding_left;
				} else {

					if (megamenu_width > parent_width) {
						left = -(megamenu_width - parent_width) / 2;
					}

					if ((megamenu_offset.x - container_offset.x - container_padding_left + left) < 0) {
						left = -(megamenu_offset.x - container_offset.x - container_padding_left);
					}

					if ((megamenu_offset.x + megamenu_width + left) > (container_offset.x + $container.outerWidth() - container_padding_right)) {
						left -= (megamenu_offset.x + megamenu_width + left) - (container_offset.x + $container.outerWidth() - container_padding_right);
					}
				}
			}

			$item.css('left', left).css('left');
		}

		if (isVerticalMenu || isHamburgerMenu || isPerspectiveMenu) {
			if (megamenu_width > container_width) {
				$item.css('width', container_width);
			}
			let clientHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight,
				itemOffset = $item.offset(),
				itemHeight = $item.outerHeight(),
				scrollTop = $(window).scrollTop();

			if (itemOffset.top - scrollTop + itemHeight > clientHeight) {
				$item.css({
					top: clientHeight - itemOffset.top + scrollTop - itemHeight - 20
				});
			}
		}

		$item.addClass('megamenu-template-inited');
	}

	function primary_menu_reinit() {
		if(isResponsiveMenuVisible()) {
			if (window.gemMobileMenuType == 'default') {
				var $submenuDisabled = $('#primary-navigation .dl-submenu-disabled');
				if ($submenuDisabled.length) {
					$submenuDisabled.addClass('dl-submenu').removeClass('dl-submenu-disabled');
				}
			}
			if ($('#primary-menu').hasClass('no-responsive')) {
				$('#primary-menu').removeClass('no-responsive');
			}
			if (!$('#primary-navigation').hasClass('responsive')) {
				$('#primary-navigation').addClass('responsive');
			}
			$('.menu-overlay').addClass('mobile');
			if (window.thegemDesktopMenuLogoFixed) {
				window.fixMenuLogoPosition();
			}

			if($('body').hasClass('mobile-cart-position-top')) {
				$('.mobile-cart > .minicart-menu-link.temp').remove();
				$('#primary-navigation .menu-item-cart > *').appendTo('.mobile-cart');
			}
		} else {
			window.thegemWasDesktop = true;

			if (window.gemMobileMenuType == 'overlay' && !$('.header-layout-overlay').length && $('.menu-overlay').hasClass('active')) {
				$('.mobile-menu-layout-overlay .menu-toggle').trigger('click');
			}

			$('#primary-navigation').addClass('without-transition');

			if (window.gemMobileMenuType == 'default') {
				$('#primary-navigation .dl-submenu').addClass('dl-submenu-disabled').removeClass('dl-submenu');
			}
			$('#primary-menu').addClass('no-responsive');
			$('#primary-navigation').removeClass('responsive');
			$('.menu-overlay').removeClass('mobile');

			window.fixMenuLogoPosition();

			if (!window.megaMenuWithSettingsFixed) {
				fixMegaMenuWithSettings();
			}

			$('#primary-navigation').removeClass('without-transition');

			if($('body').hasClass('mobile-cart-position-top')) {
				$('.mobile-cart > .minicart-menu-link.temp').remove();
				$('.mobile-cart > *').appendTo('#primary-navigation .menu-item-cart');
			}
		}
	}

	$(function() {
		function getScrollY(elem){
			return window.pageYOffset || document.documentElement.scrollTop;
		}
		$(document).on('click touchend', '.mobile-cart > a', function(e) {
			e.preventDefault();
			$('.mobile-cart .minicart').addClass('minicart-show');
			$('body').data('scroll-position', getScrollY())
			$('body').addClass('mobile-minicart-opened');
		});
		$(document).on('click', '.mobile-cart-header-close, .mobile-minicart-overlay', function(e) {
			e.preventDefault();
			$('.mobile-cart .minicart').removeClass('minicart-show');
			$('body').removeClass('mobile-minicart-opened');
			if($('body').data('scroll-position')) {
				window.scrollTo(0, $('body').data('scroll-position'))
			}
		});

		if (isResponsiveMenuVisible() && typeof window.gemResponsiveCartClicked !== 'undefined' && window.gemResponsiveCartClicked) {
			$('.mobile-cart-position-top .mobile-cart > a').trigger('click');
			window.gemResponsiveCartClicked = null;
		}

	});

	if (window.gemMobileMenuType == 'default') {
		$('#primary-navigation .submenu-languages').addClass('dl-submenu');
	}
	$('#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');
	$('#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>');

	fixMegaMenuWithSettings();

	if (window.gemMobileMenuType == 'default') {
		var updateMobileMenuPosition = function() {
			var siteHeaderHeight = $('#site-header').outerHeight(),
				windowHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;

			if ($('#thegem-perspective #primary-menu').length) {
				$('#thegem-perspective > .mobile-menu-layout-default').css({
					top: siteHeaderHeight
				});
			}

			$('#primary-menu').css({
				maxHeight: windowHeight - siteHeaderHeight
			});
		};

		$(window).on('resize', function() {
			if (isResponsiveMenuVisible() && $('#primary-menu').hasClass('dl-menuopen')) {
				setTimeout(updateMobileMenuPosition, 50);
			} else {
				$('#primary-menu').css({
					maxHeight: ''
				});
			}
		});

		$('#site-header .dl-trigger').on('click', function() {
			updateMobileMenuPosition();
		});

		if (typeof $.fn.dlmenu === 'function') {
			$('#primary-navigation').dlmenu({
				animationClasses: {
					classin : 'dl-animate-in',
					classout : 'dl-animate-out'
				},
				onLevelClick: function (el, name) {
					//$('html, body').animate({ scrollTop : 0 });
				},
				backLabel: thegem_dlmenu_settings.backLabel,
				showCurrentLabel: thegem_dlmenu_settings.showCurrentLabel
			});
		}
	}
	primary_menu_reinit();

	$('#primary-menu > li').on( 'mouseenter', function() {
			var $items = $('ul:not(.minicart ul):not(.woocommerce-mini-cart), .minicart, .minisearch, .hidden-sidebar', this);
			$items.removeClass('invert vertical-invert');

			if (!$(this).hasClass('megamenu-enable') && !$(this).hasClass('megamenu-template-enable')) {
				$items.css({top: ''});
			}

			if ($(this).hasClass('megamenu-enable') || $(this).hasClass('megamenu-template-enable') ||
					$(this).closest('.header-layout-overlay').length ||
					$(this).closest('.mobile-menu-layout-overlay').length && isResponsiveMenuVisible()) {
				return;
			}

			var topItemTranslate = 0;
			if ($('>ul', this).css('transform')) {
				topItemTranslate = parseInt($('>ul', this).css('transform').split(',')[5]);
			}
			if (isNaN(topItemTranslate)) {
				topItemTranslate = 0;
			}
			var windowScroll = $(window).scrollTop(),
				siteHeaderOffset = $('#site-header').offset(),
				siteHeaderOffsetTop = siteHeaderOffset.top - windowScroll,
				siteHeaderHeight = $('#site-header').outerHeight(),
				pageOffset = $('#page').offset(),
				pageWidth = $('#page').width();

			$items.each(function() {
				var $item = $(this),
					self = this,
					$parentList = $item.parent().closest('ul');

				var itemOffset = $item.offset(),
					itemOffsetTop = itemOffset.top - windowScroll,
					itemOffsetLeft = itemOffset.left;


				var leftItemTranslate = 0;
				if ($item.css('transform')) {
					leftItemTranslate = parseInt(getComputedStyle(this).transform.split(',')[4]);
					var levelUL = getLevelULByPrimaryMenu(self);
					if (levelUL > 0) {
						leftItemTranslate = leftItemTranslate*levelUL;
					}
				}
				if (isNaN(leftItemTranslate)) {
					leftItemTranslate = 0;
				}

				if ($parentList.hasClass('invert')) {
					if ($parentList.offset().left - $item.outerWidth() > pageOffset.left) {
						$item.addClass('invert');
					}
				} else {
					if (itemOffsetLeft - leftItemTranslate - pageOffset.left + $item.outerWidth() > pageWidth) {
						$item.addClass('invert');
					}
				}

				if (isVerticalMenu || isPerspectiveMenu || isHamburgerMenu) {
					if (itemOffsetTop - topItemTranslate + $item.outerHeight() > $(window).height()) {
						$item.addClass('vertical-invert');
						var itemOffsetFix = itemOffsetTop  - topItemTranslate + $item.outerHeight() - $(window).height();
						if (itemOffsetTop - topItemTranslate - itemOffsetFix < 0) {
							itemOffsetFix = 0;
						}
						$item.css({ top: -itemOffsetFix + 'px' });
					}
				} else {
					if (itemOffsetTop - topItemTranslate + $item.outerHeight() > $(window).height()) {
						$item.addClass('vertical-invert');
						var itemOffsetFix = itemOffsetTop  - topItemTranslate + $item.outerHeight() - $(window).height();
						if (itemOffsetTop - topItemTranslate - itemOffsetFix < siteHeaderOffsetTop + siteHeaderHeight) {
							itemOffsetFix -= siteHeaderOffsetTop + siteHeaderHeight - (itemOffsetTop - topItemTranslate - itemOffsetFix);
							if (itemOffsetFix < 0) {
								itemOffsetFix = 0;
							}
						}
						if(itemOffsetFix > 0) {
							$item.css({ top: -itemOffsetFix + 'px' });
						}
					}
				}
			});
	});

	function getLevelULByPrimaryMenu(item) {
		var parentUL = $(item).parent('li').parent('ul');
		var level = 0;

		while (!parentUL.is('#primary-menu')) {
			parentUL = parentUL.parent('li').parent('ul');
			level++;
		}

		return level;
	}

	$('.hamburger-toggle').on('click', function(e) {
		e.preventDefault();
		$(this).closest('#primary-navigation').toggleClass('hamburger-active');
		$('.hamburger-overlay').toggleClass('active');
	});

	$('.overlay-toggle, .mobile-menu-layout-overlay .menu-toggle').on('click', function(e) {
		var $element = $(this);
		e.preventDefault();
		if($('.menu-overlay').hasClass('active')) {
			$('.menu-overlay').removeClass('active');
			$('.primary-navigation').addClass('close');
			$('.primary-navigation').one('webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend', function(e) {
				$('.primary-navigation').removeClass('overlay-active close');
				$('.overlay-menu-wrapper').removeClass('active');
			});
			$(document).off('keydown.overlay-close');
			$('#primary-menu').off('click.overlay-close');
		} else {
			$('.overlay-menu-wrapper').addClass('active');
			$('.primary-navigation').off('webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend');
			$('.primary-navigation').addClass('overlay-active').removeClass('close');
			if (isResponsiveMenuVisible()) {
				$('#site-header').removeClass('hidden');
				$('.menu-overlay').addClass('mobile');
			} else {
				$('.menu-overlay').removeClass('mobile');
			}
			$('.menu-overlay').addClass('active');
			$(document).on('keydown.overlay-close', function(event) {
				if (event.keyCode == 27) {
					$element.trigger('click');
				}
			});
			$('#primary-menu').on('click.overlay-close', 'li:not(.menu-item-search)', function() {
				$element.trigger('click');
			});
		}
	});

	$('.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() {
		if (!isResponsiveMenuVisible()) {
			return;
		}

		$(this).addClass('opened');
		$('> ul', this).show();
	});

	function getScrollY(elem){
		return window.pageYOffset || document.documentElement.scrollTop;
	}

	$('.mobile-menu-layout-slide-horizontal .menu-toggle, .mobile-menu-layout-slide-vertical .menu-toggle, .mobile-menu-slide-wrapper .mobile-menu-slide-close').on('click', function(e) {
		if (!isResponsiveMenuVisible()) {
			return;
		}

		e.preventDefault();
		$('#site-header').removeClass('hidden');
		$('.mobile-menu-slide-wrapper').one('webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend', function(e) {
			$(this).removeClass('animation');
		});
		$('.mobile-menu-slide-wrapper').addClass('animation').toggleClass('opened');
		$('#site-header').toggleClass('menu-slide-opened');
		if($('.mobile-menu-slide-wrapper').hasClass('opened')) {
			$('body').data('scroll-position', getScrollY())
			$('body').addClass('menu-scroll-locked');
		} else {
			$('body').removeClass('menu-scroll-locked');
			if($('body').data('scroll-position')) {
				window.scrollTo(0, $('body').data('scroll-position'))
			}
		}
		setTimeout(function() {
			$(document).on('click.mobile-menu-out-click', function(e) {
				if($('.mobile-menu-slide-wrapper').hasClass('opened')) {
					if(!$(e.target).is('#site-header *') && !$(e.target).is('#thegem-perspective *')) {
						e.preventDefault();
						$('.mobile-menu-slide-wrapper .mobile-menu-slide-close').trigger('click');
						$(document).off('click.mobile-menu-out-click');
					}
				}
			});
		}, 500);
	});

	if (isResponsiveMenuVisible() && typeof window.gemResponsiveMenuClicked !== 'undefined' && window.gemResponsiveMenuClicked) {
		$('.primary-navigation .menu-toggle').trigger('click');
		window.gemResponsiveMenuClicked = null;
	}

	$(document).on('click', '.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', function(e) {
		if (!isResponsiveMenuVisible()) {
			return;
		}

		e.preventDefault();
		var self = this;
		$(this).closest('li').toggleClass('opened');
		$(this).siblings('ul').slideToggle(200, function() {
			if (!$(self).closest('li').hasClass('opened')) {
				$(self).siblings('ul').find('li').removeClass('opened');
				$(self).siblings('ul').css('display', '');
				$(self).siblings('ul').find('ul').css('display', '');
			}
		});
	});

	$('.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) {
		//if(!$('#primary-menu').hasClass('no-responsive')) return ;

		e.preventDefault();
		e.stopPropagation();

		if (!$('#primary-menu').hasClass('no-responsive') && !$(this).hasClass('menu-item-parent-toggle')) {
			return;
		}

		var $itemLink = $(this);
		var $item = $itemLink.closest('li');
		if($item.hasClass('menu-item-parent') && ($item.closest('ul').hasClass('nav-menu') || $item.parent().closest('li').hasClass('menu-overlay-item-open'))) {
			e.preventDefault();
			if($item.hasClass('menu-overlay-item-open')) {
				$(' > ul, .menu-overlay-item-open > ul', $item).each(function() {
					$(this).css({height: $(this).outerHeight()+'px'});
				});
				setTimeout(function() {
					$(' > ul, .menu-overlay-item-open > ul', $item).css({height: ''});
					$('.menu-overlay-item-open', $item).add($item).removeClass('menu-overlay-item-open');
				}, 50);
			} else {
				var $oldActive = $('.primary-navigation .menu-overlay-item-open').not($item.parents());
				$('> ul', $oldActive).not($item.parents()).each(function() {
					$(this).css({height: $(this).outerHeight()+'px'});
				});
				setTimeout(function() {
					$('> ul', $oldActive).not($item.parents()).css({height: ''});
					$oldActive.removeClass('menu-overlay-item-open');
				}, 50);
				$('> ul', $item).css({height: 'auto'});
				var itemHeight = $('> ul', $item).outerHeight();
				$('> ul', $item).css({height: ''});
				setTimeout(function() {
					$('> ul', $item).css({height: itemHeight+'px'});
					$item.addClass('menu-overlay-item-open');
					$('> ul', $item).one('webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend', function() {
						$('> ul', $item).css({height: 'auto'});
					});
				}, 50);
			}
		}
	});

	$('.vertical-toggle').on('click', function(e) {
		e.preventDefault();
		$(this).closest('#site-header-wrapper').toggleClass('vertical-active');
	});

	$(function() {
		$(window).on('resize', function() {
			if (window.menuResizeTimeoutHandler) {
				clearTimeout(window.menuResizeTimeoutHandler);
			}
			window.menuResizeTimeoutHandler = setTimeout(primary_menu_reinit, 50);
		});
	});

	$('#primary-navigation').on('click', 'a', function(e) {
		var $item = $(this);
		if($('#primary-menu').hasClass('no-responsive') && window.gemSettings.isTouch && $item.next('ul').length) {
			e.preventDefault();
		}
	});

	$(document).on('click', function(e) {
		if ($('.hamburger-overlay').hasClass('active') && !$(e.target).closest("#primary-menu").length && !$(e.target).closest(".hamburger-toggle").length) {
			$('.hamburger-toggle').trigger('click');
		}

		if ($("#site-header-wrapper").hasClass('vertical-active')) {
			if (!$("#site-header-wrapper").is(e.target) && $("#site-header-wrapper").has(e.target).length === 0) {
				$('.vertical-toggle').trigger('click');
			}
		}
	});

})(jQuery);

// Menu perspective
(function($) {
	var transitionEndEvent = {
			'WebkitTransition': 'webkitTransitionEnd',
			'MozTransition': 'transitionend',
			'OTransition': 'oTransitionEnd',
			'msTransition': 'MSTransitionEnd',
			'transition': 'transitionend'
		}[ window.supportedTransition ],
		clickEventName = 'click';

	function initPerspective() {
		var $menuToggleButton = $('.perspective-toggle'),
			$perspective = $('#thegem-perspective'),
			$page = $('#page');

		if (!$perspective.length) {
			return false;
		}

		$menuToggleButton.on(clickEventName, function(event) {
			if ($perspective.hasClass('animate')) {
				return;
			}

			var documentScrollTop = $(window).scrollTop();
			$(window).scrollTop(0);

			var pageWidth = $page.outerWidth(),
				perspectiveWidth = $perspective.outerWidth(),
				pageCss = {
					width: pageWidth
				};

			if (pageWidth < perspectiveWidth) {
				pageCss.marginLeft = $page[0].offsetLeft;
			}

			$page.css(pageCss);

			$perspective.addClass('modalview animate');
			$page.scrollTop(documentScrollTop);
			//$(window).trigger('perspective-modalview-opened');
			event.preventDefault();
			event.stopPropagation ? event.stopPropagation() : (event.cancelBubble=true);
		});

		$('#primary-navigation').on(clickEventName, function(event) {
			if (isResponsiveMenuVisible()) {
				return;
			}
			event.stopPropagation ? event.stopPropagation() : (event.cancelBubble=true);
		});

		$('#thegem-perspective .perspective-menu-close').on(clickEventName, function(event) {
			$perspective.trigger('click');
			event.preventDefault();
			event.stopPropagation ? event.stopPropagation() : (event.cancelBubble=true);
		});

		$perspective.on(clickEventName, function(event) {
			if (!$perspective.hasClass('animate')) {
				return;
			}

			var onEndTransitionCallback = function(event) {
				if (window.supportsTransitions && (event.originalEvent.target.id !== 'page' || event.originalEvent.propertyName.indexOf('transform' ) == -1)) {
					return;
				}

				$(this).off(transitionEndEvent, onEndTransitionCallback);
				var pageScrollTop = $page.scrollTop();
				$perspective.removeClass('modalview');
				$page.css({
					width: '',
					marginLeft: ''
				});
				$(window).scrollTop(pageScrollTop);
				$page.scrollTop(0);
				$(window).trigger('resize');
				//$(window).trigger('perspective-modalview-closed');
			};

			if (window.supportsTransitions) {
				$perspective.on(transitionEndEvent, onEndTransitionCallback);
			} else {
				onEndTransitionCallback.call();
			}

			$perspective.removeClass('animate');
		});
	}

	initPerspective();
})(jQuery);
// source --> https://dermepil.ro/pitesti/wp-content/themes/thegem/js/thegem-header.js?ver=5.9.5.2 
(function($) {

	function HeaderAnimation(el, options) {
		this.el = el;
		this.$el = $(el);
		this.options = {
			startTop: 1
		};
		$.extend(this.options, options);
		this.initialize();
	}

	HeaderAnimation.prototype = {
		initialize: function() {
			var self = this;
			this.$page = $('#page').length ? $('#page') : $('body');
			this.$wrapper = $('#site-header-wrapper');
			this.$topArea = $('#top-area');
			this.topAreaInSiteHeader = $('#site-header #top-area').length > 0;
			this.$headerMain = $('.header-main', this.$el);
			this.hasAdminBar = document.body.className.indexOf('admin-bar') != -1;
			this.adminBarOffset = 0;
			this.adminBarHeight = 0;
			this.topOffset = 0;
			this.oldScrollY = 0;
			this.isResponsive = null;
			this.isResponsiveOld = null;
			this.elHeight = this.$el.outerHeight();
			this.elHeightOld = this.$el.outerHeight();
			this.headerInited = false;
			this.windowWidth = window.innerWidth;

			this.hideWrapper = this.$wrapper.hasClass('site-header-wrapper-transparent');
			this.videoBackground = $('.page-title-block .gem-video-background').length && $('.page-title-block .gem-video-background').data('headerup');

			if(this.$el.hasClass('header-on-slideshow') && $('#main-content > *').first().is('.gem-slideshow, .block-slideshow')) {
				this.$wrapper.css({position: 'absolute'});
			}

			if(this.$el.hasClass('header-on-slideshow') && $('#main-content > *').first().is('.gem-slideshow, .block-slideshow')) {
				this.$wrapper.addClass('header-on-slideshow');
			} else {
				this.$el.removeClass('header-on-slideshow');
			}

			if(this.videoBackground) {
				this.$el.addClass('header-on-slideshow');
				this.$wrapper.addClass('header-on-slideshow');
			}

			this.initHeader();

			$(document).ready(function() {
				self.updateAdminBarInfo();
				self.updateStartTop();
			});

			$(window).on('scroll', function() {
				self.scrollHandler();
			});

			if ($('#thegem-perspective').length) {
				this.$page.on('scroll', function() {
					self.scrollHandler();
				});
			}

			$(window).resize(function() {
				setTimeout(function() {
					if (self.windowWidth != $(window).width()) {
						self.initHeader();
						self.scrollHandler();
						self.windowWidth = $(window).width();
					}
				}, 0);
			});

			//load header fix
			if (document.readyState === 'complete') {
				self.$el.addClass('ios-load');
			} else {
				var oldWindowLoad = window.onload;
				window.onload = function() {
					if (oldWindowLoad) {
						oldWindowLoad()
					}
					self.$el.addClass('ios-load');
				}
			}
		},

		initHeader: function() {
			this.isResponsiveOld = this.isResponsive;
			this.isResponsive = window.isResponsiveMenuVisible();
			this.elHeightOld = this.elHeight;
			this.elHeight = this.$el.outerHeight();

			if (this.isResponsive) {
				this.$el.addClass('shrink-mobile');
			} else {
				this.$el.removeClass('shrink-mobile');
			}

			this.updateAdminBarInfo();
			this.updateStartTop();
			if (this.isResponsive != this.isResponsiveOld || this.elHeight != this.elHeightOld) {
				this.initializeStyles();
			}
		},

		updateAdminBarInfo: function() {
			if (this.hasAdminBar) {
				this.adminBarHeight = $('#wpadminbar').outerHeight();
				this.adminBarOffset = this.hasAdminBar && $('#wpadminbar').css('position') == 'fixed' ? parseInt(this.adminBarHeight) : 0;
			}
		},

		updateStartTop: function() {
			if (this.$topArea.length && this.$topArea.is(':visible') && !this.topAreaInSiteHeader) {
				this.options.startTop = this.$topArea.outerHeight();
			} else {
				this.options.startTop = 1;
			}

			if (this.hasAdminBar && this.adminBarOffset == 0) {
				this.options.startTop += this.adminBarHeight;
			}
		},

		setMargin: function($img) {
			var $small = $img.siblings('img.small'),
				w = 0;

			if (this.$headerMain.hasClass('logo-position-right')) {
				w = $small.width();
			} else if (this.$headerMain.hasClass('logo-position-center') || this.$headerMain.hasClass('logo-position-menu_center')) {
				w = $img.width();
				var smallWidth = $small.width(),
					offset = (w - smallWidth) / 2;

				w = smallWidth + offset;
				$small.css('margin-right', offset + 'px');
			}
			if (!w) {
				w = $img.width();
			}
			$small.css('margin-left', '-' + w + 'px');
			$img.parent().css('min-width', w + 'px');

			$small.show();
		},

		initializeStyles: function() {
			var self = this;

			if (this.$headerMain.hasClass('logo-position-menu_center')) {
				var $img = $('#primary-navigation .menu-item-logo a .logo img.default', this.$el);
			} else {
				var $img = $('.site-title .site-logo a .logo img', this.$el);
			}

			if (!$img.length) {
				self.initializeHeight();
			} else if ($img[0].complete) {
				self.setMargin($img);
				self.initializeHeight();
			} else {
				$img.on('load error', function() {
					self.setMargin($img);
					self.initializeHeight();
				});
			}
		},

		initializeHeight: function() {
			if (this.hideWrapper) {
				this.headerInited = true;
				return false;
			}

			that = this;

			setTimeout(function() {
				var shrink = that.$el.hasClass('shrink');
				if (shrink) {
					that.$el.removeClass('shrink').addClass('without-transition');
				}
				var elHeight = that.$el.outerHeight();

				//load header fix
				if (navigator.userAgent.match(/(iPod|iPhone|iPad)/)) {
					that.$wrapper.css('min-height', elHeight);
				} else {
					that.$wrapper.height(elHeight);
				}

				if (shrink) {
					that.$el.addClass('shrink').removeClass('without-transition');
				}
				that.headerInited = true;
			}, 50);
		},

		scrollHandler: function() {
			if (!this.headerInited || window.gemSettings.fullpageEnabled || $('body').hasClass('vc_editor')) {
				return;
			}

			var self = this,
				scrollY = this.getScrollY();

			if (scrollY >= this.options.startTop) {
				if (this.isResponsive && this.$wrapper.hasClass('sticky-header-on-mobile-disabled') && scrollY < this.options.startTop + $('#site-header-wrapper').height()) {
					return;
				}
				if (!this.$el.hasClass('shrink')) {
					var shrinkClass = 'shrink fixed';
					if (window.gemSettings.fillTopArea) {
						shrinkClass += ' fill';
					}
					if (this.$wrapper.hasClass('sticky-header-on-mobile-disabled')) {
						shrinkClass += '  hidden hide-immediately';
					}
					this.$el.addClass(shrinkClass);
					//$('.hamburger-group').not('.hamburger-size-small-original').addClass('hamburger-size-small');
					//$('.perspective-toggle, .overlay-toggle').not('.toggle-size-small-original').addClass('toggle-size-small');
				}
				var top = 0;
				if (this.$page[0].scrollTop > 0) {
					top += this.$page[0].scrollTop;
				} else {
					if (this.hasAdminBar) {
						top += this.adminBarOffset;
					}
				}

				this.$el.css({
					top: top != 0 ? top : ''
				});
			} else {
				if (this.$el.hasClass('shrink')) {
					this.$el.removeClass('shrink fixed');
					//$('.hamburger-group').not('.hamburger-size-small-original').removeClass('hamburger-size-small');
					//$('.perspective-toggle, .overlay-toggle').not('.toggle-size-small-original').removeClass('toggle-size-small');
				}
				if (this.hasAdminBar) {
					this.$el.css({
						top: ''
					});
				}
			}

			if (this.isResponsive && !this.$wrapper.hasClass('sticky-header-on-mobile')) {
				if (!$('.mobile-menu-slide-wrapper.opened').length && !$('#primary-menu.dl-menuopen').length && !$('.menu-overlay.active').length) {
					var hideScroll = 300;
					if (this.$wrapper.hasClass('sticky-header-on-mobile-disabled')) {
						hideScroll = 0;
					}
					if (scrollY - this.oldScrollY > 0 && scrollY > hideScroll && !this.$el.hasClass('hidden')) {
						self.$el.addClass('hidden');
					}
					if (scrollY - this.oldScrollY < 0 && this.$el.hasClass('hidden')) {
						if (this.$el.hasClass('hide-immediately')) {
							self.$el.removeClass('hide-immediately');
						} else {
							self.$el.removeClass('hidden');
						}
					}
				} else {
					self.$el.removeClass('hidden');
				}
			}

			this.oldScrollY = scrollY;
		},

		getScrollY: function() {
			return window.pageYOffset || document.documentElement.scrollTop + this.$page[0].scrollTop;
		},
	};

	$.fn.headerAnimation = function(options) {
		options = options || {};
		return new HeaderAnimation(this.get(0), options);
	};

	$.fn.headerAnimationOnlyMobile = function() {
		if(!this.length) return ;
		var $header = $(this),
			$window = $(window),
			isSticked = false,
			stickAfter = 100,
			cloneHTML = '',
			$adminBar = $('#wpadminbar'),
			headerHeight = $header.parent()[0].offsetHeight,
			adminBarHeight = $adminBar.length > 0 ? $adminBar[0].offsetHeight : 0,
			previousScroll;

			stickAfter = headerHeight + adminBarHeight;


		$window.on('resize', function() {
			if(window.isResponsiveMenuVisible()) {
				$header.parent().addClass('header-sticky-prepared').css({
					paddingTop: headerHeight
				});
			} else {
				$header.parent().removeClass('header-sticky-prepared').css({
					paddingTop: ''
				});
			}
		}).trigger('resize');

		$window.on('scroll', function() {
			var after = stickAfter;
			var currentScroll = $window.scrollTop();
			var windowHeight = $window.height();
			var documentHeight = $(document).height();

			if (currentScroll > after) {
				stickHeader();
			} else {
				unstickHeader();
			}

			var startAfter = 100;

			if(window.isResponsiveMenuVisible()) {
				if (previousScroll - currentScroll > 0 && currentScroll > after) {
					$header.addClass('header-scroll-up');
					$header.removeClass('header-scroll-down');
				} else if (currentScroll - previousScroll > 0 && currentScroll + windowHeight !== documentHeight && currentScroll > (after + startAfter)) {
					$header.addClass('header-scroll-down');
					$header.removeClass('header-scroll-up');
				} else if (currentScroll <= after) {
					$header.removeClass('header-scroll-down');
					$header.removeClass('header-scroll-up');
				} else if (currentScroll + windowHeight >= documentHeight - 5) {
					$header.addClass('header-scroll-up');
					$header.removeClass('header-scroll-down');
				}
			}

			previousScroll = currentScroll;
		});

		function stickHeader() {
			if (isSticked) {
				return;
			}

			if($header.hasClass('header-sticky-template') && !window.isResponsiveMenuVisible()) {
				return;
			}

			isSticked = true;
			$header.addClass('header-sticked');
		}

		function unstickHeader() {
			if (!isSticked) {
				return;
			}

			isSticked = false;
			$header.removeClass('header-sticked');
		}
	}

	$('#site-header.animated-header').headerAnimation();
	$('.sticky-header-on-mobile #site-header:not(.animated-header)').headerAnimationOnlyMobile();

	$('.menu-item-search a').on('click', function(e){
		e.preventDefault();
		if ($(this).closest('.menu-item-fullscreen-search-mobile').length &&
			$('.primary-navigation').hasClass('responsive')) {
			return;
		}
		if($(this).closest('.overlay-menu-wrapper.active').length) {
			var $primaryMenu = $('#primary-menu');
			$primaryMenu.addClass('overlay-search-form-show');

			if ($primaryMenu.hasClass('no-responsive')) {
				$primaryMenu.addClass('animated-minisearch');
			}

			setTimeout(function() {
				$(document).on('click.menu-item-search-close', 'body', function(e) {
					if(!$(e.target).is('.menu-item-search .minisearch *')) {
						var $primaryMenu = $('#primary-menu');

						if ($primaryMenu.hasClass('animated-minisearch')) {
							$primaryMenu.removeClass('animated-minisearch');

							setTimeout(function() {
								$primaryMenu.removeClass('overlay-search-form-show');
								$(document).off('click.menu-item-search-close');
							}, 700);

						} else {
							$primaryMenu.removeClass('overlay-search-form-show');
							$(document).off('click.menu-item-search-close');
						}
					}
				});
			}, 500);
		} else {
			$('.menu-item-search').toggleClass('active');
		}

		if(!$('#primary-navigation').hasClass('overlay-active')) {
			$('#searchform-input').focus();
		}
	});

	$(document).ready(function () {

		var localCache = {
			data: {},
			remove: function (url) {
				delete localCache.data[url];
			},
			exist: function (url) {
				return localCache.data.hasOwnProperty(url) && localCache.data[url] !== null;
			},
			get: function (url) {
				return localCache.data[url];
			},
			set: function (url, cachedData, callback) {
				localCache.remove(url);
				localCache.data[url] = cachedData;
				if (typeof callback === "function") callback(cachedData);
			}
		};

		if (navigator.appVersion.indexOf("Win")!=-1) {
			$('body').addClass('platform-Windows');
		}

		const $fullscreenSearch = $('.thegem-fullscreen-search[data-id="header-search"]'),
			$fullscreenSearchInput = $('.thegem-fullscreen-searchform-input', $fullscreenSearch),
			$fullscreenSearchResults = $fullscreenSearch.find('.sf-result'),
			$fullscreenSearchClose = $fullscreenSearch.find('.sf-close');

		let ajax, ajaxActive = false;

		const fullscreenSearchTop = () => {
			var searchTop;
			if ($('#page').hasClass('vertical-header') && $(window).width() > 979) {
				searchTop = 0;
			} else if ($('#site-header').hasClass('fixed')) {
				searchTop = $('#site-header').outerHeight();
			} else {
				searchTop = $('#site-header').offset().top + $('#site-header').outerHeight() - $(window).scrollTop();
			}
			$fullscreenSearch.css('top', searchTop);
		};

		$('.menu-item-fullscreen-search a, .menu-item-fullscreen-search-mobile a').on('click', function(e){
			let searchMenuItem = $(this).parents('.menu-item-search');
			if (searchMenuItem.hasClass('menu-item-fullscreen-search-mobile') &&
				!searchMenuItem.hasClass('menu-item-fullscreen-search') &&
				!$('.primary-navigation').hasClass('responsive')) {
				return;
			}

			e.preventDefault();
			fullscreenSearchTop();

			$fullscreenSearch.toggleClass('active');

			if (ajaxActive) {
				ajax.abort();
				ajaxActive = false;
			}

			$fullscreenSearchInput.val('');

			if ($('#site-header').hasClass('fixed')) {
				setTimeout(function () {
					$fullscreenSearchInput.focus();
				}, 500);
			} else {
				if ($(window).scrollTop() == 0) {
					$('html, body').stop().animate({
						scrollTop: 0
					}, 500);
				}
				$fullscreenSearchInput.focus();
			}

			$fullscreenSearchResults.find('.preloader-new').remove();
			$fullscreenSearchResults.find('.result-sections').html('');

			let scrollbarWidth = window.innerWidth - document.documentElement.clientWidth;
			$('.header-background, .top-area, .block-content, #page-title').css('padding-right', scrollbarWidth);

			$('body').toggleClass('fullscreen-search-opened');

			$('#thegem-perspective.modalview .perspective-menu-close').trigger('click');

			if ($('.primary-navigation').hasClass('responsive')) {
				$('.menu-toggle').trigger('click');
			}

			if ($(window).width() > 767) {
				$('.overlay-toggle').trigger('click');
			}

			if ($(window).width() > 979) {
				$('.hamburger-toggle').trigger('click');
				$('.vertical-toggle').trigger('click');
			}
		});

		$fullscreenSearchClose.on('click', function(e){
			e.preventDefault();
			$('.menu-item-fullscreen-search').removeClass('active');
			$fullscreenSearch.removeClass('active');
			$('.header-background, .top-area, .block-content, #page-title').css('padding-right', 0);
			$('body').removeClass('fullscreen-search-opened');
			if (ajaxActive) {
				ajax.abort();
				ajaxActive = false;
			}
			$fullscreenSearchInput.val('');
			$fullscreenSearchResults.find('.preloader-new').remove();
			$fullscreenSearchResults.find('.result-sections').html('');
		});

		$(document).on('keyup', function(e) {
			if (e.key === "Escape") {
				$('.fullscreen-search .sf-close').trigger('click');
			}
		});

		if ($fullscreenSearch.hasClass('ajax-search')) {

			const $ajaxSearchParams = $('#ajax-search-params'),
				postTypes = $ajaxSearchParams.data('post-types'),
				postTypesPpp = $ajaxSearchParams.data('post-types-ppp'),
				resultTitle = $ajaxSearchParams.data('result-title'),
				showAllText = $ajaxSearchParams.data('show-all');

			const ajaxSearch = (query) => {

				if (!$fullscreenSearchInput.hasClass('styled')) {
					let styles = $fullscreenSearchInput.data('styles');
					styles.forEach(function (style) {
						$('head').append('<link rel="stylesheet" type="text/css" href="' + style + '">');
					});
					$fullscreenSearchInput.addClass('styled');
				}

				if (ajaxActive) {
					ajax.abort();
				} else {
					$fullscreenSearchResults.prepend('<div class="preloader-new"><div class="preloader-spin"></div></div>');
				}

				ajax = $.ajax({
					type: 'post',
					url: thegem_scripts_data.ajax_url,
					data: {
						action: 'thegem_ajax_search',
						search: query,
						post_types: postTypes,
						post_types_ppp: postTypesPpp,
						result_title: resultTitle,
						show_all_text: showAllText,
					},
					beforeSend: function () {
						if (localCache.exist(query)) {
							$fullscreenSearchResults.find('.preloader-new').remove();
							$fullscreenSearchResults.find('.result-sections').html(localCache.get(query));
							return false;
						} else {
							ajaxActive = true;
						}
					},
					success: function (response) {
						ajaxActive = false;
						$fullscreenSearchResults.find('.preloader-new').remove();
						$fullscreenSearchResults.find('.result-sections').html(response);
						localCache.set(query, response);
					}
				});
			};

			$fullscreenSearchInput.on( 'keyup', function() {
				let query = $(this).val();

				if (query.length > 2) {
					ajaxSearch(query);
				} else {
					if (ajaxActive) {
						ajax.abort();
						ajaxActive = false;
					}
					$fullscreenSearchResults.find('.preloader-new').remove();
					$fullscreenSearchResults.find('.result-sections').html('');
				}
				return false;
			});

			$('.top-search-item', $fullscreenSearch).on( 'click', function(e) {
				e.preventDefault();
				var query = $(this).data('search');
				ajaxSearch(query);
				$fullscreenSearchInput.val(query);
				return false;
			});
		}



		const $verticalMinisearchAjax = $('.vertical-minisearch.menu-item-ajax-search');

		if ($verticalMinisearchAjax.length) {

			const $ajaxSearchParams = $('#ajax-search-params'),
				postTypes = $ajaxSearchParams.data('post-types'),
				postTypesPpp = $ajaxSearchParams.data('post-types-ppp'),
				$miniSearchForm = $('#searchform', $verticalMinisearchAjax),
				$miniSearchSubmitIcon = $('.sf-submit-icon', $verticalMinisearchAjax),
				$miniSearchInput = $('.sf-input', $verticalMinisearchAjax),
				$miniSearchResults = $('.ajax-minisearch-results', $verticalMinisearchAjax);

			const ajaxMiniSearch = (query) => {

				if (ajaxActive) {
					ajax.abort();
				}
				$miniSearchForm.addClass('ajax-loading');

				ajax = $.ajax({
					type : 'post',
					url : thegem_scripts_data.ajax_url,
					data : {
						action : 'thegem_ajax_search_mini',
						search : query,
						post_types : postTypes,
						post_types_ppp : postTypesPpp,
					},
					beforeSend: function() {
						if (localCache.exist(query)) {
							$miniSearchForm.removeClass('ajax-loading');
							$miniSearchResults.html( localCache.get(query) );
							return false;
						} else {
							ajaxActive = true;
						}
					},
					success: function( response ) {
						ajaxActive = false;
						$miniSearchResults.html( response );
						$miniSearchForm.removeClass('ajax-loading');
						localCache.set(query, response);
					}
				});
			};

			const clearAjaxMinisearch = () => {
				$miniSearchInput.val('');
				$miniSearchResults.html('');
				$miniSearchSubmitIcon.removeClass('clear');
				$miniSearchForm.removeClass('ajax-loading');
				if (ajaxActive) {
					ajax.abort();
					ajaxActive = false;
				}
			};

			$miniSearchInput.on( 'keyup', function() {
				let query = $(this).val();

				if (query.length > 0) {
					$miniSearchSubmitIcon.addClass('clear');
				} else {
					$miniSearchSubmitIcon.removeClass('clear');
				}

				if (query.length > 2) {
					ajaxMiniSearch(query);
				} else {
					if (ajaxActive) {
						ajax.abort();
						ajaxActive = false;
					}
					$miniSearchResults.html('');
					$miniSearchForm.removeClass('ajax-loading');
				}
				return false;
			});

			$miniSearchSubmitIcon.on('click', function () {
				if ($(this).hasClass('clear')) {
					clearAjaxMinisearch();
				}
			});

			$('.hamburger-toggle, #thegem-perspective .perspective-menu-close, .vertical-toggle').click(function() {
				clearAjaxMinisearch();
			});

		}
	});

})(jQuery);