protected void Page_Load(object sender, EventArgs e)
        {
            Int64 forReportingServerId = 0;


            if (MercuryApplication == null)
            {
                return;
            }

            if ((!MercuryApplication.HasEnvironmentPermission(Mercury.Server.EnvironmentPermissions.ReportingServerReview))

                && (!MercuryApplication.HasEnvironmentPermission(Mercury.Server.EnvironmentPermissions.ReportingServerManage)))
            {
                Response.Redirect("/PermissionDenied.aspx", true); return;
            }


            if (!Page.IsPostBack)
            {
                #region Initial Page Load

                if (Request.QueryString["ReportingServerId"] != null)
                {
                    forReportingServerId = Int64.Parse(Request.QueryString["ReportingServerId"]);
                }

                if (forReportingServerId != 0)
                {
                    reportingServer = MercuryApplication.ReportingServerGet(forReportingServerId, false);

                    if (reportingServer == null)
                    {
                        reportingServer = new Mercury.Client.Reporting.ReportingServer(MercuryApplication);
                    }
                }

                else
                {
                    reportingServer = new Mercury.Client.Reporting.ReportingServer(MercuryApplication);
                }

                InitializeAll();

                Session[SessionCachePrefix + "ReportingServer"] = reportingServer;

                Session[SessionCachePrefix + "ReportingServerUnmodified"] = reportingServer.Copy();

                #endregion
            } // Initial Page Load

            else   // Postback

            {
                reportingServer = (Mercury.Client.Reporting.ReportingServer)Session[SessionCachePrefix + "ReportingServer"];
            }

            ApplySecurity();

            if (!String.IsNullOrEmpty(reportingServer.Name))
            {
                Page.Title = "Reporting Server - " + reportingServer.Name;
            }
            else
            {
                Page.Title = "Reporting Server";
            }

            return;
        }
        protected Boolean ApplyChanges()
        {
            Boolean isModified = false;

            Boolean success = false;


            Mercury.Client.Reporting.ReportingServer reportingServerUnmodified = (Mercury.Client.Reporting.ReportingServer)Session[SessionCachePrefix + "ReportingServerUnmodified"];

            if (reportingServerUnmodified.Id == 0)
            {
                isModified = true;
            }


            reportingServer.Name = ReportingServerName.Text.Trim();

            reportingServer.Description = ReportingServerDescription.Text.Trim();

            reportingServer.Enabled = ReportingServerEnabled.Checked;

            reportingServer.Visible = ReportingServerVisible.Checked;


            reportingServer.AssemblyPath = ReportingServerAssemblyPath.Text;

            reportingServer.AssemblyName = ReportingServerAssemblyName.Text;

            reportingServer.AssemblyClassName = ReportingServerAssemblyClassName.Text;


            reportingServer.WebServiceHostConfiguration.Server = ReportingServerConfigurationServerName.Text;

            reportingServer.WebServiceHostConfiguration.BindingConfiguration.Protocol = ReportingServerConfigurationBindingProtocol.Text;

            reportingServer.WebServiceHostConfiguration.Port = Convert.ToInt32(ReportingServerConfigurationPort.Value);

            reportingServer.WebServiceHostConfiguration.ServicePath = ReportingServerConfigurationServicePath.Text;

            reportingServer.WebServiceHostConfiguration.ServiceName = ReportingServerConfigurationServiceName.Text;


            reportingServer.WebServiceHostConfiguration.BindingConfiguration.BindingType = (Mercury.Server.Application.WebServiceBindingType)

                                                                                           Convert.ToInt32(ReportingServerConfigurationBindingTypeSelection.SelectedValue);

            reportingServer.WebServiceHostConfiguration.BindingConfiguration.TimeoutOpen = new TimeSpan(0, Convert.ToInt32(ReportingServerConfigurationBindingTimeout.Value), 0);

            reportingServer.WebServiceHostConfiguration.BindingConfiguration.TimeoutClose = new TimeSpan(0, Convert.ToInt32(ReportingServerConfigurationBindingTimeout.Value), 0);

            reportingServer.WebServiceHostConfiguration.BindingConfiguration.TimeoutSend = new TimeSpan(0, Convert.ToInt32(ReportingServerConfigurationBindingTimeout.Value), 0);

            reportingServer.WebServiceHostConfiguration.BindingConfiguration.TimeoutReceive = new TimeSpan(0, Convert.ToInt32(ReportingServerConfigurationBindingTimeout.Value), 0);

            reportingServer.WebServiceHostConfiguration.BindingConfiguration.SecurityMode = (System.ServiceModel.BasicHttpSecurityMode)

                                                                                            Convert.ToInt32(ReportingServerConfigurationBindingSecurityMode.SelectedValue);

            reportingServer.WebServiceHostConfiguration.BindingConfiguration.TransportCredentialType = (System.ServiceModel.HttpClientCredentialType)

                                                                                                       Convert.ToInt32(ReportingServerConfigurationBindingTransportCredential.SelectedValue);

            reportingServer.WebServiceHostConfiguration.BindingConfiguration.MessageCredentialType = (System.ServiceModel.MessageCredentialType)

                                                                                                     Convert.ToInt32(ReportingServerConfigurationBindingMessageCredential.SelectedValue);


            reportingServer.WebServiceHostConfiguration.ClientCredentials.Domain = ReportingServerConfigurationClientCredentialsDomain.Text;

            reportingServer.WebServiceHostConfiguration.ClientCredentials.UserName = ReportingServerConfigurationClientCredentialsUserName.Text;

            reportingServer.WebServiceHostConfiguration.ClientCredentials.Password = ReportingServerConfigurationClientCredentialsPassword.Text;

            reportingServer.WebServiceHostConfiguration.ClientCredentials.WindowsImpersonationLevel = (System.Security.Principal.TokenImpersonationLevel)

                                                                                                      Convert.ToInt32(ReportingServerConfigurationClientCredentialsImpersonation.SelectedValue);


            if (!isModified)
            {
                isModified = !reportingServer.IsEqual(reportingServerUnmodified);
            }

            if (isModified)
            {
                success = MercuryApplication.ReportingServerSave(reportingServer);

                if (success)
                {
                    reportingServer = MercuryApplication.ReportingServerGet(reportingServer.Id, false);

                    Session[SessionCachePrefix + "ReportingServer"] = reportingServer;

                    Session[SessionCachePrefix + "ReportingServerUnmodified"] = reportingServer.Copy();

                    SaveResponseLabel.Text = "Save Successful";

                    InitializeAll();
                }

                else
                {
                    SaveResponseLabel.Text = "Unable to Save.";

                    if (MercuryApplication.LastException != null)
                    {
                        SaveResponseLabel.Text = SaveResponseLabel.Text + " [" + MercuryApplication.LastException.Message + "]";
                    }

                    success = false;
                }
            }

            else
            {
                SaveResponseLabel.Text = "No Changes Detected."; success = true;
            }

            return(success);
        }