
////////////////////////////////////////////////////////////////////////////////////////////
// Las dos funciones siguientes permiten abrir una ventana emergente centrada en la pantalla

	function Centro(url,nompopup,popW,popH,scroll,resizable) 
	{
		w = screen.availWidth;
		h = screen.availHeight;
		var leftPos = (w-popW)/2, topPos = (h-popH)/2;
		window.open(url,nompopup,'width=' + popW + ',height=' + popH + ',top=' + topPos + ',left=' + leftPos + ',scrollbars=' + scroll + ',resizable=' + resizable );
	}
	
	function AbrirPopup(url,nombre,popW,popH,scroll) 
	{
		Centro(url,nombre,popW,popH,scroll,'no');
	}
	
////////////////////////////////////////////////////////////////////////////////////////////	
// Las siguientes funciones permiten generar contraseñas aleatorias

	function getRandomNum(lbound, ubound) 
	{
		return (Math.floor(Math.random() * (ubound - lbound)) + lbound);
	}
	
	function getRandomChar() 
	{
		var numeroCaracteres = "0123456789";
		var minusculaCaracteres = "abcdefghijklmnopqrstuvwxyz";
		var mayusculaCaracteres = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
		var Caractereset = "";
		Caractereset += numeroCaracteres;
		Caractereset += minusculaCaracteres;
		Caractereset += mayusculaCaracteres;
		return Caractereset.charAt(getRandomNum(0, Caractereset.length));
	}
	
	function getPassword() 
	{
		var longitud = 6;
		var rc = "";
		for (var idx = 0; idx < longitud; ++idx)
			rc = rc + getRandomChar();
		return rc;
	}

////////////////////////////////////////////////////////////////////////////////////////////	

function SonTodoEspacios(Cadena)
{
	// Necesita: Una variable de tipo String
	// Produce: Retorna True si todos los caracteres de la variable son espacios y False en caso contrario
	// Modifica: No modifica nada
	
	for (i = 0; i < Cadena.length; i++)
	{
		if (Cadena.charAt(i) != " ")
			return false;
	}
	return true;
}


function SonNumeros(Cadena)
{
	// Necesita: Una variable de tipo String
	// Produce: Retorna True si todos los caracteres de la variable son números y False en caso contrario
	// Modifica: No modifica nada
	
	var CaracteresNumeros = "0123456789";
	
	for (i = 0; i < Cadena.length; i++) 
	{ 
    	caracter = Cadena.charAt(i);
    	for (j = 0; j < CaracteresNumeros.length; j++) 
      		if (caracter == CaracteresNumeros.charAt(j))
        		break; 
    	if (j == CaracteresNumeros.length) 
			return false;
  	} 
	return true;
}


function ValidarTelefono(Cadena)
{
	// Necesita: Una variable de tipo String
	// Produce: Retorna True si la cadena tiene un formato de número de teléfono correcto y False en caso contrario 
	// Modifica: No modifica nada
	
	if (SonNumeros(Cadena) == false)
		return false;
	else
		if (Cadena.length != 9)
			return false;		
	return true;
}


function ValidarCorreoElectronico(Cadena)
{
	// Necesita: Una variable de tipo String
	// Produce: Retorna True si la cadena es una dirección de correo electrónico correcta y False en caso contrario
	// Modifica: No modifica nada

	var notallowed = " ;:!$%/()=?*";
	var emailStr = Cadena;
	var pos = emailStr.lastIndexOf("@"); 
	var pos2 = emailStr.lastIndexOf("."); 
		
	if ((pos <= 0) || (pos == emailStr.length - 1) || (pos2 <= 0) || (pos2 == emailStr.length - 1) || (pos2 <= pos + 2)) 
		return false;

	for (i=0; i < notallowed.length; i++) 
	{ 
		var pos = emailStr.indexOf( notallowed.charAt(i) ); 
		if (pos > -1) 
			return false;
	} 
	return true;
}


function ValidarUsuario(Cadena)
{
	// Necesita: Una variable de tipo String
	// Produce: Retorna True si la cadena está compuesta únicamente por los caracteres a-z,A-Z,0-9 ó _ y tiene una longitud 
	//			mínima de 4 caracteres (la longitud máxima se controla en el formulario) y False en caso contrario
	// Modifica: No modifica nada
	
	refnovalida = /[^A-Za-z0-9_]/ ; // expresión regular.
	
	if (Cadena.length < 4)
		return false;		

	if (refnovalida.test(Cadena))
		return false;

	return true;
}


function ValidarFecha(Cadena)
{
	// Necesita: Una variable de tipo String
	// Produce: Retorna True si la variable contiene una fecha válida en formato (dd/mm/aaaa) y False en caso contrario
	// Modifica: No modifica nada
	
    var fecha, mes, dia, anyo, febrero;
	
	fecha = Cadena

	//*********************************************//
    // Función para calcular si un año es bisiesto //
	//*********************************************//	
    function anyoBisiesto(anyo)
    {
        // Primera condicion: si el resto de dividir el año entre 4 no es cero entonces el año no es bisiesto,
        if (anyo % 4 != 0)
            return false;
        else
        {
            if (anyo % 100 == 0)
            {
                if (anyo % 400 == 0) // Si el año es divisible por 4 y por 100 y divisible por 400 entonces es bisiesto
                    return true;
                else // Si es divisible por 4 y por 100 pero no lo es por 400 entonces no es bisiesto
                    return false;
            }
            else // Si es divisible por 4 y no es divisible por 100 entonces el año es bisiesto
            {
                return true;
            }
        }
    }

	//*********************************************//
    // Función principal de validación de la fecha //
	//*********************************************//	

    // A partir de la cadena introducida separamos el dia, mes y año
    dia = fecha.split("/")[0];
    mes = fecha.split("/")[1];
    anyo = fecha.split("/")[2];
	
	// Se comprueba que la fecha introducida esté formada sólo por números
    if( (isNaN(dia)==true) || (isNaN(mes)==true) || (isNaN(anyo)==true) )
		return false;

    if(anyoBisiesto(anyo))
    	febrero = 29;
    else
        febrero = 28;
		
    // Se comprueba que el mes introducido no es negativo, 0 o mayor que 12 
    if ((mes<1) || (mes>12))
		return false;
		
	// Se comprueba que si el mes introducido es febrero, entonces que el dia no sea mayor que el correspondiente
    if ((mes==2) && ((dia<1) || (dia>febrero)))
    	return false;

    // Se comprueba que si el mes introducido es de 31 dias, entonces que el dia introducido no sea mayor de 31
    if (((mes==1) || (mes==3) || (mes==5) || (mes==7) || (mes==8) || (mes==10) || (mes==12)) && ((dia<1) || (dia>31)))
        return false;
	
    // Se comprueba que si el mes introducido es de 30 dias, entonces que el dia introducido no sea mayor de 30		
    if (((mes==4) || (mes==6) || (mes==9) || (mes==11)) && ((dia<1) || (dia>30)))
        return false;

	// Comprobamos que la fecha esté comprendida entre los años 1900 y 2100
    if ((anyo<1900) || (anyo>2100))
		return false;

	// Si todas las comprobaciones son correctas, devolvemos True
	return true;
};
