
function CIFCorrecto(cif) {
	//Comprueba que tenga 9 dígitos, el primero debe ser una letra y el resto números
	
	/*if (!/^([A-Z]\d{8})|([PX]\d{7}[A-J])$/.test(cif.toUpperCase()))	{
		return false;
	}*/
	
	//Comprueba que la letra sea una de las posibles
	if (!/^[ABCDEFGHKLMPQRSXY]/.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;
	var digitoNumericoControl;
	
	//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;
	
	digitoNumericoControl = digitoControl
	
	//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() == "Q" || arrayCIF[0].toUpperCase() == "G"  || arrayCIF[0].toUpperCase() == "X" || arrayCIF[0].toUpperCase() == "Y" || arrayCIF[0].toUpperCase() == "S" || arrayCIF[0].toUpperCase() == "R") {
		digitoControl = String.fromCharCode(digitoControl + 64);
	} 

	//PARCHE: no era correcto cuando  los CIF acababan en 0
	if (digitoControl.toString() == '10') {
		digitoControl = 0;
	}
	if (digitoNumericoControl.toString() == '10') {
		digitoNumericoControl = 0;
	}
	
	
	//Comprueba si el dígito de control se corresponde correctamente
	if (digitoControl.toString() == arrayCIF[8].toUpperCase()) {
		return true;
	} else {
		if (arrayCIF[0].toUpperCase() == "Y") {
			return true;
		} else {
			// Algunas letras el DC puede ser una letra o un numero
			if (digitoNumericoControl.toString() == arrayCIF[8].toUpperCase() && arrayCIF[0].toUpperCase() == "G") {
				return true;
			} else {
				return false;
			}
		}
	}
}


function NIFCorrecto(num) {
	abc=num
	dni=abc.substring(0,abc.length-1)
	let=abc.charAt(abc.length-1)
	
	if (!isNaN(let)){
		return false
	} else	{
		cadena="TRWAGMYFPDXBNJZSQVHLCKET"
		posicion = dni % 23
		letra = cadena.substring(posicion,posicion+1)
		if (letra!=let.toUpperCase()) {
			return false
		} else
			return true
	}
}

function PasaporteCorrecto(num) {
	abc=num
	pass=abc.substring(0,1)

		if (pass.toUpperCase()=='X') {
			return true
		} else
			return false
}


function isEmpty(s) {   
	return ((s == null) || (s.length == 0))
}

// s es una direccion de correo valida
function isEmail (s) {
    if (isEmpty(s))
       if (isEmail.arguments.length == 1) return false;
       else return (isEmail.arguments[1] == true);
    //if (isWhitespace(s)) return false;
    var i = 1;
    var sLength = s.length;
    while ((i < sLength) && (s.charAt(i) != "@")) { 
		i++
    }

    if ((i >= sLength) || (s.charAt(i) != "@")) return false;
    else i += 2;

    while ((i < sLength) && (s.charAt(i) != ".")) { 
		i++
    }

    if ((i >= sLength - 1) || (s.charAt(i) != ".")) return false;
    else return true;
}

function roundNumber(num, dec) {
	var result = Math.round(num*Math.pow(10,dec))/Math.pow(10,dec);
	return result;
}

// truncamos decimales
function truncDecimal(amount,num,nodec) {
	var val=new String(amount);
	var cad=val.split('.');
	var decimals='';
	// separate data
	if(cad.length>1) {
	    var dec=cad[cad.length-1];
	    cad.splice(cad.length-1,1);
	    decimals=dec.substr(0,num);
	    val=cad.join('.');
	}
	// fill decimales
	for (var i=0;i<=num;i++) {
	    if (decimals.length<i && !nodec) {
	        decimals+='0';
	    }
	}
	if (decimals!='') {
	    return parseFloat(val)+'.'+decimals
	} else {
	    return parseFloat(val);
	}
}