Mapeate.Mapas.Global = function(mapeate, entradas){

    const self = this;
    let iniciado = false;

    const constructor = () => {};

    this.iniciar = callback => {

        const terminar = estado => typeof callback == "function" && callback(estado);

        if(iniciado){
            terminar(false);
            return false;
        };
        iniciado = true;

        terminar(true);

        return true;
    };

    this.preparar = svg => {

        svg = svg.replace(/<title>World Map<\/title>/, "");
        svg = svg.replace(/(<(g|path|circle) id="([^"]+)")([^>]+>)([\r\n]+\s+<title>[^<]+<\/title>)?/g, (...argumentos) => {

            let html = argumentos[1];

            [
                ["data_objetivo", argumentos[3]], 
                ["data_habilitado", false], 
                ["data_ver_titulo", false], 
                ["data_acertado", false], 
                ["data_i18n", "nombre_pais_" + argumentos[3]], 
                ["data_title", mapeate.i18n("mapeate_pais_" + argumentos[3])], 
                ["onmouseover", mapeate.nombre_objeto + ".mapas.mostrar_seleccion(this, event);"], 
                ["onmouseout", mapeate.nombre_objeto + ".mapas.ocultar_seleccion(this, event);"], 
                ["onclick", mapeate.nombre_objeto + ".mapas.elegir(this, event);"]
            ].forEach(([nombre, valor]) => html += ` ` + nombre.replace(/_/g, '-') + `="` + valor + `"`);
            html += argumentos[4];

            return html;
        });
        svg = svg.replace(/<style[^>]*>((?!<\/style)(.|[\r\n]))+<\/style>/, "");
        [/(circlexx)/g, /(subxx)/g].forEach((patron, i) => svg = svg.replace(patron, "$1 nivel-" + (i + 2)));

        return svg;
    };

    constructor();

};