var jokeRated = false;
var commRated = false;

function fillStar(star) {
    star.src = star.src.replace("empty", "full");
}

function clearStar(star) {
    star.src = star.src.replace("full", "empty");
}

function fillRatingStars(event) {
    if (jokeRated == false) {
        // get the star the mouse was moved over
        var target = window.event ? window.event.srcElement : event.target;
        // get the star container
        var container = target.parentNode.parentNode;
        container.resetRequired = false;
        // get the array of all stars
        var stars = container.getElementsByTagName("img");
        
        // iterate over the array of stars
        for (var i = 0; i < stars.length; i++) {
            var star = stars[i];
            fillStar(star);
            if (star == target) {
                break;
            }
        }
        
        for (i++; i < stars.length; i++) {
            var star = stars[i];
            clearStar(star);
        }
    }
}

function resetRatingStars(event) {
    if (jokeRated == false) {
        // get the star the mouse was moved over
        var target = window.event ? window.event.srcElement : event.target;
        var container = target.parentNode.parentNode;
        container.resetRequired = true;
        setTimeout(function() {
            if (container.resetRequired) {
                var rating = Math.round(parseFloat(container.className));
                var stars = container.getElementsByTagName("img");
                
                // clear all stars
                for (var i = 0; i < stars.length; i++) {
                    clearStar(stars[i]);
                }
                
                for (var i = 0; i < rating; i++) {
                    fillStar(stars[i]);
                }
            }
            container.resetRequired = false;
        }, 500);
    }
}

function rateJoke(event, jokeId, rating) {
    if (jokeRated == false) {
        var target = window.event ? window.event.srcElement : event.target;
        var failureMessage = "Joks netika novērtēts";
        
        new Ajax.Request("/ass/rating/joke", {
            method      :   "post",
            parameters  :   {
                id      :   jokeId,
                rating  :   rating
            },
            onFailure   :   function(request) {
                alert(failureMessage);
            },
            onSuccess   :   function(request) {
                var response = request.responseText.evalJSON();
                if (response.status) {
                    var container = target.parentNode.parentNode;
                    container.className = response.rating;
                    resetRatingStars(event);
                } else {
                    alert(failureMessage);
                }
            }   
        });
        jokeRated = true;
        document.getElementById('rating_table').className = 'rated';
    }
}

function rateComment(event, commentId, rating) {
    if (commRated == false) {
        var target = window.event ? window.event.srcElement : event.target;
        var failureMessage = "Komentārs netika novērtēts";
        
        new Ajax.Request("/ass/rating/comment", {
            method      :   "post",
            parameters  :   {
                id      :   commentId,
                rating  :   rating
            },
            onFailure   :   function(request) {
                alert(failureMessage);
            },
            onSuccess   :   function(request) {
                var response = request.responseText.evalJSON();
                var rating = parseInt(response.rating);
                var ratingContainer = target.parentNode.parentNode.getElementsByTagName("span")[0];
                ratingContainer.innerHTML = rating > 0 ? "+" + rating : rating;
            }
        });
        commRated = true;
        document.getElementById('rating_div').className = 'rated';
    }
}