/**
 * 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 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:0},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)
}});
window.addEvent('domready', function() {
    var myMenu = new MenuMatic();
});
