function GetCurrentStyle(el, val)
{
  if(el.currentStyle)
    return el.currentStyle[val];
  return document.defaultView.getComputedStyle(el, '')[val];
}
/*
function findPosX(obj)
{
  var curleft = 0;
  while(obj.offsetParent && GetCurrentStyle(obj, 'position')!="absolute")
  {
    curleft+=obj.offsetLeft
    obj=obj.offsetParent;
  }
  return curleft;
}

function findPosY(obj)
{
  var curtop = 0;
  while (obj.offsetParent) // && GetCurrentStyle(obj, 'position')!="absolute"
  {
    curtop+=obj.offsetTop
    obj=obj.offsetParent;
  }
  return curtop;
}
*/
function findPosX(obj){
  var curleft = 0;
  if (obj.offsetParent){
    while (obj.offsetParent){
      curleft += obj.offsetLeft
      obj = obj.offsetParent;
    }
  }
  return curleft;
}

function findPosY(obj){
  var curtop = 0;
  if (obj.offsetParent){
    while (obj.offsetParent){
      curtop += obj.offsetTop
      obj = obj.offsetParent;
    }
  }
  return curtop;
}


var HideQueue=[];
function HideProc()
{
  var n=HideQueue.shift();
  if(!n)
    return false;
  window.clearTimeout(n.timeout);
  n=n.node.smenu;
  if(n.x_visible==0)
    n.style.display="none";
  return true;
}

var ShowQueue=[];
function ShowProc()
{
  var n=ShowQueue.shift();
  window.clearTimeout(n.timeout);
  var par=n.node;
  var node=par.smenu;
  if(!node)
    return false;

  if(node.x_visible==1)
  {
    if(node.style.display=='' || node.style.display=='none')
      while(HideProc());
    node.style.display="block";
    if(par.className=="rmenu"  || par.className=="lmenu")
    {
      var yoffs=(findPosY(par)-par.offsetTop)-(findPosY(node)-node.offsetTop);
      if(par.className=="rmenu")
        node.style.left=(findPosX(par)+par.offsetWidth-1)+"px";
      else
        node.style.left=(findPosX(par)-node.offsetWidth+1)+"px";
      node.style.top=(par.offsetTop+yoffs)+"px";
    }
    else
    {
      node.style.left=findPosX(par)+"px";
      node.style.top=(findPosY(par)+par.offsetHeight)+"px";
    }
while(HideProc());
  }
  return true;
}

function RemoveClass(e, c)
{
  var re=new RegExp(c+' *');
  e.className=e.className.replace(re, "");
}
function AddClass(e, c)
{
  e.className+=" "+c;
}
function TestClass(e, c)
{
  var re=new RegExp('\\b'+c+'\\b');
  return (e && e.className && e.className.match(re));
}

AttachEvent(window, 'load', function()
{
  var all=document.getElementsByTagName("body")[0].getElementsByTagName("*");
  for(var i=0; i<all.length; ++i)
  {
    var it=all[i];
    if(TestClass(it, "menu"))
    {
      it.onclick=function(e)
      {
        if(!e)
          e=window.event;

        var src=e.srcElement ? e.srcElement : e.target;
        while(src && src!=this)
        {
          if(TestClass(src, "men") || src.tagName=='A')
            return true;
          src=src.parentNode;
        }

        var mei;
        for(var i=0; i<this.childNodes.length; ++i)
        {
          var it=this.childNodes[i];
          if(TestClass(it, "mei"))
            mei=it;
          if(TestClass(it, "men"))
            if(it.style.display=='' || it.style.display=='none')
            {
              it.style.display="block";
              AddClass(mei, "mopen");
            }
            else
            {
              it.style.display="none";
              RemoveClass(mei, "mopen");
            }
        }
        e.cancelBubble=true;
        return false;
      }
    }
    if(TestClass(it, "mei"))
    {
      it.onmouseover=function(e)
      {
        AddClass(this, "mhover");
      }
      it.onmouseout=function(e)
      {
        RemoveClass(this, "mhover");
      }
    }




    if(TestClass(it, "(rmenu|lmenu|dmenu)"))
    {
      var zz=it.childNodes;
      for(j=0;j<zz.length;++j)
      {
        var node=zz[j];
        if(TestClass(node, "men"))
        {
          node.sm=it;
          it.smenu=node;
          it.removeChild(node);
          document.body.appendChild(node);
//          node.style.position='absolute';
//          node.style.top=0;
//          node.style.display='block';
          break;
        }
      }
      it.onmouseover=function()
      {
        var node=this.smenu;
        node.x_visible=1;
        ShowQueue.push({'node': this, 'timeout': window.setTimeout(ShowProc, 1)});
      }
      node.onmouseover=function()
      {
        var n=this.sm;
        this.x_visible=1;
        ShowQueue.push({'node': n, 'timeout': window.setTimeout(ShowProc, 1)});
      }
      it.onmouseout=function()
      {
        var node=this.smenu;
        node.x_visible=0;
        HideQueue.push({'node': this, 'timeout': window.setTimeout(HideProc, 1)});
      }
      node.onmouseout=function()
      {
        var n=this.sm;
        this.x_visible=0;
        HideQueue.push({'node': n, 'timeout': window.setTimeout(HideProc, 1)});
      }
    }
  }

  var curel=document.getElementById('curel');
  for(var ns=curel; ns; ns=ns.nextSibling)
  {
    if(TestClass(ns, "men"))
    {
      ns.style.display="block";
      AddClass(curel, 'mopen');
      break;
    }
  }

  while(curel)
  {
    if(TestClass(curel, "men") && TestClass(curel.parentNode, "menu"))
    {
      curel.style.display="block";
      for(var n=curel.previousSibling; n; n=n.previousSibling)
        if(TestClass(n, "mei"))
          AddClass(n, 'mopen');
    }
    curel=curel.parentNode;
  }

});

AttachEvent(document, 'click', function()
{
  while(HideProc());
});

