var fx={};fx.Base=function(){};fx.Base.prototype={setOptions:function(a){this.options={duration:500,onComplete:"",transition:fx.sinoidal};Object.extend(this.options,a||{})},step:function(){var a=this,b=(new Date).getTime();if(b>=a.options.duration+a.startTime){a.now=a.to;clearInterval(a.timer);a.timer=null;a.options.onComplete&&setTimeout(a.options.onComplete.bind(a),10)}else{var c=(b-a.startTime)/a.options.duration;a.now=a.options.transition(c)*(a.to-a.from)+a.from}a.increase()},custom:function(b,c){var a=this;if(a.timer!=null)return;a.from=b;a.to=c;a.startTime=(new Date).getTime();a.timer=setInterval(a.step.bind(a),13)},hide:function(){this.now=0;this.increase()},clearTimer:function(){clearInterval(this.timer);this.timer=null}};fx.Layout=Class.create();fx.Layout.prototype=Object.extend(new fx.Base,{initialize:function(c,b){var a=this;a.el=$(c);a.el.style.overflow="hidden";a.iniWidth=a.el.offsetWidth;a.iniHeight=a.el.offsetHeight;a.setOptions(b)}});fx.Height=Class.create();Object.extend(Object.extend(fx.Height.prototype,fx.Layout.prototype),{increase:function(){this.el.style.height=this.now+"px"},toggle:function(){var a=this;if(a.el.offsetHeight>0)a.custom(a.el.offsetHeight,0);else a.custom(0,a.el.scrollHeight)}});fx.Width=Class.create();Object.extend(Object.extend(fx.Width.prototype,fx.Layout.prototype),{increase:function(){this.el.style.width=this.now+"px"},toggle:function(){var a=this;if(a.el.offsetWidth>0)a.custom(a.el.offsetWidth,0);else a.custom(0,a.iniWidth)}});fx.Opacity=Class.create();fx.Opacity.prototype=Object.extend(new fx.Base,{initialize:function(c,b){var a=this;a.el=$(c);a.now=1;a.increase();a.setOptions(b)},increase:function(){var a=this;if(a.now==1&&/Firefox/.test(navigator.userAgent))a.now=.9999;a.setOpacity(a.now)},setOpacity:function(b){var a=this;if(b==0&&a.el.style.visibility!="hidden")a.el.style.visibility="hidden";else if(a.el.style.visibility!="visible")a.el.style.visibility="visible";if(window.ActiveXObject)a.el.style.filter="alpha(opacity="+b*100+")";a.el.style.opacity=b},toggle:function(){if(this.now>0)this.custom(1,0);else this.custom(0,1)}});fx.sinoidal=function(a){return -Math.cos(a*Math.PI)/2+.5};fx.linear=function(a){return a};fx.cubic=function(a){return Math.pow(a,3)};fx.circ=function(a){return Math.sqrt(a)};
