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.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.interval=a.interval||5000;
		this.buttons={
			previous:[],next:[],play:[],playback:[],stop:[]};
		if(a.buttons){
			for(var b in a.buttons){
				this.addActionButtons(b,$type(a.buttons[b])=='array'?a.buttons[b]:[a.buttons[b]])
			}
		}
		this.handles=a.handles||null;
		if(this.handles){
			this.addHandleButtons(this.handles)
		}
		this.fx=new Fx.Tween(this.box,this.modes[this.mode][0],a.fxOptions||{duration:500,wait:false});
		this.onWalk=a.onWalk||null;
		this.currentIndex=a.startItem||0;
		this.previousIndex=null;
		this.nextIndex=null;
		this.autoPlay=a.autoPlay||false;
		this._auto=null;
		this.box.setStyle(this.modes[this.mode][0],(-this.currentIndex*this.size)+'px');
		if(a.autoPlay)this.play(this.interval,'next',true)
	},
	previous:function(a){
		this.currentIndex+=this.currentIndex>0?-1:this.items.length-1;
		this.walk(null,a)
	},
	next:function(a){
		this.currentIndex+=this.currentIndex<this.items.length-1?1:1-this.items.length;
		this.walk(null,a)
	},
	play:function(a,b,c){
		this.stop();
		if(!c){
			this[b](false)
		}
		this._auto=this[b].periodical(a,this,false)
	},
	stop:function(){
		$clear(this._auto)
	},
	walk:function(a,b){
		if($defined(a)){
			if(a==this.currentIndex)return;
			this.currentIndex=a
		}
		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()
		}
		this.fx.start(this.modes[this.mode][0],-this.currentIndex*this.size);
		if(this.onWalk){
			this.onWalk(this.items[this.currentIndex],(this.handles?this.handles[this.currentIndex]:null))
		}
		if(b&&this.autoPlay){
			this.play(this.interval,'next',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])
		}
	}
});