/*================================================================================
FUNCION:	Constructor del objeto oVentana
ARGS:		Obj:	objeto Html ligado
			clase:	estilo CSS usado para el objeto ventana
DEVUELVE:	-----
DESCRIP.:
El objeto oVentana es un objeto ligado a un bloque DIV de la página HTML usado para el
texto que se va a desplazar dentro de una ventana contenedora representada por el objeto 
oPersiana.
Sus propiedades y métodos son:
Propiedades:
	elemDiv		Objeto HTML ligado (un bloque DIV)
	estilo		estilo CSS
Métodos	
	escribir	Rellenar el elemento HTML
	mover		Mover el elemento
	situar		Colocar la capa en una posición
	leerX		Lee la posición horizontal			
	leerY		Lee la posición vertical
	Alto		Pone la altura del objeto
	Ancho		Pone la anchura del objeto
================================================================================*/
function oVentana(obj, clase)
{
this.elemDiv = obj;
this.estilo = clase;
this.escribir = oVentana_escribir;
this.mostrar = oVentana_mostrar;
this.mover = oVentana_mover;
this.situar = oVentana_situar;
this.leerX = oVentana_X;
this.leerY = oVentana_Y;
this.Alto = oVentana_Alto;
this.Ancho = oVentana_Ancho;
}	

function oVentana_mostrar(sino)
{
var estado = (sino)?"visible":"hidden";
if (miNavegador.standard || miNavegador.modVer == "IE4")
	this.elemDiv.style.visibility = estado;
else	
	this.elemDiv.visibility = estado;

}
function oVentana_escribir(cadena, ancho)
{
var capa = this.elemDiv;
switch (miNavegador.modVer){
case "IE4":
case "IE5":
case "IE6":
case "NS5":
	capa.innerHTML = cadena;
	break;
case "NS4":
	capa = capa.document;
	var hija = capa.id;
	var objest = document.classes[this.estilo].all;
	with (capa.ids[hija]){
		fontsize = objest.fontsize; 
		fontfamily = objest.fontfamily;
		fontWeight = objest.fontWeight;
		fontStyle = objest.fontStyle;
		textDecoration = objest.textDecoration;
		textAlign =  objest.textAlign;
		color = objest.color;
		paddingRight = objest.paddingRight;
		paddingLeft= objest.paddingLeft;
		paddingTop = objest.paddingTop;
		paddingBottom = objest.paddingBottom;
		}
	if (ancho)
		{
		capa.open()	
		capa.write('<div style="width:'+ancho+'px" >'+cadena+'</div>')
		capa.close()
		}
	else	
		{
		capa.open()
		capa.write('<div id="'+hija+'" >'+cadena+'</div>')
		capa.close()
		}
	}
}

function oVentana_mover(incx, incy)
{
var capa = this.elemDiv
if	(capa.style)
	{
	capa.style.left = parseInt(capa.style.left) + incx;
	capa.style.top = parseInt(capa.style.top) + incy;
	}
else
	{
	capa.left += incx;
	capa.top += incy;
	}	
}

function oVentana_situar(x,y)
{
var capa = this.elemDiv
if (capa.style)
	{
	capa.style.left = x+'px';
	capa.style.top = y+'px';
	}
else
	{
	capa.left = x;
	capa.top = y;
	}
}

function oVentana_X()
{
if (this.elemDiv.style)
	return parseInt(this.elemDiv.style.left);
else	
	return this.elemDiv.left;
}

function oVentana_Y()
{
if (this.elemDiv.style)
	return parseInt(this.elemDiv.style.top)
else
	return this.elemDiv.top;	
}

function oVentana_Alto(arg)
{
if (this.elemDiv.style)
	if (!arg)
		return this.elemDiv.offsetHeight;
	else	
		this.elemDiv.style.height = arg + "px";
else
	if (!arg)
		return this.elemDiv.clip.height;
	else	
		this.elemDiv.clip.height = arg;
}

