/*
	jQuery menu v1.21
	
	Wouter Beeftink
	wouter@footsteps.nl
*/
(function($) {
	
	$.fn.menu = function(settings) {

		var settings = $.extend({
			
			dropdown : '.dropdown',
			effect : 'default',
			speed : 'normal',
			swapEnabled : true,
			swapClass : 'active',
			swapTarget : null,
			ignoreDummy : false

		}, settings);
		
		function toggleClass(button, eventType) {
				
			var object = settings.swapTarget ? button.children(settings.swapTarget) : button;
			
			if(eventType == 'mouseleave')
				object.removeClass(settings.swapClass);
			else
				object.addClass(settings.swapClass);

		};
		
		var show = {
			'fade' : function(object) {
				
				this['default'](object);
				
				object.css('opacity', 0);
				object.animate({
					opacity : 1
				}, settings.speed);
				
			},
			'slideDown' : function(object) {
				
				this['default'](object);
				
				if(!object.data('oHeight'))
					object.data('oHeight', object.height());
				object.css({
					'overflow' : 'visible',
					'height' : 0
				});
				object.animate({
					height : object.data('oHeight')
				}, settings.speed);
			
			},
			'slideRight' : function(object) {	
				
				this['default'](object);
				
				if(!object.data('oWidth'))
					object.data('oWidth', object.width());
				object.css({
					'overflow' : 'visible',
					'width' : 0
				});
				object.animate({
					width : object.data('oWidth')
				}, settings.speed);
				
			},
			'default' : function(object) {
				object.show();
			}
		};
		
		var hide = {
			'default' : function(object) {
				object.stop();
				object.hide();
			}
		};
		
		return this.each(function() {
			
			var button = $(this),
				dropdown = button.children(settings.dropdown);
			
			if((settings.ignoreDummy && dropdown.children().length > 1) || (!settings.ignoreDummy && dropdown.children().length)) {
			
				dropdown.hide();
				
				if(settings.swapEnabled)
					button.active = button.hasClass(settings.swapClass);
			
				button.hover(function(event) {
				
					if(settings.swapEnabled && !button.active)
						toggleClass(button, event.type);
					
					show[settings.effect](dropdown);
					
				}, function(event) {
					
					if(settings.swapEnabled && !button.active)
						toggleClass(button, event.type);
						
					hide['default'](dropdown);

				});
				
			};
			
		});

	};
})(jQuery);