El problema es, además de lo dicho por David El Grande, que estás modificando c.
Quiero decir, en el bucle vas aumentando c y lanzando los timeouts con la referencia a c. Lo que van a ver esos timeout no va a ser el valor de c en el momento de crear el timeout, sino en el momento de ejecutarse.
La solución a ambos problemas es fácil: No lances los timeout en un bucle sino uno después de otro:
Código javascript
:
Ver originalfunction opacidad(opac) {
opac = opac || 0;
setOp(document.getElementById('as'),opac);
if (opac<100) setTimeout(function() { opacidad(opac+1) } , 100);
}
// y lo lanzamos donde corresponda así:
opacidad();