// Pixelsilk Website Navigation Menu Plugin
// v 2.0

function findLeft(obj) {
  var curLeft = 0;
  if (obj.offsetParent) {
    curLeft = obj.offsetLeft;
    while (obj = obj.offsetParent) {
      curLeft += obj.offsetLeft;
    }
  }
  return curLeft;
}

/*
  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
    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",
    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;
  $(obj).find('li ' + settings.menuElement + ' li ' + settings.menuElement).each(function() {
    pos = findLeft($(this).parent().parent().parent().get(0));
    //alert(pos);
    if ($(settings.containerElement).width() - pos < (menuWidth * 2)) {
      $(this).css('left', '-' + menuWidth + 'px');
    }
  });

  $(obj).find('li ' + settings.menuElement).attr('fadeState', 'none');
  $(obj).find('li').hover(
    function() {
      if ($(this.getElementsByTagName(settings.menuElement)[0]).attr('fadeState') == 'fadeOut') {
        $(this.getElementsByTagName(settings.menuElement)[0]).stop(true, true);
        $(this.getElementsByTagName(settings.menuElement)[0]).attr('fadeState', 'none');
      }

      if ($(this.getElementsByTagName(settings.menuElement)[0]).attr('fadeState') == 'none') {
        $(this.getElementsByTagName(settings.menuElement)[0]).attr('fadeState', 'fadeIn');
        $(this.getElementsByTagName(settings.menuElement)[0]).fadeIn(settings.fadeInTime, function() {
          $(this).attr('fadeState', 'none');
        });
      }
    },
    function() {
      if ($(this.getElementsByTagName(settings.menuElement)[0]).attr('fadeState') == 'fadeIn') {
        $(this.getElementsByTagName(settings.menuElement)[0]).stop(true, true);
        $(this.getElementsByTagName(settings.menuElement)[0]).attr('fadeState', 'none');
      }

      if ($(this.getElementsByTagName(settings.menuElement)[0]).attr('fadeState') == 'none') {
        $(this.getElementsByTagName(settings.menuElement)[0]).attr('fadeState', 'fadeOut');
        $(this.getElementsByTagName(settings.menuElement)[0]).fadeOut(settings.fadeOutTime, function() {
          $(this).attr('fadeState', 'none');
        });
      }
    }
  );

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

}
