// Binding knockout para input type="date"
ko.bindingHandlers.date = {
    init: function (element, valueAccessor) {
        ko.utils.registerEventHandler(element, "blur", function () {
            var observable = valueAccessor();
            if (observable() != null) {
                var time = observable().substring(10, 18);
                var dateTime = $(element).val() + time;
                observable(dateTime);
            }
        });
    },
    update: function (element, valueAccessor) {
        var value = ko.utils.unwrapObservable(valueAccessor());
        if (value != null && typeof (value) !== "undefined") {
            $(element).val(moment(value).format("YYYY-MM-DD"));
        }
    }
};

ko.bindingHandlers.time = {
    init: function (element, valueAccessor) {
        ko.utils.registerEventHandler(element, "blur", function () {
            var value = valueAccessor();
            if (value() != null) {
                var date = value().substring(0, 10);
                var dateTime = date + "T" + $(element).val() + ":00";
                value(dateTime);
                valueAccessor(value);
            }
        });
    },
    update: function (element, valueAccessor) {
        var value = ko.utils.unwrapObservable(valueAccessor());
        if (value != null && typeof (value) !== "undefined") {
            var hour = value.substring(11, 16);
            $(element).val(hour);
            $(element).text(hour);
        }
    }
};

var checkRadioElements = [];

ko.bindingHandlers.checkRadio = {
    init: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
        // This will be called when the binding is first applied to an element
        // Set up any initial state, event handlers, etc. here
    },
    update: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
        // This will be called once when the binding is first applied to an element,
        // and again whenever the associated observable changes value.
        // Update the DOM element based on the supplied values here.
        //$(element).prop('checked', valueAccessor());
        var value = ko.utils.unwrapObservable(valueAccessor());
        if (value) {
            checkRadioElements.push({
                Element: element,
                Value: value
            });
        }
    }
};

