var arr_js = new Array() //lista de archivos js que se han cargado dinamicamente
var arr_css = new Array() //lista de archivos css que se han cargado dinamicamente
var cont_form_entidad = new Array() //contador de los formulario solicitados por entidad (agregado)

carga_js("/funciones/js/interfaz.js");
carga_js("/funciones/jq/jquery.validate.min.js");

var opciones_form=new Array(); //declaracion del arreglo que los archivos js de las entidades usan para poner las caracteristicas personalizadas para el dialog del form, por ejemplo declarar el tamaño del dialog
var nombre_div_modal="div_modal_";    //id del div que se va a usar como dialog
var nombre_form_modal="form_modal_";  //id del formulario  dentro del dialog
var obj_modal=new Object();  //almacena los arreglos que se usan para mostrar los formularios, se guarda para volver a cargar el formulario despues de guardar
var obj_modal_guardar=new Object(); //almacena los arreglos que se usan para guardar los formularios, se guarda para poder guardar mas de una vez

var directorio_estilos = "/css/theme/azul/";
var hoja_estilos = "theme.css";
var div_alert = "alert_";
var cancela_ligas_auto = false ; //no detener la carga de ligas

var directorio_form_js = "/funciones/jq/qn/";
var sufijo_form_js = "_jq";

if (typeof(leyenda) == "undefined")
{
    var leyenda = new Array();
}

var i;
var imagenes = new Array(directorio_estilos+"/images/procesando.gif");
var lista_imagenes = new Array();
for(i in imagenes)
{
    lista_imagenes[i] = new Image();
    lista_imagenes[i].src = imagenes[i];
}

leyenda["formulario_continuar"] = "Continuar";
leyenda["formulario_cancelar"] = "Cancelar";
leyenda["formulario_cerrar"] = "Cerrar";
leyenda["formulario_guardar"] = "Guardar";
leyenda["formulario_recargar"] = "Recargar";
leyenda["formulario_recarga_tit"]="Recargar Formulario";
leyenda["formulario_recarga_msg"]="Se perder&aacute;n todos los cambios que no se han guardado";
leyenda["formulario_procesando"] = "Procesando";
leyenda["formulario_error_respuesta"]="El formato de la respuesta no es reconocido";
leyenda["formulario_guardar_ok"]="La informaci&oacute;n se guard&oacute; correctamente";
leyenda["formulario_guardar_error"]="La informaci&oacute;n no se pudo guardar";
leyenda["formulario_buscar"]="Buscar";
leyenda["formulario_titulo_alert"]="Aviso";

//download
leyenda["formulario_tipo_archivo_foto"] = "Fotos";
leyenda["formulario_tipo_archivo_documento"] = "Documentos";
leyenda["formulario_tipo_archivo_podcast"] = "Podcast";
leyenda["formulario_download_paso1_ok"] = "Paso 1 completo. Enviando archivo ";
leyenda["formulario_download_archivo_mal"] = "El archivo seleccionado no es de un formato permitido ";
leyenda["formulario_download_titulo_alert"] = "Envio de archivos ";
leyenda["formulario_download_archivo_grande"] = "El archivo es mas grande de lo permitido ";

//carga de interfaz y personalizacion del mensaje de espera
var mensaje_espera_interfaz =  '<div style="padding: 0px 5px; margin:10px;" class="ui-state-highlight ui-corner-all">';
mensaje_espera_interfaz += '<p><span style="float: left; margin-right: 0.3em;" class="ui-icon ui-icon-info"/>';
mensaje_espera_interfaz += "<span style='position:absolute; font-size=11px; padding: 3px 3px 3px 30px;'>"+leyenda["formulario_procesando"]+"</span>";
mensaje_espera_interfaz += "<img src='"+directorio_estilos+"/images/procesando.gif' />";
mensaje_espera_interfaz += '</p></div>';

var cont_procesando =  '<div style="padding: 0px 5px;  margin:10px;" class="ui-state-highlight ui-corner-all">';
cont_procesando += '<p><span style="float: left; margin-right: 0.3em;" class="ui-icon ui-icon-info"/>';
cont_procesando += "<span style='position:absolute; font-size=11px; padding: 3px 3px 0px 30px;'>"+leyenda["formulario_procesando"]+"</span>";
cont_procesando += "<img src='"+directorio_estilos+"/images/procesando.gif' />";
cont_procesando += '</p></div>';

