/**
* menuMatic
* @version 0.67 (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 : "categorieslist", subMenusContainerId : "subMenusContainer", effect : "slide&fade", duration : 600, physics : Fx.Transitions.Pow.easeOut, hideDelay : 1500, menuWidth : true, matchWidthMode : true, orientation : "vertical", direction : {
         x : "right", y : "down"}
      , tweakInitial : {
         x : 5, y : 0}
      , tweakSubsequent : {
         x : 5, y : 80}
      , opacity : 100, fixHasLayoutBug : true, mmbFocusedClassName : null, mmbClassName : null, killDivider : null, debug : false}
   , classElHash : new Hash(), hideAllMenusTimeout : null, parentBtns : new Hash(), subMenuZindex : 1, initialize : function(P) {
      if(Browser.Engine.webkit419) {
         return }
      if($type(this.parentBtns) === "object") {
         this.parentBtns = new Hash()}
      if($type(this.classElHash) === "object") {
         this.classElHash = new Hash()}
      this.setOptions(P); this.options.opacity = this.options.opacity / 100; var D = $(this.options.id).getElements("a"); var F = []; 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"}
         }
      D.each(function(Q) {
         var R = new Object(); if($(Q).getNext("ul") || $(Q).getNext("ol")) {
            var S = "subsequent"; if($(Q).parentNode.parentNode.id && $(Q).parentNode.parentNode.id == this.options.id) {
               S = "initial"}
            R.btn = $(Q); this.parentBtns.set(this.getOrSetId(R.btn), R.btn); if(S === "initial") {
               R.btn.addClass("mainMenuParentBtn")}
            else {
               R.btn.addClass("subMenuParentBtn")}
            R.childMenu = $(Q).getNext(); R.parentSubMenus = this.getParents($(Q), this.options.id, "ul,ol"); R.subMenuType = S; F.push(R)}
         }
      .bind(this)); var H = new Element("div", {
         id : this.options.subMenusContainerId}
      ).inject($(document.body), "bottom"); F.each(function(R, Q) {
         var S = new Element("div", {
            "class" : "smOW"}
         ).inject(H); R.childMenu.inject(S); R.childMenu = S; this.classElHash.set(this.getOrSetId(S), null)}
      .bind(this)); for(var I in F) {
         if(F.hasOwnProperty(I)) {
            var O = new Hash(); for(var N in F[I].parentSubMenus) {
               if(F[I].parentSubMenus.hasOwnProperty(N)) {
                  var A = $(F[I].parentSubMenus[N]).getParent().id; O.set(A, null)}
               }
            F[I].parentSubMenus = O}
         }
      H.getElements("a").each(function(R, Q) {
         R.set("tabindex", "-1")}
      ); for(var I in F) {
         if(F.hasOwnProperty(I)) {
            $(F[I].btn).store("isParent", true); var G = new MenuMaticSubMenu(this.options, {
               root : this, btn : F[I].btn, childMenu : F[I].childMenu, parentSubMenus : F[I].parentSubMenus, subMenuType : F[I].subMenuType}
            ); G.setOptions(this.options); this.classElHash[F[I].childMenu.id] = G}
         }
      this.classElHash.each(function(R, Q) {
         var S = []; R.parentSubMenus.each(function(T, U) {
            R.parentSubMenus[U] = this.classElHash[U]; S.push(this.classElHash[U])}
         .bind(this)); R.parentSubMenu = S[0]}
      .bind(this)); var M = $(this.options.id).getElements("a").filter(function(R, Q) {
         return !this.parentBtns.contains(R)}
      .bind(this)); M.each(function(R, Q) {
         R.addEvents( {
            mouseenter : function(S) {
               S = new Event(S).stop(); this.hideAllSubMenusNow(); if(this.options.mmbClassName && this.options.mmbFocusedClassName) {
                  $(R).retrieve("btnMorph", new Fx.Morph(R, {
                     duration : (this.options.duration / 2), transition : this.options.physics, link : "cancel"}
                  )).start(this.options.mmbFocusedClassName)}
               }
            .bind(this), focus : function(S) {
               S = new Event(S).stop(); this.hideAllSubMenusNow(); if(this.options.mmbClassName && this.options.mmbFocusedClassName) {
                  $(R).retrieve("btnMorph", new Fx.Morph(R, {
                     duration : (this.options.duration / 2), transition : this.options.physics, link : "cancel"}
                  )).start(this.options.mmbFocusedClassName)}
               }
            .bind(this), mouseleave : function(S) {
               S = new Event(S).stop(); if(this.options.mmbClassName && this.options.mmbFocusedClassName) {
                  $(R).retrieve("btnMorph", new Fx.Morph(R, {
                     duration : (this.options.duration * 5), transition : this.options.physics, link : "cancel"}
                  )).start(this.options.mmbClassName)}
               }
            .bind(this), blur : function(S) {
               S = new Event(S).stop(); if(this.options.mmbClassName && this.options.mmbFocusedClassName) {
                  $(R).retrieve("btnMorph", new Fx.Morph(R, {
                     duration : (this.options.duration * 5), transition : this.options.physics, link : "cancel"}
                  )).start(this.options.mmbClassName)}
               }
            .bind(this), keydown : function(T) {
               var S = new Event(T); if(T.key === "up" || T.key === "down" || T.key === "left" || T.key === "right") {
                  T.stop()}
               if(T.key === "left" && this.options.orientation === "horizontal" || T.key === "up" && this.options.orientation === "vertical") {
                  if(R.getParent("li").getPrevious("li")) {
                     R.getParent("li").getPrevious("li").getFirst("a").focus()}
                  else {
                     R.getParent("li").getParent().getLast("li").getFirst("a").focus()}
                  }
               else {
                  if(T.key === "right" && this.options.orientation === "horizontal" || T.key === "down" && this.options.orientation === "vertical") {
                     if(R.getParent("li").getNext("li")) {
                        R.getParent("li").getNext("li").getFirst("a").focus()}
                     else {
                        R.getParent("li").getParent().getFirst("li").getFirst("a").focus()}
                     }
                  }
               }
            .bind(this)}
         )}
      , this); if(this.options.menuWidth && this.options.orientation === "horizontal") {
         var L = parseFloat($(this.options.id).getCoordinates().width); var E = 0; var B = $(this.options.id).getElements("a"); var K = 0 + parseFloat($(B[0]).getStyle("border-left-width")) + parseFloat($(B[B.length - 1]).getStyle("border-right-width")); var C = 1000; var J = 0; B.each(function(R, Q) {
            R.setStyles( {
               "padding-left" : 0, "padding-right" : 0}
            )}
         .bind(this)); while((E + K) < L && C > 0) {
            C--; E = 0; B[J].setStyle("width", B[J].getCoordinates().width + 1); B.each(function(R, Q) {
               E += R.getCoordinates().width}
            .bind(this)); J++; if(J > B.length - 1) {
               J = 0}
            }
         }
      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"}
            )}
         }
      }
   , getParents : function(F, E, A) {
      var D = []; if(A) {
         A = A.toString().split(","); A.each(function(H, G) {
            A[G] = A[G].toLowerCase()}
         )}
      currentObj = F; var C = 200; var B = 0; while(currentObj.parentNode && currentObj.parentNode.id != E) {
         B++; if(B > C) {
            break}
         if(!A || A.contains(currentObj.parentNode.tagName.toLowerCase())) {
            D.push(currentObj.parentNode)}
         currentObj = currentObj.parentNode}
      return D}
   , getOrSetId : function(C) {
      if(!C.id) {
         var D = new Date(); var B = D.getMilliseconds().toString(); var A = Math.floor(Math.random() * 1000); if(C.nodeName) {
            C.id = C.nodeName.toString() + "-" + B + A.toString()}
         else {
            C.id = "element" + B + A.toString()}
         }
      return C.id}
   , hideAllSubMenusNow : function() {
      $clear(this.hideAllMenusTimeout); this.classElHash.each(function(B, A) {
         B.hideSubMenu()}
      .bind(this))}
   }
);
var MenuMaticSubMenu = new Class( {
   Implements : Options, Extends : MenuMatic, options : {
      }
   , root : null, btn : null, childMenu : null, subMenuType : null, parentSubMenus : new Hash(), parentSubMenu : null, hidden : true, myEffect : null, width : false, height : null, widthMatched : false, initialize : function(B, C) {
      if($type(this.parentBtns) === "object") {
         this.parentBtns = new Hash()}
      if($type(this.classElHash) === "object") {
         this.classElHash = new Hash()}
      this.setOptions(B); for(var A in C) {
         if(C.hasOwnProperty(A)) {
            this[A] = C[A]}
         }
      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 !this.parentBtns.contains(F)}
      .bind(this)); D.each(function(F, E) {
         $(F).addClass("subMenuBtn"); F.addEvents( {
            mouseenter : function(G) {
               G = new Event(G).stop(); this.cancellHideAllSubMenus(); if(!F.retrieve("isParent")) {
                  this.hideOtherSubMenus()}
               }
            .bind(this), focus : function(G) {
               G = new Event(G).stop(); this.cancellHideAllSubMenus(); if(!F.retrieve("isParent")) {
                  this.hideOtherSubMenus()}
               }
            .bind(this), mouseleave : function(G) {
               G = new Event(G).stop(); this.cancellHideAllSubMenus(); this.hideAllSubMenus()}
            .bind(this), blur : function(G) {
               G = new Event(G).stop(); 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) {
            E = new Event(E).stop(); 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) {
            E = new Event(E).stop(); 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) {
            E = new Event(E).stop(); this.cancellHideAllSubMenus(); this.hideAllSubMenus()}
         .bind(this), blur : function(E) {
            E = new Event(E).stop(); 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)}
      )}
   , matchWidth : function() {
      if(this.widthMatched ||!this.options.matchWidthMode || this.subMenuType === "subsequent") {
         return }
      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}
   , hideSubMenu : function() {
      if(this.hidden) {
         return }
      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.hidden = true}
   , hideOtherSubMenus : function() {
      var A = []; (this.root.classElHash).each(function(C, B) {
         if(!this.parentSubMenus.contains(C) && this.childMenu.id != B) {
            C.hideSubMenu()}
         else {
            A.push(C)}
         }
      .bind(this)); for(i = (A.length - 1); i >= 0; i--) {
         A[i].showSubMenu()}
      }
   , hideAllSubMenus : function() {
      $clear(this.root.hideAllMenusTimeout); this.root.hideAllMenusTimeout = (function() {
         $clear(this.hideAllMenusTimeout); this.root.classElHash.each(function(B, A) {
            B.hideSubMenu()}
         .bind(this))}
      ).bind(this).delay(this.options.hideDelay)}
   , cancellHideAllSubMenus : function() {
      $clear(this.root.hideAllMenusTimeout)}
   , showSubMenu : function(A) {
      if(!this.btn ||!this.hidden) {
         return }
      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}
               )}
            else {
               this.myEffect.start( {
                  "margin-top" : 0}
               )}
            }
         else {
            if(A) {
               this.myEffect.set( {
                  "margin-left" : 0}
               )}
            else {
               this.myEffect.start( {
                  "margin-left" : 0}
               )}
            }
         }
      else {
         if(this.options.effect === "fade") {
            if(A) {
               this.myEffect.set( {
                  opacity : this.options.opacity}
               )}
            else {
               this.myEffect.start( {
                  opacity : this.options.opacity}
               )}
            }
         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}
                     )}
                  else {
                     this.myEffect.start( {
                        "margin-top" : 0, opacity : this.options.opacity}
                     )}
                  }
               else {
                  if(A) {
                     if(this.options.direction.x === "right") {
                        this.myEffect.set( {
                           "margin-left" : 0, opacity : this.options.opacity}
                        )}
                     else {
                        if(this.options.direction.x === "left") {
                           this.myEffect.set( {
                              "margin-left" : 0, opacity : this.options.opacity}
                           )}
                        }
                     }
                  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}
                        )}
                     else {
                        if(this.options.direction.x === "left") {
                           this.myEffect.start( {
                              "margin-left" : 0, opacity : this.options.opacity}
                           )}
                        }
                     }
                  }
               }
            else {
               this.childMenu.setStyles( {
                  display : "block", visibility : "visible"}
               )}
            }
         }
      this.hidden = false}
   , positionSubMenu : function() {
      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}
                        )}
                     }
                  }
               }
            }
         }
      }
   }
); 