var firstYear = 2007;
var lastYear = 2012;

var displayedMonth;
var displayedYear;
var monthName = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");


function refreshCal(eventType, checked)
{
    showEvent[eventType] = checked;
    document.getElementById('monthContent').innerHTML = getMonth(displayedMonth, displayedYear);
}

function getMonthSkipDay(month, year)
{
    var a, y, m, d;
    var day = 1;        // the first day of the month
    
    month++;    // convert jan=0 to jan=1
    a = Math.floor((14 - month)/12);
    y = year - a;
    m = month + (12*a) - 2;
    d = (day + y + Math.floor(y/4) - Math.floor(y/100) + Math.floor(y/400) + Math.floor((31*m)/12) ) % 7;
    return (-d);
}

function getMonthMaxDays(month, year)
{
    var daysInMonth;
    var maxDays = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);

    daysInMonth = maxDays[month];

    if (month == 1)     // if this is february
    {
        if ( ((year % 4 == 0) && !(year % 100 == 0)) || (year % 400 == 0) )
            daysInMonth = 29;
    }
    return daysInMonth;
}



function getMonth(month, year)
{
    var daysInMonth = getMonthMaxDays(month, year);

    if (year < firstYear) year = firstYear;
    if (year > lastYear) year = lastYear;
    if (month < jan) month = jan;
    if (month > dec) month = dec;
    displayedMonth = month;
    displayedYear = year;

    var day = getMonthSkipDay(month, year);
    var i;
    var monthContent = "";

    monthContent += getMonthHeader(month, year);
    monthContent += '<TABLE borderColor=#444444 width="100%" border=1 style="border-collapse: collapse">';
    monthContent += '<TR align=middle>';
    monthContent += '<TD width="14%">';
    monthContent += '  <div align="center"><b>Sunday</b></div>';
    monthContent += '</TD>';
    monthContent += '<TD width="14%">';
    monthContent += '  <div align="center"><b>Monday</b></div>';
    monthContent += '</TD>';
    monthContent += '<TD width="14%">';
    monthContent += '  <div align="center"><b>Tuesday</b></div>';
    monthContent += '</TD>';
    monthContent += '<TD width="14%">';
    monthContent += '  <div align="center"><b>Wednesday</b></div>';
    monthContent += '</TD>';
    monthContent += '<TD width="14%">';
    monthContent += '  <div align="center"><b>Thursday</b></div>';
    monthContent += '</TD>';
    monthContent += '<TD width="14%">';
    monthContent += '  <div align="center"><b>Friday</b></div>';
    monthContent += '</TD>';
    monthContent += '<TD width="14%">';
    monthContent += '  <div align="center"><b>Saturday</b></div>';
    monthContent += '</TD>';
    monthContent += '</TR>';

    while (day < daysInMonth)
    {
        monthContent += '<TR>';
        // load one week at a time
        for (i=0; i<7; i++)
        {
            // load next day's content
            day++;
            if (day < 1)
                monthContent += '<TD>&nbsp;</TD>';
            else if (day > daysInMonth)
                monthContent += '<TD>&nbsp;</TD>';
            else
            {
                monthContent += '<TD vAlign=top>';
                monthContent += '<TABLE width="100%" border=0>';
                monthContent += '<TR>';
                monthContent += '<TD align=right>' + day + '</TD>';
                monthContent += '</TR>';
                monthContent += '<TR>';
                monthContent += getDaysEvents(month, day, year);
                monthContent += '</TR>';
                monthContent += '</TABLE>';
                monthContent += '</TD>';
            }
        }
        monthContent += '</TR>';
    }
    monthContent += '</TABLE>';

    return monthContent;
}

function showPreviousMonth(month, year)
{
    document.getElementById('monthContent').innerHTML = getMonth(month, year);
}

function showNextMonth(month, year)
{
    document.getElementById('monthContent').innerHTML = getMonth(month, year);
}

// populate the calendar date box with this day's events
// entry[entry#][mo, date, year, type, event description]
function getDaysEvents(month, day, year)
{
    var dailyEventContent;
    var multipleEvents = false;
    var colorCode = 1;          // use color, 0: no color
    var eventBreak = "<br><br>";

    dailyEventContent = '<TD><div style="font-size: 8pt">';

    for (i=0; i<entry.length; i++)
    {
        if (entry[i][0] == month && entry[i][1] == day && entry[i][2] == year && showEvent[entry[i][3]])
        {
            if (multipleEvents == true)
                dailyEventContent += eventBreak;
            if (colorCode == 1)
                dailyEventContent += "<span style='color:" + eventColor[entry[i][3]] + "'>";
            else
                dailyEventContent += "<span>";

            dailyEventContent += entry[i][4];
            dailyEventContent += "</span>";
            multipleEvents = true;
        }
    }

    if (multipleEvents == false)
        dailyEventContent += '&nbsp;';

    dailyEventContent += '</div></TD>';

    return dailyEventContent;
}

function getMonthHeader(month, year)
{
    var nextMonth, previousMonth;
    var nextYear = year;
    var previousYear = year;
    var monthHeaderContent = "";

    if (month == dec)
    {
        nextMonth = jan;
        nextYear++;
    }
    else
        nextMonth = month + 1;

    if (month == jan)
    {
        previousMonth = dec;
        previousYear--;
    }
    else
        previousMonth = month - 1;

    monthHeaderContent += '<table width=100%><tr>';
    monthHeaderContent += '<td width=20% align=left>';

    // navigate to previous month
    if (previousYear < firstYear)
        monthHeaderContent += '&nbsp;</td>';
    else
    {
        monthHeaderContent += '&nbsp;&nbsp;&nbsp;<span onClick="showPreviousMonth(' + previousMonth + ',' + previousYear + ')"';
        monthHeaderContent += 'onMouseOver="style.color=\'#000000\'; style.cursor=\'pointer\'" ';
        monthHeaderContent += 'onMouseOut="style.color=\'#808080\'" style="color:#808080; text-decoration: none; font-size: .8em">';
        monthHeaderContent += '&lt;&lt;&nbsp;' + monthName[previousMonth] + '</span></td>';
    }

    // current month header
    monthHeaderContent += '<td align=center><font size="+3"><b>' + monthName[month] + ' ' + year + '</b></font></td>';

    // navigate to next month
    if (nextYear > lastYear)
        monthHeaderContent += '<td width=20%>&nbsp;</td>';
    else
    {
        monthHeaderContent += '<td width=20% align=right>';
        monthHeaderContent += '<span onClick="showNextMonth(' + nextMonth + ',' + nextYear + ')"';
        monthHeaderContent += 'onMouseOver="style.color=\'#000000\'; style.cursor=\'pointer\'" ';
        monthHeaderContent += 'onMouseOut="style.color=\'#808080\'" style="color:#808080; text-decoration: none; font-size: .8em">';
        monthHeaderContent += monthName[nextMonth];
        monthHeaderContent += '&nbsp;&gt;&gt;</span>&nbsp;&nbsp;&nbsp;</td>';
    }

    monthHeaderContent += '</tr></table>';
    return monthHeaderContent;
}


