$(document).ready(function() {
    // Requerido por qTip para mostrar el fondo obscuro
    $("<div id='qtip-bg'>").css({
        position: "absolute",
        left: 0,
        height: $(document).height(),
        width: "100%",
        opacity: 0.7, 
        backgroundColor: 'black',
        zIndex: 5000  
    }).appendTo(document.body).hide();

    // Inicializamos todo la página
    init($(document));

    // Controlar cosas como mostrar el mensaje de "Cargando..."
    $(document).ajaxStart(function() {
        
        var contenedor = $(".obj-mensajes-activo");
        if ($(".obj-mensajes-activo").length == 0) {
            contenedor = $(".obj-mensajes-global")
                .removeClass()
                .addClass("uix-mensajes-superior obj-mensajes-global");
        }

        var cargando = $(document.createElement("div"))
            .addClass("uix-mensaje-cargando obj-mensaje-cargando") 
            .text("Cargando");

        contenedor.css("display", "inherit").empty();
        cargando.appendTo(contenedor);
    });

    $(document).ajaxStop(function() {
        $(".obj-mensajes div.uix-mensaje-cargando").remove();
        if ($(".obj-mensajes-activo").length == 0) {
            var contenedor = $(".obj-mensajes-global");
            if (contenedor.find(".obj-mensaje-error").length == 0) {
                $(".obj-mensajes-global").css("display", "none");
            }
        }
    });

    $(document).ajaxError(function(e, request) {
        var contenedor = $(".obj-mensajes-activo");
        if ($(".obj-mensajes-activo").length == 0) {
            contenedor = $(".obj-mensajes-global")
                .addClass("uix-mensajes-superior-error");
        }

        var respuesta = $.parseJSON(request.responseText);
        var error     = $(document.createElement("div"))
            .addClass("uix-mensaje-error obj-mensaje-error")
            .html(respuesta.error);

        contenedor.css("display", "inherit").empty();
        error.appendTo(contenedor);

    });

    if ($(".js-buscador").length > 0) {
        $(".js-buscador").focus(function() {
            if ($(this).hasClass("_obj-inactivo")) {
                $(this).val("")
                    .css("color", "inherit")
                    .removeClass("_obj-inactivo");
            }
        }).blur(function() {
            if ($(this).val().length == 0) {
                $(this).val("Escribe algo para empezar la búsqueda")
                    .css("color", "#666")
                    .addClass("_obj-inactivo");
            }
    //        $(this).qtip("hide");
        }).keyup(function(e) {
            var busqueda = $(this).val();
            if (busqueda.length < 3) {
                return true;
            }

            var timer = $(this).data("timer");
            if (timer) {
                clearTimeout(timer);
            }

            var buscador   = $(this);
            var qtip       = $(this).qtip("api");
            var cargando   = $(".qtip-buscador .cargando");
            var resultados = $(".qtip-buscador .resultados");

            cargando.css("display", "inherit");
            resultados.css("display", "none");
            qtip.updatePosition();

            timer = setTimeout(function() {
                $.post("?do=buscador.top10&idUnidadOrganizacional=1", {busqueda: buscador.val()}, function(data) {
                    var items = resultados.find("> div");

                    items.empty();
                    $.each(data, function(i, resultado) {
                        var item = $(document.createElement("a"))
                            .attr("href", resultado.url);

                        $(document.createElement("span"))
                            .addClass("titulo")
                            .html(resultado.nombre)
                            .appendTo(item);

                        $(document.createElement("span"))
                            .addClass("tipo")
                            .html(resultado.tipo)
                            .appendTo(item);

                        $(document.createElement("span"))
                            .addClass("descripcion")
                            .html(resultado.descripcion)
                            .appendTo(item);

                        item.prependTo(items);
                    });

                    cargando.css("display", "none");
                    resultados.css("display", "inherit");
                    qtip.updatePosition();

                }, "json");
            }, 300);
            $(this).data("timer", timer);
            $(this).qtip("show");
        }).qtip({
            content: {
                prerender: true,
                text: $("._obj-buscador")
            },
            position: {
                corner: {
                    target: "topLeft",
                    tooltip: "bottomLeft"
                }
            },
            style: {
                width: 406,
                padding: 0,
                classes: {
                    tooltip: "qtip qtip-buscador"
                }
            },
            show: "never",
            hide: "unfocus"
        }).trigger("blur");
    }
});

