/*
 * Droppy 0.1.2
 * (c) 2008 Jason Frame (jason@onehackoranother.com)
 */
(function($) {
	
	$.fn.droppy = function(options) {

		options = $.extend({speed: 250, className: 'droppy'}, options || {});
		
		
		
		//$.easing.def = "easeOutExpo";

		this.each(function() {

			var root = this, zIndex = 5000;

			$(root).addClass(options.className);
			$(root).find('li:has(> ul) > a').addClass('has-subnav');

			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;
				$.data(subnav, 'cancelHide', false);
				setTimeout(function() {
					if (!$.data(subnav, 'cancelHide')) {
						$(subnav).fadeOut(500);
					}
				}, 500);
			};

			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);
					$(li).addClass('hover');
					$('> a', li).addClass('hover');
				}
			};
			
			if (typeof $.fn.hoverIntent == 'function') {
					$('ul, li', this).hoverIntent($.extend({
							sensitivity: 2, interval: 50, timeout: 100
					}, options.hoverIntent || {}, {over: show, out: hide}));
			} else {
					$('ul, li', this).hover(show, hide);
			}
			
				$('li', this).hover(
				function() { $(this).addClass('hover'); $('> a', this).addClass('hover'); },
				function() { $(this).removeClass('hover'); $('> a', this).removeClass('hover'); }
			);

		});

	};

})(jQuery);

