
//*****************************************************************************************
//Nombre función: VACIO
//Descripción: Comprueba si un campo está vacío
//Parámetros: campo - path javascript hasta llegar al campo
//Resultado: true si el campo está vacío
//           false si el campo está informado
//*****************************************************************************************

function vacio(campo)
{
	cadena = new String(eval(campo + ".value"));
	if (cadena.length == 0)
	{
		return true;
	}
	return false;
}

//*****************************************************************************************
//Nombre función: OBLIGATORIO
//Descripción: Comprueba si un campo es obligatorio o no, mostrando el error correspondiente
//Parámetros: campo - path javascript hasta llegar al campo
//            nombre_campo - nombre que se mostrará en los mensajes de error
//Resultado: true si el campo es obligatorio y no está lleno
//           false si el campo está informado
//*****************************************************************************************

function obligatorio(campo, nombre_campo)
{
	cadena = new String(eval(campo + ".value"));
	if (cadena.length == 0)
	{
		alert("El campo " + nombre_campo + " es obligatorio");
		eval(campo + ".select()");
		return true;
	}
	return false;
}
	
//*****************************************************************************************
//Nombre función: SUPERA
//Descripción: Comprueba si un campo supera el límite estipulado en longitud
//Parámetros: campo - path javascript hasta llegar al campo
//            maximo - límite de caracteres establecido
//            nombre_campo - nombre que se mostrará en los mensajes de error
//Resultado: true si el campo supera el límite
//           false si el campo no supera el límite
//*****************************************************************************************

function supera(campo, maximo, nombre_campo)
{
	cadena = new String(eval(campo + ".value"));
	if (cadena.length > maximo)
	{
		alert("El campo " + nombre_campo + " no puede tener más de " + maximo + " caracteres");
		eval(campo + ".select()");
		return true;
	}
	return false;	
}

//*****************************************************************************************
//Nombre función: NO_ALCANZA
//Descripción: Comprueba si un campo alcanza un mínimo estipulado en longitud
//Parámetros: campo - path javascript hasta llegar al campo
//            minimo - unmbral mínimo de caracteres establecido
//            nombre_campo - nombre que se mostrará en los mensajes de error
//Resultado: true si el campo no alcanza el mínimo
//           false si el campo alcanza el mínimo
//*****************************************************************************************

function no_alcanza(campo, minimo, nombre_campo)
{
	cadena = new String(eval(campo + ".value"));
	if (cadena.length < minimo)
	{
		alert("El campo " + nombre_campo + " ha tener como mínimo " + minimo + " caracteres");
		eval(campo + ".select()");
		return true;
	}
	return false;	
}

function numero_caracteres_obligatorios(campo, cuantos, nombre_campo)
{
	cadena = new String(eval(campo + ".value"));
	if (cadena.length < cuantos)
	{
		alert("El campo " + nombre_campo + " ha tener " + cuantos + " caracteres");
		eval(campo + ".select()");
		return true;
	}
	return false;	
}
	
//*****************************************************************************************
//Nombre función: ESEMAIL
//Descripción: Comprueba si un string se corresponde a una dirección email válida
//Parámetros: campo - path javascript hasta llegar al campo
//            nombre_campo - nombre que se mostrará en los mensajes de error
//Resultado: true si el campo es válido como email
//           false si el campo no es válido como email
//*****************************************************************************************

function esemail(campo, nombre_campo)
{
	str = new String(eval(campo+".value"));
	// are regular expressions supported?
	var supported = 0;
	if (window.RegExp) {
		var tempStr = "a";
		var tempReg = new RegExp(tempStr);
		if (tempReg.test(tempStr)) supported = 1;
	}
	if (!supported) return (str.indexOf(".") > 2) && (str.indexOf("@") > 0);
	var r1 = new RegExp("(@.*@)|(\\.\\.)|(@\\.)|(^\\.)");
	var r2 = new RegExp("^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,4}|[0-9]{2,4})(\\]?)$");
	if (!r1.test(str) && r2.test(str))
	{
		return true;
	} else {
		alert("El formato de mail del campo " + nombre_campo + " no es válido");
		eval(campo + ".select()");
		return false;
	}
}

