// constants
menuElementIdPrefix = "submenu_";
horizontalShift = 0;
verticalShift = 22;
showTimeout = 800;
hideTimeout = 500;

// array of menu
var menus = new Array();

// menu constructor
function newMenu(name,parent) {
	this.name = name;
	if(parent != null) {
      this.parent = getMenuByName(parent);
    }
	this.timer = null;
    //x = document.getElementById(menuElementIdPrefix + name);
    /*if(x != null) {
    	a
      x.onMouseOut = "alert('a');";
      alert(x.onMouseOut);
    }*/
}

// show menu
function showMenu(name,element) {
	var x = getMenuByName(name);
	if(x == null) {
	 	x = new newMenu(name,null);
		menus[menus.length]=x;
	}
	if(x != null) {
    	// clear timeout
    	if(x.timer != null) {
		    clearTimeout(x.timer);
		    x.timer = null;
	    }
	    // call parent
	    if(x.parent != null) {
		    showMenu(x.parent.name,null);
	    }
	    // position of element
	    if(element != null) {
	    	posx = posX(element);
    		posy = posY(element);
	    }
	    else {
	    	posx = null;
	    	posy = null;
	    }
	    // set timer
	    x.timer = setTimeout("showMenuTimeout('" + name + "'," + posx + "," + posy + ")",showTimeout);
	}
}

// hide menu
function hideMenu(name) {
	var x = getMenuByName(name);
	if(x != null) {
	    // clear timeout
	    if(x.timer != null) {
	    	clearTimeout(x.timer);
    		x.timer = null;
		}
	    // call parent
    	if(x.parent != null) {
        	hideMenu(x.parent.name);
	    }
	    // set timer
    	x.timer = setTimeout("hideMenuTimeout('" + name + "')",hideTimeout);
	}
}

// show menu - after timeout
function showMenuTimeout(name,posx,posy) {
	var x = document.getElementById(menuElementIdPrefix + name);
	if(x != null) {
	  	if(posx != null) {
  			posx += horizontalShift;
  			x.style.left = posx + 'px';
	  	}
  		if(posy != null) {
	    	posy += verticalShift;
	  		x.style.top = posy + 'px';
	  	}
	    x.style.display = "block";
	}
}

// hide menu - after timeout
function hideMenuTimeout(name) {
	var x = document.getElementById(menuElementIdPrefix + name);
	if(x != null) {
    	x.style.display = "none";
  	}
}

// get menu according its name
function getMenuByName(name) {
  var i = 0;
  var result = null;
  while((i < menus.length) && (result == null)) {
    if(menus[i].name == name) result = menus[i];
    i++;
  }
  return(result);
}

