//funciones javascript

/*
*	NOMBRE			cambiaGrafico
*
*	DESCRIPCION		Función que cambia las url de las graficas al hacer onclick sobre una pestaña. También cambia el estio de la pestaña.
*
*	ENTRADA			nuevaUrl:				Nueva url de la gráfica.
*					numPest:				Número de capa seleccionada.
*					idGrafica:				Nombre del id de la gráfica.
*					idTexto:				Nombre del id del texto, sin el número final que los diferencia.
*					maxTexto:				Número de textos que hay.
*
*	LLAMADA			cambiaGrafico('<xsl:value-of select="$urlGraficaHomeHistorica1"/>365', '5', 'graficoFichaHome1', 'textoGrafica', '6');
*
*/

function cambiaGrafico(nuevaUrl, numPest, idGrafica, idTexto, maxTexto)
{
	var i;
	
	//cambiamos la url del gráfico
	document.getElementById(idGrafica).src = nuevaUrl;
	
	//ponemos todos los textos a azul subrayado
	for (i=1; i<=maxTexto; i++)
		document.getElementById(idTexto + i).className = 'pestGraficaNoSel';


	//ponemos el texto seleccionado en negro
	document.getElementById(idTexto + numPest).className = 'pestGraficaSel';

}



/*
*	NOMBRE			abrirVentana
*
*	DESCRIPCION		Función que te abre un pop-up de la noticia del tamaño que le indiques
*
*	ENTRADA			url:		url que se encargará en el pop-up.
*					alto:		alto de la ventana.
*					ancho:		ancho de la ventana.
*					resize:		yes ó no.
*					scrollb:	yes ó no.
*
*	LLAMADA			La llamada a la función se realiza de esta manera un evento (onclick):
*					abrirVentana('index.php?seccion=ticker', 120, 626,'yes','no');
*
*/

function abrirVentana(url,alto,ancho, resize, scrollb) 
{	
	if (typeof newwindow != "undefined")
		newwindow.close();
	var izquierda = (screen.availWidth - ancho) / 2;
	var arriba = (screen.availHeight - alto) / 2;
	
	var opciones =	"location=no,directories=no,status=no,menubar=no,toolbar=no,resizable=" + resize + ",width=" + ancho + ",height=" + alto + ",left=" + izquierda + ",top=" + arriba + ",scrollbars=" + scrollb;
	
	newwindow = window.open(url,'name',opciones);
	newwindow.resizeTo(ancho, alto);
	if (window.focus)
	{
		newwindow.focus()
	}	
	return false;
}



/*
*	NOMBRE			cambiaPestana
*
*	DESCRIPCION		cambia contenido (la capa) segun la pestaña seleccionada
*
*	ENTRADA			totalPest: numero de pestañas
*					idCapa = id de la capa a mostrar
*					pestActual = pestaña elegida
*					raizPest = raiz del nombre de la pestaña (excluyendo el número)
*					raizCapa = raiz del nombre de la capa (excluyendo el número)
*					borde = si ó no (cambia el tipo de class según si tiene borde o no lo tiene)
*
*	LLAMADA			Se llama desde: <xsl:attribute name="onclick">cambiaPestana(2,'tipoInt1',1,'pestTipoInt','tipoInt');</xsl:attribute>
*
*/
function cambiaPestana(totalPest,idCapa,pestActual,raizPest,raizCapa,borde)
{
	//clases segun el borde
	if(borde == 'no')
	{
		var selecc = 'pestGraficaSelSinBorde';
		var noSelecc = 'pestGraficaNoSelSinBorde';
	}
	else
	{
		var selecc = 'pestGraficaSel';
		var noSelecc = 'pestGraficaNoSel';
	}
	//poner todas los contenidos en no seleccionados
	for (i=1; i<=totalPest; i++)
		document.getElementById(eval("raizCapa + i")).style.display = "none";
		
	//poner todas las pestañas en 'no seleccionadas'
	for (i=1; i<=totalPest; i++)
	{
		document.getElementById(eval("raizPest + i")).className = noSelecc;
	}
	
	//poner la pestaña seleccionada en 'seleccionada'
	document.getElementById(eval("raizPest + pestActual")).className = selecc;
	
	//mostrar el contenido seleccionado
	document.getElementById(idCapa).style.display = "block";	

}

/*
*	NOMBRE			cambiaCapa
*
*	DESCRIPCION		muestra la capa que le pasemos y oculta todas las demás
*
*	ENTRADA			totalCapa: numero de pestañas
*					idCapa = id de la capa a mostrar
*					raizCapa = raiz del nombre de la capa (excluyendo el número)
*
*	LLAMADA			Se llama desde: <xsl:attribute name="onclick">cambiaPestana(2,'tipoInt1','tipoInt');</xsl:attribute>
*
*/
function cambiaCapa(totalCapa,idCapa,raizCapa)
{
	//se ponen todas las capas en situacion de no seleccionadas;
	for(i=1; i<=totalCapa; i++)
		document.getElementById(eval("raizCapa + i")).style.display = "none";
		
	//se muestra la capa seleccionada
	document.getElementById(idCapa).style.display = "block";
}


/*
*	NOMBRE			cambiarValor
*
*	DESCRIPCION		Función que cambia el valor de un campo.
*
*	ENTRADA			campo: 		campo del cual queremos cambiar el valor.
*					valor:		nuevo valor del campo.
*
*	LLAMADA			La llamada a la función se realiza en un evento de un campo, por ej:
*						onchange="cambiarValor('document.frmPrueba.campo', '1')"
*
*/

function cambiarValor(campo, valor)
{
	eval(campo + ".value = '" + valor + "'");
}


/*
*
*	COMIENZO DE FUNCIONES PARA CAMBIAR LA DIVISA Y MOSTRAR U OCULTAR CAPAS EN TIPOS DE INTERES
*
*	DESCRIPCION:	en la subsección de Tipos de Interés, debe aparecer por defecto la pestaña de BIBM con los tipos de interés
*					de BIBM; al clicar en la pestaña de MERCADO MONETARIO se debe mostrar siempre primero el euribor,
*					a no ser que se cambie a la capa del Libor y se clicke en el combo, en cuyo caso,
*					deberá aparecer seleccionada la pestaña de MERCADO MONETARIO y éste mostrar los datos del LIBOR
*					con la divisa elegida.
*					En cuanto se vuelva al clickar en cualquier otro punto de la página,
*					el funcionamiento de las pestañas y las capas, vuelve a ser el del principio.
*
*/

