var blnEnabled = false;

Array.prototype.inArray = function(value)
{
	var i;
	for (i=0; i < this.length; i++)
	{
		if (this[i] === value)
		{
			return true;
		}
	}
	return false;
};

addEvent = function(obj,type,fn)
{
	if (obj.addEventListener)
	{
		obj.addEventListener(type,fn,false);
		EventCache.add(obj,type,fn);
	}
	else if (obj.attachEvent)
	{
		obj["e"+type+fn] = fn;
		obj[type+fn] = function()
		{
			obj["e"+type+fn](window.event);
		}
		obj.attachEvent("on"+type,obj[type+fn]);
		EventCache.add(obj,type,fn);
	}
	else
	{
		obj["on"+type] = obj["e"+type+fn];
	}
}
	
var EventCache = function()
{
	var listEvents = [];
	return {
		listEvents : listEvents,
		add : function(node,sEventName,fHandler)
		{
			listEvents.push(arguments);
		},
		flush : function()
		{
			var i, item;
			for(i = listEvents.length - 1; i >= 0; i = i - 1)
			{
				item = listEvents[i];
				if(item[0].removeEventListener)
				{
					item[0].removeEventListener(item[1],item[2],item[3]);
				};
				if(item[1].substring(0, 2) != "on")
				{
					item[1] = "on" + item[1];
				};
				if(item[0].detachEvent)
				{
					item[0].detachEvent(item[1],item[2]);
				};
				item[0][item[1]] = null;
			};
		}
	};
}();

var titleAttributesConvertedToTooltips = { 
	xCord : 0,								// @Number: x pixel value of current cursor position
	yCord : 0,								// @Number: y pixel value of current cursor position
	tipElements : ['a'],					// @Array: Allowable elements that can have the toolTip
	obj : Object,							// @Element: That which you're hovering over
	tip : Object,							// @Element: The actual toolTip itself
	active : 0,								// @Number: 0: Not Active || 1: Active
	init : function()
	{
		if (!$ || !document.createElement || !document.getElementsByTagName)
		{
			return;
		}
		var i,j;
		
		this.tip = document.createElement('div');
		this.tip.id = 'tooltip';
		
		document.getElementsByTagName('body')[0].appendChild(this.tip);
		
		this.tip.style.top = '0';
		this.tip.style.visibility = 'hidden';
		
		var tipLen = this.tipElements.length;
		for (i=0; i<tipLen; i++)
		{
			var current = $('tblListings').getElementsByTagName(this.tipElements[i]);
			var curLen = current.length;
			for (j=0; j<curLen; j++)
			{
			    if (current[j].className!='no-tooltip')
			        {
			        addEvent(current[j],'mouseover',this.tooltipHover);
				    addEvent(current[j],'mouseout',this.tipOut);
				    current[j].setAttribute('tip',current[j].title);
				    current[j].removeAttribute('title');    
			        }
				
			}
		
		}
		blnEnabled = true;
	},
	updateXY : function(e)
	{
		if (document.captureEvents)
		{
			titleAttributesConvertedToTooltips.xCord = e.pageX;
			titleAttributesConvertedToTooltips.yCord = e.pageY;
		}
		else if (window.event.clientX)
		{
			titleAttributesConvertedToTooltips.xCord = window.event.clientX+document.documentElement.scrollLeft;
			titleAttributesConvertedToTooltips.yCord = window.event.clientY+document.documentElement.scrollTop;
		}
	},
	tipOut: function()
	{
		if (window.selectorID)
		{
			clearTimeout(selectorID);
		}
		if (window.opacityID)
		{
			clearTimeout(opacityID);
		}
		titleAttributesConvertedToTooltips.tip.style.visibility = 'hidden';
	},
	checkNode : function()
	{
		var trueObj = this.obj;
		if (this.tipElements.inArray(trueObj.nodeName.toLowerCase()))
		{
			return trueObj;
		}
		else
		{
			return trueObj.parentNode;
		}
	},
	tooltipHover : function(e)
	{
	    if (blnEnabled)
	    {
		    var delay = 150;
		    titleAttributesConvertedToTooltips.obj = this;
		    selectorID = window.setTimeout("titleAttributesConvertedToTooltips.showTooltip()",delay);
		    titleAttributesConvertedToTooltips.updateXY(e);
		}
	},
	showTooltip : function()
	{		
		var scrX = Number(this.xCord);
		var scrY = Number(this.yCord);
		var offsetTop = parseInt(scrY+15);
		var offsetLeft = parseInt(scrX+10);
		var anch = this.checkNode();
		var addy = '';
		//var callToAction = 'Click for more information.';
		
		if (anch.nodeName.toLowerCase() == 'a')
		{
			addy = (anch.href.length > 25 ? anch.href.toString().substring(0,25)+"..." : anch.href);
		}
		else
		{
			addy = anch.firstChild.nodeValue;
		}
		this.tip.innerHTML = "<p>"+anch.getAttribute('tip')+"</p>";
		if (parseInt(document.documentElement.clientWidth+document.documentElement.scrollLeft) < parseInt(this.tip.offsetWidth+offsetLeft))
		{
			this.tip.style.left = parseInt(offsetLeft-(this.tip.offsetWidth+10))+'px';
		}
		else
		{
			this.tip.style.left = offsetLeft+'px';
		}
		if (parseInt(document.documentElement.clientHeight+document.documentElement.scrollTop) < parseInt(this.tip.offsetHeight+offsetTop))
		{
			this.tip.style.top = parseInt(offsetTop-(this.tip.offsetHeight+10))+'px';
		}
		else
		{
			this.tip.style.top = offsetTop+'px';
		}
		this.tip.style.visibility = 'visible';
		this.tip.style.opacity = '.1';
		this.hideTooltip(10);
	},
	hideTooltip: function(opac)
	{
		var passed = parseInt(opac);
		var newOpac = parseInt(passed+10);
		if (newOpac < 100)
		{
			var delay = 10;
			this.tip.style.opacity = '.'+newOpac;
			this.tip.style.filter = "alpha(opacity:"+newOpac+")";
			opacityID = window.setTimeout("titleAttributesConvertedToTooltips.hideTooltip('"+newOpac+"')",delay);
		}
		else
		{ 
			this.tip.style.opacity = '1.0';
			this.tip.style.filter = "alpha(opacity:100)";
		}
	}
};

enableToolTips = function()
{
	titleAttributesConvertedToTooltips.init();
}
disableToolTips = function()
{
    blnEnabled = false;   
}

Event.observe(window,'load',enableToolTips);
Event.observe(window,'unload',EventCache.flush);
