// funcion que comprueba la letra que corresponde a un NumDNI de un individuo-
//----------------------------------------------------------------------------

/*

function letraNIF( nif1)
{
   var cadena  = "";
   var letras='TRWAGMYFPDXBNJZSQVHLCKET'
   var NumDNI=0;
   var Indice=0;
   nif1 = nif1.toUpperCase();
   if( nif1.charAt(0) != 'X') { // NIF PARA ESPA&Ntilde;OLES
      cadena += nif1;
   } else { // NIF PARA EXTRANJEROS RESIDENTES
      cadena += nif1.substring(1,11);
   }
   correcto = cadena.charAt(cadena.length-1);
   correcto = correcto.toUpperCase();
   NumDNI = parseInt(cadena,10);
   Indice = NumDNI - (23 * parseInt(NumDNI/23,10));
   if( (Indice >= 0) && (Indice < 24) ) {
      if( letras.charAt(Indice) == correcto) {
         // valor correcto devuelve la letra directamente
         return true;
      } else {
         //valor incorrecto
         if( nif1.charAt(0) != 'X') {
            alert("El NIF introducido es incorrecto.");
         } else {
            alert("El CIF introducido es incorrecto.");
         }
         return false;
      }
   } else {
   alert("El NIF introducido es incorrecto.");
      return false;
   }
}
// funcion que devuelve la letra que corresponde a un NumDNI -
// de una persona juridica o un organismo
//------------------------------------------------------------
function ValidarCIF( cif1) {
   var Retorno = true;
   var Entidad;
   var StEntidad;
   var Provincia;
   var NumeroSec;
   var CaracterControl, CaracterControlEntrada;
   var TablaControl = 'JABCDEFGHI';
   var otras = 'ABCDEFGHJPQRSUVWX';
   var numero = '0123456789';
   var Suma = 0;
   var Suma1 = 0;
   var Suma2 = 0;
   var nAux = 0;
   var tmp = '';
   tmp = "" + cif1;
   Entidad = tmp.charAt(0);
   Entidad = Entidad.toUpperCase();
   if( otras.indexOf( Entidad) == -1) {
      alert ('La letra del CIF no corresponde a ninguna valida.');
      return false;
   }
   Provincia = tmp.substring(1,3);
   NumeroSec = tmp.substring(3,8);
   NumeroSec2 = tmp.substring(1,8);
   CaracterControlEntrada = tmp.substring( 8);
   CaracterControlEntrada = CaracterControlEntrada.toUpperCase();
   if( (Entidad >= "A") && (Entidad < "P") ) {
      if( numero.indexOf( CaracterControlEntrada) != -1) {
         StEntidad = "JURIDICA";
      } else {
         alert('El Digito de Control no es correcto en el CIF. ');
         return false;
      }
   }
   else if( (Entidad == "S") || (Entidad == "Q") || (Entidad == "P") ) {
      StEntidad="ORGANISMO";
   }
   else if( Entidad == "X") //  Controlamos si es Extranjero residente
   {
      return letraNIF( tmp);
   }
   if( Retorno != false) {  // Entidad correcta
      for (var i = 0; i < NumeroSec2.length; i++) {
         if( numero.indexOf( NumeroSec2.charAt( i)) == -1) {
            alert('Ha introducido una letra en lugar de un Numero en el CIF.');
            return false;
         }
      }
      if( parseInt( Provincia, 10) == 0)
      {
         Retorno = false;
      } //Provincia correcta
      else if( parseInt( NumeroSec, 10) == 0)
      {
         Retorno = false;
      }
//Numero secuencial correcto
      else if( (StEntidad == "JURIDICA") || (StEntidad == "ORGANISMO"))
      {
         Suma2 = 0;
         Suma1 = parseInt( NumeroSec2.charAt( 1), 10) + parseInt( NumeroSec2.charAt( 3), 10) + parseInt( NumeroSec2.charAt( 5), 10 );
         for( var i = 0; i < 7; i += 2) {
            nAux = parseInt( NumeroSec2.charAt( i), 10) * 2;
            if (nAux > 9) {
               Suma2 = Suma2 + parseInt( nAux / 10, 10) + nAux % 10;
            } else {
               Suma2 = Suma2 + nAux;
            }
         }
         Suma = Suma1 + Suma2;
         i = 10 - Suma % 10;
         if( i > 9) {
            i = 0;
         };
         if( StEntidad == "JURIDICA") {
            CaracterControl = i;
         } else {
            CaracterControl = TablaControl.charAt( i);
         }
         if (CaracterControl != CaracterControlEntrada) {
            Retorno = false;
         };
      }
   }
   if( !Retorno) {
      alert('El CIF introducido es incorrecto.');
   };
   return Retorno;
}
//-----------------------------------------------------------
// funcion que captura el NIF-CIF y distingue si NIF o CIF --
//-----------------------------------------------------------
function ChequeaCif( campo) {
   var numero;
   var vuelve;
   var sinceros;
   var i;
   numero = '0123456789';
  vuelve = false;

  if (campo.value=="1R" || campo.value=="1r"){
     alert("El CIF no es valido.");
     return false;
  }

  for( i = 0; i < campo.value.length; i++)
      if( campo.value.charAt(i) != "0")
         break;
   sinceros = campo.value.substring( i);
   if( sinceros != "") {
      if( numero.indexOf( sinceros.charAt(0)) != -1) {
         vuelve = letraNIF( sinceros);
      } else {
         vuelve = ValidarCIF( sinceros);
      };
      if( vuelve) {
         numero = '';
//         for( var i = 0; i < (10 - sinceros.length); i++, numero += '0');
         campo.value = numero + sinceros.toUpperCase();
      };
   } else {
      alert( "El campo CIF/NIF esta vacio.");
      vuelve = false;
   };
   if( !vuelve)
     campo.focus();
   return( vuelve);
}


*/