/*
*
*	NOMBRE:			ordenCapaLibor
*
*	DESCRIPCION: 	pone en las capas de euribor y libor en su orden por defecto,
*					independientemente de cómo estuvieran antes.
*
*/
function ordenCapaLibor()
{
	document.getElementById("capaTipoInt1").style.display = "block";
	document.getElementById("capaTipoInt2").style.display = "none";	
	
}
/*
*
*	NOMBRE:			capaLiborNo
*
*	DESCRIPCION: 	inicializa la variable valorCapaLibor a cero.
*
*/
function capaLiborNo()
{
	document.frmCapaLibor.valorCapaLibor.value = "";	
}
/*
*
*	NOMBRE:			cambiaCapaLibor
*
*	DESCRIPCION: 	evalúa el valor de la variable valorCapaLibor,
*					para visualizar una capa u otra.
*
*/
function cambiaCapaLibor()
{
	if (document.frmCapaLibor.valorCapaLibor.value == "")
	{
		document.getElementById("capaTipoInt1").style.display = "block";
		document.getElementById("capaTipoInt2").style.display = "none";		
	}
	else
	{
		document.getElementById("capaTipoInt2").style.display = "block";				
		document.getElementById("capaTipoInt1").style.display = "none";
	}
}
/*
*
*	NOMBRE:			submitCapaLibor
*
*	DESCRIPCION: 	envía las variables del formulario del combo de divisas,
*					y además activa la variable valorCapaLibor para mostrar la capa del Libor.
*
*/
function submitCapaLibor()
{
	document.frmCapaLibor.valorCapaLibor.value = "si";		
	document.frmDivisas.submit();
}	
/*
*
*	FIN DE FUNCIONES PARA CAMBIAR LA DIVISA Y MOSTRAR U OCULTAR CAPAS EN TIPOS DE INTERES
*
*/




/*************** FUNCIONES PARA CARGAR LOS COMBOS DE NOTICIAS ********************/

/*
*	NOMBRE			cambiarMercado
*
*	DESCRIPCION		Función que carga un combo con los valores de un indice.
*
*	ENTRADA			mercado: 		la opción seleccionada del combo de mercado.
*					comboValores:	el combo donde cargo los valores de ese indice
*
*	LLAMADA			La llamada a la función se realiza de esta manera en el evento onchange de un combo:
*						onchange="cambiarMercado(this.options[selectedIndex].value, document.frmBuscNoticias.cmbValorNoticia)"
*
*/
function cambiarMercado(mercado, comboValores, valorSeleccionado) 
{
	var listaMercado;
	if (mercado != "")
		var nombreArray = 'array' + mercado;
	else
		var nombreArray = 'arrayVacio';
	listaMercado = eval(nombreArray);
	
	mostrarEmpresas(comboValores, listaMercado, valorSeleccionado);
}

/*
*	NOMBRE			mostrarEmpresas
*
*	DESCRIPCION		Función que carga un combo con los valores de un indice.
*
*	ENTRADA			seleccion: 		el combo donde cargo los valores de ese indice.
*					lista:			el combo que contiene los valores de ese indice.
*
*	LLAMADA			La llamada a la función se realiza desde la función cambiarMercado.
*
*/
function mostrarEmpresas(seleccion, lista, valorSeleccionado) 
{
	var c;
	seleccion.length = lista.length/2;
	var band=0;
	for (c=0; c < seleccion.length; c++) 
	{
		seleccion.options[c].value = lista[c*2+1];
		seleccion.options[c].text = lista[c*2];
		if (seleccion.options[c].value == valorSeleccionado && valorSeleccionado != '')
		{
			band=1;
			seleccion.selectedIndex=c;
		}
			
	}
	
	if(band == 0)
		seleccion.selectedIndex=0;
}
/***************************** FIN DE FUNCIONES PARA CARGAR LOS COMBOS DE NOTICIAS ***************************/




/*************** FUNCIONES PARA COMPROBAR LA BUSQUEDA DE NOTICIAS Y CAMBIO DE MODO *****************/


/*
*	NOMBRE			cambiaModoYComprueba()
*
*	DESCRIPCION		Función que comprueba en qué pestaña del buscador de noticias está
*					y llama a la función comprobadora de datos correctos que le corresponda´
*					además de cambiar la pestaña activa si es necesario.
*
*	LLAMADA			La llamada a la función se realiza desde <xsl:attribute name="onclick">return cambiaModoYComprueba();</xsl:attribute>.
*
*/
function cambiaModoYComprueba()
{
	if(document.getElementById("pestBuscNoticias1").className == "pestGraficaSel")
	{
		document.frmBuscNoticias.modoBusqueda.value = "mercadoValor";
		return comprobarFechaBuscador(document.frmBuscNoticias,document.frmBuscNoticias.introFechaCorrec);
		
	}
	else
	{
		document.frmBuscNoticias.modoBusqueda.value = "palabra";
		return comprobarBusqueda(document.frmBuscNoticias.txtPalabraBusc,document.frmBuscNoticias.introAlgo);
	}
}




/*
*	NOMBRE			comprobarBusqueda
*
*	DESCRIPCION		Función que comprueba si el campo que se le pasa tiene algo, y si es así devuelve true. En caso contrario, lanza un mensaje.
*
*	ENTRADA			campoTexto:		campo de texto donde se introduce la búsqueda
*					campoMensaje:	campo oculto que contiene el mensaje.

*
*	LLAMADA			La llamada a la función se puede realizar desde un evento de un campo, o desde otra función, por ej:
*						return comprobarBusqueda(document.frmFormulario.txtCampo, document.frmBuscNoticias.introAlgo)
*
*/
function comprobarBusqueda(campoTexto, mensaje)
{
	if (campoTexto.value == '')
	{
		var mensaje2 = mensaje.value;
		alert (mensaje2);
		return false;
	}
	else
	{
		return true;	
	}
}



/*
*	NOMBRE			comprobarDosBusquedas
*
*	DESCRIPCION		Función que comprueba si los campos que se le pasa tienen contenido. Si no lo tienen ninguno de los dos, lanza un mensaje.
*
*	ENTRADA			campoTextoUno:		primer campo de texto donde se introduce la búsqueda
*					campoTextoDos:		segundo campo de texto donde se introduce la búsqueda
*					campoMensaje:		campo oculto que contiene el mensaje.

*
*	LLAMADA			La llamada a la función se puede realizar desde un evento de un campo, o desde otra función, por ej:
*					return comprobarDosBusquedas(document.frmAlertasBuscador.txtNombreBuscAlertas, document.frmAlertasBuscador.txtIsinBuscAlertas, document.frmCompruebaMensaje.mensaje);
*
*/
function comprobarDosBusquedas(campoTextoUno, campoTextoDos, mensaje)
{
	if ((campoTextoUno.value == '') && (campoTextoDos.value == ''))
	{
		var mensaje2 = mensaje.value;
		alert (mensaje2);
		return false;
	}
	else
	{
		return true;	
	}
}


