package com.FitBank.web.servlet;

import com.FitBank.web.util.ConstruirContenido;
import com.FitBank.web.util.EjecutarEventos;
import com.FitBank.xml.Formas.Formulario;
import com.FitBank.xml.Mensaje.MensajeXml;

import javax.servlet.http.HttpServletRequest;

public class VisualizarFormulario extends BaseServlets {

    private static final long serialVersionUID = 1L;

    protected void inicializar() {
        aceptarGet();
        aceptarPost();
        obtenerWriter();
    }

    protected void procesarPedido() {
        writer.print(generarEntorno(pedido, evento));
    }

    public static String generarEntorno(HttpServletRequest pedido, EjecutarEventos evento) {
        String baseHtml = generarMascara();
        baseHtml = reemplazarContenido(baseHtml, "CON", construirContenido());
        baseHtml = reemplazarContenido(baseHtml, "EST", construirEstatus(pedido.getParameter("subs"), pedido.getParameter("tran")));
        baseHtml = reemplazarContenido(baseHtml, "FRM", obtenerFormulario(pedido, evento));
        baseHtml = reemplazarContenido(baseHtml, "USR", ConstruirContenido.construirUsuario(evento, "1", pedido.getSession().getId()));
        return baseHtml;
    }

    public static String generarMascara() {
        String mascara = "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>"
                + "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">"
                + "<html xmlns=\"http://www.w3.org/1999/xhtml\">" 
                + "<head>" 
                + "<meta http-equiv=\"X-UA-Compatible\" content=\"IE=EmulateIE7\" />"
                + "<title>FIT-BANK APPLICATION</title>"
                + "<link rel=\"stylesheet\" href=\"estilos/Fitbank.css\" type=\"text/css\" />"
                + "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\" />"
                + "<script type=\"text/javascript\">"
                + "globalVars = new Array();"
                + "globalVars['F12']='0';"
                + "globalVars['FOCUSFIELD']='salto';"
                + "globalVars['valMAN']=false;"
                + "globalVars['bloqueo']=false;"
                + "globalVars['cambio']='';"
                + "<!-- CAJAS -->"
                + "</script>"
                + "</head>"
                + "<body onload=\"ol(true);\" class=\"tundra\" style=\"margin:0px\">"
                + "<div style=\"visibility:hidden;\"><!-- USR --><!-- EST --></div>"
                + "<div class=\"contentData\" style=\"top: 0\"><!-- CON --></div>"
                + "<div style=\"visibility:hidden;\" id=\"notificacion\"></div>"
                + "<div style=\"visibility:hidden;\" id=\"listaNotif\"></div>"
                + "<div style=\"visibility:hidden;\" id=\"mensajesUsuario\"></div>"
                + "<div style=\"visibility:hidden;\" id=\"listaMsgUsuario\"></div>" 
                + "</body></html>";
        return mascara;
    }

    public static String construirContenido() {
        String retorno = "<style type=\"text/css\"><!--div.qpaws{position:absolute;white-space:nowrap;}"
                + "tr{text-align:center;vertical-align:middle;}"
                + "span.qprws{position:relative;width:0px;height:0px;white-space:nowrap;}--></style>"
                + "<script src=\"js/lib/prototype.js\" type=\"text/JavaScript\"></script>"
                + "<script src=\"JavaScripts/ajax.js\" type=\"text/JavaScript\"></script>"
                + "<script src=\"JavaScripts/calendario.js\" type=\"text/JavaScript\"></script>"
                + "<script src=\"JavaScripts/mascara.js\" type=\"text/JavaScript\"></script>"
                + "<script src=\"JavaScripts/funciones.js\" type=\"text/JavaScript\"></script>"
                + "<script src=\"JavaScripts/teclas.js\" type=\"text/JavaScript\"></script>"
                + "<script src=\"JavaScripts/notificaciones.js\" type=\"text/JavaScript\"></script>"
                + "<script src=\"JavaScripts/mensajesUsuario.js\" type=\"text/JavaScript\"></script>"
                + "<script src=\"JavaScripts/man.js\" type=\"text/JavaScript\"></script>"
                + "<script src=\"JavaScripts/FusionCharts.js\" type=\"text/JavaScript\"></script>"
                + "<script type=\"text/javascript\" src=\"dojo/dojo/dojo.js\" djConfig=\"parseOnLoad: true, isDebug: false, usePlainJson:true, locale:'en'\"></script>"
                + "<script type=\"text/javascript\" src=\"js/basic.js\" ></script>"
                + "<style type=\"text/css\">@import \"dojo/dojox/grid/_grid/tundraGrid.css\";@import \"dojo/dojo/resources/dojo.css\";@import \"dojo/dijit/themes/tundra/tundra.css\";</style>"
                + "<iframe id=\"fi\" name=\"fi\" style=\"position:absolute;visibility:hidden;\" width=\"0\" height=\"0\"></iframe>"
                + "<span id=\"contenido\"><!-- FRM --></span>";
        return retorno;
    }

