/// <summary>
        /// Renders an image and a label. In edit mode, the image is wrapped in a hyperlink that is
        /// scripted to respond to clicks and change the "checkbox" state accordingly;
        /// in addition, the state is put into an additional hidden field.
        /// </summary>
        public void Render(BocBooleanValueRenderingContext renderingContext)
        {
            ArgumentUtility.CheckNotNull("renderingContext", renderingContext);

            var resourceSet = _resourceSetFactory.CreateResourceSet(renderingContext.Control);

            AddAttributesToRender(renderingContext, false);
            renderingContext.Writer.RenderBeginTag(HtmlTextWriterTag.Span);

            Label labelControl = new Label {
                ID = renderingContext.Control.ClientID + "_LabelValue"
            };
            Image imageControl = new Image {
                ID = renderingContext.Control.ClientID + "_Image"
            };
            HiddenField hiddenFieldControl = new HiddenField {
                ID = renderingContext.Control.GetValueName()
            };
            HyperLink linkControl = new HyperLink {
                ID = renderingContext.Control.GetDisplayValueName()
            };

            bool isClientScriptEnabled = DetermineClientScriptLevel(renderingContext);

            if (isClientScriptEnabled)
            {
                if (renderingContext.Control.Enabled)
                {
                    RegisterStarupScriptIfNeeded(renderingContext, resourceSet);
                }

                string script = GetClickScript(renderingContext, resourceSet, imageControl, labelControl, hiddenFieldControl, renderingContext.Control.Enabled);
                labelControl.Attributes.Add("onclick", script);
                linkControl.Attributes.Add("onclick", script);
            }

            PrepareLinkControl(renderingContext, linkControl, isClientScriptEnabled);
            PrepareHiddenControl(renderingContext, hiddenFieldControl, renderingContext.Control.IsReadOnly);
            PrepareVisibleControls(renderingContext, resourceSet, imageControl, labelControl);

            hiddenFieldControl.RenderControl(renderingContext.Writer);
            linkControl.Controls.Add(imageControl);
            linkControl.RenderControl(renderingContext.Writer);
            labelControl.RenderControl(renderingContext.Writer);

            renderingContext.Writer.RenderEndTag();
        }
        /// <summary>
        /// Renders an image and a label. In edit mode, the image is wrapped in a hyperlink that is
        /// scripted to respond to clicks and change the "checkbox" state accordingly;
        /// in addition, the state is put into an additional hidden field.
        /// </summary>
        public void Render(BocBooleanValueRenderingContext renderingContext)
        {
            ArgumentUtility.CheckNotNull("renderingContext", renderingContext);

            var resourceSet = _resourceSetFactory.CreateResourceSet(renderingContext.Control);

            AddAttributesToRender(renderingContext);
            renderingContext.Writer.RenderBeginTag(HtmlTextWriterTag.Span);

            var labelControl       = new Label();
            var imageControl       = new Image();
            var hiddenFieldControl = new HiddenField {
                ID = renderingContext.Control.GetValueName(), ClientIDMode = ClientIDMode.Static
            };
            var dataValueReadOnlyControl = new Label {
                ID = renderingContext.Control.GetValueName(), ClientIDMode = ClientIDMode.Static
            };
            var linkControl = new HyperLink {
                ID = renderingContext.Control.GetDisplayValueName(), ClientIDMode = ClientIDMode.Static
            };

            bool isClientScriptEnabled = DetermineClientScriptLevel(renderingContext);

            if (isClientScriptEnabled)
            {
                if (renderingContext.Control.Enabled)
                {
                    RegisterStarupScriptIfNeeded(renderingContext, resourceSet);
                }

                var script = GetClickScript(
                    renderingContext,
                    resourceSet,
                    renderingContext.Control.Enabled);
                labelControl.Attributes.Add("onclick", script);
                linkControl.Attributes.Add("onclick", script);
            }

            PrepareLinkControl(renderingContext, linkControl, isClientScriptEnabled);
            PrepareVisibleControls(renderingContext, resourceSet, imageControl, labelControl);

            if (!renderingContext.Control.IsReadOnly)
            {
                hiddenFieldControl.Value   = renderingContext.Control.Value.HasValue ? renderingContext.Control.Value.ToString() : c_nullString;
                hiddenFieldControl.Visible = true;
                hiddenFieldControl.RenderControl(renderingContext.Writer);
            }
            else
            {
                if (renderingContext.Control.Value.HasValue)
                {
                    dataValueReadOnlyControl.Attributes.Add("data-value", renderingContext.Control.Value.Value.ToString());
                }
                dataValueReadOnlyControl.RenderControl(renderingContext.Writer);
            }
            linkControl.Controls.Add(imageControl);
            linkControl.RenderControl(renderingContext.Writer);
            labelControl.RenderControl(renderingContext.Writer);

            renderingContext.Writer.RenderEndTag();
        }