(function ($) {
  $(function () {

    var $doc = $(document);
    var $bdy = $('body');

    (function(nav) {
      var $nav = $(nav);
      var toggle;

      if ($nav.length) {
        toggle = function($li, action) {
          var intent = $li.data('intent');
          if (intent) {
            clearTimeout(intent);
          }
          if (action) {
            intent = setTimeout(function() {
              if (action === 'open') {
                $li.addClass('hover');
                $li.find('> .sub-menu').stop(true, true).slideDown(200);
                $bdy.addClass('nav-dropdown');
                if (!$('.menu-overlay').length && $li.parent().is('ul#menu-primary-menu.menu')) {
                  $bdy.append('<div class="menu-overlay"></div>');
                }
              } else {
                $li.removeClass('hover');
                $li.find('> .sub-menu').stop(true, true).slideUp(200);
                $bdy.removeClass('nav-dropdown');
                if ($('.menu-overlay').length) {
                  $('.menu-overlay').remove();
                }
              }
            }, 100);
          }
          $li.data('intent', intent);
        };
        $nav.on('mouseenter mouseleave', '> .menu-item-has-children', function(e) {
          if ($('.nav-toggle').css('display') == 'none') {
            toggle($(this), (e.type === 'mouseenter' ? 'open' : 'close'));
          }
        }).on('mouseenter', '.sub-menu', function(e) {
          if ($('.nav-toggle').css('display') == 'none') {
            toggle($(this).closest('li'));
          }
        });
      }
    })('.nav-primary > ul, .nav-library > .wrap > ul');

    /* main nav submenu, mobile only */
    $('.nav-primary > ul > li.menu-item-has-children > a, .nav-library > .wrap > ul li.menu-item-has-children > a').on('click', function (e) {
      if ($('.nav-toggle').css('display') != 'none') {
        var $li = $(this).parent();
        if ($li.hasClass('ddactive')) {
          $li.children('.sub-menu').slideUp(300, function () {
            $li.removeClass('ddactive');
            $(this).removeClass('ddopen');
          });
        } else {
          $li.addClass('ddactive').children('.sub-menu').slideDown(300, function () {
            $(this).addClass('ddopen').css('display', '');
          });
        }
        e.preventDefault();
      }
    });

    /* toggle */
    $doc.on('click', '.toggle', function(e) {
      /* toggle content with ID of elements data-target */
      var target = $(this).attr('data-target');
      if (target) {
        if ($(this).hasClass('nav-toggle')) {
          /* insert/remove menu overlay */
          if ($('.menu-overlay').length) {
            $('.menu-overlay').remove();
          } else {
            $bdy.append('<div class="menu-overlay"></div>');
          }
        }
        $(target).slideToggle();
        $(this).toggleClass('toggle-closed');
        e.preventDefault();
      }
    });

    $doc.on('click', '.menu-overlay', function(e) {
      $('.nav-toggle').trigger('click');
    });

  });
})(jQuery);
