protected List<Person> getPersonListFromHtmlDocument(HtmlDocument doc, SearchName searchName)
        {
            HtmlNodeCollection vCardNodes = doc.DocumentNode.SelectNodes("//div[@class='hit vcard']");
            List<Person> personList = new List<Person>();

            if (vCardNodes == null)
            {
                var vCardSingleNode = doc.DocumentNode.SelectSingleNode("//div[@class='person-info vcard column']");
                var person = parseSinglePerson(vCardSingleNode, searchName);

                if(person != null)
                {
                    personList.Add(person);
                }

                return personList;
            }

            return parsePersonList(vCardNodes, searchName);
        }
        protected List<Person> getPersonList(SearchName searchName, int postCode)
        {
            List<Person> resultList = new List<Person>();
            HtmlDocument doc = new HtmlDocument();
            int totalPageCount = 1;

            doc.LoadHtml(getKrakPersonHtml(searchName.Name, postCode));

            totalPageCount = getTotalPageFromHtmlDocument(doc);

            for (int currentPage = 1; currentPage <= totalPageCount; currentPage++)
            {
                if (currentPage > 1)
                {
                    doc.LoadHtml(getKrakPersonHtml(searchName.Name, postCode, currentPage));
                }

                resultList.AddRange(getPersonListFromHtmlDocument(doc, searchName));
            }

            return resultList;
        }
        /// <summary>
        /// Parses krak person list
        /// </summary>
        protected List<Person> parsePersonList(HtmlNodeCollection vCardNodes, SearchName searchName)
        {
            List<Person> resultList = new List<Person>();

            foreach (HtmlNode vCardNode in vCardNodes)
            {
                var person = parseSinglePerson(vCardNode, searchName);

                if(person != null)
                {
                    resultList.Add(person);
                }
            }

            return resultList;
        }
        protected Person parseSinglePerson(HtmlNode vCardNode, SearchName searchName)
        {
            if(vCardNode == null)
            {
                return null;
            }

            HtmlNode tel = vCardNode.SelectSingleNode(".//span[contains(@class,'tel')]/a[@href]");
            string telReal = tel != null ? tel.GetAttributeValue("href", "").Replace("callto:", "") : "";

            return new Person
                 {
                     SearchName = searchName,
                     Name = getSingleNodeText(".//span[@class='given-name']", vCardNode),
                     Lastname = getSingleNodeText(".//span[@class='family-name']", vCardNode),
                     StreetAddress = getSingleNodeText(".//span[@class='street-address']", vCardNode),
                     Locality = getSingleNodeText(".//span[@class='locality']", vCardNode),
                     PostCode = getSingleNodeText(".//span[@class='postal-code']", vCardNode),
                     TelephoneNumber = telReal,
                     Latitude = getSingleNodeText(".//span[@class='latitude']", vCardNode),
                     Longitude = getSingleNodeText(".//span[@class='longitude']", vCardNode)
                 };
        }