/**
 * init  Define el comportamiento de los actuales y futuros elementos
 */
function init(parent) {
    parent.find(".link-modal").each(function() {
        var objeto = $(this);

        var padding = "10px";
        if ($(this).hasClass("link-modal-2.0")) {
            padding = "0";
        }

        objeto.qtip({
            content: {
                    url: $(this).attr("href")
            },
            position: {
                target: $(document.body),
                corner: "center"
            },
            show: {
                when: "click",
                solo: true
            },
            hide: false,
            style: {
                width: {max: 900},
                padding: padding,
                border: {
                    width: 4,
                    radius: 4,
                    color: "#666"
                },
                name: "light",
                classes: {
                    tooltip: "qtip qtip-modal"
                }
            },
            api: {
                beforeShow: function(e) {
                    var api = this;
                    if (api.initialized) {
                        return true;
                    }
                    return (e === true ? true : false);
                },

                onShow: function() {
                    objeto.trigger("post-mostrar", [this.elements.content]);
                },

                onContentLoad: function() {
                    var api = this;
                    api.show(true);

                    // Por alguna razón se debe dar un tiempo antes de inicializar
                    var contenido = api.elements.content;
                    setTimeout(function() {
                        init(contenido);

                        contenido.find(".boton-cerrar").click(function() {
                            api.hide();
                            return false;
                        });

                        objeto.trigger("post-contenido", [contenido]);

                        api.initialized = true;
                    }, 100);
                },
		
		onHide: function() {	// Resetear la forma después de cerrar el Qtip
		    var api = this;
		    this.destroy();
		    init(objeto.parent());
		}
		
            },
            fixIE: true
        }).click(function() {return false;});
    });

    parent.find("[x-tooltip]").each(function() {
        var bg = "#365d86";
        var fg = "#ffffff";
        if ($(this).attr("x-tooltip-fg")) {
            fg = $(this).attr("x-tooltip-fg");
        }
        if ($(this).attr("x-tooltip-bg")) {
            bg = $(this).attr("x-tooltip-bg");
        }

        var orientacion = ["topMiddle", "bottomMiddle"];
        if ($(this).attr("x-tooltip-orientacion") == "arriba") {
            orientacion = ["bottomMiddle", "topMiddle"]; 
        }

        $(this).qtip({
            content: $(this).attr("x-tooltip"),
            position: {
                corner: {
                    tooltip: orientacion[0],
                    target: orientacion[1]
                }
            },
            style: {
                tip: {
                    corner: orientacion[0],
                    size: {
                        x: 8,
                        y: 4
                    }
                    
                },
                border: {
                    width: 2,
                    radius: 3,
                    color: bg
                },
                fontSize: "11px",
                textAlign: "center",
                padding: 0,
                color: fg,
                backgroundColor: bg
            }
        });
    });

    parent.find(".uix-dropdown").each(function() {
        var dropdown = $(this);
	
        var orientacion = ["topLeft", "bottomLeft"];
        if ($(this).is("div")){
	    // Centrado para los ORDER en TH
	    if($(this).attr("x-orientacion") == "centrado") {
		var orientacion = ["topMiddle", "bottomMiddle"];
	    }else{
		if($(this).attr("x-orientacion") != "derecha") {
		    var orientacion = ["topRight", "bottomRight"];
		}
	    }
        }
	
        $(this).qtip({
            content: $(this).find("div"),
            position: {
                corner: {
                    tooltip: orientacion[0],
                    target: orientacion[1]
                }
            },
	    show: {
                when: "click",
                solo: true,
                delay: 0,
                effect: {
                    type: "fade",
                    length: 0
                }
            },
	    hide: {
		fixed: true,
		when: "unfocus"
	    },
            style: {
                border: 0,
                fontSize: "11px",
                padding: 5,
                color: "#000",
                backgroundColor: "#FFF",
		name: "light",
		width: {
		    min: 0,
		    max: 400
		},
                classes: {
                    tooltip: "qtip qtip-dropdown"
                }
            },
            api: {
                beforeShow: function() {
                    this.elements.content.empty();
                    this.updateContent(dropdown.find("div"));

                    var qtip = this;
                    this.elements.content.find(".tooltip-dynamic").click(function() {
                        $(".qtip-active").addClass("qtip-tooltip-dynamic");
                        qtip.loadContent($(this).attr("href"));
                    });
                },

                onContentUpdate: function() {
                    /*
                    init($(".qtip-active"));

                    if ($(".qtip-active").hasClass("qtip-tooltip-dynamic")) {
                        this.options.hide.when.event = "inactive";
                    }

                    $(".qtip-active .boton-cerrar").click(function() {
                        $(".qtip-active").qtip("hide");
                    });
                    */
                }
            }
        });
    });

    parent.find(".tooltip-dynamic").each(function() {
        if ($(this).parents(".uix-dropdown").length > 0) {
            return $(this).click(function() { 
                return false; 
            });
        }
	
        var orientacion = ["topLeft", "bottomLeft"];
	
        if ($(this).is("a")) {
            var orientacion = ["topRight", "bottomRight"];
        }else{
	    if($(this).attr("x-orientacion") == "izquierda") {
		orientacion = ["topRight", "bottomRight"];
	    }
        }
	
        var content = {extra: { }};
        if ($(this).attr("x-url")) {
            content["extra"]["url"] = $(this).attr("x-url"); 
        }
        else {
            content["extra"]["text"] = $(this).find("> div");
        }
 
        $(this).qtip({
            content: content,
            position: {
                corner: {
                    tooltip: orientacion[0],
                    target: orientacion[1]
                }
            },
			show: {
                when: "click",
                solo: true
            },
			hide: false,
            style: {
                border: 0,
                fontSize: "11px",
                padding: 5,
                color: "#000",
                backgroundColor: "#FFF",
				name: "light",
				width: {
					min: 336,
					max: 400
				},
                classes: {
                    tooltip: "qtip qtip-tooltip-dynamic"
                }
            },
            api: {
                beforeShow: function() {
                    if (this.options.content.extra.url) {
                        this.updateContent("<div class='uix-seccion'><div class='uix-seccion-contenido' style='text-align: center;'>Cargando...</div></div>");
                        this.loadContent(this.options.content.extra.url);
                    }
                    else {
			this.elements.content.empty();
                        this.updateContent(this.options.content.extra.text);
                    }
                },

                onContentUpdate: function() {
                    init($(".qtip"));
		    
                    $(".qtip .boton-cerrar").click(function() {
                        $(".qtip-active").qtip("api").hide();
                    });
                }
            }
        });
    });

    parent.find(".tooltip-adic").each(function() {
        if ($(this).parents(".uix-dropdown").length > 0) {
            return $(this).click(function() { 
                return false; 
            });
        }

        var orientacion = ["topLeft", "bottomLeft"];
        if ($(this).is("a")) {
            var orientacion = ["topRight", "bottomRight"];
        }

        var content = {extra: { }};
        if ($(this).attr("x-url")) {
            content["extra"]["url"] = $(this).attr("x-url"); 
        }
        else {
            content["extra"]["text"] = $(this).find("> div");
        }

        $(this).qtip({
            content: content,
            position: {
                corner: {
                    tooltip: orientacion[0],
                    target: orientacion[1]
                }
            },
	    show: {
                when: "click",
                solo: true
            },
	    hide: "unfocus",
            style: {
                border: 0,
                fontSize: "11px",
                padding: 5,
                color: "#000",
                backgroundColor: "#FFF",
				name: "light",
				width: {
					min: 336,
					max: 400
				},
                classes: {
                    tooltip: "qtip qtip-tooltip-dynamic"
                }
            },
            api: {
                beforeShow: function() {
                    if (this.options.content.extra.url) {
			this.updateContent("<div class='uix-seccion'><div class='uix-seccion-contenido'>Cargando...</div></div>");
                        this.loadContent(this.options.content.extra.url);
                    }
                    else {
			this.elements.content.empty();
                        this.updateContent(this.options.content.extra.text);
                    }
                },

                onContentUpdate: function() {
                    init($(".qtip"));

                    $(".qtip .boton-cerrar").click(function() {
                        $(".qtip-active").qtip("api").hide(); 
                    });
                }
            }
        });
    });

    parent.find(".js-select").each(function() {
        var width = $(this).width();
        if ($(this).is("button")) {
            width += 7;
        } else {
            width += 5;
        }

        var select = $(this);

        $(this).qtip({
            content: $(this).find("> div"),
            position: {
                corner: {
                    tooltip: "topLeft",
                    target: "bottomLeft"
                }
            },
            show: {
                when: "click",
                solo: true,
                delay: 0,
                effect: {
                    type: "fade",
                    length: 0
                }
            },
            hide: {
                when: "unfocus"
            },
            style: {
                padding: 0,
                marginTop: 3,
                marginBottom: 3,
                width: {
                    min: width,
                    max: 1000
                },
                classes: {
                    tooltip: "qtip qtip-select"
                }
            },
            api: {
                beforeShow: function() {
                    var contenido = this.elements.content.find("> div");

                    contenido.find("> div").css("left", "0").hide();
                    contenido.find("> div:first").show();

                    this.updateWidth();
                },

                beforeHide: function() {
                    select.removeClass("hover");
                }
            }
        });

        $(this).click(function() {
            $(this).addClass("hover");
        });
    });

    parent.find(".datepicker").datepicker({
        dateFormat: 'dd/mm/yy',
        changeYear: true,
        dayNamesMin: ['D', 'L', 'Ma', 'Mi', 'J', 'V', 'S'],
        monthNames: ['Enero','Febrero','Marzo','Abril','Mayo','Junio','Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre'],
        firstDay: 1,
        yearRange: '1900:2100',
	onClose: function(){
	    //autoload($(".uix-fila-tabla"));
	    $(this).trigger("close-datepicker");
	}
    });				  

    parent.find(".input-autocompletar-rel:not([multiple])").each(function() {
        var input = $(this);
	
	if(input.parents(".tooltip-dynamic").length > 0){
	    return;
	}

        if ($(this).find("option").length > 0) {
            $.get("?do=formulario.autocompletar&rel=" + input.attr("rel") + "&seleccionado=" + $(this).find("option").val(), function(data) {
                input.next().find("span").text(data[0].item);
            }, "json");
        }

        $(this).fcbkcomplete({
            allin: true,
            onlyone: true,
            json_url: "?do=formulario.autocompletar&rel=" + $(this).attr("rel")
        });
    });

//    autoload(parent);


    parent.find(".js-post").click(function() {
        return jsPostWrapper($(this));
    });
    parent.find(".js-cargar").click(function() {
        jsCargar($(this).attr("x-url"));
        return false;
    });
    parent.find(".js-post-y-cargar").click(function() {
        jsActivarDivMensajes($(this).attr("x-div-mensajes"));
        var formPadre = $(this).parents("form:first");
        var postUrl = formPadre ? formPadre.attr("action") : $(this).attr("x-post-url");
        var data    = formPadre ? formPadre.serialize() : null;
        jsPostYCargar(postUrl, data, $(this).attr("x-url"));
        return false;
    });
    parent.find("form").each(function() {
        var boton = $(this).find(".js-post-y-cargar");
        $(this).find("input").keypress(function(e) {
            if (e.keyCode == 13) {
                boton.click();
                e.preventDefault();
            }
        });
    });
    parent.find(".js-expandir-colapsar").click(function(e) {
        jsActivarDivMensajes($(this).attr("x-div-mensajes"));
        jsExpandirColapsar($(this), $(this).parents("tr:first"), $(this).attr("href"));
        e.preventDefault();
    });

    parent.find(".js-ping").click(function() {
        $.post($(this).attr("data-url"));
    });
    
    parent.find("#calendar").each(function(){
	$(this).fullCalendar({
	    height: 450,
	    header:
	    {
		left:   'title',
		center: '',
		right:  'month,basicWeek today prev,next'
	    },
	    theme: "styles/theme/jquery-ui-1.7.2.custom.css",
	    
	    firstDay: 1,
	    lazyFetching: false,
	    buttonText:
	    {
		today:	'Hoy',
		month: 	'Mes',
		week:   'Semana',
		day:    'Día'
	    },
	    monthNames: ['Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre'],
	    monthNamesShort: ['Ene', 'Feb', 'Mar', 'Abr', 'May', 'Jun', 'Jul', 'Ago', 'Sep', 'Oct', 'Nov', 'Dic'],
	    dayNames: ['Domingo', 'Lunes', 'Martes', 'Miercoles', 'Jueves', 'Viernes', 'Sabado'],
	    dayNamesShort: ['Dom', 'Lun', 'Mar', 'Mie', 'Jue', 'Vie', 'Sab'],
	    events: {
		url: $(this).attr("rel")
	    },
	    eventRender: function(event, element) {
		element.find("div").each(function(){
		    $(this).attr("x-tooltip", event.oficina);
		    init($(this).parent());
		});
	    },
	    viewDisplay: function(view){
		$(this).find(".fc-header-center").each(function(){
		    if($("#calendar").attr("x-param") == 1){
			$(this).html("<span class=\"fc-button ui-state-default ui-corner-left ui-corner-right ui-state-active\"><span class=\"fc-button-inner\"><span class=\"fc-button-content tooltip-dynamic\" x-url=\"?do=componentes.checklistPaises\">Países</span><span class=\"fc-button-effect\"><span></span></span>");
			init($(this).parent());
		    }
		});
	    }
	});
    });

}

