diff client/digitallibrary/baselib.js @ 386:3b710e39823b

latest version of baselib.js and dllib.js
author robcast
date Wed, 07 Dec 2005 16:13:49 +0100
parents 735ea8bab962
children d989a93d773b
line wrap: on
line diff
--- a/client/digitallibrary/baselib.js	Wed Dec 07 16:07:29 2005 +0100
+++ b/client/digitallibrary/baselib.js	Wed Dec 07 16:13:49 2005 +0100
@@ -23,7 +23,7 @@
 
 function base_init() {
     // init function
-    baseScriptVersion = "1.1.1b";
+    baseScriptVersion = "1.2";
     dlParams = new Object();
     browserType = getBrowserType();
 }
@@ -53,19 +53,19 @@
     bt.versIE = 0;
 
     if ((! document.cssonly && document.layers) || document.all || document.getElementById) {
-	var vers = navigator.appVersion.split('MSIE ');
-	vers = vers[vers.length - 1];
-	bt.versIE = getInt(vers);
-	bt.isIE = navigator.userAgent.indexOf('MSIE') >= 0;
-	bt.isMac = navigator.platform.indexOf('Mac') >= 0;
-	bt.isWin = navigator.platform.indexOf('Win') >= 0;
-	bt.isN4 = (navigator.userAgent.indexOf('Mozilla/4.') >= 0) && ! bt.isIE;
-	bt.isIEWin = bt.versIE > 0 && bt.isWin;
-	if (navigator.appVersion.indexOf('MSIE') < 0 || ! bt.isMac || bt.versIE >= 5) {
-	    bt.doDHTML = true;
-	    bt.isOpera = navigator.userAgent.indexOf(' Opera ') >= 0;
-	    bt.isKonq = navigator.userAgent.indexOf(' Konqueror') >= 0;
-	}
+        var vers = navigator.appVersion.split('MSIE ');
+        vers = vers[vers.length - 1];
+        bt.versIE = getInt(vers);
+        bt.isIE = navigator.userAgent.indexOf('MSIE') >= 0;
+        bt.isMac = navigator.platform.indexOf('Mac') >= 0;
+        bt.isWin = navigator.platform.indexOf('Win') >= 0;
+        bt.isN4 = (navigator.userAgent.indexOf('Mozilla/4.') >= 0) && ! bt.isIE;
+        bt.isIEWin = bt.versIE > 0 && bt.isWin;
+        if (navigator.appVersion.indexOf('MSIE') < 0 || ! bt.isMac || bt.versIE >= 5) {
+            bt.doDHTML = true;
+            bt.isOpera = navigator.userAgent.indexOf(' Opera ') >= 0;
+            bt.isKonq = navigator.userAgent.indexOf(' Konqueror') >= 0;
+        }
     }
     return bt;
 }
@@ -73,13 +73,13 @@
 // fixes for javascript < 1.2
 if (! Array.prototype.push) {
     Array.prototype.push = function(val) {
-	this[this.length] = val;
-	return this.length;
+        this[this.length] = val;
+        return this.length;
     }
     Array.prototype.pop = function() {
-	var val = this[this.length-1];
-	this.length -= 1;
-	return val;
+        var val = this[this.length-1];
+        this.length -= 1;
+        return val;
     }
 }
 
@@ -150,18 +150,18 @@
     // returns the intersection of the given Rectangle and this one
     var sec = rect.copy();
     if (sec.x < this.x) {
-	sec.width = sec.width - (this.x - sec.x);
-	sec.x = this.x;
+        sec.width = sec.width - (this.x - sec.x);
+        sec.x = this.x;
     }
     if (sec.y < this.y) {
-	sec.height = sec.height - (this.y - sec.y);
-	sec.y = this.y;
+        sec.height = sec.height - (this.y - sec.y);
+        sec.y = this.y;
     }
     if (sec.x + sec.width > this.x + this.width) {
-	sec.width = (this.x + this.width) - sec.x;
+        sec.width = (this.x + this.width) - sec.x;
     }
     if (sec.y + sec.height > this.y + this.height) {
-	sec.height = (this.y + this.height) - sec.y;
+        sec.height = (this.y + this.height) - sec.y;
     }
     return sec;
 }
