/**************************************************************************************************************************

		Funciones para el manejo de POPUPS (C) Alberto Blanco 2008

necesita eventos.js y manejoobjetos.js
POPUPtd es el estilo para una celda que es donde se visualiza
**************************************************************************************************************************/

/*************************************************************************************************
 En POPpopup se llevan las instancias de los objetos POPup, creadas a partir de POPupById
**************************************************************************************************/
var POPpopup=new Array();

/*******************************************************************************************************
 Crea una nueva instancia de un popup
 Id la id del elemento al que se asocia el popup
 Txt el texto a sacar
 Retardo si es != 0 mlsg que tarda en salir
 ObjTxt es una referencia a un objeto para meter el texto del popup en el innerHTML, en vez de la ventana.
	 Es opcional. P.ej. document.getElementById('TD')
********************************************************************************************************/
function POPupById(Id,Txt,Retardo,ObjTxt)
{
var obj=document.getElementById(Id);
var i;
var obTxt;

	if (typeof ObjTxt=='undefined')
		obTxt=null;
	else
		obTxt=ObjTxt;

	if (typeof(obj) != 'undefined')
		{
		i=POPpopup.length;
		POPpopup[i]=new POPup(obj,Txt,Retardo,obTxt);	//Creo la referencia numérica
		POPpopup[obj.id]=POPpopup[i];			//Y la referencia por id
		}
	else
		alert('No encontre el elemento con id '+ Id + ' para crear POPup');
};

/*****************************************************************************************




				 Clase para la gestion de los popups
					 
	Recibe el objeto al que se asocia el popup y el texto que mostrará			 
				 
				 
******************************************************************************************/
function POPup(obj,txt,retardo,obTxt)
{
var clase=this; //Referencia a nosotros mismos, para las funciones internas

	//Las dos propiedades
	this.txt=txt;
	this.obj=obj;
	this.retardo=retardo;
	this.y=-1;
	this.x=-1;
	this.pending=false;
	this.objTxt=obTxt;
	
	//Los metodos
	this.del=mtDel;
	this.ShowRet=mtCompruebaRetardo;

	//Le conecto los eventos
	EVTAsignaEvento(this.obj, 'mouseover', evShow);	
	EVTAsignaEvento(this.obj, 'mouseout', evHidden);

	/**************************
			 Eventos
	**************************/
	//Muestra popup
	function evShow(event)
	{
	var e=EVTDimeEvento(event);

		//Nos quedamos con las coordenadas
		clase.y=e.clientY+document.body.scrollTop;
		clase.x=e.clientX+document.body.scrollLeft;
		
		//Dependiendo de si tiene retardo
		if (clase.retardo!=0)
			{
			clase.pending=true;
			setTimeout('POPpopup.' + clase.obj.id + '.ShowRet()',clase.retardo);
			}
		else
			if (clase.objTxt!=null)
				clase.objTxt.innerHTML=clase.txt;
			else
				POPShow(clase.txt,clase.obj,clase.y,clase.x);
	};
	
	//Funcion oculta
	function evHidden()
	{
		clase.pending=false;
		if (clase.objTxt!=null)
			clase.objTxt.innerHTML='&nbsp;';
		else
			POPHidden();
	};
	
	/**************************
			 Metodos
	**************************/	
	//Lo muestra con retardo
	function mtCompruebaRetardo()
	{
		if (OBJCoorInObject(clase.y,clase.x,clase.obj) && clase.pending)
			if (clase.objTxt!=null)
				clase.objTxt.innerHTML=clase.txt;
			else
				POPShow(clase.txt,clase.obj,clase.y,clase.x);
	};
	
	//Elimina popup
	function mtDel()
	{
	var i;
	var ieliminar;

		//Nos pulimos los eventos
		EVTEliminaEvento(clase.obj, 'mouseover', evShow);	
		EVTEliminaEvento(clase.obj, 'mouseout', evHidden);

		//Buscamos el elemento que hay que pulirse
		for (i=0;i<POPpopup.length;i++)
			if (POPpopup[i]==clase)
				{
				POPpopup.splice(i,1);
				break;
				};
		
		//Y nos pulimos a nosotros mismos
		delete clase;
	};
};

//Se le pasa un texto y un elemento y muestra el popup
function POPShow(txt,ele,y,x)
{
var Top,Left;
var div=document.getElementById('POPupDiv');
var Html='';

	/***** Miro si ya me he creado el DIV *****/
	if (div==null)
		{
		// No estaba, pues me lo creo
		div=document.createElement("DIV");
		document.body.appendChild(div);
		div.id="POPupDiv";
		div.style.overflow='hidden';
		div.style.position='absolute';
		div.style.zIndex=99;
		div.style.visibility='hidden';
		};

	// Me creo el HTML dentro del DIV
	Html+='<table cellspacing="0" cellpadding="0">\n';
	Html+='<tr>\n';
	Html+='<td class="POPUPtd">' + txt + '</td>\n';
	Html+='</tr>\n';
	Html+='</table>';
	div.innerHTML=Html;

	// Lo coloco
	Top=y-10;
	Left=x+10;
	
	div.style.left=Left + 'px';
	div.style.top=Top + 'px';

	// Y lo muestra
	div.style.visibility='visible';
};

// Oculta el popup
function POPHidden()
{
var div=document.getElementById('POPupDiv');

	if (div!=null) div.style.visibility='hidden';
};
