/*********************
//* jQuery Stars - created by mck: http://www.daesso.com/ | http://www.bomb.pl/
*********************/

(function($) {
	$.fn.Stars = function(options) {
		
		var defaults = {
			limit: 0,
			star_text: 'Your note',
			star_text_hover: 'Set note',
			zero_text: 'No note',
			zero_text_hover: 'Remove note'
		};
		
		var options = $.extend(defaults, options);
		
		return this.each(function()
		{
			var count = 0;
			
			var select = $(this);
			var select_name = select.attr('name');
			var select_value = select.val();
			var opts = select.children('option');
			
			if(opts.length > 0)
			{
				select.hide();
				
				var container = $('<div/>').addClass('rating_stars container').insertAfter(select);
				
				$.each(opts, function(i)
				{
					var opt = $(this);
					var opt_value = opt.val();
					
					var star = $('<a/>').addClass('rating_stars '+(i ? 'star' : 'zero')).attr('rel', i).attr('title', i).appendTo(container);
					
					!i && star.hide();
					opt_value <= select_value && star.addClass('active');
				});
				
				var bubble = $('<div/>').addClass('rating_stars bubble note_bubble').html('<div class="rating_stars bubble_arrow"/>').appendTo(container);
				$('<div/>').addClass('rating_stars bubble_in').html(select_value > 0 ? options.star_text + ': ' + select_value : options.zero_text).appendTo(bubble);
				
				var cancel = $('<div/>').addClass('rating_stars bubble cancel_bubble').html('<div class="rating_stars bubble_arrow"></div>').appendTo(container).hide();
				$('<a/>').addClass('rating_stars bubble_in').html(options.zero_text_hover).appendTo(cancel)
			}
			
			$('.cancel_bubble a.rating_stars').live('click', function() {
				$('a.rating_stars.zero').trigger('click');
			});
			
			$('a.rating_stars.star, a.rating_stars.zero').live('click', function() {
				var item = $(this);
				var value = parseInt(item.attr('rel'));
				
				select.val(value);
				
				var stars = item.siblings('a.rating_stars').andSelf();
				var bubble = item.siblings('.note_bubble').children('.bubble_in');
				var cancel = item.siblings('.cancel_bubble');
				
				stars.removeClass('active').removeClass('selected');
				
				$.each(stars, function(i) {
					var link = $(this);
					if(link.attr('rel') <= value)
					{
						link.addClass('active');
						
						if(link.attr('rel') == value)
						{
							link.addClass('selected');
							bubble.html(value > 0 ? options.star_text + ': ' + value : options.zero_text);
						}
					}
				});
				
				if(value)
				{
					cancel.show();
				}
				else
				{
					cancel.hide();
				}
			});
			
			$('a.rating_stars').hover(function() {
				var item = $(this);
				var stars = item.siblings('a.rating_stars').andSelf();
				var selected = item.parents('.rating_stars.container').find('a.rating_stars.selected');
				var bubble = item.siblings('.note_bubble').children('.bubble_in');
				var value = item.attr('rel');
				var selected_value = selected.attr('rel');
				
				stars.removeClass('hover').removeClass('hover_in');
				
				$.each(stars, function(i) {
					var link = $(this);
					if(link.attr('rel') <= value)
					{
						if(value <= selected_value)
						{
							link.addClass('hover_in');
						}
						else
						{
							link.addClass('hover');
						}
					}
				});
				
				bubble.html(value > 0 ? options.star_text_hover + ': ' + value : options.zero_text_hover);
				
			}, function() {
				var item = $(this);
				var stars = item.siblings('a.rating_stars').andSelf();
				var selected = item.parents('.rating_stars.container').find('a.rating_stars.selected');
				var bubble = item.siblings('.note_bubble').children('.bubble_in');
				var value = selected.attr('rel');
				
				stars.removeClass('hover').removeClass('hover_in');
				
				bubble.html(value > 0 ? options.star_text + ': ' + value : options.zero_text);
				
			});
		});
	}
})(jQuery);
