// JavaScript Document
<!--
//On load, define global date, month index, and offset variables
var now = new Date();
var curryear = now.getFullYear(); //currdatestr.substring(11,16)*1;
var calyear=0;
var day = now.getDate();
//define 'm' as current month index number for later...
var m=now.getMonth();
	
//default month offset is 0
var moffset=0;
var fulloffset=0;
var prev=-1;
var next=+1;

function buttons(offset) {
	if(offset==0) {
		fulloffset=offset;
	} else {
		fulloffset+=offset;
	}
	//drawcal bypasses reimporting the calendar at every month change
	drawcal();
	//importXML();
}

function godate() {
	//set fulloffset according to m-menu and y-menu values
	
	//define "offset" from current date
	//alert(document.getElementById('y-menu')[document.getElementById('y-menu').selectedIndex].innerHTML-curryear)
	if((document.getElementById('m-menu').selectedIndex)>11) {
//		alert('>11');
		fulloffset+=(document.getElementById('m-menu').selectedIndex-(m+moffset))-11+12*(document.getElementById('y-menu')[document.getElementById('y-menu').selectedIndex].innerHTML-calyear);
	} else {
//		alert(document.getElementById('m-menu').selectedIndex+'  '+(m+moffset));
//		alert(document.getElementById('y-menu')[document.getElementById('y-menu').selectedIndex].innerHTML+'  '+(calyear));
		fulloffset+=(document.getElementById('m-menu').selectedIndex-(m+moffset))+12*(document.getElementById('y-menu')[document.getElementById('y-menu').selectedIndex].innerHTML-calyear);
	}
	drawcal()
}

