function GaleriaFotoTarefa() {

    var mSelf = this;

    mSelf.CodigoTarefa = ko.observable(0);

    mSelf.Setor = ko.observable("");
    mSelf.DataInicioTarefa = ko.observable("");
    mSelf.HoraInicioTarefa = ko.observable("");
    mSelf.DataFimTarefa = ko.observable("");
    mSelf.HoraFimTarefa = ko.observable("");

    mSelf.Fotos = ko.observableArray([]);

    mSelf.DataFoto = ko.observable("01/01/2015");
    mSelf.HoraFoto = ko.observable("00:00");
    mSelf.QtdInicial = ko.observable(0);
    mSelf.QtdTotal = ko.observable(0);

    mSelf.PreviewClick = ko.observable(false);

    mSelf.SlideSelecionado = ko.observable();

    mSelf.CarregarGaleria = function (codigoTarefa, codigoApontamento) {
        if (codigoTarefa == mSelf.CodigoTarefa()) {
            $(".galeria-fotos-tarefas").fadeIn("fast");
            mSelf.SelecionaFoto(codigoApontamento);
        } else {
            $.ajax({
                url: urlGlobal + "DemandaTarefa/Tarefa/CarregarGaleriaTarefa",
                contentType: 'application/json; charset=utf-8',
                dataType: "json",
                type: "GET",
                data: { codigoTarefa: codigoTarefa },
                success: function (ret) {
                    mSelf.Fotos.removeAll();
                    ko.utils.arrayForEach(ret, function (item) {
                        item.Latitude /= 1000000;
                        item.Longitude /= 1000000;
                        mSelf.Fotos.push(item);
                    });

                    if (ret.length > 0) {
                        mSelf.CodigoTarefa(codigoTarefa);
                        mSelf.QtdInicial(1);
                        mSelf.QtdTotal(ret.length);

                        mSelf.Registrar(codigoApontamento);

                        $(".galeria-fotos-tarefas").fadeIn("fast");
                        mSelf.SelecionaFoto(codigoApontamento, true);

                    } else {
                        vm.ShowMensagemAlerta("A tarefa selecionada não possui fotos!");
                    }
                }
            });
        }

    };

    mSelf.SelecionaFoto = function (codigoApontamento, registro) {
        var currentSlide = 0;

        if (codigoApontamento) {
            var foto = ko.utils.arrayFirst(mSelf.Fotos(), function (item) {
                return item.ApontamentoTarefa.Codigo == codigoApontamento;
            });
            currentSlide = mSelf.Fotos().indexOf(foto);
        } else {
            var foto = mSelf.Fotos()[0];
        }

        if (!registro) {
            var slide = $('#slider').data('flexslider');
            slide.flexAnimate(currentSlide);
        }

        if (foto) {
            mSelf.DataFoto(foto.DataFoto);
            mSelf.HoraFoto(foto.HoraFoto);

            mSelf.Setor(foto.Setor);

            mSelf.DataInicioTarefa(foto.DataInicioTarefa);
            mSelf.HoraInicioTarefa(foto.HoraInicioTarefa);
            mSelf.DataFimTarefa(foto.DataFimTarefa);
            mSelf.HoraFimTarefa(foto.HoraFimTarefa);
        }

        mSelf.SlideSelecionado(currentSlide + 1);
        mSelf.QtdInicial(mSelf.SlideSelecionado());
    };

    mSelf.ClickImagemPreview = function (data, evt) {

        mSelf.DataFoto(data.DataFoto);
        mSelf.HoraFoto(data.HoraFoto);

        mSelf.Setor(data.Setor);

        mSelf.DataInicioTarefa(data.DataInicioTarefa);
        mSelf.HoraInicioTarefa(data.HoraInicioTarefa);
        mSelf.DataFimTarefa(data.DataFimTarefa);
        mSelf.HoraFimTarefa(data.HoraFimTarefa);

        var index = mSelf.Fotos.indexOf(data);
        mSelf.SlideSelecionado(index);
        mSelf.QtdInicial(index + 1);

        mSelf.PreviewClick(true);
    };

    mSelf.Registrar = function (codigoApontamento) {

        $("#galeria_fotos_tarefa").empty();

        var elemento = $($("#template-galeria-tarefa").html());

        ko.applyBindings(vm.Perspectiva.GaleriaTarefa, elemento[0]);

        elemento.appendTo("#galeria_fotos_tarefa");

        $('#carousel').flexslider({
            animation: "slide",
            controlNav: false,
            animationLoop: false,
            slideshow: false,
            itemWidth: 155,
            itemMargin: 24,
            asNavFor: '#slider'
        });

        $('#slider').flexslider({
            animation: "slide",
            controlNav: false,
            animationLoop: false,
            slideshow: false,
            sync: "#carousel",
            start: function (slider) {
                $('body').removeClass('loading');
                $('.flex-nav-next').on('click', function (e) {
                    mSelf.NavegacaoGaleria(true);
                });
                $('.flex-nav-prev').on('click', function (e) {
                    mSelf.NavegacaoGaleria(false);
                });
                if (codigoApontamento)
                    mSelf.SelecionaFoto(codigoApontamento);
            },
        });

        $(".icon-x-button").on("click", function () {
            $(".galeria-fotos-tarefas").fadeOut("fast");
        });

        mSelf.SlideSelecionado(1);
    };

    mSelf.NavegacaoGaleria = function (isNext) {
        var totalFotos = mSelf.Fotos().length;
        var idx = mSelf.SlideSelecionado();

        if (mSelf.PreviewClick())
            idx++;

        if (isNext) {
            if (idx >= totalFotos)
                idx = 1;
            else
                ++idx;
            mSelf.QtdInicial(idx);
        }
        else {
            if (idx <= 1)
                idx = 1;
            else
                --idx;
            mSelf.QtdInicial(idx);
        }
        mSelf.SlideSelecionado(idx);

        mSelf.SelecionaFoto(mSelf.Fotos()[idx - 1].ApontamentoTarefa.Codigo);

        mSelf.PreviewClick(false);
    };

    mSelf.AtualizarGaleria = function (novaFoto) {
        mSelf.Fotos.push(novaFoto);

        mSelf.Registrar();

        //$(".galeria-fotos-tarefas").fadeIn("fast");

        mSelf.SelecionaFoto(mSelf.SlideSelecionado());
    };
}