(function($) {
	$.fn.dropmenu = function(options) {

		return this.each(function() {
			var opts = $.extend({}, $.fn.dropmenu.defaults, options);
			$(this).removeClass("nojava");
			$('ul, li', this).hover(
				
				//	showing submenu
				function() {
					var subnav = $.fn.dropmenu.getSubnav(this);
					if (!subnav) return;
					if ($(subnav).filter(':animated').length) return;

					$.data(subnav, 'cancelHide', true);
					$(subnav).css({zIndex: $.fn.dropmenu.zIndex++});
										
					switch (opts.effect) {
						case 'slide':
							$(subnav).slideDown(opts.speed);
							break;
						
						case 'fade':
							$(subnav).fadeIn(opts.speed);
							break;
							
						default:
							$(subnav).show();
							break;
					}

				//	hiding submenu
				}, function() {
					var subnav = $.fn.dropmenu.getSubnav(this);
					if (!subnav) return;
					$.data(subnav, 'cancelHide', false);
					setTimeout(function() {
						if (!$.data(subnav, 'cancelHide')) {
							
							switch (opts.effect) {
								case 'slide':
									$(subnav).slideUp(opts.speed);
									break;
								
								case 'fade':
									$(subnav).fadeOut(opts.speed);
									break;
									
								default:
									$(subnav).hide();
									break;
							}
						}
					}, opts.timeout);
				}
			);
			$('li', this).hover(
				function() { $(this).addClass('hover'); },
				function() { $(this).removeClass('hover'); }
			);
		});
	};
	
	$.fn.dropmenu.getSubnav = function(ele) {
		if (ele.nodeName.toLowerCase() == 'li') {
			var subnav = $('> ul', ele);
			return subnav.length ? subnav[0] : null;
		} else {
			return ele;
		}
	}
	
	$.fn.dropmenu.zIndex 	= 1000;
	$.fn.dropmenu.defaults 	= {
		speed: 		'normal',		//	'normal', 'fast', 'slow', 100, 1000, etc
		effect:		'',				//	'slide', 'fade'
		timeout:	300
	};
})(jQuery);
