/* Especialy modified Fx.Elements, Accordion compatible with mootools 1.2 */
Fx.Elements = new Class({
    Extends: Fx.CSS,
    initialize: function(B, A){
        this.elements = this.subject = $$(B);
        this.parent(A);
    },
    compute: function(G, H, I){
        var C = {};
        for (var D in G) {
            var A = G[D], E = H[D], F = C[D] = {};
            for (var B in A) {
                F[B] = this.parent(A[B], E[B], I);
            }
        }
        return C;
    },
    set: function(B){
        for (var C in B) {
            var A = B[C];
            for (var D in A) {
                this.render(this.elements[C], D, A[D], this.options.unit);
            }
        }
        return this;
    },
    start: function(C){
        if (!this.check(arguments.callee, C)) {
            return this;
        }
        var H = {}, I = {};
        for (var D in C) {
            var F = C[D], A = H[D] = {}, G = I[D] = {};
            for (var B in F) {
                var E = this.prepare(this.elements[D], B, F[B]);
                A[B] = E.from;
                G[B] = E.to;
            }
        }
        return this.parent(H, I);
    }
});
var Accordion = new Class({
    Extends: Fx.Elements,
    options: {
        display: 0,
        show: false,
        height: true,
        width: false,
        opacity: true,
        fixedHeight: false,
        fixedWidth: false,
        wait: false,
        alwaysHide: false,
        attOnEvent: 'mouseover'
    },
    initialize: function(){
        var C = Array.link(arguments, {
            container: Element.type,
            options: Object.type,
            togglers: $defined,
            elements: $defined
        });
        this.parent(C.elements, C.options);
        this.togglers = $$(C.togglers);
        this.container = $(C.container);
        this.previous = -1;
        if (this.options.alwaysHide) {
            this.options.wait = true;
        }
        if ($chk(this.options.show)) {
            this.options.display = false;
            this.previous = this.options.show;
        }
        if (this.options.start) {
            this.options.display = false;
            this.options.show = false;
        }
        this.effects = {};
        if (this.options.opacity) {
            this.effects.opacity = "fullOpacity";
        }
        if (this.options.width) {
            this.effects.width = this.options.fixedWidth ? "fullWidth" : "offsetWidth";
        }
        if (this.options.height) {
            this.effects.height = this.options.fixedHeight ? "fullHeight" : "scrollHeight";
        }
        for (var B = 0, A = this.togglers.length; B < A; B++) {
            this.addSection(this.togglers[B], this.elements[B]);
        }
        this.elements.each(function(E, D){
            if (this.options.show === D) {
                this.fireEvent("active", [this.togglers[D], E]);
            }
            else {
                for (var F in this.effects) {
                    E.setStyle(F, 0);
                }
            }
        }, this);
        if ($chk(this.options.display)) {
            this.display(this.options.display);
        }
    },
    addSection: function(E, C, G){
        E = $(E);
        C = $(C);
        var F = this.togglers.contains(E);
        var B = this.togglers.length;
        this.togglers.include(E);
        this.elements.include(C);
        if (B && (!F || G)) {
            G = $pick(G, B - 1);
            E.inject(this.togglers[G], "before");
            C.inject(E, "after");
        }
        else {
            if (this.container && !F) {
                E.inject(this.container);
                C.inject(this.container);
            }
        }
        var A = this.togglers.indexOf(E);
        E.addEvent(this.options.attOnEvent, this.display.bind(this, A));
        if (this.options.height) {
            C.setStyles({
                "padding-top": 0,
                "border-top": "none",
                "padding-bottom": 0,
                "border-bottom": "none"
            });
        }
        if (this.options.width) {
            C.setStyles({
                "padding-left": 0,
                "border-left": "none",
                "padding-right": 0,
                "border-right": "none"
            });
        }
        C.fullOpacity = 1;
        if (this.options.fixedWidth) {
            C.fullWidth = this.options.fixedWidth;
        }
        if (this.options.fixedHeight) {
            C.fullHeight = this.options.fixedHeight;
        }
        C.setStyle("overflow", "hidden");
        if (!F) {
            for (var D in this.effects) {
                C.setStyle(D, 0);
            }
        }
        return this;
    },
    display: function(A){
        A = ($type(A) == "element") ? this.elements.indexOf(A) : A;
        if ((this.timer && this.options.wait) || (A === this.previous && !this.options.alwaysHide)) {
            return this;
        }
        this.previous = A;
        var B = {};
        this.elements.each(function(E, D){
            B[D] = {};
            var C = (D != A) || (this.options.alwaysHide && (E.offsetHeight > 0));
            this.fireEvent(C ? "background" : "active", [this.togglers[D], E]);
            for (var F in this.effects) {
                B[D][F] = C ? 0 : E[this.effects[F]];
            }
        }, this);
        return this.start(B);
    }
});