// from: http://www.quirksmode.org/js/findpos.html
function findPosX(obj)
{
	var curleft = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curleft += obj.offsetLeft
			obj = obj.offsetParent;
		}
	}
	else if (obj.x)
		curleft += obj.x;
	return curleft;
}


// dip2: modifizierte Version, die nur "n" Durchläufe in der Objekthierarchie macht,
// falls Positioniereung innerhalb verschachtelter rel/abs divs nötig ist.
function findPosX_2(obj, n )
{
	var curleft = 0, count=0 ;
	if (obj.offsetParent)
	{
		while (obj.offsetParent && (count < n) )
		{
			count++ ;
			curleft += obj.offsetLeft;
			obj = obj.offsetParent;
		}
	}
	else if (obj.x)
		curleft += obj.x;
	return curleft;
}



function findPosY(obj)
{
	var curtop = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curtop += obj.offsetTop
			obj = obj.offsetParent;
		}
	}
	else if (obj.y)
		curtop += obj.y;
	return curtop;
}


// dip2: modifizierte Version, die nur "n" Durchläufe in der Objekthierarchie macht,
// falls Positioniereung innerhalb verschachtelter rel/abs divs nötig ist.
function findPosY_2(obj, n)
{
	var curtop = 0, count=0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent && (count < n) )
		{
			count++ ;
			curtop += obj.offsetTop
			obj = obj.offsetParent;
		}
	}
	else if (obj.y)
		curtop += obj.y;
	return curtop;
}




function getObj(name)
{
 if (document.getElementById)
 {
	   this.obj = document.getElementById(name);
	   this.style = document.getElementById(name).style;
 }
 else if (document.all)
 {
	   this.obj = document.all[name];
	   this.style = document.all[name].style;
 }
 else if (document.layers)
 {
	   if (document.layers[name])
	   {
	   	this.obj = document.layers[name];
	   	this.style = document.layers[name];
	   }
	   else
	   {
	    this.obj = document.layers.testP.layers[name];
	    this.style = document.layers.testP.layers[name];
	   }
 }
}



// dip2: trigger functions for popup menu show and hide (vertical menu)
function open_popup( obj, root_item ) {
	// die globalen vars hBarHeight und hBarOffset müssen bei der Menügenerierung
	// erzeugt werden.
	// Voraussetzung: die flag-var "menu_loaded" muss gesetzt worden sein
	
	if ( menu_loaded ) {

		ynew = findPosY(obj) - root_item * hBarHeight + hBarHeight + hBarOffset ; 
		moveRoot( null ,ynew);
		pMenu.over('root', root_item );
	}
}



// dip2: trigger functions for popup menu show and hide (horizontal menu)
function open_popup_h( obj, root_item ) {
	// die globalen vars hBarHeight, hBarOffset und hBarOffsetLeft müssen bei der Menügenerierung
	// erzeugt werden.
	// Voraussetzung: die flag-var "menu_loaded" muss gesetzt worden sein
	
	if ( menu_loaded ) {

		xnew = findPosX_2(obj , 99 ) + hBarOffsetLeft; 
		ynew = findPosY_2(obj , 99 ) + hBarOffset  ; 
		moveRoot( xnew , ynew );
		pMenu.over('root', root_item );
		
		// ref_obj = new getObj('head_menu') ;
		// alert( findPosY( ref_obj.obj ) );
		// alert ( page.scrollY() )
		// alert ( "ynew=" + ynew )
		
	}
}



function close_popup( root_item ) {
	pMenu.out('root', root_item )
}




function moveRoot(xnew,ynew)
{
 if ( pMenu.menu.root[0].lyr ) {
	 with (pMenu.menu.root[0].lyr) {
	 	if (xnew != null ) x( xnew );
	 	if (ynew != null ) y( ynew );
	 }
 }
}// end function moveRoot




function getPosition(element)
/* http://www.droeppez.de/download/js-tut/js-tut/tutorial/position.html
	der Aufruf dieser Funktion ermittelt die absoluten Koordinaten
   des Objekts element */
{
  var elem=element,tagname="",x=0,y=0;
  
/* solange elem ein Objekt ist und die Eigenschaft offsetTop enthaelt
   wird diese Schleife fuer das Element und all seine Offset-Eltern ausgefuehrt */
  while ((typeof(elem)=="object")&&(typeof(elem.tagName)!="undefined"))
  {
    y+=elem.offsetTop;     /* Offset des jeweiligen Elements addieren */
    x+=elem.offsetLeft;    /* Offset des jeweiligen Elements addieren */
    tagname=elem.tagName.toUpperCase(); /* tag-Name ermitteln, Grossbuchstaben */

/* wenn beim Body-tag angekommen elem fuer Abbruch auf 0 setzen */
    if (tagname=="BODY")
      elem=0;

/* wenn elem ein Objekt ist und offsetParent enthaelt
   Offset-Elternelement ermitteln */
    if (typeof(elem)=="object")
      if (typeof(elem.offsetParent)=="object")
        elem=elem.offsetParent;
  }

/* Objekt mit x und y zurueckgeben */
  position=new Object();
  position.x=x;
  position.y=y;
  return position;
} // end function getPosition