comparison client/digitallibrary/dllib.js @ 386:3b710e39823b

latest version of baselib.js and dllib.js
author robcast
date Wed, 07 Dec 2005 16:13:49 +0100
parents d14782908c37
children 92e49afaea90
comparison
equal deleted inserted replaced
385:0155f1c3f505 386:3b710e39823b
15 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA 15 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
16 16
17 Authors: 17 Authors:
18 Christian Luginbuehl, 01.05.2003 (first version) 18 Christian Luginbuehl, 01.05.2003 (first version)
19 DW 24.03.2004 (Changed for digiLib in Zope) 19 DW 24.03.2004 (Changed for digiLib in Zope)
20 Robert Casties, 2.11.2004 20 Robert Casties, 8.11.2005
21 21
22 ! Requires baselib.js ! 22 ! Requires baselib.js !
23 23
24 */ 24 */
25 25
26 26
27 function identify() { 27 function identify() {
28 // used for identifying a digilib instance 28 // used for identifying a digilib instance
29 // Relato uses that function - lugi 29 // Relato uses that function - lugi
30 return "Digilib 0.6"; 30 return "Digilib 0.6";
31 } 31 }
32 32
33 33
34 /* 34 /*
35 * more parameter handling 35 * more parameter handling
76 // returns marks array from current parameters 76 // returns marks array from current parameters
77 var marks = new Array(); 77 var marks = new Array();
78 var ma; 78 var ma;
79 var mk = getParameter("mk"); 79 var mk = getParameter("mk");
80 if (mk.indexOf(";") >= 0) { 80 if (mk.indexOf(";") >= 0) {
81 // old format with ";" 81 // old format with ";"
82 ma = mk.split(";"); 82 ma = mk.split(";");
83 } else { 83 } else {
84 ma = mk.split(","); 84 ma = mk.split(",");
85 } 85 }
86 for (var i = 0; i < ma.length ; i++) { 86 for (var i = 0; i < ma.length ; i++) {
87 var pos = ma[i].split("/"); 87 var pos = ma[i].split("/");
88 if (pos.length > 1) { 88 if (pos.length > 1) {
89 marks.push(new Position(pos[0], pos[1])); 89 marks.push(new Position(pos[0], pos[1]));
90 } 90 }
91 } 91 }
92 return marks; 92 return marks;
93 } 93 }
94 94
95 function getAllMarks() { 95 function getAllMarks() {
96 // returns a string with all marks in query format 96 // returns a string with all marks in query format
97 var marks = new Array(); 97 var marks = new Array();
98 for (var i = 0; i < dlMarks.length; i++) { 98 for (var i = 0; i < dlMarks.length; i++) {
99 marks.push(cropFloat(dlMarks[i].x) + "/" + cropFloat(dlMarks[i].y)); 99 marks.push(cropFloat(dlMarks[i].x) + "/" + cropFloat(dlMarks[i].y));
100 } 100 }
101 return marks.join(","); 101 return marks.join(",");
102 } 102 }
103 103
104 function addMark(pos) { 104 function addMark(pos) {
128 } 128 }
129 129
130 function removeFlag(mode) { 130 function removeFlag(mode) {
131 // remove a mode flag 131 // remove a mode flag
132 if (dlFlags[mode]) { 132 if (dlFlags[mode]) {
133 delete dlFlags[mode]; 133 delete dlFlags[mode];
134 } 134 }
135 setParameter("mo", getAllFlags()); 135 setParameter("mo", getAllFlags());
136 return true; 136 return true;
137 } 137 }
138 138
139 function toggleFlag(mode) { 139 function toggleFlag(mode) {
140 // change a mode flag 140 // change a mode flag
141 if (dlFlags[mode]) { 141 if (dlFlags[mode]) {
142 delete dlFlags[mode]; 142 delete dlFlags[mode];
143 } else { 143 } else {
144 dlFlags[mode] = mode; 144 dlFlags[mode] = mode;
145 } 145 }
146 setParameter("mo", getAllFlags()); 146 setParameter("mo", getAllFlags());
147 return true; 147 return true;
148 } 148 }
149 149
150 function getAllFlags() { 150 function getAllFlags() {
151 // returns a string with all flags in query format 151 // returns a string with all flags in query format
152 var fa = new Array(); 152 var fa = new Array();
153 for (var f in dlFlags) { 153 for (var f in dlFlags) {
154 if ((f != "")&&(dlFlags[f] != null)) { 154 if ((f != "")&&(dlFlags[f] != null)) {
155 fa.push(f); 155 fa.push(f);
156 } 156 }
157 } 157 }
158 return fa.join(","); 158 return fa.join(",");
159 } 159 }
160 160
161 function parseFlags() { 161 function parseFlags() {
162 // sets dlFlags from the current parameters 162 // sets dlFlags from the current parameters
163 var flags = new Object(); 163 var flags = new Object();
164 var fa = getParameter("mo").split(","); 164 var fa = getParameter("mo").split(",");
165 for (var i = 0; i < fa.length ; i++) { 165 for (var i = 0; i < fa.length ; i++) {
166 var f = fa[i]; 166 var f = fa[i];
167 if (f != "") { 167 if (f != "") {
168 flags[f] = f; 168 flags[f] = f;
169 } 169 }
170 } 170 }
171 return flags; 171 return flags;
172 } 172 }
173 173
174 174
175 function bestPicSize(elem, inset) { 175 function bestPicSize(elem, inset) {
176 // returns a Size with the best image size for the given element 176 // returns a Size with the best image size for the given element
177 if (! defined(inset)) { 177 if (! defined(inset)) {
178 inset = 25; 178 inset = 25;
179 } 179 }
180 var ws = getWinSize(); 180 var ws = getWinSize();
181 var es = getElementPosition(elem); 181 var es = getElementPosition(elem);
182 if (es) { 182 if (es) {
183 ws.width = ws.width - es.x - inset; 183 ws.width = ws.width - es.x - inset;
184 ws.height = ws.height - es.y - inset; 184 ws.height = ws.height - es.y - inset;
185 } 185 }
186 return ws; 186 return ws;
187 }
188
189 function setDLParam(e, s, relative) {
190 // sets parameter based on HTML event
191 var nam;
192 var val;
193 if (s.type && (s.type == "select-one")) {
194 nam = s.name;
195 val = s.options[s.selectedIndex].value;
196 } else if (s.name && s.value) {
197 nam = s.name;
198 val = s.value;
199 }
200 if (nam && val) {
201 setParameter(nam, val, relative);
202 display();
203 } else {
204 alert("ERROR: unable to process event!");
205 }
206 return true;
187 } 207 }
188 208
189 209
190 /* ********************************************** 210 /* **********************************************
191 * digilib specific routines 211 * digilib specific routines
193 213
194 214
195 function dl_param_init() { 215 function dl_param_init() {
196 // parameter initialisation before onload 216 // parameter initialisation before onload
197 if (!baseScriptVersion) { 217 if (!baseScriptVersion) {
198 base_init(); 218 base_init();
199 } 219 }
200 dlScriptVersion = "1.1b"; 220 dlScriptVersion = "1.2b";
201 dlArea = new Rectangle(0.0, 0.0, 1.0, 1.0); 221 dlArea = new Rectangle(0.0, 0.0, 1.0, 1.0);
202 dlMaxArea = new Rectangle(0.0, 0.0, 1.0, 1.0); 222 dlMaxArea = new Rectangle(0.0, 0.0, 1.0, 1.0);
203 dlTrafo = new Transform(); 223 dlTrafo = new Transform();
204 dlMarks = new Array(); 224 dlMarks = new Array();
205 dlFlags = new Object(); 225 dlFlags = new Object();
217 237
218 238
219 function dl_init() { 239 function dl_init() {
220 // initalisation on load 240 // initalisation on load
221 if (!dlScriptVersion) { 241 if (!dlScriptVersion) {
222 dl_param_init(); 242 dl_param_init();
223 } 243 }
224 elemScaler = getElement("scaler", true); 244 elemScaler = getElement("scaler", true);
225 picElem = getElement("pic", true); 245 picElem = getElement("pic", true);
226 if (picElem == null && elemScaler) { 246 if (picElem == null && elemScaler) {
227 // in N4 pic is in the scaler layer 247 // in N4 pic is in the scaler layer
228 picElem = elemScaler.document.images[0]; 248 picElem = elemScaler.document.images[0];
229 } 249 }
230 if ((!elemScaler)||(!picElem)) { 250 if ((!elemScaler)||(!picElem)) {
231 alert("Sorry, zogilib doesn't work here!"); 251 alert("Sorry, digilib doesn't work here!");
232 return false; 252 return false;
233 } 253 }
234 // give a name to the window containing digilib 254 // give a name to the window containing digilib
235 if (defined(dlTarget)&&(dlTarget)) { 255 if (defined(dlTarget)&&(dlTarget)) {
236 window.name = dlTarget; 256 window.name = dlTarget;
237 } else { 257 } else {
238 window.name = "digilib"; 258 window.name = "digilib";
239 } 259 }
240 // put the query parameters (sans "?") in the parameters array 260 // put the query parameters (sans "?") in the parameters array
241 parseParameters(location.search.slice(1)); 261 parseParameters(location.search.slice(1));
242 // treat special parameters 262 // treat special parameters
243 dlMarks = parseMarks(); 263 dlMarks = parseMarks();
252 272
253 273
254 function display(detail) { 274 function display(detail) {
255 // redisplay the page 275 // redisplay the page
256 if (! detail) { 276 if (! detail) {
257 detail = 9; 277 detail = 255;
258 } 278 }
259 var queryString = getAllParameters(detail); 279 var queryString = getAllParameters(detail);
260 location.href = location.protocol + "//" + location.host + location.pathname + "?" + queryString; 280 location.href = location.protocol + "//" + location.host + location.pathname + "?" + queryString;
261 } 281 }
262 282
269 function renderMarks() { 289 function renderMarks() {
270 // put the visible marks on the image 290 // put the visible marks on the image
271 var mark_count = dlMarks.length; 291 var mark_count = dlMarks.length;
272 // make shure the image is loaded so we know its size 292 // make shure the image is loaded so we know its size
273 if (defined(picElem.complete) && picElem.complete == false && ! browserType.isN4 ) { 293 if (defined(picElem.complete) && picElem.complete == false && ! browserType.isN4 ) {
274 setTimeout("renderMarks()", 100); 294 setTimeout("renderMarks()", 100);
275 } else { 295 } else {
276 dlTrafo = parseTrafo(picElem); 296 dlTrafo = parseTrafo(picElem);
277 for (var i = 0; i < 8; i++) { 297 for (var i = 0; i < 8; i++) {
278 var me = getElement("dot"+i); 298 var me = getElement("dot"+i);
279 if (i < mark_count) { 299 if (i < mark_count) {
280 if (dlArea.containsPosition(dlMarks[i])) { 300 if (dlArea.containsPosition(dlMarks[i])) {
281 var mpos = dlTrafo.transform(dlMarks[i]); 301 var mpos = dlTrafo.transform(dlMarks[i]);
282 // suboptimal to place -5 pixels and not half size of mark-image 302 // suboptimal to place -5 pixels and not half size of mark-image
283 mpos.x = mpos.x -5; 303 mpos.x = mpos.x -5;
284 mpos.y = mpos.y -5; 304 mpos.y = mpos.y -5;
285 moveElement(me, mpos); 305 moveElement(me, mpos);
286 showElement(me, true); 306 showElement(me, true);
287 } 307 }
288 } else { 308 } else {
289 // hide the other marks 309 // hide the other marks
290 showElement(me, false); 310 showElement(me, false);
291 } 311 }
292 } 312 }
293 } 313 }
294 } 314 }
295 315
296 316
297 function setMark(reload) { 317 function setMark(reload) {
298 // add a mark where clicked 318 // add a mark where clicked
299 if ( dlMarks.length > 7 ) { 319 if ( dlMarks.length > 7 ) {
300 alert("Only 8 marks are possible at the moment!"); 320 alert("Only 8 marks are possible at the moment!");
301 return; 321 return;
302 } 322 }
303 window.focus(); 323 window.focus();
304 324
305 function markEvent(evt) { 325 function markEvent(evt) {
306 // event handler adding a new mark 326 // event handler adding a new mark
307 unregisterEvent("mousedown", elemScaler, markEvent); 327 unregisterEvent("mousedown", elemScaler, markEvent);
308 var p = dlTrafo.invtransform(evtPosition(evt)); 328 var p = dlTrafo.invtransform(evtPosition(evt));
309 addMark(p); 329 addMark(p);
310 if (defined(reload)&&(!reload)) { 330 if (defined(reload)&&(!reload)) {
311 // don't redisplay 331 // don't redisplay
312 renderMarks(); 332 renderMarks();
313 return; 333 return;
314 } 334 }
315 display(); 335 display();
316 } 336 }
317 337
318 // starting event capture 338 // starting event capture
319 registerEvent("mousedown", elemScaler, markEvent); 339 registerEvent("mousedown", elemScaler, markEvent);
320 } 340 }
322 342
323 function removeMark(reload) { 343 function removeMark(reload) {
324 // remove the last mark 344 // remove the last mark
325 deleteMark(); 345 deleteMark();
326 if (defined(reload)&&(!reload)) { 346 if (defined(reload)&&(!reload)) {
327 // don't redisplay 347 // don't redisplay
328 renderMarks(); 348 renderMarks();
329 return; 349 return;
330 } 350 }
331 display(); 351 display();
332 } 352 }
333 353
334 354
341 var eck2 = getElement("eck2"); 361 var eck2 = getElement("eck2");
342 var eck3 = getElement("eck3"); 362 var eck3 = getElement("eck3");
343 var eck4 = getElement("eck4"); 363 var eck4 = getElement("eck4");
344 364
345 function zoomClick(evt) { 365 function zoomClick(evt) {
346 // mouse click handler 366 // mouse click handler
347 if (click == 1) { 367 if (click == 1) {
348 // first click -- start moving 368 // first click -- start moving
349 click = 2; 369 click = 2;
350 pt1 = evtPosition(evt); 370 pt1 = evtPosition(evt);
351 pt2 = pt1; 371 pt2 = pt1;
352 eck1pos = pt1; 372 eck1pos = pt1;
353 eck2pos = new Position(pt1.x - 12, pt1.y); 373 eck2pos = new Position(pt1.x - 12, pt1.y);
354 eck3pos = new Position(pt1.x, pt1.y - 12); 374 eck3pos = new Position(pt1.x, pt1.y - 12);
355 eck4pos = new Position(pt1.y - 12, pt1.y - 12); 375 eck4pos = new Position(pt1.y - 12, pt1.y - 12);
356 moveElement(eck1, eck1pos); 376 moveElement(eck1, eck1pos);
357 moveElement(eck2, eck2pos); 377 moveElement(eck2, eck2pos);
358 moveElement(eck3, eck3pos); 378 moveElement(eck3, eck3pos);
359 moveElement(eck4, eck4pos); 379 moveElement(eck4, eck4pos);
360 showElement(eck1, true); 380 showElement(eck1, true);
361 showElement(eck2, true); 381 showElement(eck2, true);
362 showElement(eck3, true); 382 showElement(eck3, true);
363 showElement(eck4, true); 383 showElement(eck4, true);
364 // show moving 384 // show moving
365 registerEvent("mousemove", elemScaler, zoomMove); 385 registerEvent("mousemove", elemScaler, zoomMove);
366 registerEvent("mousemove", eck4, zoomMove); 386 registerEvent("mousemove", eck4, zoomMove);
367 // enable drag-to-zoom 387 // enable drag-to-zoom
368 registerEvent("mouseup", elemScaler, zoomClick); 388 registerEvent("mouseup", elemScaler, zoomClick);
369 registerEvent("mouseup", eck4, zoomClick); 389 registerEvent("mouseup", eck4, zoomClick);
370 } else { 390 } else {
371 // second click -- end moving 391 // second click -- end moving
372 pt2 = evtPosition(evt); 392 pt2 = evtPosition(evt);
373 showElement(eck1, false); 393 showElement(eck1, false);
374 showElement(eck2, false); 394 showElement(eck2, false);
375 showElement(eck3, false); 395 showElement(eck3, false);
376 showElement(eck4, false); 396 showElement(eck4, false);
377 unregisterEvent("mousemove", elemScaler, zoomMove); 397 unregisterEvent("mousemove", elemScaler, zoomMove);
378 unregisterEvent("mousemove", eck4, zoomMove); 398 unregisterEvent("mousemove", eck4, zoomMove);
379 unregisterEvent("mousedown", elemScaler, zoomClick); 399 unregisterEvent("mousedown", elemScaler, zoomClick);
380 unregisterEvent("mousedown", eck4, zoomClick); 400 unregisterEvent("mousedown", eck4, zoomClick);
381 var p1 = dlTrafo.invtransform(pt1); 401 var p1 = dlTrafo.invtransform(pt1);
382 var p2 = dlTrafo.invtransform(pt2); 402 var p2 = dlTrafo.invtransform(pt2);
383 var ww = p2.x-p1.x; 403 var ww = p2.x-p1.x;
384 var wh = p2.y-p1.y; 404 var wh = p2.y-p1.y;
385 if ((ww > 0)&&(wh > 0)) { 405 if ((ww > 0)&&(wh > 0)) {
386 setParameter("wx", cropFloat(p1.x)); 406 setParameter("wx", cropFloat(p1.x));
387 setParameter("wy", cropFloat(p1.y)); 407 setParameter("wy", cropFloat(p1.y));
388 setParameter("ww", cropFloat(ww)); 408 setParameter("ww", cropFloat(ww));
389 setParameter("wh", cropFloat(wh)); 409 setParameter("wh", cropFloat(wh));
390 parseArea(); 410 parseArea();
391 // zoomed is always fit 411 // zoomed is always fit
392 setParameter("ws", 1); 412 setParameter("ws", 1);
393 display(); 413 display();
394 } 414 }
395 } 415 }
396 } 416 }
397 417
398 function zoomMove(evt) { 418 function zoomMove(evt) {
399 // mouse move handler 419 // mouse move handler
400 pt2 = evtPosition(evt); 420 pt2 = evtPosition(evt);
401 // restrict marks to move right and down 421 // restrict marks to move right and down
402 eck1pos = pt1; 422 eck1pos = pt1;
403 eck2pos = new Position(Math.max(pt1.x, pt2.x)-12, pt1.y); 423 eck2pos = new Position(Math.max(pt1.x, pt2.x)-12, pt1.y);
404 eck3pos = new Position(pt1.x, Math.max(pt1.y, pt2.y)-12); 424 eck3pos = new Position(pt1.x, Math.max(pt1.y, pt2.y)-12);
405 eck4pos = new Position(Math.max(pt1.x, pt2.x)-12, Math.max(pt1.y, pt2.y)-12); 425 eck4pos = new Position(Math.max(pt1.x, pt2.x)-12, Math.max(pt1.y, pt2.y)-12);
406 moveElement(eck1, eck1pos); 426 moveElement(eck1, eck1pos);
407 moveElement(eck2, eck2pos); 427 moveElement(eck2, eck2pos);
408 moveElement(eck3, eck3pos); 428 moveElement(eck3, eck3pos);
409 moveElement(eck4, eck4pos); 429 moveElement(eck4, eck4pos);
410 } 430 }
411 431
412 // starting event capture 432 // starting event capture
413 registerEvent("mousedown", elemScaler, zoomClick); 433 registerEvent("mousedown", elemScaler, zoomClick);
414 registerEvent("mousedown", eck4, zoomClick); 434 registerEvent("mousedown", eck4, zoomClick);
438 458
439 459
440 function moveCenter() { 460 function moveCenter() {
441 // move visible area so that it's centered around the clicked point 461 // move visible area so that it's centered around the clicked point
442 if ( (dlArea.width == 1.0) && (dlArea.height == 1.0) ) { 462 if ( (dlArea.width == 1.0) && (dlArea.height == 1.0) ) {
443 // noting to do 463 // nothing to do
444 return; 464 return;
445 } 465 }
446 window.focus(); 466 window.focus();
447 467
448 function moveCenterEvent(evt) { 468 function moveCenterEvent(evt) {
449 // move to handler 469 // move to handler
450 unregisterEvent("mousedown", elemScaler, moveCenterEvent); 470 unregisterEvent("mousedown", elemScaler, moveCenterEvent);
451 var pt = dlTrafo.invtransform(evtPosition(evt)); 471 var pt = dlTrafo.invtransform(evtPosition(evt));
452 var newarea = new Rectangle(pt.x-0.5*dlArea.width, pt.y-0.5*dlArea.height, dlArea.width, dlArea.height); 472 var newarea = new Rectangle(pt.x-0.5*dlArea.width, pt.y-0.5*dlArea.height, dlArea.width, dlArea.height);
453 newarea = dlMaxArea.fit(newarea); 473 newarea = dlMaxArea.fit(newarea);
454 // set parameters 474 // set parameters
455 setParamFromArea(newarea); 475 setParamFromArea(newarea);
456 parseArea(); 476 parseArea();
457 display(); 477 display();
458 } 478 }
459 479
460 // starting event capture 480 // starting event capture
461 registerEvent("mousedown", elemScaler, moveCenterEvent); 481 registerEvent("mousedown", elemScaler, moveCenterEvent);
462 } 482 }
463 483
464 function moveBy(movx, movy) { 484 function moveBy(movx, movy) {
465 // move visible area by movx and movy (in units of dw, dh) 485 // move visible area by movx and movy (in units of ww, wh)
466 if ((dlArea.width == 1.0)&&(dlArea.height == 1.0)) { 486 if ((dlArea.width == 1.0)&&(dlArea.height == 1.0)) {
467 // nothing to do 487 // nothing to do
468 return; 488 return;
469 } 489 }
470 var newarea = dlArea.copy(); 490 var newarea = dlArea.copy();
471 newarea.x += parseFloat(movx)*dlArea.width; 491 newarea.x += parseFloat(movx)*dlArea.width;
472 newarea.y += parseFloat(movy)*dlArea.height; 492 newarea.y += parseFloat(movy)*dlArea.height;
473 newarea = dlMaxArea.fit(newarea); 493 newarea = dlMaxArea.fit(newarea);
475 setParamFromArea(newarea); 495 setParamFromArea(newarea);
476 parseArea(); 496 parseArea();
477 display(); 497 display();
478 } 498 }
479 499
480
481
482
483 function getRef() { 500 function getRef() {
484 // returns a reference to the current digilib set 501 // returns a reference to the current digilib set
485 if (! baseUrl) { 502 if (! baseUrl) {
486 var baseUrl = location.protocol + "//" + location.host + location.pathname; 503 var baseUrl = location.protocol + "//" + location.host + location.pathname;
487 } 504 }
488 var hyperlinkRef = baseUrl; 505 var hyperlinkRef = baseUrl;
489 var par = getAllParameters(9); 506 var par = getAllParameters(7+16); // all without ddpi, pt
490 if (par.length > 0) { 507 if (par.length > 0) {
491 hyperlinkRef += "?" + par; 508 hyperlinkRef += "?" + par;
492 } 509 }
493 return hyperlinkRef; 510 return hyperlinkRef;
494 } 511 }
495 512
496 function getRefWin(type, msg) { 513 function getRefWin(type, msg) {
497 // shows an alert with a reference to the current digilib set 514 // shows an alert with a reference to the current digilib set
498 if (! msg) { 515 if (! msg) {
499 msg = "Link for HTML documents"; 516 msg = "Link for HTML documents";
500 } 517 }
501 prompt(msg, getRef()); 518 prompt(msg, getRef());
502 } 519 }
520
521 function getQuality() {
522 // returns the current q setting
523 for (var i = 0; i < 3; i++) {
524 if (hasFlag("q"+i)) {
525 return i;
526 }
527 }
528 return 1
529 }
530
531 function setQuality(qual) {
532 // set the image quality
533 for (var i = 0; i < 3; i++) {
534 removeFlag("q"+i);
535 if (i == qual) {
536 addFlag("q"+i);
537 }
538 }
539 setParameter("mo", getAllFlags());
540 display();
541 }
542
543 function setQualityWin(msg) {
544 // dialog for setting quality
545 if (! msg) {
546 msg = "Quality (0..2)";
547 }
548 var q = getQuality();
549 var newq = window.prompt(msg, q);
550 if (newq) {
551 setQuality(newq);
552 }
553 }
554
555 function mirror(dir) {
556 // mirror the image horizontally or vertically
557 if (dir == "h") {
558 toggleFlag("hmir");
559 } else {
560 toggleFlag("vmir");
561 }
562 setParameter("mo", getAllFlags());
563 display();
564 }
565
566 function gotoPage(gopage, keep) {
567 // goto given page nr (+/-: relative)
568 var oldpn = parseInt(getParameter("pn"));
569 setParameter("pn", gopage, true);
570 var pn = parseInt(getParameter("pn"));
571 if (pn < 1) {
572 alert("No such page! (Page number too low)");
573 setParameter("pn", oldpn);
574 return;
575 }
576 if (hasParameter("pt")) {
577 pt = parseInt(getParameter("pt"))
578 if (pn > pt) {
579 alert("No such page! (Page number too high)");
580 setParameter("pn", oldpn);
581 return;
582 }
583 }
584 if (keep) {
585 display(15+32); // all, no mark
586 } else {
587 display(3+32); // fn, pn, ws, mo + pt
588 }
589 }
590
591 function gotoPageWin() {
592 // dialog to ask for new page nr
593 var pn = getParameter("pn");
594 var gopage = window.prompt("Go to page", pn);
595 if (gopage) {
596 gotoPage(gopage);
597 }
598 }
599
600 function setParamWin(param, text, relative) {
601 // dialog to ask for new parameter value
602 var val = getParameter(param);
603 var newval = window.prompt(text, val);
604 if (newval) {
605 setParameter(param, newval, relative);
606 display();
607 }
608 }
609
610 function showOptions(show) {
611 // show or hide option div
612 var elem = getElement("dloptions");
613 showElement(elem, show);
614 }