root 4 anos atrás
commit
603c7c33c8
80 arquivos alterados com 14379 adições e 0 exclusões
  1. 110 0
      adddomain.tpl
  2. 93 0
      addons.tpl
  3. 70 0
      categories-options.tpl
  4. 122 0
      checkconfigureproduct.tpl
  5. 1629 0
      checkout.tpl
  6. 3 0
      common.tpl
  7. 58 0
      complete.tpl
  8. 307 0
      configuredomains.tpl
  9. 456 0
      configureproduct.tpl
  10. 354 0
      configureproductdomain.tpl
  11. 1788 0
      css/all.css
  12. 0 0
      css/all.min.css
  13. BIN
      css/blue.png
  14. BIN
      css/blue@2x.png
  15. 11 0
      css/chosen.min.css
  16. 2 0
      css/index.php
  17. 675 0
      css/ion.rangeSlider.css
  18. 0 0
      css/ion.rangeSlider.min.css
  19. 7 0
      css/style.css
  20. 3 0
      css/tiny-slider.css
  21. 209 0
      domain-renewals.tpl
  22. 184 0
      domainoptions.tpl
  23. 357 0
      domainregister.tpl
  24. 94 0
      domaintransfer.tpl
  25. 18 0
      error.tpl
  26. 17 0
      fraudcheck.tpl
  27. BIN
      img/gateways/acceptjs.png
  28. BIN
      img/gateways/authorize.png
  29. BIN
      img/gateways/authorizecim.png
  30. BIN
      img/gateways/authorizeecheck.png
  31. BIN
      img/gateways/banktransfer.png
  32. BIN
      img/gateways/bp.png
  33. BIN
      img/gateways/evopayments.png
  34. BIN
      img/gateways/ewayv4.png
  35. BIN
      img/gateways/gocardless.png
  36. 2 0
      img/gateways/index.php
  37. BIN
      img/gateways/moneybookers.png
  38. BIN
      img/gateways/offlinecc.png
  39. 2 0
      img/gateways/overrides/index.php
  40. BIN
      img/gateways/paypal.png
  41. BIN
      img/gateways/paypalcheckout.png
  42. BIN
      img/gateways/paypalpaymentspro.png
  43. BIN
      img/gateways/paypalpaymentsproref.png
  44. BIN
      img/gateways/skrill.png
  45. BIN
      img/gateways/stripe.png
  46. BIN
      img/gateways/stripe_ach.png
  47. BIN
      img/gateways/stripe_sepa.png
  48. BIN
      img/gateways/tco.png
  49. BIN
      img/globe.png
  50. BIN
      img/head-bg.png
  51. 2 0
      img/index.php
  52. BIN
      img/shadow-btm.png
  53. BIN
      img/tick.png
  54. 46 0
      includes/existing-paymethods.tpl
  55. 2 0
      index.php
  56. 214 0
      js/ResizeSensor.js
  57. 95 0
      js/StatesDropdown.js
  58. 1 0
      js/addons.min.js
  59. 1880 0
      js/base.js
  60. 1 0
      js/domainrenewal.min.js
  61. 2 0
      js/index.php
  62. 0 0
      js/intlTelInput.min.js
  63. 1 0
      js/ion.rangeSlider.min.js
  64. 7 0
      js/jquery.sticky-sidebar.min.js
  65. 0 0
      js/main.min.js
  66. 3816 0
      js/scripts.js
  67. 0 0
      js/scripts.min.js
  68. 68 0
      layouts/head.tpl
  69. 2 0
      layouts/index.php
  70. 95 0
      linkedaccounts.tpl
  71. 25 0
      login.tpl
  72. 43 0
      marketconnect-promo.tpl
  73. 25 0
      metrics.tpl
  74. 126 0
      ordersummary.tpl
  75. 304 0
      products.tpl
  76. 55 0
      sidebar-categories-collapsed.tpl
  77. 104 0
      sidebar-categories.tpl
  78. 2 0
      theme.yaml
  79. BIN
      thumbnail.gif
  80. 892 0
      viewcart.tpl

+ 110 - 0
adddomain.tpl

@@ -0,0 +1,110 @@
+{include file="orderforms/{$carttpl}/common.tpl"}
+
+{if file_exists("templates/orderforms/{$carttpl}/layouts/head.tpl")}
+	{include file="templates/orderforms/{$carttpl}/layouts/head.tpl"}
+{/if}
+
+<div id="order-standard_cart">
+
+    <div class="row">
+
+        <div class="col-md-12">
+			{if file_exists("templates/orderforms/{$carttpl}/layouts/head.tpl")}
+			{else}
+            <div class="header-lined">
+                <h1>
+                    {if $domain eq "register"}
+                        {$LANG.registerdomain}
+                    {elseif $domain eq "transfer"}
+                        {$LANG.transferdomain}
+                    {/if}
+                </h1>
+            </div>
+			{/if}
+			
+			{include file="orderforms/{$carttpl}/sidebar-categories-collapsed.tpl"}
+
+        </div>
+
+        <div class="col-md-10 col-md-offset-1">
+
+            {if $domain == 'register'}
+                <p>{$LANG.orderForm.findNewDomain}</p>
+            {else}
+                <p>{$LANG.orderForm.transferExistingDomain}</p>
+            {/if}
+
+            <form method="post" action="cart.php" id="frmDomainSearch">
+                <input type="hidden" name="a" value="domainoptions" />
+                <input type="hidden" name="checktype" value="{$domain}" />
+                <input type="hidden" name="ajax" value="1" />
+
+                <div class="row domain-add-domain">
+                    <div class="col-sm-8 col-xs-12 col-sm-offset-1">
+                        <div class="row domains-row">
+                            <div class="col-xs-9">
+                                <div class="input-group">
+                                    <span class="input-group-addon">{lang key='orderForm.www'}</span>
+                                    <input type="text" name="sld" value="{$sld}" id="inputDomain" class="form-control" autocapitalize="none" />
+                                </div>
+                            </div>
+                            <div class="col-xs-3">
+                                <select name="tld" class="form-control">
+                                    {if $domain == 'register'}
+                                        {foreach $registertlds as $listtld}
+                                            <option value="{$listtld}"{if $listtld eq $tld} selected="selected"{/if}>
+                                                {$listtld}
+                                            </option>
+                                        {/foreach}
+                                    {else}
+                                        {foreach $transfertlds as $listtld}
+                                            <option value="{$listtld}"{if $listtld eq $tld} selected="selected"{/if}>
+                                                {$listtld}
+                                            </option>
+                                        {/foreach}
+                                    {/if}
+                                </select>
+                            </div>
+                        </div>
+                    </div>
+                    <div class="col-sm-2 col-xs-12">
+                        <button type="submit" class="btn btn-primary btn-block" id="btnCheckAvailability">
+                            {if $domain eq "register"}
+                                {$LANG.orderForm.check}
+                            {else}
+                                {$LANG.domainstransfer}
+                            {/if}
+                        </button>
+                    </div>
+                </div>
+
+            </form>
+
+            <div class="domain-loading-spinner" id="domainLoadingSpinner">
+                <i class="fas fa-3x fa-spinner fa-spin"></i>
+            </div>
+
+            <form method="post" action="cart.php?a=add&domain={$domain}">
+                <div class="domain-search-results" id="domainSearchResults"></div>
+            </form>
+
+        </div>
+    </div>
+</div>
+
+{if file_exists("templates/orderforms/{$carttpl}/layouts/foot.tpl")}
+	{include file="templates/orderforms/{$carttpl}/layouts/foot.tpl"}
+{/if}
+
+{*
+ * If we have availability results, then the form was submitted w/a domain.
+ * Thus we want to do a search and show the results.
+ *}
+{if $availabilityresults}
+    <script>
+        jQuery(document).ready(function() {
+            jQuery('#btnCheckAvailability').click();
+        });
+    </script>
+{/if}
+

+ 93 - 0
addons.tpl

@@ -0,0 +1,93 @@
+{include file="orderforms/{$carttpl}/common.tpl"}
+
+{if file_exists("templates/orderforms/{$carttpl}/layouts/head.tpl")}
+	{include file="templates/orderforms/{$carttpl}/layouts/head.tpl"}
+{/if}
+		<div id="order-standard_cart">
+
+			<div class="row">
+				
+				<div class="col-md-12">	
+					{if file_exists("templates/orderforms/{$carttpl}/layouts/head.tpl")}
+					{else}
+					<div class="header-lined">
+						<h1>{$LANG.cartproductaddons}</h1>
+					</div>
+					{/if}
+					
+					{include file="orderforms/{$carttpl}/sidebar-categories-collapsed.tpl"}
+				</div>
+
+				<div class="col-md-12">
+
+					{if count($addons) == 0}
+						<div id="noAddons" class="alert alert-warning text-center" role="alert">
+							{$LANG.cartproductaddonsnone}
+						</div>
+						<p class="text-center">
+							<a href="clientarea.php" class="btn btn-default">
+								<i class="fas fa-arrow-circle-left"></i>
+								{$LANG.orderForm.returnToClientArea}
+							</a>
+						</p>
+						
+					{else}
+
+					<div class="products">
+						<div class="row row-eq-height">
+							{foreach $addons as $num => $addon}
+								<div class="col-md-6">
+									<form method="post" action="{$smarty.server.PHP_SELF}?a=add" class="product">
+										<input type="hidden" name="aid" value="{$addon.id}" />
+										<div class="product-addon-header">
+											<h4>{$addon.name}</h4>
+										</div>
+											
+										<div class="product-body">
+											<p class="text-muted">{$addon.description}</p>
+										</div>
+											
+										<div class="product-options">
+											<div class="form-group">
+												<select name="productid" id="inputProductId{$num}" class="form-control field">
+													{foreach $addon.productids as $product}
+														<option value="{$product.id}">
+															{$product.product}{if $product.domain} - {$product.domain}{/if}
+														</option>
+													{/foreach}
+												</select>
+											</div>
+										</div>
+										<div class="product-addon-footer">
+											<div class="product-pricing">
+												{if $addon.free}
+													{$LANG.orderfree}
+												{else}
+													<span class="price">{$addon.recurringamount} {$addon.billingcycle}</span>
+													{if $addon.setupfee}<br />+ {$addon.setupfee} {$LANG.ordersetupfee}{/if}
+												{/if}
+											</div>
+											<div class="product-actions">
+												<button type="submit" class="btn btn-primary">
+													<i class="fa fa-shopping-cart"></i>
+													{$LANG.ordernowbutton}
+												</button>
+											</div>
+										</div>
+									</form>
+								</div>
+								{if $num % 2 != 0}
+									</div>
+									<div class="row row-eq-height">
+								{/if}
+							{/foreach}
+						</div>
+					</div>
+					{/if}
+				</div>
+			</div>
+		</div>
+		
+{if file_exists("templates/orderforms/{$carttpl}/layouts/foot.tpl")}
+	{include file="templates/orderforms/{$carttpl}/layouts/foot.tpl"}
+{/if}

+ 70 - 0
categories-options.tpl

@@ -0,0 +1,70 @@
+<!-- Modal For Options -->
+	<div class="modal fade" id="cat-opt" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
+		<div class="modal-dialog">
+			<div class="modal-content">
+				<div class="modal-header">
+					<button type="button" class="close" data-dismiss="modal" aria-hidden="true"><i class="fa fa-times"></i></button>
+					<h4 class="modal-title" id="myModalLabel">{$LANG.cartproductchooseoptions}</h4>
+				</div>
+				<div class="modal-body">
+				
+					<div class="TM-categories-options">
+						<form>
+							<div class="form-group">
+								<select name="gid" id="gidForm" onchange="javascript:redirectToCartPage()" class="form-control">
+									<optgroup label="Product Categories">
+										{foreach key=num item=productgroup from=$productgroups}
+											<option value="{$productgroup.routePath}"{if $gid eq $productgroup.gid} selected="selected"{/if}>{$productgroup.name}</option>
+										{/foreach}
+									</optgroup>
+									<optgroup label="Actions">
+										{if $loggedin}
+											<option value="{$WEB_ROOT}/cart.php?gid=addons"{if $gid eq "addons"} selected{/if}>{$LANG.cartproductaddons}</option>
+											{if $renewalsenabled}
+												<option value="{$WEB_ROOT}/cart.php?gid=renewals"{if $gid eq "renewals"} selected{/if}>{$LANG.domainrenewals}</option>
+											{/if}
+										{/if}
+										{if $registerdomainenabled}
+											<option value="{$WEB_ROOT}/cart.php?gid=registerdomain"{if $domain eq "register"} selected{/if}>{$LANG.navregisterdomain}</option>
+										{/if}
+										{if $transferdomainenabled}
+											<option value="{$WEB_ROOT}/cart.php?gid=transferdomain"{if $domain eq "transfer"} selected{/if}>{$LANG.transferinadomain}</option>
+										{/if}
+										<option value="{$WEB_ROOT}/cart.php?a=view"{if $action eq "view"} selected{/if}>{$LANG.viewcart}</option>
+									</optgroup>
+								</select>
+							</div>
+						</form>
+						{*
+						{if !$loggedin && $currencies}
+						 <form method="post" action="cart.php{if $action}?a={$action}{elseif $gid}?gid={$gid}{/if}">
+							<div class="form-group">
+								<select name="currency" onchange="submit()" class="form-control field">
+									<option value="">{$LANG.choosecurrency}</option>
+									{foreach from=$currencies item=listcurr}
+										<option value="{$listcurr.id}"{if $listcurr.id == $currency.id} selected{/if}>{$listcurr.code}</option>
+									{/foreach}
+								</select>
+							</div>
+						</form>
+						{/if}
+						*}
+						
+					</div>
+					
+				</div>
+
+			</div><!-- /.modal-content -->
+		</div><!-- /.modal-dialog -->
+	</div><!-- /.modal -->
+<!-- Modal For Options -->
+
+<script type="text/javascript">
+    function redirectToCartPage()
+    {
+        var path = jQuery('#gidForm').val();
+        if (path) {
+            window.location.href = path;
+        }
+    }
+</script>

+ 122 - 0
checkconfigureproduct.tpl

@@ -0,0 +1,122 @@
+<script>
+    function checkMailAddress ( mailname, maildomain, pid) {
+        var xhttp = new XMLHttpRequest();
+        xhttp.onreadystatechange = function() {
+            if (this.readyState == 4 && this.status == 200) {
+                if( this.responseText.trim() == 'yes') {
+                    console.log(this.responseText);
+                    $(customFields[4]).prop("disabled",false);
+                    $(customFields[5]).prop("disabled",true);
+                    $(customFields[2]).addClass('has-success');
+                    $(customFields[2]).css('background-color', '#0f03');;
+                    $("#hintHead").text('');
+                    $("#hintLength").text('');
+                    $("#hintNumeric").text('');
+                    $("#hintSymbols").text('');
+                    $("#hintUpperLower").text('');
+                } else {
+                    console.log(this.responseText);
+                    $(customFields[4]).prop("disabled",true);
+                    $(customFields[5]).prop("disabled",true);
+                    $(customFields[2]).addClass('has-error');
+                    $(customFields[2]).css('background-color', '#f003');;
+                    $("#hintHead").text('Mailadresse ' + $(customFields[2]).val() + '@' + $(customFields[3]).val() + ' nicht verfügbar!');
+                    $("#hintLength").text('');
+                    $("#hintNumeric").text('');
+                    $("#hintSymbols").text('');
+                    $("#hintUpperLower").text('');
+                }
+            }
+        };
+        xhttp.open("GET", "modules/servers/zimbraSingle/zimbraAddressAvailable.php?name=" + mailname + '&domain=' + maildomain + '&pid=' + pid, true);
+        xhttp.send();
+    };
+    jQuery(document).ready(function(){
+        $("#btnCompleteProductConfig").prop("disabled",true);
+        customFields = $("*[id^='customfield']");
+        $(customFields[4]).prop("disabled",true);
+        $(customFields[5]).prop("disabled",true);
+        $(customFields[2]).blur(function () {
+            checkMailAddress( $(customFields[2]).val(), $(customFields[3]).val(), {$productinfo['pid']});
+        });
+        $(customFields[3]).change(function () {
+            checkMailAddress( $(customFields[2]).val(), $(customFields[3]).val(), {$productinfo['pid']});
+        });
+        $(customFields[4]).focus (function () {
+            $("#hintHead").text('Tipps für ein gutes Passwort');
+            $("#hintLength").text('Benutzen Sie mindestens 8 Zeichen');
+            $("#hintNumeric").text('Benutzen Sie mindestens eine Zahl');
+            $("#hintSymbols").text('Benutzen Sie auch mindestens eines der folgenden Symbole (# $ ! % + - etc...)');
+            $("#hintUpperLower").text('Benutzen Sie Groß- und Kleinschreibung');
+        });
+        $(customFields[4]).keyup(function () {
+            var pwlengthOK = false;
+            var numericOK = false;
+            var symbolsOK = false;
+            var upperOK = false;
+            var pw = $(customFields[4]).val();
+            var pwlength = (pw.length);
+            if (pwlength > 7) {
+                pwlengthOK = true;
+                $("#hintLength").text('');
+            } else {
+                pwlengthOK = false;
+                $("#hintLength").text('Benutzen Sie mindestens 8 Zeichen');
+            }
+            var numeric = pw.replace(/[0-9]/g, "");
+            var numnumeric = (pw.length - numeric.length);
+            if (numnumeric > 0) {
+                numericOK = true;
+                $("#hintNumeric").text('');
+            } else {
+                numericOK = false;
+                $("#hintNumeric").text('Benutzen Sie mindestens eine Zahl');
+            }
+            var symbols = pw.replace(/\W/g, "");
+            var numsymbols = (pw.length - symbols.length);
+            if (numsymbols > 0) {
+                symbolsOK = true;
+                $("#hintSymbols").text('');
+            } else {
+                symbolsOK = false;
+                $("#hintSymbols").text('Benutzen Sie auch mindestens ein Symbol oder Sonderzeichen (# $ ! % & + - etc...)');
+            }
+            var upper = pw.replace(/[A-Z]/g, "");
+            var numupper = (pw.length - upper.length);
+            var lower = pw.replace(/[a-z]/g, "");
+            var numlower = (pw.length - lower.length);
+            if ((numupper > 0) && (numlower > 0)) {
+                upperlowerOK = true;
+                $("#hintUpperLower").text('');
+            } else {
+                upperlowerOK = false;
+                $("#hintUpperLower").text('Benutzen Sie Groß- und Kleinschreibung');
+            }
+            $(customFields[4]).removeClass('has-error has-warning has-success');
+            if (pwlengthOK && numericOK && symbolsOK && upperlowerOK) {
+                $(customFields[5]).prop("disabled",false);
+                $(customFields[4]).addClass('has-success');
+                $(customFields[4]).css('background-color', '#0f03');;
+                $("#hintHead").text('');
+            } else {
+                $(customFields[5]).prop("disabled",true);
+                $(customFields[4]).addClass('has-error');
+                $(customFields[4]).css('background-color', '#f003');;
+                $("#hintHead").text('Tipps für ein gutes Passwort');
+            }
+        });
+        $(customFields[5]).keyup(function () {
+            if ($(customFields[5]).val() == $(customFields[4]).val()) {
+                $("#btnCompleteProductConfig").prop("disabled",false);
+                $(customFields[5]).addClass('has-success');
+                $(customFields[5]).css('background-color', '#0f03');;
+                $("#hintHead").text('');
+            } else {
+                $("#btnCompleteProductConfig").prop("disabled",true);
+                $(customFields[5]).addClass('has-error');
+                $(customFields[5]).css('background-color', '#f003');;
+                $("#hintHead").text('Passworte stimmen nicht überein!');
+            }
+        });
+    });
+</script>

+ 1629 - 0
checkout.tpl

@@ -0,0 +1,1629 @@
+{if $smarty.post.onepageorder == "1" && $smarty.post.checkcredit == "0"}
+
+    <script>
+        // Define state tab index value
+        var statesTab = 10;
+        // Do not enforce state input client side
+        var stateNotRequired = true;
+    </script>
+	<script type="text/javascript" src="{$WEB_ROOT}/templates/orderforms/{$carttpl}/js/intlTelInput.min.js"></script>
+    <script type="text/javascript" src="{$WEB_ROOT}/templates/orderforms/{$carttpl}/js/scripts.min.js?v={$versionHash}"></script>
+    <script type="text/javascript" src="{$BASE_PATH_JS}/StatesDropdown.js"></script>
+    <script type="text/javascript" src="{$BASE_PATH_JS}/PasswordStrength.js"></script>
+
+    <script>
+        window.langPasswordStrength = "{$LANG.pwstrength}";
+        window.langPasswordWeak = "{$LANG.pwstrengthweak}";
+        window.langPasswordModerate = "{$LANG.pwstrengthmoderate}";
+        window.langPasswordStrong = "{$LANG.pwstrengthstrong}";
+    </script>
+
+    {if $errormessage}
+        <div class="alert alert-danger checkout-error-feedback" role="alert">
+            <p>{$LANG.orderForm.correctErrors}:</p>
+            <ul>
+                {$errormessage}
+            </ul>
+        </div>
+        <div class="clearfix"></div>
+    {/if}
+
+    <form method="post" name="orderfrm" id="frmCheckout">
+        <input type="hidden" name="submit" value="true" />
+        <input type="hidden"  id="loggedin" value="{$loggedin}" />
+        <input type="hidden" name="custtype" id="inputCustType" value="{$custtype}" />
+
+        <div class="customer_error" style="display: none;"></div>
+        <div class="TM-card blocks customerinfo">
+            <div class="blocks_heading">
+                <h2>{$LANG.billingdetails}</h2>
+            </div>
+            <div class="blocks_body" id="customer_info">
+			
+                {if $custtype neq "new" && $loggedin}
+                    <div class="sub-heading">
+                        <span>
+                            {lang key='switchAccount.title'}
+                        </span>
+                    </div>
+                    <div id="containerExistingAccountSelect" class="row account-select-container">
+                        {foreach $accounts as $account}
+                            <div class="col-sm-{if $accounts->count() == 1}12{else}6{/if}">
+                                <div class="account{if $selectedAccountId == $account->id} active{/if}">
+                                    <label class="radio-inline" for="account{$account->id}">
+                                        <input id="account{$account->id}" class="account-select{if $account->isClosed || $account->noPermission || $inExpressCheckout} disabled{/if}" type="radio" name="account_id" value="{$account->id}"{if $account->isClosed || $account->noPermission || $inExpressCheckout} disabled="disabled"{/if}{if $selectedAccountId == $account->id} checked="checked"{/if}>
+                                        <span class="address">
+                                            <strong>
+                                                {if $account->company}{$account->company}{else}{$account->fullName}{/if}
+                                            </strong>
+                                            {if $account->isClosed || $account->noPermission}
+                                                <span class="label label-default">
+                                                    {if $account->isClosed}
+                                                        {lang key='closed'}
+                                                    {else}
+                                                        {lang key='noPermission'}
+                                                    {/if}
+                                                </span>
+                                            {elseif $account->currencyCode}
+                                                <span class="label label-info">
+                                                    {$account->currencyCode}
+                                                </span>
+                                            {/if}
+                                            <br>
+                                            <span class="small">
+                                                {$account->address1}{if $account->address2}, {$account->address2}{/if}<br>
+                                                {if $account->city}{$account->city},{/if}
+                                                {if $account->state} {$account->state},{/if}
+                                                {if $account->postcode} {$account->postcode},{/if}
+                                                {$account->countryName}
+                                            </span>
+                                        </span>
+                                    </label>
+                                </div>
+                            </div>
+                        {/foreach}
+                        <div class="col-sm-12">
+                            <div class="account border-bottom{if !$selectedAccountId || !is_numeric($selectedAccountId)} active{/if}">
+                                <label class="radio-inline">
+                                    <input class="account-select" type="radio" name="account_id" value="new"{if !$selectedAccountId || !is_numeric($selectedAccountId)} checked="checked"{/if}{if $inExpressCheckout} disabled="disabled" class="disabled"{/if}>
+                                    {lang key='orderForm.createAccount'}
+                                </label>
+                            </div>
+                        </div>
+                    </div>
+                {/if}
+                {if !$loggedin}
+                    <div class="user_option">
+                        <ul>
+                            <li>
+                                <label for="newcust">
+                                    <input type="radio" class="no-icheck signups" value="new" name="custtype" {if !$loggedin && $custtype neq "existing"}checked="checked"{/if} id="newcust" onclick="togglesignupform(this);"/>
+                                    <span class="sign-btn">{$LANG.orderForm.createAccount}</span>
+                                </label>
+                            </li>
+                            <li>
+                                <label for="existingcust">
+                                    <input type="radio" class="no-icheck signups" value="existing" name="custtype" {if $custtype eq "existing" && !$loggedin || $loggedin}checked="checked"{/if} id="existingcust" onclick="togglesignupform(this);"/>
+                                    <span class="sign-btn">{$LANG.orderForm.alreadyRegistered}</span>
+                                </label>
+                            </li>
+                        </ul>
+                    </div>
+                {/if}
+                <div class="signupfields signupfields-existing{if $custtype eq "existing" && !$loggedin}{else} w-hidden{/if}" id="loginfrm">             
+
+                    <div class="row">
+                        <div class="col-sm-6">
+                            <div class="form-group prepend-icon">
+                                <label for="inputLoginEmail" class="field-icon">
+                                    <i class="fas fa-envelope"></i>
+                                </label>
+                                <input type="text" name="loginemail" id="inputLoginEmail" class="field form-control" placeholder="{$LANG.orderForm.emailAddress}" value="{$loginemail}">
+                            </div>
+                        </div>
+                        <div class="col-sm-6">
+                            <div class="form-group prepend-icon">
+                                <label for="inputLoginPassword" class="field-icon">
+                                    <i class="fas fa-lock"></i>
+                                </label>
+                                <input type="password" name="loginpassword" id="inputLoginPassword" class="field form-control" placeholder="{$LANG.clientareapassword}">
+                            </div>
+                        </div>
+                    </div>
+					
+                    <div class="text-center">
+                        <button type="button" id="btnExistingLogin" class="btn btn-primary btn-md">
+                            <span id="existingLoginButton">{lang key='login'}</span>
+                            <span id="existingLoginPleaseWait" class="w-hidden">{lang key='pleasewait'}</span>
+                        </button>
+                    </div>
+
+                    {include file="orderforms/{$carttpl}/linkedaccounts.tpl" linkContext="checkout-existing"}
+                </div>    
+            
+				{if $loggedin}
+				<div id="containerNewUserSignup" class="signupfields{if $custtype === 'existing' || (is_numeric($selectedAccountId) && $selectedAccountId > 0) || ($loggedin && $accounts->count() > 0 && $selectedAccountId !== 'new')} w-hidden{/if}">
+				{else}
+				<div class="signupfields{if $custtype eq "existing" && !$loggedin} w-hidden{/if}" id="signupfrm">
+				{/if}
+                        <div{if $loggedin} class="w-hidden"{/if}>
+                            {include file="orderforms/{$carttpl}/linkedaccounts.tpl" linkContext="checkout-new"}
+                        </div>
+
+
+                        <h5>{$LANG.orderForm.personalInformation}</h5>
+
+                        <div class="row">
+                            <div class="col-sm-6">
+                                <div class="form-group prepend-icon">
+                                    <label for="inputFirstName" class="field-icon">
+                                        <i class="fas fa-user"></i>
+                                    </label>
+                                    <input type="text" name="firstname" id="inputFirstName" class="field form-control" placeholder="{$LANG.orderForm.firstName}" value="{$clientsdetails.firstname}">
+                                </div>
+                            </div>
+                            <div class="col-sm-6">
+                                <div class="form-group prepend-icon">
+                                    <label for="inputLastName" class="field-icon">
+                                        <i class="fas fa-user"></i>
+                                    </label>
+                                    <input type="text" name="lastname" id="inputLastName" class="field form-control" placeholder="{$LANG.orderForm.lastName}" value="{$clientsdetails.lastname}">
+                                </div>
+                            </div>
+                            <div class="col-sm-6">
+                                <div class="form-group prepend-icon">
+                                    <label for="inputEmail" class="field-icon">
+                                        <i class="fas fa-envelope"></i>
+                                    </label>
+                                    <input type="email" name="email" id="inputEmail" class="field form-control" placeholder="{$LANG.orderForm.emailAddress}" value="{$clientsdetails.email}">
+                                </div>
+                            </div>
+                            <div class="col-sm-6">
+                                <div class="form-group prepend-icon">
+                                    <label for="inputPhone" class="field-icon">
+                                        <i class="fas fa-phone"></i>
+                                    </label>
+                                    <input type="tel" name="phonenumber" id="inputPhone" class="field form-control" placeholder="{$LANG.orderForm.phoneNumber}" value="{$clientsdetails.phonenumber}">
+                                </div>
+                            </div>
+                        </div>
+
+                        <h5>{$LANG.orderForm.billingAddress}</h5>
+
+                        <div class="row">
+                            <div class="col-sm-12">
+                                <div class="form-group prepend-icon">
+                                    <label for="inputCompanyName" class="field-icon">
+                                        <i class="fas fa-building"></i>
+                                    </label>
+                                    <input type="text" name="companyname" id="inputCompanyName" class="field form-control" placeholder="{$LANG.orderForm.companyName} ({$LANG.orderForm.optional})" value="{$clientsdetails.companyname}">
+                                </div>
+                            </div>
+                            <div class="col-sm-12">
+                                <div class="form-group prepend-icon">
+                                    <label for="inputAddress1" class="field-icon">
+                                        <i class="far fa-building"></i>
+                                    </label>
+                                    <input type="text" name="address1" id="inputAddress1" class="field form-control" placeholder="{$LANG.orderForm.streetAddress}" value="{$clientsdetails.address1}">
+                                </div>
+                            </div>
+                            <div class="col-sm-12">
+                                <div class="form-group prepend-icon">
+                                    <label for="inputAddress2" class="field-icon">
+                                        <i class="fas fa-map-marker-alt"></i>
+                                    </label>
+                                    <input type="text" name="address2" id="inputAddress2" class="field form-control" placeholder="{$LANG.orderForm.streetAddress2}" value="{$clientsdetails.address2}">
+                                </div>
+                            </div>
+                            <div class="col-sm-4">
+                                <div class="form-group prepend-icon">
+                                    <label for="inputCity" class="field-icon">
+                                        <i class="far fa-building"></i>
+                                    </label>
+                                    <input type="text" name="city" id="inputCity" class="field form-control" placeholder="{$LANG.orderForm.city}" value="{$clientsdetails.city}">
+                                </div>
+                            </div>
+                            <div class="col-sm-5">
+                                <div class="form-group prepend-icon">
+                                    <label for="state" class="field-icon" id="inputStateIcon">
+                                        <i class="fas fa-map-signs"></i>
+                                    </label>
+                                    <label for="stateinput" class="field-icon" id="inputStateIcon">
+                                        <i class="fas fa-map-signs"></i>
+                                    </label>
+                                    <input type="text" name="state" id="inputState" class="field form-control" placeholder="{$LANG.orderForm.state}" value="{$clientsdetails.state}">
+                                </div>
+                            </div>
+                            <div class="col-sm-3">
+                                <div class="form-group prepend-icon">
+                                    <label for="inputPostcode" class="field-icon">
+                                        <i class="fas fa-certificate"></i>
+                                    </label>
+                                    <input type="text" name="postcode" id="inputPostcode" class="field form-control" placeholder="{$LANG.orderForm.postcode}" value="{$clientsdetails.postcode}">
+                                </div>
+                            </div>
+                            <div class="col-sm-12">
+                                <div class="form-group prepend-icon">
+                                    <label for="inputCountry" class="field-icon" id="inputCountryIcon">
+                                        <i class="fas fa-globe"></i>
+                                    </label>
+                                     <select name="country" id="inputCountry" class="field form-control">
+                                        {foreach $countries as $countrycode => $countrylabel}
+                                            <option value="{$countrycode}"{if (!$country && $countrycode == $defaultcountry) || $countrycode eq $country} selected{/if}>
+                                                {$countrylabel}
+                                            </option>
+                                        {/foreach}
+                                    </select>
+                                </div>
+                            </div>
+                            {if $showTaxIdField}
+                                <div class="col-sm-12">
+                                    <div class="form-group prepend-icon">
+                                        <label for="inputTaxId" class="field-icon">
+                                            <i class="fas fa-building"></i>
+                                        </label>
+                                        <input type="text" name="tax_id" id="inputTaxId" class="field form-control" placeholder="{$taxLabel} ({$LANG.orderForm.optional})" value="{$clientsdetails.tax_id}">
+                                    </div>
+                                </div>
+                            {/if}
+                        </div>
+
+                        {if $customfields}
+
+                            <h5>{$LANG.orderadditionalrequiredinfo}</h5>
+                            <div class="row">
+                                {foreach $customfields as $customfield}
+                                    <div class="col-sm-6">
+                                        <div class="form-group">
+                                            {if $customfield.type eq 'tickbox'}
+                                                <label class=checkbox-inline" for="customfield{$customfield.id}">
+                                                    {$customfield.input}
+                                                    {$customfield.name}
+                                                </lable>
+                                                {if $customfield.description}<span class="field-help-text">{$customfield.description}</span>{/if}
+                                             {else}
+                                                 <label for="customfield{$customfield.id}">{$customfield.name}</label>
+                                                    {if $customfield.type eq "link"}
+                                                        <div class="input-group">
+                                                            <span class="input-group-addon" id="customfield{$customfield.id}"><i class="fas fa-link"></i></span>
+                                                                {$customfield.input}
+                                                        </div>
+                                                    {else}
+                                                        {$customfield.input}
+                                                    {/if}
+                                                    {if $customfield.description}<span class="field-help-text">{$customfield.description}</span>{/if}
+                                             {/if}
+                                        </div>
+                                    </div>
+                                {/foreach}
+                            </div>
+                        {/if}
+
+                   
+
+                    <div class="domain_config" {if $domainsinorder}{else}style="display: none;"{/if}>
+
+                        <h5>{$LANG.domainregistrantinfo}</h5>
+
+                        <p class="small text-muted">{$LANG.orderForm.domainAlternativeContact}</p>
+
+                        <div class="row margin-bottom">
+                            <div class="col-sm-6">
+                                <div class="form-group prepend-icon">
+                                    <label for="inputDCFirstName" class="field-icon">
+                                        <i class="fas fa-user"></i>
+                                    </label>				
+                                    <select name="contact" id="inputDomainContact" class="field form-control">
+                                        <option value="">{$LANG.usedefaultcontact}</option>
+                                        {foreach $domaincontacts as $domcontact}
+                                            <option value="{$domcontact.id}"{if $contact == $domcontact.id} selected{/if}>
+                                                {$domcontact.name}
+                                            </option>
+                                        {/foreach}
+                                        <option value="addingnew"{if $contact == "addingnew"} selected{/if}>
+                                            {$LANG.clientareanavaddcontact}...
+                                        </option>
+                                    </select>
+                                </div>
+                            </div>
+                        </div>
+
+                        <div class="row{if $contact neq "addingnew"} w-hidden{/if}" id="domainRegistrantInputFields">
+                            <div class="col-sm-6">
+                                <div class="form-group prepend-icon">
+                                    <label for="inputDCFirstName" class="field-icon">
+                                        <i class="fas fa-user"></i>
+                                    </label>
+                                    <input type="text" name="domaincontactfirstname" id="inputDCFirstName" class="field form-control" placeholder="{$LANG.orderForm.firstName}" value="{$domaincontact.firstname}">
+                                </div>
+                            </div>
+                            <div class="col-sm-6">
+                                <div class="form-group prepend-icon">
+                                    <label for="inputDCLastName" class="field-icon">
+                                        <i class="fas fa-user"></i>
+                                    </label>
+                                    <input type="text" name="domaincontactlastname" id="inputDCLastName" class="field form-control" placeholder="{$LANG.orderForm.lastName}" value="{$domaincontact.lastname}">
+                                </div>
+                            </div>
+                            <div class="col-sm-6">
+                                <div class="form-group prepend-icon">
+                                    <label for="inputDCEmail" class="field-icon">
+                                        <i class="fas fa-envelope"></i>
+                                    </label>
+                                    <input type="email" name="domaincontactemail" id="inputDCEmail" class="field form-control" placeholder="{$LANG.orderForm.emailAddress}" value="{$domaincontact.email}">
+                                </div>
+                            </div>
+                            <div class="col-sm-6">
+                                <div class="form-group prepend-icon">
+                                    <label for="inputDCPhone" class="field-icon">
+                                        <i class="fas fa-phone"></i>
+                                    </label>
+                                    <input type="tel" name="domaincontactphonenumber" id="inputDCPhone" class="field form-control" placeholder="{$LANG.orderForm.phoneNumber}" value="{$domaincontact.phonenumber}">
+                                </div>
+                            </div>
+                            <div class="col-sm-12">
+                                <div class="form-group prepend-icon">
+                                    <label for="inputDCCompanyName" class="field-icon">
+                                        <i class="fas fa-building"></i>
+                                    </label>
+                                    <input type="text" name="domaincontactcompanyname" id="inputDCCompanyName" class="field form-control" placeholder="{$LANG.orderForm.companyName} ({$LANG.orderForm.optional})" value="{$domaincontact.companyname}">
+                                </div>
+                            </div>
+                            <div class="col-sm-12">
+                                <div class="form-group prepend-icon">
+                                    <label for="inputDCAddress1" class="field-icon">
+                                        <i class="far fa-building"></i>
+                                    </label>
+                                    <input type="text" name="domaincontactaddress1" id="inputDCAddress1" class="field form-control" placeholder="{$LANG.orderForm.streetAddress}" value="{$domaincontact.address1}">
+                                </div>
+                            </div>
+                            <div class="col-sm-12">
+                                <div class="form-group prepend-icon">
+                                    <label for="inputDCAddress2" class="field-icon">
+                                        <i class="fas fa-map-marker-alt"></i>
+                                    </label>
+                                    <input type="text" name="domaincontactaddress2" id="inputDCAddress2" class="field form-control" placeholder="{$LANG.orderForm.streetAddress2}" value="{$domaincontact.address2}">
+                                </div>
+                            </div>
+                            <div class="col-sm-4">
+                                <div class="form-group prepend-icon">
+                                    <label for="inputDCCity" class="field-icon">
+                                        <i class="far fa-building"></i>
+                                    </label>
+                                    <input type="text" name="domaincontactcity" id="inputDCCity" class="field form-control" placeholder="{$LANG.orderForm.city}" value="{$domaincontact.city}">
+                                </div>
+                            </div>
+                            <div class="col-sm-5">
+                                <div class="form-group prepend-icon">
+                                    <label for="inputDCState" class="field-icon">
+                                        <i class="fas fa-map-signs"></i>
+                                    </label>
+                                    <input type="text" name="domaincontactstate" id="inputDCState" class="field form-control" placeholder="{$LANG.orderForm.state}" value="{$domaincontact.state}">
+                                </div>
+                            </div>
+                            <div class="col-sm-3">
+                                <div class="form-group prepend-icon">
+                                    <label for="inputDCPostcode" class="field-icon">
+                                        <i class="fas fa-certificate"></i>
+                                    </label>
+                                    <input type="text" name="domaincontactpostcode" id="inputDCPostcode" class="field form-control" placeholder="{$LANG.orderForm.postcode}" value="{$domaincontact.postcode}">
+                                </div>
+                            </div>
+                            <div class="col-sm-12">
+                                <div class="form-group prepend-icon">
+                                    <label for="inputDCCountry" class="field-icon" id="inputCountryIcon">
+                                        <i class="fas fa-globe"></i>
+                                    </label>
+                                    <select name="domaincontactcountry" id="inputDCCountry" class="field form-control">
+                                        {foreach $countries as $countrycode => $countrylabel}
+                                            <option value="{$countrycode}"{if (!$domaincontact.country && $countrycode == $defaultcountry) || $countrycode eq $domaincontact.country} selected{/if}>
+                                                {$countrylabel}
+                                            </option>
+                                        {/foreach}
+                                    </select>
+                                </div>
+                            </div>
+                            <div class="col-sm-12">
+                                <div class="form-group prepend-icon">
+                                    <label for="inputDCTaxId" class="field-icon">
+                                        <i class="fas fa-building"></i>
+                                    </label>
+                                    <input type="text" name="domaincontacttax_id" id="inputDCTaxId" class="field form-control" placeholder="{$taxLabel} ({$LANG.orderForm.optional})" value="{$domaincontact.tax_id}">
+                                </div>
+                            </div>
+                        </div>
+
+                    </div>
+                </div>
+            </div>
+        </div>
+
+        {if !$loggedin}
+            <div id="containerNewUserSecurity"{if (!$loggedin && $custtype eq "existing") || ($remote_auth_prelinked && !$securityquestions) } class="w-hidden"{/if}>
+                <div class="TM-card blocks accountpw">
+                    <div class="blocks_heading">
+                        <h2>{$LANG.orderForm.accountSecurity}</h2>
+                    </div>
+                    <div class="blocks_body" id="account_pw">
+
+                        <div id="containerPassword" class="row{if $remote_auth_prelinked && $securityquestions} w-hidden{/if}">
+                            <div id="passwdFeedback" style="display: none;" class="alert alert-info text-center col-sm-12"></div>
+                            <div class="col-sm-6">
+                                <div class="form-group prepend-icon">
+                                    <label for="inputNewPassword1" class="field-icon">
+                                        <i class="fas fa-lock"></i>
+                                    </label>
+                                    <input type="password" name="password" id="inputNewPassword1" data-error-threshold="{$pwStrengthErrorThreshold}" data-warning-threshold="{$pwStrengthWarningThreshold}" class="field form-control" placeholder="{$LANG.clientareapassword}"{if $remote_auth_prelinked} value="{$password}"{/if}>
+                                </div>
+                            </div>
+                            <div class="col-sm-6">
+                                <div class="form-group prepend-icon">
+                                    <label for="inputNewPassword2" class="field-icon">
+                                        <i class="fas fa-lock"></i>
+                                    </label>
+                                    <input type="password" name="password2" id="inputNewPassword2" class="field form-control" placeholder="{$LANG.clientareaconfirmpassword}"{if $remote_auth_prelinked} value="{$password}"{/if}>
+                                </div>
+                            </div>
+                            <div class="col-sm-6">
+                                <button type="button" class="btn btn-default btn-sm generate-password" data-targetfields="inputNewPassword1,inputNewPassword2">
+                                    {$LANG.generatePassword.btnLabel}
+                                </button>
+                            </div>
+                            <div class="col-sm-6">
+                                <div class="password-strength-meter">
+                                    <div class="progress">
+                                        <div class="progress-bar progress-bar-success progress-bar-striped" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" id="passwordStrengthMeterBar">
+                                        </div>
+                                    </div>
+                                    <p class="text-center small text-muted" id="passwordStrengthTextLabel">{$LANG.pwstrength}: {$LANG.pwstrengthenter}</p>
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+                {if $securityquestions}
+                    <div class="TM-card blocks securityques">
+                        <div class="blocks_body" id="securityQuestion">
+                            {if !$loggedin}
+                                <div class="row">
+                                    <div class="col-sm-6">
+                                        <div class="form-group">
+                                            <select name="securityqid" id="inputSecurityQId" class="field form-control">
+                                                <option value="">{$LANG.clientareasecurityquestion}</option>
+                                                {foreach $securityquestions as $question}
+                                                    <option value="{$question.id}"{if $question.id eq $securityqid} selected{/if}>
+                                                        {$question.question}
+                                                    </option>
+                                                {/foreach}
+                                            </select>
+                                        </div>
+                                    </div>
+                                    <div class="col-sm-6">
+                                        <div class="form-group prepend-icon">
+                                            <label for="inputSecurityQAns" class="field-icon">
+                                                <i class="fas fa-lock"></i>
+                                            </label>
+                                            <input type="password" name="securityqans" id="inputSecurityQAns" class="field form-control" placeholder="{$LANG.clientareasecurityanswer}">
+                                        </div>
+                                    </div>
+                                </div>
+                            {/if}
+                        </div>
+                    </div>
+                {/if}
+            </div>
+        {/if}
+
+        <div class="blocks paymentinfo">
+            {* <div class="blocks_heading">
+                <h2>{$LANG.orderForm.paymentDetails}</h2>
+            </div>
+			*}
+            <div class="blocks_body" id="payment_info">
+                {if $canUseCreditOnCheckout}
+                    <div id="applyCreditContainer" class="apply-credit-container" data-apply-credit="{$applyCredit}">
+                        <p>{lang key='cart.availableCreditBalance' amount=$creditBalance}</p>
+
+                        {if $creditBalance->toNumeric() >= $total->toNumeric()}
+                            <label class="radio">
+                                <input id="useFullCreditOnCheckout" class="cccheckdb" type="radio" name="applycredit" value="1"{if $applyCredit} checked{/if}>
+                                {lang key='cart.applyCreditAmountNoFurtherPayment' amount=$total}
+                            </label>
+                        {else}
+                            <label class="radio">
+                                <input id="useCreditOnCheckout" class="cccheckdb" type="radio" name="applycredit" value="1"{if $applyCredit} checked{/if}>
+                                {lang key='cart.applyCreditAmount' amount=$creditBalance}
+                            </label>
+                        {/if}
+
+                        <label class="radio">
+                            <input id="skipCreditOnCheckout" class="cccheckdb" type="radio" name="applycredit" value="0"{if !$applyCredit} checked{/if}>
+                            {lang key='cart.applyCreditSkip' amount=$creditBalance}
+                        </label>
+                    </div>
+                {/if}
+
+                {if !$inExpressCheckout}
+                    <div id="paymentGatewaysContainer" class="form-group">
+                        <h4>{$LANG.orderpaymentmethod}</h4>
+                        <div class="TM-card" id="cros-payment-gateway">
+                            {foreach $gateways as $gateway}
+                                <label class="radio-inline{if $selectedgateway eq $gateway.sysname} is-selected{/if}" id="lbl-{$gateway.sysname}" onclick="getApply('{$gateway.sysname}')">
+                                    <span>
+					<input type="radio" onclick="getApply(this.value)" name="paymentmethod"
+                                           value="{$gateway.sysname}"
+                                           data-payment-type="{$gateway.payment_type}"
+                                           data-show-local="{$gateway.show_local_cards}"
+                                           data-remote-inputs="{$gateway.uses_remote_inputs}"
+                                           class="payment-methods{if $gateway.type eq "CC"} is-credit-card{/if}"
+                                           {if $selectedgateway eq $gateway.sysname} checked{/if}
+                                          />
+
+                		    <span class="check-label">{$gateway.name}</span>
+				    </span>
+				    {assign var=gatewayIcon value=$gateway.sysname|lower|replace:" ":"-"}
+				    {if file_exists("templates/orderforms/{$carttpl}/img/gateways/{$gatewayIcon}.png")}     
+					<span class="check-icon">
+					    {if file_exists("templates/orderforms/{$carttpl}/img/gateways/overrides/{$gatewayIcon}.png")}
+					    	    <img class="img-responsive" src="templates/orderforms/{$carttpl}/img/gateways/overrides/{$gatewayIcon}.png" alt="{$gateway.name}" />
+					    {else}
+						    <img class="img-responsive" src="templates/orderforms/{$carttpl}/img/gateways/{$gatewayIcon}.png" alt="{$gateway.name}" />
+					    {/if}
+					</span>
+				    {/if}
+				</label>
+                            {/foreach}
+                            {foreach from=$gatewaysoutput item=gatewayname key=wskey}
+                                {if $gatewayname|strstr:"paypalcheckout"} 
+                                    <label class="radio-inline">
+                                        <input type="radio" name="paymentmethod" value="paypalexpress" data-payment-type="Invoices" data-show-local="" data-remote-inputs="" class="payment-methods">
+                                        PayPal Express Checkout
+                                    </label>
+                                {/if}
+                            {/foreach}
+                        </div>
+                    </div>
+
+                    <div class="alert alert-danger text-center gateway-errors w-hidden"></div>
+
+                    <div class="clearfix"></div>
+					
+                    <div class="cc-input-container{if $selectedgatewaytype neq "CC"} w-hidden{/if}" id="creditCardInputFields">
+                        {if $client}
+                            <div id="existingCardsContainer" class="existing-cc-grid">
+                                {include file="orderforms/{$carttpl}/includes/existing-paymethods.tpl"}
+                            </div>
+                        {/if}
+                        <div class="row cvv-input" id="existingCardInfo">
+                            <div class="col-lg-3 col-sm-4">
+                                <div class="form-group prepend-icon">
+                                    <label for="inputCardCVV2" class="field-icon">
+                                        <i class="fas fa-barcode"></i>
+                                    </label>
+                                    <div class="input-group">
+                                        <input type="tel" name="cccvv" id="inputCardCVV2" class="field form-control" placeholder="{$LANG.creditcardcvvnumbershort}" autocomplete="cc-cvc">
+                                        <span class="input-group-btn input-group-append">
+                                            <button type="button" class="btn btn-default" data-toggle="popover" data-placement="bottom" data-content="<img src='{$BASE_PATH_IMG}/ccv.gif' width='210' />">
+                                                ?
+                                            </button>
+                                        </span>
+                                    </div>
+                                    <span class="field-error-msg">{lang key="paymentMethodsManage.cvcNumberNotValid"}</span>
+                                </div>
+                            </div>
+                        </div>
+
+                        <ul>
+                            <li>
+                                <label class="radio-inline">
+                                    <input type="radio" name="ccinfo" value="new" id="new" {if !$client || $client->payMethods->count() === 0} checked="checked"{/if} />
+                                    &nbsp;
+                                    {lang key='creditcardenternewcard'}
+                                </label>
+                            </li>
+                        </ul>
+
+                        <div class="row" id="newCardInfo">
+                            <div id="cardNumberContainer" class="col-sm-6 new-card-container">
+                                <div class="form-group prepend-icon">
+                                    <label for="inputCardNumber" class="field-icon">
+                                        <i class="fas fa-credit-card"></i>
+                                    </label>
+                                    <input type="tel" name="ccnumber" id="inputCardNumber" class="field cc-number-field" placeholder="{$LANG.orderForm.cardNumber}" autocomplete="cc-number" data-message-unsupported="{lang key='paymentMethodsManage.unsupportedCardType'}" data-message-invalid="{lang key='paymentMethodsManage.cardNumberNotValid'}" data-supported-cards="{$supportedCardTypes}" />
+                                    <span class="field-error-msg"></span>
+                                </div>
+                            </div>
+                            <div class="col-sm-3 new-card-container">
+                                <div class="form-group prepend-icon">
+                                    <label for="inputCardExpiry" class="field-icon">
+                                        <i class="fas fa-calendar-alt"></i>
+                                    </label>
+                                    <input type="tel" name="ccexpirydate" id="inputCardExpiry" class="field form-control" placeholder="MM / YY{if $showccissuestart} ({$LANG.creditcardcardexpires}){/if}" autocomplete="cc-exp">
+                                    <span class="field-error-msg">{lang key="paymentMethodsManage.expiryDateNotValid"}</span>
+                                </div>
+                            </div>
+                            <div class="col-sm-3" id="cvv-field-container">
+                                <div class="form-group prepend-icon">
+                                    <label for="inputCardCVV" class="field-icon">
+                                        <i class="fas fa-barcode"></i>
+                                    </label>
+                                    <div class="input-group">
+                                        <input type="tel" name="cccvv" id="inputCardCVV" class="field form-control" placeholder="{$LANG.creditcardcvvnumbershort}" autocomplete="cc-cvc">
+                                        <span class="input-group-btn input-group-append w-hidden">
+                                            <button type="button" class="btn btn-default" data-toggle="popover" data-placement="bottom" data-content="<img src='{$BASE_PATH_IMG}/ccv.gif' width='210' />">
+                                                ?
+                                            </button>
+                                        </span><br>
+                                    </div>
+                                    <span class="field-error-msg">{lang key="paymentMethodsManage.cvcNumberNotValid"}</span>
+                                </div>
+                            </div>
+                            {if $showccissuestart}
+                                <div class="col-sm-3 col-sm-offset-6 new-card-container">
+                                    <div class="form-group prepend-icon">
+                                        <label for="inputCardStart" class="field-icon">
+                                            <i class="far fa-calendar-check"></i>
+                                        </label>
+                                        <input type="tel" name="ccstartdate" id="inputCardStart" class="field form-control" placeholder="MM / YY ({$LANG.creditcardcardstart})" autocomplete="cc-exp">
+                                    </div>
+                                </div>
+                                <div class="col-sm-3 new-card-container">
+                                    <div class="form-group prepend-icon">
+                                        <label for="inputCardIssue" class="field-icon">
+                                            <i class="fas fa-asterisk"></i>
+                                        </label>
+                                        <input type="tel" name="ccissuenum" id="inputCardIssue" class="field form-control" placeholder="{$LANG.creditcardcardissuenum}">
+                                    </div>
+                                </div>
+                            {/if}
+                        </div>
+                        <div id="newCardSaveSettings">
+                            <div class="row form-group new-card-container">
+                                <div id="inputDescriptionContainer" class="col-md-6">
+                                    <div class="prepend-icon">
+                                        <label for="inputDescription" class="field-icon">
+                                            <i class="fas fa-pencil"></i>
+                                        </label>
+                                        <input type="text" class="field form-control" id="inputDescription" name="ccdescription" autocomplete="off" value="" placeholder="{$LANG.paymentMethods.descriptionInput} {$LANG.paymentMethodsManage.optional}" />
+                                    </div>
+                                </div>
+                                {if $allowClientsToRemoveCards}
+                                    <div id="inputNoStoreContainer" class="col-md-6" style="line-height: 32px;">
+                                        <input type="hidden" name="nostore" value="1">
+                                        <input type="checkbox" class="toggle-switch-success no-icheck" data-size="mini" checked="checked" name="nostore" id="inputNoStore" value="0" data-on-text="{lang key='yes'}" data-off-text="{lang key='no'}">
+                                        <label for="inputNoStore" class="checkbox-inline no-padding">
+                                            &nbsp;&nbsp;
+                                            {$LANG.creditCardStore}
+                                        </label>
+                                    </div>
+                                {/if}
+                            </div>
+                        </div>
+                    </div>
+                {else}
+                    {if $expressCheckoutOutput}
+                        {$expressCheckoutOutput}
+                    {else}
+                        <p align="center">
+                            {lang key='paymentPreApproved' gateway=$expressCheckoutGateway}
+                        </p>
+                    {/if}
+                {/if}
+				
+            </div>
+        </div>
+    </div>
+
+    {if $shownotesfield}
+        <div class="TM-card blocks additionalinfo">
+            <div class="blocks_heading">
+                <h2>{$LANG.orderForm.additionalNotes}</h2>
+            </div>
+            <div class="blocks_body" id="notesfield">
+                <div class="row">
+                    <div class="col-md-12">
+                        <div class="form-group">
+                            <textarea name="notes" class="field form-control" rows="4" placeholder="{$LANG.ordernotesdescription}">{$orderNotes}</textarea>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+    {/if}
+
+    {if $showMarketingEmailOptIn}
+        <div class="TM-card blocks additionalinfo">
+            <div class="blocks_body" id="MarketingEmailOptIn">
+                <p>{$marketingEmailOptInMessage}</p>
+                <div class="panel panel-switch {if $marketingEmailOptIn} checked{/if}">
+                    <div class="panel-body">
+                        <span class="switch-label">{lang key='emailMarketing.joinOurMailingList'}: </span>
+                        <label class="switch switch--text">
+                            <input class="no-icheck switch__checkbox" type="checkbox" name="marketingoptin" value="1"{if $marketingEmailOptIn} checked{/if}>
+                            <span class="switch__container"><span class="switch__handle"></span></span>
+                        </label> 
+                    </div>
+                </div>
+            </div>
+        </div>
+    {/if}
+	
+    {if $captcha}
+        <div class="margin-bottom">
+           {include file="$template/includes/captcha_spc.tpl"}
+       </div>
+    {/if}
+		
+    <div class="orderform_footer">
+        <div class="order_form_tos">
+            {if $accepttos}
+                <div>
+                    <label class="checkbox-inline">
+                        <input type="checkbox" name="accepttos" id="accepttos" />
+                        {$LANG.ordertosagreement}
+                        <a href="{$tosurl}" target="_blank">{$LANG.ordertos}</a>
+                    </label>
+                </div>
+                <br />
+            {/if}
+        </div>
+		
+        <div class="order_form_submit">
+            <button type="submit" id="order_submit" class="btn btn-primary btn-lg spinner-on-click{if $captcha}{$captcha->getButtonClass($captchaForm)}{/if}">{if $inExpressCheckout}{$LANG.confirmAndPay}{else}{$LANG.completeorder}{/if}&nbsp;<i class="fas fa-arrow-circle-right"></i></button>			
+        </div>
+    </div>
+</form>
+
+{if $servedOverSsl}
+    <div class="small text-muted mt-3 mb-5">
+        <i class="fad fa-lock-alt text-success"></i>&nbsp;{$LANG.ordersecure} (<strong>{$ipaddress}</strong>) {$LANG.ordersecure2}
+    </div>
+{/if}
+
+<script>
+    jQuery(document).ready(function () {
+        var panelSwitch = $('.panel-switch');
+        panelSwitch.on('click', function (e) {
+            if (!$(this).is('a')) {
+                var currCheck = $(this).find('input[type="checkbox"]');
+                if (currCheck.is(':checked')) {
+                    panelSwitch.removeClass('checked');
+                    currCheck.prop('checked', false);
+                } else {
+                    panelSwitch.addClass('checked');
+                    currCheck.prop('checked', true);
+                }
+                var that = $(this);
+                setTimeout(function () {
+                    that.find('.loader').addClass('loading');
+                }, 300);
+            }
+        });
+    });
+	
+	//Gateway checkbox
+	function getApply(obj){
+	var vDiv=document.getElementById("cros-payment-gateway").children.length;
+		for(var i=0;i<vDiv;i++){
+			var vObje = document.getElementById("cros-payment-gateway").children[i].id;
+			if("lbl-"+obj==vObje){
+				document.getElementById("lbl-"+obj).classList.add("is-selected");
+			}
+			else{
+				document.getElementById(vObje).className ="radio-inline";
+			}	
+		} 
+	}
+	
+    // Activate copy to clipboard functionality
+    jQuery('.copy-to-clipboard').click(WHMCS.ui.clipboard.copy);
+
+    // Password Generator
+    jQuery('.generate-password').click(function(e) {
+        jQuery('#frmGeneratePassword').submit();
+        jQuery('#modalGeneratePassword')
+            .data('targetfields', jQuery(this).data('targetfields'))
+            .modal('show');
+    });
+    jQuery('#frmGeneratePassword').submit(function(e) {
+        e.preventDefault();
+        var length = parseInt(jQuery('#inputGeneratePasswordLength').val(), 10);
+
+        // Check length
+        if (length < 8 || length > 64) {
+            jQuery('#generatePwLengthError').removeClass('w-hidden').show();
+            return;
+        }
+
+        jQuery('#inputGeneratePasswordOutput').val(WHMCS.utils.generatePassword(length));
+    });
+	
+	{if !$loggedin}
+    if(jQuery("#inputCountry").length)
+    {
+        jQuery("#inputCountry, input[name^=\"addons\"], input[name^=\"configoption\"]").change(function(){                        
+            setTimeout(function(){ recalcheckout(); }, 2500);
+        });
+    }
+	{/if}
+</script>
+
+{$credit_card_input}
+
+{else if $smarty.post.onepageorder == "1" && $smarty.post.checkcredit == "1"}
+    {if $loggedin}
+        {if $canUseCreditOnCheckout}
+            <p>{lang key='cart.availableCreditBalance' amount=$creditBalance}</p>
+
+            {if $creditBalance->toNumeric() >= $total->toNumeric()}
+                <label class="radio">
+                    <input id="useFullCreditOnCheckout" class="cccheckdb" type="radio" name="applycredit" value="1"{if $applyCredit} checked{/if}>
+                    {lang key='cart.applyCreditAmountNoFurtherPayment' amount=$total}
+                </label>
+            {else}
+                <label class="radio">
+                    <input id="useCreditOnCheckout" class="cccheckdb" type="radio" name="applycredit" value="1"{if $applyCredit} checked{/if}>
+                    {lang key='cart.applyCreditAmount' amount=$creditBalance}
+                </label>
+            {/if}
+
+            <label class="radio">
+                <input id="skipCreditOnCheckout" class="cccheckdb" type="radio" name="applycredit" value="0"{if !$applyCredit} checked{/if}>
+                {lang key='cart.applyCreditSkip' amount=$creditBalance}
+            </label>
+        {/if}
+    {/if}
+
+{else}
+    <script>
+        // Define state tab index value
+        var statesTab = 10;
+        // Do not enforce state input client side
+        var stateNotRequired = true;
+    </script>
+    {include file="orderforms/{$carttpl}/common.tpl"}
+    <script type="text/javascript" src="{$BASE_PATH_JS}/StatesDropdown.js"></script>
+    <script type="text/javascript" src="{$BASE_PATH_JS}/PasswordStrength.js"></script>
+    <script>
+        window.langPasswordStrength = "{$LANG.pwstrength}";
+        window.langPasswordWeak = "{$LANG.pwstrengthweak}";
+        window.langPasswordModerate = "{$LANG.pwstrengthmoderate}";
+        window.langPasswordStrong = "{$LANG.pwstrengthstrong}";
+    </script>
+
+    <div>
+
+        <div class="row">
+            <div class="col-md-12">
+
+                <div class="already-registered {if $loggedin}w-hidden{/if}">			
+                    <p>{lang key='orderForm.enterPersonalDetails'}</p>
+                    <div class="padding-2x">
+						<button type="button" class="btn btn-primary{if $loggedin || !$loggedin && $custtype eq "existing"} w-hidden{/if}" id="btnAlreadyRegistered">
+							{$LANG.orderForm.alreadyRegistered}
+						</button>
+						<button type="button" class="btn btn-primary{if $loggedin || $custtype neq "existing"} w-hidden{/if}" id="btnNewUserSignup">
+							{$LANG.orderForm.createAccount}
+						</button>
+                    </div>
+
+                </div>
+
+                {if $errormessage}
+                    <div class="alert alert-danger checkout-error-feedback" role="alert">
+                        <p>{$LANG.orderForm.correctErrors}:</p>
+                        <ul>
+                            {$errormessage}
+                        </ul>
+                    </div>
+                    <div class="clearfix"></div>
+                {/if}
+
+                <form method="post" action="{$smarty.server.PHP_SELF}?a=checkout" name="orderfrm" id="frmCheckout">
+                    <input type="hidden" name="submit" value="true" />
+                    <input type="hidden" name="custtype" id="inputCustType" value="{$custtype}" />
+					
+					{if $custtype neq "new" && $loggedin}
+						<div class="sub-heading">
+							<span>
+								{lang key='switchAccount.title'}
+							</span>
+						</div>
+						<div id="containerExistingAccountSelect" class="row account-select-container">
+							{foreach $accounts as $account}
+								<div class="col-sm-{if $accounts->count() == 1}12{else}6{/if}">
+									<div class="account{if $selectedAccountId == $account->id} active{/if}">
+										<label class="radio-inline" for="account{$account->id}">
+											<input id="account{$account->id}" class="account-select{if $account->isClosed || $account->noPermission || $inExpressCheckout} disabled{/if}" type="radio" name="account_id" value="{$account->id}"{if $account->isClosed || $account->noPermission || $inExpressCheckout} disabled="disabled"{/if}{if $selectedAccountId == $account->id} checked="checked"{/if}>
+											<span class="address">
+												<strong>
+													{if $account->company}{$account->company}{else}{$account->fullName}{/if}
+												</strong>
+												{if $account->isClosed || $account->noPermission}
+													<span class="label label-default">
+														{if $account->isClosed}
+															{lang key='closed'}
+														{else}
+															{lang key='noPermission'}
+														{/if}
+													</span>
+												{elseif $account->currencyCode}
+													<span class="label label-info">
+														{$account->currencyCode}
+													</span>
+												{/if}
+												<br>
+												<span class="small">
+													{$account->address1}{if $account->address2}, {$account->address2}{/if}<br>
+													{if $account->city}{$account->city},{/if}
+													{if $account->state} {$account->state},{/if}
+													{if $account->postcode} {$account->postcode},{/if}
+													{$account->countryName}
+												</span>
+											</span>
+										</label>
+									</div>
+								</div>
+							{/foreach}
+							<div class="col-sm-12">
+								<div class="account border-bottom{if !$selectedAccountId || !is_numeric($selectedAccountId)} active{/if}">
+									<label class="radio-inline">
+										<input class="account-select" type="radio" name="account_id" value="new"{if !$selectedAccountId || !is_numeric($selectedAccountId)} checked="checked"{/if}{if $inExpressCheckout} disabled="disabled" class="disabled"{/if}>
+										{lang key='orderForm.createAccount'}
+									</label>
+								</div>
+							</div>
+						</div>
+					{/if}
+                    <div id="containerExistingUserSignin"{if $loggedin || $custtype neq "existing"} class="w-hidden"{/if}>
+
+                        <div class="sub-heading">
+                            <span>{$LANG.orderForm.existingCustomerLogin}</span>
+                        </div>
+
+                        <div class="TM-card">
+                            <div class="row">
+                                <div class="col-sm-6">
+                                    <div class="form-group prepend-icon">
+                                        <label for="inputLoginEmail" class="field-icon">
+                                            <i class="fas fa-envelope"></i>
+                                        </label>
+                                        <input type="text" name="loginemail" id="inputLoginEmail" class="field form-control" placeholder="{$LANG.orderForm.emailAddress}" value="{$loginemail}">
+                                    </div>
+                                </div>
+                                <div class="col-sm-6">
+                                    <div class="form-group prepend-icon">
+                                        <label for="inputLoginPassword" class="field-icon">
+                                            <i class="fas fa-lock"></i>
+                                        </label>
+                                        <input type="password" name="loginpassword" id="inputLoginPassword" class="field form-control" placeholder="{$LANG.clientareapassword}">
+                                    </div>
+                                </div>
+                            </div>
+                        </div>
+						
+						<div class="text-center">
+							<button type="button" id="btnExistingLogin" class="btn btn-primary btn-md">
+								<span id="existingLoginButton">{lang key='login'}</span>
+								<span id="existingLoginPleaseWait" class="w-hidden">{lang key='pleasewait'}</span>
+							</button>
+						</div>
+                        <div class="padding-all">
+                            {include file="orderforms/{$carttpl}/linkedaccounts.tpl" linkContext="checkout-existing"}
+                        </div>
+                    </div>
+
+                    <div id="containerNewUserSignup"{if $custtype === 'existing' || (is_numeric($selectedAccountId) && $selectedAccountId > 0) || ($loggedin && $accounts->count() > 0 && $selectedAccountId !== 'new')} class="w-hidden"{/if}>
+                        <div{if $loggedin} class="w-hidden"{/if}>
+                            <div class="padding-all">
+                                {include file="orderforms/{$carttpl}/linkedaccounts.tpl" linkContext="checkout-new"}
+                            </div>
+                        </div>
+
+
+                        <h4>{$LANG.orderForm.personalInformation}</h4>
+
+                        <div class="TM-card">
+                            <div class="row">
+                                <div class="col-sm-6">
+                                    <div class="form-group prepend-icon">
+                                        <label for="inputFirstName" class="field-icon">
+                                            <i class="fas fa-user"></i>
+                                        </label>
+                                        <input type="text" name="firstname" id="inputFirstName" class="field form-control" placeholder="{$LANG.orderForm.firstName}" value="{$clientsdetails.firstname}" autofocus>
+                                    </div>
+                                </div>
+                                <div class="col-sm-6">
+                                    <div class="form-group prepend-icon">
+                                        <label for="inputLastName" class="field-icon">
+                                            <i class="fas fa-user"></i>
+                                        </label>
+                                        <input type="text" name="lastname" id="inputLastName" class="field form-control" placeholder="{$LANG.orderForm.lastName}" value="{$clientsdetails.lastname}">
+                                    </div>
+                                </div>
+                                <div class="col-sm-6">
+                                    <div class="form-group prepend-icon">
+                                        <label for="inputEmail" class="field-icon">
+                                            <i class="fas fa-envelope"></i>
+                                        </label>
+                                        <input type="email" name="email" id="inputEmail" class="field form-control" placeholder="{$LANG.orderForm.emailAddress}" value="{$clientsdetails.email}">
+                                    </div>
+                                </div>
+                                <div class="col-sm-6">
+                                    <div class="form-group prepend-icon">
+                                        <label for="inputPhone" class="field-icon">
+                                            <i class="fas fa-phone"></i>
+                                        </label>
+                                        <input type="tel" name="phonenumber" id="inputPhone" class="field form-control" placeholder="{$LANG.orderForm.phoneNumber}" value="{$clientsdetails.phonenumber}">
+                                    </div>
+                                </div>
+                            </div>
+                        </div>
+
+                        <h4>{$LANG.orderForm.billingAddress}</h4>
+
+                        <div class="TM-card">
+                            <div class="row">
+                                <div class="col-sm-12">
+                                    <div class="form-group prepend-icon">
+                                        <label for="inputCompanyName" class="field-icon">
+                                            <i class="fas fa-building"></i>
+                                        </label>
+                                        <input type="text" name="companyname" id="inputCompanyName" class="field form-control" placeholder="{$LANG.orderForm.companyName} ({$LANG.orderForm.optional})" value="{$clientsdetails.companyname}">
+                                    </div>
+                                </div>
+                                <div class="col-sm-12">
+                                    <div class="form-group prepend-icon">
+                                        <label for="inputAddress1" class="field-icon">
+                                            <i class="fas fa-building"></i>
+                                        </label>
+                                        <input type="text" name="address1" id="inputAddress1" class="field form-control" placeholder="{$LANG.orderForm.streetAddress}" value="{$clientsdetails.address1}">
+                                    </div>
+                                </div>
+                                <div class="col-sm-12">
+                                    <div class="form-group prepend-icon">
+                                        <label for="inputAddress2" class="field-icon">
+                                            <i class="fas fa-map-marker-alt"></i>
+                                        </label>
+                                        <input type="text" name="address2" id="inputAddress2" class="field form-control" placeholder="{$LANG.orderForm.streetAddress2}" value="{$clientsdetails.address2}">
+                                    </div>
+                                </div>
+                                <div class="col-sm-4">
+                                    <div class="form-group prepend-icon">
+                                        <label for="inputCity" class="field-icon">
+                                            <i class="fas fa-building"></i>
+                                        </label>
+                                        <input type="text" name="city" id="inputCity" class="field form-control" placeholder="{$LANG.orderForm.city}" value="{$clientsdetails.city}">
+                                    </div>
+                                </div>
+                                <div class="col-sm-5">
+                                    <div class="form-group prepend-icon">
+                                        <label for="state" class="field-icon" id="inputStateIcon">
+                                            <i class="fas fa-map-signs"></i>
+                                        </label>
+                                        <label for="stateinput" class="field-icon" id="inputStateIcon">
+                                            <i class="fas fa-map-signs"></i>
+                                        </label>
+                                        <input type="text" name="state" id="inputState" class="field form-control" placeholder="{$LANG.orderForm.state}" value="{$clientsdetails.state}">
+                                    </div>
+                                </div>
+                                <div class="col-sm-3">
+                                    <div class="form-group prepend-icon">
+                                        <label for="inputPostcode" class="field-icon">
+                                            <i class="fas fa-certificate"></i>
+                                        </label>
+                                        <input type="text" name="postcode" id="inputPostcode" class="field form-control" placeholder="{$LANG.orderForm.postcode}" value="{$clientsdetails.postcode}">
+                                    </div>
+                                </div>
+                                <div class="col-sm-12">
+                                    <div class="form-group prepend-icon">
+                                        <label for="inputCountry" class="field-icon" id="inputCountryIcon">
+                                            <i class="fas fa-globe"></i>
+                                        </label>
+                                        <select name="country" id="inputCountry" class="field form-control">
+                                            {foreach $countries as $countrycode => $countrylabel}
+                                                <option value="{$countrycode}"{if (!$country && $countrycode == $defaultcountry) || $countrycode eq $country} selected{/if}>
+                                                    {$countrylabel}
+                                                </option>
+                                            {/foreach}
+                                        </select>
+                                    </div>
+                                </div>
+                                {if $showTaxIdField}
+                                    <div class="col-sm-12">
+                                        <div class="form-group prepend-icon">
+                                            <label for="inputTaxId" class="field-icon">
+                                                <i class="fas fa-building"></i>
+                                            </label>
+                                            <input type="text" name="tax_id" id="inputTaxId" class="field form-control" placeholder="{$taxLabel} ({$LANG.orderForm.optional})" value="{$clientsdetails.tax_id}">
+                                        </div>
+                                    </div>
+                                {/if}
+                            </div>
+                        </div>
+
+                        {if $customfields}
+                            <h4>{$LANG.orderadditionalrequiredinfo}</h4>
+                            <div class="TM-card">
+                                <div class="row">
+                                    {foreach from=$customfields key=num item=customfield}
+                                        <div class="col-sm-12">
+                                            <div class="form-group">
+                                                {if $customfield.type eq 'tickbox'}
+                                                    <label class=checkbox-inline" for="customfield{$customfield.id}">
+                                                        {$customfield.input}
+                                                        {$customfield.name}
+                                                        </lable>
+                                                        {if $customfield.description}<span class="field-help-text">{$customfield.description}</span>{/if}
+                                                    {else}
+                                                        <label for="customfield{$customfield.id}">{$customfield.name}</label>
+                                                        {if $customfield.type eq "link"}
+                                                            <div class="input-group">
+                                                                <span class="input-group-addon" id="customfield{$customfield.id}"><i class="fas fa-link"></i></span>
+                                                                    {$customfield.input}
+                                                            </div>
+                                                        {else}
+                                                            {$customfield.input}
+                                                        {/if}
+                                                        {if $customfield.description}<span class="field-help-text">{$customfield.description}</span>{/if}
+                                                    {/if}
+                                            </div>
+                                        </div>
+                                    {/foreach}
+                                </div>
+                            </div>
+                        {/if}
+                    </div>
+
+                    {if $domainsinorder}
+
+                        <h4>{$LANG.domainregistrantinfo}</h4>
+                        <p class="small text-muted">{$LANG.orderForm.domainAlternativeContact}</p>
+
+
+                        <div class="row margin-bottom">
+                            <div class="col-sm-12">
+                                <select name="contact" id="inputDomainContact" class="field form-control">
+                                    <option value="">{$LANG.usedefaultcontact}</option>
+                                    {foreach $domaincontacts as $domcontact}
+                                        <option value="{$domcontact.id}"{if $contact == $domcontact.id} selected{/if}>
+                                            {$domcontact.name}
+                                        </option>
+                                    {/foreach}
+                                    <option value="addingnew"{if $contact == "addingnew"} selected{/if}>
+                                        {$LANG.clientareanavaddcontact}...
+                                    </option>
+                                </select>
+                            </div>
+                        </div>
+                        <div class="TM-card{if $contact neq "addingnew"} w-hidden{/if}">
+                            <div class="row" id="domainRegistrantInputFields">
+                                <div class="col-sm-6">
+                                    <div class="form-group prepend-icon">
+                                        <label for="inputDCFirstName" class="field-icon">
+                                            <i class="fas fa-user"></i>
+                                        </label>
+                                        <input type="text" name="domaincontactfirstname" id="inputDCFirstName" class="field form-control" placeholder="{$LANG.orderForm.firstName}" value="{$domaincontact.firstname}">
+                                    </div>
+                                </div>
+                                <div class="col-sm-6">
+                                    <div class="form-group prepend-icon">
+                                        <label for="inputDCLastName" class="field-icon">
+                                            <i class="fas fa-user"></i>
+                                        </label>
+                                        <input type="text" name="domaincontactlastname" id="inputDCLastName" class="field form-control" placeholder="{$LANG.orderForm.lastName}" value="{$domaincontact.lastname}">
+                                    </div>
+                                </div>
+                                <div class="col-sm-6">
+                                    <div class="form-group prepend-icon">
+                                        <label for="inputDCEmail" class="field-icon">
+                                            <i class="fas fa-envelope"></i>
+                                        </label>
+                                        <input type="email" name="domaincontactemail" id="inputDCEmail" class="field form-control" placeholder="{$LANG.orderForm.emailAddress}" value="{$domaincontact.email}">
+                                    </div>
+                                </div>
+                                <div class="col-sm-6">
+                                    <div class="form-group prepend-icon">
+                                        <label for="inputDCPhone" class="field-icon">
+                                            <i class="fas fa-phone"></i>
+                                        </label>
+                                        <input type="tel" name="domaincontactphonenumber" id="inputDCPhone" class="field form-control" placeholder="{$LANG.orderForm.phoneNumber}" value="{$domaincontact.phonenumber}">
+                                    </div>
+                                </div>
+                                <div class="col-sm-12">
+                                    <div class="form-group prepend-icon">
+                                        <label for="inputDCCompanyName" class="field-icon">
+                                            <i class="fas fa-building"></i>
+                                        </label>
+                                        <input type="text" name="domaincontactcompanyname" id="inputDCCompanyName" class="field form-control" placeholder="{$LANG.orderForm.companyName} ({$LANG.orderForm.optional})" value="{$domaincontact.companyname}">
+                                    </div>
+                                </div>
+                                <div class="col-sm-12">
+                                    <div class="form-group prepend-icon">
+                                        <label for="inputDCAddress1" class="field-icon">
+                                            <i class="fas fa-building"></i>
+                                        </label>
+                                        <input type="text" name="domaincontactaddress1" id="inputDCAddress1" class="field form-control" placeholder="{$LANG.orderForm.streetAddress}" value="{$domaincontact.address1}">
+                                    </div>
+                                </div>
+                                <div class="col-sm-12">
+                                    <div class="form-group prepend-icon">
+                                        <label for="inputDCAddress2" class="field-icon">
+                                            <i class="fas fa-map-marker-alt"></i>
+                                        </label>
+                                        <input type="text" name="domaincontactaddress2" id="inputDCAddress2" class="field form-control" placeholder="{$LANG.orderForm.streetAddress2}" value="{$domaincontact.address2}">
+                                    </div>
+                                </div>
+                                <div class="col-sm-4">
+                                    <div class="form-group prepend-icon">
+                                        <label for="inputDCCity" class="field-icon">
+                                            <i class="fas fa-building"></i>
+                                        </label>
+                                        <input type="text" name="domaincontactcity" id="inputDCCity" class="field form-control" placeholder="{$LANG.orderForm.city}" value="{$domaincontact.city}">
+                                    </div>
+                                </div>
+                                <div class="col-sm-5">
+                                    <div class="form-group prepend-icon">
+                                        <label for="inputDCState" class="field-icon">
+                                            <i class="fas fa-map-signs"></i>
+                                        </label>
+                                        <input type="text" name="domaincontactstate" id="inputDCState" class="field form-control" placeholder="{$LANG.orderForm.state}" value="{$domaincontact.state}">
+                                    </div>
+                                </div>
+                                <div class="col-sm-3">
+                                    <div class="form-group prepend-icon">
+                                        <label for="inputDCPostcode" class="field-icon">
+                                            <i class="fas fa-certificate"></i>
+                                        </label>
+                                        <input type="text" name="domaincontactpostcode" id="inputDCPostcode" class="field form-control" placeholder="{$LANG.orderForm.postcode}" value="{$domaincontact.postcode}">
+                                    </div>
+                                </div>
+                                <div class="col-sm-12">
+                                    <div class="form-group prepend-icon">
+                                        <label for="inputDCCountry" class="field-icon" id="inputCountryIcon">
+                                            <i class="fas fa-globe"></i>
+                                        </label>
+                                        <select name="domaincontactcountry" id="inputDCCountry" class="field form-control">
+                                            {foreach $countries as $countrycode => $countrylabel}
+                                                <option value="{$countrycode}"{if (!$domaincontact.country && $countrycode == $defaultcountry) || $countrycode eq $domaincontact.country} selected{/if}>
+                                                    {$countrylabel}
+                                                </option>
+                                            {/foreach}
+                                        </select>
+                                    </div>
+                                </div>
+                                <div class="col-sm-12">
+                                    <div class="form-group prepend-icon">
+                                        <label for="inputDCTaxId" class="field-icon">
+                                            <i class="fas fa-building"></i>
+                                        </label>
+                                        <input type="text" name="domaincontacttax_id" id="inputDCTaxId" class="field form-control" placeholder="{$taxLabel} ({$LANG.orderForm.optional})" value="{$domaincontact.tax_id}">
+                                    </div>
+                                </div>
+                            </div>
+                        </div>
+
+                    {/if}
+
+                    {if !$loggedin}
+
+                        <div id="containerNewUserSecurity"{if (!$loggedin && $custtype eq "existing") || ($remote_auth_prelinked && !$securityquestions) } class="w-hidden"{/if}>
+
+                            <h4>{$LANG.orderForm.accountSecurity}</h4>
+
+                            <div class="TM-card">
+                                <div id="containerPassword" class="row{if $remote_auth_prelinked && $securityquestions} w-hidden{/if}">
+                                    <div id="passwdFeedback" style="display: none;" class="alert alert-info text-center col-sm-12"></div>
+                                    <div class="col-sm-6">
+                                        <div class="form-group prepend-icon">
+                                            <label for="inputNewPassword1" class="field-icon">
+                                                <i class="fas fa-lock"></i>
+                                            </label>
+                                            <input type="password" name="password" id="inputNewPassword1" data-error-threshold="{$pwStrengthErrorThreshold}" data-warning-threshold="{$pwStrengthWarningThreshold}" class="field form-control" placeholder="{$LANG.clientareapassword}"{if $remote_auth_prelinked} value="{$password}"{/if}>
+                                        </div>
+                                    </div>
+                                    <div class="col-sm-6">
+                                        <div class="form-group prepend-icon">
+                                            <label for="inputNewPassword2" class="field-icon">
+                                                <i class="fas fa-lock"></i>
+                                            </label>
+                                            <input type="password" name="password2" id="inputNewPassword2" class="field form-control" placeholder="{$LANG.clientareaconfirmpassword}"{if $remote_auth_prelinked} value="{$password}"{/if}>
+                                        </div>
+                                    </div>
+                                    <div class="col-sm-6">
+                                        <button type="button" class="btn btn-default btn-sm generate-password" data-targetfields="inputNewPassword1,inputNewPassword2">
+                                            {$LANG.generatePassword.btnLabel}
+                                        </button>
+                                    </div>
+                                    <div class="col-sm-6">
+                                        <div class="password-strength-meter">
+                                            <div class="progress">
+                                                <div class="progress-bar progress-bar-success progress-bar-striped" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" id="passwordStrengthMeterBar">
+                                                </div>
+                                            </div>
+                                            <p class="text-center small text-muted" id="passwordStrengthTextLabel">{$LANG.pwstrength}: {$LANG.pwstrengthenter}</p>
+                                        </div>
+                                    </div>
+                                </div>
+                            </div>
+                            {if $securityquestions}
+                                <div class="TM-card">
+                                    <div class="row">
+                                        <div class="col-sm-12">
+                                            <div class="form-group">
+                                                <select name="securityqid" id="inputSecurityQId" class="field form-control">
+                                                    <option value="">{$LANG.clientareasecurityquestion}</option>
+                                                    {foreach $securityquestions as $question}
+                                                        <option value="{$question.id}"{if $question.id eq $securityqid} selected{/if}>
+                                                            {$question.question}
+                                                        </option>
+                                                    {/foreach}
+                                                </select>
+                                            </div>
+                                        </div>
+                                        <div class="col-sm-12">
+                                            <div class="form-group prepend-icon">
+                                                <label for="inputSecurityQAns" class="field-icon">
+                                                    <i class="fas fa-lock"></i>
+                                                </label>
+                                                <input type="password" name="securityqans" id="inputSecurityQAns" class="field form-control" placeholder="{$LANG.clientareasecurityanswer}">
+                                            </div>
+                                        </div>
+                                    </div>
+                                </div>
+                            {/if}
+
+                        </div>
+
+                    {/if}
+
+                    {foreach $hookOutput as $output}
+                        <div style="margin:60px 0;">
+                            {$output}
+                        </div>
+                    {/foreach}
+
+
+                    <h4>{$LANG.orderForm.paymentDetails}</h4>
+                    <p class="small text-muted margin-bottom">{$LANG.orderForm.preferredPaymentMethod}</p>
+                    {*
+                    <div class="alert alert-success text-center large-text" role="alert" id="totalDueToday">
+			{$LANG.ordertotalduetoday}: &nbsp; <strong id="totalCartPrice">{$total}</strong>
+                    </div>
+                    *}
+
+					<div id="applyCreditContainer" class="apply-credit-container{if !$canUseCreditOnCheckout} w-hidden{/if}" data-apply-credit="{$applyCredit}">
+						<p>{lang key='cart.availableCreditBalance' amount=$creditBalance}</p>
+
+						<label class="radio">
+							<input id="useCreditOnCheckout" type="radio" name="applycredit" value="1"{if $applyCredit} checked{/if}>
+							<span id="spanFullCredit"{if !($creditBalance->toNumeric() >= $total->toNumeric())} class="w-hidden"{/if}>
+								{lang key='cart.applyCreditAmountNoFurtherPayment' amount=$total}
+							</span>
+							<span id="spanUseCredit"{if $creditBalance->toNumeric() >= $total->toNumeric()} class="w-hidden"{/if}>
+								{lang key='cart.applyCreditAmount' amount=$creditBalance}
+							</span>
+						</label>
+						<label class="radio">
+							<input id="skipCreditOnCheckout" type="radio" name="applycredit" value="0"{if !$applyCredit} checked{/if}>
+							{lang key='cart.applyCreditSkip' amount=$creditBalance}
+						</label>
+					</div>
+
+                    {if !$inExpressCheckout}
+                        <div id="paymentGatewaysContainer" class="form-group">
+                            <div class="text-center">
+                                {foreach $gateways as $gateway}
+                                    {if $clientsdetails.groupid ne "2" && $gateway.sysname eq "swiss_slip"}
+                                	{continue}
+                                    {/if}
+                            	    <label class="radio-inline">
+                                    	<input type="radio" name="paymentmethod" value="{$gateway.sysname}"  data-payment-type="{$gateway.payment_type}"  data-show-local="{$gateway.show_local_cards}"
+                                	    data-remote-inputs="{$gateway.uses_remote_inputs}"
+                                    	    class="payment-methods{if $gateway.type eq "CC"} is-credit-card{/if}"
+                                            {if $selectedgateway eq $gateway.sysname} checked{/if}
+                                         />
+                                    	{$gateway.name}
+                                	</label>
+                                {/foreach}
+                            </div>
+                        </div>
+
+                        <div class="alert alert-danger text-center gateway-errors w-hidden"></div>
+
+                        <div class="clearfix"></div>
+
+                        <div class="cc-input-container{if $selectedgatewaytype neq "CC"} w-hidden{/if}" id="creditCardInputFields">
+                            {if $client}
+								<div id="existingCardsContainer" class="existing-cc-grid">
+									{include file="orderforms/{$carttpl}/includes/existing-paymethods.tpl"}
+								</div>
+                            {/if}
+                            <div class="row cvv-input" id="existingCardInfo">
+                                <div class="col-lg-3 col-sm-4">
+                                    <div class="form-group prepend-icon">
+                                        <label for="inputCardCVV2" class="field-icon">
+                                            <i class="fas fa-barcode"></i>
+                                        </label>
+                                        <div class="input-group">
+                                            <input type="tel" name="cccvv" id="inputCardCVV2" class="field form-control" placeholder="{$LANG.creditcardcvvnumbershort}" autocomplete="cc-cvc">
+                                            <span class="input-group-btn input-group-append">
+                                                <button type="button" class="btn btn-default" data-toggle="popover" data-placement="bottom" data-content="<img src='{$BASE_PATH_IMG}/ccv.gif' width='210' />">
+                                                    ?
+                                                </button>
+                                            </span>
+                                        </div>
+                                        <span class="field-error-msg">{lang key="paymentMethodsManage.cvcNumberNotValid"}</span>
+                                    </div>
+                                </div>
+                            </div>
+
+                            <ul>
+                                <li>
+                                    <label class="radio-inline">
+                                        <input type="radio" name="ccinfo" value="new" id="new" {if !$client || $client->payMethods->count() === 0} checked="checked"{/if} />
+                                        &nbsp;
+                                        {lang key='creditcardenternewcard'}
+                                    </label>
+                                </li>
+                            </ul>
+
+                            <div class="row" id="newCardInfo">
+                                <div id="cardNumberContainer" class="col-sm-6 new-card-container">
+                                    <div class="form-group prepend-icon">
+                                        <label for="inputCardNumber" class="field-icon">
+                                            <i class="fas fa-credit-card"></i>
+                                        </label>
+                                        <input type="tel" name="ccnumber" id="inputCardNumber" class="field cc-number-field" placeholder="{$LANG.orderForm.cardNumber}" autocomplete="cc-number" data-message-unsupported="{lang key='paymentMethodsManage.unsupportedCardType'}" data-message-invalid="{lang key='paymentMethodsManage.cardNumberNotValid'}" data-supported-cards="{$supportedCardTypes}" />
+                                        <span class="field-error-msg"></span>
+                                    </div>
+                                </div>
+                                <div class="col-sm-3 new-card-container">
+                                    <div class="form-group prepend-icon">
+                                        <label for="inputCardExpiry" class="field-icon">
+                                            <i class="fas fa-calendar-alt"></i>
+                                        </label>
+                                        <input type="tel" name="ccexpirydate" id="inputCardExpiry" class="field form-control" placeholder="MM / YY{if $showccissuestart} ({$LANG.creditcardcardexpires}){/if}" autocomplete="cc-exp">
+                                        <span class="field-error-msg">{lang key="paymentMethodsManage.expiryDateNotValid"}</span>
+                                    </div>
+                                </div>
+                                <div class="col-sm-3" id="cvv-field-container">
+                                    <div class="form-group prepend-icon">
+                                        <label for="inputCardCVV" class="field-icon">
+                                            <i class="fas fa-barcode"></i>
+                                        </label>
+                                        <div class="input-group">
+                                            <input type="tel" name="cccvv" id="inputCardCVV" class="field form-control" placeholder="{$LANG.creditcardcvvnumbershort}" autocomplete="cc-cvc">
+                                            <span class="input-group-btn input-group-append">
+                                                <button type="button" class="btn btn-default" data-toggle="popover" data-placement="bottom" data-content="<img src='{$BASE_PATH_IMG}/ccv.gif' width='210' />">
+                                                    ?
+                                                </button>
+                                            </span><br>
+                                        </div>
+                                        <span class="field-error-msg">{lang key="paymentMethodsManage.cvcNumberNotValid"}</span>
+                                    </div>
+                                </div>
+                                {if $showccissuestart}
+                                    <div class="col-sm-3 col-sm-offset-6 new-card-container">
+                                        <div class="form-group prepend-icon">
+                                            <label for="inputCardStart" class="field-icon">
+                                                <i class="far fa-calendar-check"></i>
+                                            </label>
+                                            <input type="tel" name="ccstartdate" id="inputCardStart" class="field form-control" placeholder="MM / YY ({$LANG.creditcardcardstart})" autocomplete="cc-exp">
+                                        </div>
+                                    </div>
+                                    <div class="col-sm-3 new-card-container">
+                                        <div class="form-group prepend-icon">
+                                            <label for="inputCardIssue" class="field-icon">
+                                                <i class="fas fa-asterisk"></i>
+                                            </label>
+                                            <input type="tel" name="ccissuenum" id="inputCardIssue" class="field form-control" placeholder="{$LANG.creditcardcardissuenum}">
+                                        </div>
+                                    </div>
+                                {/if}
+                            </div>
+                            <div id="newCardSaveSettings">
+                                <div class="row form-group new-card-container">
+                                    <div id="inputDescriptionContainer" class="col-md-6">
+                                        <div class="prepend-icon">
+                                            <label for="inputDescription" class="field-icon">
+                                                <i class="fas fa-pencil"></i>
+                                            </label>
+                                            <input type="text" class="field form-control" id="inputDescription" name="ccdescription" autocomplete="off" value="" placeholder="{$LANG.paymentMethods.descriptionInput} {$LANG.paymentMethodsManage.optional}" />
+                                        </div>
+                                    </div>
+                                    {if $allowClientsToRemoveCards}
+                                        <div id="inputNoStoreContainer" class="col-md-6" style="line-height: 32px;">
+                                            <input type="hidden" name="nostore" value="1">
+                                            <input type="checkbox" class="toggle-switch-success no-icheck" data-size="mini" checked="checked" name="nostore" id="inputNoStore" value="0" data-on-text="{lang key='yes'}" data-off-text="{lang key='no'}">
+                                            <label for="inputNoStore" class="checkbox-inline no-padding">
+                                                &nbsp;&nbsp;
+                                                {$LANG.creditCardStore}
+                                            </label>
+                                        </div>
+                                    {/if}
+                                </div>
+                            </div>
+                        </div>
+                    {else}
+                        {if $expressCheckoutOutput}
+                            {$expressCheckoutOutput}
+                        {else}
+                            <p align="center">
+                                {lang key='paymentPreApproved' gateway=$expressCheckoutGateway}
+                            </p>
+                        {/if}
+                    {/if}
+
+                    {if $shownotesfield}
+                        <h4>{$LANG.orderForm.additionalNotes}</h4>
+
+                        <div class="TM-card">
+                            <div class="row">
+                                <div class="col-sm-12">
+                                    <div class="form-group">
+                                        <textarea name="notes" class="field form-control" rows="4" placeholder="{$LANG.ordernotesdescription}">{$orderNotes}</textarea>
+                                    </div>
+                                </div>
+                            </div>
+                        </div>
+
+                    {/if}
+
+                    {if $showMarketingEmailOptIn}
+                        <h4>{lang key='emailMarketing.joinOurMailingList'}</h4>
+                        <div class="TM-card">
+                            <p>{$marketingEmailOptInMessage}</p>
+                            <div class="panel panel-switch {if $marketingEmailOptIn} checked{/if}">
+                                <div class="panel-body">
+                                    <span class="switch-label">{lang key='emailMarketing.joinOurMailingList'}: </span>
+                                    <label class="switch switch--text">
+                                        <input class="no-icheck switch__checkbox" type="checkbox" name="marketingoptin" value="1"{if $marketingEmailOptIn} checked{/if}>
+                                        <span class="switch__container"><span class="switch__handle"></span></span>
+                                    </label> 
+                                </div>
+                            </div>
+                        </div>
+                    {/if}
+
+
+                    <div class="text-center">
+                        {if $accepttos}
+                            <p>
+                                <label class="checkbox-inline">
+                                    <input type="checkbox" name="accepttos" id="accepttos" />
+                                    &nbsp;
+                                    {$LANG.ordertosagreement}
+                                    <a href="{$tosurl}" target="_blank">{$LANG.ordertos}</a>
+                                </label>
+                            </p>
+                        {/if}
+						
+						{if $captcha}
+							<div class="text-center margin-bottom">
+								{include file="$template/includes/captcha.tpl"}
+							</div>
+						{/if}
+
+                        <button type="submit"
+                                id="btnCompleteOrder"
+                                class="margin-bottom btn btn-primary btn-lg disable-on-click spinner-on-click{if $captcha}{$captcha->getButtonClass($captchaForm)}{/if}"
+                                {if $cartitems==0}disabled="disabled"{/if}
+                                >
+                    {if $inExpressCheckout}{$LANG.confirmAndPay}{else}{$LANG.completeorder}{/if}
+                    &nbsp;<i class="fas fa-arrow-circle-right"></i>
+                </button>
+            </div>
+        </form>
+
+    </div>
+</div>
+</div>
+
+<script type="text/javascript" src="{$BASE_PATH_JS}/jquery.payment.js"></script>
+
+
+
+{/if}
+
+

+ 3 - 0
common.tpl

@@ -0,0 +1,3 @@
+<link rel="stylesheet" type="text/css" href="{$WEB_ROOT}/templates/orderforms/{$carttpl}/css/all.min.css?v={$versionHash}" />
+<link rel="stylesheet" type="text/css" href="{$WEB_ROOT}/templates/orderforms/{$carttpl}/css/style.css" />
+<script type="text/javascript" src="{$WEB_ROOT}/templates/orderforms/{$carttpl}/js/scripts.min.js?v={$versionHash}"></script>

+ 58 - 0
complete.tpl

@@ -0,0 +1,58 @@
+{include file="orderforms/{$carttpl}/common.tpl"}
+
+{if file_exists("templates/orderforms/{$carttpl}/layouts/head.tpl")}
+	{include file="templates/orderforms/{$carttpl}/layouts/head.tpl"}
+{/if}
+
+<div id="order-standard_cart">
+	<div class="alert-lg no-data">
+	
+		<div class="text">
+			<h4>{$LANG.orderreceived}</h4>
+			
+			<div class="alert alert-info order-confirmation">
+				 {$LANG.ordernumberis} <span>{$ordernumber}</span>
+			</div>
+			<p>{$LANG.orderfinalinstructions}</p>
+
+            {if $expressCheckoutInfo}
+                <div class="alert alert-info text-center">
+                    {$expressCheckoutInfo}
+                </div>
+            {elseif $expressCheckoutError}
+                <div class="alert alert-danger text-center">
+                    {$expressCheckoutError}
+                </div>
+            {elseif $invoiceid && !$ispaid}
+                <div class="alert alert-warning text-center">
+                    {$LANG.ordercompletebutnotpaid}
+                    <br /><br />
+                    <a href="viewinvoice.php?id={$invoiceid}" target="_blank" class="alert-link">
+                        {$LANG.invoicenumber}{$invoiceid}
+                    </a>
+                </div>
+            {/if}
+		</div>
+		
+		{foreach $addons_html as $addon_html}
+			<div class="order-confirmation-addon-output">
+				{$addon_html}
+			</div>
+		{/foreach}
+
+		{if $ispaid}
+		<!-- Enter any HTML code which should be displayed when a user has completed checkout here -->
+		<!-- Common uses of this include conversion and affiliate tracking scripts -->
+		{/if}
+
+            
+		<a href="clientarea.php" class="btn btn-default">
+			{$LANG.orderForm.continueToClientArea}
+		</a>
+            
+	</div>
+</div>
+
+{if file_exists("templates/orderforms/{$carttpl}/layouts/foot.tpl")}
+	{include file="templates/orderforms/{$carttpl}/layouts/foot.tpl"}
+{/if}

+ 307 - 0
configuredomains.tpl

@@ -0,0 +1,307 @@
+{if $smarty.post.onepageorder == "1"}
+
+    {if $errormessage}
+        <div class="errorbox" style="display:block;">
+            {$errormessage|replace:'<li>':' &nbsp;#&nbsp; '} &nbsp;#&nbsp;
+        </div>
+        <br />
+    {/if}
+
+    {foreach $domains as $num => $domain}
+        <div class="configdrow" data-domain="{$domain.domain}">
+        {if $domain.dnsmanagement || $domain.emailforwarding || $domain.idprotection}
+            <h4>{$domain.domain} - {$LANG.cartaddons}</h4>
+            <div class="row">
+                {if $domain.dnsmanagement}
+                    <div class="col-sm-12"">
+                        <div class="form-group">
+                            <label for="dnsmanagement{$num}">
+                                <input type="checkbox" class="no-icheck cros-checkbox" id="dnsmanagement{$num}" name="dnsmanagement[{$num}]"{if $domain.dnsmanagementselected} checked{/if} onclick="addToCart();"/>
+                                <span class="pcb"><span class="addons"><span class="addon-name">{$LANG.domaindnsmanagement}</span> - ({$domain.dnsmanagementprice}) {$domain.regperiod} {$LANG.orderyears}<br />{$LANG.domainaddonsdnsmanagementinfo}</span></span>
+                            </label>
+                        </div>
+                    </div>
+                {/if}
+
+                {if $domain.emailforwarding}
+                    <div class="col-sm-12">
+                        <div class="form-group">
+                            <label for="emailforwarding{$num}">
+                                <input type="checkbox" class="no-icheck cros-checkbox" id="emailforwarding{$num}" name="emailforwarding[{$num}]"{if $domain.emailforwardingselected} checked{/if} onclick="addToCart();"/>
+                                <span class="pcb"><span class="addons"><span class="addon-name">{$LANG.domainemailforwarding}</span> - ({$domain.emailforwardingprice}) {$domain.regperiod} {$LANG.orderyears}<br />{$LANG.domainaddonsemailforwardinginfo}</span></span>
+                            </label>
+                        </div>
+                    </div>
+                {/if}
+                {if $domain.idprotection}
+                    <div class="col-sm-12">
+                        <div class="form-group">
+                            <label for="idprotection{$num}">
+                                <input type="checkbox" class="no-icheck cros-checkbox" id="idprotection{$num}" name="idprotection[{$num}]"{if $domain.idprotectionselected} checked{/if} onclick="addToCart();"/>
+                                <span class="pcb"><span class="addons"><span class="addon-name">{$LANG.domainidprotection}</span> - ({$domain.idprotectionprice}) {$domain.regperiod} {$LANG.orderyears}<br />{$LANG.domainaddonsidprotectioninfo}</span></span>
+                            </label>
+
+                        </div>
+                    </div>
+                {/if}
+            </div>
+
+        {/if}
+
+        {foreach from=$domain.fields key=domainfieldname item=domainfield}
+            <div class="row">
+                <div class="col-md-4">{$domainfieldname}:</div>
+                <div class="col-md-8">{$domainfield|replace:'class':'onblur="addToCart();" class'}</div>
+            </div>
+        {/foreach}
+        </div>
+    {/foreach}
+	
+    {if $atleastonenohosting}
+		{if $themesettings.orderform.opcnodns neq "1"}
+			<h4>{$LANG.domainnameservers}</h4>
+			<p>{$LANG.cartnameserversdesc}</p>
+			<div class="row">
+				<div class="col-md-6">
+					<div class="form-group">
+						<label for="inputNs1" class="control-label">{$LANG.domainnameserver1}</label>
+						<input type="text" class="form-control" id="inputNs1" name="domainns1" value="{$domainns1}" onblur="addToCart();"/>
+					</div>
+				</div>
+				<div class="col-md-6">
+					<div class="form-group">
+						<label for="inputNs2" class="control-label">{$LANG.domainnameserver2}</label>
+						<input type="text" class="form-control" id="inputNs2" name="domainns2" value="{$domainns2}" onblur="addToCart();" />
+					</div>
+				</div>  
+				<div class="col-md-6">
+					<div class="form-group">
+						<label for="inputNs3" class="control-label">{$LANG.domainnameserver3}</label>
+						<input type="text" class="form-control" id="inputNs3" name="domainns3" value="{$domainns3}" onblur="addToCart();" />
+					</div>
+				</div>
+				<div class="col-md-6">
+					<div class="form-group">
+						<label for="inputNs1" class="control-label">{$LANG.domainnameserver4}</label>
+						<input type="text" class="form-control" id="inputNs4" name="domainns4" value="{$domainns4}" onblur="addToCart();" />
+					</div>
+				</div>
+				<div class="col-md-6">
+					<div class="form-group">
+						<label for="inputNs5" class="control-label">{$LANG.domainnameserver5}</label>
+						<input type="text" class="form-control" id="inputNs5" name="domainns5" value="{$domainns5}" onblur="addToCart();" />
+					</div>
+				</div>
+			</div>
+		{/if}
+
+    {/if}
+
+
+{else}
+
+    {include file="orderforms/{$carttpl}/common.tpl"}
+
+    <script>
+        var _localLang = {
+            'addToCart': '{$LANG.orderForm.addToCart|escape}',
+            'addedToCartRemove': '{$LANG.orderForm.addedToCartRemove|escape}'
+        }
+    </script>
+
+    {if file_exists("templates/orderforms/{$carttpl}/layouts/head.tpl")}
+        {include file="templates/orderforms/{$carttpl}/layouts/head.tpl"}
+    {/if}
+
+    <div id="order-standard_cart">
+
+        <div class="row">
+
+            <div class="col-md-12">
+                {if file_exists("templates/orderforms/{$carttpl}/layouts/head.tpl")}
+                {else}
+                    <div class="header-lined">
+                        <h1>{$LANG.cartdomainsconfig}</h1>
+                    </div>
+                {/if}
+
+                {* {include file="orderforms/{$carttpl}/sidebar-categories-collapsed.tpl"} *}
+
+            </div>
+
+            <div class="col-md-12">
+
+
+
+                <form method="post" action="{$smarty.server.PHP_SELF}?a=confdomains" id="frmConfigureDomains">
+                    <input type="hidden" name="update" value="true" />
+
+                    {if file_exists("templates/orderforms/$carttpl/layouts/head.tpl")}
+                    {else}
+                        <h5 class="hidden-xs">{$LANG.orderForm.reviewDomainAndAddons}</h5>
+                    {/if}
+                    <p class="visible-xs">{$LANG.orderForm.reviewDomainAndAddons}</p>
+
+
+                    {if $errormessage}
+                        <div class="alert alert-danger" role="alert">
+                            <p>{$LANG.orderForm.correctErrors}:</p>
+                            <ul>
+                                {$errormessage}
+                            </ul>
+                        </div>
+                    {/if}
+
+                    {foreach $domains as $num => $domain}
+
+                        <div class="sub-heading">
+                            <span>{$domain.domain}</span>
+                        </div>
+
+                        <div class="row">
+                            <div class="col-sm-12">
+                                <div class="form-group">
+                                    <label>{$LANG.orderregperiod}:</label>
+                                    {$domain.regperiod} <strong>{$LANG.orderyears}</strong> {if $domain.hosting}{else}<a href="cart.php" style="color:#cc0000;">[{$LANG.cartdomainsnohosting}]</a>{/if}
+                                </div>
+                            </div>
+                        </div>
+
+
+                        <div class="row">
+                            {if $domain.eppenabled}
+                                <div class="col-sm-12">
+                                    <div class="form-group prepend-icon">
+                                        <input type="text" name="epp[{$num}]" id="inputEppcode{$num}" value="{$domain.eppvalue}" class="field" placeholder="{$LANG.domaineppcode}" />
+                                        <label for="inputEppcode{$num}" class="field-icon">
+                                            <i class="fas fa-lock"></i>
+                                        </label>
+                                        <span class="field-help-text">
+                                            {$LANG.domaineppcodedesc}
+                                        </span>
+                                    </div>
+                                </div>
+                            {/if}
+                        </div>
+
+                        {if $domain.dnsmanagement || $domain.emailforwarding || $domain.idprotection}
+
+                            <div class="row">
+                                <div class="col-md-12">
+                                    <div class="row addon-products">
+
+                                        {if $domain.dnsmanagement}
+                                            <div class="col-md-{math equation="12 / numAddons" numAddons=$domain.addonsCount} mb-3">
+                                                <div class="panel panel-default panel-addon{if $domain.dnsmanagementselected} panel-addon-selected{/if}">
+                                                    <div class="panel-body">
+                                                        <input type="checkbox" name="dnsmanagement[{$num}]"{if $domain.dnsmanagementselected} checked{/if} />
+                                                        <span class="panel-addon-name">{$LANG.domaindnsmanagement}</span>
+                                                        <span class="panel-addon-price">{$domain.dnsmanagementprice} / {$domain.regperiod} {$LANG.orderyears}</span>
+                                                        <p>{$LANG.domainaddonsdnsmanagementinfo}</p>
+                                                    </div>
+                                                </div>
+                                            </div>
+                                        {/if}
+
+                                        {if $domain.idprotection}
+                                            <div class="col-md-{math equation="12 / numAddons" numAddons=$domain.addonsCount} mb-3">
+                                                <div class="panel panel-default panel-addon{if $domain.idprotectionselected} panel-addon-selected{/if}">
+                                                    <div class="panel-body">
+                                                        <input type="checkbox" name="idprotection[{$num}]"{if $domain.idprotectionselected} checked{/if} />
+                                                        <span class="panel-addon-name">{$LANG.domainidprotection}</span>
+                                                        <span class="panel-addon-price">{$domain.idprotectionprice} / {$domain.regperiod} {$LANG.orderyears}</span>
+                                                        <p>{$LANG.domainaddonsidprotectioninfo}</p>
+                                                    </div>
+                                                </div>
+                                            </div>
+                                        {/if}
+
+                                        {if $domain.emailforwarding}
+                                            <div class="col-md-{math equation="12 / numAddons" numAddons=$domain.addonsCount} mb-3">
+                                                <div class="panel panel-default panel-addon{if $domain.emailforwardingselected} panel-addon-selected{/if}">
+                                                    <div class="panel-body">
+                                                        <input type="checkbox" name="emailforwarding[{$num}]"{if $domain.emailforwardingselected} checked{/if} />
+                                                        <span class="panel-addon-name">{$LANG.domainemailforwarding}</span>
+                                                        <span class="panel-addon-price">{$domain.emailforwardingprice} / {$domain.regperiod} {$LANG.orderyears}</span>
+                                                        <p>{$LANG.domainaddonsemailforwardinginfo}</p>
+                                                    </div>
+                                                </div>
+                                            </div>
+                                        {/if}
+
+                                    </div>
+                                </div>
+                            </div>
+                        {/if}
+                        {foreach from=$domain.fields key=domainfieldname item=domainfield}
+                            <div class="form-group row">
+                                <div class="col-md-4">{$domainfieldname}:</div>
+                                <div class="col-md-8">{$domainfield}</div>
+                            </div>
+                        {/foreach}
+
+                    {/foreach}
+
+                    {if $atleastonenohosting}
+
+                        <div class="sub-heading">
+                            <span>{$LANG.domainnameservers}</span>
+                        </div>
+
+                        <p>{$LANG.cartnameserversdesc}</p>
+
+                        <div class="TM-card">
+                            <div class="row">
+                                <div class="col-md-4">
+                                    <div class="form-group">
+                                        <label for="inputNs1">{$LANG.domainnameserver1}</label>
+                                        <input type="text" class="form-control" id="inputNs1" name="domainns1" value="{$domainns1}" />
+                                    </div>
+                                </div>
+                                <div class="col-md-4">
+                                    <div class="form-group">
+                                        <label for="inputNs2">{$LANG.domainnameserver2}</label>
+                                        <input type="text" class="form-control" id="inputNs2" name="domainns2" value="{$domainns2}" />
+                                    </div>
+                                </div>
+                                <div class="col-md-4">
+                                    <div class="form-group">
+                                        <label for="inputNs3">{$LANG.domainnameserver3}</label>
+                                        <input type="text" class="form-control" id="inputNs3" name="domainns3" value="{$domainns3}" />
+                                    </div>
+                                </div>
+                                <div class="col-md-4">
+                                    <div class="form-group">
+                                        <label for="inputNs1">{$LANG.domainnameserver4}</label>
+                                        <input type="text" class="form-control" id="inputNs4" name="domainns4" value="{$domainns4}" />
+                                    </div>
+                                </div>
+                                <div class="col-md-4">
+                                    <div class="form-group">
+                                        <label for="inputNs5">{$LANG.domainnameserver5}</label>
+                                        <input type="text" class="form-control" id="inputNs5" name="domainns5" value="{$domainns5}" />
+                                    </div>
+                                </div>
+                            </div>
+                        </div>
+
+                    {/if}
+
+                    <div class="text-center padding-all">
+                        <button type="submit" class="btn btn-primary btn-lg">
+                            {$LANG.continue}
+                            &nbsp;<i class="fas fa-arrow-circle-right"></i>
+                        </button>
+                    </div>
+
+                </form>
+            </div>
+        </div>
+    </div>
+
+    {if file_exists("templates/orderforms/{$carttpl}/layouts/foot.tpl")}
+        {include file="templates/orderforms/{$carttpl}/layouts/foot.tpl"}
+    {/if}
+
+
+{/if}

+ 456 - 0
configureproduct.tpl

@@ -0,0 +1,456 @@
+{debug}
+{include file="orderforms/{$carttpl}/common.tpl"}
+
+<script>
+var _localLang = {
+    'addToCart': '{$LANG.orderForm.addToCart|escape}',
+    'addedToCartRemove': '{$LANG.orderForm.addedToCartRemove|escape}'
+}
+</script>
+
+{if file_exists("templates/orderforms/{$carttpl}/layouts/head.tpl")}
+	{include file="templates/orderforms/{$carttpl}/layouts/head.tpl"}
+{/if}
+
+<div id="order-standard_cart">
+
+    <div class="row">
+
+        <div class="col-md-12">
+			{if file_exists("templates/orderforms/{$carttpl}/layouts/head.tpl")}
+			{else}
+            <div class="header-lined">
+                <h1>{$LANG.orderconfigure}</h1>
+            </div>
+			{/if}
+			
+			{include file="orderforms/{$carttpl}/sidebar-categories-collapsed.tpl"}
+
+        </div>
+
+        <div class="col-md-12">
+
+            <form id="frmConfigureProduct">
+                <input type="hidden" name="configure" value="true" />
+                <input type="hidden" name="i" value="{$i}" />
+
+                <div class="row ajaxcart_cont">
+                    <div class="col-md-8 col-lg-9">
+
+                        <h3>{$LANG.orderForm.configureDesiredOptions}</h3>
+
+                        <div class="panel panel-default">
+							<div class="panel-body">
+								<p class="product-title"><strong><i>{$productinfo.group_name}</i> - {$productinfo.name}</strong></p>
+								<p>{$productinfo.description}</p>
+							</div>
+                        </div>
+
+                        <div class="alert alert-danger w-hidden" role="alert" id="containerProductValidationErrors">
+                            <p>{$LANG.orderForm.correctErrors}:</p>
+                            <ul id="containerProductValidationErrorsList"></ul>
+                        </div>
+
+                        {if $pricing.type eq "recurring"}
+                            <div class="field-container">
+                                <div class="form-group">
+                                    <label for="inputBillingcycle">{$LANG.cartchoosecycle}</label><br />
+                                    <select name="billingcycle" id="inputBillingcycle" class="form-control" onchange="{if $configurableoptions}updateConfigurableOptions({$i}, this.value);{else}recalctotals();{/if}">
+                                        {if $pricing.monthly}
+                                            <option value="monthly"{if $billingcycle eq "monthly"} selected{/if}>
+                                                {$pricing.monthly}
+                                            </option>
+                                        {/if}
+                                        {if $pricing.quarterly}
+                                            <option value="quarterly"{if $billingcycle eq "quarterly"} selected{/if}>
+                                                {$pricing.quarterly}
+                                            </option>
+                                        {/if}
+                                        {if $pricing.semiannually}
+                                            <option value="semiannually"{if $billingcycle eq "semiannually"} selected{/if}>
+                                                {$pricing.semiannually}
+                                            </option>
+                                        {/if}
+                                        {if $pricing.annually}
+                                            <option value="annually"{if $billingcycle eq "annually"} selected{/if}>
+                                                {$pricing.annually}
+                                            </option>
+                                        {/if}
+                                        {if $pricing.biennially}
+                                            <option value="biennially"{if $billingcycle eq "biennially"} selected{/if}>
+                                                {$pricing.biennially}
+                                            </option>
+                                        {/if}
+                                        {if $pricing.triennially}
+                                            <option value="triennially"{if $billingcycle eq "triennially"} selected{/if}>
+                                                {$pricing.triennially}
+                                            </option>
+                                        {/if}
+                                    </select>
+                                </div>
+                            </div>
+                        {/if}
+
+                        {if count($metrics) > 0}
+                            <div class="sub-heading">
+                                <span>{$LANG.metrics.title}</span>
+                            </div>
+
+                            <p>{$LANG.metrics.explanation}</p>
+
+                            <ul>
+                                {foreach $metrics as $metric}
+                                    <li>
+                                        {$metric.displayName}
+                                        -
+                                        {if count($metric.pricing) > 1}
+                                            {$LANG.metrics.startingFrom} {$metric.lowestPrice} / {if $metric.unitName}{$metric.unitName}{else}{$LANG.metrics.unit}{/if}
+                                            <button type="button" class="btn btn-default btn-sm" data-toggle="modal" data-target="#modalMetricPricing-{$metric.systemName}">
+                                                {$LANG.metrics.viewPricing}
+                                            </button>
+                                        {elseif count($metric.pricing) == 1}
+                                            {$metric.lowestPrice} / {if $metric.unitName}{$metric.unitName}{else}{$LANG.metrics.unit}{/if}
+                                            {if $metric.includedQuantity > 0} ({$metric.includedQuantity} {$LANG.metrics.includedNotCounted}){/if}
+                                        {/if}
+                                        {include file="$template/usagebillingpricing.tpl"}
+                                    </li>
+                                {/foreach}
+                            </ul>
+
+                            <br>
+                        {/if}
+
+                        {if $productinfo.type eq "server"}
+                            <div class="sub-heading">
+                                <span>{$LANG.cartconfigserver}</span>
+                            </div>
+
+                            <div class="field-container">
+
+                                <div class="row">
+                                    <div class="col-sm-6">
+                                        <div class="form-group">
+                                            <label for="inputHostname">{$LANG.serverhostname}</label>
+                                            <input type="text" name="hostname" class="form-control" id="inputHostname" value="{$server.hostname}" placeholder="servername.yourdomain.com">
+                                        </div>
+                                    </div>
+                                    <div class="col-sm-6">
+                                        <div class="form-group">
+                                            <label for="inputRootpw">{$LANG.serverrootpw}</label>
+                                            <input type="password" name="rootpw" class="form-control" id="inputRootpw" value="{$server.rootpw}">
+                                        </div>
+                                    </div>
+                                </div>
+
+                                <div class="row">
+                                    <div class="col-sm-6">
+                                        <div class="form-group">
+                                            <label for="inputNs1prefix">{$LANG.serverns1prefix}</label>
+                                            <input type="text" name="ns1prefix" class="form-control" id="inputNs1prefix" value="{$server.ns1prefix}" placeholder="ns1">
+                                        </div>
+                                    </div>
+                                    <div class="col-sm-6">
+                                        <div class="form-group">
+                                            <label for="inputNs2prefix">{$LANG.serverns2prefix}</label>
+                                            <input type="text" name="ns2prefix" class="form-control" id="inputNs2prefix" value="{$server.ns2prefix}" placeholder="ns2">
+                                        </div>
+                                    </div>
+                                </div>
+
+                            </div>
+                        {/if}
+
+                        {if $configurableoptions}
+                            <div class="sub-heading">
+                                <span>{$LANG.orderconfigpackage}</span>
+                            </div>
+                            <div class="product-configurable-options" id="productConfigurableOptions">
+                                <div class="row">
+                                    {foreach $configurableoptions as $num => $configoption}
+                                        {if $configoption.optiontype eq 1}
+                                            <div class="col-sm-12">
+                                                <div class="form-group">
+                                                    <label for="inputConfigOption{$configoption.id}">{$configoption.optionname}</label>
+                                                    <select name="configoption[{$configoption.id}]" id="inputConfigOption{$configoption.id}" class="form-control">
+                                                        {foreach key=num2 item=options from=$configoption.options}
+                                                            <option value="{$options.id}"{if $configoption.selectedvalue eq $options.id} selected="selected"{/if}>
+                                                                {$options.name}
+                                                            </option>
+                                                        {/foreach}
+                                                    </select>
+                                                </div>
+                                            </div>
+                                        {elseif $configoption.optiontype eq 2}
+                                            <div class="col-sm-12">
+                                                <div class="form-group">
+                                                    <label for="inputConfigOption{$configoption.id}">{$configoption.optionname}</label>
+                                                    {foreach key=num2 item=options from=$configoption.options}
+                                                        <br />
+                                                        <label>
+                                                            <input type="radio" name="configoption[{$configoption.id}]" value="{$options.id}"{if $configoption.selectedvalue eq $options.id} checked="checked"{/if} />
+                                                            {if $options.name}
+                                                                {$options.name}
+                                                            {else}
+                                                                {$LANG.enable}
+                                                            {/if}
+                                                        </label>
+                                                    {/foreach}
+                                                </div>
+                                            </div>
+                                        {elseif $configoption.optiontype eq 3}
+                                            <div class="col-sm-12">
+                                                <div class="form-group">
+                                                    <label for="inputConfigOption{$configoption.id}">{$configoption.optionname}</label>
+                                                    <br />
+                                                    <label>
+                                                        <input type="checkbox" name="configoption[{$configoption.id}]" id="inputConfigOption{$configoption.id}" value="1"{if $configoption.selectedqty} checked{/if} />
+                                                        {if $configoption.options.0.name}
+                                                            {$configoption.options.0.name}
+                                                        {else}
+                                                            {$LANG.enable}
+                                                        {/if}
+                                                    </label>
+                                                </div>
+                                            </div>
+                                        {elseif $configoption.optiontype eq 4}
+                                            <div class="col-sm-12">
+                                                <div class="form-group">
+                                                    <label for="inputConfigOption{$configoption.id}">{$configoption.optionname}</label>
+                                                    {if $configoption.qtymaximum}
+                                                        {if !$rangesliderincluded}
+                                                            <script type="text/javascript" src="{$BASE_PATH_JS}/ion.rangeSlider.min.js"></script>
+                                                            <link href="{$BASE_PATH_CSS}/ion.rangeSlider.css" rel="stylesheet">
+                                                            <link href="{$BASE_PATH_CSS}/ion.rangeSlider.skinModern.css" rel="stylesheet">
+                                                            {assign var='rangesliderincluded' value=true}
+                                                        {/if}
+                                                        <input type="text" name="configoption[{$configoption.id}]" value="{if $configoption.selectedqty}{$configoption.selectedqty}{else}{$configoption.qtyminimum}{/if}" id="inputConfigOption{$configoption.id}" class="form-control" />
+                                                        <script>
+                                                            var sliderTimeoutId = null;
+                                                            var sliderRangeDifference = {$configoption.qtymaximum} - {$configoption.qtyminimum};
+                                                            // The largest size that looks nice on most screens.
+                                                            var sliderStepThreshold = 25;
+                                                            // Check if there are too many to display individually.
+                                                            var setLargerMarkers = sliderRangeDifference > sliderStepThreshold;
+
+                                                            jQuery("#inputConfigOption{$configoption.id}").ionRangeSlider({
+                                                                min: {$configoption.qtyminimum},
+                                                                max: {$configoption.qtymaximum},
+                                                                grid: true,
+                                                                grid_snap: setLargerMarkers ? false : true,
+                                                                onChange: function() {
+                                                                    if (sliderTimeoutId) {
+                                                                        clearTimeout(sliderTimeoutId);
+                                                                    }
+
+                                                                    sliderTimeoutId = setTimeout(function() {
+                                                                        sliderTimeoutId = null;
+                                                                        recalctotals();
+                                                                    }, 250);
+                                                                }
+                                                            });
+                                                        </script>
+                                                    {else}
+                                                        <div>
+                                                            <input type="number" name="configoption[{$configoption.id}]" value="{if $configoption.selectedqty}{$configoption.selectedqty}{else}{$configoption.qtyminimum}{/if}" id="inputConfigOption{$configoption.id}" min="{$configoption.qtyminimum}" onchange="recalctotals()" onkeyup="recalctotals()" class="form-control form-control-qty" />
+                                                            <span class="form-control-static form-control-static-inline">
+                                                                x {$configoption.options.0.name}
+                                                            </span>
+                                                        </div>
+                                                    {/if}
+                                                </div>
+                                            </div>
+                                        {/if}
+                                        {if $num % 2 != 0}
+                                            </div>
+                                            <div class="row">
+                                        {/if}
+                                    {/foreach}
+                                </div>
+                            </div>
+
+                        {/if}
+
+                        {if $customfields}
+            			    {include file="./checkconfigureproduct.tpl"}
+                            <div class="sub-heading">
+                                <span>{$LANG.orderadditionalrequiredinfo}</span>
+                            </div>
+                            <div class="field-container">
+                            <table width="100%" border="0" cellpadding="10" cellspacing="0" class="table table-borderless">
+                              <tr>
+                                <td align='left'>
+                                    <div class="form-group">
+                                        <label for="customfield{$customfields[0].id}">{$customfields[0].name}</label>
+                                        {$customfields[0].input}
+                                        {if $customfields[0].description}
+                                            <span class="field-help-text">
+                                                {$customfields[0].description}
+                                            </span>
+                                        {/if}
+                                    </div>
+                                </td>
+                                <td></td>
+                                <td align='left'>
+                                    <div class="form-group">
+                                        <label for="customfield{$customfields[1].id}">{$customfields[1].name}</label>
+                                        {$customfields[1].input}
+                                        {if $customfields[1].description}
+                                            <span class="field-help-text">
+                                                {$customfields[1].description}
+                                            </span>
+                                        {/if}
+                                    </div>
+                                </td>
+                              </tr>
+                              <tr>
+                                <td align='left'>
+                                    <div class="form-group">
+                                        <label for="customfield{$customfields[2].id}">{$customfields[2].name}</label>
+                                        {$customfields[2].input}
+                                        {if $customfields[2].description}
+                                            <span class="field-help-text">
+                                                {$customfields[2].description}
+                                            </span>
+                                        {/if}
+                                    </div>
+                                </td>
+                                <td style="vertical-align:middle;margin:0;padding:0;">
+                                    <font size=+2px>@</font>
+                                </td>
+                                <td align='left'>
+                                    <div class="form-group">
+                                        <label for="customfield{$customfields[3].id}">{$customfields[3].name}</label>
+                                        {$customfields[3].input}
+                                        {if $customfields[3].description}
+                                            <span class="field-help-text">
+                                                {$customfields[3].description}
+                                            </span>
+                                        {/if}
+                                    </div>
+                                </td>
+                              </tr>
+                              <tr>
+                                <td align='left'>
+                                    <div class="form-group">
+                                        <label for="customfield{$customfields[4].id}">{$customfields[4].name}</label>
+                                        {$customfields[4].input}
+                                        {if $customfields[4].description}
+                                            <span class="field-help-text">
+                                                {$customfields[4].description}
+                                            </span>
+                                        {/if}
+                                    </div>
+                                </td>
+                                <td></td>
+                                <td align='left'>
+                                    <div class="form-group">
+                                        <label for="customfield{$customfields[5].id}">{$customfields[5].name}</label>
+                                        {$customfields[5].input}
+                                        {if $customfields[5].description}
+                                            <span class="field-help-text">
+                                                {$customfields[5].description}
+                                            </span>
+                                        {/if}
+                                    </div>
+                                </td>
+                              </tr>
+                            </table>
+                            </div>
+                            <div class="alert alert-info">
+                                <div id='hints'>
+                                    <strong id='hintHead'></strong>
+                                    <div id='hintLength'></div>
+                                    <div id='hintNumeric'></div>
+                                    <div id='hintSymbols'></div>
+                                    <div id='hintUpperLower'></div>
+                                </div>
+                            </div>
+                        {/if}
+
+                        {if $addons || count($addonsPromoOutput) > 0}
+
+                            <div class="sub-heading">
+                                <span>{$LANG.cartavailableaddons}</span>
+                            </div>
+
+                            {foreach $addonsPromoOutput as $output}
+                                <div>
+                                    {$output}
+                                </div>
+                            {/foreach}
+							
+							
+                            <div class="row addon-products">
+                                {foreach $addons as $addon}
+                                    <div class="col-sm-{if count($addons) > 1}6{else}12{/if}"">
+                                        <div class="panel panel-default panel-addon{if $addon.status} panel-addon-selected{/if}">
+                                            <div class="panel-body">
+                                               <input type="checkbox" name="addons[{$addon.id}]"{if $addon.status} checked{/if} />
+                                                <span class="panel-addon-name">{$addon.name}</span>
+												<span class="panel-addon-price">{$addon.pricing}</span>
+                                                <p class="text-muted">{$addon.description}</p>
+                                            </div>
+                                        </div>
+                                    </div>
+                                {/foreach}
+                            </div>
+
+                        {/if}
+
+                        <div class="alert alert-warning text-center">
+                            <i class="fas fa-question-circle"></i>
+                            {$LANG.orderForm.haveQuestionsContact} <a href="contact.php" target="_blank" class="alert-link">{$LANG.orderForm.haveQuestionsClickHere}</a>
+                        </div>
+
+                    </div>
+                    <div class="col-md-4 col-lg-3">
+						<div  id="sidebar">
+							<div class="sidebar__inner blocks cartsummary">
+								<div>
+									<div class="order-summary">
+										<div class="loader" id="orderSummaryLoader">
+											<i class="fas fa-fw fa-sync fa-spin"></i>
+										</div>
+										<h2>{$LANG.ordersummary}</h2>
+										<div class="summary-container" id="producttotal"></div>
+									</div>
+									<div class="text-center">
+										 <button type="submit" id="btnCompleteProductConfig" class="btn btn-primary btn-lg">
+											{$LANG.continue}
+											<i class="fas fa-arrow-circle-right"></i>
+										</button>
+									</div>
+								</div>
+							</div>
+						</div>
+                    </div>
+
+                </div>
+
+            </form>
+        </div>
+    </div>
+</div>
+
+{if file_exists("templates/orderforms/{$carttpl}/layouts/foot.tpl")}
+	{include file="templates/orderforms/{$carttpl}/layouts/foot.tpl"}
+{/if}
+
+
+<script language="javascript">
+	recalctotals();
+</script>
+
+
+<script type="text/javascript" src="{$WEB_ROOT}/templates/orderforms/{$carttpl}/js/ResizeSensor.js"></script>
+<script type="text/javascript" src="{$WEB_ROOT}/templates/orderforms/{$carttpl}/js/jquery.sticky-sidebar.min.js"></script>
+
+<script>
+    jQuery('#sidebar').stickySidebar({
+        topSpacing: 60,
+        bottomSpacing: 60,
+        minWidth: 992,
+        containerSelector: '.ajaxcart_cont',
+        innerWrapperSelector: '.sidebar__inner'
+    });
+</script>

+ 354 - 0
configureproductdomain.tpl

@@ -0,0 +1,354 @@
+{include file="orderforms/{$carttpl}/common.tpl"}
+
+{if file_exists("templates/orderforms/{$carttpl}/layouts/head.tpl")}
+	{include file="templates/orderforms/{$carttpl}/layouts/head.tpl"}
+{/if}
+
+<div id="order-standard_cart">
+
+    <div class="row">
+
+        <div class="col-md-12">
+			{if file_exists("templates/orderforms/{$carttpl}/layouts/head.tpl")}
+			{else}
+            <div class="header-lined">
+                <h1>{$LANG.domaincheckerchoosedomain}</h1>
+            </div>
+			{/if}
+			
+			{* {include file="orderforms/{$carttpl}/sidebar-categories-collapsed.tpl"} *}
+
+        </div>
+
+        <div class="col-md-10 col-md-offset-1 offset-md-1">
+
+           <form id="frmProductDomain">
+				<input type="hidden" id="frmProductDomainPid" value="{$pid}" />
+
+                <div class="domain-selection-options">
+                    {if $incartdomains}
+                        <div class="option option-selected">
+                            <label>
+                                <input type="radio" name="domainoption" value="incart" id="selincart" />{$LANG.cartproductdomainuseincart}
+                            </label>
+                            <div class="domain-input-group clearfix" id="domainincart">
+                                <div class="row">
+                                    <div class="col-sm-8 col-sm-offset-1 col-md-6 col-md-offset-2 offset-sm-1 offset-md-2">
+                                        <div class="domains-row">
+                                            <select id="incartsld" name="incartdomain" class="form-control">
+                                                {foreach key=num item=incartdomain from=$incartdomains}
+                                                    <option value="{$incartdomain}">{$incartdomain}</option>
+                                                {/foreach}
+                                            </select>
+                                        </div>
+                                    </div>
+                                    <div class="col-sm-2">
+                                        <button type="submit" class="btn btn-primary btn-block">
+                                            {$LANG.orderForm.use}
+                                        </button>
+                                    </div>
+                                </div>
+                            </div>
+                        </div>
+                    {/if}
+                    {if $registerdomainenabled}
+                        <div class="option {if !$incartdomains}option-selected{/if}">
+                            <label>
+                                <input type="radio" name="domainoption" value="register" id="selregister"{if $domainoption eq "register"} checked{/if} />{$LANG.cartregisterdomainchoice|sprintf2:$companyname}
+                            </label>
+                            <div class="domain-input-group clearfix" id="domainregister">
+                                <div class="row">
+                                    <div class="col-sm-8 col-sm-offset-1 offset-sm-1">
+                                        <div class="row domains-row">
+                                            <div class="col-xs-9 col-9">
+                                                <div class="input-group">
+                                                    <div class="input-group-prepend">
+                                                        <span class="input-group-text">{lang key='orderForm.www'}</span>
+                                                    </div>
+                                                    <input type="text" id="registersld" value="{$sld}" class="form-control" autocapitalize="none" data-toggle="tooltip" data-placement="top" data-trigger="manual" title="{lang key='orderForm.enterDomain'}" />
+                                                </div>
+                                            </div>
+                                            <div class="col-xs-3 col-3">
+                                                <select id="registertld" class="form-control">
+                                                    {foreach from=$registertlds item=listtld}
+                                                        <option value="{$listtld}"{if $listtld eq $tld} selected="selected"{/if}>{$listtld}</option>
+                                                    {/foreach}
+                                                </select>
+                                            </div>
+                                        </div>
+                                    </div>
+                                    <div class="col-sm-2">
+                                        <button type="submit" class="btn btn-primary btn-block">
+                                            {$LANG.orderForm.check}
+                                        </button>
+                                    </div>
+                                </div>
+                            </div>
+                        </div>
+                    {/if}
+                    {if $transferdomainenabled}
+                        <div class="option">
+                            <label>
+                                <input type="radio" name="domainoption" value="transfer" id="seltransfer"{if $domainoption eq "transfer"} checked{/if} />{$LANG.carttransferdomainchoice|sprintf2:$companyname}
+                            </label>
+                            <div class="domain-input-group clearfix" id="domaintransfer">
+                                <div class="row">
+                                    <div class="col-sm-8 col-sm-offset-1 offset-sm-1">
+                                        <div class="row domains-row">
+                                            <div class="col-xs-9 col-9">
+                                                <div class="input-group">
+                                                    <div class="input-group-prepend">
+                                                        <span class="input-group-text">{lang key='orderForm.www'}</span>
+                                                    </div>
+                                                    <input type="text" id="transfersld" value="{$sld}" class="form-control" autocapitalize="none" data-toggle="tooltip" data-placement="top" data-trigger="manual" title="{lang key='orderForm.enterDomain'}"/>
+                                                </div>
+                                            </div>
+                                            <div class="col-xs-3 col-3">
+                                                <select id="transfertld" class="form-control">
+                                                    {foreach from=$transfertlds item=listtld}
+                                                        <option value="{$listtld}"{if $listtld eq $tld} selected="selected"{/if}>{$listtld}</option>
+                                                    {/foreach}
+                                                </select>
+                                            </div>
+                                        </div>
+                                    </div>
+                                    <div class="col-sm-2">
+                                        <button type="submit" class="btn btn-primary btn-block">
+                                            {$LANG.orderForm.transfer}
+                                        </button>
+                                    </div>
+                                </div>
+                            </div>
+                        </div>
+                    {/if}
+                    {if $owndomainenabled}
+                        <div class="option">
+                            <label>
+                                <input type="radio" name="domainoption" value="owndomain" id="selowndomain"{if $domainoption eq "owndomain"} checked{/if} />{$LANG.cartexistingdomainchoice|sprintf2:$companyname}
+                            </label>
+                            <div class="domain-input-group clearfix" id="domainowndomain">
+                                <div class="row">
+                                    <div class="col-sm-9">
+                                        <div class="row domains-row">
+                                            <div class="col-xs-9 col-9">
+                                                <div class="input-group">
+                                                    <div class="input-group-prepend">
+                                                        <span class="input-group-text">{lang key='orderForm.www'}</span>
+                                                    </div>
+													<input type="text" id="owndomainsld" value="{$sld}" placeholder="{$LANG.yourdomainplaceholder}" class="form-control" autocapitalize="none" data-toggle="tooltip" data-placement="top" data-trigger="manual" title="{lang key='orderForm.enterDomain'}" />
+												</div>
+											</div>
+                                            <div class="col-xs-3 col-3">
+                                                <input type="text" id="owndomaintld" value="{$tld|substr:1}" placeholder="{$LANG.yourtldplaceholder}" class="form-control" autocapitalize="none" data-toggle="tooltip" data-placement="top" data-trigger="manual" title="{lang key='orderForm.required'}" />
+                                            </div>
+                                        </div>
+                                    </div>
+                                    <div class="col-sm-2">
+                                        <button type="submit" class="btn btn-primary btn-block" id="useOwnDomain">
+                                            {$LANG.orderForm.use}
+                                        </button>
+                                    </div>
+                                </div>
+                            </div>
+                        </div>
+                    {/if}
+                    {if $subdomains}
+                        <div class="option">
+                            <label>
+                                <input type="radio" name="domainoption" value="subdomain" id="selsubdomain"{if $domainoption eq "subdomain"} checked{/if} />{$LANG.cartsubdomainchoice|sprintf2:$companyname}
+                            </label>
+                            <div class="domain-input-group clearfix" id="domainsubdomain">
+                                <div class="row">
+                                    <div class="col-sm-9">
+                                        <div class="row domains-row">
+                                            <div class="col-xs-7 col-7">
+                                                <div class="input-group">
+                                                    <div class="input-group-prepend">
+                                                        <span class="input-group-text">https://</span>
+                                                    </div>
+													<input type="text" id="subdomainsld" value="{$sld}" placeholder="yourname" class="form-control" autocapitalize="none" data-toggle="tooltip" data-placement="top" data-trigger="manual" title="{lang key='orderForm.enterDomain'}" />
+												</div>											
+                                            </div>
+                                            <div class="col-xs-5 col-5">
+                                                <select id="subdomaintld" class="form-control">
+                                                    {foreach $subdomains as $subid => $subdomain}
+                                                        <option value="{$subid}">{$subdomain}</option>
+                                                    {/foreach}
+                                                </select>
+                                            </div>
+                                        </div>
+                                    </div>
+                                    <div class="col-sm-2">
+                                        <button type="submit" class="btn btn-primary btn-block">
+                                            {$LANG.orderForm.check}
+                                        </button>
+                                    </div>
+                                </div>
+                            </div>
+                        </div>
+                    {/if}
+                </div>
+
+                {if $freedomaintlds}
+                    <p>* <em>{$LANG.orderfreedomainregistration} {$LANG.orderfreedomainappliesto}: {$freedomaintlds}</em></p>
+                {/if}
+
+            </form>
+
+            <div class="clearfix"></div>
+
+            <form method="post" action="cart.php?a=add&pid={$pid}&domainselect=1" id="frmProductDomainSelections">
+
+                <div id="DomainSearchResults" class="w-hidden">
+
+                    <div id="searchDomainInfo">
+                        <p id="primaryLookupSearching" class="domain-lookup-loader domain-lookup-primary-loader domain-searching domain-checker-result-headline">
+                            <i class="fas fa-spinner fa-spin"></i>
+                            <span class="domain-lookup-register-loader">{lang key='orderForm.checkingAvailability'}...</span>
+                            <span class="domain-lookup-transfer-loader">{lang key='orderForm.verifyingTransferEligibility'}...</span>
+                            <span class="domain-lookup-other-loader">{lang key='orderForm.verifyingDomain'}...</span>
+                        </p>
+                        <div id="primaryLookupResult" class="domain-lookup-result domain-lookup-primary-results w-hidden">
+                            <div class="domain-unavailable domain-checker-unavailable headline">{lang key='orderForm.domainIsUnavailable'}</div>
+                            <div class="domain-available domain-checker-available headline">{$LANG.domainavailable1} <strong></strong> {$LANG.domainavailable2}</div>
+							<div class="btn btn-primary domain-contact-support headline">{$LANG.domainContactUs}</div>
+                            <div class="transfer-eligible">
+                                <p class="domain-checker-available headline">{lang key='orderForm.transferEligible'}</p>
+                                <p>{lang key='orderForm.transferUnlockBeforeContinuing'}</p>
+                            </div>
+                            <div class="transfer-not-eligible">
+                                <p class="domain-checker-unavailable headline">{lang key='orderForm.transferNotEligible'}</p>
+                                <p>{lang key='orderForm.transferNotRegistered'}</p>
+                                <p>{lang key='orderForm.trasnferRecentlyRegistered'}</p>
+                                <p>{lang key='orderForm.transferAlternativelyRegister'}</p>
+                            </div>
+                            <div class="domain-invalid">
+                                <p class="domain-checker-unavailable headline">{lang key='orderForm.domainInvalid'}</p>
+                                <p>
+                                    {lang key='orderForm.domainLetterOrNumber'}<span class="domain-length-restrictions">{lang key='orderForm.domainLengthRequirements'}</span><br />
+                                    {lang key='orderForm.domainInvalidCheckEntry'}
+                                </p>
+                            </div>
+                            <div id="idnLanguageSelector" class="margin-10 w-hidden idn-language-selector idn-language">
+                                <div class="row">
+                                    <div class="col-sm-10 col-sm-offset-1 col-lg-8 col-lg-offset-2 offset-sm-1 offset-lg-2">
+                                        <div class="margin-10 text-center">
+                                            {lang key='cart.idnLanguageDescription'}
+                                        </div>
+                                    </div>
+                                </div>
+                                <div class="row">
+                                    <div class="col-sm-8 col-lg-6 col-sm-offset-2 col-lg-offset-3 offset-sm-2 offset-lg-3">
+                                        <div class="form-group">
+                                            <select name="idnlanguage" class="form-control">
+                                                <option value="">{lang key='cart.idnLanguage'}</option>
+                                                {foreach $idnLanguages as $idnLanguageKey => $idnLanguage}
+                                                    <option value="{$idnLanguageKey}">{lang key='idnLanguage.'|cat:$idnLanguageKey}</option>
+                                                {/foreach}
+                                            </select>
+                                            <div class="field-error-msg">
+                                                {lang key='cart.selectIdnLanguageForRegister'}
+                                            </div>
+                                        </div>
+                                    </div>
+                                </div>
+                            </div>
+                            <div class="domain-price">
+                                <span class="register-price-label">{lang key='orderForm.domainPriceRegisterLabel'}</span>
+                                <span class="transfer-price-label w-hidden">{lang key='orderForm.domainPriceTransferLabel'}</span>
+                                <span class="price"></span>
+                            </div>
+							<p class="domain-error domain-checker-unavailable headline"></p>
+                            <input type="hidden" id="resultDomainOption" name="domainoption" />
+                            <input type="hidden" id="resultDomain" name="domains[]" />
+                            <input type="hidden" id="resultDomainPricingTerm" />
+                        </div>
+                    </div>
+
+                    {if $registerdomainenabled}
+                        {if $spotlightTlds}
+                            <div id="spotlightTlds" class="spotlight-tlds clearfix w-hidden">
+                                <div class="spotlight-tlds-container">
+                                    {foreach $spotlightTlds as $key => $data}
+                                        <div class="spotlight-tld-container spotlight-tld-container-{$spotlightTlds|count}">
+                                            <div id="spotlight{$data.tldNoDots}" class="spotlight-tld">
+                                                {if $data.group}
+                                                    <div class="spotlight-tld-{$data.group}">{$data.groupDisplayName}</div>
+                                                {/if}
+                                                {$data.tld}
+                                                <span class="domain-lookup-loader domain-lookup-spotlight-loader">
+                                                    <i class="fas fa-spinner fa-spin"></i>
+                                                </span>
+                                                <div class="domain-lookup-result">
+                                                    <button type="button" class="btn unavailable w-hidden" disabled="disabled">
+                                                        {lang key='domainunavailable'}
+                                                    </button>
+                                                    <button type="button" class="btn invalid w-hidden" disabled="disabled">
+                                                        {lang key='domainunavailable'}
+                                                    </button>
+                                                    <span class="available price w-hidden">{$data.register}</span>
+                                                    <button type="button" class="btn w-hidden btn-add-to-cart product-domain" data-whois="0" data-domain="">
+                                                        <span class="to-add">{lang key='orderForm.add'}</span>
+                                                        <span class="added">{lang key='domaincheckeradded'}</span>
+                                                        <span class="unavailable">{$LANG.domaincheckertaken}</span>
+                                                    </button>
+													<button type="button" class="btn btn-primary domain-contact-support w-hidden">{lang key='domainChecker.contactSupport'}</button>
+                                                </div>
+                                            </div>
+                                        </div>
+                                    {/foreach}
+                                </div>
+                            </div>
+                        {/if}
+
+						<div class="suggested-domains w-hidden">
+                            <div class="panel-heading card-header">
+                                {lang key='orderForm.suggestedDomains'}
+                            </div>
+                            <div id="suggestionsLoader" class="card-body panel-body domain-lookup-loader domain-lookup-suggestions-loader">
+                                <i class="fas fa-spinner fa-spin"></i> {lang key='orderForm.generatingSuggestions'}
+                            </div>
+                            <div id="domainSuggestions" class="domain-lookup-result list-group w-hidden">
+                                <div class="domain-suggestion list-group-item w-hidden">
+                                    <span class="domain"></span><span class="extension"></span>
+                                    <div class="actions">
+                                        <button type="button" class="btn btn-add-to-cart product-domain" data-whois="1" data-domain="">
+                                            <span class="to-add">{$LANG.addtocart}</span>
+                                            <span class="loading">
+                                                <i class="fas fa-spinner fa-spin"></i> {lang key='loading'}
+                                            </span>
+                                            <span class="added">{lang key='domaincheckeradded'}</span>
+                                            <span class="unavailable">{$LANG.domaincheckertaken}</span>
+                                        </button>
+                                        <button type="button" class="btn btn-primary domain-contact-support w-hidden">{lang key='domainChecker.contactSupport'}</button>
+                                        <span class="price"></span>
+                                        <span class="promo w-hidden"></span>
+                                    </div>
+                                </div>
+                            </div>
+                            <div class="panel-footer card-footer more-suggestions text-center w-hidden">
+                                <a id="moreSuggestions" href="#" onclick="loadMoreSuggestions();return false;">{lang key='domainsmoresuggestions'}</a>
+                                <span id="noMoreSuggestions" class="no-more small w-hidden">{lang key='domaincheckernomoresuggestions'}</span>
+                            </div>
+                            <div class="text-center text-muted domain-suggestions-warning">
+                                <p>{lang key='domainssuggestionswarnings'}</p>
+                            </div>
+                        </div>
+                    {/if}
+                </div>
+
+                <div class="text-center">
+                    <button id="btnDomainContinue" type="submit" class="btn btn-primary btn-lg w-hidden" disabled="disabled">
+                        {$LANG.continue}
+                        &nbsp;<i class="fas fa-arrow-circle-right"></i>
+                    </button>
+                </div>
+            </form>
+
+        </div>
+    </div>
+</div>
+
+{if file_exists("templates/orderforms/{$carttpl}/layouts/foot.tpl")}
+	{include file="templates/orderforms/{$carttpl}/layouts/foot.tpl"}
+{/if}

+ 1788 - 0
css/all.css

@@ -0,0 +1,1788 @@
+/**
+ * WHMCS Base Order Form Stylesheet
+ *
+ * This stylesheet defines the css rules used by the base order form.
+ *
+ * @project   WHMCS
+ * @cssdoc    version 1.0-pre
+ * @package   WHMCS
+ * @author    WHMCS Limited <development@whmcs.com>
+ * @copyright Copyright (c) WHMCS Limited 2005-2020
+ * @license   http://www.whmcs.com/license/
+ * @link      http://www.whmcs.com/
+ */
+
+#order-standard_cart {
+    margin: 0;
+    padding: 0 0 40px 0;
+    font-size: 14px;
+}
+
+#order-standard_cart .cart-sidebar {
+    float: left;
+    width: 25%;
+    position: relative;
+    min-height: 1px;
+    padding-right: 15px;
+    padding-left: 15px;
+}
+#order-standard_cart .cart-body {
+    float: right;
+    width: 75%;
+    position: relative;
+    min-height: 1px;
+    padding-right: 15px;
+    padding-left: 15px;
+}
+
+#order-standard_cart .secondary-cart-body {
+    float: left;
+    width: 65%;
+    position: relative;
+    min-height: 1px;
+    padding-right: 15px;
+    padding-left: 15px;
+}
+
+#order-standard_cart .secondary-cart-sidebar {
+    float: right;
+    width: 35%;
+    position: relative;
+    min-height: 1px;
+    padding-right: 15px;
+    padding-left: 15px;
+}
+
+@media only screen and (max-width: 1199px) {
+    #order-standard_cart .cart-sidebar {
+        display: none;
+    }
+    #order-standard_cart .cart-body {
+        width: 100%;
+        float: none;
+    }
+
+    #order-standard_cart .secondary-cart-body {
+        width: 69%;
+    }
+    #order-standard_cart .secondary-cart-sidebar {
+        width: 31%;
+    }
+}
+
+@media only screen and (max-width: 991px) {
+    #order-standard_cart .secondary-cart-body {
+        width: 100%;
+        float: none;
+    }
+    #order-standard_cart .secondary-cart-sidebar {
+        margin: 0 auto;
+        width: 300px;
+        float: none;
+    }
+}
+
+@media only screen and (max-width: 575px) {
+    #order-standard_cart .secondary-cart-sidebar {
+        width: 100%;
+    }
+}
+
+#order-standard_cart .field-container {
+    margin: 0 0 30px 0;
+}
+
+#order-standard_cart label {
+    margin-right: 10px;
+    font-weight: 300;
+    font-size: 13px;
+    color: #666;
+}
+#order-standard_cart label .iradio_square-blue {
+    margin-right: 2px;
+}
+
+#order-standard_cart .info-text-sm {
+    font-size: 0.85em;
+    text-align: center;
+}
+
+/**
+ * Responsive Categories
+ */
+
+#order-standard_cart .cart-sidebar h3 {
+    margin: 0;
+    font-size: 16px;
+}
+
+#order-standard_cart .cart-sidebar .list-group-item {
+    margin: 0;
+    padding: 8px 15px;
+    border-top: 0;
+    border-left: 0;
+    border-right: 0;
+}
+#order-standard_cart .cart-sidebar .list-group-item:first-child {
+    border-radius: 0;
+}
+#order-standard_cart .cart-sidebar .list-group-item:last-child {
+    border-bottom: 0;
+}
+
+#order-standard_cart .sidebar-collapsed {
+    margin-top: 20px;
+    margin-bottom: 20px;
+    padding: 4px;
+    background-color: #f8f8f8;
+    border-radius: 4px;
+}
+@media only screen and (min-width: 1200px) {
+    #order-standard_cart .sidebar-collapsed {
+        display: none;
+    }
+}
+#order-standard_cart .sidebar-collapsed::after {
+    display: block;
+    clear: both;
+    content: "";
+}
+#order-standard_cart .sidebar-collapsed select {
+    border: 0;
+    color: #222;
+}
+
+/*
+ * Section Dividers
+ */
+
+#order-standard_cart .sub-heading {
+    height: 0;
+    border-top: 1px solid #DDD;
+    text-align: center;
+    margin-top: 20px;
+    margin-bottom: 30px;
+}
+
+#order-standard_cart .sub-heading-borderless {
+    height: 0;
+    text-align: center;
+    margin-top: 20px;
+    margin-bottom: 30px;
+}
+
+#order-standard_cart .sub-heading span,
+#order-standard_cart .sub-heading-borderless span {
+    display: inline-block;
+    position: relative;
+    padding: 0 17px;
+    top: -11px;
+    font-size: 16px;
+    color: #058;
+}
+
+/**
+ * Products
+ */
+
+#order-standard_cart .products {
+    margin: 10px 0;
+}
+
+#order-standard_cart .products .product {
+    padding: 1px 0 10px 0;
+    margin: 0 0 20px 0;
+    background: #fff;
+    border-radius: 3px;
+    border: 1px solid #ddd;
+}
+
+#order-standard_cart .products .product header {
+    position: relative;
+    padding: 10px 20px;
+    margin: 0 1px;
+    background: #f8f8f8;
+    border-radius: 3px 3px 0 0;
+}
+
+#order-standard_cart .products .product header span {
+    margin: 0;
+    color: #333;
+    font-size: 1.2em;
+}
+
+#order-standard_cart .products .product header .qty {
+    float: right;
+    font-size: 0.8em;
+    font-style: italic;
+    color: #888;
+}
+
+#order-standard_cart .products .product div.product-desc {
+    float: left;
+    width: 60%;
+    padding: 8px 14px;
+    font-size: 0.8em;
+}
+
+#order-standard_cart .products .product span.feature-value {
+    font-weight: bold;
+}
+
+#order-standard_cart .products .product div.product-pricing {
+    margin-bottom: 10px;
+}
+#order-standard_cart .products .product div.product-pricing span.price {
+    font-size: 1.4em;
+}
+
+#order-standard_cart .products .product footer {
+    float: right;
+    margin: 20px 0;
+    width: 40%;
+    font-size: 0.8em;
+    text-align: center;
+}
+
+/*
+ * Addon Panels
+ */
+
+#order-standard_cart .panel-addon {
+    font-size: 0.8em;
+    text-align: center;
+}
+#order-standard_cart .panel-addon:hover {
+    cursor: pointer;
+}
+#order-standard_cart .panel-addon .panel-body {
+    border-radius: 4px;
+}
+#order-standard_cart .panel-addon .panel-body label {
+    font-size: 1em;
+    font-weight: bold;
+    color: #333;
+}
+#order-standard_cart .panel-addon .panel-price {
+    padding: 4px;
+    background-color: #e8e8e8;
+}
+#order-standard_cart .panel-addon .panel-add {
+    display: block;
+    padding: 4px;
+    background-color: #5cb85c;
+    color: #fff;
+    border-radius: 0 0 4px 4px;
+}
+#order-standard_cart .panel-addon-selected {
+    border-color: #bbb;
+}
+#order-standard_cart .panel-addon-selected .panel-add {
+    background-color: #5cb85c;
+    color: #fff;
+}
+
+/**
+ * Domain registration
+ */
+
+#order-standard_cart .domain-selection-options {
+    margin: 15px 0;
+}
+#order-standard_cart .domains-row {
+    margin-right: -2px;
+    margin-left: -2px;
+}
+@media (max-width: 767px) {
+    #order-standard_cart .domains-row {
+        padding-bottom: 5px;
+    }
+}
+#order-standard_cart .domains-row .col-sm-3,
+#order-standard_cart .domains-row .col-sm-9,
+#order-standard_cart .domains-row .col-xs-2,
+#order-standard_cart .domains-row .col-xs-3,
+#order-standard_cart .domains-row .col-xs-5,
+#order-standard_cart .domains-row .col-xs-7,
+#order-standard_cart .domains-row .col-xs-9 {
+    padding-right: 2px;
+    padding-left: 2px;
+}
+
+#order-standard_cart .domain-selection-options .option {
+    margin-bottom: 2px;
+    padding: 6px 20px;
+    border-radius: 6px;
+    background-color: #f8f8f8;
+}
+#order-standard_cart .domain-selection-options .option:hover {
+    cursor: pointer;
+}
+#order-standard_cart .domain-selection-options .option .iradio_square-blue {
+    margin-right: 10px;
+}
+#order-standard_cart .domain-suggestions .icheckbox_square-green {
+    margin-right: 10px;
+}
+#order-standard_cart .domain-selection-options .option-selected label {
+    font-weight: bold;
+}
+#order-standard_cart .domain-selection-options .option-selected {
+    background-color: #efefef;
+}
+#order-standard_cart .domain-input-group {
+    display: none;
+    margin: 10px 0;
+}
+#order-standard_cart .domain-loading-spinner {
+    display: none;
+    padding: 30px;
+    text-align: center;
+}
+
+#order-standard_cart .domain-lookup-primary-loader,
+#order-standard_cart .domain-lookup-primary-results {
+    margin: 20px 0;
+    text-align: center;
+}
+#order-standard_cart .domain-checker-result-headline {
+    margin: 20px;
+    text-align: center;
+}
+#order-standard_cart .domain-checker-result-headline,
+#order-standard_cart .domain-lookup-primary-results .headline {
+    font-size: 1.6em;
+    word-wrap: break-word;
+}
+#order-standard_cart .domain-checker-available {
+    color: #5cb85c;
+}
+#order-standard_cart .domain-checker-unavailable,
+#order-standard_cart .domain-checker-invalid {
+    color: #d9534f;
+}
+#order-standard_cart .transfer-eligible,
+#order-standard_cart .transfer-not-eligible {
+    margin: 30px 0 15px;
+    padding: 20px;
+}
+#order-standard_cart .transfer-eligible {
+    color: #3c763d;
+    background-color: #dff0d8;
+    border-color: #d6e9c6;
+}
+#order-standard_cart .transfer-not-eligible {
+    color: #666;
+    background-color: #f6f6f6;
+}
+
+#order-standard_cart .domain-suggestions {
+    margin-bottom: 20px;
+    font-size: 0.8em;
+}
+
+#order-standard_cart .domain-add-domain {
+    margin: 25px 0;
+}
+
+/**
+ * Product Configuration
+ */
+
+#order-standard_cart .product-info {
+    margin: 0 0 20px 0;
+    padding: 6px 15px;
+    font-size: 0.85em;
+    background-color: #f8f8f8;
+    border-top: 1px solid #efefef;
+    border-bottom: 1px solid #efefef;
+}
+#order-standard_cart .product-info .product-title {
+    margin: 0;
+    font-size: 1.6em;
+}
+
+#order-standard_cart .order-summary {
+    margin: 0 0 20px 0;
+    padding: 0;
+    background-color: #666;
+    border-bottom: 3px solid #666;
+    border-radius: 4px;
+}
+
+#order-standard_cart .order-summary h2 {
+    margin: 0;
+    padding: 10px;
+    color: #fff;
+    text-align: center;
+    font-size: 1.4em;
+    font-weight: normal;
+}
+
+#order-standard_cart .summary-container {
+    margin: 0;
+    padding: 10px;
+    min-height: 100px;
+    border-radius: 3px;
+    background-color: #f8f8f8;
+    font-size: 0.8em;
+}
+
+#order-standard_cart .order-summary .product-name {
+    display: block;
+    font-weight: bold;
+    font-size: 1.2em;
+}
+#order-standard_cart .order-summary .product-group {
+    margin: 0 0 5px 0;
+    display: block;
+    font-style: italic;
+}
+#order-standard_cart .order-summary .summary-totals {
+    margin: 5px 0;
+    padding: 5px 0;
+    border-top: 1px solid #ccc;
+    border-bottom: 1px solid #ccc;
+}
+#order-standard_cart .order-summary .total-due-today span {
+    display: block;
+    text-align: right;
+}
+#order-standard_cart .order-summary .total-due-today .amt {
+    font-size: 2.3em;
+}
+
+#order-standard_cart .order-summary .loader {
+    position: relative;
+    top: 10px;
+    height: 0;
+    padding-right: 10px;
+    text-align: right;
+    color: #efefef;
+}
+
+/**
+ * View Cart
+ */
+
+#order-standard_cart .panel-taxes {
+    font-size: 0.8em;
+}
+
+#order-standard_cart .row-upgrade-credit {
+    margin-top: 5px;
+}
+#order-standard_cart .row-upgrade-credit .item-price {
+    font-size: 0.9em;
+}
+
+/**
+ * Checkout
+ */
+
+#order-standard_cart #btnAlreadyRegistered,
+#order-standard_cart #btnNewUserSignup {
+    margin: 0 0 0 10px;
+}
+
+#order-standard_cart .checkout-error-feedback {
+    margin: 15px 0;
+}
+
+#order-standard_cart .apply-credit-container {
+    margin: 15px 0;
+    padding: 15px;
+    background-color: #eee;
+}
+#order-standard_cart .apply-credit-container span {
+    font-weight: bold;
+}
+#order-standard_cart .apply-credit-container .radio {
+    padding-left: 20px;
+    padding-right: 20px;
+}
+#order-standard_cart .apply-credit-container .iradio_square-blue {
+    margin-right: 6px;
+}
+
+#order-standard_cart .cc-input-container {
+    padding: 15px 15px 10px 15px;
+    background-color: #f3f3f3;
+    border: 1px solid #d9d9d9;
+    border-radius: 4px;
+}
+#order-standard_cart .cc-input-container .form-group {
+    margin-top: 10px;
+    margin-bottom: 10px;
+}
+#order-standard_cart .cc-input-container .radio-inline {
+    padding-left: 0;
+    margin-bottom: 10px;
+}
+#order-standard_cart .cc-input-container .paymethod-info {
+    cursor: pointer;
+    padding-right: 10px;
+    margin-bottom: 5px;
+}
+#order-standard_cart .cc-input-container ul {
+    list-style: none;
+    margin: 0;
+    padding: 0;
+}
+#order-standard_cart .cc-input-container ul li {
+    padding: 2px 0;
+}
+#order-standard_cart .cc-input-container i {
+    padding: 0 6px;
+    width: 28px;
+    text-align: center;
+}
+#order-standard_cart .cc-input-container .existing-cc-grid {
+    display: inline-grid;
+    grid-template-columns: repeat(3, auto) minmax(10em, 30em) auto;
+    font-weight: 300;
+    color: #666;
+    font-size: 13px;
+}
+#order-standard_cart .checkout-security-msg {
+    margin: 20px 0;
+    padding-left: 75px;
+    font-size: 0.8em;
+}
+#order-standard_cart .checkout-security-msg i {
+    float: left;
+    margin-left: -48px;
+    font-size: 2.8em;
+}
+
+/**
+ * Form fields
+ */
+
+#order-standard_cart .prepend-icon {
+  top: 0;
+  left: 0;
+  display: inline-block;
+  vertical-align: top;
+  position: relative;
+  width: 100%;
+  font-weight: normal;
+}
+#order-standard_cart .field,
+#order-standard_cart .form-control {
+  position: relative;
+  vertical-align: top;
+  border: 1px solid #DDD;
+  display: -moz-inline-stack;
+  display: inline-block;
+  color: #626262;
+  outline: none;
+  background-color: #fff;
+  border-radius: 3px;
+}
+
+#order-standard_cart .input-group-lg > .form-control {
+    height: 46px;
+    padding: 10px 16px;
+    font-size: 18px;
+    line-height: 1.3333333;
+    border-radius: 6px 0 0 6px;
+}
+#order-standard_cart .form-control-qty {
+    width: 70px;
+    text-align: center;
+}
+#order-standard_cart .form-control-static-inline {
+    display: inline-block;
+}
+#order-standard_cart .form-control:focus {
+  border-color: #ddd;
+  outline: 0;
+  -webkit-box-shadow: none;
+          box-shadow: none;
+}
+#order-standard_cart textarea.field {
+    height: auto;
+}
+#order-standard_cart .prepend-icon .field {
+    -webkit-appearance: none;
+    padding-left: 36px;
+}
+#order-standard_cart .prepend-icon .field-icon i {
+    position: relative;
+  font-size: 14px;
+}
+#order-standard_cart .prepend-icon .field-icon {
+  top: 0;
+  z-index: 4;
+  width: 42px;
+  height: 36px;
+  color: inherit;
+  line-height: 36px;
+  position: absolute;
+  text-align: center;
+  -webkit-transition: all 0.5s ease-out;
+  -moz-transition: all 0.5s ease-out;
+  -ms-transition: all 0.5s ease-out;
+  -o-transition: all 0.5s ease-out;
+  transition: all 0.5s ease-out;
+  pointer-events: none;
+}
+#order-standard_cart .field-icon i {
+    color: #bbb;
+}
+#order-standard_cart .field[disabled],
+#order-standard_cart .field[readonly],
+#order-standard_cart .form-control[disabled],
+#order-standard_cart .form-control[readonly] {
+  background-color: #f8f8f8;
+  opacity: 1;
+}
+
+#order-standard_cart .field-help-text {
+    display: block;
+    margin-top: 5px;
+    margin-bottom: 10px;
+    color: #888;
+    font-size: 12px;
+}
+
+/**
+ * View Cart
+ */
+
+#order-standard_cart .view-cart-items-header {
+    margin: 0;
+    padding: 8px 15px;
+    background-color: #058;
+    color: #fff;
+    font-size: 0.9em;
+    border-radius: 4px 4px 0 0;
+}
+#order-standard_cart .view-cart-items {
+    margin: 0 0 20px 0;
+    border-bottom: 2px solid #058;
+}
+#order-standard_cart .view-cart-items .item {
+    margin: 0;
+    padding: 10px;
+    background-color: #fff;
+    border-left: 0;
+    border-right: 0;
+    font-size: 0.8em;
+}
+#order-standard_cart .view-cart-items .item:nth-child(even) {
+    background-color: #eee;
+}
+#order-standard_cart .view-cart-items .item span:not(.caret):not(.renewal-price) {
+    display: block;
+}
+#order-standard_cart .view-cart-items .item-title {
+    font-size: 1.6em;
+}
+#order-standard_cart .view-cart-items .item-group {
+    font-size: 1.2em;
+}
+#order-standard_cart .view-cart-items .item-domain {
+    color: #056;
+}
+#order-standard_cart .view-cart-items .item-price {
+    text-align: right;
+}
+#order-standard_cart .view-cart-items .item-price span {
+    font-size: 1.6em;
+}
+#order-standard_cart .view-cart-items .item-price .cycle {
+    font-size: 0.9em;
+}
+#order-standard_cart .view-cart-items .item-qty {
+    text-align: center;
+}
+#order-standard_cart .view-cart-items .item-qty input {
+    margin-bottom: 5px;
+    padding: 4px;
+    height: auto;
+}
+#order-standard_cart .view-cart-items .item-qty button {
+    font-size: 0.8em;
+}
+
+#order-standard_cart .btn-remove-from-cart {
+    color: #444;
+}
+#order-standard_cart .btn-remove-from-cart:hover {
+    color: #cc0000;
+    text-decoration: none;
+}
+
+#order-standard_cart .empty-cart {
+    text-align: right;
+    margin: -20px 20px 0 0;
+    line-height: 1em;
+}
+#order-standard_cart .empty-cart .btn {
+    margin: 0;
+    padding: 4px 10px;
+    background-color: #058;
+    border: 0;
+    color: #fff;
+    border-radius: 0 0 4px 4px;
+}
+
+#order-standard_cart .btn-checkout {
+    padding: 15px 34px;
+}
+
+#order-standard_cart .order-summary .subtotal {
+    margin: 0;
+    padding: 0 0 5px 0;
+    font-size: 1.2em;
+    border-bottom: 1px solid #ddd;
+}
+#order-standard_cart .order-summary .bordered-totals {
+    margin: 0 0 5px 0;
+    padding: 5px 0;
+    border-bottom: 1px solid #ddd;
+}
+#order-standard_cart .order-summary .recurring-totals {
+    margin: 5px 0 0 0;
+    padding: 0;
+}
+#order-standard_cart .order-summary .total-due-today-padded {
+    margin: 20px 0;
+}
+
+#order-standard_cart .order-summary .recurring-charges {
+    font-size: 0.9em;
+    color: #777;
+    font-style: italic;
+    text-align: right;
+}
+
+#order-standard_cart .order-summary .btn-continue-shopping {
+    color: #222;
+    font-size: 0.9em;
+}
+
+#order-standard_cart .view-cart-tabs .promo .form-group {
+    margin-bottom: 5px;
+}
+
+#order-standard_cart .view-cart-tabs {
+    margin: 0 0 20px 0;
+}
+#order-standard_cart .view-cart-tabs .nav-tabs {
+    padding-left: 20px;
+    font-size: 0.8em;
+}
+#order-standard_cart .view-cart-tabs .nav-tabs > li.active > a {
+    background-color: #f8f8f8;
+}
+#order-standard_cart .view-cart-tabs .tab-content {
+    background-color: #f8f8f8;
+    padding: 15px;
+}
+
+#order-standard_cart .view-cart-promotion-code {
+    margin: 0 0 5px 0;
+    padding: 10px 20px;
+    background-color: #fff;
+    border: 1px dashed #ccc;
+    text-align: center;
+}
+
+#order-standard_cart .view-cart-gateway-checkout {
+    margin: 0 0 20px 0;
+    padding: 15px;
+    background-color: #e8e8e8;
+    border-radius: 4px;
+    text-align: center;
+}
+
+#order-standard_cart .view-cart-empty {
+    padding: 30px 15px;
+    text-align: center;
+}
+
+#order-standard_cart .express-checkout-buttons .separator {
+    margin-left: 70px;
+    padding: 5px;
+    text-align: center;
+    font-weight: bold;
+}
+
+/**
+ * Completion Page
+ */
+
+#order-standard_cart .order-confirmation {
+    text-align: center;
+}
+#order-standard_cart .order-confirmation span {
+    font-size: 1.4em;
+}
+#order-standard_cart .order-confirmation-addon-output {
+    margin: 15px 0;
+    text-align: center;
+}
+
+/**
+ * Error Page
+ */
+
+.error-heading {
+    margin: 30px 0;
+    font-size: 1.4em;
+    text-align: center;
+}
+
+/**
+ * Remove Item Modal
+ */
+
+#order-standard_cart .modal-title i {
+    display: block;
+    padding-top: 25px;
+}
+#order-standard_cart .modal-header,
+#order-standard_cart .modal-body,
+#order-standard_cart .modal-footer {
+    text-align: center !important;
+    border: 0;
+}
+#order-standard_cart .modal-remove-item .modal-footer {
+    padding-bottom: 45px;
+}
+
+/**
+ * Domain Lookup
+ */
+
+/**
+ * -------------------------
+ * @section Domain Checker
+ * -------------------------
+ */
+
+div.domainresults div:not(.btn-group) {
+    margin: 0;
+    padding: 10px 25px;
+    background-color: #ddd;
+    color: #666;
+    font-size: 1.0em;
+    border-radius: 6px 6px 0 0;
+}
+
+div.domainresults div:not(.btn-group) span {
+    padding-left: 20px;
+    font-size: 14px;
+    color: #888;
+}
+
+div.domainresults table tr td {
+    padding: 5px 30px;
+    line-height: 40px;
+}
+
+.domain-checker-container {
+    margin: 20px 0;
+    padding: 0;
+    background-color: #ffce44;
+    -moz-border-radius: 10px;
+    -webkit-border-radius: 10px;
+    -o-border-radius: 10px;
+    border-radius: 10px;
+    background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#ffb201), to(#ffd960));
+    background: -webkit-linear-gradient(top, #ffd960, #ffb201);
+    background: -moz-linear-gradient(top, #ffd960, #ffb201);
+    background: -ms-linear-gradient(top, #ffd960, #ffb201);
+    background: -o-linear-gradient(top, #ffd960, #ffb201);
+}
+
+.domain-checker-bg {
+    margin: 0;
+    padding: 80px 0;
+    background-repeat: no-repeat;
+    background-position: 110% -5px;
+    background-image:url('../img/globe.png');
+}
+
+@media (max-width: 992px) {
+    .domain-checker-bg {
+        padding: 40px 0;
+    }
+}
+
+.domain-checker-container .input-group-box {
+    margin: 0 auto;
+    padding: 10px;
+    width: 100%;
+    background-color: #fff;
+    -moz-border-radius: 10px;
+    -webkit-border-radius: 10px;
+    -o-border-radius: 10px;
+    border-radius: 10px;
+}
+
+.domain-bulk-options-box {
+    position: absolute;
+    top: 18px;
+    right: 134px;
+    z-index:100;
+}
+
+@media (max-width: 767px) {
+    .domain-checker-container .input-group-box .input-group-btn {
+        display: block;
+        width: 100%;
+    }
+    .domain-checker-container .input-group-box .input-group-btn .btn {
+        width: 100%;
+        border-radius: 6px;
+    }
+    .domain-checker-container .input-group-box .form-control {
+        border-radius: 6px !important;
+        margin-bottom: 5px;
+        float: none;
+    }
+}
+
+.domain-check-availability {
+    width: 100px;
+    height: 46px;
+}
+
+.domain-step-options {
+    min-height: 300px;
+}
+
+.domain-checker-result-headline {
+    margin: 20px;
+    font-size: 1.6em;
+    text-align: center;
+}
+.domain-checker-available {
+    color: #5cb85c;
+}
+.domain-checker-unavailable,
+.domain-checker-invalid {
+    color: #d9534f;
+}
+
+div.domainresults div.domain-checkout-area {
+    display: none;
+    float: right;
+    padding: 8px 40px 0;
+}
+
+.domain-disclaimer-area {
+    margin: 0 0 25px 0;
+    font-size: 12px;
+}
+
+.domain-bulk-domain-well {
+    width: 60%;
+}
+
+.domain-tld-pricing-table-responsive {
+    border: 0;
+    margin-bottom: 0;
+}
+
+a.domain-tld-pricing-category {
+    display: block;
+    text-align: center;
+}
+
+.domain-pricing .tld-row {
+    padding-top: 3px;
+    padding-bottom: 3px;
+    border-bottom: 1px solid #f5f5f5;
+}
+.domain-pricing .tld-row.highlighted {
+    background: #f3f9fd;
+}
+
+.domain-pricing .tld-pricing-header .col-xs-2,
+.domain-pricing .tld-pricing-header .col-sm-2 {
+    height: 56px;
+}
+.domain-pricing .tld-pricing-header .col-xs-2,
+.domain-pricing .tld-pricing-header .col-sm-2,
+.domain-pricing .tld-pricing-header .col-xs-4,
+.domain-pricing .tld-pricing-header .col-sm-4 {
+    padding-top: 4px;
+    padding-bottom: 4px;
+    border-bottom: 6px solid #97b5d2;
+    background-color: #efefef;
+    border-radius: 4px 4px 0 0;
+}
+.domain-pricing .no-bg {
+    background-color: transparent !important;
+}
+.domain-pricing .tld-pricing-header div:nth-child(odd) {
+    border-color: #336699;
+    background-color: #f5f5f5;
+}
+.domain-pricing .two-row-center {
+    line-height: 28px;
+    margin-top: 6px;
+    margin-bottom: 6px;
+    border-right: 2px solid #c7d7e6;
+}
+
+.domain-pricing .tld-row.no-tlds {
+    display: none;
+}
+
+.domain-searching {
+    color: #ccc;
+}
+
+.spotlight-tlds {
+    margin: 15px 0;
+    padding: 7px 14px;
+    background-color: #f8f8f8;
+}
+.spotlight-tlds-container {
+    margin-left: -7px;
+    margin-right: -7px;
+}
+.spotlight-tld-container {
+    float: left;
+    padding: 7px 7px;
+}
+.spotlight-tld-container-1 {
+    width: 100%;
+}
+.spotlight-tld-container-2 {
+    width: 50%;
+}
+.spotlight-tld-container-3 {
+    width: 33.3%;
+}
+.spotlight-tld-container-4 {
+    width: 25%;
+}
+.spotlight-tld-container-5 {
+    width: 20%;
+}
+.spotlight-tld-container-6 {
+    width: 16.6%;
+}
+.spotlight-tld-container-7 {
+    width: 14.28%;
+}
+.spotlight-tld-container-8 {
+    width: 12.5%;
+}
+
+@media screen and (max-width: 991px) {
+    .spotlight-tld-container-5,
+    .spotlight-tld-container-6 {
+        width: 33.3%;
+    }
+    .spotlight-tld-container-7,
+    .spotlight-tld-container-8 {
+        width: 25%;
+    }
+}
+@media screen and (max-width: 580px) {
+    .spotlight-tld-container-3,
+    .spotlight-tld-container-4,
+    .spotlight-tld-container-5,
+    .spotlight-tld-container-6,
+    .spotlight-tld-container-7,
+    .spotlight-tld-container-8 {
+        width: 50%;
+    }
+}
+
+.spotlight-tld {
+    position: relative;
+    overflow: hidden;
+    margin: 0;
+    padding: 15px 0;
+    height: 112px;
+    background-color: #fff;
+    border: 1px solid #ddd;
+    border-radius: 5px;
+    text-align: center;
+    font-weight: bold;
+    color: #555;
+}
+.spotlight-tld span {
+    display: block;
+    padding: 5px 0;
+    font-weight: normal;
+}
+.spotlight-tld .btn:not(.domain-contact-support) {
+    padding: 2px 10px;
+    font-size: 12px;
+    line-height: 1.5;
+    border-radius: 3px;
+    background-color: #555;
+    border-color: #333;
+    color: #fff;
+    width: 85%;
+    white-space: nowrap;
+    overflow: hidden;
+    text-overflow: ellipsis;
+}
+.spotlight-tld .btn.domain-contact-support {
+    padding: 2px 10px;
+    font-size: 12px;
+    line-height: 1.5;
+    border-radius: 3px;
+    color: #fff;
+    min-width: 85%;
+    white-space: nowrap;
+    overflow: hidden;
+    text-overflow: ellipsis;
+}
+.spotlight-tld .btn span {
+    padding: 0;
+}
+.spotlight-tld .unavailable,
+.spotlight-tld .invalid {
+    margin: 19px 0;
+    background-color: #eee;
+    border-color: #ddd;
+    color: #bbb;
+}
+.spotlight-tld .domain-contact-support {
+    margin: 19px 0;
+}
+.spotlight-tld .domain-lookup-spotlight-loader {
+    line-height: 47px;
+    font-size: 1.4em;
+}
+.spotlight-tld .results {
+    display: none;
+}
+.spotlight-tld-new {
+    width: 60px;
+    position: absolute;
+    letter-spacing: 1px;
+    padding: 3px;
+    font-size: x-small;
+    font-weight: bold;
+    text-transform: uppercase;
+    color: #fff;
+    top: 3px;
+    right: -18px;
+    background-color: #2ad588;
+    transform: rotate(45deg);
+    -webkit-transform: rotate(45deg);
+}
+.spotlight-tld-sale {
+    width: 60px;
+    position: absolute;
+    letter-spacing: 0;
+    padding: 3px;
+    font-size: x-small;
+    font-weight: bold;
+    text-transform: uppercase;
+    color: #fff;
+    top: 3px;
+    right: -18px;
+    background-color: #f7d458;
+    transform: rotate(45deg);
+    -webkit-transform: rotate(45deg);
+}
+.spotlight-tld-hot {
+    width: 60px;
+    position: absolute;
+    letter-spacing: 0;
+    padding: 3px;
+    font-size: x-small;
+    font-weight: bold;
+    text-transform: uppercase;
+    color: #fff;
+    top: 3px;
+    right: -18px;
+    background-color: #f9615a;
+    transform: rotate(45deg);
+    -webkit-transform: rotate(45deg);
+}
+
+.suggested-domains .panel-heading,
+.suggested-domains .card-header {
+    border-bottom: 2px solid #62cb31;
+}
+.suggested-domains .domain-lookup-suggestions-loader {
+    padding: 30px 20px;
+    background-color: #f8f8f8;
+    font-size: 0.9em;
+    text-align: center;
+    opacity: 0.7;
+}
+.suggested-domains .list-group-item {
+    border-left: 0;
+    border-right: 0;
+    word-wrap: break-word;
+}
+.suggested-domains .extension {
+    font-weight: bold;
+}
+.suggested-domains .promo.hot {
+    padding: 2px 8px;
+    background-color: #f9615a;
+    color: #fff;
+    text-transform: uppercase;
+}
+.suggested-domains .promo.sale {
+    padding: 2px 8px;
+    background-color: #f7d458;
+    color: #fff;
+    text-transform: uppercase;
+}
+.suggested-domains .promo.new {
+    padding: 2px 8px;
+    background-color: #2ad588;
+    color: #fff;
+    text-transform: uppercase;
+}
+.suggested-domains .actions {
+    float: right;
+}
+.suggested-domains .price {
+    padding: 0 20px;
+    font-size: 1.2em;
+}
+.suggested-domains .btn:not(.domain-contact-support) {
+    padding: 2px 10px;
+    font-size: 11px;
+    line-height: 1.4;
+    border-radius: 3px;
+    background-color: #555;
+    border-color: #333;
+    color: #fff;
+}
+.suggested-domains .btn.domain-contact-support {
+    padding: 2px 10px;
+    font-size: 11px;
+    line-height: 1.4;
+    border-radius: 3px;
+    color: #fff;
+}
+
+@media (max-width: 767px) {
+    .suggested-domains .list-group-item {
+        text-align: center;
+    }
+    .suggested-domains .actions {
+        float: none;
+    }
+    .suggested-domains .price {
+        float: none;
+        display: block;
+        padding: 3px 0;
+    }
+    .suggested-domains .list-group-item .btn {
+        float: none;
+        width: 100%;
+    }
+}
+
+.domain-promo-box {
+    margin-top: 20px;
+    margin-bottom: 20px;
+    padding: 20px;
+    background-color: #f9f9f9;
+    border: 1px solid #ddd;
+    color: #333;
+    border-radius: 4px;
+}
+.domain-promo-box h3 {
+    margin: 0;
+    font-weight: 400;
+}
+.domain-promo-box i {
+    float: right;
+}
+.domain-promo-box p {
+    margin: 0 0 10px 0;
+    font-size: 0.85em;
+}
+.domain-promo-box .small {
+    margin: 10px 0 0 0;
+    color: #999;
+}
+
+.btn-transfer {
+    min-width: 100px;
+}
+
+.slim-alert {
+    margin: 0 0 5px 0;
+    padding: 5px;
+    text-align: center;
+}
+
+.domain-suggestions-warning {
+    padding: 10px 0;
+    font-size: 0.7em;
+}
+
+/**
+ * Domain Renewals
+ */
+
+.form-control.domain-renewals-filter {
+    background: url(../../../../assets/img/search.png) #fff no-repeat 8px 5px !important;
+    padding: 7px 10px 7px 45px !important;
+    height: auto !important;
+    width: 200px !important;
+    font-size: 13px !important;
+    border-radius: 2px !important;
+}
+
+.domain-renewals {
+    margin: 10px 0;
+    border-top: 1px solid #ccc;
+    background-color: #f8f8f8;
+}
+.domain-renewals .domain-renewal {
+    margin: 0;
+    padding: 15px;
+    border-bottom: 1px solid #ccc;
+}
+.domain-renewals .domain-renewal:nth-child(even) {
+    background-color: #f4f4f4;
+}
+.domain-renewals .domain-renewal h3 {
+    margin: 0;
+}
+.domain-renewals .domain-renewal .label {
+    border-radius: 3px;
+}
+.order-summary i.fa-trash {
+    opacity: 0.5;
+}
+.order-summary i.fa-trash:hover {
+    opacity: 1;
+}
+
+/**
+ * -------------------------
+ * Order Configure Product Addon Promo Containers
+ * -------------------------
+ */
+
+#order-standard_cart .addon-promo-container {
+    margin: 20px 0;
+    padding: 20px;
+    border: 1px solid #eee;
+    font-size: 0.9em;
+}
+#order-standard_cart .addon-promo-container h3 {
+    margin: 0 0 10px 0;
+}
+#order-standard_cart .addon-promo-container .logo {
+    float: right;
+    margin: 0 0 10px 20px;
+    text-align: right;
+    line-height: 100px;
+}
+#order-standard_cart .addon-promo-container img {
+    max-width: 120px;
+}
+#order-standard_cart .addon-promo-container .description {
+    margin: 10px 0;
+}
+#order-standard_cart .addon-promo-container label {
+    margin-top: 3px;
+    width: 98%;
+}
+#order-standard_cart .addon-promo-container a {
+    text-decoration: underline;
+}
+
+#order-standard_cart .mc-promos {
+    margin: 20px auto 30px;
+    max-width: 575px;
+}
+
+#order-standard_cart .mc-promo {
+    margin: 0 0 10px 0;
+    background-color: #fff;
+    border: 1px dashed #ccc;
+    border-bottom: 4px solid #9abb3a;
+}
+#order-standard_cart .mc-promo .cta {
+    float: right;
+    padding: 3px 10px;
+    text-align: center;
+}
+#order-standard_cart .mc-promo .headline {
+    padding-top: 8px;
+    font-size: 1.3em;
+}
+#order-standard_cart .mc-promo .tagline {
+    font-size: 1.2em;
+    font-weight: 300;
+}
+#order-standard_cart .mc-promo .header {
+    border-bottom: 0;
+    height: 70px;
+    overflow: hidden;
+    cursor: pointer;
+}
+#order-standard_cart .mc-promo .icon {
+    float: left;
+    margin: 10px;
+    width: 64px;
+    height: 50px;
+    line-height: 50px;
+    text-align: center;
+}
+#order-standard_cart .mc-promo .icon img {
+    max-width: 100%;
+    max-height: 100%;
+}
+#order-standard_cart .mc-promo .body {
+    padding: 10px 15px;
+    border-top: 10px solid #eaeaea;
+    background-color: #f8f8f8;
+    font-size: 0.85em;
+    display: none;
+}
+#order-standard_cart .mc-promo .body i {
+    color: #99bc3a;
+    padding-right: 3px;
+}
+.mc-promo em {
+    font-weight: bold;
+    font-style: normal;
+}
+#order-standard_cart .mc-promo .body ul {
+    list-style: none;
+    margin: 0;
+    padding: 0;
+}
+#order-standard_cart .mc-promo .body li {
+    width: 50%;
+}
+#order-standard_cart .mc-promo .body li.left {
+    float: left;
+}
+#order-standard_cart .mc-promo .body li.right {
+    float: right;
+}
+#order-standard_cart .mc-promo .price {
+    padding: 4px 0;
+    font-size: 1.15em;
+    color: #83a032;
+}
+#order-standard_cart .mc-promo .btn-add {
+    padding: 0;
+    background-color: #99bb3a;
+    color: #fff;
+    font-size: 1em;
+}
+#order-standard_cart .mc-promo .arrow {
+    display: inline-block;
+    padding: 2px 8px;
+    background-color: #84b436;
+}
+#order-standard_cart .mc-promo .text{
+    display: inline-block;
+    padding: 2px 8px;
+    font-size: 0.9em;
+}
+#order-standard_cart .mc-promo .expander {
+    float: left;
+    width: 28px;
+    font-size: 1.5em;
+    color: #99bc3a;
+    text-align: right;
+    line-height: 60px;
+    transition: all 2s linear;
+}
+
+#order-standard_cart .mc-promo.weebly {
+    border-color: #7b7b7b;
+}
+#order-standard_cart .mc-promo.weebly .btn-add {
+    background-color: #7b7b7b;
+}
+#order-standard_cart .mc-promo.weebly .arrow {
+    background-color: #666;
+}
+#order-standard_cart .mc-promo.weebly .expander,
+#order-standard_cart .mc-promo.weebly .price {
+    color: #7b7b7b;
+}
+
+#order-standard_cart .mc-promo.spamexperts {
+    border-color: #56a2da;
+}
+#order-standard_cart .mc-promo.spamexperts .btn-add {
+    background-color: #56a2da;
+}
+#order-standard_cart .mc-promo.spamexperts .arrow {
+    background-color: #4e98d0;
+}
+#order-standard_cart .mc-promo.spamexperts .expander,
+#order-standard_cart .mc-promo.spamexperts .price {
+    color: #56a2da;
+}
+
+#order-standard_cart .mc-promo.sitelock {
+    border-color: #f29f44;
+}
+#order-standard_cart .mc-promo.sitelock .btn-add {
+    background-color: #f29f44;
+}
+#order-standard_cart .mc-promo.sitelock .arrow {
+    background-color: #f08f3d;
+}
+#order-standard_cart .mc-promo.sitelock .expander,
+#order-standard_cart .mc-promo.sitelock .price {
+    color: #f29f44;
+}
+
+#order-standard_cart .mc-promo.sitelockvpn {
+    border-color: #555;
+}
+#order-standard_cart .mc-promo.sitelockvpn .btn-add {
+    background-color: #555;
+}
+#order-standard_cart .mc-promo.sitelockvpn .arrow {
+    background-color: #333;
+}
+#order-standard_cart .mc-promo.sitelockvpn .expander,
+#order-standard_cart .mc-promo.sitelockvpn .price {
+    color: #555;
+}
+
+#order-standard_cart .mc-promo.marketgoo {
+    border-color: #3090e0;
+}
+#order-standard_cart .mc-promo.marketgoo .btn-add {
+    background-color: #3090e0;
+}
+#order-standard_cart .mc-promo.marketgoo .arrow {
+    background-color: #3090e0;
+}
+#order-standard_cart .mc-promo.marketgoo .expander,
+#order-standard_cart .mc-promo.marketgoo .price {
+    color: #3090e0;
+}
+
+#order-standard_cart .mc-promo .rotate{
+    -moz-transition: all 0.2s linear;
+    -webkit-transition: all 0.2s linear;
+    transition: all 0.2s linear;
+}
+#order-standard_cart .mc-promo .rotate.down{
+    -moz-transform:rotate(90deg);
+    -webkit-transform:rotate(90deg);
+    transform:rotate(90deg);
+}
+
+/**
+ * -------------------------
+ * Domain Checker Captchas
+ * -------------------------
+ */
+
+#order-standard_cart .default-captcha {
+    margin: 0 auto 6px auto;
+    padding: 10px;
+    max-width: 340px;
+    background-color: #F9F9F9;
+    border: 1px solid #d3d3d3;
+    color: #888;
+    border-radius: 3px;
+    box-shadow: 0px 0px 4px 1px rgba(0,0,0,0.08);
+    -webkit-box-shadow: 0px 0px 4px 1px rgba(0,0,0,0.08);
+    -moz-box-shadow: 0px 0px 4px 1px rgba(0,0,0,0.08);
+    text-align: center;
+    font-size: 0.9em;
+}
+#order-standard_cart .default-captcha-register-margin {
+    margin: 18px auto -25px auto;
+}
+
+#order-standard_cart .captcha-container p {
+    margin-bottom: 5px;
+}
+#order-standard_cart .captcha-container img {
+    margin-top: 3px;
+}
+#order-standard_cart .captcha-container .form-control {
+    height: inherit;
+    max-width: 90px;
+    text-align: center;
+}
+
+#order-standard_cart .captcha-container #google-recaptcha {
+    width: 304px;
+    height: 100px;
+    margin-top: 15px;
+    margin-bottom: -50px;
+}
+#order-standard_cart .captcha-container #google-recaptcha.recaptcha-transfer {
+    margin-bottom: -20px;
+}
+
+#order-standard_cart .idn-language-selector {
+    font-size: 14px;
+}
+
+#order-standard_cart .account-select-container {
+    margin: 0;
+    border-right: 1px solid #eee;
+}
+#order-standard_cart .account-select-container div {
+    padding: 0;
+}
+#order-standard_cart .account-select-container div.account {
+    background: #f6f6f6;
+    border: 1px solid #eee;
+    border-right: 0;
+    padding: 10px;
+}
+#order-standard_cart .account-select-container div.account:not(.border-bottom) {
+    border-bottom: 0;
+}
+#order-standard_cart .account-select-container div.account.active {
+    background: #fff;
+}
+#order-standard_cart .recaptcha-container {
+    display: inline-block;
+}
+
+@media (max-width: 991px) {
+    #order-standard_cart .captcha-container #google-recaptcha {
+        padding-left: 2.5%;
+        margin-bottom: -25px;
+    }
+}
+@media (max-width: 736px) {
+    #order-standard_cart .captcha-container #google-recaptcha {
+        margin-bottom: -35px;
+        transform: scale(0.935);
+        transform-origin: 0 0;
+        -webkit-transform: scale(0.935);
+        -webkit-transform-origin: 0 0;
+    }
+}
+@media (max-width: 384px) {
+    #order-standard_cart .captcha-container #google-recaptcha {
+        margin-bottom: -30px;
+        transform: scale(0.96);
+        transform-origin: 0 0;
+    }
+}
+@media (max-width: 360px) {
+    #order-standard_cart .captcha-container #google-recaptcha {
+        margin-bottom: -35px;
+        transform: scale(0.89);
+        transform-origin: 0 0;
+    }
+}
+@media (max-width: 320px) {
+    #order-standard_cart .captcha-container #google-recaptcha {
+        padding-left: 13.5%;
+        margin-bottom: -45px;
+        transform: scale(0.83);
+        transform-origin: 0 0;
+        -webkit-transform: scale(0.785);
+        -webkit-transform-origin: 0 0;
+    }
+}
+
+.w-hidden {
+    display: none;
+}
+
+#order-standard_cart .font-size-36 {
+    font-size: 36px;
+}
+
+#order-standard_cart .font-size-30 {
+    font-size: 30px;
+}
+
+#order-standard_cart .font-size-24 {
+    font-size: 24px;
+}
+
+#order-standard_cart .font-size-22 {
+    font-size: 22px;
+}
+
+#order-standard_cart .font-size-18 {
+    font-size: 18px;
+}
+
+#order-standard_cart .font-size-14 {
+    font-size: 14px;
+}
+
+#order-standard_cart .font-size-12 {
+    font-size: 12px;
+}
+
+/* iCheck plugin Square skin, blue
+----------------------------------- */
+.icheckbox_square-blue,
+.iradio_square-blue {
+    display: inline-block;
+    *display: inline;
+    vertical-align: middle;
+    margin: 0;
+    padding: 0;
+    width: 22px;
+    height: 22px;
+    background: url(blue.png) no-repeat;
+    border: none;
+    cursor: pointer;
+}
+
+.icheckbox_square-blue {
+    background-position: 0 0;
+}
+    .icheckbox_square-blue.hover {
+        background-position: -24px 0;
+    }
+    .icheckbox_square-blue.checked {
+        background-position: -48px 0;
+    }
+    .icheckbox_square-blue.disabled {
+        background-position: -72px 0;
+        cursor: default;
+    }
+    .icheckbox_square-blue.checked.disabled {
+        background-position: -96px 0;
+    }
+
+.iradio_square-blue {
+    background-position: -120px 0;
+}
+    .iradio_square-blue.hover {
+        background-position: -144px 0;
+    }
+    .iradio_square-blue.checked {
+        background-position: -168px 0;
+    }
+    .iradio_square-blue.disabled {
+        background-position: -192px 0;
+        cursor: default;
+    }
+    .iradio_square-blue.checked.disabled {
+        background-position: -216px 0;
+    }
+
+/* HiDPI support */
+@media (-o-min-device-pixel-ratio: 5/4), (-webkit-min-device-pixel-ratio: 1.25), (min-resolution: 120dpi) {
+    .icheckbox_square-blue,
+    .iradio_square-blue {
+        background-image: url(blue@2x.png);
+        -webkit-background-size: 240px 24px;
+        background-size: 240px 24px;
+    }
+}

Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
css/all.min.css


BIN
css/blue.png


BIN
css/blue@2x.png


+ 11 - 0
css/chosen.min.css

@@ -0,0 +1,11 @@
+/*!
+Chosen, a Select Box Enhancer for jQuery and Prototype
+by Patrick Filler for Harvest, http://getharvest.com
+
+Version 1.8.7
+Full source at https://github.com/harvesthq/chosen
+Copyright (c) 2011-2018 Harvest http://getharvest.com
+
+MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md
+This file is generated by `grunt build`, do not edit it by hand.
+*/.chosen-container{position:relative;display:inline-block;vertical-align:middle;font-size:13px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.chosen-container *{-webkit-box-sizing:border-box;box-sizing:border-box}.chosen-container .chosen-drop{position:absolute;top:100%;z-index:1010;width:100%;border:1px solid #aaa;border-top:0;background:#fff;-webkit-box-shadow:0 4px 5px rgba(0,0,0,.15);box-shadow:0 4px 5px rgba(0,0,0,.15);clip:rect(0,0,0,0);-webkit-clip-path:inset(100% 100%);clip-path:inset(100% 100%)}.chosen-container.chosen-with-drop .chosen-drop{clip:auto;-webkit-clip-path:none;clip-path:none}.chosen-container a{cursor:pointer}.chosen-container .chosen-single .group-name,.chosen-container .search-choice .group-name{margin-right:4px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;font-weight:400;color:#999}.chosen-container .chosen-single .group-name:after,.chosen-container .search-choice .group-name:after{content:":";padding-left:2px;vertical-align:top}.chosen-container-single .chosen-single{position:relative;display:block;overflow:hidden;padding:0 0 0 8px;height:25px;border:1px solid #aaa;border-radius:5px;background-color:#fff;background:-webkit-gradient(linear,left top,left bottom,color-stop(20%,#fff),color-stop(50%,#f6f6f6),color-stop(52%,#eee),to(#f4f4f4));background:linear-gradient(#fff 20%,#f6f6f6 50%,#eee 52%,#f4f4f4 100%);background-clip:padding-box;-webkit-box-shadow:0 0 3px #fff inset,0 1px 1px rgba(0,0,0,.1);box-shadow:0 0 3px #fff inset,0 1px 1px rgba(0,0,0,.1);color:#444;text-decoration:none;white-space:nowrap;line-height:24px}.chosen-container-single .chosen-default{color:#999}.chosen-container-single .chosen-single span{display:block;overflow:hidden;margin-right:26px;text-overflow:ellipsis;white-space:nowrap}.chosen-container-single .chosen-single-with-deselect span{margin-right:38px}.chosen-container-single .chosen-single abbr{position:absolute;top:6px;right:26px;display:block;width:12px;height:12px;background:url(chosen-sprite.png) -42px 1px no-repeat;font-size:1px}.chosen-container-single .chosen-single abbr:hover{background-position:-42px -10px}.chosen-container-single.chosen-disabled .chosen-single abbr:hover{background-position:-42px -10px}.chosen-container-single .chosen-single div{position:absolute;top:0;right:0;display:block;width:18px;height:100%}.chosen-container-single .chosen-single div b{display:block;width:100%;height:100%;background:url(chosen-sprite.png) no-repeat 0 2px}.chosen-container-single .chosen-search{position:relative;z-index:1010;margin:0;padding:3px 4px;white-space:nowrap}.chosen-container-single .chosen-search input[type=text]{margin:1px 0;padding:4px 20px 4px 5px;width:100%;height:auto;outline:0;border:1px solid #aaa;background:url(chosen-sprite.png) no-repeat 100% -20px;font-size:1em;font-family:sans-serif;line-height:normal;border-radius:0}.chosen-container-single .chosen-drop{margin-top:-1px;border-radius:0 0 4px 4px;background-clip:padding-box}.chosen-container-single.chosen-container-single-nosearch .chosen-search{position:absolute;clip:rect(0,0,0,0);-webkit-clip-path:inset(100% 100%);clip-path:inset(100% 100%)}.chosen-container .chosen-results{color:#444;position:relative;overflow-x:hidden;overflow-y:auto;margin:0 4px 4px 0;padding:0 0 0 4px;max-height:240px;-webkit-overflow-scrolling:touch}.chosen-container .chosen-results li{display:none;margin:0;padding:5px 6px;list-style:none;line-height:15px;word-wrap:break-word;-webkit-touch-callout:none}.chosen-container .chosen-results li.active-result{display:list-item;cursor:pointer}.chosen-container .chosen-results li.disabled-result{display:list-item;color:#ccc;cursor:default}.chosen-container .chosen-results li.highlighted{background-color:#3875d7;background-image:-webkit-gradient(linear,left top,left bottom,color-stop(20%,#3875d7),color-stop(90%,#2a62bc));background-image:linear-gradient(#3875d7 20%,#2a62bc 90%);color:#fff}.chosen-container .chosen-results li.no-results{color:#777;display:list-item;background:#f4f4f4}.chosen-container .chosen-results li.group-result{display:list-item;font-weight:700;cursor:default}.chosen-container .chosen-results li.group-option{padding-left:15px}.chosen-container .chosen-results li em{font-style:normal;text-decoration:underline}.chosen-container-multi .chosen-choices{position:relative;overflow:hidden;margin:0;padding:0 5px;width:100%;height:auto;border:1px solid #aaa;background-color:#fff;background-image:-webkit-gradient(linear,left top,left bottom,color-stop(1%,#eee),color-stop(15%,#fff));background-image:linear-gradient(#eee 1%,#fff 15%);cursor:text}.chosen-container-multi .chosen-choices li{float:left;list-style:none}.chosen-container-multi .chosen-choices li.search-field{margin:0;padding:0;white-space:nowrap}.chosen-container-multi .chosen-choices li.search-field input[type=text]{margin:1px 0;padding:0;height:25px;outline:0;border:0!important;background:0 0!important;-webkit-box-shadow:none;box-shadow:none;color:#999;font-size:100%;font-family:sans-serif;line-height:normal;border-radius:0;width:25px}.chosen-container-multi .chosen-choices li.search-choice{position:relative;margin:3px 5px 3px 0;padding:3px 20px 3px 5px;border:1px solid #aaa;max-width:100%;border-radius:3px;background-color:#eee;background-image:-webkit-gradient(linear,left top,left bottom,color-stop(20%,#f4f4f4),color-stop(50%,#f0f0f0),color-stop(52%,#e8e8e8),to(#eee));background-image:linear-gradient(#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-size:100% 19px;background-repeat:repeat-x;background-clip:padding-box;-webkit-box-shadow:0 0 2px #fff inset,0 1px 0 rgba(0,0,0,.05);box-shadow:0 0 2px #fff inset,0 1px 0 rgba(0,0,0,.05);color:#333;line-height:13px;cursor:default}.chosen-container-multi .chosen-choices li.search-choice span{word-wrap:break-word}.chosen-container-multi .chosen-choices li.search-choice .search-choice-close{position:absolute;top:4px;right:3px;display:block;width:12px;height:12px;background:url(chosen-sprite.png) -42px 1px no-repeat;font-size:1px}.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:hover{background-position:-42px -10px}.chosen-container-multi .chosen-choices li.search-choice-disabled{padding-right:5px;border:1px solid #ccc;background-color:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,color-stop(20%,#f4f4f4),color-stop(50%,#f0f0f0),color-stop(52%,#e8e8e8),to(#eee));background-image:linear-gradient(#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);color:#666}.chosen-container-multi .chosen-choices li.search-choice-focus{background:#d4d4d4}.chosen-container-multi .chosen-choices li.search-choice-focus .search-choice-close{background-position:-42px -10px}.chosen-container-multi .chosen-results{margin:0;padding:0}.chosen-container-multi .chosen-drop .result-selected{display:list-item;color:#ccc;cursor:default}.chosen-container-active .chosen-single{border:1px solid #5897fb;-webkit-box-shadow:0 0 5px rgba(0,0,0,.3);box-shadow:0 0 5px rgba(0,0,0,.3)}.chosen-container-active.chosen-with-drop .chosen-single{border:1px solid #aaa;border-bottom-right-radius:0;border-bottom-left-radius:0;background-image:-webkit-gradient(linear,left top,left bottom,color-stop(20%,#eee),color-stop(80%,#fff));background-image:linear-gradient(#eee 20%,#fff 80%);-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset}.chosen-container-active.chosen-with-drop .chosen-single div{border-left:none;background:0 0}.chosen-container-active.chosen-with-drop .chosen-single div b{background-position:-18px 2px}.chosen-container-active .chosen-choices{border:1px solid #5897fb;-webkit-box-shadow:0 0 5px rgba(0,0,0,.3);box-shadow:0 0 5px rgba(0,0,0,.3)}.chosen-container-active .chosen-choices li.search-field input[type=text]{color:#222!important}.chosen-disabled{opacity:.5!important;cursor:default}.chosen-disabled .chosen-single{cursor:default}.chosen-disabled .chosen-choices .search-choice .search-choice-close{cursor:default}.chosen-rtl{text-align:right}.chosen-rtl .chosen-single{overflow:visible;padding:0 8px 0 0}.chosen-rtl .chosen-single span{margin-right:0;margin-left:26px;direction:rtl}.chosen-rtl .chosen-single-with-deselect span{margin-left:38px}.chosen-rtl .chosen-single div{right:auto;left:3px}.chosen-rtl .chosen-single abbr{right:auto;left:26px}.chosen-rtl .chosen-choices li{float:right}.chosen-rtl .chosen-choices li.search-field input[type=text]{direction:rtl}.chosen-rtl .chosen-choices li.search-choice{margin:3px 5px 3px 0;padding:3px 5px 3px 19px}.chosen-rtl .chosen-choices li.search-choice .search-choice-close{right:auto;left:4px}.chosen-rtl.chosen-container-single .chosen-results{margin:0 0 4px 4px;padding:0 4px 0 0}.chosen-rtl .chosen-results li.group-option{padding-right:15px;padding-left:0}.chosen-rtl.chosen-container-active.chosen-with-drop .chosen-single div{border-right:none}.chosen-rtl .chosen-search input[type=text]{padding:4px 5px 4px 20px;background:url(chosen-sprite.png) no-repeat -30px -20px;direction:rtl}.chosen-rtl.chosen-container-single .chosen-single div b{background-position:6px 2px}.chosen-rtl.chosen-container-single.chosen-with-drop .chosen-single div b{background-position:-12px 2px}@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (min-resolution:144dpi),only screen and (min-resolution:1.5dppx){.chosen-container .chosen-results-scroll-down span,.chosen-container .chosen-results-scroll-up span,.chosen-container-multi .chosen-choices .search-choice .search-choice-close,.chosen-container-single .chosen-search input[type=text],.chosen-container-single .chosen-single abbr,.chosen-container-single .chosen-single div b,.chosen-rtl .chosen-search input[type=text]{background-image:url(chosen-sprite@2x.png)!important;background-size:52px 37px!important;background-repeat:no-repeat!important}}

+ 2 - 0
css/index.php

@@ -0,0 +1,2 @@
+<?php
+header("Location: ../../../index.php");

+ 675 - 0
css/ion.rangeSlider.css

@@ -0,0 +1,675 @@
+/**
+Ion.RangeSlider, 2.3.1
+© Denis Ineshin, 2010 - 2019, IonDen.com
+Build date: 2019-12-19 16:51:02
+*/
+.irs {
+  position: relative;
+  display: block;
+  -webkit-touch-callout: none;
+  -webkit-user-select: none;
+  -khtml-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+  font-size: 12px;
+  font-family: Arial, sans-serif;
+}
+.irs-line {
+  position: relative;
+  display: block;
+  overflow: hidden;
+  outline: none !important;
+}
+.irs-bar {
+  position: absolute;
+  display: block;
+  left: 0;
+  width: 0;
+}
+.irs-shadow {
+  position: absolute;
+  display: none;
+  left: 0;
+  width: 0;
+}
+.irs-handle {
+  position: absolute;
+  display: block;
+  box-sizing: border-box;
+  cursor: default;
+  z-index: 1;
+}
+.irs-handle.type_last {
+  z-index: 2;
+}
+.irs-min,
+.irs-max {
+  position: absolute;
+  display: block;
+  cursor: default;
+}
+.irs-min {
+  left: 0;
+}
+.irs-max {
+  right: 0;
+}
+.irs-from,
+.irs-to,
+.irs-single {
+  position: absolute;
+  display: block;
+  top: 0;
+  left: 0;
+  cursor: default;
+  white-space: nowrap;
+}
+.irs-grid {
+  position: absolute;
+  display: none;
+  bottom: 0;
+  left: 0;
+  width: 100%;
+  height: 20px;
+}
+.irs-with-grid .irs-grid {
+  display: block;
+}
+.irs-grid-pol {
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 1px;
+  height: 8px;
+  background: #000;
+}
+.irs-grid-pol.small {
+  height: 4px;
+}
+.irs-grid-text {
+  position: absolute;
+  bottom: 0;
+  left: 0;
+  white-space: nowrap;
+  text-align: center;
+  font-size: 9px;
+  line-height: 9px;
+  padding: 0 3px;
+  color: #000;
+}
+.irs-disable-mask {
+  position: absolute;
+  display: block;
+  top: 0;
+  left: -1%;
+  width: 102%;
+  height: 100%;
+  cursor: default;
+  background: rgba(0, 0, 0, 0);
+  z-index: 2;
+}
+.lt-ie9 .irs-disable-mask {
+  background: #000;
+  filter: alpha(opacity=0);
+  cursor: not-allowed;
+}
+.irs-disabled {
+  opacity: 0.4;
+}
+.irs-hidden-input {
+  position: absolute !important;
+  display: block !important;
+  top: 0 !important;
+  left: 0 !important;
+  width: 0 !important;
+  height: 0 !important;
+  font-size: 0 !important;
+  line-height: 0 !important;
+  padding: 0 !important;
+  margin: 0 !important;
+  overflow: hidden;
+  outline: none !important;
+  z-index: -9999 !important;
+  background: none !important;
+  border-style: solid !important;
+  border-color: transparent !important;
+}
+.irs--flat {
+  height: 40px;
+}
+.irs--flat.irs-with-grid {
+  height: 60px;
+}
+.irs--flat .irs-line {
+  top: 25px;
+  height: 12px;
+  background-color: #e1e4e9;
+  border-radius: 4px;
+}
+.irs--flat .irs-bar {
+  top: 25px;
+  height: 12px;
+  background-color: #ed5565;
+}
+.irs--flat .irs-bar--single {
+  border-radius: 4px 0 0 4px;
+}
+.irs--flat .irs-shadow {
+  height: 1px;
+  bottom: 16px;
+  background-color: #e1e4e9;
+}
+.irs--flat .irs-handle {
+  top: 22px;
+  width: 16px;
+  height: 18px;
+  background-color: transparent;
+}
+.irs--flat .irs-handle > i:first-child {
+  position: absolute;
+  display: block;
+  top: 0;
+  left: 50%;
+  width: 2px;
+  height: 100%;
+  margin-left: -1px;
+  background-color: #da4453;
+}
+.irs--flat .irs-handle.state_hover > i:first-child,
+.irs--flat .irs-handle:hover > i:first-child {
+  background-color: #a43540;
+}
+.irs--flat .irs-min,
+.irs--flat .irs-max {
+  top: 0;
+  padding: 1px 3px;
+  color: #999;
+  font-size: 10px;
+  line-height: 1.333;
+  text-shadow: none;
+  background-color: #e1e4e9;
+  border-radius: 4px;
+}
+.irs--flat .irs-from,
+.irs--flat .irs-to,
+.irs--flat .irs-single {
+  color: white;
+  font-size: 10px;
+  line-height: 1.333;
+  text-shadow: none;
+  padding: 1px 5px;
+  background-color: #ed5565;
+  border-radius: 4px;
+}
+.irs--flat .irs-from:before,
+.irs--flat .irs-to:before,
+.irs--flat .irs-single:before {
+  position: absolute;
+  display: block;
+  content: "";
+  bottom: -6px;
+  left: 50%;
+  width: 0;
+  height: 0;
+  margin-left: -3px;
+  overflow: hidden;
+  border: 3px solid transparent;
+  border-top-color: #ed5565;
+}
+.irs--flat .irs-grid-pol {
+  background-color: #e1e4e9;
+}
+.irs--flat .irs-grid-text {
+  color: #999;
+}
+.irs--big {
+  height: 55px;
+}
+.irs--big.irs-with-grid {
+  height: 70px;
+}
+.irs--big .irs-line {
+  top: 33px;
+  height: 12px;
+  background-color: white;
+  background: linear-gradient(to bottom, #ddd -50%, white 150%);
+  border: 1px solid #ccc;
+  border-radius: 12px;
+}
+.irs--big .irs-bar {
+  top: 33px;
+  height: 12px;
+  background-color: #92bce0;
+  border: 1px solid #428bca;
+  background: linear-gradient(to bottom, #ffffff 0%, #428bca 30%, #b9d4ec 100%);
+  box-shadow: inset 0 0 1px 1px rgba(255, 255, 255, 0.5);
+}
+.irs--big .irs-bar--single {
+  border-radius: 12px 0 0 12px;
+}
+.irs--big .irs-shadow {
+  height: 1px;
+  bottom: 16px;
+  background-color: rgba(66, 139, 202, 0.5);
+}
+.irs--big .irs-handle {
+  top: 25px;
+  width: 30px;
+  height: 30px;
+  border: 1px solid rgba(0, 0, 0, 0.3);
+  background-color: #cbcfd5;
+  background: linear-gradient(to bottom, white 0%, #B4B9BE 30%, white 100%);
+  box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.2), inset 0 0 3px 1px white;
+  border-radius: 30px;
+}
+.irs--big .irs-handle.state_hover,
+.irs--big .irs-handle:hover {
+  border-color: rgba(0, 0, 0, 0.45);
+  background-color: #939ba7;
+  background: linear-gradient(to bottom, white 0%, #919BA5 30%, white 100%);
+}
+.irs--big .irs-min,
+.irs--big .irs-max {
+  top: 0;
+  padding: 1px 5px;
+  color: white;
+  text-shadow: none;
+  background-color: #9f9f9f;
+  border-radius: 3px;
+}
+.irs--big .irs-from,
+.irs--big .irs-to,
+.irs--big .irs-single {
+  color: white;
+  text-shadow: none;
+  padding: 1px 5px;
+  background-color: #428bca;
+  background: linear-gradient(to bottom, #428bca 0%, #3071a9 100%);
+  border-radius: 3px;
+}
+.irs--big .irs-grid-pol {
+  background-color: #428bca;
+}
+.irs--big .irs-grid-text {
+  color: #428bca;
+}
+.irs--modern {
+  height: 55px;
+}
+.irs--modern.irs-with-grid {
+  height: 55px;
+}
+.irs--modern .irs-line {
+  top: 25px;
+  height: 5px;
+  background-color: #d1d6e0;
+  background: linear-gradient(to bottom, #e0e4ea 0%, #d1d6e0 100%);
+  border: 1px solid #a3adc1;
+  border-bottom-width: 0;
+  border-radius: 5px;
+}
+.irs--modern .irs-bar {
+  top: 25px;
+  height: 5px;
+  background: #20b426;
+  background: linear-gradient(to bottom, #20b426 0%, #18891d 100%);
+}
+.irs--modern .irs-bar--single {
+  border-radius: 5px 0 0 5px;
+}
+.irs--modern .irs-shadow {
+  height: 1px;
+  bottom: 21px;
+  background-color: rgba(209, 214, 224, 0.5);
+}
+.irs--modern .irs-handle {
+  top: 37px;
+  width: 12px;
+  height: 13px;
+  border: 1px solid #a3adc1;
+  border-top-width: 0;
+  box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.1);
+  border-radius: 0 0 3px 3px;
+}
+.irs--modern .irs-handle > i:nth-child(1) {
+  position: absolute;
+  display: block;
+  top: -4px;
+  left: 1px;
+  width: 6px;
+  height: 6px;
+  border: 1px solid #a3adc1;
+  background: white;
+  transform: rotate(45deg);
+}
+.irs--modern .irs-handle > i:nth-child(2) {
+  position: absolute;
+  display: block;
+  box-sizing: border-box;
+  top: 0;
+  left: 0;
+  width: 10px;
+  height: 12px;
+  background: #e9e6e6;
+  background: linear-gradient(to bottom, white 0%, #e9e6e6 100%);
+  border-radius: 0 0 3px 3px;
+}
+.irs--modern .irs-handle > i:nth-child(3) {
+  position: absolute;
+  display: block;
+  box-sizing: border-box;
+  top: 3px;
+  left: 3px;
+  width: 4px;
+  height: 5px;
+  border-left: 1px solid #a3adc1;
+  border-right: 1px solid #a3adc1;
+}
+.irs--modern .irs-handle.state_hover,
+.irs--modern .irs-handle:hover {
+  border-color: #7685a2;
+  background: #c3c7cd;
+  background: linear-gradient(to bottom, #ffffff 0%, #919ba5 30%, #ffffff 100%);
+}
+.irs--modern .irs-handle.state_hover > i:nth-child(1),
+.irs--modern .irs-handle:hover > i:nth-child(1) {
+  border-color: #7685a2;
+}
+.irs--modern .irs-handle.state_hover > i:nth-child(3),
+.irs--modern .irs-handle:hover > i:nth-child(3) {
+  border-color: #48536a;
+}
+.irs--modern .irs-min,
+.irs--modern .irs-max {
+  top: 0;
+  font-size: 10px;
+  line-height: 1.333;
+  text-shadow: none;
+  padding: 1px 5px;
+  color: white;
+  background-color: #d1d6e0;
+  border-radius: 5px;
+}
+.irs--modern .irs-from,
+.irs--modern .irs-to,
+.irs--modern .irs-single {
+  font-size: 10px;
+  line-height: 1.333;
+  text-shadow: none;
+  padding: 1px 5px;
+  background-color: #20b426;
+  color: white;
+  border-radius: 5px;
+}
+.irs--modern .irs-from:before,
+.irs--modern .irs-to:before,
+.irs--modern .irs-single:before {
+  position: absolute;
+  display: block;
+  content: "";
+  bottom: -6px;
+  left: 50%;
+  width: 0;
+  height: 0;
+  margin-left: -3px;
+  overflow: hidden;
+  border: 3px solid transparent;
+  border-top-color: #20b426;
+}
+.irs--modern .irs-grid {
+  height: 25px;
+}
+.irs--modern .irs-grid-pol {
+  background-color: #dedede;
+}
+.irs--modern .irs-grid-text {
+  color: silver;
+  font-size: 13px;
+}
+.irs--sharp {
+  height: 50px;
+  font-size: 12px;
+  line-height: 1;
+}
+.irs--sharp.irs-with-grid {
+  height: 57px;
+}
+.irs--sharp .irs-line {
+  top: 30px;
+  height: 2px;
+  background-color: black;
+  border-radius: 2px;
+}
+.irs--sharp .irs-bar {
+  top: 30px;
+  height: 2px;
+  background-color: #ee22fa;
+}
+.irs--sharp .irs-bar--single {
+  border-radius: 2px 0 0 2px;
+}
+.irs--sharp .irs-shadow {
+  height: 1px;
+  bottom: 21px;
+  background-color: rgba(0, 0, 0, 0.5);
+}
+.irs--sharp .irs-handle {
+  top: 25px;
+  width: 10px;
+  height: 10px;
+  background-color: #a804b2;
+}
+.irs--sharp .irs-handle > i:first-child {
+  position: absolute;
+  display: block;
+  top: 100%;
+  left: 0;
+  width: 0;
+  height: 0;
+  border: 5px solid transparent;
+  border-top-color: #a804b2;
+}
+.irs--sharp .irs-handle.state_hover,
+.irs--sharp .irs-handle:hover {
+  background-color: black;
+}
+.irs--sharp .irs-handle.state_hover > i:first-child,
+.irs--sharp .irs-handle:hover > i:first-child {
+  border-top-color: black;
+}
+.irs--sharp .irs-min,
+.irs--sharp .irs-max {
+  color: white;
+  font-size: 14px;
+  line-height: 1;
+  top: 0;
+  padding: 3px 4px;
+  opacity: 0.4;
+  background-color: #a804b2;
+  border-radius: 2px;
+}
+.irs--sharp .irs-from,
+.irs--sharp .irs-to,
+.irs--sharp .irs-single {
+  font-size: 14px;
+  line-height: 1;
+  text-shadow: none;
+  padding: 3px 4px;
+  background-color: #a804b2;
+  color: white;
+  border-radius: 2px;
+}
+.irs--sharp .irs-from:before,
+.irs--sharp .irs-to:before,
+.irs--sharp .irs-single:before {
+  position: absolute;
+  display: block;
+  content: "";
+  bottom: -6px;
+  left: 50%;
+  width: 0;
+  height: 0;
+  margin-left: -3px;
+  overflow: hidden;
+  border: 3px solid transparent;
+  border-top-color: #a804b2;
+}
+.irs--sharp .irs-grid {
+  height: 25px;
+}
+.irs--sharp .irs-grid-pol {
+  background-color: #dedede;
+}
+.irs--sharp .irs-grid-text {
+  color: silver;
+  font-size: 13px;
+}
+.irs--round {
+  height: 50px;
+}
+.irs--round.irs-with-grid {
+  height: 65px;
+}
+.irs--round .irs-line {
+  top: 36px;
+  height: 4px;
+  background-color: #dee4ec;
+  border-radius: 4px;
+}
+.irs--round .irs-bar {
+  top: 36px;
+  height: 4px;
+  background-color: #006cfa;
+}
+.irs--round .irs-bar--single {
+  border-radius: 4px 0 0 4px;
+}
+.irs--round .irs-shadow {
+  height: 4px;
+  bottom: 21px;
+  background-color: rgba(222, 228, 236, 0.5);
+}
+.irs--round .irs-handle {
+  top: 26px;
+  width: 24px;
+  height: 24px;
+  border: 4px solid #006cfa;
+  background-color: white;
+  border-radius: 24px;
+  box-shadow: 0 1px 3px rgba(0, 0, 255, 0.3);
+}
+.irs--round .irs-handle.state_hover,
+.irs--round .irs-handle:hover {
+  background-color: #f0f6ff;
+}
+.irs--round .irs-min,
+.irs--round .irs-max {
+  color: #333;
+  font-size: 14px;
+  line-height: 1;
+  top: 0;
+  padding: 3px 5px;
+  background-color: rgba(0, 0, 0, 0.1);
+  border-radius: 4px;
+}
+.irs--round .irs-from,
+.irs--round .irs-to,
+.irs--round .irs-single {
+  font-size: 14px;
+  line-height: 1;
+  text-shadow: none;
+  padding: 3px 5px;
+  background-color: #006cfa;
+  color: white;
+  border-radius: 4px;
+}
+.irs--round .irs-from:before,
+.irs--round .irs-to:before,
+.irs--round .irs-single:before {
+  position: absolute;
+  display: block;
+  content: "";
+  bottom: -6px;
+  left: 50%;
+  width: 0;
+  height: 0;
+  margin-left: -3px;
+  overflow: hidden;
+  border: 3px solid transparent;
+  border-top-color: #006cfa;
+}
+.irs--round .irs-grid {
+  height: 25px;
+}
+.irs--round .irs-grid-pol {
+  background-color: #dedede;
+}
+.irs--round .irs-grid-text {
+  color: silver;
+  font-size: 13px;
+}
+.irs--square {
+  height: 50px;
+}
+.irs--square.irs-with-grid {
+  height: 60px;
+}
+.irs--square .irs-line {
+  top: 31px;
+  height: 4px;
+  background-color: #dedede;
+}
+.irs--square .irs-bar {
+  top: 31px;
+  height: 4px;
+  background-color: black;
+}
+.irs--square .irs-shadow {
+  height: 2px;
+  bottom: 21px;
+  background-color: #dedede;
+}
+.irs--square .irs-handle {
+  top: 25px;
+  width: 16px;
+  height: 16px;
+  border: 3px solid black;
+  background-color: white;
+  -webkit-transform: rotate(45deg);
+  -ms-transform: rotate(45deg);
+  transform: rotate(45deg);
+}
+.irs--square .irs-handle.state_hover,
+.irs--square .irs-handle:hover {
+  background-color: #f0f6ff;
+}
+.irs--square .irs-min,
+.irs--square .irs-max {
+  color: #333;
+  font-size: 14px;
+  line-height: 1;
+  top: 0;
+  padding: 3px 5px;
+  background-color: rgba(0, 0, 0, 0.1);
+}
+.irs--square .irs-from,
+.irs--square .irs-to,
+.irs--square .irs-single {
+  font-size: 14px;
+  line-height: 1;
+  text-shadow: none;
+  padding: 3px 5px;
+  background-color: black;
+  color: white;
+}
+.irs--square .irs-grid {
+  height: 25px;
+}
+.irs--square .irs-grid-pol {
+  background-color: #dedede;
+}
+.irs--square .irs-grid-text {
+  color: silver;
+  font-size: 11px;
+}

Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
css/ion.rangeSlider.min.css


+ 7 - 0
css/style.css

@@ -0,0 +1,7 @@
+/*!
+*---------------------------------------------------------------------------------------------------------
+// Responsive Order Forms - | (c) 2019 ThemeMetro.com
+// License: You must have a valid license purchased in order to legally use the theme for your project.
+// Author - ThemeMetro 
+*---------------------------------------------------------------------------------------------------------
+*/.padding-all{padding:15px}.padding-2x{padding:30px}#order-standard_cart .categories-collapsed{background-color:transparent;padding:0;margin-top:0}#order-standard_cart .categories-collapsed select{color:#000;background:#f5f5f5;border:1px solid #ddd;-webkit-box-shadow:none !important;box-shadow:none !important}#order-standard_cart .categories-collapsed .field-icon .fa{color:#f0ad4e}#order-standard_cart label{font-weight:normal;font-size:14px;color:#000}#order-standard_cart .product-info{background-color:#d9edf7;border:1px solid #bce8f1}@media (min-width:768px){#order-standard_cart .addon-products{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}#order-standard_cart .addon-products div[class*=col-]{display:-webkit-box;display:-ms-flexbox;display:flex}}#order-standard_cart .panel-addon{width:100%;text-align:left;font-size:14px}#order-standard_cart .panel-addon .panel-body .icheckbox_square-blue{margin-right:4px}#order-standard_cart .panel-addon .panel-body .panel-addon-name{font-weight:500;font-size:16px}#order-standard_cart .panel-addon .panel-body .panel-addon-price{display:block;margin:5px 0 10px}#order-standard_cart .panel-addon .panel-body label{font-size:120%}#order-standard_cart .panel-addon.panel-addon-selected{background-color:#edf0f5}#order-standard_cart .view-cart-items-header,#order-standard_cart .empty-cart .btn{background-color:#333 !important}#order-standard_cart .view-cart-items{border-color:#333}#order-standard_cart .view-cart-items .item-title{font-weight:700}#order-standard_cart .empty-cart{margin:-20px 20px 20px 0}#order-standard_cart .order-summary{background-color:#333;border-bottom-color:#333}#order-standard_cart .btn-link{background-color:transparent !important;border:0 none !important;-webkit-box-shadow:none !important;box-shadow:none !important;color:#0273d4}#order-standard_cart .btn-link .fa{margin-right:0}#order-standard_cart .view-cart-tabs .nav-tabs{margin-bottom:0}#order-standard_cart .view-cart-tabs .btn-block{width:100%}#order-standard_cart .sub-heading{margin-bottom:60px;margin-top:30px;border:0 none;position:relative;z-index:1;text-align:center}#order-standard_cart .sub-heading :first-child{display:inline-block;background:#777;padding:2px 8px;color:#fff}#order-standard_cart .sub-heading:before{content:"";display:block;position:absolute;z-index:-1;top:50%;left:0;right:0;border:0;height:1px;background:-webkit-gradient(linear, left top, right top, from(rgba(0,0,0,0)), color-stop(rgba(0,0,0,0.25)), to(rgba(0,0,0,0)));background:linear-gradient(to right, rgba(0,0,0,0), rgba(0,0,0,0.25), rgba(0,0,0,0))}#order-standard_cart .btn{margin-top:0}#order-standard_cart .btn.btn-block{width:100%}#order-standard_cart .spotlight-tlds{background-color:transparent}#order-standard_cart .spotlight-tld{background-color:#f5f5f5;border-radius:0}#order-standard_cart .spotlight-tld.spotlight-tld-new{background-color:#0273d4;border-color:#0258a1}#order-standard_cart .spotlight-tld.spotlight-tld-hot{background-color:#d9534f;border-color:#c9302c}#order-standard_cart .spotlight-tld.spotlight-tld-sale{background-color:#f0ad4e;border-color:#ec971f}#order-standard_cart .spotlight-tld.spotlight-tld-new .btn,#order-standard_cart .spotlight-tld.spotlight-tld-hot .btn,#order-standard_cart .spotlight-tld.spotlight-tld-sale .btn{width:auto;max-width:88px}@media (max-width:767px){#order-standard_cart .spotlight-tld.spotlight-tld-new,#order-standard_cart .spotlight-tld.spotlight-tld-hot,#order-standard_cart .spotlight-tld.spotlight-tld-sale{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}#order-standard_cart .spotlight-tld .btn.domain-contact-support{margin:21px 0}@media (min-width:992px){#order-standard_cart .cart-sum{position:absolute;right:0}}@media (max-width:991px){#order-standard_cart .cart-sum{top:0 !important;position:static !important}}.cart-features{margin-top:55px}.cart-features .head-area{margin-top:4px;position:relative;z-index:1;text-align:center}.cart-features .head-area :first-child{display:inline-block;background:#000;padding:2px 8px;color:#eee}.cart-features .head-area:before{content:"";display:block;position:absolute;z-index:-1;top:50%;left:0;right:0;border:0;height:1px;background:-webkit-gradient(linear, left top, right top, from(rgba(0,0,0,0)), color-stop(rgba(0,0,0,0.25)), to(rgba(0,0,0,0)));background:linear-gradient(to right, rgba(0,0,0,0), rgba(0,0,0,0.25), rgba(0,0,0,0))}.cart-features .includes-features{margin:0 auto;width:100%;max-width:980px;padding-bottom:55px}.cart-features .includes-features ul.list-features{padding:20px 0 0 0;margin:0 0 0 0;list-style:none}.cart-features .includes-features ul.list-features li{padding:0 0 0 22px;margin:5px 0;width:33%;display:inline-table}.cart-features .includes-features ul.list-features li:before{content:"\f00c";margin-right:4px;font-family:"Font Awesome 5 Pro";color:#0273d4;font-weight:900}hr.separator{clear:both;margin-top:10px;margin-bottom:13px;border:0;height:1px;background:-webkit-gradient(linear, left top, right top, from(rgba(0,0,0,0)), color-stop(rgba(0,0,0,0.25)), to(rgba(0,0,0,0)));background:linear-gradient(to right, rgba(0,0,0,0), rgba(0,0,0,0.25), rgba(0,0,0,0))}@media (max-width:991px){.cart-features .includes-features ul.list-features li{width:48%}}@media (max-width:480px){.cart-features .includes-features ul.list-features li{width:100%}}#order-standard_cart{padding:0 0 15px 0}#order-standard_cart .modal-body,#order-standard_cart .modal-footer,#order-standard_cart .modal-header{text-align:left !important}#order-standard_cart .modal-footer{padding-bottom:15px !important;border-top:1px solid #d5dce5}#order-standard_cart .input-group-addon,#order-standard_cart .field[disabled],#order-standard_cart .field[readonly],#order-standard_cart .form-control[disabled],#order-standard_cart .form-control[readonly]{background-color:#edf0f5}#order-standard_cart .summary-container{background-color:#edf0f5}#order-standard_cart .prepend-icon .field-icon{line-height:43px}#order-standard_cart .products .product{position:relative;border:1px solid #d5dce5;background-color:#edf0f5;border-radius:4px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding:20px}#order-standard_cart .products .product h4{margin-top:0}#order-standard_cart .products .product .product-body{-webkit-box-flex:1;-ms-flex:1 0 auto;flex:1 0 auto}#order-standard_cart .products .product .product-options{padding:30px 0 0}#order-standard_cart .products .product .product-options select{padding:0 15px}#order-standard_cart .products .product .product-addon-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-top:auto;padding-top:15px;border-top:1px solid #d5dce5}#order-standard_cart .products .product .product-addon-footer .product-pricing{margin-bottom:0 !important}#order-standard_cart .products .product .product-addon-footer .product-actions{margin-top:auto;margin-left:auto}#order-standard_cart .domain-selection-options .option{background-color:#fff}#order-standard_cart .domain-selection-options .option.option-selected{background-color:#edf0f5}#order-standard_cart .domain-pricing{margin-bottom:35px}#order-standard_cart .panel.domain-promo{background-color:#fff;position:relative;overflow:hidden;margin-top:20px}#order-standard_cart .panel.domain-promo h3,#order-standard_cart .panel.domain-promo h4{margin:0}#order-standard_cart .panel.domain-promo .icon{position:absolute;top:15;right:15px}#order-standard_cart .panel.domain-promo .icon .fas,#order-standard_cart .panel.domain-promo .icon .far,#order-standard_cart .panel.domain-promo .icon .fal{font-size:90px}#order-standard_cart .panel.domain-promo .btn{margin-bottom:10px}#order-standard_cart .domain-renewals{border:0 none !important;margin:0}#order-standard_cart .domain-renewals .domain-renewal{border:1px solid #d5dce5 !important;margin:0 0 20px}#order-standard_cart .domain-renewals .domain-renewal .control-label{font-size:90%;color:#777}#order-standard_cart .domain-renewals .domain-renewal .form-group{margin-top:15px}#order-standard_cart .view-cart-items .item:nth-child(even){background-color:#edf0f5}@media only screen and (min-width:768px){#order-standard_cart #orderSummary span.pull-right{display:block}}#order-standard_cart .addon-promo-container{background-color:#f8f8f8}#order-standard_cart .addon-promo-container h3{font-size:21px;text-transform:none;font-weight:700}#order-standard_cart .promo-cart{background-color:#f8f8f8}#order-standard_cart .promo-cart:first-child{margin-top:60px}#order-standard_cart .promo-cart h3,#order-standard_cart .promo-cart h4{text-transform:none;font-weight:700}#order-standard_cart .promo-cart h3{font-size:18px;margin-bottom:30px}#order-standard_cart .promo-cart h4{font-size:14px;color:#393939;font-family:'Open Sans',sans-serif;line-height:1.42857143}.TM-categories-options{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}@media (max-width:633px){.TM-categories-options{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.TM-categories-options form{width:100%}}#order-standard_cart .form-control,#order-standard_cart .field,#order-standard_cart seclect{height:43px;border-color:#d5dce5;font-size:14px}#order-standard_cart .cc-input-container .input-group .btn{height:43px}#order-standard_cart .cart-features .includes-features{padding-bottom:0}

+ 3 - 0
css/tiny-slider.css

@@ -0,0 +1,3 @@
+.tns-outer{padding:0 !important}.tns-outer [hidden]{display:none !important}.tns-outer [aria-controls],.tns-outer [data-action]{cursor:pointer}.tns-slider{-webkit-transition:all 0s;-moz-transition:all 0s;transition:all 0s}.tns-slider>.tns-item{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.tns-horizontal.tns-subpixel{white-space:nowrap}.tns-horizontal.tns-subpixel>.tns-item{display:inline-block;vertical-align:top;white-space:normal}.tns-horizontal.tns-no-subpixel:after{content:'';display:table;clear:both}.tns-horizontal.tns-no-subpixel>.tns-item{float:left}.tns-horizontal.tns-carousel.tns-no-subpixel>.tns-item{margin-right:-100%}.tns-no-calc{position:relative;left:0}.tns-gallery{position:relative;left:0;min-height:1px}.tns-gallery>.tns-item{position:absolute;left:-100%;-webkit-transition:transform 0s, opacity 0s;-moz-transition:transform 0s, opacity 0s;transition:transform 0s, opacity 0s}.tns-gallery>.tns-slide-active{position:relative;left:auto !important}.tns-gallery>.tns-moving{-webkit-transition:all 0.25s;-moz-transition:all 0.25s;transition:all 0.25s}.tns-autowidth{display:inline-block}.tns-lazy-img{-webkit-transition:opacity 0.6s;-moz-transition:opacity 0.6s;transition:opacity 0.6s;opacity:0.6}.tns-lazy-img.tns-complete{opacity:1}.tns-ah{-webkit-transition:height 0s;-moz-transition:height 0s;transition:height 0s}.tns-ovh{overflow:hidden}.tns-visually-hidden{position:absolute;left:-10000em}.tns-transparent{opacity:0;visibility:hidden}.tns-fadeIn{opacity:1;filter:alpha(opacity=100);z-index:0}.tns-normal,.tns-fadeOut{opacity:0;filter:alpha(opacity=0);z-index:-1}.tns-vpfix{white-space:nowrap}.tns-vpfix>div,.tns-vpfix>li{display:inline-block}.tns-t-subp2{margin:0 auto;width:310px;position:relative;height:10px;overflow:hidden}.tns-t-ct{width:2333.3333333%;width:-webkit-calc(100% * 70 / 3);width:-moz-calc(100% * 70 / 3);width:calc(100% * 70 / 3);position:absolute;right:0}.tns-t-ct:after{content:'';display:table;clear:both}.tns-t-ct>div{width:1.4285714%;width:-webkit-calc(100% / 70);width:-moz-calc(100% / 70);width:calc(100% / 70);height:10px;float:left}
+
+

+ 209 - 0
domain-renewals.tpl

@@ -0,0 +1,209 @@
+{include file="orderforms/{$carttpl}/common.tpl"}
+
+
+{if file_exists("templates/orderforms/{$carttpl}/layouts/head.tpl")}
+	{include file="templates/orderforms/{$carttpl}/layouts/head.tpl"}
+{/if}
+
+<div id="order-standard_cart">
+    <div class="row">
+
+        <div class="col-md-12">
+			{if file_exists("templates/orderforms/{$carttpl}/layouts/head.tpl")}
+			{else}
+            <div class="header-lined">
+                <h1>
+                    {if $totalResults > 1}{lang key='domainrenewals'}{else}{lang key='domainrenewal'}{/if}
+                    {if $totalResults > 5}
+                        <div class="pull-right">
+                            <input id="domainRenewalFilter" type="search" class="domain-renewals-filter form-control input-inline-100" placeholder="{lang key='searchenterdomain'}">
+                        </div>
+                    {/if}
+                </h1>
+            </div>
+			{/if}
+
+        </div>
+
+        <div class="col-md-12">
+
+            {include file="orderforms/{$carttpl}/sidebar-categories-collapsed.tpl"}
+
+            {if $totalDomainCount == 0}
+                <div id="no-domains" class="alert alert-warning text-center" role="alert">
+                    {$LANG.domainRenewal.noDomains}
+                </div>
+                <p class="text-center">
+                    <a href="clientarea.php" class="btn btn-default">
+                        <i class="fas fa-arrow-circle-left"></i>
+                        {$LANG.orderForm.returnToClientArea}
+                    </a>
+                </p>
+            {else}
+                <div class="row ajaxcart_cont">
+                    <div class="col-md-8 col-lg-9">
+                        {if $totalResults < $totalDomainCount}
+                            <div class="text-center">
+                                {lang key='domainRenewal.showingDomains' showing=$totalResults totalCount=$totalDomainCount}
+                                <a id="linkShowAll" href="{routePath('cart-domain-renewals')}">{lang key='domainRenewal.showAll'}</a>
+                            </div>
+                        {/if}
+
+                        <div id="domainRenewals" class="domain-renewals">
+                            {foreach $renewalsData as $renewalData}
+                                <div class="domain-renewal card bg-white p-0" data-domain="{$renewalData.domain}">
+                                    <div class="card-body p-3">
+										<div class="pull-right text-right">
+											{if !$renewalData.eligibleForRenewal}
+												<span class="label label-info">
+													{lang key='domainRenewal.unavailable'}
+												</span>
+											{elseif ($renewalData.pastGracePeriod && $renewalData.pastRedemptionGracePeriod)}
+												<span class="label label-info">
+													{lang key='domainrenewalspastgraceperiod'}
+												</span>
+											{elseif !$renewalData.beforeRenewLimit && $renewalData.daysUntilExpiry > 0}
+												<span class="label label-{if $renewalData.daysUntilExpiry > 30}success{else}warning{/if}">
+													{lang key='domainRenewal.expiringIn' days=$renewalData.daysUntilExpiry}
+												</span>
+											{elseif $renewalData.daysUntilExpiry === 0}
+												<span class="label label-grey">
+													{lang key='expiresToday'}
+												</span>
+											{elseif $renewalData.beforeRenewLimit}
+												<span class="label label-info">
+													{lang key='domainRenewal.maximumAdvanceRenewal' days=$renewalData.beforeRenewLimitDays}
+												</span>
+											{else}
+												<span class="label label-danger">
+													{lang key='domainRenewal.expiredDaysAgo' days=$renewalData.daysUntilExpiry*-1}
+												</span>
+											{/if}
+										</div>
+
+										<h4 class="m-0">{$renewalData.domain}</h4>
+										<p class="small text-muted">{lang key='clientareadomainexpirydate'}: {$renewalData.expiryDate->format('j M Y')} ({$renewalData.expiryDate->diffForHumans()})</p>
+
+										{if ($renewalData.pastGracePeriod && $renewalData.pastRedemptionGracePeriod) || !count($renewalData.renewalOptions)}
+										{else}
+										<form>
+											<div class="form-group row">
+												<label for="renewalPricing{$renewalData.id}" class="control-label col-md-5">
+													{lang key='domainRenewal.availablePeriods'}
+													{if $renewalData.inGracePeriod || $renewalData.inRedemptionGracePeriod}
+														*
+													{/if}
+												</label>
+												<div class="col-sm-12">
+													<select class="form-control select-renewal-pricing" id="renewalPricing{$renewalData.id}" data-domain-id="{$renewalData.id}">
+														{foreach $renewalData.renewalOptions as $renewalOption}
+															<option value="{$renewalOption.period}">
+																{$renewalOption.period} {lang key='orderyears'} @ {$renewalOption.rawRenewalPrice}
+																{if $renewalOption.gracePeriodFee && $renewalOption.gracePeriodFee->toNumeric() != 0.00}
+																	+ {$renewalOption.gracePeriodFee} {lang key='domainRenewal.graceFee'}
+																{/if}
+																{if $renewalOption.redemptionGracePeriodFee && $renewalOption.redemptionGracePeriodFee->toNumeric() != 0.00}
+																	+ {$renewalOption.redemptionGracePeriodFee} {lang key='domainRenewal.redemptionFee'}
+																{/if}
+															</option>
+														{/foreach}
+													</select>
+												</div>
+											</div>
+										</form>
+										{/if}
+									</div>
+                                    <div class="card-footer pull-right text-right">
+                                        {if !$renewalData.eligibleForRenewal || $renewalData.beforeRenewLimit || ($renewalData.pastGracePeriod && $renewalData.pastRedemptionGracePeriod)}
+                                        {else}
+                                            <button id="renewDomain{$renewalData.id}" class="btn btn-primary btn-sm btn-add-renewal-to-cart" data-domain-id="{$renewalData.id}">
+                                                <span class="to-add">
+                                                    <i class="fas fa-fw fa-spinner fa-spin"></i>
+                                                    {lang key='addtocart'}
+                                                </span>
+                                                <span class="added">{lang key='domaincheckeradded'}</span>
+                                            </button>
+                                        {/if}
+                                    </div>
+                                </div>
+                            {/foreach}
+                        </div>
+
+						{if $hasDomainsInGracePeriod}
+							<div class="text-muted">
+								 * {lang key='domainRenewal.graceRenewalPeriodDescription'}
+							</div>
+						{/if}
+                    </div>
+
+                    <div class="col-md-4 col-lg-3">
+						<div  id="sidebar">
+							<div class="sidebar__inner blocks cartsummary">
+								<div>
+									<div class="order-summary">
+										<div class="loader" id="orderSummaryLoader">
+											<i class="fas fa-fw fa-sync fa-spin"></i>
+										</div>
+										<h2>{lang key='ordersummary'}</h2>
+										<div class="summary-container" id="producttotal"></div>
+									</div>
+									<div class="text-center">
+										<a id="btnGoToCart" class="btn btn-primary btn-lg" href="{$WEB_ROOT}/cart.php?a=view">
+											{lang key='viewcart'}
+											<i class="far fa-shopping-cart"></i>
+										</a>
+									</div>
+								</div>
+							</div>
+						</div>
+                    </div>
+                </div>
+            {/if}
+        </div>
+    </div>
+    <form id="removeRenewalForm" method="post" action="{$WEB_ROOT}/cart.php">
+        <input type="hidden" name="a" value="remove" />
+        <input type="hidden" name="r" value="" id="inputRemoveItemType" />
+        <input type="hidden" name="i" value="" id="inputRemoveItemRef" />
+        <div class="modal fade modal-remove-item" id="modalRemoveItem" tabindex="-1" role="dialog">
+            <div class="modal-dialog" role="document">
+                <div class="modal-content">
+                    <div class="modal-header d-block">
+                        <h4 class="modal-title m-0">
+                            <button type="button" class="close" data-dismiss="modal" aria-label="{lang key='orderForm.close'}">
+                                <span aria-hidden="true">&times;</span>
+                            </button>
+                            <span>{lang key='orderForm.removeItem'}</span>
+                        </h4>
+                    </div>
+                    <div class="modal-body">
+                        {lang key='cartremoveitemconfirm'}
+                    </div>
+                    <div class="modal-footer d-block">
+                        <button type="button" class="btn btn-default" data-dismiss="modal">{lang key='no'}</button>
+                        <button type="submit" class="btn btn-primary">{lang key='yes'}</button>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </form>
+</div>
+
+{if file_exists("templates/orderforms/{$carttpl}/layouts/foot.tpl")}
+	{include file="templates/orderforms/{$carttpl}/layouts/foot.tpl"}
+{/if}
+
+<script>recalculateRenewalTotals();</script>
+
+<script type="text/javascript" src="{$WEB_ROOT}/templates/orderforms/{$carttpl}/js/ResizeSensor.js"></script>
+<script type="text/javascript" src="{$WEB_ROOT}/templates/orderforms/{$carttpl}/js/jquery.sticky-sidebar.min.js"></script>
+
+<script>
+    jQuery('#sidebar').stickySidebar({
+        topSpacing: 60,
+        bottomSpacing: 60,
+        minWidth: 992,
+        containerSelector: '.ajaxcart_cont',
+        innerWrapperSelector: '.sidebar__inner'
+    });
+</script>

+ 184 - 0
domainoptions.tpl

@@ -0,0 +1,184 @@
+{if $invalid}
+    <div class="domain-checker-result-headline domain-checker-unavailable">
+        {if $reason}
+            {$reason}
+        {else}
+            {$LANG.cartdomaininvalid}
+        {/if}
+    </div>
+{elseif $alreadyindb}
+    <div class="domain-checker-result-headline domain-checker-unavailable">
+        {$LANG.cartdomainexists}
+    </div>
+{else}
+
+    {if $checktype=="register" && $regenabled}
+
+        <input type="hidden" name="domainoption" value="register" />
+
+        {if $status eq "available" || $status eq "error"}
+
+            <div class="domain-checker-result-headline domain-checker-available">
+                {$LANG.cartcongratsdomainavailable|sprintf2:$domain}
+            </div>
+
+            <input type="hidden" name="domains[]" value="{$searchResults.domainName}" />
+            <input type="hidden" name="domainsregperiod[{$domain}]" value="{$searchResults.shortestPeriod.period}" />
+
+            <div class="text-center">
+                {if count($searchResults.pricing) == 1}
+                    <p class="margin-bottom">{$LANG.orderForm.domainAddedToCart}</p>
+                    <button type="button" class="btn btn-default btn-lg margin-bottom">
+                        <span class="far fa-shopping-cart"></span>
+                        {$searchResults.shortestPeriod.register}
+                    </button>
+                {else}
+                    <p class="margin-bottom">{$LANG.orderForm.registerLongerAndSave}</p>
+                    <div class="btn-group btn-group-lg margin-bottom">
+                        <button type="button" class="btn btn-default btn-sm">
+                            <span name="{$searchResults.domainName}-selected-price">
+                                <b class="far fa-shopping-cart"></b>
+                                {$searchResults.shortestPeriod.period} {$LANG.orderyears} @ {$searchResults.shortestPeriod.register}
+                            </span>
+                        </button>
+                        <button type="button" class="btn btn-default btn-sm dropdown-toggle additional-options" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
+                            <b class="caret"></b>
+                            <span class="sr-only">
+                                {lang key="domainChecker.additionalPricingOptions" domain=$searchResults.domainName}
+                            </span>
+                        </button>
+                        <ul class="dropdown-menu" role="menu">
+                            {foreach $searchResults.pricing as $years => $price}
+                                <li>
+                                    <a href="#" onclick="selectDomainPricing('{$searchResults.domainName}', '{$price.register}', {$years}, '{$LANG.orderyears}');return false;">
+                                        <b class="far fa-shopping-cart"></b>
+                                        {$years} {$LANG.orderyears} @ {$price.register}
+                                    </a>
+                                </li>
+                            {/foreach}
+                        </ul>
+                    </div>
+                {/if}
+            </div>
+
+
+            {assign var='continueok' value=true}
+
+        {elseif $status eq "unavailable"}
+
+            <div class="domain-checker-result-headline domain-checker-unavailable">
+                {$LANG.cartdomaintaken|sprintf2:$domain}
+            </div>
+
+        {/if}
+
+    {elseif $checktype=="transfer" && $transferenabled}
+
+        <input type="hidden" name="domainoption" value="transfer" />
+
+        {if $status eq "available"}
+
+            <div class="domain-checker-result-headline domain-checker-unavailable">
+                {$LANG.carttransfernotregistered|sprintf2:$domain}
+            </div>
+            <p class="text-center">{$LANG.orderForm.tryRegisteringInstead}</p>
+
+        {elseif $status eq "unavailable" || $status eq "error"}
+
+            <div class="domain-checker-result-headline domain-checker-available">
+                {$LANG.carttransferpossible|sprintf2:$domain:$transferprice}
+            </div>
+
+            <input type="hidden" name="domains[]" value="{$domain}" />
+            <input type="hidden" name="domainsregperiod[{$domain}]" value="{$transferterm}" />
+
+            {assign var='continueok' value=true}
+
+        {/if}
+
+    {elseif $checktype=="owndomain" || $checktype=="subdomain"}
+
+        <input type="hidden" name="domainoption" value="{$checktype}" />
+        <input type="hidden" name="sld" value="{$sld}" />
+        <input type="hidden" name="tld" value="{$tld}" />
+        <script language="javascript">
+            domainGotoNextStep();
+        </script>
+
+    {/if}
+
+    {if $searchResults.suggestions}
+
+        <div class="sub-heading">
+            <span>{$LANG.cartotherdomainsuggestions}</span>
+        </div>
+
+        <div class="row domain-suggestions">
+            {foreach $searchResults.suggestions as $num => $result}
+                <div class="col-sm-6 margin-bottom-5">
+                    <input type="hidden" name="domainsregperiod[{$result.domainName}]" value="{$result.shortestPeriod.period}" />
+                    <label>
+                        <input type="checkbox" name="domains[]" value="{$result.domainName}" id="domainSuggestion{$num}" class="suggested-domains" />
+                        {$result.domainName}
+                    </label>
+                    <div class="pull-right float-right">
+                        {if count($result.pricing) > 1}
+                            <div class="btn-group domain-suggestion-pricing">
+                        {/if}
+                        <button type="button" class="btn btn-default btn-sm" onclick="selectDomainPricing('{$result.domainName}', '{$result.shortestPeriod.register}', {$result.shortestPeriod.period}, '{$LANG.orderyears}', '{$num}')">
+                            <span name="{$result.domainName}-selected-price">
+                                <b class="far fa-shopping-cart"></b>
+                                {$result.shortestPeriod.period} {$LANG.orderyears} @ {$result.shortestPeriod.register}
+                            </span>
+                        </button>
+                        {if count($result.pricing) > 1}
+                            <button type="button" class="btn btn-default btn-sm dropdown-toggle additional-options" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
+                                <b class="caret"></b>
+                                <span class="sr-only">
+                                    {lang key="domainChecker.additionalPricingOptions" domain=$result.domainName}
+                                </span>
+                            </button>
+                            <ul class="dropdown-menu" role="menu">
+                                {foreach $result.pricing as $years => $price}
+                                    <li>
+                                        <a href="#" onclick="selectDomainPricing('{$result.domainName}', '{$price.register}', {$years}, '{$LANG.orderyears}', '{$num}');return false;">
+                                            <b class="far fa-shopping-cart"></b>
+                                            {$years} {$LANG.orderyears} @ {$price.register}
+                                        </a>
+                                    </li>
+                                {/foreach}
+                            </ul>
+                        </div>
+                        {/if}
+                    </div>
+                </div>
+            {/foreach}
+        </div>
+
+        {assign var='continueok' value=true}
+
+    {/if}
+
+    {if $continueok}
+        <div class="alert alert-info info-text-sm">
+            <i class="fas fa-info-circle"></i>
+            {$LANG.orderForm.domainAvailabilityCached}
+        </div>
+
+        <div class="text-center">
+            <button type="submit" class="btn btn-primary btn-lg">
+                {$LANG.continue}
+                &nbsp;<i class="fas fa-arrow-circle-right"></i>
+            </button>
+        </div>
+    {/if}
+
+{/if}
+
+<script>
+    jQuery('input.suggested-domains').iCheck({
+        checkboxClass: 'icheckbox_square-green',
+        radioClass: 'iradio_square-green',
+        increaseArea: '20%'
+    });
+</script>

+ 357 - 0
domainregister.tpl

@@ -0,0 +1,357 @@
+{include file="orderforms/{$carttpl}/common.tpl"}
+
+{if file_exists("templates/orderforms/{$carttpl}/layouts/head.tpl")}
+	{include file="templates/orderforms/{$carttpl}/layouts/head.tpl"}
+{/if}
+
+<div id="order-standard_cart" class="cros-domain-page">
+
+    <div class="row">
+
+         <div class="col-md-12">
+			{if file_exists("templates/orderforms/{$carttpl}/layouts/head.tpl")}
+			{else}
+            <div class="header-lined">
+                <h1>{$LANG.registerdomain}</h1>
+            </div>
+			{/if}
+			
+			{include file="orderforms/{$carttpl}/sidebar-categories-collapsed.tpl"}
+
+        </div>
+
+
+
+        <div class="col-md-12">
+			{if file_exists("templates/orderforms/{$carttpl}/layouts/head.tpl")}
+			{else}
+            <p>{$LANG.orderForm.findNewDomain}</p>
+			{/if}
+
+            <div class="cros-domain-checker-container">
+                <div class="clearfix">
+                    <form method="post" action="cart.php" id="frmDomainChecker">
+                        <input type="hidden" name="a" value="checkDomain">
+                        <div class="row">
+                             <div class="col-md-8 col-md-offset-2 offset-md-2 col-xs-10 col-xs-offset-1 col-10 offset-1">
+                                <div class="input-group input-group-lg input-group-box">
+                                    <input type="text" name="domain" class="form-control" placeholder="{$LANG.findyourdomain}" value="{$lookupTerm}" id="inputDomain" data-toggle="tooltip" data-placement="left" data-trigger="manual" title="{lang key='orderForm.domainOrKeyword'}" />
+                                    <span class="input-group-btn input-group-append">
+                                        <button type="submit" id="btnCheckAvailability" class="btn btn-primary domain-check-availability{$captcha->getButtonClass($captchaForm)}">{$LANG.search}</button>
+                                    </span>
+                                </div>
+                            </div>
+                        </div>
+
+                            {if $captcha->isEnabled() && $captcha->isEnabledForForm($captchaForm) && !$captcha->recaptcha->isInvisible()}
+                                <div class="col-md-8 col-md-offset-2 offset-md-2 col-xs-10 col-xs-offset-1 col-10 offset-1">
+                                    <div class="captcha-container" id="captchaContainer">
+                                        {if $captcha == "recaptcha"}
+                                            <br>
+                                            <div class="text-center">
+                                                <div class="form-group recaptcha-container"></div>
+                                            </div>
+                                        {elseif $captcha != "recaptcha"}
+                                            <div class="default-captcha default-captcha-register-margin">
+                                                <p>{lang key="cartSimpleCaptcha"}</p>
+                                                <div>
+                                                    <img id="inputCaptchaImage" src="{$systemurl}includes/verifyimage.php" align="middle" />
+                                                    <input id="inputCaptcha" type="text" name="code" maxlength="6" class="form-control input-sm" data-toggle="tooltip" data-placement="right" data-trigger="manual" title="{lang key='orderForm.required'}" />
+                                                </div>
+                                            </div>
+                                        {/if}
+                                    </div>
+                                </div>
+                            {/if}
+                    </form>
+                </div>
+            </div>
+
+            <div id="DomainSearchResults" class="w-hidden">
+
+                <div id="searchDomainInfo" class="domain-checker-result-headline">
+                    <p id="primaryLookupSearching" class="domain-lookup-loader domain-lookup-primary-loader domain-searching"><i class="fas fa-spinner fa-spin"></i> {lang key='orderForm.searching'}...</p>
+                    <div id="primaryLookupResult" class="domain-lookup-result w-hidden">
+                        <p class="domain-invalid domain-checker-invalid">{lang key='orderForm.domainLetterOrNumber'}<span class="domain-length-restrictions">{lang key='orderForm.domainLengthRequirements'}</span></p>
+                        <p class="domain-unavailable domain-checker-unavailable">{lang key='orderForm.domainIsUnavailable'}</p>
+                        <p class="domain-available domain-checker-available">{$LANG.domainavailable1} <strong></strong> {$LANG.domainavailable2}</p>
+						<a class="domain-contact-support btn btn-primary">{$LANG.domainContactUs}</a>
+                        <div id="idnLanguageSelector" class="form-group w-hidden idn-language-selector">
+                            <div class="row">
+                                <div class="col-sm-10 col-sm-offset-1 col-lg-8 col-lg-offset-2 offset-sm-1 offset-lg-2">
+                                    <div class="margin-10 text-center">
+                                        {lang key='cart.idnLanguageDescription'}
+                                    </div>
+                                </div>
+                            </div>
+                            <div class="row">
+                                <div class="col-sm-8 col-lg-6 col-sm-offset-2 col-lg-offset-3 offset-sm-2 offset-lg-3">
+                                    <select name="idnlanguage" class="form-control">
+                                        <option value="">{lang key='cart.idnLanguage'}</option>
+                                        {foreach $idnLanguages as $idnLanguageKey => $idnLanguage}
+                                            <option value="{$idnLanguageKey}">{lang key='idnLanguage.'|cat:$idnLanguageKey}</option>
+                                        {/foreach}
+                                    </select>
+                                    <div class="field-error-msg">
+                                        {lang key='cart.selectIdnLanguageForRegister'}
+                                    </div>
+                                </div>
+                            </div>
+                        </div>						
+                        <p class="domain-price">
+                            <span class="price"></span>
+                            <button class="btn btn-primary btn-add-to-cart" data-whois="0" data-domain="">
+                                <span class="to-add">{$LANG.addtocart}</span>
+                                <span class="loading">
+                                    <i class="fas fa-spinner fa-spin"></i> {lang key='loading'}
+                                </span>
+                                <span class="added"><i class="far fa-shopping-cart"></i> {lang key='checkout'}</span>
+                                <span class="unavailable">{$LANG.domaincheckertaken}</span>
+                            </button>
+                        </p>
+						<p class="domain-error domain-checker-unavailable"></p>
+                    </div>
+                </div>
+
+                {if $spotlightTlds}
+                    <div id="spotlightTlds" class="spotlight-tlds clearfix">
+                        <div class="spotlight-tlds-container">
+                            {foreach $spotlightTlds as $key => $data}
+                                <div class="spotlight-tld-container spotlight-tld-container-{$spotlightTlds|count}">
+                                    <div id="spotlight{$data.tldNoDots}" class="spotlight-tld">
+                                        {if $data.group}
+                                            <div class="spotlight-tld-{$data.group}">{$data.groupDisplayName}</div>
+                                        {/if}
+                                        {$data.tld}
+                                        <span class="domain-lookup-loader domain-lookup-spotlight-loader">
+                                            <i class="fas fa-spinner fa-spin"></i>
+                                        </span>
+                                        <div class="domain-lookup-result">
+                                            <button type="button" class="btn unavailable w-hidden" disabled="disabled">
+                                                {lang key='domainunavailable'}
+                                            </button>
+                                            <button type="button" class="btn invalid w-hidden" disabled="disabled">
+                                                {lang key='domainunavailable'}
+                                            </button>
+                                            <span class="available price w-hidden">{$data.register}</span>
+                                            <button type="button" class="btn w-hidden btn-add-to-cart" data-whois="0" data-domain="">
+                                                <span class="to-add">{lang key='orderForm.add'}</span>
+                                                <span class="added"><i class="glyphicon glyphicon-shopping-cart"></i> {lang key='checkout'}</span>
+                                                <span class="unavailable">{$LANG.domaincheckertaken}</span>
+                                            </button>
+                                            <button type="button" class="btn btn-primary domain-contact-support w-hidden">
+                                                {lang key='domainChecker.contactSupport'}
+                                            </button>
+                                        </div>
+                                    </div>
+                                </div>
+                            {/foreach}
+                        </div>
+                    </div>
+                {/if}
+
+                <div class="suggested-domains{if !$showSuggestionsContainer} w-hidden{/if}">
+                    <div class="panel-heading">
+                        {lang key='orderForm.suggestedDomains'}
+                    </div>
+                    <div id="suggestionsLoader" class="panel-body domain-lookup-loader domain-lookup-suggestions-loader">
+                        <i class="fas fa-spinner fa-spin"></i> {lang key='orderForm.generatingSuggestions'}
+                    </div>
+                    <div id="domainSuggestions" class="domain-lookup-result list-group w-hidden">
+                        <div class="domain-suggestion list-group-item w-hidden">
+                            <span class="domain"></span><span class="extension"></span>
+                            <span class="promo w-hidden">
+                                <span class="sales-group-hot w-hidden">{lang key='domainCheckerSalesGroup.hot'}</span>
+                                <span class="sales-group-new w-hidden">{lang key='domainCheckerSalesGroup.new'}</span>
+                                <span class="sales-group-sale w-hidden">{lang key='domainCheckerSalesGroup.sale'}</span>
+                            </span>
+                            <div class="actions">
+                                <span class="price"></span>
+                                <button type="button" class="btn btn-add-to-cart" data-whois="1" data-domain="">
+                                    <span class="to-add">{$LANG.addtocart}</span>
+                                    <span class="loading">
+                                        <i class="fas fa-spinner fa-spin"></i> {lang key='loading'}
+                                    </span>
+                                    <span class="added"><i class="far fa-shopping-cart"></i> {lang key='checkout'}</span>
+                                    <span class="unavailable">{$LANG.domaincheckertaken}</span>
+                                </button>
+                                <button type="button" class="btn btn-primary domain-contact-support w-hidden">
+                                    {lang key='domainChecker.contactSupport'}
+                                </button>
+                            </div>
+                        </div>
+                    </div>
+                    <div class="panel-footer more-suggestions w-hidden text-center">
+                        <a id="moreSuggestions" href="#" onclick="loadMoreSuggestions();return false;">{lang key='domainsmoresuggestions'}</a>
+                        <span id="noMoreSuggestions" class="no-more small w-hidden">{lang key='domaincheckernomoresuggestions'}</span>
+                    </div>
+                    <div class="text-center text-muted domain-suggestions-warning">
+                        <p>{lang key='domainssuggestionswarnings'}</p>
+                    </div>
+                </div>
+
+            </div>
+
+            <div class="domain-pricing">
+
+                {if $featuredTlds}
+                    <div class="featured-tlds-container">
+                        <div class="row">
+                            {foreach $featuredTlds as $num => $tldinfo}
+                                {if $num % 3 == 0 && (count($featuredTlds) - $num < 3)}
+                                    {if count($featuredTlds) - $num == 2}
+                                        <div class="col-sm-2"></div>
+                                    {else}
+                                        <div class="col-sm-4"></div>
+                                    {/if}
+                                {/if}
+                                <div class="col-sm-4 col-6">
+                                    <div class="featured-tld">
+                                        <div class="img-container">
+                                            <img src="{$BASE_PATH_IMG}/tld_logos/{$tldinfo.tldNoDots}.png">
+                                        </div>
+                                        <div class="price {$tldinfo.tldNoDots}">
+                                            {if is_object($tldinfo.register)}
+                                                {$tldinfo.register->toPrefixed()}{if $tldinfo.period > 1}{lang key="orderForm.shortPerYears" years={$tldinfo.period}}{else}{lang key="orderForm.shortPerYear" years=''}{/if}
+                                            {else}
+                                                {lang key="domainregnotavailable"}
+                                            {/if}</div>
+                                    </div>
+                                </div>
+                            {/foreach}
+                        </div>
+                    </div>
+                {/if}
+
+                <h4>{lang key='pricing.browseExtByCategory'}</h4>
+
+                <div class="tld-filters">
+                    {foreach $categoriesWithCounts as $category => $count}
+                        <a href="#" data-category="{$category}" class="badge badge-primary no-radius">{lang key="domainTldCategory.$category" defaultValue=$category} ({$count})</a>
+                    {/foreach}
+                </div>
+				<div class="TM-card">
+					<div class="row tld-pricing-header text-center">
+						<div class="col-md-4 no-bg">{lang key='orderdomain'}</div>
+						<div class="col-md-8">
+							<div class="row">
+								<div class="col-xs-4 col-4">{lang key='pricing.register'}</div>
+								<div class="col-xs-4 col-4">{lang key='pricing.transfer'}</div>
+								<div class="col-xs-4 col-4">{lang key='pricing.renewal'}</div>
+							</div>
+						</div>
+					</div>
+					{foreach $pricing['pricing'] as $tld => $price}
+						<div class="row tld-row" data-category="{foreach $price.categories as $category}|{$category}|{/foreach}">
+							<div class="col-md-4 two-row-center">
+								<strong>.{$tld}</strong>
+								{if $price.group}
+									<span class="tld-sale-group tld-sale-group-{$price.group}">{$price.group}!</span>
+								{/if}
+							</div>
+							<div class="col-md-8">
+								<div class="row">
+									<div class="col-xs-4 col-4 text-center">
+										<small class="tld-pricing-mobile-header">{lang key='pricing.register'}</small>
+										{if current($price.register) >= 0}
+											{current($price.register)}<br>
+											<small>{key($price.register)} {if key($price.register) > 1}{lang key="orderForm.years"}{else}{lang key="orderForm.year"}{/if}</small>
+										{else}
+											<small>N/A</small>
+										{/if}
+									</div>
+									<div class="col-xs-4 col-4 text-center">
+										<small class="tld-pricing-mobile-header">{lang key='pricing.transfer'}</small>
+										{if current($price.transfer) > 0}
+											{current($price.transfer)}<br>
+											<small>{key($price.transfer)} {if key($price.register) > 1}{lang key="orderForm.years"}{else}{lang key="orderForm.year"}{/if}</small>
+										{else}
+											<small>N/A</small>
+										{/if}
+									</div>
+									<div class="col-xs-4 col-4 text-center">
+										<small class="tld-pricing-mobile-header">{lang key='pricing.renewal'}</small>
+										{if current($price.renew) > 0}
+											{current($price.renew)}<br>
+											<small>{key($price.renew)} {if key($price.register) > 1}{lang key="orderForm.years"}{else}{lang key="orderForm.year"}{/if}</small>
+										{else}
+											<small>N/A</small>
+										{/if}
+									</div>
+								</div>
+							</div>
+						</div>
+					{/foreach}
+					<div class="row tld-row no-tlds">
+						<div class="col-xs-12 col-12 text-center">
+							<br>
+							{lang key='pricing.selectExtCategory'}
+							<br><br>
+						</div>
+					</div>
+
+				</div>
+			</div>
+			{*
+            <div class="row">
+                <div class="{if $domainTransferEnabled}col-md-6{else}col-md-8 col-md-offset-2 offset-md-2{/if}">
+                    <div class="panel panel-default domain-promo">
+						<div class="panel-body">
+							<div class="icon">
+								<i class="fas fa-server fa-4x"></i>
+							</div>
+							
+							<h3>{lang key='orderForm.addHosting'}</h3>
+							<p>{lang key='orderForm.chooseFromRange'}</p>
+
+						   <a href="cart.php" class="btn btn-primary">
+							   {lang key='orderForm.exploreNow'}
+						   </a>
+							<p class="small">{lang key='orderForm.packagesForBudget'}</p>
+						</div>
+                    </div>
+                </div>
+                {if $domainTransferEnabled}
+                    <div class="col-md-6">
+                        <div class="panel panel-default domain-promo">
+							<div class="panel-body">
+								<div class="icon">
+									<i class="fas fa-globe fa-4x"></i>
+								</div>
+								
+								<h3>{lang key='orderForm.transferToUs'}</h3>
+								<p>{lang key='orderForm.transferExtend'}*</p>
+	  
+								<a href="cart.php?a=add&domain=transfer" class="btn btn-primary">
+									{lang key='orderForm.transferDomain'}
+								</a>
+								<p class="small">* {lang key='orderForm.extendExclusions'}</p>
+							</div>
+                        </div>
+                    </div>
+                {/if}
+            </div>
+			*}
+        </div>
+    </div>
+</div>
+
+{if file_exists("templates/orderforms/{$carttpl}/layouts/foot.tpl")}
+	{include file="templates/orderforms/{$carttpl}/layouts/foot.tpl"}
+{/if}
+
+<script>
+jQuery(document).ready(function() {
+    jQuery('.tld-filters a:first-child').click();
+{if $lookupTerm && !$captchaError && !$invalid}
+    jQuery('#btnCheckAvailability').click();
+{/if}
+{if $invalid}
+    jQuery('#primaryLookupSearching').toggle();
+    jQuery('#primaryLookupResult').children().toggle();
+    jQuery('#primaryLookupResult').toggle();
+    jQuery('#DomainSearchResults').toggle();
+    jQuery('.domain-invalid').toggle();
+{/if}
+});
+</script>

+ 94 - 0
domaintransfer.tpl

@@ -0,0 +1,94 @@
+{include file="orderforms/{$carttpl}/common.tpl"}
+
+{if file_exists("templates/orderforms/{$carttpl}/layouts/head.tpl")}
+	{include file="templates/orderforms/{$carttpl}/layouts/head.tpl"}
+{/if}
+
+<div id="order-standard_cart">
+
+    <div class="row">
+
+         <div class="col-md-12">
+			{if file_exists("templates/orderforms/{$carttpl}/layouts/head.tpl")}
+			{else}
+            <div class="header-lined">
+                <h1>{$LANG.transferdomain}</h1>
+            </div>
+			{/if}
+			{include file="orderforms/{$carttpl}/sidebar-categories-collapsed.tpl"}
+
+        </div>
+
+
+        <div class="col-md-12">
+			{if file_exists("templates/orderforms/{$carttpl}/layouts/head.tpl")}
+			{else}
+            <div class="text-center">
+                <h2>{lang key='orderForm.transferToUs'}</h2>
+                <p>{lang key='orderForm.transferExtend'}*</p>
+            </div>
+            <br />
+			{/if}
+
+            <form method="post" action="cart.php" id="frmDomainTransfer">
+                <input type="hidden" name="a" value="addDomainTransfer">
+
+                <div class="row">
+                    <div class="col-sm-8 col-sm-offset-2 offset-sm-2">
+                        <div class="panel panel-default">
+                            <div class="panel-heading">
+                                <h4 class="panel-title">{lang key='orderForm.singleTransfer'}</h4>
+                            </div>
+                            <div class="panel-body">
+                                <div class="form-group">
+                                    <label for="inputTransferDomain">{lang key='domainname'}</label>
+                                    <input type="text" class="form-control" name="domain" id="inputTransferDomain" value="{$lookupTerm}" placeholder="{lang key='yourdomainplaceholder'}.{lang key='yourtldplaceholder'}" data-toggle="tooltip" data-placement="left" data-trigger="manual" title="{lang key='orderForm.enterDomain'}" />
+                                </div>
+                                <div class="form-group">
+                                    <label for="inputAuthCode" style="width:100%;">
+                                        {lang key='orderForm.authCode'}
+                                         <a href="" data-toggle="tooltip" data-placement="left" title="{lang key='orderForm.authCodeTooltip'}" class="pull-right"><i class="fas fa-question-circle"></i> {lang key='orderForm.help'}</a>
+                                    </label>
+                                    <input type="text" class="form-control" name="epp" id="inputAuthCode" placeholder="{lang key='orderForm.authCodePlaceholder'}" data-toggle="tooltip" data-placement="left" data-trigger="manual" title="{lang key='orderForm.required'}" />
+                                </div>
+                                <div id="transferUnavailable" class="alert alert-warning slim-alert text-center w-hidden"></div>
+                                {if $captcha->isEnabled() && !$captcha->recaptcha->isEnabled()}
+                                    <div class="captcha-container" id="captchaContainer">
+                                        <div class="default-captcha">
+                                            <p>{lang key="cartSimpleCaptcha"}</p>
+                                            <div>
+                                                <img id="inputCaptchaImage" src="{$systemurl}includes/verifyimage.php" />
+                                                <input id="inputCaptcha" type="text" name="code" maxlength="6" class="form-control input-sm" data-toggle="tooltip" data-placement="right" data-trigger="manual" title="{lang key='orderForm.required'}" />
+                                            </div>
+                                        </div>
+                                    </div>
+                                {elseif $captcha->isEnabled() && $captcha->recaptcha->isEnabled() && !$captcha->recaptcha->isInvisible()}
+                                    <div class="text-center">
+                                        <div class="form-group recaptcha-container" id="captchaContainer"></div>
+                                    </div>
+                                {/if}
+                            </div>
+                            <div class="panel-footer text-right">
+                                <button type="submit" id="btnTransferDomain" class="btn btn-primary btn-transfer{$captcha->getButtonClass($captchaForm)}">
+                                    <span class="loader w-hidden" id="addTransferLoader">
+                                        <i class="fas fa-fw fa-spinner fa-spin"></i>
+                                    </span>
+                                    <span id="addToCart">{lang key="orderForm.addToCart"}</span>
+                                </button>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+
+            </form>
+
+            <p class="text-center small">* {lang key='orderForm.extendExclusions'}</p>
+
+        </div>
+    </div>
+</div>
+
+
+{if file_exists("templates/orderforms/{$carttpl}/layouts/foot.tpl")}
+	{include file="templates/orderforms/{$carttpl}/layouts/foot.tpl"}
+{/if}

+ 18 - 0
error.tpl

@@ -0,0 +1,18 @@
+<div id="order-standard_cart">
+	<div class="header-lined">
+		<h1>
+			{$errortitle}
+		 </h1>
+	</div>
+	<div class="alert-lg no-data">
+		<div class="icon">
+			<i class="fas fa-exclamation-triangle text-danger"></i>
+		</div>
+		<div class="text">
+			<h4>{$errortitle}</h4>
+			<p>{$errormsg}</p>
+		</div>
+       <a href="javascript:history.go(-1)" class="btn btn-default"><i class="fas fa-arrow-left"></i>&nbsp;{$LANG.problemgoback}</a>
+	 </div>
+</div>
+

+ 17 - 0
fraudcheck.tpl

@@ -0,0 +1,17 @@
+<div id="order-standard_cart">
+	<div class="header-lined">
+		<h1>
+			{$LANG.cartfraudcheck}
+		 </h1>
+	</div>
+	<div class="alert-lg no-data">
+		<div class="icon">
+			<i class="fas fa-exclamation-triangle text-danger"></i>
+		</div>
+		<div class="text">
+			<h4>{$errortitle}</h4>
+			<p>{$error}</p>
+		</div>
+       <a href="submitticket.php" class="btn btn-default">{$LANG.orderForm.submitTicket}&nbsp;<i class="fas fa-arrow-right"></i></a>
+	 </div>
+</div>

BIN
img/gateways/acceptjs.png


BIN
img/gateways/authorize.png


BIN
img/gateways/authorizecim.png


BIN
img/gateways/authorizeecheck.png


BIN
img/gateways/banktransfer.png


BIN
img/gateways/bp.png


BIN
img/gateways/evopayments.png


BIN
img/gateways/ewayv4.png


BIN
img/gateways/gocardless.png


+ 2 - 0
img/gateways/index.php

@@ -0,0 +1,2 @@
+<?php
+header("Location: ../../../index.php");

BIN
img/gateways/moneybookers.png


BIN
img/gateways/offlinecc.png


+ 2 - 0
img/gateways/overrides/index.php

@@ -0,0 +1,2 @@
+<?php
+header("Location: ../../../index.php");

BIN
img/gateways/paypal.png


BIN
img/gateways/paypalcheckout.png


BIN
img/gateways/paypalpaymentspro.png


BIN
img/gateways/paypalpaymentsproref.png


BIN
img/gateways/skrill.png


BIN
img/gateways/stripe.png


BIN
img/gateways/stripe_ach.png


BIN
img/gateways/stripe_sepa.png


BIN
img/gateways/tco.png


BIN
img/globe.png


BIN
img/head-bg.png


+ 2 - 0
img/index.php

@@ -0,0 +1,2 @@
+<?php
+header("Location: ../../../index.php");

BIN
img/shadow-btm.png


BIN
img/tick.png


+ 46 - 0
includes/existing-paymethods.tpl

@@ -0,0 +1,46 @@
+{if $selectedAccountId === $client->id}
+    {foreach $client->payMethods->validateGateways()->sortByExpiryDate() as $payMethod}
+        {assign "payMethodExpired" 0}
+        {assign "expiryDate" ""}
+        {if $payMethod->isCreditCard()}
+            {if ($payMethod->payment->isExpired())}
+                {assign "payMethodExpired" 1}
+            {/if}
+
+            {if $payMethod->payment->getExpiryDate()}
+                {assign "expiryDate" $payMethod->payment->getExpiryDate()->format('m/Y')}
+            {/if}
+        {/if}
+
+        <div class="paymethod-info radio-inline" data-paymethod-id="{$payMethod->id}">
+            <input type="radio"
+                   name="ccinfo"
+                   class="existing-card"
+                   {if $payMethodExpired}disabled{/if}
+                   data-payment-type="{$payMethod->getType()}"
+                   data-payment-gateway="{$payMethod->gateway_name}"
+                   data-order-preference="{$payMethod->order_preference}"
+                   value="{$payMethod->id}">
+        </div>
+
+        <div class="paymethod-info" data-paymethod-id="{$payMethod->id}">
+            <i class="{$payMethod->getFontAwesomeIcon()}"></i>
+        </div>
+        <div class="paymethod-info" data-paymethod-id="{$payMethod->id}">
+            {if $payMethod->isCreditCard() || $payMethod->isRemoteBankAccount()}
+                {$payMethod->payment->getDisplayName()}
+            {else}
+                <span class="type">
+                {$payMethod->payment->getAccountType()}
+            </span>
+                {substr($payMethod->payment->getAccountNumber(), -4)}
+            {/if}
+        </div>
+        <div class="paymethod-info" data-paymethod-id="{$payMethod->id}">
+            {$payMethod->getDescription()}
+        </div>
+        <div class="paymethod-info" data-paymethod-id="{$payMethod->id}">
+            {$expiryDate}{if $payMethodExpired}<br><small>{$LANG.clientareaexpired}</small>{/if}
+        </div>
+    {/foreach}
+{/if}

+ 2 - 0
index.php

@@ -0,0 +1,2 @@
+<?php
+header("Location: ../../../index.php");

+ 214 - 0
js/ResizeSensor.js

@@ -0,0 +1,214 @@
+/**
+* Copyright Marc J. Schmidt. See the LICENSE file at the top-level
+* directory of this distribution and at
+* https://github.com/marcj/css-element-queries/blob/master/LICENSE.
+*/
+;
+(function (root, factory) {
+   if (typeof define === "function" && define.amd) {
+       define(factory);
+   } else if (typeof exports === "object") {
+       module.exports = factory();
+   } else {
+       root.ResizeSensor = factory();
+   }
+}(typeof window !== 'undefined' ? window : this, function () {
+
+   // Make sure it does not throw in a SSR (Server Side Rendering) situation
+   if (typeof window === "undefined") {
+       return null;
+   }
+   // Only used for the dirty checking, so the event callback count is limited to max 1 call per fps per sensor.
+   // In combination with the event based resize sensor this saves cpu time, because the sensor is too fast and
+   // would generate too many unnecessary events.
+   var requestAnimationFrame = window.requestAnimationFrame ||
+       window.mozRequestAnimationFrame ||
+       window.webkitRequestAnimationFrame ||
+       function (fn) {
+           return window.setTimeout(fn, 20);
+       };
+
+   /**
+    * Iterate over each of the provided element(s).
+    *
+    * @param {HTMLElement|HTMLElement[]} elements
+    * @param {Function}                  callback
+    */
+   function forEachElement(elements, callback){
+       var elementsType = Object.prototype.toString.call(elements);
+       var isCollectionTyped = ('[object Array]' === elementsType
+           || ('[object NodeList]' === elementsType)
+           || ('[object HTMLCollection]' === elementsType)
+           || ('[object Object]' === elementsType)
+           || ('undefined' !== typeof jQuery && elements instanceof jQuery) //jquery
+           || ('undefined' !== typeof Elements && elements instanceof Elements) //mootools
+       );
+       var i = 0, j = elements.length;
+       if (isCollectionTyped) {
+           for (; i < j; i++) {
+               callback(elements[i]);
+           }
+       } else {
+           callback(elements);
+       }
+   }
+
+   /**
+    * Class for dimension change detection.
+    *
+    * @param {Element|Element[]|Elements|jQuery} element
+    * @param {Function} callback
+    *
+    * @constructor
+    */
+   var ResizeSensor = function(element, callback) {
+       /**
+        *
+        * @constructor
+        */
+       function EventQueue() {
+           var q = [];
+           this.add = function(ev) {
+               q.push(ev);
+           };
+
+           var i, j;
+           this.call = function() {
+               for (i = 0, j = q.length; i < j; i++) {
+                   q[i].call();
+               }
+           };
+
+           this.remove = function(ev) {
+               var newQueue = [];
+               for(i = 0, j = q.length; i < j; i++) {
+                   if(q[i] !== ev) newQueue.push(q[i]);
+               }
+               q = newQueue;
+           }
+
+           this.length = function() {
+               return q.length;
+           }
+       }
+
+       /**
+        *
+        * @param {HTMLElement} element
+        * @param {Function}    resized
+        */
+       function attachResizeEvent(element, resized) {
+           if (!element) return;
+           if (element.resizedAttached) {
+               element.resizedAttached.add(resized);
+               return;
+           }
+
+           element.resizedAttached = new EventQueue();
+           element.resizedAttached.add(resized);
+
+           element.resizeSensor = document.createElement('div');
+           element.resizeSensor.className = 'resize-sensor';
+           var style = 'position: absolute; left: 0; top: 0; right: 0; bottom: 0; overflow: hidden; z-index: -1; visibility: hidden;';
+           var styleChild = 'position: absolute; left: 0; top: 0; transition: 0s;';
+
+           element.resizeSensor.style.cssText = style;
+           element.resizeSensor.innerHTML =
+               '<div class="resize-sensor-expand" style="' + style + '">' +
+                   '<div style="' + styleChild + '"></div>' +
+               '</div>' +
+               '<div class="resize-sensor-shrink" style="' + style + '">' +
+                   '<div style="' + styleChild + ' width: 200%; height: 200%"></div>' +
+               '</div>';
+           element.appendChild(element.resizeSensor);
+
+           if (element.resizeSensor.offsetParent !== element) {
+               element.style.position = 'relative';
+           }
+
+           var expand = element.resizeSensor.childNodes[0];
+           var expandChild = expand.childNodes[0];
+           var shrink = element.resizeSensor.childNodes[1];
+           var dirty, rafId, newWidth, newHeight;
+           var lastWidth = element.offsetWidth;
+           var lastHeight = element.offsetHeight;
+
+           var reset = function() {
+               expandChild.style.width = '100000px';
+               expandChild.style.height = '100000px';
+
+               expand.scrollLeft = 100000;
+               expand.scrollTop = 100000;
+
+               shrink.scrollLeft = 100000;
+               shrink.scrollTop = 100000;
+           };
+
+           reset();
+
+           var onResized = function() {
+               rafId = 0;
+
+               if (!dirty) return;
+
+               lastWidth = newWidth;
+               lastHeight = newHeight;
+
+               if (element.resizedAttached) {
+                   element.resizedAttached.call();
+               }
+           };
+
+           var onScroll = function() {
+               newWidth = element.offsetWidth;
+               newHeight = element.offsetHeight;
+               dirty = newWidth != lastWidth || newHeight != lastHeight;
+
+               if (dirty && !rafId) {
+                   rafId = requestAnimationFrame(onResized);
+               }
+
+               reset();
+           };
+
+           var addEvent = function(el, name, cb) {
+               if (el.attachEvent) {
+                   el.attachEvent('on' + name, cb);
+               } else {
+                   el.addEventListener(name, cb);
+               }
+           };
+
+           addEvent(expand, 'scroll', onScroll);
+           addEvent(shrink, 'scroll', onScroll);
+       }
+
+       forEachElement(element, function(elem){
+           attachResizeEvent(elem, callback);
+       });
+
+       this.detach = function(ev) {
+           ResizeSensor.detach(element, ev);
+       };
+   };
+
+   ResizeSensor.detach = function(element, ev) {
+       forEachElement(element, function(elem){
+           if (!elem) return
+           if(elem.resizedAttached && typeof ev == "function"){
+               elem.resizedAttached.remove(ev);
+               if(elem.resizedAttached.length()) return;
+           }
+           if (elem.resizeSensor) {
+               if (elem.contains(elem.resizeSensor)) {
+                   elem.removeChild(elem.resizeSensor);
+               }
+               delete elem.resizeSensor;
+               delete elem.resizedAttached;
+           }
+       });
+   };
+
+   return ResizeSensor;
+
+}));

+ 95 - 0
js/StatesDropdown.js

@@ -0,0 +1,95 @@
+var states = new Array();
+states['AU'] = ["Australian Capital Territory", "New South Wales", "Northern Territory", "Queensland", "South Australia", "Tasmania", "Victoria", "Western Australia", "end"];
+states['BR'] = ["AC", "AL", "AP", "AM", "BA", "CE", "DF", "ES", "GO", "MA", "MT", "MS", "MG", "PA", "PB", "PR", "PE", "PI", "RJ", "RN", "RS", "RO", "RR", "SC", "SP", "SE", "TO", "end"];
+states['CA'] = ["Alberta", "British Columbia", "Manitoba", "New Brunswick", "Newfoundland", "Northwest Territories", "Nova Scotia", "Nunavut", "Ontario", "Prince Edward Island", "Quebec", "Saskatchewan", "Yukon Territory", "end"];
+states['FR'] = ["Ain", "Aisne", "Allier", "Alpes-de-Haute-Provence", "Hautes-Alpes", "Alpes-Maritimes", "Ardèche", "Ardennes", "Ariège", "Aube", "Aude", "Aveyron", "Bouches-du-Rhône", "Calvados", "Cantal", "Charente", "Charente-Maritime", "Cher", "Corrèze", "Corse-du-Sud", "Haute-Corse", "Côte-d'Or", "Côtes-d'Armor", "Creuse", "Dordogne", "Doubs", "Drôme", "Eure", "Eure-et-Loir", "Finistère", "Gard", "Haute-Garonne", "Gers", "Gironde", "Hérault", "Ille-et-Vilaine", "Indre", "Indre-et-Loire", "Isère", "Jura", "Landes", "Loir-et-Cher", "Loire", "Haute-Loire", "Loire-Atlantique", "Loiret", "Lot", "Lot-et-Garonne", "Lozère", "Maine-et-Loire", "Manche", "Marne", "Haute-Marne", "Mayenne", "Meurthe-et-Moselle", "Meuse", "Morbihan", "Moselle", "Nièvre", "Nord", "Oise", "Orne", "Pas-de-Calais", "Puy-de-Dôme", "Pyrénées-Atlantiques", "Hautes-Pyrénées", "Pyrénées-Orientales", "Bas-Rhin", "Haut-Rhin", "Rhône", "Haute-Saône", "Saône-et-Loire", "Sarthe", "Savoie", "Haute-Savoie", "Paris", "Seine-Maritime", "Seine-et-Marne", "Yvelines", "Deux-Sèvres", "Somme", "Tarn", "Tarn-et-Garonne", "Var", "Vaucluse", "Vendée", "Vienne", "Haute-Vienne", "Vosges", "Yonne", "Territoire de Belfort", "Essonne", "Hauts-de-Seine", "Seine-Saint-Denis", "Val-de-Marne", "Val-d'Oise", "Guadeloupe", "Martinique", "Guyane", "La Réunion", "Mayotte", "end"];
+states['DE'] = ["Baden-Wuerttemberg", "Bayern", "Berlin", "Brandenburg", "Bremen", "Hamburg", "Hessen", "Mecklenburg-Vorpommern", "Niedersachsen", "Nordrhein-Westfalen", "Rheinland-Pfalz", "Saarland", "Sachsen", "Sachsen-Anhalt", "Schleswig-Holstein", "Thueringen", "end"];
+states['ES'] = ["ARABA", "ALBACETE", "ALICANTE", "ALMERIA", "AVILA", "BADAJOZ", "ILLES BALEARS", "BARCELONA", "BURGOS", "CACERES", "CADIZ", "CASTELLON", "CIUDAD REAL", "CORDOBA", "CORUÑA, A", "CUENCA", "GIRONA", "GRANADA", "GUADALAJARA", "GIPUZKOA", "HUELVA", "HUESCA", "JAEN", "LEON", "LLEIDA", "RIOJA, LA", "LUGO", "MADRID", "MALAGA", "MURCIA", "NAVARRA", "OURENSE", "ASTURIAS", "PALENCIA", "PALMAS, LAS", "PONTEVEDRA", "SALAMANCA", "SANTA CRUZ DE TENERIFE", "CANTABRIA", "SEGOVIA", "SEVILLA", "SORIA", "TARRAGONA", "TERUEL", "TOLEDO", "VALENCIA", "VALLADOLID", "BIZKAIA", "ZAMORA", "ZARAGOZA", "CEUTA", "MELILLA", "end"];
+states['IN'] = ["Andaman and Nicobar Islands", "Andhra Pradesh", "Arunachal Pradesh", "Assam", "Bihar", "Chandigarh", "Chattisgarh", "Dadra and Nagar Haveli", "Daman and Diu", "Delhi", "Goa", "Gujarat", "Haryana", "Himachal Pradesh", "Jammu and Kashmir", "Jharkhand", "Karnataka", "Kerala", "Lakshadweep", "Madhya Pradesh", "Maharashtra", "Manipur", "Meghalaya", "Mizoram", "Nagaland", "Orissa", "Puducherry", "Punjab", "Rajasthan", "Sikkim", "Tamil Nadu", "Telangana", "Tripura", "Uttaranchal", "Uttar Pradesh", "West Bengal", "end"];
+states['IT'] = ["AG", "AL", "AN", "AO", "AR", "AP", "AQ", "AT", "AV", "BA", "BT", "BL", "BN", "BG", "BI", "BO", "BZ", "BS", "BR", "CA", "CL", "CB", "CI", "CE", "CT", "CZ", "CH", "CO", "CS", "CR", "KR", "CN", "EN", "FM", "FE", "FI", "FG", "FC", "FR", "GE", "GO", "GR", "IM", "IS", "SP", "LT", "LE", "LC", "LI", "LO", "LU", "MB", "MC", "MN", "MS", "MT", "ME", "MI", "MO", "NA", "NO", "NU", "OT", "OR", "PD", "PA", "PR", "PV", "PG", "PU", "PE", "PC", "PI", "PT", "PN", "PZ", "PO", "RG", "RA", "RC", "RE", "RI", "RN", "RM", "RO", "SA", "VS", "SS", "SV", "SI", "SR", "SO", "TA", "TE", "TR", "TO", "OG", "TP", "TN", "TV", "TS", "UD", "VA", "VE", "VB", "VC", "VR", "VS", "VV", "VI", "VT", "end"];
+states['NL'] = ["Drenthe", "Flevoland", "Friesland", "Gelderland", "Groningen", "Limburg", "Noord-Brabant", "Noord-Holland", "Overijssel", "Utrecht", "Zeeland", "Zuid-Holland", "end"];
+states['NZ'] = ["Northland", "Auckland", "Waikato", "Bay of Plenty", "Gisborne", "Hawkes Bay", "Taranaki", "Manawatu-Wanganui", "Wellington", "Tasman", "Nelson", "Marlborough", "West Coast", "Canterbury", "Otago", "Southland", "end"];
+states['GB'] = ["Avon", "Aberdeenshire", "Angus", "Argyll and Bute", "Barking and Dagenham", "Barnet", "Barnsley", "Bath and North East Somerset", "Bedfordshire", "Berkshire", "Bexley", "Birmingham", "Blackburn with Darwen", "Blackpool", "Blaenau Gwent", "Bolton", "Bournemouth", "Bracknell Forest", "Bradford", "Brent", "Bridgend", "Brighton and Hove", "Bromley", "Buckinghamshire", "Bury", "Caerphilly", "Calderdale", "Cambridgeshire", "Camden", "Cardiff", "Carmarthenshire", "Ceredigion", "Cheshire", "Cleveland", "City of Bristol", "City of Edinburgh", "City of Kingston upon Hull", "City of London", "Clackmannanshire", "Conwy", "Cornwall", "Coventry", "Croydon", "Cumbria", "Darlington", "Denbighshire", "Derby", "Derbyshire", "Devon", "Doncaster", "Dorset", "Dudley", "Dumfries and Galloway", "Dundee City", "Durham", "Ealing", "East Ayrshire", "East Dunbartonshire", "East Lothian", "East Renfrewshire", "East Riding of Yorkshire", "East Sussex", "Eilean Siar (Western Isles)", "Enfield", "Essex", "Falkirk", "Fife", "Flintshire", "Gateshead", "Glasgow City", "Gloucestershire", "Greenwich", "Gwynedd", "Hackney", "Halton", "Hammersmith and Fulham", "Hampshire", "Haringey", "Harrow", "Hartlepool", "Havering", "Herefordshire", "Hertfordshire", "Highland", "Hillingdon", "Hounslow", "Inverclyde", "Isle of Anglesey", "Isle of Wight", "Islington", "Kensington and Chelsea", "Kent", "Kingston upon Thames", "Kirklees", "Knowsley", "Lambeth", "Lancashire", "Leeds", "Leicester", "Leicestershire", "Lewisham", "Lincolnshire", "Liverpool", "London", "Luton", "Manchester", "Medway", "Merthyr Tydfil", "Merton", "Merseyside", "Middlesbrough", "Middlesex", "Midlothian", "Milton Keynes", "Monmouthshire", "Moray", "Neath Port Talbot", "Newcastle upon Tyne", "Newham", "Newport", "Norfolk", "North Ayrshire", "North East Lincolnshire", "North Lanarkshire", "North Lincolnshire", "North Somerset", "North Tyneside", "North Yorkshire", "Northamptonshire", "Northumberland", "North Humberside", "Nottingham", "Nottinghamshire", "Oldham", "Orkney Islands", "Oxfordshire", "Pembrokeshire", "Perth and Kinross", "Peterborough", "Plymouth", "Poole", "Portsmouth", "Powys", "Reading", "Redbridge", "Renfrewshire", "Rhondda Cynon Taff", "Richmond upon Thames", "Rochdale", "Rotherham", "Rutland", "Salford", "Sandwell", "Sefton", "Sheffield", "Shetland Islands", "Shropshire", "Slough", "Solihull", "Somerset", "South Ayrshire", "South Humberside", "South Gloucestershire", "South Lanarkshire", "South Tyneside", "Southampton", "Southend-on-Sea", "Southwark", "South Yorkshire", "St. Helens", "Staffordshire", "Stirling", "Stockport", "Stockton-on-Tees", "Stoke-on-Trent", "Suffolk", "Sunderland", "Surrey", "Sutton", "Swansea", "Swindon", "Tameside", "Telford and Wrekin", "The Scottish Borders", "The Vale of Glamorgan", "Thurrock", "Torbay", "Torfaen", "Tower Hamlets", "Trafford", "Tyne and Wear", "Wakefield", "Walsall", "Waltham Forest", "Wandsworth", "Warrington", "Warwickshire", "West Midlands", "West Dunbartonshire", "West Lothian", "West Sussex", "West Yorkshire", "Westminster", "Wigan", "Wiltshire", "Windsor and Maidenhead", "Wirral", "Wokingham", "Wolverhampton", "Worcestershire", "Wrexham", "York", "Co. Antrim", "Co. Armagh", "Co. Down", "Co. Fermanagh", "Co. Londonderry", "Co. Tyrone", "end"];
+states['US'] = ["Alabama", "Alaska", "Arizona", "Arkansas", "California", "Colorado", "Connecticut", "Delaware", "District of Columbia", "Florida", "Georgia", "Hawaii", "Idaho", "Illinois", "Indiana", "Iowa", "Kansas", "Kentucky", "Louisiana", "Maine", "Maryland", "Massachusetts", "Michigan", "Minnesota", "Mississippi", "Missouri", "Montana", "Nebraska", "Nevada", "New Hampshire", "New Jersey", "New Mexico", "New York", "North Carolina", "North Dakota", "Ohio", "Oklahoma", "Oregon", "Pennsylvania", "Rhode Island", "South Carolina", "South Dakota", "Tennessee", "Texas", "Utah", "Vermont", "Virginia", "Washington", "West Virginia", "Wisconsin", "Wyoming", "end"];
+        jQuery(document).ready(function(){
+
+jQuery("input[name=state]").attr("id", "stateinput");
+        jQuery("select[name=country]").change(function() {
+statechange();
+});
+        statechange();
+        });
+        function statechange() {
+        // Check if we need the select-inline class applied,
+        // which is a data attribute set by the input field.
+        var addClass = '';
+                var data = jQuery("input[name=state]").data("selectinlinedropdown");
+                addClass = getStateSelectClass(data);
+                if (addClass.length < 1) {
+        data = jQuery("#stateinput").data("selectinlinedropdown");
+                addClass = getStateSelectClass(data);
+        }
+
+        var state = jQuery("#stateinput").val();
+                var country = jQuery("select[name=country]").val();
+                var statesTab = jQuery("#stateinput").attr("tabindex");
+                var disabled = jQuery("#stateinput").attr("disabled");
+                var readonly = jQuery("#stateinput").attr("readonly");
+                if (typeof (statesTab) == "undefined") statesTab = '';
+                if (typeof (disabled) == "undefined") disabled = '';
+                if (typeof (readonly) == "undefined") readonly = '';
+                if (states[country]) {
+        jQuery("#stateinput").hide()
+                .removeAttr("name")
+                .removeAttr("required");
+                jQuery("#inputStateIcon").hide();
+                jQuery("#stateselect").remove();
+                var stateops = '';
+                for (key in states[country]) {
+        stateval = states[country][key];
+                if (stateval == "end") break;
+                stateops += '<option';
+                if (stateval == state) stateops += ' selected="selected"'
+                stateops += '>' + stateval + '</option>';
+        }
+        if (statesTab != '') { statesTab = ' tabindex="' + statesTab + '"'; }
+        if (disabled || readonly) {
+        disabled = ' disabled';
+        }
+        jQuery("#stateinput").parent()
+                .append('<select name="state" onchange="customerformInputValidate();" class="' + jQuery("#stateinput").attr("class") + addClass + '" id="stateselect"' + statesTab + disabled + '><option value="">&mdash;</option>' + stateops + '</select>');
+                var required = true;
+                if (typeof stateNotRequired == "boolean" && stateNotRequired) {
+        required = false;
+        }
+        //jQuery("#stateselect").attr("required", required);
+        } else {
+        var required = true;
+                if (typeof stateNotRequired == "boolean" && stateNotRequired) {
+        required = false;
+        }
+        jQuery("#stateselect").remove();
+                jQuery("#stateinput").show()
+                .attr("name", "state")
+                .attr("required", required);
+                jQuery("#inputStateIcon").show();
+        }
+        }
+
+/**
+ * Gets the select-inline class name, depending on whether
+ * data is true when evaluated ToBoolean.
+ *
+ * @param {Number} data The data attribute from the form.
+ * @return {String} addClass Returns the select-inline class on success.
+ */
+function getStateSelectClass(data)
+        {
+        var addClass = '';
+                if (data) {
+        addClass = ' select-inline';
+                }
+
+        return addClass;
+                }
+

+ 1 - 0
js/addons.min.js

@@ -0,0 +1 @@
+jQuery(document).ready(function(){function r(){jQuery.post("","customaction=serviceaddons&checkcredit=0&"+jQuery("#coniguration_form").serialize(),function(r){""!=r&&(jQuery("#ordersummary, #footer_order_summary").addClass("cartsummary_loader"),jQuery.post("cart.php","a=view&ajax=1&checkcredit=0&onepageorder=1",function(r){jQuery("#ordersummary, #footer_order_summary").removeClass("cartsummary_loader"),jQuery("#ordersummary, #footer_order_summary").html(r),$("#applyCreditContainer").length>0&&jQuery.post("cart.php","a=checkout&ajax=1&checkcredit=1&onepageorder=1",function(r){jQuery("#applyCreditContainer").html(r),jQuery(".cccheckdb").iCheck({inheritID:!0,checkboxClass:"icheckbox_square-blue",radioClass:"iradio_square-blue",increaseArea:"20%"}),jQuery(".cccheckdb").on("ifChecked",function(r){"1"===$(this).val()&&"useFullCreditOnCheckout"===$(this).attr("id")?$("#paymentGatewaysContainer").hide():$("#paymentGatewaysContainer").show()})})}))})}jQuery("#ws-ajax-order-form").html('<div class="order-from-loader-img"><i class="fad fa-circle-notch fa-spin fa-2x"></i></div>'),jQuery.post("cart.php","a=checkout&ajax=1&checkcredit=0&onepageorder=1",function(r){jQuery("#ws-ajax-order-form").html(r),""!=jQuery("#hiddenpromo").val()&&(jQuery("#promocode").val(jQuery("#hiddenpromo").val()),jQuery(".applypromo").trigger("click"))}),jQuery("#coniguration_form").on("change",".adaddons",function(e){r()})});

+ 1880 - 0
js/base.js

@@ -0,0 +1,1880 @@
+if (typeof localTrans === 'undefined') {
+    localTrans = function (phraseId, fallback)
+    {
+        if (typeof _localLang !== 'undefined') {
+            if (typeof _localLang[phraseId] !== 'undefined') {
+                if (_localLang[phraseId].length > 0) {
+                    return _localLang[phraseId];
+                }
+            }
+        }
+
+        return fallback;
+    }
+}
+
+var domainLookupCallCount,
+    checkoutForm,
+    furtherSuggestions;
+
+jQuery(document).ready(function(){
+
+    jQuery('#order-standard_cart').find('input').not('.no-icheck').iCheck({
+        inheritID: true,
+        checkboxClass: 'icheckbox_square-blue',
+        radioClass: 'iradio_square-blue',
+        increaseArea: '20%'
+    });
+
+    jQuery('.mc-promo .header').click(function(e) {
+        e.preventDefault();
+        if (jQuery(e.target).is('.btn, .btn span,.btn .fa')) {
+            return;
+        }
+        jQuery(this).parent().find('.rotate').toggleClass('down');
+        jQuery(this).parent().find('.body').slideToggle('fast');
+    });
+    jQuery('.mc-promos.viewcart .mc-promo:first-child .header').click();
+
+    var cardNumber = jQuery('#inputCardNumber'),
+        existingCvv = jQuery('#inputCardCVV2');
+    if (cardNumber.length) {
+        cardNumber.payment('formatCardNumber');
+        jQuery('#inputCardCVV').payment('formatCardCVC');
+        jQuery('#inputCardStart').payment('formatCardExpiry');
+        jQuery('#inputCardExpiry').payment('formatCardExpiry');
+    }
+    if (existingCvv.length) {
+        existingCvv.payment('formatCardCVC');
+    }
+
+    var $orderSummaryEl = jQuery("#orderSummary");
+    if ($orderSummaryEl.length) {
+        var offset = jQuery("#scrollingPanelContainer").parent('.row').offset();
+        var maxTopOffset = jQuery("#scrollingPanelContainer").parent('.row').outerHeight() - 35;
+        var topPadding = 15;
+        jQuery(window).resize(function() {
+            offset = jQuery("#scrollingPanelContainer").parent('.row').offset();
+            maxTopOffset = jQuery("#scrollingPanelContainer").parent('.row').outerHeight() - 35;
+            repositionScrollingSidebar();
+        });
+        jQuery(window).scroll(function() {
+            repositionScrollingSidebar();
+        });
+        repositionScrollingSidebar();
+    }
+
+    function repositionScrollingSidebar() {
+        if (jQuery('#scrollingPanelContainer').css('float') === 'none') {
+            $orderSummaryEl.stop().css('margin-top', '0');
+            return false;
+        }
+        var heightOfOrderSummary =  $orderSummaryEl.outerHeight();
+        var offsetTop = 0;
+        if (typeof offset !== "undefined") {
+            offsetTop = offset.top;
+        }
+        var newTopOffset = jQuery(window).scrollTop() - offsetTop + topPadding;
+        if (newTopOffset > maxTopOffset - heightOfOrderSummary) {
+            newTopOffset = maxTopOffset - heightOfOrderSummary;
+        }
+        if (jQuery(window).scrollTop() > offsetTop) {
+            $orderSummaryEl.stop().animate({
+                marginTop: newTopOffset
+            });
+        } else {
+            $orderSummaryEl.stop().animate({
+                marginTop: 0
+            });
+        }
+    }
+
+    jQuery("#frmConfigureProduct").submit(function(e) {
+        e.preventDefault();
+
+        var button = jQuery('#btnCompleteProductConfig');
+
+        var btnOriginalText = jQuery(button).html();
+        jQuery(button).find('i').removeClass('fa-arrow-circle-right').addClass('fa-spinner fa-spin');
+        WHMCS.http.jqClient.post("cart.php", 'ajax=1&a=confproduct&' + jQuery("#frmConfigureProduct").serialize(),
+            function(data) {
+                if (data) {
+                    jQuery("#btnCompleteProductConfig").html(btnOriginalText);
+                    jQuery("#containerProductValidationErrorsList").html(data);
+                    jQuery("#containerProductValidationErrors").show();
+                    // scroll to error container if below it
+                    if (jQuery(window).scrollTop() > jQuery("#containerProductValidationErrors").offset().top) {
+                        jQuery('html, body').scrollTop(jQuery("#containerProductValidationErrors").offset().top - 15);
+                    }
+                } else {
+                    window.location = 'cart.php?a=confdomains';
+                }
+            }
+        );
+    });
+
+    jQuery("#productConfigurableOptions").on('ifChecked', 'input', function() {
+        recalctotals();
+    });
+    jQuery("#productConfigurableOptions").on('ifUnchecked', 'input', function() {
+        recalctotals();
+    });
+    jQuery("#productConfigurableOptions").on('change', 'select', function() {
+        recalctotals();
+    });
+
+    jQuery(".addon-products").on('click', '.panel-addon', function(e) {
+        e.preventDefault();
+        var $activeAddon = jQuery(this);
+        if ($activeAddon.hasClass('panel-addon-selected')) {
+            $activeAddon.find('input[type="checkbox"]').iCheck('uncheck');
+        } else {
+            $activeAddon.find('input[type="checkbox"]').iCheck('check');
+        }
+    });
+    jQuery(".addon-products").on('ifChecked', '.panel-addon input', function(event) {
+        var $activeAddon = jQuery(this).parents('.panel-addon');
+        $activeAddon.addClass('panel-addon-selected');
+        $activeAddon.find('input[type="checkbox"]').iCheck('check');
+        $activeAddon.find('.panel-add').html('<i class="fas fa-shopping-cart"></i> '+localTrans('addedToCartRemove', 'Added to Cart (Remove)'));
+        recalctotals();
+    });
+    jQuery(".addon-products").on('ifUnchecked', '.panel-addon input', function(event) {
+        var $activeAddon = jQuery(this).parents('.panel-addon');
+        $activeAddon.removeClass('panel-addon-selected');
+        $activeAddon.find('input[type="checkbox"]').iCheck('uncheck');
+        $activeAddon.find('.panel-add').html('<i class="fas fa-plus"></i> '+localTrans('addToCart', 'Add to Cart'));
+        recalctotals();
+    });
+
+    jQuery("#frmConfigureProduct").on('ifChecked', '.addon-selector', function(event) {
+        recalctotals();
+    });
+
+    if (jQuery(".domain-selection-options input:checked").length == 0) {
+        var firstInput = jQuery(".domain-selection-options input:first");
+
+        jQuery(firstInput).iCheck('check');
+        jQuery(firstInput).parents('.option').addClass('option-selected');
+    }
+    jQuery("#domain" + jQuery(".domain-selection-options input:checked").val()).show();
+    jQuery(".domain-selection-options input").on('ifChecked', function(event){
+        jQuery(".domain-selection-options .option").removeClass('option-selected');
+        jQuery(this).parents('.option').addClass('option-selected');
+        jQuery(".domain-input-group").hide();
+        jQuery("#domain" + jQuery(this).val()).show();
+    });
+
+    jQuery('#frmProductDomain').submit(function (e) {
+        e.preventDefault();
+
+        var btnSearchObj = jQuery(this).find('button[type="submit"]'),
+            domainSearchResults = jQuery("#DomainSearchResults"),
+            spotlightTlds = jQuery('#spotlightTlds'),
+            suggestions = jQuery('#domainSuggestions'),
+            btnDomainContinue = jQuery('#btnDomainContinue'),
+            domainoption = jQuery(".domain-selection-options input:checked").val(),
+            sldInput = jQuery("#" + domainoption + "sld"),
+            sld = sldInput.val(),
+            tld = '',
+            pid = jQuery('#frmProductDomainPid').val(),
+            tldInput = '',
+            idnLanguage = jQuery('#idnLanguageSelector');
+
+        jQuery('.field-error-msg').hide();
+
+        if (idnLanguage.is(':visible')) {
+            idnLanguage.slideUp();
+            idnLanguage.find('select').val('');
+        }
+
+        if (domainoption == 'incart') {
+            sldInput = jQuery("#" + domainoption + "sld option:selected");
+            sld = sldInput.text();
+        } else if (domainoption == 'subdomain') {
+            tldInput = jQuery("#" + domainoption + "tld option:selected");
+            tld = tldInput.text();
+        } else {
+            tldInput = jQuery("#" + domainoption + "tld");
+            tld = tldInput.val();
+            if (sld && !tld) {
+                tldInput.tooltip('show');
+                tldInput.focus();
+                return false;
+            }
+            if (tld.substr(0, 1) != '.') {
+                tld = '.' + tld;
+            }
+        }
+        if (!sld) {
+            sldInput.tooltip('show');
+            sldInput.focus();
+            return false;
+        }
+
+        sldInput.tooltip('hide');
+        if (tldInput.length) {
+            tldInput.tooltip('hide');
+        }
+
+        jQuery('input[name="domainoption"]').iCheck('disable');
+        domainLookupCallCount = 0;
+        btnSearchObj.attr('disabled', 'disabled').addClass('disabled');
+
+        jQuery('.domain-lookup-result').hide();
+        jQuery('#primaryLookupResult div').filter(function() {
+            return $(this).closest('#idnLanguageSelector').length === 0;
+        }).hide();
+        jQuery('#primaryLookupResult').find('.register-price-label').show().end()
+            .find('.transfer-price-label').hide();
+
+        jQuery('.domain-lookup-register-loader').hide();
+        jQuery('.domain-lookup-transfer-loader').hide();
+        jQuery('.domain-lookup-other-loader').hide();
+        if (domainoption == 'register') {
+            jQuery('.domain-lookup-register-loader').show();
+        } else if (domainoption == 'transfer') {
+            jQuery('.domain-lookup-transfer-loader').show();
+        } else {
+            jQuery('.domain-lookup-other-loader').show();
+        }
+
+        jQuery('.domain-lookup-loader').show();
+        suggestions.find('div:not(.actions)').hide().end()
+            .find('.clone').remove();
+        jQuery('div.panel-footer.more-suggestions').hide()
+            .find('a').show().end()
+            .find('span.no-more').hide();
+        jQuery('.btn-add-to-cart').removeAttr('disabled')
+            .find('span').hide().end()
+            .find('span.to-add').show();
+        btnDomainContinue.hide().attr('disabled', 'disabled');
+
+        if (domainoption != 'register') {
+            spotlightTlds.hide();
+            jQuery('.suggested-domains').hide();
+        }
+
+        if (!domainSearchResults.is(":visible")) {
+            domainSearchResults.fadeIn();
+        }
+
+        if (domainoption == 'register') {
+            spotlightTlds.fadeIn('fast');
+            jQuery('#resultDomainOption').val(domainoption);
+            var lookup = WHMCS.http.jqClient.post(
+                    WHMCS.utils.getRouteUrl('/domain/check'),
+                    {
+                        token: csrfToken,
+                        type: 'domain',
+                        domain: sld + tld,
+                        sld: sld,
+                        tld: tld,
+                        source: 'cartAddDomain'
+                    },
+                    'json'
+                ),
+                spotlight = WHMCS.http.jqClient.post(
+                    WHMCS.utils.getRouteUrl('/domain/check'),
+                    {
+                        token: csrfToken,
+                        type: 'spotlight',
+                        domain: sld + tld,
+                        sld: sld,
+                        tld: tld,
+                        source: 'cartAddDomain'
+                    },
+                    'json'
+                ),
+                suggestion = WHMCS.http.jqClient.post(
+                    WHMCS.utils.getRouteUrl('/domain/check'),
+                    {
+                        token: csrfToken,
+                        type: 'suggestions',
+                        domain: sld + tld,
+                        sld: sld,
+                        tld: tld,
+                        source: 'cartAddDomain'
+                    },
+                    'json'
+                );
+
+            // primary lookup handler
+            lookup.done(function (data) {
+                jQuery.each(data.result, function(index, domain) {
+                    var pricing = null,
+                        result = jQuery('#primaryLookupResult'),
+                        available = result.find('.domain-available'),
+                        availablePrice = result.find('.domain-price'),
+                        unavailable = result.find('.domain-unavailable'),
+                        invalid= result.find('.domain-invalid'),
+                        contactSupport = result.find('.domain-contact-support'),
+                        resultDomain = jQuery('#resultDomain'),
+                        resultDomainPricing = jQuery('#resultDomainPricingTerm'),
+                        error = result.find('.domain-error');
+                    result.show();
+                    jQuery('.domain-lookup-primary-loader').hide();
+                    if (typeof domain !== 'string' && !domain.error && domain.isValidDomain) {
+                        error.hide();
+                        pricing = domain.pricing;
+                        if (domain.isAvailable && typeof pricing !== 'string') {
+                            if (domain.domainName !== domain.idnDomainName && idnLanguage.not(':visible')) {
+                                idnLanguage.slideDown();
+                            }
+                            if (domain.preferredTLDNotAvailable) {
+                                unavailable.show().find('strong').html(domain.originalUnavailableDomain);
+                            }
+                            contactSupport.hide();
+                            available.show().find('strong').html(domain.domainName);
+                            availablePrice.show().find('span.price').html(pricing[Object.keys(pricing)[0]].register).end()
+                                .find('button').attr('data-domain', domain.domainName);
+                            resultDomain.val(domain.domainName);
+                            resultDomainPricing.val(Object.keys(pricing)[0]).attr('name', 'domainsregperiod[' + domain.domainName +']');
+
+                            btnDomainContinue.removeAttr('disabled');
+                        } else {
+                            unavailable.show().find('strong').html(domain.domainName);
+                            contactSupport.hide();
+                            if (typeof pricing === 'string' && pricing == 'ContactUs') {
+                                contactSupport.show();
+                            }
+                        }
+                    } else {
+                        var done = false,
+                            reg = /<br\s*\/>/,
+                            errors = [];
+                        if (!domain.isValidDomain && domain.domainErrorMessage) {
+                            invalid.text(domain.domainErrorMessage);
+                        } else if (domain.error || index === 'error') {
+                            if (typeof domain === 'string') {
+                                error.text(domain);
+                            } else if (!domain.error.match(reg)) {
+                                error.text(domain.error);
+                            } else {
+                                error.text('');
+                                errors = domain.error.split(reg);
+                                for(var i=0; i < errors.length; i++) {
+                                    var errorMsg = errors[i];
+                                    if (errorMsg.length) {
+                                        if (error.text()) {
+                                            // only add line break if there is
+                                            // multiple lines of text
+                                            error.append('<br />');
+                                        }
+                                        error.append(jQuery('<span></span>').text(errorMsg));
+                                    }
+                                }
+                            }
+                            error.show();
+                            done = true;
+                        }
+                        if (!done) {
+                            invalid.show();
+                        }
+                    }
+                });
+            }).always(function() {
+                hasProductDomainLookupEnded(3, btnSearchObj);
+            });
+
+            // spotlight lookup handler
+            spotlight.done(function(data) {
+                if (typeof data != 'object' || data.result.length == 0 || data.result.error) {
+                    jQuery('.domain-lookup-spotlight-loader').hide();
+                    return;
+                }
+                jQuery.each(data.result, function(index, domain) {
+                    var tld = domain.tldNoDots,
+                        pricing = domain.pricing,
+                        result = jQuery('#spotlight' + tld + ' .domain-lookup-result');
+                    jQuery('.domain-lookup-spotlight-loader').hide();
+                    result.find('button').hide();
+                    if (domain.isValidDomain) {
+                        if (domain.isAvailable && typeof pricing !== 'string') {
+                            if (domain.domainName !== domain.idnDomainName && idnLanguage.not(':visible')) {
+                                idnLanguage.slideDown();
+                            }
+                            result
+                                .find('span.available').html(pricing[Object.keys(pricing)[0]].register).show().end()
+                                .find('button.btn-add-to-cart')
+                                .attr('data-domain', domain.domainName)
+                                .show();
+
+                            result.find('button.domain-contact-support').hide();
+                        } else {
+                            if (typeof pricing === 'string') {
+                                if (pricing == '') {
+                                    result.find('button.unavailable').show();
+                                } else {
+                                    result.find('button.domain-contact-support').show();
+                                }
+                                result.find('span.available').hide();
+                            } else {
+                                result.find('button.unavailable').show();
+                                result.find('span.available').hide();
+                            }
+                        }
+                    } else {
+                        result.find('button.invalid:hidden').show().end()
+                            .find('span.available').hide().end()
+                            .find('button').not('button.invalid').hide();
+                    }
+                    result.show();
+                });
+            }).always(function() {
+                hasProductDomainLookupEnded(3, btnSearchObj);
+            });
+
+            // suggestions lookup handler
+            suggestion.done(function (data) {
+                if (typeof data != 'object' || data.result.length == 0 || data.result.error) {
+                    jQuery('.suggested-domains').fadeOut('fast', function() {
+                        jQuery(this).hide();
+                    });
+                    return;
+                } else {
+                    jQuery('.suggested-domains').show();
+                }
+                var suggestionCount = 1;
+                jQuery.each(data.result, function(index, domain) {
+                    var tld = domain.tld,
+                        pricing = domain.pricing;
+                    suggestions.find('div:first').clone(true, true).appendTo(suggestions);
+                    var newSuggestion = suggestions.find('div.domain-suggestion').last();
+                    newSuggestion.addClass('clone')
+                        .find('span.domain').html(domain.sld).end()
+                        .find('span.extension').html('.' + tld);
+                    if (domain.domainName !== domain.idnDomainName && idnLanguage.not(':visible')) {
+                        idnLanguage.slideDown();
+                    }
+                    if (typeof pricing === 'string') {
+                        newSuggestion.find('button.btn-add-to-cart').remove();
+                        if (pricing != '') {
+                            newSuggestion.find('button.domain-contact-support').show().end()
+                                .find('span.price').hide();
+                        } else {
+                            newSuggestion.remove();
+                        }
+                    } else {
+                        newSuggestion.find('button.btn-add-to-cart').attr('data-domain', domain.domainName).end()
+                            .find('span.price').html(pricing[Object.keys(pricing)[0]].register);
+                    }
+
+                    if (suggestionCount <= 10) {
+                        newSuggestion.show();
+                    }
+                    suggestionCount++;
+                    if (domain.group) {
+                        newSuggestion.find('span.promo')
+                            .addClass(domain.group)
+                            .html(domain.group.toUpperCase())
+                            .show();
+                    }
+                    furtherSuggestions = suggestions.find('div.domain-suggestion.clone').not(':visible').length;
+                    if (furtherSuggestions > 0) {
+                        jQuery('div.more-suggestions').show();
+                    }
+                });
+                jQuery('.domain-lookup-suggestions-loader').hide();
+                jQuery('#domainSuggestions').show();
+            }).always(function() {
+                hasProductDomainLookupEnded(3, btnSearchObj);
+            });
+        } else if (domainoption == 'transfer') {
+            jQuery('#resultDomainOption').val(domainoption);
+            var transfer = WHMCS.http.jqClient.post(
+                WHMCS.utils.getRouteUrl('/domain/check'),
+                {
+                    token: csrfToken,
+                    type: 'transfer',
+                    domain: sld + tld,
+                    sld: sld,
+                    tld: tld,
+                    source: 'cartAddDomain'
+                },
+                'json'
+            );
+
+            transfer.done(function (data) {
+                if (typeof data != 'object' || data.result.length == 0) {
+                    jQuery('.domain-lookup-primary-loader').hide();
+                    return;
+                }
+                var result = jQuery('#primaryLookupResult'),
+                    transfereligible = result.find('.transfer-eligible'),
+                    transferPrice = result.find('.domain-price'),
+                    transfernoteligible = result.find('.transfer-not-eligible'),
+                    resultDomain = jQuery('#resultDomain'),
+                    resultDomainPricing = jQuery('#resultDomainPricingTerm');
+                if (Object.keys(data.result).length === 0) {
+                    jQuery('.domain-lookup-primary-loader').hide();
+                    result.show();
+                    transfernoteligible.show();
+                }
+                jQuery.each(data.result, function(index, domain) {
+                    var pricing = domain.pricing;
+                    jQuery('.domain-lookup-primary-loader').hide();
+                    result.show();
+                    if (domain.isRegistered) {
+                        transfereligible.show();
+                        transferPrice.show().find('.register-price-label').hide().end()
+                            .find('.transfer-price-label').show().end()
+                            .find('span.price').html(pricing[Object.keys(pricing)[0]].transfer).end()
+                            .find('button').attr('data-domain', domain.domainName);
+                        resultDomain.val(domain.domainName);
+                        resultDomainPricing.val(Object.keys(pricing)[0]).attr('name', 'domainsregperiod[' + domain.domainName +']');
+                        btnDomainContinue.removeAttr('disabled');
+                    } else {
+                        transfernoteligible.show();
+                    }
+                });
+            }).always(function() {
+                hasProductDomainLookupEnded(1, btnSearchObj);
+            });
+        } else if (domainoption == 'owndomain' || domainoption == 'subdomain' || domainoption == 'incart') {
+
+            var otherDomain = WHMCS.http.jqClient.post(
+                WHMCS.utils.getRouteUrl('/domain/check'),
+                {
+                    token: csrfToken,
+                    type: domainoption,
+                    pid: pid,
+                    domain: sld + tld,
+                    sld: sld,
+                    tld: tld,
+                    source: 'cartAddDomain'
+                },
+                'json'
+            );
+
+            otherDomain.done(function(data) {
+                if (typeof data != 'object' || data.result.length == 0) {
+                    jQuery('.domain-lookup-subdomain-loader').hide();
+                    return;
+                }
+                jQuery.each(data.result, function(index, result) {
+                    if (result.status === true) {
+                        window.location = 'cart.php?a=confproduct&i=' + result.num;
+                    } else {
+                        jQuery('.domain-lookup-primary-loader').hide();
+                        if (typeof result === 'string') {
+                            jQuery('#primaryLookupResult').show().find('.domain-error')
+                                .text(result)
+                                .show();
+                        } else {
+                            jQuery('#primaryLookupResult').show().find('.domain-invalid').show();
+                        }
+                    }
+                });
+
+            }).always(function(){
+                hasProductDomainLookupEnded(1, btnSearchObj);
+            });
+        }
+
+        btnDomainContinue.show();
+    });
+
+    jQuery('#frmProductDomainSelections').on('submit', function(e) {
+        var idnLanguage = jQuery('#idnLanguageSelector'),
+            idnLanguageInput = idnLanguage.find('select');
+
+        if (!idnLanguage.not(':visible') && !idnLanguageInput.val()) {
+            e.preventDefault();
+            idnLanguageInput.showInputError();
+            return false;
+        }
+        return true;
+    });
+
+    jQuery("#btnAlreadyRegistered").click(function() {
+        jQuery("#containerNewUserSignup").slideUp('', function() {
+            jQuery("#containerExistingUserSignin").slideDown('', function() {
+                jQuery("#inputCustType").val('existing');
+                jQuery("#btnAlreadyRegistered").fadeOut('', function() {
+                    jQuery("#btnNewUserSignup").fadeIn();
+                });
+            });
+        });
+        jQuery("#containerNewUserSecurity").hide();
+        if (jQuery("#stateselect").attr('required')) {
+            jQuery("#stateselect").removeAttr('required').addClass('requiredAttributeRemoved');
+        }
+        jQuery('.marketing-email-optin').slideUp();
+    });
+
+    jQuery("#btnNewUserSignup").click(function() {
+        jQuery("#containerExistingUserSignin").slideUp('', function() {
+            jQuery("#containerNewUserSignup").slideDown('', function() {
+                jQuery("#inputCustType").val('new');
+                if (jQuery("#passwdFeedback").html().length == 0) {
+                    jQuery("#containerNewUserSecurity").show();
+                }
+                jQuery("#btnNewUserSignup").fadeOut('', function() {
+                    jQuery("#btnAlreadyRegistered").fadeIn();
+                });
+            });
+            jQuery('.marketing-email-optin').slideDown();
+        });
+        if (jQuery("#stateselect").hasClass('requiredAttributeRemoved')) {
+            jQuery("#stateselect").attr('required', 'required').removeClass('requiredAttributeRemoved');
+        }
+    });
+
+    jQuery("#btnExistingLogin").click(function() {
+        var inputLoginEmail = jQuery('#inputLoginEmail').val(),
+            inputLoginPassword = jQuery('#inputLoginPassword').val(),
+            existingLoginMessage = jQuery('#existingLoginMessage'),
+            btnExistingLogin = jQuery('#btnExistingLogin');
+
+        btnExistingLogin.prop('disabled', true)
+            .addClass('disabled')
+            .find('span').toggle();
+
+        WHMCS.http.jqClient.jsonPost({
+            url: WHMCS.utils.getRouteUrl('/login/cart'),
+            data: {
+                username: inputLoginEmail,
+                password: inputLoginPassword,
+                token: csrfToken
+            },
+            success: function (data) {
+                if (!data.redirectUrl) {
+                    location.reload(true);
+                } else {
+                    window.location.href = data.redirectUrl;
+                }
+            },
+            error: function (error) {
+                if (error) {
+                    existingLoginMessage.slideUp('fast')
+                        .toggle()
+                        .html(error)
+                        .slideDown('fast');
+                    btnExistingLogin.prop('disabled', false)
+                        .removeClass('disabled')
+                        .find('span').toggle();
+                }
+            }
+        });
+    });
+
+    jQuery('.account-select').on('ifChecked', function(event) {
+        var userSignupContainer = jQuery('#containerNewUserSignup'),
+            stateSelect = jQuery("#stateselect"),
+            thisValue = jQuery(this).val(),
+            btnCompleteOrder = jQuery('#btnCompleteOrder'),
+            existingPayMethods = jQuery('#existingCardsContainer'),
+            existingUserEmail = jQuery('#inputEmail');
+
+        if (existingPayMethods.length) {
+            existingPayMethods.html('');
+        }
+
+        if (existingUserEmail.length) {
+            existingUserEmail.attr('value', '');
+        }
+        jQuery('#containerExistingAccountSelect')
+            .find('div.account.active')
+            .removeClass('active');
+        jQuery(this).closest('div.account').addClass('active');
+        if (thisValue === 'new') {
+            if (userSignupContainer.not(':visible')) {
+                userSignupContainer.slideDown('', function () {
+                    jQuery("#inputCustType").val('add');
+                    jQuery('.marketing-email-optin').slideDown();
+                });
+                if (stateSelect.hasClass('requiredAttributeRemoved')) {
+                    stateSelect.attr('required', 'required')
+                        .removeClass('requiredAttributeRemoved');
+                }
+            }
+        } else {
+            btnCompleteOrder.addClass('disabled');
+
+            if (btnCompleteOrder.hasClass('spinner-on-click')) {
+                var icon = btnCompleteOrder.find('i.fas,i.far,i.fal,i.fab');
+
+                jQuery(icon)
+                    .data('original-class', icon.attr('class'))
+                    .removeAttr('class')
+                    .addClass('fas fa-spinner fa-spin');
+            }
+
+            jQuery("#inputCustType").val('account');
+            if (userSignupContainer.is(':visible')) {
+                userSignupContainer.slideUp();
+                if (stateSelect.attr('required')) {
+                    stateSelect.removeAttr('required')
+                        .addClass('requiredAttributeRemoved');
+                }
+                jQuery('.marketing-email-optin').slideUp();
+            }
+        }
+        WHMCS.http.jqClient.jsonPost({
+            url: WHMCS.utils.getRouteUrl('/cart/account/select'),
+            data: {
+                account_id: thisValue,
+                token: csrfToken
+            },
+            success: function(data) {
+                var creditDiv = jQuery('#applyCreditContainer');
+                jQuery('#totalCartPrice').text(data.total);
+                creditDiv.find('p').first().text(data.availableCreditBalance);
+                if (!data.canUseCreditOnCheckout && creditDiv.is(':visible')) {
+                    var skipCreditOnCheckout = jQuery('#skipCreditOnCheckout');
+                    creditDiv.hide();
+                    skipCreditOnCheckout.prop('checked', true);
+                } else if (data.canUseCreditOnCheckout) {
+                    var useCreditOnCheckout = jQuery('#useCreditOnCheckout'),
+                        spanFullCredit = jQuery('#spanFullCredit'),
+                        spanUseCredit = jQuery('#spanUseCredit');
+                    if (data.full) {
+                        spanFullCredit.show().find('span').text(data.creditBalance);
+                        if (spanUseCredit.is(':visible')) {
+                            spanUseCredit.slideDown();
+                        }
+                    } else {
+                        spanUseCredit.show().find('span').text(data.creditBalance);
+                        if (spanFullCredit.is(':visible')) {
+                            spanFullCredit.slideUp();
+                        }
+                    }
+                    useCreditOnCheckout.iCheck('check');
+                    if (creditDiv.not(':visible')) {
+                        creditDiv.slideDown();
+                    }
+                }
+                if (existingPayMethods.length) {
+                    existingPayMethods.html(data.existingCards);
+                    existingPayMethods.find('input[type="radio"]').iCheck({
+                        inheritID: true,
+                        checkboxClass: 'icheckbox_square-blue',
+                        radioClass: 'iradio_square-blue',
+                        increaseArea: '20%'
+                    });
+                    var firstVisible = jQuery('input[name="ccinfo"]:visible').first();
+                    if (firstVisible.length) {
+                        firstVisible.iCheck('check');
+                    }
+                }
+            },
+            always: function() {
+                btnCompleteOrder.removeClass('disabled');
+                if (btnCompleteOrder.hasClass('spinner-on-click')) {
+                    var icon = btnCompleteOrder.find('i.fas,i.far,i.fal,i.fab');
+
+                    if (jQuery(icon).hasClass('fa-spinner')) {
+                        jQuery(icon)
+                            .removeAttr('class')
+                            .addClass(icon.data('original-class'));
+                    }
+                }
+            }
+        });
+    });
+
+    var existingCards = jQuery(document).find('.existing-card'),
+        cvvFieldContainer = jQuery('#cvv-field-container'),
+        existingCardContainer = jQuery('#existingCardsContainer'),
+        newCardInfo = jQuery('#newCardInfo'),
+        newCardSaveSettings = jQuery('#newCardSaveSettings'),
+        inputNoStoreContainer = jQuery('#inputNoStoreContainer'),
+        existingCardInfo = jQuery('#existingCardInfo'),
+        newCardOption = jQuery('#new'),
+        creditCardInputFields = jQuery('#creditCardInputFields');
+
+    jQuery(document).on('ifChecked', '.existing-card', function(event) {
+        newCardSaveSettings.slideUp().find('input').attr('disabled', 'disabled');
+        if (jQuery('.payment-methods:checked').data('remote-inputs') === 1) {
+            return;
+        }
+
+        newCardInfo.slideUp().find('input').attr('disabled', 'disabled');
+        existingCardInfo.slideDown().find('input').removeAttr('disabled');
+    });
+    newCardOption.on('ifChecked', function(event) {
+        newCardSaveSettings.slideDown().find('input').removeAttr('disabled');
+        if (jQuery('.payment-methods:checked').data('remote-inputs') === 1) {
+            return;
+        }
+
+        newCardInfo.slideDown().find('input').removeAttr('disabled');
+        existingCardInfo.slideUp().find('input').attr('disabled', 'disabled');
+    });
+
+    if (!existingCards.length) {
+        existingCardInfo.slideUp().find('input').attr('disabled', 'disabled');
+    }
+
+    jQuery(".payment-methods").on('ifChecked', function(event) {
+        if (jQuery(this).hasClass('is-credit-card')) {
+            var gatewayPaymentType = jQuery(this).data('payment-type'),
+                gatewayModule = jQuery(this).val(),
+                showLocal = jQuery(this).data('show-local'),
+                relevantMethods = [];
+            if (gatewayPaymentType === 'RemoteCreditCard') {
+                inputNoStoreContainer.hide().find('input').prop('disabled', 'disabled');
+            } else {
+                if (inputNoStoreContainer.not(':visible')) {
+                    inputNoStoreContainer.slideDown().find('input').removeProp('disabled');
+                }
+            }
+
+            existingCards.each(function(index) {
+                var paymentType = jQuery(this).data('payment-type'),
+                    paymentModule = jQuery(this).data('payment-gateway'),
+                    payMethodId = jQuery(this).val();
+
+                var paymentTypeMatch = (paymentType === gatewayPaymentType);
+
+                var paymentModuleMatch = false;
+                if (gatewayPaymentType === 'RemoteCreditCard') {
+                    // only show remote credit cards that belong to the selected gateway
+                    paymentModuleMatch = (paymentModule === gatewayModule);
+                } else if (gatewayPaymentType === 'CreditCard') {
+                    // any local credit card can be used with any credit card gateway
+                    paymentModuleMatch = true;
+                }
+
+                if (showLocal && paymentType === 'CreditCard') {
+                    paymentTypeMatch = true;
+                    paymentModuleMatch = true;
+                }
+
+                var payMethodElements = jQuery('[data-paymethod-id="' + payMethodId + '"]');
+
+                if (paymentTypeMatch && paymentModuleMatch) {
+                    jQuery(payMethodElements).show();
+                    relevantMethods.push(this);
+                } else {
+                    jQuery(payMethodElements).hide();
+                }
+            });
+
+            var enabledRelevantMethods = relevantMethods.filter(function (item) {
+                return ! jQuery(item).attr('disabled');
+            });
+
+            if (enabledRelevantMethods.length > 0) {
+                var defaultId = null;
+                jQuery.each(enabledRelevantMethods, function(index, value) {
+                    var jQueryElement = jQuery(value),
+                        order = parseInt(jQueryElement.data('order-preference'), 10);
+                    if ((defaultId === null) || (order < defaultId)) {
+                        defaultId = jQueryElement.val();
+                        if (order === 0) {
+                            return false;
+                        }
+                    }
+                });
+                if (defaultId === null) {
+                    defaultId = 'new';
+                }
+
+                jQuery.each(enabledRelevantMethods, function(index, value) {
+                    var jQueryElement = jQuery(value);
+                    if (jQueryElement.val() === defaultId) {
+                        jQueryElement.iCheck('check');
+                        return false;
+                    }
+                });
+
+                existingCardContainer.show();
+                existingCardInfo.show().find('input').removeAttr('disabled');
+            } else {
+                jQuery(newCardOption).iCheck('check');
+                existingCardContainer.hide();
+                existingCardInfo.hide().find('input').attr('disabled', 'disabled');
+            }
+
+            if (!creditCardInputFields.is(":visible")) {
+                creditCardInputFields.slideDown();
+            }
+        } else {
+            creditCardInputFields.slideUp();
+        }
+    });
+
+    // make sure relevant payment methods are displayed for the pre-selected gateway
+    jQuery(".payment-methods:checked").trigger('ifChecked');
+
+    jQuery('.cc-input-container .paymethod-info').click(function() {
+        var payMethodId = $(this).data('paymethod-id');
+        var input = jQuery('input[name="ccinfo"][value=' + payMethodId + ']:not(:disabled)');
+
+        if (input.length > 0) {
+            input.iCheck('check');
+        }
+    });
+
+    jQuery("#inputDomainContact").on('change', function() {
+        var thisInput = jQuery(this);
+        if (this.value === "addingnew") {
+            thisInput.closest('div').addClass('pb-2');
+            jQuery("#domainRegistrantInputFields").parent('div').slideDown();
+        } else {
+            jQuery("#domainRegistrantInputFields").parent('div').slideUp(function () {
+                thisInput.closest('div').removeClass('pb-2');
+            });
+        }
+    });
+
+    if (typeof registerFormPasswordStrengthFeedback == 'function') {
+        jQuery("#inputNewPassword1").keyup(registerFormPasswordStrengthFeedback);
+    } else {
+        jQuery("#inputNewPassword1").keyup(function ()
+        {
+            passwordStrength = getPasswordStrength(jQuery(this).val());
+            if (passwordStrength >= 75) {
+                textLabel = langPasswordStrong;
+                cssClass = 'success';
+            } else
+                if (passwordStrength >= 30) {
+                    textLabel = langPasswordModerate;
+                    cssClass = 'warning';
+                } else {
+                    textLabel = langPasswordWeak;
+                    cssClass = 'danger';
+                }
+            jQuery("#passwordStrengthTextLabel").html(langPasswordStrength + ': ' + passwordStrength + '% ' + textLabel);
+            jQuery("#passwordStrengthMeterBar").css(
+                'width',
+                passwordStrength + '%'
+            ).attr('aria-valuenow', passwordStrength);
+            jQuery("#passwordStrengthMeterBar").removeClass(
+                'progress-bar-success progress-bar-warning progress-bar-danger').addClass(
+                'progress-bar-' + cssClass);
+        });
+    }
+
+    jQuery('#inputDomain').on('shown.bs.tooltip', function () {
+        setTimeout(function(input) {
+            input.tooltip('hide');
+        },
+            5000,
+            jQuery(this)
+        );
+    });
+
+    jQuery('#frmDomainChecker').submit(function (e) {
+        e.preventDefault();
+
+        var frmDomain = jQuery('#frmDomainChecker'),
+            inputDomain = jQuery('#inputDomain'),
+            suggestions = jQuery('#domainSuggestions'),
+            reCaptchaContainer = jQuery('#divDynamicRecaptcha'),
+            captcha = jQuery('#inputCaptcha'),
+            idnLanguage = jQuery('#idnLanguageSelector');
+
+        jQuery('.field-error-msg').hide();
+
+        if (idnLanguage.is(':visible')) {
+            idnLanguage.slideUp();
+            idnLanguage.find('select').val('');
+        }
+
+        domainLookupCallCount = 0;
+
+        // check a domain has been entered
+        if (!inputDomain.val()) {
+            inputDomain.tooltip('show');
+            inputDomain.focus();
+            return;
+        }
+
+        inputDomain.tooltip('hide');
+
+        if (jQuery('#captchaContainer').length) {
+            validate_captcha(frmDomain);
+            return;
+        }
+
+        reCaptchaContainer.tooltip('hide');
+        captcha.tooltip('hide');
+
+        // disable repeat submit and show loader
+        jQuery('#btnCheckAvailability').attr('disabled', 'disabled').addClass('disabled');
+        jQuery('.domain-lookup-result').hide();
+        jQuery('.domain-lookup-loader').show();
+
+        // reset elements
+        suggestions.find('div:not(.actions)').hide();
+        suggestions.find('.clone').remove();
+        jQuery('div.panel-footer.more-suggestions').hide()
+            .find('a').show().end()
+            .find('span.no-more').hide();
+        jQuery('.btn-add-to-cart').removeAttr('disabled')
+            .find('span').hide().end()
+            .find('span.to-add').show();
+
+        // fade in results
+        if (jQuery('#DomainSearchResults').not(":visible")) {
+            jQuery('.domain-pricing').fadeOut('fast', function() {
+                jQuery('#DomainSearchResults').fadeIn();
+            });
+
+        }
+
+        var lookup = WHMCS.http.jqClient.post(
+                WHMCS.utils.getRouteUrl('/domain/check'),
+                frmDomain.serialize() + '&type=domain',
+                'json'
+            ),
+            spotlight = WHMCS.http.jqClient.post(
+                WHMCS.utils.getRouteUrl('/domain/check'),
+                frmDomain.serialize() + '&type=spotlight',
+                'json'
+            ),
+            suggestion = WHMCS.http.jqClient.post(
+                WHMCS.utils.getRouteUrl('/domain/check'),
+                frmDomain.serialize() + '&type=suggestions',
+                'json'
+            );
+
+        // primary lookup handler
+        lookup.done(function (data) {
+            if (typeof data != 'object' || data.result.length == 0) {
+                jQuery('.domain-lookup-primary-loader').hide();
+                return;
+            }
+            jQuery.each(data.result, function(index, domain) {
+                var pricing = null,
+                    result = jQuery('#primaryLookupResult'),
+                    available = result.find('.domain-available'),
+                    availablePrice = result.find('.domain-price'),
+                    contactSupport = result.find('.domain-contact-support'),
+                    unavailable = result.find('.domain-unavailable'),
+                    invalid = result.find('.domain-invalid'),
+                    error = result.find('.domain-error');
+                jQuery('.domain-lookup-primary-loader').hide();
+                result.find('.btn-add-to-cart').removeClass('checkout');
+                result.show();
+                if (typeof domain !== 'string' && !domain.error && domain.isValidDomain) {
+                    pricing = domain.pricing;
+                    unavailable.hide();
+                    contactSupport.hide();
+                    invalid.hide();
+                    error.hide();
+                    if (domain.isAvailable && typeof pricing !== 'string') {
+                        if (domain.domainName !== domain.idnDomainName && idnLanguage.not(':visible')) {
+                            idnLanguage.slideDown();
+                        }
+                        if (domain.preferredTLDNotAvailable) {
+                            unavailable.show().find('strong').html(domain.originalUnavailableDomain);
+                        }
+                        available.show().find('strong').html(domain.domainName);
+                        availablePrice.show().find('span.price').html(pricing[Object.keys(pricing)[0]].register).end()
+                            .find('button').attr('data-domain', domain.domainName);
+                    } else {
+                        available.hide();
+                        availablePrice.hide();
+                        contactSupport.hide();
+                        unavailable.show().find('strong').html(domain.domainName);
+                        if (typeof pricing === 'string' && pricing == 'ContactUs') {
+                            contactSupport.show();
+                        }
+                    }
+                } else {
+                    available.hide();
+                    availablePrice.hide();
+                    unavailable.hide();
+                    contactSupport.hide();
+                    invalid.hide();
+                    error.hide();
+                    var done = false,
+                        reg = /<br\s*\/>/,
+                        errors = [];
+                    if (!domain.isValidDomain && domain.domainErrorMessage) {
+                        invalid.text(domain.domainErrorMessage);
+                    } else if (domain.error || index === 'error') {
+                        if (typeof domain === 'string') {
+                            error.text(domain);
+                        } else if (!domain.error.match(reg)) {
+                            error.text(domain.error);
+                        } else {
+                            error.text('');
+                            errors = domain.error.split(reg);
+                            for(var i=0; i < errors.length; i++) {
+                                var errorMsg = errors[i];
+                                if (errorMsg.length) {
+                                    if (error.text()) {
+                                        // only add line break if there is
+                                        // multiple lines of text
+                                        error.append('<br />');
+                                    }
+                                    error.append(jQuery('<span></span>').text(errorMsg));
+                                }
+                            }
+                        }
+                        error.show();
+                        done = true;
+                    }
+                    if (!done) {
+                        invalid.show();
+                    }
+                }
+
+            });
+        }).always(function() {
+            hasDomainLookupEnded();
+        });
+
+        // spotlight lookup handler
+        spotlight.done(function(data) {
+            if (typeof data != 'object' || data.result.length == 0 || data.result.error) {
+                jQuery('.domain-lookup-spotlight-loader').hide();
+                return;
+            }
+            jQuery.each(data.result, function(index, domain) {
+                var tld = domain.tldNoDots,
+                    pricing = domain.pricing,
+                    result = jQuery('#spotlight' + tld + ' .domain-lookup-result');
+                jQuery('.domain-lookup-spotlight-loader').hide();
+                result.find('button').hide();
+                if (domain.isValidDomain) {
+                    if (domain.isAvailable && typeof pricing !== 'string') {
+                        if (domain.domainName !== domain.idnDomainName && idnLanguage.not(':visible')) {
+                            idnLanguage.slideDown();
+                        }
+                        result.find('button.unavailable').hide().end()
+                            .find('button.invalid').hide().end()
+                            .find('span.available').html(pricing[Object.keys(pricing)[0]].register).show().end()
+                            .find('button').not('button.unavailable').not('button.invalid')
+                            .attr('data-domain', domain.domainName)
+                            .show();
+
+                        result.find('button.domain-contact-support').hide();
+                    } else {
+                        if (typeof pricing === 'string') {
+                            if (pricing == '') {
+                                result.find('button.unavailable').show();
+                            } else {
+                                result.find('button.domain-contact-support').show();
+                            }
+                            result.find('button.invalid').hide();
+                            result.find('span.available').hide();
+                        } else {
+                            result.find('button.invalid').hide().end()
+                                .find('button.unavailable').show().end()
+                                .find('span.available').hide();
+                        }
+                    }
+                } else {
+                    result.find('button.invalid:hidden').show().end()
+                        .find('span.available').hide().end()
+                        .find('button').not('button.invalid').hide();
+                }
+                result.show();
+            });
+        }).always(function() {
+            hasDomainLookupEnded();
+        });
+
+        // suggestions lookup handler
+        suggestion.done(function (data) {
+            if (typeof data != 'object' || data.result.length == 0 || data.result.error) {
+                jQuery('.suggested-domains').fadeOut('fast', function() {
+                    jQuery(this).hide();
+                });
+                return;
+            } else {
+                jQuery('.suggested-domains').show();
+            }
+            var suggestionCount = 1;
+            jQuery.each(data.result, function(index, domain) {
+                var tld = domain.tld,
+                    pricing = domain.pricing;
+                suggestions.find('div:first').clone(true, true).appendTo(suggestions);
+                var newSuggestion = suggestions.find('div.domain-suggestion').last();
+                newSuggestion.addClass('clone')
+                    .find('span.domain').html(domain.sld).end()
+                    .find('span.extension').html('.' + tld);
+
+                if (typeof pricing === 'string') {
+                    newSuggestion.find('button.btn-add-to-cart').remove();
+                    if (pricing != '') {
+                        newSuggestion.find('button.domain-contact-support').show().end()
+                            .find('span.price').hide();
+                    } else {
+                        newSuggestion.remove();
+                    }
+                } else {
+                    if (domain.domainName !== domain.idnDomainName && idnLanguage.not(':visible')) {
+                        idnLanguage.slideDown();
+                    }
+                    newSuggestion.find('button.btn-add-to-cart').attr('data-domain', domain.domainName).end()
+                        .find('span.price').html(pricing[Object.keys(pricing)[0]].register);
+                }
+                if (suggestionCount <= 10) {
+                    newSuggestion.show();
+                }
+                suggestionCount++;
+                if (domain.group) {
+                    newSuggestion.find('span.promo')
+                        .addClass(domain.group)
+                        .show();
+                    newSuggestion.find('span.sales-group-' + domain.group)
+                        .show();
+                }
+                furtherSuggestions = suggestions.find('div.domain-suggestion.clone:hidden').length;
+                if (furtherSuggestions > 0) {
+                    jQuery('div.more-suggestions').show();
+                }
+            });
+            jQuery('.domain-lookup-suggestions-loader').hide();
+            jQuery('#domainSuggestions').show();
+        }).always(function() {
+            hasDomainLookupEnded();
+        });
+    });
+
+    jQuery('.btn-add-to-cart').on('click', function() {
+        if (jQuery(this).hasClass('checkout')) {
+            window.location = 'cart.php?a=confdomains';
+            return;
+        }
+        var domain = jQuery(this).attr('data-domain'),
+            buttons = jQuery('button[data-domain="' + domain + '"]'),
+            whois = jQuery(this).attr('data-whois'),
+            isProductDomain = jQuery(this).hasClass('product-domain'),
+            btnDomainContinue = jQuery('#btnDomainContinue'),
+            resultDomain = jQuery('#resultDomain'),
+            resultDomainPricing = jQuery('#resultDomainPricingTerm'),
+            idnLanguage = jQuery('#idnLanguageSelector'),
+            idnLanguageInput = idnLanguage.find('select');
+
+        if (idnLanguage.is(':visible') && !idnLanguageInput.val()) {
+            idnLanguageInput.showInputError();
+            return;
+        }
+        buttons.find('span.to-add').hide();
+        buttons.find('span.loading').show();
+
+        var sideOrder =
+            ((jQuery(this).parents('.spotlight-tlds').length > 0)
+            ||
+            (jQuery(this).parents('.suggested-domains').length > 0)) ? 1 : 0;
+
+        var addToCart = WHMCS.http.jqClient.post(
+            window.location.pathname,
+            {
+                a: 'addToCart',
+                domain: domain,
+                token: csrfToken,
+                whois: whois,
+                sideorder: sideOrder,
+                idnlanguage: idnLanguageInput.val()
+            },
+            'json'
+        ).done(function (data) {
+            buttons.find('span.loading').hide();
+            if (data.result === 'added') {
+                buttons.find('span.added').show();
+                if (!isProductDomain) {
+                    buttons.removeAttr('disabled').addClass('checkout');
+                }
+                if (resultDomain.length && !resultDomain.val()) {
+                    resultDomain.val(domain);
+                    resultDomainPricing.val(data.period).attr('name', 'domainsregperiod[' + domain +']');
+                    if (btnDomainContinue.length > 0 && btnDomainContinue.is(':disabled')) {
+                        btnDomainContinue.removeAttr('disabled');
+                    }
+                }
+                jQuery('#cartItemCount').html(data.cartCount);
+            } else {
+                buttons.find('span.available.price').hide();
+                buttons.find('span.unavailable').show();
+                buttons.attr('disabled', 'disabled');
+            }
+        });
+    });
+
+    jQuery('#frmDomainTransfer').submit(function (e) {
+        e.preventDefault();
+
+        var frmDomain = jQuery('#frmDomainTransfer'),
+        transferButton = jQuery('#btnTransferDomain'),
+            inputDomain = jQuery('#inputTransferDomain'),
+            authField = jQuery('#inputAuthCode'),
+            domain = inputDomain.val(),
+            authCode = authField.val(),
+            redirect = false,
+            reCaptchaContainer = jQuery('#divDynamicRecaptcha'),
+            captcha = jQuery('#inputCaptcha');
+
+        if (!domain) {
+            inputDomain.tooltip('show');
+            inputDomain.focus();
+            return false;
+        }
+
+        inputDomain.tooltip('hide');
+
+        if (jQuery('#captchaContainer').length) {
+            validate_captcha(frmDomain);
+            return;
+        }
+
+        reCaptchaContainer.tooltip('hide');
+        captcha.tooltip('hide');
+
+        transferButton.attr('disabled', 'disabled').addClass('disabled')
+            .find('span').show().end()
+            .find('.loader').show();
+
+        WHMCS.http.jqClient.post(
+            frmDomain.attr('action'),
+            frmDomain.serialize(),
+            null,
+            'json'
+        ).done(function (data) {
+            if (typeof data != 'object') {
+                transferButton.find('span').hide().end()
+                    .find('#addToCart').show().end()
+                    .removeAttr('disabled').removeClass('disabled');
+                return false;
+            }
+            var result = data.result;
+
+            if (result == 'added') {
+                window.location = 'cart.php?a=confdomains';
+                redirect = true;
+            } else {
+                if (result.isRegistered == true) {
+                    if (result.epp == true && !authCode) {
+                        authField.tooltip('show');
+                        authField.focus();
+                    }
+                } else {
+                    jQuery('#transferUnavailable').html(result.unavailable)
+                        .fadeIn('fast', function() {
+                            setTimeout(function(input) {
+                                    input.fadeOut('fast');
+                                },
+                                3000,
+                                jQuery(this)
+                            );
+                        }
+                    );
+                }
+            }
+        }).always(function () {
+            if (redirect == false) {
+                transferButton.find('span').hide().end()
+                    .find('#addToCart').show().end()
+                    .removeAttr('disabled').removeClass('disabled');
+            }
+        });
+
+    });
+
+    jQuery("#btnEmptyCart").click(function() {
+        jQuery('#modalEmptyCart').modal('show');
+    });
+
+    jQuery("#cardType li a").click(function (e) {
+        e.preventDefault();
+        jQuery("#selectedCardType").html(jQuery(this).html());
+        jQuery("#cctype").val(jQuery('span.type', this).html().trim());
+    });
+
+    jQuery(document).on('click', '.domain-contact-support', function(e) {
+        e.preventDefault();
+
+        var child = window.open();
+        child.opener = null;
+        child.location = 'submitticket.php';
+    });
+
+    jQuery('#frmConfigureProduct input:visible, #frmConfigureProduct select:visible').first().focus();
+    jQuery('#frmProductDomain input[type=text]:visible').first().focus();
+    jQuery('#frmDomainChecker input[type=text]:visible').first().focus();
+    jQuery('#frmDomainTransfer input[type=text]:visible').first().focus();
+
+    jQuery('.checkout .mc-promo .btn-add').click(function(e) {
+        var self = jQuery(this),
+            productKey = self.data('product-key'),
+            upSellBox = jQuery('#promo_' + productKey);
+
+        self.attr('disabled', 'disabled')
+            .find('span.arrow i').removeClass('fa-chevron-right').addClass('fa-spinner fa-spin');
+        WHMCS.http.jqClient.post(
+            window.location.pathname,
+            {
+                'a': 'addUpSell',
+                'product_key': productKey,
+                'checkoutModal': true,
+                'token': csrfToken
+            },
+            function (data) {
+                if (typeof data.modal !== 'undefined') {
+                    openModal(
+                        data.modal,
+                        '',
+                        data.modalTitle,
+                        '',
+                        '',
+                        data.modalSubmit,
+                        data.modelSubmitId
+                    );
+                    return;
+                }
+                if (data.done) {
+                    jQuery('#totalCartPrice').text(data.newTotal);
+                    upSellBox.fadeOut();
+                }
+            },
+            'json'
+        );
+    });
+
+    jQuery('.viewcart .mc-promo .btn-add').click(function(e) {
+        var self = jQuery(this);
+        self.attr('disabled', 'disabled')
+            .find('span.arrow i').removeClass('fa-chevron-right').addClass('fa-spinner fa-spin');
+        WHMCS.http.jqClient.post(
+            window.location.pathname,
+            {
+                'a': 'addUpSell',
+                'product_key': self.data('product-key'),
+                'token': csrfToken
+            },
+            function (data) {
+                if (typeof data.modal !== 'undefined') {
+                    openModal(
+                        data.modal,
+                        '',
+                        data.modalTitle,
+                        '',
+                        '',
+                        data.modalSubmit,
+                        data.modelSubmitId
+                    );
+                    return;
+                }
+                window.location.reload(true);
+            },
+            'json'
+        );
+    });
+
+    jQuery(document).on('click', '#btnAddUpSellCheckout', function(e) {
+        var upsellModalForm = jQuery('#upsellModalForm');
+        WHMCS.http.jqClient.post(
+            'cart.php',
+            upsellModalForm.serialize(),
+            function (data) {
+                if (data.done){
+                    jQuery('#totalCartPrice').text(data.newTotal);
+                }
+            },
+            'json'
+        );
+        return false;
+    });
+
+    jQuery(document).on('click', '#btnAddUpSell', function(e) {
+        needRefresh = true;
+    });
+
+    var useFullCreditOnCheckout = jQuery('#iCheck-useFullCreditOnCheckout'),
+        skipCreditOnCheckout = jQuery('#iCheck-skipCreditOnCheckout');
+
+    useFullCreditOnCheckout.on('ifChecked', function() {
+        var radio = jQuery('#useFullCreditOnCheckout'),
+            selectedPaymentMethod = jQuery('input[name="paymentmethod"]:checked'),
+            isCcSelected = selectedPaymentMethod.hasClass('is-credit-card'),
+            firstNonCcGateway = jQuery('input[name="paymentmethod"]')
+            .not(jQuery('input.is-credit-card[name="paymentmethod"]'))
+            .first(),
+            container = jQuery('#paymentGatewaysContainer'),
+            ccInputFields = jQuery('#creditCardInputFields');
+        if (radio.prop('checked')) {
+            if (isCcSelected && firstNonCcGateway.length !== 0) {
+                firstNonCcGateway.iCheck('check');
+                ccInputFields.slideUp();
+                container.slideUp();
+            } else if (isCcSelected && !container.is(":visible")) {
+                ccInputFields.slideDown();
+                container.slideDown();
+            }
+        }
+    });
+
+    skipCreditOnCheckout.on('ifChecked', function() {
+        var selectedPaymentMethod = jQuery('input[name="paymentmethod"]:checked'),
+            isCcSelected = selectedPaymentMethod.hasClass('is-credit-card'),
+            container = jQuery('#paymentGatewaysContainer');
+        if (!container.is(":visible")) {
+            container.slideDown();
+            if (isCcSelected) {
+                jQuery('#creditCardInputFields').slideDown();
+            }
+        }
+    });
+
+    if (jQuery('#applyCreditContainer').data('apply-credit') === 1 && useFullCreditOnCheckout.length) {
+        skipCreditOnCheckout.iCheck('check');
+        useFullCreditOnCheckout.iCheck('check');
+    }
+
+    jQuery('#domainRenewals').find('span.added').hide().end().find('span.to-add').find('i').hide();
+    jQuery('.btn-add-renewal-to-cart').on('click', function() {
+        var self = jQuery(this),
+            domainId = self.data('domain-id'),
+            period = jQuery('#renewalPricing' + domainId).val();
+
+        if (self.hasClass('checkout')) {
+            window.location = 'cart.php?a=view';
+            return;
+        }
+
+        self.attr('disabled', 'disabled').each(function() {
+            jQuery(this).find('i').fadeIn('fast').end().css('width', jQuery(this).outerWidth());
+        });
+
+        WHMCS.http.jqClient.post(
+            WHMCS.utils.getRouteUrl('/cart/domain/renew/add'),
+            {
+                domainId: domainId,
+                period: period,
+                token: csrfToken
+            },
+            null,
+            'json'
+        ).done(function (data) {
+            self.find('span.to-add').hide();
+            if (data.result === 'added') {
+                self.find('span.added').show().end().find('i').fadeOut('fast').css('width', self.outerWidth());
+            }
+            recalculateRenewalTotals();
+        });
+    });
+    jQuery(document).on('submit', '#removeRenewalForm', function(e) {
+        e.preventDefault();
+
+        WHMCS.http.jqClient.post(
+            whmcsBaseUrl + '/cart.php',
+            jQuery(this).serialize() + '&ajax=1'
+        ).done(function(data) {
+            var domainId = data.i,
+                button = jQuery('#renewDomain' + domainId);
+
+            button.attr('disabled', 'disabled').each(function() {
+                jQuery(this).find('span.added').hide().end()
+                    .removeClass('checkout').find('span.to-add').show().end().removeAttr('disabled');
+                jQuery(this).css('width', jQuery(this).outerWidth());
+            });
+
+        }).always(function () {
+            jQuery('#modalRemoveItem').modal('hide');
+            recalculateRenewalTotals();
+        });
+    });
+
+    jQuery('.select-renewal-pricing').on('change', function() {
+        var self = jQuery(this),
+            domainId = self.data('domain-id'),
+            button = jQuery('#renewDomain' + domainId);
+
+        button.attr('disabled', 'disabled').each(function() {
+            jQuery(this).css('width', jQuery(this).outerWidth());
+            jQuery(this).find('span.added').hide().end()
+                .removeClass('checkout').find('span.to-add').show().end().removeAttr('disabled');
+        });
+    });
+
+    jQuery('#domainRenewalFilter').on('keyup', function() {
+        var inputText = jQuery(this).val().toLowerCase();
+        jQuery('#domainRenewals').find('div.domain-renewal').filter(function() {
+            jQuery(this).toggle(jQuery(this).data('domain').toLowerCase().indexOf(inputText) > -1);
+        });
+    });
+
+    checkoutForm = jQuery('#frmCheckout');
+    if (checkoutForm.length) {
+        checkoutForm.on('submit', validateCheckoutCreditCardInput);
+    }
+
+    if (existingCardContainer.is(':visible')) {
+        newCardInfo.slideUp();
+    }
+});
+//checkoutForm
+function validateCheckoutCreditCardInput(e)
+{
+    var newOrExisting = jQuery('input[name="ccinfo"]:checked').val(),
+        submitButton = checkoutForm.find('*[type="submit"]'),
+        cardType = null,
+        submit = true,
+        selectedPaymentMethod = checkoutForm.find('input[name="paymentmethod"]:checked'),
+        isCreditCardGateway = selectedPaymentMethod.hasClass('is-credit-card'),
+        isRemoteCard = selectedPaymentMethod.data('payment-type') === 'RemoteCreditCard',
+        cardNumber = jQuery('#inputCardNumber');
+
+    checkoutForm.find('.form-group').removeClass('has-error');
+    checkoutForm.find('.field-error-msg').hide();
+
+    if (isCreditCardGateway && !isRemoteCard) {
+        var cvvField = checkoutForm.find('#inputCardCVV2');
+
+        if (newOrExisting === 'new') {
+            cvvField = checkoutForm.find('#inputCardCVV');
+
+            cardType = jQuery.payment.cardType(checkoutForm.find('#inputCardNumber').val());
+            if (!jQuery.payment.validateCardNumber(checkoutForm.find('#inputCardNumber').val()) || cardNumber.hasClass('unsupported')) {
+                var error = cardNumber.data('message-invalid');
+                if (cardNumber.hasClass('unsupported')) {
+                    error = cardNumber.data('message-unsupported');
+                }
+                checkoutForm.find('#inputCardNumber').setInputError(error).showInputError();
+                submit = false;
+            }
+            if (
+                !jQuery.payment.validateCardExpiry(
+                    checkoutForm.find('#inputCardExpiry').payment('cardExpiryVal')
+                )
+            ) {
+                checkoutForm.find('#inputCardExpiry').showInputError();
+                submit = false;
+            }
+        }
+        if (!jQuery.payment.validateCardCVC(cvvField.val(), cardType)) {
+            cvvField.showInputError();
+            submit = false;
+        }
+        if (!submit) {
+            submitButton.prop('disabled', false)
+                .removeClass('disabled')
+                .find('i')
+                .removeAttr('class')
+                .addClass('fas fa-arrow-circle-right');
+            e.preventDefault();
+        }
+    }
+}
+
+function hasDomainLookupEnded() {
+    domainLookupCallCount++;
+    if (domainLookupCallCount == 3) {
+        jQuery('#btnCheckAvailability').removeAttr('disabled').removeClass('disabled');
+    }
+}
+
+function hasProductDomainLookupEnded(total, button) {
+    domainLookupCallCount++;
+    if (domainLookupCallCount == total) {
+        button.removeAttr('disabled').removeClass('disabled');
+        jQuery('input[name="domainoption"]').iCheck('enable');
+    }
+}
+
+function domainGotoNextStep() {
+    jQuery("#domainLoadingSpinner").show();
+    jQuery("#frmProductDomainSelections").submit();
+}
+
+function removeItem(type, num) {
+    jQuery('#inputRemoveItemType').val(type);
+    jQuery('#inputRemoveItemRef').val(num);
+    jQuery('#modalRemoveItem').modal('show');
+}
+
+function updateConfigurableOptions(i, billingCycle) {
+
+    WHMCS.http.jqClient.post("cart.php", 'a=cyclechange&ajax=1&i='+i+'&billingcycle='+billingCycle,
+        function(data) {
+            jQuery("#productConfigurableOptions").html(jQuery(data).find('#productConfigurableOptions').html());
+            jQuery('input').iCheck({
+                inheritID: true,
+                checkboxClass: 'icheckbox_square-blue',
+                radioClass: 'iradio_square-blue',
+                increaseArea: '20%'
+            });
+        }
+    );
+    recalctotals();
+
+}
+
+function recalctotals() {
+    if (!jQuery("#orderSummaryLoader").is(":visible")) {
+        jQuery("#orderSummaryLoader").fadeIn('fast');
+    }
+
+    var thisRequestId = Math.floor((Math.random() * 1000000) + 1);
+    window.lastSliderUpdateRequestId = thisRequestId;
+
+    var post = WHMCS.http.jqClient.post("cart.php", 'ajax=1&a=confproduct&calctotal=true&'+jQuery("#frmConfigureProduct").serialize());
+    post.done(
+        function(data) {
+            if (thisRequestId == window.lastSliderUpdateRequestId) {
+                jQuery("#producttotal").html(data);
+            }
+        }
+    );
+    post.always(
+        function() {
+            jQuery("#orderSummaryLoader").delay(500).fadeOut('slow');
+        }
+    );
+}
+
+function recalculateRenewalTotals() {
+    if (!jQuery("#orderSummaryLoader").is(":visible")) {
+        jQuery("#orderSummaryLoader").fadeIn('fast');
+    }
+
+    var thisRequestId = Math.floor((Math.random() * 1000000) + 1);
+    window.lastSliderUpdateRequestId = thisRequestId;
+
+    WHMCS.http.jqClient.get(
+        WHMCS.utils.getRouteUrl('/cart/domain/renew/calculate')
+    ).done(function(data) {
+        if (thisRequestId === window.lastSliderUpdateRequestId) {
+            jQuery("#producttotal").html(data.body);
+        }
+    }).always(
+        function() {
+            jQuery("#orderSummaryLoader").delay(500).fadeOut('slow');
+        }
+    );
+}
+
+function selectDomainPricing(domainName, price, period, yearsString, suggestionNumber) {
+    jQuery("#domainSuggestion" + suggestionNumber).iCheck('check');
+    jQuery("[name='domainsregperiod[" + domainName + "]']").val(period);
+    jQuery("[name='" + domainName + "-selected-price']").html('<b class="glyphicon glyphicon-shopping-cart"></b>'
+        + ' ' + period + ' ' + yearsString + ' @ ' + price);
+}
+
+function selectDomainPeriodInCart(domainName, price, period, yearsString) {
+    var loader = jQuery("#orderSummaryLoader");
+    if (loader.not(':visible')) {
+        loader.fadeIn('fast');
+    }
+    jQuery("[name='" + domainName + "Pricing']").html(period + ' ' + yearsString + ' <span class="caret"></span>');
+    jQuery("[name='" + domainName + "Price']").html(price);
+    var update = WHMCS.http.jqClient.post(
+        window.location.pathname,
+        {
+            domain: domainName,
+            period: period,
+            a: 'updateDomainPeriod',
+            token: csrfToken
+        }
+    );
+    update.done(
+        function(data) {
+            if (data.forceReload) {
+                window.location.reload();
+                return;
+            }
+            data.domains.forEach(function(domain) {
+                jQuery("[name='" + domain.domain + "Price']").parent('div').find('.renewal-price').html(
+                    domain.prefixedRenewPrice + domain.shortRenewalYearsLanguage
+                );
+            });
+            jQuery('#subtotal').html(data.subtotal);
+            if (data.promotype) {
+                jQuery('#discount').html(data.discount);
+            }
+            if (data.taxrate) {
+                jQuery('#taxTotal1').html(data.taxtotal);
+            }
+            if (data.taxrate2) {
+                jQuery('#taxTotal2').html(data.taxtotal2);
+            }
+
+            var recurringSpan = jQuery('#recurring');
+
+            recurringSpan.find('span:visible').not('span.cost').fadeOut('fast');
+
+            if (data.totalrecurringannually) {
+                jQuery('#recurringAnnually').fadeIn('fast').find('.cost').html(data.totalrecurringannually);
+            }
+
+            if (data.totalrecurringbiennially) {
+                jQuery('#recurringBiennially').fadeIn('fast').find('.cost').html(data.totalrecurringbiennially);
+            }
+
+            if (data.totalrecurringmonthly) {
+                jQuery('#recurringMonthly').fadeIn('fast').find('.cost').html(data.totalrecurringmonthly);
+            }
+
+            if (data.totalrecurringquarterly) {
+                jQuery('#recurringQuarterly').fadeIn('fast').find('.cost').html(data.totalrecurringquarterly);
+            }
+
+            if (data.totalrecurringsemiannually) {
+                jQuery('#recurringSemiAnnually').fadeIn('fast').find('.cost').html(data.totalrecurringsemiannually);
+            }
+
+            if (data.totalrecurringtriennially) {
+                jQuery('#recurringTriennially').fadeIn('fast').find('.cost').html(data.totalrecurringtriennially);
+            }
+
+            jQuery('#totalDueToday').html(data.total);
+        }
+    );
+    update.always(
+        function() {
+            loader.delay(500).fadeOut('slow');
+        }
+    );
+}
+
+function loadMoreSuggestions()
+{
+    var suggestions = jQuery('#domainSuggestions'),
+        suggestionCount;
+
+    for (suggestionCount = 1; suggestionCount <= 10; suggestionCount++) {
+        if (furtherSuggestions > 0) {
+            suggestions.find('div.domain-suggestion.clone:hidden:first').slideDown();
+            furtherSuggestions = suggestions.find('div.domain-suggestion.clone:hidden').length;
+        } else {
+            jQuery('div.more-suggestions').find('a').addClass('hidden').end().find('span.no-more').removeClass('hidden');
+            return;
+        }
+    }
+}
+
+function validate_captcha(form)
+{
+    var reCaptcha = jQuery('#g-recaptcha-response'),
+        reCaptchaContainer = jQuery('#divDynamicRecaptcha'),
+        captcha = jQuery('#inputCaptcha');
+
+    if (reCaptcha.length && !reCaptcha.val()) {
+        reCaptchaContainer.tooltip('show');
+        return false;
+    }
+
+    if (captcha.length && !captcha.val()) {
+        captcha.tooltip('show');
+        return false;
+    }
+
+    var validate = WHMCS.http.jqClient.post(
+        form.attr('action'),
+        form.serialize() + '&a=validateCaptcha',
+        null,
+        'json'
+    );
+
+    validate.done(function(data) {
+        if (data.error) {
+            jQuery('#inputCaptcha').attr('data-original-title', data.error).tooltip('show');
+            if (captcha.length) {
+                jQuery('#inputCaptchaImage').replaceWith(
+                    '<img id="inputCaptchaImage" src="' + whmcsBaseUrl + '/includes/verifyimage.php?nocache=' + new Date().getTime() + '" align="middle" />'
+                );
+            }
+        } else {
+            jQuery('#captchaContainer').remove();
+            form.trigger('submit');
+        }
+    });
+}

+ 1 - 0
js/domainrenewal.min.js

@@ -0,0 +1 @@
+jQuery(document).ready(function(){function e(){jQuery.post("","customaction=renewaldomain&checkcredit=0&"+jQuery("#coniguration_form").serialize(),function(e){""!=e&&(jQuery("#ordersummary, #footer_order_summary").addClass("cartsummary_loader"),jQuery.post("cart.php","a=view&ajax=1&checkcredit=0&onepageorder=1",function(e){jQuery("#ordersummary, #footer_order_summary").removeClass("cartsummary_loader"),jQuery("#ordersummary, #footer_order_summary").html(e),$("#applyCreditContainer").length>0&&jQuery.post("cart.php","a=checkout&ajax=1&checkcredit=1&onepageorder=1",function(e){jQuery("#applyCreditContainer").html(e),jQuery(".cccheckdb").iCheck({inheritID:!0,checkboxClass:"icheckbox_square-blue",radioClass:"iradio_square-blue",increaseArea:"20%"}),jQuery(".cccheckdb").on("ifChecked",function(e){"1"===$(this).val()&&"useFullCreditOnCheckout"===$(this).attr("id")?$("#paymentGatewaysContainer").hide():$("#paymentGatewaysContainer").show()})})}))})}jQuery("#ws-ajax-order-form").html('<div class="order-from-loader-img"><i class="fad fa-circle-notch fa-spin fa-2x"></i></div>'),jQuery.post("cart.php","a=checkout&ajax=1&checkcredit=0&onepageorder=1",function(e){jQuery("#ws-ajax-order-form").html(e),""!=jQuery("#hiddenpromo").val()&&(jQuery("#promocode").val(jQuery("#hiddenpromo").val()),jQuery(".applypromo").trigger("click"))}),jQuery("#coniguration_form").on("change",".domainrenewald",function(r){e()}),jQuery("#coniguration_form").on("change","select",function(r){e()})});

+ 2 - 0
js/index.php

@@ -0,0 +1,2 @@
+<?php
+header("Location: ../../../index.php");

Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
js/intlTelInput.min.js


Diferenças do arquivo suprimidas por serem muito extensas
+ 1 - 0
js/ion.rangeSlider.min.js


Diferenças do arquivo suprimidas por serem muito extensas
+ 7 - 0
js/jquery.sticky-sidebar.min.js


Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
js/main.min.js


+ 3816 - 0
js/scripts.js

@@ -0,0 +1,3816 @@
+/*!
+ * iCheck v1.0.2, http://git.io/arlzeA
+ * ===================================
+ * Powerful jQuery and Zepto plugin for checkboxes and radio buttons customization
+ *
+ * (c) 2013 Damir Sultanov, http://fronteed.com
+ * MIT Licensed
+ */
+
+(function($) {
+
+  // Cached vars
+  var _iCheck = 'iCheck',
+    _iCheckHelper = _iCheck + '-helper',
+    _checkbox = 'checkbox',
+    _radio = 'radio',
+    _checked = 'checked',
+    _unchecked = 'un' + _checked,
+    _disabled = 'disabled',
+    _determinate = 'determinate',
+    _indeterminate = 'in' + _determinate,
+    _update = 'update',
+    _type = 'type',
+    _click = 'click',
+    _touch = 'touchbegin.i touchend.i',
+    _add = 'addClass',
+    _remove = 'removeClass',
+    _callback = 'trigger',
+    _label = 'label',
+    _cursor = 'cursor',
+    _mobile = /ipad|iphone|ipod|android|blackberry|windows phone|opera mini|silk/i.test(navigator.userAgent);
+
+  // Plugin init
+  $.fn[_iCheck] = function(options, fire) {
+
+    // Walker
+    var handle = 'input[type="' + _checkbox + '"], input[type="' + _radio + '"]',
+      stack = $(),
+      walker = function(object) {
+        object.each(function() {
+          var self = $(this);
+
+          if (self.is(handle)) {
+            stack = stack.add(self);
+          } else {
+            stack = stack.add(self.find(handle));
+          }
+        });
+      };
+
+    // Check if we should operate with some method
+    if (/^(check|uncheck|toggle|indeterminate|determinate|disable|enable|update|destroy)$/i.test(options)) {
+
+      // Normalize method's name
+      options = options.toLowerCase();
+
+      // Find checkboxes and radio buttons
+      walker(this);
+
+      return stack.each(function() {
+        var self = $(this);
+
+        if (options == 'destroy') {
+          tidy(self, 'ifDestroyed');
+        } else {
+          operate(self, true, options);
+        }
+
+        // Fire method's callback
+        if ($.isFunction(fire)) {
+          fire();
+        }
+      });
+
+    // Customization
+    } else if (typeof options == 'object' || !options) {
+
+      // Check if any options were passed
+      var settings = $.extend({
+          checkedClass: _checked,
+          disabledClass: _disabled,
+          indeterminateClass: _indeterminate,
+          labelHover: true
+        }, options),
+
+        selector = settings.handle,
+        hoverClass = settings.hoverClass || 'hover',
+        focusClass = settings.focusClass || 'focus',
+        activeClass = settings.activeClass || 'active',
+        labelHover = !!settings.labelHover,
+        labelHoverClass = settings.labelHoverClass || 'hover',
+
+        // Setup clickable area
+        area = ('' + settings.increaseArea).replace('%', '') | 0;
+
+      // Selector limit
+      if (selector == _checkbox || selector == _radio) {
+        handle = 'input[type="' + selector + '"]';
+      }
+
+      // Clickable area limit
+      if (area < -50) {
+        area = -50;
+      }
+
+      // Walk around the selector
+      walker(this);
+
+      return stack.each(function() {
+        var self = $(this);
+
+        // If already customized
+        tidy(self);
+
+        var node = this,
+          id = node.id,
+
+          // Layer styles
+          offset = -area + '%',
+          size = 100 + (area * 2) + '%',
+          layer = {
+            position: 'absolute',
+            top: offset,
+            left: offset,
+            display: 'block',
+            width: size,
+            height: size,
+            margin: 0,
+            padding: 0,
+            background: '#fff',
+            border: 0,
+            opacity: 0
+          },
+
+          // Choose how to hide input
+          hide = _mobile ? {
+            position: 'absolute',
+            visibility: 'hidden'
+          } : area ? layer : {
+            position: 'absolute',
+            opacity: 0
+          },
+
+          // Get proper class
+          className = node[_type] == _checkbox ? settings.checkboxClass || 'i' + _checkbox : settings.radioClass || 'i' + _radio,
+
+          // Find assigned labels
+          label = $(_label + '[for="' + id + '"]').add(self.closest(_label)),
+
+          // Check ARIA option
+          aria = !!settings.aria,
+
+          // Set ARIA placeholder
+          ariaID = _iCheck + '-' + Math.random().toString(36).substr(2,6),
+
+          // Parent & helper
+          parent = '<div class="' + className + '" ' + (aria ? 'role="' + node[_type] + '" ' : ''),
+          helper;
+
+        // Set ARIA "labelledby"
+        if (aria) {
+          label.each(function() {
+            parent += 'aria-labelledby="';
+
+            if (this.id) {
+              parent += this.id;
+            } else {
+              this.id = ariaID;
+              parent += ariaID;
+            }
+
+            parent += '"';
+          });
+        }
+
+        // Wrap input
+        parent = self.wrap(parent + '/>')[_callback]('ifCreated').parent().append(settings.insert);
+
+        // Layer addition
+        helper = $('<ins class="' + _iCheckHelper + '"/>').css(layer).appendTo(parent);
+
+        // Finalize customization
+        self.data(_iCheck, {o: settings, s: self.attr('style')}).css(hide);
+        !!settings.inheritClass && parent[_add](node.className || '');
+        !!settings.inheritID && id && parent.attr('id', _iCheck + '-' + id);
+        parent.css('position') == 'static' && parent.css('position', 'relative');
+        operate(self, true, _update);
+
+        // Label events
+        if (label.length) {
+          label.on(_click + '.i mouseover.i mouseout.i ' + _touch, function(event) {
+            var type = event[_type],
+              item = $(this);
+
+            // Do nothing if input is disabled
+            if (!node[_disabled]) {
+
+              // Click
+              if (type == _click) {
+                if ($(event.target).is('a')) {
+                  return;
+                }
+                operate(self, false, true);
+
+              // Hover state
+              } else if (labelHover) {
+
+                // mouseout|touchend
+                if (/ut|nd/.test(type)) {
+                  parent[_remove](hoverClass);
+                  item[_remove](labelHoverClass);
+                } else {
+                  parent[_add](hoverClass);
+                  item[_add](labelHoverClass);
+                }
+              }
+
+              if (_mobile) {
+                event.stopPropagation();
+              } else {
+                return false;
+              }
+            }
+          });
+        }
+
+        // Input events
+        self.on(_click + '.i focus.i blur.i keyup.i keydown.i keypress.i', function(event) {
+          var type = event[_type],
+            key = event.keyCode;
+
+          // Click
+          if (type == _click) {
+            return false;
+
+          // Keydown
+          } else if (type == 'keydown' && key == 32) {
+            if (!(node[_type] == _radio && node[_checked])) {
+              if (node[_checked]) {
+                off(self, _checked);
+              } else {
+                on(self, _checked);
+              }
+            }
+
+            return false;
+
+          // Keyup
+          } else if (type == 'keyup' && node[_type] == _radio) {
+            !node[_checked] && on(self, _checked);
+
+          // Focus/blur
+          } else if (/us|ur/.test(type)) {
+            parent[type == 'blur' ? _remove : _add](focusClass);
+          }
+        });
+
+        // Helper events
+        helper.on(_click + ' mousedown mouseup mouseover mouseout ' + _touch, function(event) {
+          var type = event[_type],
+
+            // mousedown|mouseup
+            toggle = /wn|up/.test(type) ? activeClass : hoverClass;
+
+          // Do nothing if input is disabled
+          if (!node[_disabled]) {
+
+            // Click
+            if (type == _click) {
+              operate(self, false, true);
+
+            // Active and hover states
+            } else {
+
+              // State is on
+              if (/wn|er|in/.test(type)) {
+
+                // mousedown|mouseover|touchbegin
+                parent[_add](toggle);
+
+              // State is off
+              } else {
+                parent[_remove](toggle + ' ' + activeClass);
+              }
+
+              // Label hover
+              if (label.length && labelHover && toggle == hoverClass) {
+
+                // mouseout|touchend
+                label[/ut|nd/.test(type) ? _remove : _add](labelHoverClass);
+              }
+            }
+
+            if (_mobile) {
+              event.stopPropagation();
+            } else {
+              return false;
+            }
+          }
+        });
+      });
+    } else {
+      return this;
+    }
+  };
+
+  // Do something with inputs
+  function operate(input, direct, method) {
+    var node = input[0],
+      state = /er/.test(method) ? _indeterminate : /bl/.test(method) ? _disabled : _checked,
+      active = method == _update ? {
+        checked: node[_checked],
+        disabled: node[_disabled],
+        indeterminate: input.attr(_indeterminate) == 'true' || input.attr(_determinate) == 'false'
+      } : node[state];
+
+    // Check, disable or indeterminate
+    if (/^(ch|di|in)/.test(method) && !active) {
+      on(input, state);
+
+    // Uncheck, enable or determinate
+    } else if (/^(un|en|de)/.test(method) && active) {
+      off(input, state);
+
+    // Update
+    } else if (method == _update) {
+
+      // Handle states
+      for (var each in active) {
+        if (active[each]) {
+          on(input, each, true);
+        } else {
+          off(input, each, true);
+        }
+      }
+
+    } else if (!direct || method == 'toggle') {
+
+      // Helper or label was clicked
+      if (!direct) {
+        input[_callback]('ifClicked');
+      }
+
+      // Toggle checked state
+      if (active) {
+        if (node[_type] !== _radio) {
+          off(input, state);
+        }
+      } else {
+        on(input, state);
+      }
+    }
+  }
+
+  // Add checked, disabled or indeterminate state
+  function on(input, state, keep) {
+    var node = input[0],
+      parent = input.parent(),
+      checked = state == _checked,
+      indeterminate = state == _indeterminate,
+      disabled = state == _disabled,
+      callback = indeterminate ? _determinate : checked ? _unchecked : 'enabled',
+      regular = option(input, callback + capitalize(node[_type])),
+      specific = option(input, state + capitalize(node[_type]));
+
+    // Prevent unnecessary actions
+    if (node[state] !== true) {
+
+      // Toggle assigned radio buttons
+      if (!keep && state == _checked && node[_type] == _radio && node.name) {
+        var form = input.closest('form'),
+          inputs = 'input[name="' + node.name + '"]';
+
+        inputs = form.length ? form.find(inputs) : $(inputs);
+
+        inputs.each(function() {
+          if (this !== node && $(this).data(_iCheck)) {
+            off($(this), state);
+          }
+        });
+      }
+
+      // Indeterminate state
+      if (indeterminate) {
+
+        // Add indeterminate state
+        node[state] = true;
+
+        // Remove checked state
+        if (node[_checked]) {
+          off(input, _checked, 'force');
+        }
+
+      // Checked or disabled state
+      } else {
+
+        // Add checked or disabled state
+        if (!keep) {
+          node[state] = true;
+        }
+
+        // Remove indeterminate state
+        if (checked && node[_indeterminate]) {
+          off(input, _indeterminate, false);
+        }
+      }
+
+      // Trigger callbacks
+      callbacks(input, checked, state, keep);
+    }
+
+    // Add proper cursor
+    if (node[_disabled] && !!option(input, _cursor, true)) {
+      parent.find('.' + _iCheckHelper).css(_cursor, 'default');
+    }
+
+    // Add state class
+    parent[_add](specific || option(input, state) || '');
+
+    // Set ARIA attribute
+    if (!!parent.attr('role') && !indeterminate) {
+      parent.attr('aria-' + (disabled ? _disabled : _checked), 'true');
+    }
+
+    // Remove regular state class
+    parent[_remove](regular || option(input, callback) || '');
+  }
+
+  // Remove checked, disabled or indeterminate state
+  function off(input, state, keep) {
+    var node = input[0],
+      parent = input.parent(),
+      checked = state == _checked,
+      indeterminate = state == _indeterminate,
+      disabled = state == _disabled,
+      callback = indeterminate ? _determinate : checked ? _unchecked : 'enabled',
+      regular = option(input, callback + capitalize(node[_type])),
+      specific = option(input, state + capitalize(node[_type]));
+
+    // Prevent unnecessary actions
+    if (node[state] !== false) {
+
+      // Toggle state
+      if (indeterminate || !keep || keep == 'force') {
+        node[state] = false;
+      }
+
+      // Trigger callbacks
+      callbacks(input, checked, callback, keep);
+    }
+
+    // Add proper cursor
+    if (!node[_disabled] && !!option(input, _cursor, true)) {
+      parent.find('.' + _iCheckHelper).css(_cursor, 'pointer');
+    }
+
+    // Remove state class
+    parent[_remove](specific || option(input, state) || '');
+
+    // Set ARIA attribute
+    if (!!parent.attr('role') && !indeterminate) {
+      parent.attr('aria-' + (disabled ? _disabled : _checked), 'false');
+    }
+
+    // Add regular state class
+    parent[_add](regular || option(input, callback) || '');
+  }
+
+  // Remove all traces
+  function tidy(input, callback) {
+    if (input.data(_iCheck)) {
+
+      // Remove everything except input
+      input.parent().html(input.attr('style', input.data(_iCheck).s || ''));
+
+      // Callback
+      if (callback) {
+        input[_callback](callback);
+      }
+
+      // Unbind events
+      input.off('.i').unwrap();
+      $(_label + '[for="' + input[0].id + '"]').add(input.closest(_label)).off('.i');
+    }
+  }
+
+  // Get some option
+  function option(input, state, regular) {
+    if (input.data(_iCheck)) {
+      return input.data(_iCheck).o[state + (regular ? '' : 'Class')];
+    }
+  }
+
+  // Capitalize some string
+  function capitalize(string) {
+    return string.charAt(0).toUpperCase() + string.slice(1);
+  }
+
+  // Executable handlers
+  function callbacks(input, checked, callback, keep) {
+    if (!keep) {
+      if (checked) {
+        input[_callback]('ifToggled');
+      }
+
+      input[_callback]('ifChanged')[_callback]('if' + capitalize(callback));
+    }
+  }
+})(window.jQuery || window.Zepto);
+
+/**
+ * WHMCS core JS library reference
+ *
+ * @copyright Copyright (c) WHMCS Limited 2005-2017
+ * @license http://www.whmcs.com/license/ WHMCS Eula
+ */
+
+(function (window, factory) {
+    if (typeof window.WHMCS !== 'object') {
+        window.WHMCS = factory;
+    }
+}(
+    window,
+    {
+        hasModule: function (name) {
+            return (typeof WHMCS[name] !== 'undefined'
+                && Object.getOwnPropertyNames(WHMCS[name]).length > 0);
+        },
+        loadModule: function (name, module) {
+            if (this.hasModule(name)) {
+                return;
+            }
+
+            WHMCS[name] = {};
+            if (typeof module === 'function') {
+                (module).apply(WHMCS[name]);
+            } else {
+                for (var key in module) {
+                    if (module.hasOwnProperty(key)) {
+                        WHMCS[name][key] = {};
+                        (module[key]).apply(WHMCS[name][key]);
+                    }
+                }
+            }
+        }
+    }
+));
+
+jQuery(document).ready(function() {
+    jQuery(document).on('click', '.disable-on-click', function () {
+        jQuery(this).addClass('disabled');
+
+        if (jQuery(this).hasClass('spinner-on-click')) {
+            var icon = $(this).find('i.fas,i.far,i.fal,i.fab');
+
+            jQuery(icon)
+                .removeAttr('class')
+                .addClass('fas fa-spinner fa-spin');
+        }
+    });
+});
+
+function scrollToGatewayInputError() {
+    var displayError = jQuery('.gateway-errors,.assisted-cc-input-feedback').first(),
+        frm = displayError.closest('form');
+    if (!frm) {
+        frm = jQuery('form').first();
+    }
+    frm.find('button[type="submit"],input[type="submit"]')
+        .prop('disabled', false)
+        .removeClass('disabled')
+        .find('i.fas,i.far,i.fal,i.fab')
+        .removeAttr('class')
+        .addClass('fas fa-arrow-circle-right')
+        .find('span').toggle();
+
+    if (displayError.length) {
+        if (elementOutOfViewPort(displayError[0])) {
+            jQuery('html, body').animate(
+                {
+                    scrollTop: displayError.offset().top - 50
+                },
+                500
+            );
+        }
+    }
+}
+
+function elementOutOfViewPort(element) {
+    // Get element's bounding
+    var bounding = element.getBoundingClientRect();
+    // Check if it's out of the viewport on each side
+    var out = {};
+    out.top = bounding.top < 0;
+    out.left = bounding.left < 0;
+    out.bottom = bounding.bottom > (window.innerHeight || document.documentElement.clientHeight);
+    out.right = bounding.right > (window.innerWidth || document.documentElement.clientWidth);
+    out.any = out.top || out.left || out.bottom || out.right;
+
+    return out.any;
+};
+
+/**
+ * WHMCS authentication module
+ *
+ * @copyright Copyright (c) WHMCS Limited 2005-2017
+ * @license http://www.whmcs.com/license/ WHMCS Eula
+ */
+
+(function(module) {
+    if (!WHMCS.hasModule('authn')) {
+        WHMCS.loadModule('authn', module);
+    }
+})({
+provider: function () {
+    var callbackFired = false;
+
+    /**
+     * @return {jQuery}
+     */
+    this.feedbackContainer = function () {
+        return jQuery(".providerLinkingFeedback");
+    };
+
+    /**
+     * @returns {jQuery}
+     */
+    this.btnContainer = function () {
+        return jQuery(".providerPreLinking");
+    };
+
+    this.feedbackMessage = function (context) {
+        if (typeof context === 'undefined') {
+            context = 'complete_sign_in';
+        }
+        var msgContainer = jQuery('p.providerLinkingMsg-preLink-' + context);
+        if (msgContainer.length) {
+            return msgContainer.first().html();
+        }
+
+        return '';
+    };
+
+    this.showProgressMessage = function(callback) {
+        this.feedbackContainer().fadeIn('fast', function () {
+            if (typeof callback === 'function' && !callbackFired) {
+                callbackFired = true;
+                callback();
+            }
+        });
+    };
+
+    this.preLinkInit = function (callback) {
+        var icon = '<i class="fas fa-fw fa-spinner fa-spin"></i> ';
+
+        this.feedbackContainer()
+            .removeClass('alert-danger alert-success')
+            .addClass('alert alert-info')
+            .html(icon + this.feedbackMessage())
+            .hide();
+
+        var btnContainer = this.btnContainer();
+        if (btnContainer.length) {
+            if (btnContainer.data('hideOnPrelink')) {
+                var self = this;
+                btnContainer.fadeOut('false', function ()
+                {
+                    self.showProgressMessage(callback)
+                });
+            } else if (btnContainer.data('disableOnPrelink')) {
+                btnContainer.find('.btn').addClass('disabled');
+                this.showProgressMessage(callback);
+            } else {
+                this.showProgressMessage(callback);
+            }
+        } else {
+            this.showProgressMessage(callback);
+        }
+    };
+
+    this.displayError = function (provider, errorCondition, providerErrorText){
+        jQuery('#providerLinkingMessages .provider-name').html(provider);
+
+        var feedbackMsg = this.feedbackMessage('connect_error');
+        if (errorCondition) {
+            var errorMsg = this.feedbackMessage(errorCondition);
+            if (errorMsg) {
+                feedbackMsg = errorMsg
+            }
+        }
+
+        if (providerErrorText && $('.btn-logged-in-admin').length > 0) {
+            feedbackMsg += ' Error: ' + providerErrorText;
+        }
+
+        this.feedbackContainer().removeClass('alert-info alert-success')
+            .addClass('alert alert-danger')
+            .html(feedbackMsg).slideDown();
+    };
+
+    this.displaySuccess = function (data, context, provider) {
+        var icon = provider.icon;
+        var htmlTarget = context.htmlTarget;
+        var targetLogin = context.targetLogin;
+        var targetRegister = context.targetRegister;
+        var displayName = provider.name;
+        var feedbackMsg = '';
+
+        switch (data.result) {
+            case "logged_in":
+            case "2fa_needed":
+                feedbackMsg = this.feedbackMessage('2fa_needed');
+                this.feedbackContainer().removeClass('alert-danger alert-warning alert-success')
+                    .addClass('alert alert-info')
+                    .html(feedbackMsg);
+
+                window.location = data.redirect_url
+                    ? decodeURIComponent(data.redirect_url)
+                    : decodeURIComponent(context.redirectUrl);
+
+                break;
+
+            case "linking_complete":
+                var accountInfo = '';
+                if (data.remote_account.email) {
+                    accountInfo = data.remote_account.email;
+                } else {
+                    accountInfo = data.remote_account.firstname + " " + data.remote_account.lastname;
+                }
+
+                accountInfo = accountInfo.trim();
+
+                feedbackMsg = this.feedbackMessage('linking_complete').trim().replace(':displayName', displayName);
+                if (accountInfo) {
+                    feedbackMsg = feedbackMsg.replace(/\.$/, ' (' + accountInfo + ').');
+                }
+
+                this.feedbackContainer().removeClass('alert-danger alert-warning alert-info')
+                    .addClass('alert alert-success')
+                    .html(icon + feedbackMsg);
+                break;
+
+            case "login_to_link":
+                if (htmlTarget === targetLogin) {
+                    feedbackMsg = this.feedbackMessage('login_to_link-signin-required');
+                    this.feedbackContainer().removeClass('alert-danger alert-success alert-info')
+                        .addClass('alert alert-warning')
+                        .html(icon + feedbackMsg);
+                } else {
+                    var emailField = jQuery("input[name=email]");
+                    var firstNameField = jQuery("input[name=firstname]");
+                    var lastNameField = jQuery("input[name=lastname]");
+
+                    if (emailField.val() === "") {
+                        emailField.val(data.remote_account.email);
+                    }
+
+                    if (firstNameField.val() === "") {
+                        firstNameField.val(data.remote_account.firstname);
+                    }
+
+                    if (lastNameField.val() === "") {
+                        lastNameField.val(data.remote_account.lastname);
+                    }
+
+                    if (htmlTarget === targetRegister) {
+                        if (typeof WHMCS.client.registration === 'object') {
+                            WHMCS.client.registration.prefillPassword();
+                        }
+                        feedbackMsg = this.feedbackMessage('login_to_link-registration-required');
+                        this.feedbackContainer().fadeOut('slow', function () {
+                            $(this).removeClass('alert-danger alert-success alert-info')
+                                .addClass('alert alert-warning')
+                                .html(icon + feedbackMsg).fadeIn('fast');
+                        });
+
+                    } else {
+                        // this is checkout
+                        if (typeof WHMCS.client.registration === 'object') {
+                            WHMCS.client.registration.prefillPassword();
+                        }
+
+                        var self = this;
+                        this.feedbackContainer().each(function (i, el) {
+                            var container = $(el);
+                            var linkContext = container.siblings('div .providerPreLinking').data('linkContext');
+
+                            container.fadeOut('slow', function () {
+                                if (linkContext === 'checkout-new') {
+                                    feedbackMsg = self.feedbackMessage('checkout-new');
+                                } else {
+                                    feedbackMsg = self.feedbackMessage('login_to_link-signin-required');
+                                }
+                                container.removeClass('alert-danger alert-success alert-info')
+                                    .addClass('alert alert-warning')
+                                    .html(icon + feedbackMsg).fadeIn('fast');
+                            });
+                        });
+                    }
+                }
+
+                break;
+
+            case "other_user_exists":
+                feedbackMsg = this.feedbackMessage('other_user_exists');
+                this.feedbackContainer().removeClass('alert-info alert-success')
+                    .addClass('alert alert-danger')
+                    .html(icon + feedbackMsg).slideDown();
+                break;
+
+            case "already_linked":
+                feedbackMsg = this.feedbackMessage('already_linked');
+                this.feedbackContainer().removeClass('alert-info alert-success')
+                    .addClass('alert alert-danger')
+                    .html(icon + feedbackMsg).slideDown();
+                break;
+
+            default:
+                feedbackMsg = this.feedbackMessage('default');
+                this.feedbackContainer().removeClass('alert-info alert-success')
+                    .addClass('alert alert-danger')
+                    .html(icon + feedbackMsg).slideDown();
+                break;
+        }
+    };
+
+    this.signIn = function (config, context, provider, providerDone, providerError) {
+        jQuery.ajax(config).done(function(data) {
+            providerDone();
+            WHMCS.authn.provider.displaySuccess(data, context, provider);
+            var table = jQuery('#tableLinkedAccounts');
+            if (table.length) {
+                WHMCS.ui.dataTable.getTableById('tableLinkedAccounts').ajax.reload();
+            }
+        }).error(function() {
+            providerError();
+            WHMCS.authn.provider.displayError();
+        });
+    };
+
+    return this;
+}});
+
+/**
+ * WHMCS client module
+ *
+ * @copyright Copyright (c) WHMCS Limited 2005-2017
+ * @license http://www.whmcs.com/license/ WHMCS Eula
+ */
+(function(module) {
+    if (!WHMCS.hasModule('client')) {
+        WHMCS.loadModule('client', module);
+    }
+})({
+registration: function () {
+    this.prefillPassword = function (params) {
+        params = params || {};
+        if (typeof params.hideContainer === 'undefined') {
+            var id = (jQuery('#inputSecurityQId').attr('id')) ? '#containerPassword' : '#containerNewUserSecurity';
+            params.hideContainer = jQuery(id);
+            params.hideInputs = true;
+        } else if (typeof params.hideContainer === 'string' && params.hideContainer.length) {
+            params.hideContainer = jQuery(params.hideContainer);
+        }
+
+        if (typeof params.form === 'undefined') {
+            params.form = {
+                password: [
+                    {id: 'inputNewPassword1'},
+                    {id: 'inputNewPassword2'}
+                ]
+            };
+        }
+
+        var prefillFunc = function () {
+            var $randomPasswd = WHMCS.utils.simpleRNG();
+            for (var i = 0, len = params.form.password.length; i < len; i++) {
+                jQuery('#' + params.form.password[i].id)
+                    .val($randomPasswd).trigger('keyup');
+            }
+        };
+
+        if (params.hideInputs) {
+            params.hideContainer.slideUp('fast', prefillFunc);
+        } else {
+            prefillFunc();
+        }
+    };
+
+    return this;
+}});
+
+/**
+ * WHMCS HTTP module
+ *
+ * @copyright Copyright (c) WHMCS Limited 2005-2018
+ * @license http://www.whmcs.com/license/ WHMCS Eula
+ */
+(function(module) {
+    if (!WHMCS.hasModule('http')) {
+        WHMCS.loadModule('http', module);
+    }
+})({
+jqClient: function () {
+    _getSettings = function (url, data, success, dataType)
+    {
+        if (typeof url === 'object') {
+            /*
+                Settings may be the only argument
+             */
+            return url;
+        }
+
+        if (typeof data === 'function') {
+            /*
+                If 'data' is omitted, 'success' will come in its place
+             */
+            success = data;
+            data = null;
+        }
+
+        return {
+            url: url,
+            data: data,
+            success: success,
+            dataType: dataType
+        };
+    };
+
+    /**
+     * @param url
+     * @param data
+     * @param success
+     * @param dataType
+     * @returns {*}
+     */
+    this.get = function (url, data, success, dataType)
+    {
+        return WHMCS.http.client.request(
+            jQuery.extend(
+                _getSettings(url, data, success, dataType),
+                {
+                    type: 'GET'
+                }
+            )
+        );
+    };
+
+    /**
+     * @param url
+     * @param data
+     * @param success
+     * @param dataType
+     * @returns {*}
+     */
+    this.post = function (url, data, success, dataType)
+    {
+        return WHMCS.http.client.request(
+            jQuery.extend(
+                _getSettings(url, data, success, dataType),
+                {
+                    type: 'POST'
+                }
+            )
+        );
+    };
+
+    /**
+     * @param options
+     * @returns {*}
+     */
+    this.jsonGet = function (options) {
+        options = options || {};
+        this.get(options.url, options.data, function(response) {
+            if (response.warning) {
+                console.log('[WHMCS] Warning: ' + response.warning);
+                if (typeof options.warning === 'function') {
+                    options.warning(response.warning);
+                }
+            } else if (response.error) {
+                console.log('[WHMCS] Error: ' + response.error);
+                if (typeof options.error === 'function') {
+                    options.error(response.error);
+                }
+            } else {
+                if (typeof options.success === 'function') {
+                    options.success(response);
+                }
+            }
+        }, 'json').error(function(xhr, errorMsg){
+            console.log('[WHMCS] Error: ' + errorMsg);
+            if (typeof options.fail === 'function') {
+                options.fail(errorMsg);
+            }
+        }).always(function() {
+            if (typeof options.always === 'function') {
+                options.always();
+            }
+        });
+    };
+
+    /**
+     * @param options
+     * @returns {*}
+     */
+    this.jsonPost = function (options) {
+        options = options || {};
+        this.post(options.url, options.data, function(response) {
+            if (response.warning) {
+                console.log('[WHMCS] Warning: ' + response.warning);
+                if (typeof options.warning === 'function') {
+                    options.warning(response.warning);
+                }
+            } else if (response.error) {
+                console.log('[WHMCS] Error: ' + response.error);
+                if (typeof options.error === 'function') {
+                    options.error(response.error);
+                }
+            } else {
+                if (typeof options.success === 'function') {
+                    options.success(response);
+                }
+            }
+        }, 'json').fail(function(xhr, errorMsg){
+            console.log('[WHMCS] Fail: ' + errorMsg);
+            if (typeof options.fail === 'function') {
+                options.fail(errorMsg, xhr);
+            }
+        }).always(function() {
+            if (typeof options.always === 'function') {
+                options.always();
+            }
+        });
+    };
+
+    return this;
+},
+
+client: function () {
+    var methods = ['get', 'post', 'put', 'delete'];
+    var client = this;
+
+    _beforeRequest = function (settings)
+    {
+        /*
+            Enforcing dataType was found to break many invocations expecting HTML back.
+            If/when those are refactored, this may be uncommented to enforce a safer
+            data transit.
+         */
+        /*if (typeof settings.dataType === 'undefined') {
+            settings.dataType = 'json';
+        }*/
+
+        if (typeof settings.type === 'undefined') {
+            // default request type is GET
+            settings.type = 'GET';
+        }
+
+        /*
+            Add other preprocessing here if required
+         */
+
+        return settings;
+    };
+
+    this.request = function (settings)
+    {
+        settings = _beforeRequest(settings || {});
+        return jQuery.ajax(settings);
+    };
+
+    /*
+        Create shortcut methods for methods[] array above
+     */
+    jQuery.each(methods, function(index, method) {
+        client[method] = (function(method, client) {
+            return function (settings)
+            {
+                settings = settings || {};
+
+                settings.type = method.toUpperCase();
+
+                return client.request(settings);
+            }
+        })(method, client);
+    });
+
+    return this;
+}
+
+});
+
+/**
+ * WHMCS UI module
+ *
+ * @copyright Copyright (c) WHMCS Limited 2005-2017
+ * @license http://www.whmcs.com/license/ WHMCS Eula
+ */
+(function(module) {
+    if (!WHMCS.hasModule('ui')) {
+        WHMCS.loadModule('ui', module);
+    }
+})({
+/**
+ * Confirmation PopUp
+ */
+confirmation: function () {
+
+    /**
+     * @type {Array} Registered confirmation root selectors
+     */
+    var toggles = [];
+
+    /**
+     * Register/Re-Register all confirmation elements with jQuery
+     * By default all elements of data toggle "confirmation" will be registered
+     *
+     * @param {(string|undefined)} rootSelector
+     * @return {Array} array of registered toggles
+     */
+    this.register = function (rootSelector) {
+        if (typeof rootSelector === 'undefined') {
+            rootSelector = '[data-toggle=confirmation]';
+        }
+        if (toggles.indexOf(rootSelector) < 0) {
+            toggles.push(rootSelector);
+        }
+
+        jQuery(rootSelector).confirmation({
+            rootSelector: rootSelector
+        });
+
+        return toggles;
+    };
+
+    return this;
+},
+
+/**
+ * Data Driven Table
+ */
+dataTable: function () {
+
+    /**
+     * @type {{}}
+     */
+    this.tables = {};
+
+    /**
+     * Register all tables on page with the class "data-driven"
+     */
+    this.register = function () {
+        var self = this;
+        jQuery('table.data-driven').each(function (i, table) {
+            self.getTableById(table.id, undefined);
+        });
+    };
+
+    /**
+     * Get a table by id; create table object on fly as necessary
+     *
+     * @param {string} id
+     * @param {({}|undefined)} options
+     * @returns {DataTable}
+     */
+    this.getTableById = function (id, options) {
+        var self = this;
+        var el = jQuery('#' + id);
+        if (typeof self.tables[id] === 'undefined') {
+            if (typeof options === 'undefined') {
+                options = {
+                    dom: '<"listtable"ift>pl',
+                    paging: false,
+                    lengthChange: false,
+                    searching: false,
+                    ordering: true,
+                    info: false,
+                    autoWidth: true,
+                    language: {
+                        emptyTable: (el.data('lang-empty-table')) ? el.data('lang-empty-table') : "No records found"
+                    }
+                };
+            }
+            var ajaxUrl = el.data('ajax-url');
+            if (typeof ajaxUrl !== 'undefined') {
+                options.ajax = {
+                    url: ajaxUrl
+                };
+            }
+            var dom = el.data('dom');
+            if (typeof dom !== 'undefined') {
+                options.dom = dom;
+            }
+            var searching = el.data('searching');
+            if (typeof searching !== 'undefined') {
+                options.searching = searching;
+            }
+            var responsive = el.data('responsive');
+            if (typeof responsive !== 'undefined') {
+                options.responsive = responsive;
+            }
+            var ordering = el.data('ordering');
+            if (typeof ordering !== 'undefined') {
+                options["ordering"] = ordering;
+            }
+            var order = el.data('order');
+            if (typeof order !== 'undefined' && order) {
+                options["order"] = order;
+            }
+            var colCss = el.data('columns');
+            if (typeof colCss !== 'undefined' && colCss) {
+                options["columns"] = colCss;
+            }
+            var autoWidth = el.data('auto-width');
+            if (typeof autoWidth !== 'undefined') {
+                options["autoWidth"] = autoWidth;
+            }
+            var paging = el.data('paging');
+            if (typeof paging !== 'undefined') {
+                options["paging"] = paging;
+            }
+            var lengthChange = el.data('length-change');
+            if (typeof lengthChange !== 'undefined') {
+                options["lengthChange"] = lengthChange;
+            }
+            var pageLength = el.data('page-length');
+            if (typeof pageLength !== 'undefined') {
+                options["pageLength"] = pageLength;
+            }
+
+            self.tables[id] = self.initTable(el, options);
+        } else if (typeof options !== 'undefined') {
+            var oldTable = self.tables[id];
+            var initOpts = oldTable.init();
+            var newOpts = jQuery.extend( initOpts, options);
+            oldTable.destroy();
+            self.tables[id] = self.initTable(el, newOpts);
+        }
+
+        return self.tables[id];
+    };
+
+    this.initTable = function (el, options) {
+        var table = el.DataTable(options);
+        var self = this;
+        if (el.data('on-draw')) {
+            table.on('draw.dt', function (e, settings) {
+                var namedCallback = el.data('on-draw');
+                if (typeof window[namedCallback] === 'function') {
+                    window[namedCallback](e, settings);
+                }
+            });
+        } else if (el.data('on-draw-rebind-confirmation')) {
+            table.on('draw.dt', function (e) {
+                self.rebindConfirmation(e);
+            });
+        }
+
+        return table;
+    };
+
+    this.rebindConfirmation = function (e) {
+        var self = this;
+        var tableId = e.target.id;
+        var toggles = WHMCS.ui.confirmation.register();
+        for(var i = 0, len = toggles.length; i < len; i++ ) {
+            jQuery(toggles[i]).on(
+                'confirmed.bs.confirmation',
+                function (e)
+                {
+                    e.preventDefault();
+                    WHMCS.http.jqClient.post(
+                        jQuery(e.target).data('target-url'),
+                        {
+                            'token': csrfToken
+                        }
+                    ).done(function (data)
+                    {
+                        if (data.status === 'success' || data.status === 'okay') {
+                            self.getTableById(tableId, undefined).ajax.reload();
+                        }
+                    });
+
+                }
+            );
+        }
+    };
+
+    return this;
+},
+
+clipboard: function() {
+    this.copy = function(e) {
+        e.preventDefault();
+
+        var trigger = $(e.currentTarget);
+        var contentElement = $(trigger).data('clipboard-target');
+        var container = $(contentElement).parent();
+
+        try {
+            var tempElement = $('<textarea>')
+                .css('position', 'fixed')
+                .css('opacity', '0')
+                .css('width', '1px')
+                .css('height', '1px')
+                .val($(contentElement).val());
+
+            container.append(tempElement);
+            tempElement.focus().select();
+            document.execCommand('copy');
+        } finally {
+            tempElement.remove();
+        }
+
+        trigger.tooltip({
+            trigger: 'click',
+            placement: 'bottom'
+        });
+        WHMCS.ui.toolTip.setTip(trigger, 'Copied!');
+        WHMCS.ui.toolTip.hideTip(trigger);
+    };
+
+    return this;
+},
+
+/**
+ * ToolTip and Clipboard behaviors
+ */
+toolTip: function () {
+    this.setTip = function (btn, message) {
+        var tip = btn.data('bs.tooltip');
+        if (tip.hoverState !== 'in') {
+            tip.hoverState = 'in';
+        }
+        btn.attr('data-original-title', message);
+        tip.show();
+
+        return tip;
+    };
+
+    this.hideTip = function (btn) {
+        return setTimeout(function() {
+            btn.data('bs.tooltip').hide()
+        }, 2000);
+    }
+},
+
+jsonForm: function() {
+    this.managedElements = 'input,textarea,select';
+
+    this.initFields = function (form) {
+        var self = this;
+        $(form).find(self.managedElements).each(function () {
+            var field = this;
+
+            $(field).on('keypress change', function () {
+                if (self.fieldHasError(field)) {
+                    self.clearFieldError(field);
+                }
+            });
+        });
+    };
+
+    this.init = function (form) {
+        var self = this;
+
+        self.initFields(form);
+
+        $(form).on('submit', function(e) {
+            e.preventDefault();
+            e.stopPropagation();
+
+            self.clearErrors(form);
+
+            var formModal = $(form).parents('.modal[role="dialog"]').first();
+
+            if ($(formModal).length) {
+                $(formModal).on('show.bs.modal hidden.bs.modal', function() {
+                    self.clearErrors(form);
+                });
+
+                /*
+                 * Make this optional if the form is used for editing
+                 */
+                $(formModal).on('show.bs.modal', function() {
+                    $(form)[0].reset();
+                });
+            }
+
+            WHMCS.http.client.post({
+                url: $(form).attr('action'),
+                data: $(form).serializeArray(),
+            })
+                .done(function (response) {
+                    self.onSuccess(form, response);
+                })
+                .fail(function (jqXHR) {
+                    self.onError(form, jqXHR);
+                })
+                .always(function (data) {
+                    self.onRequestComplete(form, data);
+                });
+        });
+    };
+
+    this.initAll = function () {
+        var self = this;
+
+        $('form[data-role="json-form"]').each(function() {
+            var formElement = this;
+            self.init(formElement);
+        });
+    };
+
+    this.markFieldErrors = function (form, fields)
+    {
+        var self = this;
+        var errorMessage = null;
+        var field, fieldLookup;
+
+        for (var fieldName in fields) {
+            if (fields.hasOwnProperty(fieldName)) {
+                errorMessage = fields[fieldName];
+            }
+
+            fieldLookup = self.managedElements.split(',').map(function(element) {
+                return element + '[name="' + fieldName + '"]';
+            }).join(',');
+
+            field = $(form).find(fieldLookup);
+
+            if (errorMessage) {
+                $(field).parents('.form-group').addClass('has-error');
+                $(field).attr('title', errorMessage);
+                $(field).tooltip();
+            }
+        }
+
+        $(form).find('.form-group.has-error input[title]').first().tooltip('show');
+    };
+
+    this.fieldHasError = function (field) {
+        return $(field).parents('.form-group').hasClass('has-error');
+    };
+
+    this.clearFieldError = function (field) {
+        /**
+         * Try dispose first for BS 4, which will raise error
+         * on BS 3 or older, then we use destroy instead
+         */
+        try {
+            $(field).tooltip('dispose');
+        } catch (err) {
+            $(field).tooltip('destroy');
+        }
+        $(field).parents('.form-group').removeClass('has-error');
+    };
+
+    this.onSuccess = function (form, response) {
+        var formOnSuccess = $(form).data('on-success');
+
+        if (typeof formOnSuccess === 'function') {
+            formOnSuccess(response.data);
+        }
+    };
+
+    this.onError = function (form, jqXHR) {
+        if (jqXHR.responseJSON && jqXHR.responseJSON.fields && typeof jqXHR.responseJSON.fields === 'object') {
+            this.markFieldErrors(form, jqXHR.responseJSON.fields);
+        } else {
+            // TODO: replace with client-accessible generic error messaging
+            console.log('Unknown error - please try again later.');
+        }
+
+        var formOnError = $(form).data('on-error');
+
+        if (typeof formOnError === 'function') {
+            formOnError(jqXHR);
+        }
+    };
+
+    this.clearErrors = function (form) {
+        var self = this;
+
+        $(form).find(self.managedElements).each(function () {
+            self.clearFieldError(this);
+        })
+    };
+
+    this.onRequestComplete = function (form, data) {
+        // implement as needed
+    };
+
+    return this;
+},
+
+effects: function () {
+    this.errorShake = function (element) {
+        /**
+         * Shake effect without jQuery UI inspired by Hiren Patel | ninty9notout:
+         * @see https://github.com/ninty9notout/jquery-shake/blob/51f3dcf625970c78505bcac831fd9e28fc85d374/jquery.ui.shake.js
+         */
+        options = options || {};
+        var options = $.extend({
+            direction: "left",
+            distance: 8,
+            times: 3,
+            speed: 90
+        }, options);
+
+        return element.each(function () {
+            var el = $(this), props = {
+                position: el.css("position"),
+                top: el.css("top"),
+                bottom: el.css("bottom"),
+                left: el.css("left"),
+                right: el.css("right")
+            };
+
+            el.css("position", "relative");
+
+            var ref = (options.direction === "up" || options.direction === "down") ? "top" : "left";
+            var motion = (options.direction === "up" || options.direction === "left") ? "pos" : "neg";
+
+            var animation = {}, animation1 = {}, animation2 = {};
+            animation[ref] = (motion === "pos" ? "-=" : "+=") + options.distance;
+            animation1[ref] = (motion === "pos" ? "+=" : "-=") + options.distance * 2;
+            animation2[ref] = (motion === "pos" ? "-=" : "+=") + options.distance * 2;
+
+            el.animate(animation, options.speed);
+            for (var i = 1; i < options.times; i++) {
+                el.animate(animation1, options.speed).animate(animation2, options.speed);
+            }
+
+            el.animate(animation1, options.speed).animate(animation, options.speed / 2, function () {
+                el.css(props);
+            });
+        });
+    };
+
+}
+});
+
+/**
+ * Form module
+ *
+ * @copyright Copyright (c) WHMCS Limited 2005-2017
+ * @license http://www.whmcs.com/license/ WHMCS Eula
+ */
+(function(module) {
+    if (!WHMCS.hasModule('form')) {
+        WHMCS.loadModule('form', module);
+    }
+})(
+function () {
+    this.checkAllBound = false;
+
+    this.register = function () {
+        if (!this.checkAllBound) {
+            this.bindCheckAll();
+            this.checkAllBound = true;
+        }
+    };
+
+    this.bindCheckAll = function ()
+    {
+        var huntSelector = '.btn-check-all';
+        jQuery('body').on('click', huntSelector, function (e) {
+            var btn = jQuery(e.target);
+            var targetInputs = jQuery(
+                '#' + btn.data('checkbox-container') + ' input[type="checkbox"]'
+            );
+            if (btn.data('btn-check-toggle')) {
+                // one control that changes
+                var textDeselect = 'Deselect All';
+                var textSelect = 'Select All';
+                if (btn.data('label-text-deselect')) {
+                    textDeselect = btn.data('label-text-deselect');
+                }
+                if (btn.data('label-text-select')) {
+                    textSelect = btn.data('label-text-select');
+                }
+
+                if (btn.hasClass('toggle-active')) {
+                    targetInputs.prop('checked',false);
+                    btn.text(textSelect);
+                    btn.removeClass('toggle-active');
+                } else {
+                    targetInputs.prop('checked',true);
+                    btn.text(textDeselect);
+                    btn.addClass('toggle-active');
+                }
+            } else {
+                // two controls that are static
+                if (btn.data('btn-toggle-on')) {
+                    targetInputs.prop('checked',true);
+                } else {
+                    targetInputs.prop('checked',false);
+                }
+            }
+        });
+    };
+
+    this.reloadCaptcha = function (element)
+    {
+        if (typeof grecaptcha !== 'undefined') {
+            grecaptcha.reset();
+        } else {
+            if (!element) {
+                element = jQuery('#inputCaptchaImage');
+            }
+
+            var src = jQuery(element).data('src');
+            jQuery(element).attr('src', src + '?nocache=' + (new Date()).getTime());
+
+            var userInput = jQuery('#inputCaptcha');
+            if (userInput.length) {
+                userInput.val('');
+            }
+        }
+    };
+
+    return this;
+});
+
+/**
+ * reCaptcha module
+ *
+ * @copyright Copyright (c) WHMCS Limited 2005-2020
+ * @license http://www.whmcs.com/license/ WHMCS Eula
+ */
+var recaptchaLoadComplete = false,
+    recaptchaCount = 0,
+    recaptchaType = 'recaptcha',
+    recaptchaValidationComplete = false;
+
+(function(module) {
+    if (!WHMCS.hasModule('recaptcha')) {
+        WHMCS.loadModule('recaptcha', module);
+    }
+})(
+    function () {
+
+        this.register = function () {
+            if (recaptchaLoadComplete) {
+                return;
+            }
+            var postLoad = [],
+                recaptchaForms = jQuery(".btn-recaptcha").parents('form'),
+                isInvisible = false;
+            recaptchaForms.each(function (i, el){
+                if (typeof recaptchaSiteKey === 'undefined') {
+                    console.log('Recaptcha site key not defined');
+                    return;
+                }
+                recaptchaCount += 1;
+                var frm = jQuery(el),
+                    btnRecaptcha = frm.find(".btn-recaptcha"),
+                    required = (typeof requiredText !== 'undefined') ? requiredText : 'Required',
+                    recaptchaId = 'divDynamicRecaptcha' + recaptchaCount;
+
+                isInvisible = btnRecaptcha.hasClass('btn-recaptcha-invisible')
+
+                // if no recaptcha element, make one
+                var recaptchaContent = frm.find('#' + recaptchaId + ' .g-recaptcha'),
+                    recaptchaElement = frm.find('.recaptcha-container'),
+                    appendElement = frm;
+
+                if (recaptchaElement.length) {
+                    recaptchaElement.attr('id', recaptchaElement.attr('id') + recaptchaCount);
+                    appendElement = recaptchaElement;
+                }
+                if (!recaptchaContent.length) {
+                    appendElement.append('<div id="#' + recaptchaId + '" class="g-recaptcha"></div>');
+                    recaptchaContent = appendElement.find('#' + recaptchaId);
+                }
+                // propagate invisible recaptcha if necessary
+                if (!isInvisible) {
+                    recaptchaContent.data('toggle', 'tooltip')
+                        .data('placement', 'bottom')
+                        .data('trigger', 'manual')
+                        .attr('title', required)
+                        .hide();
+                }
+
+
+                // alter form to work around JS behavior on .submit() when there
+                // there is an input with the name 'submit'
+                var btnSubmit = frm.find("input[name='submit']");
+                if (btnSubmit.length) {
+                    var action = frm.prop('action');
+                    frm.prop('action', action + '&submit=1');
+                    btnSubmit.remove();
+                }
+
+                // make callback for grecaptcha to invoke after
+                // injecting token & make it known via data-callback
+                var funcName = recaptchaId + 'Callback';
+                window[funcName] = function () {
+                    if (isInvisible) {
+                        frm.submit();
+                    }
+                };
+
+                // setup an on form submit event to ensure that we
+                // are allowing required field validation to occur before
+                // we do the invisible recaptcha checking
+                if (isInvisible) {
+                    recaptchaType = 'invisible';
+                    frm.on('submit.recaptcha', function (event) {
+                        var recaptchaId = frm.find('.g-recaptcha').data('recaptcha-id');
+                        if (!grecaptcha.getResponse(recaptchaId).trim()) {
+                            event.preventDefault();
+                            grecaptcha.execute(recaptchaId);
+                            recaptchaValidationComplete = false;
+                        } else {
+                            recaptchaValidationComplete = true;
+                        }
+                    });
+                } else {
+                    postLoad.push(function () {
+                        recaptchaContent.slideDown('fast', function() {
+                            // just in case there's a delay in DOM; rare
+                            recaptchaContent.find(':first').addClass('center-block');
+                        });
+                    });
+                    postLoad.push(function() {
+                        recaptchaContent.find(':first').addClass('center-block');
+                    });
+                }
+            });
+
+            window.recaptchaLoadCallback = function() {
+                jQuery('.g-recaptcha').each(function(i, el) {
+                    var element = jQuery(el),
+                        frm = element.closest('form'),
+                        btn = frm.find('.btn-recaptcha'),
+                        idToUse = element.attr('id').substring(1);
+                    var recaptchaId = grecaptcha.render(
+                        el,
+                        {
+                            sitekey: recaptchaSiteKey,
+                            size: (btn.hasClass('btn-recaptcha-invisible')) ? 'invisible' : 'normal',
+                            callback: idToUse + 'Callback'
+                        }
+                    );
+                    element.data('recaptcha-id', recaptchaId);
+                });
+            }
+
+            // fetch/invoke the grecaptcha lib
+            if (recaptchaForms.length) {
+                var gUrl = "https://www.google.com/recaptcha/api.js?onload=recaptchaLoadCallback&render=explicit";
+                jQuery.getScript(gUrl, function () {
+                    for(var i = postLoad.length - 1; i >= 0 ; i--){
+                        postLoad[i]();
+                    }
+                });
+            }
+            recaptchaLoadComplete = true;
+        };
+
+        return this;
+    });
+
+/**
+ * General utilities module
+ *
+ * @copyright Copyright (c) WHMCS Limited 2005-2017
+ * @license http://www.whmcs.com/license/ WHMCS Eula
+ */
+(function(module) {
+    if (!WHMCS.hasModule('utils')) {
+        WHMCS.loadModule('utils', module);
+    }
+})(
+function () {
+    /**
+     * Not crypto strong; server-side must discard for
+     * something with more entropy; the value is sufficient
+     * for strong client-side validation check
+     */
+    this.simpleRNG = function () {
+        var chars = './$_-#!,^*()|';
+        var r = 0;
+        for (var i = 0; r < 3; i++) {
+            r += Math.floor((Math.random() * 10) / 2);
+        }
+        r = Math.floor(r);
+        var s = '';
+        for (var x = 0; x < r; x++) {
+            v = (Math.random() + 1).toString(24).split('.')[1];
+            if ((Math.random()) > 0.5) {
+                s += btoa(v).substr(0,4)
+            } else {
+                s += v
+            }
+
+            if ((Math.random()) > 0.5) {
+                s += chars.substr(
+                    Math.floor(Math.random() * 13),
+                    1
+                );
+            }
+        }
+
+        return s;
+    };
+
+    this.getRouteUrl = function (path) {
+        return whmcsBaseUrl + "/index.php?rp=" + path;
+    };
+
+    this.validateBaseUrl = function() {
+        if (typeof window.whmcsBaseUrl === 'undefined') {
+            console.log('Warning: The WHMCS Base URL definition is missing '
+                + 'from your active template. Please refer to '
+                + 'https://docs.whmcs.com/WHMCS_Base_URL_Template_Variable '
+                + 'for more information and details of how to resolve this '
+                + 'warning.');
+            window.whmcsBaseUrl = this.autoDetermineBaseUrl();
+            window.whmcsBaseUrlAutoSet = true;
+        } else if (window.whmcsBaseUrl === ''
+            && typeof window.whmcsBaseUrlAutoSet !== 'undefined'
+            && window.whmcsBaseUrlAutoSet === true
+        ) {
+            window.whmcsBaseUrl = this.autoDetermineBaseUrl();
+        }
+    };
+
+    this.autoDetermineBaseUrl = function() {
+        var windowLocation = window.location.href;
+        var phpExtensionLocation = -1;
+
+        if (typeof windowLocation !== 'undefined') {
+            phpExtensionLocation = windowLocation.indexOf('.php');
+        }
+
+        if (phpExtensionLocation === -1) {
+            windowLocation = jQuery('#Primary_Navbar-Home a').attr('href');
+            if (typeof windowLocation !== 'undefined') {
+                phpExtensionLocation = windowLocation.indexOf('.php');
+            }
+        }
+
+        if (phpExtensionLocation !== -1) {
+            windowLocation = windowLocation.substring(0, phpExtensionLocation);
+            var lastTrailingSlash = windowLocation.lastIndexOf('/');
+            if (lastTrailingSlash !== false) {
+                return windowLocation.substring(0, lastTrailingSlash);
+            }
+        }
+
+        return '';
+    };
+
+    this.normaliseStringValue = function(status) {
+        return status ? status.toLowerCase().replace(/\s/g, '-') : '';
+    };
+
+    this.generatePassword = function(len) {
+        var charset = this.getPasswordCharacterSet();
+        var result = "";
+        for (var i = 0; len > i; i++)
+            result += charset[this.randomInt(charset.length)];
+        return result;
+    };
+    this.getPasswordCharacterSet = function() {
+        var rawCharset = '0123456789'
+            + 'abcdefghijklmnopqrstuvwxyz'
+            + 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+            + '!#$%()*+,-.:;=@_|{ldelim}{rdelim}~';
+
+        // Parse UTF-16, remove duplicates, convert to array of strings
+        var charset = [];
+        for (var i = 0; rawCharset.length > i; i++) {
+            var c = rawCharset.charCodeAt(i);
+            if (0xD800 > c || c >= 0xE000) {  // Regular UTF-16 character
+                var s = rawCharset.charAt(i);
+                if (charset.indexOf(s) == -1)
+                    charset.push(s);
+                continue;
+            }
+            if (0xDC00 > c ? rawCharset.length > i + 1 : false) {  // High surrogate
+                var d = rawCharset.charCodeAt(i + 1);
+                if (d >= 0xDC00 ? 0xE000 > d : false) {  // Low surrogate
+                    var s = rawCharset.substring(i, i + 2);
+                    i++;
+                    if (charset.indexOf(s) == -1)
+                        charset.push(s);
+                    continue;
+                }
+            }
+            throw "Invalid UTF-16";
+        }
+        return charset;
+    };
+    this.randomInt = function(n) {
+        var x = this.randomIntMathRandom(n);
+        x = (x + this.randomIntBrowserCrypto(n)) % n;
+        return x;
+    };
+    this.randomIntMathRandom = function(n) {
+        var x = Math.floor(Math.random() * n);
+        if (0 > x || x >= n)
+            throw "Arithmetic exception";
+        return x;
+    };
+    this.randomIntBrowserCrypto = function(n) {
+        var cryptoObject = null;
+
+        if ("crypto" in window)
+            cryptoObject = crypto;
+        else if ("msCrypto" in window)
+            cryptoObject = msCrypto;
+        else
+            return 0;
+
+        if (!("getRandomValues" in cryptoObject) || !("Uint32Array" in window) || typeof Uint32Array != "function")
+            cryptoObject = null;
+
+        if (cryptoObject == null)
+            return 0;
+
+        // Generate an unbiased sample
+        var x = new Uint32Array(1);
+        do cryptoObject.getRandomValues(x);
+        while (x[0] - x[0] % n > 4294967296 - n);
+        return x[0] % n;
+    };
+
+    return this;
+});
+
+WHMCS.utils.validateBaseUrl();
+
+if (typeof localTrans === 'undefined') {
+    localTrans = function (phraseId, fallback)
+    {
+        if (typeof _localLang !== 'undefined') {
+            if (typeof _localLang[phraseId] !== 'undefined') {
+                if (_localLang[phraseId].length > 0) {
+                    return _localLang[phraseId];
+                }
+            }
+        }
+
+        return fallback;
+    }
+}
+
+var domainLookupCallCount,
+    checkoutForm,
+    furtherSuggestions;
+
+jQuery(document).ready(function(){
+
+    jQuery('#order-standard_cart').find('input').not('.no-icheck').iCheck({
+        inheritID: true,
+        checkboxClass: 'icheckbox_square-blue',
+        radioClass: 'iradio_square-blue',
+        increaseArea: '20%'
+    });
+
+    jQuery('.mc-promo .header').click(function(e) {
+        e.preventDefault();
+        if (jQuery(e.target).is('.btn, .btn span,.btn .fa')) {
+            return;
+        }
+        jQuery(this).parent().find('.rotate').toggleClass('down');
+        jQuery(this).parent().find('.body').slideToggle('fast');
+    });
+    jQuery('.mc-promos.viewcart .mc-promo:first-child .header').click();
+
+    var cardNumber = jQuery('#inputCardNumber'),
+        existingCvv = jQuery('#inputCardCVV2');
+    if (cardNumber.length) {
+        cardNumber.payment('formatCardNumber');
+        jQuery('#inputCardCVV').payment('formatCardCVC');
+        jQuery('#inputCardStart').payment('formatCardExpiry');
+        jQuery('#inputCardExpiry').payment('formatCardExpiry');
+    }
+    if (existingCvv.length) {
+        existingCvv.payment('formatCardCVC');
+    }
+
+    var $orderSummaryEl = jQuery("#orderSummary");
+    if ($orderSummaryEl.length) {
+        var offset = jQuery("#scrollingPanelContainer").parent('.row').offset();
+        var maxTopOffset = jQuery("#scrollingPanelContainer").parent('.row').outerHeight() - 35;
+        var topPadding = 15;
+        jQuery(window).resize(function() {
+            offset = jQuery("#scrollingPanelContainer").parent('.row').offset();
+            maxTopOffset = jQuery("#scrollingPanelContainer").parent('.row').outerHeight() - 35;
+            repositionScrollingSidebar();
+        });
+        jQuery(window).scroll(function() {
+            repositionScrollingSidebar();
+        });
+        repositionScrollingSidebar();
+    }
+
+    function repositionScrollingSidebar() {
+        if (jQuery('#scrollingPanelContainer').css('float') === 'none') {
+            $orderSummaryEl.stop().css('margin-top', '0');
+            return false;
+        }
+        var heightOfOrderSummary =  $orderSummaryEl.outerHeight();
+        var offsetTop = 0;
+        if (typeof offset !== "undefined") {
+            offsetTop = offset.top;
+        }
+        var newTopOffset = jQuery(window).scrollTop() - offsetTop + topPadding;
+        if (newTopOffset > maxTopOffset - heightOfOrderSummary) {
+            newTopOffset = maxTopOffset - heightOfOrderSummary;
+        }
+        if (jQuery(window).scrollTop() > offsetTop) {
+            $orderSummaryEl.stop().animate({
+                marginTop: newTopOffset
+            });
+        } else {
+            $orderSummaryEl.stop().animate({
+                marginTop: 0
+            });
+        }
+    }
+
+    jQuery("#frmConfigureProduct").submit(function(e) {
+        e.preventDefault();
+
+        var button = jQuery('#btnCompleteProductConfig');
+
+        var btnOriginalText = jQuery(button).html();
+        jQuery(button).find('i').removeClass('fa-arrow-circle-right').addClass('fa-spinner fa-spin');
+        WHMCS.http.jqClient.post("cart.php", 'ajax=1&a=confproduct&' + jQuery("#frmConfigureProduct").serialize(),
+            function(data) {
+                if (data) {
+                    jQuery("#btnCompleteProductConfig").html(btnOriginalText);
+                    jQuery("#containerProductValidationErrorsList").html(data);
+                    jQuery("#containerProductValidationErrors").show();
+                    // scroll to error container if below it
+                    if (jQuery(window).scrollTop() > jQuery("#containerProductValidationErrors").offset().top) {
+                        jQuery('html, body').scrollTop(jQuery("#containerProductValidationErrors").offset().top - 15);
+                    }
+                } else {
+                    window.location = 'cart.php?a=confdomains';
+                }
+            }
+        );
+    });
+
+    jQuery("#productConfigurableOptions").on('ifChecked', 'input', function() {
+        recalctotals();
+    });
+    jQuery("#productConfigurableOptions").on('ifUnchecked', 'input', function() {
+        recalctotals();
+    });
+    jQuery("#productConfigurableOptions").on('change', 'select', function() {
+        recalctotals();
+    });
+
+    jQuery(".addon-products").on('click', '.panel-addon', function(e) {
+        e.preventDefault();
+        var $activeAddon = jQuery(this);
+        if ($activeAddon.hasClass('panel-addon-selected')) {
+            $activeAddon.find('input[type="checkbox"]').iCheck('uncheck');
+        } else {
+            $activeAddon.find('input[type="checkbox"]').iCheck('check');
+        }
+    });
+    jQuery(".addon-products").on('ifChecked', '.panel-addon input', function(event) {
+        var $activeAddon = jQuery(this).parents('.panel-addon');
+        $activeAddon.addClass('panel-addon-selected');
+        $activeAddon.find('input[type="checkbox"]').iCheck('check');
+        $activeAddon.find('.panel-add').html('<i class="fas fa-shopping-cart"></i> '+localTrans('addedToCartRemove', 'Added to Cart (Remove)'));
+        recalctotals();
+    });
+    jQuery(".addon-products").on('ifUnchecked', '.panel-addon input', function(event) {
+        var $activeAddon = jQuery(this).parents('.panel-addon');
+        $activeAddon.removeClass('panel-addon-selected');
+        $activeAddon.find('input[type="checkbox"]').iCheck('uncheck');
+        $activeAddon.find('.panel-add').html('<i class="fas fa-plus"></i> '+localTrans('addToCart', 'Add to Cart'));
+        recalctotals();
+    });
+
+    jQuery("#frmConfigureProduct").on('ifChecked', '.addon-selector', function(event) {
+        recalctotals();
+    });
+
+    if (jQuery(".domain-selection-options input:checked").length == 0) {
+        var firstInput = jQuery(".domain-selection-options input:first");
+
+        jQuery(firstInput).iCheck('check');
+        jQuery(firstInput).parents('.option').addClass('option-selected');
+    }
+    jQuery("#domain" + jQuery(".domain-selection-options input:checked").val()).show();
+    jQuery(".domain-selection-options input").on('ifChecked', function(event){
+        jQuery(".domain-selection-options .option").removeClass('option-selected');
+        jQuery(this).parents('.option').addClass('option-selected');
+        jQuery(".domain-input-group").hide();
+        jQuery("#domain" + jQuery(this).val()).show();
+    });
+
+    jQuery('#frmProductDomain').submit(function (e) {
+        e.preventDefault();
+
+        var btnSearchObj = jQuery(this).find('button[type="submit"]'),
+            domainSearchResults = jQuery("#DomainSearchResults"),
+            spotlightTlds = jQuery('#spotlightTlds'),
+            suggestions = jQuery('#domainSuggestions'),
+            btnDomainContinue = jQuery('#btnDomainContinue'),
+            domainoption = jQuery(".domain-selection-options input:checked").val(),
+            sldInput = jQuery("#" + domainoption + "sld"),
+            sld = sldInput.val(),
+            tld = '',
+            pid = jQuery('#frmProductDomainPid').val(),
+            tldInput = '',
+            idnLanguage = jQuery('#idnLanguageSelector');
+
+        jQuery('.field-error-msg').hide();
+
+        if (idnLanguage.is(':visible')) {
+            idnLanguage.slideUp();
+            idnLanguage.find('select').val('');
+        }
+
+        if (domainoption == 'incart') {
+            sldInput = jQuery("#" + domainoption + "sld option:selected");
+            sld = sldInput.text();
+        } else if (domainoption == 'subdomain') {
+            tldInput = jQuery("#" + domainoption + "tld option:selected");
+            tld = tldInput.text();
+        } else {
+            tldInput = jQuery("#" + domainoption + "tld");
+            tld = tldInput.val();
+            if (sld && !tld) {
+                tldInput.tooltip('show');
+                tldInput.focus();
+                return false;
+            }
+            if (tld.substr(0, 1) != '.') {
+                tld = '.' + tld;
+            }
+        }
+        if (!sld) {
+            sldInput.tooltip('show');
+            sldInput.focus();
+            return false;
+        }
+
+        sldInput.tooltip('hide');
+        if (tldInput.length) {
+            tldInput.tooltip('hide');
+        }
+
+        jQuery('input[name="domainoption"]').iCheck('disable');
+        domainLookupCallCount = 0;
+        btnSearchObj.attr('disabled', 'disabled').addClass('disabled');
+
+        jQuery('.domain-lookup-result').hide();
+        jQuery('#primaryLookupResult div').filter(function() {
+            return $(this).closest('#idnLanguageSelector').length === 0;
+        }).hide();
+        jQuery('#primaryLookupResult').find('.register-price-label').show().end()
+            .find('.transfer-price-label').hide();
+
+        jQuery('.domain-lookup-register-loader').hide();
+        jQuery('.domain-lookup-transfer-loader').hide();
+        jQuery('.domain-lookup-other-loader').hide();
+        if (domainoption == 'register') {
+            jQuery('.domain-lookup-register-loader').show();
+        } else if (domainoption == 'transfer') {
+            jQuery('.domain-lookup-transfer-loader').show();
+        } else {
+            jQuery('.domain-lookup-other-loader').show();
+        }
+
+        jQuery('.domain-lookup-loader').show();
+        suggestions.find('div:not(.actions)').hide().end()
+            .find('.clone').remove();
+        jQuery('div.panel-footer.more-suggestions').hide()
+            .find('a').show().end()
+            .find('span.no-more').hide();
+        jQuery('.btn-add-to-cart').removeAttr('disabled')
+            .find('span').hide().end()
+            .find('span.to-add').show();
+        btnDomainContinue.hide().attr('disabled', 'disabled');
+
+        if (domainoption != 'register') {
+            spotlightTlds.hide();
+            jQuery('.suggested-domains').hide();
+        }
+
+        if (!domainSearchResults.is(":visible")) {
+            domainSearchResults.fadeIn();
+        }
+
+        if (domainoption == 'register') {
+            spotlightTlds.fadeIn('fast');
+            jQuery('#resultDomainOption').val(domainoption);
+            var lookup = WHMCS.http.jqClient.post(
+                    WHMCS.utils.getRouteUrl('/domain/check'),
+                    {
+                        token: csrfToken,
+                        type: 'domain',
+                        domain: sld + tld,
+                        sld: sld,
+                        tld: tld,
+                        source: 'cartAddDomain'
+                    },
+                    'json'
+                ),
+                spotlight = WHMCS.http.jqClient.post(
+                    WHMCS.utils.getRouteUrl('/domain/check'),
+                    {
+                        token: csrfToken,
+                        type: 'spotlight',
+                        domain: sld + tld,
+                        sld: sld,
+                        tld: tld,
+                        source: 'cartAddDomain'
+                    },
+                    'json'
+                ),
+                suggestion = WHMCS.http.jqClient.post(
+                    WHMCS.utils.getRouteUrl('/domain/check'),
+                    {
+                        token: csrfToken,
+                        type: 'suggestions',
+                        domain: sld + tld,
+                        sld: sld,
+                        tld: tld,
+                        source: 'cartAddDomain'
+                    },
+                    'json'
+                );
+
+            // primary lookup handler
+            lookup.done(function (data) {
+                jQuery.each(data.result, function(index, domain) {
+                    var pricing = null,
+                        result = jQuery('#primaryLookupResult'),
+                        available = result.find('.domain-available'),
+                        availablePrice = result.find('.domain-price'),
+                        unavailable = result.find('.domain-unavailable'),
+                        invalid= result.find('.domain-invalid'),
+                        contactSupport = result.find('.domain-contact-support'),
+                        resultDomain = jQuery('#resultDomain'),
+                        resultDomainPricing = jQuery('#resultDomainPricingTerm'),
+                        error = result.find('.domain-error');
+                    result.show();
+                    jQuery('.domain-lookup-primary-loader').hide();
+                    if (typeof domain !== 'string' && !domain.error && domain.isValidDomain) {
+                        error.hide();
+                        pricing = domain.pricing;
+                        if (domain.isAvailable && typeof pricing !== 'string') {
+                            if (domain.domainName !== domain.idnDomainName && idnLanguage.not(':visible')) {
+                                idnLanguage.slideDown();
+                            }
+                            if (domain.preferredTLDNotAvailable) {
+                                unavailable.show().find('strong').html(domain.originalUnavailableDomain);
+                            }
+                            contactSupport.hide();
+                            available.show().find('strong').html(domain.domainName);
+                            availablePrice.show().find('span.price').html(pricing[Object.keys(pricing)[0]].register).end()
+                                .find('button').attr('data-domain', domain.domainName);
+                            resultDomain.val(domain.domainName);
+                            resultDomainPricing.val(Object.keys(pricing)[0]).attr('name', 'domainsregperiod[' + domain.domainName +']');
+
+                            btnDomainContinue.removeAttr('disabled');
+                        } else {
+                            unavailable.show().find('strong').html(domain.domainName);
+                            contactSupport.hide();
+                            if (typeof pricing === 'string' && pricing == 'ContactUs') {
+                                contactSupport.show();
+                            }
+                        }
+                    } else {
+                        var done = false,
+                            reg = /<br\s*\/>/,
+                            errors = [];
+                        if (!domain.isValidDomain && domain.domainErrorMessage) {
+                            invalid.text(domain.domainErrorMessage);
+                        } else if (domain.error || index === 'error') {
+                            if (typeof domain === 'string') {
+                                error.text(domain);
+                            } else if (!domain.error.match(reg)) {
+                                error.text(domain.error);
+                            } else {
+                                error.text('');
+                                errors = domain.error.split(reg);
+                                for(var i=0; i < errors.length; i++) {
+                                    var errorMsg = errors[i];
+                                    if (errorMsg.length) {
+                                        if (error.text()) {
+                                            // only add line break if there is
+                                            // multiple lines of text
+                                            error.append('<br />');
+                                        }
+                                        error.append(jQuery('<span></span>').text(errorMsg));
+                                    }
+                                }
+                            }
+                            error.show();
+                            done = true;
+                        }
+                        if (!done) {
+                            invalid.show();
+                        }
+                    }
+                });
+            }).always(function() {
+                hasProductDomainLookupEnded(3, btnSearchObj);
+            });
+
+            // spotlight lookup handler
+            spotlight.done(function(data) {
+                if (typeof data != 'object' || data.result.length == 0 || data.result.error) {
+                    jQuery('.domain-lookup-spotlight-loader').hide();
+                    return;
+                }
+                jQuery.each(data.result, function(index, domain) {
+                    var tld = domain.tldNoDots,
+                        pricing = domain.pricing,
+                        result = jQuery('#spotlight' + tld + ' .domain-lookup-result');
+                    jQuery('.domain-lookup-spotlight-loader').hide();
+                    result.find('button').hide();
+                    if (domain.isValidDomain) {
+                        if (domain.isAvailable && typeof pricing !== 'string') {
+                            if (domain.domainName !== domain.idnDomainName && idnLanguage.not(':visible')) {
+                                idnLanguage.slideDown();
+                            }
+                            result
+                                .find('span.available').html(pricing[Object.keys(pricing)[0]].register).show().end()
+                                .find('button.btn-add-to-cart')
+                                .attr('data-domain', domain.domainName)
+                                .show();
+
+                            result.find('button.domain-contact-support').hide();
+                        } else {
+                            if (typeof pricing === 'string') {
+                                if (pricing == '') {
+                                    result.find('button.unavailable').show();
+                                } else {
+                                    result.find('button.domain-contact-support').show();
+                                }
+                                result.find('span.available').hide();
+                            } else {
+                                result.find('button.unavailable').show();
+                                result.find('span.available').hide();
+                            }
+                        }
+                    } else {
+                        result.find('button.invalid:hidden').show().end()
+                            .find('span.available').hide().end()
+                            .find('button').not('button.invalid').hide();
+                    }
+                    result.show();
+                });
+            }).always(function() {
+                hasProductDomainLookupEnded(3, btnSearchObj);
+            });
+
+            // suggestions lookup handler
+            suggestion.done(function (data) {
+                if (typeof data != 'object' || data.result.length == 0 || data.result.error) {
+                    jQuery('.suggested-domains').fadeOut('fast', function() {
+                        jQuery(this).hide();
+                    });
+                    return;
+                } else {
+                    jQuery('.suggested-domains').show();
+                }
+                var suggestionCount = 1;
+                jQuery.each(data.result, function(index, domain) {
+                    var tld = domain.tld,
+                        pricing = domain.pricing;
+                    suggestions.find('div:first').clone(true, true).appendTo(suggestions);
+                    var newSuggestion = suggestions.find('div.domain-suggestion').last();
+                    newSuggestion.addClass('clone')
+                        .find('span.domain').html(domain.sld).end()
+                        .find('span.extension').html('.' + tld);
+                    if (domain.domainName !== domain.idnDomainName && idnLanguage.not(':visible')) {
+                        idnLanguage.slideDown();
+                    }
+                    if (typeof pricing === 'string') {
+                        newSuggestion.find('button.btn-add-to-cart').remove();
+                        if (pricing != '') {
+                            newSuggestion.find('button.domain-contact-support').show().end()
+                                .find('span.price').hide();
+                        } else {
+                            newSuggestion.remove();
+                        }
+                    } else {
+                        newSuggestion.find('button.btn-add-to-cart').attr('data-domain', domain.domainName).end()
+                            .find('span.price').html(pricing[Object.keys(pricing)[0]].register);
+                    }
+
+                    if (suggestionCount <= 10) {
+                        newSuggestion.show();
+                    }
+                    suggestionCount++;
+                    if (domain.group) {
+                        newSuggestion.find('span.promo')
+                            .addClass(domain.group)
+                            .html(domain.group.toUpperCase())
+                            .show();
+                    }
+                    furtherSuggestions = suggestions.find('div.domain-suggestion.clone').not(':visible').length;
+                    if (furtherSuggestions > 0) {
+                        jQuery('div.more-suggestions').show();
+                    }
+                });
+                jQuery('.domain-lookup-suggestions-loader').hide();
+                jQuery('#domainSuggestions').show();
+            }).always(function() {
+                hasProductDomainLookupEnded(3, btnSearchObj);
+            });
+        } else if (domainoption == 'transfer') {
+            jQuery('#resultDomainOption').val(domainoption);
+            var transfer = WHMCS.http.jqClient.post(
+                WHMCS.utils.getRouteUrl('/domain/check'),
+                {
+                    token: csrfToken,
+                    type: 'transfer',
+                    domain: sld + tld,
+                    sld: sld,
+                    tld: tld,
+                    source: 'cartAddDomain'
+                },
+                'json'
+            );
+
+            transfer.done(function (data) {
+                if (typeof data != 'object' || data.result.length == 0) {
+                    jQuery('.domain-lookup-primary-loader').hide();
+                    return;
+                }
+                var result = jQuery('#primaryLookupResult'),
+                    transfereligible = result.find('.transfer-eligible'),
+                    transferPrice = result.find('.domain-price'),
+                    transfernoteligible = result.find('.transfer-not-eligible'),
+                    resultDomain = jQuery('#resultDomain'),
+                    resultDomainPricing = jQuery('#resultDomainPricingTerm');
+                if (Object.keys(data.result).length === 0) {
+                    jQuery('.domain-lookup-primary-loader').hide();
+                    result.show();
+                    transfernoteligible.show();
+                }
+                jQuery.each(data.result, function(index, domain) {
+                    var pricing = domain.pricing;
+                    jQuery('.domain-lookup-primary-loader').hide();
+                    result.show();
+                    if (domain.isRegistered) {
+                        transfereligible.show();
+                        transferPrice.show().find('.register-price-label').hide().end()
+                            .find('.transfer-price-label').show().end()
+                            .find('span.price').html(pricing[Object.keys(pricing)[0]].transfer).end()
+                            .find('button').attr('data-domain', domain.domainName);
+                        resultDomain.val(domain.domainName);
+                        resultDomainPricing.val(Object.keys(pricing)[0]).attr('name', 'domainsregperiod[' + domain.domainName +']');
+                        btnDomainContinue.removeAttr('disabled');
+                    } else {
+                        transfernoteligible.show();
+                    }
+                });
+            }).always(function() {
+                hasProductDomainLookupEnded(1, btnSearchObj);
+            });
+        } else if (domainoption == 'owndomain' || domainoption == 'subdomain' || domainoption == 'incart') {
+
+            var otherDomain = WHMCS.http.jqClient.post(
+                WHMCS.utils.getRouteUrl('/domain/check'),
+                {
+                    token: csrfToken,
+                    type: domainoption,
+                    pid: pid,
+                    domain: sld + tld,
+                    sld: sld,
+                    tld: tld,
+                    source: 'cartAddDomain'
+                },
+                'json'
+            );
+
+            otherDomain.done(function(data) {
+                if (typeof data != 'object' || data.result.length == 0) {
+                    jQuery('.domain-lookup-subdomain-loader').hide();
+                    return;
+                }
+                jQuery.each(data.result, function(index, result) {
+                    if (result.status === true) {
+                        window.location = 'cart.php?a=confproduct&i=' + result.num;
+                    } else {
+                        jQuery('.domain-lookup-primary-loader').hide();
+                        if (typeof result === 'string') {
+                            jQuery('#primaryLookupResult').show().find('.domain-error')
+                                .text(result)
+                                .show();
+                        } else {
+                            jQuery('#primaryLookupResult').show().find('.domain-invalid').show();
+                        }
+                    }
+                });
+
+            }).always(function(){
+                hasProductDomainLookupEnded(1, btnSearchObj);
+            });
+        }
+
+        btnDomainContinue.show();
+    });
+
+    jQuery('#frmProductDomainSelections').on('submit', function(e) {
+        var idnLanguage = jQuery('#idnLanguageSelector'),
+            idnLanguageInput = idnLanguage.find('select');
+
+        if (!idnLanguage.not(':visible') && !idnLanguageInput.val()) {
+            e.preventDefault();
+            idnLanguageInput.showInputError();
+            return false;
+        }
+        return true;
+    });
+
+    jQuery("#btnAlreadyRegistered").click(function() {
+        jQuery("#containerNewUserSignup").slideUp('', function() {
+            jQuery("#containerExistingUserSignin").slideDown('', function() {
+                jQuery("#inputCustType").val('existing');
+                jQuery("#btnAlreadyRegistered").fadeOut('', function() {
+                    jQuery("#btnNewUserSignup").fadeIn();
+                });
+            });
+        });
+        jQuery("#containerNewUserSecurity").hide();
+        if (jQuery("#stateselect").attr('required')) {
+            jQuery("#stateselect").removeAttr('required').addClass('requiredAttributeRemoved');
+        }
+        jQuery('.marketing-email-optin').slideUp();
+    });
+
+    jQuery("#btnNewUserSignup").click(function() {
+        jQuery("#containerExistingUserSignin").slideUp('', function() {
+            jQuery("#containerNewUserSignup").slideDown('', function() {
+                jQuery("#inputCustType").val('new');
+                if (jQuery("#passwdFeedback").html().length == 0) {
+                    jQuery("#containerNewUserSecurity").show();
+                }
+                jQuery("#btnNewUserSignup").fadeOut('', function() {
+                    jQuery("#btnAlreadyRegistered").fadeIn();
+                });
+            });
+            jQuery('.marketing-email-optin').slideDown();
+        });
+        if (jQuery("#stateselect").hasClass('requiredAttributeRemoved')) {
+            jQuery("#stateselect").attr('required', 'required').removeClass('requiredAttributeRemoved');
+        }
+    });
+
+    jQuery("#btnExistingLogin").click(function() {
+        var inputLoginEmail = jQuery('#inputLoginEmail').val(),
+            inputLoginPassword = jQuery('#inputLoginPassword').val(),
+            existingLoginMessage = jQuery('#existingLoginMessage'),
+            btnExistingLogin = jQuery('#btnExistingLogin');
+
+        btnExistingLogin.prop('disabled', true)
+            .addClass('disabled')
+            .find('span').toggle();
+
+        WHMCS.http.jqClient.jsonPost({
+            url: WHMCS.utils.getRouteUrl('/login/cart'),
+            data: {
+                username: inputLoginEmail,
+                password: inputLoginPassword,
+                token: csrfToken
+            },
+            success: function (data) {
+                if (!data.redirectUrl) {
+                    location.reload(true);
+                } else {
+                    window.location.href = data.redirectUrl;
+                }
+            },
+            error: function (error) {
+                if (error) {
+                    existingLoginMessage.slideUp('fast')
+                        .toggle()
+                        .html(error)
+                        .slideDown('fast');
+                    btnExistingLogin.prop('disabled', false)
+                        .removeClass('disabled')
+                        .find('span').toggle();
+                }
+            }
+        });
+    });
+
+    jQuery('.account-select').on('ifChecked', function(event) {
+        var userSignupContainer = jQuery('#containerNewUserSignup'),
+            stateSelect = jQuery("#stateselect"),
+            thisValue = jQuery(this).val(),
+            btnCompleteOrder = jQuery('#btnCompleteOrder'),
+            existingPayMethods = jQuery('#existingCardsContainer'),
+            existingUserEmail = jQuery('#inputEmail');
+
+        if (existingPayMethods.length) {
+            existingPayMethods.html('');
+        }
+
+        if (existingUserEmail.length) {
+            existingUserEmail.attr('value', '');
+        }
+        jQuery('#containerExistingAccountSelect')
+            .find('div.account.active')
+            .removeClass('active');
+        jQuery(this).closest('div.account').addClass('active');
+        if (thisValue === 'new') {
+            if (userSignupContainer.not(':visible')) {
+                userSignupContainer.slideDown('', function () {
+                    jQuery("#inputCustType").val('add');
+                    jQuery('.marketing-email-optin').slideDown();
+                });
+                if (stateSelect.hasClass('requiredAttributeRemoved')) {
+                    stateSelect.attr('required', 'required')
+                        .removeClass('requiredAttributeRemoved');
+                }
+            }
+        } else {
+            btnCompleteOrder.addClass('disabled');
+
+            if (btnCompleteOrder.hasClass('spinner-on-click')) {
+                var icon = btnCompleteOrder.find('i.fas,i.far,i.fal,i.fab');
+
+                jQuery(icon)
+                    .data('original-class', icon.attr('class'))
+                    .removeAttr('class')
+                    .addClass('fas fa-spinner fa-spin');
+            }
+
+            jQuery("#inputCustType").val('account');
+            if (userSignupContainer.is(':visible')) {
+                userSignupContainer.slideUp();
+                if (stateSelect.attr('required')) {
+                    stateSelect.removeAttr('required')
+                        .addClass('requiredAttributeRemoved');
+                }
+                jQuery('.marketing-email-optin').slideUp();
+            }
+        }
+        WHMCS.http.jqClient.jsonPost({
+            url: WHMCS.utils.getRouteUrl('/cart/account/select'),
+            data: {
+                account_id: thisValue,
+                token: csrfToken
+            },
+            success: function(data) {
+                var creditDiv = jQuery('#applyCreditContainer');
+                jQuery('#totalCartPrice').text(data.total);
+                creditDiv.find('p').first().text(data.availableCreditBalance);
+                if (!data.canUseCreditOnCheckout && creditDiv.is(':visible')) {
+                    var skipCreditOnCheckout = jQuery('#skipCreditOnCheckout');
+                    creditDiv.hide();
+                    skipCreditOnCheckout.prop('checked', true);
+                } else if (data.canUseCreditOnCheckout) {
+                    var useCreditOnCheckout = jQuery('#useCreditOnCheckout'),
+                        spanFullCredit = jQuery('#spanFullCredit'),
+                        spanUseCredit = jQuery('#spanUseCredit');
+                    if (data.full) {
+                        spanFullCredit.show().find('span').text(data.creditBalance);
+                        if (spanUseCredit.is(':visible')) {
+                            spanUseCredit.slideDown();
+                        }
+                    } else {
+                        spanUseCredit.show().find('span').text(data.creditBalance);
+                        if (spanFullCredit.is(':visible')) {
+                            spanFullCredit.slideUp();
+                        }
+                    }
+                    useCreditOnCheckout.iCheck('check');
+                    if (creditDiv.not(':visible')) {
+                        creditDiv.slideDown();
+                    }
+                }
+                if (existingPayMethods.length) {
+                    existingPayMethods.html(data.existingCards);
+                    existingPayMethods.find('input[type="radio"]').iCheck({
+                        inheritID: true,
+                        checkboxClass: 'icheckbox_square-blue',
+                        radioClass: 'iradio_square-blue',
+                        increaseArea: '20%'
+                    });
+                    var firstVisible = jQuery('input[name="ccinfo"]:visible').first();
+                    if (firstVisible.length) {
+                        firstVisible.iCheck('check');
+                    }
+                }
+            },
+            always: function() {
+                btnCompleteOrder.removeClass('disabled');
+                if (btnCompleteOrder.hasClass('spinner-on-click')) {
+                    var icon = btnCompleteOrder.find('i.fas,i.far,i.fal,i.fab');
+
+                    if (jQuery(icon).hasClass('fa-spinner')) {
+                        jQuery(icon)
+                            .removeAttr('class')
+                            .addClass(icon.data('original-class'));
+                    }
+                }
+            }
+        });
+    });
+
+    var existingCards = jQuery(document).find('.existing-card'),
+        cvvFieldContainer = jQuery('#cvv-field-container'),
+        existingCardContainer = jQuery('#existingCardsContainer'),
+        newCardInfo = jQuery('#newCardInfo'),
+        newCardSaveSettings = jQuery('#newCardSaveSettings'),
+        inputNoStoreContainer = jQuery('#inputNoStoreContainer'),
+        existingCardInfo = jQuery('#existingCardInfo'),
+        newCardOption = jQuery('#new'),
+        creditCardInputFields = jQuery('#creditCardInputFields');
+
+    jQuery(document).on('ifChecked', '.existing-card', function(event) {
+        newCardSaveSettings.slideUp().find('input').attr('disabled', 'disabled');
+        if (jQuery('.payment-methods:checked').data('remote-inputs') === 1) {
+            return;
+        }
+
+        newCardInfo.slideUp().find('input').attr('disabled', 'disabled');
+        existingCardInfo.slideDown().find('input').removeAttr('disabled');
+    });
+    newCardOption.on('ifChecked', function(event) {
+        newCardSaveSettings.slideDown().find('input').removeAttr('disabled');
+        if (jQuery('.payment-methods:checked').data('remote-inputs') === 1) {
+            return;
+        }
+
+        newCardInfo.slideDown().find('input').removeAttr('disabled');
+        existingCardInfo.slideUp().find('input').attr('disabled', 'disabled');
+    });
+
+    if (!existingCards.length) {
+        existingCardInfo.slideUp().find('input').attr('disabled', 'disabled');
+    }
+
+    jQuery(".payment-methods").on('ifChecked', function(event) {
+        if (jQuery(this).hasClass('is-credit-card')) {
+            var gatewayPaymentType = jQuery(this).data('payment-type'),
+                gatewayModule = jQuery(this).val(),
+                showLocal = jQuery(this).data('show-local'),
+                relevantMethods = [];
+            if (gatewayPaymentType === 'RemoteCreditCard') {
+                inputNoStoreContainer.hide().find('input').prop('disabled', 'disabled');
+            } else {
+                if (inputNoStoreContainer.not(':visible')) {
+                    inputNoStoreContainer.slideDown().find('input').removeProp('disabled');
+                }
+            }
+
+            existingCards.each(function(index) {
+                var paymentType = jQuery(this).data('payment-type'),
+                    paymentModule = jQuery(this).data('payment-gateway'),
+                    payMethodId = jQuery(this).val();
+
+                var paymentTypeMatch = (paymentType === gatewayPaymentType);
+
+                var paymentModuleMatch = false;
+                if (gatewayPaymentType === 'RemoteCreditCard') {
+                    // only show remote credit cards that belong to the selected gateway
+                    paymentModuleMatch = (paymentModule === gatewayModule);
+                } else if (gatewayPaymentType === 'CreditCard') {
+                    // any local credit card can be used with any credit card gateway
+                    paymentModuleMatch = true;
+                }
+
+                if (showLocal && paymentType === 'CreditCard') {
+                    paymentTypeMatch = true;
+                    paymentModuleMatch = true;
+                }
+
+                var payMethodElements = jQuery('[data-paymethod-id="' + payMethodId + '"]');
+
+                if (paymentTypeMatch && paymentModuleMatch) {
+                    jQuery(payMethodElements).show();
+                    relevantMethods.push(this);
+                } else {
+                    jQuery(payMethodElements).hide();
+                }
+            });
+
+            var enabledRelevantMethods = relevantMethods.filter(function (item) {
+                return ! jQuery(item).attr('disabled');
+            });
+
+            if (enabledRelevantMethods.length > 0) {
+                var defaultId = null;
+                jQuery.each(enabledRelevantMethods, function(index, value) {
+                    var jQueryElement = jQuery(value),
+                        order = parseInt(jQueryElement.data('order-preference'), 10);
+                    if ((defaultId === null) || (order < defaultId)) {
+                        defaultId = jQueryElement.val();
+                        if (order === 0) {
+                            return false;
+                        }
+                    }
+                });
+                if (defaultId === null) {
+                    defaultId = 'new';
+                }
+
+                jQuery.each(enabledRelevantMethods, function(index, value) {
+                    var jQueryElement = jQuery(value);
+                    if (jQueryElement.val() === defaultId) {
+                        jQueryElement.iCheck('check');
+                        return false;
+                    }
+                });
+
+                existingCardContainer.show();
+                existingCardInfo.show().find('input').removeAttr('disabled');
+            } else {
+                jQuery(newCardOption).iCheck('check');
+                existingCardContainer.hide();
+                existingCardInfo.hide().find('input').attr('disabled', 'disabled');
+            }
+
+            if (!creditCardInputFields.is(":visible")) {
+                creditCardInputFields.slideDown();
+            }
+        } else {
+            creditCardInputFields.slideUp();
+        }
+    });
+
+    // make sure relevant payment methods are displayed for the pre-selected gateway
+    jQuery(".payment-methods:checked").trigger('ifChecked');
+
+    jQuery('.cc-input-container .paymethod-info').click(function() {
+        var payMethodId = $(this).data('paymethod-id');
+        var input = jQuery('input[name="ccinfo"][value=' + payMethodId + ']:not(:disabled)');
+
+        if (input.length > 0) {
+            input.iCheck('check');
+        }
+    });
+
+    jQuery("#inputDomainContact").on('change', function() {
+        var thisInput = jQuery(this);
+        if (this.value === "addingnew") {
+            thisInput.closest('div').addClass('pb-2');
+            jQuery("#domainRegistrantInputFields").parent('div').slideDown();
+        } else {
+            jQuery("#domainRegistrantInputFields").parent('div').slideUp(function () {
+                thisInput.closest('div').removeClass('pb-2');
+            });
+        }
+    });
+
+    if (typeof registerFormPasswordStrengthFeedback == 'function') {
+        jQuery("#inputNewPassword1").keyup(registerFormPasswordStrengthFeedback);
+    } else {
+        jQuery("#inputNewPassword1").keyup(function ()
+        {
+            passwordStrength = getPasswordStrength(jQuery(this).val());
+            if (passwordStrength >= 75) {
+                textLabel = langPasswordStrong;
+                cssClass = 'success';
+            } else
+                if (passwordStrength >= 30) {
+                    textLabel = langPasswordModerate;
+                    cssClass = 'warning';
+                } else {
+                    textLabel = langPasswordWeak;
+                    cssClass = 'danger';
+                }
+            jQuery("#passwordStrengthTextLabel").html(langPasswordStrength + ': ' + passwordStrength + '% ' + textLabel);
+            jQuery("#passwordStrengthMeterBar").css(
+                'width',
+                passwordStrength + '%'
+            ).attr('aria-valuenow', passwordStrength);
+            jQuery("#passwordStrengthMeterBar").removeClass(
+                'progress-bar-success progress-bar-warning progress-bar-danger').addClass(
+                'progress-bar-' + cssClass);
+        });
+    }
+
+    jQuery('#inputDomain').on('shown.bs.tooltip', function () {
+        setTimeout(function(input) {
+            input.tooltip('hide');
+        },
+            5000,
+            jQuery(this)
+        );
+    });
+
+    jQuery('#frmDomainChecker').submit(function (e) {
+        e.preventDefault();
+
+        var frmDomain = jQuery('#frmDomainChecker'),
+            inputDomain = jQuery('#inputDomain'),
+            suggestions = jQuery('#domainSuggestions'),
+            reCaptchaContainer = jQuery('#divDynamicRecaptcha'),
+            captcha = jQuery('#inputCaptcha'),
+            idnLanguage = jQuery('#idnLanguageSelector');
+
+        jQuery('.field-error-msg').hide();
+
+        if (idnLanguage.is(':visible')) {
+            idnLanguage.slideUp();
+            idnLanguage.find('select').val('');
+        }
+
+        domainLookupCallCount = 0;
+
+        // check a domain has been entered
+        if (!inputDomain.val()) {
+            inputDomain.tooltip('show');
+            inputDomain.focus();
+            return;
+        }
+
+        inputDomain.tooltip('hide');
+
+        if (jQuery('#captchaContainer').length) {
+            validate_captcha(frmDomain);
+            return;
+        }
+
+        reCaptchaContainer.tooltip('hide');
+        captcha.tooltip('hide');
+
+        // disable repeat submit and show loader
+        jQuery('#btnCheckAvailability').attr('disabled', 'disabled').addClass('disabled');
+        jQuery('.domain-lookup-result').hide();
+        jQuery('.domain-lookup-loader').show();
+
+        // reset elements
+        suggestions.find('div:not(.actions)').hide();
+        suggestions.find('.clone').remove();
+        jQuery('div.panel-footer.more-suggestions').hide()
+            .find('a').show().end()
+            .find('span.no-more').hide();
+        jQuery('.btn-add-to-cart').removeAttr('disabled')
+            .find('span').hide().end()
+            .find('span.to-add').show();
+
+        // fade in results
+        if (jQuery('#DomainSearchResults').not(":visible")) {
+            jQuery('.domain-pricing').fadeOut('fast', function() {
+                jQuery('#DomainSearchResults').fadeIn();
+            });
+
+        }
+
+        var lookup = WHMCS.http.jqClient.post(
+                WHMCS.utils.getRouteUrl('/domain/check'),
+                frmDomain.serialize() + '&type=domain',
+                'json'
+            ),
+            spotlight = WHMCS.http.jqClient.post(
+                WHMCS.utils.getRouteUrl('/domain/check'),
+                frmDomain.serialize() + '&type=spotlight',
+                'json'
+            ),
+            suggestion = WHMCS.http.jqClient.post(
+                WHMCS.utils.getRouteUrl('/domain/check'),
+                frmDomain.serialize() + '&type=suggestions',
+                'json'
+            );
+
+        // primary lookup handler
+        lookup.done(function (data) {
+            if (typeof data != 'object' || data.result.length == 0) {
+                jQuery('.domain-lookup-primary-loader').hide();
+                return;
+            }
+            jQuery.each(data.result, function(index, domain) {
+                var pricing = null,
+                    result = jQuery('#primaryLookupResult'),
+                    available = result.find('.domain-available'),
+                    availablePrice = result.find('.domain-price'),
+                    contactSupport = result.find('.domain-contact-support'),
+                    unavailable = result.find('.domain-unavailable'),
+                    invalid = result.find('.domain-invalid'),
+                    error = result.find('.domain-error');
+                jQuery('.domain-lookup-primary-loader').hide();
+                result.find('.btn-add-to-cart').removeClass('checkout');
+                result.show();
+                if (typeof domain !== 'string' && !domain.error && domain.isValidDomain) {
+                    pricing = domain.pricing;
+                    unavailable.hide();
+                    contactSupport.hide();
+                    invalid.hide();
+                    error.hide();
+                    if (domain.isAvailable && typeof pricing !== 'string') {
+                        if (domain.domainName !== domain.idnDomainName && idnLanguage.not(':visible')) {
+                            idnLanguage.slideDown();
+                        }
+                        if (domain.preferredTLDNotAvailable) {
+                            unavailable.show().find('strong').html(domain.originalUnavailableDomain);
+                        }
+                        available.show().find('strong').html(domain.domainName);
+                        availablePrice.show().find('span.price').html(pricing[Object.keys(pricing)[0]].register).end()
+                            .find('button').attr('data-domain', domain.domainName);
+                    } else {
+                        available.hide();
+                        availablePrice.hide();
+                        contactSupport.hide();
+                        unavailable.show().find('strong').html(domain.domainName);
+                        if (typeof pricing === 'string' && pricing == 'ContactUs') {
+                            contactSupport.show();
+                        }
+                    }
+                } else {
+                    available.hide();
+                    availablePrice.hide();
+                    unavailable.hide();
+                    contactSupport.hide();
+                    invalid.hide();
+                    error.hide();
+                    var done = false,
+                        reg = /<br\s*\/>/,
+                        errors = [];
+                    if (!domain.isValidDomain && domain.domainErrorMessage) {
+                        invalid.text(domain.domainErrorMessage);
+                    } else if (domain.error || index === 'error') {
+                        if (typeof domain === 'string') {
+                            error.text(domain);
+                        } else if (!domain.error.match(reg)) {
+                            error.text(domain.error);
+                        } else {
+                            error.text('');
+                            errors = domain.error.split(reg);
+                            for(var i=0; i < errors.length; i++) {
+                                var errorMsg = errors[i];
+                                if (errorMsg.length) {
+                                    if (error.text()) {
+                                        // only add line break if there is
+                                        // multiple lines of text
+                                        error.append('<br />');
+                                    }
+                                    error.append(jQuery('<span></span>').text(errorMsg));
+                                }
+                            }
+                        }
+                        error.show();
+                        done = true;
+                    }
+                    if (!done) {
+                        invalid.show();
+                    }
+                }
+
+            });
+        }).always(function() {
+            hasDomainLookupEnded();
+        });
+
+        // spotlight lookup handler
+        spotlight.done(function(data) {
+            if (typeof data != 'object' || data.result.length == 0 || data.result.error) {
+                jQuery('.domain-lookup-spotlight-loader').hide();
+                return;
+            }
+            jQuery.each(data.result, function(index, domain) {
+                var tld = domain.tldNoDots,
+                    pricing = domain.pricing,
+                    result = jQuery('#spotlight' + tld + ' .domain-lookup-result');
+                jQuery('.domain-lookup-spotlight-loader').hide();
+                result.find('button').hide();
+                if (domain.isValidDomain) {
+                    if (domain.isAvailable && typeof pricing !== 'string') {
+                        if (domain.domainName !== domain.idnDomainName && idnLanguage.not(':visible')) {
+                            idnLanguage.slideDown();
+                        }
+                        result.find('button.unavailable').hide().end()
+                            .find('button.invalid').hide().end()
+                            .find('span.available').html(pricing[Object.keys(pricing)[0]].register).show().end()
+                            .find('button').not('button.unavailable').not('button.invalid')
+                            .attr('data-domain', domain.domainName)
+                            .show();
+
+                        result.find('button.domain-contact-support').hide();
+                    } else {
+                        if (typeof pricing === 'string') {
+                            if (pricing == '') {
+                                result.find('button.unavailable').show();
+                            } else {
+                                result.find('button.domain-contact-support').show();
+                            }
+                            result.find('button.invalid').hide();
+                            result.find('span.available').hide();
+                        } else {
+                            result.find('button.invalid').hide().end()
+                                .find('button.unavailable').show().end()
+                                .find('span.available').hide();
+                        }
+                    }
+                } else {
+                    result.find('button.invalid:hidden').show().end()
+                        .find('span.available').hide().end()
+                        .find('button').not('button.invalid').hide();
+                }
+                result.show();
+            });
+        }).always(function() {
+            hasDomainLookupEnded();
+        });
+
+        // suggestions lookup handler
+        suggestion.done(function (data) {
+            if (typeof data != 'object' || data.result.length == 0 || data.result.error) {
+                jQuery('.suggested-domains').fadeOut('fast', function() {
+                    jQuery(this).hide();
+                });
+                return;
+            } else {
+                jQuery('.suggested-domains').show();
+            }
+            var suggestionCount = 1;
+            jQuery.each(data.result, function(index, domain) {
+                var tld = domain.tld,
+                    pricing = domain.pricing;
+                suggestions.find('div:first').clone(true, true).appendTo(suggestions);
+                var newSuggestion = suggestions.find('div.domain-suggestion').last();
+                newSuggestion.addClass('clone')
+                    .find('span.domain').html(domain.sld).end()
+                    .find('span.extension').html('.' + tld);
+
+                if (typeof pricing === 'string') {
+                    newSuggestion.find('button.btn-add-to-cart').remove();
+                    if (pricing != '') {
+                        newSuggestion.find('button.domain-contact-support').show().end()
+                            .find('span.price').hide();
+                    } else {
+                        newSuggestion.remove();
+                    }
+                } else {
+                    if (domain.domainName !== domain.idnDomainName && idnLanguage.not(':visible')) {
+                        idnLanguage.slideDown();
+                    }
+                    newSuggestion.find('button.btn-add-to-cart').attr('data-domain', domain.domainName).end()
+                        .find('span.price').html(pricing[Object.keys(pricing)[0]].register);
+                }
+                if (suggestionCount <= 10) {
+                    newSuggestion.show();
+                }
+                suggestionCount++;
+                if (domain.group) {
+                    newSuggestion.find('span.promo')
+                        .addClass(domain.group)
+                        .show();
+                    newSuggestion.find('span.sales-group-' + domain.group)
+                        .show();
+                }
+                furtherSuggestions = suggestions.find('div.domain-suggestion.clone:hidden').length;
+                if (furtherSuggestions > 0) {
+                    jQuery('div.more-suggestions').show();
+                }
+            });
+            jQuery('.domain-lookup-suggestions-loader').hide();
+            jQuery('#domainSuggestions').show();
+        }).always(function() {
+            hasDomainLookupEnded();
+        });
+    });
+
+    jQuery('.btn-add-to-cart').on('click', function() {
+        if (jQuery(this).hasClass('checkout')) {
+            window.location = 'cart.php?a=confdomains';
+            return;
+        }
+        var domain = jQuery(this).attr('data-domain'),
+            buttons = jQuery('button[data-domain="' + domain + '"]'),
+            whois = jQuery(this).attr('data-whois'),
+            isProductDomain = jQuery(this).hasClass('product-domain'),
+            btnDomainContinue = jQuery('#btnDomainContinue'),
+            resultDomain = jQuery('#resultDomain'),
+            resultDomainPricing = jQuery('#resultDomainPricingTerm'),
+            idnLanguage = jQuery('#idnLanguageSelector'),
+            idnLanguageInput = idnLanguage.find('select');
+
+        if (idnLanguage.is(':visible') && !idnLanguageInput.val()) {
+            idnLanguageInput.showInputError();
+            return;
+        }
+        buttons.find('span.to-add').hide();
+        buttons.find('span.loading').show();
+
+        var sideOrder =
+            ((jQuery(this).parents('.spotlight-tlds').length > 0)
+            ||
+            (jQuery(this).parents('.suggested-domains').length > 0)) ? 1 : 0;
+
+        var addToCart = WHMCS.http.jqClient.post(
+            window.location.pathname,
+            {
+                a: 'addToCart',
+                domain: domain,
+                token: csrfToken,
+                whois: whois,
+                sideorder: sideOrder,
+                idnlanguage: idnLanguageInput.val()
+            },
+            'json'
+        ).done(function (data) {
+            buttons.find('span.loading').hide();
+            if (data.result === 'added') {
+                buttons.find('span.added').show();
+                if (!isProductDomain) {
+                    buttons.removeAttr('disabled').addClass('checkout');
+                }
+                if (resultDomain.length && !resultDomain.val()) {
+                    resultDomain.val(domain);
+                    resultDomainPricing.val(data.period).attr('name', 'domainsregperiod[' + domain +']');
+                    if (btnDomainContinue.length > 0 && btnDomainContinue.is(':disabled')) {
+                        btnDomainContinue.removeAttr('disabled');
+                    }
+                }
+                jQuery('#cartItemCount').html(data.cartCount);
+            } else {
+                buttons.find('span.available.price').hide();
+                buttons.find('span.unavailable').show();
+                buttons.attr('disabled', 'disabled');
+            }
+        });
+    });
+
+    jQuery('#frmDomainTransfer').submit(function (e) {
+        e.preventDefault();
+
+        var frmDomain = jQuery('#frmDomainTransfer'),
+        transferButton = jQuery('#btnTransferDomain'),
+            inputDomain = jQuery('#inputTransferDomain'),
+            authField = jQuery('#inputAuthCode'),
+            domain = inputDomain.val(),
+            authCode = authField.val(),
+            redirect = false,
+            reCaptchaContainer = jQuery('#divDynamicRecaptcha'),
+            captcha = jQuery('#inputCaptcha');
+
+        if (!domain) {
+            inputDomain.tooltip('show');
+            inputDomain.focus();
+            return false;
+        }
+
+        inputDomain.tooltip('hide');
+
+        if (jQuery('#captchaContainer').length) {
+            validate_captcha(frmDomain);
+            return;
+        }
+
+        reCaptchaContainer.tooltip('hide');
+        captcha.tooltip('hide');
+
+        transferButton.attr('disabled', 'disabled').addClass('disabled')
+            .find('span').show().end()
+            .find('.loader').show();
+
+        WHMCS.http.jqClient.post(
+            frmDomain.attr('action'),
+            frmDomain.serialize(),
+            null,
+            'json'
+        ).done(function (data) {
+            if (typeof data != 'object') {
+                transferButton.find('span').hide().end()
+                    .find('#addToCart').show().end()
+                    .removeAttr('disabled').removeClass('disabled');
+                return false;
+            }
+            var result = data.result;
+
+            if (result == 'added') {
+                window.location = 'cart.php?a=confdomains';
+                redirect = true;
+            } else {
+                if (result.isRegistered == true) {
+                    if (result.epp == true && !authCode) {
+                        authField.tooltip('show');
+                        authField.focus();
+                    }
+                } else {
+                    jQuery('#transferUnavailable').html(result.unavailable)
+                        .fadeIn('fast', function() {
+                            setTimeout(function(input) {
+                                    input.fadeOut('fast');
+                                },
+                                3000,
+                                jQuery(this)
+                            );
+                        }
+                    );
+                }
+            }
+        }).always(function () {
+            if (redirect == false) {
+                transferButton.find('span').hide().end()
+                    .find('#addToCart').show().end()
+                    .removeAttr('disabled').removeClass('disabled');
+            }
+        });
+
+    });
+
+    jQuery("#btnEmptyCart").click(function() {
+        jQuery('#modalEmptyCart').modal('show');
+    });
+
+    jQuery("#cardType li a").click(function (e) {
+        e.preventDefault();
+        jQuery("#selectedCardType").html(jQuery(this).html());
+        jQuery("#cctype").val(jQuery('span.type', this).html().trim());
+    });
+
+    jQuery(document).on('click', '.domain-contact-support', function(e) {
+        e.preventDefault();
+
+        var child = window.open();
+        child.opener = null;
+        child.location = 'submitticket.php';
+    });
+
+    jQuery('#frmConfigureProduct input:visible, #frmConfigureProduct select:visible').first().focus();
+    jQuery('#frmProductDomain input[type=text]:visible').first().focus();
+    jQuery('#frmDomainChecker input[type=text]:visible').first().focus();
+    jQuery('#frmDomainTransfer input[type=text]:visible').first().focus();
+
+    jQuery('.checkout .mc-promo .btn-add').click(function(e) {
+        var self = jQuery(this),
+            productKey = self.data('product-key'),
+            upSellBox = jQuery('#promo_' + productKey);
+
+        self.attr('disabled', 'disabled')
+            .find('span.arrow i').removeClass('fa-chevron-right').addClass('fa-spinner fa-spin');
+        WHMCS.http.jqClient.post(
+            window.location.pathname,
+            {
+                'a': 'addUpSell',
+                'product_key': productKey,
+                'checkoutModal': true,
+                'token': csrfToken
+            },
+            function (data) {
+                if (typeof data.modal !== 'undefined') {
+                    openModal(
+                        data.modal,
+                        '',
+                        data.modalTitle,
+                        '',
+                        '',
+                        data.modalSubmit,
+                        data.modelSubmitId
+                    );
+                    return;
+                }
+                if (data.done) {
+                    jQuery('#totalCartPrice').text(data.newTotal);
+                    upSellBox.fadeOut();
+                }
+            },
+            'json'
+        );
+    });
+
+    jQuery('.viewcart .mc-promo .btn-add').click(function(e) {
+        var self = jQuery(this);
+        self.attr('disabled', 'disabled')
+            .find('span.arrow i').removeClass('fa-chevron-right').addClass('fa-spinner fa-spin');
+        WHMCS.http.jqClient.post(
+            window.location.pathname,
+            {
+                'a': 'addUpSell',
+                'product_key': self.data('product-key'),
+                'token': csrfToken
+            },
+            function (data) {
+                if (typeof data.modal !== 'undefined') {
+                    openModal(
+                        data.modal,
+                        '',
+                        data.modalTitle,
+                        '',
+                        '',
+                        data.modalSubmit,
+                        data.modelSubmitId
+                    );
+                    return;
+                }
+                window.location.reload(true);
+            },
+            'json'
+        );
+    });
+
+    jQuery(document).on('click', '#btnAddUpSellCheckout', function(e) {
+        var upsellModalForm = jQuery('#upsellModalForm');
+        WHMCS.http.jqClient.post(
+            'cart.php',
+            upsellModalForm.serialize(),
+            function (data) {
+                if (data.done){
+                    jQuery('#totalCartPrice').text(data.newTotal);
+                }
+            },
+            'json'
+        );
+        return false;
+    });
+
+    jQuery(document).on('click', '#btnAddUpSell', function(e) {
+        needRefresh = true;
+    });
+
+    var useFullCreditOnCheckout = jQuery('#iCheck-useFullCreditOnCheckout'),
+        skipCreditOnCheckout = jQuery('#iCheck-skipCreditOnCheckout');
+
+    useFullCreditOnCheckout.on('ifChecked', function() {
+        var radio = jQuery('#useFullCreditOnCheckout'),
+            selectedPaymentMethod = jQuery('input[name="paymentmethod"]:checked'),
+            isCcSelected = selectedPaymentMethod.hasClass('is-credit-card'),
+            firstNonCcGateway = jQuery('input[name="paymentmethod"]')
+            .not(jQuery('input.is-credit-card[name="paymentmethod"]'))
+            .first(),
+            container = jQuery('#paymentGatewaysContainer'),
+            ccInputFields = jQuery('#creditCardInputFields');
+        if (radio.prop('checked')) {
+            if (isCcSelected && firstNonCcGateway.length !== 0) {
+                firstNonCcGateway.iCheck('check');
+                ccInputFields.slideUp();
+                container.slideUp();
+            } else if (isCcSelected && !container.is(":visible")) {
+                ccInputFields.slideDown();
+                container.slideDown();
+            }
+        }
+    });
+
+    skipCreditOnCheckout.on('ifChecked', function() {
+        var selectedPaymentMethod = jQuery('input[name="paymentmethod"]:checked'),
+            isCcSelected = selectedPaymentMethod.hasClass('is-credit-card'),
+            container = jQuery('#paymentGatewaysContainer');
+        if (!container.is(":visible")) {
+            container.slideDown();
+            if (isCcSelected) {
+                jQuery('#creditCardInputFields').slideDown();
+            }
+        }
+    });
+
+    if (jQuery('#applyCreditContainer').data('apply-credit') === 1 && useFullCreditOnCheckout.length) {
+        skipCreditOnCheckout.iCheck('check');
+        useFullCreditOnCheckout.iCheck('check');
+    }
+
+    jQuery('#domainRenewals').find('span.added').hide().end().find('span.to-add').find('i').hide();
+    jQuery('.btn-add-renewal-to-cart').on('click', function() {
+        var self = jQuery(this),
+            domainId = self.data('domain-id'),
+            period = jQuery('#renewalPricing' + domainId).val();
+
+        if (self.hasClass('checkout')) {
+            window.location = 'cart.php?a=view';
+            return;
+        }
+
+        self.attr('disabled', 'disabled').each(function() {
+            jQuery(this).find('i').fadeIn('fast').end().css('width', jQuery(this).outerWidth());
+        });
+
+        WHMCS.http.jqClient.post(
+            WHMCS.utils.getRouteUrl('/cart/domain/renew/add'),
+            {
+                domainId: domainId,
+                period: period,
+                token: csrfToken
+            },
+            null,
+            'json'
+        ).done(function (data) {
+            self.find('span.to-add').hide();
+            if (data.result === 'added') {
+                self.find('span.added').show().end().find('i').fadeOut('fast').css('width', self.outerWidth());
+            }
+            recalculateRenewalTotals();
+        });
+    });
+    jQuery(document).on('submit', '#removeRenewalForm', function(e) {
+        e.preventDefault();
+
+        WHMCS.http.jqClient.post(
+            whmcsBaseUrl + '/cart.php',
+            jQuery(this).serialize() + '&ajax=1'
+        ).done(function(data) {
+            var domainId = data.i,
+                button = jQuery('#renewDomain' + domainId);
+
+            button.attr('disabled', 'disabled').each(function() {
+                jQuery(this).find('span.added').hide().end()
+                    .removeClass('checkout').find('span.to-add').show().end().removeAttr('disabled');
+                jQuery(this).css('width', jQuery(this).outerWidth());
+            });
+
+        }).always(function () {
+            jQuery('#modalRemoveItem').modal('hide');
+            recalculateRenewalTotals();
+        });
+    });
+
+    jQuery('.select-renewal-pricing').on('change', function() {
+        var self = jQuery(this),
+            domainId = self.data('domain-id'),
+            button = jQuery('#renewDomain' + domainId);
+
+        button.attr('disabled', 'disabled').each(function() {
+            jQuery(this).css('width', jQuery(this).outerWidth());
+            jQuery(this).find('span.added').hide().end()
+                .removeClass('checkout').find('span.to-add').show().end().removeAttr('disabled');
+        });
+    });
+
+    jQuery('#domainRenewalFilter').on('keyup', function() {
+        var inputText = jQuery(this).val().toLowerCase();
+        jQuery('#domainRenewals').find('div.domain-renewal').filter(function() {
+            jQuery(this).toggle(jQuery(this).data('domain').toLowerCase().indexOf(inputText) > -1);
+        });
+    });
+
+    checkoutForm = jQuery('#frmCheckout');
+    if (checkoutForm.length) {
+        checkoutForm.on('submit', validateCheckoutCreditCardInput);
+    }
+
+    if (existingCardContainer.is(':visible')) {
+        newCardInfo.slideUp();
+    }
+});
+//checkoutForm
+function validateCheckoutCreditCardInput(e)
+{
+    var newOrExisting = jQuery('input[name="ccinfo"]:checked').val(),
+        submitButton = checkoutForm.find('*[type="submit"]'),
+        cardType = null,
+        submit = true,
+        selectedPaymentMethod = checkoutForm.find('input[name="paymentmethod"]:checked'),
+        isCreditCardGateway = selectedPaymentMethod.hasClass('is-credit-card'),
+        isRemoteCard = selectedPaymentMethod.data('payment-type') === 'RemoteCreditCard',
+        cardNumber = jQuery('#inputCardNumber');
+
+    checkoutForm.find('.form-group').removeClass('has-error');
+    checkoutForm.find('.field-error-msg').hide();
+
+    if (isCreditCardGateway && !isRemoteCard) {
+        var cvvField = checkoutForm.find('#inputCardCVV2');
+
+        if (newOrExisting === 'new') {
+            cvvField = checkoutForm.find('#inputCardCVV');
+
+            cardType = jQuery.payment.cardType(checkoutForm.find('#inputCardNumber').val());
+            if (!jQuery.payment.validateCardNumber(checkoutForm.find('#inputCardNumber').val()) || cardNumber.hasClass('unsupported')) {
+                var error = cardNumber.data('message-invalid');
+                if (cardNumber.hasClass('unsupported')) {
+                    error = cardNumber.data('message-unsupported');
+                }
+                checkoutForm.find('#inputCardNumber').setInputError(error).showInputError();
+                submit = false;
+            }
+            if (
+                !jQuery.payment.validateCardExpiry(
+                    checkoutForm.find('#inputCardExpiry').payment('cardExpiryVal')
+                )
+            ) {
+                checkoutForm.find('#inputCardExpiry').showInputError();
+                submit = false;
+            }
+        }
+        if (!jQuery.payment.validateCardCVC(cvvField.val(), cardType)) {
+            cvvField.showInputError();
+            submit = false;
+        }
+        if (!submit) {
+            submitButton.prop('disabled', false)
+                .removeClass('disabled')
+                .find('i')
+                .removeAttr('class')
+                .addClass('fas fa-arrow-circle-right');
+            e.preventDefault();
+        }
+    }
+}
+
+function hasDomainLookupEnded() {
+    domainLookupCallCount++;
+    if (domainLookupCallCount == 3) {
+        jQuery('#btnCheckAvailability').removeAttr('disabled').removeClass('disabled');
+    }
+}
+
+function hasProductDomainLookupEnded(total, button) {
+    domainLookupCallCount++;
+    if (domainLookupCallCount == total) {
+        button.removeAttr('disabled').removeClass('disabled');
+        jQuery('input[name="domainoption"]').iCheck('enable');
+    }
+}
+
+function domainGotoNextStep() {
+    jQuery("#domainLoadingSpinner").show();
+    jQuery("#frmProductDomainSelections").submit();
+}
+
+function removeItem(type, num) {
+    jQuery('#inputRemoveItemType').val(type);
+    jQuery('#inputRemoveItemRef').val(num);
+    jQuery('#modalRemoveItem').modal('show');
+}
+
+function updateConfigurableOptions(i, billingCycle) {
+
+    WHMCS.http.jqClient.post("cart.php", 'a=cyclechange&ajax=1&i='+i+'&billingcycle='+billingCycle,
+        function(data) {
+            jQuery("#productConfigurableOptions").html(jQuery(data).find('#productConfigurableOptions').html());
+            jQuery('input').iCheck({
+                inheritID: true,
+                checkboxClass: 'icheckbox_square-blue',
+                radioClass: 'iradio_square-blue',
+                increaseArea: '20%'
+            });
+        }
+    );
+    recalctotals();
+
+}
+
+function recalctotals() {
+    if (!jQuery("#orderSummaryLoader").is(":visible")) {
+        jQuery("#orderSummaryLoader").fadeIn('fast');
+    }
+
+    var thisRequestId = Math.floor((Math.random() * 1000000) + 1);
+    window.lastSliderUpdateRequestId = thisRequestId;
+
+    var post = WHMCS.http.jqClient.post("cart.php", 'ajax=1&a=confproduct&calctotal=true&'+jQuery("#frmConfigureProduct").serialize());
+    post.done(
+        function(data) {
+            if (thisRequestId == window.lastSliderUpdateRequestId) {
+                jQuery("#producttotal").html(data);
+            }
+        }
+    );
+    post.always(
+        function() {
+            jQuery("#orderSummaryLoader").delay(500).fadeOut('slow');
+        }
+    );
+}
+
+function recalculateRenewalTotals() {
+    if (!jQuery("#orderSummaryLoader").is(":visible")) {
+        jQuery("#orderSummaryLoader").fadeIn('fast');
+    }
+
+    var thisRequestId = Math.floor((Math.random() * 1000000) + 1);
+    window.lastSliderUpdateRequestId = thisRequestId;
+
+    WHMCS.http.jqClient.get(
+        WHMCS.utils.getRouteUrl('/cart/domain/renew/calculate')
+    ).done(function(data) {
+        if (thisRequestId === window.lastSliderUpdateRequestId) {
+            jQuery("#producttotal").html(data.body);
+        }
+    }).always(
+        function() {
+            jQuery("#orderSummaryLoader").delay(500).fadeOut('slow');
+        }
+    );
+}
+
+function selectDomainPricing(domainName, price, period, yearsString, suggestionNumber) {
+    jQuery("#domainSuggestion" + suggestionNumber).iCheck('check');
+    jQuery("[name='domainsregperiod[" + domainName + "]']").val(period);
+    jQuery("[name='" + domainName + "-selected-price']").html('<b class="glyphicon glyphicon-shopping-cart"></b>'
+        + ' ' + period + ' ' + yearsString + ' @ ' + price);
+}
+
+function selectDomainPeriodInCart(domainName, price, period, yearsString) {
+    var loader = jQuery("#orderSummaryLoader");
+    if (loader.not(':visible')) {
+        loader.fadeIn('fast');
+    }
+    jQuery("[name='" + domainName + "Pricing']").html(period + ' ' + yearsString + ' <span class="caret"></span>');
+    jQuery("[name='" + domainName + "Price']").html(price);
+    var update = WHMCS.http.jqClient.post(
+        window.location.pathname,
+        {
+            domain: domainName,
+            period: period,
+            a: 'updateDomainPeriod',
+            token: csrfToken
+        }
+    );
+    update.done(
+        function(data) {
+            if (data.forceReload) {
+                window.location.reload();
+                return;
+            }
+            data.domains.forEach(function(domain) {
+                jQuery("[name='" + domain.domain + "Price']").parent('div').find('.renewal-price').html(
+                    domain.prefixedRenewPrice + domain.shortRenewalYearsLanguage
+                );
+            });
+            jQuery('#subtotal').html(data.subtotal);
+            if (data.promotype) {
+                jQuery('#discount').html(data.discount);
+            }
+            if (data.taxrate) {
+                jQuery('#taxTotal1').html(data.taxtotal);
+            }
+            if (data.taxrate2) {
+                jQuery('#taxTotal2').html(data.taxtotal2);
+            }
+
+            var recurringSpan = jQuery('#recurring');
+
+            recurringSpan.find('span:visible').not('span.cost').fadeOut('fast');
+
+            if (data.totalrecurringannually) {
+                jQuery('#recurringAnnually').fadeIn('fast').find('.cost').html(data.totalrecurringannually);
+            }
+
+            if (data.totalrecurringbiennially) {
+                jQuery('#recurringBiennially').fadeIn('fast').find('.cost').html(data.totalrecurringbiennially);
+            }
+
+            if (data.totalrecurringmonthly) {
+                jQuery('#recurringMonthly').fadeIn('fast').find('.cost').html(data.totalrecurringmonthly);
+            }
+
+            if (data.totalrecurringquarterly) {
+                jQuery('#recurringQuarterly').fadeIn('fast').find('.cost').html(data.totalrecurringquarterly);
+            }
+
+            if (data.totalrecurringsemiannually) {
+                jQuery('#recurringSemiAnnually').fadeIn('fast').find('.cost').html(data.totalrecurringsemiannually);
+            }
+
+            if (data.totalrecurringtriennially) {
+                jQuery('#recurringTriennially').fadeIn('fast').find('.cost').html(data.totalrecurringtriennially);
+            }
+
+            jQuery('#totalDueToday').html(data.total);
+        }
+    );
+    update.always(
+        function() {
+            loader.delay(500).fadeOut('slow');
+        }
+    );
+}
+
+function loadMoreSuggestions()
+{
+    var suggestions = jQuery('#domainSuggestions'),
+        suggestionCount;
+
+    for (suggestionCount = 1; suggestionCount <= 10; suggestionCount++) {
+        if (furtherSuggestions > 0) {
+            suggestions.find('div.domain-suggestion.clone:hidden:first').slideDown();
+            furtherSuggestions = suggestions.find('div.domain-suggestion.clone:hidden').length;
+        } else {
+            jQuery('div.more-suggestions').find('a').addClass('hidden').end().find('span.no-more').removeClass('hidden');
+            return;
+        }
+    }
+}
+
+function validate_captcha(form)
+{
+    var reCaptcha = jQuery('#g-recaptcha-response'),
+        reCaptchaContainer = jQuery('#divDynamicRecaptcha'),
+        captcha = jQuery('#inputCaptcha');
+
+    if (reCaptcha.length && !reCaptcha.val()) {
+        reCaptchaContainer.tooltip('show');
+        return false;
+    }
+
+    if (captcha.length && !captcha.val()) {
+        captcha.tooltip('show');
+        return false;
+    }
+
+    var validate = WHMCS.http.jqClient.post(
+        form.attr('action'),
+        form.serialize() + '&a=validateCaptcha',
+        null,
+        'json'
+    );
+
+    validate.done(function(data) {
+        if (data.error) {
+            jQuery('#inputCaptcha').attr('data-original-title', data.error).tooltip('show');
+            if (captcha.length) {
+                jQuery('#inputCaptchaImage').replaceWith(
+                    '<img id="inputCaptchaImage" src="' + whmcsBaseUrl + '/includes/verifyimage.php?nocache=' + new Date().getTime() + '" align="middle" />'
+                );
+            }
+        } else {
+            jQuery('#captchaContainer').remove();
+            form.trigger('submit');
+        }
+    });
+}

Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
js/scripts.min.js


+ 68 - 0
layouts/head.tpl

@@ -0,0 +1,68 @@
+<div class="hero d-flex align-items-center no-padding{if $templatefile == "products" || $templatefile == "domaintransfer"} justify-content-center text-center{/if}">
+	<div>
+	{if $templatefile == "products"}
+		<div class="header-lined">
+			<h1>
+				{$productGroup.name}
+			</h1>
+			{if $productGroup.headline}
+				<h4 class="text-muted">{$productGroup.headline}</h4>
+			{/if}
+			{if $productGroup.tagline}
+				<p class="text-muted">{$productGroup.tagline}</p>
+			{/if}
+		</div>			
+		
+	{else}
+	
+	<div class="header-lined">
+		{if $templatefile == "adddomain"}
+			<h1>
+				{if $domain eq "register"}
+				   {$LANG.registerdomain}
+				{elseif $domain eq "transfer"}
+					{$LANG.transferdomain}
+				{/if}
+			</h1>
+		{elseif $templatefile == "addons"}
+			<h1>{$LANG.cartproductaddons}</h1>	
+		{elseif $templatefile == "checkout"}
+			<h1>{if !$checkout}{$LANG.cartreviewcheckout}{else}{$LANG.orderForm.checkout}{/if}</h1>	
+		{elseif $templatefile == "complete"}
+			<h1>{$LANG.orderconfirmation}</h1>		
+		{elseif $templatefile == "configuredomains"}
+			<h1>{$LANG.cartdomainsconfig}</h1>
+			<p class="hidden-xs">{$LANG.orderForm.reviewDomainAndAddons}</p>
+		{elseif $templatefile == "configureproduct"}
+			<h1>{$LANG.orderconfigure}</h1>
+		{elseif $templatefile == "configureproductdomain"}
+			<h1>{$LANG.domaincheckerchoosedomain}</h1>
+		{elseif $templatefile == "domainregister"}
+			<h1>{$LANG.registerdomain}</h1>
+			<p>{$LANG.orderForm.findNewDomain}</p>
+		{elseif $templatefile == "domain-renewals"}
+			<h1>
+				{if $totalResults > 1}{lang key='domainrenewals'}{else}{lang key='domainrenewal'}{/if}
+				{if $totalResults > 5}
+					<div class="pull-right">
+						<input id="domainRenewalFilter" type="search" class="domain-renewals-filter form-control input-inline-100" placeholder="{lang key='searchenterdomain'}">
+					</div>
+				{/if}
+			</h1>
+		{elseif $templatefile == "domaintransfer"}
+			<h1>{lang key='orderForm.transferToUs'}</h1>
+			<p>{lang key='orderForm.transferExtend'}*</p>
+		{elseif $templatefile == "fraudcheck"}
+			<h1>{$LANG.cartfraudcheck}</h1>
+		{elseif $templatefile == "viewcart"}
+		<h1>{if !$checkout}{$LANG.cartreviewcheckout}{else}{$LANG.orderForm.checkout}{/if}</h1>
+		{elseif $templatefile == "error"}
+			<h1>{$LANG.thereisaproblem}</h1>
+		
+		{/if}	
+	</div>
+
+	{/if}
+	</div>
+</div>
+

+ 2 - 0
layouts/index.php

@@ -0,0 +1,2 @@
+<?php
+header("Location: ../../../index.php");

+ 95 - 0
linkedaccounts.tpl

@@ -0,0 +1,95 @@
+{if ($linkableProviders || $hasLinkedProvidersEnabled) && $linkContext == 'linktable'}
+    <table id="tableLinkedAccounts" class="table display data-driven"
+           data-ajax-url="{$linkedAccountsUrl}"
+           data-on-draw-rebind-confirmation-modal="true"
+           data-lang-empty-table="{lang key='remoteAuthn.noLinkedAccounts'}"
+    >
+        <thead>
+            <tr class="text-center">
+                <th>{lang key='remoteAuthn.provider'}</th>
+                <th>{lang key='remoteAuthn.name'}</th>
+                <th>{lang key='remoteAuthn.emailAddress'}</th>
+                <th>{lang key='remoteAuthn.actions'}</th>
+            </tr>
+        </thead>
+        <tbody>
+            <tr>
+                <td colspan="4" class="text-center">{lang key='remoteAuthn.noLinkedAccounts'}</td>
+            </tr>
+        </tbody>
+    </table>
+{elseif $linkableProviders}
+
+    <div id="providerLinkingMessages" class="w-hidden">
+        <p class="providerLinkingMsg-preLink-init_failed">
+            <span class="provider-name"></span> {lang key='remoteAuthn.unavailable'}
+        </p>
+        <p class="providerLinkingMsg-preLink-connect_error">
+            <strong>{lang key='remoteAuthn.error'}</strong> {lang key='remoteAuthn.connectError'}
+        </p>
+        <p class="providerLinkingMsg-preLink-complete_sign_in">
+            {lang key='remoteAuthn.completeSignIn'}
+        </p>
+        <p class="providerLinkingMsg-preLink-2fa_needed">
+            {lang key='remoteAuthn.redirecting'}
+        </p>
+        <p class="providerLinkingMsg-preLink-linking_complete">
+            <strong>{lang key='remoteAuthn.success'}</strong> {lang key='remoteAuthn.accountNowLinked'}
+        </p>
+        <p class="providerLinkingMsg-preLink-login_to_link-signin-required">
+            <strong>{lang key='remoteAuthn.linkInitiated'}</strong> {lang key='remoteAuthn.oneTimeAuthRequired'}
+        </p>
+        <p class="providerLinkingMsg-preLink-login_to_link-registration-required">
+            <strong>{lang key='remoteAuthn.linkInitiated'}</strong> {lang key='remoteAuthn.completeRegistrationForm'}
+        </p>
+        <p class="providerLinkingMsg-preLink-checkout-new">
+            <strong>{lang key='remoteAuthn.linkInitiated'}</strong> {lang key='remoteAuthn.completeNewAccountForm'}
+        </p>
+        <p class="providerLinkingMsg-preLink-other_user_exists">
+            <strong>{lang key='remoteAuthn.error'}</strong> {lang key='remoteAuthn.linkedToAnotherClient'}
+        </p>
+        <p class="providerLinkingMsg-preLink-already_linked">
+            <strong>{lang key='remoteAuthn.error'}</strong> {lang key='remoteAuthn.alreadyLinkedToYou'}
+        </p>
+        <p class="providerLinkingMsg-preLink-default">
+            <strong>{lang key='remoteAuthn.error'}</strong> {lang key='remoteAuthn.connectError'}
+        </p>
+    </div>
+
+    {if $linkContext == 'registration'}
+        <div class="sub-heading">
+            <span class="primary-bg-color">{lang key='remoteAuthn.titleSignUpVerb'}</span>
+        </div>
+    {elseif $linkContext == 'checkout-existing'}
+        <div class="sub-heading-borderless">
+            <span class="primary-bg-color">{lang key='remoteAuthn.titleOr'}</span>
+        </div>
+        <p class="small text-center text-muted">{lang key='remoteAuthn.saveTimeByLinking'}</p>
+    {elseif $linkContext == 'checkout-new'}
+        <div class="sub-heading">
+            <span class="primary-bg-color">{lang key='remoteAuthn.titleSignUpVerb'}</span>
+        </div>
+        <p class="small text-center text-muted">{lang key='remoteAuthn.saveTimeByLinking'}</p>
+    {elseif $linkContext == 'clientsecurity'}
+        <p>{lang key='remoteAuthn.mayHaveMultipleLinks'}</p>
+    {/if}
+
+    <div class="providerPreLinking" data-link-context="{$linkContext}"
+         data-hide-on-prelink={if in_array($linkContext, ['clientsecurity','login'])}0{else}1{/if}
+         data-disable-on-prelink=0>
+        <div class="social-signin-btns">
+            {foreach $linkableProviders as $provider }
+                {if in_array($linkContext, ['checkout-existing'])}
+                    {$provider.login_button}
+                {else}
+                    {$provider.code}
+                {/if}
+            {/foreach}
+        </div>
+    </div>
+
+    {if !isset($customFeedback) || !$customFeedback}
+        <div class="providerLinkingFeedback"></div>
+    {/if}
+
+{/if}

+ 25 - 0
login.tpl

@@ -0,0 +1,25 @@
+<link rel="stylesheet" type="text/css" href="templates/orderforms/{$carttpl}/style.css" />
+
+<div id="order-modern">
+
+<h1>{$LANG.cartexistingclientlogin}</h1>
+
+<form action="dologin.php" method="post">
+
+<div class="errorbox" style="display:block;">{$LANG.loginincorrect}</div>
+<br />
+
+<div class="signupfields" style="width:400px;margin:0 auto;">
+<table width="100%" cellspacing="0" cellpadding="0" class="configtable">
+<tr><td class="fieldlabel">{$LANG.clientareaemail}</td><td class="fieldarea"><input type="text" name="username" size="40" value="{$username}" /></td></tr>
+<tr><td class="fieldlabel">{$LANG.loginpassword}:</td><td class="fieldarea"><input type="password" name="password" size="25" /></td></tr>
+</table>
+</div>
+
+<p align="center"><input type="submit" value="{$LANG.loginbutton}" /></p>
+
+</form>
+
+<p><strong>{$LANG.loginforgotten}</strong> <a href="pwreset.php" target="_blank">{$LANG.loginforgotteninstructions}</a></p>
+
+</div>

+ 43 - 0
marketconnect-promo.tpl

@@ -0,0 +1,43 @@
+<div class="mc-promo {$promotion->getClass()}" id="promo_{$product->productKey}">
+    <div class="header">
+        <div class="cta">
+            <div class="price">
+                {if $product->isFree()}
+                    {lang key="orderfree"}
+                {elseif $product->pricing()->first()}
+                    {$product->pricing()->setQuantity($cartItem.qty)->first()->breakdownPrice()}
+                {/if}
+            </div>
+            <button type="button" class="btn btn-sm btn-add" data-product-key="{$product->productKey}">
+                <span class="text">
+                    {lang key="addtocart"}
+                </span>
+                <span class="arrow">
+                    <i class="fas fa-chevron-right"></i>
+                </span>
+            </button>
+        </div>
+        <div class="expander">
+            <i class="fas fa-chevron-right rotate" data-toggle="tooltip" data-placement="right" title="Click to learn more"></i>
+        </div>
+        <div class="icon">
+            <img src="{$promotion->getImagePath()}">
+        </div>
+        <div class="content">
+            <div class="headline truncate">{$promotion->getHeadline()}</div>
+            <div class="tagline truncate">{$promotion->getTagline()}</div>
+        </div>
+    </div>
+    <div class="body clearfix">
+        {if $promotion->hasFeatures()}
+            <ul>
+                {assign "promotionFeatures" $promotion->getFeatures()}
+                {foreach $promotionFeatures as $key=>$feature}
+                    <li class="{if $key < ($promotionFeatures|@count / 2)}left{else}right{/if}">
+                        <i class="fas fa-check"></i> {$feature}
+                    </li>
+                {/foreach}
+            </ul>
+        {/if}
+    </div>
+</div>

+ 25 - 0
metrics.tpl

@@ -0,0 +1,25 @@
+{if count($metrics) > 0}
+	<div class="bg-light p-2 border rounded mb-3">
+		<div class="product_addons_container">
+			<p>{$LANG.metrics.explanation}</p>
+			<ul>
+				{foreach $metrics as $metric}
+					<li>
+						{$metric.displayName}
+						-
+						{if count($metric.pricing) > 1}
+						{$LANG.metrics.startingFrom} {$metric.lowestPrice} / {if $metric.unitName}{$metric.unitName}{else}{$LANG.metrics.unit}{/if}
+						<button type="button" class="btn btn-default btn-xs" data-toggle="modal" data-target="#modalMetricPricing-{$metric.systemName}">
+							{$LANG.metrics.viewPricing}
+						</button>
+						{elseif count($metric.pricing) == 1}
+						{$metric.lowestPrice} / {if $metric.unitName}{$metric.unitName}{else}{$LANG.metrics.unit}{/if}
+						{if $metric.includedQuantity > 0} ({$metric.includedQuantity} {$LANG.metrics.includedNotCounted}){/if}
+						{/if}
+						{include file="$template/usagebillingpricing.tpl"}
+					</li>
+				{/foreach}
+			</ul>
+		</div>
+	</div>
+{/if}

+ 126 - 0
ordersummary.tpl

@@ -0,0 +1,126 @@
+{if $producttotals}
+    <span class="product-name">{if $producttotals.allowqty && $producttotals.qty > 1}{$producttotals.qty} x {/if}{$producttotals.productinfo.name}</span>
+    <span class="product-group">{$producttotals.productinfo.groupname}</span>
+
+    <div class="clearfix">
+        <span class="pull-left float-left">{$producttotals.productinfo.name}</span>
+        <span class="pull-right float-right">{$producttotals.pricing.baseprice}</span>
+    </div>
+
+    {foreach $producttotals.configoptions as $configoption}
+        {if $configoption}
+            <div class="clearfix">
+                <span class="pull-left float-left">&nbsp;&raquo; {$configoption.name}: {$configoption.optionname}</span>
+                <span class="pull-right float-right">{$configoption.recurring}{if $configoption.setup} + {$configoption.setup} {$LANG.ordersetupfee}{/if}</span>
+            </div>
+        {/if}
+    {/foreach}
+
+    {foreach $producttotals.addons as $addon}
+        <div class="clearfix">
+            <span class="pull-left float-left">+ {$addon.name}</span>
+            <span class="pull-right float-right">{$addon.recurring}</span>
+        </div>
+    {/foreach}
+
+    {if $producttotals.pricing.setup || $producttotals.pricing.recurring || $producttotals.pricing.addons}
+        <div class="summary-totals">
+            {if $producttotals.pricing.setup}
+                <div class="clearfix">
+                    <span class="pull-left float-left">{$LANG.cartsetupfees}:</span>
+                    <span class="pull-right float-right">{$producttotals.pricing.setup}</span>
+                </div>
+            {/if}
+            {foreach from=$producttotals.pricing.recurringexcltax key=cycle item=recurring}
+                <div class="clearfix">
+                    <span class="pull-left float-left">{$cycle}:</span>
+                    <span class="pull-right float-right">{$recurring}</span>
+                </div>
+            {/foreach}
+            {if $producttotals.pricing.tax1}
+                <div class="clearfix">
+                    <span class="pull-left float-left">{$carttotals.taxname} @ {$carttotals.taxrate}%:</span>
+                    <span class="pull-right float-right">{$producttotals.pricing.tax1}</span>
+                </div>
+            {/if}
+            {if $producttotals.pricing.tax2}
+                <div class="clearfix">
+                    <span class="pull-left float-left">{$carttotals.taxname2} @ {$carttotals.taxrate2}%:</span>
+                    <span class="pull-right float-right">{$producttotals.pricing.tax2}</span>
+                </div>
+            {/if}
+        </div>
+    {/if}
+
+    <div class="total-due-today">
+        <span class="amt">{$producttotals.pricing.totaltoday}</span>
+        <span>{$LANG.ordertotalduetoday}</span>
+    </div>
+{elseif $renewals}
+    {if $carttotals.renewals}
+        <span class="product-name">{lang key='domainrenewals'}</span>
+        {foreach $carttotals.renewals as $domainId => $renewal}
+            <div class="clearfix" id="cartDomainRenewal{$domainId}">
+                <span class="pull-left float-left">
+                    {$renewal.domain} - {$renewal.regperiod} {if $renewal.regperiod == 1}{lang key='orderForm.year'}{else}{lang key='orderForm.years'}{/if}
+                </span>
+                <span class="pull-right float-right">
+                    {$renewal.priceBeforeTax}
+                    <a onclick="removeItem('r','{$domainId}'); return false;" href="#" id="linkCartRemoveDomainRenewal{$domainId}">
+                        <i class="fas fa-fw fa-trash-alt"></i>
+                    </a>
+                </span>
+            </div>
+            {if $renewal.dnsmanagement}
+                <div class="clearfix">
+                    <span class="pull-left float-left">+ {lang key='domaindnsmanagement'}</span>
+                </div>
+            {/if}
+            {if $renewal.emailforwarding}
+                <div class="clearfix">
+                    <span class="pull-left float-left">+ {lang key='domainemailforwarding'}</span>
+                </div>
+            {/if}
+            {if $renewal.idprotection}
+                <div class="clearfix">
+                    <span class="pull-left float-left">+ {lang key='domainidprotection'}</span>
+                </div>
+            {/if}
+            {if $renewal.hasGracePeriodFee}
+                <div class="clearfix">
+                    <span class="pull-left float-left">+ {lang key='domainRenewal.graceFee'}</span>
+                </div>
+            {/if}
+            {if $renewal.hasRedemptionGracePeriodFee}
+                <div class="clearfix">
+                    <span class="pull-left float-left">+ {lang key='domainRenewal.redemptionFee'}</span>
+                </div>
+            {/if}
+
+        {/foreach}
+    {/if}
+    <div class="summary-totals">
+        <div class="clearfix">
+            <span class="pull-left">{lang key='ordersubtotal'}:</span>
+            <span class="pull-right">{$carttotals.subtotal}</span>
+        </div>
+        {if ($carttotals.taxrate && $carttotals.taxtotal) || ($carttotals.taxrate2 && $carttotals.taxtotal2)}
+            {if $carttotals.taxrate}
+                <div class="clearfix">
+                    <span class="pull-left float-left">{$carttotals.taxname} @ {$carttotals.taxrate}%:</span>
+                    <span class="pull-right float-right">{$carttotals.taxtotal}</span>
+                </div>
+            {/if}
+            {if $carttotals.taxrate2}
+                <div class="clearfix">
+                    <span class="pull-left float-left">{$carttotals.taxname2} @ {$carttotals.taxrate2}%:</span>
+                    <span class="pull-right float-right">{$carttotals.taxtotal2}</span>
+                </div>
+            {/if}
+        {/if}
+    </div>
+    <div class="total-due-today">
+        <span class="amt">{$carttotals.total}</span>
+        <span>{lang key='ordertotalduetoday'}</span>
+    </div>
+{/if}

+ 304 - 0
products.tpl

@@ -0,0 +1,304 @@
+{include file="orderforms/{$carttpl}/common.tpl"}
+
+	{if count($products) < 4}
+	<style rel="stylesheet" type="text/css">
+		@media (min-width: 1400px) {
+			#order-clouder {
+				{if count($products) == 1}
+					margin: 0 auto; max-width: 25%; width: 25%;
+				{elseif count($products) == 2}
+					margin: 0 auto; max-width: 50%; width: 50%;
+				{elseif count($products) == 3}
+					margin: 0 auto; max-width: 75%; width: 75%;
+				{else}
+				{/if}
+			}
+		}
+		
+		@media (min-width: 992px) and (max-width: 1399px) {
+			#order-clouder {
+				{if count($products) == 1}
+					margin: 0 auto; max-width: 33%; width: 33%;
+				{elseif count($products) == 2}
+					margin: 0 auto; max-width: 75%; width: 75%;
+				{else}
+				{/if}
+			}
+		}	
+	</style>
+	{/if}
+
+
+{if file_exists("templates/orderforms/{$carttpl}/layouts/head.tpl")}
+	{include file="templates/orderforms/{$carttpl}/layouts/head.tpl"}
+{/if}
+	
+<div id="order-standard_cart">
+
+    <div class="row">
+	
+        <div class="col-md-12">
+			{if file_exists("templates/orderforms/{$carttpl}/layouts/head.tpl")}
+			{else}
+        		<div class="header-lined">
+				<h1>
+					{$productGroup.name}
+				</h1>
+				{if $productGroup.headline}
+					<h4 class="text-muted">{$productGroup.headline}</h4>
+				{/if}
+				{if $productGroup.tagline}
+					<p class="text-muted">{$productGroup.tagline}</p>
+				{/if}
+			</div>
+			{/if}
+			
+			<div class="TM-categories-options justify-content-center">
+				<form>
+					<select name="gid" id="gidForm" onchange="javascript:redirectToCartPage()" class="form-control">
+						<optgroup label="Product Categories">
+							{foreach key=num item=productgroup from=$productgroups}
+								<option value="{$productgroup.routePath}"{if $gid eq $productgroup.gid} selected="selected"{/if}>{$productgroup.name}</option>
+							{/foreach}
+						</optgroup>
+						<optgroup label="Actions">
+							{if $loggedin}
+								<option value="{$WEB_ROOT}/cart.php?gid=addons"{if $gid eq "addons"} selected{/if}>{$LANG.cartproductaddons}</option>
+								{if $renewalsenabled}
+									<option value="{$WEB_ROOT}/cart.php?gid=renewals"{if $gid eq "renewals"} selected{/if}>{$LANG.domainrenewals}</option>
+								{/if}
+							{/if}
+							{if $registerdomainenabled}
+								<option value="{$WEB_ROOT}/cart.php?gid=registerdomain"{if $domain eq "register"} selected{/if}>{$LANG.navregisterdomain}</option>
+							{/if}
+							{if $transferdomainenabled}
+								<option value="{$WEB_ROOT}/cart.php?gid=transferdomain"{if $domain eq "transfer"} selected{/if}>{$LANG.transferinadomain}</option>
+							{/if}
+							<option value="{$WEB_ROOT}/cart.php?a=view"{if $action eq "view"} selected{/if}>{$LANG.viewcart}</option>
+						</optgroup>
+					</select>
+				</form>
+			</div>
+			
+            {if $errormessage}
+                <div class="alert alert-danger">
+                    {$errormessage}
+                </div>
+            {elseif !$productGroup}
+                <div class="alert alert-info">
+                    {lang key='orderForm.selectCategory'}
+                </div>
+            {/if}
+        </div>
+
+        <div class="col-md-12">
+
+			<div id="order-clouder">
+				<div id="products" class="cros-pricing-container">
+					<div class="owl-carousel pricing-box no-padding-top">
+					{foreach $products as $key => $product}
+						<div class="slide-item" id="product{$product@iteration}">
+							<div class="cros-pricing-table light fixed-height {if $product.isFeatured}active{/if}">
+										
+								<h4 id="product{$product@iteration}-name">{$product.name}</h4>
+								{if $product.featuresdesc}<div class="desc">{$product.featuresdesc}</div>{else}{/if}
+												
+
+								<div id="product{$product@iteration}-price">
+									{if $product.bid}
+										<div class="small text-muted">{$LANG.bundledeal}</div>
+										{if $product.displayprice}
+											<span class="text-secondary bolder" style="font-size: 33px;">{$product.displayPriceSimple}</span>
+										{/if}
+									{/if}
+									<div class="price">
+										{if $product.bid}
+										{elseif $product.paytype eq "free"}
+											<mark>{$LANG.orderfree}</mark>
+										{elseif $product.paytype eq "onetime"}
+											<span>{$product.pricing.onetime} </span>{$LANG.orderpaymenttermonetime}
+										{else}
+										
+											{if $product.pricing.hasconfigoptions}
+												{$LANG.from}
+											{/if}
+											
+											{assign var="ccurrency" value=$product.pricing.minprice.price->getCurrency()}
+											<span class="prefix">{$ccurrency["prefix"]}</span>
+											<span class="cost">{$product.pricing.minprice.price->toNumeric()}</span>
+											<span class="suffix">{$ccurrency["suffix"]}</span>
+											<span class="cycle">{if $product.pricing.minprice.cycle eq "monthly"}
+												/{$LANG.pricingCycleShort.monthly}
+											{elseif $product.pricing.minprice.cycle eq "quarterly"}
+												/{$LANG.pricingCycleShort.quarterly}
+											{elseif $product.pricing.minprice.cycle eq "semiannually"}
+												/{$LANG.pricingCycleShort.semiannually}
+											{elseif $product.pricing.minprice.cycle eq "annually"}
+												/{$LANG.pricingCycleShort.annually}
+											{elseif $product.pricing.minprice.cycle eq "biennially"}
+												/{$LANG.pricingCycleShort.biennially}
+											{elseif $product.pricing.minprice.cycle eq "triennially"}
+												/{$LANG.pricingCycleShort.triennially}
+											{/if}</span>
+													
+										{/if}
+									</div>
+									
+									{if $product.pricing.minprice.setupFee}
+										<div class="small text-muted">({$product.pricing.minprice.setupFee->toPrefixed()} {$LANG.ordersetupfee})</div>
+									{/if}
+											
+													
+								</div>
+										
+								<p class="PriceList-toggle collapsed" data-toggle="collapse" data-target="#PlanLists1">
+									<span>Details</span>
+								</p>
+								<table class="plan-features collapse" id="PlanLists1"
+									{foreach from=$product.features key=feature item=value}
+									  <tr>
+                                                                              <td style="padding-right: 13px;"><b>{$feature}:</b></td>
+                                                                              <td>
+	                                                                          {if $value == "Ja"} <i class="far fa-check-square" style="font-size:14px"></i>
+        	                                                                  {elseif $value == "Nein"} <i class="far fa-square" style="font-size:14px"></i>
+            	                                                                  {else}
+                	                                                              {$value}
+                    		                                                  {/if}
+                            	                                              </td>
+									    </tr>
+									{/foreach}
+								</table>
+								<!-- 
+								<ul class="plan-features collapse" id="PlanLists1">
+									{foreach from=$product.features key=feature item=value}
+										<li>TD {$feature} <b>{$value}</b></li>
+									{/foreach}
+								</ul>
+								-->	
+									
+										
+								{if $product.isFeatured}
+								<!-- Popular plan sticker -->
+									<div class="sticker-wrapper">
+										<div class="sticker">
+											{$LANG.featuredProduct}
+										</div>
+									</div>
+								<!-- //End popular plan sticker-->
+								{/if}
+								<a href="{$WEB_ROOT}/cart.php?a=add&{if $product.bid}bid={$product.bid}{else}pid={$product.pid}{/if}" class="btn btn-primary btn-block" style="margin-top: 10px;" id="product{$product@iteration}-order-button">
+                                				    {$LANG.ordernowbutton}
+                            					</a>
+
+									
+							</div>
+						</div>
+								
+								
+					{/foreach}
+					</div>
+				</div>
+						
+			</div>
+			
+			{if count($productGroup.features) > 0}
+				
+				<div class="space-30"></div>
+				
+				<div class="block-s3">
+					<div class="text-center">
+						<h2 class="no-margin">{$LANG.orderForm.includedWithPlans}</h2>
+					</div>
+				</div>
+					
+				<hr class="separator"></hr>
+				
+				<div class="cart-features no-margin-top">							
+					<div class="includes-features">
+						<ul class="list-features">
+							{foreach $productGroup.features as $features}
+								<li>{$features.feature}</li>
+							{/foreach}
+						</ul>
+					</div>
+				</div>
+			{/if}
+			
+		</div>
+	</div>
+	
+	
+</div>
+			
+{if file_exists("templates/orderforms/{$carttpl}/layouts/foot.tpl")}
+	{include file="templates/orderforms/{$carttpl}/layouts/foot.tpl"}
+{/if}
+
+
+
+
+
+
+
+<script type="text/javascript">
+	$(document).ready(function() {		
+		$(".pricing-box").owlCarousel({
+		
+			{if count($products) == 1}
+			
+				responsive:{
+					0:{
+						items:1,
+					}
+				}
+			
+			{elseif count($products) == 2}
+				
+				responsive:{
+					0:{
+						items:1,
+					},
+					768:{
+						items:2,
+					}
+				}
+			{elseif count($products) == 3}
+			
+				responsive:{
+					0:{
+						items:1,
+					},
+					768:{
+						items:2,
+					},
+					992:{
+						items:3,
+					}
+				}
+			{else}
+				responsive:{
+					0:{
+						items:1,
+					},
+					768:{
+						items:2,
+					},
+					992:{
+						items:3,
+					},
+					1200:{
+						items:4,
+					}
+				}			
+			{/if}
+		});
+	});
+
+    function redirectToCartPage()
+    {
+        var path = jQuery('#gidForm').val();
+        if (path) {
+            window.location.href = path;
+        }
+    }	
+</script>

+ 55 - 0
sidebar-categories-collapsed.tpl

@@ -0,0 +1,55 @@
+<div class="TM-categories-options hidden d-none">
+     <form>
+		<div class="form-group">
+			<select name="gid" id="gidForm" onchange="javascript:redirectToCartPage()" class="form-control">
+				<optgroup label="Product Categories">
+					{foreach key=num item=productgroup from=$productgroups}
+						<option value="{$productgroup.routePath}"{if $productinfo.gid eq $productgroup.gid} selected="selected"{/if}>{$productgroup.name}</option>
+					{/foreach}
+				</optgroup>
+                <optgroup label="Actions">
+                    {if $loggedin}
+                        <option value="{$WEB_ROOT}/cart.php?gid=addons"{if $gid eq "addons"} selected{/if}>{$LANG.cartproductaddons}</option>
+                        {if $renewalsenabled}
+                            <option value="{$WEB_ROOT}/cart.php?gid=renewals"{if $gid eq "renewals"} selected{/if}>{$LANG.domainrenewals}</option>
+                        {/if}
+                    {/if}
+                    {if $registerdomainenabled}
+                        <option value="{$WEB_ROOT}/cart.php?gid=registerdomain"{if $domain eq "register"} selected{/if}>{$LANG.navregisterdomain}</option>
+                    {/if}
+                    {if $transferdomainenabled}
+                        <option value="{$WEB_ROOT}/cart.php?gid=transferdomain"{if $domain eq "transfer"} selected{/if}>{$LANG.transferinadomain}</option>
+                    {/if}
+                    <option value="{$WEB_ROOT}/cart.php?a=view"{if $action eq "view"} selected{/if}>{$LANG.viewcart}</option>
+                </optgroup>
+			</select>
+				
+		</div>
+     </form>
+    
+	{*
+    {if !$loggedin && $currencies}
+      <form method="post" action="cart.php{if $action}?a={$action}{if $templatefile eq "domainregister"}&domain=register{elseif $templatefile eq "domaintransfer"}&domain=transfer{/if}{elseif $gid}?gid={$gid}{/if}">
+		<div class="form-group">
+			<select name="currency" onchange="submit()" class="form-control field">
+				<option value="">{$LANG.choosecurrency}</option>
+				{foreach from=$currencies item=listcurr}
+					<option value="{$listcurr.id}"{if $listcurr.id == $currency.id} selected{/if}>{$listcurr.code}</option>
+				{/foreach}
+			</select>
+		</div>
+     </form>
+    {/if}
+	*}
+
+</div>
+
+<script type="text/javascript">
+    function redirectToCartPage()
+    {
+        var path = jQuery('#gidForm').val();
+        if (path) {
+            window.location.href = path;
+        }
+    }
+</script>

+ 104 - 0
sidebar-categories.tpl

@@ -0,0 +1,104 @@
+{foreach $secondarySidebar as $panel}
+    <div menuItemName="{$panel->getName()}" class="panel card card-sidebar mb-3 {if $panel->getClass()}{$panel->getClass()}{else}panel-sidebar{/if}{if $panel->getExtra('mobileSelect') and $panel->hasChildren()} hidden-sm hidden-xs d-none d-md-block{/if}"{if $panel->getAttribute('id')} id="{$panel->getAttribute('id')}"{/if}>
+        <div class="panel-heading card-header">
+            <h3 class="panel-title">
+                {if $panel->hasIcon()}
+                    <i class="{$panel->getIcon()}"></i>&nbsp;
+                {/if}
+
+                {$panel->getLabel()}
+
+                {if $panel->hasBadge()}
+                    &nbsp;<span class="badge">{$panel->getBadge()}</span>
+                {/if}
+
+                <i class="fas fa-chevron-up card-minimise panel-minimise pull-right float-right"></i>
+            </h3>
+        </div>
+
+        {if $panel->hasBodyHtml()}
+            <div class="panel-body card-body collapsable-card-body">
+                {$panel->getBodyHtml()}
+            </div>
+        {/if}
+
+        {if $panel->hasChildren()}
+            <div class="list-group collapsable-card-body{if $panel->getChildrenAttribute('class')} {$panel->getChildrenAttribute('class')}{/if}">
+                {foreach $panel->getChildren() as $child}
+                    {if $child->getUri()}
+                        <a menuItemName="{$child->getName()}" href="{$child->getUri()}" class="list-group-item list-group-item-action{if $child->isDisabled()} disabled{/if}{if $child->getClass()} {$child->getClass()}{/if}{if $child->isCurrent()} active{/if}"{if $child->getAttribute('dataToggleTab')} data-toggle="tab"{/if}{if $child->getAttribute('target')} target="{$child->getAttribute('target')}"{/if} id="{$child->getId()}">
+                            {if $child->hasIcon()}
+                                <i class="{$child->getIcon()}"></i>&nbsp;
+                            {/if}
+
+                            {$child->getLabel()}
+
+                            {if $child->hasBadge()}
+                                &nbsp;<span class="badge">{$child->getBadge()}</span>
+                            {/if}
+                        </a>
+                    {else}
+                        <div menuItemName="{$child->getName()}" class="list-group-item{if $child->getClass()} {$child->getClass()}{/if}" id="{$child->getId()}">
+                            {if $child->hasIcon()}
+                                <i class="{$child->getIcon()}"></i>&nbsp;
+                            {/if}
+
+                            {$child->getLabel()}
+
+                            {if $child->hasBadge()}
+                                &nbsp;<span class="badge">{$child->getBadge()}</span>
+                            {/if}
+                        </div>
+                    {/if}
+                {/foreach}
+            </div>
+        {/if}
+
+        {if $panel->hasFooterHtml()}
+            <div class="panel-footer card-footer clearfix">
+                {$panel->getFooterHtml()}
+            </div>
+        {/if}
+    </div>
+
+    {if $panel->getExtra('mobileSelect') and $panel->hasChildren()}
+        {* Mobile Select only supports dropdown menus *}
+        <div class="panel card hidden-lg hidden-md d-md-none{if $panel->getClass()}{$panel->getClass()}{else}panel-default{/if}"{if $panel->getAttribute('id')} id="{$panel->getAttribute('id')}"{/if}>
+            <div class="m-0 panel-heading card-header">
+                <h3 class="panel-title">
+                    {if $panel->hasIcon()}
+                        <i class="{$panel->getIcon()}"></i>&nbsp;
+                    {/if}
+
+                    {$panel->getLabel()}
+
+                    {if $panel->hasBadge()}
+                        &nbsp;<span class="badge">{$panel->getBadge()}</span>
+                    {/if}
+                </h3>
+            </div>
+
+            <div class="panel-body card-body">
+                <form role="form">
+                    <select class="form-control custom-select" onchange="selectChangeNavigate(this)">
+                        {foreach $panel->getChildren() as $child}
+                            <option menuItemName="{$child->getName()}" value="{$child->getUri()}" class="list-group-item" {if $child->isCurrent()}selected="selected"{/if}>
+                                {$child->getLabel()}
+
+                                {if $child->hasBadge()}
+                                    ({$child->getBadge()})
+                                {/if}
+                            </option>
+                        {/foreach}
+                    </select>
+                </form>
+            </div>
+
+            {if $panel->hasFooterHtml()}
+                <div class="panel-footer card-footer">
+                    {$panel->getFooterHtml()}
+                </div>
+            {/if}
+        </div>
+    {/if}
+{/foreach}

+ 2 - 0
theme.yaml

@@ -0,0 +1,2 @@
+config:
+    parent: standard_cart

BIN
thumbnail.gif


+ 892 - 0
viewcart.tpl

@@ -0,0 +1,892 @@
+{if $smarty.post.onepageorder == "1"}
+
+    {if $action eq 'checkout'}
+        {include file="orderforms/{$carttpl}/checkout.tpl"}
+    {else}
+        <div class="cartsummary_cont">
+            <div class="heading">
+                <ul>
+                    <li>
+                        {$LANG.orderdesc}
+                    </li>
+                    <li>
+                        {$LANG.orderprice}
+                    </li>
+                </ul>
+            </div>
+            <div class="summary_body">
+                {if $errormessage}
+                    <div class="errorbox" style="display:block;">
+                        {$errormessage|replace:'<li>':' &nbsp;#&nbsp; '} &nbsp;#&nbsp;
+                    </div>
+                {elseif $promotioncode && $rawdiscount eq "0.00"}
+                    <div class="errorbox" style="display:block;">
+                        {$LANG.promoappliedbutnodiscount}
+                    </div>
+                {/if}
+				
+				<div class="cart-contents collapse" id="CartContents">
+					{if $cartitems == 0}            
+						<div class="emptycart">
+							{$LANG.cartempty}
+						</div>
+					{/if}
+                {foreach $products as $num => $product}
+                    <div class="summary_products">
+                        <ul>
+                            <li>
+								<span class="product-group">{$product.productinfo.groupname}</span>
+                                <span class="product-name">{$product.productinfo.name}</span>
+                                {if $product.domain}<span class="product-domain text-muted">{$product.domain}</span>{/if}
+                            </li>
+                            <li>{$product.pricing.baseprice}{if $product.proratadate}<br />({$LANG.orderprorata} {$product.proratadate}){/if}</li>
+                        </ul>
+
+                        {if $product.configoptions}
+                            <div class="configurableoptions">
+                                {foreach key=confnum item=configoption from=$product.configoptions}
+                                    <div class="clearfix">
+                                        <span class="pull-left float-left">&nbsp;&raquo; {$configoption.name}: {$configoption.optionname}</span>
+                                        <span class="pull-right float-right">{$configoption.recurring} {* {if $configoption.setup} + {$configoption.setup} {$LANG.ordersetupfee}{/if} *}</span>
+                                    </div>
+                                {/foreach}
+                            </div>
+                        {/if}
+                        {foreach $product.addons as $addonnum => $addon}
+                            <div class="clearfix">
+                                <span class="pull-left float-left">+ {$addon.name}</span></li>
+                                <span class="pull-right float-right">{$addon.recurring}</span></li>
+                            </div>
+                        {/foreach}
+                    </div>
+                {/foreach}
+                {foreach $addons as $num => $addon}
+                    <div class="summary_addons">
+                        <div class="clearfix">
+                            <span class="pull-left float-left">+ {$addon.name}<br />{$addon.productname}{if $addon.domainname} - {$addon.domainname}<br />{/if}</span>
+                            <span class="pull-right float-right">{$addon.recurring}</span>
+                        </div>
+                    </div>
+                {/foreach}
+                {foreach $domains as $num => $domain}
+                    <div class="summary_domains">
+                        <div class="clearfix">
+                            <span class="pull-left float-left">
+                        {if $domain.type eq "register"}{$LANG.orderdomainregistration}{else}{$LANG.orderdomaintransfer}{/if} - <br /><strong>{$domain.domain}</strong> - {$domain.regperiod} {$LANG.orderyears}<br />
+                        {if $domain.dnsmanagement}&nbsp;&raquo; {$LANG.domaindnsmanagement}<br />{/if}
+                        {if $domain.emailforwarding}&nbsp;&raquo; {$LANG.domainemailforwarding}<br />{/if}
+                        {if $domain.idprotection}&nbsp;&raquo; {$LANG.domainidprotection}<br />{/if}
+                    </span>
+                    <span class="pull-right float-right">{$domain.price}</span>
+                </div>
+            </div>
+        {/foreach}
+
+
+
+        {foreach $renewals as $num => $domain}
+            <div class="summary_domains">
+                <ul>
+                    <li>
+                        <strong>{$LANG.domainrenewal}</strong><br /><i>{$domain.domain} - {$domain.regperiod} {$LANG.orderyears}</i><br />
+                        {if $domain.dnsmanagement}&nbsp;&raquo; {$LANG.domaindnsmanagement}<br />{/if}
+                        {if $domain.emailforwarding}&nbsp;&raquo; {$LANG.domainemailforwarding}<br />{/if}
+                        {if $domain.idprotection}&nbsp;&raquo; {$LANG.domainidprotection}<br />{/if}
+                    </li>
+                    <li>{$domain.price}</li>
+                </ul>
+            </div>
+        {/foreach}
+
+        {if $product.pricing.setup || $product.pricing.recurring || $product.pricing.addons}
+            <div class="subtotal">
+                {if $product.pricing.setup}
+                    <div class="clearfix">
+                        <span class="pull-left float-left">{$LANG.cartsetupfees}:</span>
+                        <span class="pull-right float-right">{$product.pricing.setup}</span>
+                    </div>
+                {/if}	
+                {foreach from=$product.pricing.recurringexcltax key=cycle item=recurring}
+                    <div class="clearfix">
+                        <span class="pull-left float-left text-muted">{$cycle}:</span>
+                        <span class="pull-right float-right text-muted">{$recurring}</span>
+                    </div>
+                {/foreach}
+            </div>
+        {/if}
+
+        <div class="subtotal">			
+            <ul>
+                <li>{$LANG.ordersubtotal}</li>
+                <li>{$subtotal}</li>
+            </ul>
+        </div>
+
+        {if $promotioncode}
+            <div class="promotion">
+                <ul>
+                    <li>{$promotiondescription}</li>
+                    <li>- {$discount}</li>
+                </ul>
+            </div>
+        {/if}
+
+        <div class="subtotal">			
+            {if $taxrate}
+                <ul>
+                    <li>{$taxname} @ {$taxrate}%</li>
+                    <li>{$taxtotal}</li>
+                </ul>
+            {/if}
+            {if $taxrate2}
+                <ul>
+                    <li>{$taxname2} @ {$taxrate2}%</li>
+                    <li>{$taxtotal2}</li>
+                </ul>
+            {/if}
+        </div>
+		</div>
+
+        <div class="total">
+			<div class="d-flex align-items-center">
+				<button type="button" class="btn btn-cart-contents"><i class="fas fa-chevron-up"></i></button>
+			</div>
+            <ul>
+                <li><span class="text-muted total-text">{$LANG.ordertotalduetoday}</span></li>
+                <li>{$total}</li>
+            </ul>
+        </div>
+        <div class="cart-loader">
+            <i class="fad fa-circle-notch fa-spin fa-2x"></i>
+        </div>	
+    </div>
+</div>
+{/if}
+
+
+
+
+
+{else}
+
+
+
+
+
+
+
+
+
+    {if $checkout} {else}
+        <script>
+            // Define state tab index value
+            var statesTab = 10;
+            var stateNotRequired = true;
+        </script>
+        {include file="orderforms/{$carttpl}/common.tpl"}
+        <script type="text/javascript" src="{$BASE_PATH_JS}/StatesDropdown.js"></script>
+    {/if}
+
+    {if $cartitems > 0}
+        {if file_exists("templates/orderforms/{$carttpl}/layouts/head.tpl")}
+            {include file="templates/orderforms/{$carttpl}/layouts/head.tpl"}
+        {/if}
+    {/if}
+
+    <div id="order-standard_cart">
+
+        {if $cartitems > 0}
+            <div class="row">
+
+                <div class="col-md-12">
+                    {if file_exists("templates/orderforms/{$carttpl}/layouts/head.tpl")}
+                    {else}
+                        <div class="header-lined">
+                            <h1>{if !$checkout}{$LANG.cartreviewcheckout}{else}{$LANG.orderForm.checkout}{/if}</h1>
+                        </div>
+                    {/if}
+
+                    {include file="orderforms/{$carttpl}/sidebar-categories-collapsed.tpl"}
+
+                </div>
+
+
+                <div class="col-md-12">
+
+
+
+                    <div class="row ajaxcart_cont">
+                        <div class="col-md-8 col-lg-9">
+                            {if $checkout} {else}
+
+
+
+                                {if $promoerrormessage}
+                                    <div class="alert alert-warning text-center" role="alert">
+                                        {$promoerrormessage}
+                                    </div>
+                                {elseif $errormessage}
+                                    <div class="alert alert-danger" role="alert">
+                                        <p>{$LANG.orderForm.correctErrors}:</p>
+                                        <ul>
+                                            {$errormessage}
+                                        </ul>
+                                    </div>
+                                {elseif $promotioncode && $rawdiscount eq "0.00"}
+                                    <div class="alert alert-info text-center" role="alert">
+                                        {$LANG.promoappliedbutnodiscount}
+                                    </div>
+                                {elseif $promoaddedsuccess}
+                                    <div class="alert alert-success text-center" role="alert">
+                                        {$LANG.orderForm.promotionAccepted}
+                                    </div>
+                                {/if}
+
+                                {if $bundlewarnings}
+                                    <div class="alert alert-warning" role="alert">
+                                        <strong>{$LANG.bundlereqsnotmet}</strong><br />
+                                        <ul>
+                                            {foreach from=$bundlewarnings item=warning}
+                                                <li>{$warning}</li>
+                                                {/foreach}
+                                        </ul>
+                                    </div>
+                                {/if}
+
+
+
+                                <form method="post" action="{$smarty.server.PHP_SELF}?a=view">
+                                    <div class="panel panel-default cart-item">
+                                        <div class="panel-heading">
+                                            <div class="row">
+                                                <div class="{if $showqtyoptions}col-sm-5{else}col-sm-7{/if} col-xs-7">
+                                                    <strong>{$LANG.orderForm.productOptions}</strong>
+                                                </div>
+                                                {if $showqtyoptions}
+                                                    <div class="col-sm-2 hidden-xs d-none d-sm-block text-center">
+                                                        <strong>{$LANG.orderForm.qty}</strong>
+                                                    </div>
+                                                {/if}
+                                                <div class="col-sm-4 col-xs-5 col-5 text-right">
+                                                    <strong>{$LANG.orderForm.priceCycle}</strong>
+                                                </div>
+                                            </div>
+                                        </div>
+                                        <div class="no-border no-margin">
+
+                                            {foreach $products as $num => $product}
+                                                <div class="panel-body">
+                                                    <div class="row">
+                                                        <div class="{if $showqtyoptions}col-sm-5{else}col-sm-7{/if} col-xs-7 col-7">
+                                                            <span class="item-group">
+                                                                {$product.productinfo.groupname}
+                                                            </span>													
+                                                            <span class="item-title">
+                                                                {$product.productinfo.name}
+                                                                <a href="{$smarty.server.PHP_SELF}?a=confproduct&i={$num}" class="btn btn-icon btn-xs" data-toggle="tooltip" data-placement="top" data-trigger="manual" title="{$LANG.orderForm.edit}">
+                                                                    <i class="fas fa-edit"></i>
+                                                                </a>
+                                                                <span class="visible-xs-inline d-inline d-sm-none">
+                                                                    <button type="button" class="btn btn-icon btn-xs" data-toggle="tooltip" data-placement="top" data-trigger="manual" title="{$LANG.orderForm.remove}" onclick="removeItem('p', '{$num}')">
+                                                                        <i class="fas fa-trash-alt"></i>
+                                                                    </button>
+                                                                </span>
+                                                            </span>
+                                                            {if $product.domain}
+                                                                <span class="item-domain">
+                                                                    <i>{$product.domain}</i>
+                                                                </span>
+                                                            {/if}
+                                                            {if $product.configoptions}
+                                                                <div class="item-configoption">
+                                                                    <small>
+                                                                        {foreach key=confnum item=configoption from=$product.configoptions}
+                                                                            &nbsp;&raquo; {$configoption.name}: {if $configoption.type eq 1 || $configoption.type eq 2}{$configoption.option}{elseif $configoption.type eq 3}{if $configoption.qty}{$configoption.option}{else}{$LANG.no}{/if}{elseif $configoption.type eq 4}{$configoption.qty} x {$configoption.option}{/if}<br />
+                                                                        {/foreach}
+                                                                    </small>
+                                                                </div>
+                                                            {/if}
+                                                        </div>
+                                                        {if $showqtyoptions}
+                                                            <div class="col-sm-2 item-qty">
+                                                                {if $product.allowqty}
+                                                                    <input type="number" name="qty[{$num}]" value="{$product.qty}" class="form-control text-center" min="0" />
+                                                                    <button type="submit" class="btn btn-xs btn-default">
+                                                                        {$LANG.orderForm.update}
+                                                                    </button>
+                                                                {/if}
+                                                            </div>
+                                                        {/if}
+                                                        <div class="col-sm-4 item-price">
+                                                            <span>{$product.pricing.totalTodayExcludingTaxSetup}</span>
+                                                            <span class="cycle">{$product.billingcyclefriendly}</span>
+                                                            {if $product.pricing.productonlysetup}
+                                                                {$product.pricing.productonlysetup->toPrefixed()} {$LANG.ordersetupfee}
+                                                            {/if}
+                                                            {if $product.proratadate}<br />({$LANG.orderprorata} {$product.proratadate}){/if}
+                                                        </div>
+                                                        <div class="col-sm-1 hidden-xs d-none d-sm-block">
+                                                            <button type="button" class="btn btn-icon btn-xs" data-toggle="tooltip" data-placement="top" data-trigger="manual" title="{$LANG.orderForm.remove}" onclick="removeItem('p', '{$num}')">
+                                                                <i class="fas fa-trash-alt"></i>
+                                                            </button>
+                                                        </div>
+                                                    </div>
+
+                                                    {foreach $product.addons as $addonnum => $addon}
+                                                        <div class="item-addons">
+                                                            <div class="row">
+                                                                <div class="{if $showAddonQtyOptions}col-sm-5{else}col-sm-7{/if}">
+                                                                    <span class="item-group">
+                                                                        {$LANG.orderaddon}
+                                                                    </span>
+                                                                    <span class="item-title">
+                                                                        {$addon.name}
+                                                                    </span>
+                                                                    {if $addon.setup}
+                                                                        <span class="item-setup">
+                                                                            {$addon.setup} {$LANG.ordersetupfee}
+                                                                        </span>
+                                                                    {/if}
+                                                                </div>
+																{if $showAddonQtyOptions}
+																	<div class="col-sm-2 item-qty">
+																		{if $addon.allowqty === 2}
+																			<input type="number" name="paddonqty[{$num}][{$addonnum}]" value="{$addon.qty}" class="form-control text-center" min="0" />
+																			<button type="submit" class="btn btn-xs">
+																				{$LANG.orderForm.update}
+																			</button>
+																		{/if}
+																	</div>
+																{/if}
+                                                                <div class="col-sm-4 item-price">
+                                                                    <span>{$addon.totaltoday}</span>
+                                                                    <span class="cycle">{$addon.billingcyclefriendly}</span>
+                                                                </div>
+                                                            </div>
+                                                        </div>
+                                                    {/foreach}
+                                                </div>
+
+                                            {/foreach}
+
+                                            {foreach $addons as $num => $addon}
+                                                <div class="panel-body">
+                                                    <div class="row">
+                                                         <div class="{if $showAddonQtyOptions}col-sm-5{else}col-sm-7{/if}">
+                                                            <span class="item-title">
+                                                                {$addon.name}
+                                                                <span class="visible-xs-inline d-inline d-sm-none">
+                                                                    <button type="button" class="btn btn-icon btn-xs" data-toggle="tooltip" data-placement="top" data-trigger="manual" title="{$LANG.orderForm.remove}" onclick="removeItem('a', '{$num}')">
+                                                                        <i class="fas fa-trash-alt"></i>
+                                                                    </button>
+                                                                </span>
+                                                            </span>
+                                                            <span class="item-group">
+                                                                {$addon.productname}
+                                                            </span>
+                                                            {if $addon.domainname}
+                                                                <span class="item-domain">
+                                                                    {$addon.domainname}
+                                                                </span>
+                                                            {/if}
+                                                            {if $addon.setup}
+                                                                <span class="item-setup">
+                                                                    {$addon.setup} {$LANG.ordersetupfee}
+                                                                </span>
+                                                            {/if}
+                                                        </div>
+														{if $showAddonQtyOptions}
+															<div class="col-sm-2 item-qty">
+																{if $addon.allowqty === 2}
+																	<input type="number" name="addonqty[{$num}]" value="{$addon.qty}" class="form-control text-center" min="0" />
+																	<button type="submit" class="btn btn-xs">
+																		{$LANG.orderForm.update}
+																	</button>
+																{/if}
+															</div>
+														{/if}
+                                                        <div class="col-sm-4 item-price">
+                                                            <span>{$addon.pricingtext}</span>
+                                                            <span class="cycle">{$addon.billingcyclefriendly}</span>
+                                                        </div>
+                                                        <div class="col-sm-1 hidden-xs d-none d-sm-block">
+                                                            <button type="button" class="btn btn-icon btn-xs" data-toggle="tooltip" data-placement="top" data-trigger="manual" title="{$LANG.orderForm.remove}" onclick="removeItem('a', '{$num}')">
+                                                                <i class="fas fa-trash-alt"></i>
+                                                            </button>
+                                                        </div>
+                                                    </div>
+                                                </div>
+                                            {/foreach}
+
+                                            {foreach $domains as $num => $domain}
+                                                <div class="panel-body">
+                                                    <div class="row">
+                                                        <div class="col-sm-7">
+                                                            <span class="item-title">
+                                                        {if $domain.type eq "register"}{$LANG.orderdomainregistration}{else}{$LANG.orderdomaintransfer}{/if}
+                                                        <a href="{$smarty.server.PHP_SELF}?a=confdomains" class="btn btn-icon btn-xs" data-toggle="tooltip" data-placement="top" data-trigger="manual" title="{$LANG.orderForm.edit}">
+                                                            <i class="fas fa-edit"></i>
+                                                        </a>
+                                                        <span class="visible-xs-inline d-inline d-sm-none">
+                                                            <button type="button" class="btn btn-icon btn-xs" data-placement="top" data-trigger="manual" title="{$LANG.cartremove}" onclick="removeItem('d', '{$num}')">
+                                                                <i class="fas fa-trash-alt"></i>
+                                                            </button>
+                                                        </span>
+                                                    </span>
+                                                    {if $domain.domain}
+                                                        <span class="item-domain">
+                                                            {$domain.domain}
+                                                        </span>
+                                                    {/if}
+                                                    <div class="item-addons">
+                                                        {if $domain.dnsmanagement}{$LANG.domaindnsmanagement}<br />{/if}
+                                                        {if $domain.emailforwarding}{$LANG.domainemailforwarding}<br />{/if}
+                                                        {if $domain.idprotection}{$LANG.domainidprotection}<br />{/if}
+                                                    </div>
+                                                </div>
+                                                <div class="col-sm-4 item-price">
+                                                    {if count($domain.pricing) == 1 || $domain.type == 'transfer'}
+                                                        <span name="{$domain.domain}Price">{$domain.price}</span>
+                                                        <span class="cycle">{$domain.regperiod} {$domain.yearsLanguage}</span>
+                                                        <span class="renewal cycle">
+                                                            {if isset($domain.renewprice)}{lang key='domainrenewalprice'} <span class="renewal-price cycle">{$domain.renewprice->toPrefixed()}{$domain.shortRenewalYearsLanguage}{/if}</span>
+                                                        </span>
+                                                    {else}
+                                                        <span name="{$domain.domain}Price">{$domain.price}</span>
+                                                        <div class="dropdown">
+                                                            <button class="btn btn-default btn-xs dropdown-toggle" type="button" id="{$domain.domain}Pricing" name="{$domain.domain}Pricing" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
+                                                                {$domain.regperiod} {$domain.yearsLanguage}
+                                                                <span class="caret"></span>
+                                                            </button>
+                                                            <ul class="dropdown-menu dropdown-menu dropdown-caret dropdown-checkboxes dropdown-menu-right dropdown-close" aria-labelledby="{$domain.domain}Pricing">
+                                                                {foreach $domain.pricing as $years => $price}
+                                                                    <li>
+                                                                        <a class="dropdown-item" href="#" onclick="selectDomainPeriodInCart('{$domain.domain}', '{$price.register}', {$years}, '{if $years == 1}{lang key='orderForm.year'}{else}{lang key='orderForm.years'}{/if}');return false;">
+                                                                        {$years} {if $years == 1}{lang key='orderForm.year'}{else}{lang key='orderForm.years'}{/if} @ {$price.register}
+                                                                    </a>
+                                                                </li>
+                                                            {/foreach}
+                                                        </ul>
+                                                    </div>
+                                                    <span class="renewal cycle">
+                                                        {lang key='domainrenewalprice'} <span class="renewal-price cycle">{if isset($domain.renewprice)}{$domain.renewprice->toPrefixed()}{$domain.shortRenewalYearsLanguage}{/if}</span>
+                                                    </span>
+                                                {/if}
+                                            </div>
+                                            <div class="col-sm-1 hidden-xs d-none d-sm-block">
+                                                <button type="button" class="btn btn-icon btn-xs" data-toggle="tooltip" data-placement="top" data-trigger="manual" title="{$LANG.orderForm.remove}" onclick="removeItem('d', '{$num}')">
+                                                    <i class="fas fa-trash-alt"></i>
+                                                </button>
+                                            </div>
+                                        </div>
+                                    </div>
+                                {/foreach}
+
+                                {foreach $renewals as $num => $domain}
+                                    <div class="panel-body">
+                                        <div class="row">
+                                            <div class="col-sm-7">
+                                                <span class="item-title">
+                                                    {$LANG.domainrenewal}
+                                                    <span class="visible-xs-inline d-block d-sm-none">
+                                                        <button type="button" class="btn btn-icon btn-xs" data-placement="top" data-trigger="manual" title="{$LANG.cartremove}" onclick="removeItem('r', '{$num}')">
+                                                            <i class="fas fa-trash-alt"></i>
+                                                        </button>
+                                                    </span>
+                                                </span>
+                                                <span class="item-domain">
+                                                    {$domain.domain}
+                                                </span>
+                                                <div class="item-addons">
+                                                    {if $domain.dnsmanagement}{$LANG.domaindnsmanagement}<br />{/if}
+                                                    {if $domain.emailforwarding}{$LANG.domainemailforwarding}<br />{/if}
+                                                    {if $domain.idprotection}{$LANG.domainidprotection}<br />{/if}
+                                                </div>
+                                            </div>
+                                            <div class="col-sm-4 item-price">
+                                                <span>{$domain.price}</span>
+                                                <span class="cycle">{$domain.regperiod} {$LANG.orderyears}</span>
+                                            </div>
+                                            <div class="col-sm-1 hidden-xs d-block d-sm-none">
+                                                <button type="button" class="btn btn-icon btn-xs" data-toggle="tooltip" data-placement="top" data-trigger="manual" title="{$LANG.orderForm.remove}" onclick="removeItem('r', '{$num}')">
+                                                    <i class="fas fa-trash-alt"></i>
+                                                </button>
+                                            </div>
+                                        </div>
+                                    </div>
+                                {/foreach}
+
+                                {foreach $upgrades as $num => $upgrade}
+                                    <div class="panel-body">
+                                        <div class="row">
+                                            <div class="{if $showUpgradeQtyOptions}col-sm-5{else}col-sm-7{/if}">
+                                                <span class="item-title">
+                                                    {$LANG.upgrade}
+                                                </span>
+                                                <span class="item-group">
+                                                    {if $upgrade->type == 'service'}
+                                                        {$upgrade->originalProduct->productGroup->name}<br>{$upgrade->originalProduct->name} => {$upgrade->newProduct->name}
+                                                    {elseif $upgrade->type == 'addon'}
+                                                        {$upgrade->originalAddon->name} => {$upgrade->newAddon->name}
+                                                    {/if}
+                                                </span>
+                                                <span class="item-domain">
+                                                    {if $upgrade->type == 'service'}
+                                                        {$upgrade->service->domain}
+                                                    {/if}
+                                                </span>
+                                            </div>
+                                            {if $showUpgradeQtyOptions}
+                                                <div class="col-sm-2 item-qty">
+                                                    {if $upgrade->allowMultipleQuantities}
+                                                        <input type="number" name="upgradeqty[{$num}]" value="{$upgrade->qty}" class="form-control text-center" min="{$upgrade->minimumQuantity}" />
+                                                        <button type="submit" class="btn btn-xs">
+                                                            {$LANG.orderForm.update}
+                                                        </button>
+                                                    {/if}
+                                                </div>
+                                            {/if}
+                                            <div class="col-sm-4 item-price">
+                                                <span>{$upgrade->newRecurringAmount}</span>
+                                                <span class="cycle">{$upgrade->localisedNewCycle}</span>
+                                            </div>
+                                            <div class="col-sm-1">
+                                                <button type="button" class="btn btn-icon btn-xs" data-toggle="tooltip" data-placement="top" data-trigger="manual" title="{$LANG.orderForm.remove}" onclick="removeItem('u', '{$num}')">
+                                                    <i class="fas fa-trash-alt"></i>
+                                                </button>
+                                            </div>
+                                        </div>
+                                        {if $upgrade->totalDaysInCycle > 0}
+                                            <div class="row row-upgrade-credit">
+                                                <div class="col-sm-7">
+                                                    <span class="item-group">
+                                                        {$LANG.upgradeCredit}
+                                                    </span>
+                                                    <div class="upgrade-calc-msg">
+                                                        {lang key="upgradeCreditDescription" daysRemaining=$upgrade->daysRemaining totalDays=$upgrade->totalDaysInCycle}
+                                                    </div>
+                                                </div>
+                                                <div class="col-sm-4 item-price">
+                                                    <span>-{$upgrade->creditAmount}</span>
+                                                </div>
+                                            </div>
+                                        {/if}
+                                    </div>
+                                {/foreach}
+
+
+                                {if $cartitems == 0}
+                                    <div class="view-cart-empty">
+                                        {$LANG.cartempty}
+                                    </div>
+                                {/if}
+
+                            </div>
+
+                            {if $cartitems > 0}
+                                <div class="panel-footer light">
+                                    <div class=" d-flex align-items-center space-between">
+                                        <a href="cart.php" class="btn btn-default btn-xs" id="continueShopping">
+                                            <i class="fas fa-reply"></i>
+                                            <span>{$LANG.orderForm.continueShopping}</span>
+                                        </a>
+                                        <button type="button" class="btn btn-default btn-xs" id="btnEmptyCart">
+                                            <i class="fas fa-trash-alt"></i>
+                                            <span>{$LANG.emptycart}</span>
+                                        </button>
+                                    </div>
+                                </div>
+                            {/if}
+                        </div>
+                    </form>
+
+                    {foreach $hookOutput as $output}
+                        <div>
+                            {$output}
+                        </div>
+                    {/foreach}
+
+                    {foreach $gatewaysoutput as $gatewayoutput}
+                        <div class="view-cart-gateway-checkout">
+                            {$gatewayoutput}
+                        </div>
+                    {/foreach}
+
+                    <div class="view-cart-tabs">
+                        <ul class="nav nav-tabs" role="tablist">
+                            <li role="presentation" class="active"><a href="#applyPromo" class="nav-link active" aria-controls="applyPromo" role="tab" data-toggle="tab">{$LANG.orderForm.applyPromoCode}</a></li>
+                                {if $taxenabled && !$loggedin}
+                                <li role="presentation"><a href="#calcTaxes" class="nav-link" aria-controls="calcTaxes" role="tab" data-toggle="tab">{$LANG.orderForm.estimateTaxes}</a></li>
+                                {/if}
+                        </ul>
+                        <div class="tab-content">
+                            <div role="tabpanel" class="tab-pane active promo" id="applyPromo">
+                                {if $promotioncode}
+                                    <div class="view-cart-promotion-code">
+                                        {$promotioncode} - {$promotiondescription}
+                                    </div>
+                                    <div class="text-center">
+                                        <a href="{$smarty.server.PHP_SELF}?a=removepromo" class="btn btn-default btn-sm">
+                                            {$LANG.orderForm.removePromotionCode}
+                                        </a>
+                                    </div>
+                                {else}
+                                    <form method="post" action="cart.php?a=view">
+                                        <div class="form-group prepend-icon">
+                                            <div class="row">
+												<div class="col-md-7 col-lg-8 col-xl-9">
+													<label for="cardno" class="field-icon">
+														<i class="fas fa-ticket-alt"></i>
+													</label>
+													<input type="text" name="promocode" id="inputPromotionCode" class="form-coontrol field" placeholder="{lang key="orderPromoCodePlaceholder"}" required="required" style="width: 100%;">
+												</div>
+												<div class="col-md-5 col-lg-4 col-xl-3">
+													<span class="input-group-btn">
+														<button type="submit" name="validatepromo" class="btn btn-primary btn-block " value="{$LANG.orderpromovalidatebutton}">
+															{$LANG.orderpromovalidatebutton}
+														</button>
+													</span>
+												</div>
+                                            </div>
+
+                                        </div>
+
+                                    </form>
+                                {/if}
+                            </div>
+                            <div role="tabpanel" class="tab-pane" id="calcTaxes">
+
+                                <form method="post" action="cart.php?a=setstateandcountry">
+                                    <div class="form-group">
+                                        <label for="inputState" class="control-label">{$LANG.orderForm.state}</label>
+                                        <input type="text" name="state" id="inputState" value="{$clientsdetails.state}" class="form-control"{if $loggedin} disabled="disabled"{/if} />
+                                    </div>
+                                    <div class="form-group">
+                                        <label for="inputCountry" class="control-label">{$LANG.orderForm.country}</label>
+                                        <select name="country" id="inputCountry" class="form-control">
+                                            {foreach $countries as $countrycode => $countrylabel}
+                                                <option value="{$countrycode}"{if (!$country && $countrycode == $defaultcountry) || $countrycode eq $country} selected{/if}>
+                                                    {$countrylabel}
+                                                </option>
+                                            {/foreach}
+                                        </select>
+                                    </div>
+                                    <div class="form-group text-center">
+                                        <button type="submit" class="btn btn-primary">
+                                            {$LANG.orderForm.updateTotals}
+                                        </button>
+                                    </div>
+                                </form>
+
+                            </div>
+                        </div>
+                    </div>
+
+
+
+
+
+                {/if}
+            {if !$checkout}{else}
+
+                {include file="orderforms/$carttpl/checkout.tpl"}
+				
+				{if $servedOverSsl}
+					<div class="alert alert-warning" style="margin-top: 30px; font-size: 90%;">
+						{$LANG.ordersecure} (<strong>{$ipaddress}</strong>) {$LANG.ordersecure2}
+					</div>
+				{/if}
+
+            {/if}
+
+        </div>
+        <div class="col-md-4 col-lg-3">
+			<div  id="sidebar">
+				<div class="sidebar__inner blocks cartsummary">
+					<div class="order-summary">
+
+						<div class="loader w-hidden" id="orderSummaryLoader">
+							<i class="fas fa-fw fa-sync fa-spin"></i>
+						</div>
+
+						<h2>{$LANG.ordersummary}</h2>
+						<div class="summary-container">
+
+							<div class="subtotal clearfix">
+								<span class="pull-left float-left">{$LANG.ordersubtotal}</span>
+								<span id="subtotal" class="pull-right float-right">{$subtotal}</span>
+							</div>
+							{if $promotioncode || $taxrate || $taxrate2}
+								<div class="bordered-totals">
+									{if $promotioncode}
+										<div class="clearfix">
+											<span class="pull-left float-left">{$promotiondescription}</span>
+											<span id="discount" class="pull-right float-right">{$discount}</span>
+										</div>
+									{/if}
+									{if $taxrate}
+										<div class="clearfix">
+											<span class="pull-left float-left">{$taxname} @ {$taxrate}%</span>
+											<span id="taxTotal1" class="pull-right float-right">{$taxtotal}</span>
+										</div>
+									{/if}
+									{if $taxrate2}
+										<div class="clearfix">
+											<span class="pull-left float-left">{$taxname2} @ {$taxrate2}%</span>
+											<span id="taxTotal2" class="pull-right float-right">{$taxtotal2}</span>
+										</div>
+									{/if}
+								</div>
+							{/if}
+							<div class="recurring-totals clearfix">
+								<span class="pull-left float-left">{$LANG.orderForm.totals}</span>
+								<span id="recurring" class="pull-right float-right recurring-charges">
+									<span id="recurringMonthly" {if !$totalrecurringmonthly}style="display:none;"{/if}>
+										<span class="cost">{$totalrecurringmonthly}</span> {$LANG.orderpaymenttermmonthly}<br />
+									</span>
+									<span id="recurringQuarterly" {if !$totalrecurringquarterly}style="display:none;"{/if}>
+										<span class="cost">{$totalrecurringquarterly}</span> {$LANG.orderpaymenttermquarterly}<br />
+									</span>
+									<span id="recurringSemiAnnually" {if !$totalrecurringsemiannually}style="display:none;"{/if}>
+										<span class="cost">{$totalrecurringsemiannually}</span> {$LANG.orderpaymenttermsemiannually}<br />
+									</span>
+									<span id="recurringAnnually" {if !$totalrecurringannually}style="display:none;"{/if}>
+										<span class="cost">{$totalrecurringannually}</span> {$LANG.orderpaymenttermannually}<br />
+									</span>
+									<span id="recurringBiennially" {if !$totalrecurringbiennially}style="display:none;"{/if}>
+										<span class="cost">{$totalrecurringbiennially}</span> {$LANG.orderpaymenttermbiennially}<br />
+									</span>
+									<span id="recurringTriennially" {if !$totalrecurringtriennially}style="display:none;"{/if}>
+										<span class="cost">{$totalrecurringtriennially}</span> {$LANG.orderpaymenttermtriennially}<br />
+									</span>
+								</span>
+							</div>
+
+							<div class="total-due-today total-due-today-padded">
+								<span id="totalDueToday" class="amt">{$total}</span>
+								<span>{$LANG.ordertotalduetoday}</span>
+							</div>
+
+							<div class="express-checkout-buttons">
+								{foreach $expressCheckoutButtons as $checkoutButton}
+									{$checkoutButton}
+									<div class="separator">
+										- {$LANG.or|strtoupper} -
+									</div>
+								{/foreach}
+							</div>
+
+							<div class="text-right">
+							{if $checkout}{else}<a href="cart.php?a=checkout&e=false" class="btn btn-primary btn-lg btn-checkout{if $cartitems == 0} disabled{/if}" id="checkout">
+									{$LANG.orderForm.checkout}
+									<i class="fas fa-arrow-right"></i>
+								</a>{/if}									
+							</div>
+
+						</div>
+					</div>
+				</div>
+			</div>
+        </div>
+    </div>
+</div>
+</div>
+
+
+{else}
+
+    <div class="mw-928 mx-auto">	
+        <div class="alert-lg no-data no-border">
+            <div class="icon">
+                <i class="fas fa-trash-alt"></i>
+            </div>
+            <div class="text">
+                <h4>{$LANG.cartempty}</h4>
+            </div>
+            <a href="{if $themesettings.orderform.orderopc != ""}order{else}cart{/if}.php" class="btn btn-default" id="continueShopping">
+                {$LANG.navservicesorder}
+            </a>
+        </div>
+    </div>
+
+{/if}
+
+
+</div>
+
+{if file_exists("templates/orderforms/{$carttpl}/layouts/foot.tpl")}
+    {include file="templates/orderforms/{$carttpl}/layouts/foot.tpl"}
+{/if}
+
+
+<script type="text/javascript" src="{$WEB_ROOT}/templates/orderforms/{$carttpl}/js/ResizeSensor.js"></script>
+<script type="text/javascript" src="{$WEB_ROOT}/templates/orderforms/{$carttpl}/js/jquery.sticky-sidebar.min.js"></script>
+
+<script>
+    jQuery('#sidebar').stickySidebar({
+        topSpacing: 60,
+        bottomSpacing: 60,
+        minWidth: 992,
+        containerSelector: '.ajaxcart_cont',
+        innerWrapperSelector: '.sidebar__inner'
+    });
+</script>
+
+<form method="post" action="cart.php">
+    <input type="hidden" name="a" value="remove" />
+    <input type="hidden" name="r" value="" id="inputRemoveItemType" />
+    <input type="hidden" name="i" value="" id="inputRemoveItemRef" />
+    <div class="modal fade modal-remove-item" id="modalRemoveItem" tabindex="-1" role="dialog">
+        <div class="modal-dialog" role="document">
+            <div class="modal-content">
+                <div class="modal-header d-block">
+                    <h4 class="modal-title">
+						<button type="button" class="close" data-dismiss="modal" aria-label="{$LANG.orderForm.close}">
+							<span aria-hidden="true">&times;</span>
+						</button>
+                        <span>{lang key='orderForm.removeItem'}</span>
+                    </h4>
+                </div>
+                <div class="modal-body">
+                    {$LANG.cartremoveitemconfirm}
+                </div>
+                <div class="modal-footer">
+                    <button type="button" class="btn btn-default" data-dismiss="modal">{$LANG.no}</button>
+                    <button type="submit" class="btn btn-primary">{$LANG.yes}</button>
+                </div>
+            </div>
+        </div>
+    </div>
+</form>
+
+<form method="post" action="cart.php">
+    <input type="hidden" name="a" value="empty" />
+    <div class="modal fade modal-remove-item" id="modalEmptyCart" tabindex="-1" role="dialog">
+        <div class="modal-dialog" role="document">
+            <div class="modal-content">
+                <div class="modal-header d-block">
+                    <h4 class="modal-title">
+						<button type="button" class="close" data-dismiss="modal" aria-label="{$LANG.orderForm.close}">
+							<span aria-hidden="true">&times;</span>
+						</button>
+                        <span>{$LANG.emptycart}</span>
+                    </h4>
+                </div>
+                <div class="modal-body">
+                    {$LANG.cartemptyconfirm}
+                </div>
+                <div class="modal-footer">
+                    <button type="button" class="btn btn-default" data-dismiss="modal">{$LANG.no}</button>
+                    <button type="submit" class="btn btn-primary">{$LANG.yes}</button>
+                </div>
+            </div>
+        </div>
+    </div>
+</form>
+
+
+
+
+
+
+{/if}

Alguns arquivos não foram mostrados porque muitos arquivos mudaram nesse diff