var MenuMatic = new Class( {
   Implements : Options, options : {
      id : "nav", subMenusContainerId : "subMenusContainer", effect : "slide & fade", duration : 400, physics : Fx.Transitions.Sine.easeIn, 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 : 96, 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)}
   }
);