/** * 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:"rightnav",subMenusContainerId:"subMenusContainer",effect:"slide & fade",duration:600,physics:Fx.Transitions.Pow.easeOut,hideDelay:1000,stretchMainMenu:false,matchWidthMode:false,orientation:"horizontal",direction:{x:"left",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)}});
