infatti ottieni l'effetto contrario: prima viene eseguito l'onclick e poi il valore di href.

In realtà tu devi solo chiamare la funzione sull'onclick

La funzione dovra nell'ordine
-chiuderà tutti i div
-aprire quello selezionato


poi numerolayer deve essere preciso altrimenti cerchi di settare una proprietà ad un oggetto inesistente (e questo causa un errore)


esempio

codice:
<script language="javascript" type="text/javascript">
<!--
function nascondi(layer){
for (i=0;i<numerolayer;i++){
id='photo'+i;
document.getElementById(id).style.visibility = 'hidden';
}

document.getElementById('photo'+layer).style.visibility = 'visible';

}
//-->
e il link diventa

questo nasconde tutti i layer tranne photo0