// 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 div = '<div class="star" title="Give it '+i+' / '+size+'"><a href="#'+i+'">'+i+'</a></div>';
		$(container).append(div);
 	}
	
	$information = "";
	if(settings.totalvotes == 0)
	{
		$information = "<span>Not rated yet.</span>";
	}
	else
	{
		$information = "<span>Rating: "+settings.curvalue+" (based on "+settings.totalvotes+" vote"+ ((settings.totalvotes > 1)?"s":"") +").</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;
							
							$information = "<span>Rating: "+data.curvalue+" (based on "+data.totalvotes+" vote"+ ((data.totalvotes > 1)?"s":"") +").</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(parseInt(100 - ((settings.curvalue/settings.maxvalue)*100) ))+"px 0");
		}
	}        
	
	ev.reset();
	
	return(this);	

}