//copyright 2008 Jarrett Vance
//http://jvance.com
$.fn.rater = function(options) {
	var opts = $.extend({}, $.fn.rater.defaults, options);
	return this.each(function() {
		var $this = $(this);
		var $on = $this.find('.ui-rater-starsOn');
		var $off = $this.find('.ui-rater-starsOff');
		opts.size = $on.height();
		if (opts.rating == undefined) opts.rating = $on.width() / opts.size;
		if (opts.id == undefined) opts.id = $this.attr('id');
		if (opts.type == undefined) opts.type = $this.attr('type');

		$off.mousemove(function(e)
		{
			var left = e.clientX - $off.offset().left;
			var width = $off.width() - ($off.width() - left);
			width = Math.ceil(width / (opts.size / opts.step)) * opts.size / opts.step;
			$on.width(width);
		}).hover(function(e) { $on.addClass('ui-rater-starsHover'); }, function(e) {
			$on.removeClass('ui-rater-starsHover'); $on.width(opts.rating * opts.size);
		}).click(function(e) {
			var r = Math.round($on.width() / $off.width() * (opts.units * opts.step)) / opts.step;
			$off.unbind('click').unbind('mousemove').unbind('mouseenter').unbind('mouseleave');
			$off.css('cursor', 'default'); $on.css('cursor', 'default');
			$.fn.rater.rate($this, opts, r);
		}).css('cursor', 'pointer'); $on.css('cursor', 'pointer');
	});
};

$.fn.rater.defaults =
{
	postHref: location.href,
	units: 5,
	step: 1
};

$.fn.rater.rate = function($this, opts, rating) {
	var $on = $this.find('.ui-rater-starsOn');
	var $off = $this.find('.ui-rater-starsOff');
	
	$off.fadeTo(600, 0.4, function() {
		$.ajax({
			url: opts.postHref,
			type: "POST",
			dataType: "text",
			data: 'id=' + opts.id + '&rating=' + rating + '&type=' + opts.type,
			complete: function(req) {

				var ar = req.responseText.split("|");

				if (req.status == 200) { //success
					opts.rating = parseFloat(ar[1]);
					$off.fadeTo(600, 0.1, function() {
						$on.removeClass('ui-rater-starsHover').width(opts.rating * opts.size);
						var $count = $this.find('.ui-rater-rateCount');
						$count.text(ar[2]);
						$this.find('.ui-rater-rating').text(opts.rating.toFixed(2));
						$off.fadeTo(600, 1);
						$this.attr('title', 'Twoja ocena: ' + rating.toFixed(2));
					});
				} else { //failure
					//alert(req.responseText);
					$on.removeClass('ui-rater-starsHover').width(opts.rating * opts.size);
					$this.rater(opts);
					$off.fadeTo(2200, 1);
				}
				//$this.find('.ui-rater-rating').text(req.responseText);
			}
		});
	});
};

