public VisaOptions(string apiKey, decimal subTotal, CurrencyCodes currencyCode, OnOptions on)
        {
            InitOptions = new InitOptions
            {
                ApiKey         = apiKey,
                PaymentRequest = new PaymentRequestOptions
                {
                    CurrencyCode = currencyCode,
                    Subtotal     = subTotal
                }
            };

            On = on;

            ButtonOptions = new ButtonOptions();
        }
        /// <summary>
        /// Gets the options HTML.
        /// </summary>
        /// <returns></returns>
        public string GetOptionString()
        {
            if (InitOptions == null)
            {
                throw new ArgumentNullException("InitOptions cannot be null");
            }

            if (ButtonOptions == null)
            {
                throw new ArgumentNullException("ButtonOptions cannot be null");
            }

            if (On == null)
            {
                throw new ArgumentNullException("On event handlers cannot be null");
            }

            StringBuilder sb  = new StringBuilder();
            TagBuilder    tag = new TagBuilder("script");

            tag.Attributes.Add("type", "text/javascript");
            tag.InnerHtml = string.Format("function onVisaCheckoutReady(){{{0}{1}}}", InitOptions.GetOptionString(), On.GetOptionString());

            sb.Append(tag.ToString()).Append("\r\n");

            tag = new TagBuilder("div");
            tag.Attributes.Add("class", "v-checkout-wrapper");
            tag.InnerHtml = string.Format("{0}\r\n{1}", ButtonOptions.GetOptionString(), TellMeMoreLinkOptions == null ? "" : TellMeMoreLinkOptions.GetOptionString());

            sb.Append(tag.ToString());

            tag = new TagBuilder("script");
            tag.Attributes.Add("type", "text/javascript");
            tag.Attributes.Add("src", Environment.IsSandbox ? SandboxSdkUrl : ProductionSdkUrl);

            sb.Append(tag.ToString());

            return(sb.ToString());
        }