	//------------------------------------------------------------------------------------
	//------------------------------------------------------------------------------------
    // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    // OJO PARA QUE FUNCIONE LOS NOMBRES DE LAS VARIABLES DEBE !!!! EMPEZAR CON 
    // GUION BAJO !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
	// 	FUNCIONES PARA VALIDAR LOS CAMPOS QUE COMIENCEN POR
	//	(_AN???_ - _NN???_ - _NY???_ - _DN???_ - _FN010_ - _FY???_)
	//
	//  - ALFANUMÉRICOS(AN_nombre) _AN => alfanumérico que no admite nulos
	//  - NUMÉRICOS(N(N/Y)_nombre) _NN => numérico que NO admite nulos  _NY => numérico que SI admite nulos
	//  - COMBOS(D(N/Y)_nombre) _DN => combo de selección obligada, value!=0
	//  - FECHAS(F(N/Y)_nombre) _FN010 => validación de fechas que NO admiten nulos _FY010 => validación de fechas que SI admiten nulos
	//	- NUMERACIÓN INDICA LA LONGITUD QUE HA DE TENER LA CADENA 000 => NO IMPLICA  ??? => IMPLICA LONGITUD A CUMPLIR
	//  - RADIOS(RN_nombre) _RN => validación de radio seleccionado obligatoriamente - CHECKS(CN_nombre)  _RN => validación de check seleccionado obligatoriamente (uno al menos)
	//
	//	- ejemplos:
	//		NUMÉRICO OBLIGATORIO DE 10 CARACTERES 		=> _NN010_
	//		NUMÉRICO NO OBLIGATORIO 					=> __NY000_
	//		FECHA OBLIGATORIA							=> _FN_
	//		ALFANUMERICO OBLIGATORIO DE 15 CARACTERES	=> _AN015_
	//		DESPLEGABLE DE SELECCIÓN OBLIGATORIA		=> _DN_ (tipo ->select-one)
	//		DESPLEGABLE DE SELECCIÓN OBLIGATORIA		=> _DN_ (tipo ->select-multiple)
	//		CAMPO FICHERO 	=> _ZN_ (tipo ->file)
    //      SI ES SELECT MULTI DEBE SELECCIONAR AL MENOS UNA OPCION
	//------------------------------------------------------------------------------------
	// FUNCIÓN GENERAL
	//------------------------------------------------------------------------------------
	//  function chequeaNulos(e) function chequearValores(e) function chequearError(e,valor)
	//  function trim(strText) function quitaCeros(texto)  function errorDesplegable(e)
	//  function errorLongitudCampo(e,longitud_a_cumplir)  function errorLongitudCampo2(e,longitud_a_cumplir)
	//  function errorGenerico(texto,nombreCampo) function errorCaracteresCampo(e,valores)
	//  function errorCampoVacio(e) function errorFormatoFecha(e)  function ponerFocoFalse(obj)
	//  function validaCadena(cadena, valores)  function validarCampos() function validaFecha(e)
	//  function validaIP(cadena) function chequeaEmail(string)
	//------------------------------------------------------------------------------------

	//------------------------------------------------------------------------------------
	// FUNCIÓN PARA CHEQUEAR NULOS Y LONGITUD
	//------------------------------------------------------------------------------------
		function chequeaNulos(e)
		{
			var valor=0;
			valor += (e.name.charAt(2)=="N"?1:2);
			valor += (e.name.substring(3,6)==0?4:8);
			return chequearError(e,valor);
			
		}
	//------------------------------------------------------------------------------------
	// FUNCIÓN PARA CHEQUEAR vLOS VALORES DE LOS DIFERENTES TIPOS DE CAMPOS
	//------------------------------------------------------------------------------------
		function chequearValores(e)
		{
			// CHEQUEAMOS PARA VALORES NUMÉRICOS
			if ((e.name.charAt(1)=="N") && (trim(e.value)!=""))
				if (!validaCadena(trim(e.value),"0123456789"))
					return errorCaracteresCampo(e,"0123456789");

			// CHEQUEAMOS PARA VALORES FECHAS
			if ((e.name.charAt(1)=="F") && (trim(e.value)!=""))
					if (!validaFecha(e))
						return false;

			// CHEQUEAMOS PARA VALORES IP
			if ((e.name.charAt(1)=="I") && (trim(e.value)!=""))
				if(!validaIP(e.value))
					return errorGenerico("La dirección IP introducida en '" + e.name.substring(7,e.name.length) + "' es inválida",e.name);

			// CHEQUEAMOS PARA VALORES EMAIL
			if ((e.name.charAt(1)=="E") && (trim(e.value)!=""))
				if(!chequeaEmail(e.value))
					return errorGenerico("El Email introducido en el campo '" + e.name.substring(7,e.name.length) + "' no es válido",e.name);
			
			// CHEQUEAMOS PARA VALORES PARA FICHERO
			if ((e.name.charAt(1)=="Z") && (trim(e.value)!=""))
				if(!chequeaFichero(e.value))
					return errorGenerico("El Fichero introducido en el campo '" + e.name.substring(7,e.name.length) + "' no es válido o tiene caracteres extraños como espacios * | , \" < > [ ] { } ` ' ; ( )& $ # % Revise la ruta, cambie de ubicación el fichero o cambie el nombre del fichero.",e.name);
			return true;
		}
	//------------------------------------------------------------------------------------
	// FUNCIÓN PARA CHEQUEAR ERRORES DE NULOS Y LONGITUD
	//------------------------------------------------------------------------------------
		function chequearError(e,valor)
		{
		
			// CHEQUEAMOS TIPOS DE VALORES PARA LOS DIFERENTES CAMPOS SI VIENEN RELLENOS
			if (!chequearValores(e)) return false
			switch(valor)
			{
				case 5: // EL CAMPO NO ADMITE NULOS Y NO FIJA LONGITUD
					if(trim(e.value)=="") return errorCampoVacio(e);
					break;

				case 6: // EL CAMPO ADMITE NULOS Y NO FIJA LONGITUD
					break;

				case 9: // EL CAMPO NO ADMITE NULOS Y FIJA LONGITUD
					if(trim(e.value)=="") return errorCampoVacio(e);

					if (trim(e.value).length!=e.name.substring(3,6))
						return errorLongitudCampo(e,e.name.substring(3,6));
					break;

				case 10: // EL CAMPO ADMITE NULOS Y FIJA LONGITUD
					if(trim(e.value)!="")
						if (trim(e.value).length!=e.name.substring(3,6))
							return errorLongitudCampo2(e,e.name.substring(3,6));
					break;
				
			}
			return true;
		}
	//------------------------------------------------------------------------------------
	// FUNCIÓN PARA QUITAR ESPACIOS POR LOS LATERALES
	//------------------------------------------------------------------------------------
		function trim(strText)
		{
		    while (strText.substring(0,1) == ' ')
	    		strText = strText.substring(1, strText.length);

	    	while (strText.substring(strText.length-1,strText.length) == ' ')
	        	strText = strText.substring(0, strText.length-1);
			return strText;
		}
	//------------------------------------------------------------------------------------
	// FUNCIÓN QUITA CEROS POR LA IZQUIERDA
	//------------------------------------------------------------------------------------
		function quitaCeros(texto)
		{
		    while (texto.substring(0,1) == '0')
	    		texto = texto.substring(1, texto.length);
			return (texto==""?"0":texto);
		}
	//------------------------------------------------------------------------------------
	// FUNCIÓN DE ERROR EN SELECCIÓN DE DESPLEGABLE
	//------------------------------------------------------------------------------------
		function errorDesplegable(e)
		{
            if ( 'select-multiple' == e.type ) alert("Seleccione al menos un elemento de: " + e.name.substring(4,e.name.length));
            else alert("Seleccione un elemento de: " + e.name.substring(4,e.name.length));
			return ponerFocoFalse(e.name);
		}
	//------------------------------------------------------------------------------------
	// FUNCIÓN DE ERROR DE LONGITUD DE CAMPO
	//------------------------------------------------------------------------------------
		function errorLongitudCampo(e,longitud_a_cumplir)
		{
			alert("El campo '" + e.name.substring(7,e.name.length) + "' ha de tener '" + longitud_a_cumplir + "' caracteres");
			return ponerFocoFalse(e.name);
		}
	//------------------------------------------------------------------------------------
	// FUNCIÓN DE ERROR DE LONGITUD DE CAMPO 2
	//------------------------------------------------------------------------------------
		function errorLongitudCampo2(e,longitud_a_cumplir)
		{
			alert("El campo '" + e.name.substring(7,e.name.length) + "' ha de tener '" + longitud_a_cumplir + "' caracteres o estar vacio");
			return ponerFocoFalse(e.name);
		}
	//------------------------------------------------------------------------------------
	// FUNCIÓN QUE ENFOCA Y DEVUELVE FALSE
	//------------------------------------------------------------------------------------
		function ponerFocoFalse(obj)
		{
            		//eval("document.forms[0]." + obj + ".focus()");
			return false;
		}
	//------------------------------------------------------------------------------------
	// FUNCIÓN DE ERROR GENERICO
	//------------------------------------------------------------------------------------
		function errorGenerico(texto,nombreCampo)
		{
			alert(texto)
			return ponerFocoFalse(nombreCampo);
		}
	//------------------------------------------------------------------------------------
	// FUNCIÓN DE ERROR DE CARACTERES
	//------------------------------------------------------------------------------------
		function errorCaracteresCampo(e,valores)
		{
			alert("El campo '" + e.name.substring(7,e.name.length) + "' solo admite los caracteres: '" + valores + "'");
			return ponerFocoFalse(e.name);
		}
	//------------------------------------------------------------------------------------
	// FUNCIÓN DE ERROR DE CARACTERES
	//------------------------------------------------------------------------------------
		function errorCampoVacio(e)
		{
			alert("Rellene el campo '" + e.name.substring(7,e.name.length) + "'");
			return ponerFocoFalse(e.name);
		}
	//------------------------------------------------------------------------------------
	// FUNCIÓN PARA VALIDAR EL FORMATO = "dd/mm/aaaa"
	//------------------------------------------------------------------------------------
		function errorFormatoFecha(e)
		{
			alert("El campo '" + e.name.substring(7,e.name.length) + "' ha de tener el formato 'dd/mm/aaaa'");
			return ponerFocoFalse(e.name);
		}
	//------------------------------------------------------------------------------------
	// FUNCIÓN PARA VALIDAR QUE "cadena" SOLO CONTIENE LOS CARACTERES DE "valores"
	//------------------------------------------------------------------------------------
		function validaCadena(cadena, valores)
		{
			if (cadena)
				for (var i = 0; i < cadena.length; i++)
			       if (valores.indexOf(cadena.charAt(i)) == -1)
		    	      return false;
			return true;
		}
	//------------------------------------------------------------------------------------
	// FUNCIÓN PARA VALIDAR LOS CAMPOS QUE COMIENCEN POR (AN - NN - NY - DN - FN - FY)
	//------------------------------------------------------------------------------------
		function validarCampos()
		{
			// recorremos todos los elementos del form
		    // for (var i=0;i<document.documento.elements.length;i++)
            for (var i=0;i<document.forms[0].elements.length;i++)
			{
				// var e = document.documento.elements[i];
                var e = document.forms[0].elements[i];
				// separamos por tipo de control

				// TEXTO (ALFANUMÉRICO, NUMÉRICO)
			  	if ((e.type=='file')||(e.type=='text') || (e.type=='password') || (e.type=='textarea') || (e.type=='radio') || (e.type=='checkbox') || (e.type=='select-one')  || (e.type=='select-multiple') )
				{
                    if( "_" == e.name.charAt(0)){
    					switch(e.name.charAt(1) )
    					{
    						case "A": // ALFANUMÉRICO
    							if (!chequeaNulos(e)) return false;
    							break;
    
    						case "N": // NUMÉRICO "0123456789"
    							if (!chequeaNulos(e)) return false;
    							break;
    
    						case "F": // FECHA
    							if (!chequeaNulos(e)) return false;
    							break;
    
    						case "I": // DIRECCIÓN IP
    							if(!chequeaNulos(e)) return false;
    							break;
    
    						case "E": // EMAIL
    							if (!chequeaNulos(e)) return false;
    							break;
    
    						case "D": // DESPLEGABLE
                                // (e.type=='select-one') && 
    						  	if ((e.name.charAt(1)=="D") && (e.name.charAt(2)=="N") && (e.value==""))
    								return errorDesplegable(e);
    							break;
    						case "R": // chequearRADIO BUTTON
    							if (e.name.charAt(2)=="N")
    								if (!chequeaRadios(e)) return false
    							break;
    						case "C": // chequear CHECK BUTTON
    							if (e.name.charAt(2)=="N")
    								if (!chequeaRadios(e)) return false
    							break;
							case "Z": // chequear CHECK BUTTON
    							if (e.name.charAt(2)=="N")
    								if(!chequeaNulos(e)) return false;
    							break;
    					} // FIN SWITCH
                    } // fin si es primer caracter "X" 
				}
	    	} // FIN FOR
			return true;
		}
	//------------------------------------------------------------------------------------
	// FUNCIÓN PARA VALIDAR LA SELECCIÓN OBLIGADA DE UN RADIO BUTTON
	//------------------------------------------------------------------------------------
		function chequeaRadios(e)
		{
			 if (eval("document.forms[0]." + e.name + ".length"))
			 {
			    for(var x=0;x<eval("document.forms[0]." + e.name + ".length");x++)
					if (eval("document.forms[0]." + e.name + "[" + x + "].checked"))
				    	return true;

				alert ("Seleccione un " + e.name.substring(4,e.name.length));
				return false;
			 }
			 else
			 {
			 	if (eval("document.forms[0]." + e.name + ".checked"))
					return true;
				else
				{
					alert ("Seleccione un " + e.name.substring(4,e.name.length));
					return false;
				}
			 }
		}
	//------------------------------------------------------------------------------------
	// FUNCIÓN PARA VALIDAR EL FORMATO = "dd/mm/aaaa"
	//------------------------------------------------------------------------------------
		function validaFecha(e)
		{
			if(e.value.length!=10)
				return errorFormatoFecha(e);
			var dia=parseInt(e.value.substring(0,2),10);
			var mes=parseInt(e.value.substring(3,5),10);
			var ano=parseInt(e.value.substring(6,10),10);
			var CadenaMes="";
			if((e.value.charAt(2) + e.value.charAt(5)) != "//") // COMPROBAMOS SEPARADORES
				return errorFormatoFecha(e);

			// VALIDAMOS NÚMEROS "ddmmaaaa"
			var numeros=e.value.substring(0,2) + e.value.substring(3,5) + e.value.substring(6,10);

			if (!validaCadena(numeros,"0123456789")) // COMPROBAMOS VALORES NUMÉRICOS
				return errorFormatoFecha(e);

			// COMPROBAMOS FECHA VÁLIDA
			if ((dia<1) || (dia>31))
				return errorGenerico("Los días hen de estar comprendidos entre 1 y 31",e.name);

			if ((mes<1) || (mes>12))
				return errorGenerico("Los meses han de estar comprendidos entre 1 y 12",e.name);

			if ((ano<1900) || (ano>2050))
				return errorGenerico("Los años han de estar comprendidos entre 1900 y 2050,e.name");

			switch(mes)
			{
				case 2:
					// comprobamos bisiestos (ENERO)
					if (dia>28)
					{
						if (dia>29)
							return errorGenerico("Febrero no puede tener: " + dia + " dias.",e.name);
						else
							if ((ano%4)!=0)	// tiene 29 dias &iquest;es bisiesto?
								return errorGenerico("Febrero del " + ano + "no puede tener '" + dia + "' dias, no es un año bisiesto",e.name);
					}
					break;
				case 4:
					CadenaMes="Abril";
				case 6:
					CadenaMes="Junio";
				case 9:
					CadenaMes="Septiembre";
				case 11:
					CadenaMes="Noviembre";
					//comprobamos dia no superior a 30
					if (dia>="31")
						return errorGenerico("El mes de '" + CadenaMes + "' no puede tener 31 dias.",e.name);
			}
			return true
		}
	//------------------------------------------------------------------------------------
	// FUNCIÓN PARA VALIDAR DIRECCIONES IP
	//------------------------------------------------------------------------------------
		function validaIP(cadena)
		{
			var validChars = '.0123456789';
			var dots = 0;
		    if (!cadena) return false;
		    for (var i = 0; i < cadena.length; i++)
			{
		       var chr = cadena.substring(i,i+1);
		       if (validChars.indexOf(chr) == -1)
		           return false;
		       if (chr == '.')
			   {
		           dots++;
		           eval('dot' + dots + ' = ' + i);
		       }
		    }
		    if (dots != 3) return false;
		    if (cadena.substring(0,1) == '.' || cadena.substring(cadena.length,cadena.length+1) == '.') return false;
		    ip1 = cadena.substring(0,dot1);
		    if (!ip1 || ip1 >255) return false;
		    ip2 = cadena.substring(dot1+1,dot2);
		    if (!ip2 || ip2 >255) return false;
		    ip3 = cadena.substring(dot2+1,dot3);
		    if (!ip3 || ip3 >255) return false;
		    ip4 = cadena.substring(dot3+1,cadena.length+1);
		    if (!ip4 || ip4 >255) return false;
		    if (ip1 == 0 && ip2 == 0 && ip3 == 0 && ip4 == 0) return false;
		    return true;
		}
	//------------------------------------------------------------------------------------
	// FUNCIÓN PARA VALIDAR DIRECCIONES DE CORREO
	//------------------------------------------------------------------------------------
		function chequeaEmail(string)
		{
			var arroba=-1;
			var punto=-1;
			var Length = string.length - 1
			var Space = string.indexOf(' ')
			var punto=string.substring(arroba,string.length).lastIndexOf(".");
		   	if (!string) return false;
		   	var iChars = "*|,\":<>[]{}`\';()&$#%";
		   	// COMPROBAMOS QUE NO TENGA CARACTERES IMPOSIBLES
		   	for (var i = 0; i < string.length; i++)
		    	if (iChars.indexOf(string.charAt(i)) != -1)
		        	return false;
			// COMPROBAMOS QUE TENGA ARROBA y punto a su derecha
		    arroba=string.indexOf("@");   
			if (arroba<1) return false
			if (Space!= -1) return false;
			if (punto==Length) return false;	
			if (punto==-1) return false;
			return true;
		}
		
		function chequeaFichero(string)
		{
		return true;
		}
		

//------------------------------------------------------------------------------------
// FINAL FUNCIONES
//------------------------------------------------------------------------------------
