/*
* DashCoincoin
* Developed and designed by Thenon David
* www.sveetch.biz
* 
* JSON parser
*/

Tribune_JSON_Parser = {
    /*
    * Réinitialise le format sur un nouvel id
    */
    get_backend : function(backend) {
        if(DEBUG) console.log("get_backend -> JSON() started");
        var processedPosts = 0;
        // Si la liste est vide c'est le premier load de la page
        //var stateLoading = ( $('#spinner_loading').css('display') == 'block' );
        var actualPostListLength = $("#tribune_list ul li").length;
        var postList = backend['data']['postList'];
        if( postList.length > 0 ) {
            // On mappe la liste du backend sur une liste html mise en forme
            var objectHtml = '';
            $.each( postList, function(i, n){
                // On rajout l'entrée si elle n'a pas déja été récupérée pendant 
                // un submit au meme moment, méthode anti-doublon
                if( n['pk'] > LAST_POSTED_ID ) {
                    processedPosts += 1;
                    // On vire un message du haut de la liste à chaque fois si ce 
                    // n'est pas le premier chargement de la page
                    if (actualPostListLength > 0) {
                        $("#tribune_list ul li").slice(0,1).remove();
                    }
                    // Note le timestamp et son indice
                    if( TS_CLOCKS[ n['timestamp'] ] ) {
                        TS_CLOCKS[ n['timestamp'] ] += 1;
                    } else {
                        TS_CLOCKS[ n['timestamp'] ] = 1;
                    }
                    // Calcul le VRAI indice (celui fourni par le backend n'est pas 
                    // toujours correct..) et la "clockclass" (selon l'indice)
                    if( TS_CLOCKS[ n['timestamp'] ] > 1 ){
                        var indice = TS_CLOCKS[n['timestamp']];
                        n['clock'] = n['clock'].substr(0,8);
                        n['clockclass'] = n['clockclass'].substr(0,6) + ClockIndicer.lpadding(indice);
                        n['clock_indice'] = indice;
                    }

                    // Reproduit le format d'horloge à plat que contient le backend 
                    // 'html' et qui sert à remplir le registre
                    var flat_clock_indiced = n['clock'];
                    if( n['clock_indice'] > 1){
                        flat_clock_indiced = flat_clock_indiced+""+n['clock_indice'];
                    }
                    
                    // Stock l'horloge du post comme celle de l'utilisateur, 
                    // uniquement pour les authentifiés
                    if( n['sender'] != "" && wrapPreference.getPref("username") != "" && n['sender'] == wrapPreference.getPref("username")) {
                        // Registre de l'horloge en version sur trois segments
                        USER_POSTS_CLOCK[ ClockIndicer.indice_to_number(flat_clock_indiced) ] = tribuneParser.set_timestamp_registry_list(USER_POSTS_CLOCK[ ClockIndicer.indice_to_number(flat_clock_indiced) ], ClockstampManipulator.get_date(n['timestamp']));
                        // Registre de l'horloge en version sur deux segments
                        USER_POSTS_CLOCK[ flat_clock_indiced.substr(0,5) ] = tribuneParser.set_timestamp_registry_list(USER_POSTS_CLOCK[ flat_clock_indiced.substr(0,5) ], ClockstampManipulator.get_date(n['timestamp']));
                    }
                    
                    // Rajoute le post html à la liste
                    $("#tribune_list ul").append( tribuneParser.postObjetToHtml(i, n, 'li') );
                    
                    // Evènements sur les objets du message
                    tribuneParser.attach_message_events(n);
                    
                    // Récupère le dernier id du backend
                    LAST_POSTED_ID = n['pk'];
                }
            });
            
            // Positionne le scroll de la liste des messages au bas de la liste
            if( processedPosts>0 ) $("#tribune_list").scrollTop( $("#tribune_list ul").height() );
        }
        
        return;
    }
};