$(document).ready(function()
{
    if (!cancela_ligas_auto)
    {
        prepara_ligas ();
    }
    updateCSS_f(directorio_estilos+hoja_estilos);
});

//crea y prepara un div para usarlo como dialog, por default es modal
function dialog_qn(div,obj_op_rec)
{
    var obj_op = $.extend({
        height : 400,
        width : 500,
        title : "sin titulo",
        clase : "form_jq",
        hide : "fold",
        show : "fold",
        modal : true,
        buttons : {
            "Cancelar": function() {
                $(this).dialog("close");
            }
        },
        autoOpen : false,
        close :  function(ev, ui) {
            $(this).remove();
        }
    }, obj_op_rec);
    obj_op.dialogClass=obj_op.clase;
    //crear div si no existe, con jQ
    if (!document.getElementById(div))
    {
        $("<div id='"+div+"'></div>").appendTo("body");
    }
    $.ui.dialog.defaults.bgiframe = true;
    $("#"+div).dialog(obj_op);
}

//cuando un formulario no se va a procesar de la manera general se abre en un dialog, pero se debe proporcionar la funcionalidad para procesarlo
function prepara_liga_normal (obj_liga,entidad,div_modal,form_modal)
{
    var href = obj_liga.attr("href");
    if (typeof(opciones_form[entidad])!="undefined")
    {
        for(id in opciones_form[entidad])
        {
            $('#'+div_modal).dialog('option', id ,opciones_form[entidad][id]);
        }
    }
    $("#"+div_modal).load(href,"",function()
    {
        if(typeof("prepara_formulario_"+entidad)!='undefined')
        {
            eval("prepara_formulario_"+entidad+"('"+form_modal+"','"+div_modal+"')");
        }
    });
    $('#'+div_modal).dialog('open');
    return false;
}

//carga archivos js, guarda en un arreglo los archivos que ya cargo para no volverlos a cargar
function carga_js(archivo_js)
{
    if ($.inArray(archivo_js, arr_js)<0)
    {
        arr_js.push(archivo_js);
        $.getScript(archivo_js);
    }
}
function interpreta_liga_edicion(query_string)
{
    get = query_string.split("&")
    var get_env = new Array();
    var pf = new Array();        //parametros forma
    for(id in get)
    {
        get_ = get[id].split("=");
        get_env[get_[0]] = get_[1];
        //soporte de pf en arreglo de 1 nivel
        nombre_get=get_[0].split("[");
        if (nombre_get[0] == "pf")
        {
            nombre_indice=nombre_get[1].replace("]","");
            if (nombre_indice != "fc")
            {
                pf[nombre_indice]=get_[1];
            }
        }
    }
    var entidad="";
    if( typeof( get_env["ad2[pfn]"] ) != 'undefined' )
    {
        entidad = get_env["ad2[pfn]"];
        var directorio_js = ( typeof( directorio_form_op ) != "undefined" )? directorio_form_op : directorio_form_js;
        carga_js( directorio_js + entidad + sufijo_form_js + ".js" );
    }
    return {
        entidad : entidad,
        get_env : get_env,
        pf :  pf
    }
}