@@ -171,10 +171,10 @@
     sec.x = Math.max(sec.x, this.x);
     sec.x = Math.max(sec.x, this.x);
     if (sec.x + sec.width > this.x + this.width) {
-	sec.x = this.x + this.width - sec.width;
+        sec.x = this.x + this.width - sec.width;
     }
     if (sec.y + sec.height > this.y + this.height) {
-	sec.y = this.y + this.height - sec.height;
+        sec.y = this.y + this.height - sec.height;
     }
     return sec.intersect(this);
 }
@@ -199,13 +199,13 @@
 Transform.prototype.concat = function(traf) {
     // add Transform traf to this Transform
     for (var i = 0; i < 3; i++) {
-	for (var j = 0; j < 3; j++) {
-	    var c = 0.0;
-	    for (var k = 0; k < 3; k++) {
-		c += traf["m"+i+k] * this["m"+k+j];
-	    }
-	    this["m"+i+j] = c;
-	}
+        for (var j = 0; j < 3; j++) {
+            var c = 0.0;
+            for (var k = 0; k < 3; k++) {
+                c += traf["m"+i+k] * this["m"+k+j];
+            }
+            this["m"+i+j] = c;
+        }
     }
     return this;
 }
@@ -214,9 +214,9 @@
     var x = this.m00 * rect.x + this.m01 * rect.y + this.m02;
     var y = this.m10 * rect.x + this.m11 * rect.y + this.m12;
     if (rect.width) {
-	var width = this.m00 * rect.width + this.m01 * rect.height;
-	var height = this.m10 * rect.width + this.m11 * rect.height;
-	return new Rectangle(x, y, width, height);
+        var width = this.m00 * rect.width + this.m01 * rect.height;
+        var height = this.m10 * rect.width + this.m11 * rect.height;
+        return new Rectangle(x, y, width, height);
     }
     return new Position(x, y);
 }
@@ -231,13 +231,13 @@
     // returns a Transform that is a rotation by angle degrees around [pos.x, pos.y]
     var traf = new Transform();
     if (angle != 0) {
-	var t = 2.0 * Math.PI * parseFloat(angle) / 360.0;
-	traf.m00 = Math.cos(t);
-	traf.m01 = - Math.sin(t);
-	traf.m10 = Math.sin(t);
-	traf.m11 = Math.cos(t);
-	traf.m02 = pos.x - pos.x * Math.cos(t) + pos.y * Math.sin(t);
-	traf.m12 = pos.y - pos.x * Math.sin(t) - pos.y * Math.cos(t);
+        var t = 2.0 * Math.PI * parseFloat(angle) / 360.0;
+        traf.m00 = Math.cos(t);
+        traf.m01 = - Math.sin(t);
+        traf.m10 = Math.sin(t);
+        traf.m11 = Math.cos(t);
+        traf.m02 = pos.x - pos.x * Math.cos(t) + pos.y * Math.sin(t);
+        traf.m12 = pos.y - pos.x * Math.sin(t) - pos.y * Math.cos(t);
     }
     return traf;
 }
