Ya he solucionadolo del último código para que no haya que darle dos veces:
El problema es que, al parecer, si el div empieza con display:none, el javascript piensa que el atributo está vacío. Lo que hay que hacer es testear por "block" en vez de por "none".
Lo encontré rastreando la red.