function numerico(valor){
  cad = valor.toString();
  for (var i=0; i<cad.length; i++) {
    var caracter = cad.charAt(i);
	if (caracter<"0" || caracter>"9")
	  return false;
  }
  return true;
}
function obtenerDigito(valor){
  valores = new Array(1, 2, 4, 8, 5, 10, 9, 7, 3, 6);
  control = 0;
  for (i=0; i<=9; i++)
    control += parseInt(valor.charAt(i)) * valores[i];
  control = 11 - (control % 11);
  if (control == 11) control = 0;
  else if (control == 10) control = 1;
  return control;
}

function validar(datos) {

	var er_nombre = /^([a-z]|[A-Z]|á|é|í|ó|ú|ñ|ü|\s|\.|-)+$/			//letras, '.' y '-' o vacio
	var er_telefono = /^([0-9\s\+\-])+$/						//numeros, espacios, + o -
	var er_cod =/^([0-9])+$/									// sólo números
	//fechas, formato dd/mm/aaaa o d/m/aa
	var er_mes31dias = /^([1-3]0|[0-2][1-9]|31|[0-9])\/(1|01|3|03|5|05|7|07|8|08|10|12)\/(19[0-9][0-9]|20[0-1][0-9]|2020)$/
	var er_mes30dias = /^([1-3]0|[0-2][1-9]|[0-9])\/(4|04|6|06|9|09|11)\/(19[0-9][0-9]|20[0-1][0-9]|2020)$/
	var er_mes28dias = /^([1-2]0|[0-2][1-8]|[0-1]9|[0-9])\/(02|2)\/(19[0-9][0-9]|200[1-3]|200[5-7]|2009|201[0-1]|201[3-5]|201[7-9])$/
	var er_mes29dias = /^([1-2]0|[0-2][1-9]|[0-9])\/(02|2)\/(2000|2004|2008|2012|2016|2020)$/
	//direccion de correo electronico
	var er_email = /^(.+\@.+\..+)$/
	var x
	
	//comprueba campo de nombre
	if(!er_nombre.test(datos.nombre.value)) { 
		alert('Por favor, rellene el campo NOMBRE')
		return false
	} 
	//comprueba la fecha segun calendario (hasta el 2020, ojo)
	if (!(er_mes31dias.test(datos.fecha.value) || 
   			er_mes30dias.test(datos.fecha.value) ||
      		er_mes29dias.test(datos.fecha.value) ||
      		er_mes28dias.test(datos.fecha.value))) {
		alert('Contenido campo FECHA no válido.')
		return false
	}
	if (datos.nif.value=="") {
		alert('Por favor, rellene el campo NIF')
		return false
	}
	
	//comprueba campos de telefonos (permite campos vacios y guiones)
	if( !er_telefono.test(datos.telefono.value) ) {
		alert('Por favor, rellene el campo TELÉFONO')
		return false
	}
	
	//comprueba campo de email
	if(!er_email.test(datos.correo.value)) { 
		alert('Por favor, rellene el campo E-MAIL')
		return false
	} 
	if (datos.profesion.value=="") {
		alert('Por favor, rellene el campo PROFESIÓN')
		return false
	}  
	if (datos.medio.value=="") {
		alert('Por favor, rellene el campo MEDIO PARA EL QUE TRABAJA')
		return false
	}
	if (datos.direccion.value=="") {
		alert('Por favor, rellene el campo DIRECCIÓN')
		return false
	}
	if (datos.localidad.value=="") {
		alert('Por favor, rellene el campo LOCALIDAD')
		return false
	}
	if (datos.provincia.value=="") {
		alert('Por favor, rellene el campo PROVINCIA')
		return false
	}

//Código Postal 

  if(!er_cod.test(datos.cp.value))
  {
   alert('Por favor, indique el campo CÓDIGO POSTAL')
   return false
   
  }
 
//Número de cuenta bancaria
  if (datos.banco.value == ""  || datos.sucursal.value == "" ||
	  datos.dc.value == "" || datos.cuenta.value == "")
  { 
    alert("Por favor, introduzca los datos de su cuenta");
	return false;
  }
  else {
	if (datos.banco.value.length != 4 || datos.sucursal.value.length != 4 ||
		datos.dc.value.length != 2 || datos.cuenta.value.length != 10)
	{
      alert("Por favor, introduzca correctamente los datos de su cuenta; no están completos");
	  return false;
	}
	else {
  	  	if (!numerico(datos.banco.value) || !numerico(datos.sucursal.value) ||
		  	!numerico(datos.dc.value) || !numerico(datos.cuenta.value))
		{
        	alert("Por favor, introduzca correctamente los datos de su cuenta; no son numericos");
			return false;
		}
	  	else {
	    	if (!(obtenerDigito("00" + datos.banco.value + datos.sucursal.value) == parseInt(datos.dc.value.charAt(0))) 				|| !(obtenerDigito(datos.cuenta.value) == parseInt(datos.dc.value.charAt(1))) )
			{
          		alert("Los dígitos de control no se corresponden con los demás números de la cuenta");
		  		return false;
			}
	    	else
			{
          		return true
			}
  	  	}
    }
  }  
}
