Event.observe(window, "load", function() { Rating.init(); });

var ratingsLabels = new Array(
    "&nbsp;",
    "Nul",
    "Bof",
    "Bien",
    "Ca D&#233;chire",
    "Trop d'la Balle"
);

var Rating = {
    STAR_ID_PREFIX: "mediaRating", // doit correspondre ds le helper

    init: function() {
        new Ajax.Updater(
            "pollScore",
            "/media-pollscore/" + Tools.localAdapter($F("currentMediaRating")) + "-" + $F("currentMediaTotal"),
            {
                method: "post",
                parameters: { "type": "video" },
                onComplete: function() {
                    $("tooltipRating").hide();

                    for(i=1; i<6; i++) {
                        rateId = Rating.STAR_ID_PREFIX + "-" + i;

                        if($(rateId)) {
                            Actions.detach(rateId, "onmouseover");
                            Actions.attach(rateId, "onmouseover", "Rating.setOver", i);

                            Event.observe($(rateId), "mouseover", Rating.observeOver, true);

                            Actions.detach(rateId, "onclick");
                            Actions.attach(rateId, "onclick", "Rating.update", i);
                        }
                        Actions.attach("pollScore", "onmouseout", "Rating.setOut", Tools.localAdapter($F("currentMediaRating")));
                    }
                    Rating.testAlreadyRated();
                }
            }
        );
    },

    setOver: function(ratingValue) {
        $("pollText").update(ratingsLabels[Math.floor(ratingValue)]);

        for(i=1; i<6; i++) {
            rateId = Rating.STAR_ID_PREFIX + "-" + i;

            if(ratingValue < i) {
                if(Tools.localAdapter($F("currentMediaRating")) < i) {
                    $(rateId).src = "/img/stars-med-grey.png";
                } else {
                    $(rateId).src = "/img/stars-med-gold.png";
                }
            } else {
                $(rateId).src = "/img/stars-med-red.png";
            }
        }

        return true;
    },

    ttOver: function(event) {
        var e = Event.element(event);
        Event.observe(e, "mousemove", Rating.ttMove.bindAsEventListener(this), true);
        Rating.ttMove(event);
        $("tooltipRating").show();
    },

    ttMove: function(event) {
        var tooltip = $("tooltipRating");
        var offsets = $("pollScore").cumulativeOffset();
        tooltip.style.left = (Event.pointerX(event) - offsets.left + 18) + "px";
        tooltip.style.top = (Event.pointerY(event) - 45) + "px";
    },

    setOut: function(ratingValue) {
        $("pollText").update(ratingsLabels[Math.floor(Tools.localAdapter($F("currentMediaRating")))]);

        for(i=1; i<6; i++) {
            rateId = Rating.STAR_ID_PREFIX + "-" + i;

            if(ratingValue < i) {
                $(rateId).src = "/img/stars-med-grey.png";
            } else {
                $(rateId).src = "/img/stars-med-gold.png";
            }
        }

        $("tooltipRating").hide();

        return true;
    },

    update: function(ratingValue) {
        new Ajax.Request(
            "/media-addrate/" + $F("mediaId") + "-" + ratingValue,
            {
                method: "get",
                onComplete: function(t, xjson) {
                    if(xjson.alreadyRated) {
                        window.alert("D\xE9sol\xE9, vous avez d\xE9j\xE0 vot\xE9 aujourd'hui !");
                    } else {
                        $("currentMediaRating").value = xjson.rating;
                        $("currentMediaTotal").value = xjson.total;
                        Rating.init();
                    }
                }
            }
        );
        return true;
    },

    testAlreadyRated: function() {
        new Ajax.Request(
            "/media-testalreadyrated/" + $F("mediaId"),
            {
                method: "get",
                onComplete: function(t, xjson) {
                    if(xjson.alreadyRated) {
                        for(i=1; i<6; i++) {
                            rateId = Rating.STAR_ID_PREFIX + "-" + i;
                            Actions.detach(rateId, "onmouseover");
                            Actions.detach(rateId, "onclick");
                            Actions.detach("pollScore", "onmouseout");
                            Event.stopObserving($(rateId), "mouseover", Rating.observeOver, true);
                            $(rateId).style.cursor = "default";
                        }
                    }
                }
            }
        );
    }
};

Rating.observeOver = Rating.ttOver.bindAsEventListener(this);