/***************************************
 *            reftools.js              *
 ***************************************
 * Misc tools for tooltip references   *
 ***************************************
 * History														 *
 *  29/12/2004: v1.52: Changed event   *
 *     handling for Firefox            *
 *     compatibility.                  *
 *  08/01/2004: v1.51									 *
 ***************************************
 * January 24, 2005 - Shvat 14, 5765   *
 *  v1.6                               *
 *																		 *
 * Changed: reference management made  *
 * server-side, but for the tooltips.  *
 ***************************************
 * (c) Gabriel Zerbib,                 *
 *   gabriel@bumpt.net                 *
 *   http://www.bumpt.net              *
 *                                     *
 * It is strictly forbidden to use or  *
 * reproduce all or parts of this      *
 * program without author's explicit   *
 * permission.                         *
 * Commercial use of this program is   *
 * subject to purchase. Please contact *
 * the author.                         *
 ***************************************/

if(typeof(Ref) == "undefined")
	Ref = function (name, source, text)
{
	this.name = name;
	this.source = source;
	this.text = text;
}

if(typeof(oLastShownReference) == "undefined")
	var oLastShownReference = null;


function showReference(linkId, linkNode)
{
	var link;
	if("undefined" == typeof(linkNode)) {
		link = document.getElementById("reference_" + linkId);		
	} else {
		link = linkNode;
	}
	var name = linkId;

	var reference = references[name];
	if(! reference) return false;
	var div = document.getElementById("divReference_" + reference.name);

	if(! div)
	{
		div = document.createElement("DIV");
		div.style.visibility = "hidden";
		div.id = "divReference_" + reference.name;
		div.onmouseout = hideReference;
		div.className = "TooltipReference";
		if(reference.source)
		{
			div.innerHTML = '<B>' + reference.source + '</B>';
			if(reference.text)
				div.innerHTML += ' :<BR>';
		}
		if(reference.text) div.innerHTML += reference.text;
		document.body.appendChild(div);
	}

	var o = link;
	var offx = 0, offy = 0;
	while(o)
	{
		offx += parseInt(o.offsetLeft);
		offy += parseInt(o.offsetTop);
		o = o.offsetParent;
	}


	if( (offx + div.offsetWidth) >= document.body.clientWidth)
		offx = document.body.clientWidth - div.offsetWidth - 10;
	div.style.left = offx;


	div.style.top = offy + link.offsetHeight;
	div.style.visibility = "visible";

	if( oLastShownReference && oLastShownReference != div)
		oLastShownReference.style.visibility = "hidden";
	oLastShownReference = div;

	return true;
}

function hideReference(evt)
{
	evt = new Event(evt);

	if(! evt.src) return;
	if(evt.src.tagName != "DIV") return;

	if(evt.tgt != evt.src)
		if(evt.tgt.parentNode != evt.src)
			if(evt.tgt.parentNode.parentNode != evt.src)
				evt.src.style.visibility = "hidden";
}


if(typeof(references) == "undefined")
{
	references = [];

	references.add = function (name, source, text)
	{
		return (references[name] = new Ref(name, source, text) );
	}
}

