Subversion Repositories eFlore/Applications.del

Rev

Rev 984 | Rev 991 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

/**----------------------------------------------------------------------------------------------------------*/
/** Variables globales et initialisation
 *  Variables crées par php dans le squelettes 
 * 
 * var g_idObservation : id de l'observation en cours de consultation
 * var g_urlServiceVotes : url du service web des votes à appeler
 * var g_urlServiceUtilisateurs : url du service web utilisateur à appeler
 * var g_votes : tableau des votes 
 * 
 */
var boutonClique = null;
var g_idUtilisateur = null;

$(document).ready(function() {
        getIdUtilisateur();
        gererEvenementsClicsVotes();
        gererEvenementClicImageSecondaire();
});

function getIdUtilisateur() {
        $.getJSON(g_urlServiceUtilisateurs, function(data) {
                g_idUtilisateur = data.id_utilisateur;
                mettreEnValeurVotesUtilisateur();
        });
}

function gererEvenementsClicsVotes() {
        $('.bouton_vote').click(function(event) {
                boutonClique = $(this);
                voter(getValeurVote());
        }); 
}

function gererEvenementClicImageSecondaire() {
        $('.image_secondaire').click(function(event) {
                $('.image_secondaire').removeClass('image_active');
                
                var urlImageSecondaire = $(this).attr('src');
                urlImageSecondaireAgrandie = urlImageSecondaire.replace('XS','CRS');
                
                var urlImagePrincipale = $('#image_principale').attr('src');
                urlImagePrincipaleMiniature = urlImagePrincipale.replace('CRS','XS');
                
                $(this).addClass('image_active');
                $('#image_principale').attr('src', urlImageSecondaireAgrandie);
        });
}


function getValeurVote() {
        valeur = 0;
        if(boutonClique.hasClass('bouton_vote_oui')) {
                valeur = 1;
        }
        return valeur;
}

function getIdProposition() {
        var chaineProposition = boutonClique.parent().attr('id');
        return chaineProposition.replace('vote_determination_', '');
}


/**----------------------------------------------------------------------------------------------------------*/
/** Affichage **/

function mettreEnValeurBoutonClique() {
        boutonClique.parent().find(".bouton_vote").removeClass("bouton_selectionne");
        boutonClique.effect("highlight", {}, 500, function() {$(this).addClass("bouton_selectionne");});
}

function mettreEnValeurVotesUtilisateur() {
        $('.votes_determination').each(function() {
                var id_proposition = $(this).attr('id').replace('vote_determination_', '');
                if(g_votes[id_proposition] != undefined && g_votes[id_proposition][g_idUtilisateur] != undefined) {
                        if(g_votes[id_proposition][g_idUtilisateur] == 1) {
                                $(this).children('.bouton_vote_oui').addClass("bouton_selectionne");
                        } else {
                                $(this).children('.bouton_vote_non').addClass("bouton_selectionne");
                        }
                }
        }); 
}

function mettreAJourAffichageNbVotes(idProposition) {
        affichageVotes = boutonClique.parent().find(".nb_votes");
        affichageVotes.each(function() {
                if($(this).hasClass("nb_votes_oui")) {
                        $(this).html(calculerVotes(idProposition,1));
                }
                
                if($(this).hasClass("nb_votes_non")) {
                        $(this).html(calculerVotes(idProposition,0));
                }
        });
}

/**----------------------------------------------------------------------------------------------------------*/
/** Requetes **/

function getUrlVoteProposition(idProposition) {
        return g_urlServiceVotes+'/'+idProposition+'/vote/';
}

function getMethodeRequete(idProposition, idUtilisateur) {
        var methode = "PUT";
        if(g_votes[idProposition] != undefined && g_votes[idProposition] != null &&
                        g_votes[idProposition][idUtilisateur] != undefined && g_votes[idProposition][idUtilisateur] != null) {
                methode = "POST";
        }
        return methode;
}

function voter(ouiOuNon) {
        var idProposition = getIdProposition();
        var urlVote = getUrlVoteProposition(idProposition);
        var type = getMethodeRequete(idProposition, g_idUtilisateur);
        
        if(!voteEstIdentique(idProposition, g_idUtilisateur, ouiOuNon)) {
                $.ajax({
                        url : urlVote,
                        type: type,
                        data: "utilisateur="+g_idUtilisateur+"&valeur="+ouiOuNon
                }).done(function(data) {
                        mettreAjourTableauVotes(idProposition, g_idUtilisateur, ouiOuNon);
                        mettreAJourAffichageNbVotes(idProposition);
                        mettreEnValeurBoutonClique();
                        boutonClique = null;
                });             
        }
}

/**----------------------------------------------------------------------------------------------------------*/
/** Mise à jour et accès au tableau des votes **/

function mettreAjourTableauVotes(idProposition, idUtilisateur, valeurVote) {
        if(g_votes[idProposition] == undefined) {
                g_votes[idProposition] = new Array();
        }
        g_votes[idProposition][idUtilisateur] = valeurVote;
}

function calculerVotes(id_proposition, ouiOuNon) {
        var nb = 0;
        for (var votant in g_votes[id_proposition]) {
                if(g_votes[id_proposition][votant] == ouiOuNon) {
                        nb++;
                }
        }
        return nb;
}

function voteEstIdentique(id_proposition, id_utilisateur, ouiOuNon) {
        return (g_votes[id_proposition] != undefined &&
                        g_votes[id_proposition][id_utilisateur] != undefined &&
                        g_votes[id_proposition][id_utilisateur] == ouiOuNon);
}