jQuery.fn.stars = function(providedOptions)
{
    var opts = $.extend({}, jQuery.fn.stars.defaults, providedOptions);

    var elements = this;
    function getRank(el)
    {
        el = $(el);

        for (var i = 1; i <= opts.max_stars; ++i)
        {
            if (el.hasClass('rank' + i))
            {
                return i;
            }
        }

        return 0;
    }

    return elements.each(function()
    {
        var me = $(this),
            input = $(this).find('input'),
            stars = $(this).find('div'),
            fix_stars = function(my_idx) {
                for (i = 1; i <= opts.max_stars; ++i)
                {
                    if (i <= my_idx)
                    {
                        me.find('.rank' + i).addClass('selected');
                    }
                    else
                    {
                        me.find('.rank' + i).removeClass('selected');
                    }
                }
            };

        stars
            .hover(function() {
                fix_stars(getRank(this));
            }, function() {
                fix_stars(input.val());
            })
            .click(function() {
                if (opts.onclick)
                {
                    opts.onclick(getRank(this), input);
                }
                else
                {
                    input.val(getRank(this));
                }
            });
        fix_stars(input.val());
    });
};

jQuery.fn.stars.defaults = {
    max_stars: 5
};

