public static OverviewModel Overview(this HtmlNode game, IXpathBuilderProvider provider, Uri baseuri)
        {
            var xpath = provider.Builder()
                                .Any("div").WithAttribute("id", "cont")
                                .Child("div").WithAttribute("id", "col_r")
                                .Child("div").WithAttribute("class", "blr_main")
                                .Child("div").WithAttribute("class", "divtext")
                                .Child("div").WithAttribute("class", "men_h_content")
                                .Child("table").Child("tr").ToString();

            var row = game.Single(xpath);
            if (row != null)
            {
                var cells = row.Select("td").ToArray();

                Debug.Assert(cells.Length == 2);

                var img = cells[0].Attributes("img", "src").FirstOrDefault().Get(x => x.Value);
                return new OverviewModel
                {
                    Description = cells[1].InnerHtml,
                    Image = img != null ? baseuri.Combine(img).AbsoluteUri : ""
                };
            }
            return new OverviewModel();
        }
        public static IEnumerable<AchievementModel> Achievements(this HtmlNode game, IXpathBuilderProvider provider, Uri baseuri)
        {
            // TODO: implement this correctly
            var xpath = provider.Builder()
                                .Any("div").WithAttribute("id", "cont")
                                .Any("table").WithAttribute("id", "dataTable")
                                .Child("tr");

            var list = game.Select(xpath.ToString()).Safe().Skip(3).ToList()
                           .Select((x, i) => new {Index = i, Row = x})
                           .GroupBy(x => x.Index/3)
                           .Select(x => new {First = x.First().Row, Second = x.Skip(1).Take(1).First().Row, Third = x.Last().Row}).ToList();
            return (from item in list
                    let image = item.First.Attributes("td[@class='ac1']/a/img", "src").Select(x => x.Value).FirstOrDefault()
                    select new AchievementModel
                    {
                        Id = Guid.NewGuid(),
                        Image = string.IsNullOrEmpty(image) ? "" : baseuri.Combine(image).AbsoluteUri,
                        Title = item.First.Single("td[@class='ac2']/a/b").Get(x => x.InnerText),
                        Points = item.First.Single("td[@class='ac4']/strong").Get(x => x.InnerText).AsInt(),
                        Description = item.Second.Single("td[@class='ac3']").Get(x => x.InnerText),
                        IsSecret = item.First.Attributes["class"].Get(x => x.Value).Safe().Contains("secret"),
                        Guide = item.Third.Single("td[@class='ac6']").Get(x => x.InnerHtml),
                    }).Where(x => !string.IsNullOrWhiteSpace(x.Title)).ToList();
        }
        public static string Title(this HtmlNode game, IXpathBuilderProvider provider)
        {
            var xpath = provider.Builder()
                                .Any("div").WithAttribute("id", "cont")
                                .Any("div").WithAttribute("class", "bl_la_top")
                                .Child("div").WithAttribute("class", "tt");

            return game.Single(xpath.ToString(), false).Get(x => x.InnerText);
        }