function oVentana_Ancho(arg)
{
if (this.elemDiv.style)
	if (!arg)
		return this.elemDiv.style.offsetWidth;
	else	
		this.elemDiv.style.width = arg + "px";
else
	if (!arg)
		return this.elemDiv.clip.width;
	else	
		this.elemDiv.clip.right = arg;
}
//FIN DEL OBJETO oVentana
/*=====================================================================================
OBJETO oPersiana.
Es una ventana delante de la cual se va desplazando en vertical un conjunto de textos.
Está formado por una ventana contenedora y dos ventanas hijas: una de ellas contiene el
texto que está visible y la otra contiene el texto que sustituirá al actual. Las ventanas
hijas son objetos tipo oVentana.
Propiedades
	marco 		Marco ventana principal, es un objeto oVentana
	estilo		estilo CSS del marco
	textos		Lista de textos que recorreran el marco
	txtind 		Indice del texto actual en la lista
	pausa 		Pausa entre textos
	sent		Sentido del movimiento. 1= Ar-Ab, -1= Ab-Ar
	veloc 		Rapidez del movto
	movil		Marco hijo
Métodos	
	actualizar 	Mover hijo
	preparaHija	Inicializa una ventana hija

FUNCION:	Constructor del objeto oPersiana
ARGS:		Marco:	ID del bloque HTML que forma la ventana contenedora
			veloc:	un número que indica la rapidez con la que se desplazará el texto
			textos: array con los textos que aparecerán en la ventana
			sent: 	Sentido del movimiento del texto. 1= Ar-Ab, -1= Ab-Ar
			pausa: 	número indicando el tiempo que el texto permanecerá en reposo
			estilo:	nombre del estilo CSS usado para la ventana contenedora. 
				
DEVUELVE:	---
DESCRIP:	Constructor del objeto persiana
}
=====================================================================================*/
function oPersiana(idMarco, veloc, textos, sent, pausa, estilo)
{
var capa, hija, obj = objHtml(idMarco);
this.marco = null;
this.estilo = estilo;
this.textos = textos.slice(0);
this.txtind = 0;
this.pausa = pausa;
this.sent = sent;
this.veloc = veloc;
this.movil = new Array(null, null);
this.movact = 0;
this.actualizar = oPersiana_actualizar;
this.preparaHija = oPersiana_preparaHija;
//Crea la ventana del marco contenedor
this.marco =new oVentana(obj, this.estilo);
//Crea las capas hijas
capa = '<div id="'+idMarco+'_h1" style="position: absolute; "></div>'
capa +='<div id="'+idMarco+'_h2" style="position: absolute; "></div>'
this.marco.escribir(capa, this.marco.Ancho());
this.marco.mostrar(true);
//Crea las dos ventanas móviles usadas
for(n=0; n<2; n++)
	{
	switch (miNavegador.modVer){
		case "IE4":
			hija = this.marco.elemDiv.children[n];
			hija.style.paddingLeft = "4px";
			hija.style.paddingTop = "4px";
			break;
		case "IE5":
		case "IE6":
		case "NS5":
			hija = this.marco.elemDiv.childNodes[n];
			hija.style.paddingLeft = "4px";
			hija.style.paddingTop = "4px";			
			break;
		case "NS4":
			hija = this.marco.elemDiv.document.layers[n];
		}	
	this.movil[n] = new oVentana( hija, this.estilo);
	}	
//Inicializa la primera ventana hija
this.preparaHija(0);
this.preparaHija(1);
}
/*=====================================================================================
FUNCION:	Método del objeto oPersiana: oPersiana_preparaHija(n)
ARGS:		número de la ventana hija
DEVUELVE:	---
DESCRIP:	Prepara una ventana hija colocándole el texto que se mostrará y situándola
			fuera de la ventana contenedora. La posición vertical deberá ser tal que 
			la ventana queda debajo de la que en un momento dado se está mostrando, o
			sea, la hija 1 deberá quedar debajo de la 0 y viceversa.
=====================================================================================*/
function oPersiana_preparaHija(n)
{
this.movil[n].mostrar(false);
this.movil[n].escribir(this.textos[this.txtind]);
//La sitúa bajo la ventana anterior
if (this.sent >0)
	this.movil[n].situar(1, -Math.max(this.movil[n].Alto(),this.marco.Alto()));
else
	this.movil[n].situar(1, Math.max(this.movil[1-n].Alto(),this.marco.Alto()));
this.movil[n].mostrar(true);
}
/*=====================================================================================
FUNCION:	Método del objeto oPersiana: oPersiana_actualizar(arg)
ARGS:		cadena identificador de la persiana
DEVUELVE:	---
DESCRIP:	Actualiza el contenido de la ventana principal desplazando adecuadamente
			las ventanas hijas.
=====================================================================================*/
function oPersiana_actualizar(arg)
{
var objPers=eval(arg);
var tmp = objPers.veloc;
var act = objPers.movact;
var sig = 1-act;
var movil = objPers.movil[act];
var sigmov = objPers.movil[sig];
var marco = objPers.marco;
var fin, ind = 0;
movil.mover(0, objPers.sent)
if (sigmov) 
	sigmov.mover(0, objPers.sent)
fin = movil.leerY() == 0;
if (!fin)
	setTimeout(arg+".actualizar('"+arg+"')", tmp);
else
	{
	tmp = tmp*objPers.pausa;
	objPers.txtind++;
	if (objPers.txtind >= objPers.textos.length)
		objPers.txtind = 0;
	objPers.movact = 1-objPers.movact;
	objPers.preparaHija(objPers.movact);
	setTimeout(arg+".actualizar('"+arg+"')", tmp);
	}
}

