addEvent(window, 'load', function() {
	updateDate(60 - new Date().getSeconds());

	// process e-mails

	var spans = document.body.getElementsByTagName('span');
	for (var i = 0; i < spans.length; i++) {
		// grab all spans whose classname begins with "email:"
		var span = spans[i];
		var username = span.className.match(/^email:(.+)/);

		if (username) {
			username = username[1];
			var innerText = span.firstChild.nodeValue;

			// construct an e-mail link
			var newLink = '<a href="mailto:' + username + '@&#119;&#101;&#115;leyan.edu">' + innerText + '</a>';

			// display it on the page
			span.innerHTML = newLink;
		}
	}
});

function updateDate(interval) {
	if (!$('date'))
		return;

	var BUSINESS_DAYS = 5;
	var days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];

	// a little bit of maneuvering to convert the client time to est
	var localNow = new Date();
	var localTime = localNow.getTime();
	var localOffset = localNow.getTimezoneOffset() * 60000; // convert minutes to milliseconds
	var utcTime = localTime + localOffset;
	var estOffset = -5;
	var estNow = estFinal = utcTime + (3600000 * estOffset); // convert hours to milliseconds

	for (var i = 0; i <= BUSINESS_DAYS; i++) {
		estFinal = estFinal + 60 * 60 * 24 * 1000; // add a day
		var weekday = new Date(estFinal).getDay();
		if (weekday == 0 || weekday == 6) {
			estFinal = estFinal + 60 * 60 * 24 * 1000; // add a day
			continue;
		}
    }

	estFinal = new Date(estFinal);

	var day = days[estFinal.getDay()];
	var date = estFinal.getDate();
	var month = estFinal.getMonth() + 1;
	var year = estFinal.getYear().toString().match(/[0-9][0-9]$/);

	$('date').innerHTML = '<strong>' + day + ', ' + month + '/' + date + '/' + year +
		'</strong> is the earliest you can schedule an event';

	var remaining = new Date(estNow);
	remaining.setDate(remaining.getDate() + 1);
	remaining.setHours(0);
	remaining.setMinutes(0);
	remaining.setSeconds(0);
	remaining = (new Date(remaining) - new Date(estNow)) / 1000;
	remainingMinutes = Math.floor(remaining / 60);
	remainingHours = Math.floor(remainingMinutes / 60);

	$('date').innerHTML += ' in the next ' + remainingHours + ' hours and ' +
		(remainingMinutes - remainingHours * 60) + ' minutes.';

	// update the time in one minute; use a closure to save the 'interval' variable
	var closure = function() {
		var interval = interval;
		setTimeout(function() { updateDate(60000); }, interval * 1000);
	}();
}

// get mouse position relative to document
function mousePos(e) {
	var x = 0;
	var y = 0;

	if (!e)
		e = window.event;

	if (e.pageX || e.pageY) {
		x = e.pageX;
		y = e.pageY;
	} else if (e.clientX || e.clientY) {
		x = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
		y = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;
	}

	return [x, y];
}

// get object position relative to document
function findPos(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		do {
			curleft += obj.offsetLeft;
			curtop += obj.offsetTop;
		} while (obj = obj.offsetParent);
	}
	return [curleft,curtop];
}

// get style information for a given object
function getStyle(elem, prop){
	var strValue = "";
	if (document.defaultView && document.defaultView.getComputedStyle) {
		strValue = document.defaultView.getComputedStyle(elem, '').getPropertyValue(prop);
	} else if (elem.currentStyle) {
		prop = prop.replace(/\-(\w)/g, function (strMatch, p1){
			return p1.toUpperCase();
		});
		strValue = elem.currentStyle[prop];
	}
	return strValue;
}

// a shorthand for retrieving an element
function $(id) {
	return document.getElementById(id);
}

/*
	This addEvent function was design by Dean Edwards, 2005
	with input from Tino Zijdel, Matthias Miller, Diego Perini

	It has been packed to save space. Find the full version here:
	http://dean.edwards.name/weblog/2005/10/add-event/
*/
function addEvent(a,b,c){if(a.addEventListener){a.addEventListener(b,c,false)}else{if(!c.$guid)c.$guid=addEvent.guid++;if(!a.events)a.events={};var d=a.events[b];if(!d){d=a.events[b]={};if(a["on"+b]){d[0]=a["on"+b]}}d[c.$guid]=c;a["on"+b]=handleEvent}};addEvent.guid=1;function removeEvent(a,b,c){if(a.removeEventListener){a.removeEventListener(b,c,false)}else{if(a.events&&a.events[b]){delete a.events[b][c.$guid]}}};function handleEvent(a){var b=true;a=a||fixEvent(((this.ownerDocument||this.document||this).parentWindow||window).event);var c=this.events[a.type];for(var i in c){this.$handleEvent=c[i];if(this.$handleEvent(a)===false){b=false}}return b};function fixEvent(a){a.preventDefault=fixEvent.preventDefault;a.stopPropagation=fixEvent.stopPropagation;return a};fixEvent.preventDefault=function(){this.returnValue=false};fixEvent.stopPropagation=function(){this.cancelBubble=true};