function ejecuta_liga_edicion(di_)
{
    //di_ = datos interfaz
    var entidad = di_.entidad;
    var get_env = di_.get_env;
    var pf = di_.pf;
    var opciones = $.extend({
        embebido : false,
        botones : true,
        agregado : false,
        incluir_form : true,
        multi_contenedores : false,
        errorClass : "error",
        solo_arreglos : false
    }, opciones_form[entidad]);

    var contenedor_embebido = "";
    if( opciones.embebido && typeof( get_env["cont"] ) != 'undefined' )
    {
        contenedor_embebido = get_env["cont"]
    }
    if ( opciones.agregado )
    {
        if( typeof( get_env["cont_ag"] ) != 'undefined' )
        {
            cont_form_entidad[entidad] = ( isNaN( parseInt( cont_form_entidad[entidad] ) )? 0 : parseInt(cont_form_entidad[entidad]) ) + 1;
            opciones.embebido = true;
            opciones.botones = false;
            opciones.incluir_form = false ;
            opciones.multi_contenedores = true;
            contenedor_embebido = get_env["cont_ag"]
            pf["indice_campos"]=cont_form_entidad[entidad];
        }
        else
        {
            opciones.agregado = false;
        }
    }
    var div_modal = nombre_div_modal + ( ( entidad == "" ) ? "gen" : entidad );
    var form_modal = nombre_form_modal + ( ( entidad == "" ) ? "gen" : entidad);
    
    //permitir multiples contenedores
    if(opciones.multi_contenedores)
    {
        $("#resp_"+form_modal).remove();
        $("#"+form_modal).attr("id","");
        $("#cont_"+form_modal).attr("id","");
    }
    var contenido_form_modal =  (opciones.incluir_form) ? "<div id=\"resp_"+form_modal+"\"  style='margin:0px;'><br></div>" : "";
    contenido_form_modal += (opciones.incluir_form) ? "<form id=\""+form_modal+"\" class=\"form_modal\" style='margin: 2px 0px 0px 0px;' >" : "";
    contenido_form_modal += "<div id=\"cont_"+form_modal+"\">";    
    contenido_form_modal += "</div>";
    contenido_form_modal += (opciones.incluir_form) ? "</form>" : "";

    if (opciones.agregado)
    {
        var id_ag = "cont_"+form_modal+"_ag_"+cont_form_entidad[entidad];
        $("#"+contenedor_embebido).append( "<div id=\""+id_ag+"\" class=\"cont_agregado\">"+icono_eliminar(id_ag) + contenido_form_modal + "</div>");
    }
    else
    {
        if( opciones.embebido )
        {
            if(contenedor_embebido != "")
            {
                if( typeof(opciones.height) != "undefined" )
                {
                    $("#"+contenedor_embebido).css("height",$("#"+contenedor_embebido).css("height") );
                    $("#"+contenedor_embebido).animate({
                        height : opciones.height
                    }, 500, "linear");
                }
                $("#"+contenedor_embebido).html(contenido_form_modal);
            }
        }
        else
        {
            dialog_qn(div_modal);
            $('#'+div_modal).html(contenido_form_modal);
        }
    }
    
    /////////////
    var titulo=(typeof(get_env["titulo"])=="undefined")?"":unescape(get_env["titulo"]);
    opciones.title = titulo;

    var boton_cont_of = "";
    if( opciones.botones && typeof( opciones.buttons ) == "undefined"  )
    {
        var txt_botones_of = 'new Object (';
        txt_botones_of += '{' ;
        txt_botones_of += leyenda["formulario_guardar"] + ': function() { $("#"+form_modal).submit(); },';
        txt_botones_of += leyenda["formulario_cancelar"] + ': function() { '+( ( opciones.embebido )?"actualiza_listado('"+contenedor_embebido+"','"+entidad+"');" : '$(this).dialog("close");' )+' },';
        txt_botones_of += leyenda["formulario_recargar"] + ': function() {    confirma_recarga_form(entidad); }';
        txt_botones_of += '}';
        txt_botones_of += ')';
        boton_cont_of= eval (txt_botones_of);
        opciones.buttons = boton_cont_of;
    }
    /////////////
    
    if( entidad == "" || get_env["modo"]=='normal' )
    {
        prepara_liga_normal ($(this),entidad,div_modal,form_modal);
        return false;
    }
    var metodo_forma="";
    if( typeof( get_env["ad[fn]"] ) != 'undefined' )
    {
        metodo_forma=get_env["ad[fn]"];
    }
    arr_consulta = arr_resp(get_env["fm"],metodo_forma,"cont_"+form_modal+"");
    if( typeof(get_env["vi"]) != "undefined" )
    {
        arr_consulta["vi"] = get_env["vi"];
    }
    if( typeof(get_env["ln"]) != "undefined" )
    {
        arr_consulta["ln"] = get_env["ln"];
    }
    arr_consulta["pf"] = pf;
    
    //funciones para despues de cargar
    arr_consulta["accJq"].push("if(typeof(prepara_formulario_"+entidad+")!='undefined') { prepara_formulario_"+entidad+"('"+form_modal+"','"+div_modal+"'); } ");
    arr_consulta["accJq"].push("$('#cont_"+form_modal+"').css({'position' : '','overflow' : 'auto','height' : 'auto'})");
    if(opciones.botones)
    {
        arr_consulta["accJq"].push("libera_botones_modal('"+form_modal+"');");
    }
    obj_modal[entidad]=arr_consulta;
    
    //manipular el formulario
    var arr_guardar = arr_resp(get_env["fm2"],get_env["ad2[fn]"]);
    arr_guardar["ad"]["pfn"]=get_env["ad2[pfn]"];
    if( typeof(get_env["vi2"]) != "undefined" )
    {
        arr_guardar["vi"]=get_env["vi2"];
    }
    arr_guardar["estado_pet"]="guardar";
    arr_guardar["formulario"]=""+form_modal+"";

    var listado_act="";
    if( typeof(get_env["cont"]) != "undefined" )
    {
        listado_act = get_env["cont"];
    }

    arr_guardar["accJq"].push("procesa_respuesta_guardar(resp,'"+entidad+"','"+form_modal+"','"+listado_act+"')");

    if( typeof(get_env["control[ag]"]) != "undefined" )
        arr_guardar["control[ag]"] = get_env["control[ag]"];
    if( typeof(get_env["control[fn]"]) != "undefined" )
        arr_guardar["control[fn]"] = get_env["control[fn]"];
    if( typeof(get_env["control[fm]"]) != "undefined" )
        arr_guardar["control[fm]"] = get_env["control[fm]"];

    obj_modal_guardar[entidad] = arr_guardar;
    $("#"+form_modal+"").validate(
    {
        submitHandler: function()
        {
            if ( typeof(opciones.funcion) != "undefined" )
            {
                opciones.funcion(form_modal,div_modal);
            }
            else
            {
                //se usa el arreglo guardado (obj_modal_guardar[entidad]) porque se edita con la respuesta del formulario
                pet_interfaz(obj_modal_guardar[entidad]);
                inhabilita_form(form_modal,div_modal);
            }
        },
        errorClass: opciones.errorClass
    });

    if(!opciones.solo_arreglos)
    {
        //ejecutar la peticion
        pet_interfaz(arr_consulta);
    }
    $.each(opciones, function(id, val) {
        $('#'+div_modal).dialog('option', id ,opciones[id]);
    });

    var opciones_botones=new Array();
    opciones_botones.push(["ui-icon-disk","btn_guardar_"+form_modal,100,1]);
    opciones_botones.push(["ui-icon-circle-close","btn_cancelar_"+form_modal,100,0]);
    opciones_botones.push(["ui-icon-refresh","btn_recargar_"+form_modal,100,1]);
    var cont_b = 0;
    if( opciones.embebido )
    {
        if (opciones.botones)
        {
            if(contenedor_embebido != "")
            {
                $('<div id="botones_'+div_modal+'" style="" ></div>').appendTo("#"+contenedor_embebido);
                $("#resp_"+form_modal).remove();
                $("#"+contenedor_embebido).before("<div id=\"resp_"+form_modal+"\"  style='margin:0px;'><br></div>");
                obj_modal_guardar[entidad]["accJq"].push("setTimeout('$(\"#resp_"+form_modal+"\").fadeOut(\"slide\")',2000)");
                for(text_boton in opciones.buttons)
                {
                    cont_boton = "";
                    cont_boton += '<button disabled="disabled" id="'+opciones_botones[cont_b][1]+'" class="ui-state-disabled ui-state-default ui-corner-all" type="button" style="width: '+opciones_botones[cont_b][2]+'px; height:27px; font-size:11px; margin:5px;">';
                    cont_boton += '<span class="ui-icon '+opciones_botones[cont_b][0]+'" style="float: left; margin-right: 0.3em; position: relative;"/>';
                    cont_boton += ''+text_boton;
                    cont_boton += '</button>';
                    cont_b++;
                    $(cont_boton).prependTo('#botones_'+div_modal).click(opciones.buttons[text_boton]);
                }
            }
        }
    }
    else
    {
        if(!opciones.solo_arreglos)
        {
            $('#'+div_modal).dialog('open');
            if(opciones.botones)
            {
                //establecer imagen e id a los botones del dialog
                var arr_parents = $('#'+div_modal).parents(".ui-dialog");
                $(" button ", arr_parents[0] ).each(function () {
                    if( typeof(opciones_botones[cont_b]) != "undefined" )
                    {
                        $(this).html('<span style="float:left; margin-right: 0.3em; position:relative;" class="ui-icon '+opciones_botones[cont_b][0]+'"/>'+$(this).html());
                        $(this).attr("id",opciones_botones[cont_b][1]);
                        $(this).css({
                            'width' : opciones_botones[cont_b][2]
                        });
                        if (opciones_botones[cont_b][3])
                        {
                            $(this).attr("disabled","disabled");
                            $(this).addClass("ui-state-disabled");
                        }
                    }
                    cont_b++;
                });
            }
        }
    }   
    return false;
}
//todas las ligas que tengan la clase edit_dialog se procesan para agregarle la funcionalidad de formularios modales las ligas deben estar generadas con la funcion liga_edicion_clase
function prepara_ligas (selector_liga_rec,clase_sel,directorio_form_op)
{
    var selector_liga = ".edit_dialog";
    var clase_remover = "edit_dialog";
    var clase_liga_sel = "edit_dialog_sel";
    
    if( typeof(selector_liga_rec) != "undefined" )
    {
        selector_liga = ( selector_liga_rec[0] == '#' || selector_liga_rec[0] == '.' ) ? selector_liga_rec : "#" + selector_liga_rec;
        clase_remover = ( selector_liga_rec[0] == '.' ) ? clase_remover.replace(".","") : clase_remover;
    }
    if( typeof(clase_sel)!="undefined" )
    {
        clase_liga_sel = clase_sel;
    }
    $(selector_liga).each(function()
    {
        var href = $(this).attr("href");
        partes_href = href.split("?");
        var info_peticion = interpreta_liga_edicion(partes_href[1]);
        $(this).click(function()
        {
            ejecuta_liga_edicion(info_peticion);
            $("."+clase_liga_sel).removeClass(clase_liga_sel);
            $(this).addClass(clase_liga_sel);
            return false;
        }).removeClass(clase_remover);        
    });
}
function icono_eliminar(id_eliminar)
{
    var cont_eliminar ='<div onclick="eliminar_agregado(\''+id_eliminar+'\')" class="ui-state-default ui-corner-all quitar_agregado" ><span class="ui-icon ui-icon-close " /></div>';
    return cont_eliminar;
}
function eliminar_agregado(id_eliminar)
{
    $("#"+id_eliminar).remove();
}
function inhabilita_form(form_modal,div_modal)
{
    var cssObj ={
        'position' : 'relative',
        'overflow' : 'hidden',
        'height' : (document.getElementById(div_modal)) ? $('#'+div_modal).dialog('option', "height")-145+"px" : "auto"
    }
    $('#cont_'+form_modal).css(cssObj);
    $('#resp_'+form_modal).html(cont_procesando);
    $("<div id='contfin_"+form_modal+"' class='ui-widget-overlay'></div>").appendTo('#cont_'+form_modal);
    $("#btn_guardar_"+form_modal).attr("disabled","disabled");
    $("#btn_guardar_"+form_modal).addClass("ui-state-disabled");
}