/**
 * autoload  Carga una página utilizando AJAX y todos sus hijos
 */
function autoload(parent, callback) {
    $(parent).find(".seccion-autoload").each(function() {
        loading(true);
        $(this).load($(this).attr("x-autoload-url"), function() {
            init($(this));
            autoload($(this));
            callback ? callback() : true;
            loading(false);
        });
    });
}

/**
 * loading  Muestra o esconde una animación de cargando @ELIMINAR@
 */
function loading(visible) {
    var div = $("#uix-autoload-loading");
    if (visible) {
        $("#uix-autoload-loading").css({
            top: $(window).height()/2-div.height()/2,
            left: $(window).width()/2-div.width()/2
        }).fadeIn("fast");
    }
    else {
        $("#uix-autoload-loading").fadeOut("fast");
    }
}

/**
 **	Función para mostrar el mensaje de error superior con JQuery
 **/

function showError(mensaje){

    var contenedor = $(".obj-mensajes-activo");
    if ($(".obj-mensajes-activo").length == 0) {
	contenedor = $(".obj-mensajes-global")
	    .addClass("uix-mensajes-superior-error");
    }

    var error     = $(document.createElement("div"))
	.addClass("uix-mensaje-error obj-mensaje-error")
	.html(mensaje);

    contenedor.css("display", "inherit").empty();
    error.appendTo(contenedor);
    
    // Ocultar automáticamente
    setTimeout(function(){
	$(".obj-mensajes-global").fadeOut();
    }, 5000);
}

