/**
 * menuMatic 
 * @version 0.68.3 (beta)
 * @author Jason J. Jaeger | greengeckodesign.com
 * @copyright 2008 Jason John Jaeger
 * @license MIT-style License
 *			Permission is hereby granted, free of charge, to any person obtaining a copy
 *			of this software and associated documentation files (the "Software"), to deal
 *			in the Software without restriction, including without limitation the rights
 *			to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 *			copies of the Software, and to permit persons to whom the Software is
 *			furnished to do so, subject to the following conditions:
 *	
 *			The above copyright notice and this permission notice shall be included in
 *			all copies or substantial portions of the Software.
 *	
 *			THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 *			IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 *			FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 *			AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 *			LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 *			OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 *			THE SOFTWARE.
 **/
 var iTweakInitial;
 	
 if (navigator.appName != 'Microsoft Internet Explorer')
 {
    iTweakInitial = -40;
 }
 else
 {
    iTweakInitial = 0;
 }
 
var MenuMatic = new Class(
{
    Implements:Options,
    options:
    {
        id:"nav",
        subMenusContainerId:"subMenusContainer",
        effect:"slide & fade",
        duration:600,
        physics:Fx.Transitions.Pow.easeOut,
        hideDelay:1000,
        stretchMainMenu:false,
        matchWidthMode:false,
        orientation:"horizontal",
        direction:
        {
            x:"right",
            y:"down"
        },
        tweakInitial:
        {
            x:0,
            y:iTweakInitial
        },
        tweakSubsequent:
        {
            x:0,
            y:0
        },
        center:false,
        opacity:95,
        mmbFocusedClassName:null,
        mmbClassName:null,
        killDivider:null,
        fixHasLayoutBug:false,
        onHideAllSubMenusNow_begin:(function(){}),
        onHideAllSubMenusNow_complete:(function(){}),
        onInit_begin:(function(){}),
        onInit_complete:(function(){})
    },
    hideAllMenusTimeout:null,
    allSubMenus:[],
    subMenuZindex:1,
    initialize:function(B)
    {
        this.setOptions(B);
        this.options.onInit_begin();
        
        if (this.options.opacity > 99)
        {
            this.options.opacity = 99.9
        }
        this.options.opacity = this.options.opacity / 100;
        Element.implement(
        {
            getId:function()
            {
                if (!this.id)
                {
                    var E = this.get("tag") + "-" + $time();
                    
                    while($(E))
                    {
                        E = this.get("tag") + "-" + $time()
                    }
                    this.id = E
                }
                return this.id
            }
        });
        this.options.direction.x = this.options.direction.x.toLowerCase();
        this.options.direction.y = this.options.direction.y.toLowerCase();
        
        if (this.options.direction.x === "right")
        {
            this.options.direction.xInverse = "left"
        }
        else
        {
            if (this.options.direction.x === "left")
            {
                this.options.direction.xInverse = "right"
            }
        }
        
        if (this.options.direction.y === "up")
        {
            this.options.direction.yInverse = "down"
        }
        else
        {
            if(this.options.direction.y === "down")
            {
                this.options.direction.yInverse = "up"
            }
        }
        var A = $(this.options.id).getElements("a");
        A.each(function(F,E)
        {
            F.store("parentLinks",F.getParent().getParents("li").getFirst("a"));
            F.store("parentLinks",F.retrieve("parentLinks").erase(F.retrieve("parentLinks").getFirst()));
            F.store("childMenu",F.getNext("ul")||F.getNext("ol"));
            theSubMenuType="subsequent";
            
            if($(F.getParent("ul")||F.getParent("ol")).id===this.options.id)
            {
                theSubMenuType="initial"
            }
            F.store("subMenuType",theSubMenuType);
            
            if(theSubMenuType==="initial"&&$(F.getNext("ul")||F.getNext("ol")))
            {
                F.addClass("mainMenuParentBtn")
            }
            else
            {
                if($(F.getNext("ul")||F.getNext("ol")))
                {
                    F.addClass("subMenuParentBtn")
                }
            }
        }.bind(this));
        
        var D=new Element("div",
        {
            id:this.options.subMenusContainerId
        }).inject($(document.body),"bottom");
        $(this.options.id).getElements("ul, ol").each(function(F,E)
        {
            new Element("div",{"class":"smOW"}).inject(D).grab(F)}.bind(this));
            D.getElements("a").set("tabindex","-1");
            A.each(function(G,E)
            {
                if(!G.retrieve("childMenu"))
                {
                    return
                }
                G.store("childMenu",G.retrieve("childMenu").getParent("div"));
                this.allSubMenus.include(G.retrieve("childMenu"));
                G.store("parentSubMenus",G.retrieve("parentLinks").retrieve("childMenu"));
                var F=new MenuMaticSubMenu(this.options,this,G)
            }.bind(this));
            
            var C=$(this.options.id).getElements("a").filter(function(F,E){return !F.retrieve("childMenu")});
            C.each(function(F,E)
            {
                F.addEvents(
                {
                    mouseenter:function(G)
                    {
                        this.hideAllSubMenusNow();
                        
                        if(this.options.mmbClassName&&this.options.mmbFocusedClassName)
                        {
                            $(F).retrieve("btnMorph",new Fx.Morph(F,
                            {
                                duration:(this.options.duration / 2),
                                transition:this.options.physics,
                                link:"cancel"
                            })).start(this.options.mmbFocusedClassName)
                        }
                    }.bind(this),
                    focus:function(G)
                    {
                        this.hideAllSubMenusNow();
                        
                        if(this.options.mmbClassName&&this.options.mmbFocusedClassName)
                        {
                            $(F).retrieve("btnMorph",new Fx.Morph(F,
                            {
                                duration:(this.options.duration/2),
                                transition:this.options.physics,link:"cancel"
                            })).start(this.options.mmbFocusedClassName)
                        }
                    }.bind(this),
                    mouseleave:function(G)
                    {
                        if(this.options.mmbClassName&&this.options.mmbFocusedClassName)
                        {
                            $(F).retrieve("btnMorph",new Fx.Morph(F,
                            {
                                duration:(this.options.duration*5),
                                transition:this.options.physics,link:"cancel"
                            })).start(this.options.mmbClassName)
                        }
                    }.bind(this),
                    blur:function(G)
                    {
                        if(this.options.mmbClassName&&this.options.mmbFocusedClassName)
                        {
                            $(F).retrieve("btnMorph",new Fx.Morph(F,
                            {
                                duration:(this.options.duration*5),
                                transition:this.options.physics,link:"cancel"
                            })).start(this.options.mmbClassName)
                        }
                    }.bind(this),
                    keydown:function(H)
                    {
                        var G=new Event(H);
                        
                        if(H.key==="up"||H.key==="down"||H.key==="left"||H.key==="right")
                        {
                            H.stop()
                        }
                        
                        if(H.key==="left"&&this.options.orientation==="horizontal"||H.key==="up"&&this.options.orientation==="vertical")
                        {
                            if(F.getParent("li").getPrevious("li")){F.getParent("li").getPrevious("li").getFirst("a").focus()
                        }
                        else
                        {
                            F.getParent("li").getParent().getLast("li").getFirst("a").focus()
                        }
                    }
                    else
                    {
                        if(H.key==="right"&&this.options.orientation==="horizontal"||H.key==="down"&&this.options.orientation==="vertical")
                        {
                            if(F.getParent("li").getNext("li"))
                            {
                                F.getParent("li").getNext("li").getFirst("a").focus()
                            }
                            else
                            {
                                F.getParent("li").getParent().getFirst("li").getFirst("a").focus()
                            }
                        }
                    }
                }.bind(this)
            })
        },this);
        this.stretch();
        this.killDivider();
        this.center();
        this.fixHasLayoutBug();
        this.options.onInit_complete()
    },
    fixHasLayoutBug:function()
    {
        if(Browser.Engine.trident&&this.options.fixHasLayoutBug)
        {
            $(this.options.id).getParents().setStyle("zoom",1);
            $(this.options.id).setStyle("zoom",1);
            $(this.options.id).getChildren().setStyle("zoom",1);
            $(this.options.subMenusContainerId).setStyle("zoom",1);
            $(this.options.subMenusContainerId).getChildren().setStyle("zoom",1)
        }
    },
    center:function()
    {
        if(!this.options.center)
        {
            return
        }
        $(this.options.id).setStyles(
        {
            left:"50%",
            "margin-left":-($(this.options.id).getSize().x/2)
        })
    },
    stretch:function()
    {
        if(this.options.stretchMainMenu&&this.options.orientation==="horizontal")
        {
            var C=parseFloat($(this.options.id).getCoordinates().width);
            var D=0;
            var B=$(this.options.id).getElements("a");
            B.setStyles({"padding-left":0,"padding-right":0});
            B.each(function(F,E)
            {
                D+=F.getSize().x
            }.bind(this));
            
            if(C<D)
            {
                return
            }
            var A=(C-D)/B.length;
            B.each(function(F,E)
            {
                F.setStyle("width",F.getSize().x+A)
            }.bind(this));
            B.getLast().setStyle("width",B.getLast().getSize().x-1)
        }
    },
    killDivider:function()
    {
        if(this.options.killDivider&&this.options.killDivider.toLowerCase()==="first")
        {
            $($(this.options.id).getElements("li")[0]).setStyles({background:"none"})
        }
        else
        {
            if(this.options.killDivider&&this.options.killDivider.toLowerCase()==="last")
            {
                $($(this.options.id).getElements("li").getLast()).setStyles({background:"none"})
            }
        }
    },
    hideAllSubMenusNow:function()
    {
        this.options.onHideAllSubMenusNow_begin();
        $clear(this.hideAllMenusTimeout);
        $$(this.allSubMenus).fireEvent("hide");
        this.options.onHideAllSubMenusNow_complete()
    }
});

