var noobSlide=new Class({
	initialize:function(a){
		this.items			= a.items;
		this.mode			= a.mode||'horizontal';
		this.modes			= {
			horizontal:['left','width'],
			vertical:['top','height']
		};
		this.effect			= a.effect||'slide';
		this.size			= a.size||240;
		this.box			= a.box;
		if(this.effect=="fade")	{
			a.box.setStyle(this.modes[this.mode][1],(this.size*this.items.length)+'px');
		}
		
		this.button_event	= a.button_event||'click';
		this.handle_event	= a.handle_event||'click';
		this.onWalk			= a.onWalk||null;
		this.currentIndex	= null;
		this.previousIndex	= null;
		this.nextIndex		= null;
		this.interval		= a.interval||5000;
		this.autoPlay		= a.autoPlay||false;
		this._play			= null;
		this.handles		= a.handles||null;
		if(this.handles){
			this.addHandleButtons(this.handles)
		}
		this.buttons={previous:[],next:[],play:[],playback:[],stop:[]};
		if(a.addButtons){
			for(var b in a.addButtons){
				this.addActionButtons(b,$type(a.addButtons[b])=='array'?a.addButtons[b]:[a.addButtons[b]])
			}
		}
		this.fx=new Fx.Tween(this.box,$extend((a.fxOptions||{duration:500,wait:false}),{property:this.modes[this.mode][0]}));
		this.walk((a.startItem||0),true,true)
	},
	
	addHandleButtons:function(a){
		for(var i=0;i<a.length;i++){
			a[i].addEvent(this.handle_event,this.walk.bind(this,[i,true]))
		}
	},
	
	addActionButtons:function(a,b){
		for(var i=0;i<b.length;i++){
			switch(a){
				case'previous'	: b[i].addEvent(this.button_event,this.previous.bind(this,[true]));break;
				case'next'		: b[i].addEvent(this.button_event,this.next.bind(this,[true]));break;
				case'play'		: b[i].addEvent(this.button_event,this.play.bind(this,[this.interval,'next',false]));break;
				case'playback'	: b[i].addEvent(this.button_event,this.play.bind(this,[this.interval,'previous',false]));break;
				case'stop'		: b[i].addEvent(this.button_event,this.stop.bind(this));break
			}
			this.buttons[a].push(b[i])
		}
	},
	
	previous:function(a){
		this.walk((this.currentIndex>0?this.currentIndex-1:this.items.length-1),a)
		if(this.effect=="fade")	{
			if(this.items[this.currentIndex+1])this.items[this.currentIndex+1].fade('out');	//	chris - fade current item out
		}
	},
	
	next:function(a){
		this.walk((this.currentIndex<this.items.length-1?this.currentIndex+1:0),a)
		if(this.effect=="fade")	{
			if(this.items[this.currentIndex-1])this.items[this.currentIndex-1].fade('out');	//	chris - fade current item out
		}
		
	},
	
	play:function(a,b,c){
		this.stop();
		if(!c){this[b](false)}
		this._play=this[b].periodical(a,this,[false])
	},
	
	stop:function(){
		$clear(this._play)
		//this.buttons['stop'].highlight();
	},
	
	walk:function(a,b,c){
		if(a!=this.currentIndex){
			this.currentIndex=a;
			//alert(this.currentIndex);
			if(this.effect=="fade")	{
				this.items[this.currentIndex].fade('in');	//	chris - fade current item in
			}
			this.previousIndex	= this.currentIndex+(this.currentIndex>0?-1:this.items.length-1);
			this.nextIndex		= this.currentIndex+(this.currentIndex<this.items.length-1?1:1-this.items.length);
			if(b){this.stop()}
			if(c){
				//alert('c');
				if(this.effect=="fade")	{
					//this.items[this.previousIndex].fade('out');
					//this.items[this.nextIndex].fade('in');
				}else{
					this.fx.cancel().set((this.size*-this.currentIndex)+'px');
				}
			}else{
				if(this.effect=="fade")	{
					this.items.fade('out');
					this.items[this.currentIndex].fade('in');
				}else{
					this.fx.start(this.size*-this.currentIndex)
				}
			}
			if(b&&this.autoPlay){
				this.play(this.interval,'next',true)
			}
			if(this.onWalk){
				this.onWalk((
					this.items[this.currentIndex]||null),
					(this.handles&&this.handles[this.currentIndex]?this.handles[this.currentIndex]:null),
					this.currentIndex)
			}
		}
	}
});