//*****************************************************************************************
//Nombre función: UNO_MARCADO
//Descripción: Comprueba si un check o radio tienen por lo menos una opcion marcada
//Parámetros: formulario: nombre del formulario
//			  campo - path javascript hasta llegar al campo
//			  alerta - nombre del campo para el alert
//Resultado: true por lo menos tiene uno marcado
//           false si no tiene ninguno marcado
//*****************************************************************************************

function uno_marcado(formulario, campo, alerta)
{
	limite = eval("document." + formulario + "." + campo + ".length")
	si_seleccionado = false;
	for ( i = 0; i < limite; i++ )
	{
		if (eval("document." + formulario + "." + campo + "[" + i + "].checked"))
		{
			i=limite;
			si_seleccionado = true;
		}
	}

	if (!si_seleccionado)
		alert ("Debes seleccionar como mínimo una opción de " + alerta)
	
	return si_seleccionado;
}	

function uno_seleccionado(campo, nombre_campo)
{
	if ( eval(campo + ".value <= 0") )
	{
		alert("Debe seleccionar un elemento del campo " + nombre_campo);
		eval(campo + ".focus()");
		return true;
	}
	
	return false;
}	

//*****************************************************************************************
//Nombre funci&oacute;n: NUMERICO
//Descripci&oacute;n: Comprueba si un campo es num&eacute;rico
//Para;metros: campo - path javascript hasta llegar al campo
//Resultado: true si el campo es num&eacute;rico
//           false si el campo NO es num&eacute;rico
//*****************************************************************************************

function numerico(campo,nombre_campo)
{
	cadena = new String(eval(campo + ".value"));

	cad = cadena;

	if ( cadena.match(".") == "." )
	{
		alert("El separador de decimales debe ser la ,");
		return true;
	}

	array_puntos = cadena.split(",")

	if ( array_puntos.length > 2 )
	{
		alert("El campo " + nombre_campo + " debe ser numerico");
		return true;
	}


	cad = replace(cad,",",".") 

	if ( isNaN(parseFloat(cad)) )
	{
		alert("El campo " + nombre_campo + " debe ser numerico");
		return true;
	}

	return false;
}

function replace(string,text,by) 
{
	// Replaces text with by in string
	var strLength = string.length, txtLength = text.length;
	if ((strLength == 0) || (txtLength == 0)) return string;

	var i = string.indexOf(text);
	if ((!i) && (text != string.substring(0,txtLength))) return string;
	if (i == -1) return string;

	var newstr = string.substring(0,i) + by;

	if (i+txtLength < strLength)
	newstr += replace(string.substring(i+txtLength,strLength),text,by);

	return newstr;
}

var defaultEmptyOK = false;

function makeArray(n)
{
   for (var i = 1; i <= n; i++)
   {
      this[i] = 0
   } 
   return this
}

var daysInMonth = makeArray(12);
daysInMonth[1] = 31;
daysInMonth[2] = 29;
daysInMonth[3] = 31;
daysInMonth[4] = 30;
daysInMonth[5] = 31;
daysInMonth[6] = 30;
daysInMonth[7] = 31;
daysInMonth[8] = 31;
daysInMonth[9] = 30;
daysInMonth[10] = 31;
daysInMonth[11] = 30;
daysInMonth[12] = 31;

function isDate (year, month, day)
{
    if (! (isYear(year, false) && isMonth(month, false) && isDay(day, false))) return false;

    var intYear = parseInt(year);
    var intMonth = parseInt(month);
    var intDay = parseInt(day);

    if (intDay > daysInMonth[intMonth]) return false; 

    if ((intMonth == 2) && (intDay > daysInFebruary(intYear))) return false;

    return true;
}

