/*Javascript Calendar written by Anup Kotadia*/

var DAYS = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday',
		'Friday', 'Saturday');

var MONTHS = new Array('January', 'February', 'March', 'April', 'May', 'June',
		'July', 'August', 'September', 'October', 'November', 'December');

var CELL_IDS = new Array('cell00', 'cell01', 'cell02', 'cell03', 'cell04', 'cell05', 'cell06',
		'cell07', 'cell08', 'cell09', 'cell10', 'cell11', 'cell12', 'cell13',
		'cell14', 'cell15', 'cell16', 'cell17', 'cell18', 'cell19', 'cell20',
		'cell21', 'cell22', 'cell23', 'cell24', 'cell25', 'cell26', 'cell27',
		'cell28', 'cell29', 'cell30', 'cell31', 'cell32', 'cell33', 'cell34',
		'cell35', 'cell36', 'cell37', 'cell38', 'cell39', 'cell40', 'cell41');

var dates = new Array(42);

var currentMonth = 0;
var currentYear = 0;
var eventMap = new Object();

CalendarEvent.prototype.date = new Date();
CalendarEvent.prototype.time = '';
CalendarEvent.prototype.location = '';
CalendarEvent.prototype.title = '';
CalendarEvent.prototype.details = '';

function CalendarEvent(nDate, nTitle, nTime, nLocation, nDetails)
{
	this.date = new Date(nDate);
	this.time = new String(nTime);
	this.location = new String(nLocation);
	this.title = new String(nTitle);
	this.details = new String(nDetails);
}

function initCalendar()
{
	if (!isCompatible())
	{
		alert("This page does not render correctly on Microsoft Internet Explorer 6 or below. Please upgrade to Internet Explorer 7 or a different browser.");
	}

	var xmlDoc = loadXML('calendar.xml');
	loadEventData(xmlDoc);
	var today = new Date();
	currentMonth = today.getMonth();
	currentYear = today.getFullYear();
	loadCalendar(currentMonth, currentYear);

}

function loadNextMonth()
{
	currentMonth++;
	if (currentMonth > 11)
	{
		currentMonth -= 12;
		currentYear++;
	}
	loadCalendar(currentMonth, currentYear);
}

function loadPreviousMonth()
{
	currentMonth--;
	if (currentMonth < 0)
	{
		currentMonth += 12;
		currentYear--;
	}
	loadCalendar(currentMonth, currentYear);
}

function loadCalendar(month, year)
{
	var startDate = new Date(year, month, 1);
	var title = document.getElementById('calendarTitle');
	removeAllChildren(title);
	var newTitle = MONTHS[month] + ' ' + year;
	addTextToElement(title, newTitle);

	startDate.setDate(startDate.getDate() - startDate.getDay());

	for(var i = 0; i < CELL_IDS.length; i++)
	{
		dates[i] = new Date(startDate);

		var cell = document.getElementById(CELL_IDS[i]);
		removeAllChildren(cell);

		//this block puts the date number in the calendar cell
		var dateP = document.createElement('span');
		dateP.setAttribute('class', 'bold');
		var dateText = '' + startDate.getDate();
		addTextToElement(dateP, dateText);
		cell.appendChild(dateP);

		var eventArray = eventMap[startDate.toLocaleString()];
		if (eventArray != null && eventArray.length > 0)
		{
			for (var j = 0; j < eventArray.length; j++)
			{
				cell.appendChild(document.createElement('br'));
				cell.appendChild(document.createElement('br'));
				addTextToElement(cell, eventArray[j].title);
			};
		}

		startDate.setDate(startDate.getDate() + 1);
	}

	var daysPastMonth = startDate.getDate();
	if (daysPastMonth > 7)
	{
		document.getElementById('week6').style.display='none';
	}
	else
	{
		document.getElementById('week6').style.display='';
	}
	if (daysPastMonth > 14)
	{
		document.getElementById('week5').style.display='none';
	}
	else
	{
		document.getElementById('week5').style.display='';
	}
}

