/*
 *
 *      Fichier javascript - Outil JAVA
 *
 */



/*
 *
 *  COOKIE
 *
 */
//Ecrire un cookie
function EcrireCookie(nom, valeur){
    var argv=EcrireCookie.arguments;
    var argc=EcrireCookie.arguments.length;
    var expires=(argc > 2) ? argv[2] : null;
    var path=(argc > 3) ? argv[3] : null;
    var domain=(argc > 4) ? argv[4] : null;
    var secure=(argc > 5) ? argv[5] : false;
    document.cookie=nom+"="+escape(valeur)+
    ((expires==null) ? "" : ("; expires="+expires.toGMTString()))+
    ((path==null) ? "" : ("; path="+path))+
    ((domain==null) ? "" : ("; domain="+domain))+
    ((secure==true) ? "; secure" : "");
}

//Fonction utilisé dans Lire un cookie
function getCookieVal(offset){
    var endstr=document.cookie.indexOf (";", offset);
    if (endstr==-1) endstr=document.cookie.length;
    return unescape(document.cookie.substring(offset, endstr));
}

//Lire un cookie
function LireCookie(nom){
    var arg=nom+"=";
    var alen=arg.length;
    var clen=document.cookie.length;
    var i=0;
    while (i<clen)
    {
        var j=i+alen;
        if (document.cookie.substring(i, j)==arg) return getCookieVal(j);
        i=document.cookie.indexOf(" ",i)+1;
        if (i==0) break;
    }
    return null;
}

//Effacer un cookie
function EffaceCookie(nom){
    date=new Date;
    date.setFullYear(date.getFullYear()-1);
    EcrireCookie(nom,null,date);
}










/*
 *
 * INITIALISATION DE LA PAGE
 *
 */

$(document).ready(function(){

    //$('table', $('#featureTabsContainer .tab')[0]).each(function(){$('.native').hide();});

    //Modification charte graphique
    $('#featureTabsContainer').show();
    $('#div_menu_fonct').hide();
    $('#div_familles').hide();
    $('#div_titre_territoire').hide();
    $('#div_stat').hide();
    $('#div_loader_stat').hide();


    // rajoute le parser tablesorter pour trier la colonne fofa
    $.tablesorter.addParser({
        // set a unique id
        id: 'grades',
        is: function(s) {
            // return false so this parser is not auto detected
            return false;
        },
        format: function(s) {
            // format your data for normalization
            s=s.replace(new RegExp(".*fofa=","g"),"0");
            s=s.substr(1, s.indexOf('"', 1)-1);
            return parseInt(s);
        },
        // set type, either numeric or text
        type: 'numeric'
    });

});





/*
 * Fonction menu principal
 *
 */

//Accueil
function accueil(){
    id_zone  = LireCookie('id_zone_cookie');
    type     = LireCookie('type_fonction_cookie');
    if(id_zone){
        EffaceCookie('id_zone_cookie');
        EffaceCookie('nom_zone_cookie');
        EffaceCookie('type_fonction_cookie');
        window.location.replace("index.jsp");

    }else if(type){
        EffaceCookie('id_zone_cookie');
        EffaceCookie('nom_zone_cookie');
        EffaceCookie('type_fonction_cookie');
        window.location.replace("index.jsp");
    }
}










/*
 * Fonction permettant le changement de territoire ou l'initialisation d'un territoire
 * 
 */

function changer_territoire() {
    // Chargement du nom de la zone
    var nom_territoire = $('#selection_territoire').val();
    nom_territoire = nom_territoire.substr(0, 1).toUpperCase() + nom_territoire.substr(1,nom_territoire.length).toLowerCase();
    EcrireCookie('nom_zone_cookie',nom_territoire);
}

/*
 *
 *  Fonction principal permettant l'affichage des tableaux avec deux variables (Type du tableau[type] et identifiant de la zone [id_zone])
 *
 */

