var days = new Array("S", "M", "T", "W", "Th", "F", "S");
var months = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
var days_in_month = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
var today = new Date();
var currMonth = today.getMonth();
var currYear = today.getFullYear();
var dayId = new String();
var currDay = today.getDate();
var currDayId = String(currMonth + 1) + String(currDay) + String(currYear);
var defaultEvent = "Select an event above to view that event's information";

function Calendar(month, year) {
    this.month = (isNaN(month) || month == null) ? today.getMonth() : month;
    this.year = (isNaN(year) || year == null) ? today.getFullYear() : year;
    this.cal_html = '';
    this.month_year_html = '';
}

Calendar.prototype.generate_month_year_HTML = function () {
    var monthName = months[this.month];
    this.month_year_html = monthName + " " + this.year;
}

Calendar.prototype.generate_calendar_HTML = function() {
    var month_year_html = this.month + " " + this.year;    
    var firstDay = new Date(this.year, this.month, 1);
    var startingDay = firstDay.getDay();
    var monthLength = days_in_month[this.month];
    if (this.month == 1) {
        if ((this.year % 4 == 0 && this.year % 100 !=0) || this.year % 400 == 0) {
            monthLength = 29;
        }
    }
    var monthName = months[this.month];
    var html = '<table id="cal-table" class="calendar-table">';
    html += '<tr class="calendar-header">';
    for (var i = 0; i <= 6; i++) {
        html += '<td class="calendar-header-day">';
        html += days[i];
        html += '</td>';
    }
    html += '</tr><tr>';
    
    var day = 1;
    for (var i = 0; i < 9; i++) {
        for (var j = 0; j <= 6; j++) {
            dayId = String(currMonth + 1) + String(day) + String(currYear);
            html += '<td align="center" ';
            if (day <= monthLength && (i > 0 || j >= startingDay)) {
                html += 'id="' + dayId + '" onclick="setSelectedDate(' + day + ')" style="cursor:pointer;" onmouseover="this.style.fontWeight=\'bold\'" onmouseout="this.style.fontWeight=\'normal\'">'
                html += day;
                day++;
            }
            html += '</td>';
        }
        if (day > monthLength) {
        break;
        } else {
            html += '</tr><tr>';
        }
    }
    html += '</tr></table>';
    this.cal_html = html;
    
}

Calendar.prototype.get_month_year_HTML = function() {
    return this.month_year_html;
}

Calendar.prototype.get_calendar_HTML = function() {
    return this.cal_html;
}

function backArrow () {
    var newMonth = currMonth - 1;
    if (newMonth < 0) {
        newMonth = 11;
    }
    if (newMonth == 11) {
        currYear -= 1;
    }
    currMonth = newMonth
    cal1 = new Calendar(currMonth, currYear);
    cal1.generate_month_year_HTML();
    cal1.generate_calendar_HTML();
    document.getElementById("month_year_text").innerHTML = cal1.get_month_year_HTML();
    document.getElementById("small_calendar").innerHTML = cal1.get_calendar_HTML();
    buildEventList(currYear, months[currMonth], today.getDate());
}

function nextArrow () {
    var newMonth = currMonth + 1;
    if (newMonth > 11) {
        newMonth = 0;
    }
    if (newMonth == 0) {
        currYear += 1;
    }
    currMonth = newMonth
    cal1 = new Calendar(currMonth, currYear);
    cal1.generate_month_year_HTML();
    cal1.generate_calendar_HTML();
    document.getElementById("month_year_text").innerHTML = cal1.get_month_year_HTML();
    document.getElementById("small_calendar").innerHTML = cal1.get_calendar_HTML();
    buildEventList(currYear, months[currMonth], today.getDate());
}

function setSelectedDate(thisDay) {
    document.getElementById("this_month").innerHTML =  months[currMonth];
    document.getElementById("full_event").innerHTML = defaultEvent;
    if (thisDay < 10) {
        document.getElementById("large_date").innerHTML = '0' + thisDay; 
    } else {
        document.getElementById("large_date").innerHTML = thisDay; 
    }
    buildEventList(today.getFullYear(), months[currMonth], thisDay);
}