// Version 1.4.3

// Para usarla directamente con el validador
validarCifNif = function(cifnif) {
	cifnif.value = cifnif.value.toUpperCase();
	if (cifnif.value.length == 0) return true;
	if (cifnif.value.match(/^[TXYZ0-9].*/)) // primer caracter es T, X, Y, Z o un número => NIF
		return validarNif(cifnif.value);
	else return validarCif(cifnif.value);
}

// Crear una funcion para el validador que coja el valor del campo y se lo pase a esta
validarNif = function(nif) {
	if (nif.match("^[XYZ0-9]\\d{7}[TRWAGMYFPDXBNJZSQVHLCKE]$")) {
		// si primer caracter es una X, Y o Z es NIE, X => 0, Y => 1, Z => 2
		nif = nif.replace(/^X/, '0');
		nif = nif.replace(/^Y/, '1');
		nif = nif.replace(/^Z/, '2');
		
		var dni = parseInt(nif, 10);
		var letra = dni % 23;
		var letras = "TRWAGMYFPDXBNJZSQVHLCKE";
		if (letras.charAt(letra) == nif.charAt(nif.length-1)) return true;
	} else if (nif.match("^T[A-Z0-9]{8}$")) return true; // NIF que usa el número de identidad de otro país
	return "El NIF no es válido";
}

// Crear una funcion para el validador que coja el valor del campo y se lo pase a esta
validarCif = function(cif) {
	if (cif.match("^[ABCDEFGHJKLMNPQRSUVW]\\d{7}[0-9A-J]$")) {
		var suma = parseInt(cif.charAt(2)) + parseInt(cif.charAt(4)) + parseInt(cif.charAt(6));
		suma += sumaCif(cif.charAt(1)) + sumaCif(cif.charAt(3)) + sumaCif(cif.charAt(5)) + sumaCif(cif.charAt(7));
		var n = 10 - suma%10;
		var ultimo = cif.charAt(cif.length-1);
		if (ultimo.charCodeAt(0) == 'A'.charCodeAt(0)+n-1 || ultimo == n%10) return true;
	}
	return "El CIF no es válido";
}

// para uso de validarCif
sumaCif = function(num) {
	var string = (parseInt(num)*2).toString();
	var suma = parseInt(string.charAt(0));
	if (string.length > 1) suma += parseInt(string.charAt(1));
	return suma;
}

// Para usarla directamente con el validador y añadirla al campo cuenta creado con libadmin
validateCuenta = function(campo_cuenta) {
	var error = "La cuenta bancaria no es válida";
	var longitudes = new Array(4, 4, 2, 10);
	
	campo_cuenta.value = $F(campo_cuenta.id + '_cuenta_0') + '-' + $F(campo_cuenta.id + '_cuenta_1') + '-' + $F(campo_cuenta.id + '_cuenta_2') + '-' + $F(campo_cuenta.id + '_cuenta_3');
	if (campo_cuenta.value == "---") {
		campo_cuenta.value = "";
		return true;
	}
	
	for(var i=0; i < 4; i++) {
		var value = $F(campo_cuenta.id + "_cuenta_"+i);
		if (value.search("[^0-9]") >= 0) return error;
		else if (value.length != 0 && value.length != longitudes[i]) return error;
	}
	
	d1 = calcularDigito("00" + $F(campo_cuenta.id + "_cuenta_0") + $F(campo_cuenta.id + "_cuenta_1"));
	d2 = calcularDigito($F(campo_cuenta.id + "_cuenta_3"));
	if ($F(campo_cuenta.id + "_cuenta_2") == d1+d2) return true;
	else return error;
}

// para uso de validateCuenta
calcularDigito = function(cadena) {
	pesos = new Array(1,2,4,8,5,10,9,7,3,6);
	var calc = 0;
	pesos.each(function(peso, i) {
		calc += peso * cadena.charAt(i);
	});
	digito = 11 - calc % 11;
	if (digito == 11) digito = 0;
	else if (digito == 10) digito = 1;
	return digito.toString();
}

// Validacion de captcha por AJAX, usa validar_captcha.php
validateCaptcha = function(campo) {
	var ajax = new Ajax.Request("validar_captcha.php", {asynchronous: false, parameters: "captcha_txt="+campo.value});
	if (ajax.evalResponse()) return true;
	else return "Incorrecto";
}

// Comprueba que la contraseña se haya puesto las dos veces igual
validatePassword = function(campo) {
	var pw2 = campo.value
	var pw = $F(campo.id.substr(0, campo.id.length-1));
	if ((pw.length == 0 && pw2.length == 0) || (pw == pw2))
		return true;
	else return "Las contraseñas no son iguales";
}

// Para usarla directamente con el validador
validarISBN = function(isbn) {
	if (isbn.value.length == 0) return true;
	
	isbn = isbn.value.replace(/-/g, "");
	switch (isbn.length) {
		case 10:
			var suma = 0;
			for (var i = 0; i < isbn.length-1; i++) suma += parseInt(isbn.charAt(i)) * (10-i);
			
			var control = isbn.charAt(isbn.length-1);
			if (control.toUpperCase() == "X") control = 10;
			else control = parseInt(control);
			if ((11 - suma % 11) == control) return true;
			break;
		case 13:
			var suma = 0;
			for (var i = 0; i < isbn.length-1; i++) {
				var digito = parseInt(isbn.charAt(i))
				if (i % 2 == 0) suma += digito;
				else suma += digito * 3;
			}
			
			var control = parseInt(isbn.charAt(isbn.length-1));
			if (control == 0) control = 10;
			if ((10 - suma % 10) == control) return true;
			break;
	}
	return "No es válido";
}

