var ns6 = (document.getElementById)?true:false;
var ie4 = false;
var ie5 = false;
if (document.all)
{
	ie4 = true;
	ie5 = ((navigator.userAgent.indexOf('MSIE 5')>0) || (navigator.userAgent.indexOf('MSIE 6')>0));
	ns6 = false;
}

var offsetx = -200;
var offsety = 8;
var overx = 0;
var overy = 0;
var divtomove = null;
var delayid = null;
var overlapObjects = null;

function WriteOver(div, text)
{
	if (ie4)
	document.all[div].innerHTML = text;
	else if (ns6)
	{
		thediv = document.getElementById(div);
		ns6range = document.createRange();
		ns6range.setStartBefore(thediv);
		ns6fragment = ns6range.createContextualFragment(text);
		while (thediv.hasChildNodes())
		thediv.removeChild(thediv.lastChild);
		thediv.appendChild(ns6fragment);
	}
}

function OpenOver(div, text, event)
{
	WriteOver(div, text);

	if (ie4)
	{
		document.all[div].style.top = -500; // event.y+offsety;
		document.all[div].style.left = -500; // event.x+offsetx;
		document.all[div].visibility = 'visible';
		document.all[div].style.visibility = 'visible';
	}
	else if (ns6)
	{
		item = document.getElementById(div);
		item.style.top=event.pageY+offsety;
		item.style.left=event.pageX+offsetx;
		item.style.visibility='visible';
	}
	divtomove = div;
	delayid = setTimeout("movethedivision()", 1);
}

function CloseOver(div)
{
	if (ie4)
	document.all[div].style.visibility = 'hidden';
	else if (ns6)
	{
		item = document.getElementById(div);
		item.style.visibility='hidden';
	}

	OverShowControl();

	if (delayid != null)
	clearTimeout(delayid)
	delayid = null;
}

function mouseMove(e)
{
	if (ns6)
	{ overx=e.pageX; overy=e.pageY; }
	else if (ie4)
	{
		if (ie5)
		{ overx=event.x+document.body.scrollLeft; overy=event.y+document.body.scrollTop; }
		else
		{ overx=event.x; overy=event.y; }
	}
}

function movethedivision()
{
	div = divtomove;
	if (ie4)
	{
		document.all[div].style.top = overy+offsety;
		document.all[div].style.left = overx+offsetx;
	}
	else if (ns6)
	{
		item = document.getElementById(div);
		item.style.top=overy+offsety;
		item.style.left=overx+offsetx;
	}

	if (!overlapObjects)
	{
		overlapObjects = new Array();

		OverHideControl ("IFRAME", div);
		OverHideControl ("SELECT", div);
		OverHideControl ("OBJECT", div);
	}

	delayid = setTimeout("movethedivision()", 100);
}

document.onmousemove = mouseMove;

function OverHideControl (tagName, div)
{
	var x = document.all[div].offsetLeft;
	var y = document.all[div].offsetTop;
	var w = document.all[div].offsetWidth;
	var h = document.all[div].offsetHeight;

	var i;
	for (i = 0; i < document.all.tags(tagName).length; ++i)
	{
		var obj = document.all.tags(tagName)[i];
		if (!obj || !obj.offsetParent)
		continue;

		if(obj.style.visibility == "hidden")
		continue;

		// check if the object and the div overlap
		var ox = OverGetX (obj);
		var oy = OverGetY (obj);
		var ow = obj.offsetWidth;
		var oh = obj.offsetHeight;

		// 150 pixels of security for X (links)
		if (ox > (x + w + 150) || (ox + ow + 150) < x)
		continue;
		// 20 pixels of security for Y (lines and gifs)
		if (oy > (y + h + 20) || (oy + oh + 20) < y)
		continue;

		overlapObjects[overlapObjects.length] = obj;
		obj.style.visibility = "hidden";
	}
}

function OverShowControl ()
{
	if (overlapObjects)
	{
		var i;
		for (i = 0; i < overlapObjects.length; ++i)
		overlapObjects[i].style.visibility = "";
	}
	overlapObjects = null;
}

function OverGetX(obj)
{
	var x = 0;
	do
	{
		x += obj.offsetLeft;
		obj = obj.offsetParent;
	}
	while (obj);
	return x;
}

function OverGetY(obj)
{
	var y = 0;
	do
	{
		y += obj.offsetTop;
		obj = obj.offsetParent;
	}
	while (obj);
	return y;
}

