//MooTools More, <http://mootools.net/more>. Copyright (c) 2006-2008 Valerio Proietti, <http://mad4milk.net>, MIT Style License.

Fx.Slide = new Class({	Extends:Fx,	options:{mode:"vertical"},	initialize:			function(B,A){				this.addEvent("complete",				function(){					this.open=(this.wrapper["offset"+this.layout.capitalize()]!=0);
					if(this.open&&Browser.Engine.webkit419){						this.element.dispose().inject(this.wrapper);					}				},				true);				this.element=this.subject=$(B);				this.parent(A);				var C=this.element.retrieve("wrapper");
				this.wrapper=C||new Element("div",{styles:$extend(this.element.getStyles("margin","position"),{overflow:"hidden"})}).wraps(this.element);				this.element.store("wrapper",this.wrapper).setStyle("margin",0);
				this.now=[];				this.open=true;			},	vertical:			function(){				this.margin="margin-top";				this.layout="height";				this.offset=this.element.offsetHeight;			},	horizontal:			function(){				this.margin="margin-left";
				this.layout="width";				this.offset=this.element.offsetWidth;			},	set:	function(A){				this.element.setStyle(this.margin,A[0]);				this.wrapper.setStyle(this.layout,A[1]);
				return this;			},	compute:function(E,D,C){				var B=[];				var A=2;				A.times(function(F){							B[F]=Fx.compute(E[F],D[F],C);						});				return B;			},	start:	function(B,E){				if(!this.check(arguments.callee,B,E)){					return this;
				}				this[E||this.options.mode]();				var D=this.element.getStyle(this.margin).toInt();				var C=this.wrapper.getStyle(this.layout).toInt();				var A=[[D,C],[0,this.offset]];
				var G=[[D,C],[-this.offset,0]];				var F;				switch(B){					case"in":						F=A;						this.wrapper.setStyle('slidetype', '0');						break;					case"out":						F=G;						this.wrapper.setStyle('slidetype', '1');						this.wrapper.setStyle('overflow', 'hidden');						break;					case"toggle":						F=(this.wrapper["offset"+this.layout.capitalize()]==0)?A:G;
				}				return this.parent(F[0],F[1]);			},	slideIn:function(A){				return this.start("in",A);			},	slideOut:			function(A){				return this.start("out",A);			},	hide:	function(A){				this[A||this.options.mode]();
				this.open=false;				return this.set([-this.offset,0]);			},	show:	function(A){				this[A||this.options.mode]();				this.open=true;				return this.set([0,this.offset]);			},	toggle:	function(A){				return this.start("toggle",A);
			},	onCompleteSlide : function(A) {				if (this.wrapper.getStyle('slidetype') == '0')					this.wrapper.setStyle('overflow', 'visible');			}});Element.Properties.slide={	set:	function(B){				var A=this.retrieve("slide");				if(A){					A.cancel();				}				return this.eliminate("slide").store("slide:options",$extend({link:"cancel"},B));
			},	get:	function(A){				if(A||!this.retrieve("slide")){					if(A||!this.retrieve("slide:options")){						this.set("slide",A);					}					this.store("slide",new Fx.Slide(this,this.retrieve("slide:options")));
				}				return this.retrieve("slide");			}};Element.implement({	slide:	function(D,E){				D=D||"toggle";				var B=this.get("slide"),A;				switch(D){					case"hide":						B.hide(E);						break;					case"show":						B.show(E);
						break;					case"toggle":						var C=this.retrieve("slide:flag",B.open);						B[(C)?"slideOut":"slideIn"](E);						this.store("slide:flag",!C);						A=true;						break;					default:						B.start(D,E);
				}				if(!A){					this.eliminate("slide:flag");				}				return this;			}});