$(document).ready(function() {
	$('.ratingPlugin').each(function(){ new launchRating($(this)); });
});

function launchRating(obj) {
	var classRef = this;

	obj.find(".stars li").click(function() {
		var bLink = $(this);
		var bParent = bLink.parents('.ratingWrap');
		if (!bParent.find('.ratingPlugin_rating_user')[0]) {
			ratingMessage(obj, "Sorry, only registered members may vote.");
			return false;
		}

		$.post('index.php?guimode=ajax&plugin=Rating&action=rate&task=rateit', {
			item_type: bParent.find('.ratingPlugin_rating_item_type').val(),
			item_id: bParent.find('.ratingPlugin_rating_item_id').val(),
			num_ratings: bParent.find('.ratingPlugin_num_ratings').val(),
			rating_total: bParent.find('.ratingPlugin_rating_total').val(),
			rating: bLink.html()
		}, function(res) {
			if (!res.error) {
				obj.find('.currentrating').html(res.rating);
				obj.find('.numratings').html(res.num_ratings);
				if (res.num_ratings == 1)
					obj.find('.ratingstext').removeClass('plural');
				else
					obj.find('.ratingstext').addClass('plural');

				bParent.find('li').removeClass('hover').removeClass('active');
				bParent.find('li:lt('+ Math.ceil(res.rating) +')').addClass('active');
				bParent.removeClass('starsOut');

				ratingMessage(obj, "Thank you for your vote!", " Rating: " + res.rating);
			} else switch (res.error) {
				case 'duplicate': ratingMessage(obj, "Sorry, you may only vote this once per month."); break;
				case 'anon': ratingMessage(obj, "Sorry, only registered members may vote."); break;
			}
		}, "json");

		return false;
	});

	obj.find(".stars li").hover(
		function() {
			var bLink = $(this);
			var bParent = bLink.parent();

			var rate = parseInt(bLink.html());

		    bParent.find('li').removeClass('hover');
			bParent.find('li:lt('+ rate +')').addClass('hover');
			bParent.removeClass('starsOut');
		},
		function() {
			var bLink = $(this);
			var bParent = bLink.parent('.stars');
			bParent.addClass('starsOut');
			bLink.removeClass('hover');
		}
	);

	return this;
}

function ratingMessage(obj, text, alertOnly) {
	if (obj.find('.inforating').is(':visible'))
		obj.find('.ratingsajax').html(text);
	else
		alert(text + (typeof alertOnly != 'undefined' ? alertOnly : ''));
}
