//
	//
	//
	public void OnChallengeActivated(ChallengeDetail challenge)
	{
		if (!gameObject.activeSelf) return;
		
		RestartGame(challenge.Name, challenge.Distance, challenge.Hat, challenge.FacebookID, challenge.Character);

		Debug.Log (challenge.Name + challenge.Distance + challenge.Hat +  challenge.FacebookID +  challenge.Character);
		print(challenge.Name + challenge.Distance + challenge.Hat +  challenge.FacebookID +  challenge.Character);

		// Hide game end screen
		GameEndScreen.SetActive(false);
		
		// Analytics
		Analytics.gua.sendEventHit("Action", "Start Challenge");
	}
	void OnChallengeActivated(ChallengeDetail challenge)
	{
		if( !gameObject.activeSelf ) return;
		gameObject.SetActive(false);
		
		if (!LevelGenerator.instance.gameObject.activeSelf) {
			transform.parent.FindChild("MainMenu").GetComponent<MainMenuController>().StartGame(challenge.Name, challenge.Distance, challenge.Hat, challenge.FacebookID, challenge.Character);
		}
	}
	//
	//
	//
	void OnChallengeActivated(ChallengeDetail challenge)
	{
		if (!gameObject.activeSelf) return;

		Debug.Log("MainMenuController Challenge: " + challenge.Name + "," + challenge.Hat + "," + challenge.Character);
		StartGame(challenge.Name, challenge.Distance, challenge.Hat, challenge.FacebookID, challenge.Character);

		// Analytics
		Analytics.gua.sendEventHit("Action", "Start Challenge");
	}
	//
	//
	//
	void SimulateChallenges(string[] requestIDs)
	{
		if(mChallenges != null) mChallenges.Clear();
		else mChallenges = new List<ChallengeDetail>();
		
		ChallengeDetail challenge;
		for(int i=0; i<requestIDs.Length; ++i)
		{
			challenge = new ChallengeDetail();
			challenge.ID = requestIDs[i];
			mChallenges.Add (challenge);
		}
		
		if(requestIDs.Length > 0)
		{
			mCurrentChallengeDetail = 0;
			StartCoroutine( OnSimulateFBRequestDetailsResult("f*****t", 33, "ZipiBuzi") );
		}
		
		// Remove unused challenger entries
		if (mChallengerEntries != null)
		{
			while (mChallengerEntries.Count > mChallenges.Count)
			{
				GameObject.Destroy(mChallengerEntries[mChallengerEntries.Count - 1]);
				mChallengerEntries.RemoveAt(mChallengerEntries.Count - 1);
			}
		}
	}
	//
	//
	//
	void AddChallengeEntry(ChallengeDetail detail)
	{
		// Get challenger entry
		GameObject challengeEntry;
		if (mChallengerEntries == null) mChallengerEntries = new List<GameObject>();

		if (mChallengerEntries.Count <= mCurrentChallengeDetail) {
			// Create new challenge entry
			challengeEntry = Instantiate(ChallengerEntryPrefab) as GameObject;
			challengeEntry.transform.parent = mChallengerGrid.transform;
			challengeEntry.GetComponent<UIButton>().onClick.Add(new EventDelegate(OnSelectChallenge));
			mChallengerEntries.Add(challengeEntry);
		}
		else {
			// Reuse challenge entry
			challengeEntry = mChallengerEntries[mCurrentChallengeDetail];
		}
		
		// Set challenge details
		challengeEntry.name = detail.ID;
		Transform transf = challengeEntry.transform;
		transf.FindChild("Name").GetComponent<UILabel>().text = detail.Name;
		transf.FindChild("Distance").GetComponent<UILabel>().text = detail.Distance.ToString("0.00") + " m";


//		//My Change
//		transf.FindChild ("CharecterLabel").GetComponent<UILabel> ().text = detail.Name


		transf.localScale = Vector3.one;
		transf.localPosition = Vector3.zero;
		mChallengerGrid.GetComponent<UIGrid>().Reposition();

		if (mChallengerEntries.Count == 1)
		{
			// Hide "no challenges" label
			Transform uiRoot = GameObject.Find("UI Root").transform;
			Transform noChallengesLbl = uiRoot.transform.FindChild("ChallengeList/PlayerScrollView/NoChallenges");
			noChallengesLbl.gameObject.SetActive(false);
		}
	}
	//
	//
	//
	void CreateChallengeList(string[] requestIDs)
	{
		if(mChallenges != null) mChallenges.Clear();
		else mChallenges = new List<ChallengeDetail>();

		ChallengeDetail challenge;
		for(int i=0; i<requestIDs.Length; ++i)
		{
			challenge = new ChallengeDetail();
			challenge.ID = requestIDs[i];
			mChallenges.Add (challenge);
		}

		if(requestIDs.Length > 0)
		{
			mCurrentChallengeDetail = 0;
			FB.API("/" + requestIDs[0], Facebook.HttpMethod.GET, OnFBRequestDetailsResult);
		}

		// Remove unused challenger entries
		if (mChallengerEntries != null) {
			while (mChallengerEntries.Count > mChallenges.Count) {
				GameObject.Destroy(mChallengerEntries[mChallengerEntries.Count - 1]);
				mChallengerEntries.RemoveAt(mChallengerEntries.Count - 1);
			}
		}
	}
	void OnRetrieveFBRequestsResult(FBResult result)
	{
		if (result.Error == null && result.Text != null && result.Text.Length > 0)
		{
			Debug.Log("Retrieve FB requests result: " + result.Text);

			Dictionary<string, object> responseObject = Facebook.MiniJSON.Json.Deserialize(result.Text) as Dictionary<string, object>;
			List<object> requests = responseObject["data"] as List<object>;

			if (requests.Count > 0) {

				Dictionary<string, object> request;
				Dictionary<string, object> from;

				// Challenge grid
				Transform uiRoot = GameObject.Find("UI Root").transform;
				if (mChallengerGrid == null) {
					mChallengerGrid = uiRoot.Find("ChallengeList/PlayerScrollView/ChallengerGrid").GetComponent<UIGrid>();
				}

				// Challenge list
				if(mChallenges != null) mChallenges.Clear();
				else mChallenges = new List<ChallengeDetail>();

				Debug.Log ("Retrieve FB requests count: " + requests.Count);
				mCurrentChallengeDetail = 0;

				for(int i=0; i<requests.Count; ++i)
				{
					request = requests[i] as Dictionary<string, object>;

					Debug.Log("Retrieve FB requests " + i.ToString() + ": " + requests[i]);

					from = request["from"] as Dictionary<string, object>;
					
					// Name
					ChallengeDetail challenge = new ChallengeDetail();
					challenge.ID = request["id"].ToString();
					challenge.Name = from["name"].ToString();
					challenge.FacebookID = from["id"].ToString();

					
					// Distance and hat
					string[] parameters = request["data"].ToString().Split(","[0]);
					challenge.Distance = float.Parse(parameters[0]);
					//challenge.Hat = parameters[1];
					challenge.Character = parameters[1];




					mChallenges.Add(challenge);

					Debug.Log(challenge.Name + "," + challenge.Distance + "," + challenge.Hat + "," + challenge.FacebookID);
					
					AddChallengeEntry(challenge);
					++mCurrentChallengeDetail;
				}

				UpdateChallengeExclamationMark();
			}
		}
		else
		{
			if (result.Error != null) Debug.LogError("Retrieve FB Requests Error: " + result.Error);
		}
	}