// JavaScript Document

//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
function calcular_edad (fecha) {
    //calculo la fecha de hoy
    hoy=new Date();
    //alert(hoy);

    //calculo la fecha que recibo
    //La descompongo en un array
    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 ano;
    ano = parseInt(array_fecha[2]);
    if (isNaN(ano))
       return false;

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

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


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

    //resto los años de las dos fechas
 
	edad=hoy.getFullYear() - ano - 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 - mes < 0) //+ 1 porque los meses empiezan en 0
       return edad;
    if (hoy.getMonth() + 1 - mes > 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() - dia >= 0)
       return edad + 1;
    return edad;
} 


function letra_dni (n){
	var d =(n/23);
	d = Math.floor(d);
	var e=d*23;
	var r=n-e;
	if (r==0)
	return "T";
	if (r==1)
	return "R";
	if (r==2)
	return "W";
	if (r==3)
	return "A";
	if (r==4)
	return "G";
	if (r==5)
	return "M";
	if (r==6)
	return "Y";
	if (r==7)
	return "F";
	if (r==8)
	return "P";
	if (r==9)
	return "D";
	if (r==10)
	return "X";
	if (r==11)
	return "B";
	if (r==12)
	return "N";
	if (r==13)
	return "J";
	if (r==14)
	return "Z";
	if (r==15)
	return "S";
	if (r==16)
	return "Q";
	if (r==17)
	return "V";
	if (r==18)
	return "H";
	if (r==19)
	return "L";
	if (r==20)
	return "C";
	if (r==21)
	return "K";
	if (r==22)
	return "E";
	else
		return "";
}

function checkCIF(cf) {
	var i = temp = 0;
	var v1 = new Array(0,2,4,6,8,1,3,5,7,9);
	cf = cf.toUpperCase();
	if (valida_dni(cf)) return true;
	else if (!/^[A-Za-z0-9]{9}$/.test(cf)) return false;
	else if (!/^[ABCDEFGHKLMNPQS]/.test(cf)) return false;
	else
		{
		for(i=2; i<=6; i+=2)
			{
			temp += v1[parseInt(cf.substr(i-1, 1))];
			temp += parseInt(cf.substr(i, 1));
			}
		temp = temp + v1[parseInt(cf.substr(7,1))];
		temp = (10 - ( temp % 10));
		if(temp == 10 && (cf.charAt(cf.length-1) == 'J' || cf.charAt(cf.length-1) == 0)) return true;
		else if (cf.charAt(cf.length-1) == temp || cf.charAt(cf.length-1) == String.fromCharCode(64 + temp)) return true;
		else return false;
		}
}

function valida_dni(nif) {
	if (!nif) return false;
	var letras = 'TRWAGMYFPDXBNJZSQVHLCKE';
	if (nif.length != 9) return false;
	else {
		letra = nif.substr(8, 1); letra = letra.toUpperCase();
		dni = nif.substr(0, 8);
		dni = dni.toUpperCase(); dni = dni.replace('X','0');
		dni -= parseInt(dni/23) * 23;
		//alert (letras.charAt(dni) + " - " + letra);
		if (letras.charAt(dni) != letra) return false; 
		else return true;
	}
}

function valida_nie(nif) {
	//alert(nif);
	nif = nif.substring(1,10);
	if (!nif) return false;
	var letras = 'TRWAGMYFPDXBNJZSQVHLCKE';
	if (nif.length != 9) return false;
	else {
		letra = nif.substr(8, 1); letra = letra.toUpperCase();
		dni = nif.substr(0, 8);
		dni = dni.toUpperCase(); dni = dni.replace('X','0');
		dni -= parseInt(dni/23) * 23;
		//alert (letras.charAt(dni) + " - " + letra);
		if (letras.charAt(dni) != letra) return false; 
		else return true;
	}
}

function esEmail(texto) {
	var textoStr = texto.toString(); // transformo a string todo el campo
	var tiene = 0;
	for(var i = 0;i < texto.length;i++){ // recorro letra por letra
	var oneChar = textoStr.charAt(i);
	if (oneChar == "@"){ // busco una arroba en cada letra
		tiene = 1;
	}
	} if (tiene == 1){ // controlo si existe o no una arroba
		return true;
	} else {
		return false;
	}
}

