public ActionResult FamilySearch(string pid, string rid, string dir)
        {
            NetworkClient client = new NetworkClient(new DataProperties());

            personRankConnectionPool = client.CreatePool(new ServerId[] { new ServerId("10.8.129.1:80") }, 60000, 60000);
            queryProcessor = new QueryProcessor(personRankConnectionPool);

            // Get the census year from database id
            int censusYear = CensusHelper.GetCensusYear(int.Parse(rid));

            // Get the previous/next census year
            int databaseId = CensusHelper.GetDatabaseId(censusYear, dir);

            if (databaseId == 0)
            {
                return new JsonResult
                {
                    Data = string.Empty,
                    JsonRequestBehavior = JsonRequestBehavior.AllowGet
                };
            }

            // Get the previous database id
            int searchCensusYear = CensusHelper.GetCensusYear(databaseId);

            QueryResultList results;

            try
            {
                results = queryProcessor.ExecuteQuery(string.Format("{0}:{1}", pid, rid));
            }
            catch
            {
                return new JsonResult
                {
                    Data = string.Empty,
                    JsonRequestBehavior = JsonRequestBehavior.AllowGet
                };
            }

            List<SimpleFamily> familyResults = new List<SimpleFamily>();
            List<Family> filteredResults = null;

            //#region new approach
            //foreach (QueryResult result in results)
            //{
            //    if (result.Person.Id.DatabaseId == databaseId)
            //    {
            //        var familyList = results.PersonContainer.GetFamilies(result.Person.Id);

            //        if (familyList.Count > 1)
            //        {
            //            foreach (Family family in familyList)
            //            {

            //                SimpleFamily simpleFamily = new SimpleFamily();

            //                simpleFamily.Id = family.Id;
            //                simpleFamily.CensusYear = searchCensusYear;

            //                simpleFamily.Mother = SimplePerson.CreatePerson(results.PersonContainer.GetPerson(family.MotherId), simpleFamily.CensusYear);
            //                simpleFamily.Father = SimplePerson.CreatePerson(results.PersonContainer.GetPerson(family.FatherId), simpleFamily.CensusYear);

            //                foreach (RelationshipPointer child in family.Children.ChildPointers)
            //                {
            //                    simpleFamily.Children.Add(SimplePerson.CreatePerson(results.PersonContainer.GetPerson(child.Id), simpleFamily.CensusYear));
            //                }
            //                simpleFamily.FindPerson(results);

            //                familyResults.Add(simpleFamily);
            //            }
            //        }
            //        else
            //        {
            //            SimpleFamily simpleFamily = new SimpleFamily();
            //            if (result.Person.Gender == GenderType.Female)
            //            {
            //                simpleFamily.Mother = SimplePerson.CreatePerson(result.Person, censusYear);
            //            }
            //            else
            //            {
            //                simpleFamily.Father = SimplePerson.CreatePerson(result.Person, censusYear);
            //            }

            //            familyResults.Add(simpleFamily);
            //        }
            //    }
            //}

            //return new JsonResult
            //{
            //    Data = familyResults,
            //    JsonRequestBehavior = JsonRequestBehavior.AllowGet
            //};
            //#endregion

            //////////////////////////////////////////////////////

            filteredResults = results.PersonContainer.GetFamilies().Where(x => x.Id.Contains(databaseId.ToString())).Take(5).ToList();

            foreach (Family family in filteredResults)
            {
                SimpleFamily simpleFamily = new SimpleFamily();

                simpleFamily.Id = family.Id;
                simpleFamily.CensusYear = searchCensusYear;
                //simpleFamily.Version = family.Version;

                simpleFamily.Mother = SimplePerson.CreatePerson(results.PersonContainer.GetPerson(family.MotherId), simpleFamily.CensusYear);
                simpleFamily.Father = SimplePerson.CreatePerson(results.PersonContainer.GetPerson(family.FatherId), simpleFamily.CensusYear);

                foreach (RelationshipPointer child in family.Children.ChildPointers)
                {
                    simpleFamily.Children.Add(SimplePerson.CreatePerson(results.PersonContainer.GetPerson(child.Id), simpleFamily.CensusYear));
                }
                simpleFamily.FindPerson(results);
                familyResults.Add(simpleFamily);
            }

            List<QueryResult> singlePeople = results.Where(x => results.PersonContainer.GetFamilies(x.Person.Id).Count == 0 &&
                x.Person.Id.DatabaseId == databaseId).ToList();

            foreach (QueryResult single in singlePeople)
            {
                SimpleFamily simpleFamily = new SimpleFamily();
                simpleFamily.Id = "";
                simpleFamily.CensusYear = searchCensusYear;
                simpleFamily.IsSingleHouseHold = true;
                simpleFamily.SinglePerson = SimplePerson.CreatePerson(single.Person, censusYear);
                simpleFamily.SinglePerson.Selected = true;
                simpleFamily.FindPerson(results);
                familyResults.Add(simpleFamily);
            }

            return new JsonResult
            {
                Data = familyResults,
                JsonRequestBehavior = JsonRequestBehavior.AllowGet
            };
        }
        public ActionResult RecordLink(string pid, string rid, string familyId, string compareFamilyId)
        {
            DefaultComparisonEngineConfigurationFileLocation = Path.Combine(Request.PhysicalApplicationPath, DefaultComparisonEngineConfigurationFileLocation);
            NetworkClient client = new NetworkClient(new DataProperties());

            personRankConnectionPool = client.CreatePool(new ServerId[] { new ServerId("10.8.129.1:80") }, 60000, 60000);
            queryProcessor = new QueryProcessor(personRankConnectionPool);

            // TODO: Send person id
            int censusYear = CensusHelper.GetCensusYear(int.Parse(rid));
            int databaseId = CensusHelper.GetDatabaseId(censusYear, "prev");
            int searchCensusYear = CensusHelper.GetCensusYear(databaseId);

            QueryResultList results;

            try
            {
                results = queryProcessor.ExecuteQuery(string.Format("{0}:{1}", pid, rid));
            }
            catch
            {
                return new JsonResult
                {
                    Data = string.Empty,
                    JsonRequestBehavior = JsonRequestBehavior.AllowGet
                };
            }

            Family family = results.PersonContainer.GetFamilies().Where(x => x.Id == familyId).FirstOrDefault();
            Family compareFamily = results.PersonContainer.GetFamilies().Where(x => x.Id == compareFamilyId).FirstOrDefault();

            // TODO: loop through the family
            IList<PersonModel.Person> personList = new List<PersonModel.Person>();
            IList<PersonModel.Person> personList2 = new List<PersonModel.Person>();

            foreach (RelationshipPointer child in family.Children.ChildPointers)
            {
                PersonModel.Person person = results.PersonContainer.GetPerson(child.Id);
                foreach (RelationshipPointer compareChild in compareFamily.Children.ChildPointers)
                {
                    PersonModel.Person comparePerson = results.PersonContainer.GetPerson(child.Id);
                    FeatureComparisonEngine comparisonEngine = new FeatureComparisonEngine(DefaultComparisonEngineConfigurationFileLocation);
                    ComparisonResult result = comparisonEngine.ComparePeople(results.PersonContainer, person, comparePerson);
                }
            }

            return new JsonResult
            {
                Data = string.Empty,
                JsonRequestBehavior = JsonRequestBehavior.AllowGet
            };
        }