var arr_js=new Array() //lista de archivos js que se han cargado dinamicamente

carga_js("/funciones/js/interfaz.js");
carga_js("/funciones/jq/jquery.validate.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 = directorio_estilos+"/theme.css";
var div_alert = "alert_";

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;" 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;" 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 (typeof(cancela_ligas_auto)=="undefined" || cancela_ligas_auto != true)
    {
        prepara_ligas ();
    }
    updateCSS_f(hoja_estilos);
});



//crea y prepara un div para usarlo como dialog, por default es modal
function dialog_qn(div,obj_op)
{
    // si no existe el div, se crea con el mismo id que el usuario lo esta mandando
    if (typeof(obj_op)!="object" )
    {
        obj_op=new Object();
    }
    asigna_valor_f(obj_op,"height",400);
    asigna_valor_f(obj_op,"width",500);
    asigna_valor_f(obj_op,"title","sin titulo");
    asigna_valor_f(obj_op,"clase","form_jq");
    asigna_valor_f(obj_op,"hide","fold");
    asigna_valor_f(obj_op,"show","fold");
    asigna_valor_f(obj_op,"modal",true);
    asigna_valor_f(obj_op,"buttons",{
        "Cancelar": function() {
            $(this).dialog("close");
        }
    } );
    asigna_valor_f(obj_op,"autoOpen",false);
    asigna_valor_f(obj_op,"close", function(ev, ui) {
        $(this).remove();
    } );
    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);
    }
}

//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 (id_liga)
{
    var selector_liga=".edit_dialog";
    if( typeof(id_liga)!="undefined" )
    {
        selector_liga="#"+id_liga;
    }
    $(selector_liga).each(function()
    {
        var href = $(this).attr("href");
        partes_href = href.split("?");
        get = partes_href[1].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]"];
            carga_js( "/funciones/jq/qn/" + entidad + "_jq.js" );
        }

        $(this).click(function()
        {
		
            var div_modal = nombre_div_modal + ( ( entidad == "" ) ? "gen" : entidad );
            var form_modal = nombre_form_modal + ( ( entidad == "" ) ? "gen" : entidad);

            dialog_qn(div_modal);
            var contenid_form_modal =  "<div id=\"resp_"+form_modal+"\"  style='margin:0px;'><br></div>";
            contenid_form_modal += "<form id=\""+form_modal+"\" class=\"form_modal\" style='margin: 2px 0px 0px 0px;' >";
            contenid_form_modal += "		<div id=\"cont_"+form_modal+"\"></div>";
            contenid_form_modal += "</form>";
            $('#'+div_modal).html(contenid_form_modal);
			
            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;

            var titulo=(typeof(get_env["titulo"])=="undefined")?"":unescape(get_env["titulo"]);
            opciones_form[entidad]["title"]=titulo;
			
            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() {	$(this).dialog("close"); },';
            txt_botones_of += leyenda["formulario_recargar"] + ': function() {	confirma_recarga_form(entidad); }';
            txt_botones_of += '}';
            txt_botones_of += ')';
            var boton_cont_of= eval (txt_botones_of);
			
            opciones_form[entidad]["buttons"]=boton_cont_of;
			
            //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'})");
            arr_consulta["accJq"].push("libera_botones_modal('"+form_modal+"');");
			
            obj_modal[entidad]=arr_consulta;
            //ejecutar la peticion
            pet_interfaz(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]"];
            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_form[entidad]["funcion"]) != "undefined" )
                    {
                        opciones_form[entidad]["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);
                    }
                }
            });
            //$("#"+form_modal+"").validate();
            if (typeof(opciones_form[entidad])!="undefined")
            {
                for(id in opciones_form[entidad])
                {
                    $('#'+div_modal).dialog('option', id ,opciones_form[entidad][id]);
                }
            }
			
            $('#'+div_modal).dialog('open');
			
            //establecer imagen e id a los botones del dialog
            var arr_parents = $('#'+div_modal).parents(".ui-dialog");
            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;
            $(" 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;
        }).removeClass("edit_dialog");
    });
}
function inhabilita_form(form_modal,div_modal)
{
    var cssObj =
    {
        'position' : 'relative',
        'overflow' : 'hidden',
        'height' : $('#'+div_modal).dialog('option', "height")-145+"px"
    }
    $('#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_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);
    }
}
//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)
{
    //$resp["resultado"] = 1 / 0;
    //$resp["respuesta"] = texto;
    //$resp["error"] = texto;
    //$resp["vi"] = entero;
    //$resp["control"] = control;
    //alert(respuesta)	;
    arr_resp_json = recibe_json(respuesta);
    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"];
                        //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+"')\",500)");
                    }
                    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+"'); ";
                        ejecutar += "$('#cont_"+form_modal_pr+"').css({'position' : '','overflow' : 'auto','height' : 'auto'}); ";
                        setTimeout(ejecutar,100);
                    }
                }
            }
        }
        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]["recarga_form"] && pet_ejecutada==false)
        {
            pet_interfaz(obj_modal[entidad_pr]);
        }
        libera_botones_modal(form_modal_pr);
    }
}

//carga el listado desde donde abrimos el modal, solo si aplica
function actualiza_listado(id_div_list)
{

    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()");
            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)
{
    if (typeof(obj_alert)!="object" )
    {
        obj_alert=new Object();
    }
    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);
    asigna_valor_f(obj_alert,"show","");
    asigna_valor_f(obj_alert,"hide","");
    asigna_valor_f(obj_alert,"bgiframe",true);
    asigna_valor_f(obj_alert,"resizable",false);
    asigna_valor_f(obj_alert,"height",150);
    asigna_valor_f(obj_alert,"width",380);
    asigna_valor_f(obj_alert,"modal",true);
    asigna_valor_f(obj_alert,"overlay",{
        backgroundColor: '#000',
        opacity: 0.5
    } );
    asigna_valor_f(obj_alert,"buttons",boton_cont);
    asigna_valor_f(obj_alert,"autoOpen",true);
    asigna_valor_f(obj_alert,"title",titulo_c);
	
    if (typeof(icono) == "undefined" || icono== "")
    {
        icono = "alert";
    }
	
    if (typeof(titulo_c) == "undefined")
    {
        titulo_c = leyenda["formulario_titulo_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>';
		
    dialog_qn(div_alert,obj_alert);
    $("#"+div_alert).html(cont_alert);
}
function asigna_valor_f(obj,indice,valor)
{
    if (eval("typeof(obj."+indice+")")=="undefined")
    {
        eval("obj."+indice+"=valor;");
    }
}

//carga una nueva hoja de estilos
function updateCSS_f(locStr){

    cssLink = $('<link href="'+locStr+'" type="text/css" rel="Stylesheet" class="ui-theme" />');
    $("head").append(cssLink);
    if( $("link.ui-theme").size() > 3){
        $("link.ui-theme:first").remove();
    }
}