
//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 == "")
						objeto.className="error_form";
					else
						objeto.className="ok_form";
				}

				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 'doc2':
							validar_doc2(objeto.value,formulario);
						break;
						case 'mail':
							validaremail(objeto.value);
						break;
						
						case 'dc':
							validarcontrol(formulario);

						case 'ss':
							validarcontrol_ss(formulario);
						break;
						
						default:
						break;
	    			}

					if (propiedades[2] != undefined)
					{
						if (objeto.value.length != propiedades[2])
							objeto.className="error_form";
					}
				}
			}
		}

		if(objeto.className=="error_form")
			errores=false;
	}

	return errores;
}

function validar_texto(valor){
  if (!er_texto.test(valor)){
     objeto.className="error_form";
  }else
    objeto.className="ok_form";
}

function validar_numero(numero){
  if (!er_numero.test(numero)){
     objeto.className="error_form";
  }else
    objeto.className="ok_form";
}

//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;
	}
}
function validar_doc2(valor,formulario){ 
	switch(document.forms[formulario].tipodocumento_cliente.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_form";
	else{
		cadena="trwagmyfpdxbnjzsqvhlcket"
		posicion = dni % 23
		letra = cadena.substring(posicion,posicion+1)
		letra = letra.toUpperCase();
	if (letra!=let.toUpperCase())
		objeto.className="error_form";
	else
		objeto.className="ok_form";
	}
}
//validar cif
function validarcif(cif) {
	par = 0
	non = 0
	letras="ABCDEFGHKLMNPQS";
	let=cif.charAt(0);
	objeto.className="ok_form";
	if (cif.length!=9)
		objeto.className="error_form";
	
	if (letras.indexOf(let.toUpperCase())==-1)
		objeto.className="error_form";
	
	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_form";
	}
}

// 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_form";
		else{
			cadena="TRWAGMYFPDXBNJZSQVHLCKET"
			posicion = dni % 23
			letra = cadena.substring(posicion,posicion+1)
		if (letra!=let.toUpperCase())
			objeto.className="error_form";
		else
			objeto.className="ok_form";
		}
	}else
		objeto.className="error_form";
}
//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_form";
	if (filter.test(s))
		if(email.indexOf("..",0) == -1){      
        objeto.className="ok_form";}
      else{
        objeto.className="error_form";}
	else
		objeto.className="error_form";
}

// 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_form";
		campos['entidad'].className="error_form";
		campos['sucursal'].className="error_form";
		campos['cuenta'].className="error_form";
	}
	else
	{
		campos['control'].className="ok_form";
		campos['entidad'].className="ok_form";
		campos['sucursal'].className="ok_form";
		campos['cuenta'].className="ok_form";
	}
}


// digito de control del numero de seguridad social
function validarcontrol_ss(f)
{
	if(Number(campos['num_ss'].value)<10000000)
	{
		provincia = Number(campos['prov_ss'].value);
		num = Number(campos['num_ss'].value);

		numero = num+provincia*10000000;
	}
	else
	{
		provincia = ""+campos['prov_ss'].value;
		num = ""+campos['num_ss'].value;
		
		numero = provincia+num;
	}

	if ( (numero%97)!=campos['dc_ss'].value )
	{
		campos['prov_ss'].className="error_form";
		campos['num_ss'].className="error_form";
		campos['dc_ss'].className="error_form";
	}
	else
	{
		campos['prov_ss'].className="ok_form";
		campos['num_ss'].className="ok_form";
		campos['dc_ss'].className="ok_form";
	}
}

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;
}
