Riporto a grandi linee lo script che prevede:
- inizialmente (con pass non inserito) un form dove viene chiesto il livello
- con pass=1, se azione=0 vengono fatte tutta una serie di inizializzazioni e l'utente compie una scelta (con diversi radio)
- con pass=1 e azione=1 vengono fatte alcune operazioni
- in qualsiasi momento l'utente può agire sul form con pass=2 per dare la soluzione.

codice:
<html><head><title>x</title>
</head>
<script language="javascript">
function mytime()
{
  x=new Date();
  adesso=x.getTime();
  m=parseInt((adesso-start)/60000);
  s=parseInt((adesso-start)/1000);
  d=(adesso-start)-1000*s;
  s=s-m*60;
  if(s<=9) s="0"+s;
  if(m<=9) m="0"+m;
  if(d<=9) d="00"+d;
  if((d>9) && (d<=99)) d="0"+d;
  time=m+":"+s+":"+d;
  document.frmmn.rtime.value=time;
  setTimeout("mytime()",1); 
}
</script>
</head>
<body onload="mytime()">
<?php
if (!isset($_POST['pass']) || $_POST['pass'] == "")
{ 
  ?><form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post" name="frm">
    Livello <input type="text" value="" name="livello">


    <input type="submit" value="conferma">
    <input type="hidden" name="pass" value="1">
    <input type="hidden" name="inizia" value="0">
    </form> 
   <?php                       
}
elseif ($_POST['pass'] == 1)
{   
  if ($_POST['inizia']==0)
  {
    //operazioni da svolgere tipo inizializzazioni di variabili ecc....
    ?>
    <script language="JavaScript">
    x=new Date();
    start=x.getTime();
    </script>
    <?php
  }
  elseif ($_POST['inizia']==1)
  {
  //operazioni
  }
  ?><form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post" name="frmmn"> 
    <input type="text" name="rtime" size="8">
    <input type="text" name="soluzione">

    </form>
    <form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post" name="form_principale"> 
    <input type="hidden" name="pass" value="1">
    <input type="hidden" name="inizia" value="1">
    <input type="submit" value="conferma">
     
    </form>
    <?php
   }
elseif ($_POST['pass'] == 2)
{ 
   // altre operazioni per la validazione della soluzione, qua ormai il cronometro è fermo.
}

?>
</body>
</html>
Per comodità credo che sia preferibile avere il cronometro in javascript (minuti, secondi e millesimi).
Il cronometro parte dopo che l'utente ha scelto il livello e infatti lì ho messo la variabile "start" cioè il tempo di partenza.
Ogni millesimo di secondo viene eseguita la funzione mytime() e fin qui tutto ok.
Cioè tutto ok finché non viene ricaricata la pagina agendo sul form_principale: infatti dopo questa operazione non va più.
Sembra che la variabile "start" non sia più riconosciuta...
Ho letto che in javascript le variabili definite fuori dalle funzioni vengono considerate variabili globali...ma allora perché "start" non viene definita globale?
Come risolvere il problema?
Grazie.