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

		var settingsDefault = {
			effect		: '', /* slide,fade */
			rtl			: false,
			noMenu		: '.first', 
			duration	: {
				fadeIn	: 800,
				fadeOut	: 10,					
				slideIn	: 600,
				slideOut: 1	
			}
		};

		var settings = $.extend({}, settingsDefault, options);		
		var self = this;

		return this.each(function() {
			var $this = $(this);
			var $menuLinks = $this.find("td").not(settings.noMenu);
		
			$menuLinks.bind('mouseenter',function() {
				var $currentMenuLink = $(this);
				var $currentMenu = $currentMenuLink.find("div:first");
				menuAction($currentMenuLink,$currentMenu,$this,"show");
				$(this).children('a').focus();
			}).bind('mouseleave',function() {	
				var $currentMenuLink = $(this);
				var $currentMenu = $currentMenuLink.find("div:first");
				menuAction($currentMenuLink,$currentMenu,$this,"hide");
				$(this).children('a').blur();
			});
			
			$menuLinks.children('a').bind('focus',function() {
				if ($(this).parent().hasClass('last')) 
					$(this).parent().addClass('hovered');
			}).bind('blur',function() {	
				if ($(this).parent().hasClass('last')) 
					$(this).parent().removeClass('hovered');
			});

			function menuAction($currentMenuLink,$currentMenu,$container, mode){
	
				if (mode == "show") {
					var left = right = 0;
					//var height = $currentMenu.height();
				
					if (settings.rtl) {						
						if ( ($currentMenuLink.offset().left + $currentMenuLink.width() - $currentMenu.width() ) <  $container.offset().left    ) {
							right = $container.width() - $currentMenu.width();
						} else if ( ( $currentMenuLink.offset().left + $currentMenuLink.width() + 8 ) < ($container.offset().left + $container.width()) ) {
							right =  $container.width() - ($currentMenuLink.offset().left + $currentMenuLink.width() - $container.offset().left) - 8;
							left = ($container.width() - (right + $currentMenu.width()) - 2 );							
						} else {
							left = $container.width() - $currentMenu.width() - 2;
						}
					} else {
						if ( ($currentMenuLink.offset().left + $currentMenu.width()) >  ( $container.offset().left + $container.width() )  ) {
							left = 	( $container.width()) -  $currentMenu.width() - 2; 
						} else if ( ( $currentMenuLink.offset().left - 8 ) > $container.offset().left ) {
							left = $currentMenuLink.offset().left - $container.offset().left - 8;
							right = ($container.width() ) - ( left + $currentMenu.width() + 2 );				
						} else {
							right = ($container.width() ) - ( left + $currentMenu.width() + 2 );
						}
					}	
				
					switch (settings.effect) {
						case 'fade' :
							$currentMenu.css({'left':left+'px',"right":right+"px"}).fadeIn(settings.duration.fadeIn);
						break;
							
						case 'slide' : 
							$currentMenu.css({'left':left+'px',"right":right+"px"}).slideDown(settings.duration.slideIn);	
						break;
						default :
							$currentMenu.css({'left':left+'px',"right":right+"px"}).show();
						break;
						
					}					
					return true;
				}
				
				if (mode == "hide") {
					switch (settings.effect) {
						case 'fade' :
							$currentMenu.fadeOut(settings.duration.fadeOut);
						break;					
						case 'slide' : 		
							$currentMenu.slideUp(settings.duration.slideOut);
						break;						
						default :
							$currentMenu.hide();
						break;
						
					}
					return true;
				}
				
				return false;
			}
		});
	};



})(jQuery);