function isYear (s)
{
	if (isEmpty(s)) 
       if (isYear.arguments.length == 1) return defaultEmptyOK;
       else return (isYear.arguments[1] == true);
    if (!isNonnegativeInteger(s)) return false;
    return ((s.length == 2) || (s.length == 4));
}

function isMonth (s)
{
	if (isEmpty(s)) 
       if (isMonth.arguments.length == 1) return defaultEmptyOK;
       else return (isMonth.arguments[1] == true);
    return isIntegerInRange (s, 1, 12);
}

function isDay (s)
{
	if (isEmpty(s)) 
       if (isDay.arguments.length == 1) return defaultEmptyOK;
       else return (isDay.arguments[1] == true);   
    return isIntegerInRange (s, 1, 31);
}

function isEmpty(s)
{
	return ((s == null) || (s.length == 0))
}

function daysInFebruary (year)
{
	return (  ((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0) ) ) ? 29 : 28 );
}

function isNonnegativeInteger (s)
{   var secondArg = defaultEmptyOK;

    if (isNonnegativeInteger.arguments.length > 1)
        secondArg = isNonnegativeInteger.arguments[1];

    return (isSignedInteger(s, secondArg)
         && ( (isEmpty(s) && secondArg)  || (parseInt (s) >= 0) ) );
}

function isSignedInteger (s)
{
	if (isEmpty(s)) 
       if (isSignedInteger.arguments.length == 1) return defaultEmptyOK;
       else return (isSignedInteger.arguments[1] == true);

    else {
        var startPos = 0;
        var secondArg = defaultEmptyOK;

        if (isSignedInteger.arguments.length > 1)
            secondArg = isSignedInteger.arguments[1];

        if ( (s.charAt(0) == "-") || (s.charAt(0) == "+") )
           startPos = 1;    
        return (isInteger(s.substring(startPos, s.length), secondArg))
    }
}

function isIntegerInRange (s, a, b)
{
	if (isEmpty(s)) 
       if (isIntegerInRange.arguments.length == 1) return defaultEmptyOK;
       else return (isIntegerInRange.arguments[1] == true);

    if (!isInteger(s, false)) return false;

    var num = parseInt (s);
    return ((num >= a) && (num <= b));
}

function isInteger (s)
{
	var i;

    if (isEmpty(s)) 
       if (isInteger.arguments.length == 1) return defaultEmptyOK;
       else return (isInteger.arguments[1] == true);

    for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);

        if (!isDigit(c)) return false;
    }

    return true;
}

function isDigit (c)
{
	return ((c >= "0") && (c <= "9"))
}


function isLetter(c)
{
	var lowercaseLetters = "abcdefghijklmnopqrstuvwxyz"
	var uppercaseLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

	return( ( uppercaseLetters.indexOf( c ) != -1 ) || ( lowercaseLetters.indexOf( c ) != -1 ) )
}

// s tiene solo letras y numeros
function isAlphanumeric(s)
{
	var i;

	if (isEmpty(s)) 
		if (isAlphanumeric.arguments.length == 1) 
			return defaultEmptyOK;
		else 
			return (isAlphanumeric.arguments[1] == true);

	for (i = 0; i < s.length; i++)
	{ 
		var c = s.charAt(i);
		if (! (isLetter(c) || isDigit(c) ) )
			return false;
	}

	return true;
}

function isCaracterUpper(c)
{
	upper_c = c
	tmp = upper_c.toUpperCase();
	return tmp;
}

function mayusculas(obj)
{
	obj.value = isCaracterUpper(obj.value);
}

