AJS.fx = {
  _shades: {
    0: "ffffff",
    1: "ffffee",
    2: "ffffdd",
    3: "ffffcc",
    4: "ffffbb",
    5: "ffffaa",
    6: "ffff99"
  },
  highlight: function (_1, _2) {
    var _3 = new AJS.fx.Base();
    _3.elm = AJS.$(_1);
    _3.options.duration = 600;
    _3.setOptions(_2);
    AJS.update(_3, {
      increase: function () {
        if (this.now == 7) {
          _1.style.backgroundColor = "#FFF";
        } else {
          _1.style.backgroundColor = "#" + AJS.fx._shades[Math.floor(this.now)];
        }
      }
    });
    return _3.custom(6, 0);
  },
  fadeIn: function (_4, _5) {
    _5 = _5 || {};
    if (!_5.from) {
      _5.from = 0;
      AJS.setOpacity(_4, 0);
    }
    if (!_5.to) {
      _5.to = 1;
    }
    var s = new AJS.fx.Style(_4, "opacity", _5);
    return s.custom(_5.from, _5.to);
  },
  fadeOut: function (_7, _8) {
    _8 = _8 || {};
    if (!_8.from) {
      _8.from = 1;
    }
    if (!_8.to) {
      _8.to = 0;
    }
    _8.duration = 300;
    var s = new AJS.fx.Style(_7, "opacity", _8);
    return s.custom(_8.from, _8.to);
  },
  setWidth: function (_a, _b) {
    var s = new AJS.fx.Style(_a, "width", _b);
    return s.custom(_b.from, _b.to);
  },
  setHeight: function (_d, _e) {
    var s = new AJS.fx.Style(_d, "height", _e);
    return s.custom(_e.from, _e.to);
  }
};
AJS.fx.Base = new AJS.Class({
  init: function (_10) {
    this.options = {
      onStart: function () {},
      onComplete: function () {},
      transition: AJS.fx.Transitions.sineInOut,
      duration: 500,
      wait: true,
      fps: 50
    };
    AJS.update(this.options, _10);
    AJS.bindMethods(this);
  },
  setOptions: function (_11) {
    AJS.update(this.options, _11);
  },
  step: function () {
    var _12 = new Date().getTime();
    if (_12 < this.time + this.options.duration) {
      this.cTime = _12 - 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 (_13, to) {
    var _15 = to - _13;
    return this.options.transition(this.cTime, _13, _15, this.options.duration);
  },
  clearTimer: function () {
    clearInterval(this.timer);
    this.timer = null;
    return this;
  },
  _start: function (_16, to) {
    if (!this.options.wait) {
      this.clearTimer();
    }
    if (this.timer) {
      return;
    }
    setTimeout(AJS.$p(this.options.onStart, this.elm), 10);
    this.from = _16;
    this.to = to;
    this.time = new Date().getTime();
    this.timer = setInterval(this.step, Math.round(1000 / this.options.fps));
    return this;
  },
  custom: function (_18, to) {
    return this._start(_18, to);
  },
  set: function (to) {
    this.now = to;
    this.increase();
    return this;
  },
  setStyle: function (elm, _1c, val) {
    if (this.property == "opacity") {
      AJS.setOpacity(elm, val);
    } else {
      AJS.setStyle(elm, _1c, val);
    }
  }
});
AJS.fx.Style = AJS.fx.Base.extend({
  init: function (elm, _1f, _20) {
    this.parent();
    this.elm = elm;
    this.setOptions(_20);
    this.property = _1f;
  },
  increase: function () {
    this.setStyle(this.elm, this.property, this.now);
  }
});
AJS.fx.Styles = AJS.fx.Base.extend({
  init: function (elm, _22) {
    this.parent();
    this.elm = AJS.$(elm);
    this.setOptions(_22);
    this.now = {};
  },
  setNow: function () {
    for (p in this.from) {
      this.now[p] = this.compute(this.from[p], this.to[p]);
    }
  },
  custom: function (obj) {
    if (this.timer && this.options.wait) {
      return;
    }
    var _24 = {};
    var to = {};
    for (p in obj) {
      _24[p] = obj[p][0];
      to[p] = obj[p][1];
    }
    return this._start(_24, to);
  },
  increase: function () {
    for (var p in this.now) {
      this.setStyle(this.elm, p, this.now[p]);
    }
  }
});
AJS.fx.Transitions = {
  linear: function (t, b, c, d) {
    return c * t / d + b;
  },
  sineInOut: function (t, b, c, d) {
    return -c / 2 * (Math.cos(Math.PI * t / d) - 1) + b;
  }
};
script_loaded = true;
script_loaded = true;