// Pixelsilk Website Navigation Menu Plugin
// v 3.2

/*
  Options that can be passed to the plugin:
    fadeInTime
    fadeOutTime
    menuWidth: (int) width of the submenu container element
    containerElement: (string) theme element to check width against
    containerWidth: (int) width to use instead of containerElement's; overrides
    menuElement: (string) submenu container element to look for
    rightArrow: (html) HTML to render the "submenu" arrow indicator
*/
jQuery.fn.navMenu = function(options) {

  var defaults = {
    fadeInTime: 200, // in milliseconds
    fadeOutTime: 300,  // in milliseconds
    menuWidth: 250,
    containerElement: "#theme",
    containerWidth: 0,
    menuElement: "ul",
    rightArrow: " »"
  }

  var settings = $.extend({}, defaults, options);

  var obj = $(this);

  $(obj).find('li ul li:has(ul) > a').prepend('<span class="menu-sub-indicator">' + settings.rightArrow + '</span>');

  var pos;
  var menuWidth = settings.menuWidth;
  var containerWidth = $(settings.containerElement).width();
  if ( settings.containerWidth >  0 ) {
    containerWidth = settings.containerWidth;
  }
  $(obj).find('li ' + settings.menuElement + ' li ' + settings.menuElement).each(function() {
    pos = $(this).parent().parent().parent().position().left;
    if (containerWidth - pos < (menuWidth * 2)) {
      $(this).css('left', '-' + menuWidth + 'px');
    }
  });

  $(obj).find('li ' + settings.menuElement).attr('fadeState', 'none');
  $(obj).find('li').hover(
    function() {
      var fadeElement = $(this).find(settings.menuElement).eq(0);

      if($(fadeElement).attr('fadeState') == 'fadeOut'){
        $(fadeElement).stop(true,true);
        $(fadeElement).attr('fadeState','none');
      }
      if($(fadeElement).attr('fadeState') == 'none'){
        $(fadeElement).attr('fadeState','fadeIn');
        $(fadeElement).fadeIn(settings.fadeInTime,function(){
          $(this).attr('fadeState', 'none');
        });
      }
      if ( !$(this).hasClass("current") ) {
        $(this).addClass("over");
      }
    },
    function() {
      var fadeElement = $(this).find(settings.menuElement).eq(0);
      
      if($(fadeElement).attr('fadeState') == 'fadeIn'){
        $(fadeElement).stop(true,true);
        $(fadeElement).attr('fadeState','none');
      }
      if($(fadeElement).attr('fadeState') == 'none'){
        $(fadeElement).attr('fadeState','fadeOut');
        $(fadeElement).fadeOut(settings.fadeOutTime, function() {
          $(this).attr('fadeState', 'none');
        });
      }
      if ( !$(this).hasClass("current") ) {
        $(this).removeClass('over');
      }
    }
  );

    $(obj).find('>li:first').addClass('first');
    $(obj).find('>li:last').addClass('last');
    $(obj).find('li ul:empty').css('visibility', 'hidden');
    $(obj).find('>li>ul').each(function() {
        $(this).addClass('firstParent');
    });
    $(obj).find('ul').each(function() {
        $(this).find('li:last').css('border-bottom','0px');
    });
    
    $(obj).find('li:has(ul)').addClass('hasChild');
    
}