function libera_botones_modal(form_modal_lbm)
{
    $("#btn_guardar_"+form_modal_lbm).removeAttr("disabled");
    $("#btn_guardar_"+form_modal_lbm).removeClass("ui-state-disabled");

    $("#btn_cancelar_"+form_modal_lbm).removeAttr("disabled");
    $("#btn_cancelar_"+form_modal_lbm).removeClass("ui-state-disabled");

    $("#btn_recargar_"+form_modal_lbm).removeAttr("disabled");
    $("#btn_recargar_"+form_modal_lbm).removeClass("ui-state-disabled");
}
function recibe_json(cadena_json)
{
    try
    {
        eval("var arr_json="+cadena_json);
        return arr_json;
    }
    catch(err)
    {
        alert(cadena_json);
        return false;
    }
}
//despues de guardar un formulario  se procesa la respuesta y se vuelve a cargar el formulario con los datos nuevos
function procesa_respuesta_guardar(respuesta,entidad_pr,form_modal_pr,listado_act_pr)
{
    arr_resp_json = recibe_json(respuesta);
    if (!arr_resp_json)
    {
        return false;
    }
    var mensaje_resp="";
    var pet_ejecutada=false;
    if( typeof[arr_resp_json.resultado] == "undefined")
    {
        mensaje_resp += "<br>" + leyenda["formulario_error_respuesta"];
        $('#resp_'+form_modal_pr).html(mensaje_resp);
    }
    else
    {
        if( arr_resp_json.resultado == 1 )
        {
            var cont_ok =  '<div style="padding: 0px 5px;" class="ui-state-highlight ui-corner-all">';
            cont_ok += '<p><span style="float: left; margin-right: 0.3em;" class="ui-icon ui-icon-check"/>';
            cont_ok += leyenda["formulario_guardar_ok"]+'.</p>';
            cont_ok += '</div>';

            $('#resp_'+form_modal_pr).html(cont_ok);
            if (typeof(obj_modal[entidad_pr]) != "undefined")
            {
                var arr_consulta_pr=obj_modal[entidad_pr];
                //solo entraria aqui si es formulario de agregar
                if ( typeof(arr_resp_json["control"]) != "undefined" && typeof( arr_resp_json["respuesta"] ) != "undefined")
                {
                    //alert(arr_resp_json["control"]["ag"] +":"+arr_consulta_pr[arr_resp_json["control"]["ag"]] )
                    //solo la primera vez
                    if ( typeof ( arr_consulta_pr[arr_resp_json["control"]["ag"]] ) == "undefined" )
                    {
                        //agregar el id inicial
                        arr_consulta_pr[arr_resp_json["control"]["ag"]]=arr_resp_json["respuesta"];
                        if( typeof( obj_modal_guardar[entidad_pr][arr_resp_json["control"]["ag"]] ) == "undefined" )
                        {
                            obj_modal_guardar[entidad_pr][arr_resp_json["control"]["ag"]]=arr_resp_json["respuesta"];
                        }
                        //cambiar el metodo
                        if( typeof( arr_resp_json["control"]["fn"] ) != "undefined" )
                        {
                            obj_modal_guardar[entidad_pr]["ad"]["fn"]=arr_resp_json["control"]["fn"];
                        }
                        //cambiar la clase
                        if( typeof( arr_resp_json["control"]["fm"] ) != "undefined" )
                        {
                            obj_modal_guardar[entidad_pr]["fm"]=arr_resp_json["control"]["fm"];
                        }
                    }
                    //cargar de nuevo el formulario, generalmente cambia por un formulario de edicion
                    arr_copia = copy(arr_consulta_pr);
                    if (typeof(listado_act_pr) != "undefined")
                    {
                        arr_copia["accJq"].push("setTimeout(\"actualiza_listado('"+listado_act_pr+"','"+entidad_pr+"')\",500)");
                    }
                    if (opciones_form[entidad_pr]["cerrar_guardar"])
                    {
                        //pendiente ver implicaciones
                        if (typeof(listado_act_pr) != "undefined")
                        {
                            ejecutar = "actualiza_listado('"+listado_act_pr+"','"+entidad_pr+"'); ";
                            setTimeout(ejecutar,500);
                        }
                        $("#btn_cancelar_"+form_modal_pr).click();
                        return true;
                    }
                    pet_interfaz(arr_copia);
                    pet_ejecutada=true;

                }
                else
                {
                    if (typeof(listado_act_pr) != "undefined")
                    {
                        //var ejecutar = "$('#contfin_"+form_modal_pr+"').remove(); ";
                        ejecutar = "actualiza_listado('"+listado_act_pr+"','"+entidad_pr+"'); ";
                        //ejecutar += "$('#cont_"+form_modal_pr+"').css({'position' : '','overflow' : 'auto','height' : 'auto'}); ";
                        setTimeout(ejecutar,500);
                    }
                }
            }
        }
        else
        {
            mensaje_resp += "" + leyenda["formulario_guardar_error"];
            mensaje_resp += "<br>" + arr_resp_json["respuesta"];
            var cont_error =  '<div style="padding: 0px 5px;" class="ui-state-error ui-corner-all">';
            cont_error += '<p><span style="float: left; margin-right: 0.3em;" class="ui-icon ui-icon-closethick"/>';
            cont_error += mensaje_resp+'.</p>';
            cont_error += '</div>';
            $('#resp_'+form_modal_pr).html(cont_error);
        }
        if (opciones_form[entidad_pr]["cerrar_guardar"])
        {
            $("#btn_cancelar_"+form_modal_pr).click();
            return true;
        }
        if (opciones_form[entidad_pr]["recarga_form"] && pet_ejecutada==false)
        {
            pet_interfaz(obj_modal[entidad_pr]);
        }
        else if(pet_ejecutada==false)
        {
            $("#contfin_"+form_modal_pr).remove();
            $("#cont_"+form_modal_pr).css({
                'position' : '',
                'overflow' : 'auto',
                'height' : 'auto'
            });
        }
        libera_botones_modal(form_modal_pr);
        $("#btn_cancelar_"+form_modal_pr).html('<span style="float:left; margin-right: 0.3em; position:relative;" class="ui-icon ui-icon-check"/>'+leyenda["formulario_continuar"]);
    }
    return true;
}

