/// <summary>
        ///
        /// </summary>
        /// <param name="htmlHelper"></param>
        /// <param name="src">Required</param>
        /// <param name="altText">Required</param>
        /// <param name="cssClass">Seperate by spaces   </param>
        /// <param name="name">Optional</param>
        /// <param name="htmlAttributes"> use underscore (data_xxx)</param>
        /// <returns></returns>
        public static MvcHtmlString Image(this
                                          HtmlHelper htmlHelper,
                                          string src,
                                          string altText,
                                          string cssClass,
                                          string name,
                                          object htmlAttributes = null
                                          )
        {
            TagBuilder tb = new TagBuilder("img");

            // required name, alt
            tb.MergeAttribute("src", src);
            tb.MergeAttribute("alt", altText);

            // optional classes
            if (!string.IsNullOrWhiteSpace(cssClass))
            {
                tb.AddCssClass(cssClass);
            }

            // optional name/id
            HtmlExtensionsCommon.AddName(tb, name, string.Empty);

            // optional data-dictionary
            tb.MergeAttributes(HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes));

            // html encode the string
            return(MvcHtmlString.Create(tb.ToString(TagRenderMode.SelfClosing)));
        }
        // add more overrides as needed


        public static MvcHtmlString BootstrapButton(
            this HtmlHelper htmlHelper,
            string innerHtml,
            string cssClass,
            string name,
            string title,
            bool isFormNoValidate = false,
            bool isAutoFocus      = false,
            HtmlExtensionsCommon.HtmlButtonTypes buttonType =
            HtmlExtensionsCommon.HtmlButtonTypes.Submit,
            object htmlAttributes = null
            )
        {
            TagBuilder tb = new TagBuilder("button");


            if (!string.IsNullOrWhiteSpace(cssClass))
            {
                cssClass = !cssClass.Contains("btn-")
                           ? "btn-primary " + cssClass
                           : "btn-primary ";
            }

            tb.AddCssClass(cssClass);

            tb.AddCssClass("btn");

            if (!string.IsNullOrWhiteSpace(title))
            {
                tb.MergeAttribute("title", title);
            }

            if (isFormNoValidate)
            {
                tb.MergeAttribute("isFormNoValidate", "isFormNoValidate");
            }

            if (isAutoFocus)
            {
                tb.MergeAttribute("isAutoFocus", "isAutoFocus");
            }

            // optional data-dictionary
            tb.MergeAttributes(HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes));

            // optional name/id
            HtmlExtensionsCommon.AddName(tb, name, string.Empty);

            tb.InnerHtml = innerHtml;

            switch (buttonType)
            {
            case HtmlExtensionsCommon.HtmlButtonTypes.Submit:
                tb.MergeAttribute("type", "submit");
                break;

            case HtmlExtensionsCommon.HtmlButtonTypes.Button:
                tb.MergeAttribute("type", "submit");
                break;

            case HtmlExtensionsCommon.HtmlButtonTypes.Reset:
                tb.MergeAttribute("type", "submit");
                break;
            }

            return(MvcHtmlString.Create(tb.ToString()));
        }