PageSourceSearch

https://www.nhra.com/sites/default/files/js/js__o6Fo_7CAPutdUS7lOP…N_Q_CNoF6vn8qlnvB58KpNCldmc3mGMsENbNV-Jv_up

js nhra.com collected 2026-09-24 09:17:22 UTC 31,830 bytes, 317 lines download raw bytes

1/* @license GNU-GPL-2.0-or-later https://raw.githubusercontent.com/RobLoach/jquery-once/2.2.3/LICENSE.md */
2/*!
3 * jQuery Once v2.2.3 - http://github.com/robloach/jquery-once
4 * @license MIT, GPL-2.0
5 *   http://opensource.org/licenses/MIT
6 *   http://opensource.org/licenses/GPL-2.0
7 */
8(function(e){"use strict";if(typeof exports==="object"&&typeof exports.nodeName!=="string"){e(require("jquery"))}else if(typeof define==="function"&&define.amd){define(["jquery"],e)}else{e(jQuery)}})(function(t){"use strict";var r=function(e){e=e||"once";if(typeof e!=="string"){throw new TypeError("The jQuery Once id parameter must be a string")}return e};t.fn.once=function(e){var n="jquery-once-"+r(e);return this.filter(function(){return t(this).data(n)!==true}).data(n,true)};t.fn.removeOnce=function(e){return this.findOnce(e).removeData("jquery-once-"+r(e))};t.fn.findOnce=function(e){var n="jquery-once-"+r(e);return this.filter(function(){return t(this).data(n)===true})}});
9
10/* @license GPL-2.0-or-later https://www.drupal.org/licensing/faq */
11(function(){const settingsElement=document.querySelector('head > script[type="application/json"][data-drupal-selector="drupal-settings-json"], body > script[type="application/json"][data-drupal-selector="drupal-settings-json"]');window.drupalSettings={};if(settingsElement!==null)window.drupalSettings=JSON.parse(settingsElement.textContent);})();;
12window.Drupal={behaviors:{},locale:{}};(function(Drupal,drupalSettings,drupalTranslations,console,Proxy,Reflect){Drupal.throwError=function(error){setTimeout(()=>{throw error;},0);};Drupal.attachBehaviors=function(context,settings){context=context||document;settings=settings||drupalSettings;const behaviors=Drupal.behaviors;Object.keys(behaviors||{}).forEach((i)=>{if(typeof behaviors[i].attach==='function')try{behaviors[i].attach(context,settings);}catch(e){Drupal.throwError(e);}});};Drupal.detachBehaviors=function(context,settings,trigger){context=context||document;settings=settings||drupalSettings;trigger=trigger||'unload';const behaviors=Drupal.behaviors;Object.keys(behaviors||{}).forEach((i)=>{if(typeof behaviors[i].detach==='function')try{behaviors[i].detach(context,settings,trigger);}catch(e){Drupal.throwError(e);}});};Drupal.checkPlain=function(str){str=str.toString().replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;').replace(/"/g,'&quot;').replace(/'/g,'&#39;');return str;};Drupal.formatString=function(str,args){const processedArgs={};Object.keys(args||{}).forEach((key)=>{switch(key.charAt(0)){case '@':processedArgs[key]=Drupal.checkPlain(args[key]);break;case '!':processedArgs[key]=args[key];break;default:processedArgs[key]=Drupal.theme('placeholder',args[key]);break;}});return Drupal.stringReplace(str,processedArgs,null);};Drupal.stringReplace=function(str,args,keys){if(str.length===0)return str;if(!Array.isArray(keys)){keys=Object.keys(args||{});keys.sort((a,b)=>a.length-b.length);}if(keys.length===0)return str;const key=keys.pop();const fragments=str.split(key);if(keys.length){for(let i=0;i<fragments.length;i++)fragments[i]=Drupal.stringReplace(fragments[i],args,keys.slice(0));}return fragments.join(args[key]);};Drupal.t=function(str,args,options){options=options||{};options.context=options.context||'';if(drupalTranslations?.strings?.[options.context]?.[str])str=drupalTranslations.strings[options.context][str];if(args)str=Drupal.formatString(str,args);return str;};Drupal.url=function(path){return drupalSettings.path.baseUrl+drupalSettings.path.pathPrefix+path;};Drupal.url.toAbsolute=function(url){const urlParsingNode=document.createElement('a');urlParsingNode.setAttribute('href',url);return urlParsingNode.href;};Drupal.url.isLocal=function(url){let absoluteUrl=Drupal.url.toAbsolute(url);let {protocol}=window.location;if(protocol==='http:'&&absoluteUrl.startsWith('https:'))protocol='https:';let baseUrl=`${protocol}//${window.location.host}${drupalSettings.path.baseUrl.slice(0,-1)}`;try{absoluteUrl=decodeURIComponent(absoluteUrl);}catch(e){}try{baseUrl=decodeURIComponent(baseUrl);}catch(e){}return absoluteUrl===baseUrl||absoluteUrl.startsWith(`${baseUrl}/`);};Drupal.formatPlural=function(count,singular,plural,args,options){args=args||{};args['@count']=count;const pluralDelimiter=drupalSettings.pluralDelimiter;const translations=Drupal.t(singular+pluralDelimiter+plural,args,options).split(pluralDelimiter);let index=0;
12if(drupalTranslations?.pluralFormula)index=count in drupalTranslations.pluralFormula?drupalTranslations.pluralFormula[count]:drupalTranslations.pluralFormula.default;else{if(args['@count']!==1)index=1;}return translations[index];};Drupal.encodePath=function(item){return window.encodeURIComponent(item).replace(/%2F/g,'/');};Drupal.deprecationError=({message})=>{if(drupalSettings.suppressDeprecationErrors===false&&console?.warn)console.warn(`[Deprecation] ${message}`);};Drupal.deprecatedProperty=({target,deprecatedProperty,message})=>{if(!Proxy||!Reflect)return target;return new Proxy(target,{get:(target,key,...rest)=>{if(key===deprecatedProperty)Drupal.deprecationError({message});return Reflect.get(target,key,...rest);}});};Drupal.theme=function(func,...args){if(typeof Drupal.theme?.[func]==='function')return Drupal.theme[func](...args);Drupal.throwError(new TypeError(`Drupal.theme.${func} must be function type.`));};Drupal.theme.placeholder=function(str){return `<em class="placeholder">${Drupal.checkPlain(str)}</em>`;};Drupal.elementIsVisible=function(elem){return !!(elem.offsetWidth||elem.offsetHeight||elem.getClientRects().length);};Drupal.elementIsHidden=function(elem){return !Drupal.elementIsVisible(elem);};})(Drupal,window.drupalSettings,window.drupalTranslations,window.console,window.Proxy,window.Reflect);;
13if(window.jQuery)jQuery.noConflict();document.documentElement.className+=' js';(function(Drupal,drupalSettings){const domReady=(callback)=>{const listener=()=>{callback();document.removeEventListener('DOMContentLoaded',listener);};if(document.readyState!=='loading')setTimeout(callback,0);else document.addEventListener('DOMContentLoaded',listener);};domReady(()=>{Drupal.attachBehaviors(document,drupalSettings);});})(Drupal,window.drupalSettings);;
14jQuery(document).ready(function($){const currentPath=window.location.pathname.toLowerCase().replace(/\/$/,"");if(currentPath!=="/nhra")return;const schedulePageUrl="/schedule/2026";const today=new Date();today.setHours(0,0,0,0);const eventBackgrounds={"Gainesville-Mar":"/sites/default/files/2026-02/GFL_Historical%20%281%29.jpg","Chandler-Mar":"/sites/default/files/2026-02/PA1_Historical.jpg","Pomona-Apr":"/sites/default/files/2026-02/PC1_Historical.jpg","Concord-Apr":"/sites/default/files/2026-02/CN1_Historic.jpg","Adel-May":"/sites/default/files/2026-02/VG1_Historic.jpg","Joliet-May":"/sites/default/files/2026-02/CI1_Historic2.jpg","Mechanicsville-May":"/sites/default/files/2026-02/MM1_Historic.jpg","Epping-Jun":"/sites/default/files/2026-02/NH1_Historic.jpg","Bristol-Jun":"/sites/default/files/2026-02/BT1_Historical.jpg","Norwalk-Jun":"/sites/default/files/2026-02/N01_%20Historic.jpg","Sonoma-Jul":"/sites/default/files/2026-02/SC1_Historic.jpg","Kent-Jul":"/sites/default/files/2026-02/SW1_Historical%20%281%29.jpg","Brainerd-Aug":"/sites/default/files/2026-02/BM1_Historical.jpg","Indianapolis-Sep":"/sites/default/files/2026-02/II1_Historic.jpg","Martin-Sep":"/sites/default/files/2026-02/GM1_Historic.jpg","Rockingham-Sep":"/sites/default/files/2026-02/RN1_Historic.jpg","Madison-Oct":"/sites/default/files/2026-06/MidwestNats26.png","Ennis-Oct":"/sites/default/files/2026-02/DTX_Historic.jpg","Las Vegas-Oct":"/sites/default/files/2026-02/LV1_Historic.jpg","Pomona-Nov":"/sites/default/files/2026-02/PC2_Historical.jpg"};if(!$('.programmatic-slider').length)return;let countdownInterval=null;function parseScheduleDate(dateString){if(!dateString)return new Date(NaN);var normalized=dateString.replace(/([+-]\d{2})(\d{2})$/,'$1:$2');return new Date(normalized);}function deriveEndDateFromHeadingText(startDateObj,headingText){if(!headingText||!startDateObj||isNaN(startDateObj.getTime()))return null;var match=headingText.match(/([A-Za-z]{3,})\.?\s+(\d{1,2})/);if(!match)return null;var monthNames=['jan','feb','mar','apr','may','jun','jul','aug','sep','oct','nov','dec'];var monthIndex=monthNames.indexOf(match[1].toLowerCase().substring(0,3));if(monthIndex===-1)return null;var day=parseInt(match[2],10);var year=startDateObj.getFullYear();if(monthIndex<startDateObj.getMonth())year+=1;var derived=new Date(year,monthIndex,day,23,59,59,999);return isNaN(derived.getTime())?null:derived;}const styleOverrides=`
15        <style>
16            .nhra-slider-wrapper {
17                width: 100% !important;
18                max-width: 100% !important;
19                padding: 25px 0 !important;
20                box-sizing: border-box !important;
21                position: relative !important;
22                margin: 0 !important;
23            }
24            .slider-container-col {
25                width: 88% !important;
26                max-width: 1440px !important;
27                margin: 0 auto !important;
28                position: relative !important;
29                box-sizing: border-box !important;
30                padding: 0 45px !important;
31            }
32            .myDynamicSwiper {
33                width: 100% !important;
34                overflow: hidden !important;
35            }
36
37            /* Equal Height Equalizer Structure */
38            .myDynamicSwiper .swiper-wrapper {
39                display: flex !important;
40                align-items: stretch !important;
41            }
42            .myDynamicSwiper .swiper-slide {
43                height: auto !important;
44                display: flex !important;
45            }
46
47            /* Main Card Frame Design */
48            .race-card {
49                background-color: #1a1a1a !important;
50                border-radius: 8px !important;
51                overflow: hidden !important;
52                border: 1px solid #2d2d2d !important;
53                box-sizing: border-box !important;
54                height: 100% !important;
55                width: 100% !important;
56                display: flex !important;
57                flex-direction: column !important;
58                transition: border-color 0.3s !important;
59                min-height: 520px !important;
60            }
61            .swiper-slide-active .race-card {
62                border-color: #e31837 !important;
63                box-shadow: 0 0 15px rgba(227, 24, 55, 0.2) !important;
64            }
65
66            .race-card .race-image-container {
67                display: flex !important;
68                align-items: center !important;
69                justify-content: center !important;
70                height: 160px !important;
71                flex-shrink: 0 !important;
72                position: relative !important;
73                background-repeat: no-repeat !important;
74                background-size: cover !important;
75                background-position: center !important;
76            }
77            .race-card .race-image {
78                max-width: 85% !important;
79                max-height: 85% !important;
80                object-fit: contain !important;
81                z-index: 2 !important;
82            }
83
84            .race-card .race-content {
85                padding: 20px !important;
86                display: flex !important;
87                flex-direction: column !important;
88                flex-grow: 1 !important;
89                justify-content: space-between !important;
90                position: relative !important;
91            }
92
93            .race-card .race-text-wrapper {
94                min-height: 120px !important;
95                display: flex !important;
96                flex-direction: column !important;
97            }
98            .race-card .race-meta {
99                font-size: 12px !important;
100                color: #ffb300 !important;
101                font-weight: bold !important;
102                text-transform: uppercase !important;
103                margin-bottom: 6px !important;
104            }
105            .race-card .race-title {
106                font-size: 14px !important;
107                font-weight: 700 !important;
108                line-height: 1.3 !important;
109                color: #ffffff !important;
110                margin: 0 0 8px 0 !important;
111                min-height: 36px !important;
112            }
113            .race-card .race-location, .race-card .race-city {
114                font-size: 12px !important;
115                color: #cccccc !important;
116                margin: 0 0 4px 0 !important;
117                white-space: nowrap !important;
118                overflow: hidden !important;
119                text-overflow: ellipsis !important;
120            }
121
122            /* RESERVED MIDDLE SLOT (Prevents Card Height Jumping) */
123            .race-card .middle-slot-wrapper {
124                height: 70px !important;
125                margin: 15px 0 !important;
126                display: flex !important;
127                align-items: center !important;
128                justify-content: center !important;
129                width: 100% !important;
130                box-sizing: border-box !important;
131            }
132
133            /* COUNTDOWN BLOCK DESIGN
134               Base state is hidden. It becomes visible only when:
135                 1) its slide is the active slide, AND
136                 2) it has NOT been explicitly marked "countdown-hidden"
137                    by the ticker (i.e. the countdown has not reached zero). */
138            .race-card .card-countdown-wrapper {
139                background: #111111 !important;
140                border: 1px solid #333333 !important;
141                border-radius: 6px !important;
142                padding: 10px 8px !important;
143                display: flex !important;
144                justify-content: center !important;
145                align-items: center !important;
146                gap: 6px !important;
147                width: 100% !important;
148                height: 100% !important;
149                box-sizing: border-box !important;
150                visibility: hidden;
151                opacity: 0;
152                transition: opacity 0.3s ease;
153            }
154
155            .swiper-slide-active .card-countdown-wrapper:not(.countdown-hidden
155) {
156                visibility: visible !important;
157                opacity: 1 !important;
158            }
159
160            /* Explicit "countdown reached zero" hide state, driven by JS
161               rather than inferred from other attributes. Kept as its own
162               rule (instead of folding into the base state) so the reason
163               for hiding is unambiguous and easy to target/debug. */
164            .race-card .card-countdown-wrapper.countdown-hidden {
165                visibility: hidden !important;
166                opacity: 0 !important;
167                pointer-events: none !important;
168                display: none !important;
169            }
170
171            /* LIVE ACTIONS PANEL (Live Timing & NHRA.tv) */
172            .race-card .card-live-actions {
173                display: none !important;
174                gap: 8px !important;
175                width: 100% !important;
176                height: 100% !important;
177                align-items: center !important;
178                box-sizing: border-box !important;
179            }
180            .event-is-live .card-live-actions {
181                display: flex !important;
182            }
183            .card-live-actions .btn-live-timing { background-color: #ffb300 !important; color: #0c1426 !important; }
184            .card-live-actions .btn-live-timing:hover { background-color: #e5a100 !important; }
185            .card-live-actions .btn-tv { background-color: #0288d1 !important; color: #ffffff !important; }
186            .card-live-actions .btn-tv:hover { background-color: #01579b !important; }
187
188            /* GLOBAL BOTTOM ACTIONS PANEL */
189            .nhra-slider-wrapper .race-actions {
190                display: flex !important;
191                flex-direction: column !important;
192                gap: 8px !important;
193                margin-top: auto !important;
194                width: 100% !important;
195            }
196            .nhra-slider-wrapper .action-sub-row {
197                display: flex !important;
198                gap: 8px !important;
199                width: 100% !important;
200            }
201            .nhra-slider-wrapper .nhra-btn {
202                text-align: center !important;
203                font-size: 12px !important;
204                font-weight: bold !important;
205                text-transform: uppercase !important;
206                padding: 10px 4px !important;
207                border-radius: 4px !important;
208                text-decoration: none !important;
209                display: inline-block !important;
210                box-sizing: border-box !important;
211            }
212
213            .nhra-slider-wrapper .btn-hero { width: 100% !important; }
214            .action-sub-row .nhra-btn { flex: 1 !important; }
215            .card-live-actions .nhra-btn { flex: 1 !important; }
216
217            .nhra-slider-wrapper .btn-tickets { background-color: #e31837 !important; color: #ffffff !important; }
218            .nhra-slider-wrapper .btn-tickets:hover { background-color: #b7122a !important; }
219            .nhra-slider-wrapper .btn-results { background-color: #e31837 !important; color: #ffffff !important; }
220            .nhra-slider-wrapper .btn-results:hover { background-color: #b7122a !important; }
221            .nhra-slider-wrapper .btn-details { background-color: #333333 !important; color: #ffffff !important; border: 1px solid #444444 !important; }
222            .nhra-slider-wrapper .btn-details:hover { background-color: #444444 !important; }
223            .nhra-slider-wrapper .btn-lodging { background-color: #2e7d32 !important; color: #ffffff !important; }
224            .nhra-slider-wrapper .btn-lodging:hover { background-color: #1b5e20 !important; }
225
226            /* Arrow Controls Configuration */
227            .nhra-prev-btn, .nhra-next-btn {
228                position: absolute !important;
229                top: 50% !important;
230                transform: translateY(-50%) !important;
231                width: 44px !important;
232                height: 44px !important;
233                background: #e31837 !important;
234                border-radius: 50% !important;
235                z-index: 10 !important;
236                cursor: pointer !important;
237                display: flex !important;
238                align-items: center !important;
239                justify-content: center !important;
240                color: #ffffff !important;
241                box-shadow: 0 4px 10px rgba(0,0,0,0.4) !important;
242                border: none !important;
243            }
244            .nhra-prev-btn:hover, .nhra-next-btn:hover { background: #b7122a !important; }
245            .nhra-prev-btn { left: -12px !important; }
246            .nhra-next-btn { right: -12px !important; }
247            .nhra-prev-btn::after { content: '‹' !important; font-size: 28px !important; font-weight: 700 !important; line-height: 1; margin-right: 2px; }
248            .nhra-next-btn::after { content: '›' !important; font-size: 28px !important; font-weight: 700 !important; line-height: 1; margin-left: 2px; }
249            .swiper-button-disabled { opacity: 0.15 !important; cursor: default !important; background: #333333 !important; }
250
251            @media(max-width: 768px) {
252                .slider-container-col {
253                    width: 100% !important;
254                    padding: 0 40px !important;
255                }
256                .nhra-prev-btn { left: 0px !important; }
257                .nhra-next-btn { right: 0px !important; }
258            }
259        </style>
260    `;$('head').append(styleOverrides);const cleanSliderLayoutMarkup=`
261        <div class="nhra-slider-wrapper">
262            <div class="slider-container-col">
263                <div class="nhra-prev-btn" id="dynamic-prev"></div>
264                <div class="nhra-next-btn" id="dynamic-next"></div>
265                <div class="swiper myDynamicSwiper">
266                    <div class="swiper-wrapper"></div>
267                </div>
268            </div>
269        </div>
270    `;$('.programmatic-slider').html(cleanSliderLayoutMarkup);$.get(schedulePageUrl,function(htmlData){let liveEvents=[];const $parsedHtml=$(htmlData);$parsedHtml.find('.accordion--schedule .views-row').each(function(){const $scheduleItem=$(this).find('.schedule');
270if(!$scheduleItem.length)return;const monthText=$scheduleItem.find('.schedule__item--date [property="startDate"]').text().replace(/[\r\n\t ]+/g,' ').trim();const daysText=$scheduleItem.find('.schedule__item--date .schedule__heading--major').text().replace(/[\r\n\t ]+/g,' ').replace(/\s+/g,' ').trim();const displayDate=monthText+" "+daysText;let extractedMonthToken=monthText.substring(0,3);if(extractedMonthToken.toLowerCase()==="sep")extractedMonthToken="Sep";const cleanTitle=$scheduleItem.find('.schedule__item--info [property="name"] a').text().trim();const cleanTrack=$scheduleItem.find('.schedule__location--name').text().trim();const cityText=$scheduleItem.find('[property="addressLocality"]').text().trim();const stateText=$scheduleItem.find('[property="addressRegion"]').text().trim();const generatedCityMonthKey=cityText+"-"+extractedMonthToken;const defaultDetailsUrl=$scheduleItem.find('.schedule__item--logo').attr('href')||"";const defaultResultsUrl=$scheduleItem.find('a:contains("Results")').attr('href')||"/results/2026/nhra-mission-foods-drag-racing-series";let computedDetailsTargetUrl=defaultDetailsUrl;const scrapedEventGuideUrl=$scheduleItem.find('a:contains("Event Guide")').attr('href');if(scrapedEventGuideUrl&&scrapedEventGuideUrl!=="#")computedDetailsTargetUrl=scrapedEventGuideUrl;let dynamicLiveTimingUrl="/results/2026/nhra-mission-foods-drag-racing-series";$scheduleItem.find('.button, a').each(function(){let btnText=$(this).text().toLowerCase();if(btnText.indexOf("live timing")!==-1){let verifiedHref=$(this).attr('href');if(verifiedHref&&verifiedHref!=="#"){dynamicLiveTimingUrl=verifiedHref;return false;}}});let dynamicLodgingUrl="";$scheduleItem.find('.button, a').each(function(){let btnText=$(this).text().toLowerCase();if(btnText.indexOf("lodging")!==-1){let verifiedLodgingHref=$(this).attr('href');if(verifiedLodgingHref&&verifiedLodgingHref!=="#"){dynamicLodgingUrl=verifiedLodgingHref;return false;}}});let startTimestamp=parseScheduleDate($scheduleItem.find('[property="startDate"]').attr('content')).getTime();let parsedEndDate=parseScheduleDate($scheduleItem.find('[property="endDate"]').attr('content'));if(isNaN(parsedEndDate.getTime())){let startDateObj=parseScheduleDate($scheduleItem.find('[property="startDate"]').attr('content'));let derivedEnd=deriveEndDateFromHeadingText(startDateObj,daysText);if(derivedEnd){parsedEndDate=derivedEnd;console.warn('[NHRA Slider] endDate content attribute was empty for "'+(cleanTitle||'(untitled event)')+'" — derived end date from heading text instead:',derivedEnd);}}let endTimestamp=parsedEndDate.getTime();parsedEndDate.setHours(23,59,59,999);let finalEndTimestamp=parsedEndDate.getTime();if(isNaN(startTimestamp)||isNaN(finalEndTimestamp)){console.warn('[NHRA Slider] Skipping event with unparseable date:',cleanTitle||'(untitled event)');return;}liveEvents.push({dateText:displayDate,title:cleanTitle,track:cleanTrack,cityState:cityText+", "+stateText,cityMonthSignature:generatedCityMonthKey,logo:$scheduleItem.find('.schedule__item--logo img').attr('src'),detailsUrl:computedDetailsTargetUrl,ticketsUrl:$scheduleItem.find('a:contains("Get Tickets")').attr('href')||"#",resultsUrl:defaultResultsUrl,liveTimingUrl:dynamicLiveTimingUrl,lodgingUrl:dynamicLodgingUrl,startMs:startTimestamp,endMs:finalEndTimestamp,dateObj:parse
270ScheduleDate($scheduleItem.find('[property="startDate"]').attr('content'))});});if(liveEvents.length===0)return;liveEvents.sort((a,b)=>a.dateObj-b.dateObj);let upcomingEvents=liveEvents.filter((ev)=>ev.endMs>=new Date().getTime());let primaryHeroEvent=upcomingEvents.length>0?upcomingEvents[0]:liveEvents[liveEvents.length-1];let anchorSlideIndex=liveEvents.indexOf(primaryHeroEvent);if(anchorSlideIndex<0)anchorSlideIndex=0;const $swiperWrapper=$('.myDynamicSwiper .swiper-wrapper');liveEvents.forEach(function(ev){let nowMs=new Date().getTime();let isPastEvent=nowMs>ev.endMs;let actionButtonsMarkup='';if(isPastEvent)actionButtonsMarkup=`
271                    <div class="action-sub-row">
272                        <a class="nhra-btn btn-results" href="${ev.resultsUrl}">Results</a>
273                        <a class="nhra-btn btn-details" href="${ev.detailsUrl}" target="_blank">Details</a>
274                    </div>
275                `;else{let lodgingBtnMarkup='';if(ev.lodgingUrl!=="")lodgingBtnMarkup=`<a class="nhra-btn btn-lodging" href="${ev.lodgingUrl}">Lodging</a>`;actionButtonsMarkup=`
276                    <a class="nhra-btn btn-tickets btn-hero" href="${ev.ticketsUrl}" target="_blank">Get Tickets</a>
277                    <div class="action-sub-row">
278                        <a class="nhra-btn btn-details" href="${ev.detailsUrl}" target="_blank">Details</a>
279                        ${lodgingBtnMarkup}
280                    </div>
281                `;}let stringA=ev.cityMonthSignature.toLowerCase().replace(/[^a-z0-9]/g,'');let computedStyleAttr='';for(const key in eventBackgrounds){let stringB=key.toLowerCase().replace(/[^a-z0-9]/g,'');if(stringA.indexOf(stringB)!==-1||stringB.indexOf(stringA)!==-1){computedStyleAttr=`style="background-image: url('${eventBackgrounds[key]}') !important;"`;break;}}
281let slideMarkup=`
282                <div class="swiper-slide" data-start="${ev.startMs}" data-end="${ev.endMs}">
283                    <div class="race-card">
284                        <div class="race-image-container" ${computedStyleAttr}>
285                            <img class="race-image" src="${ev.logo}" alt="${ev.title}">
286                        </div>
287                        <div class="race-content">
288                            <div class="race-text-wrapper">
289                                <div class="race-meta"><span>${ev.dateText}</span></div>
290                                <h3 class="race-title">${ev.title}</h3>
291                                <p class="race-location">📍 ${ev.track}</p>
292                                <p class="race-city">${ev.cityState}</p>
293                            </div>
294
295                            <div class="middle-slot-wrapper">
296                                <div class="card-countdown-wrapper">
297                                    <div class="h-time-block"><span class="h-time-val class-d">00</span><span class="h-time-label">Days</span></div>
298                                    <div class="h-time-block"><span class="h-time-val class-h">00</span><span class="h-time-label">Hrs</span></div>
299                                    <div class="h-time-block"><span class="h-time-val class-m">00</span><span class="h-time-label">Min</span></div>
300                                    <div class="h-time-block"><span class="h-time-val class-s">00</span><span class="h-time-label">Sec</span></div>
301                                </div>
302
303                                <div class="card-live-actions">
304                                    <a class="nhra-btn btn-live-timing" href="${ev.liveTimingUrl}">Live Timing</a>
305                                    <a class="nhra-btn btn-tv" href="https://nhra.tv" target="_blank">NHRA.tv</a>
306                                </div>
307                            </div>
308
309                            <div class="race-actions">
310                                ${actionButtonsMarkup}
311                            </div>
312                        </div>
313                    </div>
314                </div>
315            `;$swiperWrapper.append(slideMarkup);});if(typeof Swiper!=='undefined')new Swiper('.myDynamicSwiper',{slidesPerView:4,spaceBetween:20,initialSlide:anchorSlideIndex,navigation:{nextEl:'#dynamic-next',prevEl:'#dynamic-prev'},breakpoints:{0:{slidesPerView:1},640:{slidesPerView:2},1024:{slidesPerView:3},1366:{slidesPerView:4}},on:{init:function(){handleTimelineCountdownSwitch(this);},slideChange:function(){handleTimelineCountdownSwitch(this);}}});});function handleTimelineCountdownSwitch(swiper){if(countdownInterval)clearInterval(countdownInterval);function updateCardClock(){let currentTimestamp=new Date().getTime();swiper.slides.forEach(function(slideElement){let $slideNode=$(slideElement);let $countdownWrapper=$slideNode.find('.card-countdown-wrapper');let startMs=parseInt($slideNode.attr('data-start'),10);let endMs=parseInt($slideNode.attr('data-end'),10);if(isNaN(startMs)||isNaN(endMs))return;let diff=startMs-currentTimestamp;if(currentTimestamp>=startMs&&currentTimestamp<=endMs){$slideNode.addClass('event-is-live');$slideNode.attr('data-is-upcoming','false');$countdownWrapper.addClass('countdown-hidden');}else if(currentTimestamp>endMs){$slideNode.removeClass('event-is-live');$slideNode.attr('data-is-upcoming','false');$countdownWrapper.addClass('countdown-hidden');}else if(diff<=0){$slideNode.removeClass('event-is-live');$slideNode.attr('data-is-upcoming','false');$countdownWrapper.addClass('countdown-hidden');}else{$slideNode.removeClass('event-is-live');$slideNode.attr('data-is-upcoming','true');$countdownWrapper.removeClass('countdown-hidden');let days=Math.floor(diff/(1000*60*60*24));let hours=Math.floor((diff%(1000*60*60*24))/(1000*60*60));let minutes=Math.floor((diff%(1000*60*60))/(1000*60));let seconds=Math.floor((diff%(1000*60))/1000);$slideNode.find('.class-d').text(days<10?"0"+days:days);$slideNode.find('.class-h').text(hours<10?"0"+hours:hours);$slideNode.find('.class-m').text(minutes<10?"0"+minutes:minutes);$slideNode.find('.class-s').text(seconds<10?"0"+seconds:seconds);}});}countdownInterval=setInterval(updateCardClock,1000);updateCardClock();}});;
316(function($,Drupal){'use strict';Drupal.behaviors.backToTopButton={attach:function(context,settings){$('body',context).once('backToTopButton').each(function(){var $button=$('
316<button id="backToTopBtn" aria-label="Back to top"></button>').appendTo('body');$button.on('click',function(e){e.preventDefault();$('html, body').animate({scrollTop:0},'slow');});$(window).on('scroll.backToTop resize.backToTop',function(){var scrollTop=$(window).scrollTop();var docHeight=$(document).height();var winHeight=$(window).height();if(docHeight>winHeight){var scrollPercent=(scrollTop/(docHeight-winHeight))*100;if(scrollPercent>=25)$button.addClass('visible');else $button.removeClass('visible');}else $button.removeClass('visible');});});}};})(jQuery,Drupal);;
317setTimeout(function(){if(window.outerWidth>979)$(".indy-banner").hide();if(window.location.href.indexOf("/nhra")>0)jQuery("body[data-active-series='nhra']").find('.hero').css('cursor','pointer').click(function(){window.location="/schedule/2025/nhra-mission-foods-drag-racing-series/nhra-gatornationals";});if(window.location.href.indexOf("/worlds-biggest-drag-race")>0){$("body.has-title-panel.path-node.page-node-type-promo-page.indy_promo_2022").find('.hero__content.promo').css('cursor','pointer').click(function(){window.location="/schedule/2022/nhra-camping-world-drag-racing-series/dodge-power-brokers-nhra-us-nationals";});$("body.has-title-panel.path-node.page-node-type-promo-page.indy_promo_2022").find('.image-card.image-card--triple.image-card--standard.promo.top:nth-child(1)').css('cursor','pointer').click(function(){window.location="/schedule/2022/nhra-camping-world-drag-racing-series/dodge-power-brokers-nhra-us-nationals#tab-event-schedule";});$("body.has-title-panel.path-node.page-node-type-promo-page.indy_promo_2022").find('.image-card.image-card--triple.image-card--standard.promo.top:nth-child(2)').css('cursor','pointer').click(function(){window.location="/news/2022/nhra-concert-series-presented-8-track-entertainment-comes-us-nationals";});}},500);;

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.