var year;
var month;
var day;
var events = new Array();
var xmlDoc;

function setToday() {
    var now   = new Date();
    day   = now.getDate();
    month = now.getMonth();
    year  = now.getFullYear();
    
    displayCalendar();
}


function setPreviousMonth() {
    day = 0;
    if (month == 0) {
        month = 11;
        year--;
    } else {
        month--;
    }
    displayCalendar();
}


function setNextMonth() {
    day   = 0;
    if (month == 11) {
        month = 0;
        year++;
    } else {
        month++;
    }
    displayCalendar();
}


function getDaysInMonth(month,year){
    daysInMonth=[31,28,31,30,31,30,31,31,30,31,30,31];
    if ((month==1)&&(year%4==0)&&((year%100!=0)||(year%400==0))){
        return 29;
    } else {
        return daysInMonth[month];
    }
}

function displayCalendar() {
    monthNames=['January','February','March','April','May','June','July','August','September','October','November','December'];
    month = parseInt(month);
    year = parseInt(year);
    var i = 0;
    var days = getDaysInMonth(month,year);
    var firstOfMonth = new Date (year, month, 1);
    var startingPos = firstOfMonth.getDay();
    var endPadding = 7 - ((startingPos + days) % 7);
    
    var calhtml = '<div id="monthselect" class="clearfix">'
              + '    <a href="#" id="prevmonth" title="Previous Month" onclick="setPreviousMonth();return false"><span class="hidden">Previous Month</span></a>'
              + '    <span id="monthname">' + monthNames[month] + ' ' + year + '</span>'
              + '    <a href="#" id="nextmonth" title="Next Month" onclick="setNextMonth();return false"><span class="hidden">Next Month</span></a>'
              + '</div>'
              + '<ul class="clearfix">'
              + '     <li class="dayname">S</li>'
              + '     <li class="dayname">M</li>'
              + '     <li class="dayname">Tu</li>'
              + '     <li class="dayname">W</li>'
              + '     <li class="dayname">Th</li>'
              + '     <li class="dayname">F</li>'
              + '     <li class="dayname">S</li>';
    
    for (i = 0; i < startingPos; i++) {
      calhtml += '<li class="slug"> </li>';
    }
	
    for (i = 1; i <= days; i++) {
		
		if (events['d'+year+'d'+month+'d'+i]) {
			/*calhtml += '<li><a href="#" onclick="window.open("Calendar_detail.php", "_blank", "location=no,menubar=no,toolbar=no,resizable=no,scrollbars=yes,width=600,height=400"); return=false;" title="Click for more information" onmouseover="showday(this, true);" onmouseout="showday(this, false);">' + i + '</a>'
				    + '    <p class="details">' + events['d'+year+'d'+month+'d'+i] + '</p>';*/
			calhtml += '<li><a href="#" onclick="window.open(' + "'/Calendar_detail.php?date="+year+"-"+(month+1)+"-"+i+"', '_blank', 'location=no,menubar=no,toolbar=no,resizable=no,scrollbars=yes,width=600,height=400'" + ')" title="Click for more information" onmouseover="showday(this, true);" onmouseout="showday(this, false);">' + i + '</a>'
				    + '    <p class="details">' + events['d'+year+'d'+month+'d'+i] + '</p>';
		} else {
		    calhtml += '<li class="empty">' + i;
		}
			  
		calhtml += '</li>';
    }
    for (i = 0; i < endPadding; i++) {
        calhtml += '<li class="slug"> </li>';
    }
    calhtml += '</ul>';

    document.getElementById('calendarblock').innerHTML = calhtml;
}


function loadCalendar()
{
	if (document.implementation && document.implementation.createDocument)
	{
		xmlDoc = document.implementation.createDocument("", "", null);
		xmlDoc.onload = parseXML;
	}
	else if (window.ActiveXObject)
	{
		xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
		xmlDoc.onreadystatechange = function () {
			if (xmlDoc.readyState == 4) parseXML()
		};
 	}
	else
	{
		alert('Your browser can\'t handle this script');
		return;
	}
	xmlDoc.load("/xml/gen_events.xml");  
}


function parseXML()
{
    var year;
    var month;
    var day;
    var html;
    
	var x = xmlDoc.getElementsByTagName('event');

	for (i=0;i<x.length;i++)
	{
		tag = '';
        year = x[i].getAttribute('year');
        month = x[i].getAttribute('month') - 1;
        day = x[i].getAttribute('day');
		
		for (j=0; j<x[i].childNodes.length; j++)
		{
			if (x[i].childNodes[j].tagName == 'title')
			{
				tag = '<span>' + x[i].childNodes[j].firstChild.nodeValue + '</span>';
			}
		}

		if (events['d'+year+'d'+month+'d'+day] != undefined)
		{
			events['d'+year+'d'+month+'d'+day] += tag;
		}
		else
		{
			events['d'+year+'d'+month+'d'+day] = tag;
		}
	}
	
    setToday();
}


function showday (element, display)
{
	// Since there is only one P element within the LI used to display the details flag, it is safe to access it explicitly
	var detailflag = element.parentNode.getElementsByTagName("p")[0];
	
	if (display)
	{
		//element.parentNode.childNodes[2].style.display = "block";
		detailflag.style.display = "block";
		detailflag.style.zIndex = "999";
	}
	else
	{
		//element.parentNode.childNodes[2].style.display = "none";
		detailflag.style.display = "none";
		detailflag.style.zIndex = "10";
	}	
}