var IZIMenuFx = {
  menuToggleFx: false,
  menuElement: null,
  currentMainMenu: false,
  currentSubMenu: false,

  initialize: function ()
  {
    this.initializeAccordion();
    this.initializeSubmenus();
    this.initializeSubsubmenus();
  },

  initializeAccordion: function ()
  {
    var me = this;
    var showIndex = false;
    count = 0;

    if (!$E("div.menu")) return;
    $$("div.menu ul li").each( function ( item ) {
      if (item.getElement("ul.menu")) {
        if (item.hasClass("show")) showIndex = count;
        count++;
      }
    });
    var accordion = new Fx.Accordion('a.button', 'div.menu ul li ul.menu', { 
      opacity: false,
      show: showIndex,
      display: false,
      onActive: function (element) {
        me.currentMainMenu = element;
      },
      onBackground: function (element) {
        if (element.parentNode.getElement("ul").getStyle("height") == "auto") {
          element.parentNode.getElement("ul").setStyle("height",element.parentNode.getElement("ul").getSize().size.y);
        }
        if (element == me.currentMainMenu) me.currentMainMenu = null;
      },
      onComplete: function () {
        if (me.currentMainMenu) me.currentMainMenu.parentNode.getElement("ul").setStyle("height","auto");
      }
    });

    var showElement = $E("div.menu").getElement("div.title a");
    this.menuToggleFx = new Fx.Slide($E("div.menu").getElement("ul"), {
      onComplete: function(e) {
        var ulElement = $E("div.menu ul");
        if (!ulElement) return;
        var parentElement = ulElement.getParent();
        var height = parseInt(parentElement.getStyle("height"),10);
        if (height > 0) parentElement.setStyle("height","auto");
      }
    });
    showElement.addEvent("click", function () { IZIMenuFx.menuToggleFx.toggle(); } );
    $E("div.menu ul").setStyle("display", "");
  },

  initializeSubmenus: function ()
  {
    var me = this;
    var showIndex = false;
    count = 0;
    $$("div.menu ul li ul.menu li").each( function ( item ) {
      if (item.getElement("ul.submenu")) {
        if (item.hasClass("show")) showIndex = count;
        count++;
      }
    });
    var accordion = new Fx.Accordion('a.buttonSubmenu', 'div.menu ul li ul.submenu', { 
      opacity: false,
      show: showIndex,
      display: false,
      alwaysHide: true,
      onActive: function (element) {
        me.currentMainMenu.parentNode.getElement("ul").setStyle("height","auto");
        me.currentSubMenu = element;
      },
      onBackground: function (element) {
        if (element.parentNode.getElement("ul").getStyle("height") == "auto") {
          element.parentNode.getElement("ul").setStyle("height",element.parentNode.getElement("ul").getSize().size.y);
        }
        if (element == me.currentSubMenu) me.currentSubMenu = null;
      },
      onComplete: function () {
        if (me.currentSubMenu) me.currentSubMenu.parentNode.getElement("ul").setStyle("height","auto");
      }
    });
  },

  initializeSubsubmenus: function ()
  {
    var me = this;
    var showIndex = false;
    count = 0;
    $$("div.menu ul li ul.menu li ul.submenu li").each( function ( item ) {
      if (item.getElement("ul.subsubmenu")) {
        if (item.hasClass("show")) showIndex = count;
        count++;
      }
    });
    var accordion = new Fx.Accordion('a.buttonSubsubmenu', 'div.menu ul li ul.submenu li ul.subsubmenu', { 
      opacity: false,
      show: showIndex,
      display: false,
      alwaysHide: true,
      onActive: function( ) { 
        if (me.currentMainMenu) me.currentMainMenu.parentNode.getElement("ul").setStyle("height","auto");
        if (me.currentSubMenu)  me.currentSubMenu.parentNode.getElement("ul").setStyle("height","auto");
      }
    });
  }
}

window.addEvent( 'domready', IZIMenuFx.initialize.bind( IZIMenuFx ) );
