var events = [];

function eventDays(date, inMonth)
{
    var month = date.getMonth() + 1;
    var array = events[month];

    if (array == undefined)
    {
        var language = location.pathname.substr(0, 3);

        $.ajax({
            url: language +'/rest/calendar/GetEventsInMonth/' + date.getFullYear() + '-' + month,
            dataType: 'json',
            async: false,
            success: function (data)
            {
                events[month] = [];

                for (var i = 0; i < data.length; i++)
                {
                    var start = parseInt(data[i].Date.replace(/\/Date\((.*?)[+-]\d+\)\//i, "$1"), 10);
                    var d = new Date(start)
                    var dateValue = Date.UTC(d.getFullYear(), d.getMonth(), d.getDate()).valueOf();

                    events[month].push(dateValue);
                }
            }
        });
    }

    return lookupDate(date);
}

function select(date)
{
    if (date.length == 1)
    {
        date = date[0];

        var month = date.getMonth() + 1;
        var strDate = date.getFullYear() + '-' + month + '-' + date.getDate();

        var language = location.pathname.substr(0, 3);

        $.ajax({
            url: language + '/rest/calendar/GetEventsOnDate/' + strDate,
            dataType: 'json',
            success: function (data)
            {
                if (data.length > 0)
                {
                    $('section.col.events').html(data)
                }
            }
        });
    }
}

function lookupDate(date)
{
    var month = date.getMonth() + 1;
    var array = events[month];

    var dateValue = Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()).valueOf();
    if ($.inArray(dateValue, array) > -1)
    {
        return { dateClass: 'hasEvent' };
    }

    return { selectable: false, dateClass: '' };
}

$(document).ready(function ()
{
    $("#CalendarArea .tools .cal_title").text($.datepick.formatDate('MM yyyy', $.datepick.today(), $.datepick.regional));

    $('#Calendar').datepick({
        onDate: eventDays,
        onSelect: select,
        onChangeMonthYear: function (year, month)
        {
            $("#CalendarArea .tools .cal_title").text($.datepick.regional.monthNames[month - 1] + ' ' + year);
        },
        changeMonth: false,
        showOtherMonths: true,
        firstDay: 1,
        renderer: $.extend({}, $.datepick.defaultRenderer,
                    {
                        todayClass: 'datepick-today',
                        highlightedClass: '',
                        commandClass: 'hide',
                        weekendClass: '',
                        month: '<div class="datepick-month"><div class="datepick-month-header hide">{monthHeader}</div>' + '<table><thead>{weekHeader}</thead><tbody>{weeks}</tbody></table></div>'
                    })
    });

    $('#CalendarArea .tools a').click(function (e)
    {
        var btn = $(this);
        var cmd = '';

        if (btn.hasClass('today')) cmd = 'today';
        if (btn.hasClass('prev')) cmd = 'prev';
        if (btn.hasClass('next')) cmd = 'next';

        $('#Calendar').datepick('performAction', cmd);

        e.preventDefault();
    });
});
