/// <summary>
 /// Clears the search textbox and repopulates the sitelist with all deactivated sites.
 /// </summary>
 /// <param name="sender">Contains a reference to the control/object that raised the event.</param>
 /// <param name="e">Contains the event data of the event that triggered the method.</param>
 protected void DeactivatedClearButton_Click(object sender, EventArgs e)
 {
     DeactivatedSearchBox.Text            = "";
     DeactivatedSiteListView.DataSourceID = DeactivatedSiteListODS.ID;
     DeactivatedSiteListView.DataBind();
     MessageUserControl.Visible = false;
 }
    /// <summary>
    /// Searches deactivated sites based on the selected radio button and the users input in the search box.
    /// </summary>
    /// <param name="sender">Contains a reference to the control/object that raised the event.</param>
    /// <param name="e">Contains the event data of the event that triggered the method.</param>
    protected void DeactivatedSearchButton_Click(object sender, EventArgs e)
    {
        MessageUserControl.TryRun(() =>
        {
            if (DeactivatedSearchBox.Text != "")
            {
                MessageUserControl.Visible = true;
                // Sets the hidden searchArg field to the user's search field text for use by the SearchListODS.
                searchArg.Value = DeactivatedSearchBox.Text;

                // Special character validation.
                Utility utility = new Utility();
                utility.checkValidString(searchArg.Value);

                // Sets the deactivated flag and the searchBy hidden field value.
                deactivatedSearch.Value = "true";
                bool siteNameChecked    = DeactivatedSiteNameCheckbox.Selected;
                bool descriptionChecked = DeactivatedDescriptionCheckbox.Selected;
                searchBy.Value          = "All";
                if (siteNameChecked == true)
                {
                    searchBy.Value = "Site Name";
                }
                else if (descriptionChecked == true)
                {
                    searchBy.Value = "Description";
                }

                // Changes the listview ODS to the search ODS and binds it.
                DeactivatedSiteListView.DataSourceID = SearchListODS.ID;
                DeactivatedSiteListView.DataBind();
                MessageUserControl.Visible = false;
            }
        });
    }
    /// <summary>
    /// Handles all the events caused by clicking any button in the ActiveSiteListView.
    /// </summary>
    /// <param name="sender">Contains a reference to the control/object that raised the event.</param>
    /// <param name="e">Contains the event data of the event that triggered the method.</param>
    protected void SiteListView_ItemCommand(object sender, ListViewCommandEventArgs e)
    {
        MessageUserControl.Visible = false;
        int siteId = 1;

        // If the cancel button is pressed the CommandArgument will be null so we do not want to try to convert it to string.
        // Otherwise we want to get the siteId of the row the user clicked the button on.
        if (!e.CommandName.Equals("Cancel"))
        {
            siteId = int.Parse(e.CommandArgument.ToString());
        }
        // If the user presses the "Update" button we grab the values they input into the textboxes and then run Site_Update using them as the parameters.
        // Afterwords we must set EditIndex to -1 to deactivate edit mode on the updated field.
        if (e.CommandName.Equals("Change"))
        {
            // Grabs the index of the current item in the listview.
            int i = e.Item.DisplayIndex;

            // Gets the values the user has input into the textboxs and assigns them to a string variable.
            TextBox siteNameBox    = ActiveSiteListView.Items[i].FindControl("SiteNameTextBox") as TextBox;
            string  siteName       = siteNameBox.Text;
            TextBox descriptionBox = ActiveSiteListView.Items[i].FindControl("DescriptionTextBox") as TextBox;
            string  description    = descriptionBox.Text;
            TextBox passcodeBox    = ActiveSiteListView.Items[i].FindControl("PasscodeTextBox") as TextBox;
            string  passcode       = passcodeBox.Text;

            MessageUserControl.TryRun(() =>
            {
                MessageUserControl.Visible = true;

                // Validation for special characters.
                Utility utility = new Utility();
                utility.checkValidString(siteName);
                utility.checkValidString(description);
                utility.checkValidString(passcode);

                // Updates the selected site, turns off the edit mode and rebinds all active site listviews.
                SiteController sysmgr = new SiteController();
                sysmgr.Site_Update(siteId, siteName, description, passcode);
                ActiveSiteListView.DataSourceID = ActiveSiteListODS.ID;
                ActiveSiteListView.EditIndex    = -1;
                ActiveSiteListView.DataBind();
                AddSiteListView.DataBind();

                // Clears the search field and re-enables all the controls that are disabled during edit mode.
                ActiveSearchBox.Text       = "";
                ActiveSearchButton.Enabled = true;
                ActiveClearButton.Enabled  = true;
                DataPager pager            = ActiveSiteListView.FindControl("ActiveDataPager") as DataPager;
                pager.Visible = true;
            }, "Success", "Site has been updated");
        }
        // If the user presses deactivate we simply take the siteId from above and deactivate the site it is attributed to.
        else if (e.CommandName.Equals("Deactivate"))
        {
            MessageUserControl.TryRun(() =>
            {
                MessageUserControl.Visible = true;

                // Deactivates the current site.
                SiteController sysmgr = new SiteController();
                sysmgr.Site_Deactivate(siteId);
            }, "Success", "Site has been deactivated");

            // Rebinds all listviews and resets the ODS' to their defaults rather than the search ODS.
            ActiveSiteListView.DataSourceID      = ActiveSiteListODS.ID;
            DeactivatedSiteListView.DataSourceID = DeactivatedSiteListODS.ID;
            ActiveSiteListView.DataBind();
            AddSiteListView.DataBind();
            DeactivatedSiteListView.DataBind();
        }
    }