/* === TEST JAVASCRIPT SUPPORT === */
var DOM = !!(document.getElementById && document.getElementsByTagName); /* Basic W3C DOM Support */
var advDOM = !!(DOM && document.createElement); /* More Advanced W3C DOM Support */

/* === SETTINGS AND GLOBAL VARIABLES === */
var re = {			// commonly used regex
		index		:	new RegExp("(/|((default|index)\\.(htm|html|cfm|php)))$"),
		email		:	new RegExp("^(mailto:)?\\w+([+\\.-]?\\w+)*@\\w+([\\.-]?\\w+)*(\\.\\w{2,})+$"),  	// bob@gmail.com or mailto:bob@gmail.com
		pccemail	:	new RegExp("^(mailto:)?\\w+([\\.-]?\\w+)*@pcc\\.edu$")  								// webteam@pcc.edu or mailto:webteam@pcc.edu
};

/* === INITIALIZE === */
addEvent(window, "load", init);
function init() {
	var i, j, o, c;
	linkSetup(); // setup links (to self, popup, etc.)
}

/* === EVENT HANDLING (via http://www.scottandrew.com/weblog/articles/cbs-events) === */
function addEvent(elm, evType, fn, useCapture) {
	if (elm.addEventListener) {
		elm.addEventListener(evType, fn, useCapture);
		return true;
	} else if (elm.attachEvent) {
		var r = elm.attachEvent("on"+evType, fn);
		return r;
	} else {
		return false;
	}
}
function removeEvent(elm, evType, fn, useCapture) {
	if (elm.removeEventListener) {
		elm.removeEventListener(evType, fn, useCapture);
		return true;
	} else if (elm.detachEvent) {
		var r = elm.detachEvent("on"+evType, fn);
		return r;
	} else {
		return false;
	}
}

/* === CLASSNAME FUNCTIONS === */
String.prototype.hasClass = function(cls) {
	return new RegExp('(^| )'+cls+'( |$)').test(this);
};
String.prototype.addClass = function(cls) {
	if (this == '') return cls;
	if (this.hasClass(cls)) return this;
	return this+" "+cls;
};
String.prototype.removeClass = function(cls) {
	return this.replace(new RegExp('(^| )'+cls+'( |$)'), '');
};
function getElementsByClassName(node, cls, tag) {
	if (!DOM) return [];
	var i, elem, elems = node.getElementsByTagName( (tag != null ? tag : '*') ), results = [];
	for (i=0; elem = elems[i]; i++) if (elem.className.hasClass(cls)) results.push(elem);
	return results;
}


/* === URL/PATH/HISTORY INFORMATION/MANIPULATION === */
function getDirs(path) { // returns an array of directory hierarchy
	var folders = path.split('/');
	if (folders[0] == "") folders.shift(); // remove empty first element
	if (re.index.test(folders[folders.length-1])) folders[folders.length-1] = '';
	return folders;
}
function getReferringPage() {
	if (document.referrer) return document.referrer;
	else if (window.opener) return window.opener.location;
	else return '';
}
function getURLVars() {
	var url = document.URL; //used document.URL instead of location because URL is returned as a string, location as an object
	if (!url || url.indexOf('?') < 0) return {};
	var pairs, i, v, vars = {};
	pairs = url.replace(/&(amp;)?/, '&amp;').substring(url.lastIndexOf('?')+1).split('&amp;'); //account for & and &amp; delimeters
	for (i=0; i<pairs.length; i++) {
		v = pairs[i].split('=');
		vars[v[0]] = unescape(v[1]);
	}
	return vars;
}

/* === LINKS SETUP === */
function linkSetup() {
	if (!DOM) return;
	var lnks = document.getElementsByTagName('a');
	var i, a, email, subj;

	for (i=0; a=lnks[i]; i++) {
		// add class name of 'current' to links to self (account for index files)
		if (a.href != "" && unescape(String(a.href)).replace(re.index, '') == unescape(String(location.href)).replace(re.index, '')) {
			a.className = a.className.addClass('current');
		}
	}
}