
YAHOO.util.Event.onContentReady("yui_menu", function () {
  var Dom = YAHOO.util.Dom, oAnim;  // Animation instance

  function onSubmenuBeforeShow(p_sType, p_sArgs) {
    var oBody, oShadow, oUL;

    if (this.parent) {
      oShadow = this.element.lastChild;
      oShadow.style.height = "0px";

      if (oAnim && oAnim.isAnimated()) {
        oAnim.stop();
        oAnim = null;
      }

      oBody = this.body;

      if (this.parent && !(this.parent instanceof YAHOO.widget.MenuBarItem) && YAHOO.env.ua.gecko) {
        Dom.setStyle(oBody, "width", (oBody.clientWidth + "px"));
      }
      Dom.setStyle(oBody, "overflow", "hidden");

      oUL = oBody.getElementsByTagName("ul")[0];
      Dom.setStyle(oUL, "marginTop", ("-" + oUL.offsetHeight + "px"));
    }
  }

  function onTween(p_sType, p_aArgs, p_oShadow) {
    if (this.cfg.getProperty("iframe")) {
      this.syncIframe();
    }
    if (p_oShadow) {
      p_oShadow.style.height = this.element.offsetHeight + "px";
    }
  }

  function onAnimationComplete(p_sType, p_aArgs, p_oShadow) {
    var oBody = this.body,
        oUL = oBody.getElementsByTagName("ul")[0];
    if (p_oShadow) {
      p_oShadow.style.height = this.element.offsetHeight + "px";
    }
    Dom.setStyle(oUL, "marginTop", "");
    Dom.setStyle(oBody, "overflow", "");
    if (this.parent && !(this.parent instanceof YAHOO.widget.MenuBarItem) && YAHOO.env.ua.gecko) {
      Dom.setStyle(oBody, "width", "");
    }
  }

  function onSubmenuShow(p_sType, p_sArgs) {
    var oElement, oShadow, oUL;

    if (this.parent) {
      oElement = this.element;
      oShadow = oElement.lastChild;
      oUL = this.body.getElementsByTagName("ul")[0];

      oAnim = new YAHOO.util.Anim(oUL, { marginTop: { to: 0 } },.5, YAHOO.util.Easing.easeOut);
      oAnim.onStart.subscribe(function () {
        oShadow.style.height = "100%";
      });

      oAnim.animate();

      if (YAHOO.env.ua.ie) {
        oShadow.style.height = oElement.offsetHeight + "px";
        oAnim.onTween.subscribe(onTween, oShadow, this);
      }
      oAnim.onComplete.subscribe(onAnimationComplete, oShadow, this);
    }
  }

  var oMenuBar = new YAHOO.widget.MenuBar("yui_menu", { 
                                             autosubmenudisplay: true, 
                                             hidedelay: 750, 
                                             lazyload: true });

  oMenuBar.subscribe("beforeShow", onSubmenuBeforeShow);
  oMenuBar.subscribe("show", onSubmenuShow);
  oMenuBar.render();            
});

