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