CINXE.COM
Shopping Cart
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Shopping Cart</title> <link href="https://fonts.googleapis.com/css?family=Asap:400,600,600i|Roboto:300,400,400i,500,700&display=swap" rel="stylesheet"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <!-- IE --> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /> <!--[if lt IE 9]> <script> document.createElement("header"); document.createElement("footer"); document.createElement("section"); document.createElement("aside"); document.createElement("nav"); document.createElement("article"); document.createElement("main"); </script> <div class="warning"> Your browser is out of date, please upgrade your browser to a newer version to get the full website experince our website offers. Thank you.</div> <![endif]--> <script>window.dataLayer = window.dataLayer || [];</script> <script src="https://js-de.sentry-cdn.com/be9906448904c023cee321bab7ae4140.min.js" crossorigin="anonymous"></script> <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-PRB8M43');</script> <link href="https://fonts.googleapis.com/css2?family=Asap:ital,wght@0,400;0,500;0,700;1,400&display=swap" rel="stylesheet"> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous"> <!-- Latest compiled and minified CSS --> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-select@1.13.16/dist/css/bootstrap-select.min.css"> <link rel="stylesheet" href="/templates/customorder/assets/css/style.css"> <style> @font-face{ font-family:Trustpilotdefaultfont; src:url(https://cdn.trustpilot.net/brand-assets/2.1.0/fonts/trustpilot-default-font-regular.woff2) } .slim-trustpilot-wrap { margin-top: 100px; } .slim-trustpilot-wrap .title { font-family: Trustpilotdefaultfont,Asap,sans-serif; text-align: center; padding-bottom: 10px; } .slim-trustpilot-wrap .title a { font-size: 17px; font-weight: 700; color: #191919; } /* LUBO */ #sparxorderoform .hidden{ display: none; } /* Modal */ html.remodal-is-locked{ overflow:hidden;-ms-touch-action:none;touch-action:none} .remodal,[data-remodal-id]{ display:none} .remodal-overlay{ position:fixed;z-index:9999;top:-5000px;right:-5000px;bottom:-5000px;left:-5000px;display:none} .remodal-wrapper{ position:fixed;z-index:10000;top:0;right:0;bottom:0;left:0;display:none;overflow:auto;text-align:center;-webkit-overflow-scrolling:touch} .remodal-wrapper:after{ display:inline-block;height:100%;margin-left:-.05em;content:""} .remodal-overlay,.remodal-wrapper{ -webkit-backface-visibility:hidden;backface-visibility:hidden} .remodal{ position:relative;outline:none;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;text-size-adjust:100%} .remodal-is-initialized{ display:inline-block} .remodal-bg.remodal-is-opening,.remodal-bg.remodal-is-opened{ -webkit-filter:blur(3px);filter:blur(3px)} .remodal-overlay{ background:rgba(43,46,56,0.9)} .remodal-overlay.remodal-is-opening,.remodal-overlay.remodal-is-closing{ -webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards} .remodal-overlay.remodal-is-opening{ -webkit-animation-name:remodal-overlay-opening-keyframes;animation-name:remodal-overlay-opening-keyframes} .remodal-overlay.remodal-is-closing{ -webkit-animation-name:remodal-overlay-closing-keyframes;animation-name:remodal-overlay-closing-keyframes} .remodal-wrapper{ padding:10px 10px 0} .remodal{ box-sizing:border-box; width:100%;margin-bottom:10px; padding:35px; -webkit-transform:translate3d(0,0,0); transform:translate3d(0,0,0); color:#2b2e38; background:#fff; padding: 10px; } .remodal.remodal-is-opening,.remodal.remodal-is-closing{ -webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards} .remodal.remodal-is-opening{ -webkit-animation-name:remodal-opening-keyframes;animation-name:remodal-opening-keyframes} .remodal.remodal-is-closing{ -webkit-animation-name:remodal-closing-keyframes;animation-name:remodal-closing-keyframes} .remodal,.remodal-wrapper:after{ vertical-align:middle} .remodal-close{ position:absolute;top:0;right:0;display:block;overflow:visible;width:35px;height:35px;margin:0;padding:0;cursor:pointer;-webkit-transition:color .2s;transition:color .2s;text-decoration:none;color:#95979c;border:0;outline:0;background:transparent} .remodal-close:hover,.remodal-close:focus{ color:#2b2e38} .remodal-close:before{ font-family:Arial,"Helvetica CY","Nimbus Sans L",sans-serif!important;font-size:25px;line-height:35px;position:absolute;top:0;left:0;display:block;width:35px;content:"\00d7";text-align:center} .remodal-confirm,.remodal-cancel{ font:inherit;display:inline-block;overflow:visible;min-width:110px;margin:0;padding:12px 0;cursor:pointer;-webkit-transition:background .2s;transition:background .2s;text-align:center;vertical-align:middle;text-decoration:none;border:0;outline:0} .remodal-confirm{ color:#fff;background:#81c784} .remodal-confirm:hover,.remodal-confirm:focus{ background:#66bb6a} .remodal-cancel{ color:#fff;background:#e57373} .remodal-cancel:hover,.remodal-cancel:focus{ background:#ef5350} .remodal-confirm::-moz-focus-inner,.remodal-cancel::-moz-focus-inner,.remodal-close::-moz-focus-inner{ padding:0;border:0} @-webkit-keyframes remodal-opening-keyframes { from{ -webkit-transform:scale(1.05);transform:scale(1.05);opacity:0} to{ -webkit-transform:none;transform:none;opacity:1;-webkit-filter:blur(0);filter:blur(0)} } @keyframes remodal-opening-keyframes { from{ -webkit-transform:scale(1.05);transform:scale(1.05);opacity:0} to{ -webkit-transform:none;transform:none;opacity:1;-webkit-filter:blur(0);filter:blur(0)} } @-webkit-keyframes remodal-closing-keyframes { from{ -webkit-transform:scale(1);transform:scale(1);opacity:1} to{ -webkit-transform:scale(0.95);transform:scale(0.95);opacity:0;-webkit-filter:blur(0);filter:blur(0)} } @keyframes remodal-closing-keyframes { from{ -webkit-transform:scale(1);transform:scale(1);opacity:1} to{ -webkit-transform:scale(0.95);transform:scale(0.95);opacity:0;-webkit-filter:blur(0);filter:blur(0)} } @-webkit-keyframes remodal-overlay-opening-keyframes { from{ opacity:0} to{ opacity:1} } @keyframes remodal-overlay-opening-keyframes { from{ opacity:0} to{ opacity:1} } @-webkit-keyframes remodal-overlay-closing-keyframes { from{ opacity:1} to{ opacity:0} } @keyframes remodal-overlay-closing-keyframes { from{ opacity:1} to{ opacity:0} } @media only screen and (min-width: 641px) { .remodal{ max-width:1040px} } .lt-ie9 .remodal-overlay{ background:#2b2e38} .lt-ie9 .remodal{ width:700px} /* Alerts changes */ .alerts-container{ display: block; } .alerts-container .alert{ margin: 20px 0; } /* Loader animation */ .loader-container{ display: block; position: absolute; z-index: 100; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(0,0,0,0.5); } .lds-ellipsis { display: inline-block; position: relative; top: 50%; left: 50%; margin: -40px 0 0 -40px; width: 80px; height: 80px; } .lds-ellipsis div { position: absolute; top: 33px; width: 13px; height: 13px; border-radius: 50%; background: #fff; animation-timing-function: cubic-bezier(0, 1, 1, 0); } .lds-ellipsis div:nth-child(1) { left: 8px; animation: lds-ellipsis1 0.6s infinite; } .lds-ellipsis div:nth-child(2) { left: 8px; animation: lds-ellipsis2 0.6s infinite; } .lds-ellipsis div:nth-child(3) { left: 32px; animation: lds-ellipsis2 0.6s infinite; } .lds-ellipsis div:nth-child(4) { left: 56px; animation: lds-ellipsis3 0.6s infinite; } @keyframes lds-ellipsis1 { 0% { transform: scale(0); } 100% { transform: scale(1); } } @keyframes lds-ellipsis3 { 0% { transform: scale(1); } 100% { transform: scale(0); } } @keyframes lds-ellipsis2 { 0% { transform: translate(0, 0); } 100% { transform: translate(24px, 0); } } .recommended .label-title::after{ content: attr(data-label) !important; } label.mandatorylabel{ position: relative; overflow: visible; } label.mandatorylabel::after{ content: "*"; position: absolute; top: 0px; right: -15px; color: #77718a; font-size: 20px; line-height: 20px; } .submit-button-wrap.text-center{ overflow: visible; } #submitbutton{ width: auto; white-space: nowrap; } </style> <script src="/templates/customorder/assets/js/jquery.min.js"></script> <script> var prefix = '$'; var suffix = ' '; var csrfToken = 'b20198f2b18cfd99f258a11f87dc74bee337f001'; var recaptchaSiteKey = ""; var basefilename = 'order.php'; </script> <script> function Pixeleze(pixelezeData) { var url = "https://pixeleze.com/run?PixelezeData=" + encodeURIComponent(JSON.stringify(pixelezeData)); url += "&SourceUrl=" + encodeURIComponent(window.location.href); url += "&Cookies=" + encodeURIComponent(document.cookie.replace(/(\s|^)(?!Pixeleze).+?=.+?(;|$)/g, "")); var ref = document.getElementsByTagName("script")[0]; var js = document.createElement("script"); js.src = url; js.async = true; ref.parentNode.insertBefore(js, ref); } var pixelezeData = pixelezeData || {}; pixelezeData.AccountId = "35f89f39-2d2f-405e-8998-a94c00eb8461"; Pixeleze(pixelezeData); </script> <!-- Dynamic Template Compatibility --> <!-- Please update your theme to include or have a comment on the following to negate dynamic inclusion --> <link rel="stylesheet" type="text/css" href="/assets/css/fontawesome-all.min.css" /> </head> <body> <div class="page-wrap"> <div class="page"> <header> <div class="container"> <div class="header-wrap"> <div class="logo-wrap"> <img src="https://www.scalahosting.com/assets/images/logo.svg" onerror="this.onerror=null; this.src='https://www.scalahosting.com/assets/images/logo.png'" alt="Scala Hosting Logo"> </div> <div class="slogan-wrap"> <span id="slogan">Scalable Hosting Services</span> </div> </div> </div> </header> <div class="container" id="sparxorderoform"> <div class="row"> <div class="col-12"> <div class="progress-steps-wrap"> <div class="progress-steps"> <div class="progress-line-wrap"> <div class="progress-line" style="width: 67%"> </div> </div> <div class="steps-wrap"> <div class="step-wrap"> <div class="step" data-step-id="1"></div> </div> <div class="step-wrap"> <div class="step" data-step-id="2"></div> </div> <div class="step-wrap"> <div class="step" data-step-id="3"></div> </div> <div class="step-wrap"> <div class="step" data-step-id="4"></div> </div> </div> <div class="steps"> <div class="step-wrap competed"> <a href="/order.php"><div class="step" data-step-id="1" data-title="Choose Product"></div></a> </div> <div class="step-wrap competed"> <div class="step" data-step-id="2" data-title="Configure Product"></div> </div> <div class="step-wrap current"> <div class="step" data-step-id="3" data-title="Choose Domain"></div> </div> <div class="step-wrap "> <div class="step" data-step-id="4" data-title="Payment"></div> </div> </div> </div> </div> </div> <div class="col-12 page-headline-wrap"> <h1 class="page-headline">Choose your Domain name</h1> <p class="page-intro">ScalaHosting can host any domain and register the most popular ones.</p> </div> <div class="col-12 col-xl-8"> <section id="domainoptions" class="config-section transparent"> <ul class="config-section__ul"> <li class="config-section__li"> <label for="domain-reg" data-showoption="domainext" class="radiobtn-wrap"> <div class="radiobtn"> <input type="radio" id="domain-reg" name="type" value="register" checked> <div class="radiobtn-box"> </div> </div> <span class="label-title billing-cycle">Register a new domain</span> </label> </li> <li class="config-section__li"> <label for="domain-tr" data-showoption="domainext" class="radiobtn-wrap"> <div class="radiobtn"> <input type="radio" id="domain-tr" name="type" value="transfer"> <div class="radiobtn-box"> </div> </div> <span class="label-title billing-cycle">Transfer your domain from another registrar</span> </label> </li> </ul> <div class="alerts-container"> <div class="alert alert-success hidden" role="alert"></div> <div class="alert alert-error alert-danger hidden" role="alert"></div> <div class="alert alert-warning alert-warning hidden" role="alert"></div> <div class="alert alert-info alert-info hidden" role="alert"></div> </div> <form name="domainsearch" action="" method="post"> <input type="hidden" name="token" value="b20198f2b18cfd99f258a11f87dc74bee337f001" /> <div id="domainext" class="search-domain-form-wrap"> <div class="input-wrap"><input name="sld" type="text" placeholder="Enter Domain to Find"></div> <select name="tld" id="sources" class="selectpicker" data-live-search="true"> <option value=".com">.com</option> <option value=".net">.net</option> <option value=".org">.org</option> <option value=".info">.info</option> <option value=".eu">.eu</option> <option value=".biz">.biz</option> <option value=".in">.in</option> <option value=".com.au">.com.au</option> <option value=".mn">.mn</option> <option value=".asia">.asia</option> <option value=".ca">.ca</option> <option value=".org.uk">.org.uk</option> <option value=".co.uk">.co.uk</option> <option value=".us">.us</option> <option value=".co.in">.co.in</option> <option value=".club">.club</option> <option value=".nl">.nl</option> <option value=".de">.de</option> <option value=".agency">.agency</option> <option value=".guide">.guide</option> <option value=".io">.io</option> </select> <button type="submit" class="btn button small search-domain-form__button">Search</button> </div> </form> <form name="owndomain" action="" method="post"> <input type="hidden" name="token" value="b20198f2b18cfd99f258a11f87dc74bee337f001" /> <div id="domaincustom" class="search-domain-form-wrap" style="display: none;"> <div class="input-wrap"> <input name="domain" type="text" placeholder="Please enter your domain"> </div> <button type="submit" class="btn button small search-domain-form__button">APPLY</button> </div> </form> </section> <section id="resultbox" class="config-section" style="display: none;"> <h2 class="section-headline"></h2> <p class="section-intro"></p> <ul class="offers__ul"> </ul> </section> <section id="suggestions" class="offers-section" style="display: none;"> <h2 class="section-headline">Would you like to add more versions of this domain?</h2> <div class="config-section available more-version"> <ul class="offers__ul"> </ul> <div class="section-link-button"> <a id="loadmoresuggestions" href="#">Give me more suggestions!</a> </div> </div> </section> </div> <aside class="col-12 col-xl-4 sticky-scroll-y-wrap"> <style>div.domainsbox .remove, #resultbox .remove, #suggestions .remove{ opacity: 1; }</style> <section id="ordersummary" data-page="choosedomain" class="config-section sticky-scroll-y"> <h2 class="section-headline">Order Summary</h2> <div class="order-list-wrap box domainsbox hidden"> <div class="box-header"><div><h3 class="section-subHeadline">Domain</h3></div></div> <ul class="order-list"> <li> <ul class="ul-sections-wrap"> </ul> </li> </ul> </div> <div class="order-list-wrap feessections"> <div class="summary-order"> <div class="order-list total-price"> <div class="product"> <div class="product-name">Total Due Today</div> <div class="product-price" id="totalsum">$0.00 </div> </div> </div> </div> </div> <div class="submit-button-wrap text-center"> <button id="submitbutton" data-initialtext="Checkout" type="button" class="submit-btn button large disable icon-next"> Continue </button> </div> </section> </aside> </div> <div id="transfermodal" class="modal-box remodal"> <h3 class="text-center">Transfer your domain to us</h3> <p class="text-center">Transfer now to extend your domain by 1 year!*</p> <div class="form-wrap"> <h4>Single domain transfer</h4> <div class="input-wrap"> <label for="transfer-domain-name">Domain Name</label> <input type="text" readonly id="transfer-domain-name"> </div> <div class="input-wrap"> <label for="transfer-domain-authorization">Authorization Code</label> <input type="text" id="transfer-domain-authorization" placeholder="Epp Code / Auth Code"> </div> </div> <div class="text-right" style="margin: 15px 15px 0 0;"> <button data-addtransfer='0' class="btn button middle">Add to Cart</button> </div> <div class="info"> <p data-tooltip="#"><span class="content">* Excludes certain TLDs and recently renewed domains</span></p> </div> </div> <script> var lang = { 'year': 'Year', 'years': 'Years', 'getitfree': 'Get it now for <b>FREE</b> for the first year', 'freetext': 'FREE!', 'addtocart': 'Add to Cart', 'selected': 'Selected', 'remove': 'Remove', 'domaintransfer': 'Domain Transfer', 'owneddomain': 'Own Domain', 'invaliddomain': 'The domain you entered is not valid', 'domainalreadyincart': 'The domain you entered is not valid', 'onlyoneowndomain': 'You have already selected a domain name for your hosting service', 'resultbox': { 'available':{ 'headline': '<b>Congratulations</b>, your domain <b>[DOMAIN] is available.</b>', 'intro':'Get it now <span class="forfree hidden">for free the first year </span>before it's too late.', 'price':'Get it now for <b>FREE</b> for the first year', }, 'taken':{ 'headline': '<b>[DOMAIN] is taken.</b>', 'intro':'If this is your domain, you can transfer it to ScalaHosting.', 'price':'ScalaHosting will migrate all your websites for <b>FREE</b>', 'button': 'Transfer' } }, 'featuretooltips': {"idprotection":"Enable ID protection for your domain name to hide the domain's owner personal information from the public whois data."}, }; var productData = []; var domainAddons = {"com":{"idprotection":{"price":"9.95","name":"ID Protection","id":"idprotection"}},"net":{"idprotection":{"price":"9.95","name":"ID Protection","id":"idprotection"}},"org":{"idprotection":{"price":"9.95","name":"ID Protection","id":"idprotection"}},"info":{"idprotection":{"price":"9.95","name":"ID Protection","id":"idprotection"}},"eu":[],"biz":{"idprotection":{"price":"9.95","name":"ID Protection","id":"idprotection"}},"in":[],"com.au":[],"mn":{"idprotection":{"price":"9.95","name":"ID Protection","id":"idprotection"}},"asia":{"dnsmanagement":{"price":"0.00","name":"DNS Management","id":"dnsmanagement"}},"ca":{"dnsmanagement":{"price":"0.00","name":"DNS Management","id":"dnsmanagement"}},"org.uk":[],"co.uk":[],"us":[],"co.in":[],"club":{"dnsmanagement":{"price":"0.00","name":"DNS Management","id":"dnsmanagement"},"idprotection":{"price":"9.95","name":"ID Protection","id":"idprotection"}},"nl":[],"de":{"dnsmanagement":{"price":"0.00","name":"DNS Management","id":"dnsmanagement"}},"agency":{"dnsmanagement":{"price":"0.00","name":"DNS Management","id":"dnsmanagement"},"idprotection":{"price":"9.95","name":"ID Protection","id":"idprotection"}},"guide":{"dnsmanagement":{"price":"0.00","name":"DNS Management","id":"dnsmanagement"},"idprotection":{"price":"9.95","name":"ID Protection","id":"idprotection"}},"io":{"dnsmanagement":{"price":"0.00","name":"DNS Management","id":"dnsmanagement"},"idprotection":{"price":"9.95","name":"ID Protection","id":"idprotection"}}}; var availableDomains = {}; var domainSummary = []; var addonSummary = []; var owndomain = ''; $(function(){ $(document).on('change', 'label[data-showoption] input', function(){ var domainoption = $(this).parents('label').data('showoption'); $('.search-domain-form-wrap:visible').slideUp('fast'); var newDomainOption = $('#'+domainoption); newDomainOption.slideDown('fast'); $('#resultbox, #suggestions').slideUp('fast'); updateSummary(); }); function addDomain( domain, tld, type, period, price, features ){ let samedomains = domainInCart(domain); alertbox.attach( $('#domainoptions') ); alertbox.hide(); if( samedomains !== false ){ alertbox.show('error', lang.domainalreadyincart); return false; } var addnewdomainobject = { 'dnsmanagement': false, 'domain': domain, 'emailforwarding': false, 'idprotection': false, 'regperiod': period, 'type': type, 'price': price, 'priceraw': price, 'tld': tld }; if( type == 'transfer' ){ addnewdomainobject.eppcode = $('#transfer-domain-authorization').val(); } var orderFeatures = []; if( features.length > 0 ){ $.each(features, function(key,value){ if( typeof addnewdomainobject[value.id] == 'undefined' ){ return true; } addnewdomainobject[value.id] = value; orderFeatures.push(value.id); }); } domainSummary.push(addnewdomainobject); let adddomain = { 'a':'adddomain', 'ajax':true, 'type': type, 'domain': domain, 'regperiod': period, 'features': orderFeatures }; if( type == 'transfer' ){ adddomain.eppcode = addnewdomainobject.eppcode; } var request = $.ajax({ url: "order.php", method: "POST", data: adddomain, dataType: "json" }); request.done(function( msg ) { //console.log( msg ); }); request.fail(function( jqXHR, textStatus ) { reloadSummary(); alertbox.show('error', "Request failed: " + textStatus); }); } function updateSummary(){ $('#submitbutton').removeClass('disable'); var totalsum = parseFloat(0); toggleFreeDomainFields(); if( getProductData() === false ){ $('.order-list-wrap.product').addClass('hidden'); if( domainSummary.length == 0 ){ $('#submitbutton').addClass('disable'); } }else{ if( domainSummary.length == 0 ){ $('.order-list-wrap.product:not(.box)').removeClass('hidden'); $('.order-list-wrap.product.box').addClass('hidden'); if( getProductData('requiredomain') == 1 ){ $('#submitbutton').addClass('disable'); } }else{ $('.order-list-wrap.product:not(.box)').addClass('hidden'); $('.order-list-wrap.product.box').removeClass('hidden'); } totalsum += strToNum( getProductData('totalnum') ); } let container = $('.order-list-wrap.domainsbox'); let summarybox = $('#ordersummary'); var domainsObject = container.find('ul.ul-sections-wrap'); if( domainSummary.length == 0 ){ domainsObject.html(''); container.addClass('hidden'); }else{ if( container.hasClass('hidden') ){ container.removeClass('hidden'); } let genDomainProduct = function( elementdomain, elementprice, removefeature = false ){ let domain = $('<div></div>',{ class: 'product-name' }); var featuretooltip = false; if( removefeature !== false && typeof lang['featuretooltips'][removefeature] != 'undefined' ){ featuretooltip = lang['featuretooltips'][removefeature]; } if( typeof elementdomain == 'string' ){ if( typeof featuretooltip != false ){ domain.append( $('<span>', { class: "content" }).attr('data-tooltip', featuretooltip).text( elementdomain ) ); }else{ domain.text( elementdomain ); } }else{ domain.append( $('<span>',{ class: 'domain-name' }).text(elementdomain.domain) ).append(' / ').append( $('<span>',{ class: 'period' }).text(elementdomain.period) ); } let priceobj = $('<div></div>',{ class: 'product-price'}).text( formatPrice(elementprice) ); if( parseInt(elementprice) == 0 ){ priceobj.addClass('free'); priceobj.text(lang.freetext); } let remove = $('<div></div>',{ class: 'remove'}); if( removefeature !== false ){ remove.attr('data-feature', removefeature); } return $('<div></div>',{ class: 'product'}).append(domain).append(priceobj).append(remove); }; domainsObject.html(''); $.each(domainSummary, function(key, object){ var row = $('<li></li>',{ class: 'ul-sections', 'data-item': key}); let domainname = object.domain; if( object.type == 'register'){ let regtext = (object.regperiod > 1? lang.years : lang.year ); domainname = { 'domain': object.domain, 'period': object.regperiod +' '+regtext }; }else if( object.type == 'transfer' ){ domainname = { 'domain': object.domain, 'period': lang.domaintransfer }; }else{ domainname = { 'domain': object.domain, 'period': lang.owneddomain }; } let price = strToNum(object.price); row.append( genDomainProduct( domainname, price) ); totalsum += price; let domainAddons = ['dnsmanagement','emailforwarding','idprotection']; $.each(domainAddons, function(key, value){ if( typeof object[value] == 'undefined' ){ return true; } let feature = object[value]; if( feature === false && feature.length != 0 ){ return true; } row.append( genDomainProduct( feature.name, feature.price, feature.id ) ); totalsum += strToNum(feature.price); }); domainsObject.append(row); }); } $('#totalsum').text( formatPrice(totalsum) ); } function showResultBox( result ){ let resultbox = $('#resultbox'); resultbox.removeClass('available unavailable'); let headlinetext = "", introtext = "", pricetext = "", buttontext = ""; let resultoptions = {}; if( result.isAvailable === true ){ resultbox.addClass('available'); headlinetext = lang.resultbox.available.headline; introtext = lang.resultbox.available.intro; pricetext = lang.resultbox.available.price; }else{ resultbox.addClass('unavailable'); headlinetext = lang.resultbox.taken.headline; introtext = lang.resultbox.taken.intro; pricetext = lang.resultbox.taken.price; resultoptions.istransfer = true; } resultbox.find('.section-headline').html(headlinetext.replace(/\[domain\]/i, result.domainName)); resultbox.find('.section-intro').html(introtext); resultbox.find('.domain-name').html(result.domainName); resultbox.find('.domain-price').html(pricetext); showSuggestionsBox( resultbox, { 1: result }, resultoptions); toggleFreeDomainFields(); resultbox.slideDown('fast'); } function domainInCart( domain ){ if( domainSummary.length == 0 ){ return false; } var result = false; $.each(domainSummary, function(key, object){ if( object.domain != domain ){ return true; } result = key; }); return result; } function cartHasOwnDomain(){ var status = false; if( domainSummary.length > 0 ){ $.each(domainSummary, function(key, object){ if( object.type == 'owndomain' ){ status = true; return false; } }); } return status; } function getProductData( setting = false ){ if( typeof productData[0] == 'undefined' || ( setting !== false && typeof productData[0][setting] == 'undefined' ) ){ return false; } if( setting !== false ){ return productData[0][setting]; } return productData[0]; } function showSuggestionsBox( suggestionsbox, result, option = {}){ var template = suggestionsbox.find('ul.offers__ul'); template.html(''); $.each(result, function(key, value){ let lastvisible = (parseInt(key) > 4); var regperiod = $('<select>', { 'name':'regperiod', class:'selectpicker' }); $.each(value.pricing, function(period, object){ regperiod.append( $('<option>', { 'value':period, 'text': period+' '+(period>1?lang.years:lang.year)+' - '+object.register }) ); }); let offercontainer = $('<li>',{ class:'offers__li', 'data-domain': value.domainName }); if( lastvisible ){ offercontainer.addClass('hidden'); } offercontainer.append( $('<span>',{ class:'domain-name' }).text(value.domainName) ); if( typeof option.istransfer == 'undefined' ){ offercontainer.append( $('<span>').append(regperiod) ); } offercontainer.append( $('<div>',{ class: 'right' }) ); offercontainer.find('.right').append( $('<div>',{ class: 'domain-price hidden' }).html(lang.getitfree) ); offercontainer.find('.right').append( $('<div>',{ class: 'button-wrap' }) ); let exists = false; let domainsearch = domainInCart(value.domainName); if( domainsearch !== false ){ exists = true; } let buttontext = lang.addtocart; if( option.istransfer ){ buttontext = lang.resultbox.taken.button; } offercontainer.find('.button-wrap').append( $('<button>',{ class: 'btn button button--small '+(exists?'hidden':'') }).text(buttontext) ); if( suggestionsbox.attr('id') == 'resultbox' ){ if( option.istransfer ){ offercontainer.find('button').attr('data-initiatetransfer', '0'); }else{ offercontainer.find('button').attr('data-addsearch', '0'); } }else{ offercontainer.find('button').attr('data-addsuggest', key); } offercontainer.find('.button-wrap').append( $('<div>',{ class: 'button-info '+(exists?'':'hidden') }) ); offercontainer.find('.button-info').append( $('<ul>',{ class: 'button-info__ul' }) ); offercontainer.find('.button-info__ul').append( $('<li>',{ class: 'selected' }).text( lang.selected ) ); offercontainer.find('.button-info__ul').append( $('<li>').append( $('<a>',{ class: 'remove', href:'#' }).text( lang.remove ) ) ); template.append( offercontainer ); }); template.find('.selectpicker').selectpicker(); } function toggleFreeDomainFields(){ let object = $('#resultbox, #suggestions'); let domainprice = object.find('.domain-price'); let resultintro = object.find('.forfree'); let show = false; if( Object.keys(availableDomains).length == 0 || typeof availableDomains.search == 'undefined' || typeof availableDomains.search[0].tld == 'undefined' ){ return false; } if( getProductData('freedomain') !== false && getProductData('freedomain').indexOf(availableDomains.search[0].tld) != -1 ){ var alreadyHasFreeDomain = false; if( domainSummary.length != 0 ){ $.each(domainSummary, function(key, value){ if( (value.type == 'register' || value.type == 'transfer') && getProductData('freedomain').indexOf(value.tld) != -1 ){ alreadyHasFreeDomain = true; } }); } if( domainSummary.length == 0 || !alreadyHasFreeDomain ){ show = true; } } if( show ){ domainprice.removeClass('hidden'); resultintro.removeClass('hidden'); }else{ domainprice.addClass('hidden'); resultintro.addClass('hidden'); } } $(document).on('submit', 'form[name="domainsearch"]', function(e){ e.preventDefault(); var resultbox = $('#resultbox'); resultbox.slideUp('fast'); toggleFreeDomainFields(); loader.attach( $(this).parents('section.config-section') ); loader.show(); alertbox.attach( $(this).parents('section.config-section') ); alertbox.hide(); let type = $(this).parents('ul').find('input[name="type"]:checked').val(); var domainName = $(this).parents('div').find('input[name="sld"]').val() + $(this).parents('div').find('select[name="tld"]').val(); let searchData = { 'token': csrfToken, 'a':'checkDomain', 'domain': domainName, 'type': 'domain', }; var request = $.ajax({ url: "index.php?rp=/domain/check", method: "POST", data: searchData, dataType: "json" }); var removeLoader = false; request.done(function( json ) { ( removeLoader ? loader.hide() : removeLoader = true ); if( typeof json.result.error != 'undefined' ){ alert( json.result.error ); return false; } if( json.result.length != 0 ){ let result = json.result[0]; if( result.isValidDomain !== true ){ alert('Invalid domain'); return; } availableDomains.search = json.result; showResultBox(result); }else{ alert('Invalid domain'); } }); request.fail(function( jqXHR, textStatus ) { alertbox.show('error', "Request failed: " + textStatus); }); let suggestionsData = { 'token': csrfToken, 'a':'checkDomain', 'domain': domainName, 'type': 'suggestions', }; let suggestions = $.ajax({ url: "index.php?rp=/domain/check", method: "POST", data: suggestionsData, dataType: "json" }); var suggestionsbox = $('#suggestions'); suggestionsbox.slideUp('fast'); suggestions.done(function( json ){ ( removeLoader ? loader.hide() : removeLoader = true ); if( json.result.length != 0 ){ availableDomains.suggest = json.result; showSuggestionsBox( suggestionsbox, json.result); suggestionsbox.slideDown('fast'); } }); suggestions.fail(function( jqXHR, textStatus ) { reloadSummary(); alertbox.show('error', "Unable to retrieve suggestions: " + textStatus ); }); }); $(document).on('click', '[data-addsuggest], [data-addsearch], [data-addtransfer]', function(e){ e.preventDefault(); var domainObject; let searchid; let type; if( typeof $(this).data('addsearch') != 'undefined' ){ searchid = $(this).data('addsearch'); domainObject = availableDomains.search[searchid]; type = 'register'; }else if( typeof $(this).data('addsuggest') != 'undefined' ){ searchid = $(this).data('addsuggest'); domainObject = availableDomains.suggest[searchid]; type = 'register'; }else if( typeof $(this).data('addtransfer') != 'undefined' ){ searchid = $(this).data('addtransfer'); domainObject = availableDomains.search[searchid]; type = 'transfer'; } let regperioddrop = $(this).parents('li').find('[name="regperiod"]'); let period = ( regperioddrop.length != 0 ? regperioddrop.val() : 1 ); // default to 1 year let price = 0; if( type == 'transfer' ){ price = strToNum(domainObject.pricing[period].transfer); }else{ price = strToNum(domainObject.pricing[period].register); } let tmpaddon = (typeof domainAddons[domainObject.tld] == 'undefined'?[]:domainAddons[domainObject.tld]); var features = []; $.each(tmpaddon,function(name, object){ features.push(object); }); if( domainSummary.length == 0 && getProductData('freedomain') && getProductData('freedomain').includes(domainObject.tld) && period == 1 ){ price = 0; toggleFreeDomainFields(false); } // addDomain( domainObject.domainName, domainObject.tld, type, period, price, features); // remove pre-added features addDomain( domainObject.domainName, domainObject.tld, type, period, price, []); updateSummary(); let currentBox = $(this).parents('li.offers__li'); if( type == 'transfer' ){ currentBox = $('#resultbox').find('li.offers__li'); transfermodal.close(); } currentBox.find('.button-wrap > button').addClass('hidden'); currentBox.find('.button-info').removeClass('hidden'); }); var transfermodal = $('#transfermodal').remodal(); $(document).on('click', '[data-initiatetransfer]', function(e){ e.preventDefault(); transfermodal.open(); let transferDomainObject = availableDomains.search[0]; $('#transfermodal').find('#transfer-domain-name').val(transferDomainObject.domainName); }); $(document).on('click', '.remove', function(e){ e.preventDefault(); var itemid = false; if( $(this).parents('li[data-item]').length != 0 ){ itemid = $(this).parents('li[data-item]').data('item'); }else if( $(this).parents('li[data-domain]').length != 0 ){ let rawdomain = $(this).parents('li[data-domain]').data('domain'); itemid = domainInCart(rawdomain); }else{ console.log('Unable to find item'); return false; } if( typeof itemid == 'boolean' ){ return false; } let domain = domainSummary[itemid]['domain']; let removeDomain = { 'a':'removedomain', 'ajax':true, 'i':itemid, 'domain': domain }; if( typeof $(this).data('feature') == 'undefined' ){ let pricing = domainSummary[itemid].priceraw; domainSummary.splice(itemid,1); if( pricing == 0 && domainSummary.length != 0 ){ // reassign free domain $.each(domainSummary, function(item, object){ if( typeof productData[0].freedomain != 'undefined' && productData[0].freedomain.includes(object.tld) ){ domainSummary[item].price = 0; domainSummary[item].priceraw = 0; return false; } }); } let externalRemove = $('#resultbox, #suggestions').find('li[data-domain="'+domain+'"]'); if( externalRemove.length != 0 ){ $.each(externalRemove, function(){ $(this).find('button').removeClass('hidden'); $(this).find('.button-info').addClass('hidden'); }); } }else{ let feature = $(this).data('feature'); domainSummary[itemid][feature] = false; removeDomain.feature = feature; } var reloadpage = function(){ location.reload(); }; var request = $.ajax({ url: "order.php", method: "POST", data: removeDomain, dataType: "json" }).done(function(msg){ if(msg.result == 'error'){ reloadpage(); } }).fail(function( jqXHR, textStatus ) { reloadpage(); console.log( "Request failed: " + textStatus ); }); updateSummary(); }); $(document).on('click', '#loadmoresuggestions', function(e){ e.preventDefault(); let existingOffers = $(this).parents('.config-section').find('li.offers__li:hidden'); $.each(existingOffers, function(key, value){ if( key > 4 ){ return; } $(this).removeClass('hidden'); }); }); $(document).on('submit', 'form[name="owndomain"]', function(e){ e.preventDefault(); let domain = $(this).find('input[name="domain"]').val(); alertbox.attach( $(this).parents('section.config-section') ); alertbox.hide(); if( cartHasOwnDomain() ){ alertbox.show('error', lang.onlyoneowndomain); return false; } loader.attach( $(this).find('div.search-domain-form-wrap') ); loader.show(); let searchData = { 'token': csrfToken, 'domain': domain }; var request = $.ajax({ url: "order.php?a=checkowndomain", method: "POST", data: searchData, dataType: "json" }); request.done(function( json ) { loader.hide(); if( json.result != 'success' ){ alertbox.show('error', lang.invaliddomain); return; } addDomain( domain, '', 'owndomain', 1, 0, []); updateSummary(); }); request.fail(function( jqXHR, textStatus ) { reloadSummary(); alertbox.show('error', "Request failed: " + textStatus ); }); }); $(document).on('click', '#submitbutton', function(e){ e.preventDefault(); if( $(this).hasClass('disable') ){ return false; } window.location.href="/order.php?a=login"; }); }); </script> </div> </div> </div> <script src="//widget.trustpilot.com/bootstrap/v5/tp.widget.bootstrap.min.js" async=""></script> <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script> <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js" integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6" crossorigin="anonymous"></script> <!-- Latest compiled and minified JavaScript --> <script src="https://cdn.jsdelivr.net/npm/bootstrap-select@1.13.16/dist/js/bootstrap-select.min.js"></script> <script src="/templates/customorder/assets/js/scripts.js"></script> <script src="/templates/customorder/assets/js/scripts.lubo.js"></script> <script src="/templates/customorder/assets/js/modal.js"></script> </body> </html>