/*
*	NOMBRE			comprobarFechaBuscador
*
*	DESCRIPCION		Función que comprueba si dos fechas está en formato dd/mm/aaaa y si la primera fecha es menor que la segunda.
*
*	ENTRADA			form:			formulario donde están los campos de texto
*					campoMensaje:	campo oculto que contiene el mensaje.

*
*	LLAMADA			La llamada a la función se puede realizar desde un evento de un campo, o desde otra función, por ej:
*						return comprobarBusqueda(document.frmFormulario.txtCampo, document.frmBuscNoticias.introAlgo)
*
*/
function comprobarFechaBuscador(form, mensaje)
{
	fecha1 = new String(form.txtDiaDsd.value + "/" + form.txtMesDsd.value + "/" + form.txtYearDsd.value);
	fecha2 = new String(form.txtDiaHst.value + "/" + form.txtMesHst.value + "/" + form.txtYearHst.value);
	
	if (validarFecha(fecha1) && validarFecha(fecha2))
	{
		//comprueba que la fecha desde es menor que la fecha hasta
		fecha1Flag = parseInt(fecha1.substring(fecha1.lastIndexOf("/")+1,fecha1.length) + fecha1.substring(fecha1.indexOf("/")+1,fecha1.lastIndexOf("/")) + fecha1.substring(0,fecha1.indexOf("/")));
		fecha2Flag = parseInt(fecha2.substring(fecha2.lastIndexOf("/")+1,fecha2.length) + fecha2.substring(fecha2.indexOf("/")+1,fecha2.lastIndexOf("/")) + fecha2.substring(0,fecha2.indexOf("/")));
		if(fecha2Flag < fecha1Flag)
		{
			alert (mensaje.value);
			return false;
		}
		return true;
	}
	else
	{
		/*if(fecha1 == 'DD/MM/AAAA' && fecha2 == 'DD/MM/AAAA')
		{
			return true;
		}*/
		alert(mensaje.value);
		return false;
	}

}


/*
*	NOMBRE			compruebaAlertaYEnvia
*
*	DESCRIPCION		Función para validar el formato del valor de la alerta y enviar el formulario con un cambio de variable.
*
*	ENTRADA			formulario:		nombre del formulario.
*					campo:			campo que se ha de evaluar.
*					mensaje:		mensaje para el alert.
*					cambio:			campo de la variable que se va cambiar.
*
*	LLAMADA			<xsl:attribute name="onclick">compruebaAlertaYEnvia(document.frmEditarAlerta, document.frmEditarAlerta.numValorAlerta, document.frmCompruebaMensaje.mensaje, document.frmEditarAlerta.operacion);</xsl:attribute>
*
*/
function compruebaAlertaYEnvia(campo, mensaje, mensaje2, mensaje3, fecha1, fecha2)
{
	if (validarCampo(campo))
	{
		alert(mensaje.value);
		return false;
	}
	else
	{

		if (!IsNum(campo.value))
		{
			alert(mensaje.value);
			return false;
		}
		else
		{
			if (validarFecha(fecha1) && validarFecha(fecha2))
			{
				//comprueba que la fecha desde es menor que la fecha hasta
				fecha1Flag = parseInt(fecha1.substring(fecha1.lastIndexOf("/")+1,fecha1.length) + fecha1.substring(fecha1.indexOf("/")+1,fecha1.lastIndexOf("/")) + fecha1.substring(0,fecha1.indexOf("/")));
				fecha2Flag = parseInt(fecha2.substring(fecha2.lastIndexOf("/")+1,fecha2.length) + fecha2.substring(fecha2.indexOf("/")+1,fecha2.lastIndexOf("/")) + fecha2.substring(0,fecha2.indexOf("/")));
				if(fecha2Flag <= fecha1Flag)
				{
					alert (mensaje3.value);
					return false;
				}
			}
			else
			{
				alert(mensaje2.value);
				return false;
			}
			return true;
		}
	}
}




/********************* FIN DE LAS FUNCIONES PARA COMPROBAR LA BUSQUEDA DE NOTICIAS Y CAMBIO DE MODO ***********************/



/************************ INICIO DE LAS FUNCIONES PARA VALIDAR UN FORMULARIO ***********************/

/*
*	NOMBRE			validacion
*
*	DESCRIPCION		Función que recorre un formulario y valida sus campos. Si uno no es correcto, para la ejecución.
*					Los tipos que valida son:
*						- tipoObligatorio: comprueba si el campo está vacío o no
*						- tipoEmail: comprueba si el formato del email es correcto.
*						- tipoFecha: comprueba si el formato de la fecha es válido dd/mm/aaaa
*						- tipoNumerico: comprueba si es un valor numérico.
*						- tipoContrasena: comprueba si la contraseña tiene 4 dígitos com mínimo.
*						- tipoRepetido: comprueba si un campo es igual al anterior.
*						- tipoCP: comprueba si el valor es numérico y tiene 5 dígitos.
*
*	ENTRADA			form: nombre del formulario.
*					form: nombre del formulario donde tiene definidos los mensajes.
*
*	LLAMADA			La llamada a la función se realiza desde un evento de una campo, por ej:
*						<a href="#" class="textoCentrado" onclick="return validacion(document.frmCreditoHipotecario, document.frmMensajes);">
*
*					Los campos a validar deben tener el siguiente formato:
*						<input type="text" name="txtEmail" id="txtEmail" class="correoValido tipoObligatorio tipoEmail cartera200"/>
*						es decir, en el evento class:
*							- correoValido: primero el nombre del campo oculto que contiene el mensaje a mostrar
*							- tipoObligatorio: si el campo es obligatorio
*							- tipoEmail, tipoFecha, tipoNumerico, ... el tipo del que sea el campo
*							- cartera200: el estilo que tenga ese campo
*					Si el campo no es obligatorio, se valida sólo en el caso de que hayamos introducido algo en él.
*
*/
function validacion(form, formMensajes)
{
	var i=0;
	for(i=0; i<form.length; i++)
	{
		if(form.elements[i].className.indexOf('tipoObligatorio')!=-1)	//comprobamos si hay que validar este campo o no
		{
		   if(validarCampo(form.elements[i]))
		   {
			   	var mensaje = form.elements[i].className.substring(0,form.elements[i].className.indexOf(' '));
				alert(eval("formMensajes."+mensaje+".value"));
				if(form.elements[2].className.indexOf('tipoOculto')!=-1)
					form.elements[i].focus();
				return false;
		   }
	   	}//if
	   	if(form.elements[i].className.indexOf('tipoEmail')!=-1)	//comprobamos si hay que validar este campo como tipo email
		{
		   if(!comprobarEmail(form.elements[i]))
		   {
				var mensaje = form.elements[i].className.substring(0,form.elements[i].className.indexOf(' '));
				alert(eval("formMensajes."+mensaje+".value"));
				form.elements[i].focus();
				return false;
		   }
	   	}//if
		if(form.elements[i].className.indexOf('tipoRepetido')!=-1)	//comprobamos si hay que validar este campo como tipo email
		{
		   if(validarCampoRep(form.elements[i-1], form.elements[i]))
		   {
				var mensaje = form.elements[i].className.substring(0,form.elements[i].className.indexOf(' '));
				alert(eval("formMensajes."+mensaje+".value"));
				form.elements[i].focus();
				return false;
		   }
	   	}//if	
		if(form.elements[i].className.indexOf('tipoFecha')!=-1)	//comprobamos si hay que validar este campo como tipo fecha
		{
		   if(validarFecha(form.elements[i]))
		   {
				var mensaje = form.elements[i].className.substring(0,form.elements[i].className.indexOf(' '));
				alert(eval("formMensajes."+mensaje+".value"));
				form.elements[i].focus();
				return false;
		   }
	   	}//if
		if(form.elements[i].className.indexOf('tipoNumerico')!=-1)	//comprobamos si hay que validar este campo como tipo numérico
		{
		   if(esNumerico(form.elements[i]))
		   {
				var mensaje = form.elements[i].className.substring(0,form.elements[i].className.indexOf(' '));
				alert(eval("formMensajes."+mensaje+".value"));
				form.elements[i].focus();
				return false;
		   }
	   	}//if
		if(form.elements[i].className.indexOf('tipoContrasena')!=-1)	//comprobamos si hay que validar este campo como contraseña
		{			
		   if(validarContrasena(form.elements[i]))
		   {
				var mensaje = form.elements[i].className.substring(0,form.elements[i].className.indexOf(' '));
				alert(eval("formMensajes."+mensaje+".value"));
				form.elements[i].focus();
				return false;
		   }
	   	}//if
		if(form.elements[i].className.indexOf('tipoRepetido')!=-1)	//comprobamos si hay que validar este campo como cointraseña repetida
		{
		   if(validarCampoRep(form.elements[i-1], form.elements[i]))
		   {
				var mensaje = form.elements[i].className.substring(0,form.elements[i].className.indexOf(' '));
				alert(eval("formMensajes."+mensaje+".value"));
				form.elements[i].focus();
				return false;
		   }
	   	}//if
		if(form.elements[i].className.indexOf('tipoCP')!=-1)	//comprobamos si hay que validar este campo como codigo postal
		{
			if(validarCodigoPostal(form.elements[i]))
		  	{
				var mensaje = form.elements[i].className.substring(0,form.elements[i].className.indexOf(' '));
				alert(eval("formMensajes."+mensaje+".value"));
				form.elements[i].focus();
				return false;
		   	}
	   	}//if
		if(form.elements[i].className.indexOf('tipoCheck')!=-1)	//comprobamos si es un checkbox y debe estar seleccionado
		{
			if(validarCheckBox(form.elements[i]))
		  	{
				var mensaje = form.elements[i].className.substring(0,form.elements[i].className.indexOf(' '));
				alert(eval("formMensajes."+mensaje+".value"));
				form.elements[i].focus();
				return false;
		   	}
	   	}//if		
   }//for
   return true;
}

