// JavaScript Document
/**
* script para validar fechas en una caja de texto.
*/

/**
* definimos las varables globales que van a contener la fecha completa, cada una de sus partes
* y los dias correspondientes al mes de febrero segun sea el año bisiesto o no
*/
var a, mes, dia, anyo, febrero;

/**
* funcion para comprobar si una año es bisiesto
* argumento anyo > año extraido de la fecha introducida por el usuario
*/
function anyoBisiesto(anyo)
{
/**
* si el año introducido es de dos cifras lo pasamos al periodo de 1900. Ejemplo: 25 > 1925
*/
if (anyo < 100)
var fin = anyo + 1900;
else
var fin = anyo ;

/*
* primera condicion: si el resto de dividir el año entre 4 no es cero > el año no es bisiesto
* es decir, obtenemos año modulo 4, teniendo que cumplirse anyo mod(4)=0 para bisiesto
*/
if (fin % 4 != 0)
return false;
else
{
if (fin % 100 == 0)
{
/**
* si el año es divisible por 4 y por 100 y divisible por 400 > es bisiesto
*/
if (fin % 400 == 0)
{
return true;
}
/**
* si es divisible por 4 y por 100 pero no lo es por 400 > no es bisiesto
*/
else
{
return false;
}
}
/**
* si es divisible por 4 y no es divisible por 100 > el año es bisiesto
*/
else
{
return true;
}
}
}

/**
* funcion principal de validacion de la fecha
* argumento fecha > cadena de texto de la fecha introducida por el usuario
*/
function validarDate()
{
/**
* obtenemos la fecha introducida y la separamos en dia, mes y año
*/
a=document.forms[0].txt_fechanacimiento.value;
dia=a.split("/")[0];
mes=a.split("/")[1];
anyo=a.split("/")[2];
if( (isNaN(dia)==true) || (isNaN(mes)==true) || (isNaN(anyo)==true) )
{
alert("Error en el Paso 1 : Respetar el formato de fecha . Por favor, introduzca una fecha correcta");
return false;
}
if(anyoBisiesto(anyo))
febrero=29;
else
febrero=28;
/**
* si el mes introducido es negativo, 0 o mayor que 12 > alertamos y detenemos ejecucion
*/
if ((mes<1) || (mes>12))
{
alert("Error en el Paso 1 : El mes introducido no es valido. Por favor, introduzca un mes correcto");
document.forms[0].txt_fechanacimiento.focus();
document.forms[0].txt_fechanacimiento.select();
return false;
}
/**
* si el mes introducido es febrero y el dia es mayor que el correspondiente 
* al año introducido > alertamos y detenemos ejecucion
*/
if ((mes==2) && ((dia<1) || (dia>febrero)))
{
alert("Error en el Paso 1 : El dia introducido no es valido. Por favor, introduzca un dia correcto");
document.forms[0].txt_fechanacimiento.focus();
document.forms[0].txt_fechanacimiento.select();
return false;
}
/**
* si el mes introducido es de 31 dias y el dia introducido es mayor de 31 > alertamos y detenemos ejecucion
*/
if (((mes==1) || (mes==3) || (mes==5) || (mes==7) || (mes==8) || (mes==10) || (mes==12)) && ((dia<1) || (dia>31)))
{
alert("Error en el Paso 1 : El dia introducido no es valido. Por favor, introduzca un dia correcto");
document.forms[0].txt_fechanacimiento.focus();
document.forms[0].txt_fechanacimiento.select();
return false;
}
/**
* si el mes introducido es de 30 dias y el dia introducido es mayor de 301 > alertamos y detenemos ejecucion
*/
if (((mes==4) || (mes==6) || (mes==9) || (mes==11)) && ((dia<1) || (dia>30)))
{
alert("Error en el Paso 1 : El dia introducido no es valido. Por favor, introduzca un dia correcto");
document.forms[0].txt_fechanacimiento.focus();
document.forms[0].txt_fechanacimiento.select();
return false;
}
/**
* si el mes año introducido es menor que 1900 o mayor que 2010 > alertamos y detenemos ejecucion
* NOTA: estos valores son a eleccion vuestra, y no constituyen por si solos fecha erronea
*/
if (!(anyo.length==4))
{
//alert("El año introducido no es valido. Por favor, introduzca un año entre 1907 y 2010");
alert("Error en el Paso 1 : Respetar el formato de fecha");
document.forms[0].txt_fechanacimiento.focus();
document.forms[0].txt_fechanacimiento.select();
return false;
}
// EMPIEZA CODIGO MARTIN
   //calcular la edad de una persona
//recibe la fecha como un string en formato español
//devuelve un entero con la edad. Devuelve false en caso de que la fecha sea incorrecta o mayor que el dia actual

    hoy=new Date()
    //calculo la fecha que recibo
    //La descompongo en un array
	fecha = document.forms[0].txt_fechanacimiento.value;
    var array_fecha = fecha.split("/")
    //si el array no tiene tres partes, la fecha es incorrecta
    if (array_fecha.length!=3)
       return false

    //compruebo que los ano, mes, dia son correctos
    var ano1
    ano1 = parseInt(array_fecha[2]);
    if (isNaN(ano1))
       return false

    var mes1
    mes1 = parseInt(array_fecha[1]);
    if (isNaN(mes1))
       return false

    var dia1
    dia1 = parseInt(array_fecha[0]);
    if (isNaN(dia1))
       return false


    //si el año de la fecha que recibo solo tiene 2 cifras hay que cambiarlo a 4
    if (ano1<=99)
       ano1 +=1900

    //resto los años de las dos fechas
    edad=hoy.getYear()- ano1-1; //-1 porque no se si ha cumplido años ya este año

    //si resto los meses y me da menor que 0 entonces no ha cumplido años. Si da mayor si ha cumplido
    if (hoy.getMonth() + 1 - mes1 < 0) //+ 1 porque los meses empiezan en 0
    {
		return edad	
	}   
    if (hoy.getMonth() + 1 - mes1 > 0)
	{
	   return edad+1
	}
    

    //entonces es que eran iguales. miro los dias
    //si resto los dias y me da menor que 0 entonces no ha cumplido años. Si da mayor o igual si ha cumplido
    if (hoy.getUTCDate() - dia1 >= 0)
	{
	   return edad + 1
	}
    

        
    if(edad < 18)
	{
alert("Error en el Paso 1 : Necesitas ser mayor de edad para postular");
document.forms[0].txt_fechanacimiento.focus();
document.forms[0].txt_fechanacimiento.select();
return false;	
	}
// TERMINA CODIGO MARTIN

/**
* en caso de que todo sea correcto > enviamos los datos del formulario
* para ello debeis descomentar la ultima sentencia
*/
else
//alert("La fecha introducida es correcta. Gracias por su colaboración");
return true;
//document.forms[0].submit(); 
} 