function drawcal() {
	//set date to the first of the month and year given by the full offset
	var d = new Date();
	d.setFullYear(curryear,m+fulloffset,1);
	d.setHours(12);
	d.setUTCHours(12);
	calyear = d.getFullYear();
	var fullmonths = new Array('January','February','March','April','May','June','July','August','September','October','November','December');
	//change moffset to not go beyond the limits of the 'fullmonths' array...ie: make it relative to the 'calyear' date
	moffset=fulloffset;
	if(m+moffset < 0) {
		while(m+moffset < 0) {
			moffset+=12;	
		}
	}
	if(m+moffset > 11) {
		while(m+moffset > 11) {
			moffset-=12;	
		}
	}
	//set calendar title month and year based on moffset
	document.getElementById('caltitle').innerHTML=fullmonths[m+moffset] + ' - ' + calyear;
	
	//fill "year" menu with valid years...
	
	//fill array with year dates from loaded XML document
	//find maximum and minimum values, and extend by 1
	var allYears=xmlDoc.responseXML.getElementsByTagName("year");
	var minyear=allYears[0].childNodes[0].nodeValue;
	var maxyear=allYears[0].childNodes[0].nodeValue;
	for(i=0; i<allYears.length;i++) {
		if (allYears[i].childNodes[0].nodeValue > maxyear) {
			maxyear = allYears[i].childNodes[0].nodeValue;
		}
		if (allYears[i].childNodes[0].nodeValue < minyear) {
			minyear = allYears[i].childNodes[0].nodeValue;
		}
	}
	minyear--;
	maxyear++;
	
	//build "year" menu from minyear and maxyear variables
	i=0;
	for(minyear;minyear<=maxyear;minyear++) {
		document.getElementById('y-menu')[i]=new Option(minyear,i);
		i++;
	}
	
	//set calendar drop-down menus to current month and year based on moffset
	document.getElementById('m-menu').selectedIndex=m+moffset;
	for(i=0;i<document.getElementById('y-menu').length;i++) {
		if(document.getElementById('y-menu')[i].innerHTML==calyear) {
			document.getElementById('y-menu').selectedIndex=i;
		}
	}

	//Define current weekday number for the 1st day of the month...
	var w=d.getDay();
	
	//Determine number of days in current and previous months
	//'curryear' couples with 'fulloffset' (above), and 'calyear' couples with 'moffset' (relative to the drawn calendar year).
	var currndays = 32 - new Date(calyear, m+moffset, 32).getDate();
	var prevndays = 32 - new Date(calyear, m+moffset-1, 32).getDate();
	
	//define previously loaded xml document and parse event information for the current month...once
	var testXML=xmlDoc.responseXML;
	var allEvents=testXML.getElementsByTagName("event");
	//alert('month number: ' + allEvents[0].getElementsByTagName("month")[0].childNodes[0].nodeValue); //get the number of events...
	//Go through events and catalogue those in current month/year
	var i=0;
	var j=0;
	var eventnum= new Array();
	for(i=0;i<allEvents.length;i++) {
		// 'm' is the current month number minus 1
		if(allEvents[i].getElementsByTagName("month")[0].childNodes[0].nodeValue==(m+moffset+1) && allEvents[i].getElementsByTagName("year")[0].childNodes[0].nodeValue==calyear) {
			eventnum[j]=i;
			j++;
		}
	}
	//create table for event number...
	theTable = (document.all) ? document.all.events : document.getElementById("events");
    theTableBody = theTable.tBodies[0];
			
	//Remove previous rows...and set up 'empty' line...
	if(j>0) { //if events are found
		while(theTable.getElementsByTagName("tr").length>0) {
			theTableBody.deleteRow(-1);
		}
	} else { //if there are no events
		while(theTable.getElementsByTagName("tr").length>0) {
			theTableBody.deleteRow(-1);
		}
		var newTempRow = theTableBody.insertRow(-1);
		var newTempCell = newTempRow.insertCell(0);
		newTempCell.innerHTML = '<div class="article_text" style="text-align:center">No events scheduled...</div>';
		newTempRow = theTableBody.insertRow(-1);
		newTempCell = newTempRow.insertCell(0);
		newTempCell.innerHTML = '<hr noshade size="1px" color="#000000" />';
	}
	
	//alert('event numbers for this month: ' + eventnum);
	//alert('total number of events for this month: ' + j);

	//label calendar grid accordingly...
	var currct=1;
	var nextct=1;
	for (var n=0;n<=41;n++) {
		//reset background color for current cell index
		document.getElementById(n).style.background="#FFFFFF";
		//reset any 'onmouse...' functions
		document.getElementById(n).onmouseover=function () {};
		document.getElementById(n).onmouseout=function () {};
		if (n>=w && n<(currndays+w)) {
			//format as activecells and label as months
			if((n-w+1)==day && fulloffset==0) {
				document.getElementById(n).innerHTML=currct+"<div style='width:100%; height:4px; text-align:left'>&nbsp;&bull;</div>";
			} else {
				document.getElementById(n).innerHTML=currct;
			}
			//document.getElementById(n).innerHTML=currct;
			document.getElementById(n).className="cal_active_cell";
			//Create and populate new rows...
			for (var h=0; h<j; h++) {
				//if the first event in the 'eventnum' array falls under the current day...
				if(allEvents[eventnum[h]].getElementsByTagName("day")[0].childNodes[0].nodeValue == currct && allEvents[eventnum[h]].getElementsByTagName("year")[0].childNodes[0].nodeValue == calyear) {
					var newCell;
					var newRow = theTableBody.insertRow(-1);
					//enter XML data and change widths
					for(i=0; i<4; i++) {
						newCell = newRow.insertCell(i);
						if (i==0) {
							newCell.innerHTML = allEvents[eventnum[h]].getElementsByTagName("month")[0].childNodes[0].nodeValue+"/"+allEvents[eventnum[h]].getElementsByTagName("day")[0].childNodes[0].nodeValue+"/"+allEvents[eventnum[h]].getElementsByTagName("year")[0].childNodes[0].nodeValue.substring(2,4)+" "+allEvents[eventnum[h]].getElementsByTagName("time")[0].childNodes[0].nodeValue;
							newCell.width="60px";
							newCell.vAlign="top";
						}
						if (i==1) {
							newCell.innerHTML = allEvents[eventnum[h]].getElementsByTagName("type")[0].childNodes[0].nodeValue;
							newCell.width="80px";
							newCell.vAlign="top";
						}
						if (i==2) {
							if(allEvents[eventnum[h]].getElementsByTagName("guest")[0].childNodes[0]==null) {
								newCell.innerHTML = allEvents[eventnum[h]].getElementsByTagName("topic")[0].childNodes[0].nodeValue;
							} else {
								newCell.innerHTML = allEvents[eventnum[h]].getElementsByTagName("guest")[0].childNodes[0].nodeValue+" -- "+allEvents[eventnum[h]].getElementsByTagName("topic")[0].childNodes[0].nodeValue;
							}
							newCell.vAlign="top";
						}
						if (i==3) {
							if(allEvents[eventnum[h]].getElementsByTagName("map")[0].childNodes[0]==null) {
								newCell.innerHTML = allEvents[eventnum[h]].getElementsByTagName("hostloc")[0].childNodes[0].nodeValue;
							} else {
								newCell.innerHTML = allEvents[eventnum[h]].getElementsByTagName("hostloc")[0].childNodes[0].nodeValue+" "+allEvents[eventnum[h]].getElementsByTagName("map")[0].childNodes[0].nodeValue;
							}
							newCell.width="80px";
							newCell.vAlign="top";
						}
					}
					//change styles and 'onmouse...' javascript for for current month cell and table
					newRow.id=n+'e';
					document.getElementById(n).style.background="#CCCCCC";
					document.getElementById(n).onmouseover=function () {this.style.background="#C67204";document.getElementById(this.id+'e').style.background="#EEEEEE"};
					document.getElementById(n).onmouseout=function () {this.style.background="#CCCCCC";document.getElementById(this.id+'e').style.background="#F8F9F7"};
					newRow.onmouseover=function () {this.style.background='#EEEEEE';document.getElementById(this.id.substring(0,this.id.length-1)).style.background='#C67204'};
					newRow.onmouseout=function () {this.style.background='#F8F9F7';document.getElementById(this.id.substring(0,this.id.length-1)).style.background='#CCCCCC'};
					//insert trailing line
					newRow = theTableBody.insertRow(-1);
					newCell = newRow.insertCell(0);
					newCell.colSpan="4";
					newCell.innerHTML = '<hr noshade size="1px" color="#000000" />';
				}
			}
			//END code for creating table...
			currct++;
		}
		else {
			if (n<w) { //previous month numbers...
				document.getElementById(n).innerHTML=prevndays-w+n+1;
			}
			else { //next month numbers...
				document.getElementById(n).innerHTML=nextct;
				nextct++;
			}
			document.getElementById(n).className="cal_inactive_cell";
		}
	}
}

var xmlDoc = false;
//var isIE = false;

function importXML() {
	if(window.XMLHttpRequest) {
		try {
			xmlDoc = new XMLHttpRequest();
		} catch(e) {
			xmlDoc = false;
		}
	} else if(window.ActiveXObject) {
		try {
			xmlDoc = new ActiveXObject("Msxml2.XMLHTTP");
		} catch(e) {
			try {
				xmlDoc = new ActiveXObject("Microsoft.XMLHTTP");
			} catch(e) {
				xmlDoc = false;
			}
		}
		//isIE = true;
	}
	if(xmlDoc) {
		xmlDoc.onreadystatechange = processxmlDocChange;
		xmlDoc.open("GET","calendar.xml",true);
		xmlDoc.send(null);
	}
}

function processxmlDocChange() {
    // only if xmlDoc shows "loaded"
    if (xmlDoc.readyState == 4) {
        // only if "OK"
        if (xmlDoc.status == 200) {
            // ...processing statements for XML file...
			drawcal();
        } else {
            alert("There was a problem retrieving the XML data:\n" +
                xmlDoc.statusText);
        }
    }
}
-->