/*
*	NOMBRE			validarCheckBox
*
*	DESCRIPCION		Función que comprueba si un checkbox está seleccionado o no.
*
*	ENTRADA			check: nombre del campo que contiene el valor que queremos comprobar.
*
*	SALIDA			return true : si no está seleccionado
*					return false : si está seleccionado
*
*	LLAMADA			La llamada a la función se puede realizar desde un evento de un campo, o desde otra función, por ej:
*						esNumerico(form.chkNumerico)
*
*/
function validarCheckBox(check)
{
	if (!check.checked)
		return true;
	return false;
}

/*
*	NOMBRE			validarCampo
*
*	DESCRIPCION		Función que comprueba si un valor es vacío o no.
*
*	ENTRADA			valor: nombre del campo que contiene el valor que queremos comprobar.
*
*	SALIDA			return true : si es vacío
*					return false : si no es vacío
*
*	LLAMADA			La llamada a la función se puede realizar desde un evento de un campo, o desde otra función, por ej:
*						esNumerico(form.txtNumerico)
*
*/
function validarCampo(campo)
{
	if(campo.value == '')
		return true;
	else
		return false;
}

/*
*	NOMBRE			comprobarEmail
*
*	DESCRIPCION		Función que comprueba si introduce un email válido.
*
*	ENTRADA			theElement: nombre del campo que contiene el email.
*
*	SALIDA			return true : si es un email válido
*					return false : si no es un email válido
*
*	LLAMADA			La llamada a la función se puede realizar desde un evento de un campo, o desde otra función, por ej:
*						comprobarEmail(form.txtEmail)
*
*/

function comprobarEmail(campo)
{
	if (!validarCampo(campo))
	{
		var s = campo.value;
		var filter=/^[A-Za-z][A-Za-z0-9_.]*@[A-Za-z0-9_]+\.[A-Za-z0-9_.]+[A-Za-z]$/;
		if (s == '' )
			return false;
		if (filter.test(s))	
			return true;
	}
	return false;
}

/*
*	NOMBRE			ISNum
*
*	DESCRIPCION		Comprueba que una cadena determinada sea un número.
*					Formato entrada: ####.##
*
*	ENTRADA			Cadena:		Valor de un campo de formulario que se va a comprobar si es de un formato numérico Válido.
*
*/
function IsNum(numstr) {
	// Return immediately if an invalid value was passed in
	if (numstr+"" == "undefined" || numstr+"" == "null" || numstr+"" == "")
		return false;
	
	var isValid = true;
	var decCount = 0; // number of decimal points in the string
	
	numstr += "";
		
	for (i = 0; i < numstr.length; i++)
	{
		// track number of decimal points
		if (numstr.charAt(i) == ".")
			decCount++;
	
		if (!((numstr.charAt(i) >= "0") && (numstr.charAt(i) <= "9") ||	(numstr.charAt(i) == "-") || (numstr.charAt(i) == "."))) 
		{
			isValid = false;
			break;
		} 
		else if ((numstr.charAt(i) == "-" && i != 0) ||	(numstr.charAt(i) == "." && numstr.length == 1) ||	(numstr.charAt(i) == "." && decCount > 1))
		{
			isValid = false;
			break;
		}

	} // END for
	
	return isValid;
} // end IsNum


/*
*	NOMBRE			validarFecha
*
*	DESCRIPCION		Función que comprueba si una fecha está en formato dd/mm/aaaa. Se debe pasar la cadena de la fecha y devuelve false si no es válida.
*
*	ENTRADA			Cadena:		cadena de texto.
*
*/
function validarFecha(Cadena)
{

	var Fecha= new String(Cadena); // Crea un string
	var RealFecha= new Date(); // Para sacar la fecha de hoy

	// Cadena Año
	var Ano= new String(Fecha.substring(Fecha.lastIndexOf("/")+1,Fecha.length));

	// Cadena Mes
	var Mes= new String(Fecha.substring(Fecha.indexOf("/")+1,Fecha.lastIndexOf("/")));

	// Cadena Día
	var Dia= new String(Fecha.substring(0,Fecha.indexOf("/")));

	//alert(Ano + "-" + Mes + "-" + Dia);

	// Se valida el año
	//if (isNaN(Ano) || Ano.length<4 || parseFloat(Ano)<1900)
	if (isNaN(Ano) || Ano.length<2 || Ano.length>4)
	{
	//alert('Año inválido.\nFormato:dd/mm/aaaa');
	  return false;
	}

	// se valida el Mes
	if (isNaN(Mes) || parseFloat(Mes)<1 || parseFloat(Mes)>12 || Mes.length<2 || Mes.length>2)
	{
		//alert('Mes inválido.\nFormato:dd/mm/aaaa');
		return false;

	}

	// se valida el Dia
	if (isNaN(Dia) || parseInt(Dia, 10)<1 || parseInt(Dia, 10)>31 || Dia.length<2 || Dia.length>2)
	{
		//alert('Día inválido.\nFormato:dd/mm/aaaa');
		return false;
	}

	if (Mes==4 || Mes==6 || Mes==9 || Mes==11 || Mes==2)
	{
		if (Mes==2 && Dia > 28 || Dia > 30)
		{
		   //alert('Día inválido.\nFormato:dd/mm/aaaa');

		   return false;
		}
	}
  //para que envie los datos, quitar las  2 lineas siguientes

  //alert("Fecha correcta.");

  return true;      
}


