// writed by trang.le

(function($){
	$.fn.rate = function(settings) {
		var rateOpts = {};
		rateOpts.settings = $.extend({}, $.fn.rate.defaults, settings);
		$(this).each(function(){
			
			for(var i = 0; i < rateOpts.settings.numberOfStars ;i++)
			{
				var node = $(this).children(":nth-child(" + (i +1) + ")");
				node.children(":first").attr("href", i+1)
				var characterTitle = " stars";
				if(rateOpts.settings.startValue==1){ characterTitle = " star"; }
				
				if(!rateOpts.settings.enable)
				{
				    if(rateOpts.settings.startValue > 0)
			            node.children(":first").attr("title", "Rated " +  rateOpts.settings.startValue + characterTitle )
			        else
			            node.children(":first").attr("title", "Not yet rated");
			    }
			            
				if(i < rateOpts.settings.startValue) { 
    		        node.addClass("Active"); 
				}
			}
			
			if(rateOpts.settings.enable)
			{			
				$(this).children().hover(
				function(){
					var currentValue = $(this).children(":first").attr("href");
					var value = parseInt(currentValue);
					for(var i = 0; i < rateOpts.settings.numberOfStars ;i++)
					{
						var node =$(this).parent().children(":nth-child(" + (i +1) + ")");
						if(i < value) { node.addClass("Active"); }
						else { node.removeClass("Active"); }
					}
					
				} ,
				function(){
					for(var i = 0; i < rateOpts.settings.numberOfStars ;i++)
					{
						var node =$(this).parent().children(":nth-child(" + (i +1) + ")");
						if(i <  rateOpts.settings.startValue) { node.addClass("Active"); }
						else {node.removeClass("Active"); }
					}
				});
				
				if(rateOpts.settings.onClickCallback != null && rateOpts.settings.onClickCallback != "undefined")
				{
					$(this).children().each(function(){ 
					    //alert($(this).children(":first").html());
						$(this).bind("click", function(){
							if(jQuery.isFunction(rateOpts.settings.onClickCallback))
							{
								var rateValue = $(this).children(":first").attr("href");
								rateOpts.settings.onClickCallback.call(this, rateValue, rateOpts.settings.externalData);
							}
							return false;
						});
					
					});
				}
			}
			else
			{
				    
			    $(this).children().unbind('mouseover');
			    $(this).children().unbind('mouseout');
			    $(this).children().unbind('mouseleave');
			    $(this).children().unbind('mouseenter');
				
			    $(this).children().each(function(){ 
			            $(this).children(":first").css("cursor","default");
					    $(this).children(":first").unbind("click").bind("click", function(){
					        return false;
					    });
				    });
			    
			}
			
		});
	};
	
	$.fn.rate.getValue = function()
	{
		var rateValue = 0;
		$(this).each(function(){
			if($(this).attr("class") == "Active")
			{
				rateValue++ ;
			}
		});
		
		return rateValue;
	}

	$.fn.rate.defaults = {
		numberOfStars : 5,
		startValue: 0,
		onClickCallback: null,		
		enable : true,
		externalData : null
	};
})(jQuery);