Sí, el script tiene el mismo efecto porque
window.clearTimeout(id); no hace nada.
El clearTimeout sirve para cancelar un setTimeout que ya ha sido iniciado, pero en tu caso no hay que cancelar nada, simplemente ejecutar el setTimeout siempre que haga falta. Es decir, sólo habría que ejecutar el else, o en tu caso:
Código PHP:
if (ypos >= 3 || ypos <=32)
id=window.setTimeout(MoverMenuBusqueda,14);
a secas, estaría correcto.
¿Entonces quedamos que es
error del navegador no? No se puede hacer nada pues.