(function(n){"use strict";function t(i,r){var u=this;this.$element=n(i);this.options=n.extend(!0,{},t.defaults,r);this._items=n();Object.defineProperties(this,{itemsSelector:{get:function(){return u.options.classMap.hasSubMenu+","+u.options.classMap.hasMegaMenu}},_tempChain:{value:null,writable:!0},state:{value:null,writable:!0}});this.initialize()}function i(n,t,i,r){var u=this;this.$element=n;this.menu=t;this.options=i;this.$container=r;Object.defineProperties(this,{itemClass:{get:function(){return u.options.type==="mega-menu"?u.options.classMap.hasMegaMenu:u.options.classMap.hasSubMenu}},activeItemClass:{get:function(){return u.options.type==="mega-menu"?u.options.classMap.hasMegaMenuActive:u.options.classMap.hasSubMenuActive}},menuClass:{get:function(){return u.options.type==="mega-menu"?u.options.classMap.megaMenu:u.options.classMap.subMenu}},isOpened:{get:function(){return this.$element.hasClass(this.activeItemClass.slice(1))}}});this.menu.addClass("animated").on("click.HSMegaMenu",function(){u._updateMenuBounds()});if(this.$element.data("max-width")&&this.menu.css("max-width",this.$element.data("max-width")),this.$element.data("position")&&this.menu.addClass("hs-position-"+this.$element.data("position")),this.options.animationOut)this.menu.on("webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend",function(n){u.menu.hasClass(u.options.animationOut)&&(u.$element.removeClass(u.activeItemClass.slice(1)),u.options.afterClose.call(u,u.$element,u.menu));u.menu.hasClass(u.options.animationIn)&&u.options.afterOpen.call(u,u.$element,u.menu);n.stopPropagation();n.preventDefault()})}function r(){return"ontouchstart"in window}t.defaults={event:"hover",direction:"horizontal",breakpoint:991,animationIn:!1,animationOut:!1,rtl:!1,hideTimeOut:300,sideBarRatio:1/4,pageContainer:n("body"),classMap:{initialized:".hs-menu-initialized",mobileState:".hs-mobile-state",subMenu:".hs-sub-menu",hasSubMenu:".hs-has-sub-menu",hasSubMenuActive:".hs-sub-menu-opened",megaMenu:".hs-mega-menu",hasMegaMenu:".hs-has-mega-menu",hasMegaMenuActive:".hs-mega-menu-opened"},mobileSpeed:400,mobileEasing:"linear",beforeOpen:function(){},beforeClose:function(){},afterOpen:function(){},afterClose:function(){}};t.prototype.initialize=function(){var t=this,i=n(window);this.options.rtl&&this.$element.addClass("hs-rtl");this.$element.addClass(this.options.classMap.initialized.slice(1)).addClass("hs-menu-"+this.options.direction);i.on("resize.HSMegaMenu",function(){t.resizeTimeOutId&&clearTimeout(t.resizeTimeOutId);t.resizeTimeOutId=setTimeout(function(){i.width()<=t.options.breakpoint&&t.state=="desktop"?t.initMobileBehavior():i.width()>t.options.breakpoint&&t.state=="mobile"&&t.initDesktopBehavior();t.refresh()},50)});n(document).on("click.HSMegaMenu",function(i){var r=n(i.target).parents(t.itemsSelector);t.closeAll(r.add(n(i.target)))}).on("keyup.HSMegaMenu",function(n){n.keyCode&&n.keyCode==27&&t.closeAll()});return i.width()<=this.options.breakpoint?this.initMobileBehavior():i.width()>this.options.breakpoint&&this.initDesktopBehavior(),this.smartPositions(),this};t.prototype.smartPositions=function(){var t=this,r=this.$element.find(this.options.classMap.subMenu);r.each(function(r,u){i.smartPosition(n(u),t.options)})};t.prototype.bindEvents=function(){var t=this;if(this.options.event!=="hover"||r()){this.$element.on("click.HSMegaMenu",r()?this.options.classMap.hasMegaMenu+" > a, "+this.options.classMap.hasSubMenu+" > a":this.options.classMap.hasMegaMenu+':not([data-event="hover"]) > a,'+this.options.classMap.hasSubMenu+':not([data-event="hover"]) > a',function(i){var r=n(this).parent(),u,f=r.parents(t.itemsSelector);r.data("HSMenuItem")||t.initMenuItem(r,t.getType(r));t.closeAll(r.add(r.parents(t.itemsSelector)));u=r.addClass("hs-event-prevented").data("HSMenuItem");u.isOpened?u.hide():u.show();i.preventDefault();i.stopPropagation()});if(!r())this.$element.on("mouseenter.HSMegaMenu",this.options.classMap.hasMegaMenu+'[data-event="hover"],'+this.options.classMap.hasSubMenu+'[data-event="hover"]',function(i){var r=n(this),u=r.parents(t.itemsSelector);r.data("HSMenuItem")||t.initMenuItem(r,t.getType(r));t.closeAll(r.add(u));u.add(r).each(function(t,i){var r=n(i).data("HSMenuItem");r.hideTimeOutId&&clearTimeout(r.hideTimeOutId);r.show()});i.preventDefault();i.stopPropagation()}).on("mouseleave.HSMegaMenu",this.options.classMap.hasMegaMenu+'[data-event="hover"],'+this.options.classMap.hasSubMenu+'[data-event="hover"]',function(i){var r=n(this),u=r.data("HSMenuItem");u.hideTimeOutId=setTimeout(function(){t.closeAll(n(i.relatedTarget).parents(t.itemsSelector))},t.options.hideTimeOut);i.preventDefault();i.stopPropagation()})}else this.$element.on("mouseenter.HSMegaMenu",this.options.classMap.hasMegaMenu+':not([data-event="click"]),'+this.options.classMap.hasSubMenu+':not([data-event="click"])',function(i){var u=n(this),r=u.parents(t.itemsSelector);u.data("HSMenuItem")||t.initMenuItem(u,t.getType(u));r=r.add(u);t.closeAll(r);r.each(function(t,i){var r=n(i).data("HSMenuItem");r.hideTimeOutId&&clearTimeout(r.hideTimeOutId);r.show()});t._items=t._items.not(r);t._tempChain=r;i.preventDefault();i.stopPropagation()}).on("mouseleave.HSMegaMenu",this.options.classMap.hasMegaMenu+':not([data-event="click"]),'+this.options.classMap.hasSubMenu+':not([data-event="click"])',function(i){var r=n(this),u=r.data("HSMenuItem"),f=n(i.relatedTarget).parents(t.itemsSelector);u.hideTimeOutId=setTimeout(function(){t.closeAll(f)},t.options.hideTimeOut);t._items=t._items.add(t._tempChain);t._tempChain=null;i.preventDefault();i.stopPropagation()}).on("click.HSMegaMenu",this.options.classMap.hasMegaMenu+'[data-event="click"] > a, '+this.options.classMap.hasSubMenu+'[data-event="click"] > a',function(i){var r=n(this).parent('[data-event="click"]'),u;r.data("HSMenuItem")||t.initMenuItem(r,t.getType(r));t.closeAll(r.add(r.parents(t.itemsSelector)));u=r.data("HSMenuItem");u.isOpened?u.hide():u.show();i.preventDefault();i.stopPropagation()})};t.prototype.initMenuItem=function(t,r){var u=this,f=new i(t,t.children(u.options.classMap[r==="mega-menu"?"megaMenu":"subMenu"]),n.extend(!0,{type:r},u.options,t.data()),u.$element);t.data("HSMenuItem",f);this._items=this._items.add(t)};t.prototype.initMobileBehavior=function(){var t=this;this.state="mobile";this.$element.off(".HSMegaMenu").addClass(this.options.classMap.mobileState.slice(1)).on("click.HSMegaMenu",t.options.classMap.hasSubMenu+" > a, "+t.options.classMap.hasMegaMenu+" > a",function(i){var r=n(this).parent(),u;r.data("HSMenuItem")||t.initMenuItem(r,t.getType(r));t.closeAll(r.parents(t.itemsSelector).add(r));u=r.data("HSMenuItem");u.isOpened?u.mobileHide():u.mobileShow();i.preventDefault();i.stopPropagation()}).find(this.itemsSelector).not(this.options.classMap.hasSubMenuActive+","+this.options.classMap.hasMegaMenuActive).children(this.options.classMap.subMenu+","+this.options.classMap.megaMenu).hide()};t.prototype.initDesktopBehavior=function(){this.state="desktop";this.$element.removeClass(this.options.classMap.mobileState.slice(1)).off(".HSMegaMenu").find(this.itemsSelector).not(this.options.classMap.hasSubMenuActive+","+this.options.classMap.hasMegaMenuActive).children(this.options.classMap.subMenu+","+this.options.classMap.megaMenu).hide();this.bindEvents()};t.prototype.closeAll=function(t){var i=this;return this._items.not(t&&t.length?t:n()).each(function(t,r){n(r).removeClass("hs-event-prevented").data("HSMenuItem")[i.state=="mobile"?"mobileHide":"hide"]()})};t.prototype.getType=function(n){return!n||!n.length?null:n.hasClass(this.options.classMap.hasSubMenu.slice(1))?"sub-menu":n.hasClass(this.options.classMap.hasMegaMenu.slice(1))?"mega-menu":null};t.prototype.getState=function(){return this.state};t.prototype.refresh=function(){return this._items.add(this._tempChain).each(function(t,i){n(i).data("HSMenuItem")._updateMenuBounds()})};i.prototype.show=function(){return this.menu.length?(this.$element.addClass(this.activeItemClass.slice(1)),this.options.direction=="horizontal"&&this.smartPosition(this.menu,this.options),this._updateMenuBounds(),this.options.animationOut?this.menu.removeClass(this.options.animationOut):this.options.afterOpen.call(this,this.$element,this.menu),this.options.animationIn&&this.menu.addClass(this.options.animationIn),this):this};i.prototype.hide=function(){var n=this;return this.menu.length?(this.options.animationOut||this.$element.removeClass(this.activeItemClass.slice(1)),this.options.animationIn&&this.menu.removeClass(this.options.animationIn),this.options.animationOut?this.menu.addClass(this.options.animationOut):this.options.afterClose.call(this,this.$element,this.menu),this):this};i.prototype.mobileShow=function(){var n=this;return this.menu.length?(this.menu.removeClass(this.options.animationIn).removeClass(this.options.animationOut).stop().slideDown({duration:n.options.mobileSpeed,easing:n.options.mobileEasing,complete:function(){n.options.afterOpen.call(n,n.$element,n.menu)}}),this.$element.addClass(this.activeItemClass.slice(1)),this):this};i.prototype.mobileHide=function(){var n=this;return this.menu.length?(this.menu.stop().slideUp({duration:n.options.mobileSpeed,easing:n.options.mobileEasing,complete:function(){n.options.afterClose.call(n,n.$element,n.menu)}}),this.$element.removeClass(this.activeItemClass.slice(1)),this):this};i.prototype.smartPosition=function(n,t){i.smartPosition(n,t)};i.smartPosition=function(t,i){if(t||t.length){var r=n(window);t.removeClass("hs-reversed");i.rtl?t.offset().left<0&&t.addClass("hs-reversed"):t.offset().left+t.outerWidth()>r.width()&&t.addClass("hs-reversed")}};i.prototype._updateMenuBounds=function(){var t="auto";if(this.options.direction=="vertical"&&this.options.type=="mega-menu"){if(this.$container&&this.$container.data("HSMegaMenu").getState()=="desktop"?(this.options.pageContainer.length||(this.options.pageContainer=n("body")),t=this.options.pageContainer.outerWidth()*(1-this.options.sideBarRatio)):t="auto",this.menu.css({width:t,height:"auto"}),this.menu.outerHeight()>this.$container.outerHeight())return;this.menu.css("height","100%")}};n.fn.HSMegaMenu=function(i){return this.each(function(){var r=n(this);r.data("HSMegaMenu")||r.data("HSMegaMenu",new t(r,i))})}})(jQuery)