function fadeIn(opacity){
setTimeout(fadeIn(opacity),10000)
setTimeout erwartet eine Referenz auf ein Funktionsobjekt. Was du machst: Du führst fadeIn sofort aus, indem du die Klammern dahinter notierst - das ist nämlich der Funktionsausführungs-Operator.
Das ist dasselbe, als würdest du
setTimeout(window.alert("Hallo!"), 10000);
notieren.
Diese Alert wird natürlich nicht nach 10 Sekunden ausgeführt, sondern sofort, wenn der JavaScript-Interpreter diese Zeile ausführt.
Was schließlich bei setTimeout als erster Parameter ankommt, ist der Rückgabewert des fadeIn-Aufrufes - es gibt keinen.
Was du also tun musst: Eine Funktionsreferenz notieren. Dazu kannst du eine anonyme Funktion verwenden, mit der du den fadeIn-Aufruf kapselst:
setTimeout(function () { fadeIn(opacity); }, 10000);
Die Variable opacity mit dem letzten in fadeIn gesetzten Wert ist darin verfügbar, weil es sich um eine Closure handelt.
Mathias