//carga el listado desde donde abrimos el modal, solo si aplica
function actualiza_listado(id_div_list,entidad_al)
{
    id_div_list = new String(id_div_list);
    if( id_div_list.length > 0  )
    {
        id_div_list = id_div_list.toString();
        var datos_listado = $("#"+id_div_list).attr("dlist")
        if ( typeof(datos_listado) != "undefined" )
        {
            var datos_peticion = datos_listado.split("||");
            //alert(datos_listado+":"+datos_peticion.length)
            if ( datos_peticion.length == 5)
            {
                pat = /=/;
                var arr_pf;
                //if (datos_pf.length > 1)
                if (pat.test(datos_peticion[3]))
                {
                    datos_pf = datos_peticion[3].split("|_|");
                    arr_pf = new Array();
                    for(id in datos_pf)
                    {
                        get_ = datos_pf[id].split("=");
                        arr_pf[get_[0]] = get_[1];
                    //alert("arr_pf["+get_[0]+"] = "+get_[1]+";");
                    }
                }
                else
                {
                    arr_pf = id_div_list;
                }
                var arr_pet_al = arr_resp(datos_peticion[0],datos_peticion[1],id_div_list) ;
                arr_pet_al["vi"] = datos_peticion[2] ;
                arr_pet_al["ln"] = datos_peticion[4] ;
                arr_pet_al["pf"] = arr_pf;
                arr_pet_al["accJq"].push("prepara_ligas()");
                if ( typeof(opciones_form[entidad_al]["funcion_listado"]) == "function")
                {
                    arr_pet_al["accJq"].push("opciones_form['"+entidad_al+"']['funcion_listado']()");
                }
                pet_interfaz(arr_pet_al) ;
            }
        }
    }
    return false;
}

