/**
 * Objeto genérico para la creación de paneles
 *
 * @author     Net2u_ <contact(AT)net2u.es>
 * @author     Jesús Antonio Canales Diez <jesusantonio.canales(AT)net2u.es>
 * @package    global
 * @subpackage publico
 * @version    CVS: $Revision: 1.20 $, $Date: 2010/07/21 07:27:38 $, $Author: ipuchkov $
 */
YAHOO.namespace('global.panel');

function montarCapa(nombrePanel, capa, lheader, lbody, lwidth, lheight, lElem, lCenter) {
    var centrar = true;
    if(typeof(lCenter)!='undefined'){
        centrar = lCenter;
    } else {
        centrar = true;
    }
    lElem = new YAHOO.widget.Panel('win'+capa, {
        width:lwidth+"px",
        constraintoviewport: true,
        close:true,
        fixedcenter: centrar,
        visible:false,
        modal:true,
        context:[nombrePanel,"tl","bl"],
        draggable:false}
    );
    if(lheight!=null){
        lElem.cfg.setProperty('height',lheight+"px");
    }
    if(!lheader){
        lheader=mensaje_cabecera_capas;
    }
    lElem.setHeader(lheader);
    if(lbody && lbody!=""){
        lElem.setBody(lbody);
    }
    lElem.render(document.body);
    lElem.hidepanel = function (){
        lElem.hide();
    }
    lElem.mostrar = function (){
        ultimo_panel=lElem;

        lElem.show();
    }
    //YAHOO.util.Event.addListener(nombrePanel, "click", lElem.mostrar, lElem, true);
    var kl = new YAHOO.util.KeyListener(document, { keys:27 },
                                              { fn:lElem.hide,
                                                scope:lElem,
                                                correctScope:true } );
    lElem.cfg.queueProperty("keylisteners", kl);
    lElem.render();
    return lElem;
}