/*
*	NOMBRE			esNumerico
*
*	DESCRIPCION		Función que comprueba si un valor es numérico.
*
*	ENTRADA			valor: nombre del campo que contiene el valor que queremos comprobar.
*
*	SALIDA			return true : si es numérico
*					return false : si no es numérico
*
*	LLAMADA			La llamada a la función se puede realizar desde un evento de un campo, o desde otra función, por ej:
*						esNumerico(form.txtNumerico)
*
*/

function esNumerico(valor) 
{
	if (!validarCampo(valor))
		return (isNaN(valor.value));
}


/*
*	NOMBRE			validarContrasena
*
*	DESCRIPCION		Función que comprueba si un campo tiene como mínimo cuatro dígitos y como maximo 12 y que solo tenga los caracteres: a-zA-Z0-9-_
*
*	ENTRADA			pass: nombre del campo que contiene el valor que queremos comprobar.
*
*	SALIDA			return true : si no es una contraseña
*					return false : si es una contraseña
*
*	LLAMADA			La llamada a la función se puede realizar desde un evento de un campo, o desde otra función, por ej:
*						validarContrasena(form.txtNumerico)
*
*/
function validarContrasena(pass)
{
	if (!validarCampo(pass))
	{
		var filter=/^[A-Za-z0-9_-]{4,12}$/;
		if (!pass.value.match(filter))
			return true;
	}
	return false;
}

/*
*	NOMBRE			validarCampoRep
*
*	DESCRIPCION		Función que comprueba si un campo es igual al campo anterior que hay en el formulario.
*
*	ENTRADA			pass: nombre del campo que contiene el valor que queremos comprobar.
*
*	SALIDA			return true : si no son iguales
*					return false : si son iguales
*
*	LLAMADA			La llamada a la función se puede realizar desde un evento de un campo, o desde otra función, por ej:
*						validarContrasena(form.txtPass, form.txtPassRep)
*
*/
function validarCampoRep(campo, campoRep)
{
	if (campo.value != campoRep.value)
		return true;
	return false;
}


/*
*	NOMBRE			validarCodigoPostal
*
*	DESCRIPCION		Función que comprueba si un campo es numérico y contiene 5 dígitos (es un CP).
*
*	ENTRADA			codigo: nombre del campo que contiene el valor que queremos comprobar.
*
*	SALIDA			return true : si no es un CP
*					return false : si es un CP
*
*	LLAMADA			La llamada a la función se puede realizar desde un evento de un campo, o desde otra función, por ej:
*						validarCodigoPostal(form.txtNumerico)
*
*/

function validarCodigoPostal(codigo)
{
	if (!validarCampo(codigo))
	{
		if (!esNumerico(codigo.value))
			return true;
		if (codigo.value.length != 5)
			return true;
	}
	return false;
}


/************************ FIN DE LAS FUNCIONES PARA VALIDAR UN FORMULARIO **************************/






/*
*	NOMBRE			ticker_start
*
*	DESCRIPCION		Función utilizada para el ticker.
*
*	ENTRADA			tick:		id de la capa que contiene el ticker.
*					velocidad:	velocidad con la que pasará el ticker.
*
*/
function ticker_start(tick, velocidad)
{	
	TICKER_CONTENT = document.getElementById(tick).innerHTML;
 	TICKER_RIGHTTOLEFT = false;
	TICKER_SPEED = 2;
	TICKER_STYLE = "font-family:Arial; font-size:12px; color:#444444";
	TICKER_PAUSED = false;

		
	var tickerSupported = false;
	TICKER_WIDTH = document.getElementById(tick).scrollWidth;
 	var img = "<img src='../imagenes/px.gif' width="+TICKER_WIDTH+" height=0 />";

 	// Firefox
 	if (navigator.userAgent.indexOf("Firefox")!=-1 || navigator.userAgent.indexOf("Safari")!=-1)
	{
		document.getElementById(tick).innerHTML = "<TABLE cellspacing='0' cellpadding='0' width='100%'><TR><TD nowrap='nowrap'>"+img+"<SPAN style='"+TICKER_STYLE+"' ID='TICKER_BODY' width='100%'>&nbsp;</SPAN>"+img+"</TD></TR></TABLE>";
		tickerSupported = true;
 	}
	// IE
	if (navigator.userAgent.indexOf("MSIE")!=-1 && navigator.userAgent.indexOf("Opera")==-1)
	{
		document.getElementById(tick).innerHTML = "<DIV nowrap='nowrap' style='width:100%;'>"+img+"<SPAN style='"+TICKER_STYLE+"' ID='TICKER_BODY' width='100%'></SPAN>"+img+"</DIV>";
		tickerSupported = true;
	}
	if(!tickerSupported) document.getElementById(tick).outerHTML = ""; 
	else
	{
		document.getElementById(tick).scrollLeft = TICKER_RIGHTTOLEFT ? document.getElementById(tick).scrollWidth - document.getElementById(tick).offsetWidth : 0;
		document.getElementById("TICKER_BODY").innerHTML = TICKER_CONTENT;
		document.getElementById(tick).style.display="block";
		TICKER_tick(tick, velocidad);
	}
}


function TICKER_tick(tick, velocidad)
{
	if(!TICKER_PAUSED) document.getElementById(tick).scrollLeft += TICKER_SPEED * (TICKER_RIGHTTOLEFT ? -1 : 1);

	if(TICKER_RIGHTTOLEFT && document.getElementById(tick).scrollLeft <= 0)
	{
		document.getElementById(tick).scrollLeft = document.getElementById(tick).scrollWidth - document.getElementById(tick).offsetWidth;
	}

	if(!TICKER_RIGHTTOLEFT && document.getElementById(tick).scrollLeft >= document.getElementById(tick).scrollWidth - document.getElementById(tick).offsetWidth)
	{
		document.getElementById(tick).scrollLeft = 0;
	}
	window.setTimeout("TICKER_tick('"+tick+"',"+ velocidad+")", velocidad);
}