function validar_cif(elCIF)
{
/*
	Los siete dígitos siguientes son números y el último es el dígito de control que puede ser un número ó una letra.
	Las operaciones para calcular el dígito de control se realizan sobre los siete dígitos centrales y son las siguientes:
	Sumar los dígitos de la posiciones pares. Suma = A 

	Para cada uno de los dígitos de la posiciones impares, multiplicarlo por 2 y sumar los dígitos del resultado.
	Ej.: ( 8 * 2 = 16 --> 1 + 6 = 7 ).
	Acumular el resultado. Suma = B.

	Sumar A + B = C

	Tomar sólo el dígito de las unidades de C y restárselo a 10. Esta resta nos da D.

	A partir de D ya se obtiene el dígito de control. Si ha de ser numérico es directamente D y si se trata de una letra se corresponde con la relación:
	A = 1, B = 2, C = 3, D = 4, E = 5, F = 6, G = 7, H = 8, I = 9, J = 0 

	'································································································

	Ejemplo para el C.I.F. : A58818501

	Utilizamos los siete dígitos centrales = 5881850

	Sumamos los dígitos pares: A = 8 + 1 + 5 = 14

	Posiciones impares:
	5 * 2 = 10 -> 1 + 0 = 1
	8 * 2 = 16 -> 1 + 6 = 7
	8 * 2 = 16 -> 1 + 6 = 7
	0 * 2 = 0 -> = 0
	Sumamos los resultados: B = 1 + 7 + 7 + 0 = 15

	Suma parcial: C = A + B = 14 + 15 = 29

	El dígito de las unidades de C es 9. Se lo restamos a 10 y nos da: D = 10 - 9 = 1

	Si el dígito de control ha de ser un número es 1 y si ha de ser una letra es la "A" 
*/
	var resul = false;
	aux = new String();
	cif = new String(eval(elCIF + ".value"));
	var temp = cif.toUpperCase(); // pasar a mayúsculas


	if( !calcular_letra_CIF(cif.substring(0,1)) )
		return false;


	nums = cif.substring(1,cif.length-1);
	digito_control_cif = cif.substring(cif.length-1, cif.length);

	//SUMA PARES
	suma_pares = 0
	for ( i = 1; i < nums.length; i+=2)
	{
		//DEBUG alert(i + ": " + nums.substring(i,i+1));
		suma_pares = suma_pares + parseInt(nums.substring(i,i+1));
	}

	//SUMA IMPARES
	suma_impares = 0
	for ( i = 0; i < nums.length; i+=2)
	{
		aux = (parseInt(nums.substring(i,i+1)) * 2) + "";

		segundo_digito = 0
		if ( aux.length > 1 )
			segundo_digito = parseInt(aux.substring(1,2))

		aux = parseInt(aux.substring(0,1)) + segundo_digito

		suma_impares = suma_impares + parseInt(aux);
	}

	//DEBUG alert( parseInt(suma_pares) + "|" + parseInt(suma_impares) );

	aux = (parseInt(suma_pares) + parseInt(suma_impares)) + "";

	ultimo_digito = aux.substring(aux.length-1,aux.length);

	digito_control = 10 - parseInt(ultimo_digito);

	dc = digito_control_cif;
	switch ( digito_control_cif )
	{
		case "A": dc = 1; break;
		case "B": dc = 2; break;
		case "C": dc = 3; break;
		case "D": dc = 4; break;
		case "E": dc = 5; break;
		case "F": dc = 6; break;
		case "G": dc = 7; break;
		case "H": dc = 8; break;
		case "I": dc = 9; break;
		case "J": dc = 0; break;	
	}

	return ( parseInt(digito_control) == parseInt(dc) );
}

function calcular_letra_NIF(num)
{ 
	var cadena = 'TRWAGMYFPDXBNJZSQVHLCKET'; 
	var posicion = num % 23; 
	return cadena.charAt(posicion); 
} 

function calcular_letra_CIF(letra)
{ 
	var letras_CIF = "ABCDEFGHKLMNPQS";
	return( ( letras_CIF.indexOf(letra) != -1 ) );
} 

function validar_NIF(nif)
{
	valor = new String(eval(nif + ".value"));
	letra = valor.substring(valor.length-1, valor.length);
	numeros = valor.substring(0, valor.length-1);

	//alert(valor);

	letra_calculada = calcular_letra_NIF(numeros);

	//alert( letra + "!=" + letra_calculada );

	if ( letra != letra_calculada )
		return false;

	return true;
}