function panel() {
    /**
     * Objeto Panel. Crea un panel y permite cambiar valores de head y body.
     *
     * @param string capa     Nombre de elemento div en el que se crea el panel
     * @param string header   Valor del campo header
     * @param string body     Valor del campo body
     * @param int height      Altura del panel que se crea.
     * @param int width       Ancho del panel que se crea. Defecto 200.
     * @param boolean center  Indica si el panel se muestra centrado o no. Defecto: true.
     * @param mixed oPanel    Referencia al objeto YAHOO.util.Panel
     */
    YAHOO.global.panel.Panel = function() {
        var capa;
        var header;
        var body;
        var height;
        var width = '200';
        var center = true;
        var instance;

        var oPanel;

        crearPanel = function() {
            var o;
            oPanel = null;
            o = montarCapa(capa, 'panel_' + capa, header, body, width, height, oPanel, center);
            oPanel = o;
            return o;
        };

        mostrar = function(ev, obj) {
            oPanel.mostrar();
        };

        // Métodos SET
        /**
         * Establece el valor del header del panel.
         *
         * @param string pheader String con el contenido de la cabecera.
         */
        setHeader = function(pheader) {
            header = pheader;
        };

        /**
         * Establece el valor del header del panel.
         *
         * @param string pheader String con el contenido de la cabecera.
         */
        setBody = function(pbody) {
            body = pbody;
        };

        /**
         * Establece nombre del href desde el que se llama al panel.
         *
         * @param string pdiv String con el nombre del elemento.
         */
        setDiv = function(pdiv) {
            capa = pdiv;
        };

        /**
         * Establece el valor de la altura del panel
         *
         * @param int pheight Altura del panel
         */
        setHeight = function(pheight) {
            height = pheight;
        };

        /**
         * Establece el valor del ancho del panel
         *
         * @param int pwidth Ancho del panel
         */
        setWidth = function(pwidth) {
            width = pwidth;
        };

        return {
            name:    'lere',

            init: function(div) {
                instance = this;
                setDiv(div);
                var d = document.getElementById(div);

                YAHOO.util.Event.addListener(d, 'click', mostrar, d,true);
                this.name = div;

            },

            /**
             * Crea un panel a partir de datos existentes en la plantilla.
             * La información debe estar en contenedores que se llamen igual que
             * el enlace que llama al panel, añadiendo _head (Cabecera) o
             * _body (cuerpo) al final. Ej: Si contenedor = 'div_panel', header =
             * 'div_panel_head' y body = 'div_panel_body'.
             *
             * @param int    pheight   Altura de la caja.
             * @param int    pwidth    Ancho de la caja.
             */
            setDivPanel: function(pheight, pwidth, pcenter) {
                oPanel = null;
                (pheight ? setHeight(pheight) : setHeight(height));
                (pwidth ? setWidth(pwidth) : setWidth(width));
                center = pcenter;
                if(document.getElementById(capa + '_head')){
                    setHeader(document.getElementById(capa + '_head').innerHTML);
                }
                if(document.getElementById(capa + '_body')){
                    var body=document.getElementById(capa + '_body').innerHTML;
                    if(body && body!=""){
                        setBody(body);
                    }
                }
                return crearPanel();
            },

            /**
             * Crea un panel con la información que recibe por parámetro.
             *
             * @param string header    Contenido de la cabecera
             * @param string body      Contenido del cuerpo
             * @param int    pheight   Altura de la caja.
             * @param int    pwidth    Ancho de la caja.
             */
            setPanel: function(pheader, pbody, pheight, pwidth) {
                oPanel = null;
                isUrlPanel = false;
                (pheight ? setHeight(pheight) : setHeight(height));
                (pwidth ? setWidth(pwidth) : setWidth(width));
                setHeader(pheader);
                setBody(pbody);
                return crearPanel();
            }
        };
    };


    /**
     * Objeto UrlPanel. Crea un panel y permite cambiar valores de head y body desde una url.
     *
     * @param string capa     Nombre de elemento div en el que se crea el panel
     * @param string header   Valor del campo header
     * @param string body     Valor del campo body
     * @param int height      Altura del panel que se crea.
     * @param int width       Ancho del panel que se crea. Defecto 200.
     * @param boolean center  Indica si el panel se muestra centrado o no. Defecto: true.
     * @param isUrlPanel boolean    Si es true indica que debe cargar una url para rellenar el contenido.
     * @param mixed oPanel    Referencia al objeto YAHOO.util.Panel
     */
    YAHOO.global.panel.UrlPanel = function() {
        var capa;
        var header;
        var body;
        var height;
        var width = '200';
        var center = true;
        var isUrlPanel = false;
        var url;
        var post;
        var instance;

        var oPanel;

        crearPanel = function() {
            var o;
            oPanel = null;
            o = montarCapa('e' + capa, 'n' + capa, header, body, width, height, oPanel, center);
            oPanel = o;
            return o;
        };

        mostrar = function(ev, obj) {
            getUrlInfo(obj);
        };

        getUrlInfo = function(obj) {
            var resp = '';
            oPanel = crearPanel();
            var callbacks = {
                success: function(o) {
                    try {
                        resp = ((o.responseText != undefined) ? o.responseText : '');
                        setBody(resp);

                        oPanel.mostrar();

                    } catch (x) {
                        alert("Ha fallado el parseo JSON. " + x);
                        return;
                    }
                },
                failure: function(o) {
                    alert('Error:' + o.statusText);
                    resp = null;
                }
            }

            if(url) {
                YAHOO.util.Connect.asyncRequest('POST', url, callbacks);
            }
            return resp;
        };

        // Métodos SET
        /**
         * Establece el valor del header del panel.
         *
         * @param string pheader String con el contenido de la cabecera.
         */
        setHeader = function(pheader) {
            header = pheader;
        };

        /**
         * Establece el valor del header del panel.
         *
         * @param string pheader String con el contenido de la cabecera.
         */
        setBody = function(pbody) {
            body = pbody;
        };

        /**
         * Establece nombre del href desde el que se llama al panel.
         *
         * @param string pdiv String con el nombre del elemento.
         */
        setDiv = function(pdiv) {
            capa = pdiv;
        };

        /**
         * Establece el valor de la altura del panel
         *
         * @param int pheight Altura del panel
         */
        setHeight = function(pheight) {
            height = pheight;
        };

        /**
         * Establece el valor del ancho del panel
         *
         * @param int pwidth Ancho del panel
         */
        setWidth = function(pwidth) {
            width = pwidth;
        };

        return {
            init: function(div) {
                var d = document.getElementById(div);
                YAHOO.util.Event.addListener(d, 'click', mostrar, d,true);
                this.name = div;
                return this;
            },

            /**
             * Establece los datos para crear un panel a partir de los datos
             * recibidos desde una url.
             *
             * @param string purl     URL de la que se reciben los datos.
             * @param string ppost    Datos que se deben enviar por post.
             * @param int    pheight  Altura de la caja.
             * @param int    pwidth   Ancho de la caja.
             */
            setUrlPanel: function(pheader, purl, ppost, pheight, pwidth, pcenter) {
                oPanel = null;
                isUrlPanel = true;
                (pheight ? setHeight(pheight) : setHeight(height));
                (pwidth ? setWidth(pwidth) : setWidth(width));
                center = pcenter;


                if(pheader.length > 0) {
                    setHeader(pheader);
                } else {
                    setHeader(document.getElementById(capa).title);
                }
                setBody('');

                url     = purl;
                post    = ppost;
            }
        };
    };

    // Panel URL
    YAHOO.global.panel.mostrarAjx = function(url,textocabecera, ancho, contexto, valgrupo, valregion,altura) {
        if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)){ //test for MSIE x.x;
             var ieversion=new Number(RegExp.$1) // capture x.x portion and store as a number
             if (ieversion<5){
                 var posicionTop = window.screenTop + (document.body.clientHeight/2 - (altura/2));
                 var posicionLeft = window.screenLeft + (document.body.clientWidth/2 - (ancho/2));
                 var estilos = "width=" + ancho + ", height=" + altura + ", top=" + posicionTop + ", left=" + posicionLeft + ", scrollbars=YES";
                window.open(url, "", estilos);
                return false;
             }
        }

        var body = "<iframe id='kk' name='kk' frameborder='0' width='610px' height='340px'  SCROLLING='AUTO' />";
        panel = montarCapa('ePanelAjax', 'PanelAjax', textocabecera, body, ancho, altura, panel, true);

        panel.setHeader(textocabecera);
        panel.setFooter(LBL_CARGANDO_INFO);
        panel.mostrar();
        var kl = new YAHOO.util.KeyListener(document,{keys:27},{ fn:panel.hide,scope:panel,correctScope:true });
        panel.cfg.queueProperty("keylisteners", kl);
        panel.render(document.body);
        var handleSuccess = function(o) {
            if(o.responseText !== undefined) {
                var resp = o.responseText;
                panel.setBody(resp);
                panel.setFooter("");
            } else {
                panel.setBody(LBL_NO_CONECTA);
            }
            panel.render(document.body);
            panel.mostrar();
        }

        var handleFailure = function(o) {
        }

        var callback = {
          success: handleSuccess,
          failure: handleFailure
        };
        var postData = "grupo=" + valgrupo + "&region=" + valregion;
        var transaction = YAHOO.util.Connect.asyncRequest('POST', url, callback, postData);
        YAHOO.global.panel.ultimoPanel = panel;
    }
}

