// Script general de validación de formularios (Version 1.0)
// Impiric

function esNumero(s) {
	num=parseFloat(s)
	if (num!=''+s) return false
    return true
}

function esEntero(s) {   
/*	num=parseInt(s)
	if (num!=''+s) return false
    return true
*/
	return !isNaN(s);
}

function esVacio(s){
   return ((s == null) || (s.length == 0));
}

var numeros="0123456789"
var letras_minusculas="a,b,c,d,e,f,g,h,i,j,k,l,m,n,ñ,o,p,q,r,s,t,u,v,w,x,y,z"
var letras_mayusculas=letras_minusculas.toUpperCase()
var letras=letras_minusculas+letras_mayusculas

function esNombre (s){
    if (esVacio(s)) return false
    validos = letras+" "
    for (i = 0; i < s.length; i++){   
        c = s.charAt(i);
        if (validos.indexOf(c) == -1) return false;
    }
	return true
}

function esDNI(s) {
	if (s.length<=8) return esEntero(s)
}

function esNIF(s) {
	s=s.replace("-","");
    lo=s.length
	if (lo<2 || lo>9) return false
    dni=s.substring(0,lo-1)
    if (!esDNI(dni)) return false
	letra=new Array("T","R","W","A","G","M","Y","F",
					"P","D","X","B","N","J","Z","S",
					"Q","V","H","L","C","K","E");
    nif=s.substring(lo-1,lo).toUpperCase()
    if (nif!=letra[dni%23]) return false
	return true
}

function esEmail(s) {
	if (s=="") return true;
    pb=s.indexOf(' ')
    if (pb!=-1) return false
	p1=s.indexOf('@')
    if (p1<1 || p1==(s.length-1) || p1==-1) return false
	p2=s.indexOf('.');
	if (p2<1 || p2==p1+1 || p2==-1 || p2==(s.length-1)) return false
	return true
}


function esTelefono(tel){
	primerdigito="9"
	if (tel.length!=9 || !esEntero(tel) || (primerdigito.indexOf(tel.charAt(0)) == -1)) 
		return false
	return true
}
function esMovil(tel){
	primerdigito="6"
	if (tel.length!=9 || !esEntero(tel) || (primerdigito.indexOf(tel.charAt(0)) == -1)) 
		return false
	return true
}

/*
function esTelefono(tel){
		if (tel=="") return false;
		num = parseInt(tel);
		if (num != '' + tel)
			return false;

		primerdigito = "69";
		if (tel.length!=9 || (primerdigito.indexOf(tel.charAt(0))==-1))
			return false;
		return true;
}
*/

function esFecha(diaV,mesV,anoV)
{
	if(anoV.length<4){
		return false
	}else{
		if(mesV>12){
			return false;
		}else{
			if((anoV%4)==0)
			{
				mes=Array(31,29,31,30,31,30,31,31,30,31,30,31);
				}
			else
			{
				mes=Array(31,28,31,30,31,30,31,31,30,31,30,31);
			}
			
			if(parseInt(diaV)>mes[mesV-1]){
			 return false;
			}
		}
	}
	return true;		
}
function esCPostal(e)
{
	if (e=="99000") return true; //Codigo Postal establecido para Andorra
	num=(e)*1;
	if ((num < 1001) || (num > 52080) || (!esEntero(num)))
		return false;
	return true;
}

/*
Script para comprobar la validez de
un CIF en España (incluso para sociedades)
*/ 
function CIFCorrecto(cif)
{
//Comprueba que tenga 9 dígitos, el primero debe ser una letra y el resto números

if (!/^([P]\d{8})|([PX]\d{7}[A-J])$/.test(cif.toUpperCase()))
{
return false;
}

//Comprueba que la letra sea una de las posibles
//ABCDEFGHKLMPQSX
if (!/^[P]/.test(cif.toUpperCase()))
{
return false;
}

//Comprueba el dígito de control del CIF
return ComprobarDigitoControlCIF(cif);
}

/*
La siguiente función se encarga de validar el dígito de control
*/
function ComprobarDigitoControlCIF(cif){
	var arrayCIF
	var sumaDigitosPares = 0;
	var sumaDigitosImpares = 0;
	var numero;
	var arrayNumero;
	var digitoControl;
	
	//mete el cif en un array
	arrayCIF = cif.split("");
	
	//Si no tiene 9 caracteres es incorrecto
	if (arrayCIF.length != 9)	{
		return false;
	}
	
	//Suma los dígitos pares de la cadena resultante de quitar el primer y último caracter del CIF
	for(i = 2; i < arrayCIF.length - 1; i = i + 2)
	{
		sumaDigitosPares = sumaDigitosPares + parseInt(arrayCIF[i]);
	}
	
	//Multiplicar por 2 los dígitos impares de la cadena resultante de quitar el primer y último caracter del CIF
	//y con cada resultado, sumar sus dígitos. 
	//Sumarlo todo
	for(i = 1; i < arrayCIF.length - 1; i = i + 2)
	{
		numero = arrayCIF[i] * 2;
		if (numero > 9)
		{
		numero = (numero % 10) + 1
		}
		
		sumaDigitosImpares = sumaDigitosImpares + numero;
	}
	
	//Sumar la suma de dígitos pares y la de dígitos impares
	//Coger la última cifra del número obtenido y restarle 10
	numero = sumaDigitosPares + sumaDigitosImpares 
	for (i = numero; i >= 0; i = i - 10)
	{
	numero = i;
	}
	digitoControl = 10 - numero;
	
	//Para los tipos de sociedades P y X el dígito de control debe ser una letra
	if (arrayCIF[0].toUpperCase() == "P" || arrayCIF[0].toUpperCase() == "X")
	{
	digitoControl = String.fromCharCode(digitoControl + 64);
	} 
	
	//Comprueba si el dígito de control se corresponde correctamente
	if (digitoControl.toString() == arrayCIF[8])
	{
	return true;
	}
	else
	{
	return false;
	}
}