function obtener_DC_entidad(valor)
{
/*
	Ejemplo:
		Nombre de la Cuenta: ASOCIACION BULMA
		Numero completo de la Cuenta: 2100-0150-63-0200455826
		Que significa:
		Entidad: 2100 La Caixa
		Oficina: 0150 Santa Catalina
		DC     : 63
		Cuenta : 0200455826
*/
	valores = new Array(1, 2, 4, 8, 5, 10, 9, 7, 3, 6);
	control = 0;
	
	for (i=0; i<=9; i++)
		control += parseInt(valor.charAt(i)) * valores[i];

	control = 11 - (control % 11);
	if (control == 11) control = 0;
	else if (control == 10) control = 1;
	return control;
}

function solo_numeros_sin_prefijo(key)
{
	if ( document.formulario.provincia.value == 0 )
	{
		alert("Debe rellenar primero el campo PROVINCIA");
		document.formulario.provincia.focus();
		event.returnValue = false;
	}
	else
	{
		pref = new String(document.all.solo_prefijo.value);
		telf = new String(document.all.telefono.value);

		//3 porque cuenta que ponemos el guión
		max_length = ( pref.length == 3 ) ? 5 : 6;

		document.all.telefono.value = telf.substring(0,max_length);

		if ( event.keyCode != 13 )
			if ( key < 48 || key > 57) 
				event.returnValue = false;
	}
}

function solo_numeros_sin_cp_agencia(key)
{
	if ( document.formulario.provincia_agencia.value == 0 )
	{
		alert("Debe rellenar primero el campo PROVINCIA DE LA AGENCIA");
		document.formulario.provincia_agencia.focus();
		event.returnValue = false;
	}
	else
	{
		if ( event.keyCode == 13 )
			event.returnValue = true;
		else
			if ( key < 48 || key > 57) 
				event.returnValue = false;
	}
}

function solo_numeros_sin_cp(key)
{
	if ( document.formulario.provincia.value == 0 )
	{
		alert("Debe rellenar primero el campo PROVINCIA");
		document.formulario.provincia.focus();
		event.returnValue = false;
	}
	else
	{
		if ( event.keyCode == 13 )
			event.returnValue = true;
		else
			if ( key < 48 || key > 57) 
				event.returnValue = false;
	}
}

function solo_numeros(key)
{
	if ( event.keyCode == 13 )
		event.returnValue = true;
	else	
		if ( key < 48 || key > 57) 
		event.returnValue = false;
}

function solo_texto(key)
{
	/*
		CARÁCTERES VÁLIDOS
		32 = _especio en blanco
		39 = '		45 = -		46 = .		170 = ª		186 = º
		>64 && < 91 = Letras mayúsculas 	>96 && < 123 = Letras minúsculas
		183 = ·
		192 = À		193 = Á
		199 = Ç
		200 = È		201 = É
		204 = Ì		205 = Í		207 = Ï
		209 = Ñ
		210 = Ò		211 = Ó
		217 = Ù		218 = Ú		220 = Ü
		224 = à		225 = á
		231 = ç
		232 = è		233 = é
		236 = ì		237 = í		238 = ï
		241 = ñ
		242 = ò		243 = ó
		249 = ù		250 = ú		252 = ü
	*/
	
	if ( event.keyCode == 13 )
		event.returnValue = true;
	else
		if ( !( (event.keyCode == 32) || (event.keyCode == 39) || (event.keyCode == 45) || (event.keyCode == 46) || (event.keyCode == 170) || (event.keyCode == 186) || (event.keyCode == 183) || (event.keyCode == 192) || (event.keyCode == 193) || (event.keyCode == 199) || (event.keyCode == 200) || (event.keyCode == 201) || (event.keyCode == 204) || (event.keyCode == 205) || (event.keyCode == 207) || (event.keyCode == 209) || (event.keyCode == 210) || (event.keyCode == 211) || (event.keyCode == 217) || (event.keyCode == 218) || (event.keyCode == 220) || (event.keyCode == 224) || (event.keyCode == 225) || (event.keyCode == 231) || (event.keyCode == 232) || (event.keyCode == 233) || (event.keyCode == 236) || (event.keyCode == 237) || (event.keyCode == 239) || (event.keyCode == 241) || (event.keyCode == 242) || (event.keyCode == 243) || (event.keyCode == 249) || (event.keyCode == 250) || (event.keyCode == 252) || (event.keyCode > 64 && event.keyCode < 91) || (event.keyCode > 96 && event.keyCode < 123) ) )
			event.returnValue = false;
}

