/// <summary>
        /// Called by the ASP.NET page framework to notify server controls that use composition-based implementation to create any child controls they contain in preparation for posting back or rendering.
        /// </summary>
        protected override void CreateChildControls()
        {
            base.CreateChildControls();

            if (this.Required)
            {
                this.RequiredFieldValidator                 = new RequiredFieldValidator();
                this.RequiredFieldValidator.ID              = this.ID + "_rfv";
                this.RequiredFieldValidator.Display         = ValidatorDisplay.Dynamic;
                this.RequiredFieldValidator.CssClass        = "validation-error help-inline";
                this.RequiredFieldValidator.Enabled         = true;
                this.RequiredFieldValidator.ValidationGroup = this.ValidationGroup;
                Controls.Add(this.RequiredFieldValidator);
            }

            if (EnhanceForLongLists)
            {
                _lboxDefinedValues    = new RockListBox();
                _lboxDefinedValues.ID = this.ID + "_lboxDefinedValues";
                _lboxDefinedValues.Style.Add("width", "85%");
                _lboxDefinedValues.AutoPostBack          = true;
                _lboxDefinedValues.SelectedIndexChanged += lboxDefinedValues_SelectedIndexChanged;
                Controls.Add(_lboxDefinedValues);

                if (this.Required)
                {
                    this.RequiredFieldValidator.ControlToValidate = _lboxDefinedValues.ID;
                }
            }
            else
            {
                _cblDefinedValues    = new RockCheckBoxList();
                _cblDefinedValues.ID = this.ID + "_cblDefinedValues";
                _cblDefinedValues.Style.Add("width", "85%");
                _cblDefinedValues.RepeatColumns         = this.RepeatColumns;
                _cblDefinedValues.RepeatDirection       = this.RepeatDirection;
                _cblDefinedValues.AutoPostBack          = true;
                _cblDefinedValues.SelectedIndexChanged += cblDefinedValues_SelectedIndexChanged;
                Controls.Add(_cblDefinedValues);

                if (this.Required)
                {
                    this.RequiredFieldValidator.ControlToValidate = _cblDefinedValues.ID;
                }
            }

            LinkButtonAddDefinedValue               = new LinkButton();
            LinkButtonAddDefinedValue.ID            = this.ID + "_lbAddDefinedValue";
            LinkButtonAddDefinedValue.Text          = "Add Item";
            LinkButtonAddDefinedValue.CssClass      = "btn btn-default btn-link js-button-add-defined-value";
            LinkButtonAddDefinedValue.OnClientClick = $"javascript:$('.{this.ClientID}-js-defined-value-selector').fadeToggle(400, 'swing', function() {{ $('#{DefinedValueEditorControl.ClientID}').fadeToggle(); }});  return false;";
            Controls.Add(LinkButtonAddDefinedValue);

            DefinedValueEditorControl.IsMultiSelection = true;

            LoadDefinedValues();
        }
        /// <summary>
        /// Called by the ASP.NET page framework to notify server controls that use composition-based implementation to create any child controls they contain in preparation for posting back or rendering.
        /// </summary>
        protected override void CreateChildControls()
        {
            base.CreateChildControls();

            if (EnhanceForLongLists)
            {
                _lboxDefinedValues    = new RockListBox();
                _lboxDefinedValues.ID = this.ID + "_lboxDefinedValues";
                _lboxDefinedValues.Style.Add("width", "85%");
                _lboxDefinedValues.AutoPostBack          = true;
                _lboxDefinedValues.SelectedIndexChanged += lboxDefinedValues_SelectedIndexChanged;
                Controls.Add(_lboxDefinedValues);
            }
            else
            {
                _cblDefinedValues    = new RockCheckBoxList();
                _cblDefinedValues.ID = this.ID + "_cblDefinedValues";
                _cblDefinedValues.Style.Add("width", "85%");
                _cblDefinedValues.RepeatColumns         = this.RepeatColumns;
                _cblDefinedValues.RepeatDirection       = this.RepeatDirection;
                _cblDefinedValues.AutoPostBack          = true;
                _cblDefinedValues.SelectedIndexChanged += cblDefinedValues_SelectedIndexChanged;
                Controls.Add(_cblDefinedValues);
            }

            LinkButtonAddDefinedValue               = new LinkButton();
            LinkButtonAddDefinedValue.ID            = this.ID + "_lbAddDefinedValue";
            LinkButtonAddDefinedValue.Text          = "Add Item";
            LinkButtonAddDefinedValue.CssClass      = "btn btn-default btn-link js-button-add-defined-value";
            LinkButtonAddDefinedValue.OnClientClick = $"javascript:$('.{this.ClientID}-js-defined-value-selector').fadeToggle(400, 'swing', function() {{ $('#{DefinedValueEditorControl.ClientID}').fadeToggle(); }});  return false;";
            Controls.Add(LinkButtonAddDefinedValue);

            DefinedValueEditorControl.IsMultiSelection = true;

            LoadDefinedValues();
        }