/**
 * jQuery Ajax Rater Plugin
 */

$.fn.rater = function(url, options)
{
	if(url == null) return;
	var settings = {
		module:		0,    // default module
		id:			0,    // default id
		url:		url,  // post changes to
		maxvalue:	5,    // max number of stars
		curvalue:	0,    // number of selected stars
		onStart:	false,// start request
		onFinish:	false,// finish request
		onData:		false // recieved data from server
	};

	if(options) { $.extend(settings, options); };
	$.extend(settings, {cancel: (settings.maxvalue > 1) ? true : false});

	var container = $(this);
	$.extend(container, { averageRating: settings.curvalue, url: settings.url });

	if(!settings.style || settings.style == null || settings.style == 'basic') {
		var raterwidth = settings.maxvalue * 25;
		var ratingparent = '<ul class="star-rating" style="width:'+raterwidth+'px">';
	}
	if(settings.style == 'small') {
		var raterwidth = settings.maxvalue * 10;
		var ratingparent = '<ul class="star-rating small-star" style="width:'+raterwidth+'px">';
	}
	if(settings.style == 'medium') {
		var raterwidth = settings.maxvalue * 16;
		var ratingparent = '<span class="inline-rating"><ul class="star-rating medium-star" style="width:'+raterwidth+'px">';
	}
	if(settings.style == 'inline') {
		var raterwidth = settings.maxvalue * 10;
		var ratingparent = '<span class="inline-rating"><ul class="star-rating small-star" style="width:'+raterwidth+'px">';
	}
	container.append(ratingparent);

	var starWidth, starIndex, listitems = '';
	var curvalueWidth = Math.floor(100 / settings.maxvalue * settings.curvalue);
	for(var i = 0; i <= settings.maxvalue ; i++) {
		if (i == 0) {
			listitems+='<li class="current-rating" style="width:'+curvalueWidth+'%;">'+settings.curvalue+'/'+settings.maxvalue+'</li>';
		} else {
			starWidth = Math.floor(100 / settings.maxvalue * i);
			starIndex = (settings.maxvalue - i) + 2;
			listitems+='<li class="star"><a href="#'+i+'" title="'+i+'/'+settings.maxvalue +'" style="width:'+starWidth+'%;z-index:'+starIndex+'">'+i+'</a></li>';
		}
	}
	container.find('.star-rating').append(listitems);

	var stars = $(container).find('.star-rating').children('.star');
	stars.click(function()
	{
		settings.curvalue = stars.index(this) + 1;
		var value = $(this).children('a')[0].href.split('#')[1];

		if (settings.onStart) settings.onStart();

		$.ajaxq('queue', {
			type: 'post',
			url: container.url,
			dataType: 'json',
			data:
			{
				module:	settings.module,
				id:		settings.id,
				value:	value
			},
			success: function(data) {
				var result_data = CheckData(data);
				if (data['type'] == 'ok') {					var data = data['data'];
					var curvalueWidth = Math.floor(100 / settings.maxvalue * data.value);
					$(container).find('.star-rating').find('.star').remove();
					$(container).find('.star-rating').find('.current-rating').text(data.value+'/'+settings.maxvalue).css('width',curvalueWidth+'%');
					if (settings.onData) settings.onData(data);
				}
			},
			complete: function() {				if (settings.onFinish) settings.onFinish();			}
		});
		return true;
	});
	return this;
}