jQuery.fn.nratingStars=function(options)
	{
	var settings=$.extend(
		{
		siteId:0,bgimage:"img/rs.png",width:105,height:20,stepX:21,stepY:20,gameId:0,starsCount:5,rating:0,readOnly:false,cookieLifetime:365,cookiePath:"/",labelplace:"bottom",attachTails:false,username:"",hash:"",order:0,pagesize:1,pagenr:1,outputtype:"xml",timeout:10000,labels:true,langstrings:
			{
		}
		,rtl:false
	}
	,options);
	settings.langstrings=$.extend(
		{
		thank_you:"Thank you",rating:"Rating",label_processing:"",label_default:"",star:["It's awful","Don't like it","It's OK?","Good game","One of the best"]
	}
	,options.langstrings);
	var layer_id="";
	var cName="__spiNstars";
	var savedRating=0;
	var rating=Math.ceil(parseInt(settings.rating));
	var startPos=parseInt(settings.stepY*rating)*(-1);
	var cookieData=[];
	var cookie=null;
	var handleError=function()
		{
		logRating=parseInt(this.rating)*2;
		$.post("/logs/ajaxLog",
			{
			"filename":"rating","message":"rating: "+logRating+", gid: "+settings.gameId
		}
		);
		handleVote()
	};
	var initCookieData=function()
		{
		cookie=$.cookie(cName)||null;
		if(cookie!=null)
			{
			cookieData=cookie.split(".")
		}
	};
	var notSaved=function(id)
		{
		initCookieData();
		for(i=0;
		i<cookieData.length;
		i++)
			{
			var temp=cookieData[i].split(":");
			if(parseInt(temp[0])==id)
				{
				savedRating=parseInt(temp[1]);
				return false
			}
		}
		return true
	};
	var canSaveCookie=function(data)
		{
		initCookieData();
		return(cookie==null||notSaved(data.gameId))?true:false
	};
	var saveCookie=function(data)
		{
		initCookieData();
		if(cookie==null||notSaved(data.gameId))
			{
			cookieData.push(data.gameId+":"+data.rating);
			$.cookie(cName,cookieData.join("."),
				{
				expires:settings.cookieLifetime,path:settings.cookiePath
			}
			);
			return true
		}
		return false
	};
	var handleVote=function(data,mesg)
		{
		$("li",$("div#"+layer_id)).unbind().parent().css("cursor","default");
		saveCookie(
			{
			gameId:settings.gameId,rating:this.rating
		}
		);
		showVoted(parseInt(this.rating))
	};
	function str_repeat(i,m)
		{
		for(var o=[];
		m>0;
		o[--m]=i)
			{
		}
		return(o.join(""))
	}
	var showLabel=function(rating)
		{
		if(settings.labels===true)
			{
			$("div#nlabel_"+layer_id).html(eval("settings.langstrings.label_"+rating))
		}
	};
	var hideLabel=function(rating)
		{
		if(settings.labels===true)
			{
			$("div#nlabel_"+layer_id).html(settings.langstrings.label_default)
		}
	};
	var showBeforeSendLabel=function()
		{
	};
	var showVoted=function(rating)
		{
		if(settings.labels===true&&settings.readOnly===false)
			{
			$("div#nlabel_"+layer_id).html(settings.langstrings.thank_you)
		}
	};
	var postRating=function(rating)
		{
				
		if(canSaveCookie({gameId:settings.gameId,rating:rating})==true)
			{
			
			
			$.ajax(
				{
				type:"POST",url:"rating.php",data:
					{
					id:settings.gameId,rating:parseInt(rating*2)
				}
				,success:handleVote,error:handleError,dataType:"xml",timeout:settings.timeout,async:true,cache:false,global:false,beforeSend:showBeforeSendLabel,rating:rating,gameId:settings.gameId
			}
			)
		}
	};
	initCookieData();
	return this.each(function()
		{
		var me=$(this);
		layer_id=$(me).attr("id");
		var to=null;
		if(settings.rtl)settings.bgimage=settings.bgimage.replace(".","_rtl.");
		$(this).css(
			{
			width:settings.width+"px",height:settings.height+"px","background-image":"url("+settings.bgimage+")","background-repeat":"no-repeat","background-position":"0px "+startPos+"px",overflow:"hidden",cursor:"pointer"
		}
		);
		$(this).after('<div id="nlabel_'+layer_id+'"></div>');
		if(notSaved(settings.gameId)===false)
			{
			settings.readOnly=true;
			$("div#title_"+layer_id).html(settings.langstrings.rating)
		}
		$(this).append("<ul></ul>");
		for(iter=1;
		iter<=settings.starsCount;
		iter++)
			{
			var i=iter;
			if(settings.rtl)
				{
				i=settings.starsCount-iter+1
			}
			$("ul",this).append('<li title="'+settings.langstrings.star[i-1]+'" alt="'+settings.langstrings.star[i-1]+'" id="li_'+i+'">'+i+"</li>").css(
				{
				padding:"0px",margin:"0px"
			}
			)
		}
		$("li",this).css(
			{
			display:"block",width:settings.stepX+"px",height:settings.stepY+"px","float":"left","font-size":"1px","text-indent":"-888px"
		}
		);
		if(settings.readOnly===true)
			{
			$(this).css(
				{
				cursor:"default"
			}
			);
			return
		}
		var noclear=false;
		var resetStars=function()
			{
			if(noclear!==true)
				{
				if(to>0&&to!=null)
					{
					$(me).css("background-position","0px "+startPos+"px");
					$("div#nrating_tails").css("background-position","0px 0px");
					hideLabel()
				}
			}
		};
		$("li",this).mouseover(function()
			{
			clearTimeout(to);
			to=null;
			var c=parseInt($(this).attr("id").replace(/^li_/,""));
			$(me).css("background-position","0px -"+((c)*2*settings.stepY)+"px");
			$("div#nrating_tails").css("background-position","0px -"+((c)*9)+"px");
			showLabel(c)
		}
		).mouseout(function()
			{
			to=setTimeout(resetStars,50)
		}
		).click(function()
			{
			noclear=true;
			clearTimeout(to);
			initCookieData();
			var c=parseInt($(this).attr("id").replace(/^li_/,""));
			postRating(c)
		}
		)
	}
	)
};
jQuery.cookie=function(b,j,m)
	{
	if(typeof j!="undefined")
		{
		m=m||
			{
		};
		if(j===null)
			{
			j="";
			m.expires=-1
		}
		var e="";
		if(m.expires&&(typeof m.expires=="number"||m.expires.toUTCString))
			{
			var f;
			if(typeof m.expires=="number")
				{
				f=new Date();
				f.setTime(f.getTime()+(m.expires*24*60*60*1000))
			}
			else
				{
				f=m.expires
			}
			e=";expires="+f.toUTCString();
		}
		var l=m.path?";path="+(m.path):"";
		var g=m.domain?";domain="+(m.domain):"";
		var a=m.secure?";secure":"";
		document.cookie=[b,"=",encodeURIComponent(j),e,l,g,a].join("")
	}
	else
		{
		var d=null;
		if(document.cookie&&document.cookie!="")
			{
			var k=document.cookie.split(";");
			for(var h=0;
			h<k.length;
			h++)
				{
				var c=jQuery.trim(k[h]);
				if(c.substring(0,b.length+1)==(b+"="))
					{
					d=decodeURIComponent(c.substring(b.length+1));
					break
				}
			}
		}
		return d
	}
};
