protected void InitializeProperties()
        {
            Int64 serviceId = 0;


            if ((MercuryApplication != null) && (!IsPostBack))
            {
                if (Request.QueryString["ServiceId"] != null)
                {
                    serviceId = Int64.Parse(Request.QueryString["ServiceId"]);
                }

                if (serviceId != 0)
                {
                    serviceSingleton = MercuryApplication.MedicalServiceSingletonGet(serviceId);

                    if (serviceSingleton == null)
                    {
                        serviceSingleton = new Mercury.Client.Core.MedicalServices.ServiceSingleton(MercuryApplication);
                    }

                    Page.Title = "Service Singleton - " + serviceSingleton.Name;
                }

                else
                {
                    serviceSingleton = new Mercury.Client.Core.MedicalServices.ServiceSingleton(MercuryApplication);
                }

                InitializeGeneralPage();

                InitializeDefinitionPage();

                InitializeDefinitionGrid();

                Session[SessionCachePrefix + "ServiceSingleton"] = serviceSingleton;

                Session[SessionCachePrefix + "ServiceSingletonUnmodified"] = serviceSingleton.Copy();
            }

            else   // Postback

            {
                serviceSingleton = (Mercury.Client.Core.MedicalServices.ServiceSingleton)Session[SessionCachePrefix + "ServiceSingleton"];
            }

            ApplySecurity();

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

            Boolean isModified = false;

            Boolean isValid = false;

            Dictionary <String, String> validationResponse;


            if (MercuryApplication == null)
            {
                return(false);
            }


            Mercury.Client.Core.MedicalServices.ServiceSingleton serviceSingletonUnmodified = (Mercury.Client.Core.MedicalServices.ServiceSingleton)Session [SessionCachePrefix + "ServiceSingletonUnmodified"];

            Mercury.Server.Application.ObjectSaveResponse saveResponse;


            serviceSingleton.Name = SingletonName.Text;

            serviceSingleton.Description = SingletonDescription.Text;

            serviceSingleton.ServiceType = Mercury.Server.Application.MedicalServiceType.Singleton;

            serviceSingleton.ServiceClassification = (Mercury.Server.Application.ServiceClassification)Int32.Parse(SingletonClassification.SelectedValue);

            serviceSingleton.Enabled = SingletonEnabled.Checked;

            serviceSingleton.Visible = SingletonVisible.Checked;


            if (SingletonLastPaidDate.SelectedDate.HasValue)
            {
                serviceSingleton.LastPaidDate = SingletonLastPaidDate.SelectedDate.Value;
            }

            else
            {
                serviceSingleton.LastPaidDate = new DateTime(1900, 01, 01);
            }


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

            if (!isModified)
            {
                isModified = !serviceSingleton.IsEqual(serviceSingletonUnmodified);
            }


            validationResponse = serviceSingleton.Validate();

            isValid = (validationResponse.Count == 0);


            if ((isModified) && (isValid))
            {
                if (!MercuryApplication.HasEnvironmentPermission(ManagePermission))
                {
                    SaveResponseLabel.Text = "Permission Denied.";

                    return(false);
                }

                saveResponse = MercuryApplication.MedicalServiceSave(serviceSingleton);

                success = saveResponse.Success;

                if (success)
                {
                    serviceSingleton = MercuryApplication.MedicalServiceSingletonGet(saveResponse.Id);

                    Session[SessionCachePrefix + "ServiceSingleton"] = serviceSingleton;

                    Session[SessionCachePrefix + "ServiceSingletonUnmodified"] = serviceSingleton.Copy();

                    SaveResponseLabel.Text = "Save Successful.";

                    InitializeGeneralPage();

                    InitializeDefinitionGrid();
                }

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

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

                    success = false;
                }
            }

            else if (!isModified)
            {
                SaveResponseLabel.Text = "No Changes Detected."; success = true;
            }

            else if (!isValid)
            {
                foreach (String validationKey in validationResponse.Keys)
                {
                    SaveResponseLabel.Text = "Invalid [" + validationKey + "]: " + validationResponse[validationKey];

                    break;
                }

                success = false;
            }

            return(success);
        }