﻿

var libresCalendario = function () {

    var alertas = null;
    var alertasArray = [];
    var mesAutomatico = false;

    function libresCalendarioInicializar() {
        $.datepicker.setDefaults($.datepicker.regional["es"]);
        $("#calendario").datepicker({
            changeMonth: true,
            changeYear: true,
            beforeShowDay: libresCalendarioActualizar,
            onChangeMonthYear: libresCalendarioCambioMesAnio,
            onSelect: libresCalendarioSeleccion
        });

        var fecha = $("#calendario").datepicker("getDate");
        libresCalendarioObtener(fecha);
    }


    function libresCalendarioCambioMesAnio(year, month, inst) {

        $('.fechaSeleccionada span').text('');
        $('ul.alertas').html('');
        $('#calendarioTabla .cargando').show();

        var fecha = new Date();
        fecha.setFullYear(year, (month - 1), 1);

        //        var fechaCadena = String.format('{0}/{1}/{2}', '01', month, year);
        //        var fecha = ahora.toString(fechaCadena);

        libresCalendarioObtener(fecha);
    }

    function libresCalendarioArmar() {
        if (mesAutomatico == true) {
            if (alertasArray.length > 0) {
                mesAutomatico = false;
                var fechaParaSel = alertasArray[0];
                $("#calendario").datepicker("setDate", fechaParaSel);
                libresCalendarioSeleccion(fechaParaSel, null);
            }

        }
        $("#calendario").datepicker("refresh");

        $('#calendarioTabla .cargando').hide();



        //        $("#calendario").datepicker("destroy")

        //        $.datepicker.setDefaults($.datepicker.regional["es"]);
        //        $("#calendario").datepicker({
        //            changeMonth: true,
        //            changeYear: true,
        //            beforeShowDay: libresCalendarioActualizar,
        //            onChangeMonthYear: libresCalendarioCambioMesAnio,
        //            onSelect: libresCalendarioSeleccion
        //        });
        //        $("#calendario").datepicker("setDate", date)
    }

    function libresCalendarioSeleccion(fecha, inst) {

        $('ul.alertas').html('');

        $('.fechaSeleccionada span').text(fecha);
        $('#calendarioTabla .cargando').show();

        var alertasDelDia = [];
        for (var i = 0; i < alertas.length; i++) {
            var alerta = alertas[i];
            if (fecha == alerta.fecha) {
                alertasDelDia.push(alerta);
            }
        }
        $('#calendarioTabla .cargando').hide();
        $("#libresAlertaTemplate").tmpl(alertasDelDia).appendTo("ul.alertas");

        if (alertasDelDia.length == 0) {
            $("ul.alertas").append('<li>Sin avisos para la fecha seleccionada.<br /> Seleccione una fecha marcada con el color <div class=cuadradoFechaSeleccionada></div></li>')
        }
    }

    function libresCalendarioActualizar(fecha) {

        if (alertasArray == null || alertasArray.length == 0) return [true, ""];

        dmy = rellenoFecha(fecha.getDate()) + "/" + rellenoFecha(fecha.getMonth() + 1) + "/" + fecha.getFullYear();
        if ($.inArray(dmy, alertasArray) == -1) {
            return [true, ""];
        } else {
            return [true, "diaColor", "Demostracion"];
        }
    }

    function rellenoFecha(cadena) {
        return cadena.padLeft(2, "0");
    }

    function libresCalendarioObtener(fecha) {
        //Alertas
        var intervaloDias = 30;
        var ahora = Date.today();
        var fechaDesdeCadena = String.format("{0}/{1}/{2}", '01', (fecha.getMonth() + 1), (fecha.getFullYear()));
        var fechaDesde = ahora.toString(fechaDesdeCadena);

        var mesHasta = 1;
        var anioHasta = fecha.getFullYear() + 1;
        if (fecha.getMonth() < 11) {
            mesHasta = fecha.getMonth() + 2;
            anioHasta = fecha.getFullYear();
        }


        var fechaHastaCadena = String.format("{0}/{1}/{2}", '01', mesHasta, anioHasta);
        var fechaHasta = ahora.toString(fechaHastaCadena);
        var alertaCantidad = 500;

        libresCalendarioObtenerAlertas(fechaDesde, fechaHasta, alertaCantidad);

    }

    function libresCalendarioObtenerAlertas(fechaDesde, fechaHasta, cantidad) {

        var alertasUrl = String.format('/es/Alerta/Listado/Json?palabrasABuscar=&fechaDesde={0}&fechahasta={1}&cantidad={2}',
                                fechaDesde.toString(),
                                fechaHasta.toString(),
                                cantidad);

        var rand = Math.round(new Date().getTime());
        $.getJSON(alertasUrl + '&?' + rand, function (alertasJson) {

            if (alertasJson == null || alertasJson.length == 0) {
                if (mesAutomatico == false) {
                    mesAutomatico = true;
                    libresCalendarioObtenerAlertas(fechaDesde, '31/12/2050', 1);
                };
            } else {
                //Alertas en formato json
                alertas = alertasJson;

                //Armando array de alertas
                alertasArray = [];
                for (var i = 0; i < alertasJson.length; i++) {
                    alertasArray.push(alertasJson[i].fecha); //.replace('/', '-').replace('/', '-')
                }


                libresCalendarioArmar();
            }
        });

    }

    return {
        inicializar: function () {
            libresCalendarioInicializar();
        },
        actualizar: function (fecha) {
            libresCalendarioActualizar(fecha);
        }
    };
} ();

