# Source: index.js

    /**
     * Éste módulo es el encargado de la presentación de los componentes de la
     * página de inicio
     *
     * @namespace module_index
     */
    var module_index = (function() {
        var _VERBOSE = true;

        _VERBOSE ? console.log("*** loading index... ***") : _VERBOSE;

        var _language_module_net;
        var _toastr = toastr;
        var _iTrans;
        var _tipo_modulo;
        var _link_val;

        // TEMPORAL DESARROLLO
        var _url_api, _url_nicho, _url_comunidad;

        /**
         * Método de inicialización de componentes necesarios en la primera pantalla
         * del sistema
         *
         * @function _initializeComponents
         * @private
         * @memberof! module_index
         */
        function _initializeComponents() {

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

            if ($.cookie("register") == undefined) {
                $.cookie("register", true, {expires: 7});
                $("#link_modelo_nicho").append("<a href=\"#\"  id=\"a_modelo_nicho\" link-id=\"" + _url_nicho + "\" data-target=\"#modalLogin\" data-toggle=\"modal\" >" + _iTrans.prop("a_modelo_nicho") + "</a>");
                $("#link_modelo_comunidad").append("<a href=\"#\" id=\"a_modelo_comunidad\" link-id=\"" + _url_comunidad + "\" data-target=\"#modalLogin\" data-toggle=\"modal\" \">" + _iTrans.prop("a_modelo_comunidad") + "</a>");
            }
            else {
                $("#link_modelo_nicho").append("<a href=\"" + _url_nicho + "\"  id=\"a_modelo_nicho\"  >" + _iTrans.prop("a_modelo_nicho") + "</a>");
                $("#link_modelo_comunidad").append("<a href=\"" + _url_comunidad + "\" id=\"a_modelo_comunidad\" \">" + _iTrans.prop("a_modelo_comunidad") + "</a>");
            }

            _toastr.options = {
                "debug": false,
                "onclick": null,
                "fadeIn": 300,
                "fadeOut": 1000,
                "timeOut": 2000,
                "extendedTimeOut": 2000,
                "positionClass": "toast-bottom-center",
                "preventDuplicates": true,
                "progressBar": true
            };

            // obtien el parametro link-id para redireccionar segun el enalce selecicoando
            $("a[data-toggle=modal]").click(function() {
                _VERBOSE ? console.log("entro") : _VERBOSE;
                _link_val = "";
                _VERBOSE ? console.log($(this).attr("link-id")) : _VERBOSE;
                _link_val = $(this).attr("link-id");
            });

            $("#btn_redirect").click(function() {

                _VERBOSE ? console.log("btn_redirect") : _VERBOSE;
                _VERBOSE ? console.log(_link_val) : _VERBOSE;
                window.location.replace(_link_val);

            });

            $("#send_email_login").click(function() {
                _VERBOSE ? console.log("send_email_login") : _VERBOSE;
                _VERBOSE ? console.log(_link_val) : _VERBOSE;

                _VERBOSE ? console.log($("#email_address")[0].validity["valid"]) : _VERBOSE;
                _VERBOSE ? console.log($("#usaer_name").val()) : _VERBOSE;

                var regexp = /^(([A-Za-z]+[\-\']?)*([A-Za-z]+)?\s)+([A-Za-z]+[\-\']?)*([A-Za-z]+)?$/;

                if (!regexp.test($("#usaer_name").val())) {
                    _toastr.error("Por favor inserte un usuario valido. Debe contener al menos un nombre y un apellido");
                    $("#usaer_name").val("");
                    return;
                }

                if ($("#email_address")[0].validity["valid"]) {
                    var email = $("#email_address").val();
                    var fecha = getDateNow();
                    var usuario = $("#usaer_name").val();

                    _VERBOSE ? console.log("email: " + email) : _VERBOSE;
                    _VERBOSE ? console.log("fecha: " + fecha) : _VERBOSE;
                    _VERBOSE ? console.log("usuario: " + usuario) : _VERBOSE;

                    // TODO: Registro de correo y redireccionamiento a pagina.
                    $.ajax({
                        // url : "http://localhost:8080/snib/getUserReg",
                        url: _url_api,
                        type: "post",
                        data: {
                            // qtype: "getUserReg",
                            email: email
                        },
                        success: function(d) {
                            var res = d.data;
                            // var res = JSON.parse(d)

                            var count = res[0].registro;
                            _VERBOSE ? console.log(count) : _VERBOSE;

                            if (count == 0) {
                                $.ajax({
                                    url: _url_api,
                                    type: "post",
                                    data: {
                                        qtype: "setUserReg",
                                        email: email,
                                        fecha: fecha,
                                        usuario: usuario
                                    },
                                    success: function(d) {
                                        _VERBOSE ? console.log("registrado") : _VERBOSE;
                                        _VERBOSE ? console.log(d) : _VERBOSE;
                                        $("#modalLogin").modal("hide");
                                        window.location.replace(_link_val);
                                    },
                                    error: function(jqXHR, textStatus, errorThrown) {
                                        _VERBOSE ? console.log("error: " + textStatus) : _VERBOSE;

                                        $("#email_address").val("");
                                        $("#usaer_name").val("");

                                        $("#modalLogin").modal("hide");
                                        _toastr.error("Existio un error de registro, intentelo nuevamente");
                                        // _module_toast.showToast_BottomCenter(_iTrans.prop('lb_correo_error'), "error")
                                    }
                                });
                            } else {
                                _VERBOSE ? console.log("Ya registrado") : _VERBOSE;
                                $("#modalLogin").modal("hide");
                                window.location.replace(_link_val);
                            }
                        },
                        error: function(jqXHR, textStatus, errorThrown) {
                            _VERBOSE ? console.log("error: " + textStatus) : _VERBOSE;

                            $("#email_address").val("");
                            $("#usaer_name").val("");
                            $("#modalLogin").modal("hide");

                            _toastr.error("Existio un error de registro, intentelo nuevamente");
                        }
                    });

                } else {
                    $("#email_address").val("");
                    _toastr.error("Correo invalido, intentelo nuevamente");
                }
            });
        }

        /**
         * Regresa la fecha actual con formato YYYY-MM-DD
         *
         * @function getDateNow
         * @private
         * @memberof! module_index
         */
        function getDateNow() {
            _VERBOSE ? console.log("getDateNow") : _VERBOSE;

            var today = new Date();
            var dd = today.getDate();
            var mm = today.getMonth() + 1; //January is 0!
            var yyyy = today.getFullYear();

            if (dd < 10) {
                dd = "0" + dd;
            }
            if (mm < 10) {
                mm = "0" + mm;
            }
            today = yyyy + "-" + mm + "-" + dd;

            return today;
        }

        /**
         * Función encargada de configurar las ligas que se usuarán para el ambiente
         * gráfico y el API.
         *
         * @function  startModule
         * @memberof! module_index
         *
         * @param {string} url_front - URL que donde se sirve el frontend
         * @param {string} url_api - URL del api SNIB-middleware
         * @param {integer} tipo_modulo - Módulo que se está usando (0-nicho,
         *                                1-comunidad, 2-index)
         * @param {boolean} verbose - Se activa mesnajes de debug
         */
        function startModule(url_front, url_api, tipo_modulo, verbose) {
            // _AMBIENTE = ambiente
            _VERBOSE = verbose;
            console.log("_VERBOSE: " + _VERBOSE);
            _VERBOSE ? console.log("URL front: " + url_front) : _VERBOSE;
            _VERBOSE ? console.log("URL api: " + url_api) : _VERBOSE;
            _VERBOSE ? console.log("startModule Index") : _VERBOSE;
            _tipo_modulo = tipo_modulo;

            // se guardan cookies para enviarlas a comunidad y nicho
            $.cookie("url_front", url_front);
            $.cookie("url_api", url_api);

            // var _url_trabajo = "http://species.conabio.gob.mx/niche?",
            _url_nicho = url_front + "/geoportal_v0.1.html";
            _url_comunidad = url_front + "/comunidad_v0.1.html";
            _url_api = url_api;

            $.cookie("url_nicho", _url_nicho);
            $.cookie("url_comunidad", _url_comunidad);

            // Se cargan los archivos de idiomas y depsues son cargados los modulos subsecuentes
            // _VERBOSE ? console.log(this) : _VERBOSE
            _language_module_net = language_module();
            _language_module_net.startLanguageModule(this, _tipo_modulo);

        }

        /**
         * Se incializan los módulos de traducción y los componentes necesarios para
         * el índice
         *
         * @function loadModules
         * @memberof! module_index
         */
        function loadModules() {
            _VERBOSE ? console.log("loadModules") : _VERBOSE;
            _iTrans = _language_module_net.getI18();
            _initializeComponents();
        }

        // retorna solamente un objeto con los miembros que son públicos.
        return {
            startModule: startModule,
            loadModules: loadModules
        };

    })();

    $(document).ready(function() {
        // verbose por default es true
        var verbose = false;

        // 0 local, 1 producción
        var ambiente = 1;
        // 0 nicho, 1 comunidad, 2 index
        var modulo = 2;

        var url_front;
        var url_api;

        if (ambiente === 0) {
            url_front = "http://localhost/species-front";
            url_api = "http://localhost:8080";
        }
        else {
    //        url_front = "http://species.conabio.gob.mx/c3/charlie_dev";
    //        url_api = "http://species.conabio.gob.mx/niche3";

            url_front = "http://species.conabio.gob.mx";
            url_api = "http://species.conabio.gob.mx/niche3";
        }

        module_index.startModule(url_front, url_api, modulo, verbose);
    });