///// Funciones para validar formularios /////// Devuelve TRUE si el caracter es un digitofunction es_digito(c) {	if ((c.charCodeAt(0) >= "0".charCodeAt(0)) &&		(c.charCodeAt(0) <= "9".charCodeAt(0))) {		return true;	} else {		return false;	}}// Devuelve TRUE si el caracter es una letrafunction es_letra(c) {	c = c.toLowerCase();	if ((c.charCodeAt(0) >= "a".charCodeAt(0)) &&		(c.charCodeAt(0) <= "z".charCodeAt(0))) {		return true;	} else {		return false;	}}// Valida una direccion de correo electronico (@ y .)function validamail(strEmail) {return -1 != strEmail.search(/^[_\.0-9a-zA-Z-]+@([0-9a-zA-Z][0-9a-zA-Z-]+\.)+[a-zA-Z]{2,6}$/);/*	if ((strEmail.indexOf("@") != -1) && (strEmail.indexOf(".") != -1)){		return true;	} else {		return false;	}*/}// Valida que el valor recibido tenga formato de Codigo Postal (5 cifras)function validaCP(cp) {	var j	if (cp.length != 5) {		return false	}	for (j = 0; j < cp.length; j++) {		if (!es_digito(cp.charAt(j))) {			return false		}	}	return true}// Valida que el valor recibido corresponda con el formato de número de teléfono// (al menos 9 digitos y el signo + opcional, se admiten como separadores " " y "-")function validaTfno(tfno) {	var n	var total = 0	var ini = 0	var min = 9	if (tfno.charAt(0) == '+') {		ini = 1	}	for (n = ini; n < tfno.length; n++) {		car = tfno.charAt(n)		if (es_digito(car)) {			total++		} else if ((car != ' ') && (car != '-')) {			return false		}	}	return (total >= min)}// Filtra la cadena de texto para que solo contenga mayúsculas y digitosfunction filtrar_nif_cif(cadena) {	i = 0	res = ""	while (i < cadena.length) {		if (es_letra(cadena.charAt(i)) || es_digito(cadena.charAt(i))) {			res += cadena.charAt(i).toUpperCase();		}		i++	}	return res}// Devuelve la letra correspondiente a un niffunction calcular_letra_nif(numero) {	letras = 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")	return (letras[numero % 23]);}function calcular_letra_cif(cif) {    var acaban_en_letra = 'PQSX';    cif=cif.toUpperCase();    suma = parseInt(cif.charAt(2)) + parseInt(cif.charAt(4)) + parseInt(cif.charAt(6));    for (i = 1; i <= 4; i++) {        doble = 2 * parseInt(cif.charAt(2*i - 1))        suma += (doble % 10) + parseInt(doble / 10)    }    codigo = 10 - (suma % 10)    if (codigo == 10) {        codigo = 0    }    if (acaban_en_letra.indexOf(cif.charAt(0)) >= 0) return String.fromCharCode(64 + codigo);    else return parseInt(codigo)}// Valida que la cadena recibida tenga formato válido de NIFfunction validar_nif(nif) {	if (!es_digito(nif.charAt(1)) || !es_digito(nif.charAt(2)) || !es_digito(nif.charAt(3)) || !es_digito(nif.charAt(4)) || !es_digito(nif.charAt(5)) || !es_digito(nif.charAt(6)) || !es_digito(nif.charAt(7)) || !es_letra(nif.charAt(8))) {		alert(ERR_NIF_1); // El NIF debe constar de 8 cifras y una letra		return false;	}	if (calcular_letra_nif(nif.substr(0,8)) != nif.charAt(8).toUpperCase()) {		alert(ERR_NIF_2); // "La letra del NIF no es correcta")		return false;	}	return true;}// Valida que la cadena recibida tenga formato válido de CIFfunction validar_cif(cif) {	var i	letras_iniciales = 'ABCDEFGHKLMPQSX';	acaban_en_letra = 'PQSX';	cif = cif.toUpperCase();	if ((letras_iniciales.indexOf(cif.charAt(0)) < 0) || !es_digito(cif.charAt(1)) || !es_digito(cif.charAt(2)) || !es_digito(cif.charAt(3)) || !es_digito(cif.charAt(4)) || !es_digito(cif.charAt(5)) || !es_digito(cif.charAt(6)) || !es_digito(cif.charAt(7)) || (!es_digito(cif.charAt(8)) && !es_letra(cif.charAt(8)))) {		alert(ERR_NIF_3); // "Formato incorrecto de CIF"		return false;	}	suma = parseInt(cif.charAt(2)) + parseInt(cif.charAt(4)) + parseInt(cif.charAt(6));	for (i = 1; i <= 4; i++) {		doble = 2 * parseInt(cif.charAt(2*i - 1))		suma += (doble % 10) + parseInt(doble / 10)	}	codigo = 10 - (suma % 10)	if (codigo == 10) {		codigo = 0	}	if (acaban_en_letra.indexOf(cif.charAt(0)) >= 0) {		if (cif.charAt(8) != String.fromCharCode(64 + codigo)) {			alert(ERR_NIF_4); // "El último caracter del CIF no es correcto"			return false		}	}	else if (parseInt(cif.charAt(8)) != parseInt(codigo)) {		alert(ERR_NIF_4); // "El último caracter del CIF no es correcto"		return false	}	return true}// Valida que el elemento recibido tenga formato válido de NIF/CIFfunction validar_nif_cif(formulario, campo) {	elem = document.forms[formulario].elements[campo]	elem.value = filtrar_nif_cif(elem.value)	nif_cif = elem.value	if (nif_cif.length != 9) {		alert(ERR_NIF_5); // "El NIF/CIF debe contener 9 caracteres"		return false;	}	if (es_digito(nif_cif.charAt(0))) {		return validar_nif(nif_cif);	}	else if (es_letra(nif_cif.charAt(0))) {		return validar_cif(nif_cif);	}	else {		alert(ERR_NIF_6); // "El NIF/CIF debe comenzar por letra o número"		return false	}}// valida que el campo sea un nif o un nie válido.function validar_nif_nie(nif) {    if(nif.charAt(0).toUpperCase()!='X'){        return validar_nif(nif);    } else {        return validar_nie(nif);    }}// Valida que los campos recibidos hayan sido rellenadosfunction validar_obligatorios(formulario, campos_obligatorios) {	var n	for (n = 0; n < campos_obligatorios.length; n++) {		campo = campos_obligatorios[n]		if (!campo.disabled){			if (!obtenerValor(formulario, campo)) {				foco(formulario, campo);				return false;			}		}	}	return true}// Valida que el valor recibido tenga formato de año (4 cifras)function validaAnyo(anyo) {	var j	if (anyo.length != 4) {		return false	}	for (j = 0; j < anyo.length; j++) {		if (!es_digito(anyo.charAt(j))) {			return false		}	}	return true}function validarFecha(campo) {    f = campo.value;    if (campo.value.length == 10) {        var dia = f.substr(0,2);        var mes = f.substr(3,2);        var anyo  = f.substr(6,4);        var ndia  = parseInt(dia, 10);        var nmes  = parseInt(mes, 10);        var nanyo = parseInt(anyo, 10);        var dias  = new Array(31,28,31,30,31,30,31,31,30,31,30,31);        if (nanyo % 4 == 0 && nanyo % 400 != 0) {            dias[1] = 29;        }        if (nmes >= 1 && nmes <= 12 && ndia >= 1 && ndia <= dias[nmes-1] ) {            campo.value = dia + "/" + mes + "/" + anyo;            return true;        } else {            alert(ERR_FECHA_INVALIDA);        }    } else if (campo.value) {        alert(ERR_FECHA_FORMATO);        campo.value = "";    	campo.focus();    }//    campo.value = "";	campo.focus();    return false;}function validarFechaAnyos(campo,anyoini,anyofin) {	if (validarFecha(campo)) {		var anyo  = campo.value.substr(6,4);		var nanyo = parseInt(anyo, 10);		if (!(anyoini<=nanyo && nanyo<=anyofin)) {			alert(ERR_FECHA_RANGOANYOSINVALIDO + anyoini + '-' + anyofin);			campo.focus();			return false;		}	}	return true;}function validarFechaSelect(selectDia, selectMes, selectAnyo) {    if ((selectDia.value != "") && (selectMes.value != "") && (selectAnyo.value != "")) {        var dia = selectDia.value;        var mes = selectMes.value;        var anyo  = selectAnyo.value;        var ndia  = parseInt(dia, 10);        var nmes  = parseInt(mes, 10);        var nanyo = parseInt(anyo, 10);        var dias  = new Array(31,28,31,30,31,30,31,31,30,31,30,31);        if (nanyo % 4 == 0 && nanyo % 400 != 0) {            dias[1] = 29;        }        if (nmes >= 1 && nmes <= 12 && ndia >= 1 && ndia <= dias[nmes-1] ) {            return true;        } else {            alert(ERR_FECHA_NO_VALIDA);        }    } else {        alert(ERR_FECHA_NO_VALIDA);    }    return false;}//Valida la tarjeta de residentefunction validar_nie(NIF){    var tabla = 'TRWAGMYFPDXBNJZSQVHLCKE';    if (((NIF.charAt(0)).toUpperCase())=='X')  //Tarjeta de residentes, nuevo formato    {       sinletra2=NIF.substring(1,NIF.length-1);       while(sinletra2.length<7)       {         sinletra2="0"+sinletra2;       }       for(i=1;i<NIF.length-1;i++)       {         if (!es_digito(NIF.charAt(i))){            alert(ERR_NIE_1);            return false;         }       }       numero2=parseInt(sinletra2) % 23;       if (tabla.charAt(numero2)==(NIF.charAt(8)).toUpperCase()) return true;       alert(ERR_NIE_1);       return false;    }}// NIF 8 cifras y letrafunction validaNIF(str) {    return -1 != str.search(/^[0-9]{8}[A-Z]$/i) &&           calcular_letra_nif(str.substr(0,8)) == str.charAt(8).toUpperCase();}// CIFfunction validaCIF(str) {    return -1 != str.search(/^[ABCDEFGHNPQSX][0-9]{7}[0-9A-Z]$/i) &&           calcular_letra_cif(str) == str.charAt(8).toUpperCase();}// NIE X, 7 cifras y letrafunction validaNIE(str) {    return -1 != str.search(/^X[0-9]{7,8}[A-Z]$/i) &&           calcular_letra_nif(str.substr(1,str.length-2)) == str.charAt(str.length-1).toUpperCase();}// alfanumerico (cifras y letras)function validaOTROS(str) {    return -1 != str.search(/^[0-9A-Z]+$/i);}