// source --> https://builtplans.com/wp-content/plugins/woocommerce/assets/js/frontend/woocommerce.min.js?ver=10.8.0 
function on_keydown_remove_from_cart(e){" "===e.key&&(e.preventDefault(),e.currentTarget.click())}function focus_populate_live_region(){var e=["woocommerce-message","woocommerce-error","wc-block-components-notice-banner"].map(function(e){return"."+e+'[role="alert"]'}).join(", "),o=document.querySelectorAll(e);if(0!==o.length){var t=o[0];t.setAttribute("tabindex","-1");var n=setTimeout(function(){t.focus(),clearTimeout(n)},500)}}function refresh_sorted_by_live_region(){var e=document.querySelector(".woocommerce-result-count"),o=document.querySelector('[data-wp-interactive="woocommerce/product-filters"]');if(e&&window.location.search&&!o){var t=e.innerHTML;e.setAttribute("role","alert"),e.setAttribute("aria-hidden","true");var n=setTimeout(function(){e.setAttribute("aria-hidden","false"),e.innerHTML="",e.innerHTML=t,clearTimeout(n)},2e3)}}function on_document_ready(){focus_populate_live_region(),refresh_sorted_by_live_region()}jQuery(function(e){e(".woocommerce-ordering").on("change","select.orderby",function(){e(this).closest("form").trigger("submit")}),e("input.qty:not(.product-quantity input.qty)").each(function(){var o=parseFloat(e(this).attr("min"));o>=0&&parseFloat(e(this).val())<o&&e(this).val(o)});var o="store_notice"+(e(".woocommerce-store-notice").data("noticeId")||"");if("hidden"===Cookies.get(o))e(".woocommerce-store-notice").hide();else{function t(o){["Enter"," "].includes(o.key)&&(o.preventDefault(),e(".woocommerce-store-notice__dismiss-link").click())}e(".woocommerce-store-notice").show(),e(".woocommerce-store-notice__dismiss-link").on("click",function n(r){Cookies.set(o,"hidden",{path:"/"}),e(".woocommerce-store-notice").hide(),r.preventDefault(),e(".woocommerce-store-notice__dismiss-link").off("click",n).off("keydown",t)}).on("keydown",t)}e(".woocommerce-input-wrapper span.description").length&&e(document.body).on("click",function(){e(".woocommerce-input-wrapper span.description:visible").prop("aria-hidden",!0).slideUp(250)}),e(".woocommerce-input-wrapper").on("click",function(e){e.stopPropagation()}),e(".woocommerce-input-wrapper :input").on("keydown",function(o){var t=e(this).parent().find("span.description");if(27===o.which&&t.length&&t.is(":visible"))return t.prop("aria-hidden",!0).slideUp(250),o.preventDefault(),!1}).on("click focus",function(){var o=e(this).parent(),t=o.find("span.description");o.addClass("currentTarget"),e(".woocommerce-input-wrapper:not(.currentTarget) span.description:visible").prop("aria-hidden",!0).slideUp(250),t.length&&t.is(":hidden")&&t.prop("aria-hidden",!1).slideDown(250),o.removeClass("currentTarget")}),e.scroll_to_notices=function(o){o.length&&e("html, body").animate({scrollTop:o.offset().top-100},1e3)},e('.woocommerce form .woocommerce-Input[type="password"]').wrap('<span class="password-input"></span>'),e(".woocommerce form input").filter(":password").parent("span").addClass("password-input"),e(".password-input").each(function(){const o=e(this).find("input").attr("id");e(this).append('<button type="button" class="show-password-input" aria-label="'+woocommerce_params.i18n_password_show+'" aria-describedBy="'+o+'"></button>')}),e(".show-password-input").on("click",function(o){o.preventDefault(),e(this).hasClass("display-password")?(e(this).removeClass("display-password"),e(this).attr("aria-label",woocommerce_params.i18n_password_show)):(e(this).addClass("display-password"),e(this).attr("aria-label",woocommerce_params.i18n_password_hide)),e(this).hasClass("display-password")?e(this).siblings(['input[type="password"]']).prop("type","text"):e(this).siblings('input[type="text"]').prop("type","password"),e(this).siblings("input").focus()}),e("a.coming-soon-footer-banner-dismiss").on("click",function(o){var t=e(o.target);e.ajax({type:"post",url:t.data("rest-url"),data:{woocommerce_meta:{coming_soon_banner_dismissed:"yes"}},beforeSend:function(e){e.setRequestHeader("X-WP-Nonce",t.data("rest-nonce"))},complete:function(){e("#coming-soon-footer-banner").hide()}})}),"undefined"==typeof wc_add_to_cart_params&&e(document.body).on("keydown",".remove_from_cart_button",on_keydown_remove_from_cart),e(document.body).on("item_removed_from_classic_cart updated_wc_div",focus_populate_live_region)}),document.addEventListener("DOMContentLoaded",on_document_ready);
// source --> https://builtplans.com/wp-content/plugins/iks-menu/assets/js/public.js?ver=1.12.7 
!function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=87)}({87:function(e,t,r){}});
// source --> https://builtplans.com/wp-content/plugins/iks-menu/assets/js/menu.js?ver=1.12.7 
'use strict';

