source: aportesmurachi/tahel/Murachi-pre/firmaPDF.html

Last change on this file was 12e6ddf, checked in by Antonio Araujo <aaraujo@…>, 7 years ago

Agregados los directorio de aportes de Tahel al control de versiones.

  • Property mode set to 100644
File size: 63.8 KB
Line 
1<!DOCTYPE html>
2<html lang="es">
3    <head> <!--Inicio del head  -->
4        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
5        <meta http-equiv="Content-Style-Type" content="text/css">
6        <meta http-equiv="Content-Script-Type" content="text/javascript">
7
8        <link rel="stylesheet" href="css/jquery.Jcrop.css" type="text/css" />
9
10        <script type="text/javascript" src="js/jquery.min.js"></script>
11        <script type="text/javascript" src="js/hwcrypto-legacy.js"></script>
12        <script type="text/javascript" src="js/hwcrypto.js"></script>
13        <script type="text/javascript" src="js/hex2base.js"></script>
14        <script type="text/javascript" src="js/forge.min.js"></script>
15        <script type="text/javascript" src="js/ajaxSetup.js"></script>
16        <script src="js/jquery.Jcrop.js"></script>
17       
18        <script type="text/javascript" charset="utf-8">
19       
20            var urlActiva = "https://"+window.location.hostname;
21            var jcrop_api;
22            $(document).ready(function() {
23                $.ajaxSetup({
24                    error:function(x,e){
25                        if(x.status==0){
26                            alert('Está fuera de línea!!\n Por favor chequee su conexión.');
27                        }else if(x.status==404){
28                            alert('La URL solicitada no fue encontrada.');
29                        }else if(x.status==500){
30                            alert('Error interno de servidor.');
31                        }else if(e=='parsererror'){
32                            alert('Error.\nSolicitud de interpretación de cadena JSON inválida.');
33                        }else if(e=='timeout'){
34                            alert('Tiempo de espera alcanzado.');
35                        }else {
36                            alert('Error desconocido.\n'+x.responseText);
37                        }
38                    }
39                });
40                $("#botonEnvia").click(enviaFormulario);
41                $("#botonCertificadoTarjeta").click(obtieneCertificado);
42                $("#botonPK12").click(cargaP12);
43                $("#botonImagen").click(cargaImagen);
44                $("#botonEstadisticas").click(verificaEstadisticas);
45                $("#botonSubeVerifica").click(cargaVerifica);
46                $("#botonTest").click(ejecutaPrueba);
47                $('#tablaImagen').css("display","none");
48                $("input[name=tipoPos]").click(cambioTipoPos)
49                descargarArchivo =  downQuery;
50            });
51           
52            function showCoords(c){
53                var alto = parseInt($('#imagenPrevia').attr("height").replace("px",""));
54                $("#llx").val(c.x);
55                $("#lly").val(((alto-c.y)-c.h));
56                $("#urx").val(c.w);
57                $("#ury").val(c.h);
58            };
59
60            var descargarArchivo;
61            function ejecutaDescarga(){
62                var opciones = new Object();
63                opciones.onCompletado = solicitudCompletada;
64                opciones.onSend = antesEnvioSolicitud;
65                opciones.onExito = exitoSolicitud;
66                opciones.onProgreso = muestraProgreso;
67                opciones.tipoResultado="binary";
68                opciones.id="1";
69                descargarArchivo.dArchivo($(this).attr("linkDescarga"),opciones);
70            }
71           
72            function muestraProgreso(evt,xhr){
73                $("#progresoDescarga").html(evt.lengthComputable+"<br>");
74                if (evt.lengthComputable) {
75                    var percentComplete = evt.loaded / evt.total;
76                    percentComplete *= 100;
77                    $("#progresoDescarga").html(percentComplete.toFixed(2).replace(".",",")+" % Descargado");
78                }else{
79                    $("#progresoDescarga").html("Progreso solo<br>");
80                }
81            }
82            function errorSolicitud(xhr, ajaxOptions, errorArrojado) {
83                $("#progresoDescarga").append("Error");
84                $("#progresoDescarga").append("<br>");
85                $("#progresoDescarga").append(xhr.responseText);
86                $("#progresoDescarga").append("<br>");
87                $("#progresoDescarga").append(errorArrojado);
88                $("#progresoDescarga").append("<br>");
89
90            }
91            function antesEnvioSolicitud(evt,opciones) {
92                console.log("antesEnvioSolicitud")
93                console.log(opciones.id);
94                $("#progresoDescarga").html("Iniciando descarga");
95                //$("#progresoDescarga").html("antesEnvioSolicitud")
96            }
97            function solicitudCompletada(evt,state) {
98                console.log("solicitudCompletada");
99                console.log(evt.opciones.id)
100                $("#progresoDescarga").html("");
101                //$("#progresoDescarga").html("solicitudCompletada");
102            }
103            function exitoSolicitud(data, status, xhr) { 
104                if(data){
105                    //$("#progresoDescarga"+"B").append("Objetivo: " + xhr.opciones.url + "<br>");
106                    var nombreArchivo = descargarArchivo.obtieneNombre(xhr);
107                    //$("#progresoDescarga"+"B").append("Archivo: " + nombreArchivo + "<br>");
108                    var downloadUrl = URL.createObjectURL(data);
109                    if(xhr.opciones.id=="1"){
110                        $("#progresoDescarga").html("100% Descarga completada");
111                        var a = document.createElement("a");
112                        a.href = downloadUrl;
113                        a.download = nombreArchivo;
114                        document.body.appendChild(a);
115                        a.click();
116                    }/*else{
117                        var a = document.createElement("img");
118                        a.src = downloadUrl;
119                        document.body.appendChild(a);
120                    }*/
121                }
122                $("#progresoDescarga"+"B").append("exitoSolicitud 2<br>");
123            }
124           
125            var certificadoActivo;
126            var almacenDigitalActivo=false;
127            function obtieneCertificado(){
128                window.hwcrypto.getCertificate({lang: "en"}).then(function(response) {
129                    var cert = response;
130                    certificadoActivo = cert;
131                    console.log("Using certificate:\n" + hexToPem(response.hex));
132                    console.log("Using certificate(HEX):\n" + response.hex);
133                    if(totalArchivos.length>0){
134                        $("button[name^='botonFirma-'").attr("disabled",false);
135                    }
136                });
137            }
138           
139            var fileIdActivo;
140            function enviaFormulario(){
141                for(var n =0;n<$("#file-sign")[0].files.length;n++){
142                    var formData = new FormData();
143                    formData.append("upload", $("#file-sign")[0].files[n]);
144                    //alert(urlActiva+"/Murachi/0.4/archivos/");
145                    $.ajax({           
146                        url: urlActiva+"/Murachi/0.4/archivos/",
147                        type: "post",
148                        dataType: "json",
149                        data: formData,
150                        xhr: function() {
151                                var myXhr = $.ajaxSettings.xhr();
152                                if(myXhr.upload){
153                                    myXhr.upload.addEventListener('progress',progressUpload, false);
154                                }
155                                return myXhr;
156                        },
157                        cache: false,
158                        contentType: false,
159                        processData: false,
160                        headers: {"Authorization":"Basic YWRtaW46YWRtaW4="},
161                        success: function(response) {
162                            $("#respuesta").html("");
163                            for(var key in response) {
164                                $("#respuesta").html($("#respuesta").html()+"<br>"+response[key])
165                                console.log(key);
166                            }
167                            $("input[name=tipoPos]").attr("checked",false);
168                            incluyeArchivo(response);
169                            console.log(response)
170                            if(jcrop_api != null){
171                                jcrop_api.destroy();
172                            }
173                            $('#tablaImagen').css("display","none");
174                        },                                                             
175                            error: function(jqXHR, textStatus, errorThrown){
176                                console.log('error: ' + textStatus);
177                                //var responseText = jQuery.parseJSON(jqXHR.responseText);
178                                console.log('ajax error function: ' + jqXHR.responseText);
179                                $("#respuesta").html("error function: " + jqXHR.responseText);
180                            }
181                    })
182                }
183            }
184            function progressUpload(e){
185                if(e.lengthComputable){
186                    var max = e.total;
187                    var current = e.loaded;
188
189                    var Percentage = (current * 100)/max;
190                    console.log(Percentage);
191
192
193                    if(Percentage >= 100)
194                    {
195                       // process completed
196                        $("#progresoCarga").html("100 % (Carga completada)");
197                    }else{
198                        $("#progresoCarga").html((Percentage.toFixed(2).replace(".",","))+" %");
199                       
200                    }
201                } 
202            }
203           
204            function buscaPos(cod){
205                var obj = new Array();
206                var alto = parseInt($('#imagenPrevia').attr("height").replace("px",""));
207                var ancho = parseInt($('#imagenPrevia').attr("width").replace("px",""));
208                var anchoFirma = parseInt($('#urx').val());
209                var altoFirma = parseInt($('#ury').val());
210                obj["alto"] = altoFirma;
211                obj["ancho"] = anchoFirma;
212                if(cod==1){
213                    obj["x"] = 0;
214                    obj["y"] = (alto-altoFirma);
215                }else if(cod==2){
216                    obj["y"] = (alto-altoFirma);
217                    obj["x"] = ((ancho/2)-(anchoFirma/2));
218                }else if(cod==3){
219                    obj["y"] = (alto-altoFirma);
220                    obj["x"] = ((ancho)-anchoFirma);
221                }else if(cod==4){
222                    obj["x"] = 0;
223                    obj["y"] = ((alto/2)-(altoFirma/2));
224                }else if(cod==5){
225                    obj["y"] = ((alto/2)-(altoFirma/2));
226                    obj["x"] = ((ancho/2)-(anchoFirma/2));
227                }else if(cod==6){
228                    obj["y"] = ((alto/2)-(altoFirma/2));
229                    obj["x"] = (ancho-anchoFirma);
230                }else if(cod==7){
231                    obj["x"] = 0;
232                    obj["y"] = 0;
233                }else if(cod==8){
234                    obj["y"] = 0;
235                    obj["x"] = ((ancho/2)-(anchoFirma/2));
236                }else if(cod==9){
237                    obj["y"] = 0;
238                    obj["x"] = (ancho-anchoFirma);
239                }
240               
241                return obj;
242            }
243           
244            function cambioTipoPos(){
245               
246                if($("input[name=idArchivo]:checked").val()!=undefined){
247                    if(jcrop_api != null){
248                        jcrop_api.destroy();
249                    }
250                    if($(this).val()==1){
251                        $('#tablaImagen').css("display","none");
252                        dimensionesActuales=null;
253                    }else{
254                        var objArchivo = $("input[name=idArchivo]:checked");
255                        dimensionesActuales = new Array();
256                        dimensionesActuales["alto"] = objArchivo.attr("alto");
257                        dimensionesActuales["ancho"] = objArchivo.attr("ancho");
258                        dimensionesActuales["paginas"] = objArchivo.attr("paginas");
259                        if(dimensionesActuales["alto"]!=undefined){
260                            $('#imagenPrevia').attr("height","0");
261                            $('#imagenPrevia').attr("width","0");
262                            $('#tablaImagen').css("display","block");
263                            $('#tablaImagen').attr("width",dimensionesActuales["ancho"]+"px");
264                            $('#tablaImagen').attr("style","border:1px solid #000000");
265                            $('#imagenPrevia').attr("width",dimensionesActuales["ancho"]+"px");
266                            $('#imagenPrevia').attr("height",dimensionesActuales["alto"]+"px");
267                            $('#imagenPrevia').Jcrop({
268                                onChange: showCoords,
269                                onSelect: showCoords,
270                                bgColor:     'black',
271                                bgOpacity:   .4
272                                },function(){
273                                jcrop_api = this;
274                              })
275                        }
276                       
277                    }
278                }else{
279                    alert("Debe seleccionar primero un archivo");
280                }
281            }
282            var dimensionesActuales;
283            function cambiaArchivo(){
284                if(jcrop_api != null){
285                    jcrop_api.destroy();
286                }
287                $('#tablaImagen').css("display","none");
288               
289            }
290            function reemplazaCadena(busca,cambia,texto){
291                while(texto.indexOf(busca)>-1){
292                    texto = texto.replace(busca,cambia);
293                }
294                return texto;
295            }
296           
297            var totalArchivos = new Array();
298            function incluyeArchivo(response){
299                var idArchivo = response["fileId"];
300                totalArchivos.push(idArchivo);
301                var archivoNuevo = '<tr id="archivo-'+idArchivo+'">'+$("#archivoPrototipo").html()+'</tr>';
302                archivoNuevo = reemplazaCadena('/-idArchivo-/',idArchivo,archivoNuevo);
303                archivoNuevo = reemplazaCadena('/-ancho-/',response["ancho"],archivoNuevo);
304                archivoNuevo = reemplazaCadena('/-alto-/',response["alto"],archivoNuevo);
305                archivoNuevo = reemplazaCadena('/-paginas-/',response["paginas"],archivoNuevo);
306                archivoNuevo = reemplazaCadena('/-valorArchivo-/',idArchivo,archivoNuevo);
307                archivoNuevo = reemplazaCadena('/-valorRadioArchivo-/',idArchivo,archivoNuevo);
308                //archivoNuevo = reemplazaCadena('"montoUnitarioArticulo-"','"montoUnitarioArticulo-'+indice+'"',archivoNuevo);
309                //archivoNuevo = reemplazaCadena('"montoTotalArticulo-"','"montoTotalArticulo-'+indice+'"',archivoNuevo);
310                //archivoNuevo = reemplazaCadena('"cantidadArticulo-n-oferta"','"cantidadArticulo-'+indice+'-oferta"',archivoNuevo);
311                //archivoNuevo = reemplazaCadena('"montoUnitarioArticulo-n-oferta"','"montoUnitarioArticulo-'+indice+'-oferta"',archivoNuevo);
312                //archivoNuevo = reemplazaCadena('"montoTotalArticulo-n-oferta"','"montoTotalArticulo-'+indice+'-oferta"',archivoNuevo);
313                //archivoNuevo = reemplazaCadena('"botonEliminaArticulo-"','"botonEliminaArticulo-'+indice+'"',archivoNuevo);
314                //archivoNuevo = reemplazaCadena('"marcaArticulo-"','"marcaArticulo-'+indice+'"',archivoNuevo);
315                //archivoNuevo = reemplazaCadena('"exoneraArticulo-"','"exoneraArticulo-'+indice+'"',archivoNuevo);
316
317                //$("#tablaArticulos").append(archivoNuevo);
318                $(archivoNuevo).insertBefore("#totalArchivos");
319                $("input[name=idArchivo]").unbind('click');
320                $("input[name=idArchivo]").click(cambiaArchivo);
321                $("#botonFirma-"+idArchivo).click(procesaIndividual);
322                $("#botonDescarga-"+idArchivo).click(ejecutaDescarga);
323                var activo = false;
324                if(!certificadoActivo && !almacenDigitalActivo){
325                    activo = true;
326                }
327                $("#botonFirma-"+idArchivo).attr("disabled",activo);
328                $("#botonDescarga-"+idArchivo).attr("disabled",true);
329                $("#sinArchivos").css("display","none");
330                $("#archivo-"+idArchivo).css("display","block");
331                $("#cantArchivos").html(totalArchivos.length+" Archivos por firma")
332            }
333            var almacenId = "";
334            function cargaP12(){
335                if($("#p12")[0].files.length>0){
336                    var formData = new FormData();
337                    formData.append("upload", $("#p12")[0].files[0]);
338                    formData.append("clave", $("#clavePCKS12").val());
339                    $.ajax({           
340                        url: urlActiva+"/Murachi/0.4/archivos/p12",
341                        type: "post",
342                        dataType: "json",
343                        data: formData,
344                        xhr: function() {
345                                var myXhr = $.ajaxSettings.xhr();
346                                if(myXhr.upload){
347                                    myXhr.upload.addEventListener('progress',progressUpload, false);
348                                }
349                                return myXhr;
350                        },
351                        cache: false,
352                        contentType: false,
353                        processData: false,
354                        headers: {"Authorization":"Basic YWRtaW46YWRtaW4="},
355                        success: function(response) {
356                            $("#respuesta").html("");
357                            for(var key in response) {
358                                $("#respuesta").html($("#respuesta").html()+"<br>"+response[key])
359                                console.log(key);
360                            }
361                            if(response["error"]==""){
362                                almacenDigitalActivo = true;
363                                almacenId = response["fileId"];
364                                $("#mensajeP12").html("Archivo almacen digital PCKS12 cargado<br>Se firmará a nombre de "+response["propietario"])
365                                if(totalArchivos.length>0){
366                                    $("button[name^='botonFirma-'").attr("disabled",false);
367                                }
368                            }else{
369                               $("#mensajeP12").html("Se produjo un error al cargar el almacen digital PCKS12") 
370                            }
371                            console.log(response)
372
373                        },                                                             
374                            error: function(jqXHR, textStatus, errorThrown){
375                                console.log('error: ' + textStatus);
376                                //var responseText = jQuery.parseJSON(jqXHR.responseText);
377                                console.log('ajax error function: ' + jqXHR.responseText);
378                                $("#respuesta").html("error function: " + jqXHR.responseText);
379                            }
380                    })
381                }else{
382                    alert("Debe seleccionar un almacén digital de firma primero")
383                }
384            }
385            var imagenActiva = false;
386            var imagenId = "";
387            function cargaImagen(){
388                if($("#imagen")[0].files.length>0){
389                    var formData = new FormData();
390                    formData.append("upload", $("#imagen")[0].files[0]);
391                    $.ajax({           
392                        url: urlActiva+"/Murachi/0.4/archivos/imagenAdjunta",
393                        type: "post",
394                        dataType: "json",
395                        data: formData,
396                        xhr: function() {
397                                var myXhr = $.ajaxSettings.xhr();
398                                if(myXhr.upload){
399                                    myXhr.upload.addEventListener('progress',progressUpload, false);
400                                }
401                                return myXhr;
402                        },
403                        cache: false,
404                        contentType: false,
405                        processData: false,
406                        headers: {"Authorization":"Basic YWRtaW46YWRtaW4="},
407                        success: function(response) {
408                            $("#respuesta").html("");
409                            for(var key in response) {
410                                $("#respuesta").html($("#respuesta").html()+"<br>"+response[key])
411                                console.log(key);
412                            }
413                            imagenActiva = true;
414                            imagenId = response["fileId"];
415                            $("#mensajeImagen").html("Archivo imagen cargado")
416                            console.log(response)
417
418                        },                                                             
419                            error: function(jqXHR, textStatus, errorThrown){
420                                console.log('error: ' + textStatus);
421                                //var responseText = jQuery.parseJSON(jqXHR.responseText);
422                                console.log('ajax error function: ' + jqXHR.responseText);
423                                $("#respuesta").html("error function: " + jqXHR.responseText);
424                            }
425                    })
426                }else{
427                    alert("Debe seleccionar un archivo digital primero")
428                }
429            }
430           
431            function cargaVerifica(){
432                if($("#archivoVerifica")[0].files.length>0){
433                    var formData = new FormData();
434                    formData.append("upload", $("#archivoVerifica")[0].files[0]);
435                    $.ajax({           
436                        url: urlActiva+"/Murachi/0.4/archivos/firmados",
437                        type: "post",
438                        dataType: "json",
439                        data: formData,
440                        xhr: function() {
441                                var myXhr = $.ajaxSettings.xhr();
442                                if(myXhr.upload){
443                                    myXhr.upload.addEventListener('progress',progressVerifica, false);
444                                }
445                                return myXhr;
446                        },
447                        cache: false,
448                        contentType: false,
449                        processData: false,
450                        headers: {"Authorization":"Basic YWRtaW46YWRtaW4="},
451                        success: function(response) {
452                            $("#mensajeVerifica").html("Archivo subido correctamente");
453                            for(var key in response) {
454                                //$("#mensajeVerifica").html($("#mensajeVerifica").html()+"<br>"+response[key])
455                                console.log(key);
456                            }
457                            console.log(response)
458                            $("#mensajeVerifica").html($("#mensajeVerifica").html()+"<br>Cantidad de firmas en el documento: "+response["numberOfSignatures"]);
459                            if(response["numberOfSignatures"]>0){
460                                $("#mensajeVerifica").html($("#mensajeVerifica").html()+"<br>Firmantes del documento: ");
461                               
462                                for(var n=0;n<response["signatures"].length;n++){
463                                    var datosFirmante = new Array();
464                                    datosFirmante.push("Nombre firmante: "+response["signatures"][n]["nameOfTheSigner"]);
465                                    datosFirmante.push("Fecha de la firma: "+response["signatures"][n]["signedOn"]);
466                                    var validez = "No";
467                                    if(response["signatures"][n]["signerCertificateStillValid"]){
468                                        validez = "Si";
469                                    }
470                                    datosFirmante.push("Certificado válido: "+validez);
471                                    //datosFirmante.push("Fecha límite de la validez del certificado: "+response["signatures"][n]["signerCertificateValidTo"]);
472                                    //datosFirmante.push("Nombre: "+response["signatures"][n][""]);
473                                    $("#mensajeVerifica").html($("#mensajeVerifica").html()+"<blockquote>"+datosFirmante.join("<br>")+"</blockquote>");
474                                }
475                            }
476
477                        },                                                             
478                            error: function(jqXHR, textStatus, errorThrown){
479                                console.log('error: ' + textStatus);
480                                //var responseText = jQuery.parseJSON(jqXHR.responseText);
481                                console.log('ajax error function: ' + jqXHR.responseText);
482                                $("#respuesta").html("error function: " + jqXHR.responseText);
483                                archivoVerificarId = null;
484                            }
485                    })
486                }else{
487                    alert("Debe seleccionar un archivo para verificar primero")
488                }
489            }
490           
491           
492            function progressVerifica(e){
493                if(e.lengthComputable){
494                    var max = e.total;
495                    var current = e.loaded;
496
497                    var Percentage = (current * 100)/max;
498                    console.log(Percentage);
499
500
501                    if(Percentage >= 100)
502                    {
503                       // process completed
504                        $("#progresoVerifica").html("100 % (Carga completada)");
505                    }else{
506                        $("#progresoVerifica").html((Percentage.toFixed(2).replace(".",","))+" %");
507                       
508                    }
509                } 
510            }
511
512            function verificaEstadisticas(){
513                $.ajax({           
514                        url: urlActiva+"/Murachi/0.4/archivos/estadisticas",
515                        type: "get",
516                        dataType: "json",
517                        xhr: function() {
518                                var myXhr = $.ajaxSettings.xhr();
519                                if(myXhr.upload){
520                                    myXhr.upload.addEventListener('progress',progressUpload, false);
521                                }
522                                return myXhr;
523                        },
524                        cache: false,
525                        contentType: false,
526                        processData: false,
527                        headers: {"Authorization":"Basic YWRtaW46YWRtaW4="},
528                        success: function(response) {
529                            $("#respuesta").html("");
530                            for(var key in response) {
531                                $("#respuesta").html($("#respuesta").html()+"<br>"+response[key])
532                                console.log(key);
533                            }
534                            console.log(response)
535
536                        },                                                             
537                            error: function(jqXHR, textStatus, errorThrown){
538                                console.log('error: ' + textStatus);
539                                //var responseText = jQuery.parseJSON(jqXHR.responseText);
540                                console.log('ajax error function: ' + jqXHR.responseText);
541                                $("#respuesta").html("error function: " + jqXHR.responseText);
542                            }
543                    })
544            }
545           
546            function ejecutaPrueba(){
547                $.ajax({           
548                        url: urlActiva+"/Murachi/0.4/archivos/verificadirectorio",
549                        type: "get",
550                        dataType: "json",
551                        xhr: function() {
552                                var myXhr = $.ajaxSettings.xhr();
553                                if(myXhr.upload){
554                                    myXhr.upload.addEventListener('progress',progressUpload, false);
555                                }
556                                return myXhr;
557                        },
558                        cache: false,
559                        contentType: false,
560                        processData: false,
561                        headers: {"Authorization":"Basic YWRtaW46YWRtaW4="},
562                        success: function(response) {
563                            $("#mensajeTest").html("Resultado obtenido");
564                            for(var key in response) {
565                                $("#mensajeTest").html($("#mensajeTest").html()+"<br>"+response[key])
566                                console.log(key);
567                            }
568                            console.log(response)
569
570                        },                                                             
571                            error: function(jqXHR, textStatus, errorThrown){
572                                console.log('error: ' + textStatus);
573                                //var responseText = jQuery.parseJSON(jqXHR.responseText);
574                                console.log('ajax error function: ' + jqXHR.responseText);
575                                $("#respuesta").html("error function: " + jqXHR.responseText);
576                            }
577                    })
578            }
579            var hashtype = "SHA-256";
580            var lang = "eng";
581            function procesaIndividual(){
582                    var cert = certificadoActivo;
583                    var continua = true;
584                    var mensajeContinua = "";
585                    var archivoEstimado = $(this).attr("id").replace("botonFirma-","");
586                    if($("input[name=fimaTarjeta]:checked").val()== undefined){
587                        if($("input[name=idArchivo]:checked").val()== archivoEstimado){
588                            if(!cert && !almacenDigitalActivo){
589                                alert("Debe seleccionar el certificado para firmar");
590                            }else{
591                                var firmaVisible = false;
592                                if($("input[name=firmaVisible]:checked").val()==1){
593                                    firmaVisible = true;
594                                }
595                                if($("input[name=idArchivo]:checked").val()==undefined){
596                                    alert("Debe seleccionar primero un archivo");
597                                }else{
598                                   
599                                    if($("input[name=tipoPos]:checked").val()==undefined || $("input[name=tipoPos]:checked").val()==1){
600                                        var alto = parseInt($('#imagenPrevia').attr("height").replace("px",""));
601                                        var ancho = parseInt($('#imagenPrevia').attr("width").replace("px",""));
602                                       
603                                        $("#llx").val(0);
604                                        $("#lly").val(50);
605                                        if($("#urx").val()==0 || $("#urx").val() < 0 || $("#urx").val() == ""){
606                                            $("#urx").val(100);
607                                        }
608                                        if($("#ury").val()==0 || $("#ury").val() < 0 || $("#ury").val() == ""){
609                                            $("#ury").val(50);
610                                        }
611                                       
612                                    }else if($("input[name=tipoPos]:checked").val()==2){
613                                        if($("input[name=tipoPos]:checked").val()==undefined){
614                                            continua = false;
615                                            mensajeContinua = "Debe seleccionar la posición de la firma";
616                                        }else{
617                                            var pos = buscaPos($("input[name=posFijo]:checked").val());
618                                            $("#llx").val(pos["x"]);
619                                            $("#lly").val(pos["y"]);
620                                            $("#urx").val(pos["ancho"]);
621                                            $("#ury").val(pos["alto"]);
622                                        }
623                                    }else if($("input[name=tipoPos]:checked").val()==3){
624                                        var api = jcrop_api;
625                                        var alto = parseInt($('#imagenPrevia').attr("height").replace("px",""));
626                                        $("#llx").val(api.tellSelect().x);
627                                        $("#lly").val(((alto-api.tellSelect().y)-api.tellSelect().h));
628                                        $("#urx").val(api.tellSelect().w);
629                                        $("#ury").val(api.tellSelect().h);
630                                    }
631                                    if(!cert){
632                                        var certificado = "";
633                                    }else{
634                                        certificado = cert.hex;
635                                    }
636                                    var muestraImagen = false;
637                                    if($("input[name=muestraImagen]:checked").val()==1){
638                                        muestraImagen = true;
639                                    }
640                                    var muestraImagenSola = false;
641                                    if($("input[name=muestraImagenSola]:checked").val()==1){
642                                        muestraImagenSola = true;
643                                    }
644                                    var ancho = 100;
645                                    if(!isNaN(parseInt($("#urx").val()))){
646                                        ancho = parseInt($("#urx").val());
647                                    }
648                                    var alto = 100;
649                                    if(!isNaN(parseInt($("#ury").val()))){
650                                        alto = parseInt($("#ury").val());
651                                    }
652                                    var posX = 100;
653                                    if(!isNaN(parseInt($("#llx").val()))){
654                                        posX = parseInt($("#llx").val());
655                                    }
656                                    var posY = 100;
657                                    if(!isNaN(parseInt($("#lly").val()))){
658                                        posY = parseInt($("#lly").val());
659                                    }
660                                    var urlFirma = urlActiva+"/Murachi/0.4/archivos/pdfs";
661                                    var firmaPK12 = false;
662                                    var clavePCKS12 ="";
663                                    var imagenAdjunta = "";
664                                    var tsa = false;
665                                    if($("input[name=tsa]:checked").val()==1){
666                                        tsa = true;   
667                                    }
668                                    if(imagenId!=null){
669                                        imagenAdjunta = imagenId;
670                                    }
671                                    if($("input[name=firmaTarjeta]:checked").val()==2){
672                                        if($("#clavePCKS12").val()!=""){
673                                            urlFirma = urlActiva+"/Murachi/0.4/archivos/pdfsPk";
674                                            firmaPK12 = true;
675                                            clavePCKS12 = $("#clavePCKS12").val();
676                                        }else{
677                                            continua = false;
678                                            mensajeContinua = "Debe ingresar la clave del almacén digital para poder continuar"
679                                        }
680                                    }
681                                    if(continua){
682                                        var fileId = $("input[name=idArchivo]:checked").val();
683                                        var parameters = JSON.stringify({
684                                            "fileId":fileId,
685                                            "certificate":certificado,
686                                            "reason":$("#razon").val(),
687                                            "location":$("#lugar").val(),
688                                            "contact":$("#contacto").val(),
689                                            "rotacion":$("#rotacion").val(),
690                                            "pagina":$("#pagina").val(),
691                                            "pk12":firmaPK12,
692                                            "clavePCKS12":clavePCKS12,
693                                            "almacenPCKS12":almacenId,
694                                            "signatureVisible":firmaVisible,
695                                            "lly":posY,
696                                            "llx":posX,
697                                            "ury":posY+alto,
698                                            "urx":posX+ancho,
699                                            "muestraImagen":muestraImagen,
700                                            "muestraImagenSola":muestraImagenSola,
701                                            "imagen":imagenAdjunta,
702                                            "tsa":tsa
703                                            });
704                                        if($("input[name=firmaTarjeta]:checked").val()==1){
705                                            $.ajax({
706                                                url:urlFirma,
707                                                type: "post",
708                                                dataType: "json",
709                                                data: parameters,
710                                                contentType: "application/json",
711                                                headers: {"Authorization":"Basic YWRtaW46YWRtaW4="},
712                                                success: function(data, textStatus, jqXHR){
713                                                    for(var key in data) {
714                                                        $("#respuesta").html($("#respuesta").html()+"<br>"+data[key])
715                                                        console.log(key);
716                                                    }
717                                                    console.log(data)
718                                                    hashActual = data['hash']; 
719                                                    sesionActual = data['sessionId'];
720                                                     window.hwcrypto.sign(certificadoActivo, {type: hashtype, hex: hashActual}, {lang: lang}).then(function(signature) {
721                                                        var firmaActual = signature;
722                                                        console.log(hexToPem(signature.hex));
723                                                        console.log(signature.hex);
724                                                        var fileIdAct = $("input[name=idArchivo]:checked").val();
725
726                                                        $.ajax({
727                                                            type: 'POST',
728                                                            contentType: 'application/json',
729                                                            //url:"https://192.168.12.125:8443/Murachi/0.1/archivos/pdfs/resenas",
730                                                            url:urlActiva+"/Murachi/0.4/archivos/pdfs/resenas",
731                                                            dataType: 'json',
732                                                            data: JSON.stringify({"signature":firmaActual.hex,fileId:fileIdAct,tsa:tsa}),
733                                                            headers: {"Authorization":"Basic YWRtaW46YWRtaW4="},
734                                                            success: function(data, textStatus, jqXHR){
735                                                                for(var key in data) {
736                                                                    $("#respuesta").html($("#respuesta").html()+"<br>"+data[key])
737                                                                    console.log(key);
738                                                                    var linkToDownload = "<a href=\""+urlActiva+"/Murachi/0.4/archivos/descargas/" + data['signedFileId'] +"\">descargar archivo firmado</a>";
739                                                                    $("#respuesta").html($("#respuesta").html()+"<br>"+linkToDownload);
740                                                                    idFileDescargaActual = data['signedFileId'];
741                                                                }
742                                                                console.log(data);
743                                                                $("#botonDescarga-"+archivoEstimado).attr("linkDescarga",urlActiva+"/Murachi/0.4/archivos/descargas/" + data['signedFileId']);
744                                                                $("#botonDescarga-"+archivoEstimado).attr("disabled",false);
745                                                            }, function(err) {
746                                                                var error;
747                                                                if(err == "Error: user_cancel") {
748                                                                    console.log("getCertificate() failed: El usuario cancelo la operación"    );
749                                                                    error = "El usuario cancelo la operación"; 
750                                                                 }     
751                                                                 else if(err == "Error: no_certificates") {
752                                                                     console.log("getCertificate() failed: No hay certificado disponible")    ;
753                                                                     error = "No hay certificado disponible";
754                                                                 }
755                                                                 else if(err == "Error: no_implementation") {
756                                                                     console.log("getCertificate() failed: No hay soporte para el manejo del certificado");
757                                                                     error = "No hay soporte para el manejo del certificado";
758                                                                }
759                                                                $("#respuesta").html("getCertificate() failed: " + error);
760                                                           }
761                                                        });
762                                                    })
763
764
765
766                                                }, function(err) {
767                                                    var error;
768                                                    if(err == "Error: user_cancel") {
769                                                        console.log("getCertificate() failed: El usuario cancelo la operación"    );
770                                                        error = "El usuario cancelo la operación"; 
771                                                     }     
772                                                     else if(err == "Error: no_certificates") {
773                                                         console.log("getCertificate() failed: No hay certificado disponible")    ;
774                                                         error = "No hay certificado disponible";
775                                                     }
776                                                     else if(err == "Error: no_implementation") {
777                                                         console.log("getCertificate() failed: No hay soporte para el manejo del certificado");
778                                                         error = "No hay soporte para el manejo del certificado";
779                                                    }
780                                                    $("#respuesta").html("getCertificate() failed: " + error);
781                                               }
782                                            });
783                                       
784                                        }else{
785                                            $.ajax({
786                                                url: urlFirma,
787                                                type: "post",
788                                                dataType: "json",
789                                                data: parameters,
790                                                contentType: "application/json",
791                                                headers: {"Authorization":"Basic YWRtaW46YWRtaW4="},
792                                                success: function(data, textStatus, jqXHR){
793                                                    for(var key in data) {
794                                                        $("#respuesta").html($("#respuesta").html()+"<br>"+data[key])
795                                                        console.log(key);
796                                                    }
797                                                    console.log(data)
798                                                    $("#botonFirma-"+archivoEstimado).attr("disabled",true);
799                                                    if(!almacenDigitalActivo){
800
801                                                    }else{
802                                                        var linkDescarga = "<a href=\""+urlActiva+"/Murachi/0.4/archivos/descargas/" + data['fileId'] +"\">descargar archivo firmado</a>";
803                                                        $("#respuesta").html($("#respuesta").html()+"<br>"+linkDescarga);
804                                                        idFileDescargaActual = data['fileId'];
805                                                        $("#botonDescarga-"+archivoEstimado).attr("linkDescarga",urlActiva+"/Murachi/0.4/archivos/descargas/" + data['fileId']);
806                                                        $("#botonDescarga-"+archivoEstimado).attr("disabled",false);
807                                                    }
808
809
810                                                }, function(err) {
811                                                    var error;
812                                                    if(err == "Error: user_cancel") {
813                                                        console.log("getCertificate() failed: El usuario cancelo la operación"    );
814                                                        error = "El usuario cancelo la operación"; 
815                                                     }     
816                                                     else if(err == "Error: no_certificates") {
817                                                         console.log("getCertificate() failed: No hay certificado disponible")    ;
818                                                         error = "No hay certificado disponible";
819                                                     }
820                                                     else if(err == "Error: no_implementation") {
821                                                         console.log("getCertificate() failed: No hay soporte para el manejo del certificado");
822                                                         error = "No hay soporte para el manejo del certificado";
823                                                    }
824                                                    $("#respuesta").html("getCertificate() failed: " + error);
825                                               }
826                                            });
827                                        }
828                                    }else{
829                                        alert(mensajeContinua);
830                                    }
831                                }
832                            }
833                        }else{
834                            alert("Debe seleccionar este archivo para poder firmarlo")
835                        }
836                    }else{
837                        alert("Debe seleccionar un método de firma")
838                    }
839            }
840           
841        </script>
842        </head> 
843
844
845    <body>
846        <table width="1200" border="0" cellspacing="2" cellpadding="5" id="tablaArticulos" align="center">
847            <tr>
848                <td colspan="4" style="text-align:center;">PRUEBA DE MURACHI</td>
849            </tr>
850            <tr>
851                <td colspan="4" style="text-align:center;">&nbsp;</td>
852            </tr>
853            <tr>
854                <td colspan="4" style="text-align:center;">SELECCIONE UN ARCHIVO PARA COLOCARLO</td>
855            </tr>
856            <tr>
857                <td colspan="4" style="text-align:left;"><input id="file-sign" type="file" data-min-file-count="1" name="upload" multiple ></td>
858            </tr>
859            <tr>
860                <td colspan="4" style="text-align:left;"><button type="button" class="button" name="botonEnvia" id="botonEnvia">Cargar archivos</button></td>
861            </tr>
862            <tr>
863                <td colspan="4" style="text-align:left;" id="progresoCarga">&nbsp;</td>
864            </tr>
865            <tr>
866                <td colspan="4" style="text-align:left;" id="progresoDescarga">&nbsp;</td>
867            </tr>
868           
869            <tr>
870                <td colspan="4" style="text-align:center;">ARCHIVOS INCLUIDOS PARA LA FIRMA</td>
871            </tr>
872            <tr>
873            <td colspan="4" id="sinArchivos" align="center" valign="middle" height="40">
874                <strong>No se han ingresado items aún</strong>
875            </td>
876            </tr>
877            <tr id="archivoPrototipo" style="display:none;">
878                <td style="text-align:left;" width="20"><input type="hidden" value="/-valorArchivo-/" id="/-idArchivo-/" name="/-idArchivo-/"/><input type="radio" id="idArchivo" name="idArchivo" value="/-valorRadioArchivo-/" ancho="/-ancho-/" alto="/-alto-/" paginas="/-paginas-/"/></td>
879                <td style="text-align:left;" width="480">/-valorArchivo-/</td>
880                <td style="text-align:left;" width="150"><button type="button" class="button" name="botonFirma-/-idArchivo-/" id="botonFirma-/-idArchivo-/" disabled>Firma Archivo</button></td>
881                <td style="text-align:left;" width="180"><button type="button" class="button" name="botonDescarga-/-idArchivo-/" id="botonDescarga-/-idArchivo-/" disabled>Descarga Archivo</button></td>
882            </tr>
883            <tr id="totalArchivos">
884                <td colspan="4" style="text-align:center;"  id="cantArchivos">&nbsp;</td>
885            </tr>
886            <tr>
887                <td colspan="4" style="text-align:center;">
888                                    <table width="1200" border="0" cellspacing="2" cellpadding="5"  align="center">
889                        <tr>
890                <td style="text-align:left;">Razon: <input type="text" value="" id="razon" name="razon"/></td>
891                <td style="text-align:left;">Lugar: <input type="text" value="" id="lugar" name="lugar"/></td>
892                <td style="text-align:left;">Contacto: <input type="text" value="" id="contacto" name="contacto"/></td>
893                                        </tr>
894                    </table>
895                </td>
896            </tr>
897           
898            <tr>
899                <td style="text-align:left;" width="20" colspan="4">
900                    <input type="radio" id="firmaTarjeta" name="firmaTarjeta" value="1"/>Se firmará con tarjeta Smartcard
901                </td>
902            </tr>
903            <tr>
904                <td colspan="4" style="text-align:center;">
905                    FIRMA CON TARJETA
906                </td>
907            </tr>
908           
909            <tr>
910                <td colspan="4" style="text-align:center;">
911                    <button type="button" class="button" name="botonCertificadoTarjeta" id="botonCertificadoTarjeta">Obtiene Certificado desde Tarjeta</button>
912                </td>
913            </tr>
914            <tr>
915                <td colspan="4" style="text-align:center;">
916                    FIRMA CON CERTIFICADO DIGITAL (.P12)
917                </td>
918            </tr>
919            <tr>
920                <td style="text-align:left;" width="20" colspan="4">
921                    <input type="radio" id="firmaTarjeta" name="firmaTarjeta" value="2" checked/>Se firmará con almacén digital
922                </td>
923            </tr>
924            <tr>
925                <td colspan="4" style="text-align:left;">
926                    <input id="p12" type="file" data-min-file-count="1" name="p12">
927                </td>
928            </tr>
929            <tr>
930                <td colspan="4" style="text-align:center;" id="mensajeP12">
931                    &nbsp;
932                </td>
933            </tr>
934            <tr>
935                <td style="text-align:left;" colspan="2" width="500">
936                    CLAVE DEL ALMACEN: <input type="password" value="" id="clavePCKS12" name="clavePCKS12"/>
937                </td>
938                <td style="text-align:left;" width="150">&nbsp;</td>
939                <td style="text-align:left;" width="150">&nbsp;</td>
940                <td style="text-align:left;" width="150">&nbsp;</td>
941            </tr>
942           
943            <tr>
944                <td colspan="4" style="text-align:center;">
945                    <button type="button" class="button" name="botonPK12" id="botonPK12">Carga PKCS 12</button>
946                </td>
947            </tr>
948           
949            <tr>
950                <td colspan="4" style="text-align:center;">
951                    &nbsp;
952                </td>
953            </tr>
954            <tr>
955                <td colspan="4" style="text-align:center;">
956                    CARACTERÍSTICAS A MOSTRAR
957                </td>
958            </tr>
959            <tr>
960                <td colspan="4" style="text-align:center;">
961               
962                                    <table width="900" border="0" cellspacing="2" cellpadding="5"  align="center">
963                <tr>
964                    <td style="text-align:left;" colspan="2">COLOCAR SERVICIO DE ESTAMPADO DE TIEMPO</td>
965                </tr>
966                <tr>
967                    <td style="text-align:left;" width="450"><input type="radio" id="tsa" name="tsa" value="1"/>Si</td>
968                    <td style="text-align:left;" width="450"><input type="radio" id="tsa" name="tsa" value="0" checked/>No</td>
969                </tr>
970                </table>
971                </td>
972            </tr>           
973            <tr>
974                <td style="text-align:left;" width="20" colspan="4">
975                    <input type="radio" id="firmaVisible" name="firmaVisible" value="1" checked/>Firma Visible
976                </td>
977            </tr>
978            <tr>
979                <td colspan="4" style="text-align:center;">
980               
981                <table width="1000" border="0" cellspacing="2" cellpadding="5"  align="center">
982                    <tr>
983                        <td style="text-align:left;" width="200">Pos X<br><input type="text" value="0" id="llx" name="llx"/></td>
984                        <td style="text-align:left;" width="200">Pos Y<br><input type="text" value="0" id="lly" name="lly"/></td>
985                        <td style="text-align:left;" width="200">Ancho<br><input type="text" value="100" id="urx" name="urx"/></td>
986                        <td style="text-align:left;" width="200">Alto<br><input type="text" value="50" id="ury" name="ury"/></td>
987                        <td style="text-align:left;" width="200">Rotación<br><input type="text" value="0" id="rotacion" name="rotacion"/></td>
988                    </tr>
989
990                    <tr>
991                        <td style="text-align:left;" colspan="5">Página<br><input type="text" value="1" id="pagina" name="pagina"/></td>
992                    </tr>
993                </table>
994                </td>
995            </tr>
996            <tr>
997                <td style="text-align:left;" width="20" colspan="4">
998                    <input type="radio" id="firmaVisible" name="firmaVisible" value="2"/>Firma no Visible
999                </td>
1000            </tr>
1001           
1002           
1003            <tr>
1004                <td colspan="4" style="text-align:center;">
1005                    IMÁGEN ADJUNTA AL MENSAJE
1006                </td>
1007            </tr>
1008           
1009            <tr>
1010                <td colspan="4" style="text-align:left;"><input id="imagen" name="imagen" type="file" data-min-file-count="1" name="min"></td>
1011            </tr>
1012            <tr>
1013                <td colspan="4" style="text-align:center;" id="mensajeImagen">
1014                    &nbsp;
1015                </td>
1016            </tr>
1017            <tr>
1018                <td colspan="4" style="text-align:center;">
1019                    <button type="button" class="button" name="botonImagen" id="botonImagen">Carga Imágen</button>
1020                </td>
1021            </tr>
1022           
1023            <tr>
1024                <td style="text-align:left;" width="20" colspan="4">
1025                    <input type="radio" id="muestraImagen" name="muestraImagen" value="1"/>Muestra Imágen
1026                </td>
1027            </tr>
1028            <tr>
1029                <td style="text-align:left;" width="20" colspan="4">
1030                    <input type="radio" id="muestraImagen" name="muestraImagen" value="2" checked/>No muestra imágen
1031                </td>
1032            </tr>
1033           
1034            <tr>
1035                <td style="text-align:left;" width="20" colspan="4">
1036                    <input type="radio" id="muestraImagenSola" name="muestraImagenSola" value="1"/>Muestra imagen sola
1037                </td>
1038            </tr>
1039            <tr>
1040                <td style="text-align:left;" width="20" colspan="4">
1041                    <input type="radio" id="muestraImagenSola" name="muestraImagenSola" value="2" checked/>No muestra imagen sola
1042                </td>
1043            </tr>
1044           <tr>
1045                <td colspan="4" style="text-align:center;">
1046                    POSICIONAMIENTO
1047                </td>
1048            </tr>
1049            <tr>
1050                <td style="text-align:left;" width="20" colspan="4">
1051                    <input type="radio" id="tipoPos" name="tipoPos" value="1" checked/>Por defecto
1052                </td>
1053            </tr>
1054            <tr>
1055                <td style="text-align:left;" width="20" colspan="4">
1056                    <input type="radio" id="tipoPos" name="tipoPos" value="2"/>Predeterminado
1057                </td>
1058            </tr>
1059           
1060            <tr>
1061                <td colspan="4" style="text-align:center;">
1062                   <table width="120" border="0" cellspacing="2" cellpadding="5" align="center">
1063                     <tr>
1064                        <td style="text-align:center;" width="40">
1065                            <input type="radio" id="posFijo" name="posFijo" value="1"/>
1066                        </td>
1067                         <td style="text-align:center;" width="40">
1068                            <input type="radio" id="posFijo" name="posFijo" value="2"/>
1069                        </td>
1070                         <td style="text-align:center;" width="40">
1071                            <input type="radio" id="posFijo" name="posFijo" value="3"/>
1072                        </td>
1073                    </tr> 
1074                    <tr>
1075                        <td style="text-align:center;" width="40">
1076                            <input type="radio" id="posFijo" name="posFijo" value="4"/>
1077                        </td>
1078                         <td style="text-align:center;" width="40">
1079                            <input type="radio" id="posFijo" name="posFijo" value="5"/>
1080                        </td>
1081                         <td style="text-align:center;" width="40">
1082                            <input type="radio" id="posFijo" name="posFijo" value="6"/>
1083                        </td>
1084                    </tr>
1085                    <tr>
1086                        <td style="text-align:center;" width="40">
1087                            <input type="radio" id="posFijo" name="posFijo" value="7"/>
1088                        </td>
1089                         <td style="text-align:center;" width="40">
1090                            <input type="radio" id="posFijo" name="posFijo" value="8"/>
1091                        </td>
1092                         <td style="text-align:center;" width="40">
1093                            <input type="radio" id="posFijo" name="posFijo" value="9"/>
1094                        </td>
1095                    </tr>
1096                    </table>
1097                </td>
1098            </tr>
1099                        <tr>
1100                <td style="text-align:left;" width="20" colspan="4">
1101                    <input type="radio" id="tipoPos" name="tipoPos" value="3"/>Personalizado
1102                </td>
1103            </tr>
1104            <tr>
1105                <td colspan="4" style="text-align:center;">
1106                    <table width="1200" border="0" cellspacing="2" cellpadding="5" id="tablaImagen" align="center">
1107                        <tr>
1108                            <td>
1109                                <img src="img/pixelBlanco.jpg" width="0" height="0" style="border:0px solid #000000;" id="imagenPrevia"/>
1110                            </td>
1111                        </tr>
1112                    </table>
1113                </td>
1114            </tr>
1115           
1116            <tr>
1117                <td colspan="4" style="text-align:center;">
1118                    &nbsp;
1119                </td>
1120            </tr>
1121            <tr>
1122                <td colspan="4" style="text-align:center;">
1123                    &nbsp;
1124                </td>
1125            </tr>
1126            <tr>
1127                <td colspan="4" style="text-align:center;">
1128                    VERIFICACIÓN DE FIRMAS
1129                </td>
1130            </tr>
1131           
1132            <tr>
1133                <td colspan="4" style="text-align:left;"><input id="archivoVerifica" name="archivoVerifica" type="file" data-min-file-count="1" name="min"></td>
1134            </tr>
1135            <tr>
1136                <td colspan="4" style="text-align:center;" id="progresoVerifica">
1137                    &nbsp;
1138                </td>
1139            </tr>
1140            <tr>
1141                <td colspan="4" style="text-align:center;" id="mensajeVerifica">
1142                    &nbsp;
1143                </td>
1144            </tr>
1145            <tr>
1146                <td colspan="4" style="text-align:center;">
1147                    <button type="button" class="button" name="botonSubeVerifica" id="botonSubeVerifica">Carga Archivo a Verificar</button>
1148                </td>
1149            </tr>
1150            <tr>
1151                <td colspan="4" style="text-align:center;">
1152                    &nbsp;
1153                </td>
1154            </tr>
1155            <tr>
1156                <td colspan="4" style="text-align:center;" id="mensajeVerificacion">
1157                    &nbsp;
1158                </td>
1159            </tr>
1160            <tr>
1161                <td colspan="4" style="text-align:center;">
1162                    <button type="button" class="button" name="botonEstadisticas" id="botonEstadisticas">Obtiene estadisticas</button>
1163                </td>
1164            </tr>
1165                        <tr>
1166                <td colspan="4" style="text-align:center;">
1167                    &nbsp;
1168                </td>
1169            </tr>
1170            <tr>
1171                <td colspan="4" style="text-align:center;">
1172                    <button type="button" class="button" name="botonTest" id="botonTest">Prueba de función</button>
1173                </td>
1174            </tr>
1175            <tr>
1176                <td colspan="4" style="text-align:center;" id="mensajeTest">
1177                    &nbsp;
1178                </td>
1179            </tr>
1180                                    <tr>
1181                <td colspan="4" style="text-align:center;">
1182                    &nbsp;
1183                </td>
1184            </tr>
1185        </table>
1186       
1187        </body>
1188</html>
Note: See TracBrowser for help on using the repository browser.