pensavo di averti risposto prima del tuo ultimo messaggio,
te lo riporto

scusa Dabotz, non converrebbe lavorare sulla proprietà display dei sottomenù?
un livello con stile display='none' non occupa spazio
e quando viene cambiato (a 'block' x mostrare il contenuto) le voci sottostanti e relativi sotto-menù si riposizionano opportunamente,
se poi è un esperimento x capirne di + è un altro discorso:

mi sembra ci siano parecchi eval non strettamente necessari:
x es. tutto questo
codice:
			x=eval("document.getElementById(menu[i]).style.top");	// Rileva la posizione verticale del menu corrente
			if (x.length == 4) {					// La posizione e` espressa su 4 caratteri?
				num = x.substring(0,2);			// Se si`, elimina i due caratteri px dal fondo e prendi i primi due
			}						
			else {
				num = x.substring(0,3);			// Se no, elimina i due caratteri px dal fondo e prendi i primi tre
			}
			var valnum = eval(num);				// Trasforma la stringa di posizione in un numero
è x=parseInt(document.getElementById(menu[i]).style.top);

ma, soprattutto, il menù non funziona con MOZ/NN7 perchè il top che cerchi di leggere/modificare non è definito in linea
x molti browser moderni queste è una condizione essenziale affinchè il valore sia manipolabile via script
alcuni browser vogliono anche il 'px' dopo il settaggio, quindi
document.getElementById(menu[i]).style.top = tot+'px';