(function($){
    // plugin initialization
    $.fn.rating = function(o){
        var rating = this;
        if (rating.length==0) { return rating; }
        
        // Initialize options for this call
        rating.options = $.extend({
            currentRating : 0,
            numberOfStars : 5,
            rateLabels : [
                'Very Poor',
                'Poor',
                'Ok',
                'Good',
                'Very Good'
            ],
            readOnly : false,
            showLabels : true,
            focus : function(){},
            blur : function(){},
            callback : function(){}
        },o);
        
        // Empty Div
        rating.html('');
        
        // Render Stars
        for (var x=0;x<rating.options.numberOfStars;x++) {
            var vote = x+1;
            var title = (rating.options.rateLabels[x]) ? rating.options.rateLabels[x] : "";
            var star = $('<div class="star-rating"><a title="' + title + '">' + vote + '</a></div>');
            
            // Style
            star.find("a").css({
                "background-color":"transparent",
                "background-image":"url("+$.imageUrl("/img/star.gif")+")",
                "background-position":"0 0",
                "background-repeat":"no-repeat"
            
            });
            
            if(rating.options.readOnly) {
                star.addClass('star-rating-readonly');
            } else {
                star.addClass('star-rating-live').mouseover(function(){
                    var e = $(this);
                    e.parent().children().removeClass('star-rating-on').removeClass('star-rating-hover');
                    e.prevAll().andSelf().addClass('star-rating-hover');
                    if (rating.options.showLabels) {
                        rating.children('.star-rating-label').text($(e.children()[0]).attr('title'));
                    }
                    rating.options.focus();
                }).mouseout(function(){
                    var e = $(this);
                    e.parent().children().removeClass('star-rating-hover');
                    rating.children('.star-rating-label').text('');
                    for (var x=0;x<rating.options.currentRating;x++) {
                        $(rating.children()[x]).addClass('star-rating-on');
                        rating.options.blur();
                    } 
                }).click(function(){
                    var e = $(this);
                    e.prevAll().andSelf().addClass('star-rating-on');
                    rating.options.currentRating = $(e.children()[0]).text();
                    rating.children('.star-rating-label').text('');
                    rating.options.callback(rating.options.currentRating);
                });
            }
            
            rating.append(star);
        }
        
        rating.append('<div class="star-rating-label"></div><div class="clearfix"></div>');
        
        // Set Current Rating
        for (var x=0;x<rating.options.currentRating;x++) {
            $(rating.children()[x]).addClass('star-rating-on');
        }
        
        return rating;
    };
    
})(jQuery);