ie=document.all?1:0;
n=document.layers?1:0;
n6 = ((!(ie || n)) && navigator.appVersion.charAt(0) >= 5);


/************************************************************
 * Esta función encuentra objetos definidos en la página.	*
 * (Macromedia).											*
 *															*
 * Parámetros:												*
 *	n:	Cadena de caracteres. Identificador a buscar.		*
 *	d:	Objeto. Documento a partir del cuál empezamos		*
 *		la búsqueda.										*
 *															*
 * Valor de retorno:										*
 *	El objeto buscado, o undefined.							*
 ************************************************************/
function findObj(n, d) { //v4.0
	var p,i,x;  

	// Por defecto inicia la búsqueda en la página actual.		
	if(!d)
		d=document; 
		
	// Esta parte es porque se puede incluir nombres de marcos en el identificador.
	if((p=n.indexOf("?")) > 0 && parent.frames.length) {
		d = parent.frames[n.substring(p+1)].document;
		n = n.substring(0,p);
	}
		
	// Busca en el documento actual.
	if(!(x=d[n])&&d.all)
		x=d.all[n];
	
	// Busca en los formularios.
	for (i=0;!x&&i<d.forms.length;i++) 
		x=d.forms[i][n];

	// Busca en las capas.
	for(i=0;!x&&d.layers&&i<d.layers.length;i++) 
		x=findObj(n,d.layers[i].document);
		
	// Busca en las imágenes.
	if (!x)
		x=d.images[n];
	
	// Busca en los applets
	if (!x)
		x=d.applets[n]
	
	// Busca en los embeds.
	if (!x)
		x=d.embeds[n]

	// Esto es sólo para Explorer y Netscape 6.
	if(!x && document.getElementById)
		x=document.getElementById(n); 
	
	return x;
}
  

/************************************************************
 * Texto usado para acceso a capas. (Según navegador)		*
 *															* 
 * Parámetros:												*
 *															*
 * Valor de retorno:										*
 *	String:	cadena de acceso a capas, usada después de		*
 *			"document."										*
 ************************************************************/
function accesoCapa () {
	if (isExplorer())
		return "all.";
	else
		return "layers.";
}

/************************************************************
 * Texto usado para acceso a elementos. (Según navegador)	*
 *															* 
 * Parámetros:												*
 *															*
 * Valor de retorno:										*
 *	String:	cadena de acceso a elementos, usada después de	*
 *			"document."										*
 ************************************************************/
function accesoElemento () {
	if (isExplorer())
		return "all.";
	else
		return "";
}

/************************************************************
 * Texto usado para acceso a formularios. (Según navegador)	*
 *															* 
 * Parámetros:												*
 *															*
 * Valor de retorno:										*
 *	String:	cadena de acceso a formularios, usada después de*
 *			"document."										*
 ************************************************************/
function accesoFormulario () {
	if (isExplorer())
		return "all.";
	else
		return "document.";
}

/************************************************************
 * Texto usado para acceso a estilos de capa.				*
 * (Según navegador)										*
 *															* 
 * Parámetros:												*
 *															*
 * Valor de retorno:										*
 *	String:	cadena de acceso a estilos de capa, usada		*
 *			después de "nombreCapa."						*
 ************************************************************/
function styleObj() {
	if (isExplorer())
		return "style.";
	else
		return "";
}

/************************************************************
 * Función para movimiento relativo de capas.				*
 * (Según navegador)										*
 *															*
 * Parámetros:												*
 *	x:		Movimiento horizontal.							*
 *	y:		Movimiento vertical.							*
 *	capa:	nombre de la capa a mover.						*
 *															*
 * Valor de retorno:										*
 ************************************************************/