//FUNCION QUE COMPRUEBA EL CIF EL NIF Y EL NIE DEVOLVIENDO TRUE SI ES CORRECTO O FALSE SI ES INCORRECTO+

function str_replace(search, position, replace, subject) {
	var f = search, r = replace, s = subject, p = position;
	var ra = r instanceof Array, sa = s instanceof Array, f = [].concat(f), r = [].concat(r), i = (s = [].concat(s)).length;
	while (j = 0, i = i -1) {
		if (s[i]) {
			while (s[p] = s[p].split(f[j]).join(ra ? r[j] || "" : r[0]), ++j in f){};
		}
	};
	return sa ? s : s[0];
}

//Retorna: 1 = NIF ok, 2 = CIF ok, 3 = NIE ok, -1 = NIF error, -2 = CIF error, -3 = NIE error, 0 = ??? error
function ChequeaCif(campo)
{
	var a = campo.value;
	var temp=a.toUpperCase();
	var cadenadni="TRWAGMYFPDXBNJZSQVHLCKE";
	if (temp!=''){

		//si no tiene un formato valido devuelve error
		if ((!/^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$/.test(temp) && !/^[T]{1}[A-Z0-9]{8}$/.test(temp)) && !/^[0-9]{8}[A-Z]{1}$/.test(temp)){
			alert("Formato de CIF/NIF/NIE desconocido.");
			return false;
		}

		//comprobacion de NIFs estandar
		if (/^[0-9]{8}[A-Z]{1}$/.test(temp)){
			posicion = a.substring(8,0) % 23;
			letra = cadenadni.charAt(posicion);
			var letradni=temp.charAt(8);
			if (letra == letradni){
				return true;
			}else{
				alert("No es un NIF valido.");
				return false;
			}
		}

		//algoritmo para comprobacion de codigos tipo CIF
		suma = parseInt(a.charAt(2))+parseInt(a.charAt(4))+parseInt(a.charAt(6));

		for (i = 1; i < 8; i += 2){
			temp1 = 2 * parseInt(a.charAt(i));
			temp1 +='';
			temp1 = temp1.substring(0,1);
			temp2 = 2 * parseInt(a.charAt(i));
			temp2 +='';
			temp2 = temp2.substring(1,2);
			if (temp2 ==''){
				temp2 = '0';
			}
			suma += (parseInt(temp1) + parseInt(temp2));
		}
		suma +='';
		n = 10 - parseInt(suma.substring(suma.length-1, suma.length));

		//comprobacion de NIFs especiales (se calculan como CIFs)
		if (/^[KLM]{1}/.test(temp)){
			if (a.charAt(8) == String.fromCharCode(64 + n)){
				return true;
				//return 1;
			}else{
				alert("No es un NIF valido.");
				return false;
				//return -1;
			}
		}
		//comprobacion de CIFs
		if (/^[ABCDEFGHJNPQRSUVW]{1}/.test(temp)){
			temp = n +'';
			if (a.charAt(8) == String.fromCharCode(64 + n) || a.charAt(8) == parseInt(temp.substring(temp.length-1, temp.length))){
				return true;
			}else{
				alert("No es un CIF valido.");
				return false;
			}
		}

		if (/^[XYZ]{1}/.test(temp))
		{
			temp = temp.replace('X','0');
			temp = temp.replace('Y','1');
			temp = temp.replace('Z','2');
			pos = str_replace(['X', 'Y', 'Z'], 0, ['0','1','2'], temp).substring(0, 8) % 23;
			
			if (a.charAt(8) == cadenadni.substring(pos, pos + 1))
			{
				return true;
			}else{
				alert("No es un NIE valido.");
				return false;
			}
		}
		alert("Formato de CIF/NIF/NIE desconocido.");
		return false;
	}
	alert("El CIF/NIF/NIE no puede estar en blanco.");
	return false;
}