@@ -264,37 +264,48 @@
 function newParameter(name, defaultValue, detail) {
     // create a new parameter with a name and a default value
     if (defined(dlParams[name])) {
-	alert("Fatal: An object with name '" + name + "' already exists - cannot recreate!");
-	return false;
+        alert("Fatal: An object with name '" + name + "' already exists - cannot recreate!");
+        return false;
     } else {
-	dlParams[name] = new Object();
-	dlParams[name].defaultValue = defaultValue;
-	dlParams[name].hasValue = false;
-	dlParams[name].value = defaultValue;
-	dlParams[name].detail = detail;
-	return dlParams[name];
+        dlParams[name] = new Object();
+        dlParams[name].defaultValue = defaultValue;
+        dlParams[name].hasValue = false;
+        dlParams[name].value = defaultValue;
+        dlParams[name].detail = detail;
+        return dlParams[name];
     }
 }
 
 function getParameter(name) {
     // returns the named parameter value or its default value
-    if (defined(dlParams) && defined(dlParams[name])) {
-	if (dlParams[name].hasValue) {
-	    return dlParams[name].value;
-	} else {
-	    return dlParams[name].defaultValue;
-	}
+    if (defined(dlParams[name])) {
+        if (dlParams[name].hasValue) {
+            return dlParams[name].value;
+        } else {
+            return dlParams[name].defaultValue;
+        }
     } else {
-	return null;
+        return null;
     }
 }
 
-function setParameter(name, value) {
-    // sets parameter value
+function setParameter(name, value, relative) {
+    // sets parameter value (relative values with +/- unless literal)
     if (defined(dlParams[name])) {
-	dlParams[name].value = value;
-	dlParams[name].hasValue = true;
-	return true;
+    	if ((relative)&&(value.slice)) {
+	    	var sign = value.slice(0,1);
+			if (sign == '+') {
+				dlParams[name].value = parseFloat(dlParams[name].value) + parseFloat(value.slice(1));
+			} else if (sign == '-') {
+				dlParams[name].value = parseFloat(dlParams[name].value) - parseFloat(value.slice(1));
+			} else {
+	        	dlParams[name].value = value;
+	        }
+	    } else {
+	        dlParams[name].value = value;
+	    }
+        dlParams[name].hasValue = true;
+        return true;
     }
     return false;
 }
@@ -302,7 +313,7 @@
 function hasParameter(name) {
     // returns if the parameter's value has been set
     if (defined(dlParams[name])) {
-	return dlParams[name].hasValue;
+        return dlParams[name].hasValue;
     }
     return false;
 }
@@ -310,16 +321,16 @@
 function getAllParameters(detail) {
     // returns a string of all parameters in query format
     if (! detail) {
-	detail = 10;
+        detail = 255;
     }
     var params = new Array();
-    for ( param in dlParams ) {
-	if ((dlParams[param].detail <= detail)&&(dlParams[param].hasValue)) {
-	    var val = getParameter(param);
-	    if (val != "") {
-		params.push(param + "=" + val);
-	    }
-	}
+    for (param in dlParams) {
+        if (((dlParams[param].detail & detail) > 0)&&(dlParams[param].hasValue)) {
+            var val = getParameter(param);
+            if (val != "") {
+                params.push(param + "=" + val);
+            }
+        }
     }
     return params.join("&");
 }
@@ -328,10 +339,10 @@
     // gets parameter values from query format string
     var params = query.split("&");
     for (var i = 0; i < params.length; i++) {
-	var keyval = params[i].split("=");
-	if (keyval.length == 2) {
-	    setParameter(keyval[0], keyval[1]);
-	}
+        var keyval = params[i].split("=");
+        if (keyval.length == 2) {
+            setParameter(keyval[0], keyval[1]);
+        }
     }
 }
 
@@ -344,20 +355,20 @@
     // returns the element object with the id tagid
     var e;
     if (document.getElementById) {
-	e = document.getElementById(tagid);
+        e = document.getElementById(tagid);
     } else if (document.all) {
-	alert("document.all!");
-	e = document.all[tagid];
+        alert("document.all!");
+        e = document.all[tagid];
     } else if (document.layers) {
         e = document.layers[tagid];
     } 
     if (e) {
-	return e;
+        return e;
     } else {
-	if (! quiet) {
-	    alert("unable to find element: "+tagid);
-	}
-	return null;
+        if (! quiet) {
+            alert("unable to find element: "+tagid);
+        }
+        return null;
     }
 }
 
@@ -366,36 +377,36 @@
     var x = 0;
     var y = 0;
     if (defined(elem.offsetLeft)) {
-	var e = elem;
-	while (e) {
-	    if (defined(e.clientLeft)) {
-		// special for IE
-		if (browserType.isMac) {
-		    if (e.offsetParent.tagName == "BODY") {
-			// IE for Mac extraspecial
-			x += e.clientLeft;
-			y += e.clientTop;
-			break;
-		    }
-		} else {
-		    if ((e.tagName != "TABLE") && (e.tagName != "BODY")) {
-			x += e.clientLeft;
-			y += e.clientTop;
-		    }
-		}
-	    }
-	    x += e.offsetLeft;
-	    y += e.offsetTop;
-	    e = e.offsetParent;
-	}
+        var e = elem;
+        while (e) {
+            if (defined(e.clientLeft)) {
+                // special for IE
+                if (browserType.isMac) {
+                    if (e.offsetParent.tagName == "BODY") {
+                        // IE for Mac extraspecial
+                        x += e.clientLeft;
+                        y += e.clientTop;
+                        break;
+                    }
+                } else {
+                    if ((e.tagName != "TABLE") && (e.tagName != "BODY")) {
+                        x += e.clientLeft;
+                        y += e.clientTop;
+                    }
+                }
+            }
+            x += e.offsetLeft;
+            y += e.offsetTop;
+            e = e.offsetParent;
+        }
     } else if (defined(elem.x)) {
-	x = elem.x;
-	y = elem.y;
+        x = elem.x;
+        y = elem.y;
     } else if (defined(elem.pageX)) {
-	x = elem.pageX;
-	y = elem.pageY;
+        x = elem.pageX;
+        y = elem.pageY;
     } else {
-	alert("unable to get position of "+elem+" (id:"+elem.id+")");
+        alert("unable to get position of "+elem+" (id:"+elem.id+")");
     }
     return new Position(getInt(x), getInt(y));
 }
