(function($) {
  var Navigation = function(element, options) {
    
    var el = $(element);
    var obj = this;
    var settings = $.extend({}, options || {});
    
    var initialize = function() {
      var panels = el.find('li ul').hide();
      if ($('html.ie7').length)
        panels.each(function() { var el = $(this); el.css('width', el.width()); });
      el.find('li a:not(:only-child)').addClass('dropdown');
      
      // events
      el.find('li a.dropdown').click(onClick).mouseenter(onMouseEnter);
      el.find('li:has(ul)').mouseleave(onMouseLeave);
    };
    
    var onClick = function(event) {
      var element = $(this);
      if (/^\#/.test(element.attr('href'))) {
        event.preventDefault();
        element.next().slideDown('fast');
      }
    }
    
    var onMouseEnter = function(event) {
      var element = $(this);
      element.parent().addClass('hover');
      element.next().slideDown('fast');
    }
    
    var onMouseLeave = function(event) {
      var element = $(this);
      element.children('ul').slideUp('fast', function() {
        $(this).parent().removeClass('hover');
      });
    }
    initialize();
  }
  
  $.fn.navigation = function(options) {
    return this.each(function() {
      var element = $(this);
      
      // Return early if this element already has a plugin instance
      if (element.data('navigation')) return;
      
      // pass options to plugin constructor
      var navigation = new Navigation(this, options);
      
      // Store plugin object in this element's data
      element.data('navigation', navigation);
    })
  }
  
})(jQuery);
