var noobSlide=new Class(
	{
		normalize: function (idx) {
			if (idx < 0) idx = 0;
			if (this.items.length - idx < this.scrollCount) {
				idx = this.items.length - this.scrollCount;
			}
			else
				if (idx > this.items.length) idx = this.items.length;
			return idx;
		},
		initialize:function(a){
			this.scrollCount = a.scrollCount?a.scrollCount:1;
			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.interval=a.interval||6000;//was 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:1500,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-this.scrollCount:this.items.length-this.scrollCount),a)
		},
		next:function(a){
			this.walk((this.currentIndex<this.items.length-this.scrollCount?this.currentIndex+this.scrollCount: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=this.normalize(a);
				this.previousIndex=this.normalize(this.currentIndex+(this.currentIndex>0?-this.scrollCount:this.items.length-this.scrollCount));
				this.nextIndex=this.normalize(this.currentIndex+(this.currentIndex<this.items.length-this.scrollCount?this.scrollCount:this.scrollCount-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))
				}
			}
		}
	}
);
