/*

			FICHERO DE SCRIPTS DE AREAPC CON FUNCIONES DEPENDIENTES DE LA LOCALIZACION

*/
/*********************************************************************************************
VALIDACIÓN DE C.I.F.
1) Letra inicial 
Puede ser:
A, B, C, D, E, F, G, H, K, L, M, P, Q, S, X
A - Sociedades Anónimas
B - Sociedades de responsabilidad limitada
C - Sociedades colectivas
D - Sociedades comanditarias
E - Comunidades de bienes
F - Sociedades cooperativas
G - Asociaciones y otros tipos no definidos
H - Comunidades de propietarios
P - Corporaciones locales
Q - Organismos autónomos
S - Organos de la administración
K, L y M seguramente para compatibilidad con formatos antiguos 
X extranjeros, que en lugar del D.N.I. tienen el N.I.E. y el último dígito es una letra.
Los de la letra P (Ayuntamientos), el último dígito también es una letra.

2) Algoritmo de validación
- Quitar el primer carácter y el ultimo del CIF (la letra inicial y el carácter de control), de forma que quede una cadena de 7 dígitos.
- Sumar los dígitos de las posiciones pares. Esto da un resultado A
- Para cada uno de los dígitos de las posiciones impares, multiplicarlos por 2, sumar los dígitos del resultado y acumular esta suma (luego pongo un ejemplo). La suma acumulada da un resultado B.
- Sumar A y B. Esto da C.
- Tomar solo el dígito de las unidades de C y restárselo a 10. Esta resta da D.
- A partir de D ya se obtiene el carácter de control. Si ha de ser numérico,el carácter es directamente D. Si ha de ser letra, al 1 le corresponde la A, al 2 la B, etc.

EJEMPLO:
CIF: "A58818501"
- Quitamos los caracteres inicial y final y nos queda "5881854"
- Suma de los dígitos pares: A = 8 + 1 + 5 = 14
- Posiciones impares:
- 5 * 2 = 10 ==> 1 + 0 = 1
- 8 * 2 = 16 ==> 1 + 6 = 7
- 8 * 2 = 16 ==> 1 + 6 = 7
- 0 * 2 = 0 ==> 0
La suma de las sumas es B = 1 + 7 + 7 = 15
- C = A + B = 14 + 15 = 29
- El dígito de las unidades de C es 9. Se lo restamos a 10 y eso da D = 10 - 9 = 1
- Si el carácter de control ha de ser letra, es la "A". Si ha de ser numero, es "1". En el caso del ejemplo es un "1".
- En el caso de que el resultado final sea 10 - 0 , o sea 10, el número de validación será el CERO y si es letra la JOTA.

ALGORITMO EN: 
http://www.q3.nu/trucomania/truco.cgi?337
http://www.elpatron.com/consultorio/consultas02.htm
/*********************************************************************************************/

function calcularNIF(dni) {
dni=dni.toUpperCase();
if (dni.length!=9) return false;
if (!/^(\d{8})(\w)$/.test(dni)) {
    //puede ser que sea un cif
	if (!/^(\w)(\d{7})((\d{1})|(\w{1}))$/.test(dni)) return false;
	else { //estamos ante un cif
		var ncif=dni.substring(1,8);
		var lcif=dni.substring(0,1);
		var fcif=dni.substring(8,9);
		if (lcif=='N') {return true;}//si empieza por N son americanos, se aceptan todos
		if (lcif=='X') {
			var ldni=dni.substring(8,9);
			if (/^(\d)$/.test(ldni)) return true;
			else {
				var letras = 'TRWAGMYFPDXBNJZSQVHLCKE';
				var numero = (dni.substring(1,8))%23;
				return (letras.substring(numero,numero+1))==ldni;
			}
		}
		var suma=parseInt(ncif.substring(1,2))+parseInt(ncif.substring(3,4))+parseInt(ncif.substring(5,6));
		var sumainter=0;
		for (j=0;j<=6;j+=2){
		var inte=parseInt(ncif.substring(j,j+1))
		inte=2*inte;
		suma=suma+(inte%10)+(parseInt(inte/10));
		}
		var control = 10 - (suma % 10);
		var correcto = false;
		if (lcif=='P' || lcif=='S' || lcif=='Q' || lcif=='G') {
			correcto = fcif.charCodeAt(0) == 64 + control;
		}
	   	if (!correcto){
			  //Resto de tipos de CIF, Control tipo número
		     if (control == 10)  control = 0; 
		     correcto = parseInt(fcif) == control;
		     }
		   return correcto;
		}
    }
else { //estamos ante un dni
var ldni=dni.substring(8,9);
var ndni=dni.substring(0,8);
var letras = 'TRWAGMYFPDXBNJZSQVHLCKE';
var numero = ndni%23;
 if((letras.substring(numero,numero+1)!=ldni))  return false;
 else return true;
}
return true;
}

function esDNI(dni) {
dni=dni.toUpperCase();
if (!/^(\d{8})(\w)$/.test(dni)) {
    var lcif=dni.substring(0,1);
    if (lcif=='X') {return true;}
    else {return false;}
}
else {return true;}
}

function telefonoCorrecto(tfno){
if(tfno.length!=9) return false;
if (!/^(9|6|8)\d{8}/.test(tfno)) return false;
else return true;
}