function ticker_start2(tick, velocidad)
{	
	TICKER_CONTENT2 = document.getElementById(tick).innerHTML;
 	TICKER_RIGHTTOLEFT2 = false;
	TICKER_SPEED2 = 2;
	TICKER_STYLE2 = "font-family:Arial; font-size:12px; color:#444444";
	TICKER_PAUSED2 = false;

		
	var tickerSupported = false;
	TICKER_WIDTH2 = document.getElementById(tick).scrollWidth;
 	var img = "<img src='../imagenes/px.gif' width="+TICKER_WIDTH2+" height=0 />";

 	// Firefox
 	if (navigator.userAgent.indexOf("Firefox")!=-1 || navigator.userAgent.indexOf("Safari")!=-1)
	{
		document.getElementById(tick).innerHTML = "<TABLE cellspacing='0' cellpadding='0' width='100%'><TR><TD nowrap='nowrap'>"+img+"<SPAN style='"+TICKER_STYLE2+"' ID='TICKER_BODY2' width='100%'>&nbsp;</SPAN>"+img+"</TD></TR></TABLE>";
		tickerSupported = true;
 	}
	// IE
	if (navigator.userAgent.indexOf("MSIE")!=-1 && navigator.userAgent.indexOf("Opera")==-1)
	{
		document.getElementById(tick).innerHTML = "<DIV nowrap='nowrap' style='width:100%;'>"+img+"<SPAN style='"+TICKER_STYLE2+"' ID='TICKER_BODY2' width='100%'></SPAN>"+img+"</DIV>";
		tickerSupported = true;
	}
	if(!tickerSupported) document.getElementById(tick).outerHTML = ""; 
	else
	{
		document.getElementById(tick).scrollLeft = TICKER_RIGHTTOLEFT2 ? document.getElementById(tick).scrollWidth - document.getElementById(tick).offsetWidth : 0;
		document.getElementById("TICKER_BODY2").innerHTML = TICKER_CONTENT2;
		document.getElementById(tick).style.display="block";
		TICKER_tick2(tick, velocidad);
	}
}


function TICKER_tick2(tick, velocidad)
{
	if(!TICKER_PAUSED2) document.getElementById(tick).scrollLeft += TICKER_SPEED2 * (TICKER_RIGHTTOLEFT2 ? -1 : 1);

	if(TICKER_RIGHTTOLEFT2 && document.getElementById(tick).scrollLeft <= 0)
	{
		document.getElementById(tick).scrollLeft = document.getElementById(tick).scrollWidth - document.getElementById(tick).offsetWidth;
	}

	if(!TICKER_RIGHTTOLEFT2 && document.getElementById(tick).scrollLeft >= document.getElementById(tick).scrollWidth - document.getElementById(tick).offsetWidth)
	{
		document.getElementById(tick).scrollLeft = 0;
	}
	window.setTimeout("TICKER_tick2('"+tick+"',"+ velocidad+")", velocidad);
}






/************************ INICIO DE LAS FUNCIONES PARA CARTERAS **************************/


	var navegador = navigator.appName;

	/*	
	Abre la ventana de nueva compra de insrumento.
	*/
	function nuevaCompra(accion,param,mensaje)
	{
		//var saldo = document.frmCartera.saldoDisponible.value;
		
		/*if (saldo > 0)
		{*/

			var url = "index.php?seccion=carteraVirtualBuscador&popup=si&accion=" + accion + param;
	
			if (navegador == "Microsoft Internet Explorer")
				//abrirVentana(url,280,360);			//(url,alto,ancho)
				//else abrirVentana(url,280,475);		//(url,alto,ancho)
				abrirVentana(url,350,550, 'no', 'no') 
			else abrirVentana(url,350,550, 'no', 'no') 
		/*}
		else
			alert (mensaje.value);*/
		
	}



	/*	
	Abre la ventana para realizar la compra / venta de un instrumento ya en cartera.
	*/
	/**/
	function comprarVender(accion,codigo,titulos,param)
	{
		/*var saldo = document.frmCartera.saldoDisponible.value;		
		var mensajeCompraVenta = document.frmCartera.hdnMensajeCash.value;*/
	
		/*if ((saldo <= 0) && (accion == 'C'))
			alert (mensajeCompraVenta);
		else
		{*/
			var url = "index.php?seccion=carteraVirtualBuscador&popup=si&accion="+accion+"&codigo="+codigo+"&titulos="+titulos+param;
			if (navegador == "Microsoft Internet Explorer")
				//abrirVentana(url,280,360);			//(url,alto,ancho)
			//else abrirVentana(url,280,475);		//(url,alto,ancho)
				abrirVentana(url,350,550, 'no', 'no')
			else abrirVentana(url,350,550, 'no', 'no')
		//}
	}
	
	
	/*	
	Abre la ventana para realizar actualizacion/borrar/insercion de una cartera.
	*/
	/**/
	function gestionCartera(accion,param,nombreCartera,idCartera)
	{

		var url = "index.php?seccion=carteraVirtualGestion&popup=si&accion=" + accion + "&nombreCartera=" + nombreCartera + "&idCartera=" + idCartera + param;

		if (navegador == "Microsoft Internet Explorer")
			//abrirVentana(url,280,360);			//(url,alto,ancho)
			//else abrirVentana(url,280,475);		//(url,alto,ancho)
			abrirVentana(url,300,450, 'no', 'no') 
		else abrirVentana(url,300,450, 'no', 'no') 
		
	}
	
	function mostrarCartera(nombreCartera,idCartera)
	{
		document.getElementById("nombreCartera").value = nombreCartera;
		document.getElementById("idCartera").value = idCartera;
		document.frmCarteraListado.submit();
	}
	
	
	function validaCartera(form)
	{
		var nombreCartera = form.nombreCartera.value;
		var tamanioNombre = form.nombreCartera.value.length;
		
		/* valida caracteras de la A-Z mayuscula y minuscula,
		   numeros, barra baja, puntos y tildes. */
		var patronValidacion = /^[a-zA-Z0-9 ._ñáéíóúÁÉÍÓÚñÑ]*$/;
	
		if ( (nombreCartera!='') && (tamanioNombre<=50) && (nombreCartera.match(patronValidacion)) )
		{
			
			//alert("correcta");
			form.submit();
			return true;
		}
		else
		{
			alert(form.txtError.value);
			return false;
		}
	}

/************************ FINAL DE LAS FUNCIONES PARA CARTERAS **************************/


/*
*
*	COMIENZO DE FUNCIONES PARA MANTENER LA PESTAÑA DEL BUSCADOR EN LA SECCION DE ALERTAS
*
*	DESCRIPCION:	en la sección de Alertas, debe aparecer por defecto la pestaña de Alertas con el listado
*					de alertas editadas; si en la pestaña de búsqueda, se clicka en 'buscar',
*					debe aparecer la misma página con la pestaña buscador seleccionada,
*					y con el listado de acciones encontradas por el buscador.
*
*/

/*
*
*	NOMBRE:			ordenCapaBuscAlertas
*
*	DESCRIPCION: 	pone el contenido de las capas en su orden por defecto.
*
*/
function ordenCapaBuscAlertas()
{
	document.getElementById("alertas1").style.display = "block";
	document.getElementById("alertas2").style.display = "none";	
	
}
/*
*
*	NOMBRE:			capaBuscAlertasNo
*
*	DESCRIPCION: 	inicializa la variable valorCapaBuscAlertas a cero: ($pestanaBusc = '').
*
*/
function capaBuscAlertasNo()
{
	document.frmCapaBuscAlertas.pestanaBusc.value = "";
}
/*
*
*	NOMBRE:			cambiaCapaBuscAlertas
*
*	DESCRIPCION: 	evalúa el valor de la variable valorCapaBuscAlertas,
*					para visualizar una capa u otra.
*
*/
function cambiaCapaBuscAlertas()
{
	if (document.frmCapaBuscAlertas.pestanaBusc.value == "")
	{
		document.getElementById("alertas1").style.display = "block";
		document.getElementById("alertas2").style.display = "none";		
	}
	else
	{
		document.getElementById("alertas2").style.display = "block";				
		document.getElementById("alertas1").style.display = "none";
	}
}
/*
*
*	NOMBRE:			submitCapaBuscAlertas
*
*	DESCRIPCION: 	envía las variables del formulario frmAlertasBuscador,
*					y además activa la variable valorCapaBuscAlertas ($pestanaBusc = 'si')
*					para mostrar la capa del buscador de alertas.
*					Envía el formulario del buscador de alertas (frmAlertasBuscador).
*
*/
function submitCapaBuscAlertas()
{
	document.frmCapaBuscAlertas.pestanaBusc.value = "si";
	document.frmAlertasBuscador.submit();
}	
/*
*
*	FIN DE FUNCIONES PARA MANTENER LA PESTAÑA DEL BUSCADOR EN LA SECCION DE ALERTAS
*
*/





