var ToolTip = Class.create();

/* Usage 

var myToolTip = new ToolTip({followMouse:false});


toolTip.show("This is the text", e); 
e is a mouseevent
*/
ToolTip.prototype = {
	initialize:  function (options) {
		this.options = Object.extend({
			offsetx: 12,
			offsety: 8,
			toolTipId: "tooltip",
			toolTipContentClass: "tooltipcontent",
			followMouse: true
		}, options || {});
		
		this.ie5 = (document.getElementById && document.all); 
		this.ns6 = (document.getElementById && !document.all); 
		this.isapple = (navigator.userAgent.toLowerCase().indexOf('applewebkit') != -1 ? 1 : 0);
	},
	_createTooltip: function(id) {
	  if(document.createElement)
		{ 
			var el = document.createElement('div'); 
			el.id = id;     
			with(el.style)
			{ 
				display = 'none';
				position = 'absolute';
			} 
			el.innerHTML = '&nbsp;'; 
			document.body.appendChild(el); 
		} 
	},
	_getMousePosition: function(e) {
		var iebody=(document.compatMode && 
        	document.compatMode != 'BackCompat') ? 
        		document.documentElement : document.body;
        e.pagex = (this.isapple == 1 ? 0:(this.ie5)?iebody.scrollLeft:window.pageXOffset);
        e.pagey = (this.isapple == 1 ? 0:(this.ie5)?iebody.scrollTop:window.pageYOffset);
        e.mousex = (this.ie5)?event.x:(this.ns6)?clientX = e.clientX:false;
        e.mousey = (this.ie5)?event.y:(this.ns6)?clientY = e.clientY:false;
		return e;
	},
	_updateToolTipPosition: function(e) {
		e = this._getMousePosition(e);

		var tooltip = document.getElementById(this.options.toolTipId);
		tooltip.style.position = "absolute";
		tooltip.style.left = (e.mousex+e.pagex+this.options.offsetx) + 'px';
        tooltip.style.top = (e.mousey+e.pagey+this.options.offsety) + 'px';
	},
	show: function(value, e) {
		if(!document.getElementById(this.options.toolTipId)) _createTooltip(this.options.toolTipId);
		var tooltip = document.getElementById(this.options.toolTipId);
		var contentElement = getElementsByClassName(tooltip, this.options.toolTipContentClass)[0];

		
		if (value != null) {
			if (!contentElement)
			{
				contentElement = document.createElement("span");
				contentElement.setAttribute("className", this.options.toolTipContentClass);
				tooltip.appendChild(contentElement);
			}
			else {
				removeAllChildren(contentElement);
			}
			
			if (typeof(value) == "string")
			{
				contentElement.appendChild(document.createTextNode(value));
			}
			else {
				contentElement.appendChild(value);	
			}
		}
		
		tooltip.style.display = 'block';
		if (this.options.followMouse)
			document.onmousemove = this._updateToolTipPosition.bind(this);
		else if (e != null)
			this._updateToolTipPosition(e);
	},
	hide: function() {
		document.getElementById(this.options.toolTipId).style.display = 'none';
	}
}
