﻿(function($) {
    $.fn.rating = function(options) {
        options = $.extend({
            url: 'getData',
            onSuccess: null,
            errorText: "An Error Occured"
        }, options || {});

        return this.each(function(i, item) {
            // Append star editing hml
            var ratingRoot = $(item).after('<div class="rating_outer"><div class="rating_inner" ><div class="rating_input" ></div></div></div><span class="ratingDesc">').next(".rating_outer");
            if (ratingRoot.length == 0)
                return;

            var ratingInner = $(ratingRoot).find("div.rating_inner");
            var ratingInput = $(ratingRoot).find("div.rating_input");
            var ratingDesc = $(ratingRoot).next("span.ratingDesc");
               
            var newItem = $("<input type='hidden' id='" + $(item).attr('id') + "' name='" + $(item).attr('name') + "' />").val($(item).val());
            $(item).replaceWith(newItem);
            item = newItem;

            // Set current value
            $(ratingInner).width(24 * $(item).val());
            $(ratingDesc).text(ratingDescription($(item).val()));

            // Hookup event handling
            $(ratingRoot).bind("mousemove", function(e) {
                var rating = Math.round((e.pageX - $(this).offset().left + 12) / 24);
                $(ratingInput).width(24 * rating);
                $(ratingDesc).text(ratingDescription(rating));
            })
            .bind("mouseout", function(e) {
                $(ratingInput).width(0);
                var curRating = $(item).val();
                $(ratingDesc).text(ratingDescription(curRating));
            })
            .bind("click", function(e) {
                var rating = Math.round((e.pageX - $(this).offset().left + 12) / 24);
                $(ratingInner).width(24 * rating);
                $(item).val(rating);
                $(ratingDesc).text(ratingDescription(rating));
            });
        });
    }

    function ratingDescription(rating) {
        var r = parseInt(rating);
        switch (r) {
            case 1:
                return "Poor";
                break;
            case 2:
                return "Below Average";
                break;
            case 3:
                return "Average";
                break;
            case 4:
                return "Good";
                break;
            case 5:
                return "Great";
                break;
        }
    }

})(jQuery);