function esNumero (cadena) {
   if (cadena.length == 0)
      return false;
   for (j=0;j<cadena.length;j++) {
    if (! (cadena.charAt(j) >= "0" && cadena.charAt(j) <= "9") ) {
     return false;
    }
   }
   return true;
}
function comprobarIP (cadena) {
  var valor = cadena;
  var numero;
  arrayIp = valor.split(".");
  if (arrayIp.length != 4) {
   return false;
  }
  for (i=0; i<arrayIp.length; i++) {
    if (esNumero (arrayIp[i])) {
       numero = parseInt (arrayIp[i],10);
       if (numero >= 0 && numero <= 255) {
         numero=0;
       } else {
         return false;
       }
    } else {
       return false;
    }
  }
  return true;
}
function esDecimal (cadena) {
   var num_puntos = 0;
   if (cadena.length == 0)
      return false;
   if (! (cadena.charAt(0) >= "0" && cadena.charAt(0) <= "9") ) {
        return false;
   }
   for (j=0;j<cadena.length;j++) {
      if (cadena.charAt(j) == ".") {
          num_puntos++;
          if (num_puntos > 1) {
             return false;
          }
          if (j == cadena.length - 1) {
             return false;
          }
      } else if (! (cadena.charAt(j) >= "0" && cadena.charAt(j) <= "9") ) {
        return false;
      }
   }
   return true;
}

// FUNCION QUE LE PASAMOS EL N?DE TARJETA Y COMPROBAMOS SI ES NULA
//---------------------------------------------------------------------------
//----------------------------------TARJETA----------------------------------
//---------------------------------------------------------------------------
function Comprueba( tarjeta){
 var codigo;
 var clave;
 var suma1 = 0;
 var suma2 = 0;
 var valor = 0;
 var cleng;
 if( (tarjeta.value.length < 15) || (tarjeta.value.length > 19)){
  return( false);
 } else {
 cleng  = tarjeta.value.length;
 codigo = tarjeta.value.charAt((cleng - 1));
 valor = 0;
 for (i = 1; i < cleng ; i++) {
  suma1 = tarjeta.value.charAt(cleng-1-i);
  suma2 = suma1 * (1 + (i%2));
  if ( suma2 < 10)
   valor = valor + suma2;
  else
   valor = valor + suma2 - 9;
  }
  valor = ((10 - (valor % 10)) % 10 );
  return (valor == parseInt(codigo,10));
 }
}

