PageSourceSearch

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

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

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.