// Author: Dustin Diaz | http://www.dustindiaz.com
// improvement for Piwigo --> Gbo - 2006
Array.prototype.inArray = function (value) {
	var i;
	for (i=0; i < this.length; i++) {if (this[i] === value) {return true;}}
	return false;};

function addEvent2( 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, it;
			for(i = listEvents.length - 1; i >= 0; i = i - 1){
				it = listEvents[i];
				if(it[0].removeEventListener){
					it[0].removeEventListener(it[1], it[2], it[3]);};
				if(it[1].substring(0, 2) != "on"){
					it[1] = "on" + it[1];};
				if(it[0].detachEvent){
					it[0].detachEvent(it[1], it[2]);};
				it[0][it[1]] = null;};}
	};
}();

addEvent2(window,'unload',EventCache.flush);
 
var swt = { 
	xCord : 0,								 
	yCord : 0,								 
	tipElm : ['a','area'],	
 	forbidenClasses : ['navThumb','markItUpButton'],	
	obj : Object,							
	tip : Object,							
	active : 0,								
	init : function() {
		if ( !document.getElementById ||
			!document.createElement ||
			!document.getElementsByTagName ) {
			return;
}
		var i,j;
		this.tip = document.createElement('div');
		document.getElementsByTagName('body')[0].appendChild(this.tip);
		this.tip.id = 'toolTip';
		this.tip.style.top = '0';
		this.tip.style.visibility = 'hidden';
		var tipLen = this.tipElm.length;
		for ( i=0; i<tipLen; i++ ) {
			var elms = document.getElementsByTagName(this.tipElm[i]);
			var curLen = elms.length;
			for ( j=0; j<curLen; j++ ) {
			     elm = elms[j];var Active = '';
				var fcLen = this.forbidenClasses.length;
				for (c=0; c<fcLen; c++) {
					if ( elm.parentNode.className.indexOf(this.forbidenClasses[c]) != -1 ||
					elm.className.indexOf(this.forbidenClasses[c]) != -1) 
					 { Active = 'No'; }} 								 
				 if (Active != 'No' ) {
			    var val = elm.title.split("||",15);
				if (val[0].length>0) {
				addEvent2(elm,'mouseover',this.tipOver);
				addEvent2(elm,'mouseout',this.tipOut);
				addEvent2(elm,'mousemove',this.tipMouseMove);
				elm.setAttribute('tip',elm.title);
				elm.removeAttribute('title');
				elm.removeAttribute('alt');}
				}
				}
			}
	},
	updateXY : function(e) {
		if ( document.captureEvents ) {
			swt.xCord = e.pageX;
			swt.yCord = e.pageY;}
			else 
			if ( window.event.clientX ) {
			swt.xCord = window.event.clientX+document.documentElement.scrollLeft;
			swt.yCord = window.event.clientY+document.documentElement.scrollTop;}
	},
	tipOut: function() {
		if ( window.tID ) {clearTimeout(tID);}
		if ( window.opacityID ) {clearTimeout(opacityID);}
		swt.tip.style.visibility = 'hidden';
	},
	checkNode : function() {
		var trueObj = this.obj;
		if ( this.tipElm.inArray(trueObj.nodeName.toLowerCase()) ) 
		{return trueObj;} else {return trueObj.parentNode;}
	},
	tipOver : function(e) {
		swt.obj = this;
		tID = window.setTimeout("swt.tipShow()",150);
		swt.updateXY(e);
	},
	tipMouseMove : function(e){swt.updateXY(e);swt.tipMove();},	

	tipShow : function() {		
		var vals = this.checkNode().getAttribute('tip');
        var val = vals.split("||",15);
		if (val[0].length>0)
		{this.tip.innerHTML = "<p id='title'>"+ val[0] +"</p>";
		this.tip.style.visibility = 'visible';}
		var pid  = "dflt";
 		for (var i=1; i<val.length; i++) 
			{ if ( val[i].toLowerCase().indexOf("<img") == 0) 
				{ pid  = "pict";}
			   this.tip.innerHTML += "<p id='"+pid+"'>" + val[i]  + "</p>";}
		this.tip.style.opacity = '.1';
		this.tipFade(10);
	},
	
	tipMove: function()
	{ var scrX = Number(this.xCord);
		var scrY = Number(this.yCord);
		var tp = parseInt(scrY+5);
		var lt = parseInt(scrX+5);
		var DDE = document.documentElement;
		if ( parseInt(DDE.clientWidth+DDE.scrollLeft) < parseInt(this.tip.offsetWidth+lt) ) {
			this.tip.style.left = parseInt(lt-(this.tip.offsetWidth+15))+'px';
			} else {
						this.tip.style.left = lt+'px';}
		if ( parseInt(DDE.clientHeight+DDE.scrollTop) < parseInt(this.tip.offsetHeight+tp) ) {
			this.tip.style.top = parseInt(tp-(this.tip.offsetHeight+15))+'px';
			} else {this.tip.style.top = tp+'px';}
	},
		
	tipFade: function(opac) {
		var passed = parseInt(opac);
		var newOpac = parseInt(passed+10);
		if ( newOpac < 98 ) {
			this.tip.style.opacity = '.'+newOpac;
			this.tip.style.filter = "alpha(opacity:"+newOpac+")";
			opacityID = window.setTimeout("swt.tipFade('"+newOpac+"')",20);}
		else { 
			this.tip.style.opacity = '.98';
			this.tip.style.filter = "alpha(opacity:98)";}
	}
};
function pageLoader() {
	swt.init();
}
addEvent2(window,'load',pageLoader);
