var adjust = [ -4, 4 ];  // menu-divs ggf. 2 pixel nach oben verschieben
var to = "";              // timeout-handler
var vlist = new Array();  // current menu

// MenuDivs: Layer aufpoppen lassen
function cmsMenu( level, mdiv, lpix, expire ) {
   var ppos;
   if ( to ) window.clearTimeout(to);      // timeout loeschen

   if ( vlist[level]!=mdiv ) for(var i=level; i<=vlist.length; i++) 
      if ( vlist[i]) vlist[i] = cms_setDiv(vlist[i]);

   if ( mdiv ) {
      if ( lpix ) ppos = cms_getImagePos( lpix ); // position ermitteln
      else        ppos = [ 0, 0];  // sonst array generiren
      vlist[level] = cms_setDiv(mdiv,1,ppos[0],ppos[1]);
   }
   if ( expire ) 
       to=window.setTimeout("cmsMenu(0)",1);
   return(false);
}

// MenuDivs: Layer positioniern und ein- oder ausschalten
function cms_setDiv( name, show, xpos, ypos ) {
   var el_ = null, vis = null;
   if ( !name ) return("");
   if ( document.getElementById ) {
      el_ = document.getElementById(name);
      if ( el_ ) el_ = el_.style;
      vis = ( show ? "visible" : "hidden" );
   } else if ( document.all ) {
      el_ = document.all[name];
      vis = ( show ? "visible" : "hidden" );
   } else if ( document.layers ) {
      el_ = document.layers[name];
      vis = ( show ? "SHOW"    : "HIDE"   );
   }
   if ( !el_ ) return(false);
   if ( xpos || ypos ) {
       if ( adjust.length ) { xpos += adjust[0]; ypos += adjust[1]; }
       el_.top=ypos; el_.left=xpos;
   }
   el_.visibility = vis;
   return( show ? name : "" ); // rückgabewert
}


// MenuDivs: x/y Position des Positions-Pixels ermitteln
function cms_getImagePos( pimg ) {
   var xpos = ypos = 0;
   var el_ = document[pimg];

   if ( document.getElementById ) { // if ( IE4 )
      if ( !el_ ) return( [0,0] );
         xpos = el_.offsetLeft + el_.offsetWidth;
         ypos = el_.offsetTop;
         while( (el_ = el_.offsetParent) != null ) {
             xpos += el_.offsetLeft;
             ypos += el_.offsetTop;
         }
   } else if ( document.layers ) {
      for( var i=0; !el_ && i<document.layers.length; i++)
          if ( (el_=document.layers[i].document[pimg]) ) {
             xpos = document.layers[i].x + 2;
             ypos = document.layers[i].y;
          }
      xpos += el_.x;
      ypos += el_.y;
   } else if ( document.all ) {
      if ( !el_ ) return( [0,0] );
      xpos = el_.offsetLeft + el_.offsetWidth;
      ypos = el_.offsetTop;
   } else window.alert("Huh! What browser are you using ?");
   // Werte in Array zurückliefern
   return ([xpos,ypos]);
}

// MenuDivs: Layer aufpoppen lassen
function regMenu( level, mdiv, lpix, expire, pos, ofsx, ofsy ) {
    if ( to ) window.clearTimeout(to);      // timeout loeschen
    if ( !pos ) pos = "tr";
    if ( !ofsx ) ofsx = 0;
    if ( !ofsy ) ofsy = 0;

    if ( vlist[level]!=mdiv ) for(var i=level; i<=vlist.length; i++)
    if ( vlist[i]) vlist[i] = reg_setDiv(vlist[i]);

    if ( mdiv ) {
        if ( lpix ) var ppos = reg_getImagePos( lpix, pos, ofsx, ofsy ); // position ermitteln
        else        var ppos = [ 0, 0];  // sonst array generiren
        vlist[level] = reg_setDiv(mdiv,1,ppos[0],ppos[1]);
    }
    if ( expire )
    to=window.setTimeout("regMenu(0)",1);
    return(false);
}

// MenuDivs: Layer positioniern und ein- oder ausschalten
function reg_setDiv( name, show, xpos, ypos ) {
    if ( !name ) return("");
    var el_ = document.getElementById(name);
    if ( el_ ) el_ = el_.style;
    var vis = ( show ? "visible" : "hidden" );
    if ( !el_ ) return("");
    if ( xpos || ypos ) {
        if ( adjust.length ) { xpos += adjust[0]; ypos += adjust[1]; }
        el_.top=ypos; el_.left=xpos;
    }
    el_.visibility = vis;
		/*if ( show ) {
			 currentOpac(name, 99, 300);
		} else {
			 currentOpac(name, 0, 300);
		}*/
    return( show ? name : "" ); // rückgabewert
}


// MenuDivs: x/y Position des Positions-Pixels ermitteln
function reg_getImagePos( el, pos, ofsx, ofsy ) {
    var el = document.getElementById(el);
    var xpos = ypos = 0;
    var o_el = el;

    if ( document.getElementById ) {
        if ( !el ) return( [0,0] );
        xpos = el.offsetLeft;
        ypos = el.offsetTop;
        while( (el = el.offsetParent) != null ) {
            xpos += el.offsetLeft;
            ypos += el.offsetTop;
        }
    } else {
        return( [0,0] );
    }

    switch(pos) {
        case "tl":
        xpos = xpos;
        break;
        case "tr":
        default:
        xpos = xpos+o_el.offsetWidth;
        break;
        case "br":
        xpos = xpos+o_el.offsetWidth;
        ypos = ypos+o_el.offsetHeight;
        break;
        case "bl":
        ypos = ypos+o_el.offsetHeight;
        break;
    }
    xpos = xpos+ofsx;
    ypos = ypos+ofsy;

    return ([xpos,ypos]);
}