/*
	Sweet Titles (c) Creative Commons 2005
	http://creativecommons.org/licenses/by-sa/2.5/
	Author: Dustin Diaz | http://www.dustindiaz.com
	Heavily modified by: Floris Weijenburg
*/

var sweetTitles = 
{ 
	xCord : 0,									// @Number: x pixel value of current cursor position
	yCord : 0,									// @Number: y pixel value of current cursor position
	tipElements : ['abbr','acronym'], 		 	// @Array: Allowable elements that can have the toolTip
	obj : Object,								// @Element: That of which you're hovering over
	tip : Object,								// @Element: The actual toolTip itself
	active : 0,									// @Number: 0: Not Active || 1: Active
	
	init : function() 
	{
		if (!document.getElementById || !document.createElement || !document.getElementsByTagName) 
		{ return; }
		
		this.tip = document.createElement('div');
		this.tip.id = 'toolTip';
		this.body = document.getElementsByTagName('body')[0];
		this.tip.style.top = '0';
		this.tip.style.visibility = 'hidden';
		this.body.appendChild(this.tip);
		
		for(var i=0; i<(this.tipElements).length; i++) 
		{
			var current = document.getElementsByTagName(this.tipElements[i]);
			var curLen = current.length;
			for (var j=0; j<curLen; j++ ) {
				YAHOO.util.Event.addListener(current[j], "mouseover", this.tipOver);
				YAHOO.util.Event.addListener(current[j], "mouseout", this.tipOut);
				current[j].setAttribute('multiple',current[j].title);
				current[j].removeAttribute('title');
			}
		}
	},
	
	updateXY : function(e) 
	{
		if ( document.captureEvents ) {
			sweetTitles.xCord = e.pageX;
			sweetTitles.yCord = e.pageY;
		} else if ( window.event.clientX ) {
			sweetTitles.xCord = window.event.clientX+document.documentElement.scrollLeft;
			sweetTitles.yCord = window.event.clientY+document.documentElement.scrollTop;
		}
	},
	
	tipOut: function() 
	{
		if ( window.tID ) {
			clearTimeout(tID);
		}
		if ( window.opacityID ) {
			clearTimeout(opacityID);
		}
		sweetTitles.tip.style.visibility = 'hidden';
	},
	
	checkNode : function() 
	{
		var nodeName = (this.obj).nodeName.toLowerCase();
		var result = (this.tipElements).inArray(nodeName);
		
		if (result == true) { return this.obj; } 
		else { return (this.obj).parentNode; }
	},
	
	tipOver : function(e) 
	{
		sweetTitles.obj = this;
		tID = window.setTimeout("sweetTitles.tipShow()", 50);
		sweetTitles.updateXY(e);
	}, 
	
	tipShow : function() 
	{		
		var scrX = Number(this.xCord);
		var scrY = Number(this.yCord);
		var tp = parseInt(scrY+15);
		var lt = parseInt(scrX+10);
		var cont = this.checkNode();
		
		if(parseInt(document.documentElement.clientWidth+document.documentElement.scrollLeft) < parseInt(this.tip.offsetWidth+lt)) {
			this.tip.style.left = parseInt(lt-(this.tip.offsetWidth+10))+'px';
		} else {
			this.tip.style.left = lt+'px';
		}
		
		if (parseInt(document.documentElement.clientHeight+document.documentElement.scrollTop) < parseInt(this.tip.offsetHeight+tp)) {
			this.tip.style.top = parseInt(tp-(this.tip.offsetHeight+10))+'px';
		} else {
			this.tip.style.top = tp+'px';
		}
		
		// This function AddHtml() add's the html we have placed in a span tag (the first childnode)
		this.tip.innerHTML = "<strong>"+cont.getAttribute('lang')+"</strong><p>"+cont.getAttribute('multiple')+this.AddHtml(cont)+"</p>";
		
		this.tip.style.visibility = 'visible';
		this.tip.style.opacity = '.1';
		this.tipFade(10);
	},
	
	AddHtml : function(node)
	{
		var elements = (node.getElementsByTagName('span'));
		var htmlContent = '';
		
		if(elements[0])
		{
			htmlContent = $(elements[0].id);
			// Now we return the HTML code we found ... 
			return htmlContent.innerHTML;
		}
		else
		{
			return '';
		}
	},
	
	tipFade: function(opac) 
	{
		var passed = parseInt(opac);
		var newOpac = parseInt(passed+10);
		if ( newOpac < 80 ) {
			this.tip.style.opacity = '.'+newOpac;
			this.tip.style.filter = "alpha(opacity:"+newOpac+")";
			opacityID = window.setTimeout("sweetTitles.tipFade('"+newOpac+"')",20);
		}
		else { 
			this.tip.style.opacity = '.80';
			this.tip.style.filter = "alpha(opacity:80)";
		}
	}
};