@@ -405,16 +416,16 @@
     var width = 0;
     var height = 0;
     if (defined(elem.offsetWidth)) {
-	width = elem.offsetWidth;
-	height = elem.offsetHeight;
+        width = elem.offsetWidth;
+        height = elem.offsetHeight;
     } else if (defined(elem.width)) {
-	width = elem.width;
-	height = elem.height;
+        width = elem.width;
+        height = elem.height;
     } else if (defined(elem.clip.width)) {
-	width = elem.clip.width;
-	height = elem.clip.height;
+        width = elem.clip.width;
+        height = elem.clip.height;
     } else {
-	alert("unable to get size of "+elem+" (id:"+elem.id+")");
+        alert("unable to get size of "+elem+" (id:"+elem.id+")");
     }
     return new Size(getInt(width), getInt(height));
 }
@@ -431,26 +442,26 @@
 function moveElement(elem, rect) {
     // moves and sizes the element
     if (elem.style) {
-	if (defined(rect.x)) {
-	    elem.style.left = Math.round(rect.x) + "px";
-	    elem.style.top = Math.round(rect.y) + "px";
-	}
-	if (defined(rect.width)) {
-	    elem.style.width = Math.round(rect.width) + "px";
-	    elem.style.height = Math.round(rect.height) + "px";
-	}
+        if (defined(rect.x)) {
+            elem.style.left = Math.round(rect.x) + "px";
+            elem.style.top = Math.round(rect.y) + "px";
+        }
+        if (defined(rect.width)) {
+            elem.style.width = Math.round(rect.width) + "px";
+            elem.style.height = Math.round(rect.height) + "px";
+        }
     } else if (document.layers) {
-	if (defined(rect.x)) {
-	    elem.pageX = getInt(rect.x);
-	    elem.pageY = getInt(rect.y);
-	}
-	if (defined(rect.width)) {
-	    elem.clip.width = getInt(rect.width);
-	    elem.clip.height = getInt(rect.height);
-	}
+        if (defined(rect.x)) {
+            elem.pageX = getInt(rect.x);
+            elem.pageY = getInt(rect.y);
+        }
+        if (defined(rect.width)) {
+            elem.clip.width = getInt(rect.width);
+            elem.clip.height = getInt(rect.height);
+        }
     } else {
-    	alert("moveelement: no style nor layer property!");
-	return false;
+        alert("moveelement: no style nor layer property!");
+        return false;
     }
     return true;
 }