//confirmar la recarga de un formulario
function confirma_recarga_form(entidad_cr)
{
    confirmar( leyenda["formulario_recarga_tit"], leyenda["formulario_recarga_msg"], function (){
        pet_interfaz(obj_modal[entidad_cr])
    } );
}

//sustituto del confirm tradicional
function confirmar(titulo_c,mensaje_c,funcion_c)
{
    var cont_confirm =  '<div style="margin:10px;">';
    cont_confirm += '    <div style="float:left; margin:0 7px 20px 0; padding:5px;" class="ui-state-hover ui-corner-all" >';
    cont_confirm += '        <span class="ui-icon ui-icon-info" />';
    cont_confirm += '    </div>';
    cont_confirm += '    <div style="float:left; padding:5px;">' + mensaje_c + '</div>';
    cont_confirm += '</div>';

    var txt_botones = 'new Object (';
    txt_botones += '{' ;
    txt_botones += leyenda["formulario_continuar"] + ': function() { funcion_c(); $(this).dialog("close"); },';
    txt_botones += leyenda["formulario_cancelar"] + ': function() {    $(this).dialog("close"); }';
    txt_botones += '}';
    txt_botones += ')';
    var boton_cont= eval (txt_botones);
    var obj_confirm={
        show: "",
        hide: "",
        bgiframe: true,
        resizable: false,
        height: 150,
        width: 380,
        modal: true,
        overlay: {
            backgroundColor: '#000',
            opacity: 0.5
        },
        buttons: boton_cont,
        autoOpen:true,
        title: titulo_c
    }
    dialog_qn("confirm_recarga",obj_confirm);
    $("#confirm_recarga").html(cont_confirm);
}
//sustituto del alert tradicional
function alert_(mensaje_c,titulo_c,icono,obj_alert_rec)
{
    if (typeof(titulo_c) == "undefined")
    {
        titulo_c = leyenda["formulario_titulo_alert"];
    }
    var txt_botones = 'new Object (';
    txt_botones += '{' ;
    txt_botones += leyenda["formulario_continuar"] + ': function() { $(this).dialog("close"); }';
    txt_botones += '}';
    txt_botones += ')';
    var boton_cont = eval (txt_botones);
    var obj_alert = $.extend({
        show : "",
        hide : "",
        bgiframe : true,
        resizable : false,
        height : 150,
        width : 380,
        modal : true,
        overlay : {
            backgroundColor: '#000',
            opacity: 0.5
        },
        buttons : boton_cont,
        autoOpen : true,
        title : titulo_c

    }, obj_alert_rec);
    if (typeof(icono) == "undefined" || icono== "")
    {
        icono = "alert";
    }
    if (typeof(mensaje_c) == "undefined")
    {
        mensaje_c = "";
    }
    /*var width_right = obj_alert.width - 85;
    var height_right = obj_alert.height - 105;
    var cont_alert =  '<div style="margin:10px 0px;">';
    cont_alert += '    <div style="width: 16px; float:left; padding:5px;" class="ui-state-hover ui-corner-all" >';
    cont_alert += '        <span class="ui-icon ui-icon-'+icono+'" />';
    cont_alert += '    </div>';
    cont_alert += '    <div style="width: '+width_right+'px; height: '+height_right+'px; overflow:auto; float:right; padding:5px;">' + mensaje_c + '</div>';
    /*cont_alert += '</div>';        */
    var cont_alert =  '<div padding:5px;">' + mensaje_c + '</div>';
    dialog_qn(div_alert,obj_alert);
    $("#"+div_alert).html(cont_alert);
}
function asigna_valor_f(obj,indice,valor)
{
    alert_("Verificar ...");
    if (eval("typeof(obj."+indice+")")=="undefined")
    {
        eval("obj."+indice+"=valor;");
    }
}

