da47a6ac3c57fa6c5b6afc3b50afd55b2bc914e5
1 function nav_init (time_begin, time_end)
2 {
3 var all_images;
4 var i;
6 all_images = document.getElementsByTagName ("img");
7 for (i = 0; i < all_images.length; i++)
8 {
9 if (all_images[i].className != "graph_image")
10 continue;
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 */
18 all_images[i].addEventListener ('DOMMouseScroll', nav_handle_wheel,
19 false /* == bubbling */);
20 all_images[i].onmousewheel = nav_handle_wheel;
21 }
23 return (true);
24 } /* nav_init */
26 function nav_image_repaint (img)
27 {
28 if (!img || !img.navBaseURL
29 || !img.navTimeBegin || !img.navTimeEnd)
30 return;
32 img.src = img.navBaseURL + ";"
33 + "begin=" + img.navTimeBegin.toFixed (0) + ";"
34 + "end=" + img.navTimeEnd.toFixed (0);
35 } /* nav_image_repaint */
37 function nav_time_reset (img_id ,diff)
38 {
39 var img;
41 img = document.getElementById (img_id);
42 if (!img)
43 return (false);
45 img.navTimeEnd = new Number ((new Date ()).getTime () / 1000);
46 img.navTimeBegin = new Number (img.navTimeEnd - diff);
48 nav_image_repaint (img);
50 return (true);
51 }
53 function nav_time_change_obj (img, factor_begin, factor_end)
54 {
55 var diff;
57 if (!img)
58 return (false);
60 if (!img.navTimeEnd || !img.navTimeBegin)
61 return (false);
63 diff = img.navTimeEnd - img.navTimeBegin;
65 /* Prevent zooming in if diff is less than five minutes */
66 if ((diff <= 300) && (factor_begin > 0.0) && (factor_end < 0.0))
67 return (true);
69 img.navTimeBegin += (diff * factor_begin);
70 img.navTimeEnd += (diff * factor_end);
72 img.src = img.navBaseURL + ";"
73 + "begin=" + img.navTimeBegin.toFixed (0) + ";"
74 + "end=" + img.navTimeEnd.toFixed (0);
76 return (true);
77 } /* nav_time_change */
79 function nav_time_change (img_id, factor_begin, factor_end)
80 {
81 var diff;
83 if (img_id == '*')
84 {
85 var all_images;
87 all_images = document.getElementsByTagName ("img");
88 for (i = 0; i < all_images.length; i++)
89 {
90 if (all_images[i].className != "graph_image")
91 continue;
93 nav_time_change_obj (all_images[i], factor_begin, factor_end);
94 }
95 }
96 else
97 {
98 var img;
100 img = document.getElementById (img_id);
101 if (!img)
102 return (false);
104 nav_time_change_obj (img, factor_begin, factor_end);
105 }
107 return (true);
108 } /* nav_time_change */
110 function nav_move_earlier (img_id)
111 {
112 return (nav_time_change (img_id, -0.2, -0.2));
113 } /* nav_move_earlier */
115 function nav_move_later (img_id)
116 {
117 return (nav_time_change (img_id, +0.2, +0.2));
118 } /* nav_move_later */
120 function nav_zoom_in (img_id)
121 {
122 return (nav_time_change (img_id, +0.2, -0.2));
123 } /* nav_zoom_in */
125 function nav_zoom_out (img_id)
126 {
127 return (nav_time_change (img_id, (-1.0 / 3.0), (1.0 / 3.0)));
128 } /* nav_zoom_in */
130 function nav_recenter (e)
131 {
132 var x;
133 var y;
134 var img;
135 var diff;
136 var time_old_center;
137 var time_new_center;
138 var width;
140 img = e.target;
141 if (!img || (img.className != "graph_image")
142 || !img.navTimeBegin || !img.navTimeEnd)
143 return;
145 width = img.width - 97;
147 x = e.layerX - 70;
148 if (!x || (x < 0) || (x > width))
149 return;
151 y = e.layerY;
152 if (!y || (y < 35) || (y > 135))
153 return;
155 diff = img.navTimeEnd - img.navTimeBegin;
157 time_old_center = img.navTimeBegin + (diff / 2.0);
158 time_new_center = img.navTimeBegin + (x * diff / width);
160 img.navTimeBegin += (time_new_center - time_old_center);
161 img.navTimeEnd += (time_new_center - time_old_center);
162 } /* nav_recenter */
164 function nav_handle_dblclick (e)
165 {
166 var img;
168 /* M$IE */
169 if (!e)
170 e = window.event;
172 img = e.target;
173 if (!img || (img.className != "graph_image")
174 || !img.navTimeBegin || !img.navTimeEnd)
175 return;
177 nav_recenter (e);
178 nav_image_repaint (img);
180 // e.returnValue = false;
181 } /* nav_handle_dblclick */
183 /* Taken from <http://adomas.org/javascript-mouse-wheel/> */
184 function nav_handle_wheel (e)
185 {
186 var delta = 0;
187 var img;
189 /* M$IE */
190 if (!e)
191 e = window.event;
193 img = e.target;
194 if (!img || (img.className != "graph_image")
195 || !img.navTimeBegin || !img.navTimeEnd)
196 return;
198 /* Opera and M$IE */
199 if (e.wheelDelta)
200 {
201 delta = e.wheelDelta;
202 if (window.opera)
203 delta = delta * (-1);
204 }
205 else if (e.detail)
206 {
207 delta = e.detail * (-1);
208 }
210 if (!delta)
211 return;
213 nav_recenter (e);
214 if (delta > 0)
215 nav_zoom_in (img.id);
216 else
217 nav_zoom_out (img.id);
219 if (e.preventDefault)
220 e.preventDefault ();
221 e.returnValue = false;
222 } /* function nav_handle_wheel */
224 /* vim: set sw=2 sts=2 et : */