function affichage_tableau(type, id_zone) {
    /*
        Séléction des variables de texte utilisé pour le type séléctionné
        --> type_servlet = Nom de la servlet
        --> type_text    = Texte affiché en entête de la zone lors de la séléction du type (ex:Accueil >> Tableau fixe)
     */
    var arguments = {};


    //Modification charte graphique
    maj_type_css();
    type_css = '#'+type;
    $(type_css).css('background-color','#f5f5f5');
    $(type_css).css('border','1px solid #B8E4C0');
    $(type_css).css('border-right','1px solid #f5f5f5');
    $(type_css).css('border-left','1px solid #f5f5f5');


    chargement_ci_histo();

    //Paramètre idzone
    if(!id_zone){
        if(LireCookie('id_zone_cookie')){
            id_zone = LireCookie('id_zone_cookie');
        }else{
            if($('#input_idzone').val()){
                if (!isNaN($('#input_idzone').val()) ){
                    id_zone = $('#input_idzone').val();
                }
            }
        }
    }

    if(!type){
        $('#fonction_val').val(type);
    }

    //Mise en cookie des informations
    EcrireCookie('type_fonction_cookie',type);
    EcrireCookie('id_zone_cookie',id_zone);

    if(LireCookie('nom_zone_cookie')){
        nom_zone = LireCookie('nom_zone_cookie');
    }else{
        nom_zone = $('#selection_territoire').val()
        EcrireCookie('nom_zone_cookie',nom_zone);
    }
    // plus d'affichage ici du nom du territoire => l'entête est générée par le serveur
    //    $('#titre_territoire').html(nom_zone);
    $('#titre_territoire').hide();




    //Application de la servlet concerné par le tableau séléctionné
    if(type == 'tab_fix'){
        $("#export_commune").show();
        type_text       = "Indicateurs clés";
        type_servlet    = "generer_tdb";
        arguments       = {
            id_zone    : id_zone,
            zonage     : 'COM',
            source_xml : 'fofa.xml'
        };
    }
    if(type == 'tab_comp'){
        $("#export_commune").show();
        type_text       = "Des territoires de références";
        type_servlet    = "generer_tdb";
        arguments       = {
            id_zone    : id_zone,
            zonage     : 'COM',
            source_xml : 'comparaison.xml'
        };
    }
    if(type == 'tab_tdb'){
        $("#export_commune").hide();
        $("#zone_b").hide();
        type_text       = "Des tendances";
        type_servlet    = "generer_tdb";
        arguments       = {
            id_zone    : id_zone,
            zonage     : 'COM',
            source_xml : 'tdb.xml'
        };
    }
    if(type == 'tab_qui'){
        $("#export_commune").show();
        $("#zone_b").hide();
        type_text       = "Des communes semblables";
        type_servlet    = "generer_tdb";
        arguments       = {
            id_zone    : id_zone,
            zonage     : 'COM',
            source_xml : 'qmr.xml'
        };
    }

    //Modification du texte selon la fonction
    $('#zone_a span.indic_ou').html('<a href="#" onclick="javascript:accueil()">Accueil</a> >> '+type_text+' >> <a href="#" onclick="javascript:modif_commune()">Choix de la commune</a> >> '+ nom_zone);

    $('#div_stat_tab').load( type_servlet, arguments, function() {
        $('#div_loader_stat').hide();
        $('#div_stat').show();
        $('#tableau_comparaison').tablesorter({
            headers: {
                3: {
                    sorter:'grades'
                }
            }
        });


        $("#tableau_comparaison tr").find("span").hide();
        $('#tableau_comparaison tr').hover(function(){
            $('#div_modal_zone_b').html($(this).find("span").html() );
             
              
        },function(){
            $('#div_modal_zone_b').html("<br/>");
        });
    });
}





/*
 *
 *  Fonction dévoué à la charte graphique - remise à zero de la charte graphique du menu des types de fonction (menu de gauche sur le site)
 *
 */
function maj_type_css(){

    $('#div_parametrage').hide();
    $('#div_stat').hide();
    $('#div_search').hide();
    $('#text').hide();
    $('#div_titre_territoire').show();
    $('#div_loader_stat').show();
    $('#div_menu_fonct').show();
    $('#tab_fix').css('background-color','#ffffff');
    $('#tab_fix').css('border','1px solid white');
    $('#tab_comp').css('background-color','#ffffff');
    $('#tab_comp').css('border','1px solid white');
    $('#tab_tdb').css('background-color','#ffffff');
    $('#tab_tdb').css('border','1px solid white');
    $('#tab_qui').css('background-color','#ffffff');
    $('#tab_qui').css('border','1px solid white');
    $('#zone_a').css('width','650px');
    $('#zone_b').show();
    /*        $('#zone_c').show(); */
    $('#zone_d').show();
    $('#zone_e').hide();
}







/*
 *
 *  Fonction permettant l'export d'un tableau en Excel
 *
 */

