  /* Validation library - require Jquery 1.3.2 */

  /* --- configurazione --- */
  check_client_browser      = 'compatible';
  var check_error_classname = 'errore';                         /* nome della classe per gli span dei msg di errore */
  var check_error_prefixid  = 'errmsg_';                        /* prefisso da utilizzare negli span id dei msg di errore */
  var check_fields_type     = ['text', 'password', 'checkbox'];  /* il tipo dei tag da verificare (<input type="text"..., ecc.) */
  var check_fields_tag      = ['textarea', 'select', 'input'];             /* i tag da verificare (<select name="..., ecc.) */

  /* --- CONTROLLI SU EVENTI --- */

  /**
   * Imposta la validazione di un dato form in modalita on blur
   *
   * @param arg1 (string) L'id del form da validare
   * @param arg2 (bool) Se true e' name, se false e' id
   *
   * @return (void)
   */
  function check_blur(arg1, arg2)
  {
    if(arg2 == true)
    {
      var campi = $('[name=' + arg1 + ']').find("input");    
    }
    else
    {
      var campi = $("#" + arg1).find("input");  
    }
    
    for(x = 0; x < campi.length; x++)
    {
      var id = campi[x].getAttribute('id');
      
      if(id != null)
      {
        var funct  = 'funct_' + id;
        if(eval("typeof " + funct + " == 'function'"))
        {
          _utility_attach_blur(funct, id);
        } 
      }
    }
  }

  function check_submit_this(arg1)
  {
    $("." + check_error_classname).remove();
    
    var avanti = new Array(); 
    var conta  = 0;
     
    for(i = 0; i < arg1.length; i++)
    {
      var funct = 'funct_' +  arg1[i];
      if(eval("typeof " + funct + " == 'function'"))
      {
        avanti[conta] = eval(funct + '()');
        conta += 1;
      }   
    }
    
    for(i = 0; i < avanti.length; i++)
    {
      if(avanti[i] == false) return false;  
    }
    
    return true;
     
  } // end funct
  
  /**
   * Imposta la validazione di un dato form al submit del dato form
   *
   * @param arg1 (string) L'id del form da validare
   * @param arg2 (bool) Se true e' name, se false e' id
   *
   * @return (boolean) Se la validazione passa torna true, altrimenti false (per bloccare il submit del form)
   */
  function check_submit(arg1, arg2)
  {
    $("." + check_error_classname).remove();
    
    var avanti = new Array(); 
    var conta  = 0;        
    
    if(arg2 == true)
    {
      var modulo = $('[name=' + arg1 + ']');     
    }
    else
    {
      var modulo   = $('#' + arg1);  
    }
    
    var kids = modulo.children();
    for(i = 0; i < kids.length; i++)
    {
      if(jQuery.inArray(kids[i].tagName, check_fields_tag) & kids[i].getAttribute('id') != null)
      {
        var myid  = kids[i].getAttribute('id');
        var funct = 'funct_' +  myid;
        if(eval("typeof " + funct + " == 'function'"))
        {
          avanti[conta] = eval(funct + '()');
          conta += 1;
        }
      }
    }
    
    /*
    var elementi = modulo.elements;
    for(x = 0; x < elementi.length; x++)
    {
      if( jQuery.inArray(elementi[x].type, check_fields_type) | jQuery.inArray(elementi[x].tagName, check_fields_tag) )
      {
        var myid  = elementi[x].getAttribute('id');
        var funct = 'funct_' +  myid;
        if(eval("typeof " + funct + " == 'function'"))
        {
          avanti[conta] = eval(funct + '()');
          conta += 1;
        }
      }
    }
    */
    
    for(i = 0; i < avanti.length; i++)
    {
      if(avanti[i] == false) return false;  
    }
    
    return true;
  
  }

  /* --- UTILITY PUBBLICI  --- */

  /**
   * Visualizza il messaggio di errore da utilizzare nel caso di validazione fallita
   *
   * @param arg1 (string) L'id del campo validato
   * @param arg2 (string) Il messaggio di errore da visualizzare
   *
   * @return (void)
   */
  function check_message(arg1, arg2, arg3)
  {
    $('#' + check_error_prefixid + arg1).remove();
  
    var el  = document.getElementById(arg1);
    var err = document.createElement('span');
    err.setAttribute('class', check_error_classname);
    err.setAttribute('id', check_error_prefixid + arg1);
    err.setAttribute('onclick', '$(this).remove();');
    var msg = document.createTextNode(__(arg2));
    err.appendChild(msg);
    el.parentNode.insertBefore(err,el);
  
    var pos = $('#' + arg1).position();
    var agg = (check_client_browser == 'firefox') ? arg3 : 0;
    
    $('#' + check_error_prefixid + arg1).css("top",  (pos.top + agg) + "px");
    $('#' + check_error_prefixid + arg1).css("left", (pos.left + 10 + $('#' + arg1).width()) + "px" );
    $('#' + check_error_prefixid + arg1).css("zIndex", 1000 );
  
    // el.focus(); <--- su MSIE fa uno strano effetto
  }
  
  /**
   * Utility per la traduzione dei messaggi. Presuppone che vi sia una
   * variabile globale detta msg da importare (si deve trovare in un
   * file caricato dinamicamente con la funzione _check_load_msgfile)
   * 
   * @param   arg1 (string) L'etichetta utilizzata nella traduzione
   *
   * @return (string) O la localizzazione o l'argomento passato se non esiste la traduzione
   */
  function __(arg1)
  {
    return (msg && msg[arg1]) ? msg[arg1] : arg1;
  }
  
  /**
   * Utility per caricare dinamicamente il file delle traduzioni.
   *
   * @param   arg1 (string) L'url da caricare
   *
   * @return (void)
   */
  function _check_load_external(arg1)
  {
    $('head').append('<script src="' + arg1 + '" language="javascript" charset="utf-8" type="text/javascript"><\/script>');
  }

  /**
   * Recupera il nome della classe da utilizzare negli span dei messaggi di errore
   *
   * @return (string) Il nome della classe impostata
   */
  function check_error_classname_get()
  {
    return check_error_classname;  
  }

  /**
   * Recupera il nome del prefisso per l'id dello span dei messaggi di errore
   *
   * @return (string) Il nome del prefisso id utilizzato
   */
  function check_error_prefixid_get()
  {
    return check_error_prefixid;
  }

  /* --- UTILITY PRIVATE --- */

  /**
   * Attacca ad un campo la relativa validazione in onblur
   *
   * @param arg1 (string) Il nome della funzione di validazione da utilizzare
   * @param arg2 (string) L'id dell'elemento validato e/o da validare
   *
   * @return (void)
   */
  function _utility_attach_blur(arg1, arg2)
  {
    var esegui = arg1 + "();";
    $("#" + arg2).blur(function() { var funct = esegui; eval(funct); });
    
  } // end funct
  
  function _utility_get_browser()
  {
    var ifind  = 'compatible';
    var applic = navigator.userAgent.toLowerCase();
    var client  = new Array('firefox', 'safari', 'opera', 'chrome', 'msie'); 
    for(x = 0; x < client.length; x++)
    {
      if(applic.match(client[x]) != null) 
      {
        ifind = client[x];
      }
    }
    
    return ifind;
  }
  
<!-- /pages/jquery-check -->