// ==============================================================================================
//Este script muestra un tooltip en cualquier tag de la página que tenga el atributo title
//y con el valor del mismo. Si sólo queremos un tipo de tag se cambia tipoDeTag.
// ==============================================================================================
var tituloGlobalTooltip;
var habilitaTip = false;
// ==============================================================================================

TOOLTIP = {
// ==============================================================================================
	//Referencias a la capa que será el tooltip, se usan en la hoja de estilos.
	capaTooltipExterna : 'capaExterna',
	capaTooltipArriba : 'tooltipUno',
	capaTooltipCentro : 'tooltipDos',
	capaTooltipAbajo : 'tooltipTres',
	//Posibles valores *, a, acronym. Si le pones title a un div y dentro hay otros tags con
	//title el script mostrará la concatenación de ambos titles. Esto puede usarse si es lo que
	//se busca.
	tipoDeTag : '*',
	//Dónde están los enlaces, para limitar la zona de acción. Si ponemos una cadena vacía buscará
	//en document.
	dondeBuscar : '',
	//Estas son para posicionar la capa a nuestro gusto.
	offsetxpoint : -10,
	offsetypoint : 20,
// ==============================================================================================
	start : function () {
		if (TOOLTIP.dondeBuscar != '') {
			var dondeId = document.getElementById(TOOLTIP.dondeBuscar);
		} else {
			var dondeId = document;
		}
		var referenciasAObjetos = dondeId.getElementsByTagName(TOOLTIP.tipoDeTag);
		var gko = (navigator.userAgent.toLowerCase().indexOf('gecko')!=-1);
		//Creamos la capa tooltip y la insertamos en el documento.
		TOOLTIP.prepare();
		for (var i=0; i<referenciasAObjetos.length; i++) {
			var objetoActual = referenciasAObjetos[i];
			if (objetoActual.title != '') {
				if(gko){
					objetoActual.setAttribute('onmouseover', 'TOOLTIP.ponTip(this.title, this);');
					objetoActual.setAttribute('onmouseout', 'TOOLTIP.ocultaTip(this.title, this);');
				}else{
					objetoActual['onmouseover'] = new Function('TOOLTIP.ponTip(this.title, this);');	
					objetoActual['onmouseout'] = new Function('TOOLTIP.ocultaTip(this.title, this);');
				}
			}
		}
	},//Final de start.
// ==============================================================================================
	//Con la función prepare creamos la capa tooltip y la añadimos al árbol DOM.
	prepare : function () {
		var capaExterna = document.createElement('div');
		capaExterna.id = TOOLTIP.capaTooltipExterna;
		var capaArriba = document.createElement('div');
		capaArriba.id = TOOLTIP.capaTooltipArriba;
		var capaCentro = document.createElement('div');
		capaCentro.id = TOOLTIP.capaTooltipCentro;
		var capaAbajo = document.createElement('div');
		capaAbajo.id = TOOLTIP.capaTooltipAbajo;
		var elP = document.createElement('p');
		capaCentro.appendChild(elP);
		capaExterna.appendChild(capaArriba);
		capaExterna.appendChild(capaCentro);
		capaExterna.appendChild(capaAbajo);
		var elBody = document.body;
		elBody.appendChild(capaExterna);
	},//Final de prepare.
// ==============================================================================================
	//Con la función posicionaTip hacemos que la capa tooltip siga al ratón en todo momento.
	posicionaTip : function (e) {
		var ie = document.all;
		var ns6 = document.getElementById && !document.all;
		if (habilitaTip) {
			var referenciaAlObjeto = document.getElementById(TOOLTIP.capaTooltipExterna);
			var curX = (ns6)?e.pageX : event.clientX + TOOLTIP.ieBody().scrollLeft;
			var curY = (ns6)?e.pageY : event.clientY + TOOLTIP.ieBody().scrollTop;
			var bordeDerecho = ie && !window.opera? TOOLTIP.ieBody().clientWidth - event.clientX - TOOLTIP.offsetxpoint : window.innerWidth - e.clientX - TOOLTIP.offsetxpoint - 20;
			var bordeInferior = ie && !window.opera? TOOLTIP.ieBody().clientHeight - event.clientY - TOOLTIP.offsetypoint : window.innerHeight - e.clientY - TOOLTIP.offsetypoint - 20;
			var bordeIzquierdo = (TOOLTIP.offsetxpoint < 0) ? TOOLTIP.offsetxpoint*(-1) : -1000;
			if (bordeDerecho < referenciaAlObjeto.offsetWidth){
				if (ie) {
					referenciaAlObjeto.style.left = TOOLTIP.ieBody().scrollLeft + event.clientX - referenciaAlObjeto.offsetWidth - 10 + 'px';
				} else {
					referenciaAlObjeto.style.left = window.pageXOffset + e.clientX - referenciaAlObjeto.offsetWidth - 10 + 'px';
				}
			} else { 
				if (curX < bordeIzquierdo) {
					referenciaAlObjeto.style.left = '5px';
				} else {
					referenciaAlObjeto.style.left = curX + TOOLTIP.offsetxpoint + 'px';
				}
			}
			if (bordeInferior < referenciaAlObjeto.offsetHeight) {
				referenciaAlObjeto.style.top = ie ? TOOLTIP.ieBody().scrollTop + event.clientY - referenciaAlObjeto.offsetHeight - TOOLTIP.offsetypoint+'px' : window.pageYOffset + e.clientY - referenciaAlObjeto.offsetHeight - TOOLTIP.offsetypoint + 'px';
			} else {
				referenciaAlObjeto.style.top = curY + TOOLTIP.offsetypoint + 'px';
			}
			referenciaAlObjeto.style.visibility = 'visible'
		}
	},//Final de posicionaTip.
// ==============================================================================================
	//la función ponTip hace visible al tooltip y le cambia el texto por el que tiene el objetivo
	ponTip : function (titulo,referencia) {
		var referenciaAlObjeto = document.getElementById(TOOLTIP.capaTooltipExterna);
		var referenciaAlTooltipConP = document.getElementById(TOOLTIP.capaTooltipCentro);
		var myTextNode = document.createTextNode(titulo);
		referenciaAlTooltipConP.firstChild.appendChild(myTextNode);
		tituloGlobalTooltip = titulo;
		if (referencia.title != '') {
			referencia.title = '';
			habilitaTip = true;
		} else {
			hbilitaTip = false;
		}
	},
// ==============================================================================================
	//la función ocultaTip hace invisible al tooltip y regenera el title en el objetivo
	ocultaTip : function (titulo,referencia) {
		var referenciaAlObjeto = document.getElementById(TOOLTIP.capaTooltipExterna);
		var referenciaAlTooltipConP =  document.getElementById(TOOLTIP.capaTooltipCentro);
		referenciaAlObjeto.style.visibility = 'hidden';
		referenciaAlObjeto.style.left = '-1000px';
		if (referenciaAlTooltipConP.firstChild.hasChildNodes()) {
		  referenciaAlTooltipConP.firstChild.removeChild(referenciaAlTooltipConP.firstChild.lastChild);
		}
		referencia.title = tituloGlobalTooltip;
		habilitaTip = false;
	},//final de ocultaTip
// ==============================================================================================
	//la función idBody extrae la referencia al body para obtener bien el scroll en IE
	ieBody : function () {
		return (document.compatMode && document.compatMode != 'BackCompat') ? document.documentElement : document.body;
	}//final de ieBody
// ==============================================================================================
}//final de TOOLTIP

// ==============================================================================================
if (document.getElementsByTagName) EXTRAS.sumaEvento(document, 'mousemove', TOOLTIP.posicionaTip, false);
if (document.getElementsByTagName) EXTRAS.sumaEvento(window, 'load', TOOLTIP.start, false);
// ==============================================================================================
