Solucionado el tema ese.
Al principio pensé que bastaría con poner un poco de javascript la función del cual seria checar si los métodos necesarios para asegurar el buen funcionamiento del desplegado estaban a nuestra disposición, si lo estaban, entonces escribir un CSS (dinámicamente por supuesto) en el que pusiéramos una regla para poner el div a cero en su altura lo que lo ocultaría. Este js estaría en el principio de la página y pues no tendría que esperar a que se cargara la pagina evitando así el problema que se genera al poner el
infodiv.style.height = '0px'; en la función init().
En efecto, el js checaba si los métodos estaban disponibles y si lo estaban entonces "escondía" el div, pero eso me jodía el efecto. Esto por que en la función init(); checa el valor de la altura del div y lo guardo en una variable. Como el js que ponía al inicio me llevaba la altura a cero antes de cargar la pagina, cuando la pagina se cargaba el valor de la altura del div era cero, en lugar del valor de la altura total del div en su estado normal (extendido). El efecto depende de ese valor para saber hasta donde expander el div. Como en este caso el valor era cero, lo máximo que el div se podía extender era cero lo cual me dejaba el div siempre escondido.
Después intenté con la misma técnica del javascript al inicio, que por cierto la solucion se basa en esa idea, pero en lugar de poner la altura en cero especifiqué
display = 'none' lo que me dio el mismo problema.
Lo que había que hacer era encontrar una regla que me permitiera ocultar el elemento sin que eso significara alterar su altura inicial (la del div extendido) permitiéndome pasar ese valor a la variable en la función init(); de tal modo que el div se extendiera hasta su altura normal y necesaria para mostrar los elementos. Fue ahí cuando recordé de la propiedad visibility y lo que hice fue, en lugar de llevar la altura a cero o poner dislpay igual a none, puse visibility igual a hidden. Lo que la propiedad visibility hace es ocultar o mostrar un elemento sin modificarlo, simplemente no lo muestra (si se pone como hidden). Esto me resolvió el problema de no mostrar el elemento, algo como para no revelar su contenido hasta que el usuario quiera acceder a el, pero me dejo todavía un problema. Como la propiedad visibility no altera el elemento, el elemento no se mostraba, pero su espacio seguía ahí, es decir que veía un espacio en blanco. Para poder quitar ese espacio en blanco era necesario remover el elemento del flujo de la página. Para lograr eso lo mas conveniente es poner el valor de position en absolute y después en la función init(); volver aponer tanto visibility como visible y position como static para volver a poner el elemento visible e integrarlo nuevamente en el flujo de la pagina. Al final la solución se resume en esto:
1 Agregar a la función init(); las siguientes lineas:
Código:
infodiv.style.visibility = "visible";
infodiv.style.position = 'static';
2 Agregar a la cabecera de la pagina lo siguiente:
Código:
<script type="text/javascript">
if(document.getElementById){
document.write("<style type='text/css'>#iddetuelemento{visibility: hidden; position: absolute; }<\/style>")
}
</script>
Por supuesto que esto último lo puedes poner en un javascript aparte y yo te recomendaría que así lo hicieras. Sin embargo si, como en mi caso, solo usaras el script en una pagina, es aceptable y quizá una mejor opción poner el js tal como esta en la cabecera de la pagina.
Saludos.