function fixTime(elemId, timestamp, format)
	{
	if (format == null)
		format = 'g:i A, M j, Y';
	if (timestamp == 0)
		timestamp = elem.innerHTML;
	var days = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday');
	var shortDays = new Array('Sun', 'Mon', 'Tue', 'Wed', 'Thur', 'Fri', 'Sat');
	var months = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December');
	var shortMonths = new Array('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec');
	var formatElements = new Array('Y', 'F', 'M', 'n', 'D', 'l', 'd', 'j', 'g', 'G', 'i', 's', 'a', 'A', 'S', 'T', 'O');
	var ret = '';
	
	var elem = $(elemId);
	var newDate = new Date(timestamp*1000);
	
	for(var i=0;i<format.length;i++)
		{
		fe = format.substring(i, i+1);
		var formatStr = '';
		switch (fe)
			{
			case 'Y':		// 4 digit year
				formatStr = newDate.getFullYear();
				break;
			case 'F':		// Long month, e.g. 'January'
				formatStr = months[newDate.getMonth()];
				break;
			case 'M':		// Short month, e.g. 'Jan'
				formatStr = shortMonths[newDate.getMonth()];
				break;
			case 'n':		// Month number
				formatStr = newDate.getMonth()+1;
				break;
			case 'l':		// Long day name, e.g. 'Monday'
				formatStr = days[newDate.getDay()];
				break;
			case 'D':		// Short day name, e.g. 'Mon'
				formatStr = shortDays[newDate.getDay()];
				break;
			case 'd':		// Day number
				formatStr = newDate.getDate();
				if (formatStr < 10)
					formatStr = '0'+formatStr;
				break;
			case 'j':		// Day number
				formatStr = newDate.getDate();
				break;
			case 'g':		// Hour, 12 hour
				formatStr = newDate.getHours();
				if (formatStr == 0)
					formatStr = 12;
				else if (formatStr > 12)
					formatStr-= 12;
				break;
			case 'G':		// Hour, 24 hour
				formatStr = newDate.getHours();
				break;
			case 'i':		// Minutes
				formatStr = newDate.getMinutes();
				if (formatStr < 10)
					formatStr = '0'+formatStr;
				break;
			case 's':		// Seconds
				formatStr = newDate.getSeconds();
				if (formatStr < 10)
					formatStr = '0'+formatStr;
				break;
			case 'a':		// 'am' or 'pm'
				formatStr = 'am';
				if (newDate.getHours()>11)
					formatStr = 'pm';
				break;
			case 'A':		// 'AM' or 'PM'
				formatStr = 'AM';
				if (newDate.getHours()>11)
					formatStr = 'PM';
				break;
			case 'S':		// Ordinal suffix, e.g. 'st' or 'nd'
				formatStr = daySuffix(newDate.getDate());
				break;
			case 'T':		// Timezone code, e.g. 'EDT'
				if (readCookie('thespringbox_tz') != null && readCookie('thespringbox_tz_offset') == newDate.getTimezoneOffset()*-60)
					formatStr = readCookie('thespringbox_tz');
				break;
			case 'O':		// Difference to GMT, e.g. -0400
				formatStr = formatOffset(newDate.getTimezoneOffset());
				break;
			default:
				formatStr = fe;
				break
			}
		ret += formatStr;
		}
	elem.innerHTML = ret;
	}
function daySuffix(day)
	{
	switch (day)
		{
		case 1:
		case 21:
		case 31:
			ret = 'st';
			break;
		case 2:
		case 22:
			ret = 'nd';
			break;
		case 3:
		case 23:
			ret = 'rd';
			break
		default:
			ret = 'th';
			break
		}
	return ret;
	}
function formatOffset(offset)
	{
	var hours = Math.abs(Math.floor(offset/60));
	if (hours < 10)
		hours = '0'+hours;
	var minutes = Math.abs(offset%60);
	if (minutes < 10)
		minutes = '0'+minutes;
	var sign = '-';
	if (offset<0)
		sign = '+';
	var ret = sign+''+hours+''+minutes;
	return ret;
	}