/**
 * for jQuery
 *
 * @author		zhoufan <happyeddie@gmail.com>
 * @website		http://www.raychou.com/demo/jquery-rater/
 * @version		1.0
 * @charset		UTF-8
 * @license		2009 raychou.com
 */

jQuery.fn.rater = function(url, options , callback)
{
	// 
	var settings = {
		url			: url ,
		start		: 1 ,
		step		: 1 ,
		maxvalue	: 5 ,
		curvalue	: 0 ,
		//title		: null ,
		enabled		: true
	};
	
	if(options) { jQuery.extend(settings, options); };
	jQuery.extend(settings, {cancel: (settings.maxvalue > 1) ? true : false});
	
	var container = jQuery(this);
	jQuery.extend(container, { averageRating: settings.curvalue, url: settings.url });

	var starWidth	= 13;
	var raterWidth	= (settings.maxvalue - settings.start + settings.step)/settings.step * starWidth;
	var curvalueWidth	= (settings.curvalue - settings.start + settings.step)/settings.step * starWidth;
	
	var title	= '';
	if (typeof settings.title == 'object' && typeof settings.title[settings.curvalue] == 'string') {
		title	= settings.title[settings.curvalue];
	} else {
		title	= settings.curvalue+'/'+settings.maxvalue;
	}
	
	var ratingParent	= '<ul class="rating" style="width:'+raterWidth+'px" title="'+title+'">';
	container.html(ratingParent);
	
	var listItems	= '<li class="current" style="width:'+curvalueWidth+'px"></li>';
	
	if (settings.enabled){
		var k = 0;
		for (var i = settings.start;i <= settings.maxvalue;i = i + settings.step) {
			k++;
			if (typeof settings.title == 'object' && typeof settings.title[i] == 'string') {
				title	= settings.title[i];
			} else {
				//title	= i+'/'+settings.maxvalue;
				title	= i;
			}
			
			listItems	+= '<li class="star" style="width:'+(k * starWidth)+'px;z-index:'+((settings.maxvalue - i)  / settings.step + 1)+'" title="'+title+'"></li>';
			
		}
	}
	//alert(listItems);
	container.find('.rating').html(listItems);
	container.find('.rating').find('.star').hover(function() {
		container.find('.rating').find('.current').hide();
		this.className	= 'star_hover';
	} , function() {
		container.find('.rating').find('.current').show();
		this.className	= 'star';
	});
	
	container.find('.rating').find('.star').click(function() {
		// z-index star
		var value	= settings.maxvalue - $(this).css('z-index') + 1;
		//var value	= $(this).attr('title');
		container.find('.rating').find('.current').width((value - settings.start + settings.step)/settings.step * starWidth);
		
		if (url) {
			$.post(url , {value:value} , function(response) {
				if (typeof callback == 'function') {
					callback(container , value , response);	
				}
			});
			return;
		}
		
		if (typeof callback == 'function') {
			callback(container , value);
			return ;
		}
		
	});
}
