//
// The following script code is copyright (C) 2004-2008, John Elsbree.
// Permission is hereby granted to copy this code for use in other sites,
// provided this copyright notice remains intact.
//

function EventItem(date, title, description)
{
    this.date = date;
    this.title = title;
    this.description = description;
}

function updateUpcomingEvents(parentElement, days)
{
    if (parentElement == null)
    {
        return 0;
    }

    var startTicks = ticksAtMidnight(new Date());
    var endTicks = ticksAtMidnight(new Date("1/1/2100"));

    if (days != null)
    {
        endTicks = startTicks + ticksFromDays(days);
    }

    var eventCount = 0;
    var monthName = null;
    var monthNumber = null;
    var dateNumber = null;

    var i;
    var toggle = 0;
    for (i in eventList)
    {
        var event = eventList[i];
        if (event.title != null)
        {
            var eventDate = new Date(event.date);
            var eventTicks = eventDate.getTime();
            if (startTicks <= eventTicks && eventTicks < endTicks)
            {
                var newMonthName = formatMonthName(eventDate);

                if (monthName != newMonthName)
                {
                    toggle = 1;
                    var newMonthHeader = document.createElement("DIV");
                    newMonthHeader.className = "eventMonthHeader";
                    newMonthHeader.innerText = newMonthName;
                    parentElement.appendChild(newMonthHeader);
                    monthName = newMonthName;
                }

                var newUpcomingEvent = document.createElement("DIV");
                var newDate = document.createElement("DIV");
                var newDay = document.createElement("DIV");
                var newTime = document.createElement("DIV");
                var newTitle = document.createElement("DIV");
                var newDesc = document.createElement("DIV");

                if (monthNumber != eventDate.getMonth() || dateNumber != eventDate.getDate())
                {
                    newDate.innerText = eventDate.getDate();
                    newDay.innerText = formatDayName(eventDate);
                    monthNumber = eventDate.getMonth();
                    dateNumber = eventDate.getDate();
                    toggle = 1 - toggle;
                }

                newTime.innerText = formatShortTime(eventDate);
                newTitle.innerText = event.title;
                newDesc.innerText = event.description;

                newUpcomingEvent.className = "eventContainer" + toggle;
                newDate.className = "eventDate";
                newDay.className = "eventDay";
                newTime.className = "eventTime";
                newTitle.className = "eventTitle";
                newDesc.className = "eventDesc";

                newUpcomingEvent.appendChild(newDate);
                newUpcomingEvent.appendChild(newDay);
                newUpcomingEvent.appendChild(newTime);
                newUpcomingEvent.appendChild(newTitle);
                if (event.description != null)
                {
                    newUpcomingEvent.appendChild(newDesc);
                }
                parentElement.appendChild(newUpcomingEvent);
            
                eventCount++;
            }
        }
    }

    return eventCount;
}

function ticksAtMidnight(date)
{
    return new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime();
}

function ticksFromDays(days)
{
    return days * 24 * 60 * 60 * 1000;
}

var monthNames=["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];

function formatMonthName(date)
{
    return monthNames[date.getMonth()];
}

var dayNames=["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];

function formatDayName(date)
{
    return dayNames[date.getDay()];
}

function formatShortTime(date)
{
    var hour = date.getHours();
    var pad = "";
    var minute = date.getMinutes();
    var ampm = "AM";

    if (hour > 11)
    {
        hour = hour - 12;
        ampm = "PM";
    }

    if (minute < 10)
    {
        pad = "0";
    }

    return hour + ":" + pad + minute + " " + ampm;
}