jQuery(document).ready(function ($j) {
    initMenuAccordion();
});

var termClass = 'iksm-term';

var IKSM = {
    classes: {
        element: {
            current: termClass + '--current',
            expanded: termClass + '--expanded',
            expanding: termClass + '--expanding',
            collapsing: termClass + '--collapsing',
            child: termClass + '--child',
            hasChildren: termClass + '--has-children',
            expandedCurrent: termClass + '--expanded-current',
            expandedInitial: termClass + '--expanded-initial',
        },
    },
    selectors: {
        dataAttrs: '#iksm_data_args',
        container: '.iksm-container',
        treeContainer: '.iksm-terms-tree',
        treeContainerInner: '.iksm-terms-tree__inner',
        toggle: '.' + termClass + '__toggle',
        element: '.' + termClass,
        elementCurrent: '.' + termClass + '--current',
        elementInner: '.' + termClass + '__inner',
        elementLink: '.' + termClass + '__link',
        elementHasChildren: '.' + termClass + '--has-children',
        elementIsParent: '.' + termClass + '--parent',
        elementExpandedCurrent: '.' + termClass + '--expanded-current',
        elementExpandedInitial: '.' + termClass + '--expanded-initial',
    },
    dataAttrs: {
        collapseChildren: "collapse_children_terms",
        collapseOther: "collapse_other_terms",
        collapseAnimationDuration: "collapse_animation_duration",
        expandAnimationDuration: "expand_animation_duration",
        disableParentLinks: "disable_parent_links_level",
        toggleByItemClick: "toggle_by_item_click",
        initialExpansionDisableScreenWidth: "initial_expansion_disable_screen_width",
    },
};
jQuery( document ).on( 'elementor/popup/show', (event, id) => {
    var $ = jQuery;
    var $popupMenu = $("[data-elementor-id=" + id + "]");
    var $menuElementor = $popupMenu.find(IKSM.selectors.container);
    if ($menuElementor.length > 0 ) {
        initMenuAccordion($menuElementor);
    }
});