//carga una nueva hoja de estilos
function updateCSS_f(locStr,identificador_CSS)
{
    if( typeof(identificador_CSS)=="undefined" )
    {
        identificador_CSS = "ui-theme";
    }
    cssLink = $('<link href="'+locStr+'" type="text/css" rel="Stylesheet" class="' + identificador_CSS + '" />');
    $("head").append(cssLink);
    if( $("link." + identificador_CSS ).size() > 3){
        $("link." + identificador_CSS + ":first").remove();
    }
}
//carga una sol ves una hoja de estilos
function carga_css(archivo_css,identificador_css)
{
    if ($.inArray(archivo_css, arr_css)<0)
    {
        arr_css.push(archivo_css);
        updateCSS_f(archivo_css,identificador_css)
    }
}

//controlar el paginado
function prepara_paginado(id_formulario,funcion_procesa,ancla_paginado,clase_paginado)
{
    if( typeof(clase_paginado) == "undefined" )
    {
        clase_paginado = "paginado"
    }
    $("."+clase_paginado+" a", "#"+id_formulario).each(function(){
        var href = $(this).attr("href");
        var obj_paginado = new Object();
        partes_href = href.split("?");
        get = partes_href[1].split("&")
        for(id in get)
        {
            get_ = get[id].split("=");
            obj_paginado[get_[0]] = get_[1];
        }
        $(this).click(function (){
            funcion_procesa(obj_paginado)
        });
        $(this).attr("href","#"+ancla_paginado);
    });
}