/*global jQuery */
(function($) {
    $.fn.votingConsole = function(params) {
        params = $.extend({
            vote: null,
            vote_url: null,
            method: null,
            mid: null
        }, params);
        return this.each(function() {
            var votingConsole = $(this);
            var voteFor = null;
            var voteAgainst = null;

            // save the parameters
            votingConsole.data("params", params);
            if(params.vote === null) {
                // draw the voting console
                voteFor = $('<a href="#" class="voteFor"/>').appendTo(votingConsole);
                voteAgainst = $('<a href="#" class="voteAgainst"/>').appendTo(votingConsole);

                // hook up the events
                voteFor.click(function() {
                    var params = $.extend(votingConsole.data("params"), {
                        vote: true
                    });
                    if(params.vote_url !== null && params.user_id !== "" && params.item_id !== "") {
                        params.csrfmiddlewaretoken = CSRF_TOKEN;
                        $.post(params.vote_url, params, function() {
                            votingConsole.trigger("vote", [params]);
                            votingConsole.children().remove();
                            votingConsole.addClass("votedFor");
                        });
                    }
                    return false;
                }).hover(
                    function() {
                        voteAgainst.addClass("inactive");
                    },
                    function() {
                        voteAgainst.removeClass("inactive");
                    }
                );
                voteAgainst.click(function() {
                    var params = $.extend(votingConsole.data("params"), {
                        vote: false
                    });
                    if(params.vote_url !== null && params.user_id !== "" && params.item_id !== "") {
                        params.csrfmiddlewaretoken = CSRF_TOKEN;
                        $.post(params.vote_url, params, function() {
                            votingConsole.trigger("vote", [params]);
                            votingConsole.children().remove();
                            votingConsole.addClass("votedAgainst");
                        });
                    }
                    return false;
                }).hover(
                    function() {
                        voteFor.addClass("inactive");
                    },
                    function() {
                        voteFor.removeClass("inactive");
                    }
                );
            } else {
                if(params.vote === true) {
                    votingConsole.addClass("votedFor");
                } else {
                    votingConsole.addClass("votedAgainst");
                }
            }
        });
    };
})(jQuery);