//



// globals to identify the current browser.
var BrowserIsIE = (navigator.appName.indexOf("Microsoft") != -1);
var BrowserIsNN4x = (navigator.appName == "Netscape" && parseInt(navigator.appVersion)==4);
var BrowserIsNN6x = (navigator.appName == "Netscape" && parseInt(navigator.appVersion)>=5);	// also describes Mozilla.
var BrowserIsSafari = navigator.userAgent.indexOf("Safari") != -1;
// global to identify Mac OS.
var ComputerIsAMac = navigator.platform.indexOf("Mac") != -1;


// this gives access to page elements appropriate to each browser environment.
// these references are used to change content & appearance dynamically w/o reloading the page.
function getObjectRef(aDocumentObject){
	var objRef;
	
	if (BrowserIsIE && ComputerIsAMac){
		objRef = document[aDocumentObject];
	} else if (BrowserIsNN4x) {	// note: in NN4x we can only change layers dynamically.
		objRef = eval("document." + aDocumentObject);
		//objRef = document.layers[aDocumentObject+ "-layer"];
	} else {
		objRef = document.getElementById(aDocumentObject);
	}
	return objRef;
}

function showDivCentered(divObj, divTop){
	parentWinWidth = (BrowserIsIE) ? document.body.clientWidth : window.innerWidth;
	parentWinHeight = (BrowserIsIE) ? document.body.clientHeight : window.innerHeight;
	// provide default if w & h not passed in.
	divObj.style.display = "block";
	var r = getObjectRect(divObj);
	var divWidth=r.right-r.left;
	var divHeight=r.bottom-r.top;
	// set div position.
	with (divObj.style){		
		var divLeft = Math.floor((parentWinWidth/2) - (divWidth/2)) 
		divLeft += (BrowserIsIE) ? document.body.scrollLeft : window.scrollX;
		
		if (divTop==undefined){
			divTop = Math.floor((parentWinHeight/2) - (divHeight/2));
			divTop += (BrowserIsIE) ?document.body.scrollTop : window.scrollY;
		} 
		
		visibility = "visible";
		display = "block";
		left = divLeft;
		top = divTop;
	}
}


// returns contents of a link.
function getLinkText(linkObj){
	if (BrowserIsNN4x){
		return linkObj.text;
	} else {
		return linkObj.innerHTML;
	}
}
//
function setLinkText(linkObj, newText){
	if (BrowserIsNN4x){
		linkObj.text = newText;
	} else {
		linkObj.innerHTML = newText;
	}
}

/* String utilities */
// returns the characters in str leading up to the delimiter.
function getLeft(str, delim){
	var delimPos = str.indexOf(delim);
	if (delimPos == -1) return str;
	var leftStr = str.substring(0, delimPos);
	return leftStr;
}
// returns the characters in str following the delimiter.
function getRight(str, delim){
	var delimPos = str.indexOf(delim);
	if (delimPos == -1) return str;
	var rightStr = str.substring(delimPos+1);
	return rightStr;
}

function getRightMost(str, delim){
	var rt = getRight(str, delim);
	if (rt == str){
		return rt;
	}
	return getRightMost(rt, delim);
}
/* Document Element utilities */
// returns the current screen location of any page element.
function getScreenLoc(element, offset){
	if (offset == undefined){
		offset = new Array(2);
		offset[0] = 0;
		offset[1] = 0;
	}
	offset[0] += element.offsetLeft;
	offset[1] += element.offsetTop;
	if (element == document.body){
		return offset;
	}
	return getScreenLoc(element.offsetParent, offset);
}

//
function getObjectRect(obj){
	var objRect;
	if (BrowserIsIE){
		objRect = obj.getBoundingClientRect();
		objRect.top += document.body.scrollTop;
		objRect.bottom += document.body.scrollTop;
		objRect.left += document.body.scrollLeft;
		objRect.right += document.body.scrollLeft;
	} else {
		objRect = new Object();
		var objTopLeft = getScreenLoc(obj);		
		objRect.left = objTopLeft[0];
		objRect.top = objTopLeft[1];
		objRect.right = objTopLeft[0]+obj.scrollWidth;
		objRect.bottom = objTopLeft[1]+obj.scrollHeight;
	}	
	return objRect;
}

//
function getMouseLoc(evt){
	var mLoc = new Array(2);
	if (BrowserIsIE){
		mLoc[0] = (window.event.clientX + document.body.scrollLeft);
		mLoc[1] = (window.event.clientY + document.body.scrollTop);
	} else if (BrowserIsSafari){
		mLoc[0] = (evt.clientX);
		mLoc[1] = (evt.clientY);
	} else {
		mLoc[0] = (evt.clientX + document.body.scrollLeft);
		mLoc[1] = (evt.clientY + document.body.scrollTop);
	}
	return mLoc;
}

// returns the closest container whose id starts with <prefix>, before the specified <delim> character 
// (eg; returns "book_1" if the <startElement> is contained in the document element "book_1", the prefix is "book", and the delim is "_").
function getContainerByPrefix(startElement, prefix, delim){
	if (getLeft(startElement.id, delim) == prefix) return startElement;
	if (startElement.offsetParent!=undefined){
		return getContainerByPrefix(startElement.offsetParent, prefix, delim);
	} else if (startElement.parentElement!=undefined){
		return getContainerByPrefix(startElement.parentElement, prefix, delim);
	} else {
		return;	// failed to find a matching element, having gone all the way up to the BODY element.
	}
}

function unpack(obj){
	var report = new Array();
	for (var m in obj){
		report.push(m +":"+ obj[m]);
	}
	return report.join();
}


// find the first directory element in partialURL and build a new absolute URL from it,
// starting from the absolute URL of the current page.
function getAbsoluteURL(partialURL){
    var currURL = window.location.href;
    var currURL_array = currURL.split("/");
    var partialURL_array = partialURL.split("/");
    var rootDir = partialURL_array[0];
    var newAbsURL_array = new Array();
    var newAbsURL = "";
    for (var i=1; i<currURL_array.length; i++){
        if (currURL_array[i]==rootDir){
            newAbsURL_array = currURL_array.slice(0, i);
            break;
        }
    }
    newAbsURL_array = newAbsURL_array.concat(partialURL_array);
    newAbsURL = newAbsURL_array.join("/");
	return newAbsURL;
}

function nav(partialURL){
	absURL = getAbsoluteURL(partialURL);
    window.location.href = absURL;
}