AJS.fx = {
    _shades: {
        0: "ffffff",
        1: "ffffee",
        2: "ffffdd",
        3: "ffffcc",
        4: "ffffbb",
        5: "ffffaa",
        6: "ffff99"
    },
    highlight: function (c, a) {
        var b = new AJS.fx.Base();
        b.elm = AJS.$(c);
        b.options.duration = 600;
        b.setOptions(a);
        AJS.update(b, {
            increase: function () {
                if (this.now == 7) {
                    c.style.backgroundColor = "#fff"
                } else {
                    c.style.backgroundColor = "#" + AJS.fx._shades[Math.floor(this.now)]
                }
            }
        });
        return b.custom(6, 0)
    },
    fadeIn: function (c, a) {
        a = a || {};
        if (!a.from) {
            a.from = 0;
            AJS.setOpacity(c, 0)
        }
        if (!a.to) {
            a.to = 1
        }
        var b = new AJS.fx.Style(c, "opacity", a);
        return b.custom(a.from, a.to)
    },
    fadeOut: function (c, a) {
        a = a || {};
        if (!a.from) {
            a.from = 1
        }
        if (!a.to) {
            a.to = 0
        }
        a.duration = 300;
        var b = new AJS.fx.Style(c, "opacity", a);
        return b.custom(a.from, a.to)
    },
    setWidth: function (c, a) {
        var b = new AJS.fx.Style(c, "width", a);
        return b.custom(a.from, a.to)
    },
    setHeight: function (c, a) {
        var b = new AJS.fx.Style(c, "height", a);
        return b.custom(a.from, a.to)
    }
};
AJS.fx.Base = new AJS.Class({
    init: function (a) {
        this.options = {
            onStart: function () {},
            onComplete: function () {},
            transition: AJS.fx.Transitions.sineInOut,
            duration: 500,
            wait: true,
            fps: 50
        };
        AJS.update(this.options, a);
        AJS.bindMethods(this)
    },
    setOptions: function (a) {
        AJS.update(this.options, a)
    },
    step: function () {
        var a = new Date().getTime();
        if (a < this.time + this.options.duration) {
            this.cTime = a - this.time;
            this.setNow()
        } else {
            setTimeout(AJS.$b(this.options.onComplete, this, [this.elm]), 10);
            this.clearTimer();
            this.now = this.to
        }
        this.increase()
    },
    setNow: function () {
        this.now = this.compute(this.from, this.to)
    },
    compute: function (c, b) {
        var a = b - c;
        return this.options.transition(this.cTime, c, a, this.options.duration)
    },
    clearTimer: function () {
        clearInterval(this.timer);
        this.timer = null;
        return this
    },
    _start: function (b, a) {
        if (!this.options.wait) {
            this.clearTimer()
        }
        if (this.timer) {
            return
        }
        setTimeout(AJS.$p(this.options.onStart, this.elm), 10);
        this.from = b;
        this.to = a;
        this.time = new Date().getTime();
        this.timer = setInterval(this.step, Math.round(1000 / this.options.fps));
        return this
    },
    custom: function (b, a) {
        return this._start(b, a)
    },
    set: function (a) {
        this.now = a;
        this.increase();
        return this
    },
    setStyle: function (c, a, b) {
        if (this.property == "opacity") {
            AJS.setOpacity(c, b)
        } else {
            AJS.setStyle(c, a, b)
        }
    }
});
AJS.fx.Style = AJS.fx.Base.extend({
    init: function (c, b, a) {
        this.parent();
        this.elm = c;
        this.setOptions(a);
        this.property = b
    },
    increase: function () {
        this.setStyle(this.elm, this.property, this.now)
    }
});
AJS.fx.Styles = AJS.fx.Base.extend({
    init: function (b, a) {
        this.parent();
        this.elm = AJS.$(b);
        this.setOptions(a);
        this.now = {}
    },
    setNow: function () {
        for (p in this.from) {
            this.now[p] = this.compute(this.from[p], this.to[p])
        }
    },
    custom: function (a) {
        if (this.timer && this.options.wait) {
            return
        }
        var c = {};
        var b = {};
        for (p in a) {
            c[p] = a[p][0];
            b[p] = a[p][1]
        }
        return this._start(c, b)
    },
    increase: function () {
        for (var a in this.now) {
            this.setStyle(this.elm, a, this.now[a])
        }
    }
});
AJS.fx.Transitions = {
    linear: function (e, a, g, f) {
        return g * e / f + a
    },
    sineInOut: function (e, a, g, f) {
        return -g / 2 * (Math.cos(Math.PI * e / f) - 1) + a
    }
};
script_loaded = true;
script_loaded = true;
