flowcart.tpl 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538
  1. {if $existingdomains}
  2. <div class="option tab-pane" id="existing_domain">
  3. <div class="domain-input-group clearfix" id="domainexisting_domain">
  4. <div class="row">
  5. <div class="col-sm-9">
  6. <div class="row domains-row">
  7. <div class="col-xs-2 text-right">
  8. <p class="form-control-static">www.</p>
  9. </div>
  10. <div class="col-xs-7">
  11. <select id="existing_domainsld" name="existing_domaindomain" class="form-control">
  12. {foreach key=num item=existingdomain from=$existingdomains}
  13. <option value="{$existingdomain}">{$existingdomain}</option>
  14. {/foreach}
  15. </select>
  16. </div>
  17. </div>
  18. </div>
  19. <div class="col-sm-2">
  20. <button type="submit" id="b_existing_domain" class="btn btn-primary btn-block btn-lg">
  21. {$LANG.orderForm.use}
  22. </button>
  23. </div>
  24. </div>
  25. </div>
  26. </div>
  27. {if $WSEXISTING.subdomain}
  28. <div class="option tab-pane" id="subexisting">
  29. <div class="domain-input-group clearfix" id="domainsubexisting" >
  30. <div class="row">
  31. <div class="col-sm-9">
  32. <div class="row domains-row">
  33. <div class="col-xs-2 text-right">
  34. <input name="subdomainexisting_domaindomain" autocapitalize="none" data-toggle="tooltip" data-placement="top" data-trigger="manual" title="{$EDLANG.UseaSubDomainTooltip}" id="subdomainexisting_domaindomains" class="form-control">
  35. </div>
  36. <div class="col-xs-1 text-right" style="padding-right: 0px;padding-left: 0px;width: 2%;">
  37. <p class="form-control-static">.</p>
  38. </div>
  39. <div class="col-xs-6">
  40. <input name="subexisting_domaindomain" type="hidden" value="" id="subexisting_domaindomainid">
  41. <select id="subexisting_domainsld" name="subexisting_domaindomain" class="form-control">
  42. {foreach key=num item=existingdomain from=$existingdomains}
  43. <option data-oldv="{$existingdomain}" value="{$existingdomain}">{$existingdomain}</option>
  44. {/foreach}
  45. </select>
  46. </div>
  47. </div>
  48. </div>
  49. <div class="col-sm-2">
  50. <button type="submit" id="b_subexisting_domain" class="btn btn-submf btn-primary btn-block">
  51. {$LANG.orderForm.use}
  52. </button>
  53. </div>
  54. </div>
  55. </div>
  56. {/if}
  57. </div>
  58. {literal}
  59. <script type="text/javascript">
  60. jQuery('#frmProductDomain').submit(function (e) {
  61. e.preventDefault();
  62. var btnSearchObj = jQuery(this).find('button[type="submit"]'),
  63. domainSearchResults = jQuery("#DomainSearchResults"),
  64. spotlightTlds = jQuery('#spotlightTlds'),
  65. suggestions = jQuery('#domainSuggestions'),
  66. btnDomainContinue = jQuery('#btnDomainContinue'),
  67. domainoption = jQuery(".domain-tabs .active input").val(),
  68. sldInput = jQuery("#" + domainoption + "sld"),
  69. sld = sldInput.val(),
  70. tld = '',
  71. pid = jQuery('#frmProductDomainPid').val(),
  72. tldInput = '';
  73. if (domainoption == 'incart') {
  74. sldInput = jQuery("#" + domainoption + "sld option:selected");
  75. sld = sldInput.text();
  76. } else if (domainoption == 'subdomain') {
  77. tldInput = jQuery("#" + domainoption + "tld option:selected");
  78. tld = tldInput.text();
  79. } else if (domainoption == 'subexisting' || domainoption == 'subexisting_domain' || domainoption == 'existing_domain') {
  80. if (domainoption == 'subexisting_domain') {
  81. sld = jQuery("#subexisting_domaindomainid").val();
  82. } else {
  83. sldInput = jQuery("#" + domainoption + "sld option:selected");
  84. sld = sldInput.text();
  85. }
  86. } else {
  87. tldInput = jQuery("#" + domainoption + "tld");
  88. tld = tldInput.val();
  89. if (sld && !tld) {
  90. tldInput.tooltip('show');
  91. tldInput.focus();
  92. return false;
  93. }
  94. if (tld.substr(0, 1) != '.') {
  95. tld = '.' + tld;
  96. }
  97. }
  98. if (!sld) {
  99. sldInput.tooltip('show');
  100. sldInput.focus();
  101. return false;
  102. }
  103. sldInput.tooltip('hide');
  104. if (tldInput.length) {
  105. tldInput.tooltip('hide');
  106. }
  107. jQuery('input[name="domainoption"]').iCheck('disable');
  108. domainLookupCallCount = 0;
  109. btnSearchObj.attr('disabled', 'disabled').addClass('disabled');
  110. jQuery('.domain-lookup-result').addClass('hidden');
  111. jQuery('#primaryLookupResult div').hide();
  112. jQuery('#primaryLookupResult').find('.register-price-label').show().end()
  113. .find('.transfer-price-label').addClass('hidden');
  114. jQuery('.domain-lookup-register-loader').hide();
  115. jQuery('.domain-lookup-transfer-loader').hide();
  116. jQuery('.domain-lookup-other-loader').hide();
  117. if (domainoption == 'register') {
  118. jQuery('.domain-lookup-register-loader').show();
  119. } else if (domainoption == 'transfer') {
  120. jQuery('.domain-lookup-transfer-loader').show();
  121. } else {
  122. jQuery('.domain-lookup-other-loader').show();
  123. }
  124. jQuery('.domain-lookup-loader').show();
  125. suggestions.find('li').addClass('hidden').end()
  126. .find('.clone').remove().end();
  127. jQuery('div.panel-footer.more-suggestions').addClass('hidden')
  128. .find('a').removeClass('hidden').end()
  129. .find('span.no-more').addClass('hidden');
  130. jQuery('.btn-add-to-cart').removeAttr('disabled')
  131. .find('span').hide().end()
  132. .find('span.to-add').show();
  133. btnDomainContinue.addClass('hidden').attr('disabled', 'disabled');
  134. if (domainoption != 'register') {
  135. spotlightTlds.hide();
  136. jQuery('.suggested-domains').hide();
  137. }
  138. if (!domainSearchResults.is(":visible")) {
  139. domainSearchResults.hide().removeClass('hidden').fadeIn();
  140. }
  141. if (domainoption == 'register') {
  142. jQuery('.suggested-domains').hide().removeClass('hidden').fadeIn('fast');
  143. spotlightTlds.hide().removeClass('hidden').fadeIn('fast');
  144. jQuery('#resultDomainOption').val(domainoption);
  145. var lookup = jQuery.post(
  146. WHMCS.utils.getRouteUrl('/domain/check'),
  147. {
  148. token: csrfToken,
  149. type: 'domain',
  150. domain: sld + tld
  151. },
  152. 'json'
  153. ),
  154. spotlight = jQuery.post(
  155. WHMCS.utils.getRouteUrl('/domain/check'),
  156. {
  157. token: csrfToken,
  158. type: 'spotlight',
  159. domain: sld + tld
  160. },
  161. 'json'
  162. ),
  163. suggestion = jQuery.post(
  164. WHMCS.utils.getRouteUrl('/domain/check'),
  165. {
  166. token: csrfToken,
  167. type: 'suggestions',
  168. domain: sld + tld
  169. },
  170. 'json'
  171. );
  172. // primary lookup handler
  173. lookup.done(function (data) {
  174. jQuery.each(data.result, function (index, domain) {
  175. var pricing = null,
  176. result = jQuery('#primaryLookupResult'),
  177. available = result.find('.domain-available'),
  178. availablePrice = result.find('.domain-price'),
  179. unavailable = result.find('.domain-unavailable'),
  180. invalid = result.find('.domain-invalid'),
  181. contactSupport = result.find('.domain-contact-support'),
  182. resultDomain = jQuery('#resultDomain'),
  183. resultDomainPricing = jQuery('#resultDomainPricingTerm');
  184. result.removeClass('hidden').show();
  185. jQuery('.domain-lookup-primary-loader').hide();
  186. if (!data.result.error && domain.isValidDomain) {
  187. pricing = domain.pricing;
  188. if (domain.isAvailable && typeof pricing !== 'string') {
  189. if (domain.preferredTLDNotAvailable) {
  190. unavailable.show().find('strong').html(domain.originalUnavailableDomain);
  191. }
  192. contactSupport.hide();
  193. available.show().find('strong').html(domain.domainName);
  194. availablePrice.show().find('span.price').html(pricing[Object.keys(pricing)[0]].register).end()
  195. .find('button').attr('data-domain', domain.idnDomainName);
  196. resultDomain.val(domain.domainName);
  197. resultDomainPricing.val(Object.keys(pricing)[0]).attr('name', 'domainsregperiod[' + domain.domainName + ']');
  198. btnDomainContinue.removeAttr('disabled');
  199. } else {
  200. unavailable.show().find('strong').html(domain.domainName);
  201. contactSupport.hide();
  202. if (typeof pricing === 'string' && pricing == 'ContactUs') {
  203. contactSupport.show();
  204. }
  205. }
  206. } else {
  207. var invalidLength = invalid.find('span.domain-length-restrictions');
  208. invalidLength.hide();
  209. if (domain.minLength > 0 && domain.maxLength > 0) {
  210. invalidLength.find('.min-length').html(domain.minLength).end()
  211. .find('.max-length').html(domain.maxLength).end();
  212. invalidLength.show();
  213. }
  214. invalid.show();
  215. }
  216. });
  217. }).always(function () {
  218. hasProductDomainLookupEnded(3, btnSearchObj);
  219. });
  220. // spotlight lookup handler
  221. spotlight.done(function (data) {
  222. if (typeof data != 'object' || data.result.length == 0 || data.result.error) {
  223. jQuery('.domain-lookup-spotlight-loader').hide();
  224. return;
  225. }
  226. jQuery.each(data.result, function (index, domain) {
  227. var tld = domain.tldNoDots,
  228. pricing = domain.pricing,
  229. result = jQuery('#spotlight' + tld + ' .domain-lookup-result');
  230. jQuery('.domain-lookup-spotlight-loader').hide();
  231. result.find('button').addClass('hidden').end();
  232. if (domain.isValidDomain) {
  233. if (domain.isAvailable && typeof pricing !== 'string') {
  234. result
  235. .find('span.available').html(pricing[Object.keys(pricing)[0]].register).removeClass('hidden').end()
  236. .find('button.btn-add-to-cart')
  237. .attr('data-domain', domain.idnDomainName)
  238. .removeClass('hidden');
  239. } else {
  240. if (typeof pricing === 'string') {
  241. if (pricing == '') {
  242. result.find('button.unavailable').removeClass('hidden').end();
  243. } else {
  244. result.find('button.domain-contact-support').removeClass('hidden').end();
  245. }
  246. result.find('span.available').addClass('hidden').end();
  247. } else {
  248. result.find('button.unavailable').removeClass('hidden').end();
  249. result.find('span.available').addClass('hidden').end();
  250. }
  251. }
  252. } else {
  253. result.find('button.invalid.hidden').removeClass('hidden').end()
  254. .find('span.available').addClass('hidden').end()
  255. .find('button').not('button.invalid').addClass('hidden');
  256. }
  257. result.removeClass('hidden');
  258. });
  259. }).always(function () {
  260. hasProductDomainLookupEnded(3, btnSearchObj);
  261. });
  262. // suggestions lookup handler
  263. suggestion.done(function (data) {
  264. if (typeof data != 'object' || data.result.length == 0 || data.result.error) {
  265. jQuery('.suggested-domains').fadeOut('fast', function () {
  266. jQuery(this).addClass('hidden');
  267. });
  268. return;
  269. } else {
  270. jQuery('.suggested-domains').removeClass('hidden');
  271. }
  272. var suggestionCount = 1;
  273. jQuery.each(data.result, function (index, domain) {
  274. var tld = domain.tld,
  275. pricing = domain.pricing;
  276. suggestions.find('li:first').clone(true, true).appendTo(suggestions);
  277. var newSuggestion = suggestions.find('li.domain-suggestion').last();
  278. newSuggestion.addClass('clone')
  279. .find('span.domain').html(domain.sld).end()
  280. .find('span.extension').html('.' + tld).end();
  281. if (typeof pricing === 'string') {
  282. newSuggestion.find('button.btn-add-to-cart').remove();
  283. if (pricing != '') {
  284. newSuggestion.find('button.domain-contact-support').removeClass('hidden').end()
  285. .find('span.price').hide();
  286. } else {
  287. newSuggestion.remove();
  288. }
  289. } else {
  290. newSuggestion.find('button.btn-add-to-cart').attr('data-domain', domain.idnDomainName).end()
  291. .find('span.price').html(pricing[Object.keys(pricing)[0]].register).end();
  292. }
  293. if (suggestionCount <= 10) {
  294. newSuggestion.removeClass('hidden');
  295. }
  296. suggestionCount++;
  297. if (domain.group) {
  298. newSuggestion.find('span.promo')
  299. .addClass(domain.group)
  300. .html(domain.group.toUpperCase())
  301. .removeClass('hidden')
  302. .end();
  303. }
  304. furtherSuggestions = suggestions.find('li.domain-suggestion.clone.hidden').length;
  305. if (furtherSuggestions > 0) {
  306. jQuery('div.more-suggestions').removeClass('hidden');
  307. }
  308. });
  309. jQuery('.domain-lookup-suggestions-loader').hide();
  310. jQuery('#domainSuggestions').removeClass('hidden');
  311. }).always(function () {
  312. hasProductDomainLookupEnded(3, btnSearchObj);
  313. });
  314. } else if (domainoption == 'transfer') {
  315. jQuery('#resultDomainOption').val(domainoption);
  316. var transfer = jQuery.post(
  317. WHMCS.utils.getRouteUrl('/domain/check'),
  318. {
  319. token: csrfToken,
  320. type: 'transfer',
  321. domain: sld + tld
  322. },
  323. 'json'
  324. );
  325. transfer.done(function (data) {
  326. if (typeof data != 'object' || data.result.length == 0) {
  327. jQuery('.domain-lookup-primary-loader').hide();
  328. return;
  329. }
  330. var result = jQuery('#primaryLookupResult'),
  331. transfereligible = result.find('.transfer-eligible'),
  332. transferPrice = result.find('.domain-price'),
  333. transfernoteligible = result.find('.transfer-not-eligible'),
  334. resultDomain = jQuery('#resultDomain'),
  335. resultDomainPricing = jQuery('#resultDomainPricingTerm');
  336. if (Object.keys(data.result).length === 0) {
  337. jQuery('.domain-lookup-primary-loader').hide();
  338. result.removeClass('hidden').show();
  339. transfernoteligible.show();
  340. }
  341. jQuery.each(data.result, function (index, domain) {
  342. var pricing = domain.pricing;
  343. jQuery('.domain-lookup-primary-loader').hide();
  344. result.removeClass('hidden').show();
  345. if (domain.isRegistered) {
  346. transfereligible.show();
  347. transferPrice.show().find('.register-price-label').hide().end()
  348. .find('.transfer-price-label').removeClass('hidden').show().end()
  349. .find('span.price').html(pricing[Object.keys(pricing)[0]].transfer).end()
  350. .find('button').attr('data-domain', domain.idnDomainName);
  351. resultDomain.val(domain.domainName);
  352. resultDomainPricing.val(Object.keys(pricing)[0]).attr('name', 'domainsregperiod[' + domain.domainName + ']');
  353. btnDomainContinue.removeAttr('disabled');
  354. } else {
  355. transfernoteligible.show();
  356. }
  357. });
  358. }).always(function () {
  359. hasProductDomainLookupEnded(1, btnSearchObj);
  360. });
  361. } else if (domainoption == 'owndomain' || domainoption == 'subdomain' || domainoption == 'incart') {
  362. var otherDomain = jQuery.post(
  363. WHMCS.utils.getRouteUrl('/domain/check'),
  364. {
  365. token: csrfToken,
  366. type: domainoption,
  367. pid: pid,
  368. domain: sld + tld
  369. },
  370. 'json'
  371. );
  372. otherDomain.done(function (data) {
  373. if (typeof data != 'object' || data.result.length == 0) {
  374. jQuery('.domain-lookup-subdomain-loader').hide();
  375. return;
  376. }
  377. jQuery.each(data.result, function (index, result) {
  378. if (result.status === true) {
  379. window.location = 'cart.php?a=confproduct&i=' + result.num;
  380. } else {
  381. jQuery('.domain-lookup-primary-loader').hide();
  382. jQuery('#primaryLookupResult').removeClass('hidden').show().find('.domain-invalid').show();
  383. }
  384. });
  385. }).always(function () {
  386. hasProductDomainLookupEnded(1, btnSearchObj);
  387. });
  388. } else if (domainoption === 'existing_domain') {
  389. sldInput = jQuery("#existing_domainsld option:selected");
  390. sld = sldInput.text();
  391. var splitDomain = sld.split('.');
  392. sld = splitDomain[0];
  393. splitDomain.splice(0, 1);
  394. tld = '.' + splitDomain.join(".");
  395. jQuery('.domain-lookup-other-loader').show();
  396. jQuery('.domain-lookup-loader').show();
  397. btnDomainContinue.addClass('hidden').attr('disabled', 'disabled');
  398. var otherDomain = jQuery.post(
  399. 'cart.php',
  400. {
  401. token: csrfToken,
  402. a: 'checkDomain',
  403. type: "owndomain", //domainoption,
  404. pid: pid,
  405. wscheck: 1,
  406. domain: sld + tld
  407. },
  408. 'json'
  409. );
  410. otherDomain.done(function (data) {
  411. if (typeof data !== 'object' || data.result.length === 0) {
  412. jQuery('.domain-lookup-subdomain-loader').hide();
  413. return;
  414. }
  415. if (typeof data.result.wsres !== 'undefined' && data.result.wsres.length > 0) {
  416. $(".errordomainnamepws").remove();
  417. {/literal}
  418. $('#frmProductDomainSelections').prepend('<div class="errordomainnamepws alert alert-danger"><strong>' + data.result.wsdomain + '</strong> {$EDLANG.errordomain}</div>');
  419. {literal}
  420. }
  421. jQuery.each(data.result, function (index, result) {
  422. if (result.status === true) {
  423. window.location = 'cart.php?a=confproduct&i=' + result.num;
  424. } else {
  425. jQuery('.domain-lookup-primary-loader').hide();
  426. jQuery('#primaryLookupResult').removeClass('hidden').show().find('.domain-invalid').show();
  427. }
  428. });
  429. }).always(function () {
  430. hasProductDomainLookupEnded(1, btnSearchObj);
  431. });
  432. } else if (domainoption === 'subexisting_domain') {
  433. if ($("#subdomainexisting_domaindomains").val() === '') {
  434. $('#subdomainexisting_domaindomains').tooltip('show');
  435. return 0;
  436. }
  437. jQuery('.domain-lookup-other-loader').show();
  438. jQuery('.domain-lookup-loader').show();
  439. btnDomainContinue.addClass('hidden').attr('disabled', 'disabled');
  440. var ddsubdomain = $("#subexisting_domaindomainid").val();
  441. var otherDomain = jQuery.post(
  442. 'cart.php',
  443. {
  444. token: csrfToken,
  445. a: 'checkDomain',
  446. type: "owndomain", //domainoption,
  447. pid: pid,
  448. wscheck: 1,
  449. domain: ddsubdomain
  450. },
  451. 'json'
  452. );
  453. otherDomain.done(function (data) {
  454. if (typeof data !== 'object' || data.result.length === 0) {
  455. jQuery('.domain-lookup-subdomain-loader').hide();
  456. return;
  457. }
  458. if (typeof data.result.wsres !== 'undefined' && data.result.wsres.length > 0) {
  459. $(".errordomainnamepws").remove();
  460. {/literal}
  461. $('#frmProductDomainSelections').prepend('<div class="errordomainnamepws alert alert-danger"><strong>' + data.result.wsdomain + '</strong> {$EDLANG.errordomain}</div>');
  462. {literal}
  463. }
  464. jQuery.each(data.result, function (index, result) {
  465. if (result.status === true) {
  466. window.location = 'cart.php?a=confproduct&i=' + result.num;
  467. } else {
  468. jQuery('.domain-lookup-primary-loader').hide();
  469. jQuery('#primaryLookupResult').removeClass('hidden').show().find('.domain-invalid').show();
  470. }
  471. });
  472. }).always(function () {
  473. hasProductDomainLookupEnded(1, btnSearchObj);
  474. });
  475. }
  476. btnDomainContinue.removeClass('hidden');
  477. });
  478. </script>
  479. <script>
  480. $(document).ready(function () {
  481. $("#subdomainexisting_domaindomains").on("keyup", function () {
  482. if ($("#subdomainexisting_domaindomains").val() !== '') {
  483. $('#subdomainexisting_domaindomains').tooltip('hide');
  484. var oldvv = $("#subexisting_domainsld").find("option:selected").data("oldv");
  485. $("#subexisting_domaindomainid").val($("#subdomainexisting_domaindomains").val() + '.' + oldvv);
  486. } else {
  487. $("#subexisting_domaindomainid").val('');
  488. }
  489. });
  490. $(".btn-submf").on("click", function () {
  491. jQuery('#frmProductDomain').submit();
  492. });
  493. $("#subexisting_domainsld").on("change", function () {
  494. if ($("#subdomainexisting_domaindomains").val() !== '') {
  495. var oldvv = $("#subexisting_domainsld").find("option:selected").data("oldv");
  496. $("#subexisting_domaindomainid").val($("#subdomainexisting_domaindomains").val() + '.' + oldvv);
  497. } else {
  498. $("#subexisting_domaindomainid").val('');
  499. }
  500. });
  501. });
  502. </script>
  503. {/literal}
  504. {/if}