
//espresiones regulares para comprobar texto y numero
var er_texto = /^([a-z]|[A-Z]|á|é|í|ó|ú|ñ|ü|\s|\.|Ñ|-)+$/
var er_numero = /^([0-9])*$/;

//funcin principal en la que se recorre el formulario
function megavalidacion(formulario){

   campos = document.forms[formulario].elements;
   errores = true;

   for (i=0; i<document.forms[formulario].elements.length; i++) {
     objeto = document.forms[formulario].elements[i] ;
     objeto.onfocus=blanco;
     
     if(objeto.value != undefined){
	valor_lang=objeto.lang;
	if (valor_lang != ""){
	  propiedades=valor_lang.split('_');

	  if (propiedades[0]=="ob"){
	    if (objeto.value == "")
	        //cambiar clase
		objeto.className="error";
	    else
	    	objeto.className="ok";
          }
	  if (objeto.value != ""){
            switch (propiedades[1]){
		case 'text':
			validar_texto(objeto.value);
		break;
		
		case 'num':
			validar_numero(objeto.value);
		break;
		
		case 'doc':
			validar_doc(objeto.value,formulario);
		break;
		
		case 'mail':
			validaremail(objeto.value);
		break;
		
		case 'dc':
			validarcontrol(formulario);
		break;
		
		case 'check':
		{
		validarcheck()
		}
		
		default:
		break;
	    }
	    if (propiedades[2] != undefined){
	    	if (objeto.value.length != propiedades[2])
			objeto.className="error";
	    }
          }
      }
   }
   if(objeto.className=="error")
   	errores=false;
  }
  return errores;
}
function validar_texto(valor){
  if (!er_texto.test(valor)){
     objeto.className="error";
  }else
    objeto.className="ok";
}

function validar_numero(numero){
  if (!er_numero.test(numero)){
     objeto.className="error";
  }else
    objeto.className="ok";
}

//Funcion que valida el elemento seleccionado en el select
function validar_doc(valor,formulario){ 
	switch(document.forms[formulario].tipodocumento.value){
		case 'N':
			validarnif(valor);
		break;
		case 'C':
			validarcif(valor);
		break;
		case 'T':
			validarNIE(valor);
		break;
		case 'P':
		break;
		default:
		break;
	}
}
//funcion para validar el nif
function validarnif(valor)
{
	abc=valor;
	dni=abc.substring(0,abc.length-1)
	let=abc.substring(abc.length-1,abc.length)
	if (let=="")
		objeto.className="error";
	else{
		cadena="trwagmyfpdxbnjzsqvhlcket"
		posicion = dni % 23
		letra = cadena.substring(posicion,posicion+1)
		letra = letra.toUpperCase();
	if (letra!=let.toUpperCase())
		objeto.className="error";
	else
		objeto.className="ok";
	}
}
//validar cif
function validarcif(cif) {
	par = 0
	non = 0
	letras="ABCDEFGHKLMNPQS";
	let=cif.charAt(0);
	objeto.className="ok";
	if (cif.length!=9)
		objeto.className="error";
	
	if (letras.indexOf(let.toUpperCase())==-1)
		objeto.className="error";
	
	for (zz=2;zz<8;zz+=2)
		par = par+parseInt(cif.charAt(zz))
	
	for (zz=1;zz<9;zz+=2){
		nn = 2*parseInt(cif.charAt(zz))
	if (nn > 9) nn = 1+(nn-10)
		non = non+nn
	}
	parcial = par + non
	
	control = (10 - ( parcial % 10))
	
	if (control==10) control=0
	
	if (control!=cif.charAt(8)){
		objeto.className="error";
	}
}

// funcion para validar tarjeta de residencia
function validarNIE(valor) {
	abc=valor.toUpperCase();
	letraNie=abc.substring(0,1);
	if (letraNie == 'X'){
		dni=abc.substring(1,abc.length-1);
		let=abc.charAt(abc.length-1);
		if (!isNaN(let))
			objeto.className="error";
		else{
			cadena="TRWAGMYFPDXBNJZSQVHLCKET"
			posicion = dni % 23
			letra = cadena.substring(posicion,posicion+1)
		if (letra!=let.toUpperCase())
			objeto.className="error";
		else
			objeto.className="ok";
		}
	}else
		objeto.className="error";
}
//validar email
function validaremail(email){
	var s = email;
	var filter=/^[A-Za-z][A-Za-z0-9_.]*@[A-Za-z0-9_]+\.[A-Za-z0-9_.]+[A-za-z]$/;
	if (s.length == 0 ){
		objeto.className="ok";}
	if (filter.test(s))
    if(email.indexOf("..",0) == -1){      
      objeto.className="ok";}
      else{
        objeto.className="error";}
	else
		objeto.className="error";
}
// digito de control de una cuenta bancaria
function validarcontrol(f) {
        if (!(obtenerDigito("00" + campos['entidad'].value + campos['sucursal'].value) ==
              parseInt(campos['control'].value.charAt(0))) ||
            !(obtenerDigito(campos['cuenta'].value) ==
              parseInt(campos['control'].value.charAt(1)))){
		campos['control'].className="error";
		campos['entidad'].className="error";
		campos['sucursal'].className="error";
		campos['cuenta'].className="error";
	}else{
          campos['control'].className="ok";
          campos['entidad'].className="ok";
          campos['sucursal'].className="ok";
          campos['cuenta'].className="ok";
	}
}
function obtenerDigito(valor){
  valores = new Array(1, 2, 4, 8, 5, 10, 9, 7, 3, 6);
  control = 0;
  for (j=0; j<=9; j++)
    control += parseInt(valor.charAt(j)) * valores[j];
  control = 11 - (control % 11);
  if (control == 11) control = 0;
  else if (control == 10) control = 1;
  return control;
}

function validarcheck()
{
  if (objeto.checked)
  {
       objeto.className="ok";
       
  } 
  else
  {
       objeto.className="error";     
       alert ('Antes debes aceptar las Condiciones Legales');
  }
}