var MenuMaticSubMenu=new Class(
{
    Implements:Options,Extends:MenuMatic,options:
    {
        onSubMenuInit_begin:(function(A){}),
        onSubMenuInit_complete:(function(A){}),
        onMatchWidth_begin:(function(A){}),
        onMatchWidth_complete:(function(A){}),
        onHideSubMenu_begin:(function(A){}),
        onHideSubMenu_complete:(function(A){}),
        onHideOtherSubMenus_begin:(function(A){}),
        onHideOtherSubMenus_complete:(function(A){}),
        onHideAllSubMenus_begin:(function(A){}),
        onHideAllSubMenus_complete:(function(A){}),
        onPositionSubMenu_begin:(function(A){}),
        onPositionSubMenu_complete:(function(A){}),
        onShowSubMenu_begin:(function(A){}),
        onShowSubMenu_complete:(function(A){})
    },
    root:null,
    btn:null,
    hidden:true,
    myEffect:null,
    initialize:function(B,A,C)
    {
        this.setOptions(B);
        this.root=A;
        this.btn=C;
        this.childMenu=this.btn.retrieve("childMenu");
        this.subMenuType=this.btn.retrieve("subMenuType");
        this.childMenu=this.btn.retrieve("childMenu");
        this.parentSubMenus=$$(this.btn.retrieve("parentSubMenus"));
        this.parentLinks=$$(this.btn.retrieve("parentLinks"));
        this.parentSubMenu=$(this.parentSubMenus[0]);
        
        if(this.parentSubMenu)
        {
            this.parentSubMenu=this.parentSubMenu.retrieve("class")
        }
        this.childMenu.store("class",this);
        this.btn.store("class",this);
        this.childMenu.store("status","closed");
        this.options.onSubMenuInit_begin(this);
        this.childMenu.addEvent("hide",function(){this.hideSubMenu()}.bind(this));
        this.childMenu.addEvent("show",function(){this.showSubMenu()}.bind(this));
        
        if(this.options.effect)
        {
            this.myEffect=new Fx.Morph($(this.childMenu).getFirst(),
            {
                duration:this.options.duration,
                transition:this.options.physics,
                link:"cancel"
            })
        }
        
        if(this.options.effect==="slide"||this.options.effect==="slide & fade")
        {
            if(this.subMenuType=="initial"&&this.options.orientation==="horizontal")
            {
                this.childMenu.getFirst().setStyle("margin-top","0")
            }
            else
            {
                this.childMenu.getFirst().setStyle("margin-left","0")
            }
        }
        else
        {
            if(this.options.effect==="fade"||this.options.effect==="slide & fade")
            {
                this.childMenu.getFirst().setStyle("opacity",0)
            }
        }
        
        if(this.options.effect!="fade"&&this.options.effect!="slide & fade")
        {
            this.childMenu.getFirst().setStyle("opacity",this.options.opacity)
        }
        
        var D=$(this.childMenu).getElements("a").filter(function(F,E){return !F.retrieve("childMenu")});
        D.each(function(F,E)
        {
            $(F).addClass("subMenuBtn");
            F.addEvents(
            {
                mouseenter:function(G)
                {
                    this.childMenu.fireEvent("show");
                    this.cancellHideAllSubMenus();
                    this.hideOtherSubMenus()
                }.bind(this),
                focus:function(G)
                {
                    this.childMenu.fireEvent("show");
                    this.cancellHideAllSubMenus();
                    this.hideOtherSubMenus()
                }.bind(this),
                mouseleave:function(G)
                {
                    this.cancellHideAllSubMenus();
                    this.hideAllSubMenus()
                }.bind(this),
                blur:function(G)
                {
                    this.cancellHideAllSubMenus();
                    this.hideAllSubMenus()
                }.bind(this),
                keydown:function(H)
                {
                    var G=new Event(H);
                    
                    if(H.key==="up"||H.key==="down"||H.key==="left"||H.key==="right"||H.key==="tab")
                    {
                        H.stop()
                    }
                    
                    if(H.key==="up")
                    {
                        if(F.getParent("li").getPrevious("li"))
                        {
                            F.getParent("li").getPrevious("li").getFirst("a").focus()
                        }
                        else
                        {
                            if(this.options.direction.y==="down")
                            {
                                this.btn.focus()
                            }
                            else
                            {
                                if(this.options.direction.y==="up")
                                {
                                    F.getParent("li").getParent().getLast("li").getFirst("a").focus()
                                }
                            }
                        }
                    }
                    else
                    {
                        if(H.key==="down")
                        {
                            if(F.getParent("li").getNext("li"))
                            {
                                F.getParent("li").getNext("li").getFirst("a").focus()
                            }
                            else
                            {
                                if(this.options.direction.y==="down")
                                {
                                    F.getParent("li").getParent().getFirst("li").getFirst("a").focus()
                                }
                                else
                                {
                                    if(this.options.direction.y==="up")
                                    {
                                        this.btn.focus()
                                    }
                                }
                            }
                        }
                        else
                        {
                            if(H.key===this.options.direction.xInverse)
                            {
                                this.btn.focus()
                            }
                        }
                    }
                }.bind(this)
            })
        },this);
        $(this.btn).removeClass("subMenuBtn");
        
        if(this.subMenuType=="initial")
        {
            this.btn.addClass("mainParentBtn")
        }
        else
        {
            this.btn.addClass("subParentBtn")
        }
        $(this.btn).addEvents(
        {
            mouseenter:function(E)
            {
                this.cancellHideAllSubMenus();
                this.hideOtherSubMenus();
                this.showSubMenu();
                
                if(this.subMenuType==="initial"&&this.options.mmbClassName&&this.options.mmbFocusedClassName)
                {
                    $(this.btn).retrieve("btnMorph",new Fx.Morph($(this.btn),
                    {
                        duration:(this.options.duration/2),
                        transition:this.options.physics,link:"cancel"
                    })).start(this.options.mmbFocusedClassName)
                }
            }.bind(this),
            focus:function(E)
            {
                this.cancellHideAllSubMenus();
                this.hideOtherSubMenus();
                this.showSubMenu();
                
                if(this.subMenuType==="initial"&&this.options.mmbClassName&&this.options.mmbFocusedClassName)
                {
                    $(this.btn).retrieve("btnMorph",new Fx.Morph($(this.btn),
                    {
                        duration:(this.options.duration/2),
                        transition:this.options.physics,
                        link:"cancel"
                    })).start(this.options.mmbFocusedClassName)
                }
            }.bind(this),
            mouseleave:function(E)
            {
                this.cancellHideAllSubMenus();
                this.hideAllSubMenus()
            }.bind(this),
            blur:function(E)
            {
                this.cancellHideAllSubMenus();
                this.hideAllSubMenus()
            }.bind(this),
            keydown:function(E)
            {
                E=new Event(E);
                
                if(E.key==="up"||E.key==="down"||E.key==="left"||E.key==="right")
                {
                    E.stop()
                }
                
                if(!this.parentSubMenu)
                {
                    if(this.options.orientation==="horizontal"&&E.key===this.options.direction.y||this.options.orientation==="vertical"&&E.key===this.options.direction.x)
                    {
                        if(this.options.direction.y==="down")
                        {
                            this.childMenu.getFirst().getFirst("li").getFirst("a").focus()
                        }
                        else
                        {
                            if(this.options.direction.y==="up")
                            {
                                this.childMenu.getFirst().getLast("li").getFirst("a").focus()
                            }
                        }
                    }
                    else
                    {
                        if(this.options.orientation==="horizontal"&&E.key==="left"||this.options.orientation==="vertical"&&E.key===this.options.direction.yInverse)
                        {
                            if(this.btn.getParent().getPrevious())
                            {
                                this.btn.getParent().getPrevious().getFirst().focus()
                            }
                            else
                            {
                                this.btn.getParent().getParent().getLast().getFirst().focus()
                            }
                        }
                        else
                        {
                            if(this.options.orientation==="horizontal"&&E.key==="right"||this.options.orientation==="vertical"&&E.key===this.options.direction.y)
                            {
                                if(this.btn.getParent().getNext())
                                {
                                    this.btn.getParent().getNext().getFirst().focus()
                                }
                                else
                                {
                                    this.btn.getParent().getParent().getFirst().getFirst().focus()
                                }
                            }
                        }
                    }
                }
                else
                {
                    if(E.key==="tab")
                    {
                        E.stop()
                    }
                    
                    if(E.key==="up")
                    {
                        if(this.btn.getParent("li").getPrevious("li"))
                        {
                            this.btn.getParent("li").getPrevious("li").getFirst("a").focus()
                        }
                        else
                        {
                            if(this.options.direction.y==="down")
                            {
                                this.parentSubMenu.btn.focus()
                            }
                            else
                            {
                                if(this.options.direction.y==="up")
                                {
                                    this.btn.getParent("li").getParent().getLast("li").getFirst("a").focus()
                                }
                            }
                        }
                    }
                    else
                    {
                        if(E.key==="down")
                        {
                            if(this.btn.getParent("li").getNext("li"))
                            {
                                this.btn.getParent("li").getNext("li").getFirst("a").focus()
                            }
                            else
                            {
                                if(this.options.direction.y==="down")
                                {
                                    this.btn.getParent("li").getParent().getFirst("li").getFirst("a").focus()
                                }
                                else
                                {
                                    if(this.options.direction.y==="up")
                                    {
                                        this.parentSubMenu.btn.focus()
                                    }
                                }
                            }
                        }
                        else
                        {
                            if(E.key===this.options.direction.xInverse)
                            {
                                this.parentSubMenu.btn.focus()
                            }
                            else
                            {
                                if(E.key===this.options.direction.x)
                                {
                                    if(this.options.direction.y==="down")
                                    {   
                                        this.childMenu.getFirst().getFirst("li").getFirst("a").focus()
                                    }
                                    else
                                    {
                                        if(this.options.direction.y==="up"){}
                                    }
                                }
                            }
                        }
                    }
                }
            }.bind(this)
        });
        this.options.onSubMenuInit_complete(this)
    },
    matchWidth:function()
    {
        if(this.widthMatched||!this.options.matchWidthMode||this.subMenuType==="subsequent")
        {
            return
        }
        this.options.onMatchWidth_begin(this);
        var A=this.btn.getCoordinates().width;
        $(this.childMenu).getElements("a").each(function(E,D)
        {
            var C=parseFloat($(this.childMenu).getFirst().getStyle("border-left-width"))+parseFloat($(this.childMenu).getFirst().getStyle("border-right-width"));
            var B=parseFloat(E.getStyle("padding-left"))+parseFloat(E.getStyle("padding-right"));
            var F=C+B;
            
            if(A>E.getCoordinates().width)
            {
                E.setStyle("width",A-F);
                E.setStyle("margin-right",-C)
            }
        }.bind(this));
        this.width=this.childMenu.getFirst().getCoordinates().width;
        this.widthMatched=true;
        this.options.onMatchWidth_complete(this)
    },
    hideSubMenu:function()
    {
        if(this.childMenu.retrieve("status")==="closed")
        {
            return
        }
        this.options.onHideSubMenu_begin(this);
        
        if(this.subMenuType=="initial")
        {
            if(this.options.mmbClassName&&this.options.mmbFocusedClassName)
            {
                $(this.btn).retrieve("btnMorph",new Fx.Morph($(this.btn),
                {
                    duration:(this.options.duration),
                    transition:this.options.physics,
                    link:"cancel"
                })).start(this.options.mmbClassName).chain(function()
                {
                    $(this.btn).removeClass("mainMenuParentBtnFocused");
                    $(this.btn).addClass("mainMenuParentBtn")
                }.bind(this))
            }
            else
            {
                $(this.btn).removeClass("mainMenuParentBtnFocused");
                $(this.btn).addClass("mainMenuParentBtn")
            }
        }
        else
        {
            $(this.btn).removeClass("subMenuParentBtnFocused");
            $(this.btn).addClass("subMenuParentBtn")
        }
        this.childMenu.setStyle("z-index",1);
        
        if(this.options.effect&&this.options.effect.toLowerCase()==="slide")
        {
            if(this.subMenuType=="initial"&&this.options.orientation==="horizontal"&&this.options.direction.y==="down")
            {
                this.myEffect.start(
                {   
                    "margin-top":-this.height
                }).chain(function()
                {
                    this.childMenu.style.display="none"
                }.bind(this))
            }
            else
            {
                if(this.subMenuType=="initial"&&this.options.orientation==="horizontal"&&this.options.direction.y==="up")
                {
                    this.myEffect.start({"margin-top":this.height}).chain(function()
                    {
                        this.childMenu.style.display="none"
                    }.bind(this))
                }
                else
                {
                    if(this.options.direction.x==="right")
                    {
                        this.myEffect.start({"margin-left":-this.width}).chain(function()
                        {
                            this.childMenu.style.display="none"
                        }.bind(this))
                    }
                    else
                    {
                        if(this.options.direction.x==="left")
                        {
                            this.myEffect.start({"margin-left":this.width}).chain(function()
                            {
                                this.childMenu.style.display="none"
                            }.bind(this))
                        }
                    }
                }
            }
        }
        else
        {
            if(this.options.effect=="fade")
            {
                this.myEffect.start({opacity:0}).chain(function()
                {
                    this.childMenu.style.display="none"
                }.bind(this))
            }
            else
            {
                if(this.options.effect=="slide & fade")
                {
                    if(this.subMenuType=="initial"&&this.options.orientation==="horizontal"&&this.options.direction.y==="down")
                    {
                        this.myEffect.start(
                        {
                            "margin-top":-this.height,opacity:0
                        }).chain(function()
                        {
                            this.childMenu.style.display="none"
                        }.bind(this))
                    }
                    else
                    {
                        if(this.subMenuType=="initial"&&this.options.orientation==="horizontal"&&this.options.direction.y==="up")
                        {
                            this.myEffect.start(
                            {
                                "margin-top":this.height,opacity:0
                            }).chain(function()
                            {
                                this.childMenu.style.display="none"
                            }.bind(this))
                        }
                        else
                        {
                            if(this.options.direction.x==="right")
                            {
                                this.myEffect.start({"margin-left":-this.width,opacity:0}).chain(function()
                                {
                                    this.childMenu.style.display="none"
                                }.bind(this))
                            }
                            else
                            {
                                if(this.options.direction.x==="left")
                                {
                                    this.myEffect.start({"margin-left":this.width,opacity:0}).chain(function()
                                    {
                                        this.childMenu.style.display="none"
                                    }.bind(this))
                                }
                            }
                        }
                    }
                }
                else
                {
                    this.childMenu.style.display="none"
                }
            }
        }
        this.childMenu.store("status","closed");
        this.options.onHideSubMenu_complete(this)
    },
    hideOtherSubMenus:function()
    {
        this.options.onHideOtherSubMenus_begin(this);
        
        if(!this.btn.retrieve("otherSubMenus"))
        {
            this.btn.store("otherSubMenus",$$(this.root.allSubMenus.filter(function(A)
            {
                return !this.btn.retrieve("parentSubMenus").contains(A)&&A!=this.childMenu
            }.bind(this))))
        }
        this.parentSubMenus.fireEvent("show");
        this.btn.retrieve("otherSubMenus").fireEvent("hide");
        this.options.onHideOtherSubMenus_complete(this)
    },
    hideAllSubMenus:function()
    {
        this.options.onHideAllSubMenus_begin(this);
        $clear(this.root.hideAllMenusTimeout);
        this.root.hideAllMenusTimeout=(function()
        {
            $clear(this.hideAllMenusTimeout);
            $$(this.root.allSubMenus).fireEvent("hide")
        }).bind(this).delay(this.options.hideDelay);
        this.options.onHideAllSubMenus_complete(this)
    },
    cancellHideAllSubMenus:function()
    {
        $clear(this.root.hideAllMenusTimeout)
    },
    showSubMenu:function(A)
    {
        if(this.childMenu.retrieve("status")==="open")
        {
            return
        }
        this.options.onShowSubMenu_begin(this);
        
        if(this.subMenuType=="initial")
        {
            $(this.btn).removeClass("mainMenuParentBtn");
            $(this.btn).addClass("mainMenuParentBtnFocused")
        }
        else
        {
            $(this.btn).removeClass("subMenuParentBtn");
            $(this.btn).addClass("subMenuParentBtnFocused")
        }
        this.root.subMenuZindex++;
        this.childMenu.setStyles(
        {
            display:"block",
            visibility:"hidden",
            "z-index":this.root.subMenuZindex
        });
        
        if(!this.width||!this.height)
        {
            this.width=this.childMenu.getFirst().getCoordinates().width;
            this.height=this.childMenu.getFirst().getCoordinates().height;
            this.childMenu.setStyle("height",this.height,"border");
            
            if(this.options.effect==="slide"||this.options.effect==="slide & fade")
            {
                if(this.subMenuType=="initial"&&this.options.orientation==="horizontal")
                {
                    this.childMenu.getFirst().setStyle("margin-top","0");
                    
                    if(this.options.direction.y==="down")
                    {
                        this.myEffect.set({"margin-top":-this.height})
                    }
                    else
                    {
                        if(this.options.direction.y==="up")
                        {
                            this.myEffect.set({"margin-top":this.height})
                        }
                    }
                }
                else
                {
                    if(this.options.direction.x==="left")
                    {
                        this.myEffect.set({"margin-left":this.width})
                    }
                    else
                    {
                        this.myEffect.set({"margin-left":-this.width})
                    }
                }
            }
        }
        this.matchWidth();
        this.positionSubMenu();
        
        if(this.options.effect==="slide")
        {
            this.childMenu.setStyles({display:"block",visibility:"visible"});
            
            if(this.subMenuType==="initial"&&this.options.orientation==="horizontal")
            {
                if(A)
                {
                    this.myEffect.set({"margin-top":0}).chain(function()
                    {
                        this.showSubMenuComplete()
                    }.bind(this))
                }
                else
                {
                    this.myEffect.start({"margin-top":0}).chain(function()
                    {
                        this.showSubMenuComplete()
                    }.bind(this))
                }
            }
            else
            {
                if(A)
                {
                    this.myEffect.set({"margin-left":0}).chain(function()
                    {
                        this.showSubMenuComplete()
                    }.bind(this))
                }
                else
                {
                    this.myEffect.start({"margin-left":0}).chain(function()
                    {
                        this.showSubMenuComplete()
                    }.bind(this))
                }
            }
        }
        else
        {
            if(this.options.effect==="fade")
            {
                if(A)
                {
                    this.myEffect.set({opacity:this.options.opacity}).chain(function()
                    {
                        this.showSubMenuComplete()
                    }.bind(this))
                }
                else
                {
                    this.myEffect.start({opacity:this.options.opacity}).chain(function()
                    {
                        this.showSubMenuComplete()
                    }.bind(this))
                }
            }
            else
            {
                if(this.options.effect=="slide & fade")
                {
                    this.childMenu.setStyles({display:"block",visibility:"visible"});
                    this.childMenu.getFirst().setStyles({left:0});
                    
                    if(this.subMenuType==="initial"&&this.options.orientation==="horizontal")
                    {
                        if(A)
                        {
                            this.myEffect.set({"margin-top":0,opacity:this.options.opacity}).chain(function()
                            {
                                this.showSubMenuComplete()
                            }.bind(this))
                        }
                        else
                        {
                            this.myEffect.start({"margin-top":0,opacity:this.options.opacity}).chain(function()
                            {
                                this.showSubMenuComplete()
                            }.bind(this))
                        }
                    }
                    else
                    {
                        if(A)
                        {
                            if(this.options.direction.x==="right")
                            {
                                this.myEffect.set({"margin-left":0,opacity:this.options.opacity}).chain(function()
                                {
                                    this.showSubMenuComplete()
                                }.bind(this))
                            }
                            else
                            {
                                if(this.options.direction.x==="left")
                                {
                                    this.myEffect.set({"margin-left":0,opacity:this.options.opacity}).chain(function()
                                    {
                                        this.showSubMenuComplete()
                                    }.bind(this))
                                }
                            }
                        }
                        else
                        {
                            if(this.options.direction.x==="right")
                            {
                                this.myEffect.set({"margin-left":-this.width,opacity:this.options.opacity});
                                this.myEffect.start({"margin-left":0,opacity:this.options.opacity}).chain(function()
                                {
                                    this.showSubMenuComplete()
                                }.bind(this))
                            }
                            else
                            {
                                if(this.options.direction.x==="left")
                                {
                                    this.myEffect.start({"margin-left":0,opacity:this.options.opacity}).chain(function()
                                    {
                                        this.showSubMenuComplete()
                                    }.bind(this))
                                }
                            }
                        }
                    }
                }
                else
                {
                    this.childMenu.setStyles({display:"block",visibility:"visible"}).chain(function()
                    {
                        this.showSubMenuComplete(this)
                    }.bind(this))
                }
            }
        }
        this.childMenu.store("status","open")
    },
    showSubMenuComplete:function()
    {
        this.options.onShowSubMenu_complete(this)
    },
    positionSubMenu:function()
    {
        this.options.onPositionSubMenu_begin(this);
        this.childMenu.setStyle("width",this.width);
        this.childMenu.getFirst().setStyle("width",this.width);
        
        if(this.subMenuType==="subsequent")
        {
            if(this.parentSubMenu&&this.options.direction.x!=this.parentSubMenu.options.direction.x)
            {
                if(this.parentSubMenu.options.direction.x==="left"&&this.options.effect&&this.options.effect.contains("slide"))
                {
                    this.myEffect.set({"margin-left":this.width})
                }
            }
            this.options.direction.x=this.parentSubMenu.options.direction.x;
            this.options.direction.xInverse=this.parentSubMenu.options.direction.xInverse;
            this.options.direction.y=this.parentSubMenu.options.direction.y;
            this.options.direction.yInverse=this.parentSubMenu.options.direction.yInverse
        }
        var C;
        var A;
        
        if(this.subMenuType=="initial")
        {
            if(this.options.direction.y==="up")
            {
                if(this.options.orientation==="vertical")
                {
                    C=this.btn.getCoordinates().bottom-this.height+this.options.tweakInitial.y
                }
                else
                {
                    C=this.btn.getCoordinates().top-this.height+this.options.tweakInitial.y
                }
                this.childMenu.style.top=C+"px"
            }
            else
            {
                if(this.options.orientation=="horizontal")
                {
                    this.childMenu.style.top=this.btn.getCoordinates().bottom+this.options.tweakInitial.y+"px"
                }
                else
                {
                    if(this.options.orientation=="vertical")
                    {
                        C=this.btn.getPosition().y+this.options.tweakInitial.y;
                        
                        if((C+this.childMenu.getSize().y)>=$(document.body).getScrollSize().y)
                        {
                            A=(C+this.childMenu.getSize().y)-$(document.body).getScrollSize().y;
                            C=C-A-20
                        }
                        this.childMenu.style.top=C+"px"
                    }
                }
            }
            
            if(this.options.orientation=="horizontal")
            {
                this.childMenu.style.left=this.btn.getPosition().x+this.options.tweakInitial.x+"px"
            }
            else
            {
                if(this.options.direction.x=="left")
                {
                    this.childMenu.style.left=this.btn.getPosition().x-this.childMenu.getCoordinates().width+this.options.tweakInitial.x+"px"
                }
                else
                {
                    if(this.options.direction.x=="right")
                    {
                        this.childMenu.style.left=this.btn.getCoordinates().right+this.options.tweakInitial.x+"px"
                    }
                }
            }
        }
        else
        {
            if(this.subMenuType=="subsequent")
            {
                if(this.options.direction.y==="down")
                {
                    if((this.btn.getCoordinates().top+this.options.tweakSubsequent.y+this.childMenu.getSize().y)>=$(document.body).getScrollSize().y)
                    {
                        A=(this.btn.getCoordinates().top+this.options.tweakSubsequent.y+this.childMenu.getSize().y)-$(document.body).getScrollSize().y;
                        this.childMenu.style.top=(this.btn.getCoordinates().top+this.options.tweakSubsequent.y)-A-20+"px"
                    }
                    else
                    {
                        this.childMenu.style.top=this.btn.getCoordinates().top+this.options.tweakSubsequent.y+"px"
                    }
                }
                else
                {
                    if(this.options.direction.y==="up")
                    {
                        if((this.btn.getCoordinates().bottom-this.height+this.options.tweakSubsequent.y)<1)
                        {
                            this.options.direction.y="down";
                            this.options.direction.yInverse="up";
                            this.childMenu.style.top=this.btn.getCoordinates().top+this.options.tweakSubsequent.y+"px"
                        }
                        else
                        {
                            this.childMenu.style.top=this.btn.getCoordinates().bottom-this.height+this.options.tweakSubsequent.y+"px"
                        }
                    }
                }
                
                if(this.options.direction.x=="left")
                {
                    this.childMenu.style.left=this.btn.getCoordinates().left-this.childMenu.getCoordinates().width+this.options.tweakSubsequent.x+"px";
                    
                    if(this.childMenu.getPosition().x<0)
                    {
                        this.options.direction.x="right";
                        this.options.direction.xInverse="left";
                        this.childMenu.style.left=this.btn.getPosition().x+this.btn.getCoordinates().width+this.options.tweakSubsequent.x+"px";
                        
                        if(this.options.effect==="slide"||this.options.effect==="slide & fade")
                        {
                            this.myEffect.set({"margin-left":-this.width,opacity:this.options.opacity})
                        }
                    }
                }
                else
                {
                    if(this.options.direction.x=="right")
                    {
                        this.childMenu.style.left=this.btn.getCoordinates().right+this.options.tweakSubsequent.x+"px";
                        
                        var D=this.childMenu.getCoordinates().right;
                        var B=document.getCoordinates().width+window.getScroll().x;
                        
                        if(D>B)
                        {
                            this.options.direction.x="left";
                            this.options.direction.xInverse="right";
                            this.childMenu.style.left=this.btn.getCoordinates().left-this.childMenu.getCoordinates().width+this.options.tweakSubsequent.x+"px";
                            
                            if(this.options.effect==="slide"||this.options.effect==="slide & fade")
                            {
                                this.myEffect.set({"margin-left":this.width,opacity:this.options.opacity})
                            }
                        }
                    }
                }
            }
        }
        this.options.onPositionSubMenu_complete(this)
    }
});
