Hallo Guido!
setTimeout("MM_swapImgRestore()",4000);
Hier liegt der Fehler. Bei deinem Skript gehst du davon aus, dass das Skript an dieser Stelle für 4 Sekunden anhält, dann deine Funktion im setTimeout aufruft, und dann die eigentliche Funktion fortsetzt. Der setTimeout-Befehl funktioniert aber leider ein bisschen anders. Er macht quasi einen Prozess-Split. Ein Prozess läuft hinter dem setTimeout weiter, führt also dein rollover="1"; aus und die Funktion ist damit beendet. Der zweite Prozess durchläuft die "Innerein" vom setTimeout, wartet also erstmal 4 Sekunden und führt dann die dort definierte Funktion auf.
Ich hoffe, dass das einigermaßen verständlich erklärt war ;-)
MfG,
Mirko Hansen