/**
* QRating JQuery Plugin
*
* @autor Igor Staroverov (vdonbasse@pisem.net)
*/

;if(window.jQuery) (function($){
	jQuery.fn.qrating = function(settings) {
		
		var settings = jQuery.extend({
			callback	: function() {},
			max			: 5,
			split		: 1,
			starclass	: 'ratingstar',
			starwidth	: 19,
			disableAfter: true,
			okMessage	: 'Thanks, your vote accepted!', // not implemented
			counter		: '',							 // not implemented
			readOnly	: false
		}, settings);
		
		return this.each(function() {
			var container = jQuery(this);
			
			container.addClass(settings.starclass);
			container.css('width', settings.starwidth * settings.max);
			
			var prev_rating = container.text();
			container.text('');
			
			var active_stars = jQuery('<div class="activestar"></div>').appendTo(container);

			function r2w(rating) {
				return rating * 100 / settings.max + '%';
			}
			
			function w2r(width) {
				return String(prev_rating).replace('px', '') / settings.starwidth;
			}
			
			container.setRating = function(rating, speed) {
				prev_rating = r2w (rating);
				active_stars.animate({'width': prev_rating}, speed);
			}
			
			container.setRating(prev_rating, -1);

			
			active_stars.setW = function(w) {
				this.css('width', container.fromX(w));
			}
			
			active_stars.fixW = function(w) {
				var nw = container.fromX(w);
				this.css('width', nw);
				prev_rating = nw;
			}

			container.fromX = function(x) {
				var width = settings.starwidth / settings.split;
				var w = (x - this.position().left) / width;
				return Math.ceil(w) * width;
			}
			
			if (!settings.readOnly) {
				container.hover(function() {
					active_stars.addClass('hoverstar');
				}, function() {
					active_stars.removeClass('hoverstar');
					active_stars.css('width', prev_rating)
				});
				
				container.mousemove(function(e){
					active_stars.setW(e.pageX);
				});
				
				container.bind("click", function(e){
					if (settings.disableAfter) {
						container.unbind("mouseover")
							.unbind("mouseout")
							.unbind("mousemove")
							.unbind("click")
							.css('cursor', 'default');
					}
					
					active_stars.removeClass('hoverstar');
					active_stars.fixW (e.pageX);
					
					if(settings.callback) settings.callback(container.attr('id'), container.getRating(), container);
				});
			}
			else {
				container.css('cursor', 'default');
			}

			container.getRating = function() {
				return w2r(prev_rating);
			}
		});
	};

})(jQuery);