var letrasNif = ["T","R","W","A","G","M","Y","F","P","D","X","B","N","J","Z","S","Q","V","H","L","C","K","E"];


/**
 * Dado el c�digo Unicode de un car�cter, devuelve el c�digo Unicode del
 * mismo car�cter en may�sculas.
 * @param iCh Entero que representa car�cter.
 * @return Entero que representa el mismo car�cter pasado a may�sculas.
*/
function pasaMayuscula(iCh) {
	return ( ( String.fromCharCode(iCh) ).toUpperCase() ).charCodeAt(0);
}
/**
 * Pasa a mayusculas el caracter pulsado.
 * Evento onkeypress para validar DNI.
 */
function mydnitag_onkeypress() {
	event.keyCode = pasaMayuscula(event.keyCode);
}
/**
 * Comprueba que el DNI sea correcto.
 * Puede ser los 8 caracteres que forman el n�mero, o nueve con la letra.
 * Evento onkeyup para validar DNI.
 * @param obj Objeto input del dni.
 */
function mydnitag_onkeyup(obj) {
	obj.iscorrect = false;
	var len = parseInt(obj.value.length, 10);
	switch (len) {
		//case 8:	obj.iscorrect = !isNaN(obj.value); break;
		case 9:	obj.iscorrect = valNIF(obj.value); break;
	}
}



/*****************************************************************************
******************************************************************************/
/* VALIDAR FECHA
PARAMETROS:
	x: string que contiene una fecha dd/mm/yyyy
DEVUELVE:
	true: la fecha es valida
	false: eoc
*/
function valFecha(x){
	var sFecha = new String(x);

	//Comprobar longitud 10 caracteres
	if (sFecha.length != 10)
		return false;

	//Comprobar que el formato es dd/mm/aaaa
	var primerabarra = sFecha.substring(2,3);
	var segundabarra = sFecha.substring(5,6);
	var ultimonumero = sFecha.substring(9,10);
	if (!(primerabarra == "/" && segundabarra == "/" && ultimonumero != ""))
		return false;

	//comprobar que sea fecha v�lida
	var dia = sFecha.substring(0,2);
	var mes = sFecha.substring(3,5);
	var ano = sFecha.substring(6,10);
	var fecha = new Date(ano, String(parseInt(mes, 10)-1), dia);

	var nuevoAno = fecha.getYear();
	if (nuevoAno < 2000) {
		nuevoAno += 1900;
	}
	if ((parseInt(dia, 10) != fecha.getDate()) || (parseInt(mes, 10)-1 != fecha.getMonth()) || (parseInt(ano, 10) != nuevoAno))
		return false;
	return true;
}
/**
 * Comprueba que el dato pasado sea un n�mero de 8 d�gitos.
 * @param xdni N�mero de dni con formato 00000000 y sin la letra.
 * @return Verdadero si es n�mero de 8 d�gitos. 
*/
function valDNI(xdni){
	var dni = new String(xdni);
	if (dni == "") return false;
	if (dni.length > 8)
		return false;
	return !isNaN(dni);
}
/*****************
CALCULAR LETRA NIF
PARAM:
	x: str con letra dni
	   debe ser una cadena con el formato 00.000.000.
	   ya se supone validada
RETURN:
	NULL, en caso de error
	letra del nif
*/
function letraNIF(dni){
	//Letras de NIF
	if (isNaN(dni))
		return null;
	var flDni = parseFloat(dni);
	var x = flDni % 23;
	return letrasNif[x];
}
/**********
VALIDAR NIF
	Comprueba que se corresponda la letra con el n�mero pasado
PARAM:
	nif: cadena de texto con formato 00000000L
*/
function valNIF(nif){
	if (nif.length != 9) {
		return false;
	}
	if (!valDNI(nif.substring(0, 8))) {
		return false;
	}
	var letra = letraNIF(nif.substring(0, 8));
	if (nif.substring(8, 9) != letra) {
		//if (letra != null)
		//	alert("La letra del DNI introducido no es correcta.\nLa letra correcta es: " + letra);
		return false;
	}
	return true;
}
/* COMPROBAR CAMPO DE FORM NO VAC�O
PARAM:
	x: objeto campo de formulario
	msg: mensaje a mostrar en caso que campo vacio
*/
function valCampo(x, msg){
	if (x.value == 0) {
		alert(msg);
		x.focus();
		return false;
	}
	return true;
}
/* PASAR A MAYUSCULAS
PARAM:
	obj: campo texto de formulario
DEVUELVE:
	cadena de texto pasada a may�sculas
*/
function pasaMayusc(obj){
	var x = String(obj.value);
	return x.toUpperCase();
}

// Dado un n�mero, devuelve su parte decimal
// cero si no tiene
// Se debe pasar un n�mero validado
function parteDec(strNum) {
	var str = new String(strNum);
	if ((dec = str.indexOf(".")) == -1)
		return 0;
	var L = parseInt(str.substring(dec+1, str.length), 10);
	if ( isNaN(L) )
		return 0;
	return L;
}

// numFormat
// Dar formato a un n�mero.
// Dado un n�mero, si tiene decimales, le pone solo dos: 0.00
function numFormat(num) {
	// Redondear a dos decimales
	var aux = parseFloat(num);
	aux *= 100;
	aux = Math.round(aux);
	aux /= 100;
	
	var strNum = new String(aux);

	if (strNum.indexOf(".") != -1) {
		var strDec = strNum.substring(strNum.indexOf(".") + 1, strNum.length);
		if (strDec.length == 1)
			return strNum += "0";
	}
	return strNum;
}



function isValidCif(abc){
	par = 0;
	non = 0;
	letras = "ABCDEFGHKLMNPQS";
	let = abc.charAt(0);

	if (abc.length!=9) {
		//alert('El Cif debe tener 9 dígitos');
		return false;
	}

	if (letras.indexOf(let.toUpperCase())==-1) {
		//alert("El comienzo del Cif no es válido");
		return false;
	}

	for (zz=2;zz<8;zz+=2) {
		par = par+parseInt(abc.charAt(zz));
	}

	for (zz=1;zz<9;zz+=2) {
		nn = 2*parseInt(abc.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!=abc.charAt(8)) {
		//alert("El Cif no es válido");
		return false;
	}
	//alert("El Cif es válido");
	return true;
}


function isValidNif(abc){
	dni=abc.substring(0,abc.length-1);
	let=abc.charAt(abc.length-1);
	if (!isNaN(let)) {
		//alert('Falta la letra');
		return false;
	}else{
		cadena = "TRWAGMYFPDXBNJZSQVHLCKET";
		posicion = dni % 23;
		letra = cadena.substring(posicion,posicion+1);
		if (letra!=let.toUpperCase()){
			//alert("Nif no válido");
			return false;
		}
	}
	//alert("Nif válido")
	return true;
}



function isValidEmail(str){
	var filter=/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;
	return (filter.test(str));
}

function isValidTelef(num){
	if(num.length < 9){
		return false;
	}else if(isNaN( num )){
		return false;
	}else{
		return true;
	}
}

function isValidDateFormat(str){
	var filter=/^(\d{1,2}\/\d{1,2}\/\d{2})$/i;
	return (filter.test(str));
}
