Eccoci! Adesso dovrebbe funzionare:

codice:
XHTML (esempio)

<input id="nome" name="nome" class="obbligatorio" />
<input id="cognome" name="cognome" />
<input id="email" name="email" class="obbligatorio" />

<input id="invia" type="submit" value="invia" />


Javascript

window.onload = function()
{
   var invia = document.getElementById('invia')
   var inputs = document.getElementsByTagName('input')
   var inputs_obbligatori = new Array()
   for (var i = 0; i < inputs.length; i++)
   {
      if ( inputs.item(i).className == 'obbligatorio' )
      {
         inputs_obbligatori.push(inputs.item(i))
      }
   }

   function controlla_campi_obbligatori()
   {
      for (var i = 0; i < inputs_obbligatori.length; i++)
      {
         if ( inputs_obbligatori[i].value == '' )
         {
            invia.disabled = true
            break
         }
         else
         {
            invia.disabled = false
         }
      }
   }

   invia.disabled = true
   for (var i = 0; i < inputs.length; i++)
   {
      inputs.item(i).onkeyup = function()
      {
         controlla_campi_obbligatori()
      }
   }
}
Ho evidenziato con colori diversi i legami tra il markup e il codice javascript per facilitare l'individuazione delle parti eventualmente modificabili.