// Associa fuctions a viewModelTratarAlarme mapeada
$(function () {

    //Fecha a pop-up
    viewModelTratarAlarme.cancelar = function () {
        $(".tratar-alarme-pendente").dialog("close");
    }

    //Finaliza o alarme
    viewModelTratarAlarme.finalizar = function () {
        //Trata Status
        $('input:radio[name=Invalidar]').each(function () {
            //Verifica qual está selecionado
            if ($(this).is(':checked'))
                tratamento = $(this).val();
        });

        viewModelTratarAlarme.TratarHorariosManualmente = false;

        if (tratamento === "Invalidar") {
            viewModelTratarAlarme.Status("I");
            //            var preencharHorarios = "";
            //            $("input:radio[name=tratarFCV]").each(function () {
            //                //Verifica qual está selecionado
            //                if ($(this).is(':checked'))
            //                    preencharHorarios = $(this).val();
            //            });

            viewModelTratarAlarme.TratarHorariosManualmente = true;
        }
        else {
            $('input:radio[name=finalizar]').each(function () {
                //Verifica qual está selecionado
                if ($(this).is(':checked'))
                    tratamento = $(this).val();
            });

            if (tratamento === "Abonar") {
                viewModelTratarAlarme.Status("A");
            }
            else {
                viewModelTratarAlarme.Status("F");
            }
        }


        this.Response = null;
        var jsonViewModel = ko.toJSON(viewModelTratarAlarme),
            url = "FinalizarAlarme";

        if (viewModelTratarAlarme.GrupoAlarmes)
            if (viewModelTratarAlarme.GrupoAlarmes())
                if (viewModelTratarAlarme.GrupoAlarmes().length > 0)
                    url = "FinalizarGrupoAlarmes";

        $.ajax({
            url: url,
            contentType: 'application/json; charset=utf-8',
            dataType: "json",
            type: "POST",
            data: JSON.stringify({ viewModelJson: jsonViewModel }),
            success: function (result) {
                //alert(result.Resposta);
            }
        });

        this.Response = null;

        $(".tratar-alarme-pendente").dialog("close");

        // Busca no servidor a nova lista de alarmes
        //RecarregarListaAlarmes(viewModelTratarAlarme.CodigoFCv());
    };

    // Anula Chegada ou Saida
    viewModelTratarAlarme.AlterarChegadaAnulada = function (data) {
        var codigoTerminal = data;
        for (var i = 0; i < viewModelTratarAlarme.Terminais().length; i++) {
            if (viewModelTratarAlarme.Terminais()[i].Codigo() === codigoTerminal()) {
                viewModelTratarAlarme.Terminais()[i].ChegadaAnulada(viewModelTratarAlarme.Terminais()[i].ChegadaAnulada() == 'F' ? 'T' : 'F');
                if (viewModelTratarAlarme.Terminais()[i].ChegadaAnulada() == 'T') {
                    viewModelTratarAlarme.Terminais()[i].ChegadaQuebraPlanejamento('F');
                    viewModelTratarAlarme.Terminais()[i].ChegadaSuprimida('F');
                }
                break;
            }
        }
    };

    viewModelTratarAlarme.AlterarSaidaAnulada = function (data) {
        var codigoTerminal = data;
        for (var i = 0; i < viewModelTratarAlarme.Terminais().length; i++) {
            if (viewModelTratarAlarme.Terminais()[i].Codigo() === codigoTerminal()) {
                viewModelTratarAlarme.Terminais()[i].SaidaAnulada(viewModelTratarAlarme.Terminais()[i].SaidaAnulada() == 'F' ? 'T' : 'F');

                if (viewModelTratarAlarme.Terminais()[i].SaidaAnulada() == 'T') {
                    viewModelTratarAlarme.Terminais()[i].SaidaQuebraPlanejamento('F');
                    viewModelTratarAlarme.Terminais()[i].SaidaSuprimida('F');
                }
                break;
            }
        }
    };

    // Quebra de planejamento Chegada ou Saida
    viewModelTratarAlarme.AlterarChegadaQuebra = function (data) {
        var codigoTerminal = data;
        for (var i = 0; i < viewModelTratarAlarme.Terminais().length; i++) {
            if (viewModelTratarAlarme.Terminais()[i].Codigo() === codigoTerminal()) {
                viewModelTratarAlarme.Terminais()[i].ChegadaQuebraPlanejamento(viewModelTratarAlarme.Terminais()[i].ChegadaQuebraPlanejamento() == 'F' ? 'T' : 'F');

                if (viewModelTratarAlarme.Terminais()[i].ChegadaQuebraPlanejamento() == 'T') {
                    viewModelTratarAlarme.Terminais()[i].ChegadaAnulada('F');
                    viewModelTratarAlarme.Terminais()[i].ChegadaSuprimida('F');
                }
                break;
            }
        }
    };

    viewModelTratarAlarme.AlterarSaidaQuebra = function (data) {
        var codigoTerminal = data;
        for (var i = 0; i < viewModelTratarAlarme.Terminais().length; i++) {
            if (viewModelTratarAlarme.Terminais()[i].Codigo() === codigoTerminal()) {
                viewModelTratarAlarme.Terminais()[i].SaidaQuebraPlanejamento(viewModelTratarAlarme.Terminais()[i].SaidaQuebraPlanejamento() == 'F' ? 'T' : 'F');

                if (viewModelTratarAlarme.Terminais()[i].SaidaQuebraPlanejamento() == 'T') {
                    viewModelTratarAlarme.Terminais()[i].SaidaAnulada('F');
                    viewModelTratarAlarme.Terminais()[i].SaidaSuprimida('F');
                }
                break;
            }
        }
    };

    // Supressao de viagem Chegada ou Saida
    viewModelTratarAlarme.AlterarChegadaSupressao = function (data) {
        var codigoTerminal = data;
        for (var i = 0; i < viewModelTratarAlarme.Terminais().length; i++) {
            if (viewModelTratarAlarme.Terminais()[i].Codigo() === codigoTerminal()) {
                viewModelTratarAlarme.Terminais()[i].ChegadaSuprimida(viewModelTratarAlarme.Terminais()[i].ChegadaSuprimida() == 'F' ? 'T' : 'F');

                if (viewModelTratarAlarme.Terminais()[i].ChegadaSuprimida() == 'T') {
                    viewModelTratarAlarme.Terminais()[i].ChegadaAnulada('F');
                    viewModelTratarAlarme.Terminais()[i].ChegadaQuebraPlanejamento('F');
                }
                break;
            }
        }
    };

    viewModelTratarAlarme.AlterarSaidaSupressao = function (data) {
        var codigoTerminal = data;
        for (var i = 0; i < viewModelTratarAlarme.Terminais().length; i++) {
            if (viewModelTratarAlarme.Terminais()[i].Codigo() === codigoTerminal()) {
                viewModelTratarAlarme.Terminais()[i].SaidaSuprimida(viewModelTratarAlarme.Terminais()[i].SaidaSuprimida() == 'F' ? 'T' : 'F');

                if (viewModelTratarAlarme.Terminais()[i].SaidaSuprimida() == 'T') {
                    viewModelTratarAlarme.Terminais()[i].SaidaAnulada('F');
                    viewModelTratarAlarme.Terminais()[i].SaidaQuebraPlanejamento('F');
                }
                break;
            }
        }
    };

    ko.applyBindings(viewModelTratarAlarme, $("#tratamentoAlarme")[0]);

});

function checkValoresTratarAlarme() {
    for (var i in checkRadioElements) {
        $(checkRadioElements[i].Element).click().change();
    }
}


