var noobSlide = new Class(
		{
			initialize : function(a) {
				this.direction = 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 || 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)
			},
			next : function(a) {
				this.walk((this.currentIndex < this.items.length - 1 ? this.currentIndex + 1 : 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.nextIndex = this.currentIndex + this.direction;
					//this.previousIndex = this.currentIndex - this.direction;
					/*
					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) {
						this.fx.cancel().set(
								(this.size * -this.currentIndex) + 'px')
					} else {
						if (this.currentIndex == 0) this.fx.start(0);
						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))
					}
				}
			}
		});