function moverCapa (x,y,capa) {
	capaObj = findObj(capa);
	
	if (!capaObj)
		return;
	
	if (ie) {
		capaObj.style.posTop += y;
		capaObj.style.posLeft += x;
	}
	else if (n) {
		capaObj.moveBy(x,y);
	}
	
	else if (n6) {
		capaObj.style.top = parseInt(capaObj.style.top) + y + "px";
		capaObj.style.left = parseInt(capaObj.style.left) + x + "px";
	}
}

/************************************************************
 * Función para movimiento absoluto de capas.				*
 * (Según navegador)										*
 *															*
 * Parámetros:												*
 *	x:		Movimiento horizontal.							*
 *	y:		Movimiento vertical.							*
 *	capa:	nombre de la capa a mover.						*
 *															*
 * Valor de retorno:										*
 ************************************************************/
function moverCapaA (x,y,capa) {
	var capaObj = findObj(capa);
	
	if (!capaObj)
		return;
	
	if (ie) {
		capaObj.style.posTop = y;
		capaObj.style.posLeft = x;
	}
	else if (n) {
		capaObj.moveTo(x,y);
	}
	
	else if (n6) {
		capaObj.style.top = y + "px";
		capaObj.style.left = x + "px";
	}
}


/************************************************************
 * Función que establece la visibilidad de una capa.		*
 * (Según navegador)										*
 *															*
 * Parámetros:												*
 *	capa:		nombre de la capa a mover.					*
 *	visible:	valor booleano para la visibilidad.			*
 *					true:	visible.						*
 *					false:	oculta.							*
 *	auto:		valor booleano indicando si heredamos la	*
 *				visibilidad del padre.						*
 *															*
 * Valor de retorno:										*
 ************************************************************/
function setVisibility (capa,visible,auto) {
	capaObj = findObj(capa);
	
	if (!capaObj)
		return;
	
	if (ie || n6) {
		if (visible)
			capaObj.style.visibility = 'visible';			
		else
			capaObj.style.visibility = 'hidden';			
			
		if (auto)
			capaObj.style.visibility = 'inherit';
	}	
	else {
		if (visible)
			capaObj.visibility = 'show';			
		else
			capaObj.visibility = 'hide';			
			
		if (auto)
			capaObj.visibility = 'inherit';
	}
}

/************************************************************
 * Función que informa de la visibilidad de una capa.		*
 * (Según navegador)										*
 *															*
 * Parámetros:												*
 *	capa:		nombre de la capa a mover.					*
 *															*
 * Valor de retorno:										*
 *	Visibilidad:	valor booleano.							*
 *						true:	visible.					*
 *						false:	oculta.						*
 ************************************************************/
function getVisibility (capa) {
	capaObj = findObj (capa);
	
	if (!capaObj)
		return false;
	
	if (ie || n6) {
		if (capaObj.style.visibility == 'visible' || capaObj.style.visibility == '')
			return true;
		else
			return false;
	}
	else {
		if (capaObj.visibility == 'show' || capaObj.visibility == 'inherit')
			return true;
		else
			return false;
	}
}

/************************************************************
 * Función que informa del explorador que estamos usando.	*
 * (Según navegador)										*
 *															*
 * Parámetros:												*
 *	capa:		nombre de la capa a mover.					*
 *															*
 * Valor de retorno:										*
 *	Visibilidad:	valor booleano.							*
 *						true:	visible.					*
 *						false:	oculta.						*
 ************************************************************/
function isExplorer () {
	if (navigator.appName == "Netscape")
		return false;
	else
		return true;
}

/************************************************
 * Función que cambia el contenido de una capa.	*
 * (Según navegador)							*
 *												*
 * Parámetros:									*
 *	capa:		nombre de la capa a cambiar.	*
 *												*
 * Valor de retorno:							*
 ************************************************/
function escribeEnCapa (capa,texto) {
	var capaObj = findObj (capa);
	
	if (!capaObj)
		return;
	
	if (ie || n6) {
		capaObj.innerHTML = texto;
	}
	else {
		capaObj.document.open();
		capaObj.document.write(texto);
		capaObj.document.close();
	}
}