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;