function export_tableau_excel(){
    id_zone  = LireCookie('id_zone_cookie');
    type     = LireCookie('type_fonction_cookie');

    var url = "generer_tdb?id_zone="+id_zone+"&mode_sortie=excel&zonage=COM";
    if(type=="tab_fix") {    
        url=url+"&source_xml=fofa.xml";
    }
    else if(type=="tab_comp") {
        url=url+"&source_xml=comparaison.xml";
    }  else if(type=="tab_qui") {
        url=url+"&source_xml=qmr.xml";
    }

    window.location = url;
}

/*
 *
 *  Fonction permettant l'export d'un tableau en HTML
 *
 */

function export_tableau_html(){
    //window.location = "generer_tableau_comparaison?id_zone="+$('#input_idzone').val()+"&mode_sortie=html&zonage=COM";
    //    lien = "generer_tableau_comparaison?id_zone="+$('#input_idzone').val()+"&mode_sortie=html&zonage=COM";

    lien="print.jsp";
    window.open(lien, '_blank', '')
}








/*
 *
 *  Fonction appelé lors de la modification de la commune (gros icone dans la partie de droite)
 *
 */

function modif_commune(){
    $('#div_modal_choix_territoire').html('');
    type = LireCookie('type_fonction_cookie');
    if(type == 'tab_fix'){    type_text       = "Indicateurs clés";}
    if(type == 'tab_comp'){   type_text       = "Des territoires de références";}
    if(type == 'tab_tdb'){    type_text       = "Des tendances";}
    if(type == 'tab_qui'){    type_text       = "Des communes semblables";}
    
    //CSS
    $('#div_stat').hide();
    $('#div_search').show();
    $('#div_search').css('height','500px');

    $('#div_search').load('choix_commune', {}, function() {
        //Modification du texte selon la fonction
        $('#zone_a span.indic_ou').html('<a href="#" onclick="javascript:accueil()">Accueil</a> >> '+ type_text);
        $('#selection_territoire').focus();
        
        $("#form_choix_commune").submit(function(){
            id_zone_choix_temp = $('#input_idzone_temp').val();
            id_zone_choix = $('#input_idzone').val();

            //alert('id_zone_choix_temp == '+id_zone_choix_temp);
            if(id_zone_choix_temp == ''){
                $.post('existe_commune',{
                    nom:$('#selection_territoire').val()
                },function(data){
                    //alert('data == '+data);
                    if(data=='-1') {
                    
                    } else if(data=='-2') {
                        //console.log($('#autoSuggestionsList').val());
                        if(($('#autoSuggestionsList').html() == '')||($('#autoSuggestionsList').html() == '<ul id="table_listes_zones"></ul>')) {
                            $('#choix_comm_message').show();
                            $('#choix_comm_message').html('Aucune commune ne correspond à votre demande.');
                        }
                    } else if(data=='-3') {
                        $('#choix_comm_message').show();
                        $('#choix_comm_message').html('Plusieurs');
                    } else {
                        //alert('data2 == '+data);
                        //alert("input_idzone == "+$('#input_idzone').val());
                        $('#input_idzone').val(data);
                        changer_territoire();
                        //Fonction principal
                        affichage_tableau(type,data);
                    }

                });
            }else{
                if (!isNaN(id_zone_choix_temp) ){
                    $('#input_idzone').val($('#input_idzone_temp').val());
                    changer_territoire();
                    //Fonction principal
                    affichage_tableau(type,id_zone_choix_temp);
                }
            }
            return false;
        });

    });
}







/*
 * 1er affichage de la saisie du choix du territoire (menu déroulant des communes)
 *
 */