function solo_texto_libro_disney(key)
{
	/*
		CARÁCTERES VÁLIDOS
		39 = '		45 = -		46 = .		170 = ª		186 = º
		>64 && < 91 = Letras mayúsculas 	>96 && < 123 = Letras minúsculas
		183 = ·
		192 = À		193 = Á
		199 = Ç
		200 = È		201 = É
		204 = Ì		205 = Í		207 = Ï
		209 = Ñ
		210 = Ò		211 = Ó
		217 = Ù		218 = Ú		220 = Ü
		224 = à		225 = á
		231 = ç
		232 = è		233 = é
		236 = ì		237 = í		238 = ï
		241 = ñ
		242 = ò		243 = ó
		249 = ù		250 = ú		252 = ü
	*/
	
	if ( event.keyCode == 13 )
		event.returnValue = true;
	else
		if ( !( (event.keyCode == 45) || (event.keyCode == 46) || (event.keyCode == 183) || (event.keyCode == 192) || (event.keyCode == 193) || (event.keyCode == 199) || (event.keyCode == 200) || (event.keyCode == 201) || (event.keyCode == 204) || (event.keyCode == 205) || (event.keyCode == 207) || (event.keyCode == 209) || (event.keyCode == 210) || (event.keyCode == 211) || (event.keyCode == 217) || (event.keyCode == 218) || (event.keyCode == 220) || (event.keyCode == 224) || (event.keyCode == 225) || (event.keyCode == 231) || (event.keyCode == 232) || (event.keyCode == 233) || (event.keyCode == 236) || (event.keyCode == 237) || (event.keyCode == 239) || (event.keyCode == 241) || (event.keyCode == 242) || (event.keyCode == 243) || (event.keyCode == 249) || (event.keyCode == 250) || (event.keyCode == 252) || (event.keyCode > 64 && event.keyCode < 91) || (event.keyCode > 96 && event.keyCode < 123) ) )
			event.returnValue = false;
}

function solo_texto_direccion(key)
{
	/*
		CARÁCTERES VÁLIDOS
		45 = -		46 = .		95 = _		47 = /
		>64 && < 91 = Letras mayúsculas 	>96 && < 123 = Letras minúsculas
		183 = ·
		192 = À		193 = Á
		199 = Ç
		200 = È		201 = É
		204 = Ì		205 = Í		207 = Ï
		209 = Ñ
		210 = Ò		211 = Ó
		217 = Ù		218 = Ú		220 = Ü
		224 = à		225 = á
		231 = ç
		232 = è		233 = é
		236 = ì		237 = í		238 = ï
		241 = ñ
		242 = ò		243 = ó
		249 = ù		250 = ú		252 = ü
	*/
	
	if ( event.keyCode == 13 )
		event.returnValue = true;
	else
	{
		if ( !( (event.keyCode == 47) || (event.keyCode == 95) || (event.keyCode == 45) || (event.keyCode == 46) || (event.keyCode == 183) || (event.keyCode == 192) || (event.keyCode == 193) || (event.keyCode == 199) || (event.keyCode == 200) || (event.keyCode == 201) || (event.keyCode == 204) || (event.keyCode == 205) || (event.keyCode == 207) || (event.keyCode == 209) || (event.keyCode == 210) || (event.keyCode == 211) || (event.keyCode == 217) || (event.keyCode == 218) || (event.keyCode == 220) || (event.keyCode == 224) || (event.keyCode == 225) || (event.keyCode == 231) || (event.keyCode == 232) || (event.keyCode == 233) || (event.keyCode == 236) || (event.keyCode == 237) || (event.keyCode == 239) || (event.keyCode == 241) || (event.keyCode == 242) || (event.keyCode == 243) || (event.keyCode == 249) || (event.keyCode == 250) || (event.keyCode == 252) || (event.keyCode > 64 && event.keyCode < 91) || (event.keyCode > 96 && event.keyCode < 123) ) )
		{
			if ( key < 48 || key > 57) 
				event.returnValue = false;
		}
	}
}

