
//----------------------------------------------------------------------------------------------------
// Find the X position of an HTML element
function findPosX(obj)
{
	var X = 0;

	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			X += obj.offsetLeft
			obj = obj.offsetParent;
		}
	}
	else if (obj.x)
		X += obj.x;

	return X;
}

//----------------------------------------------------------------------------------------------------
// Find the Y position of an HTML element
function findPosY(obj)
{
	var Y = 0;

	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			Y += obj.offsetTop
			obj = obj.offsetParent;
		}
	}
	else if (obj.y)
		Y += obj.y;

	return Y;
}

//----------------------------------------------------------------------------------------------------
// Finds an HTML element object by its name
function FindObject(strObj, oParentNode)
{
	var p,i,x;

	if (!oParentNode)         // If no parent node...
		oParentNode = document; // Start at the document root

	if ((p = strObj.indexOf("?")) > 0 && parent.frames.length) // If there's a frame set...
	{
		// Objets in a frame set can be specivied by setting strObj = [object name]?[layer index]
		oParentNode = parent.frames[strObj.substring(p + 1)].document;
		strObj = strObj.substring(0, p);
	}

	if (!(x = oParentNode[strObj]) && oParentNode.all) // If the "all" method is available...
		x = oParentNode.all[strObj];

	for (i = 0; !x && i < oParentNode.forms.length; i++) // For each form...
		x = oParentNode.forms[i][strObj];                  // Search the form for the object

	for (i = 0; !x && oParentNode.layers && i < oParentNode.layers.length; i++) // For each layer...
		x = FindObject(strObj, oParentNode.layers[i].document);                   // Recurse through the layer

	if (!x && oParentNode.getElementById)     // If we still haven't found the object...
		x = oParentNode.getElementById(strObj); // Try using getElementById

	return x; // Return the object
}


//----------------------------------------------------------------------------------------------------
// Shows a named layer
function ShowLayer(Layer, Anchor)
{
	oLayer  = (typeof(Layer)  == 'string') ? FindObject(Layer)  : Layer;
	oAnchor = (typeof(Anchor) == 'string') ? FindObject(Anchor) : Anchor;
	oStyle  = oLayer;
	strHide = 'hide';
	strShow = 'show';

	if (oLayer.style)
	{
		oStyle  = oLayer.style;
		strHide = 'hidden';
		strShow = 'visible';
	}

	if (oAnchor)
	{
		oStyle.visibility = strHide;
		oStyle.left       = findPosX(oAnchor) - oLayer.offsetWidth + oAnchor.offsetWidth;
		oStyle.top        = findPosY(oAnchor) - oLayer.offsetHeight - 4;
	}

	oStyle.visibility = strShow;
	return true;
}

//----------------------------------------------------------------------------------------------------
// Hides a named layer
function HideLayer(Layer)
{
	oLayer  = (typeof(Layer) == 'string') ? FindObject(Layer) : Layer;
	oStyle  = oLayer;
	strHide = 'hide';

	if (oLayer.style)
	{
		oStyle  = oLayer.style;
		strHide = 'hidden';
	}

	oStyle.visibility = strHide;
	return true;
}

//----------------------------------------------------------------------------------------------------
// Extended Tooltip Javascript
// copyright 9th August 2002, 3rd July 2005
// by Stephen Chapman, Felgall Pty Ltd

// permission is granted to use this javascript provided that the below code is not altered
var DH = 0;var an = 0;var al = 0;var ai = 0;if (document.getElementById) {ai = 1; DH = 1;}else {if (document.all) {al = 1; DH = 1;} else { browserVersion = parseInt(navigator.appVersion); if ((navigator.appName.indexOf('Netscape') != -1) && (browserVersion == 4)) {an = 1; DH = 1;}}} function fd(oi, wS) {if (ai) return wS ? document.getElementById(oi).style:document.getElementById(oi); if (al) return wS ? document.all[oi].style: document.all[oi]; if (an) return document.layers[oi];}
function pw() {return window.innerWidth != null? window.innerWidth: document.body.clientWidth != null? document.body.clientWidth:null;}
function mouseX(evt) {if (evt.pageX) return evt.pageX; else if (evt.clientX)return evt.clientX + (document.documentElement.scrollLeft ?  document.documentElement.scrollLeft : document.body.scrollLeft); else return null;}
function mouseY(evt) {if (evt.pageY) return evt.pageY; else if (evt.clientY)return evt.clientY + (document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop); else return null;}
function popUp(evt,oi) {if (DH) {var wp = pw(); ds = fd(oi,1); dm = fd(oi,0); st = ds.visibility; if (dm.offsetWidth) ew = dm.offsetWidth; else if (dm.clip.width) ew = dm.clip.width; if (st == "visible" || st == "show") { ds.visibility = "hidden"; } else {tv = mouseY(evt) + 20; lv = mouseX(evt) - (ew/4); if (lv < 2) lv = 2; else if (lv + ew > wp) lv -= ew/2; if (!an) {lv += 'px';tv += 'px';} ds.left = lv; ds.top = tv; ds.visibility = "visible";}}}
