//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;break;case"out":F=G;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);
    }
    });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;
    }
    });