function initMenuAccordion($menus = null) {
    var $ = jQuery;
    var selectors = IKSM.selectors;
    var classes = IKSM.classes;
    if (!$menus) {
        $menus = $(selectors.container);
    }
    log('initMenuAccordion, $menus:', $menus);

    $menus.each(function (index, menu) {
        /*
        * FOR EACH MENU
        */

        var $menu = $(menu);
        var $toggles = $menu.find(selectors.toggle);
        var $elementsInner = $menu.find(selectors.elementInner);
        var $elementsLinks = $menu.find(selectors.elementLink);
        var data = $menu.find(selectors.dataAttrs).data() || {};

        $toggles.click(processClick);
        $toggles.keypress(function (event) {
            if (event.keyCode === 13) { // Enter
                event.target && event.target.click()
            }
        });

        $elementsInner.keypress(function (event) {
            if (event.keyCode === 13) { // Enter
                var $target = $(event.target)
                var children = $target.children(selectors.elementLink)
                if (children.length) {
                    children[0].click()
                }
            }
        });

        // Focus and Blur parent element when focusing/blurring link element

        $elementsLinks.focus(function (event) {
            var parent = getLinkContainer(event.target)
            parent && parent.focus()
        });

        $elementsLinks.blur(function (event) {
            var parent = getLinkContainer(event.target)
            parent && parent.blur()
        });

        processToggledLinks();

        processInitialExpansion();

        /*
        * FUNCTIONS
        */

        function processClick() {
            var $this = $(this);
            var $item = $this.closest(selectors.element);

            if (isExpanded($item)) { // Only if expanded
                collapse($item);
                if (data[IKSM.dataAttrs.collapseChildren]) {
                    collapseChildren($item);
                }
            } else {
                expand($item);
                if (data[IKSM.dataAttrs.collapseOther]) {
                    collapseOther($item);
                }
            }
        }

        function processToggledLinks() {
            if (
              data.hasOwnProperty(IKSM.dataAttrs.disableParentLinks)
              || data.hasOwnProperty(IKSM.dataAttrs.toggleByItemClick)
            ) {
                var $elements = $menu.find("a[data-toggle=1]");

                $elements.each(function (index, element) {
                    var $item = $(element).closest(selectors.elementInner);
                    $item.click(processClick);
                    $item.find(selectors.toggle).off('click');
                });
            }
        }

        function processInitialExpansion() {
            var $elements;

            // Initial Expansion
            $elements = $menu.find(selectors.elementExpandedInitial);
            if ($elements.length) {
                var screenWidth = parseInt(data[IKSM.dataAttrs.initialExpansionDisableScreenWidth]);

                $elements.each(function (index, element) {
                    const $element = $(element);

                    if (screenWidth && isScreenWidthLessThan(screenWidth)) {
                        var $tree = $element.children(selectors.treeContainer);
                        $tree.css("display", "");
                        $element.removeClass(classes.element.expanded);
                    }
                    $element.removeClass(classes.element.expandedInitial);
                });
            }

            // Current Terms Expansion
            $elements = $menu.find(selectors.elementExpandedCurrent);
            if ($elements.length) {
                $elements.removeClass(classes.element.expandedCurrent);
            }
        }

        function isExpanded($element) {
            return $element.hasClass(classes.element.expanded);
        }

        function hasChildren($element) {
            return $element && $element.hasClass(classes.element.hasChildren);
        }

        function expand($element, duration) {
            if (hasChildren($element)) {
                // TODO: Recalculate real-height, if children were collapsed/expanded changes
                duration = duration === undefined ? data[IKSM.dataAttrs.expandAnimationDuration] : duration;
                var isCollapsing = $element.hasClass(classes.element.collapsing);
                var $tree = $element.children(selectors.treeContainer);

                $element.addClass(classes.element.expanded);
                $element.addClass(classes.element.expanding);
                $element.removeClass(classes.element.collapsing);

                var height;
                if (isCollapsing) {
                    height = $tree.data("real-height");
                } else {
                    $tree.css('opacity', 0);
                    $tree.css('display', 'block'); // To get correct outerHeight
                    height = $tree.outerHeight();
                    $tree.css('opacity', '');
                    $tree.css('display', '');
                    $tree.data("real-height", height);
                    $tree.css("height", 0); // Required for animate
                }

                $tree.css("display", "block"); // Make it visible
                $tree.stop().animate({height: height}, duration, function () {
                    $tree.css("height", ""); // Remove unnecessary height
                    $element.removeClass(classes.element.expanding);
                });

                log('expand', $element, height);
            }
        }

        function collapse($element, duration) {
            if (hasChildren($element)) {
                duration = duration === undefined ? data[IKSM.dataAttrs.collapseAnimationDuration] : duration;
                var isExpanding = $element.hasClass(classes.element.expanding);
                var $tree = $element.children(selectors.treeContainer);

                $element.removeClass(classes.element.expanded);
                $element.removeClass(classes.element.expanding);
                $element.addClass(classes.element.collapsing);

                if (!isExpanding) {
                    var outerHeight = $tree.outerHeight();
                    $tree.data("real-height", outerHeight); // Saving real height to use it, if EXPANDING started before COLLAPSING ended
                }

                $tree.stop().animate({height: 0}, duration, function () {
                    $tree.css("display", "");
                    $tree.css("height", "");
                    $element.removeClass(classes.element.collapsing);
                });

                log('collapse', $element);
            }
        }

        function collapseOther($element) {
            log('collapseOther', $element);
            var id = $element.data("id");

            var $elements = $element
                .parent(selectors.treeContainerInner) // Collapsing SAME level items
                .children(selectors.elementHasChildren + '.' + classes.element.expanded)
                .filter(function () {
                    var $this = $(this);
                    if ($this.data("id") === id) { // Same element
                        return false;
                    }
                    if ($this.find(selectors.element + "[data-id='" + id + "']").length > 0) { // Is parent
                        return false;
                    }
                    return true;
                });

            // Collapse result elements
            $elements.each(function (index, element) {
                var $element = $(element);
                collapse($element);
                // Maybe collapse children
                if (data[IKSM.dataAttrs.collapseChildren]) {
                    collapseChildren($element);
                }
            });
        }

        function collapseChildren($element) {
            log('collapseChildren', $element);
            $element.find(selectors.elementHasChildren).each(function (index, element) {
                collapse($(element));
            });
        }
    });

    function getLinkContainer(element) {
        var $target = $(element)
        var parent = $target.closest(selectors.elementInner)
        return parent[0]
    }

    function log(/*...args*/) {
        // console.log(...args);
    }

    function isScreenWidthLessThan(width) {
        return window.matchMedia('(max-width: ' + width + 'px)').matches;
    }
};
// source --> https://builtplans.com/wp-content/plugins/mobile-menu/includes/js/mobmenu.js?ver=2.8.8 

  /*
    *
    *   Javascript Functions
    *   ------------------------------------------------
    *   WP Mobile Menu
    *   Copyright WP Mobile Menu 2018 - http://www.wpmobilemenu.com
    *
    */

    "use strict";
    function getSelector(el){
      var $el = jQuery(el);
  
      var id = $el.attr("id");
      if (id) { //"should" only be one of these if theres an ID
          return "#"+ id;
      }
  
      var selector = $el.parents()
                  .map(function() { return this.tagName; })
                  .get().reverse().join(" ");
  
      if (selector) {
          selector += " "+ $el[0].nodeName;
      }
  
      var classNames = $el.attr("class");
      if (classNames) {
          selector += "." + jQuery.trim(classNames).replace(/\s/gi, ".");
      }
  
      var name = $el.attr('name');
      if (name) {
          selector += "[name='" + name + "']";
      }
      if (!name){
          var index = $el.index();
          if (index) {
              index = index + 1;
              selector += ":nth-child(" + index + ")";
          }
      }
      return selector;
    }

    function enableMobileMenuElementPicker(){
      const p = new Picker({
          elm: document.getElementById('elm1'),
          mode: 'cover',
          excludeElmName: ['body'],
          events: [{
              key: 'contextmenu',
              fn(event) {
                  event.preventDefault();
              },
          }],
          onInit() {
          },
          onClick(event) {
            var selector = getSelector(event.target).toLowerCase();
            window.parent.receivePickedElement(selector);
            jQuery(selector).hide();
          },
          onHover(event) {
          },
      });

      document.getElementById('m_on').addEventListener('click', () => {
          p.on();
      });

      document.getElementById('m_off').addEventListener('click', () => {
          p.off();
      });

      document.getElementById('m_cover').addEventListener('click', () => {
          p.changeMode('cover');
      });

      document.getElementById('m_target').addEventListener('click', () => {
          p.changeMode('target');
      });

    }
    jQuery( document ).ready( function($) {

      const urlParams = new URLSearchParams( window.location.search );

      if ( urlParams.get( 'mobmenu-action' ) == 'find-element' ) {
        enableMobileMenuElementPicker();
      }

      function mobmenuOpenSubmenus( menu ) {
        var submenu = $(menu).parent().next();

        if ( $(menu).parent().next().hasClass( 'show-sub-menu' )  ) {
          $(menu).find('.show-sub-menu' ).hide();
          $(menu).toggleClass( 'show-sub');
        } else {
          if ( ! $( menu ).parents('.show-sub-menu').prev().hasClass('mob-expand-submenu') && submenu[0] !== $('.show-sub-menu')[0] && $( menu ).parent('.sub-menu').length <= 0 ) {
  
            $(menu).parent().find( '.show-submenu' ).first().hide().toggleClass( 'show-sub-menu' );
            $(menu).toggleClass( 'show-sub');
  
          }
        }

        if ( !$( menu ).parent().next().hasClass( 'show-sub-menu' ) ) {
          submenu.fadeIn( 'slow' );
        } else {  
          submenu.hide();
        }

        if ( ! $('body').hasClass('mob-menu-sliding-menus') ) {
          $( menu ).find('.open-icon').toggleClass('hide');
          $( menu ).find('.close-icon').toggleClass('hide');
        }

        submenu.toggleClass( 'show-sub-menu');
        

      }

      if ( $( 'body' ).find( '.mobmenu-push-wrap' ).length <= 0 &&  $( 'body' ).hasClass('mob-menu-slideout') ) {

        $( 'body' ).wrapInner( '<div class="mobmenu-push-wrap"></div>' );
        $( '.mobmenu-push-wrap' ).after( $( '.mobmenu-left-alignment' ).detach() );
        $( '.mobmenu-push-wrap' ).after( $( '.mobmenu-right-alignment' ).detach() );
        $( '.mobmenu-push-wrap' ).after( $( '.mob-menu-header-holder' ).detach() ); 
        $( '.mobmenu-push-wrap' ).after( $( '.mobmenu-footer-menu-holder' ).detach() ); 
        $( '.mobmenu-push-wrap' ).after( $( '.mobmenu-overlay' ).detach() ); 
        $( '.mobmenu-push-wrap' ).after( $( '#wpadminbar' ).detach() );

        if ( $('.mob-menu-header-holder' ).attr( 'data-detach-el' ) != '' ) {
          $( '.mobmenu-push-wrap' ).after( $(   $('.mob-menu-header-holder' ).attr( 'data-detach-el' ) ).detach() );
        }

      }
      // Double Check the the menu display classes where added to the body.
      var menu_display_type = $( '.mob-menu-header-holder' ).attr( 'data-menu-display' );

      if ( menu_display_type != '' && !$( 'body' ).hasClass( 'mob-menu-slideout' ) && !$( 'body' ).hasClass( 'mob-menu-slideout-over' ) && !$( 'body' ).hasClass( 'mob-menu-slideout-top' ) && !$( 'body' ).hasClass( 'mob-menu-overlay' ) ) {
        $( 'body' ).addClass( menu_display_type );
      }

      // Only force autoplay videos in desktop
      if(! ( /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) ) ){
        $( 'video' ).each( function(){
          if( 'autoplay' === $( this ).attr('autoplay') ) {
            $( this )[0].play();
          } 
        });
      }

      var submenu_open_icon  = $( '.mob-menu-header-holder' ).attr( 'data-open-icon' );
      var submenu_close_icon = $( '.mob-menu-header-holder' ).attr( 'data-close-icon' );

      $( '.mobmenu-content .sub-menu' ).each( function(){

        $( this ).prev().append('<div class="mob-expand-submenu"><i class="mob-icon-' + submenu_open_icon + ' open-icon"></i><i class="mob-icon-' + submenu_close_icon + ' close-icon hide"></i></div>');

        if ( 0 < $( this ).parents( '.mobmenu-parent-link' ).length  ) {
          $( this ).prev().attr('href', '#');
        }

      });
      
      $( document ).on( 'click', '.mobmenu-parent-link .menu-item-has-children' , function ( e ) {
        
        if ( e.target.parentElement != this) return;
        
        e.preventDefault();
        $(this).find('a').find('.mob-expand-submenu').first().trigger('click');
        e.stopPropagation();
        
      });
      $( document ).on( 'click', '.show-nav-left .mobmenu-push-wrap,  .show-nav-left .mobmenu-overlay', function ( e ) { 
  
        e.preventDefault();
        $( '.mobmenu-left-bt' ).first().trigger( 'click' );
        e.stopPropagation();

      });
      
      $( document ).on( 'click', '.mob-expand-submenu' , function ( e ) {

        // Check if any menu is open and close it.
        if ( 1 == $( '.mob-menu-header-holder' ).attr( 'data-autoclose-submenus' ) && ! $(this).parent().next().hasClass( 'show-sub-menu' ) ) {
          if ( 0 < $( '.mob-expand-submenu.show-sub' ).length &&  $(this).parents('.show-sub-menu').length <= 0 ) {
            mobmenuOpenSubmenus( $( '.mob-expand-submenu.show-sub' ) );
          }
        }

        mobmenuOpenSubmenus( $(this) );
        e.preventDefault();
        e.stopPropagation();

      });

      $( document ).on( 'keyup', '.mobmenu-left-bt', function(e){
        if( e.type != 'click' && e.which != 13 || e.which == 9 || jQuery(this).hasClass( 'mobmenu-trigger-action' ) ) {
          return;
        }

        mobmenuClosePanel( 'mobmenu-left-panel' );
        e.stopPropagation();
      });

      $( document ).on( 'keyup', '.mobmenu-right-bt', function(e){
        if( e.type != 'click' && e.which != 13 || e.which == 9 || jQuery(this).hasClass( 'mobmenu-trigger-action' ) ) {
          return;
        }

        mobmenuClosePanel( 'mobmenu-right-panel' );
        e.stopPropagation();
      });

      
     
      $( document ).on( 'click', '.mobmenu-panel.show-panel .mob-cancel-button, .show-nav-right .mobmenu-overlay, .show-nav-left .mobmenu-overlay', function ( e ) { 
        
        

        e.preventDefault();
        mobmenuClosePanel( 'show-panel' );
        if ( $('body').hasClass('mob-menu-sliding-menus') ) {
          $( '.mobmenu-trigger-action .hamburger' ).toggleClass('is-active');
        }

      });

      $( document ).on( 'click', '.mobmenu-trigger-action', function(e){
        e.preventDefault();
        
        var targetPanel = $( this ).attr( 'data-panel-target' );
        
        if ( ! $( 'body' ).hasClass( 'show-nav-left' ) &&  ! $( 'body' ).hasClass( 'show-nav-right' )  ) {
          if ( 'mobmenu-filter-panel' !==  targetPanel ) {
            mobmenuOpenPanel( targetPanel );
          }
        }

      });

      $( document ).on( 'click', '.hamburger', function(e){
        var targetPanel = $(this).parent().attr('data-panel-target');
        e.preventDefault();
        e.stopPropagation();
        
        $(this).toggleClass( 'is-active' );
        
        setTimeout(function(){ 
          if ( $( 'body' ).hasClass('show-nav-left') ) {
            if ( $('body').hasClass('mob-menu-sliding-menus') ) {
              $( '.mobmenu-trigger-action .hamburger' ).toggleClass('is-active');
            }
            mobmenuClosePanel( targetPanel );
            
          } else {
            mobmenuOpenPanel( targetPanel );
          }
            
        }, 400);
        

      });
     
      $('.mobmenu a[href*="#"], .mobmenu-panel a[href*="#"]')
        // Remove links that don't actually link to anything
        .not('[href="#0"]')
        .on( 'click', function(event) {
          // On-page links  
  
        if (
          location.pathname.replace(/^\//, '') == this.pathname.replace(/^\//, '') 
          && 
          location.hostname == this.hostname
          &&
          $(this).parents('.mobmenu-content').length > 0
        ) {
          // Figure out element to scroll to.
          var target;

          try {
	          target = decodeURIComponent( this.hash );
          } catch(e) {
 	          target = this.hash;
          }

          $( 'html' ).css( 'overflow', '' );

          // Does a scroll target exist?
          if (target.length) {

            
          if ( 0 < $(this).parents('.mobmenu-left-panel').length ) {
            mobmenuClosePanel( 'mobmenu-left-panel' );
          } else {
            mobmenuClosePanel( 'mobmenu-right-panel' );
          }

            target = target.length ? target : $('[name=' + this.hash.slice(1) + ']');

            $('body,html').animate({
              scrollTop: target.offset().top - $(".mob-menu-header-holder").height() - 50
            }, 1000);
          }
        }
      });
      function mobmenuClosePanel( target ) {

        $( '.' + target ).toggleClass( 'show-panel' );
        $( 'html' ).removeClass( 'show-mobmenu-filter-panel' );
        $( 'body' ).removeClass( 'show-nav-right' );
        $( 'body' ).removeClass( 'show-nav-left' );
        $( 'html' ).removeClass( 'mob-menu-no-scroll' ); 

        setTimeout(function(){
          $( '.mob-menu-sliding-menus [data-menu-level]' ).scrollTop( '0' );
          if ( 1 == $( '.mob-menu-header-holder' ).attr( 'data-autoclose-submenus' )  ) {
            $( '.mob-expand-submenu.show-sub' ).click();
            $( '.mobmenu-content .show-sub-menu' ).removeClass( 'show-sub-menu' );
          }
          
        }, 400);

      }
    
      function mobmenuOpenPanel( target) {
        $( '.mobmenu-content' ).scrollTop(0);
        $( 'html' ).addClass( 'mob-menu-no-scroll' ); 
    
        if ( $('.' + target ).hasClass( 'mobmenu-left-alignment' ) ) {
          $('body').addClass('show-nav-left');
        }
        if ( $('.' + target ).hasClass( 'mobmenu-right-alignment' ) ) {
          $('body').addClass('show-nav-right');
        }
    
        $('.' + target ).addClass( 'show-panel' );
    
      }
    });