/// Telefono
function validarFormatoTelefono (cadena) {
   for (i=0; i<cadena.length; i++) {
      if (cadena.charAt(i) != ' ' && cadena.charAt(i) != '+' && cadena.charAt(i) != '-' &&
          ! (cadena.charAt(i) >= '0' && cadena.charAt(i) <= '9') ) {
            return false;
      }
   }
   return true;
}
/// Correo
function validarFormatoCorreo (cadena) {
  var cadenamin = cadena.toLowerCase();
  for (i=0;i<cadenamin.length;i++) {
     var valor = cadenamin.charAt(i);
     if (valor != '@' && valor != '.' && valor != '-' && ! (valor >= '0' && valor <= '9') && valor != '_'
         && ! (valor >= 'a' && valor <= 'z') ) {
           return false;
     }
  }
  indice = cadena.indexOf('@');
  if (indice == -1 || indice == 0) {
     return false;
  }
  resto = cadena.substr(indice + 1);
  indicepunto = resto.indexOf(".");
  if (indicepunto == 0 || indicepunto == -1 || indicepunto == resto.length - 1) {
     return false;
  }
  if (cadena.charAt (cadena.length - 1) == '.') {
     return false;
  }
  tabla = resto.split (".");
  longitud = tabla.length;
  if (longitud < 2) {
      return false;
  }
  return true;
}
/// Tarjeta: solo valores numericos
function validarFormatoTarjeta (cadena) {
  for (i=0; i<cadena.length; i++) {
      if ( ! (cadena.charAt(i) >= '0' && cadena.charAt(i) <= '9') ) {
            return false;
      }
   }
   return true;
}
// Comprobacion contactos Afilias
function validarCaracteresUsAscii (cadena) {
   for (i=0; i<cadena.length; i++) {
      codigo = cadena.charCodeAt(i);
      if (! (cadena.charCodeAt(i) >= 32 && cadena.charCodeAt(i) <= 128) ) {
         return false;
      }
   }
   return true;
}
// Comprobar telefonos Afilias
function validarTelefonoAfilias (cadena, resultado) {
   var devolver = true;
   var causa = 1;
   var mistring = "";
   var indice = cadena.indexOf (".");
   if (cadena.charAt(0) != '+') {
      devolver = false;
      causa = -1;
      mistring = " debe comenzar con el caracter '+'";
   }
   if (causa == 1 && indice == -1) {
      devolver = false;
      causa = -2;
      mistring = " no contiene el punto separador entre codigo de pais y numero local de telefono/fax";
   }
   codigo_pais = cadena.substr(1,indice-1);
   numero_telefono = cadena.substr (indice + 1);
   if (causa == 1 && codigo_pais == "") {
      causa = -3;
      devolver = false;
      mistring = " no contiene codigo de pais";
   }
   if (causa == 1 && !validarFormatoTarjeta (codigo_pais)) {
      causa = -4;
      devolver = false;
      mistring = " contiene caracteres no validos (numericos, '+', '.')";
   }
   if (causa == 1 && numero_telefono == "") {
      causa = -5;
      devolver = false;
      mistring = " no contiene numero local de telefono/fax";
   }
   if (causa == 1 && !validarFormatoTarjeta (numero_telefono)) {
      causa = -6;
      devolver = false;
      mistring = " contiene caracteres no validos (numericos, '+', '.')";
   }
   if (causa != 1) {
      alert (resultado + mistring);
   }
   return devolver;
}

//Comprobar cuenta bancaria.
function Cuenta(entidad,oficina,dc,ncuenta){
 var comprobacion = "";
 var control1 = "00"+entidad.value+oficina.value;
 var control2 = ncuenta.value;
 var digito1 = 0;
 var digito2 = 0;
 var vdc = "";
 comprobacion = entidad.value+oficina.value+dc.value+ncuenta.value;
 if(comprobacion == "00000000000000000000"){
   return( false);
 } if( (entidad.value.length != 4) || (oficina.value.length != 4) || (dc.value.length != 2) || (ncuenta.value.length != 10) ){
  return( false);
 } else {
 for ( var i = 0; i < 10; i++) {
 if ( i == 0 ){
  digito1 += parseInt (control1.charAt(i),10) * 1;
  digito2 += parseInt (control2.charAt(i),10) * 1;}
 if ( i == 1 ){
  digito1 += parseInt (control1.charAt(i),10) * 2;
  digito2 += parseInt (control2.charAt(i),10) * 2;
 }
 if ( i == 2 ){
  digito1 += parseInt (control1.charAt(i),10) * 4;
  digito2 += parseInt (control2.charAt(i),10) * 4;
 }
 if ( i == 3 ){
  digito1 += parseInt (control1.charAt(i),10) * 8;
  digito2 += parseInt (control2.charAt(i),10) * 8;
 }
 if ( i == 4 ){
  digito1 += parseInt (control1.charAt(i),10) * 5;
  digito2 += parseInt (control2.charAt(i),10) * 5;
 }
 if ( i == 5 ){
  digito1 += parseInt (control1.charAt(i),10) * 10;
  digito2 += parseInt (control2.charAt(i),10) * 10;
 }
 if ( i == 6 ){
  digito1 += parseInt (control1.charAt(i),10) * 9;
  digito2 += parseInt (control2.charAt(i),10) * 9;
 }
 if ( i == 7 ){
  digito1 += parseInt (control1.charAt(i),10) * 7;
  digito2 += parseInt (control2.charAt(i),10) * 7;
 }
 if ( i == 8 ){
  digito1 += parseInt (control1.charAt(i),10) * 3;
  digito2 += parseInt (control2.charAt(i),10) * 3;
 }
 if ( i == 9 ){
  digito1 += parseInt (control1.charAt(i),10) * 6;
  digito2 += parseInt (control2.charAt(i),10) * 6;
 }
}
 digito1 = 11 - ( digito1 % 11 );
 digito2 = 11 - ( digito2 % 11 );
 if (digito1 == 11) digito1 = 0;
 if (digito2 == 11) digito2 = 0;
 if (digito1 == 10) digito1 = 1;
 if (digito2 == 10) digito2 = 1;
 vdc = "" + digito1 + digito2;
 }
 if ( vdc == dc.value )
   return (true);
 else
   return (false);
 }

