Min teori är att det beror på hur Mozilla fungerar. [har inte testat andra browsers]
När sidan laddats körs funktionen som sriver ett nytt dokument som börjar med <table border="1"... osv>
När scriptet sedan kommer till for-loopen känner den inte igen variabeln populate eftersom den inte längre är i samma 'scope' [den defineras utanför det nya dokumentet, dvs utanför funktionen showpopulate()].
Detta i sig genererar ett felmeddelande som säger precis detta; att populate inte finns i stort sett., och scriptet avbryts.
Jag kan ha helt fel i min teori så lita inte på att det jag skriver verkligen stämmer. :)
[ngn som känner att den har en mer korrekt förklaring får gärna rätta mig om jag har fel, jag är på hal is!]
En DOM-lösning vore kanske bättre ? [men då faller äldre webläsare bort]
Du kan inte använda document.write efter att sidan laddats (Vilket du uttryckligen gör eftersom den ligger i window.onload). Pröva att lägga den i en enkel script-tagg.
Annars måste du använda innerHTML. Här finns info om hur man kan få det att funka i Mozilla http://webfx.eae.net/dhtml/mozInnerHTML/mozInnerHtml.html