var YOOAccordionMenu = new Class({
    initialize: function(togglers, elements, options) {
        this.setOptions({
            accordion: "default",
            onActive: function(tog) {
                tog.addClass("active");
                tog.getFirst().addClass("active");
            },
            onBackground: function(tog) {
                tog.removeClass("active");
                tog.getFirst().removeClass("active");
            }
        },
        options);
        this.togs = togglers;
        this.elms = elements;
        switch (this.options.accordion) {
        case "slide":
            this.createSlide();
            break;
        default:
            this.createDefault();
        }
    },
    createDefault: function() {
        var options = {};
        if (!$defined(this.options.display) && !$defined(this.options.show)) {
            options = {
                show: -1
            };
        }
        $ES(this.togs).each(function(tog, i) {
            if (tog.hasClass("active")) {
                options = {
                    show: i
                };
            }
        }.bind(this));
        var accordionMenu = new(Fx.Accordion)(this.togs, this.elms, $extend(this.options, options));
    },
    createSlide: function() {
        $ES(this.togs).each(function(tog, i) {
            var span = tog.getElement("span");
            var ul = tog.getElement(this.elms);
            var fx = new(Fx.Slide)(ul, {
                transition: Fx.Transitions.linear,
                duration: 250
            });
            if (! (tog.hasClass("active") || this.options.display == "all" || this.options.display == i)) {
                fx.hide();
            }
            span.addEvent("click",
            function() {
                fx.toggle().chain(function() {
                    tog.toggleClass("active");
                    tog.getFirst().toggleClass("active");
                });
            });
        }.bind(this));
    }
});

YOOAccordionMenu.implement(new Options);
