/**
 * @author Fernando Reig Aparicio
 * @copyright 2006
*/

var tooltip_js = true;

function Tooltip(){
}

Tooltip.mouseX = 0;
Tooltip.mouseY = 0;
Tooltip.timerID = null;
Tooltip.timeout = 500; //ms de retardo para mostrar el tooltip
Tooltip.auxContent = null;

/**
 * Obtiene la posicion actual del raton en las variables de clase mouseX, mouseY
 * @param  Event e
 * @static
 * @access private
 */
Tooltip.getMousePosition = 
function (event) {
  if (!document.all) { //si no es el internet Explorer
    Tooltip.mouseX = event.pageX;
    Tooltip.mouseY = event.pageY;
  }else { //si es el internet explorer
  
    Tooltip.mouseX = window.event.clientX + document.documentElement.scrollLeft;
    Tooltip.mouseY = window.event.clientY + document.documentElement.scrollTop;
	window.event.cancelBubble = true;
	

  }
  //window.status=Tooltip.mouseX+","+Tooltip.mouseY;
  return true;
}

/**
  * Realiza una solicitud para mostrar el texto indicado en un tooltip
  * @param  String  sTexto
  * @static
  * @access public
  */
Tooltip.showText = 
function(sTexto){
	if (sTexto==null || sTexto==undefined || sTexto=="")
		return false;

	Tooltip.auxContent = sTexto;
	Tooltip.timerID = setTimeout('Tooltip.loadText();', Tooltip.timeout);
	return true;
}

/**
 * Muestra el tooltip con el texto con el que se realizo la solicitud
 * @see Tooltip.showText
 * @static
 * @acess private
 */
Tooltip.loadText = 
function(){
	var e = Tooltip.getContentLayer();
	
	e.innerHTML = Tooltip.auxContent;
	
	e.style.display='block';	
}

/**
 * Solicita mostrar el tooltip con el HTML contenido en el elemento indicado
 * @param  mixed  elemento Id del elemento o referencia del mismo
 * @access public
 */
Tooltip.showContent = 
function(elemento){
	if (elemento==null || elemento==undefined || elemento=="")
		return false;
	
	if (typeof(elemento)=="string")
		Tooltip.auxContent = document.getElementById(elemento);
	else
		Tooltip.auxContent = elemento;
	
	Tooltip.timerID = setTimeout('Tooltip.loadContent();', Tooltip.timeout);
	return true;
}

/**
 * Muestra el tooltip con el contenido (HTML) del elemento con el que se realizo la solicitud
 * @see Tooltip.showContent
 * @static
 * @acess private
 */
Tooltip.loadContent = 
function(){
	var e = Tooltip.getContentLayer();
	
	e.innerHTML = Tooltip.auxContent.innerHTML;
	
	e.style.display='block';
}

/**
 * Solicita mostrar el tooltip mostrando el elemento indicado en el mismo (como una imagen del documento)
 * @param  mixed  elemento Id del elemento o referencia del mismo
 * @access public
 */
Tooltip.showElement = 
function(elemento){
	if (elemento==null || elemento==undefined || elemento=="")
		return false;
	
	if (typeof(elemento)=="string")
		Tooltip.auxContent = document.getElementById(elemento);
	else
		Tooltip.auxContent = elemento;
	
	Tooltip.timerID = setTimeout('Tooltip.loadElement();', Tooltip.timeout);
	return true;
}

/**
 * Muestra el tooltip con el elemento con el que se realizo la solicitud
 * @see Tooltip.showElement
 * @static
 * @acess private
 */
Tooltip.loadElement = 
function(){
	var e = Tooltip.getContentLayer();
	
	while (e.hasChildNodes()){
		e.removeChild(e.lastChild);
	}

	e.appendChild(Tooltip.auxContent.cloneNode(true));
	
	e.style.display='block';	
}

/**
 * Realiza una solicitu de visualizacion del tooltip con el contenido resultante de realizar una solicitud XMLHttpRequest con la URI indicada
 * @return bool
 * @static
 * @access public
 */
Tooltip.showRemoteContent = 
function(uri){
	if (uri==null || uri==undefined || uri=="")
		return false;
	
	Tooltip.auxContent = uri;
	Tooltip.timerID = setTimeout('Tooltip.loadRemoteContent();', Tooltip.timeout);
	return true;
}

/**
 * Realiza una solicitu de visualizacin del tooltip el cual mostrar la  la imagen con la ruta indicada
 */
Tooltip.showImage = 
function(uri){
	if (uri==null || uri==undefined || uri=="")
		return false;
	
	Tooltip.auxContent = uri;
	Tooltip.timerID = setTimeout('Tooltip.loadImage();', Tooltip.timeout);
	return true;
} 

/**
 * Muestra el tooltip con el elemento con el que se realizo la solicitud
 * @see Tooltip.showElement
 * @static
 * @acess private
 */
Tooltip.loadImage = 
function(){
	var e = Tooltip.getContentLayer();
	
	while (e.hasChildNodes()){
		e.removeChild(e.lastChild);
	}

	var img = document.createElement("img");
	img.src = Tooltip.auxContent;
	img.alt = "";	
	
	e.appendChild(img);
	
	e.style.display='block';	
}

/**
 * Muestra el tooltip con el resultado de la solicitud XMLHttpRequest indicada al realizar la solicitud de visualizacin del tooltip
 * @see Tooltip.showElement
 * @static
 * @acess private
 */
Tooltip.loadRemoteContent = 
function(){
	var e = Tooltip.getContentLayer();

	//separamos la direccion de la cadena de busqueda
	var v = Tooltip.auxContent.split('?');
	var url = v[0];
	var querystring = "";
	if (v[1])
		querystring = v[1];

	var x = new XmlHttp();
	try{
		x.cargarResultado(url, querystring, e,'');
	}catch(ex){
		e.innerHTML = 'ERROR al intentar acceder a '+url;
	}
	
	e.style.display='block';
}

/**
 * Obtiene la referencia de la capa en la que mostrar el tooltip (capa con el id "tooltip"). Si la capa no existe la crea.
 * @return HTMLElement
 * @static
 * @access private
 */
Tooltip.getContentLayer = 
function (){
	var d = document.getElementById("tooltip");
	if (!d){
		d = document.createElement("div");
		d.id = "tooltip";
		d.style.display = "none";
		d.style.backgroundColor = "#FFFFE1";//"#FFFF00";
		d.style.padding = "3px";
		d.style.fontFamily = "verdana";
		d.style.fontSize = "10px";
		d.style.border = "1px solid #000000";
		document.body.appendChild(d);
	}

	d.style.position = "absolute";
	d.style.zIndex = "20";
	d.style.left = Tooltip.mouseX + "px";
	d.style.top = (Tooltip.mouseY + 15) + "px";	
	return d;
}

/**
 * Oculta el tooltip mostrado (se debera llamar en el evento onmouseout del elemento que va mostrar el tooltip)  o cancela la solicitud de mostrarlo
 * @static
 * @access public
 */
Tooltip.hide = 
function (){
	if (Tooltip.timerID)
		clearTimeout(Tooltip.timerID);
	
	var e = document.getElementById("tooltip");
	if (e)
		e.style.display = "none";
}

if (!document.all){ //si no se trata de IExplorer
	document.addEventListener("mousemove", Tooltip.getMousePosition, true);
}else{
	document.attachEvent("onmousemove", Tooltip.getMousePosition); //para que se vayan actualizando las variables mouseX, mouseY segun se vaya moviendo el raton
}