function validar_dom()
{
     var formu=document.domcom;
     var valor2=formu.Dom.value.toLowerCase();
     var longitud = valor2.length;
     var valor = valor2;
     var chequeado = false;
     for (i=0;i<formu.elements.length;i++) {
        if (formu.elements[i].type == "checkbox") {
             if (formu.elements[i].checked) {
                chequeado = true;
             }
        }
     }
     if (!chequeado) {
        alert ("Debe seleccionar al menos un tipo de dominio");
        return false;
     }
     if (longitud == 0) {
        alert ("Debe introducir el nombre de dominio");
        return false;
     }
     for (i=0;i<valor.length;i++) {
            if (i==0 && valor.charAt(0) == '-') {
                alert ("El dominio no puede comenzar con un guion");
                return false;
            }
            codigo = valor.charCodeAt(i);
            if ( (codigo != 45) && (codigo < 48 || codigo > 57) && (codigo < 65 || codigo > 90) &&
                (codigo < 97 || codigo > 122) && (codigo < 192 || codigo > 214) && (codigo < 216 || codigo > 221) &&
                (codigo < 224 || codigo > 246) && (codigo < 248 || codigo > 253) && codigo != 255 )
            {
                alert ("El nombre de dominio contiene un valor no valido");
                return false;
            }
     }
     return true;
    }
    function cambiarTodos() {
        var formu=document.domcom;
        if (formu.todos.checked) {
            for (j=0; j<formu.elements.length; j++) {
                var tipo = formu.elements[j].type;
                var nombre = formu.elements[j].name;
                if (tipo.toLowerCase() == "checkbox" && nombre != "todos") {
                    formu.elements[j].checked = true;
                }
            }
        }
    }
    function validar_name ()
    {
        var formu = document.domname;
        var dom1=formu.Dom1.value.toLowerCase();
        var dom2=formu.Dom2.value.toLowerCase();
        if (dom1.length == 0 || dom2.length == 0) {
            alert ("Debe introducir el nombre de dominio");
            return false;
        }
        for (i=0;i<dom1.length;i++) {
            if (i==0 && dom1.charAt(0) == '-') {
                alert ("El dominio no puede comenzar con un guion");
                return false;
            }
            codigo = dom1.charCodeAt(i);
            if ( (codigo != 45) && (codigo < 48 || codigo > 57) && (codigo < 65 || codigo > 90) &&
                (codigo < 97 || codigo > 122) )
            {
                alert ("El nombre de dominio contiene un valor no valido");
                return false;
            }
        }
        for (i=0;i<dom2.length;i++) {
            if (i==0 && dom2.charAt(0) == '-') {
                alert ("El subnombre de dominio no puede comenzar con un guion");
                return false;
            }
            codigo = dom2.charCodeAt(i);
            if ( (codigo != 45) && (codigo < 48 || codigo > 57) && (codigo < 65 || codigo > 90) &&
                (codigo < 97 || codigo > 122) )
            {
                alert ("El subnombre de dominio contiene un valor no valido");
                return false;
            }
        }
        formu.Dom.value = dom1 + "." + dom2;
        formu.checkname.value = "1";
        return true;
    }

    function leeSelectSencilla(lista,campo)
    {
        var i;
	    i=lista.selectedIndex;
	    campo.value=lista.options[i].value;
	    return true;
    }