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)
191 off = nav_calculate_offset_x (e.target);
193 if (e.pageX || e.pageY)
197 else if (e.clientX || e.clientY)
199 pos = e.clientX + document.body.scrollLeft
200 + document.documentElement.scrollLeft;
204 } /* nav_calculate_event_x */
206 function nav_recenter (e)
217 if (!img || (img.className != "graph_image")
218 || !img.navTimeBegin || !img.navTimeEnd)
221 width = img.width - 97;
224 if (!x || (x < 0) || (x > width))
228 if (!y || (y < 35) || (y > 135))
231 diff = img.navTimeEnd - img.navTimeBegin;
233 time_old_center = img.navTimeBegin + (diff / 2.0);
234 time_new_center = img.navTimeBegin + (x * diff / width);
236 img.navTimeBegin += (time_new_center - time_old_center);
237 img.navTimeEnd += (time_new_center - time_old_center);
240 function nav_handle_dblclick (e)
249 if (!img || (img.className != "graph_image")
250 || !img.navTimeBegin || !img.navTimeEnd)
254 nav_image_repaint (img);
256 // e.returnValue = false;
257 } /* nav_handle_dblclick */
259 /* Taken from <http://adomas.org/javascript-mouse-wheel/> */
260 function nav_handle_wheel (e)
270 if (!img || (img.className != "graph_image")
271 || !img.navTimeBegin || !img.navTimeEnd)
277 delta = e.wheelDelta;
279 delta = delta * (-1);
283 delta = e.detail * (-1);
291 nav_zoom_in (img.id);
293 nav_zoom_out (img.id);
295 if (e.preventDefault)
297 e.returnValue = false;
298 } /* function nav_handle_wheel */
300 /* vim: set sw=2 sts=2 et : */