    public static String construirEstatus(String ps, String pt) {
        String retorno = "<table cellspan=\"0\" cellpadding=\"0\" width=\"100%\"><tr>"
                + "<td width=\"5%\" align=\"left\">" 
                + "<input type=\"text\" value=\"0.00\" size=\"5\" id=\"gClock\" readonly=\"true\" class=\"clockData\"/></td>"
                + "<td width=\"80%\" align=\"left\"><input type=\"hidden\" id=\"codEstatus\" value=\"0\"><span id=\"estatus\"></span></td>"
                + "<td width=\"10%\" align=\"right\">Transacci&oacute;n:</td>"
                + "</td><td width=\"10%\" align=\"right\"><input type=\"text\" size=\"2\" style=\"border:none;\" maxlength=\"2\" id=\"ps\" value=\"" + ps + "\" onkeypress=\"numNat(event);\" />"
                + "</td><td width=\"10%\" align=\"right\"><input type=\"text\" size=\"4\" style=\"border:none;\" maxlength=\"4\" id=\"pt\" value=\"" + pt + "\" onkeypress=\"numNat(event);\" />"
                + "</td></tr></table>";
        return retorno;
    }

    public static String obtenerFormulario(HttpServletRequest pedido, EjecutarEventos evento) {
        String[][] cab = {
            {"SUB", pedido.getParameter("subs")},
            {"TRN", pedido.getParameter("tran")},
            {"VER", "01"},
            {"TIP", MensajeXml.TIP_FRM}
        };
        evento.procesoXml.getXmlMensaje().borrarDetalle(0);
        evento.procesoXml.crearMensaje(cab);
        evento.obtenerTransaccion(pedido);
        evento.procesoXml.getXmlFormulario().setFormASEstatus(Formulario.FRM_INS);
        evento.procesoXml.insertarValueHttp("flagConEspecial", "FALSE");
        String tipoFormulario = evento.procesoXml.getXmlFormulario().getTipoMen();
        evento.procesoXml.insertarValueHttp("flagTypeForm", tipoFormulario);
        evento.procesoXml.getXmlFormulario().setCompania(evento.procesoXml.getXmlMensaje().getValor("CIN", MensajeXml.SEC_CAB));
        evento.procesoXml.setVariablesFormulario();

        String sessionId = pedido.getSession().getId();
        String xmlFormulario = evento.procesoXml.getXmlFormulario().getBody();
        xmlFormulario = xmlFormulario.replaceAll("--reemplazaSession--", ";jsessionid=" + sessionId);

        String calculos = "<script type=\"text/javascript\">JSESSIONID='" + sessionId + "';" + "if(!sr){" + "sr=true;" + evento.procesoXml.getXmlFormulario().getHtmlRequeridosYOtros() + evento.procesoXml.getXmlFormulario().getHtmlClonacionYCaducidad() + "}</script>"
                + "<script type=\"text/javascript\">var calculos=function() {" + evento.procesoXml.getXmlFormulario().getCalculos().getCalculosSinEnter() + "}; calculos();</script>";

        evento.colocarListaCamposMensajesSesion(pedido);

        return xmlFormulario + calculos;
    }

    public static String reemplazarContenido(String archivo, String seccion, String reemplazo) {
        String aReemplazar = "";
        String carga = "";
        String parteInicial = "";
        String parteFinal = "";
        int longitudReemplazo;
        aReemplazar = "<!-- " + seccion + " -->";
        if (archivo.indexOf(aReemplazar) > 0) {
            longitudReemplazo = aReemplazar.length();
            parteInicial = archivo.substring(0, archivo.indexOf(aReemplazar));
            parteFinal = archivo.substring(archivo.indexOf(aReemplazar) + longitudReemplazo);
            carga = parteInicial + reemplazo + parteFinal;
        } else {
            carga = null;
        }
        return carga;
    }
}
