﻿jQuery.fn.rating = function(url, options) {
var rated = false;
var settings = {maxvalue:5,curvalue:0, targetid:0, me:'rating', allowrate:1};
if(options) {jQuery.extend(settings, options);};
var container = jQuery(this);jQuery.extend(container, {averageRating: settings.curvalue,url: settings.url, targetid:settings.targetid, me:settings.me, allowrate:settings.allowrate});
for(var i=1; i <= settings.maxvalue ; i++){var size = i;var div = '<div class="star"><a href="#'+i+'">'+i+'</a></div>';container.append(div);}

var desdefault = getText(settings.curvalue);
$('#' + settings.me + '_rate_desc').html(desdefault);

var stars = jQuery(container).children('.star');
//if (settings.allowrate) { 
    stars
	        .mouseover(function(){event.drain();event.fill(this);
	        $('#' + settings.me + '_rate_desc').html(getText(stars.index(this) + 1));})
            .mouseout(function(){event.drain();event.reset();$('#' + settings.me + '_rate_desc').html(desdefault);})
            .focus(function(){event.drain();event.fill(this)})
            .blur(function(){event.drain();event.reset();});
    stars.click(function(){settings.curvalue = stars.index(this) + 1;
    //Save rating    
    $.getIfModified("/ajaxserver/setrating.aspx", { tid: settings.targetid, r:settings.curvalue}, function(data){
    if (data == "ok") {$('#' + settings.me + '_rate_desc').html("Спасибо!");
    event.reset();
    jQuery(container).children('.star').unbind();
    } 
    else {$('#' + settings.me + '_rate_desc').html("Спасибо!");
    event.reset();
    jQuery(container).children('.star').unbind();
    }});
    return true;});
//}
//
var event = {
		fill: function(el){ 
			var index = stars.index(el) + 1;
			stars
				.children('a').css('width', '100%').end()
				.lt(index).addClass('hover').end();
		},
		drain: function() { // drain all the stars.
			stars
				.filter('.on').removeClass('on').end()
				.filter('.hover').removeClass('hover').end();
		},
		reset: function(){ // Reset the stars to the default index.
			  var currentvalue = roundTowardsZero(settings.curvalue);stars.lt(currentvalue).addClass('on').end();
			  var percent = (settings.curvalue % 1) * 100;
              stars.eq(currentvalue).addClass('on').children('a').css('width', percent + "%").end().end()
		}
	}  
    
	event.reset();
	
	return(this);	
}
function roundTowardsZero(X) { return (X<0?-1:+1)*Math.floor(Math.abs(X)) }
function getText(i) {var result = "";switch (i) {case 0: result="Ваша оценка?";break; case 1: result = "Плохо"; break;case 2: result = "Не плохо"; break;case 3: result = "Хорошо"; break;case 4: result = "Очень хорошо"; break;case 5: result = "Отлично!"; break;}return result;}
