/// <summary>
    /// Build the search request, submit the search and process the result
    /// This is the handler for the Department searches
    /// </summary>
    private void ProcessDeptSearch()
    {
        Session["ProfileSearchRequestCriteriaList"] = new List<string>();
        Session["ProfileSearchRequestKeywordList"] = new List<string>();

        Profiles profiles = ProfileHelper.GetNewProfilesDefinition();

        // Name
        profiles.QueryDefinition.Name.LastName.Text = this.HTMLEncode(txtLastName.Text.Trim());
        profiles.QueryDefinition.Name.FirstName.Text = this.HTMLEncode(txtFirstName.Text.Trim());

        // Institution Selection
        if (Request.QueryString["InstName"] != null)
        {
            AffiliationInstitutionName affilInstname = new AffiliationInstitutionName();
            affilInstname.Text = this.HTMLEncode(Request.QueryString["InstName"].ToString().Trim());
            profiles.QueryDefinition.AffiliationList.Affiliation[0].InstitutionName = affilInstname;

            ((List<string>)Session["ProfileSearchRequestCriteriaList"]).Add(affilInstname.Text);
        }

        // Department Selection
        if (Request.QueryString["DeptName"] != null)
        {
            AffiliationDepartmentName affilDeptname = new AffiliationDepartmentName();
            affilDeptname.Text = this.HTMLEncode(Request.QueryString["DeptName"].ToString().Trim());
            profiles.QueryDefinition.AffiliationList.Affiliation[0].DepartmentName = affilDeptname;

            ((List<string>)Session["ProfileSearchRequestCriteriaList"]).Add(affilDeptname.Text);
        }

        profiles.Version = 2;

        // Save the search request into a session object so that the
        // object data source can use it during the Select event
        Session["ProfileSearchRequest"] = profiles;

        Session["MeshSearch"] = 0;
        Session["WasSearchRun"] = "Y";

        _personId = GetPersonFromQueryString();
        lnkBackToProfile.NavigateUrl = "~/ProfileDetails.aspx?Person=" + _personId.ToString();
        lnkBackToProfile.Visible = true;

        BindSearchResults(0);
    }
    /// <summary>
    /// Build the search request, submit the search and process the result
    /// This is the handler for the "Mini Search" user control.
    /// </summary>
    private void ProcessMiniSearch()
    {
        Profiles profiles = ProfileHelper.GetNewProfilesDefinition();
        Session["ProfileSearchRequestCriteriaList"] = new List<string>();
        Session["ProfileSearchRequestKeywordList"] = new List<string>();

        // Name
        if (Request.QueryString["Lname"] != null)
        {
            string lastName = this.HTMLEncode(Request.QueryString["Lname"].ToString().Trim());
            profiles.QueryDefinition.Name.LastName.Text = lastName;
            ((List<string>)Session["ProfileSearchRequestCriteriaList"]).Add(lastName);
        }

        // Institution Selection
        if (Request.QueryString["Institute"] != null)
        {
            string inst = this.HTMLEncode(Request.QueryString["Institute"].ToString().Trim());

            AffiliationInstitutionName affilInstname = new AffiliationInstitutionName();
            affilInstname.Text = inst;
            profiles.QueryDefinition.AffiliationList.Affiliation[0].InstitutionName = affilInstname;
            ((List<string>)Session["ProfileSearchRequestCriteriaList"]).Add(inst);
        }
        // Division Selection
        if (Request.QueryString["Division"] != null)
        {
            string inst = this.HTMLEncode(Request.QueryString["Division"].ToString().Trim());

            AffiliationDivisionName affilDivname = new AffiliationDivisionName();
            affilDivname.Text = inst;
            profiles.QueryDefinition.AffiliationList.Affiliation[0].DivisionName = affilDivname;
            ((List<string>)Session["ProfileSearchRequestCriteriaList"]).Add(inst);
        }
        // Department Selection
        if (Request.QueryString["DeptName"] != null)
        {
            AffiliationDepartmentName affilDeptname = new AffiliationDepartmentName();
            affilDeptname.Text = this.HTMLEncode(Request.QueryString["DeptName"].ToString().Trim());
            profiles.QueryDefinition.AffiliationList.Affiliation[0].DepartmentName = affilDeptname;
            ((List<string>)Session["ProfileSearchRequestCriteriaList"]).Add(affilDeptname.Text);
        }

        // Keywords
        if (Request.QueryString["Keyword"] != null)
        {
            string keyword = this.HTMLEncode(Request.QueryString["Keyword"].ToString().Trim());

            profiles.QueryDefinition.Keywords.KeywordString.Text = keyword;
            ((List<string>)Session["ProfileSearchRequestKeywordList"]).Add(keyword);
        }

        profiles.Version = 2;

        // Save the search request into a session object so that the
        // object data source can use it during the Select event
        Session["ProfileSearchRequest"] = profiles;

        Session["MeshSearch"] = 0;
        Session["WasSearchRun"] = "Y";

        BindSearchResults(0);
    }
    /// <summary>
    /// Build the search request, submit the search and process the result.
    /// This is the handler for the main search using the full set of criteria
    /// </summary>
    private void ProcessProfileSearch()
    {
        Profiles searchReq = ProfileHelper.GetNewProfilesDefinition();

        string lastName = this.HTMLEncode(txtLastName.Text.Trim());
        string firstName = this.HTMLEncode(txtFirstName.Text.Trim());

        Session["ProfileSearchRequestCriteriaList"] = new List<string>();
        Session["ProfileSearchRequestKeywordList"] = new List<string>();

        // Reset current page number
        Session["ProfileSearchResultsPage"] = 0;

        grdSearchResults.DataSource = null;

        // Name
        if (lastName.Length > 0)
        {
            searchReq.QueryDefinition.Name.LastName.Text = lastName.Trim();
            ((List<string>)Session["ProfileSearchRequestCriteriaList"]).Add(lastName);
        }

        if (firstName.Length > 0)
        {
            searchReq.QueryDefinition.Name.FirstName.Text = firstName.Trim();
            ((List<string>)Session["ProfileSearchRequestCriteriaList"]).Add(firstName);
        }

        // Institution Selection
        if (ddlInstitution.SelectedIndex != 0)
        {
            AffiliationInstitutionName affilInstname = new AffiliationInstitutionName();
            affilInstname.Text = ddlInstitution.SelectedItem.Text;
            searchReq.QueryDefinition.AffiliationList.Affiliation[0].InstitutionName = affilInstname;

            // Set the appropriate message on the right
            ((List<string>)Session["ProfileSearchRequestCriteriaList"]).Add(chkInstitution.Checked == true ? "All except " + affilInstname.Text : affilInstname.Text);

            searchReq.QueryDefinition.AffiliationList.Affiliation[0].InstitutionName.Exclude = chkInstitution.Checked;
        }

        // Division Selection
        if (ddlDivision.SelectedIndex != 0)
        {
            AffiliationDivisionName affilDivname = new AffiliationDivisionName();
            affilDivname.Text = ddlDivision.SelectedItem.Text;
            searchReq.QueryDefinition.AffiliationList.Affiliation[0].DivisionName = affilDivname;

            // Set the appropriate message on the right
            ((List<string>)Session["ProfileSearchRequestCriteriaList"]).Add(chkInstitution.Checked == true ? "All except " + affilDivname.Text : affilDivname.Text);

            searchReq.QueryDefinition.AffiliationList.Affiliation[0].DivisionName.Exclude = chkDivision.Checked;
        }

        // Department Selection
        if (ddlDepartment.SelectedIndex != 0)
        {
            AffiliationDepartmentName affilDeptname = new AffiliationDepartmentName();
            affilDeptname.Text = ddlDepartment.SelectedItem.Text;
            searchReq.QueryDefinition.AffiliationList.Affiliation[0].DepartmentName = affilDeptname;

            // Set the appropriate message on the right
            ((List<string>)Session["ProfileSearchRequestCriteriaList"]).Add(chkDepartment.Checked == true ? "All except " + affilDeptname.Text : affilDeptname.Text);

            searchReq.QueryDefinition.AffiliationList.Affiliation[0].DepartmentName.Exclude = chkDepartment.Checked;
        }

        // Faculty Selection
        if (ddlFacultyRank.SelectedIndex != 0)
        {

            FacultyRankList ftList = new FacultyRankList();

            searchReq.QueryDefinition.FacultyRankList = new FacultyRankList();
            searchReq.QueryDefinition.FacultyRankList.FacultyRank = new List<string>();

            searchReq.QueryDefinition.FacultyRankList.FacultyRank.Add(ddlFacultyRank.SelectedItem.Value.ToString());

            ((List<string>)Session["ProfileSearchRequestCriteriaList"]).Add(ddlFacultyRank.SelectedItem.Text);
        }

        // Person Filter Section
        HiddenField hdnSelectedText = ((HiddenField)ctcFirst.FindControl("hdnSelectedText"));
        PersonFilter pf;
        searchReq.QueryDefinition.PersonFilterList = new PersonFilterList();

        if ((hdnSelectedText.Value.Length > 0) && (hdnSelectedText.Value != "--Select--"))
        {
            string[] pfArray = hdnSelectedText.Value.Split(',');

            for (int i = 0; i < pfArray.Length; i++)
            {
                pf = new PersonFilter();
                pf.Text = pfArray[i];

                searchReq.QueryDefinition.PersonFilterList.Add(pf);

                ((List<string>)Session["ProfileSearchRequestCriteriaList"]).Add(pfArray[i]);
            }
        }

        // Keywords
        if (txtKeyword.Text.Trim().Length > 0)
        {
            string keywordString;

            if (chkKeyword.Checked == true)
            {
                keywordString = this.HTMLEncode(txtKeyword.Text.Trim().Replace("\"", ""));

                searchReq.QueryDefinition.Keywords.KeywordString.Text = keywordString;
                searchReq.QueryDefinition.Keywords.KeywordString.MatchType = KeywordMatchType.exact;
                ((List<string>)Session["ProfileSearchRequestKeywordList"]).Add(keywordString);
            }
            else
            {
                keywordString = this.HTMLEncode(txtKeyword.Text.Trim());

                searchReq.QueryDefinition.Keywords.KeywordString.Text = keywordString;

                ((List<string>)Session["ProfileSearchRequestKeywordList"]).Add(keywordString);
            }
        }

        searchReq.Version = 2;

        // Save the search request into a session object so that the
        // object data source can use it during the Select event

        Session["ProfileSearchRequest"] = searchReq;

        Session["MeshSearch"] = 0;
        Session["SearchPageIndex"] = 0;
        Session["WasSearchRun"] = "Y";

        // Get results bound to grid
        BindSearchResults(0);

        SetBackPageURL();
    }