var Rating = function(rating_id, doc_id, url)
{
    jQuery(function(){
        jQuery('#rating'+rating_id).rating(doc_id, url);
    });
};

(function($) {

    var textRating = function(rate){

        var word = '';
        switch(rate){
            case 0:
            case 1:
            case 2:
                word = 'Отстой!';
                break;
            case 3:
            case 4:
            case 5:
                word = 'Так себе!';
                break;
            case 6:
            case 7:
            case 8:
                word = 'Неплохо!';
                break;
            case 9:
            case 10:
                word = 'Круто!';
                break;
        }

        return rate + ' из 10 - ' + word;
    };

    var applyRating = function(url, file_id, rate)
    {
        var self = this;
        var piece = Math.round(parseFloat($('.ratingBg',this).width()) / 10);

        $('.ratingBg', this).unbind().css('cursor','default');
        $('.ratingStat', this).text('Отправка данных...');

        $.post(
            url,
            {task: 'rating', doc_id: file_id, rate: rate},
            function(res){
                if(res.res){
                    $('.ratingStat', self).text('Спасибо, голос учтен!');
                }else{
                    $('.ratingStat', self).text('С такого IP уже проголосовали!');
                }
                $('.ratingRate', self).width(Math.round(res.rate * piece)).removeClass('ratingActive');
                $('.ratingResult', self).text(res.stat);
            },
            "json"
        );
    };

    var initRating = function(doc_id, url)
    {
        this.canRate = true;

        var self = this;
        var piece = Math.round(parseFloat($('.ratingBg',this).width()) / 10);
		var rateOut = false;
        var rate = $('.ratingRate', this).width();
        var rateText = $('.ratingStat', this).text();
        $('.ratingBg', this).css('cursor','pointer').mousemove(function(e){
        	clearTimeout(rateOut);
            var newRate = Math.round( parseFloat( e.pageX - $(this).offset().left ) / piece );
            $('.ratingRate', self).width(newRate * piece).addClass('ratingActive');
            $('.ratingStat', self).text( textRating(newRate) );
        }).mouseout(function(e){
        	clearTimeout(rateOut);
        	rateOut = setTimeout(function(){
	            $('.ratingRate', self).width(rate).removeClass('ratingActive');
	            $('.ratingStat', self).text( rateText );
        	}, 100);
        }).click(function(e){
            applyRating.apply(self, [url, doc_id, Math.round( parseFloat( e.pageX - $(this).offset().left ) / piece )]);
        });
    };

    $.fn.rating = function(doc_id, url){
        return this.each(function() {
             initRating.apply(this, [doc_id, url]);
        });
    };

})(jQuery);