function valida_form_01 (formulario)  {
	//alert (calcular_edad (formulario.dia_nacimiento.value+"/"+formulario.mes_nacimiento.value+"/"+formulario.anyo_nacimiento.value) );
	
	
	if ( formulario.dni_numero.value != "" ) {
		valida_dni_var = formulario.dni_numero.value;
	} else {
		valida_dni_var = formulario.dni_numero.value.substring(1,10);
	}

	if  ( formulario.password.value.length < 5 ) {
		alert ("La clave debe tener más de 4 caracteres");
		return (false);
	} else if  ( formulario.password.value == "" ) {
		alert ("Debe introducir una contraseña");
		return (false);		
	} else if  ( formulario.nombre.value == "" ) {
		alert ("Debe introducir su nombre");
		return (false);
	} else if  ( formulario.apellido1.value == "" ) {
		alert ("Debe introducir su primer apellido");
		return (false);	
	} else if  ( formulario.direccion.value == "" ) {
		alert ("Debe introducir su direccion");
		return (false);			
	} else if  ( formulario.cp.value == "" ) {
		alert ("Debe introducir su CP");
		return (false);		
	} else if  ( formulario.localidad.value == "" ) {
		alert ("Debe introducir su localidad");
		return (false);
	} else if  ( formulario.provincia.value == "-1" ) {
		alert ("Debe introducir su provincia");
		return (false);			
	} else if  ( formulario.telefono1.value == "" && formulario.telefono2.value == "" ) {
		alert ("Debe introducir su número de teléfono");
		return (false);				
	} else if ( esEmail ( formulario.email.value ) == false ) {
		alert ("Debe introducir un email válido");
		return (false);	
	} else if  ( formulario.sexo.value == "" ) {
		alert ("Debe indicar su género");
		return (false);	
	} else if ( calcular_edad (formulario.dia_nacimiento.value+"/"+formulario.mes_nacimiento.value+"/"+formulario.anyo_nacimiento.value) > 35 ) {
		alert ("Para darse de alta en la bolsa de empleo debe ser menor de 36 años");
		return (false);			
	} else if ( ( valida_dni (formulario.dni_numero.value) == false ) &&  (valida_nie (formulario.dni_numero.value) == false ) ) {
		alert ("Debe introducir su DNI (8 dígitos más la letra) o NIE (X + 8 dígitos + letra). Si su NIE sólo tiene 7 dígitos ponga un 0 después de la X");
		return (false);
	} else {
		paises_ue = new Array ("España", "Alemania", "Austria", "Bélgica", "Chipre", "Dinamarca", "Eslovaquia", "Eslovenia", "Estonia", "Finlandia", "Francia", "Grecia", "Hungría", "Irlanda", "Islandia", "Italia", "Letonia", "Liechtenstein", "Lituania", "Luxemburgo", "Malta", "Noruega", "Países Bajos", "Polonia", "Portugal", "Reino Unido", "República Checa", "Suecia", "Suiza");
		if (paises_ue.inArray(formulario.nacionalidad.value)  ) {
			return (true);
		} else {
			if (formulario.ext_tipo_permiso.value == "" ){
				alert ("Debe incluir el tipo del permiso de residencia");
				return (false);
			} else if ( (formulario.ext_fecha_concesion_permiso_dia.value == "00" ) || 
						(formulario.ext_fecha_concesion_permiso_mes.value == "00" ) ||
						(formulario.ext_fecha_concesion_permiso_anyo.value == "0000" ) ) {
				alert ("Debe indicar la fecha de concesión del permiso de residencia");
				return (false);
			} else if ( (formulario.ext_fecha_cad_permiso_dia.value == "00" ) || 
						(formulario.ext_fecha_cad_permiso_mes.value == "00" ) ||
						(formulario.ext_fecha_cad_permiso_anyo.value == "0000" ) ) {
				alert ("Debe indicar la fecha de caducidad del permiso de residencia");
				return (false);
			} else {
				var nowDate = new Date();
				var formDate = new Date(formulario.ext_fecha_cad_permiso_anyo.value, formulario.ext_fecha_cad_permiso_mes.value-1, formulario.ext_fecha_cad_permiso_dia.value);
				if ( formDate < nowDate ) {
					alert ("Permiso de residencia caducado");
					return (false);
				}
			}
		}
	}
	return (true);
}