1 function nav_init (time_begin, time_end)
6 all_images = document.getElementsByTagName ("img");
7 for (i = 0; i < all_images.length; i++)
9 if (all_images[i].className != "graph_image")
12 all_images[i].navTimeBegin = new Number (time_begin);
13 all_images[i].navTimeEnd = new Number (time_end);
15 all_images[i].navBaseURL = all_images[i].src.replace (/;(begin|end)=[^;]*/g, '');
17 if (all_images[i].addEventListener) /* Mozilla */
19 all_images[i].addEventListener ('dblclick', nav_handle_dblclick,
20 false /* == bubbling */);
21 all_images[i].addEventListener ('DOMMouseScroll', nav_handle_wheel,
22 false /* == bubbling */);
26 all_images[i].ondblclick = nav_handle_dblclick;
27 all_images[i].onmousewheel = nav_handle_wheel;
34 function nav_image_repaint (img)
36 if (!img || !img.navBaseURL
37 || !img.navTimeBegin || !img.navTimeEnd)
40 img.src = img.navBaseURL + ";"
41 + "begin=" + img.navTimeBegin.toFixed (0) + ";"
42 + "end=" + img.navTimeEnd.toFixed (0);
43 } /* nav_image_repaint */
45 function nav_time_reset (img_id ,diff)
49 img = document.getElementById (img_id);
53 img.navTimeEnd = new Number ((new Date ()).getTime () / 1000);
54 img.navTimeBegin = new Number (img.navTimeEnd - diff);
56 nav_image_repaint (img);
61 function nav_time_change_obj (img, factor_begin, factor_end)
65 if (!img || !img.navBaseURL
66 || !img.navTimeBegin || !img.navTimeEnd)
69 diff = img.navTimeEnd - img.navTimeBegin;
71 /* Prevent zooming in if diff is less than five minutes */
72 if ((diff <= 300) && (factor_begin > 0.0) && (factor_end < 0.0))
75 img.navTimeBegin += (diff * factor_begin);
76 img.navTimeEnd += (diff * factor_end);
78 nav_image_repaint (img);
81 } /* nav_time_change */
83 function nav_time_change (img_id, factor_begin, factor_end)
92 all_images = document.getElementsByTagName ("img");
93 for (i = 0; i < all_images.length; i++)
95 if (all_images[i].className != "graph_image")
98 nav_time_change_obj (all_images[i], factor_begin, factor_end);
105 img = document.getElementById (img_id);
109 nav_time_change_obj (img, factor_begin, factor_end);
113 } /* nav_time_change */
115 function nav_move_earlier (img_id)
117 return (nav_time_change (img_id, -0.2, -0.2));
118 } /* nav_move_earlier */
120 function nav_move_later (img_id)
122 return (nav_time_change (img_id, +0.2, +0.2));
123 } /* nav_move_later */
125 function nav_zoom_in (img_id)
127 return (nav_time_change (img_id, +0.2, -0.2));
130 function nav_zoom_out (img_id)
132 return (nav_time_change (img_id, (-1.0 / 3.0), (1.0 / 3.0)));
135 function nav_set_reference (img_id)
142 img = document.getElementById (img_id);
143 if (!img || (img.className != "graph_image")
144 || !img.navTimeBegin || !img.navTimeEnd)
147 all_images = document.getElementsByTagName ("img");
148 for (i = 0; i < all_images.length; i++)
151 if (!tmp || (tmp.className != "graph_image")
152 || !tmp.navTimeBegin || !tmp.navTimeEnd)
155 if (tmp.id == img_id)
158 tmp.navTimeBegin = img.navTimeBegin;
159 tmp.navTimeEnd = img.navTimeEnd;
161 nav_image_repaint (tmp);
163 } /* nav_set_reference */
166 * TODO: calculate the mouse position relative to the image in a cross-browser
169 function nav_calculate_offset_x (obj)
176 offset = obj.offsetLeft;
177 if (obj.offsetParent)
178 offset += nav_calculate_offset_x (obj.offsetParent);
181 } /* nav_calculate_offset_x */
183 function nav_calculate_event_x (e)
190 nav_calculate_offset_x (e.target);
192 if (e.pageX || e.pageY)
196 else if (e.clientX || e.clientY)
198 pos = e.clientX + document.body.scrollLeft
199 + document.documentElement.scrollLeft;
203 } /* nav_calculate_event_x */
205 function nav_recenter (e)
216 if (!img || (img.className != "graph_image")
217 || !img.navTimeBegin || !img.navTimeEnd)
220 width = img.width - 97;
223 if (!x || (x < 0) || (x > width))
227 if (!y || (y < 35) || (y > 135))
230 diff = img.navTimeEnd - img.navTimeBegin;
232 time_old_center = img.navTimeBegin + (diff / 2.0);
233 time_new_center = img.navTimeBegin + (x * diff / width);
235 img.navTimeBegin += (time_new_center - time_old_center);
236 img.navTimeEnd += (time_new_center - time_old_center);
239 function nav_handle_dblclick (e)
248 if (!img || (img.className != "graph_image")
249 || !img.navTimeBegin || !img.navTimeEnd)
253 nav_image_repaint (img);
255 // e.returnValue = false;
256 } /* nav_handle_dblclick */
258 /* Taken from <http://adomas.org/javascript-mouse-wheel/> */
259 function nav_handle_wheel (e)
269 if (!img || (img.className != "graph_image")
270 || !img.navTimeBegin || !img.navTimeEnd)
276 delta = e.wheelDelta;
278 delta = delta * (-1);
282 delta = e.detail * (-1);
290 nav_zoom_in (img.id);
292 nav_zoom_out (img.id);
294 if (e.preventDefault)
296 e.returnValue = false;
297 } /* function nav_handle_wheel */
299 /* vim: set sw=2 sts=2 et : */