jQuery.fn.ratings = function(stars, initialRating, isEnabled) {

    var elements = this;
    if (isEnabled == null)
        isEnabled = true;

    return this.each(function() {
        if (!initialRating)
            initialRating = 0;
        var containerElement = this;
        var container = jQuery(this);
        var starsCollection = Array();

        containerElement.rating = initialRating;

        container.css('overflow', 'auto');
        for (var starIdx = 0; starIdx < stars; starIdx++) {
            var starElement = document.createElement('div');
            var star = jQuery(starElement);
            starElement.rating = starIdx + 1;
            star.addClass('jquery-ratings-star');
            if (starIdx < initialRating) {
                star.addClass('jquery-ratings-full');
            }

            container.append(star);
            starsCollection.push(star);

            star.click(function() {
                containerElement.rating = this.rating;
                elements.triggerHandler("ratingchanged", { rating: this.rating });
            });

            if (isEnabled) {
                star.mouseenter(function() {
                    for (var index = 0; index < this.rating; index++) {
                        starsCollection[index].addClass('jquery-ratings-full');
                        starsCollection[index].css('cursor', 'pointer');
                    }
                    for (var index = this.rating; index < stars; index++) {
                        starsCollection[index].removeClass('jquery-ratings-full');
                        starsCollection[index].css('cursor', 'pointer');
                    }
                    elements.triggerHandler("ratingchanging", { rating: this.rating });
                });

                container.mouseleave(function() {
                    for (var index = 0; index < containerElement.rating; index++) {
                        starsCollection[index].addClass('jquery-ratings-full');
                        starsCollection[index].css('cursor', 'pointer');
                    }
                    for (var index = containerElement.rating; index < stars; index++) {
                        starsCollection[index].removeClass('jquery-ratings-full');
                        starsCollection[index].css('cursor', 'pointer');
                    }
                });
            }
        }
    });
};