Devi farlo due volte perchè javascript non può leggere stili che non siano in linea.
Alla prima passata element.style.visibility è "undefined" (diverso da "hidden" quindi la tua funzione gli assegna una visibility "hidden", visibility leggibile alla seconda "passata")
Esistono diverse funzioni per leggere, tramite javascript, gli stili non in linea, ne posto una:
codice:
function getStyle(oElm, strCssRule){
var strValue = "";
if(document.defaultView && document.defaultView.getComputedStyle){
strValue = document.defaultView.getComputedStyle(oElm, "").getPropertyValue(strCssRule);
}
else if(oElm.currentStyle){
strCssRule = strCssRule.replace(/\-(\w)/g, function (strMatch, p1){
return p1.toUpperCase();
});
strValue = oElm.currentStyle[strCssRule];
}
return strValue;
}
dove oElm sta per "Object Element" e strCssRule sta per "Regola CSS"
esempio:
getStyle(document.getElementById("container"), "font-size");