/**
 **		Funcion para mostrar Modal sin llamar a la clase
 **/
 
function showQModal(objeto, titulo, enlace, funcion, data){
        var content = { extra: { } };
        content["extra"]["url"] = enlace;
    
	objeto.qtip({
		content: {
            url: enlace,
            data: data
        },
		position: {
			target: $(document.body),
			corner: "center"
		},
		show: {
			ready: true,
			solo: true
		},
		hide: false,
		style: {
			width: {max: 900},
			padding: "10px",
           	fontSize: "11px",
			border: {
				width: 9,
				radius: 9,
				color: "#666"
			},
			name: "light"
		},
        api: {
            beforeShow: function(e) {
                var api = this;
                if (api.initialized) {
                    return true;
                }
                return (e === true ? true : false);
            },

            onContentUpdate: function() {
                $(".qtip .boton-cerrar").click(function() {
                    $(".qtip-active input[type=button]").unbind('click').remove();
                    $(".qtip-active").qtip("destroy");
                });

                if (funcion) {
                    funcion(this.elements.content);
                }
            },

            onContentLoad: function() {
                var api = this;
                api.show(true);

                // Por alguna razón se debe dar un tiempo antes de inicializar
                var contenido = api.elements.content;
                setTimeout(function() {
                    init(contenido);

                    contenido.find(".boton-cerrar").click(function() {
                        api.hide();
                        return false;
                    });

                    api.initialized = true;
                }, 100);
            },
        },
        fixIE: true
    });
}