/*
*
*	NOMBRE			recargarPagina
*
*	DESCRIPCION		Función para recargar la pagina madre del popup, y cierra el popup;
*
*	ENTRADA			urlMadre:	url de lapagina madre
*
*	LLAMADA			recargarPagina('index.php?seccion=alertas&amp;idioma=<xsl:value-of select="$idioma" />&amp;pestanaBusc=si&amp;resultadoBusc=1&amp;contBuscAlertas=<xsl:value-of select="$contBuscAlertas" />&amp;inferior=<xsl:value-of select="$inferior" />
*
*/

function recargarPagina(urlMadre)
{
	//alert(urlMadre);
	window.opener.location.href = urlMadre;
	window.close();
}


/*
*
*	NOMBRE			decimales
*
*	DESCRIPCION		Función que nos permite formatear la salida de un número al formato que queramos.
*
*	ENTRADA			num:		número que queremos formatear
*					prefix:		prefijo si queremos introducir algo por delante
*
*	LLAMADA			formatNumber(5, '$');
*
*/
function formatNumber(num,prefix)
{
	prefix = prefix || '';
	num += '';
	var splitStr = num.split('.');
	var splitLeft = splitStr[0];
	var splitRight = splitStr.length > 1 ? ',' + splitStr[1] : '';
	var regx = /(\d+)(\d{3})/;
	while (regx.test(splitLeft))
		splitLeft = splitLeft.replace(regx, '$1' + '.' + '$2');
	
	return prefix + splitLeft + splitRight;
}




function completarUrlEnviar(formulario, ancla)
{
	/*var url = formulario.value + "#" + ancla;
	alert(url);
	url.submit();*/
	alert(formulario + "#" + ancla);
	formulario + "#" + ancla.submit();
}


/*
*
*	NOMBRE			comprobarTamano
*
*	DESCRIPCION		Función que comprueba si en un campo de textio se introducen un número determinado de caracteres.
*
*	ENTRADA			campo:		campo donde se introduce el texto.
*					mensaje:	mensaje de error.
*					tamano:		tamaño máximo permitido
*
*	LLAMADA			return comprobarTamano(document.frmEditarAlerta.txtTextoAdicional, document.frmCompruebaMensaje.mensajeTamanoMax, '10');
*
*/

function comprobarTamano(campo, mensaje, tamano)
{
	
	if(campo.value.length >= tamano)
	{
		alert(mensaje.value);
		return false;
	}

}


onkeydown="if(this.value.length >= 300){ alert('Has superado el tamaño máximo permitido'); return false; }"

/*
*
*	NOMBRE			cargaEstadistica
*
*	DESCRIPCION		Función que carga un php en una capa concreta sin recargar la página.
*
*	ENTRADA			url:		url del php que carga.
*					capa:		id de la capa donde se carga el php.
*
*	LLAMADA			cargaEstadistica('estadisticas.php?seccion=divisas&amp;subseccion=aba<xsl:call-template name="anadirEnlaces"/>', 'capaEstadisticasAba');
*
*/
function cargaEstadistica(url, capa)
{
	var estadisticas = document.getElementById(capa);
	var url2 = url;
	ajax=nuevoAjax();
	ajax.open("GET", url,true);
	ajax.onreadystatechange = function()
	{
		if(ajax.readyState==4)
		{
			if(ajax.status==200)
			{
				 //mostramos los datos dentro de la div
				 estadisticas.innerHTML = "";					 
				 estadisticas.innerHTML = ajax.responseText;
			}
			
		}
	 }
	ajax.send(null);
}


function nuevoAjax()
{ 
	var xmlhttp=false; 
	try 
	 { 
		// No IE
		xmlhttp=new ActiveXObject("Msxml2.XMLHTTP"); 
	 }
	catch(e)
	 { 
		try
		 { 
			// IE 
			xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
		 } 
		catch(E) 
		 { 
		 	xmlhttp=false; 
		 }
	 }
	if (!xmlhttp && typeof XMLHttpRequest!="undefined") 
	 { 
	 	xmlhttp=new XMLHttpRequest(); 
	 } 
	return xmlhttp; 
}



function comprobarAceptar()
{
	opener.document.frmRegistro.aceptarCondiciones.value = 'si'; 
	window.close();
}


function calcularDivisa()
{
	
	var resul = document.frmConversorDivisas.txtCantidad.value;

	if(isNaN(resul) || resul == '')
	{
		alert (document.frmConversorDivisas.alerta.value);
		return false;
	}
	else
	{
		
		var divisa1;
		var divisa2;
		var cantidad;
		var resultado;
		var i;
		var j;
		for(i=1; i<=6; i++)
		{
			for(j=1; j<=6; j++)
			{
				divisa2 = eval("document.frmConversorDivisas.div"+j+".value");
				divisa1 = eval("document.frmConversorDivisas.sel"+i+".value");
				
				cantidad = document.frmConversorDivisas.txtCantidad.value;
				resultado = divisa2/divisa1;
				resultado = resultado * cantidad;
				resultado = Math.round(10000*resultado)/10000;
				//eval("document.frmConversorDivisas.resultado"+i+j+".value = formatNumber(resultado)");
				
				eval("document.getElementById('resultado" + i+j + "').innerHTML=formatNumber(resultado)");
			}
		}
	}
	document.getElementById("tablaConversor").style.visibility="visible";
}
		
function activar(src)
{
	
	var fila = src.id.substring(5,6);
	var columna = src.id.substring(6,7);
	var celdafila = "celda" + fila + "0";
	var celdacolumna = "celda0" + columna;
	eval("document.getElementById('" + src.id + "').className='activarCasilla'");
	eval("document.getElementById('" + src.id + "').style.background='#DFF4FF';");			
									
	eval("document.getElementById('" + celdafila + "').className='activarCabeceraIzq'");
		
	eval("document.getElementById('" + celdacolumna + "').className='activarCabecera'");
}
		
		
function desactivar(src)
{
	var fila = src.id.substring(5,6);
	var columna = src.id.substring(6,7);
	var celdafila = "celda" + fila + "0";
	var celdacolumna = "celda0" + columna;
	
	if (fila < columna)
	{
		eval("document.getElementById('" + src.id + "').className='desactivarCasillaSuperior'");
		eval("document.getElementById('" + src.id + "').style.background='white';");
	}
	else
	{
		if (fila > columna)
		{
			eval("document.getElementById('" + src.id + "').className='desactivarCasillaInferior'");
			eval("document.getElementById('" + src.id + "').style.background='#EFEFEF';");
		}
	}
	if (fila == columna)
	{
		eval("document.getElementById('" + src.id + "').className='desactivarCasillaUnidad'")
		eval("document.getElementById('" + src.id + "').style.background='#FFF1CF';")
	}
	eval("document.getElementById('" + celdafila + "').className='desactivarCabeceraIzq'");
	eval("document.getElementById('" + celdacolumna + "').className='desactivarCabeceraSub'");
}
		

