public static List <CriteriaMatch> GetRecommendedMatches(LineArgs source, LineArgs target)
        {
            var result = new List <CriteriaMatch>();

            var sourceMessage = XmlDal.CacheModel.GetFile(source.Path).GetNetworkMessage(source.iLine);

            if (sourceMessage == null)
            {
                return(new List <CriteriaMatch>());
            }

            var targetMessage = XmlDal.CacheModel.GetFile(target.Path).GetNetworkMessage(target.iLine);

            if (targetMessage == null)
            {
                return(result);
            }

            foreach (var sourceValues in sourceMessage.Source.Values)
            {
                foreach (var targetValues in targetMessage.Source.Values)
                {
                    if (sourceValues.Name == targetValues.Name || (sourceValues.Value == targetValues.Value && !string.IsNullOrEmpty(sourceValues.Value) && !string.IsNullOrEmpty(targetValues.Value)))
                    {
                        var model = new CriteriaMatch
                        {
                            SourceName  = sourceValues.Name,
                            SourceType  = "N/A",
                            SourceValue = sourceValues.Value,
                            TargetName  = targetValues.Name,
                            TargetType  = "N/A",
                            TargetValue = targetValues.Value
                        };

                        var exist = result.Any(item =>
                                               String.Equals(item.SourceName, model.SourceName, StringComparison.CurrentCultureIgnoreCase) &&
                                               String.Equals(item.SourceType, model.SourceType, StringComparison.CurrentCultureIgnoreCase) &&
                                               String.Equals(item.SourceValue, model.SourceValue, StringComparison.CurrentCultureIgnoreCase) &&
                                               String.Equals(item.TargetName, model.TargetName, StringComparison.CurrentCultureIgnoreCase) &&
                                               String.Equals(item.TargetType, model.TargetType, StringComparison.CurrentCultureIgnoreCase) &&
                                               String.Equals(item.TargetValue, model.TargetValue, StringComparison.CurrentCultureIgnoreCase));
                        if (!exist)
                        {
                            result.Add(model);
                        }
                    }
                }
            }

            return(result);
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                Response.ContentType = "image/png";
                string SitePath = ConfigurationManager.AppSettings["SitePath"].ToString();
                if (Request.QueryString["OtherUserID"] != null && Request.QueryString["Type"] != null)
                {
                    if (HttpContext.Current.User.Identity.Name != "")
                    {
                        int _UserID     = Convert.ToInt32(HttpContext.Current.User.Identity.Name);
                        int OtherUserID = Convert.ToInt32(Request.QueryString["OtherUserID"]);

                        decimal _CriteriaMatch = new CriteriaMatchPercentage().GetMatchPercentage(_UserID, OtherUserID);
                        imgCriteriaTotal.Src = SitePath + "web/service/OverallMatchImage?p=" + _CriteriaMatch.ToString();

                        decimal _CriteriaTheyMatchYou = new CriteriaMatch()._GetCriteriaSinglePercentage(OtherUserID, _UserID);
                        imgCriteriaTheyMatchYou.Src = SitePath + "web/service/OverallMatchImage?p=" + _CriteriaTheyMatchYou.ToString();

                        decimal _CriteriaYouMatchThem = new CriteriaMatch()._GetCriteriaSinglePercentage(_UserID, OtherUserID);
                        imgCriteriaYouMatchThem.Src = SitePath + "web/service/OverallMatchImage?p=" + _CriteriaYouMatchThem.ToString();


                        decimal _PhilosophyMatch = new QuestionsMatchPercentage().GetMatchPercentage(_UserID, OtherUserID);
                        imgPhilosophyTotal.Src = SitePath + "web/service/OverallMatchImage?p=" + _PhilosophyMatch.ToString();

                        decimal _PhilosophyTheyMatchYou = new QuestionsMatch()._GetQuestionsSinglePercentage(OtherUserID, _UserID);
                        imgPhilosophyTheyMatchYou.Src = SitePath + "web/service/OverallMatchImage?p=" + _PhilosophyTheyMatchYou.ToString();

                        decimal _PhilosophyYouMatchThem = new QuestionsMatch()._GetQuestionsSinglePercentage(_UserID, OtherUserID);
                        imgPhilosophyYouMatchThem.Src = SitePath + "web/service/OverallMatchImage?p=" + _PhilosophyYouMatchThem.ToString();


                        //bind userpics
                        User _GetUser      = new User().GetUserDetails(_UserID);
                        User _GetOtherUser = new User().GetUserDetails(OtherUserID);

                        DivThisUserName.InnerHtml  = _GetUser.LoginName;
                        DivOtherUserNane.InnerHtml = _GetOtherUser.LoginName;

                        if (_GetUser != null && _GetOtherUser != null)
                        {
                            if (_GetUser.ProfilePhoto != null)
                            {
                                UserPic.Src = new Utils().GetPhotoPCTPath(_GetUser.ProfilePhoto.PhotoID, Page.Request);
                            }
                            else
                            {
                                if (_GetUser.Gender == 1)
                                {
                                    UserPic.Src = SitePath + "web/images/M.png";
                                }
                                else
                                {
                                    UserPic.Src = SitePath + "web/images/F.png";
                                }
                            }

                            if (_GetOtherUser.ProfilePhoto != null)
                            {
                                OtherUserPic.Src = new Utils().GetPhotoPCTPath(_GetOtherUser.ProfilePhoto.PhotoID, Page.Request);
                            }
                            else
                            {
                                if (_GetOtherUser.Gender == 1)
                                {
                                    OtherUserPic.Src = SitePath + "web/images/M.png";
                                }
                                else
                                {
                                    OtherUserPic.Src = SitePath + "web/images/F.png";
                                }
                            }
                        }

                        //show and Hide criteria or questions

                        string _Type = Request.QueryString["Type"].ToString();
                        if (_Type == "c")
                        {
                            divCriteria.Visible = true;
                        }
                        else
                        {
                            divQuestions.Visible = true;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
            }
        }
        private void FillCriteriaMatch()
        {
            int _UserID = Convert.ToInt32(HttpContext.Current.User.Identity.Name);

            List <CriteriaMatch> _CriteriaMatch = new List <CriteriaMatch>();

            _CriteriaMatch = new CriteriaMatch().GetCriteriaMatch(_UserID, Convert.ToInt32(OtherUserID)).ToList();
            _CriteriaMatch = _CriteriaMatch.OrderByDescending(x => x.PointsAssigned).ToList();



            foreach (CriteriaMatch _EachMatch in _CriteriaMatch)
            {
                if (_EachMatch.CriteriaType == 9)
                {
                    //set distance range
                    string PostCodeA    = _EachMatch.OtherUser.ZipCode;
                    string PostCodeB    = _EachMatch.User.ZipCode;
                    double?DistanceFrom = Distance.BetweenTwoPostCodesInMiles(PostCodeA, PostCodeB);
                    if (DistanceFrom != null)
                    {
                        string _distance = string.Format("{0:0.00}", DistanceFrom);
                        _EachMatch.OtherUserValue = _distance + " miles.";
                    }
                    else
                    {
                        _EachMatch.OtherUserValue = "";
                    }
                }

                if (_EachMatch.UserPreferences == "")
                {
                    _EachMatch.UserPreferences = "No Answer";
                }
            }

            decimal _TotalPointsAssigned = 0;
            decimal _TotalPointsAwarded  = 0;

            foreach (var item in _CriteriaMatch)
            {
                _TotalPointsAssigned = _TotalPointsAssigned + item.PointsAssigned;
                _TotalPointsAwarded  = _TotalPointsAwarded + item.PointsAwarded;
            }


            _CriteriaMatch = _CriteriaMatch.OrderBy(x => x.CriteriaName).OrderByDescending(x => x.PointsAssigned).ToList();
            //.GroupBy(x => x.CriteriaName).OrderBy(x => x.First().CriteriaName).SelectMany(x => x).ToList();
            //
            _CriteriaMatch.Add(new CriteriaMatch {
                Criteria_id = "", CriteriaName = "", CriteriaQuestion = "", CriteriaType = 0, UserPreferences = "", OtherUserValue = "", PointsAwarded = _TotalPointsAwarded, PointsAssigned = _TotalPointsAssigned, IsMatch = true
            });



            dgCriteriaTable.DataSource = _CriteriaMatch;
            dgCriteriaTable.DataBind();


            List <CriteriaMatch> _OtherUserCriteriaMatch = new List <CriteriaMatch>();

            _OtherUserCriteriaMatch = new CriteriaMatch().GetCriteriaMatch(Convert.ToInt32(OtherUserID), _UserID).ToList();
            _OtherUserCriteriaMatch = _OtherUserCriteriaMatch.OrderByDescending(x => x.PointsAssignedByOtherUser).ToList();

            _OtherUserCriteriaMatchNew = new List <CriteriaMatch>();

            foreach (CriteriaMatch _EachMatch in _OtherUserCriteriaMatch)
            {
                if (_EachMatch.CriteriaType == 9)
                {
                    //set distance range
                    string PostCodeA    = _EachMatch.OtherUser.ZipCode;
                    string PostCodeB    = _EachMatch.User.ZipCode;
                    double?DistanceFrom = Distance.BetweenTwoPostCodesInMiles(PostCodeA, PostCodeB);
                    if (DistanceFrom != null)
                    {
                        string _distance = string.Format("{0:0.00}", DistanceFrom);
                        _EachMatch.OtherUserValue = _distance + " miles.";
                    }
                    else
                    {
                        _EachMatch.OtherUserValue = "";
                    }
                }
                if (_EachMatch.OtherUserValue == "")
                {
                    _EachMatch.OtherUserValue = "No Answer";
                }

                bool _Isadd = false;

                if (_EachMatch.CriteriaName.ToLower().IndexOf("race/ethnicity") != -1)
                {
                    _Isadd = true;
                }
                if (_EachMatch.CriteriaName.ToLower().IndexOf("hair color") != -1)
                {
                    _Isadd = true;
                }
                if (_EachMatch.CriteriaName.ToLower().IndexOf("eye color") != -1)
                {
                    _Isadd = true;
                }
                if (_EachMatch.CriteriaName.ToLower().IndexOf("salary") != -1 || _EachMatch.CriteriaName.ToLower().IndexOf("income") != -1)
                {
                    _Isadd = true;
                }
                if (!_Isadd)
                {
                    _OtherUserCriteriaMatchNew.Add(_EachMatch);
                }
            }

            decimal _TotalPointsAssigned2 = 0;
            decimal _TotalPointsAwarded2  = 0;

            foreach (var item in _OtherUserCriteriaMatch)
            {
                _TotalPointsAssigned2 = _TotalPointsAssigned2 + item.PointsAssigned;
                _TotalPointsAwarded2  = _TotalPointsAwarded2 + item.PointsAwarded;
            }

            _OtherUserCriteriaMatchNew = _OtherUserCriteriaMatchNew.OrderBy(x => x.CriteriaName).OrderByDescending(x => x.PointsAssigned).ToList();
            _OtherUserCriteriaMatchNew.Add(new CriteriaMatch {
                Criteria_id = "", CriteriaName = "", CriteriaQuestion = "", CriteriaType = 0, UserPreferences = "", OtherUserValue = "", PointsAwarded = _TotalPointsAwarded2, PointsAssigned = _TotalPointsAssigned2, IsMatch = true, ShowMatch = true
            });

            dgOtherUserCriteriaTable.DataSource = _OtherUserCriteriaMatchNew;
            dgOtherUserCriteriaTable.DataBind();

            lblMutualMatch.InnerText = "Mutual Match: " + ((_TotalPointsAwarded + _TotalPointsAwarded2) / 2).ToString() + "%";
        }