function rate_over(e){
	var t=$(this);
	t.parents(".myvote").siblings(".voted").width( t.position().left + t.width() );
}
function rate_out(e){
	$(this).parents(".myvote").siblings(".voted").width( 0 );
}
function rate_it(e){
	var t=$(this);
	var r = Math.ceil( t.position().left / t.width() ) + 1;
//	alert( r );
	var ratediv = $(this).parents(".rating");
	ratediv
	.ajaxStart(function(){})
	.ajaxComplete(function(){
		ratediv.find(".rating_wrap").fadeIn("fast");
		ratediv.find(".rating_load").fadeOut("fast");
	});
	
	var ajax_data = {
		url: rate_plugin_path +'plugins/game-ratings/game-ratings-ajaxrate.php?nocache='+Math.random(),
		secureuri: false,
		data:{
			primkey: game_id,
			rating: r
		},
		dataType: 'json',
		beforeSend:function(){},
		complete:function(){},
		success: function(data, status){
			if( typeof(data.error) != 'undefined' ){
				if( data.alert && data.msg )
					alert( data.msg );
				if( data.error ){
					switch( data.error ){
						case 2: // logged in users only
							ratediv.find(".vote")
								.bind( 'click', rate_it )
								.bind( 'mouseover', rate_over )
								.bind( 'mouseout', rate_out )
								.css('cursor','pointer')
								.mouseout();
							if( !data.alert && data.msg )
								ratediv.find(".msg").html( data.msg +"<br />" );
							break;
						case 3: // rated already
							ratediv.find(".myvote").empty().remove();
							ratediv.find(".voted").hide().empty().remove();
							//ratediv.find(".voted").width( ratediv.find(".score").width() );
							if( !data.alert && data.msg )
								ratediv.find(".msg").html( data.msg +"<br />" );
							break;
						default: 
							if( data.alert && !data.msg )
								alert("Unknown error occured, try again later.");
							break;
					}
				}else{
					var width_score = data.score_width;//Math.ceil( ratediv.find(".bg").width() * (data.score / 5) );
					var default_width = parseInt( ratediv.find(".score").css('width') );
					if( !data.alert )
						ratediv.find(".msg").html( data.msg ? data.msg +"<br />" : "Thank you for rating<br />" );
					ratediv.find(".score_text").html( data.score_text );
					ratediv.find(".voters_text").html( data.voters_text );
					switch( data.status ){
						case 2: // success
							ratediv.find(".voted")
									.animate({ width:default_width },500)
									.animate({ width:width_score },1000);
						case 4: // success but not in quota (skip the above)
							ratediv.find(".myvote").empty().remove();
							ratediv.find(".score").remove();
							break;
						case 3: // updated rating
							ratediv.find(".score")
								.animate({ width:default_width },500)
								.animate({ width:width_score },1000);
						case 5: // updated but not in quota (skip the above)
							ratediv.find(".vote")
								.bind( 'click', rate_it )
								.bind( 'mouseover', rate_over )
								.bind( 'mouseout', rate_out )
								.css('cursor','pointer')
								.mouseout();
							break;
						default: break;
					}
				}
			}
		},
		error: function(data, status, e){
			alert( "["+ e['number'] +"] "+ e['message'] +"\n"+ status +"..");
			/*var s='';
			for( i in e ){
				s+= i+" - "+ e[i] +"\n";
			}
			alert( s );*/
			ratediv.find(".vote")
				.bind( 'click', rate_it )
				.bind( 'mouseover', rate_over )
				.bind( 'mouseout', rate_out )
				.css('cursor','pointer')
				.mouseout();
		}
	};
	
	ratediv.find(".rating_wrap").fadeOut("fast",function(){
		ratediv.find(".vote")
			.unbind( 'click', rate_it )
			.unbind( 'mouseover', rate_over )
			.unbind( 'mouseout', rate_out )
			.css('cursor','default');
		ratediv.find(".rating_load").fadeIn("fast",function(){
			$.ajaxCustomPost(ajax_data);
		});
	});
	
}