ciao di nuovo!
Allora, ho risitemato il codice anche aiutandomi con l'ottimo reference che hai linkato ed è uscito quanto riporto in basso. Ho lavorato solo per il campo cogn visto che alla fine non funziona. Ho commentato il codice sia per aver conferma se ho capito quello che fa il programma sia per scrivere dubbi su alcune cose.
Come da te suggerito ho lasciato perdere la parte PHP tanto una volta che i dati arrivano sul client nella forma da noi voluta il lato server non c'interessa piu'...

codice:
<html>
<head>
<title>xxx</title>
<SCRIPT language=JavaScript>
var persone = new Array();
persone[persone.length] = new Array("cxxxxxxxx","federico","Roma Nord","328xxxxxxx","","","","","",0); 
persone[persone.length] = new Array("De xxxx","Marina","Anguillara","340xxxxxxx","","","","","",0); 
persone[persone.length] = new Array("pxxxxxxxx","valerio","Roma Sud","320xxxxxxx","20","03","2006","14","12",1); 
persone[persone.length] = new Array("rossi","mario","Roma Sud","328xxxxxxx","","","","","",1); 


var row_prec="", col_prec="";    // valori precedenti
var pos_mat = 0;                 // posizione nella matrice
var cont_prec="";                // contenuto precedente
var cont_digit = '';             // contenuto digitato

function completa(ogg) 
{
  var rc = ogg.name.split(/_/);    // decodifica riga e col - Es: cogn autista
  var row = rc[1]; //ES: autista
  var col = rc[0]; //ES: cogn
  var cont = ogg.value; //ES: carloni
  //alert("riga: "+row+"  colonna: "+col); //stampa un promemoria della colonna che sta scandendo ES: autista cogn

  if(row != row_prec) // riga diversa: azzera i puntatori
  { 
    cont_prec = "";
    pos_mat = 0;
  }

//Qui mi da' errore: per come è stato definito, cont è un'oggetto? L'errore è "Previsto oggetto"

  var agg = substr(cont, cont.length-1); // carattere aggiunto - Estrae i caratteri di ciò che è scritto nel textfield..
  cont_digit += agg; //..e li mette in cont_digit. ES: Scrivo "c" e cont_digit diventa "c", scrivo poi "a" e cont_digit="ca" ecc.

 switch (col) //NOTA: LA matrice. Diciamo: persone[record][campo] 
 {
   case 'cogn':
    while(persone[pos_mat][0].indexOf(cont_digit) < 0) 
	//Scandisco la matrice sulla colonna relativa al cognome. Parto dalla prima riga e finchè non c'e' un matching tra le lettere
	//digitate dall'utente nel textfield e quello che è scritto nella matrice, passo alla riga successiva
	{
      pos_mat++;
    }
      if(pos_mat > persone.length) 
	  {
      alert("non nell'elenco")//Se arrivo alla fine dell'array ovviamente sta digitando i dati di una persona ancora non registrata nel DB

      return false;
      }
	  //SE invece riscontra un matching del 100% compila gli altri campi del form con i dati della riga in esame.
	ogg.form.elements("cogn_"+row).value = persone[pos_mat][0];
    ogg.form.elements("nome_"+row).value = persone[pos_mat][1];
	ogg.form.elements("gruppo_"+row).value = persone[pos_mat][2];//Attenzione: e' una select!
	ogg.form.elements("tel_"+row).value = persone[pos_mat][3];
	ogg.form.elements("ggFine_"+row).value = persone[pos_mat][4];
	ogg.form.elements("mmFine_"+row).value = persone[pos_mat][5];
	ogg.form.elements("aaFine_"+row).value = persone[pos_mat][6];
	ogg.form.elements("oraFine_"+row).value = persone[pos_mat][7];
	ogg.form.elements("minFine_"+row).value = persone[pos_mat][8];
	if ( persone[pos_mat][9]==1 ) 
	 ogg.form.elements("benefici_"+row).value = "checked";// Funziona così?
   
     break;

   case 'nome':
    //qualcos di simile
    break;
   // ecc
 }//chiude switch
}//chiude function
</SCRIPT>
Il form ha un codice piu' lungo e riporto sotto solo quello relativo all'autista...
Non sapendo bene come funziona JS, non so se quando scrivo ogg.form.elements("gruppo_"+row).value = persone[pos_mat][2]; vada bene dal momento che i values di gruppo sono numeri mentre in persone ho riportato i nomi per esteso (ovviamente eventualmente la conversione è molto rapida). Idem per mmFine_ (values numerici ed etichette in stringhe)...
Il file completo è su www.bukowski-show.it/autocompletamento2.htm


