public frmGameDetails(Game gGame, String sGamerTag)
        {
            InitializeComponent();

            this.gGame = gGame;
            this.sGamerTag = sGamerTag;

            this.Shown += frmGameDetails_Shown;
        }
        /// <summary>
        /// Downloads the game data for a the specified gamer tag.
        /// </summary>
        /// <param name="sGamerTag">The gamer tag to download game data for.</param>
        /// <returns>Returns a <seealso cref="XboxLeadersNETWrapper.Games">Games</seealso> object.</returns>
        /// <example>XboxLeadersNETWrapper.Games gGames = XboxLeadersNETWrapper.DownloadGameData("Major Nelson");</example>
        public static Games DownloadGameData(String sGamerTag)
        {
            WebClient wcDownloader = new WebClient();
            Games gDownloadedGames = new Games();
            XmlDocument xGames = new XmlDocument();
            XmlReader xReader;
            XElement xJSONRoot;
            Byte[] bJSONData;

            bJSONData = System.Text.Encoding.ASCII.GetBytes(wcDownloader.DownloadString("https://www.xboxleaders.com/api/games.json?gamertag=" + sGamerTag));

            xReader = JsonReaderWriterFactory.CreateJsonReader(bJSONData, new XmlDictionaryReaderQuotas());

            if (xReader == null)
            {
                throw new Exception("Unable to convert data.");
            }

            xJSONRoot = XElement.Load(xReader);

            xGames.LoadXml(xJSONRoot.ToString());

            if (xGames.SelectSingleNode("root/status").InnerText.ToLower() != "success")
            {
                //TODO: Catch errors in JSON feed (Problem: If JSON returns a 501 the WebClient throws an exception.)
                throw new Exception("");
            }

            gDownloadedGames.GamerTag = xGames.SelectSingleNode("root/data/gamertag").InnerText;
            gDownloadedGames.GamerScore = new GamerScore(Int32.Parse(xGames.SelectSingleNode("root/data/gamerscore/current").InnerText), Int32.Parse(xGames.SelectSingleNode("root/data/gamerscore/total").InnerText));
            gDownloadedGames.Achievements = new Achievements(Int32.Parse(xGames.SelectSingleNode("root/data/achievements/current").InnerText), Int32.Parse(xGames.SelectSingleNode("root/data/achievements/total").InnerText));
            gDownloadedGames.TotalGames = Int32.Parse(xGames.SelectSingleNode("root/data/totalgames").InnerText);
            gDownloadedGames.Progress = Int32.Parse(xGames.SelectSingleNode("root/data/progress").InnerText);

            gDownloadedGames.PlayedGames = new List<Game>();

            foreach (XmlNode xNode in xGames.SelectNodes("root/data/games/item"))
            {
                Game gGame = new Game();

                gGame.ID = Int32.Parse(xNode.SelectSingleNode("id").InnerText);
                gGame.HID = xNode.SelectSingleNode("hid").InnerText;
                gGame.IsApp = Boolean.Parse(xNode.SelectSingleNode("isapp").InnerText);
                gGame.Title = HttpUtility.HtmlDecode(xNode.SelectSingleNode("title").InnerText);
                gGame.Artwork = DownloadImage(xNode.SelectSingleNode("artwork").SelectSingleNode("large").InnerText);
                gGame.GamerScore = new GamerScore(Int32.Parse(xNode.SelectSingleNode("gamerscore/current").InnerText), Int32.Parse(xNode.SelectSingleNode("gamerscore/total").InnerText));
                gGame.Achievements = new Achievements(Int32.Parse(xNode.SelectSingleNode("achievements/current").InnerText), Int32.Parse(xNode.SelectSingleNode("achievements/total").InnerText));
                gGame.Progress = Double.Parse(xNode.SelectSingleNode("progress").InnerText);
                gGame.LastPlayed = DateTimeFromEpoc(Int64.Parse(xNode.SelectSingleNode("lastplayed").InnerText));

                gDownloadedGames.PlayedGames.Add(gGame);
            }

            return gDownloadedGames;
        }