(function($)
{
	$.fn.navigationMenu = function( callerSettings )
	{
		var settings = $.extend({
			eventType : 'hover',
			menuWrap: 'ul',
			menuEffect: 'slide',
			menuSpeed: 100,
			timeout: 300
		}, callerSettings || {});
		
		var navigation = $(this);

		$('li:has('+settings.menuWrap+')',this).children(settings.menuWrap).hide().end()
			.each(function(i){
				var menu = $(this).children(settings.menuWrap);
				$(this).addClass('ui-has-child');
				$(this).mouseover(function(event){
					$(this).addClass('ui-on-child');
					if(event.target){
						if($(menu).is(':hidden')){
							switch( settings.menuEffect ){
							case 'slide':
								$(menu).slideDown( settings.menuSpeed );
							break;
							case 'fade':
								$(menu).fadeIn( settings.menuSpeed );
							break;
							}
							
							menuHandler(menu);
						}
					}
				});
			});
				
		function menuHandler(menu)
		{
			var timerID = 0;
			
			switch(settings.eventType){
				case 'hover':
					$(menu).parent().hover(function(event){
						if(timerID){ clearTimeout(timerID); };
						timerID  = 0;
						switch( settings.menuEffect ){
						case 'slide':
							$(this).siblings().children(settings.menuWrap).slideUp( settings.menuSpeed );
						break;
						case 'fade':
							$(this).siblings().children(settings.menuWrap).fadeOut( settings.menuSpeed );
						break;
						}
						
						$(menu).parent('li').removeClass('ui-on-child');
					},
					function(){
						timerID = setTimeout(function(){
							switch( settings.menuEffect ){
							case 'slide':
								$(menu).slideUp( settings.menuSpeed );
							break;
							case 'fade':
								$(menu).fadeOut( settings.menuSpeed );
							break;
							}
							
							$(menu).parent('li').removeClass('ui-on-child');
						},settings.timeout);
					});
				break;
				
				case 'toggle':
					// We can do this later
				break;
			
			}
		};
	};
})(jQuery);	