/**
 * Muestra un mensaje con información para el usuario
 */
function showInformacion(texto)
{
    $(document.body).qtip({
        content: "<div id='diseno-nuevo'><div class='uix-seccion'><div class='uix-seccion-contenido'><table cellpadding='0' cellspacing='0'><tr><td>" + texto + "</td></tr></table><div class='uix-botones'><button class='obj-cerrar hover'>Aceptar</button></div></div></div></div>",
        position: {
            target: $(document.body),
            corner: "center"
        },
        show: {
            delay: 0,
            ready: true,
            effect: {
                type: "fade",
                length: 0
            }
        },
        hide: false,
        style: {
            width: 600,
            border: {
                width: 4,
                radius: 4,
                color: "#666"
            },
            padding: 0,
            fontSize: 13,
            classes: {
                tooltip: "qtip qtip-modal qtip-mensaje-informacion"
            }
        },
        api: {
            onContentUpdate: function() {
                var api = this;
                this.elements.content.find(".obj-cerrar").click(function() {
                    api.destroy();
                });
                setTimeout(function() {
                    api.updatePosition();
                }, 100);
            }
        }
    });
}


/**
 **		Funcion para mostrar Alert de confirmación
 **/
function showAlert(objeto, params, funcion){
    var content = {extra: { }};
    content["extra"]["url"] = "?do=formulario.confirmacion";

    objeto.qtip({
	content: content,
	position: {
		target: $(document.body),
		corner: "center"
	},
	show: {
		ready: true,
		solo: true
	},
	hide: false,
	style: {
		width: {max: 900},
		padding: "10px",
	fontSize: "11px",
		border: {
			width: 9,
			radius: 9,
			color: "#666"
		},
		name: "light"
	},
	api: {
	    beforeShow: function() {
		objeto.qtip("api").updateContent("<div class='uix-seccion'><div class='uix-seccion-contenido'>Cargando...</div></div>");
		objeto.qtip("api").loadContent(this.options.content.extra.url, params);
	    },

	    onContentUpdate: function() {
		$(".qtip .boton-cerrar").click(function() {
		    $(".qtip-active input[type=button]").unbind('click').remove();
		    $(".qtip-active").qtip("destroy");
		});
		
                if (funcion) {
                    funcion(this.elements.content);
                }
	    }
	}
    });
}

