/******************************************************************************************
*	Fichier	:	tchikTooltip.js
*	Auteur	:	Matthieu BUE
*	Date	:	03/03/2010
*	Version	:	1.0
*	
*	UTILISATION :
*	1. Renseignez la ligne 15 avec l'emplacement du fichier tchikTooltip.css
*	2. Renseignez les lignes 16 et 17 avec les decalages x et y desirees de l'infobulle
*	3. Renseignez la ligne 18 avec la position desiree de l'infobulle
******************************************************************************************/

var tchikTooltip = function(){
	// -- OPTIONS ------------------------------------------------------------
	var stylesheet_path = "inclus/";	// emplacement de tchikTooltip.css
	var x_space = -15; 			// decalage horizontal (-):gauche (+):droite
	var y_space = 35; 			// decalage vertical, valeur positive
	var posTip = "bot";			// emplacemnt, ("top"):haut ("bot"):bas
	// -----------------------------------------------------------------------
	
	var $=document; // shortcut
	var mx, my, tempTitle;
	var backYspace = y_space;
	var elt=$.documentElement;
	
	function getObject(id) { return $.getElementById ? $.getElementById(id) : $.all ? $.all[id] : $.layers ? $.layers[id] : null; }
	
	function addEvent(obj,type,fn){ obj.addEventListener ? obj.addEventListener(type,fn,false) : obj.attachevent ? obj.attachevent('on'+type,fn) : obj['on'+type] = fn; }
	
	function locate(){
		if(obj = getObject("tchikTooltip")){
			mx += x_space;
			my += y_space;
			obj.style.top = my+"px";
			obj.style.left = mx+"px";
		}	
	}
	
	function mousemove(e) {
		mx = $.all?window.event.clientX+elt.scrollLeft:e.pageX;
		my = $.all?window.event.clientY+elt.scrollTop:e.pageY;
		locate();
	}
	
	function erase(link){
		if(obj = getObject("tchikTooltip")) $.getElementsByTagName("body")[0].removeChild(obj);
		link.title = tempTitle;
	}
	
	function tooltip(link){
		posTip = (posTip != "top" && posTip != "bot") ? "bot" : posTip; // Test d'erreur
		var style = (/tooltip\[top\]/.test(link.rel)) ? "top" : (/tooltip\[bot\]/.test(link.rel)) ? "bot" : posTip; // Permet de gerer les positionnements individuels
		y_space = (style == "top") ? -(Math.abs(backYspace)) : Math.abs(backYspace);
		
		var ttip = $.getElementsByTagName("body")[0].appendChild($.createElement("div"));
		ttip.id = "tchikTooltip";
		ttip.className = style;
		ttip.appendChild($.createTextNode(link.title));
		if(!(/MSIE (\d+\.\d+)/.test(navigator.userAgent) && Number(RegExp.$1)<7)){ // Test for MSIE x.x;
			var arrowback = ttip.appendChild($.createElement("div"));
			arrowback.className = "border";
			var arrow = ttip.appendChild($.createElement("div"));
			arrow.className = "arrow";
		}
		tempTitle = link.title;
		link.title = "";
		locate();
	}
	
	function config(args){
		// Configuration manuelle depuis le document html
		stylesheet_path = (args["stylesheet"]) ? String(args["stylesheet"]) : stylesheet_path;
		x_space = (args["xspace"]) ? Number(args["xspace"]) : x_space;
		y_space = (args["yspace"]) ? Number(args["yspace"]) : y_space;
		posTip = (args["position"]) ? String(args["position"]) : posTip;
		backYspace = y_space;
	}
	
	addEvent(window, "load", function(){ // Initialisation
		// Insertion de la feuille de style
		var head   = $.getElementsByTagName("head")[0];
		var link   = $.createElement("link");
		link.rel   = "stylesheet";
		link.type  = "text/css";
		link.href  = stylesheet_path+"tchikTooltip.css";
		link.media = "screen";
		head.appendChild(link);
		// Parcours de toutes les balises <a>
		var links = $.getElementsByTagName('a');
		for(var i=0; i<links.length; i++){
			var link = links[i];
			if(link.href && (/tooltip/.test(link.rel))){
				addEvent(link, "mouseover", function(){tooltip(this);});
				addEvent(link, "mouseout", function(){erase(this);});
			}
		}
		addEvent($, "mousemove", mousemove);
	});
	
	return{ config:config }
}();
