// ===================================================================
// Author: Matt Kruse <matt@mattkruse.com>
// WWW: http://www.mattkruse.com/
//
// NOTICE: You may use this code for any purpose, commercial or
// private, without any further permission from the author. You may
// remove this notice from your final code if you wish, however it is
// appreciated by the author if at least my web site address is kept.
//
// You may *NOT* re-distribute this code in any way except through its
// use. That means, you can include it in your product, or your web
// site, or any other form where the code is actually being used. You
// may not put the plain javascript up on your site for download or
// include it in your javascript libraries for download. Instead,
// please just point to my URL to ensure the most up-to-date versions
// of the files. Thanks.
// ===================================================================


/* 
AnchorPosition.js
Author: Matt Kruse
Last modified: 2/18/02

DESCRIPTION: These functions find the position of an <A> tag in a document,
so other elements can be positioned relative to it.

COMPATABILITY: Works with Netscape 4.x, 6.x, IE 5.x on Windows. Some small
positioning errors - usually with Window positioning - occur on the 
Macintosh platform.

FUNCTIONS:
getAnchorPosition(anchorname)
  Returns an Object() having .x and .y properties of the pixel coordinates
  of the upper-left corner of the anchor. Position is relative to the PAGE.

getAnchorWindowPosition(anchorname)
  Returns an Object() having .x and .y properties of the pixel coordinates
  of the upper-left corner of the anchor, relative to the WHOLE SCREEN.

NOTES:

1) For popping up separate browser windows, use getAnchorWindowPosition. 
   Otherwise, use getAnchorPosition

2) Your anchor tag MUST contain both NAME and ID attributes which are the 
   same. For example:
   <A NAME="test" ID="test"> </A>

3) There must be at least a space between <A> </A> for IE5.5 to see the 
   anchor tag correctly. Do not do <A></A> with no space.
*/ 

// getAnchorPosition(anchorname)
//   This function returns an object having .x and .y properties which are the coordinates
//   of the named anchor, relative to the page.

function getAnchorPosition(anchorname) {
	// This function will return an Object with x and y properties
	var useWindow=false;
	var coordinates=new Object();
	var x=0,y=0;

	// Browser capability sniffing
	var use_gebi=false, use_css=false, use_layers=false;
	
	if (document.getElementById) { 
		use_gebi=true; 
	} else if (document.all) { 
		use_css=true; 
	} else if (document.layers) { 
		use_layers=true; 
	}
	
	// Logic to find position
 	if (use_gebi && document.all) {

		x = AnchorPosition_getPageOffsetLeft(document.all[anchorname]);
		y = AnchorPosition_getPageOffsetTop(document.all[anchorname]);
		
	} else if (use_gebi) {
		var obj = document.getElementById(anchorname);
	} else if (use_css) {

		x=AnchorPosition_getPageOffsetLeft(document.all[anchorname]);
		y=AnchorPosition_getPageOffsetTop(document.all[anchorname]);
		
	} else if (use_layers) {
		var found=0;

		for (var i=0; i<document.anchors.length; i++) {
			
			if (document.anchors[i].name==anchorname) { 
				found=1; break; 
			}
			
		}
		
		if (found==0) {
			coordinates.x=0; coordinates.y=0; return coordinates;
		}
		
		x = document.anchors[i].x;
		y = document.anchors[i].y;
		
	} else {
		coordinates.x=0; coordinates.y=0; return coordinates;
	}
	
	coordinates.x=x;
	coordinates.y=y;
	return coordinates;
}
var docobj;

function getAnchorPosition_neu(anchorname) {
	// This function will return an Object with x and y properties
	var useWindow=false;
	var coordinates=new Object();
	var x=0,y=0;
	// Browser capability sniffing
	var use_gebi=false, use_css=false, use_layers=false;
	if (document.getElementById) { use_gebi=true; }
	else if (document.all) { use_css=true; }
	else if (document.layers) { use_layers=true; }

	if (docobj+'' == 'undefined') {
		if(parent.frSubMenu){
		  docobj = parent.frSubMenu;
		}
		else if(parent.haupt){
                  docobj = parent.haupt
		}
		else if(parent.detail){
                  docobj = parent.detail
		}
	}

	// Logic to find position
 	if (use_gebi && document.all) { 
 	   // if 	(docobj.document){	
		x=AnchorPosition_getPageOffsetLeft_neu(docobj.document.all[anchorname]);
		y=AnchorPosition_getPageOffsetTop_neu(docobj.document.all[anchorname]);
	//	}
		}
	else if (use_gebi) {
		var o=docobj.document.getElementById(anchorname);
		x=o.offsetLeft-179; y=o.offsetTop;
		}
 	else if (use_css) {
		x=AnchorPosition_getPageOffsetLeft_neu(docobj.document.all[anchorname]);
		y=AnchorPosition_getPageOffsetTop_neu(docobj.document.all[anchorname]);
		}
	else if (use_layers) {
		var found=0;
		for (var i=0; i<document.anchors.length; i++) {
			if (docobj.document.anchors[i].name==anchorname) { found=1; break; }
			}
		if (found==0) {
			coordinates.x=0; coordinates.y=0; return coordinates;
			}
		x=docobj.document.anchors[i].x;
		y=docobj.document.anchors[i].y;
		}
	else {
		coordinates.x=0; coordinates.y=0; return coordinates;
	}
		
	coordinates.x=x;
	coordinates.y=y;
	return coordinates;
	}

