1$(document).ready(function () { 2 $(".cancelButton").click(function () { 3 // $(".k_navbar").addClass("animebanner"); 4 $(".kai-banner").removeClass("d-flex"); 5 $(".kai-banner").addClass("d-none"); 6 // var floatingBanner = $(".kai-banner").height() + 24; 7 // $(".k_nav_mobile_container").css("top", `${floatingBanner + 60}px`); 8 // $(".k_navbar").css("transform", `translateY(-${floatingBanner}px)`); 9 document.querySelector(".k_navbar").style.top = 0 + "px"; 10 }); 11 12 var getUrl = window.location.href; 13 var arr = getUrl.split("/").filter((item) => item); 14 if (arr.length < 3) { 15 $(".kai-banner").css("display", "block"); 16 } 17 18 if (new URL(window.location.href).searchParams.get("utm_source")) { 19 localStorage.setItem( 20 "utm_source", 21 new URL(window.location.href).searchParams.get("utm_source") 22 ); 23 } 24 var gclidFromLocal = ""; 25 if (new URL(window.location.href).searchParams.get("gclid")) { 26 gclidFromLocal = new URL(window.location.href).searchParams.get("gclid"); 27 localStorage.setItem("gclidFromLocal", gclidFromLocal); 28 } 29 30 if (new URL(window.location.href).searchParams.get("utm_medium")) { 31 localStorage.setItem( 32 "utm_medium", 33 new URL(window.location.href).searchParams.get("utm_medium") 34 ); 35 } 36 37 var utm_campaignFromLocal = ""; 38 if (new URL(window.location.href).searchParams.get("utm_campaign")) { 39 var utm_campaignFromLocal = new URL(window.location.href).searchParams.get( 40 "utm_campaign" 41 ); 42 } 43 44 var page_url = window.location.href; 45 46 var page_url = window.location.href; 47 48 let pageMap = { 49 "/": "home page", 50 "/agency-dashboard": "agency-dashboard", 51 "/agency-dashboard/": "agency-dashboard", 52 "/automation": "automation", 53 "/automation/": "automation", 54 "/calls-and-tasks": "calls-and-tasks", 55 "/calls-and-tasks/": "calls-and-tasks", 56 "/salesleadgen-case-study": "salesleadgen-case-study", 57 "/salesleadgen-case-study/": "salesleadgen-case-study", 58 "/cold-email-automation": "cold-email-automation", 59 "/cold-email-automation/": "cold-email-automation", 60 "/cold-email-software": "cold-email-software", 61 "/cold-email-software/": "cold-email-software", 62 "/customer-stories": "customer-stories", 63 "/customer-stories/": "customer-stories", 64 "/cadence-playbooks": "cadences-playbook", 65 "/cadence-playbooks/": "cadences-playbook", 66 "/email-deliverability": "email-deliverability", 67 "/email-deliverability/": "email-deliverability", 68 "/email-personalization": "email-personalization", 69 "/hubspot-integration": "hubspot-integration", 70 "/hubspot-integration/": "hubspot-integration", 71 "/lemlist-alternative": "lemlist-alternative", 72 "/lemlist-alternative/": "lemlist-alternative", 73 "/lp2/outreach-alternative": "lp2/outreach-alternative", 74 "/lp2/salesloft-alternative": "lp2/salesloft-alternative", 75 "/lp/cold-email-automation": "lp/cold-email-automation", 76 "/lp/lemlist-alternative": "lp/lemlist-alternative", 77 "/lp/mailshake-alternative": "lp/mailshake-alternative", 78 "/lp/mixmax-alternative": "lp/mixmax-alternative", 79 "/lp/outreach-alternative": "lp/outreach-alternative", 80 "/lp/persistiq-alternative": "lp/persistiq-alternative", 81 "/lp/prospectio-alternative": "lp/prospectio-alternative", 82 "/lp/reply-alternative": "lp/reply-alternative", 83 "/lp/salesloft-alternative": "lp/salesloft-alternative", 84 "/lp/woodpecker-alternative": "lp/woodpecker-alternative", 85 "/lp/xant-alternative": "lp/xant-alternative", 86 "/lp/yesware-alternative": "lp/yesware-alternative", 87 "/mailshake-alternative": "mailshake-alternative", 88 "/mixmax-alternative": "mixmax-alternative", 89 "/outreach-alternative": "outreach-alternative", 90 "/persistiq-alternative": "persistiq-alternative", 91 "/pipedrive-integration": "pipedrive-integration", 92 "/pipedrive-integration/": "pipedrive-integration", 93 "/price-comparison/": "price-comparison", 94 "/sales-engagement-platform/pricing/": "pricing", 95 "/sales-engagement-platform/pricing/": "pricing", 96 "/prospectio-alternative": "prospectio-alternative", 97 "/reports-and-dashboards": "reports-and-dashboards", 98 "/reports-and-dashboards/": "reports-and-dashboards", 99 "/reply-alternative": "reply-alternative", 100 "/salesforce-integration": "salesforce-integration", 101 "/salesforce-integration/": "salesforce-integration", 102 "/salesloftcomparison-ebook": "salesloftcomparison-ebook", 103 "/slack-app-integration": "slack-app-integration", 104 "/slack-app-integration/": "slack-app-integration", 105 "/woodpecker-alternative": "woodpecker-alternative", 106 "/xant-alternative": "xant-alternative", 107 "/yesware-alternative": "yesware-alternative", 108 "/zapier-integration": "zapier-integration", 109 "/zapier-integration/": "zapier-integration", 110 "/zoho-integration": "zoho-integration", 111 "/zoho-integration/": "zoho-integration", 112 "/email-sequence-software": "email-sequence-software", 113 "/lp/email-sequence-software": "lp/email-sequence-software", 114 }; 115 pageName = pageMap[window.location.pathname] 116 ? pageMap[window.location.pathname] 117 : window.location.pathname; 118 119 // Which CTA opened the demo popup, reported to Slack on submit. The click and 120 // the submit are separate handlers, so the clicked button has to be remembered 121 // here. Every open of the popup goes through this handler, so the `|| ""` 122 // clears a previous value rather than leaving a stale one on an untagged CTA. 123 var demoPlace = ""; 124 125 $(".showDemoRequest").click(function () { 126 demoPlace = $(this).data("place") || ""; 127 // var subProducts = getUrl.split("/"); 128 // if ( 129 // subProducts.includes("call-iq") || 130 // subProducts.includes("prospect-iq") 131 // ) { 132 // $(".k-signup-wrapper").removeClass("ks-displayHide"); 133 // $("body").addClass("stop-scrolling"); 134 // clearData(); 135 // } else { 136 // $("#calendly").removeClass("d-none"); 137 // $(".klentycalendly-close").click(function () { 138 // $("#calendly").addClass("d-none"); 139 // }); 140 // } 141 142 $(".k-signup-wrapper").removeClass("ks-displayHide"); 143 $("body").addClass("stop-scrolling"); 144 clearData(); 145 }); 146 147 $(".ks-close").click(function () { 148 $(".k-signup-wrapper").addClass("ks-displayHide"); 149 $("body").removeClass("stop-scrolling"); 150 }); 151 152 function clearData() { 153 $("#demo_message").removeClass("ks-display"); 154 $("#demo_emailId").val(""); 155 } 156 function isEmpty(value) { 157 return !value || value == ""; 158 } 159 160 function shake() { 161 setTimeout(function () { 162 $("#demo_emailId").addClass("shake"); 163 }, 100); 164 165 setTimeout(function () { 166 $("#demo_emailId").removeClass("shake"); 167 }, 1000); 168 } 169 170 function shake2(id) { 171 setTimeout(function () { 172 $(id).addClass("shake"); 173 }, 100); 174 175 setTimeout(function () { 176 $(id).removeClass("shake"); 177 }, 1000); 178 } 179 180 function emailshake() { 181 setTimeout(function () { 182 $("#scheduleEmail").addClass("shake"); 183 }, 100); 184 185 setTimeout(function () { 186 $("#scheduleEmail").removeClass("shake"); 187 }, 2000); 188 } 189 190 $("#scheduleBookbutton").click(function () { 191 let scheduleEmail = $("#scheduleBookEmail").val(); 192 var pattern = 193 /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; 194 if (isEmpty(scheduleEmail)) { 195 $(".emailErrorMessage").removeClass("d-none"); 196 emailshake(); 197 } else if (!pattern.test(scheduleEmail)) { 198 $(".emailErrorMessage").removeClass("d-none"); 199 emailshake(); 200 } else { 201 $(".emailErrorMessage").addClass("d-none"); 202 203 // Calendly Integration 204 $("#calendly").removeClass("d-none"); 205 $(".klentycalendly-close").click(function () { 206 $("#calendly").addClass("d-none"); 207 }); 208 209 // Gist code 210 gist.identify(scheduleEmail, { 211 email: scheduleEmail, 212 subscription_type: "demo_request", 213 product_type: "SEP", 214 }); 215 216 // factors 217
218 try { 219 factors.track("$form_submitted", { $email: scheduleEmail }); 220 } catch (e) { 221 console.log("Factors not initialized", e); 222 } 223 224 /* bing ads */ 225 226 window.uetq = window.uetq || []; 227 window.uetq.push("event", "demo_form", { 228 event_category: "demo", 229 event_label: "book_demo", 230 event_value: "100", 231 }); 232 233 $("#scheduleBookEmail").val(""); 234 } 235 }); 236 237 function openSchedulingCalendar() { 238 clearData(); 239 240 $(".klentycalendly-close").click(function () { 241 $("#calendly").addClass("d-none"); 242 const element = document.getElementById("my-cal-inline"); 243 element.replaceChildren(); 244 $("body").removeClass("stop-scrolling"); 245 }); 246 } 247 248 async function getValidEmailResponse(email) { 249 const response = await fetch("/validateEmail", { 250 headers: { 251 "Content-Type": "application/json", 252 }, 253 method: "POST", 254 body: JSON.stringify({ email }), 255 }); 256 const data = await response.json(); 257 return data; 258 } 259 260 $("#requestPricingSubmit").click(async function (e) { 261 // This button sits inside a form GTM tracks, so the browser's own 262 // submission would reach GTM before the checks below run. Cancel it here 263 // and dispatch the submit event only once every field is valid. 264 if (e) e.preventDefault(); 265 const pricingForm = $(this).closest("form")[0]; 266 267 let pageURL = window.location.href; 268 let parts = pageURL.split("/"); 269 270 let email = $("#pricing_emailId").val(); 271 let mobile = $("#pricing_mobile").val(); 272 273 // let pattern = 274 // /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; 275 276 let pattern = 277 /^[a-zA-Z0-9.%+-]+@(?!gmail.com)(?!gmail.co)(?!yahoo.co)(?!yahoo.com)(?!hotmail.co)(?!hotmail.com)(?!yahoo.co.in)(?!aol.com)(?!live.com)(?!outlook.co)(?!outlook.com)[a-zA-Z0-9-]+.[a-zA-Z0-9-.]{2,61}$/; 278 279 if (isEmpty(email)) { 280 $("#pricing_message").addClass("ks-display"); 281 shake2("#pricing_emailId"); 282 } else if (!pattern.test(email)) { 283 $("#pricing_message").text("* Please enter a valid work email ID"); 284 $("#pricing_message").addClass("ks-display"); 285 shake2("#pricing_emailId"); 286 } else if (!isEmpty(mobile) && !/^\d*$/.test(mobile)) { 287 $("#pricing_message").removeClass("ks-display"); 288 $("#pricing_mobile_message").text("* Please enter a valid mobile number"); 289 $("#pricing_mobile_message").addClass("ks-display"); 290 shake2("#pricing_mobile"); 291 } else { 292 $("#pricing_mobile_message").removeClass("ks-display"); 293 fireFormSubmitEvent(pricingForm); 294 295 let responseEmailValid = null; 296 if (responseEmailValid === null) { 297 $("#validatingText2").removeClass("d-none"); 298 } 299 300 var new_lead = {}; 301 302 new_lead["Email"] = email; 303 304 $.ajax({ 305 type: "post", 306 url: "/demoRequest", 307 data: {new_lead, page: window.location.href}, 308 contentType: "application/x-www-form-urlencoded", 309 }); 310 311 gist.identify(email, { 312 email: email, 313 subscription_type: "demo_request", 314 product_type: "Dial IQ", 315 }); 316 317 $("#validatingText2").addClass("d-none"); 318 319 clearData(); 320 $(".k-signup-wrapper2").addClass("ks-displayHide"); 321 $("body").removeClass("stop-scrolling"); 322 323 $("#calendly").removeClass("d-none"); 324 $(".klentycalendly-close").click(function () { 325 $("#calendly").addClass("d-none"); 326 }); 327 328 // factors 329 try { 330 factors.track("$form_submitted", { $email: email }); 331 } catch (e) { 332 console.log("Factors not initialized", e); 333 } 334 335 /* bing ads */ 336 337 window.uetq = window.uetq || []; 338 window.uetq.push("event", "demo_form", { 339 event_category: "demo", 340 event_label: "book_demo", 341 event_value: "100", 342 }); 343 } 344 }); 345 346 // The pricing form does its work in the click handler above; the submit event 347 // exists purely so GTM can count it. Cancel the navigation explicitly rather 348 // than relying on formEmailValid.js happening to be loaded on the page. 349 $("#requestPricingSubmit") 350 .closest("form") 351 .on("submit", function (e) { 352 e.preventDefault(); 353 }); 354 355 // Single source of truth for demo-email validation. Used both by the 356 // pre-submit check on the click/Enter and by the submit handler below, so the 357 // two can never disagree about whether an email is acceptable. 358 const DEMO_EMAIL_PATTERN = 359 /^[a-zA-Z0-9.%+-]+@(?!gmail.com)(?!gmail.co)(?!yahoo.co)(?!yahoo.com)(?!hotmail.co)(?!hotmail.com)(?!yahoo.co.in)(?!aol.com)(?!live.com)(?!outlook.co)(?!outlook.com)[a-zA-Z0-9-]+.[a-zA-Z0-9-.]{2,61}$/; 360 361 function isDemoEmailValid(email) { 362 return !isEmpty(email) && DEMO_EMAIL_PATTERN.test(email); 363 } 364 365 function showDemoEmailError(email) { 366 if (!isEmpty(email)) { 367 $("#demo_message").text("* Please enter a valid work email ID"); 368 } 369 $("#demo_message").addClass("ks-display"); 370 shake(); 371 } 372 373 // Fires a real submit event so GTM's Form Submission trigger sees it. The 374 // bound handlers preventDefault, so nothing navigates. dispatchEvent is the 375 // fallback for Safari older than 16, which lacks requestSubmit. 376 function fireFormSubmitEvent(form) { 377 if (!form) return; 378 if (typeof form.requestSubmit === "function") { 379 form.requestSubmit(); 380 } else { 381 form.dispatchEvent( 382 new Event("submit", { bubbles: true, cancelable: true }) 383 ); 384 } 385 } 386 387 const handleRequestDemoSubmit = async function (e) { 388 if (e) e.preventDefault(); 389 let pageURL = window.location.href; 390 let parts = pageURL.split("/"); 391 392 let email = $("#demo_emailId").val(); 393 394 if (!isDemoEmailValid(email)) { 395 showDemoEmailError(email); 396 } else { 397 let responseEmailValid = null; 398 if (responseEmailValid === null) { 399 $("#validatingText").removeClass("d-none"); 400 } 401 402 $("#demo_message").removeClass("ks-display"); 403 var new_lead = {}; 404 405 new_lead["Email"] = email; 406 407 $.ajax({ 408 type: "post", 409 url: "/demoRequest", 410 data: {new_lead, page: window.location.href, place: demoPlace}, 411 contentType: "application/x-www-form-urlencoded", 412 }); 413 414 const productType = parts.includes("call-iq")? "Call IQ" : parts.includes("dial-iq")? "Dial IQ" : "SEP"; 415 416 gist.identify(email, { 417 email: email, 418 subscription_type: "demo_request", 419 product_type: productType, 420 }); 421 422 // pipedrive data sending 423 let productCategory = "Klenty SEP"; 424 let label = 564; 425 if(productType === "Call IQ" || productType === "Dial IQ"){ 426 productCategory = "Dialer" 427 label = 563; 428 } 429 430 $.ajax({ 431 type: "post", 432 url: "/pipedrive", 433 data: {email, productCategory, label, pageUrl: window.location.origin + window.location.pathname }, 434 contentType: "application/x-www-form-urlencoded", 435 }); 436 437 $("#validatingText").addClass("d-none"); 438 window.postMessage( 439 { type: "TRIGGER_KLENTY_CALENDAR", email: email }, 440 "*" 441 ); 442 $("#requestDemoSubmit").addClass("d-none"); 443 $("#requestDemoSubmiting").removeClass("d-none");
444 openSchedulingCalendar(); 445 446 // factors 447 try { 448 factors.track("$form_submitted", { $email: email }); 449 } catch (e) { 450 console.log("Factors not initialized", e); 451 } 452 453 /* bing ads */ 454 455 window.uetq = window.uetq || []; 456 window.uetq.push("event", "demo_form", { 457 event_category: "demo", 458 event_label: "book_demo", 459 event_value: "100", 460 }); 461 } 462 }; 463 464 // Validates before any submit event exists, then dispatches one only if the 465 // email is good. GTM's Form Submission trigger fires the instant a submit 466 // event reaches the document â i.e. before the handler above can reject the 467 // email â so without this every failed attempt counted as a conversion. 468 function attemptRequestDemoSubmit(e) { 469 if (e) e.preventDefault(); // stop the browser submitting on its own 470 var email = $("#demo_emailId").val(); 471 if (!isDemoEmailValid(email)) { 472 showDemoEmailError(email); 473 return; 474 } 475 fireFormSubmitEvent($("#requestDemoSubmit").closest("form")[0]); 476 } 477 478 // Bind the demo submit to the enclosing form's native submit event (not the 479 // button's click). The native submit event still fires and bubbles, so GTM's 480 // Form Submission trigger catches it; preventDefault inside the handler only 481 // cancels the actual navigation/reload. Falls back to the button click on the 482 // few pages where the button isn't wrapped in a <form> (e.g. seasonal pages). 483 var $requestDemoForm = $("#requestDemoSubmit").closest("form"); 484 if ($requestDemoForm.length) { 485 $requestDemoForm.on("submit", handleRequestDemoSubmit); 486 487 // Only on the GTM-tracked form. Everywhere else the button keeps today's 488 // behaviour untouched â several pages carry their own inline 489 // #requestDemoSubmit click handlers, and some render two buttons with that 490 // same id, so this deliberately changes nothing outside #newDemoForm. 491 if ($requestDemoForm.attr("id") === "newDemoForm") { 492 $("#requestDemoSubmit").on("click", attemptRequestDemoSubmit); 493 $("#demo_emailId").on("keydown", function (e) { 494 // Enter would otherwise submit the form straight past validation. 495 if (e.key === "Enter") attemptRequestDemoSubmit(e); 496 }); 497 } 498 } else { 499 $("#requestDemoSubmit").on("click", handleRequestDemoSubmit); 500 } 501 502 $("#requestDemoSubmit2").click(async function () { 503 let email = $("#demo_emailId").val(); 504 let firstname = $("#demo_firstname").val(); 505 let lastname = $("#demo_lastname").val(); 506 let company = $("#demo_company").val(); 507 let phone = $("#demo_phone").val(); 508 509 // let pattern = 510 // /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; 511 512 let pattern = 513 /^[a-zA-Z0-9.%+-]+@(?!gmail.com)(?!gmail.co)(?!yahoo.co)(?!yahoo.com)(?!hotmail.co)(?!hotmail.com)(?!yahoo.co.in)(?!aol.com)(?!live.com)(?!outlook.co)(?!outlook.com)[a-zA-Z0-9-]+.[a-zA-Z0-9-.]{2,61}$/; 514 515 if (isEmpty(email)) { 516 $("#demo_message").addClass("ks-display"); 517 shake(); 518 } else if (!pattern.test(email)) { 519 $("#demo_message").text("* Please enter a valid work email ID"); 520 $("#demo_message").addClass("ks-display"); 521 shake(); 522 } else { 523 let responseEmailValid = null; 524 if (responseEmailValid === null) { 525 $("#validatingText").removeClass("d-none"); 526 } 527 528 $("#demo_message").removeClass("ks-display"); 529 var new_lead = {}; 530 531 new_lead["Email"] = email; 532 533 $.ajax({ 534 type: "post", 535 url: "/demoRequest", 536 data: {new_lead, page: window.location.href}, 537 contentType: "application/x-www-form-urlencoded", 538 }); 539 540 gist.identify(email, { 541 email: email, 542 subscription_type: "demo_request", 543 product_type: "Dial IQ", 544 }); 545 546 // pipedrive data sending 547 $.ajax({ 548 type: "post", 549 url: "/pipedrive", 550 data: {email, productCategory: "Dialer", label: 563, pageUrl: window.location.origin + window.location.pathname}, 551 contentType: "application/x-www-form-urlencoded", 552 }); 553 554 $("#validatingText").addClass("d-none"); 555 window.postMessage( 556 { type: "TRIGGER_KLENTY_CALENDAR", email: email }, 557 "*" 558 ); 559 $("#requestDemoSubmit2").addClass("d-none"); 560 $("#requestDemoSubmiting2").removeClass("d-none"); 561 formSubmit(); 562 563 // factors
564 try { 565 factors.track("$form_submitted", { $email: email }); 566 } catch (e) { 567 console.log("Factors not initialized", e); 568 } 569 570 /* bing ads */ 571 572 window.uetq = window.uetq || []; 573 window.uetq.push("event", "demo_form", { 574 event_category: "demo", 575 event_label: "book_demo", 576 event_value: "100", 577 }); 578 } 579 }); 580}); 581 582$(document).ready(function () { 583 function takeatour() { 584 $(".btn-cross-takeatour").css("display", "block"); 585 $(".takeatour-popup").css("display", "block"); 586 } 587 588 setTimeout(function () { 589 $(".errorMessage").text(""); 590 }, 0); 591 592 var emailId = localStorage.getItem("takeatour"); 593 594 if (emailId == null) { 595 // $(".takeatour-popup").css("display", "block"); 596 // $(".btn-cross-takeatour").css("display", "none"); 597 // $(".takeatourForm").removeClass("d-none"); 598 // $(".takeatourForm").css("z-index", "1001"); 599 600 $(".takeatourForm").addClass("d-none"); 601 takeatour(); 602 } else { 603 $(".takeatourForm").addClass("d-none"); 604 takeatour(); 605 } 606 607 $(".ks-close-takeatour").click(function () { 608 $(".takeatourForm").addClass("d-none"); 609 $(".takeatour-popup").css("display", "none"); 610 // $("#tour_demo_email").value(""); 611 }); 612 613 var pattern = 614 /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; 615 var workEmail = /^[a-zA-Z0-9.%+-]+@(?!gmail.com)(?!gmail.co)(?!yahoo.co)(?!yahoo.com)(?!hotmail.co)(?!hotmail.com)(?!yahoo.co.in)(?!aol.com)(?!live.com)(?!outlook.co)(?!outlook.com)[a-zA-Z0-9-]+.[a-zA-Z0-9-.]{2,61}$/; 616 $("#videoSubmit").prop("disabled", true); 617 618 var username = ""; 619 620 $("#tour_demo_email").on("blur keyup change click", function () { 621 username = $("#tour_demo_email").val(); 622 623 if (username && username != "" && pattern.test(username)) { 624 $(".errorMessage").text(""); 625 if (workEmail.test(username)) { 626 $("#videoSubmit").prop("disabled", false); 627 } else { 628 $(".errorMessage").text("* Please use your work email to register"); 629 $("#videoSubmit").prop("disabled", true); 630 } 631 } else { 632 $("#videoSubmit").prop("disabled", true); 633 $(".errorMessage").text(""); 634 } 635 }); 636 637 $(".errorMessage").text(""); 638 $("#productTourDemo").submit(function (e) { 639 $(".takeatourForm").addClass("d-none"); 640 $(".btn-cross-takeatour").css("display", "block"); 641 $("#tour_demo_email").val(""); 642 return false; 643 }); 644 645 $(".product-tour").click(function () { 646 $(".btn-cross-tour").css("display", "block"); 647 localStorage.setItem("takeatour", username); 648 takeatour(); 649 }); 650 651 $(".btn-cross-takeatour").click(function () { 652 $("body").removeClass("stop-scrolling"); 653 $(".takeatour-popup").css("display", "none"); 654 }); 655});
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.