//	calendar.js
//	Original Code by T.K.Egan - 14 Mar 2006
//		4 Jan 2007 fixed flaw in isXxxMonthValid() calculating multi year bounds
//	License: none
//		Use as you will but I'd appreciate an
//		email at tkegan@greenneondesign.com if 
//		you find a way to improve the code

var willDisplayMonth = -1;
var willDisplayYear = 0;
var amDisplayingYear = 0;
var amDisplayingMonth = -1;

months = new Array("", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");

function displayCalendar() {
	if(request.readyState == 4) {
		if(request.status == 200) {
			amDisplayingYear = willDisplayYear;
			amDisplayingMonth = willDisplayMonth;
			document.getElementById("calendar").innerHTML = request.responseText;
			document.getElementById("calTitle").innerHTML = months[willDisplayMonth] + " " + willDisplayYear;
			if(isNextMonthValid(amDisplayingMonth, amDisplayingYear)) {
				document.getElementById("nextArrow").style.display="inline";
			} else {
				document.getElementById("nextArrow").style.display="none";
			}
			if(isPreviousMonthValid(amDisplayingMonth, amDisplayingYear)) {
				document.getElementById("previousArrow").style.display="inline";
			} else {
				document.getElementById("previousArrow").style.display="none";
			}
			if(navigator.cookieEnabled) {
				var exp = new Date();
				exp.setTime(exp.getTime() + 24*60*60*1000);
				document.cookie= cookieName + "=" + amDisplayingMonth + "-" + amDisplayingYear + "; expires=" + exp.toGMTString();
			}
		} else {
			alert("Request for calendar failed. Server returned the cryptic error: " + request.status);
		}
	} else if(request.readyState == 3 && request.status == 304) {
		document.getElementById("calendar").innerHTML = "<h4>Sorry, a Web Cache Error (HTTP304) occured. Please try reloading this page.</h4>"
	}
}

function loadCalendar(year, month) {
	if(year >= maxYear && month > maxMonth) {
		year = maxYear;
		month = maxMonth;
	}
	if(year <= minYear && month < minMonth) {
		year = minYear;
		month = minMonth;
	}
	willDisplayMonth = month;
	willDisplayYear = year;
	var url = calendarsPath + year + "-" + months[month] + ".html";
	request.open("GET", url);
	request.onreadystatechange = displayCalendar;
	request.send(null);
}

function loadNextMonth() {
	var year = amDisplayingYear;
	var month = amDisplayingMonth + 1;
	if(month == 13) {
		month = 1;
		year++;
	}
	loadCalendar(year, month);
}

function loadPreviousMonth() {
	var year = amDisplayingYear;
	var month = amDisplayingMonth - 1;
	if(month == 0) {
		month = 12;
		year--;
	}
	loadCalendar(year, month);
}

function loadCurrentMonth() {
	var today = new Date();
	year = (today.getYear() < 1000) ? today.getYear() + 1900 : today.getYear();
	month = today.getMonth() + 1;
	loadCalendar(year, month);
}

function isNextMonthValid(month, year) {
	month += 1;
	if(month == 13) {
		month = 1;
		year++;
	}
	if(year < maxYear) return true;
	if(year == maxYear && month <= maxMonth) return true;
	return false;
}

function isPreviousMonthValid(month, year) {
	month -= 1;
	if(month == 0) {
		month = 12;
		year--;
	}
	if(year > minYear) return true;
	if(year == minYear && month >= minMonth) return true;
	return false;
}

function init() {
	if(navigator.cookieEnabled && document.cookie.length > 0) {
		var viewing = [-1, 0];
		var ca = document.cookie.split(';');
		for(var i=0; i < ca.length; i++) {	//find our cookie
			var c = ca[i];
			while(c.charAt(0)==' ')
				c = c.substring(1,c.length);

			if(c.indexOf(cookieName) == 0) {
			 	viewing = c.substring(cookieName.length+1,c.length).split('-');
				break;
			}
		}
		var month = parseInt(viewing[0]);
		var year = parseInt(viewing[1]);
		if(0 < month && month <= 12 && year >= minYear && year <= maxYear && (year != minYear || month >= minMonth) && (year != maxYear || month <= maxMonth)) {
			loadCalendar(year, month);
		} else {
			loadCurrentMonth();
		}
	} else {
		loadCurrentMonth();
	}
}

// Check if the browser supports necessary DOM level
if(document.getElementById)
{	// if supported then configure event handlers
	addLoadEvent(init);
}