function addEvent(elm, evType, fn, useCapture) {
	if (elm.addEventListener) { 
	elm.addEventListener(evType, fn, useCapture); 
	return true; 
	}
	else if (elm.attachEvent) { 
	var r = elm.attachEvent('on' + evType, fn); 
	EventCache.add(elm, evType, fn);
	return r; 
	}
	else {
	elm['on' + evType] = fn;
	}
}
function getEventSrc(e) {
	if (!e) e = window.event;

	if (e.originalTarget)
	return e.originalTarget;
	else if (e.srcElement)
	return e.srcElement;
}
function addLoadEvent(func) {
var oldonload = window.onload;
	if (typeof window.onload != 'function') {
	window.onload = func;
	} else {
	window.onload = 
		function() {
		oldonload();
		func();
		}
	}
}
var EventCache = function(){
	var listEvents = [];
	return {
		listEvents : listEvents,
	
		add : function(node, sEventName, fHandler, bCapture){
			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]);
				};
				
				/* From this point on we need the event names to be prefixed with 'on" */
				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;
			};
		}
	};
}();


addEvent(window,'unload',EventCache.flush, false);


//------------------------------------------------------//


function findPosX(obj) {
var curleft = 10;
if (obj.offsetParent) {
	while (obj.offsetParent) {
	curleft += obj.offsetLeft
	obj = obj.offsetParent;
	}
}
else if (obj.x)
curleft += obj.x;
return curleft;
}

function findPosY(obj) {
var curtop = -35;
if (obj.offsetParent) {
	while (obj.offsetParent) {
	curtop += obj.offsetTop
	obj = obj.offsetParent;
	}
}
else if (obj.y)
curtop += obj.y;
return curtop;
}


//------------------------------------------------------//

var toolTipLib = { 
	xCord : 0,
	yCord : 0,
	attachToolTipBehavior: function() {
	var links = document.getElementsByTagName('a');
	var i;
		for ( i=0;i<links.length;i++ ) {
		var link = links[i];
		if (link.getAttribute("href") &&
       link.getAttribute("rel") == "external")
		  {
		  addEvent(links[i],'mouseover',toolTipLib.tipOver,false);
		  addEvent(links[i],'mouseout',toolTipLib.tipOut,false);
		  links[i].setAttribute('tip',links[i].title);
		  links[i].removeAttribute('title');
		  }
		}
	},
	tipOver: function(e) {
	obj = getEventSrc(e);
	toolTipLib.xCord = findPosX(obj);
	toolTipLib.yCord = findPosY(obj);
	tID = setTimeout("toolTipLib.tipShow(obj,'"+toolTipLib.xCord+"','"+toolTipLib.yCord+"')",100)
	},
	tipOut: function(e) {
		if ( window.tID )
		clearTimeout(tID);
		if ( window.opacityID )
		clearTimeout(opacityID);
	var l = getEventSrc(e);
	var div = document.getElementById('toolTip');
		if ( div ) {
		div.parentNode.removeChild(div);
		}
	},
	checkNode : function(obj) {
	var trueLink = obj;
		if ( trueLink.nodeName.toLowerCase() == 'a' ) {
		return trueLink;
		}
		while ( trueLink.nodeName.toLowerCase() != 'a' && trueLink.nodeName.toLowerCase() != 'body' )
		trueLink = trueLink.parentNode;
	return trueLink;
	},
	tipShow: function(obj,x,y) {
	var newDiv = document.createElement('div');
	var scrX = Number(x);
	var scrY = Number(y);
	var tp = parseInt(scrY+20);
	var lt = parseInt(scrX+20);
	var anch = toolTipLib.checkNode(obj);
	var hrf = anch.href;
	var addy = ( eval(hrf.length -7) > 25 ? hrf.toString().substr(7,25)+"..." : hrf.toString().substring(7) );
	newDiv.id = 'toolTip';
	newDiv.style.top = tp+'px'; newDiv.style.left = lt+'px';
	document.body.appendChild(newDiv);
	newDiv.innerHTML = "<p>"+anch.getAttribute('tip')+"</p>";
	newDiv.style.opacity = '.1';
	toolTipLib.tipFade('toolTip',10);
	},
	tipFade: function(div,opac) {
	var obj = document.getElementById(div);
	var passed = parseInt(opac);
	var newOpac = parseInt(passed+10);
		if ( newOpac < 80 ) {
		obj.style.opacity = '.'+newOpac;
		obj.style.filter = "alpha(opacity:"+newOpac+")";
		opacityID = setTimeout("toolTipLib.tipFade('toolTip','"+newOpac+"')",20);
		}
		else { 
		obj.style.opacity = '.80';
		obj.style.filter = "alpha(opacity:80)";
		}
	}
};
addEvent(window,'load',toolTipLib.attachToolTipBehavior,false);