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 = "";
        //  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">Assinando arquivo !</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();
        }
    }
};
