
function EntradaFiltro(idEntrada, filtro){
    this.idFiltro = idEntrada;
    this.filtro = filtro;
}
    
function cargarDataTable(){
    
    var _filtroBusqueda = "";
    var _entradasFiltro = new Array();
    var _idUltimaEntrada = 0;

    function agregarEntradaFiltro(){
        var pnlFiltro = new YAHOO.util.Element('pnlEntradasFiltro');
        var div = new YAHOO.util.Element(document.createElement('div'));
        div.set('id', 'filtro'+_idUltimaEntrada, true);
        div.addClass('divFiltroB');

        var divFiltroIzq = new YAHOO.util.Element(document.createElement('div'));
        divFiltroIzq.set('id', 'filtro'+_idUltimaEntrada+'Izq', true);
        divFiltroIzq.addClass('divFiltroIzq');

        var divFiltroDer = new YAHOO.util.Element(document.createElement('div'));
        divFiltroDer.set('id', 'filtro'+_idUltimaEntrada+'Der', true);
        divFiltroDer.addClass('divFiltroDer');

        div.appendChild(divFiltroIzq);
        div.appendChild(divFiltroDer);

        var select = new YAHOO.util.Element(document.createElement('select'));
        select.set('id', 'filtro'+_idUltimaEntrada+'_select', false);
        cargarSelectClaveFiltro(select);
        divFiltroIzq.appendChild(select);

        var span = document.createElement('span');
        span.innerHTML = " ";
        divFiltroIzq.appendChild(span);

        agregarBotonesDivFiltro(div);
        pnlFiltro.appendChild(div);
        _entradasFiltro.push(new EntradaFiltro(_idUltimaEntrada++, null));

        var oElement = document.getElementById(select.get('id'));
        YAHOO.util.Event.addListener(oElement, "change", cargarOpcionesFiltro);
    }

    function eliminarEntradaFiltro(mouseEvent, divAEliminar){
        var pnlFiltro = new YAHOO.util.Element('pnlEntradasFiltro');
        if(pnlFiltro.get('childNodes').length > 1)
            pnlFiltro.removeChild(divAEliminar);
    }    

    function cargarOpcionesFiltro(e, divEntrada) {
        var select = new YAHOO.util.Element(this);
        var divFiltroIzq = new YAHOO.util.Element(this.parentNode);
        var aux = divFiltroIzq.get('id');
        aux = aux.toString().replace('filtro', '');
        aux = aux.toString().replace('Izq', '');
        try{
            actualizarOpcionesFiltro(divFiltroIzq, _entradasFiltro[aux], _filtrosDisponibles[select.get('value')].tipoFiltro);
        }catch(e){
            while(divFiltroIzq.get('childNodes').length > 2){
                divFiltroIzq.removeChild(divFiltroIzq.get('lastChild'));
            }
        }
    }

    function actualizarOpcionesFiltro(div, entradaFiltro, tipoDato){
        YAHOO.util.Connect.asyncRequest('POST', _urlActualizarFiltro+"tipoDatosFiltro="+tipoDato, { success:respuestaFiltroOK, failure:respuestaFiltroError, timeout:3000, argument: [div, entradaFiltro, tipoDato] });
    }

    function respuestaFiltroOK(o){

        while(o.argument[0].get('childNodes').length > 2){
            o.argument[0].removeChild(o.argument[0].get('lastChild'));
        }

        var elemAux = document.createElement('div');
        elemAux.innerHTML = o.responseText;
        for(i=0;i<elemAux.childNodes.length;i++){
            o.argument[0].appendChild(elemAux.childNodes[i]);
        }

    }

    function respuestaFiltroError(o){
        while(o.argument[0].get('childNodes').length > 2){
            o.argument[0].removeChild(o.argument[0].get('lastChild'));
        }

        o.argument[0].appendChild(document.createTextNode("Error al cargar el filtro"));
    }

    function cargarSelectClaveFiltro(select){
        var option = new YAHOO.util.Element(document.createElement('option'));
        option.set('value', -1, false);
        option.appendChild(document.createTextNode('Selecciona un criterio'));
        select.appendChild(option);

        for(i=0;i<_filtrosDisponibles.length;i++){
            option = new YAHOO.util.Element(document.createElement('option'));
            option.set('value', _filtrosDisponibles[i].idFiltro, false);
            option.appendChild(document.createTextNode(_filtrosDisponibles[i].nombreFiltro));
            select.appendChild(option);
        }
    }

    function agregarBotonesDivFiltro(div){
        var btnDel = new YAHOO.util.Element(document.createElement('a'));
        btnDel.on('click', eliminarEntradaFiltro, div);
        var imgDel = new YAHOO.util.Element(document.createElement('img'));
        imgDel.set('src', 'imagenes/delete.gif', false);
        btnDel.appendChild(imgDel);
        new YAHOO.util.Element(div.get('childNodes')[1]).appendChild(btnDel);

        var btnAdd = new YAHOO.util.Element(document.createElement('a'));
        btnAdd.on('click', agregarEntradaFiltro);
        var imgAdd = new YAHOO.util.Element(document.createElement('img'));
        imgAdd.set('src', 'imagenes/add.png', false);
        btnAdd.appendChild(imgAdd);
        new YAHOO.util.Element(div.get('childNodes')[1]).appendChild(btnAdd);
    }
    
    var loader = new YAHOO.util.YUILoader({
        base: "",
        require: ["connection","datatable","json","paginator","element"],
        loadOptional: false,
        combine: true,
        filter: "MIN",
        allowRollup: true
    });

loader.insert({
        onSuccess: function() {

            var loaderCSS = new YAHOO.util.YUILoader();
            loaderCSS.addModule({
              name:'eydcmscss',
              type:'css',
              fullpath:_fixcss
            });

            loaderCSS.require('eydcmscss');

            loaderCSS.insert({
                onSuccess: function() {
                    //alert("cargado css");
                }
            });

            function inicializarEntradasFiltro(){
                var pnlEntradasF = document.getElementById('pnlEntradasFiltro');
                var entradas = pnlEntradasF.childNodes;
                if(entradas.length>0){
                    for(i=0;i<entradas.length;i++){
                        if(entradas[i].tagName == "DIV"){
                            divDer = new YAHOO.util.Element(entradas[i].childNodes[1]);
                            var btnAdd = new YAHOO.util.Element(divDer.get('childNodes')[0]);
                            btnAdd.on('click', agregarEntradaFiltro);
                        }
                    }
                    _idUltimaEntrada = entradas.length;
                    formarURLFiltro();
                }else{
                    agregarEntradaFiltro();
                }
            }

            function formarURLFiltro(){
                _filtroBusqueda = "";
                var pnlEntradasF = document.getElementById('pnlEntradasFiltro');
                var entradas = pnlEntradasF.childNodes;
                if(entradas.length>0){
                    for(i=0;i<entradas.length;i++){
                        if(entradas[i].tagName == "DIV"){
                            divIzq = new YAHOO.util.Element(entradas[i].firstChild);
                            selects = divIzq.getElementsByTagName("select");
                            inputs = divIzq.getElementsByTagName("input");
                            if(selects.length==2 && inputs.length==1){
                                selectTipo = selects[0];
                                selectOperador = selects[1];
                                input = inputs[0];
                                aux = selectTipo.value+"_"+selectOperador.value+"_"+inputs[0].value;
                                if(inputs[0].value != "")
                                    _filtroBusqueda += "&"+entradas[i].id+"="+aux;
                            }
                        }
                    }
                }
                var f = "results="+_filasPorPagina+_filtroBusqueda;
                if(myDataSource != null)
                    myDataSource.sendRequest(f, myDataTable.onDataReturnInitializeTable, myDataTable);
            }


            var oElement = document.getElementById('btnFiltro');
            YAHOO.util.Event.addListener(oElement, "click", formarURLFiltro);
            inicializarEntradasFiltro();

            var myDataSource = new YAHOO.util.XHRDataSource(_urlDataSource);
            myDataSource.connMethodPost = true;
            myDataSource.responseSchema = {
                resultsList: "Respuesta.resultados",
                fields: _camposRespuesta,
                metaFields:{totalfilas:"Respuesta.totalfilas"} // Access server-provided dynamic value
            };

            var formarPeticion = function(oState, oSelf) {
                // Get states or use defaults
                oState = oState || {pagination:null, sortedBy:null};
                var sort = (oState.sortedBy) ? oState.sortedBy.key : "myDefaultColumnKey";
                var dir = (oState.sortedBy && oState.sortedBy.dir === DT.CLASS_DESC) ? "false" : "true";
                var startIndex = (oState.pagination) ? oState.pagination.recordOffset : 0;
                var results = (oState.pagination) ? oState.pagination.rowsPerPage : 100;

                var valor = "startIndex=" + startIndex + "&results=" + results + _filtroBusqueda;
                return valor;

            };

            var myConfigs = {
                generateRequest : formarPeticion,
                paginator : new YAHOO.widget.Paginator({
                    containers : ["div-paginacion"],
                    rowsPerPage    : _filasPorPagina,
                    template : "<table style='width:auto;margin: 0pt 0pt auto auto;border:1px solid #CB1D22;' border='1' class='tablaPaginacion'><tr><td>{CurrentPageReport}</td><td>{FirstPageLink}</td><td>{PreviousPageLink}</td><td>{PageLinks}</td><td>{NextPageLink}</td><td>{LastPageLink}</td><tr></table>",
                    firstPageLinkLabel : "&lt;&lt;",
                    lastPageLinkLabel : "&gt;&gt;",
                    nextPageLinkLabel : "&gt;",
                    previousPageLinkLabel : "&lt;",
                    scrollable:true,
                    //width:"200px",
                    pageReportTemplate : "Página {currentPage} de {totalPages}",
                    pageLabelBuilder : function (page,paginator) {
                        return buildPageLabel(page);
                    }
                }),
                initialRequest:"results="+_filasPorPagina+_filtroBusqueda,
                dynamicData : true,
                MSG_LOADING: "Cargando...",
                MSG_ERROR: "Error al cargar los datos",
                MSG_EMPTY: "No se han encontrado resultados"
            };

            var myDataTable = new YAHOO.widget.DataTable("tablaResultados", myColumnDefs, myDataSource, myConfigs);
            myDataTable.set("selectionMode","single");
            myDataTable.subscribe("rowClickEvent", myDataTable.onEventSelectRow);
            myDataTable.subscribe("rowClickEvent", mostrarEvento);

            myDataTable.handleDataReturnPayload = function(oRequest, oResponse, oPayload) {
                if(oPayload == null)
                    oPayload = {page:1};
                oPayload.totalRecords = oResponse.meta.totalfilas;
                return oPayload;
            }

            function mostrarEvento(){
                var rows = myDataTable.getSelectedRows();
                var record = myDataTable.getRecord(rows[0]);

                try{
                    cargarDatosParaFilaSeleccionada(record);
                }catch(e){}
            }

            buildPageLabel = function (page) {
                return page;
            };
        }
    });
}

function Filtro(idFiltro, nombreFiltro, tipoFiltro){
    this.idFiltro = idFiltro;
    this.nombreFiltro = nombreFiltro;
    this.tipoFiltro = tipoFiltro;
}