// JavaScript Document
/*************************************************
Star Rating System
Author: Anand Kulkarni

arguments
url : required -- post changes to 
options
	maxvalue: number of stars
	curvalue: number of selected stars
	
************************************************/

$.fn.rating = function(options) {
	
	var settings = {
		url       : '', // post changes to 
		maxvalue  : 5,   // max number of stars
		curvalue  : 0,    // selected percentage
		starsize  : 20,
		ratingfor : "page",
		uniqueid  : 1,
		allowrating: true
	};
	
	if(options) {
		$.extend(settings, options);
	};
	
	var container = $(this);
	
	
	for(var i= 1; i <= settings.maxvalue ; i++){
		var size = settings.maxvalue;
		var text = "";
		switch(i)
		{
			case 1:
				text = "Very Poor";
				break;
			case 2:
				text = "Poor";
				break;
			case 3:
				text = "Average";
				break;
			case 4:
				text = "Good";
				break;
			case 5:
				text = "Excellent";
				break;
			}
        var div = '<div class="star" title="'+text+'"><a href="#'+i+'">'+i+'</a></div>';
		$(container).append(div);
 	}
	
	var $information = "";
	if(settings.totalvotes == 0)
	{
		$information = "<span style='color:#006699;font-size: 9pt;'>Rate This</span>";
	}
	else
	{
		var responetext = "";
		if(settings.totalvotes == 1) {
			responetext = settings.totalvotes + " vote";
		}
		else {
			responetext = settings.totalvotes + " votes";
			}
		switch(settings.curvalue)
		{
		case 1:
			text = "Very Poor";
			break;
		case 2:
			text = "Poor";
			break;
		case 3:
			text = "Average";
			break;
		case 4:
			text = "Good";
			break;
		case 5:
			text = "Excellent";
			break;
		}
		$information = "<span style='color:#006699;font-size: 9pt;'>"+responetext+"</span>";
	}
	
	$(container).append($information);
	
	
	var stars = $(container).children('.star');
	
    if(settings.allowrating)
	{
		stars
			.mouseover(function(){
				ev.drain();
				ev.fill(this);
			})
			.mouseout(function(){
				ev.drain();
				ev.reset();
			})
			.focus(function(){
				ev.drain();
				ev.fill(this)
			})
			.blur(function(){
				ev.drain();
				ev.reset();
			});
	
		stars.click(function(e){
			e.preventDefault();
			//settings.curvalue = stars.index(this) + 1;
			savecontent = $(container).html();
			
			$selectedRating = $(this).children('a').attr("href").split('#')[1];
			if(settings.url != "")
			{
				$ratingfor = "the"+settings.ratingfor+"id";
				
				//we need this to overcome javascript throwing errors about a malformed propertyid
				var postParams = {};
				postParams[$ratingfor] = settings.uniqueid;
				postParams["rating"] = $selectedRating;
				
				$.post(settings.url,
					postParams,
					function(data)
					{
						if(data.error == 0)
						{
							if(settings.cookiename && settings.domain)
							{
								$.cookie(settings.cookiename, $selectedRating, { expires: 365, path: '/', domain: settings.domain });
								
							}
							settings.allowrating = false;
							stars.unbind().css("cursor","default");
							settings.curvalue = data.curvalue;
							switch(settings.curvalue)
							{
							case 1:
								text = "Very Poor";
								break;
							case 2:
								text = "Poor";
								break;
							case 3:
								text = "Average";
								break;
							case 4:
								text = "Good";
								break;
							case 5:
								text = "Excellent";
								break;
							}
							$information = "<span style='color:#006699;font-size: 9pt;'>Thanks!</span>";
							
							ev.drain();
							ev.reset();
							//$(container).append("<span>Thanks!</span>");
						}
						else
						{
							alert("Sorry, there was an error recording your rating. Please try again.");
						}
					},"json"
				);
			}
		});
	}
	else
	{
		stars.unbind().css("cursor","default");
		//$(container).append("<span>You rated "+$.cookie(settings.cookiename)+" / "+settings.maxvalue+".</span>");
		
	}

    var ev = {
		fill: function(el){ // fill to the current mouse position.
			var index = stars.index(el) + 1;
			$(container).children("span").remove();
			$(container)
				.addClass("hover")
				.css("background-position","-"+(100-(index * settings.starsize))+"px 0")
				.append("<span>"+$(el).attr("title")+"</span>");
		},
		drain: function() { // drain all the stars.
			$(container)
				.removeClass("hover")
				.css("background-position","-100px 0")
				.children("span").remove();
			$(container).append($information);
		},
		reset: function(){ // Reset the stars to the default index.
			$(container).css("background-position","-"+Math.ceil(100 - ((settings.curvalue/settings.maxvalue)*100) )+"px 0");
		}
	}        
	
	ev.reset();
	
	return(this);	

}