@@ -458,19 +469,19 @@
 function showElement(elem, show) {
     // shows or hides the element
     if (elem.style) {
-	if (show) {
-	    elem.style.visibility = "visible";
-	} else {
-	    elem.style.visibility = "hidden";
-	}
+        if (show) {
+            elem.style.visibility = "visible";
+        } else {
+            elem.style.visibility = "hidden";
+        }
     } else if (defined(elem.visibility)) {
-	if (show) {
-	    elem.visibility = "show";
-	} else {
-	    elem.visibility = "hide";
-	}
+        if (show) {
+            elem.visibility = "show";
+        } else {
+            elem.visibility = "hide";
+        }
     } else {
-	alert("showelement: no style nor layer property!");
+        alert("showelement: no style nor layer property!");
     }
     return true;
 }
@@ -481,17 +492,17 @@
     var y;
     evt = (evt) ? evt : window.event;
     if (!evt) {
-	alert("no event found! "+evt);
-	return;
+        alert("no event found! "+evt);
+        return;
     }
     if (defined(evt.pageX)) {
-	x = parseInt(evt.pageX);
-	y = parseInt(evt.pageY);
+        x = parseInt(evt.pageX);
+        y = parseInt(evt.pageY);
     } else if (defined(evt.clientX)) {
-	x = parseInt(document.body.scrollLeft+evt.clientX);
-	y = parseInt(document.body.scrollTop+evt.clientY);
+        x = parseInt(document.body.scrollLeft+evt.clientX);
+        y = parseInt(document.body.scrollTop+evt.clientY);
     } else {
-	alert("evtPosition: don't know how to deal with "+evt);
+        alert("evtPosition: don't know how to deal with "+evt);
     }
     return new Position(x, y);
 }
@@ -499,32 +510,32 @@
 function registerEvent(type, elem, handler) {
     // register the given event handler on the indicated element
     if (elem.addEventListener) {
-	elem.addEventListener(type, handler, false);
+        elem.addEventListener(type, handler, false);
     } else {
-	if (type == "mousedown") {
-	    if (elem.captureEvents) {
-		elem.captureEvents(Event.MOUSEDOWN);
-	    }
-	    elem.onmousedown = handler;
-	} else if (type == "mouseup") {
-	    if (elem.captureEvents) {
-		elem.captureEvents(Event.MOUSEUP);
-	    }
-	    elem.onmouseup = handler;
-	} else if (type == "mousemove") {
-	    if (elem.captureEvents) {
-		elem.captureEvents(Event.MOUSEMOVE);
-	    }
-	    elem.onmousemove = handler;
-	} else if (type == "keypress") {
-	    if (elem.captureEvents) {
-		elem.captureEvents(Event.KEYPRESS);
-	    }
-	    elem.onkeypress = handler;
-	} else {
-	    alert("registerEvent: unknown event type "+type);
-	    return false;
-	}
+        if (type == "mousedown") {
+            if (elem.captureEvents) {
+                elem.captureEvents(Event.MOUSEDOWN);
+            }
+            elem.onmousedown = handler;
+        } else if (type == "mouseup") {
+            if (elem.captureEvents) {
+                elem.captureEvents(Event.MOUSEUP);
+            }
+            elem.onmouseup = handler;
+        } else if (type == "mousemove") {
+            if (elem.captureEvents) {
+                elem.captureEvents(Event.MOUSEMOVE);
+            }
+            elem.onmousemove = handler;
+        } else if (type == "keypress") {
+            if (elem.captureEvents) {
+                elem.captureEvents(Event.KEYPRESS);
+            }
+            elem.onkeypress = handler;
+        } else {
+            alert("registerEvent: unknown event type "+type);
+            return false;
+        }
     }
     return true;
 }
