var MenuManager = {
  items : new Array(),
  active : null,
/*
  menu_panel_id : null,
  onPanelOut : function( e ) {
    if ( isNull( this.active ) )
      return ;
    var eventTarget = DOMEvent.getTarget( e );

    if ( eventTarget.id != this.menu_panel_id )
      return ;

    var item_shown = 0;
    for( var i=0; i<this.items.length; i++ )
      if ( this.items[ i ].shown )
        item_shown++;
    if ( 0 == item_shown )
      this.showTimeout = setTimeout( Delegate.create( this, 'showActive' ), 1000 );
  },
  setPanel : function( menuPanel ) {
    this.menu_panel_id = menuPanel.id;
    addListener( menuPanel, 'mouseout', Delegate.create( this, 'onPanelOut' ) );
  },
  showTimeout : null,
  showActive : function() {
    this.cleanShowTimeout();
    this.active.show_menu();
  },
  cleanShowTimeout : function() {
    clearTimeout( this.showTimeout );
    this.showTimeout = null;
  },
*/
  createItem : function( htmlElement ) {
    var index = this.items.length;
    var rv = new MenuPanel( index, htmlElement );
    rv.registerListener( 'mouseOver', this );
    rv.registerListener( 'shown', this );
/*
    if ( rv.active )
      this.active = rv;
*/
    this.items.push( rv );
  },
  handleEvent : function( eventType, eventSource ) {
    var others = new Array();
    for( var i=0; i<this.items.length; i++ )
      if ( this.items[ i ] != eventSource )
        others.push( this.items[ i ] );

    if ( 'mouseOver' == eventType ) {
/*
      if ( !isNull( this.showTimeout ) )
        this.cleanShowTimeout();
*/
      eventSource.show_menu();
    } else if ( 'shown' == eventType ) {
      for( var i=0; i<others.length; i++ )
        others[ i ].hide_menu();
    }
  }
}

function MenuPanel( menuIndex, htmlElement ) {
  this.extend( new Listenable() );

  this.index = menuIndex;
  this.element = htmlElement;
  this.trigger = htmlElement.firstChild;
  this.sub_menu = htmlElement.getElementsByTagName( 'ul' );
  this.sub_menu = ( this.sub_menu.length == 1 )
    ? this.sub_menu[ 0 ] : null;

  this.active = ( this.trigger.className.toLowerCase() == 'selected' );
  //  Le menu est actif si un de ces enfants à la classe css "selected"
  if ( !isNull( this.sub_menu ) ) {
    var subs = this.sub_menu.getElementsByTagName( 'a' );
    for( var i=0; i<subs.length; i++ )
      if ( subs[ i ].className == 'selected' ) {
        this.active = true;
        break;
      }
  }
  this.shown = this.active;

  this.onTriggerMouseOver = function( e ) {
    DOMEvent.preventDefault( e );
    this.notify( 'mouseOver' );
  }

  this.hide_menu = function() {
    if ( isNull( this.sub_menu ) )
      return ;
    this.sub_menu.style.display = 'none';
    this.shown = false;
  }
  this.show_menu = function() {
    if ( isNull( this.sub_menu ) )
      return ;
    this.sub_menu.style.display = 'block';
    this.shown = true;
    this.notify( 'shown' );
  }

  if ( !isNull( this.sub_menu ) ) {
    if ( !this.active )
      this.hide_menu();
  }

  addListener( this.trigger, 'mouseover', Delegate.create( this, 'onTriggerMouseOver' ) );
}

addListener( window, 'load', function() {
  var _menu = document.getElementById( 'page_left_navigation' );
  if ( isSet( _menu ) ) {
//    MenuManager.setPanel( _menu );
    var triggers = _menu.childNodes;
    for( var i=0; i<triggers.length; i++ ) {
      if ( isSet( triggers[ i ].tagName ) && triggers[ i ].tagName.toLowerCase() == 'li' )
        MenuManager.createItem( triggers[ i ] );
    }
  }
} );