function showDetails(cell)
{
	//cleans up previous popup
	hideDetails();
	var popup = document.getElementById('calendarPopup');

	var currentDate = dates[cell];

	//this block of code adds the title to the popup
	var popupTitle = document.getElementById('popupTitle');
	removeAllChildren(popupTitle);
	var popupTitleTxt = 'Events for ' + DAYS[currentDate.getDay()] + ', ' + MONTHS[currentDate.getMonth()]
		+ ' ' + currentDate.getDate() + ', ' + currentDate.getFullYear();
	addTextToElement(popupTitle, popupTitleTxt);

	var eventArray = eventMap[currentDate.toLocaleString()];

	//this loop will write down details about each event
	var popupTxt = document.getElementById('popupTxt');
	removeAllChildren(popupTxt);
	if (eventArray != null && eventArray.length > 0)
	{
		for (var i = 0; i < eventArray.length; i++)
		{
			var eventInfo = document.createElement('p');

			var titleBold = document.createElement('span');
			titleBold.setAttribute('class', 'bold');
			addTextToElement(titleBold, 'Event: ');
			eventInfo.appendChild(titleBold);
			addTextToElement(eventInfo, eventArray[i].title);
			eventInfo.appendChild(document.createElement('br'));

			if (eventArray[i].time != '')
			{
				var timeBold = document.createElement('span');
				timeBold.setAttribute('class', 'bold');
				addTextToElement(timeBold, 'Time: ');
				eventInfo.appendChild(timeBold);
				addTextToElement(eventInfo, eventArray[i].time);
				eventInfo.appendChild(document.createElement('br'));
			}

			if (eventArray[i].location != '')
			{
				var locBold = document.createElement('span');
				locBold.setAttribute('class', 'bold');
				addTextToElement(locBold, 'Location: ');
				eventInfo.appendChild(locBold);
				addTextToElement(eventInfo, eventArray[i].location);
				eventInfo.appendChild(document.createElement('br'));
			}

			if (eventArray[i].details != '')
			{
				var detailsBold = document.createElement('span');
				detailsBold.setAttribute('class', 'bold');
				addTextToElement(detailsBold, 'Description: ');
				eventInfo.appendChild(detailsBold);
				addTextToElement(eventInfo, eventArray[i].details);
			}

			popupTxt.appendChild(eventInfo);
		}
	}
	else
	{
		var eventInfo = document.createElement('p');
		addTextToElement(eventInfo, 'There are no events for this date.');
		popupTxt.appendChild(eventInfo);
	}
	popup.style.display = 'block';
}

function hideDetails()
{
	document.getElementById('calendarPopup').style.display='none';
}

function loadEventData(xmlDoc)
{
	if (xmlDoc != null)
	{
		xmlFile = xmlDoc.documentElement;
		var yearArr = xmlFile.getElementsByTagName('year');
		for (var i = 0; i < yearArr.length; i++)
		{
			var yearEl = yearArr[i];
			var yearStr = yearEl.getElementsByTagName('value');
			if (yearStr.length > 0 && yearStr[0].hasChildNodes())
			{
				var year = parseInt(yearStr[0].firstChild.nodeValue);
				var monthArr = yearEl.getElementsByTagName('month');
				for (var j = 0; j < monthArr.length; j++)
				{
					var monthEl = monthArr[j];
					var monthStr = monthEl.getElementsByTagName('value');
					if (monthStr.length > 0 && monthStr[0].hasChildNodes())
					{
						var month = parseInt(monthStr[0].firstChild.nodeValue) - 1;
						var dateArr = monthEl.getElementsByTagName('date');
						for (var k = 0; k < dateArr.length; k++)
						{
							var dateEl = dateArr[k];
							var dateStr = dateEl.getElementsByTagName('value');
							if (dateStr.length > 0 && dateStr[0].hasChildNodes())
							{
								var date = parseInt(dateStr[0].firstChild.nodeValue);
								var eventArr = dateEl.getElementsByTagName('event');
								var eventList =  new Array(eventArr.length);
								var eventDate = new Date(year, month, date);
								for (var l = 0; l < eventArr.length; l++)
								{
									currentEvent = eventArr[l];
									var titleArray = currentEvent.getElementsByTagName('title');
									var timeArray = currentEvent.getElementsByTagName('time');
									var locationArray = currentEvent.getElementsByTagName('location');
									var descArray = currentEvent.getElementsByTagName('desc');
									var eventTitle = '';
									if (titleArray.length > 0 && titleArray[0].hasChildNodes())
									{
										eventTitle = titleArray[0].firstChild.nodeValue;
									}

									var eventTime = '';
									if (timeArray.length > 0 && timeArray[0].hasChildNodes())
									{
										eventTime = timeArray[0].firstChild.nodeValue;
									}

									var eventLocation = '';
									if (locationArray.length > 0 && locationArray[0].hasChildNodes())
									{
										eventLocation = locationArray[0].firstChild.nodeValue;
									}

									var eventDesc = '';
									if (descArray.length > 0 && descArray[0].hasChildNodes())
									{
										eventDesc = descArray[0].firstChild.nodeValue;
									}

									eventList[l] = new CalendarEvent(eventDate, eventTitle, eventTime, eventLocation, eventDesc);
								}
								eventMap[eventDate.toLocaleString()] = eventList;
							}
							else
							{
								continue;
							}
						}
					}
					else
					{
						continue;
					}
				}
			}
			else
			{
				continue;
			}
		}
	}
}