@@ -532,32 +543,32 @@
 function unregisterEvent(type, elem, handler) {
     // unregister the given event handler from the indicated element
     if (elem.removeEventListener) {
-	elem.removeEventListener(type, handler, false);
+        elem.removeEventListener(type, handler, false);
     } else {
-	if (type == "mousedown") {
-	    if (elem.releaseEvents) {
-		elem.releaseEvents(Event.MOUSEDOWN);
-	    }
-	    elem.onmousedown = null;
-	} else if (type == "mouseup") {
-	    if (elem.releaseEvents) {
-		elem.releaseEvents(Event.MOUSEUP);
-	    }
-	    elem.onmouseup = null;
-	} else if (type == "mousemove") {
-	    if (elem.releaseEvents) {
-		elem.releaseEvents(Event.MOUSEMOVE);
-	    }
-	    elem.onmousemove = null;
-	} else if (type == "keypress") {
-	    if (elem.releaseEvents) {
-		elem.releaseEvents(Event.KEYPRESS);
-	    }
-	    elem.onkeypress = null;
-	} else {
-	    alert("unregisterEvent: unknown event type "+type);
-	    return false;
-	}
+        if (type == "mousedown") {
+            if (elem.releaseEvents) {
+                elem.releaseEvents(Event.MOUSEDOWN);
+            }
+            elem.onmousedown = null;
+        } else if (type == "mouseup") {
+            if (elem.releaseEvents) {
+                elem.releaseEvents(Event.MOUSEUP);
+            }
+            elem.onmouseup = null;
+        } else if (type == "mousemove") {
+            if (elem.releaseEvents) {
+                elem.releaseEvents(Event.MOUSEMOVE);
+            }
+            elem.onmousemove = null;
+        } else if (type == "keypress") {
+            if (elem.releaseEvents) {
+                elem.releaseEvents(Event.KEYPRESS);
+            }
+            elem.onkeypress = null;
+        } else {
+            alert("unregisterEvent: unknown event type "+type);
+            return false;
+        }
     }
     return true;
 }
@@ -585,24 +596,24 @@
     // returns a Size with the current window size (mostly from www.quirksmode.org)
     var wsize = new Size(100, 100);
     if (defined(self.innerHeight))  {
-	// all except Explorer
-	if ((self.innerWidth == 0)||(self.innerHeight == 0)) {
-	    // Safari 1.2 bug
-	    if (parent) {
-		parent.innerHeight;
-		parent.innerWidth;
-	    }
-	}
-	wsize.width = self.innerWidth;
-	wsize.height = self.innerHeight;
+        // all except Explorer
+        if ((self.innerWidth == 0)||(self.innerHeight == 0)) {
+            // Safari 1.2 bug
+            if (parent) {
+                parent.innerHeight;
+                parent.innerWidth;
+            }
+        }
+        wsize.width = self.innerWidth;
+        wsize.height = self.innerHeight;
     } else if (document.documentElement && document.documentElement.clientHeight) {
-	// Explorer 6 Strict Mode
-	wsize.width = document.documentElement.clientWidth;
-	wsize.height = document.documentElement.clientHeight;
+        // Explorer 6 Strict Mode
+        wsize.width = document.documentElement.clientWidth;
+        wsize.height = document.documentElement.clientHeight;
     } else if (document.body) {
-	// other Explorers
-	wsize.width = document.body.clientWidth;
-	wsize.height = document.body.clientHeight;
+        // other Explorers
+        wsize.width = document.body.clientWidth;
+        wsize.height = document.body.clientHeight;
     }
     return wsize;
 }