function solo_texto_poblacion(key)
{
	/*
		CARÁCTERES VÁLIDOS
		45 = -		46 = .		95 = _		47 = /
		>64 && < 91 = Letras mayúsculas 	>96 && < 123 = Letras minúsculas
		183 = ·
		192 = À		193 = Á
		199 = Ç
		200 = È		201 = É
		204 = Ì		205 = Í		207 = Ï
		209 = Ñ
		210 = Ò		211 = Ó
		217 = Ù		218 = Ú		220 = Ü
		224 = à		225 = á
		231 = ç
		232 = è		233 = é
		236 = ì		237 = í		238 = ï
		241 = ñ
		242 = ò		243 = ó
		249 = ù		250 = ú		252 = ü
	*/
	
	if ( event.keyCode == 13 )
		event.returnValue = true;
	else
	{
		if ( !( (event.keyCode == 47) || (event.keyCode == 95) || (event.keyCode == 45) || (event.keyCode == 46) || (event.keyCode == 183) || (event.keyCode == 192) || (event.keyCode == 193) || (event.keyCode == 199) || (event.keyCode == 200) || (event.keyCode == 201) || (event.keyCode == 204) || (event.keyCode == 205) || (event.keyCode == 207) || (event.keyCode == 209) || (event.keyCode == 210) || (event.keyCode == 211) || (event.keyCode == 217) || (event.keyCode == 218) || (event.keyCode == 220) || (event.keyCode == 224) || (event.keyCode == 225) || (event.keyCode == 231) || (event.keyCode == 232) || (event.keyCode == 233) || (event.keyCode == 236) || (event.keyCode == 237) || (event.keyCode == 239) || (event.keyCode == 241) || (event.keyCode == 242) || (event.keyCode == 243) || (event.keyCode == 249) || (event.keyCode == 250) || (event.keyCode == 252) || (event.keyCode > 64 && event.keyCode < 91) || (event.keyCode > 96 && event.keyCode < 123) ) )
		{
				event.returnValue = false;
		}
	}
}

//*****************************************************************************************
//Nombre función: anyoBisiesto
//Descripción: Comprueba si un año es bisiesto
//Parámetros: fin - anyo que queremos comprobar (en formato completo aaaa)
//Resultado: true si es bisiesto
//           false si no es bisiesto
//*****************************************************************************************
function anyoBisiesto(fin)
{
/*
	primera condicion: si el resto de dividir el año entre 4 no es cero > el año no es bisiesto, es decir, 
	obtenemos año modulo 4, teniendo que cumplirse anyo mod(4)=0 para bisiesto
*/
	if (fin % 4 != 0)
		return false;
	else
	{
		if (fin % 100 == 0)
		{
		/*
		si el año es divisible por 4 y por 100 y divisible por 400 > es bisiesto
		*/
			if (fin % 400 == 0)
			{
				return true;
			}
		/*
		si es divisible por 4 y por 100 pero no lo es por 400 > no es bisiesto
		*/
			else
			{
				return false;
			}
		}
		/*
		si es divisible por 4 y no es divisible por 100 > el año es bisiesto
		*/
		else
		{
			return true;
		}
	}
}