/* This script is used for managing the Calendar functions */

var calendarXML = loadCalendarXML();
var calendarXSL = loadCalendarXSL();

var date = new Date();
var curMonth = date.getMonth()+1;
var curDate = date.getDate();
var curYear = date.getFullYear();
var curDay = date.getDay();

function loadCalendarXML() {
	//loads and returns the xml file
	return parseXML("database_calendar.xml");
}

function loadCalendarXSL() {
	//loads and returns the xsl file
	return parseXML("calendar.xsl");
}

function displayDate() {
	//arrays use to replace the number index with the appropriete text
	days = new Array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday");
	months = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
	
	//forms the date string for display
	todaysDate = days[date.getDay()] + ", " + months[date.getMonth()] + " " + date.getDate() + ", " + date.getFullYear();
	
	//sets the attribute for the calendar node with today's date
	calendarXML.getElementsByTagName('calendar')[0].setAttribute("today", todaysDate);
}

function displayCalendar(type, displayID) {
	//load our xml and xsl files
	calendarXML = loadCalendarXML();
	calendarXSL = loadCalendarXSL();

	//set the type attribute for grid "overview" display. This is required for our xsl to pick the right template
	calendarXML.getElementsByTagName('calendar')[0].setAttribute("type", type);

	if (type == "grid") {
		displayDate();
		//loops through the database's nodes, looking for the information we need
		xmlMonth = calendarXML.getElementsByTagName('month');
		for ( i=0; i<xmlMonth.length; i++ ) {
			xmlDate = xmlMonth[i].getElementsByTagName('day');
			if ( xmlMonth[i].getAttribute("id") < curMonth ) {	//past months
				for ( j=0; j<xmlDate.length; j++ ) {
					xmlDate[j].setAttribute("status", "past");	//grey out
				}
			} else if ( xmlMonth[i].getAttribute("id") == curMonth ) {	//current month
				for ( j=0; j<xmlDate.length; j++ ) {
					if ( xmlDate[j].getAttribute("number") < curDate ) {	//past dates
						xmlDate[j].setAttribute("status", "past");	
					} else if ( xmlDate[j].getAttribute("number") == curDate ) {	//current date
						xmlDate[j].setAttribute("status", "current");
					} else {
						xmlDate[j].setAttribute("status", "future");	//future dates			
					}
				}
			} else {
				for ( j=0; j<xmlDate.length; j++ ) {
					xmlDate[j].setAttribute("status", "future");	//grey out
				}
			}
		}
	} else if (type == "desc") {
		displayDate();
		xmlDate = calendarXML.getElementsByTagName('day');	//get day nodes
		for ( i=0; i<xmlDate.length; i++ ) {
			//let's add a text suffix to the dates		
			number = xmlDate[i].getAttribute("number");
			lastDigit = number.charAt(number.length-1);
			
			if ( number == 10 || number == 11 || number == 12 || number == 13 ) suffix = "th";	//10, 11, 12, 13 end in th
			else if ( lastDigit == 1 ) suffix = "st";	//makes all 1 numbers into 1st
			else if ( lastDigit == 2 ) suffix = "nd";	//makes all 2 numbers into 2nd
			else if ( lastDigit == 3 ) suffix = "rd";	//makes all 3 numbers into 3rd
			else suffix = "th";	//make every other number use th
			
			xmlDate[i].setAttribute("numberAlt", number+suffix);
		}
	} else if (type == "sidebar") {
		//create an array to save the nodes we want to remove later
		nodesToRemove = new Array();
	
		xmlMonth = calendarXML.getElementsByTagName('month');	//get month nodes
		for ( i=0; i<xmlMonth.length; i++ ) {
			if ( xmlMonth[i].getAttribute("id") < curMonth ) {	//past months
				nodesToRemove[nodesToRemove.length] = xmlMonth[i];	//remove past months
			} else if ( xmlMonth[i].getAttribute("id") == curMonth ) {	//current month
				xmlMonth[i].setAttribute("status", "current");	//set to current
				xmlWeek = xmlMonth[i].getElementsByTagName('week');	//get week nodes
				for ( k=0; k<xmlWeek.length; k++ ) {
					xmlDate = xmlWeek[k].getElementsByTagName('day');	//get day nodes
					for ( j=0; j<xmlDate.length; j++ ) {
						if ( xmlDate[j].getAttribute("number") < curDate ) {	//past days
							nodesToRemove[nodesToRemove.length] = xmlDate[j];			//remove past days
						} else if ( xmlDate[j].getAttribute("number") == curDate ) {	//current day
							xmlDate[j].setAttribute("status", "current");	//set to current
						}
					}
				}
			}
		}
		
		for ( i in nodesToRemove ) {
			nodesToRemove[i].parentNode.removeChild(nodesToRemove[i]);	//remove nodes
		}	
	} else if (type == "currentEvents") {
		//create an array to save the nodes we want to remove later
		nodesToRemove = new Array();
	
		xmlMonth = calendarXML.getElementsByTagName('month');	//get month nodes
		for ( i=0; i<xmlMonth.length; i++ ) {
			if ( xmlMonth[i].getAttribute("id") < curMonth ) {	//past months
				nodesToRemove[nodesToRemove.length] = xmlMonth[i];	//remove past months
			} else if ( xmlMonth[i].getAttribute("id") == curMonth ) {	//current month
				xmlMonth[i].setAttribute("status", "current");	//set to current
				xmlWeek = xmlMonth[i].getElementsByTagName('week');	//get week nodes
				for ( k=0; k<xmlWeek.length; k++ ) {
					xmlDate = xmlWeek[k].getElementsByTagName('day');	//get day nodes
					for ( j=0; j<xmlDate.length; j++ ) {
						if ( xmlDate[j].getAttribute("number") < curDate ) {	//past days
							nodesToRemove[nodesToRemove.length] = xmlDate[j];			//remove past days
						} else if ( xmlDate[j].getAttribute("number") == curDate ) {	//current day
							xmlDate[j].setAttribute("status", "current");	//set to current
						}
					}
				}
			}
		}
		
		for ( i in nodesToRemove ) {
			nodesToRemove[i].parentNode.removeChild(nodesToRemove[i]);	//remove nodes
		}
	}
	
	//display the results by using XSLT to transform the xml
	transformXML(calendarXML, calendarXSL, displayID);
}