function VisualizacaoRDPerspectiva(vm) {
    var mSelf = this;

    mSelf.VoltarPaginaInicial = function () { window.open(urlGlobal + "EditorRD", '_self', false); };

    mSelf.CodigoVeiculo = null;
    mSelf.Sessao = null;
    mSelf.Origem = null;

    mSelf.PermissoesUsuario = null;

    /* Para handler da modal de confirmação possuindo a mensagem, a função a ser 
    executada ao confirmar e o valor a ser passado como parâmetro */
    mSelf.Confirmacao = ko.observable("");

    mSelf.HandlerConfirmacao = null;

    mSelf.DataConfirmacao = null;

    mSelf.FuncaoConfirmacao = function () {
        if (mSelf.HandlerConfirmacao) {
            mSelf.HandlerConfirmacao(mSelf.DataConfirmacao);
            $(".mask-modal, .mask-modal .modal-alert-confirm").fadeOut();
        }
    }

    mSelf.AbrirConfirmacao = function (mensagem, funcao, data) {
        vm.Perspectiva.Confirmacao(mensagem);
        vm.Perspectiva.HandlerConfirmacao = funcao;
        vm.Perspectiva.DataConfirmacao = data;

        $(".mask-modal, .mask-modal .modal-alert-confirm").fadeIn();
    };
    /* Fim handler modal de confirmação */

    mSelf.ListaModulosCarregar = ko.observableArray([
        { url: urlGlobal + "EditorRD/EditorRD/CarregarModuloVisualizacaoRD", data: {} }
    ]);

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

    mSelf.Init = function () {
        $(".loading-div").show();

        mSelf.CarregarModulos();

        $(".close-btn").on("click", function () {
            $(this).parent().fadeOut("fast");
            $(".sidebar-btn").next().fadeOut("fast");
            $(".sidebar-btn").removeClass("sidebar-btn-active");
            $(".mask-modal").fadeOut("fast");
        });

        var cls = "user-menu-active-btn";

        $(".user-menu, .user-menu > ul").on("click", function (e) {
            e.stopPropagation();
        });

        $(".user-menu").on("click", function () {
            if ($(".user-menu > ul").is(":hidden")) {
                $(".user-menu > button").addClass(cls);
                $(".user-menu > ul").fadeIn("fast");
                $(".user-menu .user-data .user-name").removeClass("open-user-menu").addClass("close-user-menu");
            } else {
                $(".user-menu > button").removeClass(cls);
                $(".user-menu > ul").fadeOut("fast");
                $(".user-menu .user-data .user-name").removeClass("close-user-menu").addClass("open-user-menu");
            }
        });

        $("body").on("click", function () {
            $(".user-menu > button").removeClass(cls);
            $(".user-menu > ul").fadeOut("fast");
            $(".user-menu .user-data .user-name").removeClass("close-user-menu").addClass("open-user-menu");
        });
    };

    mSelf.CarregarModulos = function () {
        vm.CarregarFuncionalidades(mSelf.ListaModulosCarregar, function (data) {
            if (data) {
                var kojs = ko.mapping.fromJS(data);

                // Iniciar VIEWMODEL Knockout js pelo JSon;
                var vmInit = new window[kojs.ViewModelKnockout()](kojs, mSelf.Data);

                vm.Modulos.push(vmInit);

                vmInit.Init();

                //vm.Modulos(vm.Modulos().sort(function (left, right) {
                //    return left.Ordem == right.Ordem ? 0 : (left.Ordem < right.Ordem ? -1 : 1)
                //}));

                mSelf.CarregarFerramentas();
            }
        });
    };

    mSelf.CarregarFerramentas = function () {
        var countFerramentas = 0;
        vm.CarregarFuncionalidades(mSelf.ListaFerramentasCarregar, function (data) {
            if (data) {
                var kojs = ko.mapping.fromJS(data);

                // Iniciar VIEWMODEL Knockout js pelo JSon;
                var vmInit = new window[kojs.ViewModelKnockout()](kojs);

                vm.Ferramentas.push(vmInit);

                if (countFerramentas == mSelf.ListaFerramentasCarregar().length - 1) {
                    $(".loading-div").hide();
                }

                countFerramentas++;

                vmInit.Init();

                mSelf.ReconfigurarFerramentas(vmInit.FerramentaId());

                //vm.Ferramentas(vm.Ferramentas().sort(function (left, right) {
                //    return left.Ordem == right.Ordem ? 0 : (left.Ordem < right.Ordem ? -1 : 1)
                //}));    
            }
        });
        //if (mSelf.ListaFerramentasCarregar().length == 0) {
        //    $(".loading-div").hide();
        //}
    };

    mSelf.ReconfigurarFerramentas = function (idFerramenta) {

    };
}