deberias tener calma, si te desesperas no puedo pensar bien.
creo que tu problema esta especificamente aqui.
Código:
ele.onmouseover = function () { fnInitCalendar(this, 'fecha_tiempo'+num2, 'style=calendar.css,close=true') }
al momento de invocarse la funcion
fnInitCalendar, a este se le pasa como argumento el ultimo valor asignado a la variable
num2. tienes que crear un closure de esa variable para que el valor siempre sea el mismo cuando se invoque el evento.
Código:
ele.onmouseover = (function (num) {
return function(){fnInitCalendar(this, 'fecha_tiempo'+num, 'style=calendar.css,close=true');};
})(num2);
si es la primera vez, te sera un lio entender el codigo. basicamente un closure es cuando el alcance de una variable local aun es visible aunque la funcion ya hubiera terminado la interpretacion del codigo. en este caso, sea crea e invoca una funcion que a su vez devuelve otra funcion y esta ultima es la que se asigna como evento. cuando se invoca esta funcion, le pasamos la variable
num2 al argumento
num.
finalmente se devuelve una funcion anonima que invoca la funcion
fnInitCalendar con varios parametros. fijate que aqui se utiliza el argumento
num. es aqui cuando se crea el closure, porque se trata de una funcion interna que utiliza una variable local de otra funcion. recuerda que los argumentos tambien son variables locales en una funcion.