var regExpBeginning = /^\s+/;
var regExpEnd = /\s+$/;  
// Supprime les espaces inutiles en début et fin de la chaîne passée en paramètre.
function trim(aString) 
{
    return aString.replace(regExpBeginning, "").replace(regExpEnd, "");
}
// Supprime les espaces inutiles en début de la chaîne passée en paramètre.
function ltrim(aString)
{
    return aString.replace(regExpBeginning, "");
}
// Supprime les espaces inutiles en fin de la chaîne passée en paramètre.
function rtrim(aString) {

    return aString.replace(regExpEnd, "");
}


var VTToolTip = Class.create();
VTToolTip.prototype = 
{
	/*
	 * initialisation de la class des elements du DOM qui auront une VTToolTip <li class="_elementClassName">
	 */
	elementClassName: 'VTToolTip',
	
	/*
	 * paramètres de la VTToolTip
	 */
	init_parameters :
	{
		title:"",
		marginLeft:-20,
		marginTop:0,
		classVTToolTip:"",
		classVTToolTipHeader:"",
		classVTToolTipBody:"",
		classVTToolTipFooter:"",
		effect:"noEffect"
	},
	
	parameters : null,
	
	initialize : function(_elementClassName)
	{
		
		this.elementClassName = _elementClassName;
			
		if (!document.getElementsByClassName){ return; }
		
		var elementsVTToolTip = document.getElementsByClassName(this.elementClassName);
		
		for (var i=0; i<elementsVTToolTip.length; i++)
		{
			var elementVTToolTip = elementsVTToolTip[i];
			
			elementVTToolTip.setAttribute('id','idVTToolTip_'+i);
			
			elementVTToolTip.onmouseover = function (event) 
			{
				myVTToolTip.create(this, event); 
				return false;
			}
			
			elementVTToolTip.onmouseout = function (event) 
			{
				myVTToolTip.hide(); 
				return false;
			}
		}
	},
	
	initDiv: function()
	{
		/*
		 * création de l'élément du DOM qui va contenir la VTToolTip
		 */
		var objBody = document.getElementsByTagName("body").item(0);
		var objVTToolTip = document.createElement("div");
		objVTToolTip.setAttribute('id','idVTToolTip');
		objVTToolTip.style.display = 'none';
		
		objVTToolTip.onmouseover = function (event) 
		{
			objVTToolTip.style.display = 'block';
			return false;
		}
		objVTToolTip.onmouseout = function (event) 
		{
			myVTToolTip.hide();		
			return false;
		}
		
		var objVTToolTipHeader = document.createElement("div");
		objVTToolTipHeader.setAttribute('id','idVTToolTipHeader');
		var objVTToolTipBody = document.createElement("div");
		objVTToolTipBody.setAttribute('id','idVTToolTipBody');
		var objVTToolTipFooter = document.createElement("div");
		objVTToolTipFooter.setAttribute('id','idVTToolTipFooter');
		objVTToolTip.appendChild(objVTToolTipHeader);
		objVTToolTip.appendChild(objVTToolTipBody);
		objVTToolTip.appendChild(objVTToolTipFooter);
		
		objBody.appendChild(objVTToolTip);
	},
	
	get_parameters: function(params)
	{
		var paramsArray = params.split(",");
		for(p = 0; p < paramsArray.length; p++)
		{
			var paramsTrim = trim(paramsArray[p]);
			var param = paramsTrim.split(":");
			var paramAttribute = param[0];
			var paramValue = param[1];
			
			if(this.parameters[paramAttribute] != "undefined")
			{
				this.parameters[paramAttribute] = paramValue;
			}
		}
	},
	
	create : function(elementVTToolTip, event)
	{	
		/**
		* init du div de la VTToolTip
		*/ 
		if($('idVTToolTip'))
		{
			$('idVTToolTip').remove();
		}
		this.initDiv();
	
		/**
		 * réinitialise les paramètres
		 */
		this.parameters =Object.clone(this.init_parameters);
		
		var idElementVTToolTip = elementVTToolTip.getAttribute('id');
		$(idElementVTToolTip).parentNode.insertBefore($('idVTToolTip'), $(idElementVTToolTip));

		var parametersObjects = elementVTToolTip.getAttribute('params');
		if(parametersObjects != null)
		{
			this.get_parameters(parametersObjects);
		}
		
		$('idVTToolTip').setAttribute('class',this.parameters.classVTToolTip);
		$('idVTToolTipHeader').setAttribute('class',this.parameters.classVTToolTipHeader);
		$('idVTToolTipBody').setAttribute('class',this.parameters.classVTToolTipBody);
		$('idVTToolTipFooter').setAttribute('class',this.parameters.classVTToolTipFooter);

		var posVTTooltip = this.calculatePositionMouse(event);
		
		if(this.parameters.marginLeft != null)
		{
			$('idVTToolTip').style.left = (posVTTooltip._x + this.parameters.marginLeft)+"px";
		}
		else
		{
			$('idVTToolTip').style.left = posVTTooltip._x+"px";
		}
		
		if(this.parameters.marginTop != null)
		{
			$('idVTToolTip').style.top = (posVTTooltip._y + this.parameters.marginTop)+"px";
		}
		else
		{
			$('idVTToolTip').style.top =  posVTTooltip._y+"px";
		}
		
		if(this.parameters.title != "")
		{
			$('idVTToolTipBody').innerHTML = "<h2>"+this.parameters.title+"</h2>";
		}
		else
		{
			$('idVTToolTipBody').innerHTML = "";
		}
		
		var contentAttribute = String(elementVTToolTip.getAttribute('content'));
		if(contentAttribute != "null")
		{
			$('idVTToolTipBody').innerHTML += contentAttribute;
		}
		else
		{
			$('idVTToolTipBody').innerHTML += "";
		}
		
		this.display(this.parameters.effect);
	},
	
	display : function(_effect)
	{
		switch(_effect)
		{
			case "noEffect":
				$('idVTToolTip').style.display = 'block';
				return false;
			break;
			
			case "Appear":
				new Effect.Appear('idVTToolTip');
				return false;
			break;
			
			case "Toggle":
				new Effect.toggle('idVTToolTip','blind');
				return false;
			break;
			
			case "Shake":
				$('idVTToolTip').style.display = 'block';
				new Effect.Shake('idVTToolTip');
				return false;
			break;
			
			case "Pulsate":
				$('idVTToolTip').style.display = 'block';
				new Effect.Pulsate('idVTToolTip');
				return false;
			break;
				
			default:
				$('idVTToolTip').style.display = 'block';
				return false;
			break;
		}
		
	},
	
	hide : function()
	{
		$('idVTToolTip').style.display = 'none';
	},
	
	calculatePositionMouse : function(e) 
	{
		var posx = 0;
		var posy = 0;
		if (!e) var e = window.event;
		if (e.pageX || e.pageY) 	
		{
			posx = e.pageX;
			posy = e.pageY;
		}
		else if (e.clientX || e.clientY) 
		{
			posx = e.clientX + document.body.scrollLeft
				+ document.documentElement.scrollLeft;
			posy = e.clientY + document.body.scrollTop
				+ document.documentElement.scrollTop;
		}
		return {"_x":posx, "_y":posy};
	},
	
	set_elementClassName: function(_var)
	{
		if(_var != undefined)
		{
			myVTToolTip.elementClassName = _var;
		}
	}
}

var myVTToolTip = null;

function initVTTollTip()
{ 
	myVTToolTip = new VTToolTip('VTToolTip'); 
}

Event.observe(window, 'load', initVTTollTip, false);

