1/* CUSTOM SCRIPTS */ 2/* ----------------------------------------- */ 3jQuery(window).on("load", function() { 4 //Copyright Script 5 var dateYear = new Date().getFullYear(); 6 if(jQuery("#copyright").length > 0) { 7 document.getElementById("copyright").innerHTML = dateYear; 8 } 9 10 //Temporary Code //Remove when expired //FEBE-13752 11 var availableQty; 12 if(jQuery("#ticket-registration").length > 0) { 13 availableQty = jQuery("#ticket-registration").find(".tribe-tickets__tickets-item-extra-available-quantity").first().text(); 14 jQuery("#ticket-registration").find("h2").first().html("Tickets & Sponsorships"); 15 //jQuery("#ticket-registration").find("h2").first().html("Tickets: " + availableQty + " total tickets available"); 16 //console.log("The total quantity is " + availableQty); 17 } 18 19 //Feedback Page Scripts 20 jQuery("select[name='feedbackTopic']").on("change", function() { 21 feedbackValue = jQuery(this).val(); 22 23 if(feedbackValue == "Recent Visit") { 24 jQuery("input[name='feedbackWebsite']").prop( "checked", false ); 25 } else if(feedbackValue == "About this Website") { 26 jQuery("input[name='feedbackExperience']").prop( "checked", false ); 27 jQuery("input[name='feedbackReturn']").prop( "checked", false ); 28 } else { 29 jQuery("input[name='feedbackWebsite']").prop( "checked", false ); 30 jQuery("input[name='feedbackExperience']").prop( "checked", false ); 31 jQuery("input[name='feedbackReturn']").prop( "checked", false ); 32 } 33 }); 34 35 //QR Code Scanning //NOT FINALIZED 36 if(jQuery("#reader").length > 0) { 37 /* 38 function onScanSuccess(decodedText, decodedResult) { 39 // Handle on success condition with the decoded text or result. 40 //console.log('Scan result: ${decodedText}', decodedResult); 41 alert("successful scan"); 42 } 43 44 var html5QrcodeScanner = new Html5QrcodeScanner( 45 "reader", { fps: 10, qrbox: 250 }); 46 html5QrcodeScanner.render(onScanSuccess); 47 */ 48 49 var html5QrcodeScanner = new Html5QrcodeScanner( 50 "reader", { fps: 10, qrbox: 250 }); 51 52 function onScanSuccess(decodedText, decodedResult) { 53 // Handle on success condition with the decoded text or result. 54 console.log(`Scan result: ${decodedText}`, decodedResult); 55 // ... 56 html5QrcodeScanner.clear(); 57 // ^ this will stop the scanner (video feed) and clear the scan area. 58 } 59 60 html5QrcodeScanner.render(onScanSuccess); 61 } 62 63 //Height Setup IFRAME 64 if(jQuery("#fulfillengineiframe").length > 0) { 65 function loadShop() { 66 (function () { 67 var y = 0, 68 t = "fulfillengineiframe"; 69 window.addEventListener( 70 "message", 71 function (e) { 72 const delayInMilliseconds = 180; 73 74 setTimeout(function() { 75 if (!e || !e.data || e.data.length < 2) return 0; 76 var a = document.getElementById(t); 77 if (!a) return 0; 78 var r = e.data[0], 79 i = e.data[1]; 80 i = i.slice(0,-2); 81 i = Number(i); 82 i = i + 225; 83 if("iframeScrollUp" === r) { 84 i = 0; 85 } 86 87 //console.log("conditional value: " + r + ", assigning value: " + i); 88 "setIframeHeight" === r ? a.setAttribute("style", "height:" + i + "px") : "iframeScrollUp" === r && a.getBoundingClientRect().y < y && window.scrollTo(0, a.getBoundingClientRect().y + window.scrollY - y); 89 }, delayInMilliseconds); 90 }, 91 !1 92 ); 93 })(); 94 } 95 96 jQuery.when(loadShop()).then(function() { 97 setTimeout(function() { 98 jQuery("#fulfillengineiframe").height(1500); //Original height //1175 99 jQuery("#shop-iframe").removeClass("shop-iframe"); 100 jQuery("#shop-iframe > div").remove(); 101 }, 1000); 102 }); 103 } 104 105 //Navigation Reset on Resize 106 function windowSize() { 107 windowHeight = window.innerHeight ? window.innerHeight : $(window).height(); 108 windowWidth = window.innerWidth ? window.innerWidth : $(window).width(); 109 } 110 111 jQuery(window).resize(function() { 112 windowSize(); 113 114 if (windowWidth > 1024) { 115 //console.log('width is :', windowWidth, 'Height is :', windowHeight); 116 jQuery(".sub-menu").removeAttr("style"); 117 jQuery(".hfe-has-submenu-container").removeClass("menu-active"); 118 } 119 }); 120 121 //Scroll Disable for Calendar 122 if(jQuery("#banner-calendar").length > 0) { 123 setTimeout(function() { 124 //Replace the scrollUp method with a no-op 125 tribe.events.views.navigationScroll.scrollUp = function() {}; 126
127 //Unbind and rebind the event so the no-op runs instead of scrolling 128 jQuery(document) 129 .off("afterAjaxSuccess.tribeEvents", tribe.events.views.manager.selectors.container) 130 .on("afterAjaxSuccess.tribeEvents", tribe.events.views.manager.selectors.container, tribe.events.views.navigationScroll.scrollUp); 131 }, 100); // 100ms delay to ensure it's last 132 } 133 134 //Randomize Quotes // Images 135 if(jQuery(".home #banner-image").length > 0) { 136 /* 137 const phrases = []; 138 139 jQuery("#banner-image > div").each(function(index, value) { 140 if (jQuery(this).is('[class*="homequote"]')) { 141 phrases.push("homequote" + (index+1)); 142 } 143 }); 144 145 if(phrases.length > 0) { 146 const randomPhrase = Math.floor(Math.random() * phrases.length); 147 jQuery("#banner-image > div[class*='"+ phrases[randomPhrase] +"']").fadeIn(700); 148 jQuery("#banner-image > .elementor-widget-button, #banner-image .e-con").fadeIn(700); 149 //console.log(phrases[randomPhrase]); 150 } 151 */ 152 153 function getRandomIntInclusive(min, max) { 154 min = Math.ceil(min); 155 max = Math.floor(max); 156 return Math.floor(Math.random() * (max - min + 1)) + min; 157 } 158 159 const randomNumber1 = getRandomIntInclusive(0, 2); 160 const randomNumber2 = getRandomIntInclusive(3, 5); 161 //console.log("First random number: ", randomNumber1); 162 //console.log("Second random number: ", randomNumber2); 163 164 jQuery(".parallax-img").each(function(index, value) { 165 if(index === randomNumber1 || index === randomNumber2) { 166 jQuery("#parallax-img" + index).show(); 167 } else { 168 jQuery("#parallax-img" + index).remove(); 169 } 170 }); 171 } 172 173 //Landing Pages Video Gallery 174 jQuery("#collections-vid-gallery .epyt-gallery-thumb").on("click", function() { 175 let videoID = jQuery(this).find(".epyt-gallery-img").attr("style").split("/vi/").pop().split("/").shift(); 176 //console.log("The video ID is: " + videoID); 177 jQuery("#current-video").attr("src", "https://www.youtube.com/embed/" + videoID + "?autoplay=1"); 178 jQuery("#collections-vid-lightbox").fadeIn(300); 179 jQuery("body").addClass("video-is-active"); 180 181 return false; 182 }); 183 184 jQuery("#collections-close").on("click", function() { 185 jQuery("#collections-vid-lightbox").fadeOut(240); 186 jQuery("#current-video").attr("src", ""); 187 jQuery("body").removeClass("video-is-active"); 188 }); 189 190 jQuery("#collections-vid-gallery .epyt-gallery-rowbreak ~ .epyt-gallery-rowbreak").remove(); 191 jQuery("#collections-vid-gallery .epyt-gallery-thumb:nth-of-type(n+4)").remove(); 192 jQuery("#collections-vid-gallery .epyt-gallery > figure").remove(); 193 jQuery("#collections-vid-gallery .epyt-pagination").remove(); 194 195 //News Tile Link: No Featured Image 196 if(jQuery("#tiles-news").length > 0) { 197 jQuery("#tiles-news article").each(function() { 198 if (!jQuery(this).hasClass("has-post-thumbnail")) { 199 var newsLink = jQuery(this).find(".elementor-post__title a").attr("href"); 200 201 jQuery(this).prepend("<a href=" + newsLink + "></a>"); 202 } 203 }); 204 } 205 206 //Prepend Verbiage if the URL path contains 'tag' 207 if (!jQuery("body").hasClass("error404")) { 208 if (window.location.href.indexOf(".com/tag/") > -1) { 209 jQuery("#banner-standard .elementor-heading-title").prepend("Selected tag: "); 210 } 211 } 212 213 //Filter Component for Autos and Music Machines 214 jQuery("#machine-filter a").on("click", function() { 215 jQuery("#machine-filter .elementor-widget-button").removeClass("current"); 216 jQuery(this).closest(".elementor-widget-button").addClass("current"); 217 return false; 218 }); 219 220 //Resolving Elementor Bug v3.30.0 Until Patch is Available 221 if(jQuery("#machine-filter").length > 0) { 222 jQuery(".elementor-loop-container .e-loop-item").each(function() { 223 //grab the link 224 var loopLink = jQuery(this).find(".elementor-widget-theme-post-featured-image a").attr("href"); 225 226 //remove the link 227 jQuery(this).find(".elementor-widget-theme-post-featured-image a").contents().unwrap(); 228 jQuery(this).find(".elementor-heading-title a").contents().unwrap(); 229 230 //reapply the link 231 jQuery(this).find(".elementor-widget-theme-post-featured-image img").wrap("<a href='" + loopLink + "'>"); 232 jQuery(this).find(".elementor-heading-title").wrapInner("<a href='" + loopLink + "'>"); 233 }); 234 } 235 236 //Museum Script 237 //Full Screen Toggle 238 function btnChrome_onclick() { 239 document.documentElement.webkitRequestFullScreen(); 240 } 241 242 jQuery("#museum-fullscreen").on("click", function() { 243 btnChrome_onclick(); 244 return false;
245 }); 246 247 //Museum Script 248 //Enable/disable CF7 Button Element 249 jQuery("#museum-terms").click(function() { 250 if (jQuery(this).is(":checked")) { 251 jQuery("#museum-submit button").removeClass("disabled").removeAttr("tabindex"); 252 } else { 253 jQuery("#museum-submit button").addClass("disabled").attr("tabindex", -1); 254 } 255 }); 256 257 //Museum Script 258 //Disable blank option in country field 259 var blankSelect = jQuery(".wpcf7 select[name='Country']"); 260 jQuery("option[value='âââââââââ']", blankSelect).attr("disabled", true); 261 jQuery("option[value='âââââââââ']", jQuery(".wpcf7 select[name='carState']")).attr("disabled", true); 262 263 //Museum Script 264 //Default Values 265 var currNumber = ""; 266 var prevCustomer = false; 267 var selectedValue = ""; 268 var minorsField = ""; 269 var guestsField = ""; 270 var initialLoad = true; 271 272 const tierBronze = 15; 273 const tierSilver = 25; 274 const tierGold = 35; 275 const tierPlatinum = 50; 276 const tierDiamond = 100; 277 let yourTier; 278 279 function pageFormReset() { 280 prevCustomer = false; 281 currNumber = ""; 282 jQuery("#museum-reset").trigger("click"); 283 jQuery("#museum-step1").show(); 284 jQuery("#phone-entry, #museum-phone-duplicate").val(""); 285 jQuery("#museum-country").val(jQuery("#museum-country option:first").val()); 286 //jQuery("#museum-country").val("United States"); //WP-950 287 jQuery("#museum-referral").val(jQuery("#museum-referral option:first").val()); 288 jQuery("#museum-state").val(jQuery("#museum-state option:first").val()); 289 //jQuery("#museum-state").val("Michigan"); //WP-950 290 jQuery("#museum-province").val(jQuery("#museum-province option:first").val()); 291 jQuery("#customer-tier-note").hide(); 292 jQuery("#customer-name, #customer-visits").empty(); 293 jQuery("#museum-visits").val("1"); 294 jQuery("#validation-msg").removeClass("validation-error").empty(); 295 jQuery("#museum-submit button").addClass("disabled"); 296 } 297 298 jQuery("#museum-country").on("change", function() { 299 selectedValue = jQuery("#museum-country").val(); 300 jQuery("#museum-state").val(jQuery("#museum-state option:first").val()); 301 jQuery("#museum-province").val(jQuery("#museum-province option:first").val()); 302 jQuery(".museum-zip, .museum-postal").val(""); 303 }); 304 305 //Museum Script 306 //All Navigation Buttons //STEP 01 307 jQuery("#museum-step1 > div").on("click", function() { 308 jQuery("#museum-step1").hide(); 309 310 var index = jQuery(this).index(); 311 //console.log("index is " + index); 312 313 if(index == 0) { 314 if(initialLoad == true) { 315 initialLoad = false; 316 jQuery("#museum-country").val(jQuery("#museum-country option:first").val()); //WP-950 317 jQuery("#museum-state").val(jQuery("#museum-state option:first").val()); //WP-950 318 } 319 320 jQuery("#museum-step4").show(); 321 } else if(index == 1) { 322 prevCustomer = true; 323 jQuery("#museum-step2").show(); 324 } 325 }); 326 327 //Museum Script 328 //All Navigation Buttons //STEP 02 329 jQuery("#museum-step2 .museum-back").on("click", function() { 330 jQuery("#museum-reset").trigger("click"); 331 jQuery("#museum-step2").hide(); 332 pageFormReset(); 333 return false; 334 }); 335 336 //All Navigation Buttons //STEP 03 337 jQuery("#museum-step3 .museum-edit").on("click", function() { 338 jQuery("#museum-step3").hide(); 339 jQuery("#museum-step4").show(); 340 return false; 341 }); 342 343 //All Navigation Buttons //STEP 04 344 jQuery("#museum-step4 .museum-back").on("click", function() { 345 jQuery("#museum-step4").hide(); 346 347 if(prevCustomer == true) { 348 jQuery("#museum-step2").show(); 349 } else { 350 pageFormReset(); 351 } 352 353 return false; 354 }); 355 356 //Museum Script 357 //STEP 02 Return Visitor Validation 358 jQuery("#phone-grid > span").on("click", function() { 359 var newNumber = jQuery(this).data("numeral"); 360 361 if(newNumber == "Back") { 362 if(currNumber.length > 0) { 363 currNumber = currNumber.substring(0, currNumber.length - 1); 364 } 365 } else { 366 if(currNumber.length > 0 && currNumber.length < 15) { 367 currNumber = currNumber.concat(newNumber.toString()); 368 //console.log("number is " + currNumber); 369 } else if(currNumber.length < 1) { 370 currNumber = newNumber.toString(); 371 //console.log("number is " + currNumber); 372 } 373 } 374 375 //new string applied 376 document.getElementById("phone-entry").value = currNumber; 377 }); 378 379 //Museum Script 380 //Numbers Only for Phone Field 381 //Replicate Minors Field 382 var museumPhone = document.getElementById("museum-phone"); 383 var returnMinors = document.getElementById("return-minors"); 384 var returnGuests = document.getElementById("return-guests"); 385 386 if(museumPhone) { 387 museumPhone.addEventListener("blur", numbersOnly); 388 } 389 390 if(returnMinors) { 391 returnMinors.addEventListener("blur", replicateMinors); 392 } 393 394 if(returnGuests) { 395 returnGuests.addEventListener("blur", replicateGuests); 396 } 397 398 function numbersOnly() { 399 var phoneNumber = document.getElementById("museum-phone").value; 400 phoneNumber = phoneNumber.replace(/\D/g,''); 401 document.getElementById("museum-phone").value = phoneNumber; 402 } 403 404 function replicateMinors() { 405 minorsField = jQuery("#return-minors").val(); 406 //console.log("minors count is " + minorsField); 407 jQuery("#museum-minors").val(minorsField); 408 } 409 410 function replicateGuests() { 411 guestsField = jQuery("#return-guests").val(); 412 //console.log("guests count is " + guestsField); 413 jQuery("#museum-guests").val(guestsField); 414 } 415 416 /* testData = { hello: "" } 417 testData["hello"] = "testing"; 418 console.log("Test data: " + testData["hello"]); */ 419 420 //Museum Script 421 jQuery("#phone-submit").on("click", function() { 422
423 jQuery("#validation-msg").removeClass("validation-error").text("Getting information. Please wait..."); 424 425 jQuery("#customer-tier, #customer-tier-note").hide(); //FEBE-10135 426 jQuery("#customer-tier").removeClass("tier bronze silver gold platinum diamond"); //FEBE-10135 427 428 myData = { 429 sa_name: "", 430 sa_email: "", 431 sa_phone: "", 432 sa_country: "", 433 sa_state: "", 434 sa_zip: "", 435 sa_province: "", 436 sa_postal: "", 437 sa_referral: "", 438 sa_visits: "", 439 acct_found: false 440 }; 441 442 jQuery("#phone-submit").attr("disabled", true); 443 jQuery(".museum-back").addClass("disabled"); 444 445 //get number entry 446 var searchedNumber = document.getElementById("phone-entry").value; 447 myData["sa_phone"] = searchedNumber; 448 449 jQuery.ajax({ 450 type: "post", 451 url: window.location.origin + "/wp-admin/admin-ajax.php", 452 data: { 453 action: "customer_data", 454 ajax_data: myData 455 }, 456 complete: function(response) { 457 //console.log(response.responseJSON); 458 jQuery("#validation-msg").removeClass("validation-error").empty(); 459 jQuery("#phone-submit").attr("disabled", false); 460 jQuery(".museum-back").removeClass("disabled"); 461 462 if(response.responseJSON.acct_found == true) { 463 jQuery("#museum-step2").hide(); 464 jQuery("#museum-step3").show(); 465 jQuery("#museum-reset").trigger("click"); 466 467 jQuery("#museum-name").val(response.responseJSON.sa_name); 468 jQuery("#museum-email").val(response.responseJSON.sa_email); 469 jQuery("#museum-phone").val(myData["sa_phone"]); 470 jQuery("#museum-country").val(response.responseJSON.sa_country); 471 jQuery("#museum-state").val(response.responseJSON.sa_state); 472 jQuery("#museum-zip").val(response.responseJSON.sa_zip); 473 jQuery("#museum-province").val(response.responseJSON.sa_province); 474 jQuery("#museum-postal").val(response.responseJSON.sa_postal); 475 476 if(response.responseJSON.sa_referral == "TV/Ad") { 477 jQuery("#museum-referral").val("TV or Ad"); 478 } else { 479 jQuery("#museum-referral").val(response.responseJSON.sa_referral); 480 } 481 482 jQuery("#museum-visits").val(response.responseJSON.sa_visits); 483 jQuery("#museum-minors, #return-minors").val(0); 484 jQuery("#museum-guests, #return-guests").val(1); 485 jQuery("#museum-terms").prop( "checked", true ); 486 jQuery("#museum-submit button").removeClass("disabled"); 487 488 selectedValue = jQuery("#museum-country").val(); 489 490 //Step 3 fields 491 jQuery("#customer-name").empty().text(response.responseJSON.sa_name); 492 jQuery("#customer-visits").empty().text(response.responseJSON.sa_visits); 493 494 //Tier Check 495 yourTier = response.responseJSON.sa_visits; 496 //console.log("tier is: " + yourTier); 497 498 if(yourTier >= tierDiamond) { 499 //Diamond Tier 500 jQuery("#customer-tier").addClass("tier diamond").show().children(".ribbon").empty().text("Diamond Museum Visitor"); 501 } else if(yourTier >= tierPlatinum) { 502 //Platinum Tier 503 jQuery("#customer-tier").addClass("tier platinum").show().children(".ribbon").empty().text("Platinum Museum Visitor"); 504 505 //Close to Diamond 506 if ((tierDiamond - yourTier) == 1) { 507 jQuery("#customer-tier-note").show().empty().text("You will reach Diamond on your next visit!"); 508 } else if((tierDiamond - yourTier) <= 3) { 509 jQuery("#customer-tier-note").show().empty().text("You are " + (tierDiamond - yourTier) + " visits away from Diamond!"); 510 } 511 } else if(yourTier >= tierGold) { 512 //Gold Tier 513 jQuery("#customer-tier").addClass("tier gold").show().children(".ribbon").empty().text("Gold Museum Visitor"); 514 515 //Close to Platinum 516 if ((tierPlatinum - yourTier) == 1) { 517 jQuery("#customer-tier-note").show().empty().text("You will reach Platinum on your next visit!"); 518 } else if ((tierPlatinum - yourTier) <= 3) { 519 jQuery("#customer-tier-note").show().empty().text("You are " + (tierPlatinum - yourTier) + " visits away from Platinum!"); 520 } 521 } else if(yourTier >= tierSilver) { 522 //Silver Tier 523 jQuery("#customer-tier").addClass("tier silver").show().children(".ribbon").empty().text("Silver Museum Visitor"); 524 525 //Close to Gold 526 if ((tierGold - yourTier) == 1) { 527 jQuery("#customer-tier-note").show().empty().text("You will reach Gold on your next visit!"); 528 } else if ((tierGold - yourTier) <= 3) { 529 jQuery("#customer-tier-note").show().empty().text("You are " + (tierGold - yourTier) + " visits away from Gold!"); 530 } 531 } else if(yourTier >= tierBronze) { 532 //Bronze Tier 533 jQuery("#customer-tier").addClass("tier bronze").show().children(".ribbon").empty().text("Bronze Museum Visitor"); 534 535 //Close to Silver 536 if ((tierSilver - yourTier) == 1) { 537 jQuery("#customer-tier-note").show().empty().text("You will reach Silver on your next visit!"); 538 } else if ((tierSilver - yourTier) <= 3) { 539 jQuery("#customer-tier-note").show().empty().text("You are " + (tierSilver - yourTier) + " visits away from Silver!"); 540 } 541 } else { 542 //Close to Bronze 543 if ((tierBronze - yourTier) == 1) { 544 jQuery("#customer-tier-note").show().empty().text("You will reach Bronze on your next visit!"); 545 } else if ((tierBronze - yourTier) <= 3) { 546 jQuery("#customer-tier-note").show().empty().text("You are " + (tierBronze - yourTier) + " visits away from Bronze!"); 547 } 548 } 549 } else {
550 jQuery("#validation-msg").addClass("validation-error").text("Could not find customer information. Try again."); 551 } 552 }, 553 error: function() { 554 //console.log("something went wrong"); 555 } 556 }); 557 return false; 558 }); 559 560 //Museum Script 561 //Confirmation Page 562 jQuery("#museum-step4 button").on("click", function() { 563 jQuery("#museum-modal").fadeIn(120); 564 565 if(prevCustomer == false) { 566 jQuery(this).addClass("disabled"); 567 568 //jQuery Validate Before Submission 569 myData = { 570 sa_phone: "", 571 acct_found: false 572 }; 573 574 //check for duplicate 575 var customerNumber = document.getElementById("museum-phone").value; 576 //console.log("customer number: " + customerNumber); 577 myData["sa_phone"] = customerNumber; 578 579 jQuery.ajax({ 580 type: "post", 581 url: window.location.origin + "/wp-admin/admin-ajax.php", 582 data: { 583 action: "customer_data", 584 ajax_data: myData 585 }, 586 complete: function(response) { 587 //console.log(response.responseJSON); 588 if(response.responseJSON.acct_found == true) { 589 //this number is a duplicate 590 jQuery("#museum-phone-duplicate").val(customerNumber); 591 592 } else { 593 //this number is NOT a duplicate 594 jQuery("#museum-phone-duplicate").val(""); 595 } 596 597 jQuery("#museum-submit input[type='submit']").trigger("click"); 598 }, 599 error: function() { 600 alert("An error has occurred. Please resubmit."); 601 } 602 }); 603 604 //return false; 605 } else { 606 //console.log("return customer"); 607 jQuery("#museum-submit input[type='submit']").trigger("click"); 608 } 609 610 document.addEventListener("wpcf7invalid", function(event) { 611 jQuery("#museum-modal").hide(); 612 jQuery("#museum-step4 button").removeClass("disabled"); 613 }); 614 615 document.addEventListener("wpcf7mailsent", function(event) { 616 setTimeout(function() { 617 window.location.replace("/museum-visitor"); 618 }, 500); 619 620 }, false); 621 }); 622 623 //Museum Script 624 //Return Custom Submit 625 jQuery("#museum-return-submit input[type='submit']").on("click", function() { 626 jQuery("#museum-submit input[type='submit']").trigger("click"); 627 jQuery("#museum-modal").fadeIn(120); 628 jQuery("#return-minors, #return-guests, #museum-return-submit input[type='submit']").attr("disabled", true); 629 jQuery("#museum-edit > a").addClass("disabled"); 630 631 document.addEventListener("wpcf7invalid", function(event) { 632 jQuery("#museum-modal").hide(); 633 jQuery("#museum-step4 button").removeClass("disabled"); 634 }); 635 636 document.addEventListener("wpcf7mailsent", function(event) { 637 setTimeout(function() { 638 window.location.replace("/museum-visitor"); 639 }, 500); 640 641 }, false); 642 643 //console.log("loading"); 644 //return false; 645 }); 646 647 //Map Project 648 //Global Variables 649 var mapForm = jQuery("#map-form").length; 650 var mapPage = jQuery("#map-main").length; 651 652 //Map Page 653 //Custom Map Progress Bar 654 if(mapPage > 0) { 655 const slideshowMaps = document.querySelectorAll(".map-slide"); 656 const nextMapDelay = 20000; //20s 657 let currentMapCounter = 0; 658 let clickedMapCounter = 0; 659 var clickedMapControls = false; 660 var showMap; 661 var barInterval; 662 663 slideshowMaps[currentMapCounter].style.opacity = 1; 664 665 function nextMap() { 666 slideshowMaps[currentMapCounter].style.opacity = 0; 667 668 if(clickedMapControls == true) {
669 clickedMapControls = false; 670 currentMapCounter = clickedMapCounter; 671 } else { 672 currentMapCounter = (currentMapCounter + 1) % slideshowMaps.length; 673 } 674 675 slideshowMaps[currentMapCounter].style.opacity = 1; 676 jQuery(".entry-content .map-slide, .map-controlbar > div").removeClass("current"); 677 jQuery(".entry-content .map-slide:eq("+ currentMapCounter +"), .map-controlbar > div:eq("+ currentMapCounter+")").addClass("current"); 678 679 //RELOAD THE JSON FILE HERE in case there are new entries 680 //JSON Reload 681 682 clearInterval(barInterval); 683 resetProgressBar(); 684 beginningDate = new Date().getTime(); 685 progressBar(); 686 } 687 688 const interval = 200; 689 var progression = document.getElementById("progressbar"); 690 var beginningDate = new Date().getTime(); //time in milliseconds 691 692 function progressBar() { 693 resetProgressBar(); 694 barInterval = setInterval(frame, interval); 695 696 function frame() { 697 //console.log("time foundation: " + beginningDate); 698 var milisecondsFromBegin = new Date().getTime() - beginningDate; 699 var width = Math.floor(milisecondsFromBegin / nextMapDelay * 100); 700 progression.style.width = width + "%"; 701 702 if (width >= 100) { 703 nextMap(); 704 } 705 } 706 } 707 708 function resetProgressBar() { 709 progression.style.width = 0; 710 } 711 712 progressBar(); 713 714 //Slider Toggling 715 jQuery(".map-controlbar > div").on("click", function() { 716 jQuery(".map-controlbar > div").removeClass("current"); 717 jQuery(this).addClass("current"); 718 clickedMapCounter = jQuery(this).data("map-slide"); 719 clickedMapControls = true; 720 nextMap(); 721 }); 722 } 723 724 //Map Form 725 //Messaging Enhancements 726 if(mapForm > 0) { 727 document.addEventListener('wpcf7submit', function(event) { 728 if(mapForm > 0) { 729 jQuery(".wpcf7-response-output").show(); 730 jQuery(".wpcf7.js").addClass("processing").removeClass("completed"); 731 732 setTimeout(function() { 733 jQuery(".wpcf7.js").addClass("completed").removeClass("processing"); 734 jQuery(".wpcf7-response-output").fadeOut(720); 735 }, 2280); 736 } 737 }, false); 738 } 739 740 //Map Project 741 //From Map Data 742 var mapVisitorCount; 743 const timestamp = new Date().getTime(); 744 745 //Read the data length 746 //Popluate data for recent visitors 747 if(mapPage > 0) { 748 jQuery.getJSON("/wp-content/themes/twentytwentyfive-child/javascripts/visitors.json?t=" + timestamp, function(data) { 749 if (Array.isArray(data)) { // Check if the data itself is an array 750 751 mapVisitorCount = data.length; 752 753 if(mapVisitorCount == 0) { 754 jQuery("#map-messages").text("No recent visitors at this time."); 755 } else if(mapVisitorCount == 1) { 756 jQuery("#map-count").html("<strong>" + mapVisitorCount + "</strong> visit to Stahls Motors & Music Experience!"); 757 } else { 758 jQuery("#map-count").html("<strong>" + mapVisitorCount + "</strong> visits to Stahls Motors & Music Experience!"); 759 } 760 761 for (let i = data.length - 1; i >= (data.length - 5); i--) { 762 //const element = data[i]; 763 764 if(data[i].zip != "") { 765 jQuery("#map-messages ol").append("<li>" + data[i].location + ", " + data[i].zip + "</li>"); 766 } else { 767 jQuery("#map-messages ol").append("<li>" + data[i].location + "</li>"); 768 } 769 //console.log(data[i].location); // Process each element from last to first 770 } 771 jQuery("#map-messages").fadeIn(1000); 772 } 773 }).fail(function() { 774 //console.log( "error" ); 775 }).always(function() { 776 //console.log( "complete" ); 777 }); 778 } 779 780 //Map Project 781 //Refresh on XML Updates 782 if(mapPage > 0) { 783 let lastXmlContent = ''; 784 var firstTime = true; 785 786 function checkXmlForChanges() { 787 //console.log("CURRENT: " + lastXmlContent); 788 789 fetch('/wp-content/uploads/wp-google-maps/3markers.xml', { 790 headers: { 791 'Cache-Control': 'no-cache' 792 } 793 }) 794 .then(response => response.text()) 795 .then(xmlContent => { 796 if (xmlContent !== lastXmlContent) { 797 lastXmlContent = xmlContent; 798 // Option 1: Reload the entire page 799 //console.log("NEW: " + lastXmlContent); 800 if(firstTime != true) { 801 window.location.reload(); 802 } else { 803 firstTime = false;
804 } 805 } 806 }) 807 .catch(error => console.error('Error fetching XML:', error)); 808 } 809 810 // Check every 5 seconds (adjust as needed) 811 setInterval(checkXmlForChanges, 5000); 812 } 813 814 // Step Form Component //START 815 let policyStep = 0; 816 let policyBarWidth = 25; 817 let policyStepThree = false; 818 819 // Assign initial width 820 jQuery("#progress-meter").css("width", "25%"); 821 822 // Listen for clicks on the form navigation buttons 823 document.addEventListener('click', function (event) { 824 // Target buttons commonly used by CF7 multi-step extensions 825 if (event.target.matches(".cf7mls_back")) { 826 827 // Optional delay to allow the multi-step plugin to swap the visible steps first 828 setTimeout(function() { 829 window.scrollTo({ 830 top: 0, 831 behavior: 'smooth' // Smooth scroll effect 832 }); 833 }, 300); // 100 milliseconds delay 834 } 835 }); 836 837 838 // The function you want to call 839 function myStepsFunction(element) { 840 //console.log('Class added to:', element); 841 policyStep = element.getAttribute("data-cf7mls-order"); 842 //console.log("We're currently on 'step' " + policyStep); 843 844 //hide button if beyond step 01 845 if(policyStep > 0) { 846 jQuery("#car-checkout button.first").attr("disabled", false); 847 } 848 849 if (policyStep == 2) { 850 if (policyStepThree == false) { 851 jQuery("#car-checkout button.first").trigger("click"); 852 policyStepThree = true; 853 } 854 } 855 856 //removes and reapplies class 857 jQuery("ul.steps li").removeClass("step-reached"); 858 859 for (let i = 0; i <= policyStep; i++) { 860 jQuery("ul.steps li:eq("+ i +")").addClass("step-reached"); 861 } 862 863 //progress meter update 864 policyBarWidth = (25 * (1 + Number(policyStep))); 865 //console.log("new value is " + policyBarWidth); 866 jQuery("#progress-meter").css("width", policyBarWidth + "%"); 867 } 868 869 // Invalid 870 document.addEventListener("wpcf7invalid", function(event) { 871 //jQuery("#privacy-submit-btn").removeClass("submitting"); 872 }); 873 874 // Valid 875 if(jQuery("#orphan-container").length > 0) { 876 document.addEventListener("wpcf7mailsent", function(event) { 877 //add complete class 878 jQuery("#progress").addClass("steps-complete"); 879 880 //add final step 881 jQuery("ul.steps li:eq(3)").addClass("step-reached"); 882 883 //full width 884 jQuery("#progress-meter").css("width", "100%"); 885 886 //show hide 887 jQuery("#orphan-container, #orphan-header1, #orphan-header2, #orphan-header3").hide(); 888 jQuery("#orphan-confirmation").show(); 889 890 //scroll to top 891 setTimeout(function() { 892 window.scrollTo({ 893 top: 0, 894 behavior: 'smooth' // Smooth scroll effect 895 }); 896 }, 300); 897 }, false); 898 } 899 900 // target class to watch for 901 const targetClass = 'cf7mls_current_fs'; 902 903 // Create the observer 904 const observer = new MutationObserver((mutations) => { 905 for (const mutation of mutations) { 906 if (mutation.attributeName === 'class') { 907 const element = mutation.target; 908 if (element.classList.contains(targetClass)) { 909 myStepsFunction(element); 910 break; 911 } 912 } 913 } 914 }); 915 916 // Start observing each div in your series 917 const divs = document.querySelectorAll('.fieldset-cf7mls'); 918 divs.forEach((div) => { 919 observer.observe(div, { attributes: true }); 920 }); 921 922 // Disable button for Terms and Conditions 923 jQuery("#cf7mls-next-btn-cf7mls_step-2").addClass("btn-disabled"); 924 925 // Toggle button status from the above class 926 if(jQuery("#car-terms").length > 0) { 927 document.querySelector("#car-terms").addEventListener("change", function() { 928 const targetElement = document.querySelector("#cf7mls-next-btn-cf7mls_step-2"); 929 930 if (this.checked) { 931 targetElement.classList.remove("btn-disabled"); 932 } else { 933 targetElement.classList.add("btn-disabled"); 934 } 935 }); 936 } 937 938 // Submit Trigger 939 jQuery("#orphan-submit button").on("click", function() { 940 jQuery("#car-checkout button.second").trigger("click"); 941 }); 942 943 // Step Form Component //END 944}
944);
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.