// getAnchorWindowPosition(anchorname)
//   This function returns an object having .x and .y properties which are the coordinates
//   of the named anchor, relative to the window

function getRealLeft() {
    xPos = this.offsetLeft;
    tempEl = this.offsetParent;
    while (tempEl != null) {
        xPos += tempEl.offsetLeft;
        tempEl = tempEl.offsetParent;
    }
    return xPos;
}

function getAnchorWindowPosition(anchorname) {
	var coordinates = getAnchorPosition(anchorname);
	
	var x=0;
	var y=0;
	
	if (document.getElementById) {
		if (isNaN(window.screenX)) {
			//alert("s1");
			x=coordinates.x-document.body.scrollLeft+window.screenLeft;
			y=coordinates.y-document.body.scrollTop+window.screenTop;
			
			//alert("test2:" + parent.frContent.window.outerHeight);
			//alert("mac" + this.bild.offsetLeft);
			}
		else {
			//alert("s2");
			x=coordinates.x+window.screenX+(window.outerWidth-window.innerWidth)-window.pageXOffset;
			y=coordinates.y+parent.frContent.window.screenY+(parent.frContent.window.outerHeight-24-parent.frContent.window.innerHeight)-parent.frContent.window.pageYOffset;
			}
		}
	else if (document.all) {
		//alert("s3");
		x=coordinates.x-document.body.scrollLeft+window.screenLeft;
		y=coordinates.y-document.body.scrollTop+window.screenTop;
		}
	else if (document.layers) {
		//alert("s4");
		x=coordinates.x+window.screenX+(window.outerWidth-window.innerWidth)-window.pageXOffset;
		y=coordinates.y+window.screenY+(window.outerHeight-24-window.innerHeight)-window.pageYOffset;
	}
	
	
	coordinates.x=x;
	coordinates.y=y;
	return coordinates;
}

function getAnchorWindowPosition_neu(anchorname) {
	var coordinates=getAnchorPosition_neu(anchorname);
	//alert(coordinates.x + ", " + coordinates.y);
	var x=0;
	var y=0;
	if (document.getElementById) {
		if (isNaN(window.screenX)) {
			x=coordinates.x-docobj.document.body.scrollLeft+window.screenLeft;
			y=coordinates.y-docobj.document.body.scrollTop+window.screenTop;
			}
		else {
			x=coordinates.x+window.screenX+(window.outerWidth-window.innerWidth)-window.pageXOffset;
			y=coordinates.y+parent.window.screenY+(docobj.window.outerHeight-24-docobj.window.innerHeight)-docobj.window.pageYOffset;
			//alert(x + ", " + y);
			}
		}
	else if (document.all) {
		x=coordinates.x-docobj.document.body.scrollLeft+window.screenLeft;
		y=coordinates.y-docobj.document.body.scrollTop+window.screenTop;
		}
	else if (document.layers) {
		x=coordinates.x+window.screenX+(window.outerWidth-window.innerWidth)-window.pageXOffset;
		y=coordinates.y+window.screenY+(window.outerHeight-24-window.innerHeight)-window.pageYOffset;
	}
	coordinates.x=x;
	coordinates.y=y;
	return coordinates;
}

// Functions for IE to get position of an object
function AnchorPosition_getPageOffsetLeft (el) {
	var ol=el.offsetLeft;
	while ((el=el.offsetParent) != null) { ol += el.offsetLeft; }
	return ol;
	}
function AnchorPosition_getWindowOffsetLeft (el) {
	return AnchorPosition_getPageOffsetLeft(el)-document.body.scrollLeft;
	}	
function AnchorPosition_getPageOffsetTop (el) {
	var ot=el.offsetTop;
	while((el=el.offsetParent) != null) { ot += el.offsetTop; }
	return ot;
	}
function AnchorPosition_getWindowOffsetTop (el) {
	return AnchorPosition_getPageOffsetTop(el)-document.body.scrollTop;
	}


function AnchorPosition_getPageOffsetLeft_neu (el) {
	var ol=el.offsetLeft;
	while ((el=el.offsetParent) != null) { ol += el.offsetLeft; }
	return ol-173;
	}
function AnchorPosition_getWindowOffsetLeft_neu (el) {
	return AnchorPosition_getPageOffsetLeft(el)-docobj.document.body.scrollLeft;
	}	
function AnchorPosition_getPageOffsetTop_neu (el) {
	var ot=el.offsetTop;
	while((el=el.offsetParent) != null) { ot += el.offsetTop; }
	return ot;
	}
function AnchorPosition_getWindowOffsetTop_neu (el) {
	return AnchorPosition_getPageOffsetTop(el)-docobj.document.body.scrollTop;
	}