﻿var eventCollection = [];

var eventDelegate = function($td, thisDate, month, year) {   
    // Marcamos los dias con eventos en el calendario
    if (eventCollection['d' + thisDate.getTime()]) {
        var date = eventCollection['d' + thisDate.getTime()];
        $td.addClass('event').html(thisDate.getDate());
    }
}

/*
* Seleccionamos 
*/
function displayCalendar(filename) {
    var isla = $('#ddlislas :selected').text();

    $.ajax({
        type: "POST",
        data: "{filename:'" + filename + "', isla:'" + isla + "'}",
        url: "/handlers/calendar.asmx/GetDaysWithEvents",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(items) {
            // Limpiamos la coleccion de eventos
            eventCollection = [];

            for (i in items) {
                eventCollection['d' + (Date.fromString(items[i]).getTime())] = items[i];
            }

            // Get selectedDate
            var selectedDates = $('#calendar').dpGetSelected();
            if (selectedDates != null && selectedDates.length > 0) {
                var d = new Date(selectedDates[0]);
                getEvents(filename, d.asString('dd/mm/yyyy'));
            }

            // Evita que se acumulen los bindings provocados por el repintado del calendario
            $('#calendar').unbind('dateSelected');

            $('#calendar')
                .datePicker({ inline: true, showYearNavigation: false, startDate: "01/01/2009", renderCallback: eventDelegate })
                .bind('dateSelected', function(e, selectedDate, $td) {
                    setCurrentDate(selectedDate);

                    var date = eventCollection['d' + selectedDate.getTime()];
                    getEvents(filename, date);
                });
        },
        error: function(msg) {
            $('#calendar').datePicker({ inline: true, showYearNavigation: false, startDate: "01/01/2009", renderCallback: eventDelegate });
        }
    });
}

/*
* Obtenemos un listado con todos los eventos programados para el dia seleccionado
*/
function getEvents(filename, date) {
    $.ajax({
        type: "POST",
        data: "{filename:'" + filename + "', date:'" + date + "', isla:'" + $('#ddlislas :selected').text() + "'}",
        url: "/handlers/calendar.asmx/GetEvents",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(data) {
            if (data != null) {
                if (data.length > 0) {
                    $('.noevents').hide();
                }
                else {
                    $('.noevents').show();
                }

                $('.events').show().fillTemplate(data);
            }
            else {
                var emptyArray = [];
                $('.events').show().fillTemplate(emptyArray);
                $('.noevents').show();
            }
        },
        error: function(msg) {
            alert("Se ha producido un error al intentar obtener el listado de eventos.");
        }
    });
}

/*
* Mostramos la fecha seleccionada
*/
function setCurrentDate(fecha) {
    var s = Date.dayNames[fecha.getDay()] + ", " + fecha.getDate() + " de " + Date.monthNames[fecha.getMonth()];
    $('span.dateselected').empty().append(s);
}

/*
* Esperamos a que la página se cargue completamente
*/
$(document).ready(function() {
    var today = new Date();
    var filename = $("[id$=FileName]").val();

    // Creamos el calendario
    displayCalendar(filename);

    // Seleccionamos el dia de hoy en el calendario
    setCurrentDate(today);

    // Buscamos todos los eventos para hoy
    getEvents(filename, today.asString('dd/mm/yyyy'));

    // Cada vez que seleccionemos una isla del combobox, volvemos a cargar el calendario
    $('#ddlislas').change(function() {
        displayCalendar(filename);
    });
});
