jQuery.fn.slider=function(f){
	
	var s={
		wait:4000,
		fade:1000,
		showPosition:true,
		direction:"left",
		showControls:false,
		showText:true,
		beforeSlide:function(){},
		afterSlide:function(){},
		onRewind:function(){},
		hoverPause:false
	};
	
	if(typeof f=="object")    {
		if(typeof f.showPosition!="undefined"){s.showPosition=(f.showPosition==true)?true:false}
		if(typeof f.wait!="undefined"){s.wait=f.wait}
		if(typeof f.fade!="undefined"){s.fade=f.fade}
		if(typeof f.direction!="undefined"){s.direction=f.direction}
		if(typeof f.showControls!="undefined"){s.showControls=(f.showControls==true)?true:false}
		if(typeof f.showText!="undefined"){s.showText=(f.showText==true)?true:false}
		if(typeof f.beforeSlide=="function"){s.beforeSlide=f.beforeSlide}
		if(typeof f.afterSlide=="function"){s.afterSlide=f.afterSlide}
		if(typeof f.onRewind=="function"){s.onRewind=f.onRewind}
		if(typeof f.hoverPause!="undefined"){s.hoverPause=(f.hoverPause==true)?true:false}
		if(s.fade<1){s.fade=1000}if(s.wait<=s.fade){s.wait=s.fade*1.25}
	}
	
	var b=false;
	var n=[];
	var o=false;
	var p=false;
	var l=false;
	var r=false;
	var d=false;
	var v=false;
	var k=false;
	var h=false;
	var j=$(this);
	var m=false;
	var e=0;
	var q=0;
	var g=this.width();
	var u=function(t,c){
		
		if(typeof t=="undefined"||t==0){t=(s.direction=="left")?1:-1}
		if(typeof c=="undefined"||c==0){c=false}
		if(Math.abs(t)!=1){t=parseInt(t/Math.abs(t))}
		if(t==0){t=-1}clearTimeout(b);e+=t;
		if(e<0){e=n.length-1;s.onRewind()}
		if(e>=n.length){e=0;s.onRewind()}var i=n[e];a((e+1)+" / "+n.length);
		if(!(q%2)) {
			s.beforeSlide();
			$(p).stop(true,true).css({"background-image":$(i).css("background-image"),left:t*g});
			$(o).stop(true,true).css("left",0);
			$(p).stop(true,true).animate({left:"-="+t*g+"px"},{duration:s.fade,complete:function(){s.afterSlide()}});
			$(o).stop(true,true).animate({left:"-="+t*g+"px"},{duration:s.fade})}else{s.beforeSlide();
			$(o).stop(true,true).css({"background-image":$(i).css("background-image"),left:t*g});
			$(p).stop(true,true).css("left",0);
			$(o).stop(true,true).animate({left:"-="+t*g+"px"},{duration:s.fade,complete:function(){s.afterSlide()}});
			$(p).stop(true,true).animate({left:"-="+t*g+"px"},{duration:s.fade})}
			q++;
			
			if(!c&&!j.hasClass("slider-paused")){b=setTimeout(u,s.wait)}};
			
			var a=function(c){
				var i=$(n[e]);
				l.text(c);
				r.text(c);
				
				d.text(i.text());
				v.text(i.text())};
				n=this.children();
				this.html(" ").css({overflow:"hidden"});
				
				if(s.hoverPause){this.bind({mouseenter:function(){clearTimeout(b);
					$(this).addClass("slider-paused")},mouseleave:function(){$(this).removeClass("slider-paused");
					if(n.length>1){b=setTimeout(u,s.wait)}}}
				)}
				
				m=$("<div></div>").addClass("slider-position").css("width",this.width());
				l=m.clone().addClass("slider-position-overlay").css({right:"6px",bottom:"1px"});
				r=m.clone().addClass("slider-position-shadow").css({right:"5px",bottom:"0px",color:"#000"});
				m=$("<a></a>").addClass("slider-control");
				k=m.clone()
				.addClass("slider-control-previous")
				.html("")
				.bind("click",function(){u(-1,true)});
				h=m.clone().addClass("slider-control-next").html("").bind("click",function(){u(1,true)});
				m=$("<div></div>").addClass("slider-text");
				d=m.clone().addClass("slider-text-overlay").text("");
				v=m.clone().addClass("slider-text-shadow").text("");
				m=$("<div></div>").addClass("slider-image").css({display:"block",position:"absolute",width:this.width(),height:this.height(),"background-color":"transparent","background-repeat":"no-repeat","background-position":"50% 50%"});
				
				o=m.clone().css("background-image",$(n[e]).css("background-image"));
				p=m.clone().css("left",g);this.append(o).append(p);
	if(s.showPosition==true){
		this.append(r).append(l)}
			
	if(s.showControls==true)
		{this.append(k).append(h)}
		
	if(s.showText==true)
		{this.append(v).append(d)}a((e+1)+" / "+n.length);
	
	if(n.length>1){b=setTimeout(u,s.wait)}
};
