var Slide=new Class({
	initialize:function(a){
		this.items=a.items;
		this.mode=a.mode||'horizontal';
		this.modes={
		horizontal:['left','width'],vertical:['top','height']};
		this.size=a.size||240;
		this.box=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.itemsToSlide=a.itemsToSlide||1;
		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,function(i){
			this.walk(i,true);
			this.stop()}.bind(this,i))
		}
	},
	
	addActionButtons:function(a,b){
		for(var i=0;i<b.length;i++){
			switch(a){
				case'previous':b[i].addEvent(this.button_event,function(){
				this.previous(true);
				this.stop()}.bind(this));
				break;
				case'next':b[i].addEvent(this.button_event,function(){
				this.next(true);
				this.stop()}.bind(this));
				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-this.itemsToSlide:this.items.length-this.itemsToSlide),a)
	},
	
	next:function(a){
		this.walk((this.currentIndex<this.items.length-this.itemsToSlide?this.currentIndex+this.itemsToSlide:0),a)
	},
	
	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)
	},
	
	walk:function(a,b,c){
		if(a!=this.currentIndex){
		this.currentIndex=a;
		this.previousIndex=this.currentIndex+(this.currentIndex>0?-this.itemsToSlide:this.items.length-this.itemsToSlide);
		this.nextIndex=this.currentIndex+(this.currentIndex<this.items.length-this.itemsToSlide?1:1-this.items.length);
		if(b){
		this.stop()}if(c){
		this.fx.cancel().set((this.size*-this.currentIndex)+'px')}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))}}
	}
});

