//protected void RoutingRuleCitySelection_OnItemsRequested (Object sender, Telerik.Web.UI.RadComboBoxItemsRequestedEventArgs eventArgs) {

        //    Telerik.Web.UI.RadComboBox controlComboBox = (Telerik.Web.UI.RadComboBox) sender;


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

        //    List<String> cityReference = MercuryApplication.CityReferenceByState (RoutingRuleStateSelection.Text, eventArgs.Text);

        //    foreach (String cityName in cityReference) {

        //        RoutingRuleCitySelection.Items.Add (new Telerik.Web.UI.RadComboBoxItem (cityName, cityName));

        //    }

        //    eventArgs.EndOfItems = true;

        //    eventArgs.Message = (eventArgs.EndOfItems) ? "End of List" : "More Available";

        //    return;

        //}

        //protected void RoutingRuleStateSelection_OnTextChanged (Object sender, EventArgs eventArgs) {

        //    Telerik.Web.UI.RadComboBox controlComboBox = (Telerik.Web.UI.RadComboBox) sender;


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


        //    RoutingRuleCitySelection.Text = String.Empty;

        //    RoutingRuleZipCode.Text = String.Empty;

        //    return;

        //}

        //protected void RoutingRuleZipCode_OnTextChanged (Object sender, EventArgs eventArgs) {

        //    Telerik.Web.UI.RadMaskedTextBox controlZipCode = (Telerik.Web.UI.RadMaskedTextBox) sender;


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


        //    RoutingRuleCitySelection.Text = MercuryApplication.CityReferenceByZipCode (controlZipCode.Text);

        //    RoutingRuleStateSelection.Text = MercuryApplication.StateReferenceByZipCode (controlZipCode.Text);


        //    return;

        //}

        #endregion


        #region Dialog Button Event Handlers

        protected Boolean ApplyChanges()
        {
            Boolean success = false;

            Boolean isModified = false;

            Boolean isValid = false;

            Dictionary <String, String> validationResponse;


            ValidateSession();

            Mercury.Client.Core.Work.RoutingRule routingRuleUnmodified = (Mercury.Client.Core.Work.RoutingRule)Session[SessionCachePrefix + "RoutingRuleUnmodified"];



            routingRule.Name = RoutingRuleName.Text;

            routingRule.Description = RoutingRuleDescription.Text;

            routingRule.DefaultWorkQueueId = (RoutingRuleDefaultWorkQueue.SelectedItem != null) ? Convert.ToInt64(RoutingRuleDefaultWorkQueue.SelectedItem.Value) : 0;

            routingRule.Enabled = RoutingRuleEnabled.Checked;

            routingRule.Visible = RoutingRuleVisible.Checked;


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

            if (!isModified)
            {
                isModified = !routingRule.IsEqual(routingRuleUnmodified);
            }

            validationResponse = routingRule.Validate();

            isValid = (validationResponse.Count == 0);


            if ((isModified) && (isValid))
            {
                if (!MercuryApplication.HasEnvironmentPermission(Mercury.Server.EnvironmentPermissions.RoutingRuleManage))
                {
                    SaveResponseLabel.Text = "Permission Denied.";

                    return(false);
                }

                success = MercuryApplication.RoutingRuleSave(routingRule);

                if (success)
                {
                    routingRule = MercuryApplication.RoutingRuleGet(routingRule.Id);

                    Session[SessionCachePrefix + "RoutingRule"] = routingRule;

                    Session[SessionCachePrefix + "RoutingRuleUnmodified"] = routingRule.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 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);
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            Int64 forRoutingRuleId = 0;


            if (MercuryApplication == null)
            {
                return;
            }

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

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


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

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

                if (forRoutingRuleId != 0)
                {
                    routingRule = MercuryApplication.RoutingRuleGet(forRoutingRuleId);

                    if (routingRule == null)
                    {
                        routingRule = new Mercury.Client.Core.Work.RoutingRule(MercuryApplication);
                    }

                    Page.Title = "RoutingRule - " + routingRule.Name;
                }

                else
                {
                    routingRule = new Mercury.Client.Core.Work.RoutingRule(MercuryApplication);
                }

                InitializeAll();

                Session[SessionCachePrefix + "RoutingRule"] = routingRule;

                Session[SessionCachePrefix + "RoutingRuleUnmodified"] = routingRule.Copy();

                #endregion
            } // Initial Page Load

            else   // Postback

            {
                routingRule = (Mercury.Client.Core.Work.RoutingRule)Session[SessionCachePrefix + "RoutingRule"];
            }

            SaveResponseLabel.Text = String.Empty;

            ApplySecurity();

            return;
        }