var AgenteCertisign = {
    SelectedRow: "",
    SelectedIndex: "",
    FlowNumber: 0,
    NextAction: "",
    BackAction: "",
    ActualAction: "",
    listFiles: null,
    parameters: "",
    config: {
        container: "",
        language: "",
        repositoryType: "REPO",
        isShowDataToSign: true,
        isShowCertificate: true,
        fieldReturn: "",
        strToSign: "",
        digestAlgorith: "SHA1",
        hasSigningTime: true,
        verifyBeforeValidateDays: "",
        beforeValidateCallback: "",
        keepSelectedAlive: "",
        policyPass: "",
        formToPost: "",
        initializeCallback: "",
        loginType: "",
        templateCertDetail: "",
        keyusage: "",
        ExtendedKeyusage: "",
        isICP: false,
        certificateType: "",
        OIDDiretiva: "",
        isAttachedFile: false,
        uploadURL: "",
        file0: "", url0: "", file1: "", url1: "", file2: "", url2: "", file3: "", url3: "", file4: "", url4: "", file5: "", url5: "", file6: "", url6: "",
        file7: "", url7: "", file8: "", url8: "", file9: "", url9: "",
        codebase: ""
    },
    createAppletObject: function() {
        var attributes = { code: 'AgenteCertisign.class',
            archive: 'AgenteCertisign17.jar',
            codebase: AgenteCertisign.config.codebase,
            width: 1, height: 1,
            mayscript: 'true',
            name: 'oApplet'
        };
        var parameters = { REPOSITORYTYPE: AgenteCertisign.config.repositoryType, HASSIGNINGTIME: AgenteCertisign.config.hasSigningTime,
            DIGESTALGORITHM: AgenteCertisign.config.digestAlgorith, ISATTACHEDFILE: AgenteCertisign.config.isAttachedFile,
            UPLOADURL: AgenteCertisign.config.uploadURL, FILE_0: AgenteCertisign.config.file0, URL_0: AgenteCertisign.config.url0,
            FILE_1: AgenteCertisign.config.file1, URL_1: AgenteCertisign.config.url1,
            FILE_2: AgenteCertisign.config.file2, URL_2: AgenteCertisign.config.url2,
            FILE_3: AgenteCertisign.config.file3, URL_3: AgenteCertisign.config.url3,
            FILE_4: AgenteCertisign.config.file4, URL_4: AgenteCertisign.config.url4,
            FILE_5: AgenteCertisign.config.file5, URL_5: AgenteCertisign.config.url5,
            FILE_6: AgenteCertisign.config.file6, URL_6: AgenteCertisign.config.url6,
            FILE_7: AgenteCertisign.config.file7, URL_7: AgenteCertisign.config.url7,
            FILE_8: AgenteCertisign.config.file8, URL_8: AgenteCertisign.config.url8,
            FILE_9: AgenteCertisign.config.file9, URL_9: AgenteCertisign.config.url9
        };
        var version = '1.5.0';
        deployJava.runApplet(attributes, parameters, version);
    },
    createPanel: function() {
        var divBox = document.createElement("DIV");
        divBox.id = "CertPanel";
        var html = '<div id="CertPanelRound">' +
            '<div class="top"><span></span></div>' +
            '<div class="center-content">' +
            '<div class="header">' +
            '<div class="logo">&nbsp</div>' +
            '<div class="title" id="BoxTitle">' + Language.UI.Title + '</div>' +
            '</div>' +
            '<div id="UIContent"> </div>' +
            '<div class="footer">' +
            '<a href="#" class="close" id="btClose" onclick="AgenteCertisign.closePanel()"> ' + Language.UI.BtCancel +
            '</a>' +
            '<a href="#" class="btNext_hidden" id="btNext"> ' + Language.UI.BtNext + ' </a>' +
            '<a href="#" class="btBack_hidden" id="btBack"> ' + Language.UI.BtBack + ' </a>' +
            '</div>' +
            '</div>' +
            '<div class="bottom"><span></span></div>' +
            '</div>';
        divBox.innerHTML = html;
        if (AgenteCertisign.config.container != "") {
            document.getElementById(AgenteCertisign.config.container).appendChild(divBox);
        }
        else {
            document.body.appendChild(divBox);
        }
    },
    initialize: function() {
        AgenteCertisign.createPanel();
        AgenteCertisign.createAppletObject();
        if (AgenteCertisign.initializeCallback != "") {
            AgenteCertisign.startTimer("AgenteCertisign.checkInitialize()", 1000);
        }
    },
    checkInitialize: function() {
        var obj = document.applets['oApplet'];
        if (obj.isStarted() == true) {
            eval(AgenteCertisign.config.initializeCallback);
            AgenteCertisign.stopTimer();
        }
    },
    setEvent: function(elemento, evento, funcao) {
        if (elemento.addEventListener) elemento.addEventListener(evento, funcao, false);
        if (elemento.attachEvent) elemento.attachEvent("on" + evento, funcao);
    },
    TimerID: 0,

    startTimer: function(callback, timer) {
        //callback = "AgenteCertisign.StartTimer()"
        // timer = 1000
        AgenteCertisign.TimerID = setTimeout(callback, timer);
    },
    stopTimer: function() {
        if (AgenteCertisign.TimerID) {
            clearTimeout(AgenteCertisign.TimerID);
            AgenteCertisign.TimerID = 0;
        }
    },
    rowOver: function(obj) {
        var id = obj.id;
        var strs = id.split('_');
        var cel1 = document.getElementById('rw_' + strs[1] + '_0');
        var cel2 = document.getElementById('rw_' + strs[1] + '_1');
        var cel3 = document.getElementById('rw_' + strs[1] + '_2');
        var classatual = cel1.className;
        var newclass = 'tdOver';
        if (classatual == 'tdClickOut') {
            newclass = 'tdClickOver'
        }
        cel1.className = newclass;
        cel2.className = newclass;
        cel3.className = newclass;
    },
    rowOut: function(obj) {
        var id = obj.id;
        var strs = id.split('_');
        var cel1 = document.getElementById('rw_' + strs[1] + '_0');
        var cel2 = document.getElementById('rw_' + strs[1] + '_1');
        var cel3 = document.getElementById('rw_' + strs[1] + '_2');
        var classatual = cel1.className;
        var newclass = 'tdOut1';
        if (classatual == 'tdClickOver') {
            newclass = 'tdClickOut'
        }
        cel1.className = newclass;
        cel2.className = newclass;
        cel3.className = newclass;
    },
    rowClick: function(obj) {
        var id = obj.id;
        var strs = id.split('_');
        var cel1 = document.getElementById('rw_' + strs[1] + '_0');
        var cel2 = document.getElementById('rw_' + strs[1] + '_1');
        var cel3 = document.getElementById('rw_' + strs[1] + '_2');
        var classatual = cel1.className;
        var newclass = '';
        var btOk = document.getElementById("btNext");

        if (classatual == 'tdClickOver') {
            newclass = 'tdOver';
            if (AgenteCertisign.SelectedRow == id) {
                AgenteCertisign.SelectedRow = "";
                btOk.className = "btNext_disable";
            }
        }
        else {
            if (id != AgenteCertisign.SelectedRow) {
                newclass = 'tdClickOver';
                if (AgenteCertisign.SelectedRow != "") {
                    var str2 = AgenteCertisign.SelectedRow.split('_');
                    var celat1 = document.getElementById('rw_' + str2[1] + '_0');
                    var celat2 = document.getElementById('rw_' + str2[1] + '_1');
                    var celat3 = document.getElementById('rw_' + str2[1] + '_2');

                    celat1.className = "tdOut1";
                    celat2.className = "tdOut1";
                    celat3.className = "tdOut1";
                }
                AgenteCertisign.SelectedRow = id;
                btOk.className = "btNext_enable";
            }
        }
        cel1.className = newclass;
        cel2.className = newclass;
        cel3.className = newclass;
    },
    closePanel: function() {
        
        AgenteCertisign.FlowNuber = 0;
        document.getElementById("CertPanel").style.visibility = "hidden";
        document.getElementById("UIContent").innerHTML = "";
        
        if(document.getElementById("hidConfigureButton")!=null && document.getElementById("hidConfigureButton")!=undefined)
           document.getElementById("hidConfigureButton").value = "";
            
        //  var btOk = document.getElementById("btAccess");
        if (AgenteCertisign.SelectedRow != "") {
            AgenteCertisign.SelectedRow = "";
            //  btOk.className = "ok_hidden";                  
        }
        AgenteCertisign.FlowNumber = 0;
        //btOk.style.visibility = "hidden";              
        return false;
    },
    listCertificates: function() {
        var btNext = document.getElementById("btNext");
        var btBack = document.getElementById("btBack");
        btNext.className = "btNext_disable";
        btBack.className = "btBack_hidden";
        var obj = document.applets['oApplet'];
        document.getElementById("UIContent").innerHTML = '<div class="loading">&nbsp;</div>';

        try {
            var strObj = obj.getJSONCertificates();
            var KEYSTORE = eval('(' + strObj.substring(10, strObj.length() - 1) + ')');
        }
        catch (Error) {
            eval(obj.getJSONCertificates());
        }

        var divUI = document.getElementById("UIContent");
        divUI.innerHTML = "";

        var divContainer = document.createElement("DIV");
        divContainer.className = "tableContainer";
        divUI.appendChild(divContainer);

        var strTable = '<table class="Grid" cellpadding="0" cellspacing="0">' +
            '<tr>' +
            '<td class="tdTitle1">' + Language.UI.Subject + '<td>' +
            '<td class="tdTitle2">' + Language.UI.Issuer + '<td>' +
            '<td class="tdTitle3">' + Language.UI.NotAfter + '<td>' +
            '</tr>';

        for (i = 0; i < KEYSTORE.Certificates.length; i++) {
            if (AgenteCertisign.config.isICP == true) {
                if (KEYSTORE.Certificates[i].IsICP == 'true') {
                    strTable += '<tr id="rw' + i + '">' +
                        '<td id="rw_' + i + '_0" onmouseover="AgenteCertisign.rowOver(this)" onmouseout="AgenteCertisign.rowOut(this)" onclick="AgenteCertisign.rowClick(this)" class="tdOut1">' + KEYSTORE.Certificates[i].Alias + '<td>' +
                        '<td id="rw_' + i + '_1" onmouseover="AgenteCertisign.rowOver(this)" onmouseout="AgenteCertisign.rowOut(this)" onclick="AgenteCertisign.rowClick(this)" class="tdOut1">' + KEYSTORE.Certificates[i].EmitidoPor + '<td>' +
                        '<td id="rw_' + i + '_2" onmouseover="AgenteCertisign.rowOver(this)" onmouseout="AgenteCertisign.rowOut(this)" onclick="AgenteCertisign.rowClick(this)" class="tdOut1">' + KEYSTORE.Certificates[i].ValidoAte + '<td>' +
                        '</tr>';

                }
            }
            else {
                strTable += '<tr id="rw' + i + '">' +
                    '<td id="rw_' + i + '_0" onmouseover="AgenteCertisign.rowOver(this)" onmouseout="AgenteCertisign.rowOut(this)" onclick="AgenteCertisign.rowClick(this)" class="tdOut1">' + KEYSTORE.Certificates[i].Alias + '<td>' +
                    '<td id="rw_' + i + '_1" onmouseover="AgenteCertisign.rowOver(this)" onmouseout="AgenteCertisign.rowOut(this)" onclick="AgenteCertisign.rowClick(this)" class="tdOut1">' + KEYSTORE.Certificates[i].EmitidoPor + '<td>' +
                    '<td id="rw_' + i + '_2" onmouseover="AgenteCertisign.rowOver(this)" onmouseout="AgenteCertisign.rowOut(this)" onclick="AgenteCertisign.rowClick(this)" class="tdOut1">' + KEYSTORE.Certificates[i].ValidoAte + '<td>' +
                    '</tr>';

            }
        }

        strTable += '</table>';

        divContainer.innerHTML = strTable;


        if (KEYSTORE.Certificates.length == 0) {
            var divAlert = document.createElement("DIV");
            divAlert.innerHTML = "<p align='center'>" + Language.Messages.CertificateNotFound + "</p>";
            divContainer.appendChild(divAlert);
        }

        AgenteCertisign.SelectedRow = "";
        AgenteCertisign.SelectedIndex = "";

    },
    showCertificateDetail: function() {
        var index;
        if (document.getElementById(AgenteCertisign.SelectedRow) != null) {
            var idrow = document.getElementById(AgenteCertisign.SelectedRow).id;
            index = idrow.split('_')[1];
            AgenteCertisign.SelectedIndex = index;
        }
        else {
            index = AgenteCertisign.SelectedIndex
        }

        var divUI = document.getElementById("UIContent");
        divUI.innerHTML = '<div class="loading">&nbsp;</div>';

        var template = '';
        if (AgenteCertisign.config.templateCertDetail == "") {
            template = '<div style="padding:10px">' +
                '<h3>' + Language.UI.Title_CertDetail + '</h3>' +
                '<p>' + '<b>' + Language.UI.Subject + ':</b> ##ALIAS##</p>' +
            //                '<p>' + '<b>Tipo:</b> ##TIPOCERTIFICADO##</p>' +
                '<p>' + '<b>' + Language.UI.Issuer + ':</b> ##EMITIDOPOR##</p>' +
                '<p>' + '<b>' + Language.UI.NotAfter + ':</b> ##VALIDOATE##</p>';
        }
        else {
            template = document.getElementById(AgenteCertisign.config.templateCertDetail).innerHTML;
        }
        divUI.innerHTML = AgenteCertisign.parseTemplate(template, index);

    },
    showDataToSign: function() {
        var divUI = document.getElementById("UIContent");
        divUI.innerHTML = "";

        var h3titulo = document.createElement("h3");
        h3titulo.innerHTML = Language.UI.Title_ShowData;

        divUI.appendChild(h3titulo);

        var divData = document.createElement("DIV");
        divData.innerHTML = AgenteCertisign.config.strToSign;
        divUI.appendChild(divData);

        if (AgenteCertisign.config.repositoryType == "CAPI" || AgenteCertisign.config.repositoryType == "TOKEN") {
            document.getElementById("btNext").onclick = AgenteCertisign.executeSign;
        }
        else {
            document.getElementById("btNext").onclick = AgenteCertisign.showGetPIN;
        }
        document.getElementById("btBack").onclick = AgenteCertisign.showCertificateDetail;
    },

    showGetPIN: function() {
        var divUI = document.getElementById("UIContent");
        divUI.innerHTML = "";

        var h3titulo = document.createElement("h3");
        if (AgenteCertisign.config.repositoryType == "TOKEN") {
            h3titulo.innerHTML = Language.UI.Title_GetPin;
        }
        else {
            h3titulo.innerHTML = Language.UI.Title_GetPass;
        }

        divUI.appendChild(h3titulo);

        var tagp = document.createElement("P");

        var taglabel = document.createElement("SPAN");
        taglabel.innerHTML = "Senha:";

        var campo = document.createElement("INPUT");
        campo.setAttribute("id", "txtCertPIN");
        campo.setAttribute("type", "password");

        tagp.appendChild(taglabel);
        tagp.appendChild(campo);

        divUI.appendChild(tagp);
    },
    setPIN: function() {
        var obj = document.applets['oApplet'];
        obj.setPIN(document.getElementById("txtCertPIN").value);
    },
    showImport: function() {
        //var obj = document.applets['oApplet'];
        //obj.showImport();   
        document.getElementById("btNext").innerHTML = "Importar";
        document.getElementById("btNext").className = "btNext_enable";
        document.getElementById("btNext").onclick = AgenteCertisign.importCertificate;
        document.getElementById("BoxTitle").innerHTML = "Importar certificado";
        document.getElementById("CertPanel").style.visibility = "visible";
        var divUI = document.getElementById("UIContent");
        divUI.innerHTML = "";
        var str = '<p><span class="labelleft">Arquivo a ser importado: </span><input type="text" value="" id="txtFileImp"><input type="button" value="..." id="btSearch" onclick="AgenteCertisign.showFileChooser();"></p>' +
            '<p><span class="labelleft">Senha do arquivo : </span><input type="password" value="" id="txtPassImp"></p>' +
            '<p><span class="labelleft">Nova senha: </span><input type="password" value="" id="txtNewPassImp"></p>';
        divUI.innerHTML = str;
    },
    showFileChooser: function() {
        var obj = document.applets['oApplet'];
        var result = obj.showFileChooser("Selecione o certificado", "pfx;p12", "Troca de informações pessoais");
        document.getElementById("txtFileImp").value = result;
        document.getElementById("txtPassImp").focus();
    },
    importCertificate: function() {
        document.getElementById("btNext").className = "btNext_hidden";
        document.getElementById("btClose").innerHTML = "Fechar";
        var path = document.getElementById("txtFileImp").value;
        var pass = document.getElementById("txtPassImp").value;
        var newpass = document.getElementById("txtNewPassImp").value;
        var obj = document.applets['oApplet'];
        if (newpass == "") newpass = pass;
        var result = obj.importCertificate(path, pass, newpass);
        var divUI = document.getElementById("UIContent");
        divUI.innerHTML = "";
        var msg = "";
        if (result == "OK") {
            msg = '<span class="labelOK">Certificado importado com sucesso !</span>';
        } else {
            msg = '<span class="labelError">' + result + '</span>';
        }
        var str = '<div>' + msg + '</div>';
        divUI.innerHTML = str;
    },
    showExport: function() {
        var btNext = document.getElementById("btNext");
        var btBack = document.getElementById("btBack");

        btNext.value = Language.UI.BtNext;
        document.getElementById("BoxTitle").innerHTML = "Exportar certificado";
        document.getElementById("CertPanel").style.visibility = "visible";

        if (AgenteCertisign.FlowNumber == 0) {
            btNext.className = "btNext_disable";
            btBack.className = "btBack_hidden";
            btNext.onclick = AgenteCertisign.showExport;
            AgenteCertisign.listCertificates();
            AgenteCertisign.FlowNumber = 1;
        }
        else if (AgenteCertisign.FlowNumber == 1) {
            if (AgenteCertisign.config.repositoryType == "REPO") {
                btBack.className = "btBack_enable";
                btBack.onclick = AgenteCertisign.backFlow;
                AgenteCertisign.BackAction = "AgenteCertisign.showExport();";
                AgenteCertisign.showGetPIN();
                AgenteCertisign.FlowNumber = 2;
            }
            else {
                AgenteCertisign.SelectedIndex = AgenteCertisign.getIndex();
                AgenteCertisign.FlowNumber = 2;
                AgenteCertisign.showExport();
            }
        }
        else if (AgenteCertisign.FlowNumber == 2) {
            if (AgenteCertisign.config.repositoryType == "REPO") {
                AgenteCertisign.setPIN();
            }
            btBack.className = "btBack_enable";
            btBack.onclick = AgenteCertisign.backFlow;
            AgenteCertisign.showGetFilePass();
            AgenteCertisign.BackAction = "AgenteCertisign.showExport();";
            AgenteCertisign.FlowNumber = 3;
        }
        else if (AgenteCertisign.FlowNumber == 3) {
            btBack.className = "btBack_hidden";
            AgenteCertisign.exportCertificate();
        }

    },
    backFlow: function() {
        AgenteCertisign.FlowNumber = AgenteCertisign.FlowNumber - 2;
        eval(AgenteCertisign.BackAction);
    },
    showGetFilePass: function() {
        var divUI = document.getElementById("UIContent");
        divUI.innerHTML = "";
        var str = '<div>Digite a senha de proteção do arquivo: <INPUT type="password" value="" id="txtFilePass"></div>';
        divUI.innerHTML = str;
        document.getElementById("btNext").innerHTML = "Exportar";
    },
    getIndex: function() {
        var index;
        if (document.getElementById(AgenteCertisign.SelectedRow) != null) {
            var idrow = document.getElementById(AgenteCertisign.SelectedRow).id;
            index = idrow.split('_')[1];
            AgenteCertisign.SelectedIndex = index;
        }
        else {
            index = AgenteCertisign.SelectedIndex
        }
        return index;
    },
    exportCertificate: function() {
        var obj = document.applets['oApplet'];
        document.getElementById("btNext").className = "btNext_hidden";
        document.getElementById("btClose").innerHTML = "Fechar";
        try {
            var strObj = obj.getJSONCertificates();
            var KEYSTORE = eval('(' + strObj.substring(10, strObj.length() - 1) + ')');
        }
        catch (Error) {
            eval(obj.getJSONCertificates());
        }
        var index = AgenteCertisign.SelectedIndex;

        obj.setSerialNumber(KEYSTORE.Certificates[index].SerialNumber);
        var filepass = document.getElementById("txtFilePass").value;
        var result = obj.exportCertificate(filepass, KEYSTORE.Certificates[index].Alias);

        var divUI = document.getElementById("UIContent");
        divUI.innerHTML = "";
        var msg = "";
        if (result == "OK") {
            msg = '<span class="labelOK">Certificado exportado com sucesso !</span>';
        } else {
            msg = '<span class="labelError">' + result + '</span>';
        }
        var str = '<div>' + msg + '</div>';
        divUI.innerHTML = str;
    },
    parseTemplate: function(template, index) {

        var obj = document.applets['oApplet'];
        try {
            var strObj = obj.getJSONCertificates();
            var KEYSTORE = eval('(' + strObj.substring(10, strObj.length() - 1) + ')');
        }
        catch (Error) {
            eval(obj.getJSONCertificates());
        }

        template = template.replace("##ALIAS##", KEYSTORE.Certificates[index].Alias);
        template = template.replace("##EMITIDOPOR##", KEYSTORE.Certificates[index].EmitidoPor);
        template = template.replace("##VALIDOATE##", KEYSTORE.Certificates[index].ValidoAte);
        template = template.replace("##VALIDODE##", KEYSTORE.Certificates[index].ValidoDe);
        template = template.replace("##SERIALNUMBER##", KEYSTORE.Certificates[index].SerialNumber);
        template = template.replace("##VERSION##", KEYSTORE.Certificates[index].Version);
        if (KEYSTORE.Certificates[index].Type == null) {
            template = template.replace("##TYPE##", "");
        }
        else {
            template = template.replace("##TYPE##", KEYSTORE.Certificates[index].Type);
        }
        template = template.replace("##EMAIL##", KEYSTORE.Certificates[index].Email);
        template = template.replace("##CPF##", KEYSTORE.Certificates[index].CPF);
        template = template.replace("##CNPJ##", KEYSTORE.Certificates[index].CNPJ);
        template = template.replace("##DATANASCIMENTO##", KEYSTORE.Certificates[index].DataNascimento);
        template = template.replace("##MUNICIPIOELEITOR##", KEYSTORE.Certificates[index].MunicipioEleitor);
        template = template.replace("##NOMERESPONSAVEL##", KEYSTORE.Certificates[index].NomeResponsavel);
        template = template.replace("##ORGAOEXPEDIDOR##", KEYSTORE.Certificates[index].OrgaoExpedidor);
        template = template.replace("##PIS##", KEYSTORE.Certificates[index].PIS);
        template = template.replace("##RG##", KEYSTORE.Certificates[index].RG);
        template = template.replace("##RAZAOSOCIAL##", KEYSTORE.Certificates[index].RazaoSocial);
        template = template.replace("##SECAO##", KEYSTORE.Certificates[index].Secao);
        template = template.replace("##TITULOELEITOR##", KEYSTORE.Certificates[index].TituloEleitor);
        template = template.replace("##UF##", KEYSTORE.Certificates[index].UF);
        template = template.replace("##UFELEITOR##", KEYSTORE.Certificates[index].UFEleitor);
        template = template.replace("##ZONA##", KEYSTORE.Certificates[index].Zona);
        template = template.replace("##TIPOCERTIFICADO##", KEYSTORE.Certificates[index].TipoCertificado);
        var keyusage = '<ul>';
        for (i = 0; i < KEYSTORE.Certificates[index].Keyusage.length; i++) {
            keyusage += '<li>' + KEYSTORE.Certificates[index].Keyusage[i] + "</li>";
        }
        keyusage += '</ul>';
        template = template.replace("##KEYUSAGE##", keyusage);

        var extkeyusage = '<ul>';
        for (i = 0; i < KEYSTORE.Certificates[index].ExtendedKeyUsage.length; i++) {
            extkeyusage += '<li>' + KEYSTORE.Certificates[index].ExtendedKeyUsage[i] + "</li>";
        }
        extkeyusage += '</ul>';
        template = template.replace("##EXTKEYUSAGE##", extkeyusage);

        return template;
    },
    showConfig: function() {
        //var obj = document.applets['oApplet'];
        //obj.showImport();   
        document.getElementById("btNext").innerHTML = "Salvar";
        document.getElementById("btNext").className = "btNext_enable";
        document.getElementById("btNext").onclick = AgenteCertisign.saveConfig;
        document.getElementById("BoxTitle").innerHTML = "Configurar token";
        document.getElementById("CertPanel").style.visibility = "visible";
        var divUI = document.getElementById("UIContent");
        divUI.innerHTML = "";

        var obj = document.applets['oApplet'];
        var result = obj.loadConfig();
        var desc = "";
        var path = "";
        if (result != "") {
            desc = result.split("##")[0].replace("name=", "");
            path = result.split("##")[1].replace("library=", "");
        }
        var str = '<p><span class="labelleft">Descrição do token : </span><input type="text" value="' + desc + '" id="txtDescConf"></p>' +
            '<p><span class="labelleft">Local da Arquivo a ser importado: </span><input type="text" value="' + path + '" id="txtLibConf"><input type="button" value="..." id="btSearch" onclick="AgenteCertisign.showLibChooser();"></p>';
        divUI.innerHTML = str;
    },
    showLibChooser: function() {
        var obj = document.applets['oApplet'];
        var result = obj.showFileChooser("Selecione a biblioteca do token", "so;dll", "Biblioteca de acesso ao token");
        document.getElementById("txtLibConf").value = result;
    },
    saveConfig: function() {
        document.getElementById("btNext").className = "btNext_hidden";
        document.getElementById("btClose").innerHTML = "Fechar";
        var desc = document.getElementById("txtDescConf").value;
        var path = document.getElementById("txtLibConf").value;

        var obj = document.applets['oApplet'];
        var result = obj.saveConfig(desc, path);
        var divUI = document.getElementById("UIContent");
        divUI.innerHTML = "";
        var msg = "";
        if (result.indexOf("Error=") >= 0) {
            msg = '<span class="labelError">' + result.substring(6) + '</span>';
        } else {
            msg = '<span class="labelOK">' + result + '</span>';
        }
        var str = '<div>' + msg + '</div>';
        divUI.innerHTML = str;
    },
    addFileToSign: function() {
        var obj = document.applets['oApplet'];
        var result = obj.showFileChooser("Selecione um arquivo", "", "");
        return result;
    },
    setListFiles: function(arr) {
        AgenteCertisign.listFiles = arr;
    },
    setParameters: function(par) {
        AgenteCertisign.parameters = par;
    },
    signFiles: function() {
        var btNext = document.getElementById("btNext");
        var btBack = document.getElementById("btBack");

        btNext.value = Language.UI.BtNext;
        document.getElementById("BoxTitle").innerHTML = Language.UI.Title_LoginCAPI;
        document.getElementById("CertPanel").style.visibility = "visible";

        if (AgenteCertisign.FlowNumber == 0) {
            if (AgenteCertisign.config.repositoryType != "TOKEN") {
                btNext.className = "btNext_disable";
                btBack.className = "btBack_hidden";
                btNext.onclick = AgenteCertisign.signFiles;
                AgenteCertisign.listCertificates();
                AgenteCertisign.FlowNumber = 1;
            }
            else {
                btNext.className = "btNext_disable";
                btBack.className = "btBack_hidden";
                btNext.onclick = AgenteCertisign.signFiles;
                AgenteCertisign.showGetPIN();
                AgenteCertisign.FlowNumber = 1;
            }
        }
        else if (AgenteCertisign.FlowNumber == 1) {
            if (AgenteCertisign.config.isShowCertificate) {
                AgenteCertisign.showCertificateDetail();
                btBack.className = "btBack_enable";
                btBack.onclick = AgenteCertisign.listCertificates;
                AgenteCertisign.FlowNumber = 2;
            }
            else {
                if (AgenteCertisign.config.repositoryType == "REPO") {
                    AgenteCertisign.showGetPIN();
                    AgenteCertisign.NextAction = "AgenteCertisign.signFiles()";
                    AgenteCertisign.FlowNumber = 3;
                }
            }
        }
        else if (AgenteCertisign.FlowNumber == 2) {
            if (AgenteCertisign.config.repositoryType == "REPO") {
                AgenteCertisign.showGetPIN();
                AgenteCertisign.NextAction = "AgenteCertisign.signFiles()";
                AgenteCertisign.FlowNumber = 3;
            }
            else {
                AgenteCertisign.executeSignFiles();
            }
        }
        else if (AgenteCertisign.FlowNumber == 3) {
            if (AgenteCertisign.config.repositoryType == "REPO") {
                var obj = document.applets['oApplet'];
                obj.setPIN(document.getElementById("txtCertPIN").value);
            }
            AgenteCertisign.executeSignFiles();
        }
    },
    executeSignFiles: function() {
        var index = AgenteCertisign.SelectedIndex;
        document.getElementById("btNext").className = "btNext_hidden";
        document.getElementById("btBack").className = "btNext_hidden";
        document.getElementById("btClose").innerHTML = "fechar";
        document.getElementById("btClose").onclick = AgenteCertisign.postForm;
        var divUI = document.getElementById("UIContent");
        divUI.innerHTML = "";
        var str = '<div class="loading">&nbsp;</div>' +
            '<div style="text-align:center;font-size:12px;" id="msgSign">' + Language.Messages.SigningFile + '</div>';
        divUI.innerHTML = str;
        var obj = document.applets['oApplet'];

        try {
            var strObj = obj.getJSONCertificates();
            var KEYSTORE = eval('(' + strObj.substring(10, strObj.length() - 1) + ')');
        }
        catch (Error) {
            eval(obj.getJSONCertificates());
        }

        obj.setSerialNumber(KEYSTORE.Certificates[index].SerialNumber);

        document.getElementById("msgSign").innerHTML = Language.Messages.SigningFile;
        var errorControl = 0;
        for (i = 0; i < AgenteCertisign.listFiles.length; i++) {
            var cont = i + 1;
            document.getElementById("msgSign").innerHTML = Language.Messages.SigningFile + ' - ' + listFiles[i] + "<BR>" + cont + " de " + AgenteCertisign.listFiles.length;
            var result = obj.signUploadFile(listFiles[i], AgenteCertisign.parameters);
            if (result.substring(0, 2) == "OK") {
                document.getElementById("msgSign").innerHTML = Language.Messages.FileSignUpload;
            }
            else {
                document.getElementById("msgSign").innerHTML = result;
                errorControl = 1;
                break;
            }
        }
        if (errorControl == 0) {
            divUI.innerHTML = '<div style="text-align:center;font-size:12px;">' + Language.Messages.SignSucess_1 + '</div>';

            if (AgenteCertisign.config.formToPost != "") {
                AgenteCertisign.postForm();
            }
        }

    },
    postForm: function() {
        if (AgenteCertisign.config.formToPost != "") {
            var frm = document.getElementById(AgenteCertisign.config.formToPost);
            frm.submit();
        }
    },
    downloadAndSign: function() {
        AgenteCertisign.ActualAction = "AgenteCertisign.executeDownAndSign()";
        AgenteCertisign.selectCertificate();
    },
    executeDownAndSign: function() {
        if (AgenteCertisign.SelectedIndex != "") {
            var index = AgenteCertisign.SelectedIndex;
            //eval (document.applets['oApplet'].getBufferCertificates());    
            var obj = document.applets['oApplet'];
            document.getElementById("UIContent").innerHTML = '<div class="loading">&nbsp;</div>' +
                '<div style="text-align:center">Obtendo arquivo(s) e gerando assinatura !</div>';

            try {
                var strObj = obj.getJSONCertificates();
                var KEYSTORE = eval('(' + strObj.substring(10, strObj.length() - 1) + ')');
            }
            catch (Error) {
                eval(obj.getJSONCertificates());
            }

            obj.setSerialNumber(KEYSTORE.Certificates[index].SerialNumber);
            var result = obj.downloadAndSign(AgenteCertisign.parameters);
            if (result.substring(0, 5) == "ERRO=") {
                document.getElementById("UIContent").innerHTML = '<div>' + result + '</div>';
            }
            else {
                document.getElementById("UIContent").innerHTML = '<div style="text-align:center">Arquivo(s) assinado(s) !</div>';
                if (AgenteCertisign.config.formToPost != "") {
                    AgenteCertisign.postForm();
                }
            }
        }
        return false;
    },
    signString: function(str) {
        if (str == "") {
            alert("String a ser assinada não pode ser vazia !");
        }
        AgenteCertisign.config.strToSign = str;
        AgenteCertisign.ActualAction = "AgenteCertisign.executeSign()";
        AgenteCertisign.selectCertificate();
    },
    executeSign: function() {
        if (AgenteCertisign.SelectedIndex != "") {
            var index = AgenteCertisign.SelectedIndex;
            //eval (document.applets['oApplet'].getBufferCertificates());    
            var obj = document.applets['oApplet'];
            document.getElementById("UIContent").innerHTML = '<div class="loading">&nbsp;</div>' +
                '<div style="text-align:center">' + Language.Messages.SignContent + '</div>';

            try {
                var strObj = obj.getJSONCertificates();
                var KEYSTORE = eval('(' + strObj.substring(10, strObj.length() - 1) + ')');
            }
            catch (Error) {
                eval(obj.getJSONCertificates());
            }

            obj.setSerialNumber(KEYSTORE.Certificates[index].SerialNumber);
            var result = obj.signString(AgenteCertisign.config.strToSign);
            if (result.substring(0, 5) == "Erro=") {
                document.getElementById("UIContent").innerHTML = '<div>' + result + '</div>';
                document.getElementById("btBack").className = "btBack_enable";
            }
            else {
                document.getElementById(AgenteCertisign.config.fieldReturn).value = result;
                document.getElementById("UIContent").innerHTML = '<div style="text-align:center">' + Language.Messages.SignedContent + '</div>';
                if (AgenteCertisign.config.formToPost != "") {
                    AgenteCertisign.postForm();
                }
            }
        }
        return false;
    },
    signFileAndReturn: function(file) {
        if (file == "") {
            alert("Você deve indicar qual arquivo deve ser assinado !");
        }
        AgenteCertisign.ActualAction = "AgenteCertisign.executeSignAndReturn('" + file + "')";
        AgenteCertisign.selectCertificate();

    },
    executeSignAndReturn: function(file) {
        if (AgenteCertisign.SelectedIndex != "") {
            var index = AgenteCertisign.SelectedIndex;
            //eval (document.applets['oApplet'].getBufferCertificates());    
            var obj = document.applets['oApplet'];
            document.getElementById("UIContent").innerHTML = '<div class="loading">&nbsp;</div>' +
                '<div style="text-align:center">Aguarde !</div>';

            try {
                var strObj = obj.getJSONCertificates();
                var KEYSTORE = eval('(' + strObj.substring(10, strObj.length() - 1) + ')');
            }
            catch (Error) {
                eval(obj.getJSONCertificates());
            }

            obj.setSerialNumber(KEYSTORE.Certificates[index].SerialNumber);
            var result = obj.signFile(file);
            if (result.substring(0, 5) == "Erro=") {
                document.getElementById("UIContent").innerHTML = '<div>' + result + '</div>';
                document.getElementById("btBack").className = "btBack_enable";
            }
            else {
                document.getElementById(AgenteCertisign.config.fieldReturn).value = result;
                document.getElementById("UIContent").innerHTML = '<div style="text-align:center">' + Language.Messages.SignContent + '</div>';
                if (AgenteCertisign.config.formToPost != "") {
                    AgenteCertisign.postForm();
                }
            }
        }
        return false;
    },
    selectCertificate: function() {
        var btNext = document.getElementById("btNext");
        var btBack = document.getElementById("btBack");

        btNext.value = Language.UI.BtNext;
        document.getElementById("BoxTitle").innerHTML = Language.UI.Title_LoginCAPI;
        document.getElementById("CertPanel").style.visibility = "visible";
        if (AgenteCertisign.FlowNumber == 0) {
            if (AgenteCertisign.config.repositoryType != "TOKEN") {
                btNext.className = "btNext_disable";
                btBack.className = "btBack_hidden";
                btNext.onclick = AgenteCertisign.selectCertificate;
                AgenteCertisign.listCertificates();
                AgenteCertisign.FlowNumber = 1;
            }
            else {
                btNext.className = "btNext_disable";
                btBack.className = "btBack_hidden";
                btNext.onclick = AgenteCertisign.selectCertificate;
                AgenteCertisign.showGetPIN();
                AgenteCertisign.FlowNumber = 1;
            }
        }
        else if (AgenteCertisign.FlowNumber == 1) {
            if (AgenteCertisign.config.isShowCertificate) {
                AgenteCertisign.showCertificateDetail();
                btBack.className = "btBack_enable";
                AgenteCertisign.BackAction = "AgenteCertisign.selectCertificate()";
                btBack.onclick = AgenteCertisign.backFlow;
                AgenteCertisign.FlowNumber = 2;
            }
            else {
                if (AgenteCertisign.config.repositoryType == "REPO") {
                    AgenteCertisign.showGetPIN();
                    AgenteCertisign.FlowNumber = 3;
                }
            }
        }
        else if (AgenteCertisign.FlowNumber == 2) {
            if (AgenteCertisign.config.repositoryType == "REPO") {
                AgenteCertisign.showGetPIN();
                btNext.onclick = AgenteCertisign.selectCertificate;
                AgenteCertisign.FlowNumber = 3;
            }
            else {
                btBack.className = "btBack_hidden";
                btNext.className = "btNext_hidden";
                eval(AgenteCertisign.ActualAction);
                //AgenteCertisign.executeSign();
            }
        }
        else if (AgenteCertisign.FlowNumber == 3) {
            if (AgenteCertisign.config.repositoryType == "REPO") {
                AgenteCertisign.setPIN();
            }
            btBack.className = "btBack_hidden";
            btNext.className = "btNext_hidden";
            eval(AgenteCertisign.ActualAction);
            //AgenteCertisign.executeSign();
        }
    }
};