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.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.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 {
            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))}
         }
      }
   }
); 