/**
 * Muestra un modal con un fondo blanco, especificamente para mostrar los mensajes
 * de alguna actualización en el Pilote
 */
function showModalActualizacion(identificador)
{
    $("#" + identificador + "-link").qtip({
        content: $("#" + identificador),
        position: {
            target: $(document.body),
            corner: "center"
        },
        show: {
            delay: 0,
            ready: true,
            effect: {
                type: "fade",
                length: 0
            }
        },
        style: {
            width: 700,
            border: {
                width: 4,
                radius: 4,
                color: "#666"
            },
            padding: 15,
            fontSize: 13,
            classes: {
                tooltip: "qtip qtip-mensaje-actualizacion"
            }
        },
        api: {
            beforeShow: function() {
                this.elements.tooltip.css("z-index", 600000);
                $("#fondo-blanco").css({
                    top: $(document).scrollTop(),
                    height: $(document).height()
                }).fadeIn(this.options.show.effect.length);
            },
            beforeDestroy: function() {
                $("#fondo-blanco").fadeOut(this.options.show.effect.length);
            },
            onFocus: function() {
                this.elements.tooltip.css("z-index", 600000);
            },
            onContentUpdate: function() {
                var api = this;
                this.elements.content.find(".obj-cerrar").click(function() {
                    api.destroy();
                });
                setTimeout(function() {
                    api.updatePosition();
                }, 100);
            }
        }
    });
}

function updateOpciones(select, tipo, id, fun) {
    select.empty();
    $.post("?do=comun.getOpciones&tipo=" + tipo + "&id=" + id, function(data) {
        $.each(data.contenido, function(valor, texto) {
            $(document.createElement("option"))
                .val(valor)
                .text(texto)
                .appendTo(select);
        });
        if (fun) {
            fun();
        }
    }, "json");
}

/**
 * jsActivarDivMensajes
 */
