// 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",
    subIndicatorClass: "menu-sub-indicator",
    rightArrow: " »"
  }

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

  var obj = $(this);

  $(obj).find('li ul li:not(.noHover):has(ul) > a').prepend('<span class="'+settings.subIndicatorClass+'">' + 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').not('.noHover').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("currentFade");
      }
    },
    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("currentFade");
      }
   }
  );

  $(obj).find('li ul:empty').css('visibility', 'hidden');
}
