var Tooltip = function()
{
	var currentTooltip = null;

	var show = function(source, elementId, hovering)
	{
		if(currentTooltip != null)
			hide(currentTooltip);
			
		currentTooltip = elementId;
		
		var element = document.getElementById(elementId);
		element.style.display = "block";
		
		setPosition(source, element);
		
		if(!hovering)
		{
			element.onclick = element.onblur = function()
			{
				element.style.display = "none";
			};
			
			element.tabIndex = -1;
			element.focus();
		}
	};
	
	var hide = function(elementId)
	{							
		var element = document.getElementById(elementId);
		element.style.display = "none";
		
		currentTooltip = null;
	};
	
	var setPosition = function(source, overlay)
	{
		var position = { left: 0, top: source.offsetHeight + 4 };
		var element = source;
		
		while(element != null)
		{
			position.left += element.offsetLeft;
			position.top += element.offsetTop;
			element = element.offsetParent;
		}
		
		if(overlay.offsetWidth > source.offsetWidth)
			position.left -= (overlay.offsetWidth - source.offsetWidth) / 3;
		
		// Ensure that the tooltip overlay isn't positioned too far left or right.
		
		if(position.left < 10)
			position.left = 10;
		else if(position.left + overlay.offsetWidth > document.body.clientWidth - 10)
			position.left = document.body.clientWidth - overlay.offsetWidth - 10;
		
		document.body.appendChild(overlay);
		
		overlay.style.top = position.top + "px";
		overlay.style.left = position.left + "px";
	};

	return {
		show : show,
		hide : hide
	};
}();