window.Picker = class Picker {
  constructor(options = {}) {
      this.elm = options.elm || document.querySelector('body');
      this.mode = options.mode || 'target';
      this.excludeElmName = options.excludeElmName || [];
      this.switch = typeof options.switch === 'boolean' ? options.switch : true;

      this.events = options.events || [];
      this.onInit = options.onInit;
      this.onClick = options.onClick ? options.onClick.bind(this) : null;
      this.onHover = options.onHover ? options.onHover.bind(this) : null;


      // Internal handler
      this.fn_bind_clickHandle = null;
      this.fn_bind_hoverHandle = null;
      this.fn_bind_contextmenuHandle = null;
      this._init();
  }
  on() {
      this.switch = true;
  }
  off() {
      this.switch = false;
      this._removeTargetShowPos();
      this._removeCoverShowPos();
  }
  changeMode(mode) {
      let modeArr = ['cover', 'target'];
      if (modeArr.includes(mode)) {
          this.mode = mode;
          this._removeTargetShowPos();
          this._removeCoverShowPos();
      } else {
          console.error(`Mode error, only includes [ ${modeArr.join(" | ")} ]`);
      }
  }
  destroy() {
      this.events.forEach((eo) => {
          eo.fn_bind = eo.fn.bind(this);
          this.elm.removeEventListener(eo.key, this[`_${eo.key}_Handle`], false);
      });

      this.elm.removeEventListener('mouseover', this.fn_bind_hoverHandle, false);
      this.elm.removeEventListener('click', this.fn_bind_clickHandle, false);

      this._removeTargetShowPos();
      document.querySelector("#_picker_cover_wrap_box").remove();
  }
  _init() {
      let wrapDom = document.createElement('div');
      wrapDom.setAttribute("id", "_picker_cover_wrap_box");
      wrapDom.innerHTML = '<svg></svg>';
      document.body.appendChild(wrapDom);
      this._initEvent();
      this.onInit && this.onInit();
  }
  _initEvent() {
      this.events.forEach((eo) => {
          this[`_${eo.key}_Handle`] = (event) => {
              if (this._triggerEvent(event) === false) return;
              eo.fn && eo.fn(event);
          };
          eo.fn_bind = this[`_${eo.key}_Handle`].bind(this);
          this.elm.addEventListener(eo.key, this[`_${eo.key}_Handle`], false);
      });

      this.fn_bind_hoverHandle = this._hoverHandle.bind(this);
      this.fn_bind_clickHandle = this._clickHandle.bind(this);

      this.elm.addEventListener('mouseover', this.fn_bind_hoverHandle, false);
      this.elm.addEventListener('click', this.fn_bind_clickHandle, false);

  }
  _triggerEvent(event) {
      let tipsDom = document.querySelector("#_pick_tips_content");
      if (
          this.switch &&
          !this.excludeElmName.includes(event.target.localName.toLocaleLowerCase()) &&
          !(tipsDom ? tipsDom.contains(event.target) : 0)
      ) {
          event.stopPropagation();
          event.preventDefault();
          return true;
      } else {
          return false;
      }
  }
  _hoverHandle(event) {
      if (this._triggerEvent(event) === false) return;
      switch (this.mode) {
          case 'cover':
              this._coverShowPos(event);
              break;
          case 'target':
              this._targetShowPos(event);
              break;
      }
      this.onHover && this.onHover(event);
  }
  _clickHandle(event) {
      if (this._triggerEvent(event) === false) return;
      this.onClick && this.onClick(event);
  }
  _targetShowPos(event) {
      this._removeTargetShowPos();
      if (event.target.localName === 'body') return;
      event.target.classList.add("_picker_target_elm");
  }
  _removeTargetShowPos() {
      document.querySelectorAll("._picker_target_elm").forEach((elm) => {
          elm.classList.remove("_picker_target_elm");
      });
  }
  _coverShowPos(event) {
      let elm = event.target;
      let W_W = window.screen.availWidth;
      let W_H = window.screen.availHeight;
      let pos = elm.getBoundingClientRect();
      let p = {
          tX: pos.left > 0 ? pos.left : 0,
          tY: pos.top > 0 ? pos.top : 0,
          w: pos.right - pos.left,
          h: pos.bottom - pos.top,
      };
      let path_W = `M 0 0 h ${W_W} v ${W_H} h -${W_W} Z`;
      let path_box = `M ${p.tX} ${p.tY} h ${p.w} v ${p.h} h -${p.w} Z`;
      let elm_path1 = `<path d="${path_W} ${path_box}"></path>`;
      let elm_path2 = `<path d="${path_box}"></path>`;
      document.querySelector("#_picker_cover_wrap_box svg").innerHTML = elm_path1 + elm_path2;
  }
  _removeCoverShowPos() {
      document.querySelector("#_picker_cover_wrap_box svg").innerHTML = '';
  }
};