codice:
<META content="MSHTML 6.00.2800.1106" name=GENERATOR></head>

<body>
<table width="95%" border="1">
  <tr> 
    <td width="10%"><h3>Ruolo</h3></td>
    <td width="11%"><h3>Cognome</h3></td>
    <td width="11%"><h3>Nome</h3></td>
    <td width="12%"><h3>Gruppo</h3></td>
    <td width="11%"><h3>Telefono</h3></td>
    <td width="18%"><h3>Fine</h3></td>
    <td width="11%"><h3>Benefici</h3></td>
  </tr>
  <tr> 
    <td> <h4>Autista</h4></td>
    <td><input name="cogn_autista" type="text" id="cogn_autista"   value="" size="15" onkeyup="completa(this);" ></td>
    <td><input name="nome_autista" type="text" id="nome_autista" value="" size="15" onkeyup="completa(this);"> </td>
    <td><select name="gruppo_autista">
       <option value=""></option><option value="5">Anguillara</option>
<option value="4">Civitavecchia</option><option value="8">corleone</option><option value="3">Ramazzini</option>
<option value="1">Roma Nord</option>
<option value="2">Roma Sud</option><option value="7">Viterbo</option></select></td>
    <td><input name="tel_autista" type="text" value="" size="13" onkeyup="completa(this);" ></td>
    <td> <h4> 
        <input name="oraFine_autista" type="text" size="2" maxlength="2" value="" onkeyup="completa(this);" >
        : 
        <input name="minFine_autista" type="text" size="2" maxlength="2" value="" onkeyup="completa(this);" >
        del

        <select name="ggFine_autista" id="ggFine_autista">
          <option value="01">01</option><option value="02">02</option>
<option value="03">03</option>
<option value="04">04</option>
<option value="05">05</option>
<option value="06">06</option>
<option value="07">07</option>
<option value="08">08</option>
<option value="09">09</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
<option value="13">13</option>
<option value="14">14</option>
<option value="15">15</option>
<option value="16">16</option>
<option value="17">17</option>
<option value="18">18</option>
<option value="19">19</option>
<option value="20">20</option>
<option value="21">21</option>
<option value="22">22</option>
<option value="23">23</option>
<option value="24">24</option>
<option value="25">25</option>
<option value="26">26</option>
<option value="27">27</option>
<option value="28">28</option>
<option value="29">29</option>
<option value="30">30</option>
<option value="31">31</option> 
</select>
        <select name="mmFine_autista" id="mmFine_autista">
          <option value="01">Gen</option><option value="02"SELECTED>Feb</option>
<option value="03">Mar</option>
<option value="04">Apr</option>
<option value="05">Mag</option>
<option value="06">Giu</option>
<option value="07">Lug</option>
<option value="08">Ago</option>
<option value="09">Set</option>
<option value="10">Ott</option>
<option value="11">Nov</option>
<option value="12">Dic</option>      
</select>
       <select name="aaFine_autista" id="aaFine_autista">
         <option value="2005"SELECTED>2005</option>
<option value="2006">2006</option>
<option value="2007">2007</option>
<option value="2008">2008</option>
<option value="2009">2009</option>
<option value="2010">2010</option>       
 </select>
      </h4></td>
    <td><div align="center">
        
          
        <input name="benefici_autista" type="checkbox"  value="1" onkeyup="completa(this);"  ></div> 
	</td>
  </tr>
 </table> 
</body>
</html>
Spero che riuscirai a scovare l'errore!

Grazio ancora, stavolta 10^10!

PS: Tranquillo, i cell sono fasulli, almeno spero!