(function($) {
	$.fn.dynamicMenu = function(o) 
	{
		o = $.extend({ fx: "linear", speed: 500, click: function(){} }, o || {});

		return this.each(function() 
		{
			var $last = null;
			
			var me_ = this;
			var me = $(this);
			var noop = function(){};
			var	$back = $('<li class="back"><img id="menu-button" src="frontend/images/site/menu-button.jpg" style="height:37px;" /></li>').appendTo(me);
			var $backimg = $("#menu-button");
			var $li = $("li", this);
			var curr = $("li.current", this)[0] || $($li[0]).addClass("current")[0];
			var submenus_ = new Array();
			
			$li.hover(function(){
				
				// lighten up link
				$("a.toplevel", this).stop(true, false).animate({
					x:1,
				}, {speed: o.speed, step: function(curr, op){
					var r = parseInt((curr * (255 - 42)) + 42);
					var g = parseInt((curr * (255 - 58)) + 58);
					var b = parseInt((curr * (255 - 1)) + 1);
					
					curr = 1 - curr;
					var s = parseInt(curr * 255);
					$(this).css({'color': 'rgb('+r+','+g+','+b+')', 'text-shadow': '1px 1px 1px rgb('+s+','+s+','+s+')', '-moz-text-shadow': '1px 1px 1px rgb('+s+','+s+','+s+')'});
				}});
				
				
				// move .back
				var w = $("a.toplevel", this).width();
				var l = $("a.toplevel", this).position().left;
				
				w += 14;
				$backimg.css('width', w+'px');
				
				$this = this;
				
				$back.css({display:'block'});
				$back.stop(true, false).animate({
					width: w,
					left: l,
					opacity:1
				}, o.speed, o.fx, function(){
					
					// open up submenu
					var $submenu = $("a.toplevel", $this).parent().find(".submenu-holder");
					var id = $submenu.attr('id'); 
					if(!id) return;
					id = id.split("-"); id = id[1];
					var w = $submenu.width();
					var h = $submenu.height();
					if(!submenus_[id])
					{
						submenus_[id] = new Array();
						submenus_[id][0] = w;
						submenus_[id][1] = h;
					}
					else
					{
						w = submenus_[id][0];
						h = submenus_[id][1];
					}

					//$submenu.css({width:'0', height:'0', display:'block', opacity:1});
					$submenu.css({height:'0', display:'block', opacity:1});
					$(".submenu-container", $submenu).hide();
					$(".submenu-container:first", $submenu).show();
					$submenu.animate({
						//width:w,
						height:h
					}, o.speed, o.fx);					
				});

			}, function(){
				// gray out link
				$("a.toplevel", this).stop(true, false).css({'color': 'rgb(33, 0, 0)', 'text-shadow': '1px 1px 1px #fff', '-moz-text-shadow': '1px 1px 1px #fff'});


				// fade out .back
				$back.stop(true, false).fadeOut(500);
				
				// fade out submenu
				var $submenu = $("a.toplevel", $this).parent().find(".submenu-holder");
				$submenu.stop(true, false).fadeOut(500);				
				
			});
		});
	};
})(jQuery);

