ho perso il vecchio... l'ho dovuto reinventare

codice:

<SCRIPT LANGUAGE="JavaScript">
<!--
var Unita = new Array("","uno","due","tre","quattro","cinque","sei","sette","otto","nove","dieci","undici","dodici","tredici","quattordici","quindici","sedici","diciassette","diciotto","diciannove")
var Decin = new Array("","","vent","trent","quarant","cinquant","sessant","settant","ottant","novant")
var Decine = new Array("","","venti","trenta","quaranta","cinquanta","sessanta","settanta","ottanta","novanta")
var Fase = new Array("","mila","milioni","miliardi")
var Fase1 = new Array("uno","mille","unmilione","unmiliardo")

function Num2Let(Numero) {
if (Numero==0) return "zero";
Numero = String(Numero);
// scompongo il numero 
passo = 0 
r = ""
while(Numero!="") {
	// prendo fino a tre cifre a destra
	l = Numero.length;
	if (l>3) {
		Parziale = Numero.substr(l-3);
		Numero = Numero.substr(0,l-3);
	} else {
		Parziale = Numero;
		Numero = "";
	}
	// aggiungo zeri a sinistra
	while(Parziale.length<3) { Parziale="0"+Parziale }
	// caso: uno
	if (Parziale=="001") {
		p = Fase1[passo]
	} else {
		// divido le tre cifre e trasformo in numero
		c = parseInt(Parziale.charAt(0),10);
		d = parseInt(Parziale.charAt(1),10);
		u = parseInt(Parziale.charAt(2),10);
		p = ""
		// centinaia
		if (c>0) { 
			if (c>1) p+=Unita[c];
			p+="cento";
		}
		// decine
		if (d>0) { 
			if (d>1) {
				if (u==8||u==1) { // unita' che iniziano per vocale
					p+=Decin[d];
				} else {
					p+=Decine[d];
				}
			} else {
				u+=10; // comreso fra 1 e 19
			}
		}
		// unita' ( fino al 19 )
		if (u>0) { 
			p+=Unita[u];
		}
		// aggiungo il suffisso
		p+=Fase[passo];
	}
	// metto il parziale davanti al risultato e incremento passo
	r = p+r;
	passo++;
}
return r
}
//-->
</SCRIPT>

<form>
<input type=text onKeyUp="this.value=this.value.replace(/\D/g,'').replace(/^0+/,'')
; this.form.lettere.value=Num2Let(this.value);">


<input type=text name=lettere size=120>
</form>
ps: non ho avuto tempo di ottimizzarlo... cosi' pero' e' piu' leggibile

ciao