/* 
AnchorPosition.js
Author: Matt Kruse
Last modified: 10/11/02

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

COMPATABILITY: Netscape 4.x,6.x,Mozilla, IE 5.x,6.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 o=document.getElementById(anchorname);
		x=AnchorPosition_getPageOffsetLeft(o);
		y=AnchorPosition_getPageOffsetTop(o);
		}
 	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;
	}

// 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 getAnchorWindowPosition(anchorname) {
	var coordinates=getAnchorPosition(anchorname);
	var x=0;
	var y=0;
	if (document.getElementById) {
		if (isNaN(window.screenX)) {
			x=coordinates.x-document.body.scrollLeft+window.screenLeft;
			y=coordinates.y-document.body.scrollTop+window.screenTop;
			}
		else {
			x=coordinates.x+window.screenX+(window.outerWidth-window.innerWidth)-window.pageXOffset;
			y=coordinates.y+window.screenY+(window.outerHeight-24-window.innerHeight)-window.pageYOffset;
			}
		}
	else if (document.all) {
		x=coordinates.x-document.body.scrollLeft+window.screenLeft;
		y=coordinates.y-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 center_div(div_object)
{
	var coordinates=new Object();
	var width, height;	
	var frameWidth, frameHeight;
	
	if (self.innerWidth)
	{
		frameWidth = self.innerWidth;
		frameHeight = self.innerHeight;
	}
	else if (document.documentElement && document.documentElement.clientWidth)
	{
		frameWidth = document.documentElement.clientWidth;
		frameHeight = document.documentElement.clientHeight;
	}
	else if (document.body)
	{
		frameWidth = document.body.clientWidth;
		frameHeight = document.body.clientHeight;
	}
	
	var width_array = div_object.style.width.split('px');
	width = width_array[0];
	var height_array = div_object.style.height.split('px');
	height = height_array[0];
			
	coordinates.x = Math.round((frameWidth / 2) - (width / 2));
	coordinates.y = Math.round((frameHeight / 2) - (height / 2));
	
	div_object.style.left = coordinates.x + 'px';
	div_object.style.top = coordinates.y + 'px';
}

function fix_popup_coords(popup_name, mouse_coords)
{
	var coord_array = new Array();
	var winWidth, winHeight, d=document;
	var popup_width, popup_height;
	var popup_x = 0; 
	var popup_y = 0;
	var popup_width_offset = 0;
	var popup_height_offset = 0;
	
	popup_width = document.getElementById(popup_name).style.width;
	popup_width = popup_width.replace(/px/g, '');
	
	popup_width = popup_width - 0;
	//popup_height = document.getElementById(popup_name).style.height;
		
	if (typeof window.innerWidth!='undefined') 
	{
		winWidth = window.innerWidth;
		winHeight = window.innerHeight;
	} 
	else if ( d.documentElement && typeof d.documentElement.clientWidth!='undefined' && d.documentElement.clientWidth!=0 ) 
	{
		winWidth = d.documentElement.clientWidth;
		winHeight = d.documentElement.clientHeight;
	} 
	else if ( d.body && typeof d.body.clientWidth!='undefined') 
	{
		winWidth = d.body.clientWidth;
		winHeight = d.body.clientHeight;
	}
	
	if ((popup_width + mouse_coords[0]) >= winWidth)
	{
		popup_width_offset = winWidth - (popup_width + mouse_coords[0]) - 2;		
	}
	
	popup_x = mouse_coords[0] + popup_width_offset;
	//popup_y = popup_height + mouse_coords[1] + popup_height_offset;	

	coord_array[0] = popup_x;
	coord_array[1] = mouse_coords[1];
	//alert('coords x: ' + coord_array[0] + ', ' + coord_array[1]);
	
	return coord_array;	
}

function display_popup_mouse(popup_name)
{	
	var popup_coords = new Array();
	//var mouse_coords = getMousePos(); // get array of x,y coordinates of current mouse position
	var mouse_coords = new Array();
	mouse_coords[0] = mouse_x;
	mouse_coords[1] = mouse_y;

	//mouse_coords = fix_popup_coords(popup_name);
	document.getElementById(popup_name).style.visibility = 'visible'; // show popup	
	popup_coords = fix_popup_coords(popup_name, mouse_coords);
	//alert('x: ' + popup_coords[0] + ', y: ' + popup_coords[1]);
	document.getElementById(popup_name).style.left = popup_coords[0] + 'px'; // change x coordinate
	document.getElementById(popup_name).style.top = popup_coords[1] + 'px'; // change y coordinate
}

