/**
 * @author Iris Associates Ltd.
 * @version 1.0
 */

var Tooltipsy = Class.create({
	elem: null,
	liveTooltip: null,

	initialize: function(elem)
	{
		this.elem = $(elem)
		if(!this.elem)
		{
			throw "Unable to bind to element";
		}

		this.elem.observe("mouseover", this.mouseOver.bindAsEventListener(this)).
			observe("mouseout", this.mouseOut.bindAsEventListener(this));
	},

	mouseOver: function(evt)
	{
		var liElem = evt.findElement("li");
		var co = liElem.cumulativeOffset();
		var dim = liElem.getDimensions();

		// stem
		var stemElem = document.createElement("img");
		Element.extend(stemElem);
		stemElem.writeAttribute({
			src: "images/img-tooltip-stem.png", alt: "",
			width: 15, height: 8
		}).addClassName("tooltipStem");

		// content
		var contentElem = document.createElement("div");
		Element.extend(contentElem);
		contentElem.update(liElem.down("a").readAttribute("title")).
			addClassName("tooltipContent");

		// container
		var tooltipElem = document.createElement("div");
		Element.extend(tooltipElem);
		this.liveTooltip = tooltipElem.addClassName("tooltip").
			insert(contentElem).insert(stemElem).identify();
		document.body.insert(tooltipElem);

		var ttDim = tooltipElem.getDimensions();
		var vpDim = document.viewport.getDimensions();

		var ttPos = {
			top: (co.top - ttDim.height - 11),
			left: Math.round((co.left + (dim.width / 2)) - (ttDim.width / 2))
		};
		// this creates an offset value to keep the tooltip within the viewport horizontal
		var offset = ((ttPos.left + ttDim.width) > vpDim.width) ? (vpDim.width - (ttPos.left + ttDim.width)) : 0;

		tooltipElem.setStyle({
			top: ttPos.top+"px",
			left: (ttPos.left + offset) +"px"
		});
		stemElem.setStyle({
			left: (Math.round(ttDim.width / 2) - 8 - offset)+"px"
		});
	},

	mouseOut: function(evt)
	{
		if(this.liveTooltip)
		{
			$(this.liveTooltip).remove();
			this.liveTooltip = null;
		}
	}
});