He revisado el código y pienso que ahora es correcto pero sigue sin funcionar como yo esperaba.
Lo que me sorprende es que parece no ejecutar las dos funciones de manera secuencia.
El hecho es que si hago click en la imagen cuando el campo input está vacío, me muestra el calendar pero cuando selecciono una fecha no ejecuta la función buscar().
En cambio, cuando el input contiene un valor, al hacer click en la imagen, a la vez que se muestra el calendar se ejecuta la función buscar con el valor actual del input (no actualizado pues todavía no he seleccionado nada en el calendar).
Código:
onclick='calendar("fecha");buscar()'
¿Se os ocurre algún modo de asegurar que las dos funciones se ejecutarán secuencialmente?