function afficher_menu_com(type) {
    /*
        Séléction des variables de texte utilisé pour le type séléctionné
        --> type_text    = Texte affiché en entête de la zone lors de la séléction du type (ex:Accueil >> Tableau fixe)
     */
    if(type == 'tab_fix'){    type_text       = "Indicateurs clés";}
    if(type == 'tab_comp'){   type_text       = "Des territoires de références";}
    if(type == 'tab_tdb'){    type_text       = "Des tendances";}
    if(type == 'tab_qui'){    type_text       = "Des communes semblables";}

    //Mise en cookie du type de tableau
    EcrireCookie('type_fonction_cookie',type);

    //Fonction qui utilise la servlet "choix_commune" pour afficher le menu de choix de la commune.
    $('#input_idzone').val('');
    $('#div_modal_choix_territoire').show();
    $('#div_modal_choix_territoire').load('choix_commune', {}, function() {
        //Modification du texte selon la fonction
        $('#zone_a span.indic_ou').html('<a href="#" onclick="javascript:accueil()">Accueil</a> >> '+type_text);
        $('#selection_territoire').focus();
        $('#div_modal_choix_territoire').css('height','400px');
        $('#tab_div_parametrage').hide();
        $('#text').hide();
        $("#form_choix_commune").submit(function(){
            id_zone_choix_temp = $('#input_idzone_temp').val();
            if(id_zone_choix_temp == ''){
                $.post('existe_commune',{
                    nom:$('#selection_territoire').val()
                },function(data){
                    if(data=='-1') {
                    } else if(data=='-2') {
                        if(($('#autoSuggestionsList').html() == '')||($('#autoSuggestionsList').html() == '<table id="table_listes_zones"></table>')) {
                            $('#choix_comm_message').show();
                            $('#choix_comm_message').html('Aucune commune ne correspond à votre demande.');
                        }
                    }
                    else if(data=='-3') {
                        $('#choix_comm_message').show();
                        $('#choix_comm_message').html('Plusieurs communes de disponible');
                    } else {
                        $('#input_idzone').val(data);
                        changer_territoire();
                        //Fonction principal
                        affichage_tableau(type,id_zone_choix_temp);
                    }

                });
            }else{
                if (!isNaN(id_zone_choix_temp) ){
                    $('#input_idzone').val($('#input_idzone_temp').val());
                    changer_territoire();
                    //Fonction principal
                    affichage_tableau(type,id_zone_choix_temp);
                }
            }
            return false;
        });
    });
}









/*
*  Chargement des zones historiques et Carte d'identité
*  --> Implementation des servlets
*/

function chargement_ci_histo(){
    $('#zone_c span').html('Historique');
    /*
        $('#div_modal_zone_b').load('historique', {}, function() {});
 */
    $('#zone_b span').html("Description");
/*
        $('#div_modal_zone_c').load('carte_identite', {}, function() {});
 */
}











/*
* fonctions auto completions
*
*/
var autocompletion_texte_a_chercher = "";
var autocompletion_timer_a_declencher = true;
var autocompletion_idAutoListe;
var autocompletion_url;
var autocompletion_idInput;
var autocompletion_idInputCache;
var autocompletion_compte_nb_requetes = 0;
var autocompletion_compte_nb_demandes = 0;

function callback_timer_autocompletion() {
    if(autocompletion_texte_a_chercher.length >= 3) {

        $.post(autocompletion_url, {
            chercher: autocompletion_texte_a_chercher,
            idinput: autocompletion_idInput,
            idinputcache: autocompletion_idInputCache,
            fill_function:"autocompletion_fill",
            idliste : autocompletion_idAutoListe
        }, function(data){
            if(data.length >0) {
                $('#suggestions').show();
                $('#autoSuggestionsList').html(data);
                autocompletion_compte_nb_requetes++;

                //console.debug('nb requetes : '+autocompletion_compte_nb_requetes+" pour "+autocompletion_compte_nb_demandes+" demandes");
            }
        });
    }
    autocompletion_timer_a_declencher = true;
}

// appel au serveur pour remplir une liste à partir d'un bout de texte
function autocompletion_lookup(idInput, idAutoListe, url, inputString, idInputCache) {
    autocompletion_texte_a_chercher = inputString;
    autocompletion_compte_nb_demandes++;
    $('#choix_comm_message').hide();
    $('#input_idzone_temp').val('');

    if(autocompletion_texte_a_chercher.length <= 2) {
        $('#suggestions').hide();
        $('#table_listes_zones').hide();
        return;
    } else {
        if(autocompletion_timer_a_declencher==true) {
            autocompletion_timer_a_declencher = false;
            autocompletion_idAutoListe = idAutoListe;
            autocompletion_idInput = idInput;
            autocompletion_idInputCache = idInputCache;
            autocompletion_url = url;
            setTimeout(callback_timer_autocompletion, 800);
        }

    }
}

function autocompletion_fill(idInput,idInputCache,  idAutoListe,  Texte, TexteCache) {
    $('#'+idInput).val(Texte);
    $('#'+idInputCache).val(TexteCache);
    $('#suggestions').hide();
    $('#table_listes_zones').hide();
}


/*
*
* Fonction permettant de garder le type de tableau et la commune en cours lors de l'actualisation par F5 (un onload est placé sur le <body>)
*
*/

function affiche_tab(){
    if(LireCookie('type_fonction_cookie')){
        if(LireCookie('id_zone_cookie')){
            affichage_tableau(LireCookie('type_fonction_cookie'), LireCookie('id_zone_cookie'));
        }
    }
}
