<!-- Validación de números -->

   numeros="0123456789";
   // deberia ser la coma y el punto pero no hace bien la operacion con coma
   puntodecimal=".";
   signos="+-";
   error= new creaerror();  
   errores= new Array();
  
   errores[1]="Campo vacio no contiene ningún valor ";
   errores[2]="Carácter ilegal en un número";
   errores[3]="Carácter ilegal ";
   errores[4]="Sólo ha insertado un signo";
   errores[5]="Parte decimal vacia";
  
   // Crea un objeto que guarda un indice a la posición y al mensaje de error
   function creaerror()
   {
   this.valor=0;
   this.posicion=0;
   return this
   }
  
   // Determina si un caracter es un número
   function numero(car)
   {
   return (numeros.indexOf(car)>=0)
   }

   // Determina si un carácter es un signo positivo o negativo
   function signo(car)
   {
   return (signos.indexOf(car)>=0)
   }

    
   // Comprueba si el contenido es un número es natural incluido el 0
   function compruebanatural(contenido,error)
   {
   if (contenido.length == 0)
      {
      error.valor=1;
      error.posicion=1; 
      return false;
      }  
   for (var i=0; i<contenido.length;i++)
      {
      if (!numero(contenido.charAt(i)))
         {
         error.valor=2;
         error.posicion=i+1;
         return false;
         } 
      }
   return true;
   }

   // Comprueba si un signo se encuetra en la posición correcta 
   function signocorrecto(contenido,error)
   {
   if (contenido.length == 0)
      {
      error.valor=1;
      error.posicion=1; 
      return false;
      }
   else 
      if (!numero(contenido.charAt(0))&&!signo(contenido.charAt(0)))
         {
         error.valor=3;
         error.posicion=1; 
         return false;
         }
      else
         return true;
   }

   // Comprueba si el contenido es un número es entero
   function compruebaentero(contenido,error)
   { 
   if (!signocorrecto(contenido,error))    
      return false;    
   else 
      if (numero(contenido.charAt(0)))
         var aux=compruebanatural(contenido,error);
      else
         { 
         var aux=compruebanatural(contenido.substring(1,contenido.length),error);
         if (!aux)
            error.posicion++; 
         if (error.valor==1)
            {
            error.valor=4;
            error.posicion=1;
            }
         }
   return aux;   
   }

   // Comprueba si el contenido es un número es real
   function compruebareal(contenido,error)
   { 
   var aux=compruebaentero(contenido,error);
   var posicionpunto=error.posicion-1;
   if (!aux && error.valor==2 &&
      puntodecimal.indexOf(contenido.charAt(posicionpunto))>=0) 
      {
      var aux=compruebanatural(contenido.substring(error.posicion,contenido.length),error); 
      if (!aux && error.valor==1)
         {
         error.valor=5;
         }
      if (!aux)
         error.posicion+=posicionpunto+1;
      }
   return aux;
   }
  
   // Ejecuta la validación pedida
   function ejecuta(valor)
   {
   var correcto;
   switch (valor)
      {
      case 1:
         correcto=compruebanatural(window.document.formulario.campo.value,error);
         break;
      case 2:
         correcto=compruebaentero(window.document.formulario.campo.value,error);
         break;
      case 3:
         correcto=compruebareal(window.document.formulario.campo.value,error);
         break;
      default:
         break;
      }

   if (correcto)
      alert("El campo es válido")
   else
      alert("El campo NO es válido. ERROR:"+errores[error.valor]+
            " en la posicion "+error.posicion);
   }
  