function jsActivarDivMensajes(div) {
    div ? $(div).addClass("obj-mensajes-activo") : 1;
}

/**
 * jsPost
 */
function jsPostWrapper(elemento, callback) {
    jsActivarDivMensajes(elemento.attr("x-div-mensajes"));
    var formPadre = elemento.parents("form:first");
    var url  = formPadre ? formPadre.attr("action") : elemento.attr("x-url");
    var data = formPadre ? formPadre.serialize() : null;
    jsPost(url, data, callback);
    return false;
}

function jsPost(url, data, callback) {
    $.post(url, data, callback);
}

/**
 * jsCargar
 */
function jsCargar(url) {
    document.location.href = url;
}

/**
 * jsPostYCargar
 */
function jsPostYCargar(postUrl, data, url) {
    $.post(postUrl, data, function() {
        jsCargar(url);    
    });
}

/**
 * jsCargarOpciones
 */
function jsCargarOpciones(select, tipo, id, seleccionado) {
    select.empty();
    $.post("?do=comun.getOpciones&tipo=" + tipo + "&id=" + id, function(data) {
        $.each(data.contenido, function(valor, texto) {
            var opcion = $(document.createElement("option"))
                .val(valor)
                .text(texto)
                .appendTo(select);

            if (seleccionado && valor == seleccionado) {
                opcion.attr("selected", "selected");
            }
        });
    }, "json");
}

/**
 * jsExpandirColapsar
 */
function jsExpandirColapsar(elemento, posicion, url) 
{
    if (elemento.hasClass("obj-expandido")) {
        jsColapsar(elemento, posicion, url);
    } else {
        jsExpandir(elemento, posicion, url);
    }
}

function jsExpandir(elemento, posicion, url)
{
    $.get(url, function(data) {
        if (! $(data).is("tr")) {
            var contenido = $("<td />")
                .attr("colspan", posicion.find("> td").length)
                .attr("style", "padding-top: 0px !important")
                .addClass("uix-seccion-expandida")
                .wrap("<tr />")
                .insertAfter(posicion)
                .append(data);
        } else {
            var contenido = $(data).insertAfter(posicion);
        }

        // Se asocia con el elemento, asi sabemos que quitar después
        elemento.data("contenido", contenido);
        elemento.addClass("uix-expandido obj-expandido");
        elemento.parent().addClass("uix-expandido-tab");

        init(contenido);
        autoload(contenido);
    });
}

function jsColapsar(elemento, posicion, url) 
{
    elemento.data("contenido").remove();
    elemento.removeClass("uix-expandido obj-expandido");
    elemento.parent().removeClass("uix-expandido-tab");
}

/**
 * Convierte una o varias .uix-seccion a un Excel (XLS)
 */
function toXls(secciones)
{
    var json = {
        secciones: []
    };
    $(secciones).each(function(i, el) {
        json.secciones.push(toJson(el));
    });
    $.post("?do=vecinos.descargarTablas", json, function() {
        document.location.href = "?do=vecinos.descargarTablas";
    });
    return false;
}

/**
 * Traduce el contenido dentro de un .uix-seccion a un arreglo Javascript.
 */
function toJson(seccion)
{
    var json = {
        titulo: $(seccion).find("em:first").text(),
        contenido: []
    };

    $(seccion).find(".uix-seccion-pregunta").each(function(i, el) {
        json.contenido.push({
            titulo: $(el).find("em").text(),
            contenido: $(el).find("span").text(),
            tipo: "pregunta"
        });
    });

    var tableToJson = function(i, el) {
        var tabla = [];
        $(el).find("tr").each(function(i, el) {
            if ($(el).hasClass("obj-no-exportar")) {
                return;
            }
            var fila = [];
            $(el).find("th, td").each(function(i, el) {
                if ($(el).hasClass("obj-no-exportar")) {
                    return;
                }
                fila.push($(el).text().trim());
            });
            tabla.push(fila);
        });

        json.contenido.push({
            contenido: tabla,
            tipo: "tabla"
        });
    };

    $(seccion).find(".uix-reporte-tabla table").each(tableToJson);

    if ($(seccion).is(".uix-seccion-listado")) {
        $(seccion).find("table").each(tableToJson);
    }

    return json;
}

