/*
 * Droppy 0.1.2
 * (c) 2008 Jason Frame (jason@onehackoranother.com)
 */

  
  jQuery.fn.droppy = function(options) {

    options = jQuery.extend({speed: 250}, options || {});

    this.each(function() {

      var root = this, zIndex = 1000;

      function getSubnav(ele) {
        if (ele.nodeName.toLowerCase() == 'li') {
          var subnav = jQuery('> ul', ele);
          return subnav.length ? subnav[0] : null;
        } else {
          return ele;
        }
      };

      function getActuator(ele) {
        if (ele.nodeName.toLowerCase() == 'ul') {
          return jQuery(ele).parents('li')[0];
        } else {
          return ele;
        }
      };

      function hide() {
        var subnav = getSubnav(this);
        if (!subnav) return;
        jQuery.data(subnav, 'cancelHide', false);
        setTimeout(function() {
          if (!jQuery.data(subnav, 'cancelHide')) {
            jQuery(subnav).slideUp(options.speed);
          }
        }, 500);
      };

      function show() {
        var subnav = getSubnav(this);
        if (!subnav) return;
        jQuery.data(subnav, 'cancelHide', true);
        jQuery(subnav).css({zIndex: zIndex++}).slideDown(options.speed);
        if (this.nodeName.toLowerCase() == 'ul') {
          var li = getActuator(this);
          jQuery(li).addClass('hover');
          jQuery('> a', li).addClass('hover');
        }
      }
      
        jQuery('ul, li', this).hover(show, hide);
		jQuery('li', this).hover(
        function() { jQuery(this).addClass('hover'); jQuery('> a', this).addClass('hover'); },
        function() { jQuery(this).removeClass('hover'); jQuery('> a', this).removeClass('hover'); }
      );

    });

  };
