var SlideList = new Class({
    initialize: function(c, d) {
        this.setOptions(this.getOptions(), d);
        this.menu = $(c),
        this.current = this.menu.getElement("li.active");
        this.menu.getElements("li").each(function(b) {
            b.addEvent("mouseover", 
            function() {
                this.moveBg(b)
            }.bind(this));
            b.addEvent("mouseout", 
            function() {
                this.moveBg(this.current)
            }.bind(this));
            b.addEvent("click", 
            function(a) {
                this.clickItem(a, b)
            }.bind(this))
        }.bind(this));
        this.back = new Element("li").addClass("background").adopt(new Element("div").addClass("left")).injectInside(this.menu);
        this.back.fx = this.back.effects(this.options);
        if (this.current) {
            this.setCurrent(this.current)
        }
    },
    setCurrent: function(a, b) {
        this.back.setStyles({
            left: (a.offsetLeft) + "px",
            width: (a.offsetWidth) + "px"
        }); (b) ? this.back.effect("opacity").set(0).start(this.options.opacity) : this.back.setOpacity(this.options.opacity);
        this.current = a
    },
    getOptions: function() {
        return {
            transition: Fx.Transitions.sineInOut,
            duration: 500,
            wait: false,
            onClick: Class.empty,
            opacity: 1
        }
    },
    clickItem: function(a, b) {
        if (!this.current) {
            this.setCurrent(b, true)
        }
        this.current = b;
        this.options.onClick(new Event(a), b)
    },
    moveBg: function(a) {
        if (!this.current) {
            return
        }
        this.back.fx.custom({
            left: [this.back.offsetLeft, a.offsetLeft],
            width: [this.back.offsetWidth, a.offsetWidth]
        })
    }
});
SlideList.implement(new Options);