PageSourceSearch

https://www.stahlsauto.com/wp-content/themes/twentytwentyfive-child/javascripts/main.js?ver=1789142431

js stahlsauto.com collected 2026-09-24 21:27:32 UTC 37,341 bytes, 944 lines download raw bytes

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&#047;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 &amp; Music Experience!");
757                } else {
758                    jQuery("#map-count").html("<strong>" + mapVisitorCount + "</strong> visits to Stahls Motors &amp; 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.