// 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


*/

