# Source: language_module.js

    /**
     * Módulo de internacionalización, utilizado para gestionar el idioma desplegado en nicho y comunidad ecológica.
     *
     * @namespace language_module
     */
    var language_module = (function(verbose) {

        var _language_selected;
        var _language_label_selected;
        var _first_load;

        var _map_module,
                _variable_module,
                _res_display_module,
                _table_module,
                _histogram_module;

        var _tipo_modulo;

        var _VERBOSE = verbose

        /**
         * Éste método inicializa las variables necesarias para el proceso de internacionalización y realiza la carga de los archivos de idiomas.
         *
         * @function _initilizeElementsForLanguage
         * @private
         * @memberof! language_module
         *
         * @param {object} main_pede - Referencia al controlador de nicho o communidad ecológica
         * @param {integer} tipo_modulo - Tipo de controlador para enlazar el módulo de internacionalización
         */
        function _initilizeElementsForLanguage(main_pede, tipo_modulo) {

            _VERBOSE ? console.log("_initilizeElementsForLanguage") : _VERBOSE;

            _tipo_modulo = tipo_modulo;
            _first_load = true;

            if ($.cookie("language") == undefined) {
                _language_selected = 'es_MX';
                $.cookie("language", _language_selected);
            }
            else{
                _language_selected = $.cookie("language");
            }

            $.i18n.properties({
                name: 'nicho',
                path: 'javascripts/in/bundle/',
                mode: 'both',
                language: _language_selected,
                checkAvailableLanguages: true,
                async: true,
                callback: function() {

                    _VERBOSE ? console.log("idiomas cargados") : _VERBOSE;

                    if ($.cookie("language") == undefined) {

                        _VERBOSE ? console.log("undefined") : _VERBOSE;
                        $.cookie("language", _language_selected);
                        _loadLabels(_first_load);
                        _first_load = false;

                    }
                    else {

                        _VERBOSE ? console.log("language loaded") : _VERBOSE;
                        _language_selected = $.cookie("language");
                        _VERBOSE ? console.log(_language_selected) : _VERBOSE;
                        _loadLabels(_first_load);

                    }

                    // carga los modulos siguientes una vez que se han cargado los archivos de idiomas
                    main_pede.loadModules();

                }
            });

            $('ul.dropdown-menu li a.idioma').click(function(e) {

                _language_selected = e.target.getAttribute("value");
                _language_label_selected = e.target.getAttribute("label");

                $.cookie("language", _language_selected);

                _VERBOSE ? console.log("value: " + _language_selected) : _VERBOSE;
                _VERBOSE ? console.log("label: " + _language_label_selected) : _VERBOSE;

                $("#btn_idioma").attr("value", _language_selected);

                $.i18n.properties({
                    name: 'nicho',
                    path: 'javascripts/in/bundle/',
                    mode: 'both',
                    language: _language_selected,
                    checkAvailableLanguages: true,
                    async: true,
                    callback: function() {

                        _loadLabels(_first_load);
                        _updateLanguageModules(_first_load);

                    }
                });

                e.preventDefault();
            });

        }

        /**
         * Método getter del módulo de internacionalización.
         *
         * @function getI18
         * @public
         * @memberof! net_module
         *
         */
        function getI18() {
            return $.i18n;
        }

        /**
         * Éste método actualiza los labels de los controladores de nicho, comunidad y del módulo variable.
         *
         * @function _updateLanguageModules
         * @private
         * @memberof! language_module
         *
         * @param {boolean} first_load - Bandera que indica si es la primera carga del módulo de internacionalización
         */
        function _updateLanguageModules(first_load) {

            if (first_load)
                return;

            _VERBOSE ? console.log("_updateLanguageModules") : _VERBOSE;

            if (_tipo_modulo != 2) {
                _res_display_module.updateLabels();
            }

        }

        /**
         * Éste método asigna a variables globales instancias de los módulos de histograma, mapa y controladores de nicho y comunidad ecológica.
         *
         * @function addModuleForLanguage
         * @public
         * @memberof! language_module
         *
         * @param {object} res_display_module - Controlador de nicho ecológico
         * @param {object} histogram_module - Módulo histograma
         * @param {object} map_module - Módulo mapa
         * @param {object} variable_module - Módulo variable
         */
        function addModuleForLanguage(res_display_module, histogram_module, map_module, variable_module) {

            _VERBOSE ? console.log("addModuleForLanguage") : _VERBOSE;

            _map_module = map_module;

            _variable_module = variable_module;

            _res_display_module = res_display_module;

            // para red no es necesario
            _histogram_module = histogram_module;

        }

        /**
         * Éste método realiza la actualización de los labels de los elementos visuales de de nicho y comunidad ecológica.
         *
         * @function _loadLabels
         * @private
         * @memberof! language_module
         *
         * @param {boolean} first_load - Bandera que indica si es la primera carga del módulo de internacionalización
         */
        function _loadLabels(firstLoad) {

            _VERBOSE ? console.log("_loadLabels") : _VERBOSE;
            _VERBOSE ? console.log("tipo_modulo: " + _tipo_modulo) : _VERBOSE;

            // labels para nicho
            if (_tipo_modulo == 0) {

                $("#lb_titulo").text($.i18n.prop('lb_titulo'));
                $("#lb_sub_titulo").text($.i18n.prop('lb_sub_titulo'));
                $("#nicho_link").text($.i18n.prop('nicho_link'));
                $("#a_espanol").text($.i18n.prop('a_espanol'));
                $("#a_ingles").text($.i18n.prop('a_ingles'));

                if (firstLoad) {
                    $("#btn_idioma").text($.i18n.prop('btn_idioma') + " ");
                }
                else {
                    // agregar casos si se agregan mas idiomas
                    if (_language_selected == "es_MX") {
                        $("#btn_idioma").text($.i18n.prop('a_espanol') + " ");
                    }
                    else {
                        $("#btn_idioma").text($.i18n.prop('a_ingles') + " ");
                    }

                }
                $("#btn_idioma").append('<span class="caret"></span>');

                $("#lb_especie").text($.i18n.prop('lb_especie'));
                $("#nom_sp").attr("placeholder", $.i18n.prop('esp_name'));
                $("#lb_example").text($.i18n.prop('lb_example'));

                // $("#lb_restricciones").text($.i18n.prop('lb_restricciones'));
                $("#lb_resumen").text($.i18n.prop('lb_resumen'));

                $("#lb_construccion").text($.i18n.prop('lb_construccion'));
                $("#lb_validacion").text($.i18n.prop('lb_validacion') + ":");

                $("#lb_apriori").text($.i18n.prop('lb_apriori') + ":");
                $("#lb_occ_min").text($.i18n.prop('lb_occ_min') + ":");
                $("#lb_mapprob").text($.i18n.prop('lb_mapprob') + ":");

                $("#lb_reg_fecha").text($.i18n.prop('lb_reg_fecha') + ":");
                $("#lb_mapprob").text($.i18n.prop('lb_mapprob') + ":");

                $("#lb_range_fecha").text($.i18n.prop('lb_range_fecha') + ":");

                $("#reload_map").text($.i18n.prop('reload_map'));

                $("#tab_resumen").text($.i18n.prop('tab_resumen'));
                $("#tab_validacion").text($.i18n.prop('tab_validacion'));

                $("#labelFecha").text($.i18n.prop('labelFecha', "1500", $.i18n.prop('val_actual')));

                $("#lb_sfecha").text($.i18n.prop('lb_si'));

                $("#lb_panel_region").text($.i18n.prop('lb_panel_region'));
                $("#lb_seccion_region").text($.i18n.prop('lb_seccion_region'));
                $("#lb_estados").text($.i18n.prop('lb_estados'));
                $("#lb_ecos").text($.i18n.prop('lb_ecos'));
                $("#lb_seccion_tools").text($.i18n.prop('lb_seccion_tools'));
                $("#lb_tools_ayuda").text($.i18n.prop('lb_tools_ayuda'));
                $("#lb_panel_variables").text($.i18n.prop('lb_panel_variables'));
                $("#a_taxon_fuente").text($.i18n.prop('a_taxon'));
                $("#a_clima_fuente").text($.i18n.prop('a_clima'));
                $("#a_topo_fuente").text($.i18n.prop('a_topo'));

                $("#a_taxon_sumidero").text($.i18n.prop('a_taxon'));
                $("#a_clima_sumidero").text($.i18n.prop('a_clima'));
                $("#a_topo_sumidero").text($.i18n.prop('a_topo'));

                $("#btn_variable_fuente").text($.i18n.prop('btn_variable') + " ");
                $("#btn_variable_fuente").append('<span class="caret"></span>');

                $("#btn_variable_sumidero").text($.i18n.prop('btn_variable') + " ");
                $("#btn_variable_sumidero").append('<span class="caret"></span>');

                $("#lb_occ").text($.i18n.prop('lb_occ') + ":");
                $("#lb_occ_celda").text($.i18n.prop('lb_occ_celda') + ":");

                $("#lb_sum_reino").text($.i18n.prop('a_item_reino') + ":");
                $("#lb_sum_phylum").text($.i18n.prop('a_item_phylum') + ":");
                $("#lb_sum_clase").text($.i18n.prop('a_item_clase') + ":");
                $("#lb_sum_orden").text($.i18n.prop('a_item_orden') + ":");
                $("#lb_sum_familia").text($.i18n.prop('a_item_familia') + ":");
                $("#lb_sum_genero").text($.i18n.prop('a_item_genero') + ":");
                $("#lb_sum_especie").text($.i18n.prop('a_item_especie') + ":");

                $("#a_item_reino_fuente").text($.i18n.prop('a_item_reino'));
                $("#a_item_phylum_fuente").text($.i18n.prop('a_item_phylum'));
                $("#a_item_clase_fuente").text($.i18n.prop('a_item_clase'));
                $("#a_item_orden_fuente").text($.i18n.prop('a_item_orden'));
                $("#a_item_familia_fuente").text($.i18n.prop('a_item_familia'));
                $("#a_item_genero_fuente").text($.i18n.prop('a_item_genero'));

                $("#a_item_reino_sumidero").text($.i18n.prop('a_item_reino'));
                $("#a_item_phylum_sumidero").text($.i18n.prop('a_item_phylum'));
                $("#a_item_clase_sumidero").text($.i18n.prop('a_item_clase'));
                $("#a_item_orden_sumidero").text($.i18n.prop('a_item_orden'));
                $("#a_item_familia_sumidero").text($.i18n.prop('a_item_familia'));
                $("#a_item_genero_sumidero").text($.i18n.prop('a_item_genero'));

                $("#btn_variable_bioclim").text($.i18n.prop('btn_variable_bioclim') + " ");
                $("#btn_variable_bioclim").append('<span class="caret"></span>');

                $("#a_item_bio00").text($.i18n.prop('a_item_bio00'));
                $("#a_item_bio01").text($.i18n.prop('a_item_bio01'));
                $("#a_item_bio02").text($.i18n.prop('a_item_bio02'));
                $("#a_item_bio03").text($.i18n.prop('a_item_bio03'));
                $("#a_item_bio04").text($.i18n.prop('a_item_bio04'));
                $("#a_item_bio05").text($.i18n.prop('a_item_bio05'));
                $("#a_item_bio06").text($.i18n.prop('a_item_bio06'));
                $("#a_item_bio07").text($.i18n.prop('a_item_bio07'));
                $("#a_item_bio08").text($.i18n.prop('a_item_bio08'));
                $("#a_item_bio09").text($.i18n.prop('a_item_bio09'));
                $("#a_item_bio10").text($.i18n.prop('a_item_bio10'));
                $("#a_item_bio11").text($.i18n.prop('a_item_bio11'));
                $("#a_item_bio12").text($.i18n.prop('a_item_bio12'));
                $("#a_item_bio13").text($.i18n.prop('a_item_bio13'));
                $("#a_item_bio14").text($.i18n.prop('a_item_bio14'));
                $("#a_item_bio15").text($.i18n.prop('a_item_bio15'));
                $("#a_item_bio16").text($.i18n.prop('a_item_bio16'));
                $("#a_item_bio17").text($.i18n.prop('a_item_bio17'));
                $("#a_item_bio18").text($.i18n.prop('a_item_bio18'));
                $("#a_item_bio19").text($.i18n.prop('a_item_bio19'));

                $("#btn_variable_bioclim_time").text($.i18n.prop('btn_variable_bioclim_time') + " ");
                $("#btn_variable_bioclim_time").append('<span class="caret"></span>');

                $("#a_actual").text($.i18n.prop('a_actual'));
                $("#a_f50").text($.i18n.prop('a_f50'));
                $("#get_esc_ep").text($.i18n.prop('get_esc_ep'));
                $("#lb_resultados").text($.i18n.prop('lb_resultados'));

                $("#send_email_csv").text($.i18n.prop('send_email_csv'));
                $("#cancel_email_csv").text($.i18n.prop('cancel_email_csv'));
                $("#lb_modal_shp").text($.i18n.prop('lb_modal_shp'));
                $("#lb_des_modal_shp").text($.i18n.prop('lb_des_modal_shp'));
                $("#send_email_shp").text($.i18n.prop('send_email_shp'));
                $("#cancel_email_shp").text($.i18n.prop('cancel_email_shp'));
                $("#lb_modal_csv").text($.i18n.prop('lb_modal_csv'));
                $("#csv_request").attr("title", $.i18n.prop('lb_descarga_tbl'));

                $("#lb_des_modal_csv").text($.i18n.prop('lb_des_modal_csv'));
                $("#email_address").attr("placeholder", $.i18n.prop('email_address'));
                $("#email_address_shp").attr("placeholder", $.i18n.prop('email_address_shp'));

                // actualiza los titulos de las tablas
                $('#example tr:eq(0) th:eq(0)').text($.i18n.prop('lb_decil'));
                $('#example tr:eq(0) th:eq(1)').text($.i18n.prop('lb_especie_tbl'));
                $('#example tr:eq(0) th:eq(2)').text($.i18n.prop('lb_epsilon'));
                $('#example tr:eq(0) th:eq(3)').text($.i18n.prop('tip_tbl_score'));
                $('#example tr:eq(0) th:eq(4)').text($.i18n.prop('lb_procentaje_occ'));

                $('#tdisplay tr:eq(0) th:eq(0)').text($.i18n.prop('lb_genero_tbl'));
                $('#tdisplay tr:eq(0) th:eq(1)').text($.i18n.prop('lb_especie_tbl'));
                // $('#tdisplay tr:eq(0) th:eq(2)').text($.i18n.prop('lb_raster'));
                // $('#tdisplay tr:eq(0) th:eq(3)').text($.i18n.prop('lb_rango'));
                $('#tdisplay tr:eq(0) th:eq(2)').text($.i18n.prop('lb_nij'));
                $('#tdisplay tr:eq(0) th:eq(3)').text($.i18n.prop('lb_nj'));
                $('#tdisplay tr:eq(0) th:eq(4)').text($.i18n.prop('lb_ni'));
                $('#tdisplay tr:eq(0) th:eq(5)').text($.i18n.prop('lb_n'));
                $('#tdisplay tr:eq(0) th:eq(6)').text($.i18n.prop('lb_epsilon'));
                $('#tdisplay tr:eq(0) th:eq(7)').text($.i18n.prop('tip_tbl_score'));
                $('#tdisplay tr:eq(0) th:eq(8)').text($.i18n.prop('a_item_reino'));
                $('#tdisplay tr:eq(0) th:eq(0)').text($.i18n.prop('a_item_phylum'));
                $('#tdisplay tr:eq(0) th:eq(10)').text($.i18n.prop('a_item_clase'));
                $('#tdisplay tr:eq(0) th:eq(11)').text($.i18n.prop('a_item_orden'));
                $('#tdisplay tr:eq(0) th:eq(12)').text($.i18n.prop('a_item_familia'));

            }
            else if (_tipo_modulo == 1) {

                $("#lb_titulo_net").text($.i18n.prop('lb_titulo_net'));
                $("#net_link").text($.i18n.prop('net_link'));
                $("#lb_fuente").text($.i18n.prop('lb_fuente'));
                $("#lb_sumidero").text($.i18n.prop('lb_sumidero'));
                $("#btn_topo").text($.i18n.prop('btn_topo'));

                // **** rep
                $("#lb_sub_titulo").text($.i18n.prop('lb_sub_titulo'));
                $("#a_espanol").text($.i18n.prop('a_espanol'));
                $("#a_ingles").text($.i18n.prop('a_ingles'));
                if (firstLoad) {
                    $("#btn_idioma").text($.i18n.prop('btn_idioma') + " ");
                }
                else {
                    // agregar casos si se agregan mas idiomas
                    if (_language_selected == "es_MX") {
                        $("#btn_idioma").text($.i18n.prop('a_espanol') + " ");
                    }
                    else {
                        $("#btn_idioma").text($.i18n.prop('a_ingles') + " ");
                    }

                }
                $("#btn_idioma").append('<span class="caret"></span>');

                $("#generaRed").attr("title", $.i18n.prop('lb_genera_red'));
                $("#limpiaRed").attr("title", $.i18n.prop('lb_limpia_red'));

                $("#title_barnet").text($.i18n.prop('titulo_hist_eps'));
                $("#lb_occ_min").text($.i18n.prop('lb_occ_min') + ":");

                $("#generaRed").text($.i18n.prop('generaRed'));

            }
            // index
            else {

                $("#lb_title_index").text($.i18n.prop('lb_title_index'));
                $("#lb_title_qs").text($.i18n.prop('lb_title_qs'));

                $("#a_modelo_nicho").text($.i18n.prop('a_modelo_nicho'));
                $("#a_modelo_comunidad").text($.i18n.prop('a_modelo_comunidad'));

                if (firstLoad) {
                    $("#btn_idioma").text($.i18n.prop('btn_idioma') + " ");
                }
                else {
                    // agregar casos si se agregan mas idiomas
                    if (_language_selected == "es_MX") {
                        $("#btn_idioma").text($.i18n.prop('a_espanol') + " ");
                    }
                    else {
                        $("#btn_idioma").text($.i18n.prop('a_ingles') + " ");
                    }

                }
                $("#btn_idioma").append('<span class="caret"></span>');

                $("#send_email_login").text($.i18n.prop('send_email_login'));
                $("#cancel_email_csv").text($.i18n.prop('cancel_email_csv'));

                $("#lb_modal_login").text($.i18n.prop('lb_modal_login'));
                $("#lb_des_modal_login").text($.i18n.prop('lb_des_modal_login'));

            }

        }

        /**
         * Éste método realiza el llmado a la función que inicializa las variables necesarias para el proceso de internacionalización.
         *
         * @function startLanguageModule
         * @private
         * @memberof! language_module
         *
         * @param {object} main_pede - Referencia al controlador de nicho o communidad ecológica
         * @param {integer} tipo_modulo - Tipo de controlador para enlazar el módulo de internacionalización
         */
        function startLanguageModule(main_pede, tipo_modulo) {

            _VERBOSE ? console.log("startLanguageModule") : _VERBOSE;

            _initilizeElementsForLanguage(main_pede, tipo_modulo);

        }

        return{
            startLanguageModule: startLanguageModule,
            getI18: getI18,
            addModuleForLanguage: addModuleForLanguage

        }
    });