| // Shared routines |
| |
| function openPopup(url,windowName,features) { |
| window.open(url,windowName,features); |
| } |
| |
| function preloadImage(Url) { |
| var i = new Image(); |
| i.src = Url; |
| } |
| |
| function showOrHideElement(element,show) { |
| element.style.display = show ? "block" : "none"; |
| } |
| |
| /* unused |
| function getFirstAncestorOfClass (sourceElement, className) { |
| // recursively search for ancestor of sourceElement that matches className |
| var elementBeingTested = sourceElement.parentNode; |
| if (elementBeingTested.className == className) return elementBeingTested; |
| if (!elementBeingTested.className) return null; // if run out of elements (like at document) stop |
| return getFirstAncestorOfClass(elementBeingTested, className); |
| } |
| */ |
| |
| function getFirstDescendentOrSelfOfClass (sourceElement, className) { |
| // recursively search for descendent of sourceElement that matches className |
| // test self |
| if (sourceElement.className == className) return sourceElement; |
| // test children |
| var child = sourceElement.firstChild; |
| if (child) { |
| while (child) { |
| var elementBeingTested = getFirstDescendentOrSelfOfClass (child, className); |
| if (elementBeingTested) return elementBeingTested; |
| child = child.nextSibling; |
| } |
| } |
| return null; |
| } |
| |
| function getElement(frameObject,elementId) { |
| if (document.getElementById) return frameObject.document.getElementById(elementId); |
| if (document.all) return frameObject.document.all[elementId]; |
| if (document.layers) return frameObject.document.layers[elementId]; |
| return null; |
| } |
| |
| function getElementsStyleObject(frameObject,elementId) { |
| if (document.getElementById) return frameObject.document.getElementById(elementId).style; |
| if (document.all) return frameObject.document.all[elementId].style; |
| if (document.layers) return frameObject.document.layers[elementId]; |
| return null; |
| } |
| |
| function getWindowHeight(frameObject) { |
| if (document.all) return frameObject.document.body.clientHeight; // IE on Mac and Windows |
| if (document.layers) return frameObject.document.clientHeight; |
| } |
| |
| function getWindowWidth(frameObject) { |
| if (document.all) return frameObject.document.body.clientWidth; // IE on Mac and Windows |
| if (document.layers) return frameObject.document.clientWidth; |
| } |
| |
| function trace (anObject) { |
| alert(listObject(anObject)); |
| } |
| |
| function listObject(theObject) { |
| var m = ''; |
| for (prop in theObject) { |
| m+= prop + ":" + theObject[prop] + "\n"; |
| //* if theObject[prop] == |
| } |
| return(m); |
| } |
| |
| function wasLeftButton(e) { |
| // takes event object (e) and decides if left button was pressed (as opposed to middle wheel button) |
| var buttonPressed = /* (navigator.appName=="Netscape") ? e.which : */ e.button; |
| if (buttonPressed == 1 | buttonPressed == 0 ) return true; |
| return false; |
| } |
| |
| function appendToCookieString ( cookieString, property, value ) { |
| if (cookieString!="") cookieString += "&"; |
| cookieString += property + ":" + escape(value); |
| } |
| |
| function getValueFromCookieString ( cookieString, property) { |
| // extract value of given property from encoding like this: "property1:value1&property2:value2" |
| var pos = cookieString.indexOf(property); // at start of property label |
| if (pos==-1) return null; |
| pos += property.length + 1; // at start of value |
| var start = pos; |
| pos = cookieString.indexOf("&",pos+1); |
| // if "&" not found, must be last property:value pair -- end of value is end of cookieString |
| // else end of value is just before "&" |
| var end = (pos==-1) ? cookieString.length : pos; |
| var value = cookieString.substring(start,end); |
| return unescape(value); |
| } |
| |
| |
| // SystemInfo Class |
| // class to handle system check (browser, etc.) |
| // Thanks to http://www.xs4all.nl/~ppk/js/detect.html for this code |
| // TODO: Rewrite? |
| /* |
| function SystemInfo() { |
| this.detect = navigator.userAgent.toLowerCase(); |
| this.OS = null; |
| this.browser = null; |
| this.version = null; |
| //this.subVersion = null; |
| this.total = null; |
| this.thestring = null; |
| this.place = null; |
| |
| if (this.checkIt('konqueror')) { |
| this.browser = "Konqueror"; |
| this.OS = "Linux"; |
| } |
| else if (this.checkIt('safari')) { |
| this.browser = "Safari" |
| //this.subVersion = this.detect.substring(8,12); |
| } |
| else if (this.checkIt('omniweb')) this.browser = "OmniWeb" |
| else if (this.checkIt('opera')) this.browser = "Opera" |
| else if (this.checkIt('webtv')) this.browser = "WebTV"; |
| else if (this.checkIt('icab')) this.browser = "iCab" |
| else if (this.checkIt('msie')) this.browser = "Internet Explorer" |
| else if (!this.checkIt('compatible')) { |
| this.browser = "Netscape Navigator" |
| this.version = this.detect.charAt(8); |
| } |
| else this.browser = "An unknown browser"; |
| |
| if (!this.version) this.version = this.detect.charAt(this.place + this.thestring.length); |
| |
| if (!this.OS) { |
| if (this.checkIt('linux')) this.OS = "Linux"; |
| else if (this.checkIt('x11')) this.OS = "Unix"; |
| else if (this.checkIt('mac')) this.OS = "Mac" |
| else if (this.checkIt('win')) this.OS = "Windows" |
| else this.OS = "an unknown operating system"; |
| } |
| } |
| |
| SystemInfo.prototype.checkIt = function(string) { |
| this.place = this.detect.indexOf(string) + 1; |
| this.thestring = string; |
| return this.place; // HACK: Weird |
| } |
| |
| */ |
| |
| // Saving state using cookies |
| |
| /* |
| expires |
| domain |
| |
| document.cookie = "version=" + escape(document.lastModified) + "; expires=" + |
| // cookie values may not include semicolons, commas, or whitespace |
| |
| |
| */ |