var gsSeparator = '|';

function loadHandler() {
	readyExtra();
	if (!document.all && document.getElementById('main'))
		document.getElementById('main').style.height = '100%';
}
window.onload = loadHandler;

function addEvent(obj, evtType, fxn) {
	if (obj.addEventListener) {
		obj.addEventListener(evtType, fxn, false);
		return true;
	}
	else if (obj.attachEvent) {
		var ret = obj.attachEvent('on' + evtType, fxn);
		return ret;
	}
	else
		return false;
}
function schedule(obj, fxn) {
	var lsSplit = new Array();
	var lbRun = true;
	
	if (obj.indexOf(gsSeparator) > -1)
		lsSplit = obj.split(gsSeparator);
	else
		lsSplit[0] = obj;
	
	for (var x = 0;x < lsSplit.length;x++) {
		if (!document.getElementById(lsSplit[x])) {
			lbRun = false;
			break;
		}
	}
	
	if (lbRun)
		eval(fxn);
	else 
		setTimeout("schedule('" + obj + "', '" + fxn + "')", 1);
	return true;
}
function hideCalendar(titleId, evtId, className) {
	var title = document.getElementById(titleId);
	var evt = document.getElementById(evtId);
	
	var expand = getCookie('expandCal');
	if (!expand || expand == '')
		expand = 'no';
		
	if (className != 'none') {
		schedule(evtId + gsSeparator + titleId, "addShowContents('" + titleId + "', '" + evtId + "');");
		title.style.cursor = 'pointer';
		evt.slideType = 'cal';
		evt.status = 'up';
		evt.origHeight = evt.offsetHeight;
		evt.style.position = 'absolute';
		if (expand == 'no')
			evt.style.display = 'none';
		else {
			evt.status = 'down';
			if (document.getElementById('chkExpCal'))
				document.getElementById('chkExpCal').checked = true;
		}
	}
	else
		evt.style.display = 'none';
}
function hideMeta(metaId, moreId) {
	var meta = document.getElementById(metaId);
	var more = document.getElementById(moreId);
	var expand = getCookie('expandMeta');
	if (!expand || expand == '')
		expand = 'no';
		
	schedule(moreId + gsSeparator + metaId, "addShowContents('" + moreId + "', '" + metaId + "');");
	more.style.cursor = 'pointer';
	meta.slideType = 'meta';
	meta.status = 'up';
	meta.origHeight = meta.offsetHeight;
	if (expand == 'no')
		meta.style.display = 'none';
	else {
		meta.status = 'down';
		if (document.getElementById('chkExpMeta'))
			document.getElementById('chkExpMeta').checked = true;
	}
}
function readyExtra() {
	if (document.getElementById('help'))
		addShowExtra(document.getElementById('helplink'));
	if (document.getElementById('prefs'))
		addShowExtra(document.getElementById('prefslink'));
}
function addShowContents(titleId, evtId) {
	addEvent(document.getElementById(titleId), 'click', function(e){showContents(document.getElementById(evtId))});
}
function addShowExtra(titleObj) {
	addEvent(titleObj, 'click', function(e){showExtra(e, titleObj.id)});
}
function showExtra(e, extraId) {
	var x, y;
	if (document.all) {
		x = window.event.clientX + document.documentElement.scrollLeft;
		y = window.event.clientY + document.documentElement.scrollTop;
	}
	else {
		x = e.pageX;
		y = e.pageY;
	}
	
	var helpBox = document.getElementById(extraId.substring(0, extraId.length - 4));
	if (helpBox.style.display != 'block') {
		helpBox.style.top = y + 'px';
		helpBox.style.left = x + 'px';
		helpBox.style.position = 'absolute';
		helpBox.style.display = 'block';
	}
}
function closeExtra(extId) {
	document.getElementById(extId).style.display = 'none';
}
function setPrefs() {
	var expireDate = new Date();
	expireDate.setDate(expireDate.getDate() + 100);
	
	if (document.getElementById('chkExpMeta').checked)
		setCookie('expandMeta', 'yes', expireDate);
	else
		setCookie('expandMeta', 'no', expireDate);
	if (document.getElementById('chkExpCal').checked)
		setCookie('expandCal', 'yes', expireDate);
	else
		setCookie('expandCal', 'no', expireDate);
		
	alert('Your preferences have been set!');
	document.location.reload();
}
function setCookie(name, value, expires, path, domain, secure) {
	var currCookie = name + "=" + escape(value) +
		((expires) ? "; expires=" + expires.toGMTString() : "") +
      		((path) ? "; path=" + path : "") +
      		((domain) ? "; domain=" + domain : "") +
      		((secure) ? "; secure" : "");
  	document.cookie = currCookie;
}
function getCookie(name) {
	var dc = document.cookie;
  	var prefix = name + "=";
  	var begin = dc.indexOf("; " + prefix);
  	if (begin == -1) {
  		begin = dc.indexOf(prefix);
    		if (begin != 0) 
    			return null;
  	} 
  	else
   		begin += 2;
  	var end = document.cookie.indexOf(";", begin);
  	if (end == -1)
   		end = dc.length;
  	return unescape(dc.substring(begin + prefix.length, end));
}
function showContents(evtObj) {
	if (evtObj.status == 'up')
		evtObj.style.display = 'block';
	startSlide(evtObj);
}
function startSlide(evtObj) {
	var ll_frames = 20, ll_frame_num = 0;
	var ll_start, ll_end, ll_dist;
	
	if (evtObj.status == 'up') {
		ll_start = 0;
		ll_end = evtObj.origHeight;
		evtObj.status = 'going_down';
	}
	else {
		ll_start = evtObj.origHeight;
		ll_end = 0;
		evtObj.status = 'going_up';
	}
	
	if (evtObj.slideType == 'meta')
		ll_frames = Math.ceil(evtObj.origHeight/18);
	
	ll_dist = (ll_end - ll_start)/(ll_frames - 1);
	
	//Hide all the children objects
	toggleContentDisplay(evtObj, false);
	
	performSlide(evtObj, ll_start, ll_dist, ll_frames, ll_frame_num);
}
function performSlide(evtObj, al_start, al_dist, al_frames, al_frame_num) {
	if (al_frame_num < al_frames) {
		evtObj.style.height = (al_start + al_dist * al_frame_num) + 'px';
		al_frame_num++;
		return setTimeout(function(){performSlide(evtObj, al_start, al_dist, al_frames, al_frame_num)}, 10);
	}
	else {
		if (evtObj.status == 'going_up') {
			evtObj.status = 'up';
			evtObj.style.display = 'none';
			evtObj.style.height = '';
		}
		else {
			evtObj.status = 'down';
			toggleContentDisplay(evtObj, true);
		}
		if (!document.all) {
			document.getElementById('main').style.height = '1%';
			document.getElementById('main').style.height = '100%';
		}
	}
}
function toggleContentDisplay(evtObj, ab_show) {
	var ls_display = 'block';
	
	if (ab_show == false)
		ls_display = 'none';
		
	for (var x = 0;x < evtObj.childNodes.length;x++) {
		if (evtObj.childNodes[x].nodeName.substring(0, 1) != '#')
			evtObj.childNodes[x].style.display = ls_display;
	}
}
