PageSourceSearch

https://tricitiessports.com/ContactUs

html tricitiessports.com collected 2026-09-25 23:42:43 UTC 112,770 bytes, 1,927 lines download raw bytes

1<!doctype html>
2<html lang="en">
3
4<head>
5    <!-- Performance Optimizations -->
6    <link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin>
7    <link rel="preconnect" href="https://code.jquery.com" crossorigin>
8    <link rel="dns-prefetch" href="https://cdn.jsdelivr.net">
9    <link rel="dns-prefetch" href="https://code.jquery.com">
10    <link rel="dns-prefetch" href="https://maxcdn.bootstrapcdn.com">
11    <link rel="preload" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" as="style">
12    <!-- meta tags -->
13    <meta charset="utf-8">
14    <title>ContactUs</title>
15    <meta name="viewport" content="width=device-width, initial-scale=1">
16     
17    <meta name="keywords" content="tennessee, high school sports, dobyns-bennett, sullivan south, tri-cities, tri-cities sports, high school football, high school basketball, sports in tennessee, tennessee high school, arbys classic, bristol, golf, prep sports, basketball, football, high,"> 
18    <meta name="description" content="Tri-Cities Sports - Your Source for Local Sports!!">  
19        <link rel="shortcut icon" href="/favicon.ico?v=1790346378">
20    
20<script type="text/javascript" language="javascript" src="/lib/bl2.js"></script>
20
21
22    <!-- bootstrap -->
23    <link type="text/css" rel="stylesheet" href="/layout.css">
24    <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
25    
25<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js" integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM" crossorigin="anonymous"></script>
25
26  <link type="text/css" rel="stylesheet" href="https://bulletlink.com/bootstrap.css">
27    <!-- /bootstrap -->
28
29    <!-- jQuery -->
30    
30<script src="https://code.jquery.com/jquery-1.7.min.js" integrity="sha256-/05Jde9AMAT4/o5ZAI23rUf1SxDYTHLrkOco0eyRV84=" crossorigin="anonymous"></script>
30
31    <!-- /jQuery -->
32
33    <!-- system -->
34    
34<script type="text/javascript" language="javascript" src="/settings.js?v=1790346378"></script>
34
35    
35<script type="text/javascript" language="javascript" src="/ads.js?v=1790346378"></script>
35
36    
36<script type="text/javascript" language="javascript" src="/menu_horizontal.js?v=1790346378"></script>
36
37    
37<script type="text/javascript" language="javascript" src="/sections.js?v=1790346378"></script>
37
38    
38<script type="text/javascript" language="javascript" src="/polls.js?v=1790346378"></script>
38
39    
39<script type="text/javascript" language="javascript" src="/articles.js?v=1790346378"></script>
39
40    
40<script type="text/javascript" language="javascript" src="/lib/iframeResizer.min.js"></script>
40
41    <!-- /system -->
42
43    <!-- fontAwesome-->
44    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" />
45 <link rel="preconnect" href="https://fonts.googleapis.com">
46 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
47 <link href="https://fonts.googleapis.com/css2?family=Roboto+Condensed:wght@300;400;700&display=swap" rel="stylesheet">
48    <!-- /fontAwesome-->
49
50    <!-- general -->
51    
51<script type="text/javascript" language="javascript" src="/jscript1.js?v=1790346378"></script>
51
52    <link type="text/css" rel="stylesheet" href="/custom.css?v=1790346378">
53    
53<script type="text/javascript" language="javascript" src="/custom.js?v=1790346378"></script>
53
54    <!-- /general -->
55
56    <!--StartMH-->
57    <!--MetaSharing-->
58    <!--EndMH-->
59
60    <!-- live-Builder --> 
61    <link type="text/css" rel="stylesheet" href="/ufields.css?v=1790346378" />
62    
62<script type="text/javascript" src="/ufields.js?v=1790346378"></script>
62
63    <!-- /live-Builder --> 
64    
65<style>:root{--cms-theme-color: #555;}</style><link rel="stylesheet" href="/sys-popup.css?v=1790346378"><style id="universal-submit-spinner">
66.form-submit-spinner{display:inline-block;width:16px;height:16px;border:2px solid rgba(255,255,255,.4);border-top-color:#fff;border-radius:50%;animation:frmSpin .7s linear infinite;vertical-align:middle;margin-right:6px}
67@keyframes frmSpin{to{transform:rotate(360deg)}}
68</style></head>
69
70<body id="blbodymain" class="blbody cus-select-red"><a href="https://tricitiessports.com/cdn-cgi/content?id=VqCxEtQpMdSXGB1mBAJ0yv923MJ5usZz7kEsvyvefa0-1790379760.1860566-1.2.1.1-0lLIJQZAMMrCQvEBmvnYkH7uspBitjPguGlV30oT0E4KhwRGo68MN0B.5ecdEapR" aria-hidden="true" rel="nofollow noopener" style="display: none !important; visibility: hidden !important"></a>
71    <div class="mainbody">
72        <!-- sticky ads-->
73        <span class="cus-sticky-ads"></span>
74        <!-- /sticky ads-->
75  <div class="container-fluid bg-black">
76            <div class="container-bl px-0 px-lg-2">
77                <div class="bg-black"> 
78                    <div class="row border-bottom p-3 mx-lg-0 ps-lg-0"> 
79<div class="col-1 fw-bold text-uppercase text-white fs-6 pt-0">
80<script type="text/javascript" language="javascript" src="/menu_sandwich.js?v=1790346378"></script>
80                    
81<script type="text/javascript" language="javascript">GetMenuSandwich();</script>
81
82</div>
83<div class="col-2 fw-bold text-uppercase text-white fs-6 pt-0">
83<script type="text/javascript" language="JavaScript">AdGroup17();</script>
83</div>
84                        <div class="col-lg-5 col-12 ps-0">
85                            <a class="text-decoration-none fw-bold text-uppercase text-white fs-6 me-3 cus-toplink-1-133-link text-red-hover" href="https://tricitiessports.com">HOME</a>
86                            <a class="text-decoration-none fw-bold text-uppercase text-white fs-6 me-3 cus-toplink-1-133-link text-red-hover" href="/about-us-p114331-579.htm">ABOUT</a>
87                            <a class="text-decoration-none fw-bold text-uppercase text-white fs-6  me-3 cus-toplink-1-133-link text-red-hover" href="/ContactUs">CONTACT</a>
88                            <a class="text-decoration-none fw-bold text-uppercase text-white fs-6  me-3 cus-toplink-1-133-link text-red-hover" href="/PAID_subscribers">SUBSCRIBE</a>
89<a 
90    id="subscriber-login"
91    class="text-decoration-none fw-bold text-uppercase text-white fs-6  me-3 cus-toplink-1-133-link text-red-hover" 
92    href="/LoginSubscriber" 
93    style="display:none !important;"
94    onclick="if(window.PaywallWidget){PaywallWidget.showLoginModal();return false;}"
95>
96    LOGIN
97</a>
98
99<a 
100    id="subscriber-logout"
101    class="text-decoration-none fw-bold text-uppercase text-white fs-6  me-3 cus-toplink-1-133-link text-red-hover" 
102    href="#"
103    style="display:none !important;"
104    onclick="document.cookie='subscriber_token=; path=/; max-age=0'; location.href='/'; return false;"
105>
106    LOGOUT
107</a>
108
109                        </div>
110                   
111                    
112                        <div class="col-lg-2"> <div class="col-lg-12">
113                            <!-- search -->
114                            
114<script type="text/javascript" language="JavaScript">GetGoogleCustomSearch();</script>
114
115                            <div class="d-inline position-relative">
116                                <div class="cus-101-search hpe-gsearch shadow-sm border border-white"> 
117                                    <div class="cus-101-search-box">      <div id="custom-search-box"></div>
117<script>newCustomSearch();</script>
117</div>
118                                </div>
119                                <div class="cus-101-search-result"><gcse:searchresults></gcse:searchresults></div>
120                            </div>
121                        <style>
122                        .gsc-adBlock {display: none !important;}
123                        #gsc-i-id1{color:#000!important}
124                        #gsc-i-id1::placeholder{color:#555!important;opacity:1;font-size:inherit!important}
125                        .search_content{display:flex;display:-webkit-flex;-ms-display:flex;align-items:center;-webkit-align-items:center;-ms-align-items:center;justify-content:center;-webkit-justify-content:center;-ms-justify-content:center;background-color:rgba(255,255,255,.98);height:100%;position:fixed;top:100%;opacity:0;left:0;width:100%;z-index:2147483647;transition: 400ms ease-in-out;}
126                        .search-flex{top: 0;opacity: 1;display:flex;display:-webkit-flex;-ms-display:flex;align-items:center;-webkit-align-items:center;-ms-align-items:center;justify-content:center;-webkit-justify-content:center;-ms-justify-content:center;transition: 300ms ease-in-out;}
127                        .search_remove{cursor:pointer;user-select:none;position:absolute;top:10px;left:3%;}
128                        .search_remove:hover{color:#ff4500}
129                        .gsc-control-cse.gsc-control-cse-en{background-color:transparent;border-width:0;position:absolute}
130                        .gsib_b,.gsst_a{display:none!important}
131                        .gscb_a{display:none!important}
132                        .gsc-input{background-image:none!important}
133                        .gsc-input{background-color:transparent!important}
134                        .gsc-input-box{background-color:transparent!important;border-bottom:0 solid #ff4500!important;border-width:0!important}
135                        .gsc-input{border-width:0!important;color:#fff!important;font-size:16px !important;}
136                        .gsc-adBlock{display:none!important}
137                        .search-icon-desk{cursor:pointer}
138                        .search-icon-desk{float:right;height:54px;margin-right:10px}
139                        .search-icon-desk i{border:1px solid #ddd;border-radius:4px;color:#000;display:block;line-height:35px;margin-top:9px;padding:0 12px}
140                        .search-icon-desk i:hover{color:#79655d}
141                        .gsc-results-wrapper-overlay.gsc-results-wrapper-visible {width: 100%;left: 0;top: 0;height: 100%;}
142                        .gcsc-branding {display: none;}
143                        .gsc-search-button.gsc-search-button-v2{padding-left:20px;padding-right:20px;line-height:20px;display:inline-block!important;background:#0056e5;border-color:#0056e5; border-radius: 0 !important;}
144                        .gsc-search-button{width:auto!important;float:right!important}
145                        .gsc-search-button.gsc-search-button-v2:hover{background:#ddd!important}
146                        .gsc-search-button-v2 svg{fill:#fff!important}
147                        .gsc-search-button.gsc-search-button-v2:hover{background:#495e71 !important;border-color:#495e71 !important;}
148                        .gsc-search-box.gsc-search-box-tools {background: white !important;margin-bottom: 0 !important;}
149                        table.gsc-search-box {margin-bottom: 0;}
150                        #gsc-i-id1 {color: #0d6efd !important;}
151                        #gsc-i-id1::placeholder {color: #0d6efd !important;opacity: 0.5;}
152                        </style>
153                        
153<script>
154                            window.addEventListener('DOMContentLoaded', function(){
155                                setTimeout(function(){
156                                    document.getElementById("gsc-i-id1").setAttribute("placeholder", "Search Here...");
157                                    document.getElementsByClassName('gsc-search-button')[0].addEventListener('click', function() {
158                                        if (document.getElementById('gsc-i-id1').value == "") {
159                                            alert('<i class="fa fa-exclamation-circle fs-1 text-danger mb-3" aria-hidden="true"></i><br> Please write keyword to search.');
160                                        }
161                                    });
162                                },1000);
163                            });                 
164                        </script>
164
165                        <!-- /search -->
166                        
167                    </div>
168                </div>
169    <div class="col-lg-2"> 
170                    <div class="cus-social-links col-sm-12 float-sm-start d-flex justify-content-center d-sm-inline-block">
171                        <div class="float-sm-end">
172                            <a class="text-decoration-none text-light rounded ms-3 fs-4 d-inline-block lh-1 cus-social-1-133-icon" href="https://www.facebook.com/profile.php?id=100064601897460" target="_blank"><i class="fa fa-facebook-square text-red-hover" aria-hidden="true"></i></a>
173                            <a class="text-decoration-none text-light rounded ms-3 fs-4 d-inline-block lh-1 cus-social-1-133-icon" href="https://twitter.com/parrotheadvol" target="_blank"><i class="fa fa-twitter-square text-red-hover" aria-hidden="true"></i></a>
174                            
175                        </div>
176                    </div>
177                </div>
178            </div>
179            <!-- logo-->
180            <div class="row pt-3 pb-2 mx-0 align-items-center mb-2">
181                <div class="hpe-logo col-lg-6 px-lg-0"><div data-cms-el="logo">
181<script type="text/javascript" language="JavaScript">GetLogo();</script>
181</div></div>
182                <div class="col-lg-6 pe-lg-0 mt-2 mt-lg-0"><div data-cms-block="adgroup-15" data-cms-block-label="Advertisement 15" data-cms-el="adgroup" data-cms-adgroup="15">
182<script type="text/javascript" language="JavaScript">AdGroup15();</script>
182</div></div>
183            </div>
184            <!-- /top-links -->
185                
186            <!-- menu -->
187            <div class="mb-4">
188                <div class="col-12 px-0">
189                    
189<script type="text/javascript" language="JavaScript">
190                        GetMenuH();
191                    </script>
191
192                </div>
193            </div>
194            <!-- /menu -->
195            
196        </div>
197        <!-- top-links -->
198    </div>
199</div>
200         
201        
202            <div class="container-bl">
203            <!-- /logo -->
204            
205            <div class="row">
206                <div class="col-lg-6 pe-0"><div data-cms-block="highlight-8" data-cms-block-label="Highlights 8" data-cms-el="highlight" data-cms-highlight="8">
206<script type="text/javascript" language="JavaScript">GetHighlights8();</script>
206</div> </div>
207                <div class="col-lg-6 ps-0"><div data-cms-block="highlight-5" data-cms-block-label="Highlights 5" data-cms-el="highlight" data-cms-highlight="5">
207<script type="text/javascript" language="JavaScript">GetHighlights5();</script>
207</div>  </div>
208            </div>
209        <!-- <div class="col-lg-12 ps-0"></div>-->
210            <!-- 2-columns -->
211            <div class="cus-column-133-row row mb-4">                
212                <div class="cus-column-133-1 col-lg-9">        
213                    <div data-sticky="10">                                               
214                        <div class="row bg-white p-3 my-4 border rounded mx-0">
215                            <div class="col-lg-12"><div data-cms-popup-root="1"><style>
216#CustomForm {background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='32' viewBox='0 0 16 32'%3E%3Cg fill='%23c9d1cb' fill-opacity='0.16'%3E%3Cpath fill-rule='evenodd' d='M0 24h4v2H0v-2zm0 4h6v2H0v-2zm0-8h2v2H0v-2zM0 0h4v2H0V0zm0 4h2v2H0V4zm16 20h-6v2h6v-2zm0 4H8v2h8v-2zm0-8h-4v2h4v-2zm0-20h-6v2h6V0zm0 4h-4v2h4V4zm-2 12h2v2h-2v-2zm0-8h2v2h-2V8zM2 8h10v2H2V8zm0 8h10v2H2v-2zm-2-4h14v2H0v-2zm4-8h6v2H4V4zm0 16h6v2H4v-2zM6 0h2v2H6V0zm0 24h2v2H6v-2z'/%3E%3C/g%3E%3C/svg%3E");background-attachment: fixed;}
217.form-check-label:hover {color: #0d6efd;cursor: pointer;}
218.cus-form-loader .cus-form-loading {display: block !important;}
219.cus-form-loader .formbody fieldset, .cus-form-loader .system_text.footer_text {opacity: 0.5;pointer-events: none;}
220#cus-form-button-loader {display:none;}
221.cus-form-loader footer, .cus-form-loader button {cursor: no-drop;}
222.fast-spin {-webkit-animation: fa-spin 1s infinite linear;animation: fa-spin 1s infinite linear;}
223.cus-form-loader #SUBMIT1 {display:none;}
224.cus-form-loader #cus-form-button-loader {display:inline-block;}
225.form-floating > .form-control:focus ~ label {color: #0d6efd !important;}
226.form-control:not(:disabled):not([readonly])::file-selector-button {position: absolute;right: 0;border-radius: 5px !important;}
227.input-file-preview {display: none;}
228.input-file-preview img {max-width: 30%;max-height: 200px;border: 1px solid #ced4da;border-radius: 5px;padding: 5px;box-sizing: border-box;cursor: zoom-in;}
229.w-96 {width: 96% !important;}
230.p-valid {color: green;}
231.p-valid:before {position: relative;left: -10px;content: "✔";}
232.p-invalid {color: red;}
233.p-invalid:before {position: relative;left: -10px;content: "✖";font-size: 0.875rem !important;}
234.open-eye, .close-eye {position: absolute;right: 2%;top: 50%;transform: translate(0,-50%);cursor: pointer;}
235.open-eye i:hover, .close-eye i:hover {color: gray !important;}
236.cus-form-help:before {content: "\f05a";font-family: FontAwesome;padding-left: 0.5rem;padding-right: 0.5rem;}
237.cus-form-help {display: none;}
238.cus-form-help:empty {display: none !important;}
239.form-control:focus ~ .cus-form-help {display: block;}
240.formdivider.formdivider_custom {border-left: 5px solid #ffc107;}
241.form-floating > .form-control {caret-color: #0d6efd;}
242</style>
243<style id="force-form-styles" data-version="2026-01-26-v2">
244      textarea, textarea.form-control, textarea.formfieldinput { min-height: 120px !important; height: 120px !important; }
245
246      /* Enhanced Spinner Styles - More visible and animated */
247      .form-spinner-ring { 
248        display: inline-block; 
249        width: 18px; 
250        height: 18px; 
251        border: 3px solid rgba(255,255,255,0.4); 
252        border-top-color: #fff; 
253        border-radius: 50%; 
254        animation: formSpin 0.7s linear infinite; 
255        margin-right: 8px; 
256        vertical-align: middle; 
257      }
258      @keyframes formSpin { 
259        0% { transform: rotate(0deg); }
260        100% { transform: rotate(360deg); } 
261      }
262      
263      /* Submit Button Loading State */
264      button.btn-loading, input.btn-loading {
265        position: relative;
266        pointer-events: none;
267        opacity: 0.85;
268      }
269      button.btn-loading::after {
270        content: '';
271        position: absolute;
272        width: 18px;
273        height: 18px;
274        top: 50%;
275        left: 12px;
276        margin-top: -9px;
277        border: 3px solid rgba(255,255,255,0.4);
278        border-top-color: #fff;
279        border-radius: 50%;
280        animation: formSpin 0.7s linear infinite;
281      }
282      
283      /* Form Overlay during submission */
284      .form-loading-overlay {
285        position: absolute;
286        top: 0;
287        left: 0;
288        right: 0;
289        bottom: 0;
290        background: rgba(255,255,255,0.7);
291        display: flex;
292        align-items: center;
293        justify-content: center;
294        z-index: 9999;
295        border-radius: inherit;
296      }
297      .form-loading-overlay .spinner-container {
298        display: flex;
299        flex-direction: column;
300        align-items: center;
301        gap: 12px;
302        padding: 30px;
303        background: white;
304        border-radius: 12px;
305        box-shadow: 0 4px 20px rgba(0,0,0,0.15);
306      }
307      .form-loading-overlay .spinner-large {
308        width: 40px;
309        height: 40px;
310        border: 4px solid #e0e0e0;
311        border-top-color: #007bff;
312        border-radius: 50%;
313        animation: formSpin 0.8s linear infinite;
314      }
315      .form-loading-overlay .loading-text {
316        color: #333;
317        font-size: 14px;
318        font-weight: 500;
319      }
320      
321      /* Bootstrap 5 Floating Label Fix - Force proper behavior */
322      .form-floating > .form-control:focus ~ label,
323      .form-floating > .form-control:not(:placeholder-shown) ~ label,
324      .form-floating > .form-select ~ label {
325        opacity: 0.65 !important;
326        transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem) !important;
327      }
328      .form-floating > .form-control::placeholder {
329        color: transparent !important;
330      }
331      .form-floating > label {
332        position: absolute !important;
333        top: 0 !important;
334        left: 0 !important;
335        height: 100% !important;
336        padding: 1rem 0.75rem !important;
337        pointer-events: none !important;
338        border: 1px solid transparent !important;
339        transform-origin: 0 0 !important;
340        transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out !important;
341      }
342    </style>
343<style>.grecaptcha-badge{visibility:hidden!important;position:fixed!important;bottom:14px!important;right:14px!important;}</style>
344<script src="/iframe-resizer-master/js/iframeResizer.contentWindow.js"></script>
vendor: 1 bytes, line 344
344
345<script type="text/javascript" language="javascript" src="https://tricitiessports.com/lib/bl.js"></script>
vendor: 1 bytes, line 345
345
346<script>
347function ChangeInputFocus(obj, evt, cname) {
348/*if (evt.type == "focus")
349obj.className = cname;
350else if (evt.type == "blur")
351/*obj.className = cname;*/
352}
353</script>
vendor: 1 bytes, line 353
353
354<script src="https://recaptcha.net/recaptcha/api.js?render=6LdXmfgUAAAAAJNuEHBxVCY0w9eA73hvaWsdgPlM"></script>
vendor: 1 bytes, line 354
354
355<script>
356(function(){
357  function setToken(t){
358    var els = document.querySelectorAll('.g-recaptcha-token');
359    for (var i = 0; i < els.length; i++) els[i].value = t;
360  }
361  function refresh(){
362    if (typeof grecaptcha === 'undefined') return;
363    grecaptcha.ready(function(){
364      grecaptcha.execute('6LdXmfgUAAAAAJNuEHBxVCY0w9eA73hvaWsdgPlM', {action: 'submit'}).then(setToken);
365    });
366  }
367  // Submit-time minter. Login pages call this in their submit handler and await it,
368  // so the request always carries a freshly-minted token instead of reading the
369  // pre-filled hidden field — which may still be empty when a user with saved
370  // credentials presses Enter before the page-load mint resolves (-> recaptcha_missing,
371  // a hard block). Resolves to a fresh token, or falls back to whatever's already in
372  // the field (and never hangs the form: 3s timeout, and resolves if grecaptcha is
373  // unavailable). Also updates the hidden field so FormData-based submits pick it up.
374  window.cmsMintCaptchaToken = function(){
375    return new Promise(function(resolve){
376      var els = document.querySelectorAll('.g-recaptcha-token');
377      var fallback = (els[0] && els[0].value) || '';
378      var done = false;
379      var to = setTimeout(function(){ if(!done){ done = true; resolve(fallback); } }, 3000);
380      function fin(v){ if(done) return; done = true; clearTimeout(to); setToken(v); resolve(v); }
381      function attempt(){
382        if (typeof grecaptcha === 'undefined' || !grecaptcha.execute) return false;
383        try {
384          grecaptcha.ready(function(){
385            grecaptcha.execute('6LdXmfgUAAAAAJNuEHBxVCY0w9eA73hvaWsdgPlM', {action: 'submit'})
386              .then(function(t){ fin(t || fallback); })
387              .catch(function(){ fin(fallback); });
388          });
389          return true;
390        } catch(_) { return false; }
391      }
392      // grecaptcha may still be loading -- common when the form is rendered
393      // inside a popup, where api.js was injected only moments ago. Poll until
394      // it's ready (or the 3s timeout fires) instead of bailing immediately.
395      if (!attempt()) {
396        var iv = setInterval(function(){
397          if (done) { clearInterval(iv); return; }
398          if (attempt()) clearInterval(iv);
399        }, 150);
400      }
401    });
402  };
403  refresh();
404  setTimeout(refresh, 5000);
405  setInterval(refresh, 120000);
406})();
407</script>
407
408<div class="formbody">
409<div class="body p-2">
410<!--FormError-->
411<!--FormMessage-->
412<form class="custom-form p-3 mx-0 border rounded" enctype="multipart/form-data" autocomplete="off" id="CustomForm" method="post" name="CustomForm" onsubmit="return unifiedSubmitForm(event)">
413<div aria-hidden="true" style="position:absolute;left:-9999px;top:-9999px;height:0;width:0;overflow:hidden;">
414  <label for="website_url_hp">Website (leave blank)</label>
415  <input type="text" name="website_url" id="website_url_hp" tabindex="-1" autocomplete="off" value="">
416</div>
417<input type="hidden" name="token" class="g-recaptcha-token" value="">
418<!--FKeys-->
419<input type="hidden" name="SystemEmailSubject" value="mywebsite.com: Contact Us"> 
420<input type="hidden" name="SystemEmailConfirmMessage" value="Your message has been forwarded to appropriate personnel. &lt;br&gt;&lt;br&gt;Thank you."> 
421<input type="hidden" name="SystemEmailFormat" value="HTML"> 
422<input type="hidden" name="SystemEmailTo" value="[email protected]"> 
423<input type="hidden" name="SystemEmailCC" value="[email protected]">
424<center class="fw-bold mb-3 fs-3 text-secondary">ContactUs</center>
425<fieldset>
426<div class="system_text Header_text mb-5 text-center"><html>
427    <head>
428        <link href="asp.css" rel="stylesheet">
429    </head>
430    <body >
431        <div align="left" class="d-none"><font class="CH2"><b>CONTACT US:</b></font> </div>
432        <div align="left"> </div>
433        <div align="left">PLEASE NOTE:  Use this form for letters to departments.  You may also use this form to submit story ideas to the editor, request information about advertising, let us know of a sports event or send  LETTERS TO THE EDITOR.</div>
434        <div align="left"> </div>
435        <div align="left">If you have questions or a problem to discuss, please call 423-676-5470.</div>
436    
437<!-- Form Script v2026-01-26-v2 -->
438<!-- Modern Popup Modal for Messages -->
439<div id="form-message-modal" style="display:none; position:fixed; inset:0; background:rgba(0,0,0,0.7); z-index:99999; align-items:center; justify-content:center; padding:20px;">
440  <div style="background:#fff; min-width:320px; max-width:400px; border-radius:12px; padding:24px; box-shadow:0 25px 50px -12px rgba(0,0,0,0.5);">
441    <div id="form-message-text" style="margin-bottom:20px; font-size:15px; color:#333; text-align:center; line-height:1.5;"></div>
442    <button id="form-message-ok" style="width:100%; padding:12px 20px; font-size:14px; font-weight:600; background:#007bff; color:white; border:none; border-radius:8px; cursor:pointer; transition:all 0.2s ease;" onmouseover="this.style.background='#0056b3'" onmouseout="this.style.background='#007bff'">OK</button>
443  </div>
444</div>
445
446<script>
447// Resolve the URL to POST the form to. On a normal page load the form lives at
448// its own URL, so window.location.pathname is correct. But when the form is
449// opened inside a popup (sys-popup.js), the page URL is the HOST page, not the
450// form's URL -- sys-popup stamps the real form path onto the form as
451// data-form-action, which we prefer when present.
452function cmsResolvePostUrl(form) {
453  var f = form || document.querySelector('form');
454  var a = f && f.getAttribute && f.getAttribute('data-form-action');
455  return a || window.location.pathname;
456}
457
458// Modern message popup function
459// onClose callback is called when user clicks OK (useful for resetting button on error)
460function showFormMessage(text, isSuccess = false, onClose = null) {
461  const modal = document.getElementById('form-message-modal');
462  const modalMsg = document.getElementById('form-message-text');
463  const modalOk = document.getElementById('form-message-ok');
464  
465  if (modal && modalMsg && modalOk) {
466    modalMsg.innerHTML = isSuccess 
467      ? '<div style="display:flex;align-items:center;justify-content:center;gap:12px;margin-bottom:20px;"><div style="width:50px;height:50px;background:linear-gradient(135deg,#28a745,#20c997);border-radius:50%;display:flex;align-items:center;justify-content:center;box-shadow:0 4px 15px rgba(40,167,69,0.3);flex-shrink:0;"><span style="color:white;font-size:28px;font-weight:bold;">✓</span></div><span style="color:#28a745;font-size:28px;font-weight:600;">Success</span></div>' + text
468      : text;
469    modal.style.display = 'flex';
470    modalOk.onclick = function() { 
471      modal.style.display = 'none';
472      if (isSuccess) {
473        (window.top || window).location.href = '/';
474      } else if (onClose) {
475        onClose();
476      }
477    };
478    // Also close on backdrop click
479    modal.onclick = function(e) {
480      if (e.target === modal) {
481        modal.style.display = 'none';
482        if (isSuccess) {
483          (window.top || window).location.href = '/';
484        } else if (onClose) {
485          onClose();
486        }
487      }
488    };
489  } else {
490    // Fallback to alert if modal not found
491    alert(text);
492    if (isSuccess) {
493      (window.top || window).location.href = '/';
494    } else if (onClose) {
495      onClose();
496    }
497  }
498}
499
500// Accept.js card input modal for Authorize.net
501async function showAcceptJsCardInput(clientConfig, form, originalFormData, paymentResult) {
502  console.log('[forms] Loading Accept.js for card tokenization');
503  
504  // Load Accept.js script dynamically
505  if (!window.Accept) {
506    await new Promise((resolve, reject) => {
507      const script = document.createElement('script');
508      script.src = clientConfig.jsUrl;
509      script.onload = resolve;
510      script.onerror = () => reject(new Error('Failed to load Accept.js'));
511      document.head.appendChild(script);
512    });
513  }
514  
515  // Create card input modal
516  const modalHtml = `
517    <div id="acceptjs-modal" style="position:fixed;inset:0;background:rgba(0,0,0,0.7);z-index:99999;display:flex;align-items:center;justify-content:center;padding:20px;">
518      <div style="background:#fff;max-width:400px;width:100%;border-radius:12px;padding:30px;box-shadow:0 25px 50px -12px rgba(0,0,0,0.5);">
519        <h3 style="margin:0 0 20px;color:#333;">Payment Information</h3>
520        <p style="margin:0 0 20px;color:#666;">Amount: <strong>$${paymentResult.amount}</strong></p>
521        
522        <div style="margin-bottom:15px;">
523          <label style="display:block;margin-bottom:5px;font-weight:600;color:#333;">Card Number *</label>
524          <input type="text" id="ajs-card-number" placeholder="4111 1111 1111 1111" maxlength="19"
525                 style="width:100%;padding:12px;border:1px solid #ccc;border-radius:4px;font-size:16px;box-sizing:border-box;">
526        </div>
527        
528        <div style="display:flex;gap:15px;margin-bottom:15px;">
529          <div style="flex:1;">
530            <label style="display:block;margin-bottom:5px;font-weight:600;color:#333;">Exp Month *</label>
531            <select id="ajs-exp-month" style="width:100%;padding:12px;border:1px solid #ccc;border-radius:4px;font-size:16px;">
532              <option value="">MM</option>
533              ${[...Array(12)].map((_,i) => '<option value="'+String(i+1).padStart(2,'0')+'">'+String(i+1).padStart(2,'0')+'</option>').join('')}
534            </select>
535          </div>
536          <div style="flex:1;">
537            <label style="display:block;margin-bottom:5px;font-weight:600;color:#333;">Exp Year *</label>
538            <select id="ajs-exp-year" style="width:100%;padding:12px;border:1px solid #ccc;border-radius:4px;font-size:16px;">
539              <option value="">YYYY</option>
540              ${[...Array(15)].map((_,i) => { const y=new Date().getFullYear()+i; return '<option value="'+y+'">'+y+'</option>'; }).join('')}
541            </select>
542          </div>
543          <div style="width:100px;">
544            <label style="display:block;margin-bottom:5px;font-weight:600;color:#333;">CVV *</label>
545            <input type="text" id="ajs-cvv" placeholder="123" maxlength="4"
546                   style="width:100%;padding:12px;border:1px solid #ccc;border-radius:4px;font-size:16px;box-sizing:border-box;">
547          </div>
548        </div>
549        
550        <div id="ajs-error" style="color:#dc3545;margin-bottom:15px;
550display:none;"></div>
551        
552        <div style="display:flex;gap:10px;">
553          <button type="button" id="ajs-cancel" style="flex:1;padding:12px;background:#6c757d;color:#fff;border:none;border-radius:4px;cursor:pointer;font-size:16px;">Cancel</button>
554          <button type="button" id="ajs-submit" style="flex:1;padding:12px;background:#28a745;color:#fff;border:none;border-radius:4px;cursor:pointer;font-size:16px;">Pay Now</button>
555        </div>
556      </div>
557    </div>
558  `;
559  
560  document.body.insertAdjacentHTML('beforeend', modalHtml);
561  
562  const modal = document.getElementById('acceptjs-modal');
563  const cardInput = document.getElementById('ajs-card-number');
564  const cvvInput = document.getElementById('ajs-cvv');
565  const errorDiv = document.getElementById('ajs-error');
566  
567  // Format card number
568  cardInput.addEventListener('input', function(e) {
569    let v = e.target.value.replace(/\s+/g, '').replace(/[^0-9]/g, '');
570    let f = '';
571    for (let i = 0; i < v.length; i++) { if (i > 0 && i % 4 === 0) f += ' '; f += v[i]; }
572    e.target.value = f;
573  });
574  
575  // Only numbers in CVV
576  cvvInput.addEventListener('input', function(e) {
577    e.target.value = e.target.value.replace(/[^0-9]/g, '');
578  });
579  
580  // Cancel button - also reset the submit button
581  document.getElementById('ajs-cancel').onclick = function() {
582    modal.remove();
583    // Reset the original form's submit button
584    const submitBtn = form.querySelector('button[type="submit"], #SUBMIT1, input[type="submit"]');
585    if (submitBtn) {
586      submitBtn.disabled = false;
587      if (submitBtn.tagName === 'INPUT') {
588        submitBtn.value = 'Submit';
589      } else {
590        submitBtn.innerHTML = 'Submit';
591      }
592    }
593  };
594  
595  // Submit button
596  document.getElementById('ajs-submit').onclick = async function() {
597    const cardNumber = cardInput.value.replace(/\s+/g, '');
598    const expMonth = document.getElementById('ajs-exp-month').value;
599    const expYear = document.getElementById('ajs-exp-year').value;
600    const cvv = cvvInput.value;
601    
602    // Validate
603    if (!cardNumber || cardNumber.length < 13) {
604      errorDiv.textContent = 'Please enter a valid card number';
605      errorDiv.style.display = 'block';
606      return;
607    }
608    if (!expMonth || !expYear) {
609      errorDiv.textContent = 'Please select expiration date';
610      errorDiv.style.display = 'block';
611      return;
612    }
613    if (!cvv || cvv.length < 3) {
614      errorDiv.textContent = 'Please enter CVV';
615      errorDiv.style.display = 'block';
616      return;
617    }
618    
619    errorDiv.style.display = 'none';
620    this.disabled = true;
621    this.innerHTML = '<span class="form-spinner-ring" style="border-color:rgba(255,255,255,0.4);border-top-color:#fff;"></span> Processing...';
622
623    // Test card detection - skip Accept.js tokenization
624    var TEST_CARDS_V3 = ['4111111111111111', '4000000000000000', '5500000000000004', '370000000000002', '6011000000000004'];
625    if (TEST_CARDS_V3.indexOf(cardNumber) !== -1) {
626      console.log('[forms] Test card detected - skipping tokenization');
627      originalFormData.append('dataDescriptor', 'TEST_CARD');
628      originalFormData.append('dataValue', 'TEST');
629      originalFormData.append('pf-card-number-input', cardNumber);
630
631      try {
632        const testResp = await fetch(cmsResolvePostUrl(), {
633          method: 'POST',
634          body: originalFormData,
635          headers: { 'Accept': 'application/json' }
636        });
637        const testResult = await testResp.json();
638        modal.remove();
639        if (testResult.success && testResult.isPaymentComplete) {
640          if (testResult.subscriberToken) {
641            try {
642              var tp2 = JSON.parse(atob(testResult.subscriberToken.split('.')[1]));
643              var ma2 = tp2.exp ? (tp2.exp - Math.floor(Date.now() / 1000)) : (30 * 24 * 60 * 60);
644              document.cookie = 'subscriber_token=' + encodeURIComponent(testResult.subscriberToken) + '; path=/; max-age=' + ma2 + '; SameSite=Lax';
645            } catch (e) { /* ignore */ }
646          }
647          var msg = testResult.confirmMessage
648            ? testResult.confirmMessage + '<br><br><small>Transaction ID: ' + testResult.transactionId + '</small>'
649            : 'Test payment successful! Transaction ID: ' + testResult.transactionId;
650          var retUrl = null;
651          try { retUrl = localStorage.getItem('subscriber_return_url'); } catch (e) { /* ignore */ }
652          if (!retUrl) { try { retUrl = new URLSearchParams(window.location.search).get('return_url'); } catch (e) { /* ignore */ } }
653          if (retUrl) {
654            try { localStorage.removeItem('subscriber_return_url'); } catch (e) { /* ignore */ }
655            msg += '<p style="margin-top:15px;color:#666;">Redirecting you back to your article...</p>';
656            showFormMessage(msg, true);
657            setTimeout(function() { window.location.href = retUrl; }, 2000);
658          } else {
659            showFormMessage(msg, true);
660          }
661          form.reset();
662        } else {
663          showFormMessage(testResult.error || 'Payment failed.', false);
664        }
665      } catch (e) {
666        modal.remove();
667        showFormMessage('Network error. Please try again.', false);
668      }
669      return;
670    } else {
671    // Build Accept.js request
672    const secureData = {
673      authData: {
674        clientKey: clientConfig.clientKey,
675        apiLoginID: clientConfig.apiLoginId
676      },
677      cardData: {
678        cardNumber: cardNumber,
679        month: expMonth,
680        year: expYear,
681        cardCode: cvv
682      }
683    };
684
685    // Tokenize via Accept.js
686    Accept.dispatchData(secureData, async function(response) {
687      if (response.messages.resultCode === 'Error') {
688        const errorText = response.messages.message.map(m => m.text).join(', ');
689        errorDiv.textContent = errorText;
690        errorDiv.style.display = 'block';
691        const ajsBtn = document.getElementById('ajs-submit');
692        ajsBtn.disabled = false;
693        ajsBtn.innerHTML = 'Pay Now';
694        return;
695      }
696
697      console.log('[forms] Card tokenized successfully, resubmitting form');
698
699      // Add token to form data and resubmit
700      originalFormData.append('dataDescriptor', response.opaqueData.dataDescriptor);
701      originalFormData.append('dataValue', response.opaqueData.dataValue);
702      
703      try {
704        const response2 = await fetch(cmsResolvePostUrl(), {
705          method: 'POST',
706          body: originalFormData,
707          headers: { 'Accept': 'application/json' }
708        });
709        const result2 = await response2.json();
710        
711        modal.remove();
712        
713        // Get the submit button to reset on error
714        const submitBtn = form.querySelector('button[type="submit"], #SUBMIT1, input[type="submit"]');
715        const resetButton = function() {
716          if (submitBtn) {
717            submitBtn.disabled = false;
718            if (submitBtn.tagName === 'INPUT') {
719              submitBtn.value = 'Submit';
720            } else {
721              submitBtn.innerHTML = 'Submit';
722            }
723          }
724        };
725        
726        if (result2.success && result2.isPaymentComplete) {
727          // Auto-login: set subscriber_token cookie if provided
728          if (result2.subscriberToken) {
729            try {
730              var tp = JSON.parse(atob(result2.subscriberToken.split('.')[1]));
731              var ma = tp.exp ? (tp.exp - Math.floor(Date.now() / 1000)) : (30 * 24 * 60 * 60);
732              document.cookie = 'subscriber_token=' + encodeURIComponent(result2.subscriberToken) + '; path=/; max-age=' + ma + '; SameSite=Lax';
733              console.log('[forms] Auto-login: subscriber_token cookie set (Accept.js path)');
734            } catch (e) { console.warn('[forms] Auto-login cookie error', e); }
735          }
736          // Build success message with custom confirm message if available
737          let successMsg = 'Payment successful! Transaction ID: ' + result2.transactionId;
738          if (result2.confirmMessage) {
739            successMsg = result2.confirmMessage + '<br><br><small>Transaction ID: ' + result2.transactionId + '</small>';
740          }
741          var retUrl2 = null;
742          try { retUrl2 = localStorage.getItem('subscriber_return_url'); } catch (e) { /* ignore */ }
743          if (!retUrl2) { try { retUrl2 = new URLSearchParams(window.location.search).get('return_url'); } catch (e) { /* ignore */ } }
744          if (retUrl2) {
745            try { localStorage.removeItem('subscriber_return_url'); } catch (e) { /* ignore */ }
746            successMsg += '<p style="margin-top:15px;color:#666;">Redirecting you back to your article...</p>';
747            showFormMessage(successMsg, true);
748            setTimeout(function() { window.location.href = retUrl2; }, 2000);
749          } else {
750            showFormMessage(successMsg, true);
751          }
752          form.reset();
753        } else {
754          showFormMessage(result2.error || 'Payment failed. Please try again.', false, resetButton);
755        }
756      } catch (e) {
757        modal.remove();
758        const submitBtn = form.querySelector('button[type="submit"], #SUBMIT1, input[type="submit"]');
759        showFormMessage('Network error. Please try again.', false, function() {
760          if (submitBtn) {
761            submitBtn.disabled = false;
762            if (submitBtn.tagName === 'INPUT') {
763              submitBtn.value = 'Submit';
764            } else {
765              submitBtn.innerHTML = 'Submit';
766            }
767          }
768        });
769      }
770    });
771    } // end else (real card tokenization)
772  };
773}
774
775// Initialize File Uploader on load to handle image cropping/uploading.
776// Defined as a named function (not an inline DOMContentLoaded callback) so it can
777// also run immediately when the DOM is ALREADY parsed -- e.g. when this form is
778// injected into a popup after DOMContentLoaded has already fired. Without that,
779// the uploader (image cropper) never initializes inside the modal.
780async function cmsInitFormUploader() {
781  // Restore form data if user cancelled payment
782  try {
783    const pendingData = sessionStorage.getItem('_pendingFormData');
784    if (pendingData) {
785      const formData = JSON.parse(pendingData);
786      const form = document.getElementById('CustomForm') || document.querySelector('form');
787      if (form) {
788        for (const [key, value] of Object.entries(formData)) {
789          if (value && typeof value === 'string') {
790            const field = form.querySelector('[name="' + key + '"]');
791            if (field) {
792              if (field.tagName === 'SELECT') {
793                field.value = value;
794              } else if (field.type !== 'file' && field.type !== 'hidden') {
795                field.value = value;
796              }
797            }
798          }
799        }
800        console.log('[forms] Restored form data from cancelled payment');
801      }
802      // Clear the stored data
803      sessionStorage.removeItem('_pendingFormData');
804      sessionStorage.removeItem('_pendingFormUrl');
805    }
806  } catch (e) {
807    console.error('[forms] Error restoring form data:', e);
808  }
809  
810  try {
811    const { UnifiedFileUploader } = await import('/sys-components-UnifiedFileUploader.js?v=' + Date.now());
812    window.unifiedUploader = new UnifiedFileUploader();
813    window.unifiedUploader.init();
814  } catch (e) {
815    console.error('Failed to init uploader:', e);
816  }
817}
818// Normal page load: wait for DOMContentLoaded. Popup: the form is injected after
819// DOMContentLoaded already fired, so run immediately when the DOM is already
820// parsed -- otherwise the uploader (image cropper) never initializes in the
821// modal. The earlier empty-box / stuck-button symptom was FontAwesome 4 vs 6
822// (the FA6 spinner glyph was missing); the form now injects FA6, so the cropper
823// controls and spinner render and the uploader completes normally here too.
824if (document.readyState === 'loading') {
825  document.addEventListener('DOMContentLoaded', cmsInitFormUploader);
826} else {
827  cmsInitFormUploader();
828}
829
830async function unifiedSubmitForm(event) {
831  console.log('[forms] unifiedSubmitForm called v5 - 2026-01-26 Enhanced spinner');
832  if (event) { event.preventDefault(); event.stopPropagation(); }
833  
834  // Use event.target if available (most reliable)
835  const form = (event && event.target && event.target.tagName === 'FORM') ? event.target : (document.getElementById('CustomForm') || document.querySelector('form'));
836
837  // Enforce native constraint validation (required / type=email / pattern ...)
838  // BEFORE anything else. This handler preventDefault()s the native submit on its
839  // first line, which also bypasses the browser's own required-field check -- so
840  // without this call a blank required field would fetch-POST straight through
841  // (legacy custom forms had no client-side guard at all). reportValidity() focuses
842  // the first invalid field, shows the browser's validation bubble, and bails.
843  // Runs before the submit button is put into its spinner/disabled state so a
844  // blocked submit leaves the form fully usable.
845  if (form && typeof form.reportValidity === 'function' && !form.reportValidity()) {
846    return false;
847  }
848
849  // Ensure any processed files are in the form before submission
850  if (window.unifiedUploader && window.unifiedUploader.ensureProcessedFilesInForm) {
851    window.unifiedUploader.ensureProcessedFilesInForm();
852  }
853  
854  const btn = form.querySelector('button[type="submit"], #SUBMIT1, input[type="submit"]');
855  const originalHtml = btn ? (btn.tagName === 'INPUT' ? btn.value : btn.innerHTML) : 'Submit';
856  
857  // Show loading state with spinner
858  if (btn) {
859    btn.disabled = true;
860    if (btn.tagName === 'INPUT') {
861      // Inputs can't hold an inline span, so use the class-based ::after spinner.
862      btn.classList.add('btn-loading');
863      btn.value = '  Processing...';
864      btn.style.paddingLeft = '35px';
865    } else {
866      // Buttons: the inline ring span is the single spinner. Do NOT add the
867      // btn-loading class here -- button.btn-loading::after renders a SECOND
868      // spinner, which produced two spinning icons at once on submit. Keep the
869      // disabled look via inline styles instead (robust even in popups where the
870      // injected spinner CSS may be absent).
871      btn.style.pointerEvents = 'none';
872      btn.style.opacity = '0.85';
873      btn.innerHTML = '<span class="form-spinner-ring"></span> Processing...';
874    }
875  }
876  
877  // Single spinner only: the disabled submit button already shows a spinner
878  // ("Processing..."), so we intentionally do NOT add the full-form overlay
879  // spinner here -- it produced two spinning icons at once (most visible in the
880  // popup). overlay stays null; the cleanup checks below are guarded for it.
881  let overlay = null;
882  try {
883    // Mint a fresh reCAPTCHA token before reading the form. On popup-rendered
884    // forms the on-load mint may not have fired yet (api.js was injected only
885    // moments ago by sys-popup's executeScripts), so without this the hidden
886    // token field is still empty and the server blocks as recaptcha_missing.
887    if (typeof window.cmsMintCaptchaToken === 'function') {
888      try { await window.cmsMintCaptchaToken(); } catch (e) {}
889    }
890    const formData = new FormData(form);
891
892    // Capture display TEXT for all select, radio, and checkbox elements
893    // Add as fieldname_text so email shows human-readable labels instead of raw values
894    form.querySelectorAll('select').forEach(function(select) {
895      if (select.name && select.selectedIndex >= 0) {
896        if (select.multiple) {
897          // Multi-select: join the text of EVERY selected option, not just the first
898          var multiTexts = Array.prototype.map.call(select.selectedOptions, function(o) { return o.text; });
899          formData.append(select.name + '_text', multiTexts.join(', '));
900        } else {
901          const selectedOption = select.options[select.selectedIndex];
902          if (selectedOption) {
903            formData.append(select.name + '_text', selectedOption.text);
904          }
905        }
906      }
907    });
908    // Capture checked radio button labels
909    var radiosDone = {};
910    form.querySelectorAll('input[type="radio"]:checked').forEach(function(radio) {
911      if (radio.name && !radiosDone[radio.name]) {
912        radiosDone[radio.name] = true;
913        var label = form.querySelector('label[for="' + radio.id + '"]');
914        if (label) {
915          formData.append(radio.name + '_text', label.textContent.trim());
916        }
917      }
918    });
919    // Capture checked checkbox labels
920    var checkboxTexts = {};
921    form.querySelectorAll('input[type="checkbox"]:checked').forEach(function(cb) {
922      if (cb.name) {
923        var cleanName = cb.name.replace('[]', '');
924        var label = form.querySelector('label[for="' + cb.id + '"]');
925        var text = label ? label.textContent.trim() : (cb.value === 'on' ? 'Yes' : cb.value);
926        if (!checkboxTexts[cleanName]) checkboxTexts[cleanName] = [];
927        checkboxTexts[cleanName].push(text);
928      }
929    });
930    Object.keys(checkboxTexts).forEach(function(name) {
931      formData.append(name + '_text', checkboxTexts[name].join(', '));
932    });
933    const response = await fetch(cmsResolvePostUrl(form), {
934      method: 'POST',
935      body: formData,
936      headers: { 'Accept': 'application/json' }
937    });
938    const result = await response.json();
939    console.log('[forms] v3 Server response:', JSON.stringify(result));
940    console.log('[forms] v3 Keys in result:', Object.keys(result).join(', '));
941    console.log('[forms] v3 requiresCardInput:', result.requiresCardInput, 'clientConfig:', !!result.clientConfig);
942    console.log('[forms] v3 isPaymentRedirect:', result.isPaymentRedirect, 'redirectUrl:', result.redirectUrl);
943    if (result.success) {
944      // PRIORITY 0: Check if payment is already complete (Authorize.net Accept.js)
945      if (result.isPaymentComplete) {
946        console.log('[forms] Payment complete! Transaction:', result.transactionId);
947
948        // Auto-login: set subscriber_token cookie if provided
949        if (result.subscriberToken) {
950          try {
951            var tokenPayload = JSON.parse(atob(result.subscriberToken.split('.')[1]));
952            var maxAge = tokenPayload.exp ? (tokenPayload.exp - Math.floor(Date.now() / 1000)) : (30 * 24 * 60 * 60);
953            document.cookie = 'subscriber_token=' + encodeURIComponent(result.subscriberToken) + '; path=/; max-age=' + maxAge + '; SameSite=Lax';
954            console.log('[forms] Auto-login: subscriber_token cookie set');
955          } catch (e) {
956            console.warn('[forms] Auto-login: failed to set cookie', e);
957          }
958        }
959
960        // Build success message with custom confirm message if available
961        let successMsg = 'Payment successful! Transaction ID: ' + result.transactionId;
962        if (result.confirmMessage) {
963          successMsg = result.confirmMessage + '<br><br><small>Transaction ID: ' + result.transactionId + '</small>';
964        }
965
966        // Redirect back to article if return URL is available (from paywall subscribe flow)
967        var returnUrl = null;
968        try {
969          returnUrl = localStorage.getItem('subscriber_return_url');
970        } catch (e) { /* ignore */ }
971        // Also check URL query param
972        if (!returnUrl) {
973          try {
974            var params = new URLSearchParams(window.location.search);
975            returnUrl = params.get('return_url');
976          } catch (e) { /* ignore */ }
977        }
978
979        if (returnUrl) {
980          try { localStorage.removeItem('subscriber_return_url'); } catch (e) { /* ignore */ }
981          // Show brief success message then redirect
982          successMsg += '<p style="margin-top:15px;color:#666;">Redirecting you back to your article...</p>';
983          showFormMessage(successMsg, true);
984          setTimeout(function() { window.location.href = returnUrl; }, 2000);
985        } else {
986          showFormMessage(successMsg, true);
987        }
988        form.reset();
989        return;
990      }
991      
992      // PRIORITY 1: Check for payment redirect FIRST (Stripe Checkout)
993      // Payment forms MUST redirect to the payment gateway before showing any message
994      if (result.isPaymentRedirect && result.redirectUrl) {
995        console.log('[forms] Payment redirect detected, redirecting to:', result.redirectUrl);
996        window.location.href = result.redirectUrl;
997        return;
998      }
999      
1000      // PRIORITY 1.5: Check if card input is required (Authorize.net Accept.js)
1001      console.log('[forms] v3 Checking requiresCardInput:', result.requiresCardInput, 'clientConfig exists:', !!result.clientConfig);
1002      if (result.requiresCardInput && result.clientConfig) {
1003        console.log('[forms] v3 Card input required! Showing Accept.js modal...');
1004        try {
1005          await showAcceptJsCardInput(result.clientConfig, form, formData, result);
1006          console.log('[forms] v3 showAcceptJsCardInput completed');
1007        } catch (modalError) {
1008          console.error('[forms] v3 showAcceptJsCardInput error:', modalError);
1009        }
1010        return;
1011      }
1012      
1013      // PRIORITY 2: Check for regular redirect URL
1014      if (result.redirectUrl && result.redirectUrl !== window.location.href) {
1015        console.log('[forms] Redirecting to:', result.redirectUrl);
1016        window.location.href = result.redirectUrl;
1017        return;
1018      }
1019      
1020      // PRIORITY 3: Show thanks content (email_confirm_message, etc.)
1021      if (result.thanksContent) {
1022        // CRITICAL: Scroll to top BEFORE replacing content to avoid layout shifts
1023        window.scrollTo({ top: 0, behavior: 'smooth' });
1024        
1025        // Check if standalone thank you page is requested
1026        if (result.standaloneThankYou) {
1027          // Replace entire page content with standalone thank you page
1028          document.body.innerHTML = '<div style="min-height:100vh;display:flex;align-items:center;justify-content:center;background:#f5f5f5;padding:20px;"><div style="max-width:800px;width:100%;background:#fff;border-radius:12px;box-shadow:0 4px 20px rgba(0,0,0,0.1);padding:40px;">' + result.thanksContent + '</div></div>';
1029          window.scrollTo({ top: 0, behavior: 'instant' });
1030          return;
1031        }
1032        
1033        // Replace form content with thanks message (embedded mode)
1034        form.innerHTML = '<div id="form-thanks-message" style="padding:40px;text-align:center;min-height:200px">' + result.thanksContent + '</div>';
1035        
1036        // CRITICAL: Force scroll to top using multiple methods for maximum compatibility
1037        const forceScrollToTop = () => {
1038          console.log('[forms] Executing robust scroll-to-top');
1039          
1040          // 1. Standard window scroll
1041          window.scrollTo({ top: 0, behavior: 'smooth' });
1042          
1043          // 2. Element-based scroll (most reliable when embedded)
1044          const thanksEl = document.getElementById('form-thanks-message');
1045          if (thanksEl) {
1046            thanksEl.scrollIntoView({ behavior: 'smooth', block: 'start' });
1047          }
1048          
1049          // 3. Recursive parent scroll (for nested scrollable containers)
1050          try {
1051            let parent = form.parentElement;
1052            while (parent && parent !== document.body) {
1053              if (parent.scrollHeight > parent.clientHeight) {
1054                console.log('[forms] Resetting parent scroll:', parent);
1055                parent.scrollTop = 0;
1056              }
1057              parent = parent.parentElement;
1058            }
1059          } catch (e) {}
1060          
1061          // 4. Fallback for older/mobile browsers
1062          document.body.scrollTop = 0;
1063          document.documentElement.scrollTop = 0;
1064          
1065          // 5. Hash trick to force top
1066          if (window.location.hash !== '') {
1067            window.location.hash = '';
1068          }
1069          
1070          // 6. If inside iframe, try to scroll parent window
1071          try {
1072            if (window.parent && window.parent !== window) {
1073              window.parent.scrollTo({ top: 0, behavior: 'smooth' });
1074            }
1075          } catch (e) {}
1076        };
1077
1078        // Execute in multiple phases to ensure layout is settled
1079        forceScrollToTop();
1080        requestAnimationFrame(forceScrollToTop);
1081        setTimeout(forceScrollToTop, 100);
1082        setTimeout(forceScrollToTop, 500);
1083        setTimeout(forceScrollToTop, 1000);
1084        setTimeout(forceScrollToTop, 2000);
1085      } else {
1086        // Default: redirect to home
1087        window.location.href = "/";
1088      }
1089    } else {
1090      // Remove overlay and reset button on error
1091      if (overlay && overlay.parentNode) overlay.remove();
1092      showFormMessage(result.error || "Submission failed");
1093      if (btn) {
1094        btn.disabled = false;
1095        btn.classList.remove('btn-loading');
1096        btn.style.paddingLeft = '';
1097        btn.style.pointerEvents = '';
1098        btn.style.opacity = '';
1099        if (btn.tagName === 'INPUT') {
1100          btn.value = originalHtml;
1101        } else {
1102          btn.innerHTML = originalHtml;
1103        }
1104      }
1105    }
1106  } catch (e) {
1107    console.error(e);
1108    // Remove overlay and reset button on network error
1109    if (overlay && overlay.parentNode) overlay.remove();
1110    showFormMessage("Network error. Please check your connection and try again.");
1111    if (btn) {
1112      btn.disabled = false;
1113      btn.classList.remove('btn-loading');
1114      btn.style.paddingLeft = '';
1115      btn.style.pointerEvents = '';
1116      btn.style.opacity = '';
1117      if (btn.tagName === 'INPUT') {
1118        btn.value = originalHtml;
1119      } else {
1120        btn.innerHTML = originalHtml;
1121      }
1122    }
1123  }
1124  return false;
1125}
1126
1127// ========== STRIPE PAYMENT SUCCESS HANDLER ==========
1128// Check for payment success redirect from Stripe on page load
1129(function checkStripePaymentSuccess() {
1130  const urlParams = new URLSearchParams(window.location.search);
1131  const paymentStatus = urlParams.get('payment');
1132  const sessionId = urlParams.get('session_id');
1133  const returnUrl = urlParams.get('return_url');
1134  
1135  if (paymentStatus === 'success' && sessionId) {
1136    console.log('[forms] Detected Stripe payment success, session:', sessionId);
1137    console.log('[forms] Return URL:', returnUrl || 'none');
1138    
1139    // Show loading message
1140    showFormMessage('Processing payment confirmation...');
1141    
1142    // Fetch session details from our API
1143    fetch((typeof __CMS_BASE_PATH !== 'undefined' ? __CMS_BASE_PATH : '') + '/api/payment/session/' + encodeURIComponent(sessionId))
1144      .then(response => response.json())
1145      .then(data => {
1146        if (data.success) {
1147          const amount = data.amount ? '$' + parseFloat(data.amount).toFixed(2) : '';
1148          const txId = data.transaction_id || sessionId;
1149          
1150          // Build success message
1151          let msg = '<div style="margin-bottom:15px;font-size:16px;">Your subscription has been activated!</div>';
1152          msg += '<div style="margin-bottom:15px;font-size:18px;font-weight:600;">Thank you for subscribing.</div>';
1153          if (amount) {
1154            msg += '<div style="margin-bottom:10px;color:#666;">Amount: <strong>' + amount + '</strong></div>';
1155          }
1156          if (data.description && data.description !== 'Payment') {
1157            msg += '<div style="margin-bottom:10px;color:#666;">Plan: <strong>' + data.description + '</strong></div>';
1158          }
1159          msg += '<div style="background:#e8f5e9;padding:10px;border-radius:4px;margin-top:15px;"><strong>Transaction ID:</strong> <span style="font-family:monospace;user-select:all;">' + txId + '</span></div>';
1160          
1161          // If there's a return URL, add redirect notice
1162          if (returnUrl) {
1163            msg += '<div style="margin-top:15px;color:#666;font-size:14px;">Redirecting you back to your article in 3 seconds...</div>';
1164          }
1165          
1166          showFormMessage(msg, true);
1167          
1168          // Clean up URL (remove query params)
1169          if (window.history && window.history.replaceState) {
1170            const cleanUrl = window.location.pathname;
1171            window.history.replaceState({}, document.title, cleanUrl);
1172          }
1173          
1174          // Redirect to return URL after 3 seconds (back to the article)
1175          if (returnUrl) {
1176            setTimeout(function() {
1177              // Ensure return URL is same origin for security
1178              try {
1179                const returnUrlObj = new URL(returnUrl, window.location.origin);
1180                if (returnUrlObj.origin === window.location.origin) {
1181                  window.location.href = returnUrl;
1182                }
1183              } catch (e) {
1184                // If it starts with /, treat as relative URL
1185                if (returnUrl.startsWith('/')) {
1186                  window.location.href = returnUrl;
1187                }
1188              }
1189            }, 3000);
1190          }
1191        } else {
1192          showFormMessage('Payment was processed but we could not retrieve details. Your payment was successful.', true);
1193          // Still redirect if return URL exists
1194          if (returnUrl) {
1195            setTimeout(function() { window.location.href = returnUrl; }, 3000);
1196          }
1197        }
1198      })
1199      .catch(err => {
1200        console.error('[forms] Error fetching session:', err);
1201        // Still show success even if API fails - payment went through
1202        showFormMessage('<div style="margin-bottom:15px;">Payment successful!</div><div style="background:#e8f5e9;padding:10px;border-radius:4px;"><strong>Session ID:</strong> <span style="font-family:monospace;">' + sessionId + '</span></div>', true);
1203        // Still redirect if return URL exists
1204        if (returnUrl) {
1205          setTimeout(function() { window.location.href = returnUrl; }, 3000);
1206        }
1207      });
1208  } else if (paymentStatus === 'cancelled') {
1209    showFormMessage('Payment was cancelled. You can try again when ready.');
1210    // Clean up URL
1211    if (window.history && window.history.replaceState) {
1212      const cleanUrl = window.location.pathname;
1213      window.history.replaceState({}, document.title, cleanUrl);
1214    }
1215  }
1216})();
1217</script>
vendor: 1 bytes, line 1217
1217
1218<script>
1219// Form data restoration (runs on page load) - reads from COOKIE
1220(function() {
1221  console.log('[forms] Restoration script running...');
1222  console.log('[forms] Current cookies:', document.cookie);
1223  try {
1224    var cookies = document.cookie.split('; ');
1225    var pendingCookie = null;
1226    for (var i = 0; i < cookies.length; i++) {
1227      if (cookies[i].indexOf('_pendingFormData=') === 0) {
1228        pendingCookie = cookies[i];
1229        break;
1230      }
1231    }
1232    console.log('[forms] Found pending cookie:', !!pendingCookie);
1233    if (pendingCookie) {
1234      var cookieValue = pendingCookie.substring('_pendingFormData='.length);
1235      console.log('[forms] Cookie value length:', cookieValue.length);
1236      var formData = JSON.parse(decodeURIComponent(cookieValue));
1237      console.log('[forms] Parsed form data:', Object.keys(formData));
1238      var form = document.getElementById('CustomForm') || document.querySelector('form');
1239      console.log('[forms] Found form:', !!form, form ? form.id : 'no id');
1240      if (form) {
1241        Object.keys(formData).forEach(function(key) {
1242          var value = formData[key];
1243          if (value && typeof value === 'string') {
1244            var field = form.querySelector('[name="' + key + '"]');
1245            if (field) {
1246              console.log('[forms] Restoring field:', key, '=', value.substring(0, 20));
1247              if (field.tagName === 'SELECT') {
1248                field.value = value;
1249              } else if (field.type !== 'file' && field.type !== 'hidden') {
1250                field.value = value;
1251              }
1252              // Trigger change event for floating labels
1253              field.dispatchEvent(new Event('input', { bubbles: true }));
1254              field.dispatchEvent(new Event('change', { bubbles: true }));
1255            }
1256          }
1257        });
1258        console.log('[forms] Form data restored successfully');
1259      }
1260      // Clear the cookies
1261      document.cookie = '_pendingFormData=; path=/; max-age=0';
1262      document.cookie = '_pendingFormUrl=; path=/; max-age=0';
1263      console.log('[forms] Cookies cleared');
1264    }
1265  } catch (e) {
1266    console.error('[forms] Error restoring form data:', e);
1267  }
1268})();
1269</script>
vendor: 1 bytes, line 1269
1269
1270<script>
1271(function(){
1272  document.addEventListener('submit',function(e){
1273    var form=e.target;if(!form||form.tagName!=='FORM')return;
1274    var btn=form.querySelector('button[type="submit"],input[type="submit"],.survey-btn-submit,#SUBMIT1');
1275    if(!btn||btn.disabled)return;
1276    btn.disabled=true;
1277    if(btn.tagName==='INPUT'){btn.value='  Submitting...';}
1278    else{btn.innerHTML='<span class="form-submit-spinner"></span> Submitting...';}
1279  },true);
1280})();
1281</script>
1281<script>(function(){function c(){var b=a.contentDocument||(a.contentWindow&&a.contentWindow.document);if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'a40de2fd2d09071e',t:'MTc5MDM3OTc2MA=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script>
1281</body>
1282</html></div>
1283
1284
1285
1286<section class="w-100 mb-3 mt-5">
1287<div class="label w-100 mb-2">
1288<div class="inp_custom">
1289<div class="formdivider formdivider_custom" style="border-bottom: 2px solid #343a40;">
1290<span class="text-white d-inline-block fw-bold bg-dark px-3 py-2">Contact Us</span>
1291</div>
1292</div>
1293</div>
1294</section>
1295
1296
1297
1298<section class="w-96 mb-3" style="margin-left:2%" data-bs-toggle="tooltip" data-bs-placement="auto" title="">
1299<div class="input w-100 form-floating">
1300<INPUT NAME="Name:" VALUE="" id="Name:"  maxlength="" placeholder=" " type="Text"  class="formfieldinput formfieldinput_custom form-control" required>
1301<label for="Name:" class="form-label text-muted">* Name:</label>
1302</div>
1303</section>
1304 
1305
1306
1307
1308<section class="w-96 mb-3" style="margin-left:2%" data-bs-toggle="tooltip" data-bs-placement="auto" title="">
1309<div class="input w-100 form-floating">
1310<INPUT NAME="Address:" VALUE="" id="Address:"  maxlength="" placeholder=" " type="Text"  class="formfieldinput formfieldinput_custom form-control" required>
1311<label for="Address:" class="form-label text-muted">* Address:</label>
1312</div>
1313</section>
1314 
1315
1316
1317
1318<section class="w-96 mb-3" style="margin-left:2%" data-bs-toggle="tooltip" data-bs-placement="auto" title="">
1319<div class="input w-100 form-floating">
1320<INPUT NAME="City:" VALUE="" id="City:"  maxlength="" placeholder=" " type="Text"  class="formfieldinput formfieldinput_custom form-control" required>
1321<label for="City:" class="form-label text-muted">* City:</label>
1322</div>
1323</section>
1324 
1325
1326
1327
1328<section class="w-96 mb-3" style="margin-left:2%" data-bs-toggle="tooltip" data-bs-placement="auto" title="">
1329<div class="input w-100 form-floating">
1330<INPUT NAME="State:" VALUE="" id="State:"  maxlength="" placeholder=" " type="Text"  class="formfieldinput formfieldinput_custom form-control" required>
1331<label for="State:" class="form-label text-muted">* State:</label>
1332</div>
1333</section>
1334 
1335
1336
1337
1338<section class="w-96 mb-3" style="margin-left:2%" data-bs-toggle="tooltip" data-bs-placement="auto" title="">
1339<div class="input w-100 form-floating">
1340<INPUT NAME="Zip:" VALUE="" id="Zip:"  maxlength="" placeholder=" " type="Text"  class="formfieldinput formfieldinput_custom form-control" required>
1341<label for="Zip:" class="form-label text-muted">* Zip:</label>
1342</div>
1343</section>
1344 
1345
1346
1347
1348<section class="w-96 mb-3" style="margin-left:2%" data-bs-toggle="tooltip" data-bs-placement="auto" title="">
1349<div class="input w-100 form-floating">
1350<INPUT NAME="Daytime_phone:" VALUE="" id="Daytime_phone:"  maxlength="" placeholder=" " type="Text"  class="formfieldinput formfieldinput_custom form-control" required>
1351<label for="Daytime_phone:" class="form-label text-muted">* Daytime phone:</label>
1352</div>
1353</section>
1354 
1355
1356
1357
1358<section class="w-96 mb-3" style="margin-left:2%" data-bs-toggle="tooltip" data-bs-placement="auto" title="">
1359<div class="input w-100 form-floating">
1360<INPUT NAME="Email_Address:" VALUE="" id="Email_Address:"  maxlength="" placeholder=" " type="Email"  class="formfieldinput formfieldinput_custom form-control" required>
1361<label for="Email_Address:" class="form-label text-muted">* Email Address:</label>
1362</div>
1363</section>
1364 
1365
1366
1367
1368<section class="w-96 mb-3" style="margin-left:2%" data-bs-toggle="tooltip" data-bs-placement="auto" title="">
1369<div class="input w-100 form-floating">
1370<textarea  name="Write_your_comments_here:" id="Write_your_comments_here:" placeholder=" " class="formfieldinput formfieldinput_custom form-control" required rows="3" style="min-height: 120px !important; height: 120px !important; line-height: 1.5 !important; display: block !important; width: 100% !important; padding-top: 1.5rem !important;; min-height: 120px !important; height: 120px !important;" rows="3"></textarea>
1371<label for="Write_your_comments_here:" class="form-label text-muted">* Write your comments here:</label>
1372</div>
1373</section>
1374 
1375
1376
1377
1378</fieldset>
1379<footer class="text-center mt-3">
1380<button class="button btn btn-primary shadow text-capitalize" id="SUBMIT1" type="submit" onclick="document.getElementById('CustomForm').classList.add('was-validated');"><span class="py-1 px-3 d-inline-block">submit</span></button>
1381<i id="cus-form-button-loader" class='fa fa-circle-o-notch fa-spin fast-spin fs-1 text-primary'></i>
1382</footer>
1383<div class="system_text footer_text mt-5 mb-3 text-center"><html>
1384    <head>
1385        <link href="asp.css" rel="stylesheet">
1386    </head>
1387    <body >
1388        <div align="left">If you would like to contact us in other ways:</div>
1389        <div> </div>
1390        <div>Telephone:  (423) 726-2057</div>
1391        <div>Fax:  (423) 726-2057</div>
1392        <div> </div>
1393        <div>Mail:  TC SPORTS. LLC</div>
1394        <div>          P.O. Box 3385</div>
1395        <div>          Kingsport, TN   37660</div>
1396        <div> </div>
1397        <div>President: Mike Holt  <a href="mailto:[email protected]">[email protected]</a></div>
1398        <div>Advertising & Sales A.B. Clevinger  <a href="mailto:[email protected]">[email protected]</a></div>
1399        <div>Media Technology & Publishing  Steve Wilmoth  <a href="mailto:[email protected]">[email protected]</a></div>
1400        <div> </div>
1401    </body>
1402</html></div>
1403</form>
1404</div>
1405<script language="javascript">GetGoogleAnalytics('FORM:ContactUs');</script>
1405
1406<!-- Tooltip -->
1407<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js" integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM" crossorigin="anonymous"></script>
vendor: 2 bytes, line 1407
1407
1408<script>
1409var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'))
1410var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {
1411return new bootstrap.Tooltip(tooltipTriggerEl)
1412})
1413</script>
1413
1414<!-- /Tooltip -->
1415</div>
1416</div></div>
1417                            <div class="col-lg-12">  <div data-cms-block="highlight-1" data-cms-block-label="Highlights 1" data-cms-el="highlight" data-cms-highlight="1">
1417<script type="text/javascript" language="JavaScript">GetHighlights1();</script>
1417</div></div>
1418 
1419                            <div class="col-lg-12">  <div data-cms-block="highlight-4" data-cms-block-label="Highlights 4" data-cms-el="highlight" data-cms-highlight="4">
1419<script type="text/javascript" language="JavaScript">GetHighlights4();</script>
1419</div></div>
1420                            <div class="col-lg-12">  <div data-cms-block="highlight-6" data-cms-block-label="Highlights 6" data-cms-el="highlight" data-cms-highlight="6">
1420<script type="text/javascript" language="JavaScript">GetHighlights6();</script>
1420</div></div>
1421                            <div class="col-lg-12">  <div data-cms-block="highlight-7" data-cms-block-label="Highlights 7" data-cms-el="highlight" data-cms-highlight="7">
1421<script type="text/javascript" language="JavaScript">GetHighlights7();</script>
1421</div></div>
1422                            <div class="col-lg-12">  <div data-cms-block="highlight-9" data-cms-block-label="Highlights 9" data-cms-el="highlight" data-cms-highlight="9">
1422<script type="text/javascript" language="JavaScript">GetHighlights9();</script>
1422</div></div>
1423                            <div class="col-lg-12">  
1423<script type="text/javascript" language="JavaScript" src="/articlegroup174.js?v=1790346378"></script>
1423<script type="text/javascript" language="JavaScript">GetArticleGroup174();</script>
1423</div>
1424
1425                             <div class="col-lg-12">  
1425<script type="text/javascript" language="JavaScript" src="/articlegroup104.js?v=1790346378"></script>
1425<script type="text/javascript" language="JavaScript">GetArticleGroup104();</script>
1425</div>
1426
1427   <div class="col-lg-12">  
1427<script type="text/javascript" language="JavaScript" src="/articlegroup105.js?v=1790346378"></script>
1427<script type="text/javascript" language="JavaScript">GetArticleGroup105();</script>
1427</div>
1428<div class="col-lg-12">
1429<div class="row border-top">
1430<div class="col-lg-12 mb-2"><div data-cms-block="section-file-585" data-cms-block-label="Section 585" data-cms-el="section" data-cms-section="585"><div class="cus-videogallery-121">
1431 <p class="cus-121-label my-2 position-relative"><span class="text-dark fw-bold text-uppercase border-top border-4 border-red position-relative z-index-2">VIDEO GALLERY</span></p>
1432 <div class="row mx-0 hp-parent">
1433 
1434 <div class="col-sm-6 col-md-4 px-1 mb-2">
1435 <a class="cus-videogallery-121-link position-relative d-block text-decoration-none border rounded overflow-hidden" href="javascript:void(0);" onclick="OpenYouTube('qYAjcpWb-t8');">
1436 <div class="ratio-16-9">
1437 <div class="img-content cus-dark-img">
1438 <img class="cus-videogallery-121-img img-fluid lazy loaded" src="https://img.youtube.com/vi/qYAjcpWb-t8/hqdefault.jpg" data-src="/no-image.png" alt="LIVE -- Dobyns-Bennett vs West Ridge" data-was-processed="true" loading="lazy">
1439 </div>
1440 </div>
1441 <span class="cus-videogallery-121-play position-absolute translate-middle top-50 start-50"><i class="fa fa-play fs-1 text-white text-shadow-1" aria-hidden="true"></i></span>
1442 <p class="cus-videogallery-121-heading mb-0 bg-dark text-white p-2 fs-6 lh-lg fw-bold" data-bs-toggle="tooltip" data-bs-placement="bottom" title="LIVE -- Dobyns-Bennett vs West Ridge"><span class="line-1">LIVE -- Dobyns-Bennett vs West Ridge</span></p>
1443 </a>
1444 </div>
1445
1446 <div class="col-sm-6 col-md-4 px-1 mb-2">
1447 <a class="cus-videogallery-121-link position-relative d-block text-decoration-none border rounded overflow-hidden" href="javascript:void(0);" onclick="OpenYouTube('Z-BqSlN57bk');">
1448 <div class="ratio-16-9">
1449 <div class="img-content cus-dark-img">
1450 <img class="cus-videogallery-121-img img-fluid lazy loaded" src="https://img.youtube.com/vi/Z-BqSlN57bk/hqdefault.jpg" data-src="/no-image.png" alt="Announcing the Field at the 2026 Classic at Tennessee High" data-was-processed="true" loading="lazy">
1451 </div>
1452 </div>
1453 <span class="cus-videogallery-121-play position-absolute translate-middle top-50 start-50"><i class="fa fa-play fs-1 text-white text-shadow-1" aria-hidden="true"></i></span>
1454 <p class="cus-videogallery-121-heading mb-0 bg-dark text-white p-2 fs-6 lh-lg fw-bold" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Announcing the Field at the 2026 Classic at Tennessee High"><span class="line-1">Announcing the Field at the 2026 Classic at Tennessee High</span></p>
1455 </a>
1456 </div>
1457
1458 <div class="col-sm-6 col-md-4 px-1 mb-2">
1459 <a class="cus-videogallery-121-link position-relative d-block text-decoration-none border rounded overflow-hidden" href="javascript:void(0);" onclick="OpenYouTube('EPvpooKUxW4');">
1460 <div class="ratio-16-9">
1461 <div class="img-content cus-dark-img">
1462 <img class="cus-videogallery-121-img img-fluid lazy loaded" src="https://img.youtube.com/vi/EPvpooKUxW4/hqdefault.jpg" data-src="/no-image.png" alt="I & TRI Sports Podcast - Episode 1.2" data-was-processed="true" loading="lazy">
1463 </div>
1464 </div>
1465 <span class="cus-videogallery-121-play position-absolute translate-middle top-50 start-50"><i class="fa fa-play fs-1 text-white text-shadow-1" aria-hidden="true"></i></span>
1466 <p class="cus-videogallery-121-heading mb-0 bg-dark text-white p-2 fs-6 lh-lg fw-bold" data-bs-toggle="tooltip" data-bs-placement="bottom" title="I & TRI Sports Podcast - Episode 1.2"><span class="line-1">I & TRI Sports Podcast - Episode 1.2</span></p>
1467 </a>
1468 </div>
1469
1470 <div class="col-sm-6 col-md-4 px-1 mb-2">
1471 <a class="cus-videogallery-121-link position-relative d-block text-decoration-none border rounded overflow-hidden" href="javascript:void(0);" onclick="OpenYouTube('njT9nKwlU6A');">
1472 <div class="ratio-16-9">
1473 <div class="img-content cus-dark-img">
1474 <img class="cus-videogallery-121-img img-fluid lazy loaded" src="https://img.youtube.com/vi/njT9nKwlU6A/hqdefault.jpg" data-src="/no-image.png" alt="Tennessee vs Kennesaw State Highlights" data-was-processed="true" loading="lazy">
1475 </div>
1476 </div>
1477 <span class="cus-videogallery-121-play position-absolute translate-middle top-50 start-50"><i class="fa fa-play fs-1 text-white text-shadow-1" aria-hidden="true"></i></span>
1478 <p class="cus-videogallery-121-heading mb-0 bg-dark text-white p-2 fs-6 lh-lg fw-bold" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Tennessee vs Kennesaw State Highlights"><span class="line-1">Tennessee vs Kennesaw State Highlights</span></p>
1479 </a>
1480 </div>
1481
1482 <div class="col-sm-6 col-md-4 px-1 mb-2">
1483 <a class="cus-videogallery-121-link position-relative d-block text-decoration-none border rounded overflow-hidden" href="javascript:void(0);" onclick="OpenYouTube('vfQoctW2GNg');">
1484 <div class="ratio-16-9">
1485 <div class="img-content cus-dark-img">
1486 <img class="cus-videogallery-121-img img-fluid lazy loaded" src="https://img.youtube.com/vi/vfQoctW2GNg/hqdefault.jpg" data-src="/no-image.png" alt="2026 WCYB Prep P
1486icks - Week 5" data-was-processed="true" loading="lazy">
1487 </div>
1488 </div>
1489 <span class="cus-videogallery-121-play position-absolute translate-middle top-50 start-50"><i class="fa fa-play fs-1 text-white text-shadow-1" aria-hidden="true"></i></span>
1490 <p class="cus-videogallery-121-heading mb-0 bg-dark text-white p-2 fs-6 lh-lg fw-bold" data-bs-toggle="tooltip" data-bs-placement="bottom" title="2026 WCYB Prep Picks - Week 5"><span class="line-1">2026 WCYB Prep Picks - Week 5</span></p>
1491 </a>
1492 </div>
1493
1494 <div class="col-sm-6 col-md-4 px-1 mb-2">
1495 <a class="cus-videogallery-121-link position-relative d-block text-decoration-none border rounded overflow-hidden" href="javascript:void(0);" onclick="OpenYouTube('NmIbpnhwFWU');">
1496 <div class="ratio-16-9">
1497 <div class="img-content cus-dark-img">
1498 <img class="cus-videogallery-121-img img-fluid lazy loaded" src="https://img.youtube.com/vi/NmIbpnhwFWU/hqdefault.jpg" data-src="/no-image.png" alt="Tennessee vs Georgia Tech Game Highlights" data-was-processed="true" loading="lazy">
1499 </div>
1500 </div>
1501 <span class="cus-videogallery-121-play position-absolute translate-middle top-50 start-50"><i class="fa fa-play fs-1 text-white text-shadow-1" aria-hidden="true"></i></span>
1502 <p class="cus-videogallery-121-heading mb-0 bg-dark text-white p-2 fs-6 lh-lg fw-bold" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Tennessee vs Georgia Tech Game Highlights"><span class="line-1">Tennessee vs Georgia Tech Game Highlights</span></p>
1503 </a>
1504 </div>
1505
1506 <div class="col-sm-6 col-md-4 px-1 mb-2">
1507 <a class="cus-videogallery-121-link position-relative d-block text-decoration-none border rounded overflow-hidden" href="javascript:void(0);" onclick="OpenYouTube('gi5rrQoHtzk');">
1508 <div class="ratio-16-9">
1509 <div class="img-content cus-dark-img">
1510 <img class="cus-videogallery-121-img img-fluid lazy loaded" src="https://img.youtube.com/vi/gi5rrQoHtzk/hqdefault.jpg" data-src="/no-image.png" alt="Dobyns-Bennett vs Oak Ridge - September 11, 2026" data-was-processed="true" loading="lazy">
1511 </div>
1512 </div>
1513 <span class="cus-videogallery-121-play position-absolute translate-middle top-50 start-50"><i class="fa fa-play fs-1 text-white text-shadow-1" aria-hidden="true"></i></span>
1514 <p class="cus-videogallery-121-heading mb-0 bg-dark text-white p-2 fs-6 lh-lg fw-bold" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Dobyns-Bennett vs Oak Ridge - September 11, 2026"><span class="line-1">Dobyns-Bennett vs Oak Ridge - September 11, 2026</span></p>
1515 </a>
1516 </div>
1517
1518 <div class="col-sm-6 col-md-4 px-1 mb-2">
1519 <a class="cus-videogallery-121-link position-relative d-block text-decoration-none border rounded overflow-hidden" href="javascript:void(0);" onclick="OpenYouTube('JBBapq3C4g8');">
1520 <div class="ratio-16-9">
1521 <div class="img-content cus-dark-img">
1522 <img class="cus-videogallery-121-img img-fluid lazy loaded" src="https://img.youtube.com/vi/JBBapq3C4g8/hqdefault.jpg" data-src="/no-image.png" alt="I & TRI Sports Podcast - Episode 1.1" data-was-processed="true" loading="lazy">
1523 </div>
1524 </div>
1525 <span class="cus-videogallery-121-play position-absolute translate-middle top-50 start-50"><i class="fa fa-play fs-1 text-white text-shadow-1" aria-hidden="true"></i></span>
1526 <p class="cus-videogallery-121-heading mb-0 bg-dark text-white p-2 fs-6 lh-lg fw-bold" data-bs-toggle="tooltip" data-bs-placement="bottom" title="I & TRI Sports Podcast - Episode 1.1"><span class="line-1">I & TRI Sports Podcast - Episode 1.1</span></p>
1527 </a>
1528 </div>
1529
1530 <div class="col-sm-6 col-md-4 px-1 mb-2">
1531 <a class="cus-videogallery-121-link position-relative d-block text-decoration-none border rounded overflow-hidden" href="javascript:void(0);" onclick="OpenYouTube('rkSyPfVcWLg');">
1532 <div class="ratio-16-9">
1533 <div class="img-content cus-dark-img">
1534 <img class="cus-videogallery-121-img img-fluid lazy loaded" src="https://img.youtube.com/vi/rkSyPfVcWLg/hqdefault.jpg" data-src="/no-image.png" alt="2026 WCYB Prep Picks - Week 4" data-was-processed="true" loading="lazy">
1535 </div>
1536 </div>
1537 <span class="cus-videogallery-121-play position-absolute translate-middle top-50 start-50"><i class="fa fa-play fs-1 text-white text-shadow-1" aria-hidden="true"></i></span>
1538 <p class="cus-videogallery-121-heading mb-0 bg-dark text-white p-2 fs-6 lh-lg fw-bold" data-bs-toggle="tooltip" data-bs-placement="bottom" title="2026 WCYB Prep P
1538icks - Week 4"><span class="line-1">2026 WCYB Prep Picks - Week 4</span></p>
1539 </a>
1540 </div>
1541
1542 <div class="col-sm-6 col-md-4 px-1 mb-2">
1543 <a class="cus-videogallery-121-link position-relative d-block text-decoration-none border rounded overflow-hidden" href="javascript:void(0);" onclick="OpenYouTube('N660DoL1rBo');">
1544 <div class="ratio-16-9">
1545 <div class="img-content cus-dark-img">
1546 <img class="cus-videogallery-121-img img-fluid lazy loaded" src="https://img.youtube.com/vi/N660DoL1rBo/hqdefault.jpg" data-src="/no-image.png" alt="Tennessee vs Furman Game Highlights" data-was-processed="true" loading="lazy">
1547 </div>
1548 </div>
1549 <span class="cus-videogallery-121-play position-absolute translate-middle top-50 start-50"><i class="fa fa-play fs-1 text-white text-shadow-1" aria-hidden="true"></i></span>
1550 <p class="cus-videogallery-121-heading mb-0 bg-dark text-white p-2 fs-6 lh-lg fw-bold" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Tennessee vs Furman Game Highlights"><span class="line-1">Tennessee vs Furman Game Highlights</span></p>
1551 </a>
1552 </div>
1553
1554 <div class="col-sm-6 col-md-4 px-1 mb-2">
1555 <a class="cus-videogallery-121-link position-relative d-block text-decoration-none border rounded overflow-hidden" href="javascript:void(0);" onclick="OpenYouTube('vRv2F4cAFwU');">
1556 <div class="ratio-16-9">
1557 <div class="img-content cus-dark-img">
1558 <img class="cus-videogallery-121-img img-fluid lazy loaded" src="https://img.youtube.com/vi/vRv2F4cAFwU/hqdefault.jpg" data-src="/no-image.png" alt="2026 WCYB Prep Picks - Week 3" data-was-processed="true" loading="lazy">
1559 </div>
1560 </div>
1561 <span class="cus-videogallery-121-play position-absolute translate-middle top-50 start-50"><i class="fa fa-play fs-1 text-white text-shadow-1" aria-hidden="true"></i></span>
1562 <p class="cus-videogallery-121-heading mb-0 bg-dark text-white p-2 fs-6 lh-lg fw-bold" data-bs-toggle="tooltip" data-bs-placement="bottom" title="2026 WCYB Prep Picks - Week 3"><span class="line-1">2026 WCYB Prep Picks - Week 3</span></p>
1563 </a>
1564 </div>
1565
1566 <div class="col-sm-6 col-md-4 px-1 mb-2">
1567 <a class="cus-videogallery-121-link position-relative d-block text-decoration-none border rounded overflow-hidden" href="javascript:void(0);" onclick="OpenYouTube('-CTbswJgfW0');">
1568 <div class="ratio-16-9">
1569 <div class="img-content cus-dark-img">
1570 <img class="cus-videogallery-121-img img-fluid lazy loaded" src="https://img.youtube.com/vi/-CTbswJgfW0/hqdefault.jpg" data-src="/no-image.png" alt="2026 WCYB Prep Picks - Week 2" data-was-processed="true" loading="lazy">
1571 </div>
1572 </div>
1573 <span class="cus-videogallery-121-play position-absolute translate-middle top-50 start-50"><i class="fa fa-play fs-1 text-white text-shadow-1" aria-hidden="true"></i></span>
1574 <p class="cus-videogallery-121-heading mb-0 bg-dark text-white p-2 fs-6 lh-lg fw-bold" data-bs-toggle="tooltip" data-bs-placement="bottom" title="2026 WCYB Prep Picks - Week 2"><span class="line-1">2026 WCYB Prep Picks - Week 2</span></p>
1575 </a>
1576 </div>
1577
1578 <div class="col-sm-6 col-md-4 px-1 mb-2">
1579 <a class="cus-videogallery-121-link position-relative d-block text-decoration-none border rounded overflow-hidden" href="javascript:void(0);" onclick="OpenYouTube('3Ln7Okj4Sro');">
1580 <div class="ratio-16-9">
1581 <div class="img-content cus-dark-img">
1582 <img class="cus-videogallery-121-img img-fluid lazy loaded" src="https://img.youtube.com/vi/3Ln7Okj4Sro/hqdefault.jpg" data-src="/no-image.png" alt="Dolly Parton - "He's Alive"" data-was-processed="true" loading="lazy">
1583 </div>
1584 </div>
1585 <span class="cus-videogallery-121-play position-absolute translate-middle top-50 start-50"><i class="fa fa-play fs-1 text-white text-shadow-1" aria-hidden="true"></i></span>
1586 <p class="cus-videogallery-121-heading mb-0 bg-dark text-white p-2 fs-6 lh-lg fw-bold" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Dolly Parton - "He's Alive""><span class="line-1">Dolly Parton - "He's Alive"</span></p>
1587 </a>
1588 </div>
1589
1590 <div class="col-sm-6 col-md-4 px-1 mb-2">
1591 <a class="cus-videogallery-121-link position-relative d-block text-decoration-none border rounded overflow-hidden" href="javascript:void(0);" onclick="OpenYouTube('e2qvHyFVm20');">
1592 <div class="ratio-16-9">
1593 <div class="img-content cus-dark-img">
1594 <img class="cus-videogallery-121-img img-fluid lazy loaded" src="https://img.youtube.com/vi/e2qvHyFVm20/hqdefault.jpg" data-src="/no-image.png" alt="Dolly Parton - "Southern Accents"" data-was-processed="true" loading="lazy">
1595 </div>
1596 </div>
1597 <span class="cus-videogallery-121-play position-absolute translate-middle top-50 start-50"><i class="fa fa-play fs-1 text-white text-shadow-1" aria-hidden="true"></i></span>
1598 <p class="cus-videogallery-121-heading mb-0 bg-dark text-white p-2 fs-6 lh-lg fw-bold" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Dolly Parton - "Southern Accents""><span class="line-1">Dolly Parton - "Southern Accents"</span></p>
1599 </a>
1600 </div>
1601
1602 <div class="col-sm-6 col-md-4 px-1 mb-2">
1603 <a class="cus-videogallery-121-link position-relative d-block text-decoration-none border rounded overflow-hidden" href="javascript:void(0);" onclick="OpenYouTube('_EA7WrDt3Sc');">
1604 <div class="ratio-16-9">
1605 <div class="img-content cus-dark-img">
1606 <img class="cus-videogallery-121-img img-fluid lazy loaded" src="https://img.youtube.com/vi/_EA7WrDt3Sc/hqdefault.jpg" data-src="/no-image.png" alt="Dolly Parton - "Rocky Top Tennessee" @ Neyland Stadium" data-was-processed="true" loading="lazy">
1607 </div>
1608 </div>
1609 <span class="cus-videogallery-121-play position-absolute translate-middle top-50 start-50"><i class="fa fa-play fs-1 text-white text-shadow-1" aria-hidden="true"></i></span>
1610 <p class="cus-videogallery-121-heading mb-0 bg-dark text-white p-2 fs-6 lh-lg fw-bold" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Dolly Parton - "Rocky Top Tennessee" @ Neyland Stadium"><span class="line-1">Dolly Parton - "Rocky Top Tennessee" @ Neyland Stadium</span></p>
1611 </a>
1612 </div>
1613
1614 <div class="col-sm-6 col-md-4 px-1 mb-2">
1615 <a class="cus-videogallery-121-link position-relative d-block text-decoration-none border rounded overflow-hidden" href="javascript:void(0);" onclick="OpenYouTube('jE5Mx-qD_5o');">
1616 <div class="ratio-16-9">
1617 <div class="img-content cus-dark-img">
1618 <img class="cus-videogallery-121-img img-fluid lazy loaded" src="https://img.youtube.com/vi/jE5Mx-qD_5o/hqdefault.jpg" data-src="/no-image.png" alt="Dobyns-Bennett vs Knox Central - August 21, 2026" data-was-processed="true" loading="lazy">
1619 </div>
1620 </div>
1621 <span class="cus-videogallery-121-play position-absolute translate-middle top-50 start-50"><i class="fa fa-play fs-1 text-white text-shadow-1" aria-hidden="true"></i></span>
1622 <p class="cus-videogallery-121-heading mb-0 bg-dark text-white p-2 fs-6 lh-lg fw-bold" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Dobyns-Bennett vs Knox Central - August 21, 2026"><span class="line-1">Dobyns-Bennett vs Knox Central - August 21, 2026</span></p>
1623 </a>
1624 </div>
1625
1626 <div class="col-sm-6 col-md-4 px-1 mb-2">
1627 <a class="cus-videogallery-121-link position-relative d-block text-decoration-none border rounded overflow-hidden" href="javascript:void(0);" onclick="OpenYouTube('rLTmvR9Lmas');">
1628 <div class="ratio-16-9">
1629 <div class="img-content cus-dark-img">
1630 <img class="cus-videogallery-121-img img-fluid lazy loaded" src="https://img.youtube.com/vi/rLTmvR9Lmas/hqdefault.jpg" data-src="/no-image.png" alt="2026 WCYB Prep P
1630icks - Week 1" data-was-processed="true" loading="lazy">
1631 </div>
1632 </div>
1633 <span class="cus-videogallery-121-play position-absolute translate-middle top-50 start-50"><i class="fa fa-play fs-1 text-white text-shadow-1" aria-hidden="true"></i></span>
1634 <p class="cus-videogallery-121-heading mb-0 bg-dark text-white p-2 fs-6 lh-lg fw-bold" data-bs-toggle="tooltip" data-bs-placement="bottom" title="2026 WCYB Prep Picks - Week 1"><span class="line-1">2026 WCYB Prep Picks - Week 1</span></p>
1635 </a>
1636 </div>
1637
1638 <div class="col-sm-6 col-md-4 px-1 mb-2">
1639 <a class="cus-videogallery-121-link position-relative d-block text-decoration-none border rounded overflow-hidden" href="javascript:void(0);" onclick="OpenYouTube('Xtqr2zq_VRU');">
1640 <div class="ratio-16-9">
1641 <div class="img-content cus-dark-img">
1642 <img class="cus-videogallery-121-img img-fluid lazy loaded" src="https://img.youtube.com/vi/Xtqr2zq_VRU/hqdefault.jpg" data-src="/no-image.png" alt=""Runnin' Through That T" - Thomas Edwards" data-was-processed="true" loading="lazy">
1643 </div>
1644 </div>
1645 <span class="cus-videogallery-121-play position-absolute translate-middle top-50 start-50"><i class="fa fa-play fs-1 text-white text-shadow-1" aria-hidden="true"></i></span>
1646 <p class="cus-videogallery-121-heading mb-0 bg-dark text-white p-2 fs-6 lh-lg fw-bold" data-bs-toggle="tooltip" data-bs-placement="bottom" title=""Runnin' Through That T" - Thomas Edwards"><span class="line-1">"Runnin' Through That T" - Thomas Edwards</span></p>
1647 </a>
1648 </div>
1649
1650 <div class="col-sm-6 col-md-4 px-1 mb-2">
1651 <a class="cus-videogallery-121-link position-relative d-block text-decoration-none border rounded overflow-hidden" href="javascript:void(0);" onclick="OpenYouTube('BzRLviNpr9c');">
1652 <div class="ratio-16-9">
1653 <div class="img-content cus-dark-img">
1654 <img class="cus-videogallery-121-img img-fluid lazy loaded" src="https://img.youtube.com/vi/BzRLviNpr9c/hqdefault.jpg" data-src="/10-06-2026-10-49-09-pm-7855376.jpg" alt="Grant Williams - Boys' & Girls' Club of Kingsport Night of Champions Keynote Speaker" data-was-processed="true" loading="lazy">
1655 </div>
1656 </div>
1657 <span class="cus-videogallery-121-play position-absolute translate-middle top-50 start-50"><i class="fa fa-play fs-1 text-white text-shadow-1" aria-hidden="true"></i></span>
1658 <p class="cus-videogallery-121-heading mb-0 bg-dark text-white p-2 fs-6 lh-lg fw-bold" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Grant Williams - Boys' & Girls' Club of Kingsport Night of Champions Keynote Speaker"><span class="line-1">Grant Williams - Boys' & Girls' Club of Kingsport Night of Champions Keynote Speaker</span></p>
1659 </a>
1660 </div>
1661
1662 <div class="col-sm-6 col-md-4 px-1 mb-2">
1663 <a class="cus-videogallery-121-link position-relative d-block text-decoration-none border rounded overflow-hidden" href="javascript:void(0);" onclick="OpenYouTube('lLDPNH5UPO4');">
1664 <div class="ratio-16-9">
1665 <div class="img-content cus-dark-img">
1666 <img class="cus-videogallery-121-img img-fluid lazy loaded" src="https://img.youtube.com/vi/lLDPNH5UPO4/hqdefault.jpg" data-src="/no-image.png" alt="11/14/2025 - Dobyns-Bennett vs Blackman" data-was-processed="true" loading="lazy">
1667 </div>
1668 </div>
1669 <span class="cus-videogallery-121-play position-absolute translate-middle top-50 start-50"><i class="fa fa-play fs-1 text-white text-shadow-1" aria-hidden="true"></i></span>
1670 <p class="cus-videogallery-121-heading mb-0 bg-dark text-white p-2 fs-6 lh-lg fw-bold" data-bs-toggle="tooltip" data-bs-placement="bottom" title="11/14/2025 - Dobyns-Bennett vs Blackman"><span class="line-1">11/14/2025 - Dobyns-Bennett vs Blackman</span></p>
1671 </a>
1672 </div>
1673
1674 <div class="col-sm-6 col-md-4 px-1 mb-2">
1675 <a class="cus-videogallery-121-link position-relative d-block text-decoration-none border rounded overflow-hidden" href="javascript:void(0);" onclick="OpenYouTube('CDZHb37TfHA');">
1676 <div class="ratio-16-9">
1677 <div class="img-content cus-dark-img">
1678 <img class="cus-videogallery-121-img img-fluid lazy loaded" src="https://img.youtube.com/vi/CDZHb37TfHA/hqdefault.jpg" data-src="/no-image.png" alt="11/7/2025 - Dobyns-Bennett vs Faragut" data-was-processed="true" loading="lazy">
1679 </div>
1680 </div>
1681 <span class="cus-videogallery-121-play position-absolute translate-middle top-50 start-50"><i class="fa fa-play fs-1 text-white text-shadow-1" aria-hidden="true"></i></span>
1682 <p class="cus-videogallery-121-heading mb-0 bg-dark text-white p-2 fs-6 lh-lg fw-bold" data-bs-toggle="tooltip" data-bs-placement="bottom" title="11/7/2025 - Dobyns-Bennett vs Faragut"><span class="line-1">11/7/2025 - Dobyns-Bennett vs Faragut</span></p>
1683 </a>
1684 </div>
1685
1686 <div class="col-sm-6 col-md-4 px-1 mb-2">
1687 <a class="cus-videogallery-121-link position-relative d-block text-decoration-none border rounded overflow-hidden" href="javascript:void(0);" onclick="OpenYouTube('PVaNp82u-Dk');">
1688 <div class="ratio-16-9">
1689 <div class="img-content cus-dark-img">
1690 <img class="cus-videogallery-121-img img-fluid lazy loaded" src="https://img.youtube.com/vi/PVaNp82u-Dk/hqdefault.jpg" data-src="/no-image.png" alt="10/3/2025 - Dobyns-Bennett vs Jefferson County" data-was-processed="true" loading="lazy">
1691 </div>
1692 </div>
1693 <span class="cus-videogallery-121-play position-absolute translate-middle top-50 start-50"><i class="fa fa-play fs-1 text-white text-shadow-1" aria-hidden="true"></i></span>
1694 <p class="cus-videogallery-121-heading mb-0 bg-dark text-white p-2 fs-6 lh-lg fw-bold" data-bs-toggle="tooltip" data-bs-placement="bottom" title="10/3/2025 - Dobyns-Bennett vs Jefferson County"><span class="line-1">10/3/2025 - Dobyns-Bennett vs Jefferson County</span></p>
1695 </a>
1696 </div>
1697
1698 <div class="col-sm-6 col-md-4 px-1 mb-2">
1699 <a class="cus-videogallery-121-link position-relative d-block text-decoration-none border rounded overflow-hidden" href="javascript:void(0);" onclick="OpenYouTube('OBIJzChje2Y');">
1700 <div class="ratio-16-9">
1701 <div class="img-content cus-dark-img">
1702 <img class="cus-videogallery-121-img img-fluid lazy loaded" src="https://img.youtube.com/vi/OBIJzChje2Y/hqdefault.jpg" data-src="/no-image.png" alt="Dobyns-Bennett vs Greeneville Livestream" data-was-processed="true" loading="lazy">
1703 </div>
1704 </div>
1705 <span class="cus-videogallery-121-play position-absolute translate-middle top-50 start-50"><i class="fa fa-play fs-1 text-white text-shadow-1" aria-hidden="true"></i></span>
1706 <p class="cus-videogallery-121-heading mb-0 bg-dark text-white p-2 fs-6 lh-lg fw-bold" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Dobyns-Bennett vs Greeneville Livestream"><span class="line-1">Dobyns-Bennett vs Greeneville Livestream</span></p>
1707 </a>
1708 </div>
1709
1710 <div class="col-sm-6 col-md-4 px-1 mb-2">
1711 <a class="cus-videogallery-121-link position-relative d-block text-decoration-none border rounded overflow-hidden" href="javascript:void(0);" onclick="OpenYouTube('0W_ozen8MmM');">
1712 <div class="ratio-16-9">
1713 <div class="img-content cus-dark-img">
1714 <img class="cus-videogallery-121-img img-fluid lazy loaded" src="https://img.youtube.com/vi/0W_ozen8MmM/hqdefault.jpg" data-src="/no-image.png" alt="Dobyns-Bennett vs Morristown West Livestream" data-was-processed="true" loading="lazy">
1715 </div>
1716 </div>
1717 <span class="cus-videogallery-121-play position-absolute translate-middle top-50 start-50"><i class="fa fa-play fs-1 text-white text-shadow-1" aria-hidden="true"></i></span>
1718 <p class="cus-videogallery-121-heading mb-0 bg-dark text-white p-2 fs-6 lh-lg fw-bold" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Dobyns-Bennett vs Morristown West Livestream"><span class="line-1">Dobyns-Bennett vs Morristown West Livestream</span></p>
1719 </a>
1720 </div>
1721
1722 <div class="col-sm-6 col-md-4 px-1 mb-2">
1723 <a class="cus-videogallery-121-link position-relative d-block text-decoration-none border rounded overflow-hidden" href="javascript:void(0);
1723" onclick="OpenYouTube('gfZu3JqnMd0');">
1724 <div class="ratio-16-9">
1725 <div class="img-content cus-dark-img">
1726 <img class="cus-videogallery-121-img img-fluid lazy loaded" src="https://img.youtube.com/vi/gfZu3JqnMd0/hqdefault.jpg" data-src="/no-image.png" alt="Dobyns-Bennett vs Science Hill Livestream" data-was-processed="true" loading="lazy">
1727 </div>
1728 </div>
1729 <span class="cus-videogallery-121-play position-absolute translate-middle top-50 start-50"><i class="fa fa-play fs-1 text-white text-shadow-1" aria-hidden="true"></i></span>
1730 <p class="cus-videogallery-121-heading mb-0 bg-dark text-white p-2 fs-6 lh-lg fw-bold" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Dobyns-Bennett vs Science Hill Livestream"><span class="line-1">Dobyns-Bennett vs Science Hill Livestream</span></p>
1731 </a>
1732 </div>
1733
1734 <div class="col-sm-6 col-md-4 px-1 mb-2">
1735 <a class="cus-videogallery-121-link position-relative d-block text-decoration-none border rounded overflow-hidden" href="javascript:void(0);" onclick="OpenYouTube('5xEIvbKI2Mc');">
1736 <div class="ratio-16-9">
1737 <div class="img-content cus-dark-img">
1738 <img class="cus-videogallery-121-img img-fluid lazy loaded" src="https://img.youtube.com/vi/5xEIvbKI2Mc/hqdefault.jpg" data-src="/no-image.png" alt="Dobyns-Bennett vs West Ridge Livestream" data-was-processed="true" loading="lazy">
1739 </div>
1740 </div>
1741 <span class="cus-videogallery-121-play position-absolute translate-middle top-50 start-50"><i class="fa fa-play fs-1 text-white text-shadow-1" aria-hidden="true"></i></span>
1742 <p class="cus-videogallery-121-heading mb-0 bg-dark text-white p-2 fs-6 lh-lg fw-bold" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Dobyns-Bennett vs West Ridge Livestream"><span class="line-1">Dobyns-Bennett vs West Ridge Livestream</span></p>
1743 </a>
1744 </div>
1745
1746 <div class="col-sm-6 col-md-4 px-1 mb-2">
1747 <a class="cus-videogallery-121-link position-relative d-block text-decoration-none border rounded overflow-hidden" href="javascript:void(0);" onclick="OpenYouTube('7e-4ryTgHyA');">
1748 <div class="ratio-16-9">
1749 <div class="img-content cus-dark-img">
1750 <img class="cus-videogallery-121-img img-fluid lazy loaded" src="https://img.youtube.com/vi/7e-4ryTgHyA/hqdefault.jpg" data-src="/no-image.png" alt="Dobyns-Bennett vs Daniel Boone Livestream" data-was-processed="true" loading="lazy">
1751 </div>
1752 </div>
1753 <span class="cus-videogallery-121-play position-absolute translate-middle top-50 start-50"><i class="fa fa-play fs-1 text-white text-shadow-1" aria-hidden="true"></i></span>
1754 <p class="cus-videogallery-121-heading mb-0 bg-dark text-white p-2 fs-6 lh-lg fw-bold" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Dobyns-Bennett vs Daniel Boone Livestream"><span class="line-1">Dobyns-Bennett vs Daniel Boone Livestream</span></p>
1755 </a>
1756 </div>
1757
1758 <div class="col-sm-6 col-md-4 px-1 mb-2">
1759 <a class="cus-videogallery-121-link position-relative d-block text-decoration-none border rounded overflow-hidden" href="javascript:void(0);" onclick="OpenYouTube('Dn21Y1xtb2g');">
1760 <div class="ratio-16-9">
1761 <div class="img-content cus-dark-img">
1762 <img class="cus-videogallery-121-img img-fluid lazy loaded" src="https://img.youtube.com/vi/Dn21Y1xtb2g/hqdefault.jpg" data-src="/no-image.png" alt="Dobyns-Bennett vs South Greene Livestream" data-was-processed="true" loading="lazy">
1763 </div>
1764 </div>
1765 <span class="cus-videogallery-121-play position-absolute translate-middle top-50 start-50"><i class="fa fa-play fs-1 text-white text-shadow-1" aria-hidden="true"></i></span>
1766 <p class="cus-videogallery-121-heading mb-0 bg-dark text-white p-2 fs-6 lh-lg fw-bold" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Dobyns-Bennett vs South Greene Livestream"><span class="line-1">Dobyns-Bennett vs South Greene Livestream</span></p>
1767 </a>
1768 </div>
1769
1770 <div class="col-sm-6 col-md-4 px-1 mb-2">
1771 <a class="cus-videogallery-121-link position-relative d-block text-decoration-none border rounded overflow-hidden" href="javascript:void(0);" onclick="OpenYouTube('5y3yUjElOKI');">
1772 <div class="ratio-16-9">
1773 <div class="img-content cus-dark-img">
1774 <img class="cus-videogallery-121-img img-fluid lazy loaded" src="https://img.youtube.com/vi/5y3yUjElOKI/hqdefault.jpg" data-src="/no-image.png" alt="Dobyns-Bennett vs Science Hill" data-was-processed="true" loading="lazy">
1775 </div>
1776 </div>
1777 <span class="cus-videogallery-121-play position-absolute translate-middle top-50 start-50"><i class="fa fa-play fs-1 text-white text-shadow-1" aria-hidden="true"></i></span>
1778 <p class="cus-videogallery-121-heading mb-0 bg-dark text-white p-2 fs-6 lh-lg fw-bold" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Dobyns-Bennett vs Science Hill"><span class="line-1">Dobyns-Bennett vs Science Hill</span></p>
1779 </a>
1780 </div>
1781
1782 <div class="col-sm-6 col-md-4 px-1 mb-2">
1783 <a class="cus-videogallery-121-link position-relative d-block text-decoration-none border rounded overflow-hidden" href="javascript:void(0);" onclick="OpenYouTube('k50IQd_b9QE');">
1784 <div class="ratio-16-9">
1785 <div class="img-content cus-dark-img">
1786 <img class="cus-videogallery-121-img img-fluid lazy loaded" src="https://img.youtube.com/vi/k50IQd_b9QE/hqdefault.jpg" data-src="/no-image.png" alt="Dobyns-Bennett vs Morristown East" data-was-processed="true" loading="lazy">
1787 </div>
1788 </div>
1789 <span class="cus-videogallery-121-play position-absolute translate-middle top-50 start-50"><i class="fa fa-play fs-1 text-white text-shadow-1" aria-hidden="true"></i></span>
1790 <p class="cus-videogallery-121-heading mb-0 bg-dark text-white p-2 fs-6 lh-lg fw-bold" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Dobyns-Bennett vs Morristown East"><span class="line-1">Dobyns-Bennett vs Morristown East</span></p>
1791 </a>
1792 </div>
1793
1794 <div class="col-sm-6 col-md-4 px-1 mb-2">
1795 <a class="cus-videogallery-121-link position-relative d-block text-decoration-none border rounded overflow-hidden" href="javascript:void(0);" onclick="OpenYouTube('bfZ1Kc70mC4');">
1796 <div class="ratio-16-9">
1797 <div class="img-content cus-dark-img">
1798 <img class="cus-videogallery-121-img img-fluid lazy loaded" src="https://img.youtube.com/vi/bfZ1Kc70mC4/hqdefault.jpg" data-src="/no-image.png" alt="Dobyns-Bennett vs Greeneville" data-was-processed="true" loading="lazy">
1799 </div>
1800 </div>
1801 <span class="cus-videogallery-121-play position-absolute translate-middle top-50 start-50"><i class="fa fa-play fs-1 text-white text-shadow-1" aria-hidden="true"></i></span>
1802 <p class="cus-videogallery-121-heading mb-0 bg-dark text-white p-2 fs-6 lh-lg fw-bold" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Dobyns-Bennett vs Greeneville"><span class="line-1">Dobyns-Bennett vs Greeneville</span></p>
1803 </a>
1804 </div>
1805 
1806 </div>
1807</div>
1808<style>
1809 .cus-121-label::before {content: "";position: absolute;width: 100%;height: 0.2rem;background: rgba(221, 7, 7, 0.2);margin-top: -0.2rem;z-index: 2;}
1810 .cus-photogallery-121-icon {opacity: 0; transition: 200ms linear;}
1811 .cus-photogallery-121-popup:hover .cus-photogallery-121-icon {opacity: 1; transition: 300ms linear;}
1812</style></div></div>
1813
1814    <div class="col-lg-12 mt-3"> <div data-cms-block="adgroup-12" data-cms-block-label="Advertisement 12" data-cms-el="adgroup" data-cms-adgroup="12">
1814<script type="text/javascript" language="JavaScript">AdGroup12();</script>
1814</div></div>
1815</div>
1816</div>
1817
1818                        </div>  
1819                    </div>                
1820                </div>                
1821                <div class="cus-column-133-2 col-lg-3 mt-4">
1822                    <div data-sticky="10">       
1823                        <div class="col-lg-12 bg-white p-3 mb-4 border rounded">  
1824                            <div data-cms-block="adgroup-19" data-cms-block-label="Advertisement 19" data-cms-el="adgroup" data-cms-adgroup="19">
1824<script type="text/javascript" language="JavaScript">AdGroup19();</script>
1824</div>
1825                            <div data-cms-block="adgroup-11" data-cms-block-label="Advertisement 11" data-cms-el="adgroup" data-cms-adgroup="11">
1825<script type="text/javascript" language="JavaScript">AdGroup11();</script>
1825</div>
1826                            <div data-cms-block="poll-1" data-cms-block-label="Poll 1" data-cms-el="poll" data-poll-id="1">
1826<script type="text/javascript" language="JavaScript">GetPoll1();</script>
1826</div>
1827                            <div data-cms-block="adgroup-18" data-cms-block-label="Advertisement 18" data-cms-el="adgroup" data-cms-adgroup="18">
1827<script type="text/javascript" language="JavaScript">AdGroup18();</script>
1827</div>
1828                            <div data-cms-block="highlight-2" data-cms-block-label="Highlights 2" data-cms-el="highlight" data-cms-highlight="2">
1828<script type="text/javascript" language="JavaScript">GetHighlights2();</script>
1828</div>
1829                        </div>
1830                        <div class="col-lg-12 bg-white p-3 mb-4 border rounded">   
1831                            <div data-cms-block="adgroup-13" data-cms-block-label="Advertisement 13" data-cms-el="adgroup" data-cms-adgroup="13">
1831<script type="text/javascript" language="JavaScript">AdGroup13();</script>
1831</div>
1832                            <div data-cms-block="adgroup-15" data-cms-block-label="Advertisement 15" data-cms-el="adgroup" data-cms-adgroup="15">
1832<script type="text/javascript" language="JavaScript">AdGroup15();</script>
1832</div>
1833                        </div>             
1834                        <div class="col-lg-12 bg-white p-3 mb-4 border rounded"><div data-cms-block="adgroup-13" data-cms-block-label="Advertisement 13" data-cms-el="adgroup" data-cms-adgroup="13">
1834<script type="text/javascript" language="JavaScript">AdGroup13();</script>
1834</div></div>  
1835                    </div>
1836                </div>
1837                <style>@media (max-width: 992px) {.cus-column-133-2 {border-width: 0 !important;} }</style>                
1838            </div>
1839            <!-- /2-columns -->
1840            
1841           
1842            
1843        </div>
1844        <!-- footer -->
1845        <div class="container-fluid bg-black py-4">
1846        <div class="container-bl">
1847            <footer class="cus-footer-1-133-footer row p-2 mx-0 ">
1848                
1849                <div class="col-lg-4"> 
1850                        <div class="col-lg-12 col-lg-3 d-flex justify-content-center px-0">
1851                        <div data-cms-el="logo">
1851<script type="text/javascript" language="JavaScript">GetLogo();</script>
1851</div>
1852                    </div>
1853                    <div class="col-lg-12 mb-2 mt-3 mb-lg-0 text-light fw-bold">Visitors: 
1853<script type="text/javascript" language="JavaScript">HitCounter();</script>
1853
1854                    </div>
1855                    <div class="col-lg-12 text-light d-none">
1856                        
1857                            <i class="fa fa-phone text-light pe-2 text-light" aria-hidden="true"></i>
1857<script type="text/javascript">Section6();</script>
1857
1858                        
1859                    </div>
1860                    </div>
1861                <div class="col-lg-4">
1861<script type="text/javascript" language="JavaScript" src="/articlegroup100.js?v=1790346378"></script>
1861<script type="text/javascript" language="JavaScript">GetArticleGroup100();</script>
1861</div>
1862                <div class="col-lg-4">
1863    <h1 class="text-light"> Connect With US</h1>
1864    <a href="/headlines.rss"><i class="fa fa-rss text-light"></i></a>
1865                <a href="https://www.instagram.com/tricitiessports"><i class="fa fa-instagram text-light"></i></a>
1866                <a href="https://twitter.com/parrotheadvol"><i class="fa fa-twitter text-light"></i></a>
1867                <a href="https://www.facebook.com/profile.php?id=100064601897460"><i class="fa fa-facebook text-light"></i></a>
1868    </div>
1869                
1870                
1871            </footer>
1872            </div>
1873            <div class="container-bl border-top border-secondary mt-2 pt-3">
1874                <span class="copyright"><div data-cms-block="section-7" data-cms-block-label="Section 7" data-cms-el="section" data-cms-section="7">
1874<script type="text/javascript">Section7();</script>
1874</div></span>
1875            </div>
1876        </div>
1877            <!-- /footer -->
1878            
1879    </div>
1880    <!-- go to top --><div class="cus-scroll-top position-fixed bg-dark text-white fs-4 px-2 rounded-circle d-flex align-items-center justify-content-center"><i class="fa fa-angle-up lh-base text-shadow-3"></i></div>
1880<script>    if (document.getElementsByClassName("cus-scroll-top")) {        window.addEventListener("scroll", function() {            if (document.body.scrollTop > 600 || document.documentElement.scrollTop > 600) {                document.getElementsByClassName('cus-scroll-top')[0].style.bottom = '20px';            } else {                document.getElementsByClassName('cus-scroll-top')[0].style.bottom = "-100px";            }        });        document.getElementsByClassName('cus-scroll-top')[0].addEventListener('click', function() {            window.scrollTo(0, 0);        });    }</script>
1880<style>    .cus-scroll-top {cursor: pointer; right:20px; bottom: auto;transition: 400ms linear;opacity: 0.8; width:40px;height: 40px;}    .cus-scroll-top:hover {transition: 300ms linear;box-shadow: 0 0 0 15px rgba(0,0,0,0.3) !important;opacity: 1;}</style><!-- /go to top -->
1881    <div class="cus-g-analytics-133">
1881<script language="javascript">GetGoogleAnalytics('MENU:HOME PAGE-THE FRONT PAGE');</script>
1881</div>
1882    <!-- tooltip -->
1883    
1883<script>
1884        var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'))
1885        var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {
1886            return new bootstrap.Tooltip(tooltipTriggerEl)
1887        });
1888    </script>
1888
1889    <!-- /tooltip -->
1890<!--sticky column css-js -->
1891<style>@media (min-width: 992px) {[data-sticky] {position: sticky; width: 100%;} }</style>
1892<script>
1893    document.addEventListener('readystatechange', event => {
1894        if (event.target.readyState === "complete") {
1895            var sp = document.querySelectorAll("[data-sticky]");
1896            var sw = window.innerHeight;
1897            var sf = () => {
1898                if (sp != null) {
1899                    sp.forEach(x => {
1900                        var ds = x.getAttribute("data-sticky") != "" ? x.getAttribute("data-sticky") : 10;
1901                        var st = x.offsetHeight - sw + 10;
1902                        if(st >= 0) {
1903                            x.style.top = `-${st}px`;
1904                        } else if(st < 0) {
1905                            if(st > -ds) {
1906                                x.style.top =`${Math.abs(st)}px`;
1907                            }
1908                            else {
1909                                x.style.top = `${ds}px`;
1910                            }
1911                        }                                        
1912                    });
1913                }
1914            }
1915            sf();
1916            setTimeout(() => {sf();}, 500);
1917            setTimeout(() => {sf();}, 1000);
1918            setTimeout(() => {sf();}, 3000);
1919        }
1920    });
1921</script>
vendor: 2 bytes, line 1921
1921
1922<script src="/js/paywall-widget.js" defer></script>
vendor: 2 bytes, line 1922
1922
1923<script defer src="/sys-popup.js?v=1790346378"></script>
1923
1924<!--/sticky column css-js -->    
1925<script defer src="/sys-popup.js?v=1790346378"></script>
1925</body>
1926<!--Template-112-->
1927</html>

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.