su explorer io ho abbandonato l'uso di undefined, neanche a me lo riconosce.

invece di
codice:
function getField(n) { 
  n = n.toLowerCase(); 
  if (this.fields[n] == undefined) return undefined; 
  return this.fields[n][0]; 
}
prova qualcosa tipo
codice:
function getField(n) { 
  n = n.toLowerCase(); 
  if (!this.fields[n]) return false;
  return this.fields[n][0]; 
}
Il controllo (!oggetto) serve per sapere se un oggetto è definito in memoria.
Attento perché ora la funzione restituisce false, dovrai fare gli opportuni controlli anche al suo richiamo.