var timeout	= 500;
var closetimer	= 0;
var menuitem	= 0;
var rootmenu	= 0;

function getAbsPosition(node) {
  var pos = new Object();
  pos.x = pos.y = 0;
  var parentNode = node;
  while (parentNode) {
    pos.x += parentNode.offsetLeft;
    pos.y += parentNode.offsetTop;
    parentNode = parentNode.offsetParent;
  }
  return pos;
}

function openmenu(obj){
  mcancelclosetime();

  while( menuitem!=null && obj.parentNode.parentNode!=menuitem ){
    if( menuitem.nodeName == 'UL' && menuitem.getAttribute('root')!='yes' ){
      menuitem.style.visibility = 'hidden';
    }
    menuitem = menuitem.parentNode;
  }

  if (rootmenu) rootmenu.className = 'out';
  rootmenu = obj;
  rootmenu.className = 'over';

  if( obj.parentNode.getElementsByTagName("ul")[0] ){    // if has a submenu...
    menuitem = obj.parentNode.getElementsByTagName("ul")[0];

    pos = getAbsPosition(obj);
    menuitem.style.top = parseInt(pos.y+obj.offsetHeight+1)+"px";
    menuitem.style.left = parseInt(pos.x+1)+"px";
    menuitem.style.visibility = 'visible';
  }
}

function opensubmenu(obj){
  mcancelclosetime();

  while( menuitem!=null && obj.parentNode.parentNode!=menuitem ){
    if( menuitem.nodeName == 'UL' && menuitem.getAttribute('root')!='yes' ){
      menuitem.style.visibility = 'hidden';
    }
    menuitem = menuitem.parentNode;
  }

  if( obj.parentNode.getElementsByTagName("ul")[0] ){    // if has a submenu...
    menuitem = obj.parentNode.getElementsByTagName("ul")[0];

    pos = getAbsPosition(obj);
    menuitem.style.top = parseInt(obj.offsetTop)+"px";
    menuitem.style.left = parseInt(obj.offsetWidth-4)+"px";
    menuitem.style.visibility = 'visible';
  }
}

function closemenu(){
  while( menuitem!=null ){
    if( menuitem.nodeName == 'UL' && menuitem.getAttribute('root')!='yes' ){
      menuitem.style.visibility = 'hidden';
    }
    menuitem = menuitem.parentNode;
  }
  if (rootmenu) rootmenu.className = 'out';
  menuitem = 0;
  rootmenu = 0;
}

// go close timer
function mclosetime(){
  closetimer = window.setTimeout(closemenu, timeout);
}

// cancel close timer
function mcancelclosetime(){
  if(closetimer){
    window.clearTimeout(closetimer);
	closetimer = null;
  }
}

function iniMenu(menu){
  if( document.getElementById(menu)){
    var root = document.getElementById(menu);
    var links = root.getElementsByTagName("a");
    for (var i = 0; i < links.length; i++) {
      if( links[i].parentNode.parentNode.parentNode.parentNode.getAttribute('root')=='yes' ){
        links[i].onmouseover = function(){ openmenu(this) };
      }else{
        links[i].onmouseover = function(){ opensubmenu(this) };
      }
      links[i].onmouseout = mclosetime;
    }
  }
}

// close layer when click-out
document.onclick = closemenu;
