(function($){  
	$.fn.slide = function(options){
		var defaults = {  
			Width: 500,
			Height: 500,
			Speed: 1500,
			NextClass: "Next",
			PrevClass: "Prev",
			Direction: "vertical",
			Offset: 1,
			Restart: false,
			RestartSpeed: options.Speed * 4,
			Wobble: false
		};
	  var options = $.extend(defaults, options);  
		return this.each(function(){
			obj = $(this);
			$("."+options.NextClass).attr("href","javascript:void(0);").hide();
			$("."+options.PrevClass).attr("href","javascript:void(0);").hide();
			$("li",obj).css("width", options.Width);
			$("li",obj).css("height", options.Height);
			if(options.Offset <= 1){ $(obj).css("width", options.Width); $(obj).css("height", options.Height); }
			if(options.Direction == "vertical"){
				var Max = parseInt(($("li", obj).length - options.Offset) * options.Height);
			} else var Max = parseInt(($("li", obj).length - options.Offset) * options.Width);
			var Low = "-"+Max;
			if(options.Direction !== "vertical"){
				$("ul",obj).css("width", (Max+100) + (options.Offset * options.Width)+"px");
				$("li",obj).css("float", "left");
			}
			checkAvailable();
			$("."+options.NextClass).click(function(){ doMove("next"); setTimeout(checkAvailable, 500); });
			$("."+options.PrevClass).click(function(){ doMove("prev"); setTimeout(checkAvailable, 500); });
			function checkAvailable() {
				if(options.Direction == "vertical"){
					var CssAttr = "margin-top";
				} else {
					var CssAttr = "margin-left";
				}
				var Curr = $("ul", obj).css(CssAttr);
				var Curr = parseInt(Curr.substr(0,Curr.length-2));
				if(Curr > Low){
					$("."+options.NextClass).show();
				} else {
					$("."+options.NextClass).hide();
				}
				if(Curr < 0){
					$("."+options.PrevClass).show();
				} else {
					$("."+options.PrevClass).hide();
				}
			}
			function doMove(dir){
				if($(':animated', obj).length){
					return false;
				} else {
					var Ran = "n";
					if(dir.length > 0){
						if(options.Direction == "vertical"){
							var CssAttr = "margin-top";
							var AnimateAttr = "marginTop";
						} else {
							var CssAttr = "margin-left";
							var AnimateAttr = "marginLeft";
						}
						var Height = options.Height;
						var Curr = $("ul", obj).css(CssAttr);
						var Curr = parseInt(Curr.substr(0,Curr.length-2));
						switch(dir){
							case "next" :
								if(options.Direction !== "vertical"){
									var Moving = ((options.Width - Curr));
								} else var Moving = ((Height - Curr));
								if(Curr > Low){
									eval("$('ul',obj).animate({ "+AnimateAttr+": '-'+Moving }, options.Speed)");
									Ran = "y";
								} 
								break;
							case "prev" :
								if(options.Direction !== "vertical"){
									var Moving = ((options.Width + Curr));
								} else var Moving = ((Height + Curr));
								if(Curr < 0){
									eval("$('ul',obj).animate({ "+AnimateAttr+": Moving }, options.Speed)");
									Ran = "y";
								} 
								break;
						}
						if(options.Wobble){
							var elem = $("ul", obj);
							if(Ran == "y"){
								for(i=1;i<=2;i++){
									var Speed = 75 * i;
									mt = Moving + (10 / i);
									$(elem).animate({
										marginLeft: "-"+mt+"px"
									},Speed);
									$(elem).animate({
										marginLeft: "-"+Moving + "px"
									},Speed);
								}
							}
						}
						if(options.Restart){
							if(Ran !== "y"){
								if(dir == "next"){
									var ResetVal = "0px";
									if(ResetVal.length > 0) eval("$('ul',obj).animate({ "+AnimateAttr+": ResetVal }, "+options.RestartSpeed+")");
								}
							}
						}			
					}
				}
			}
		});
};})(jQuery);  