/*
*
*	NOMBRE			cargarLogin
*
*	DESCRIPCION		Función que carga un php en una capa concreta sin recargar la página. Sirve para recargar la opción de hacer un login o un logout.
*
*	ENTRADA			ruta:		url del php que carga.
*					seccion:	sección para componer la url.
*					idioma:		idioma para componer la url
*					rutaEnlace:	ruta de la página actual para componer el enlace que llevará el logout.
*
*	LLAMADA			cargarLogin("<xsl:value-of select='$rutaHttpIncludes'/>", "login", "<xsl:value-of select = '$idioma'/>", "<xsl:value-of select='$rutaLogin'/>");
*
*/
function cargarLogin(ruta, seccion, idioma, rutaEnlace)
{
	var rutaEnlace2 = rutaEnlace.replace('seccion','part');
	var url = ruta + "bibm/index.php?seccion=" + seccion + "&idioma=" + idioma + "&popup=si" + "&" + rutaEnlace2;
	cargarUrlLogin(url, 'cuerpo');
}


/*
*
*	NOMBRE			cargarUrlLogin
*
*	DESCRIPCION		Función que carga un php en una capa concreta sin recargar la página.
*
*	ENTRADA			url:		url del php que carga.
*					capa:		id de la capa donde se carga el php.
*
*	LLAMADA			cargarUrlLogin(url, 'cuerpo');
*
*/
function cargarUrlLogin(url, capa)
{
	var cuerpoLogin = document.getElementById(capa);
	
	var url2 = url;
	ajax2=nuevoAjax();
	ajax2.open("GET", url2,true);
	ajax2.onreadystatechange=function()
	{
		if(ajax2.readyState==1)
		{
			cuerpoLogin.innerHTML = "";
		}
		else 
			if(ajax2.readyState==4)
			{
				if(ajax2.status==200)
				{
					//mostramos los datos dentro de la div
					cuerpoLogin.innerHTML = '';					 
					cuerpoLogin.innerHTML = ajax2.responseText;					
				}
				else 
					if(ajax2.status==404)
					{
						cuerpoLogin.innerHTML = "No se pueden cargar los datos";
					}
					else
					{
						//mostramos el posible error
						cuerpoLogin.innerHTML = "Error:" + ajax2.status; 
					}
			}
	}
	ajax2.send(null);
}


/*
*
*	NOMBRE			cargarLoginNombre
*
*	DESCRIPCION		Función que carga un php en una capa concreta sin recargar la página. Sirve para recargar el nombre de un usuario registrado.
*
*	ENTRADA			ruta:		url del php que carga.
*					seccion:	sección para componer la url.
*					idioma:		idioma para componer la url
*
*	LLAMADA			cargarLoginNombre("<xsl:value-of select='$rutaHttpIncludes'/>", "loginNombre", "<xsl:value-of select = '$idioma'/>");
*
*/
function cargarLoginNombre(ruta, seccion, idioma)
{
	var url = ruta + "bibm/index.php?seccion=" + seccion + "&idioma=" + idioma  + "&popup=si";
	cargarUrlLoginNombre(url, 'cuerpoNombre');
}


/*
*
*	NOMBRE			cargarUrlLoginNombre
*
*	DESCRIPCION		Función que carga un php en una capa concreta sin recargar la página.
*
*	ENTRADA			url:		url del php que carga.
*					capa:		id de la capa donde se carga el php.
*
*	LLAMADA			cargarUrlLoginNombre(url, 'cuerpoNombre');
*
*/
function cargarUrlLoginNombre(url, capa)
{
	var cuerpoLogin = document.getElementById(capa);
	
	var url2 = url;
	ajax4=nuevoAjax();
	ajax4.open("GET", url2,true);
	ajax4.onreadystatechange=function()
	{
		if(ajax4.readyState==1)
		{
			cuerpoLogin.innerHTML = "";
		}
		else 
			if(ajax4.readyState==4)
			{
				if(ajax4.status==200)
				{
					//mostramos los datos dentro de la div
					cuerpoLogin.innerHTML = '';					 
					cuerpoLogin.innerHTML = ajax4.responseText;					
				}
				else 
					if(ajax4.status==404)
						cuerpoLogin.innerHTML = "No se pueden cargar los datos";
					else
						cuerpoLogin.innerHTML = "Error:" + ajax4.status; 
			}
	}
	ajax4.send(null);
}


/*
*
*	NOMBRE			cargarVisitados
*
*	DESCRIPCION		Función que carga un php en una capa concreta sin recargar la página. Sirve para recargar el apartado de últimos visitados.
*
*	ENTRADA			ruta:		url del php que carga.
*					seccion:	sección para componer la url.
*					idioma:		idioma para componer la url
*
*	LLAMADA			cargarVisitados("<xsl:value-of select='$rutaHttpIncludes'/>", "loginNombre", "<xsl:value-of select = '$idioma'/>");
*
*/
function cargarVisitados(ruta, seccion, idioma)
{
	var url = ruta + "bibm/index.php?seccion=" + seccion + "&idioma=" + idioma + "&popup=si";
	cargarUrlVisitados(url, 'cuerpoVisitados');
}


/*
*
*	NOMBRE			cargarUrlVisitados
*
*	DESCRIPCION		Función que carga un php en una capa concreta sin recargar la página.
*
*	ENTRADA			url:		url del php que carga.
*					capa:		id de la capa donde se carga el php.
*
*	LLAMADA			cargarUrlVisitados(url, 'cuerpoNombre');
*
*/
function cargarUrlVisitados(url, capa)
{
	var cuerpoLogin = document.getElementById(capa);
	
	var url2 = url;
	ajax3=nuevoAjax();
	ajax3.open("GET", url2,true);
	ajax3.onreadystatechange=function()
	{
		if(ajax3.readyState==1)
		{
			cuerpoLogin.innerHTML = "";
		}
		else 
			if(ajax3.readyState==4)
			{
				if(ajax3.status==200)
				{
					//mostramos los datos dentro de la div
					cuerpoLogin.innerHTML = '';					 
					cuerpoLogin.innerHTML = ajax3.responseText;					
				}
				else 
					if(ajax3.status==404)
						cuerpoLogin.innerHTML = "No se pueden cargar los datos";
					else
						cuerpoLogin.innerHTML = "Error:" + ajax3.status; 
			}
	}
	ajax3.send(null);
}