(function($){'use strict';var JetMenu=function(element,options){this.defaultSettings={enabled:false,threshold:767,mouseLeaveDelay:500,openSubType:'click',megaWidthType:'container',megaWidthSelector:'',mainMenuSelector:'.jet-menu',menuItemSelector:'.jet-menu-item',moreMenuContent:'···',templates:{mobileMenuToogleButton:'',}} this.settings=$.extend(this.defaultSettings,options);this.$window=$(window);this.$document=$(document);this.$element=$(element);this.$instance=$(this.settings.mainMenuSelector,this.$element).addClass('jet-responsive-menu');this.$menuItems=$('>'+this.settings.menuItemSelector,this.$instance).addClass('jet-responsive-menu-item');this.$moreItemsInstance=null;this.hiddenItemsArray=[];this.$mobileStateCover=null;this.createMenuInstance();this.$instance.trigger('jetMenuCreated');} JetMenu.prototype={constructor:JetMenu,createMenuInstance:function(){var self=this,mainMenuWidth,totalVisibleItemsWidth=0;this.subMenuRebuild();this.subMegaMenuRebuild();$('body').append('
');this.$mobileStateCover=$('.jet-mobile-menu-cover');if(!tools.isEmpty(this.settings.moreMenuContent)&&self.settings.enabled){self.$instance.append('');self.$moreItemsInstance=$('> .jet-responsive-menu-available-items',this.$instance);self.$moreItemsInstance.attr({'hidden':'hidden'});} if(!tools.isEmpty(this.settings.templates.mobileMenuToogleButton)){this.$element.prepend(this.settings.templates.mobileMenuToogleButton);this.$mobileToogleButton=$('.jet-mobile-menu-toggle-button',this.$element);} if(this.isThreshold()){this.$element.addClass('jet-mobile-menu');$('body').addClass('jet-mobile-menu-active');}else{$('body').addClass('jet-desktop-menu-active');this.rebuildItems();this.$instance.trigger('rebuildItems');} this.subMenuHandler();this.mobileViewHandler();this.watch();},subMenuHandler:function(){var self=this,transitionend='transitionend oTransitionEnd webkitTransitionEnd',prevClickedItem=null,menuItem,menuItemParents,timer;if(self.mobileAndTabletcheck()){this.$instance.on('touchstart','.jet-menu-item > a, .jet-menu-item > a .jet-dropdown-arrow',touchStartItem);this.$instance.on('touchend','.jet-menu-item > a, .jet-menu-item > a .jet-dropdown-arrow',touchEndItem);}else{switch(this.settings.openSubType){case 'hover':this.$instance.on('mouseenter','.jet-menu-item > a',mouseEnterHandler);this.$instance.on('mouseleave','.jet-menu-item > a',mouseLeaveHandler);break;case 'click':this.$instance.on('click','.jet-menu-item > a',clickHandler);break;} this.$instance.on('mouseenter','.jet-sub-menu, .jet-sub-mega-menu',mouseEnterSubMenuHandler);this.$instance.on('mouseenter',mouseEnterInstanceHandler);this.$instance.on('mouseleave',mouseLeaveInstanceHandler);} function touchStartItem(event){var $currentTarget=$(event.currentTarget),$this=$currentTarget.closest('.jet-menu-item');$this.data('offset',$this.offset().top);} function touchEndItem(event){var $this,$siblingsItems,$link,linkHref,$currentTarget,subMenu,offset;event.preventDefault();event.stopPropagation();$currentTarget=$(event.currentTarget);$this=$currentTarget.closest('.jet-menu-item');$siblingsItems=$this.siblings('.jet-menu-item.jet-menu-item-has-children');$link=$('> a',$this);linkHref=$link.attr('href');subMenu=$('.jet-sub-menu:first, .jet-sub-mega-menu',$this);offset=$this.data('offset');if(offset!==$this.offset().top){return false;} if($currentTarget.hasClass('jet-dropdown-arrow')){if(!subMenu[0]){return false;} if(!$this.hasClass('jet-menu-hover')){$this.addClass('jet-menu-hover');$siblingsItems.removeClass('jet-menu-hover');$('.jet-menu-item-has-children',$siblingsItems).removeClass('jet-menu-hover');}else{$this.removeClass('jet-menu-hover');$('.jet-menu-item-has-children',$this).removeClass('jet-menu-hover');}} if($currentTarget.hasClass('top-level-link')||$currentTarget.hasClass('sub-level-link')){if('#'===linkHref){if(!$this.hasClass('jet-menu-hover')){$this.addClass('jet-menu-hover');$siblingsItems.removeClass('jet-menu-hover');$('.jet-menu-item-has-children',$siblingsItems).removeClass('jet-menu-hover');}else{$this.removeClass('jet-menu-hover');$('.jet-menu-item-has-children',$this).removeClass('jet-menu-hover');} return false;}else{window.location=linkHref;$('body').removeClass('jet-mobile-menu-visible');self.$element.removeClass('jet-mobile-menu-active-state');return false;}}} function clickHandler(event){var $this,$siblingsItems,$link,$currentTarget,subMenu;event.preventDefault();event.stopPropagation();$currentTarget=$(event.currentTarget);$this=$currentTarget.closest('.jet-menu-item');$siblingsItems=$this.siblings('.jet-menu-item.jet-menu-item-has-children');$link=$('> a',$this);subMenu=$('.jet-sub-menu:first, .jet-sub-mega-menu',$this);if($siblingsItems[0]){$siblingsItems.removeClass('jet-menu-hover');$('jet-menu-item-has-children',$siblingsItems).removeClass('jet-menu-hover');} if(!$('.jet-sub-menu, .jet-sub-mega-menu',$this)[0]||$this.hasClass('jet-menu-hover')){window.location=$link.attr('href');$('body').removeClass('jet-mobile-menu-visible');self.$element.removeClass('jet-mobile-menu-active-state');return false;} if(subMenu[0]){$this.addClass('jet-menu-hover');}} function mouseEnterHandler(event){var subMenu;menuItem=$(event.target).parents('.jet-menu-item');subMenu=menuItem.children('.jet-sub-menu, .jet-sub-mega-menu').first();$('.jet-menu-hover',this.$instance).removeClass('jet-menu-hover');if(subMenu[0]){menuItem.addClass('jet-menu-hover');}} function mouseLeaveHandler(event){} function mouseEnterSubMenuHandler(event){clearTimeout(timer);} function mouseEnterInstanceHandler(event){clearTimeout(timer);} function mouseLeaveInstanceHandler(event){timer=setTimeout(function(){$('.jet-menu-hover',this.$instance).removeClass('jet-menu-hover');},self.settings.mouseLeaveDelay);} var windowWidth=$(window).width();self.$window.on('orientationchange resize',function(event){if($('body').hasClass('jet-mobile-menu-active')){return;} if($(window).width()===windowWidth){return;} windowWidth=$(window).width();self.$instance.find('.jet-menu-item').removeClass('jet-menu-hover');});self.$document.on('touchend',function(event){if($('body').hasClass('jet-mobile-menu-active')){return;} if($(event.target).closest('.jet-menu-item').length){return;} self.$instance.find('.jet-menu-item').removeClass('jet-menu-hover');});},mobileViewHandler:function(){var self=this,toogleStartEvent='mousedown',toogleEndEvent='mouseup';if('ontouchend'in window||'ontouchstart'in window){toogleStartEvent='touchstart';toogleEndEvent='touchend';} this.$mobileToogleButton.on(toogleEndEvent,function(event){event.preventDefault();$('body').toggleClass('jet-mobile-menu-visible');self.$element.toggleClass('jet-mobile-menu-active-state');});this.$document.on(toogleEndEvent,function(event){if($(event.target).closest(self.$element).length){return;} if(!self.$element.hasClass('jet-mobile-menu')||!self.$element.hasClass('jet-mobile-menu-active-state')){return;} $('body').removeClass('jet-mobile-menu-visible');self.$element.removeClass('jet-mobile-menu-active-state');});},watch:function(delay){var delay=delay||10;$(window).on('resize.jetResponsiveMenu orientationchange.jetResponsiveMenu',this.debounce(delay,this.watcher.bind(this)));this.$instance.trigger('containerResize');},watcher:function(event){if(this.isThreshold()){this.$element.addClass('jet-mobile-menu');$('body').addClass('jet-mobile-menu-active');$('body').removeClass('jet-desktop-menu-active');this.$menuItems.removeAttr('hidden');if(0!==this.hiddenItemsArray.length){$('> .jet-sub-menu',this.$moreItemsInstance).empty();} if(this.settings.enabled){this.$moreItemsInstance.attr({'hidden':'hidden'});}}else{this.$element.removeClass('jet-mobile-menu');$('body').removeClass('jet-mobile-menu-active');$('body').addClass('jet-desktop-menu-active');$('body').removeClass('jet-mobile-menu-visible');this.rebuildItems();this.$instance.trigger('rebuildItems');this.$instance.trigger('containerResize');}},rebuildItems:function(){if(!this.settings.enabled){return false;} var self=this,mainMenuWidth=this.$instance.width(),correctedMenuWidth=this.$instance.width()-self.$moreItemsInstance.outerWidth(true),iterationVisibleItemsWidth=0,iterationHiddenItemsWidth=this.getVisibleItemsWidth(),visibleItemsArray=[],hiddenItemsArray=[];self.$menuItems.each(function(){var $this=$(this);iterationVisibleItemsWidth+=$this.outerWidth(true);if(iterationVisibleItemsWidth>correctedMenuWidth&&!tools.inArray(this,hiddenItemsArray)){hiddenItemsArray.push(this);}else{visibleItemsArray.push(this);}});hiddenItemsArray.forEach(function(item){var $item=$(item);$item.attr({'hidden':'hidden'});});visibleItemsArray.forEach(function(item,index){var $item=$(item);$item.removeAttr('hidden');});$('> .jet-sub-menu',self.$moreItemsInstance).empty();hiddenItemsArray.forEach(function(item){var $clone=$(item).clone();$('.jet-sub-mega-menu',$clone).remove();$clone.addClass('jet-sub-menu-item');$clone.removeAttr('hidden');$('> .top-level-link',$clone).toggleClass('top-level-link sub-level-link');$('> .jet-sub-menu',self.$moreItemsInstance).append($clone);});if(0==hiddenItemsArray.length){self.$moreItemsInstance.attr({'hidden':'hidden'});self.$moreItemsInstance.addClass('jet-empty');}else{self.$moreItemsInstance.removeAttr('hidden');self.$moreItemsInstance.removeClass('jet-empty');} self.hiddenItemsArray=hiddenItemsArray;},subMenuRebuild:function(){var self=this,initSubMenuPosition=false;this.$instance.on('rebuildItems',function(){var $subMenuList=$('.jet-sub-menu',self.$instance),maxWidth=self.$window.outerWidth(true),isRTL=$('body').hasClass('rtl');if(!$subMenuList[0]){return;} if(initSubMenuPosition){$subMenuList.removeClass('inverse-side');initSubMenuPosition=false;} $subMenuList.each(function(){var $this=$(this),subMenuOffset=$this.offset().left,subMenuPos=subMenuOffset+$this.outerWidth(true);if(!isRTL){if(subMenuPos>=maxWidth){$this.addClass('inverse-side');$this.find('.jet-sub-menu').addClass('inverse-side');initSubMenuPosition=true;}else if(subMenuOffset<0){$this.removeClass('inverse-side');$this.find('.jet-sub-menu').removeClass('inverse-side');}}else{if(subMenuOffset<0){$this.addClass('inverse-side');$this.find('.jet-sub-menu').addClass('inverse-side');initSubMenuPosition=true;}else if(subMenuPos>=maxWidth){$this.removeClass('inverse-side');$this.find('.jet-sub-menu').removeClass('inverse-side');}}});});},subMegaMenuRebuild:function(){var self=this;this.$instance.on('containerResize',function(){var $megaMenuList=$('.jet-sub-mega-menu',self.$instance),maxWidth=$('body').outerWidth(true);switch(self.settings.megaWidthType){case 'items':var visibleItemsWidth=self.getVisibleItemsWidth(),firstOffset=$('> .jet-menu-item:first',self.$instance).position().left;$megaMenuList.css({'width':visibleItemsWidth+'px','left':firstOffset});break;case 'selector':var customSelector=$(self.settings.megaWidthSelector),instanceOffset=null,customSelectorOffset=null;if(customSelector[0]){instanceOffset=self.$instance.offset().left;customSelectorOffset=customSelector.offset().left;$megaMenuList.css({'width':customSelector.outerWidth(),'left':(customSelectorOffset-instanceOffset)+'px'});} break;} if($megaMenuList[0]){$megaMenuList.css({'maxWidth':''});$megaMenuList.each(function(){var $this=$(this),megaMenuOffsetLeft=$this.offset().left,megaMenuOffsetRight=megaMenuOffsetLeft+$this.outerWidth(true);if(megaMenuOffsetRight>=maxWidth){$this.css({'maxWidth':maxWidth-megaMenuOffsetLeft});}});}});},getVisibleItemsWidth:function(){var totalVisibleItemsWidth=0;this.$menuItems.each(function(){var $this=$(this);if(!$this.hasAttr('hidden')){totalVisibleItemsWidth+=$this.outerWidth(true);}});return totalVisibleItemsWidth;},isThreshold:function(){return(this.$window.width()