funciones_someter_onload[funciones_someter_onload.length] = 'panel';

YAHOO.global.panel.initPanelEspera = function (div,formulario){
    var elemento = YAHOO.util.Dom.get(div);
    if(elemento){
        YAHOO.util.Dom.setStyle(elemento, "display", "block");
    }
    var panel_buscando = new YAHOO.widget.Panel("buscando", {
        width:"602px",
        constraintoviewport: true,
        close:false,
        visible:true,
        modal:true,
        fixedcenter:true,
        draggable:false}
    );
    panel_buscando.render(document.body);
    //setTimeout('document.getElementById("'+formulario+'").submit();',50);
    setTimeout('YAHOO.global.panel.updateImgSrc();',60);
    return true;
}


YAHOO.global.panel.updateImgSrc = function (){
  var imag = document.getElementById("_cargando");
  imag.style.background = "url(/img/publico/ico_buscando.gif) no-repeat left center";
  var imag = document.getElementById("buscando");
  imag.style.background = "url(/img/publico/fondo_buscando_" + IMAGEN_ACTUAL.toLowerCase() + ".gif)";
}

/*
 * Mostramos un panel definido en la propia plantilla
 */
YAHOO.global.panel.mostrarPanel = function(idDivCabecera,idDivContenido,ancho,contexto,alto){
    panel = new YAHOO.widget.Panel("general", {
    height:alto,
    width:ancho,
    constraintoviewport: true,
    close:true,
    visible:true,
    modal:true,
    context:contexto,
    fixedcenter:true,
    draggable:false});
    panel.setHeader(document.getElementById(idDivCabecera).innerHTML);
    body = document.getElementById(idDivContenido).innerHTML;
    if(body && body!=""){
        panel.setBody(body);
    }

    panel.setFooter("<input type='button' name='cerrar_panel' value='"+LBL_CERRAR+"' style='float:right;' class='boton' onclick='YAHOO.global.panel.destruirPanel()' />");

    var kl = new YAHOO.util.KeyListener(document, { keys:27 }, { fn:panel.hide, scope:panel, correctScope:true } );
    panel.cfg.queueProperty("keylisteners", kl);
    panel.render(document.body);
    YAHOO.global.panel.ultimoPanel = panel;
};

/*
 * Ocultamos el último panel visible
 */
YAHOO.global.panel.destruirPanel = function(){
    YAHOO.global.panel.ultimoPanel.hide();
};


