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

