function CStats(parent)
{
	this.parent = parent;
	
	this.reqs = new CReqs(this);
	
	this.score = 0;
	this.level = 1;
	
	this.data = null;
	
	this.pendingStatsScore = null;
	
	this.savePendingScore = function()
	{
		var msg = this.pendingStatsScore;
		//while(var msg = this.pendingStatsScore.pop())
		{
			this.reqs.post("stats.save", '{"type":"'+msg.type+'", "maze":"'+this.parent.maze.mazeId+'", "data":"'+msg.data+'"}', "statsSave", null);
			this.pendingStatsScore = null;
		}
	}
	
	this.getScore = function()
	{
		return addCommas(this.score.toString());
	}
	
	this.updateScore = function(data)
	{		
		this.score += data;
		mE("user-score").content(addCommas(this.score.toString()));
		
		this.updateLevel(this.score);
	}
	
	this.getLevel = function()
	{
		return this.level;
	}
	
	this.updateLevel = function(score)
	{
		//update his level
		var level = Math.floor(score / 50000) + 1;
		
		if(level > 20)
			level = 20;
			
		this.level = level;
		
		mE("user-level").content(this.level);
	}
	
	/*
	this.getFriends = function(uids)
	{
		game.fb.loadFriendDetails(uids.join(" OR "), function(data){ game.stats.getFriendsCallback(data); });
	}
	*/
	
	this.getUsersCallback = function(data)
	{
		for(var i in data)
		{
			for(var j in this.data.leaderboard)
			{
				if(this.data.leaderboard[j].fbid == data[i].uid)
				{
					this.data.leaderboard[j].last_name = data[i].last_name;
					break;
				}
			}			
		}
		
		this.renderGlobal();
	}
	
	this.getFriendsCallback = function(data)
	{
		for(var i in data)
		{			
			for(var j in this.data.fbLeaderboard)
			{
				if(this.data.fbLeaderboard[j].fbid == data[i].uid)
				{
					this.data.fbLeaderboard[j].name = data[i].name;
					break;
				}
			}
		}
		
		this.renderFriends();
	}
	
	this.save = function(msg)
	{
		if(msg.type == "statsScore")
		{
			this.updateScore(parseInt(msg.data));
			
			if(this.parent.maze.mazeId == null)
			{
				//this.pendingScore.push(msg);
				this.pendingStatsScore = msg;
			}
		}
		
		if(this.parent.maze.mazeId != null)
			this.reqs.post("stats.save", '{"type":"'+msg.type+'", "maze":"'+this.parent.maze.mazeId+'", "data":"'+msg.data+'"}', "statsSave", null);
	}
	
	this.load = function()
	{
		mE("friends-leaderboard-container,global-leaderboard-container").hide();
		
		this.parent.showLoader();
		
		this.reqs.get("stats.leaderboard", "leaderboard", null);
	}
	
	this.requestCallback = function(type, data)
	{		
		switch(type)
		{
			case "statsSave":
			break;
			
			case "leaderboard":				
				if(data == null)
					return;
				
				game.stats.data = data;
													
				var fuids = new Array();
				for(var i = 0; i < data.leaderboard.length; i++)
					fuids.push("uid="+data.leaderboard[i].fbid);
					
				game.fb.loadUserDetails(fuids.join(" OR "), function(data){ game.stats.getUsersCallback(data); });
				
				if(this.parent.userAuth != 0 && this.parent.authService != null && this.parent.authService.name == "fb")
				{
					var uids = new Array();
					if(data.fbLeaderboard != null)
					{
						for(var i = 0; i < data.fbLeaderboard.length; i++)
							uids.push("uid="+data.fbLeaderboard[i].fbid);
					}
					
					game.fb.loadFriendDetails(uids.join(" OR "), function(data){ game.stats.getFriendsCallback(data); });
				}
			break;
		}
	}
	
	this.renderFriends = function()
	{
		mE("friends-leaderboard-container").show();
		
		var leaderboard = this.data.fbLeaderboard;
		
		var content = "";
		
		var me = FB.Connect.get_loggedInUser();
		
		if(leaderboard && leaderboard.length)
		{
			content += "<table>";
			content += "<tr class=\"header\"><td class=\"position\">Position</td><td class=\"name\">Name</td><td class=\"score\">Score</td></tr>";	
			
			for(var i = 0; i < leaderboard.length; i++)
			{
				var style = "";
				switch(i)
				{
					case 0:
						style = "first";
					break;
					
					case 1:
						style = "second";
					break;
					
					case 2:
						style = "third";
					break;
				}
				
				//content += "<tr class=\""+style+"\"><td class=\"position\">"+(i + 1)+"</td><td><img src=\""+this.data[i].pic_square+"\" alt=\""+this.data[i].name+"\" /></td><td>"+this.data[i].name+"</td><td class=\"score\">"+this.data[i].score+"</td></tr>";
				if(game.authService && game.fb.connected != 0 && leaderboard[i].fbid != me)
					content += "<tr class=\""+style+"\"><td class=\"position\">"+(i + 1)+"</td><td><a href=\"javascript:game.fb.target.selectFriend("+leaderboard[i].fbid+", '"+leaderboard[i].name.replace("'", "\\'")+"')\">"+leaderboard[i].name+"</a></td><td class=\"score\">"+addCommas(leaderboard[i].score)+"</td></tr>";
				else
					content += "<tr class=\""+style+"\"><td class=\"position\">"+(i + 1)+"</td><td>"+leaderboard[i].name+"</td><td class=\"score\">"+addCommas(leaderboard[i].score)+"</td></tr>";
			}
			
			content += "</table>";
		}
		
		gE("friends-leaderboard").innerHTML = content;
		this.parent.hideLoader();
	}
	
	this.renderGlobal = function()
	{
		mE("global-leaderboard-container").show();
		
		var leaderboard = this.data.leaderboard;
		
		var content = "";
		
		var me = FB.Connect.get_loggedInUser();
		
		if(leaderboard.length)
		{
			content += "<table>";
			content += "<tr class=\"header\"><td class=\"position\">Position</td><td class=\"name\">Name</td><td class=\"score\">Score</td></tr>";	
			
			for(var i = 0; i < leaderboard.length; i++)
			{
				var style = "";
				switch(i)
				{
					case 0:
						style = "first";
					break;
					
					case 1:
						style = "second";
					break;
					
					case 2:
						style = "third";
					break;
				}
				
				//content += "<tr class=\""+style+"\"><td class=\"position\">"+(i + 1)+"</td><td><img src=\""+this.data[i].pic_square+"\" alt=\""+this.data[i].name+"\" /></td><td>"+this.data[i].name+"</td><td class=\"score\">"+this.data[i].score+"</td></tr>";
				if(game.authService && game.fb.connected != 0 && leaderboard[i].fbid != me)
					content += "<tr class=\""+style+"\"><td class=\"position\">"+(i + 1)+"</td><td><a href=\"javascript:game.fb.target.selectFriend("+leaderboard[i].fbid+", '"+leaderboard[i].last_name.replace("'", "\\'")+"')\">"+leaderboard[i].last_name+"</a></td><td class=\"score\">"+addCommas(leaderboard[i].score)+"</td></tr>";
				else
					content += "<tr class=\""+style+"\"><td class=\"position\">"+leaderboard[i].position+"</td><td>"+leaderboard[i].last_name+"</td><td class=\"score\">"+addCommas(leaderboard[i].score)+"</td></tr>";
			}
			
			content += "</table>";
		}
		
		gE("global-leaderboard").innerHTML = content;
		this.parent.hideLoader();
	}
	
	this.render = function()
	{
		this.parent.hideLoader();

		this.renderGlobal();
	}
	
	this.show = function(){	this.load(); gE("stats").style.display = "block"; }
	this.hide = function(){	gE("stats").style.display = "none"; }
}

