/// <summary>
        /// Parses mutual friends from two friendlists
        /// </summary>
        /// <param name="userList1"></param>
        /// <param name="userList2"></param>
        /// <returns>List of mutual friends</returns>
        public FacebookMutualFriends GetMutualFriends(FacebookFriendlist userList1, FacebookFriendlist userList2)
        {
            var mutualFriends = new FacebookMutualFriends
            {
                MutualFriends = userList1.Friends.Where(userList2.Friends.Contains).ToList(),
            };

            mutualFriends.Participants.Add(userList1.Username);
            mutualFriends.Participants.Add(userList2.Username);
            return(mutualFriends);
        }
        /// <summary>
        /// Parses usernames from urls.
        /// </summary>
        /// <param name="friendLinkList"></param>
        /// <param name="user"></param>
        /// <returns></returns>
        private static FacebookFriendlist ParseFriendlist(IEnumerable <IWebElement> friendLinkList, string user)
        {
            var friendList = new FacebookFriendlist()
            {
                Username = user
            };

            // url contains username
            var regexNickname = new Regex(@"(https:\/\/www.facebook.com\/)(.*)(\?.*)");

            // url contains user's id
            var regexId = new Regex(@"(https:\/\/www.facebook.com\/profile\.php\?id=)(.*)(&fref.*)");

            foreach (var friend in friendLinkList)
            {
                var friendLink = friend.GetAttribute("href");
                var match      = regexNickname.Match(friendLink);
                if (!match.Success)
                {
                    continue;
                }
                var friendId = match.Groups[2].Value;

                // some users dont have nickname, only id
                if (friendId == "profile.php")
                {
                    match    = regexId.Match(friendLink);
                    friendId = match.Groups[2].Value;
                }

                if (!IsDuplicate(friendList.Friends, friendId))
                {
                    friendList.Friends.Add(friendId);
                }
            }
            return(friendList);
        }
        public void Data_Mining_mutual()
        {
            var watch = new Stopwatch();

            // clean up
            GC.Collect();
            GC.WaitForPendingFinalizers();
            GC.Collect();


            var friendlist1 = new FacebookFriendlist
            {
                Username = "******"
            };

            friendlist1.Friends.Add("friend1");
            friendlist1.Friends.Add("friend2");
            friendlist1.Friends.Add("friend3");
            friendlist1.Friends.Add("friend4");
            friendlist1.Friends.Add("friend5");
            friendlist1.Friends.Add("friend6");
            friendlist1.Friends.Add("friend7");
            friendlist1.Friends.Add("friend8");
            friendlist1.Friends.Add("friend9");
            friendlist1.Friends.Add("friend10");
            friendlist1.Friends.Add("friend11");
            friendlist1.Friends.Add("friend12");
            friendlist1.Friends.Add("friend13");
            friendlist1.Friends.Add("friend14");
            friendlist1.Friends.Add("friend15");
            friendlist1.Friends.Add("friend16");
            friendlist1.Friends.Add("friend17");
            friendlist1.Friends.Add("friend18");
            friendlist1.Friends.Add("friend19");
            friendlist1.Friends.Add("friend111");
            friendlist1.Friends.Add("friend112");
            friendlist1.Friends.Add("friend113");
            friendlist1.Friends.Add("friend114");
            friendlist1.Friends.Add("friend115");

            var friendlist2 = new FacebookFriendlist
            {
                Username = "******"
            };

            friendlist1.Friends.Add("friend1");
            friendlist1.Friends.Add("xfriend2");
            friendlist1.Friends.Add("friend3");
            friendlist1.Friends.Add("xfriend4");
            friendlist1.Friends.Add("friend5");
            friendlist1.Friends.Add("xfriend6");
            friendlist1.Friends.Add("friend7");
            friendlist1.Friends.Add("xfriend8");
            friendlist1.Friends.Add("friend9");
            friendlist1.Friends.Add("xfriend10");
            friendlist1.Friends.Add("friend11");
            friendlist1.Friends.Add("xfriend12");
            friendlist1.Friends.Add("friend13");
            friendlist1.Friends.Add("xfriend14");
            friendlist1.Friends.Add("friend15");
            friendlist1.Friends.Add("xfriend16");
            friendlist1.Friends.Add("friend17");
            friendlist1.Friends.Add("xfriend18");
            friendlist1.Friends.Add("friend19");
            friendlist1.Friends.Add("xfriend111");
            friendlist1.Friends.Add("friend112");
            friendlist1.Friends.Add("xfriend113");
            friendlist1.Friends.Add("friend114");
            friendlist1.Friends.Add("xfriend115");
            watch.Start();

            var miner = new SnooperFacebookMining(true);

            for (var i = 0; i < 10; i++)
            {
                miner.GetMutualFriends(friendlist1, friendlist2);
            }
            miner.QuitMining();

            watch.Stop();

            Debug.WriteLine(@"Benchmark mutual: {0} ms", watch.Elapsed.TotalMilliseconds);
        }
        /// <summary>
        /// Parses mutual friends from mutual list and friendlist
        /// </summary>
        /// <param name="mutualList"></param>
        /// <param name="userList"></param>
        /// <returns>Mutual friends</returns>
        public FacebookMutualFriends GetMutualFriends(FacebookMutualFriends mutualList, FacebookFriendlist userList)
        {
            var mutualFriends = new FacebookMutualFriends
            {
                MutualFriends = mutualList.MutualFriends.Where(userList.Friends.Contains).ToList()
            };

            mutualFriends.Participants.Add(userList.Username);
            foreach (var participant in mutualList.Participants)
            {
                mutualFriends.Participants.Add(participant);
            }
            return(mutualFriends);
        }