function logAction ( text ) {
  if ( document.getElementById('logBlock') ) {
    document.getElementById('logBlock').innerHTML += text+'<br />';
  } else {
  }
}

/* init main object */
globalCMenu = new GlobalCMenu('globalCMenu');

/* global object
contain all menu */
function GlobalCMenu ( name ) {
    /* const vars */
    this.hiding_default_timeout = 50;
    
    /* vars */
    this.name = name;
    this.menu = new Array();
    this.zIndex = 0;
    this.nav = tool_getClientBrowserType();
}

/* init menus */
GlobalCMenu.prototype.init = function ( ) {
    for ( var i in this.menu ) {
	    this.menu[i].init();
    }
}

/* send and update zIndex */
GlobalCMenu.prototype.getZindex = function ( ) {
    return ++this.zIndex;
}

/* add a menu to global object */
GlobalCMenu.prototype.registerMenu = function ( menu ) {
    this.menu[menu.elmtName] = menu;
    this.menu[menu.elmtName].globalCMenu = this.name;
}

/* select menu */
GlobalCMenu.prototype.select = function ( menu ) {
    if ( this.menu[menu] )
    this.menu[menu].select();
}

/* unselect menu */
GlobalCMenu.prototype.unselect = function ( menu, timeout ) {
    if ( this.menu[menu] )
    this.menu[menu].unselect( timeout );
}

/* menu object */
function CMenu ( elmtName, parentMenu, parentElmtName, location ) {
    /* conf */
    this.elmtName = elmtName;
    this.parentMenu = parentMenu;
    this.parentElmtName = parentElmtName;
    this.location = location;
    this.location_adjustx = 0;
    this.location_adjusty = 0;
    this.globalCMenu = null;
    this.listIndex = null;
    this.autotimeout = 0;
    
    /* vars */
    this.selected = false;
    this.displayed = false;
    this.displayedchild = false;
}

CMenu.prototype.init = function ( ) {
    this.elmt = document.getElementById( this.elmtName );
    this.parentElmt = document.getElementById( this.parentElmtName );
}

CMenu.prototype.updateParent = function ( _parent ) {
    this.parentElmtName = _parent;
    this.parentElmt = document.getElementById( this.parentElmtName ); 
}

/* select menu */
CMenu.prototype.select = function ( ) {
    if ( this.selected == true ) {
	     return;
    }
    this.selected = true;
    // logAction( 'menu '+this.elmtName+' selectionne');
    if ( this.displayed == false ) {
	     this.displayMe();
    }
    if ( this.parentMenu != null ) {
	     eval (this.globalCMenu+'.select("'+ this.parentMenu +'");');
	     this.elmt.style.zIndex = eval(this.globalCMenu).getZindex();
    }
   
}

/* unselect menu */
CMenu.prototype.unselect = function ( timeout ) {
    if ( this.selected == false  ) {
	    return;
    }
    this.selected = false;
    if ( ! ( timeout > 0 ) ) {
	     timeout = eval( ''+this.globalCMenu+'.hiding_default_timeout');
    }
    setTimeout(this.globalCMenu+'.menu["'+this.elmtName+'"].hideMe();', timeout );
    if ( this.parentMenu != null ) {
	     eval( ''+this.globalCMenu+'.menu["'+this.parentMenu+'"].unselect()');
	
	     if (  eval ( this.globalCMenu+'.selectedItem' ) != null ) {
	       eval ( this.globalCMenu+'.selectedItem' ) = null;
	     }
    }
    // logAction( 'menu '+this.elmtName+' deselectionne');
}

/* set menu to given position */
CMenu.prototype.setposition = function ( ) {
    switch ( this.location ) {
      case 'bottom':
	this.setposition_bottom();
	break;
      case 'left':
	this.setposition_left();
	break;
      case 'right':
	this.setposition_right();
	break;
      case 'top':
	this.setposition_top();
	break;
      case 'top':
	this.setposition_over();
	break;
      case 'mouse':
	this.setposition_mouse();
	break;
      case 'none':
      default :
	this.setposition_none();
	break;	
    }
}

/* display menu */
CMenu.prototype.displayMe = function ( ) {

    // disable all element which have the same parent
      for ( var i in eval(this.globalCMenu).menu ) {
	  if ( this.elmtName != eval(this.globalCMenu).menu[i].elmtName && 
	      this.parentMenu == eval(this.globalCMenu).menu[i].parentMenu  ) {
	      eval(this.globalCMenu).menu[i].unselect(0);
	  }
      }
    
    // display menu
      this.displayed = true;
    this.setposition();
    this.elmt.style.zIndex = eval(this.globalCMenu).getZindex();
    this.elmt.style.visibility = 'visible';
    this.elmt.style.overflow = 'visible';
    
    if ( this.autotimeout > 0 ) {
      eval(this.globalCMenu).unselect(this.elmtName,this.autotimeout);
    }
}

/* hide menu */
CMenu.prototype.hideMe = function ( ) {
    if ( this.selected == false ) {
	this.elmt.style.visibility = 'hidden';
	this.elmt.style.overflow = 'hidden';
	this.displayed = false;
	// logAction( 'menu '+this.elmtName+' cache');
    }
}

/* position : none
set menu div to position 0,0 */
CMenu.prototype.setposition_none = function ( ) {
    this.elmt.style.left = this.location_adjustx + 'px';
    this.elmt.style.top = this.location_adjusty + 'px';
}

/* position : bottom
set menu div to position parentElmtName.x , parentElmtName.y + parentElmtName.h */
CMenu.prototype.setposition_bottom = function ( ) {
    this.elmt.style.left = tool_getObjectPositionX ( this.parentElmt ) + this.location_adjustx + 'px';
    this.elmt.style.top  = tool_getObjectPositionY ( this.parentElmt ) + this.parentElmt.offsetHeight + this.location_adjusty + 'px';
}

/* position : right
set menu div to position parentElmtName.x + parentElmtName.w , parentElmtName.y */
CMenu.prototype.setposition_right = function ( ) {
    this.elmt.style.left = tool_getObjectPositionX ( this.parentElmt ) + this.parentElmt.offsetWidth + this.location_adjustx + 'px';
    this.elmt.style.top  = tool_getObjectPositionY ( this.parentElmt ) + this.location_adjusty + 'px';
}

/* position : left
set menu div to position parentElmtName.x - this.w , parentElmtName.y */
CMenu.prototype.setposition_left = function ( ) {
    this.elmt.style.left = tool_getObjectPositionX ( this.parentElmt ) - this.elmt.offsetWidth + this.location_adjustx + 'px';
    this.elmt.style.top  = tool_getObjectPositionY ( this.parentElmt ) + this.location_adjusty + 'px';
}

/* position : top
set menu div to position parentElmtName.x , parentElmtName.y - this.h */
CMenu.prototype.setposition_top = function ( ) {
    this.elmt.style.left = tool_getObjectPositionX ( this.parentElmt ) + this.location_adjustx + 'px';
    this.elmt.style.top  = tool_getObjectPositionY ( this.parentElmt ) - this.elmt.offsetHeight + this.location_adjusty + 'px';
}

/* position : over 
set menu div to position parentElmtName.x , parentElmtName.y */
CMenu.prototype.setposition_over = function ( ) {
    this.elmt.style.left = tool_getObjectPositionX ( this.parentElmt ) + this.location_adjustx + 'px';
    this.elmt.style.top  = tool_getObjectPositionY ( this.parentElmt ) + this.location_adjusty + 'px';
}

/*position : mouse
set menu div to mouse position */
CMenu.prototype.setposition_mouse = function () {
    /* to do */
}

