PageSourceSearch

https://kahnawakenews.com/ContactUs

html kahnawakenews.com collected 2026-10-06 06:24:38 UTC 76,326 bytes, 1,437 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    <!-- Required meta tags -->
13    <meta name="viewport" content="width=device-width, initial-scale=1">
14    <!--<meta charset="ISO-8859-1">
15    <title>Contact Us</title>-->
16    <meta charset="UTF-8">
17     
18    <meta name="keywords" content="Kahnawake News, Kahnawake, News, Mohawk, Mohawks, First Nations, Native Americans, Iroquois, Haudenosaunee"> 
19    <meta name="description" content="Kahnawake News, on the Web"> 
20    
21    <link rel="shortcut icon" href="/favicon.ico?v=1789926857">
22    
22<script type="text/javascript" language="javascript" src="/lib/bl2.js"></script>
22
23
24    <!-- bootstrap -->
25    <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
26    
26<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js" integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM" crossorigin="anonymous"></script>
26
27    <link type="text/css" rel="stylesheet" href="https://bulletlink.com/bootstrap.css">
28    <!-- /bootstrap -->
29
30    <!-- jQuery -->
31    
31<script src="https://code.jquery.com/jquery-1.7.min.js" integrity="sha256-/05Jde9AMAT4/o5ZAI23rUf1SxDYTHLrkOco0eyRV84=" crossorigin="anonymous"></script>
31
32    <!-- 
32<script type="text/javascript" language="javascript" src="/lib/JQuery/jquery.js"></script>
32 -->
33    <!-- 
33<script type="text/javascript" language="javascript" src="/lib/JQuery/CSSMessageBox/js/jquery.ui.draggable.js"></script>
33
34    
34<script type="text/javascript" language="javascript" src="/lib/JQuery/CSSMessageBox/js/jquery.alerts.js"></script>
34
35    <link rel="stylesheet" href="/lib/JQuery/CSSMessageBox/css/jquery.alerts.css">
36    
36<script type="text/javascript" src="/lib/JQuery/fancybox/jquery.mousewheel-3.0.4.pack.js"></script>
36
37    
37<script type="text/javascript" src="/lib/JQuery/fancybox/jquery.fancybox-1.3.4.pack.js"></script>
37
38    <link rel="stylesheet" type="text/css" href="/lib/JQuery/fancybox/jquery.fancybox-1.3.4.css" media="screen">
39    
39<script type="text/javascript" language="javascript" src="/lib/JQuery/Gallery3/jqFancyTransitions.js"></script>
39
40    <link rel="stylesheet" href="/lib/JQuery/popup1/popup1.css" type="text/css">
41    
41<script src="/lib/JQuery/popup1/popup1.js"></script>
41 -->
42    <!-- /jQuery -->
43
44    <!-- system -->
45    
45<script type="text/javascript" language="javascript" src="/settings.js?v=1789926857"></script>
45
46    
46<script type="text/javascript" language="javascript" src="/articles.js?v=1789926857"></script>
46
47    
47<script type="text/javascript" language="javascript" src="/ads.js?v=1789926857"></script>
47
48    
48<script type="text/javascript" language="javascript" src="/menus.js?v=1789926857"></script>
48
49    
49<script type="text/javascript" language="javascript" src="/sections.js?v=1789926857"></script>
49
50    
50<script type="text/javascript" language="javascript" src="/polls.js?v=1789926857"></script>
50
51    
51<script type="text/javascript" language="javascript" src="/lib/iframeResizer.min.js"></script>
51
52    
52<script type="text/javascript" language="javascript" src="/menu_horizontal.js?v=1789926857"></script>
52
53    <!-- /system -->
54
55    <!-- fontAwesome-->
56    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" />
57    <!-- /fontAwesome-->
58
59    <!-- general -->
60    
60<script type="text/javascript" language="javascript" src="/jscript1.js?v=1789926857"></script>
60
61    <link type="text/css" rel="stylesheet" href="/custom.css?v=1789926857">
62    
62<script type="text/javascript" language="javascript" src="/custom.js?v=1789926857"></script>
62
63    <!-- /general -->
64
65    <!--StartMH-->
66    <!--MetaSharing-->
67    <!--EndMH-->
68
69    <!-- live-Builder --> 
70    
70<script type="text/javascript" src="/ufields.js"></script>
70
71    <!-- /live-Builder -->
72    
73    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
74<meta name="facebook-domain-verification" content="eba62c1rivp7gq9ps9juaddd0ukpvv" />
75
76<!-- Facebook Pixel Code -->
77<script>
vendor: 408 bytes, lines 77-86
77
78!function(f,b,e,v,n,t,s)
79{if(f.fbq)return;n=f.fbq=function(){n.callMethod?
80n.callMethod.apply(n,arguments):n.queue.push(arguments)};
81if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
82n.queue=[];t=b.createElement(e);t.async=!0;
83t.src=v;s=b.getElementsByTagName(e)[0];
84s.parentNode.insertBefore(t,s)}(window, document,'script',
85'https://connect.facebook.net/en_US/fbevents.js');
86fbq('init', '
86870070489835846
vendor: 32 bytes, lines 86-87
86');
87fbq('track', 'PageView');
88</script>
88
89<noscript><img height="1" width="1" style="display:none"
90src="https://www.facebook.com/tr?id=870070489835846&ev=PageView&noscript=1"
91/ loading="lazy"></noscript>
92<!-- End Facebook Pixel Code -->
93
94<script type="text/javascript" language="javascript">if (!readCookie('firstVisit')) {createCookie('firstVisit', 'Yes');var d_che = new Date();var s_che = d_che.getSeconds();var m_che = d_che.getMinutes();var h_che = d_che.getHours();var dt_che = d_che.getDate();var mnt_che = d_che.getMonth() + 1;var y_che = d_che.getFullYear();var vl_che = dt_che + '' + mnt_che + '' + y_che + '' + h_che + '' + m_che + '' + s_che;var scrt = document.getElementsByTagName("script");var lnks = document.getElementsByTagName("link");var che_js = ["{{PutTFolder}}.", "custom", "Menus-Horizontal", "jscript", "articlegroup"];var che_cs = ["custom", "layout"];for (var i = 0; i < scrt.length; i++) {var c_j;for (c_j = 0; c_j < che_js.length; c_j++) {var scrpt = scrt[i];if (scrpt.src.indexOf(che_js[c_j]) != -1 && scrpt.src.indexOf('js?') != -1) {scrpt.src += "v=" + vl_che;}}}for (var i = 0; i < lnks.length; i++) {var c_cs;for (c_cs = 0; c_cs < che_cs.length; c_cs++) {var link = lnks[i];if (link.href.indexOf(che_cs[c_cs]) != -1 && link.href.indexOf('css?') != -1) {link.href += "v=" + vl_che;}}}}</script>
94
95
96<link href='https://fonts.googleapis.com/css?family=Merriweather' rel='stylesheet' type='text/css'>
97<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
98<link type="text/css" rel="stylesheet" href="https://https://kahnawakenews.com/ufields.css?v=9.000009" />
99<script type="text/javascript" src="https://https://kahnawakenews.com/ufields.js?v=9.000009"></script>
99
100
101<!-- Google Tag Manager -->
102<script>
vendor: 331 bytes, lines 102-106
102(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
103new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
104j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
105'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
106})(window,document,'script','dataLayer','
106GTM-T6TTZ66D
vendor: 3 bytes, line 106
106');
106</script>
106
107<!-- End Google Tag Manager -->
108<style>:root{--cms-theme-color: #555;}</style><link rel="stylesheet" href="/sys-popup.css?v=1789926857"><style id="universal-submit-spinner">
109.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}
110@keyframes frmSpin{to{transform:rotate(360deg)}}
111</style></head>
112
113<body id="blbodymain" class="blbody"><a href="https://kahnawakenews.com/cdn-cgi/content?id=Mskjeum7O5.nkC6Dt9_1puNOvLlNvJm9BMJ8CpAyFZ0-1791267875.0827887-1.2.1.1-zL3LyYnZWgl9Wdft5THwcN8f1BlF6.d8Si1gY4Mbyd_IXtLWsZoJjta9drmt0PYV" aria-hidden="true" rel="nofollow noopener" style="display: none !important; visibility: hidden !important"></a>
114<!-- Google Tag Manager (noscript) -->
vendor: 69 bytes, lines 114-115
114
115<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
115GTM-T6TTZ66D
vendor: 85 bytes, lines 115-116
115"
116height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
117<!-- End Google Tag Manager (noscript) -->
118    <div class="mainbody">
119        <!-- stycky ads-->
120        <span class="cus-sticky-ads"><div id="stickybottom" class="stickybottom"><div class="stickyheader" style="text-align: center;"><a href="#" class="stickyminimize" onClick="HideUnhideStickyAd('stickybottomContent');"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"></line></svg></a><a href="#" class="stickyclose" onClick="CloseStickyAd('stickybottom');"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="18" y1="6" x2="6" y2="18"></line><line x1="6" y1="6" x2="18" y2="18"></line></svg></a></div><div id="stickybottomContent">
120<script type="text/javascript" language="JavaScript">AdGroup2();</script>
120</div></div>
121<div id="stickyleft" class="stickyleft"><div class="stickyheader" style="text-align: center;"><a href="#" class="stickyminimize" onClick="HideUnhideStickyAd('stickyleftContent');"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"></line></svg></a><a href="#" class="stickyclose" onClick="CloseStickyAd('stickyleft');"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="18" y1="6" x2="6" y2="18"></line><line x1="6" y1="6" x2="18" y2="18"></line></svg></a></div><div id="stickyleftContent">
121<script type="text/javascript" language="JavaScript">AdGroup3();</script>
121</div></div>
122<div id="stickytop" class="stickytop"><div class="stickyheader" style="text-align: center;"><a href="#" class="stickyminimize" onClick="HideUnhideStickyAd('stickytopContent');"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"></line></svg></a><a href="#" class="stickyclose" onClick="CloseStickyAd('stickytop');"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="18" y1="6" x2="6" y2="18"></line><line x1="6" y1="6" x2="18" y2="18"></line></svg></a></div><div id="stickytopContent">
122<script type="text/javascript" language="JavaScript">AdGroup4();</script>
122</div></div>
123<script language="javascript">checkStickyAdCookie();</script>
123</span>
124        <!-- /stycky ads-->
125        <div class="container-bl mt-2">
126            <!-- top-links -->
127            <div class="row mb-3">
128                <div class="bl-top-links col-sm-8 float-start mb-sm-0 ps-lg-0">
129                    <div class="float-start hpe-top-links">
130                        <!-- search-->
131                        
131<script type="text/javascript" language="JavaScript">GetGoogleCustomSearch();</script>
131
132                        <a class="search-link text-decoration-none text-black fs-6 fw-bold me-3 border rounded p-1 px-2 bl-toplink-1-133-searchlink" href="javascript:void(0)" data-bs-toggle="tooltip" data-bs-placement="right" title="Click to Search Articles..."><i class="fa fa-search" aria-hidden="true"></i> SEARCH</a>
133                        <div class="search_content">
134                            <div class="search_box"><gcse:searchbox></gcse:searchbox></div>
135                            <div class="search_results"><gcse:searchresults></gcse:searchresults></div>
136                            <div class="search_remove">
137                                <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="currentColor" class="bi bi-x-lg" viewBox="0 0 16 16">
138                                    <path fill-rule="evenodd" d="M13.854 2.146a.5.5 0 0 1 0 .708l-11 11a.5.5 0 0 1-.708-.708l11-11a.5.5 0 0 1 .708 0Z"/>
139                                    <path fill-rule="evenodd" d="M2.146 2.146a.5.5 0 0 0 0 .708l11 11a.5.5 0 0 0 .708-.708l-11-11a.5.5 0 0 0-.708 0Z"/>
140                              </svg>
141                            </div>
142                        </div>
143                        
143<script>
144                            document.getElementsByClassName('search-link')[0].addEventListener("click", function() {
145                                document.getElementById("gsc-i-id1").setAttribute("placeholder", "Search for...");
146                                document.getElementsByClassName('search_content')[0].classList.add("search-flex");
147                                document.getElementsByClassName('search_remove')[0].style.display = "block";
148                                document.getElementsByClassName('gsc-results-close-btn')[0].addEventListener("click", function() {
149                                    document.getElementsByClassName('search_content')[0].classList.remove("search-flex");
150                                });
151                            });
152                            document.getElementsByClassName('search_remove')[0].addEventListener("click", function() {
153                                document.getElementsByClassName('search_content')[0].classList.remove("search-flex");
154                                document.getElementsByClassName('search_remove')[0].style.display = "none";                            });
155                        </script>
155
156                        <style>
157                            .gsc-adBlock {display: none !important;}
158                            #gsc-i-id1{color:#000!important}
159                            #gsc-i-id1::placeholder{color:#555!important;opacity:1;font-size:inherit!important}
160                            .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 linear;}
161                            .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 linear;}
162                            .search_remove{cursor:pointer;user-select:none;position:absolute;top:10px;left:3%;}
163                            .search_remove:hover{color:gray}
164                            .gsc-control-cse.gsc-control-cse-en{background-color:transparent;border-width:0;position:absolute}.search_box{border-bottom:2px solid #000;width:70%;padding-bottom:6px}
165                            .gsib_b,.gsst_a{display:none!important}
166                            .gscb_a{display:none!important}
167                            .gsc-input{background-image:none!important}
168                            .gsc-input{background-color:transparent!important}
169                            .gsc-input-box{background-color:transparent!important;border-bottom:0 solid #ff4500!important;border-width:0!important}
170                            .gsc-input{border-width:0!important;color:#fff!important;font-size:20px!important}
171                            .gsc-adBlock{display:none!important}
172                            .search-icon-desk{cursor:pointer}
173                            .search-icon-desk{float:right;height:54px;margin-right:10px}
174                            .search-icon-desk i{border:1px solid #ddd;border-radius:4px;color:#000;display:block;line-height:35px;margin-top:9px;padding:0 12px}
175                            .search-icon-desk i:hover{color:#79655d}
176                            .gsc-results-wrapper-overlay.gsc-results-wrapper-visible {width: 100%;left: 0;top: 0;height: 100%;}
177                            .gcsc-branding {display: none;}
178                            .gsc-search-button.gsc-search-button-v2{padding:0 18px;line-height:35px;display:inline-block!important;background:#ddd;border-radius:5px;border-color:#555}
179                            .gsc-search-button{width:auto!important;float:right!important}.gsc-search-button.gsc-search-button-v2:hover{background:#ddd!important}
180                            .gsc-search-button-v2 svg{fill:#000!important}
181                            .gsc-search-button.gsc-search-button-v2:hover{background:#05a2d3!important;border-color:#006899!important}
182                            .gsc-search-button.gsc-search-button-v2:hover svg{fill:#fff!important}
183                        </style>
184                        <!-- /search-->
185                        <a class="text-decoration-none text-black fs-6 me-3 bl-toplink-1-133-link" href="/index141.htm">ABOUT</a>
186                        <a class="text-decoration-none text-black fs-6 me-3 bl-toplink-1-133-link" href="/ContactUs">CONTACT</a>
187                        <a class="text-decoration-none text-black fs-6 me-3 bl-toplink-1-133-link" href="/SubscribeToday">SUBSCRIBE</a>
188                    </div>
189                </div>
190                <div class="cus-social-links col-sm-4 float-sm-end d-flex justify-content-center d-sm-inline-block pe-lg-0">
191
192                </div>
193            </div>
194            <!-- /top-links -->
195            <!-- logo-->
196            <div class="row  mb-3">
197                <div class="col-12 d-flex justify-content-center hpe-logo" data-logo-width="1250"><div data-cms-el="logo">
197<script type="text/javascript" language="JavaScript">GetLogo();</script>
197</div></div>
198            </div>
199            <!-- /logo -->
200            <!-- menu -->
201            <div class="row mb-3">
202                <div class="col-12 px-0">
203                    
203<script type="text/javascript" language="JavaScript">
204                        GetMenuH();
205                    </script>
205
206                </div>
207            </div>
208            <!-- /menu -->
209
210            <!-- 2-columns -->
211            <div class="cus-column-133-row row mb-3 border-bottom">
212                <div class="cus-column-133-1 container col-lg-9 ps-lg-0 pe-lg-3">
213                    <div class="w-100 cus-position-sticky float-start" data-sticky="10">
214                        <div class="row mb-2">
215                            <div class="col-12">
216                                <div data-cms-popup-root="1"><style>
217#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;}
218.form-check-label:hover {color: #0d6efd;cursor: pointer;}
219.cus-form-loader .cus-form-loading {display: block !important;}
220.cus-form-loader .formbody fieldset, .cus-form-loader .system_text.footer_text {opacity: 0.5;pointer-events: none;}
221#cus-form-button-loader {display:none;}
222.cus-form-loader footer, .cus-form-loader button {cursor: no-drop;}
223.fast-spin {-webkit-animation: fa-spin 1s infinite linear;animation: fa-spin 1s infinite linear;}
224.cus-form-loader #SUBMIT1 {display:none;}
225.cus-form-loader #cus-form-button-loader {display:inline-block;}
226.form-floating > .form-control:focus ~ label {color: #0d6efd !important;}
227.form-control:not(:disabled):not([readonly])::file-selector-button {position: absolute;right: 0;border-radius: 5px !important;}
228.input-file-preview {display: none;}
229.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;}
230.w-96 {width: 96% !important;}
231.p-valid {color: green;}
232.p-valid:before {position: relative;left: -10px;content: "✔";}
233.p-invalid {color: red;}
234.p-invalid:before {position: relative;left: -10px;content: "✖";font-size: 0.875rem !important;}
235.open-eye, .close-eye {position: absolute;right: 2%;top: 50%;transform: translate(0,-50%);cursor: pointer;}
236.open-eye i:hover, .close-eye i:hover {color: gray !important;}
237.cus-form-help:before {content: "\f05a";font-family: FontAwesome;padding-left: 0.5rem;padding-right: 0.5rem;}
238.cus-form-help {display: none;}
239.cus-form-help:empty {display: none !important;}
240.form-control:focus ~ .cus-form-help {display: block;}
241.formdivider.formdivider_custom {border-left: 5px solid #ffc107;}
242.form-floating > .form-control {caret-color: #0d6efd;}
243</style>
244<style id="force-form-styles" data-version="2026-01-26-v2">
245      textarea, textarea.form-control, textarea.formfieldinput { min-height: 120px !important; height: 120px !important; }
246
247      /* Enhanced Spinner Styles - More visible and animated */
248      .form-spinner-ring { 
249        display: inline-block; 
250        width: 18px; 
251        height: 18px; 
252        border: 3px solid rgba(255,255,255,0.4); 
253        border-top-color: #fff; 
254        border-radius: 50%; 
255        animation: formSpin 0.7s linear infinite; 
256        margin-right: 8px; 
257        vertical-align: middle; 
258      }
259      @keyframes formSpin { 
260        0% { transform: rotate(0deg); }
261        100% { transform: rotate(360deg); } 
262      }
263      
264      /* Submit Button Loading State */
265      button.btn-loading, input.btn-loading {
266        position: relative;
267        pointer-events: none;
268        opacity: 0.85;
269      }
270      button.btn-loading::after {
271        content: '';
272        position: absolute;
273        width: 18px;
274        height: 18px;
275        top: 50%;
276        left: 12px;
277        margin-top: -9px;
278        border: 3px solid rgba(255,255,255,0.4);
279        border-top-color: #fff;
280        border-radius: 50%;
281        animation: formSpin 0.7s linear infinite;
282      }
283      
284      /* Form Overlay during submission */
285      .form-loading-overlay {
286        position: absolute;
287        top: 0;
288        left: 0;
289        right: 0;
290        bottom: 0;
291        background: rgba(255,255,255,0.7);
292        display: flex;
293        align-items: center;
294        justify-content: center;
295        z-index: 9999;
296        border-radius: inherit;
297      }
298      .form-loading-overlay .spinner-container {
299        display: flex;
300        flex-direction: column;
301        align-items: center;
302        gap: 12px;
303        padding: 30px;
304        background: white;
305        border-radius: 12px;
306        box-shadow: 0 4px 20px rgba(0,0,0,0.15);
307      }
308      .form-loading-overlay .spinner-large {
309        width: 40px;
310        height: 40px;
311        border: 4px solid #e0e0e0;
312        border-top-color: #007bff;
313        border-radius: 50%;
314        animation: formSpin 0.8s linear infinite;
315      }
316      .form-loading-overlay .loading-text {
317        color: #333;
318        font-size: 14px;
319        font-weight: 500;
320      }
321      
322      /* Bootstrap 5 Floating Label Fix - Force proper behavior */
323      .form-floating > .form-control:focus ~ label,
324      .form-floating > .form-control:not(:placeholder-shown) ~ label,
325      .form-floating > .form-select ~ label {
326        opacity: 0.65 !important;
327        transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem) !important;
328      }
329      .form-floating > .form-control::placeholder {
330        color: transparent !important;
331      }
332      .form-floating > label {
333        position: absolute !important;
334        top: 0 !important;
335        left: 0 !important;
336        height: 100% !important;
337        padding: 1rem 0.75rem !important;
338        pointer-events: none !important;
339        border: 1px solid transparent !important;
340        transform-origin: 0 0 !important;
341        transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out !important;
342      }
343    </style>
344<style>.grecaptcha-badge{visibility:hidden!important;position:fixed!important;bottom:14px!important;right:14px!important;}</style>
345<script src="/iframe-resizer-master/js/iframeResizer.contentWindow.js"></script>
vendor: 1 bytes, line 345
345
346<script type="text/javascript" language="javascript" src="https://kahnawakenews.com/lib/bl2.js"></script>
vendor: 1 bytes, line 346
346
347<script>
348function ChangeInputFocus(obj, evt, cname) {
349/*if (evt.type == "focus")
350obj.className = cname;
351else if (evt.type == "blur")
352/*obj.className = cname;*/
353}
354</script>
vendor: 1 bytes, line 354
354
355<script src="https://recaptcha.net/recaptcha/api.js?render=6LdXmfgUAAAAAJNuEHBxVCY0w9eA73hvaWsdgPlM"></script>
vendor: 1 bytes, line 355
355
356<script>
357(function(){
358  function setToken(t){
359    var els = document.querySelectorAll('.g-recaptcha-token');
360    for (var i = 0; i < els.length; i++) els[i].value = t;
361  }
362  function refresh(){
363    if (typeof grecaptcha === 'undefined') return;
364    grecaptcha.ready(function(){
365      grecaptcha.execute('6LdXmfgUAAAAAJNuEHBxVCY0w9eA73hvaWsdgPlM', {action: 'submit'}).then(setToken);
366    });
367  }
368  // Submit-time minter. Login pages call this in their submit handler and await it,
369  // so the request always carries a freshly-minted token instead of reading the
370  // pre-filled hidden field — which may still be empty when a user with saved
371  // credentials presses Enter before the page-load mint resolves (-> recaptcha_missing,
372  // a hard block). Resolves to a fresh token, or falls back to whatever's already in
373  // the field (and never hangs the form: 3s timeout, and resolves if grecaptcha is
374  // unavailable). Also updates the hidden field so FormData-based submits pick it up.
375  window.cmsMintCaptchaToken = function(){
376    return new Promise(function(resolve){
377      var els = document.querySelectorAll('.g-recaptcha-token');
378      var fallback = (els[0] && els[0].value) || '';
379      var done = false;
380      var to = setTimeout(function(){ if(!done){ done = true; resolve(fallback); } }, 3000);
381      function fin(v){ if(done) return; done = true; clearTimeout(to); setToken(v); resolve(v); }
382      function attempt(){
383        if (typeof grecaptcha === 'undefined' || !grecaptcha.execute) return false;
384        try {
385          grecaptcha.ready(function(){
386            grecaptcha.execute('6LdXmfgUAAAAAJNuEHBxVCY0w9eA73hvaWsdgPlM', {action: 'submit'})
387              .then(function(t){ fin(t || fallback); })
388              .catch(function(){ fin(fallback); });
389          });
390          return true;
391        } catch(_) { return false; }
392      }
393      // grecaptcha may still be loading -- common when the form is rendered
394      // inside a popup, where api.js was injected only moments ago. Poll until
395      // it's ready (or the 3s timeout fires) instead of bailing immediately.
396      if (!attempt()) {
397        var iv = setInterval(function(){
398          if (done) { clearInterval(iv); return; }
399          if (attempt()) clearInterval(iv);
400        }, 150);
401      }
402    });
403  };
404  refresh();
405  setTimeout(refresh, 5000);
406  setInterval(refresh, 120000);
407})();
408</script>
408
409<div class="formbody">
410<div class="body p-2">
411<!--FormError-->
412<!--FormMessage-->
413<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)">
414<div aria-hidden="true" style="position:absolute;left:-9999px;top:-9999px;height:0;width:0;overflow:hidden;">
415  <label for="website_url_hp">Website (leave blank)</label>
416  <input type="text" name="website_url" id="website_url_hp" tabindex="-1" autocomplete="off" value="">
417</div>
418<input type="hidden" name="token" class="g-recaptcha-token" value="">
419<!--FKeys-->
420<input type="hidden" name="SystemEmailSubject" value="mywebsite.com: Contact Us"> 
421<input type="hidden" name="SystemEmailConfirmMessage" value="Your message has been forwarded to appropriate personnel. &lt;br&gt;&lt;br&gt;We will contact you within 24 hours.&lt;br&gt;&lt;br&gt;Thank you."> 
422<input type="hidden" name="SystemEmailFormat" value="HTML"> 
423<input type="hidden" name="SystemEmailTo" value="[email protected]"> 
424<input type="hidden" name="SystemEmailCC" value="">
425<center class="fw-bold mb-3 fs-3 text-secondary">Contact Us</center>
426<fieldset>
427<div class="system_text Header_text mb-5 text-center"><CENTER><B>Use the form below for comments or questions.</B></CENTER></div>
428
429
430
431<section class="w-100 mb-3 mt-5">
432<div class="label w-100 mb-2">
433<div class="inp_custom">
434<div class="formdivider formdivider_custom" style="border-bottom: 2px solid #343a40;">
435<span class="text-white d-inline-block fw-bold bg-dark px-3 py-2">Contact Us</span>
436</div>
437</div>
438</div>
439</section>
440
441
442
443<section class="w-96 mb-3" style="margin-left:2%" data-bs-toggle="tooltip" data-bs-placement="auto" title="">
444<div class="input w-100 form-floating">
445<INPUT NAME="Subject" VALUE="" id="Subject"  maxlength="" placeholder=" " type="Text"  class="formfieldinput formfieldinput_custom form-control" required>
446<label for="Subject" class="form-label text-muted">* Subject</label>
447</div>
448</section>
449 
450
451
452
453<section class="w-96 mb-3" style="margin-left:2%" data-bs-toggle="tooltip" data-bs-placement="auto" title="Be sure to enter proper email so we can contact you.">
454<div class="input w-100 form-floating">
455<INPUT NAME="Email" VALUE="" id="Email"  maxlength="" placeholder=" " type="Email"  class="formfieldinput formfieldinput_custom form-control" required>
456<label for="Email" class="form-label text-muted">* Email</label>
457</div>
458</section>
459 
460
461
462
463<section class="w-96 mb-3" style="margin-left:2%" data-bs-toggle="tooltip" data-bs-placement="auto" title="">
464<div class="input w-100 form-floating">
465<textarea  name="Message" id="Message" 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>
466<label for="Message" class="form-label text-muted">* Message</label>
467</div>
468</section>
469 
470
471
472
473</fieldset>
474<footer class="text-center mt-3">
475<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>
476<i id="cus-form-button-loader" class='fa fa-circle-o-notch fa-spin fast-spin fs-1 text-primary'></i>
477</footer>
478<div class="system_text footer_text mt-5 mb-3 text-center"></div>
479</form>
480</div>
481<script language="javascript">GetGoogleAnalytics('FORM:ContactUs');</script>
481
482<!-- Tooltip -->
483<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 483
483
484<script>
485var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'))
486var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {
487return new bootstrap.Tooltip(tooltipTriggerEl)
488})
489</script>
489
490<!-- /Tooltip -->
491</div>
492
493<!-- Form Script v2026-01-26-v2 -->
494<!-- Modern Popup Modal for Messages -->
495<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;">
496  <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);">
497    <div id="form-message-text" style="margin-bottom:20px; font-size:15px; color:#333; text-align:center; line-height:1.5;"></div>
498    <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>
499  </div>
500</div>
501
502<script>
503// Resolve the URL to POST the form to. On a normal page load the form lives at
504// its own URL, so window.location.pathname is correct. But when the form is
505// opened inside a popup (sys-popup.js), the page URL is the HOST page, not the
506// form's URL -- sys-popup stamps the real form path onto the form as
507// data-form-action, which we prefer when present.
508function cmsResolvePostUrl(form) {
509  var f = form || document.querySelector('form');
510  var a = f && f.getAttribute && f.getAttribute('data-form-action');
511  return a || window.location.pathname;
512}
513
514// Modern message popup function
515// onClose callback is called when user clicks OK (useful for resetting button on error)
516function showFormMessage(text, isSuccess = false, onClose = null) {
517  const modal = document.getElementById('form-message-modal');
518  const modalMsg = document.getElementById('form-message-text');
519  const modalOk = document.getElementById('form-message-ok');
520  
521  if (modal && modalMsg && modalOk) {
522    modalMsg.innerHTML = isSuccess 
523      ? '<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
524      : text;
525    modal.style.display = 'flex';
526    modalOk.onclick = function() { 
527      modal.style.display = 'none';
528      if (isSuccess) {
529        (window.top || window).location.href = '/';
530      } else if (onClose) {
531        onClose();
532      }
533    };
534    // Also close on backdrop click
535    modal.onclick = function(e) {
536      if (e.target === modal) {
537        modal.style.display = 'none';
538        if (isSuccess) {
539          (window.top || window).location.href = '/';
540        } else if (onClose) {
541          onClose();
542        }
543      }
544    };
545  } else {
546    // Fallback to alert if modal not found
547    alert(text);
548    if (isSuccess) {
549      (window.top || window).location.href = '/';
550    } else if (onClose) {
551      onClose();
552    }
553  }
554}
555
556// Accept.js card input modal for Authorize.net
557async function showAcceptJsCardInput(clientConfig, form, originalFormData, paymentResult) {
558  console.log('[forms] Loading Accept.js for card tokenization');
559  
560  // Load Accept.js script dynamically
561  if (!window.Accept) {
562    await new Promise((resolve, reject) => {
563      const script = document.createElement('script');
564      script.src = clientConfig.jsUrl;
565      script.onload = resolve;
566      script.onerror = () => reject(new Error('Failed to load Accept.js'));
567      document.head.appendChild(script);
568    });
569  }
570  
571  // Create card input modal
572  const modalHtml = `
573    <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;">
574      <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);">
575        <h3 style="margin:0 0 20px;color:#333;">Payment Information</h3>
576        <p style="margin:0 0 20px;color:#666;">Amount: <strong>$${paymentResult.amount}</strong></p>
577        
578        <div style="margin-bottom:15px;">
579          <label style="display:block;margin-bottom:5px;font-weight:600;color:#333;">Card Number *</label>
580          <input type="text" id="ajs-card-number" placeholder="4111 1111 1111 1111" maxlength="19"
581                 style="width:100%;padding:12px;border:1px solid #ccc;border-radius:4px;font-size:16px;box-sizing:border-box;">
582        </div>
583        
584        <div style="display:flex;gap:15px;margin-bottom:15px;">
585          <div style="flex:1;">
586            <label style="display:block;margin-bottom:5px;font-weight:600;color:#333;">Exp Month *</label>
587            <select id="ajs-exp-month" style="width:100%;padding:12px;border:1px solid #ccc;border-radius:4px;font-size:16px;">
588              <option value="">MM</option>
589              ${[...Array(12)].map((_,i) => '<option value="'+String(i+1).padStart(2,'0')+'">'+String(i+1).padStart(2,'0')+'</option>').join('')}
590            </select>
591          </div>
592          <div style="flex:1;">
593            <label style="display:block;margin-bottom:5px;font-weight:600;color:#333;">Exp Year *</label>
594            <select id="ajs-exp-year" style="width:100%;padding:12px;border:1px solid #ccc;border-radius:4px;font-size:16px;">
595              <option value="">YYYY</option>
596              ${[...Array(15)].map((_,i) => { const y=new Date().getFullYear()+i; return '<option value="'+y+'">'+y+'</option>'; }).join('')}
597            </select>
598          </div>
599          <div style="width:100px;">
600            <label style="display:block;margin-bottom:5px;font-weight:600;color:#333;">CVV *</label>
601            <input type="text" id="ajs-cvv" placeholder="123" maxlength="4"
602                   style="width:100%;padding:12px;border:1px solid #ccc;border-radius:4px;font-size:16px;box-sizing:border-box;">
603          </div>
604        </div>
605        
606        <div id="ajs-error" style="color:#dc3545;margin-bottom:15px;
606display:none;"></div>
607        
608        <div style="display:flex;gap:10px;">
609          <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>
610          <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>
611        </div>
612      </div>
613    </div>
614  `;
615  
616  document.body.insertAdjacentHTML('beforeend', modalHtml);
617  
618  const modal = document.getElementById('acceptjs-modal');
619  const cardInput = document.getElementById('ajs-card-number');
620  const cvvInput = document.getElementById('ajs-cvv');
621  const errorDiv = document.getElementById('ajs-error');
622  
623  // Format card number
624  cardInput.addEventListener('input', function(e) {
625    let v = e.target.value.replace(/\s+/g, '').replace(/[^0-9]/g, '');
626    let f = '';
627    for (let i = 0; i < v.length; i++) { if (i > 0 && i % 4 === 0) f += ' '; f += v[i]; }
628    e.target.value = f;
629  });
630  
631  // Only numbers in CVV
632  cvvInput.addEventListener('input', function(e) {
633    e.target.value = e.target.value.replace(/[^0-9]/g, '');
634  });
635  
636  // Cancel button - also reset the submit button
637  document.getElementById('ajs-cancel').onclick = function() {
638    modal.remove();
639    // Reset the original form's submit button
640    const submitBtn = form.querySelector('button[type="submit"], #SUBMIT1, input[type="submit"]');
641    if (submitBtn) {
642      submitBtn.disabled = false;
643      if (submitBtn.tagName === 'INPUT') {
644        submitBtn.value = 'Submit';
645      } else {
646        submitBtn.innerHTML = 'Submit';
647      }
648    }
649  };
650  
651  // Submit button
652  document.getElementById('ajs-submit').onclick = async function() {
653    const cardNumber = cardInput.value.replace(/\s+/g, '');
654    const expMonth = document.getElementById('ajs-exp-month').value;
655    const expYear = document.getElementById('ajs-exp-year').value;
656    const cvv = cvvInput.value;
657    
658    // Validate
659    if (!cardNumber || cardNumber.length < 13) {
660      errorDiv.textContent = 'Please enter a valid card number';
661      errorDiv.style.display = 'block';
662      return;
663    }
664    if (!expMonth || !expYear) {
665      errorDiv.textContent = 'Please select expiration date';
666      errorDiv.style.display = 'block';
667      return;
668    }
669    if (!cvv || cvv.length < 3) {
670      errorDiv.textContent = 'Please enter CVV';
671      errorDiv.style.display = 'block';
672      return;
673    }
674    
675    errorDiv.style.display = 'none';
676    this.disabled = true;
677    this.innerHTML = '<span class="form-spinner-ring" style="border-color:rgba(255,255,255,0.4);border-top-color:#fff;"></span> Processing...';
678
679    // Test card detection - skip Accept.js tokenization
680    var TEST_CARDS_V3 = ['4111111111111111', '4000000000000000', '5500000000000004', '370000000000002', '6011000000000004'];
681    if (TEST_CARDS_V3.indexOf(cardNumber) !== -1) {
682      console.log('[forms] Test card detected - skipping tokenization');
683      originalFormData.append('dataDescriptor', 'TEST_CARD');
684      originalFormData.append('dataValue', 'TEST');
685      originalFormData.append('pf-card-number-input', cardNumber);
686
687      try {
688        const testResp = await fetch(cmsResolvePostUrl(), {
689          method: 'POST',
690          body: originalFormData,
691          headers: { 'Accept': 'application/json' }
692        });
693        const testResult = await testResp.json();
694        modal.remove();
695        if (testResult.success && testResult.isPaymentComplete) {
696          if (testResult.subscriberToken) {
697            try {
698              var tp2 = JSON.parse(atob(testResult.subscriberToken.split('.')[1]));
699              var ma2 = tp2.exp ? (tp2.exp - Math.floor(Date.now() / 1000)) : (30 * 24 * 60 * 60);
700              document.cookie = 'subscriber_token=' + encodeURIComponent(testResult.subscriberToken) + '; path=/; max-age=' + ma2 + '; SameSite=Lax';
701            } catch (e) { /* ignore */ }
702          }
703          var msg = testResult.confirmMessage
704            ? testResult.confirmMessage + '<br><br><small>Transaction ID: ' + testResult.transactionId + '</small>'
705            : 'Test payment successful! Transaction ID: ' + testResult.transactionId;
706          var retUrl = null;
707          try { retUrl = localStorage.getItem('subscriber_return_url'); } catch (e) { /* ignore */ }
708          if (!retUrl) { try { retUrl = new URLSearchParams(window.location.search).get('return_url'); } catch (e) { /* ignore */ } }
709          if (retUrl) {
710            try { localStorage.removeItem('subscriber_return_url'); } catch (e) { /* ignore */ }
711            msg += '<p style="margin-top:15px;color:#666;">Redirecting you back to your article...</p>';
712            showFormMessage(msg, true);
713            setTimeout(function() { window.location.href = retUrl; }, 2000);
714          } else {
715            showFormMessage(msg, true);
716          }
717          form.reset();
718        } else {
719          showFormMessage(testResult.error || 'Payment failed.', false);
720        }
721      } catch (e) {
722        modal.remove();
723        showFormMessage('Network error. Please try again.', false);
724      }
725      return;
726    } else {
727    // Build Accept.js request
728    const secureData = {
729      authData: {
730        clientKey: clientConfig.clientKey,
731        apiLoginID: clientConfig.apiLoginId
732      },
733      cardData: {
734        cardNumber: cardNumber,
735        month: expMonth,
736        year: expYear,
737        cardCode: cvv
738      }
739    };
740
741    // Tokenize via Accept.js
742    Accept.dispatchData(secureData, async function(response) {
743      if (response.messages.resultCode === 'Error') {
744        const errorText = response.messages.message.map(m => m.text).join(', ');
745        errorDiv.textContent = errorText;
746        errorDiv.style.display = 'block';
747        const ajsBtn = document.getElementById('ajs-submit');
748        ajsBtn.disabled = false;
749        ajsBtn.innerHTML = 'Pay Now';
750        return;
751      }
752
753      console.log('[forms] Card tokenized successfully, resubmitting form');
754
755      // Add token to form data and resubmit
756      originalFormData.append('dataDescriptor', response.opaqueData.dataDescriptor);
757      originalFormData.append('dataValue', response.opaqueData.dataValue);
758      
759      try {
760        const response2 = await fetch(cmsResolvePostUrl(), {
761          method: 'POST',
762          body: originalFormData,
763          headers: { 'Accept': 'application/json' }
764        });
765        const result2 = await response2.json();
766        
767        modal.remove();
768        
769        // Get the submit button to reset on error
770        const submitBtn = form.querySelector('button[type="submit"], #SUBMIT1, input[type="submit"]');
771        const resetButton = function() {
772          if (submitBtn) {
773            submitBtn.disabled = false;
774            if (submitBtn.tagName === 'INPUT') {
775              submitBtn.value = 'Submit';
776            } else {
777              submitBtn.innerHTML = 'Submit';
778            }
779          }
780        };
781        
782        if (result2.success && result2.isPaymentComplete) {
783          // Auto-login: set subscriber_token cookie if provided
784          if (result2.subscriberToken) {
785            try {
786              var tp = JSON.parse(atob(result2.subscriberToken.split('.')[1]));
787              var ma = tp.exp ? (tp.exp - Math.floor(Date.now() / 1000)) : (30 * 24 * 60 * 60);
788              document.cookie = 'subscriber_token=' + encodeURIComponent(result2.subscriberToken) + '; path=/; max-age=' + ma + '; SameSite=Lax';
789              console.log('[forms] Auto-login: subscriber_token cookie set (Accept.js path)');
790            } catch (e) { console.warn('[forms] Auto-login cookie error', e); }
791          }
792          // Build success message with custom confirm message if available
793          let successMsg = 'Payment successful! Transaction ID: ' + result2.transactionId;
794          if (result2.confirmMessage) {
795            successMsg = result2.confirmMessage + '<br><br><small>Transaction ID: ' + result2.transactionId + '</small>';
796          }
797          var retUrl2 = null;
798          try { retUrl2 = localStorage.getItem('subscriber_return_url'); } catch (e) { /* ignore */ }
799          if (!retUrl2) { try { retUrl2 = new URLSearchParams(window.location.search).get('return_url'); } catch (e) { /* ignore */ } }
800          if (retUrl2) {
801            try { localStorage.removeItem('subscriber_return_url'); } catch (e) { /* ignore */ }
802            successMsg += '<p style="margin-top:15px;color:#666;">Redirecting you back to your article...</p>';
803            showFormMessage(successMsg, true);
804            setTimeout(function() { window.location.href = retUrl2; }, 2000);
805          } else {
806            showFormMessage(successMsg, true);
807          }
808          form.reset();
809        } else {
810          showFormMessage(result2.error || 'Payment failed. Please try again.', false, resetButton);
811        }
812      } catch (e) {
813        modal.remove();
814        const submitBtn = form.querySelector('button[type="submit"], #SUBMIT1, input[type="submit"]');
815        showFormMessage('Network error. Please try again.', false, function() {
816          if (submitBtn) {
817            submitBtn.disabled = false;
818            if (submitBtn.tagName === 'INPUT') {
819              submitBtn.value = 'Submit';
820            } else {
821              submitBtn.innerHTML = 'Submit';
822            }
823          }
824        });
825      }
826    });
827    } // end else (real card tokenization)
828  };
829}
830
831// Initialize File Uploader on load to handle image cropping/uploading.
832// Defined as a named function (not an inline DOMContentLoaded callback) so it can
833// also run immediately when the DOM is ALREADY parsed -- e.g. when this form is
834// injected into a popup after DOMContentLoaded has already fired. Without that,
835// the uploader (image cropper) never initializes inside the modal.
836async function cmsInitFormUploader() {
837  // Restore form data if user cancelled payment
838  try {
839    const pendingData = sessionStorage.getItem('_pendingFormData');
840    if (pendingData) {
841      const formData = JSON.parse(pendingData);
842      const form = document.getElementById('CustomForm') || document.querySelector('form');
843      if (form) {
844        for (const [key, value] of Object.entries(formData)) {
845          if (value && typeof value === 'string') {
846            const field = form.querySelector('[name="' + key + '"]');
847            if (field) {
848              if (field.tagName === 'SELECT') {
849                field.value = value;
850              } else if (field.type !== 'file' && field.type !== 'hidden') {
851                field.value = value;
852              }
853            }
854          }
855        }
856        console.log('[forms] Restored form data from cancelled payment');
857      }
858      // Clear the stored data
859      sessionStorage.removeItem('_pendingFormData');
860      sessionStorage.removeItem('_pendingFormUrl');
861    }
862  } catch (e) {
863    console.error('[forms] Error restoring form data:', e);
864  }
865  
866  try {
867    const { UnifiedFileUploader } = await import('/sys-components-UnifiedFileUploader.js?v=' + Date.now());
868    window.unifiedUploader = new UnifiedFileUploader();
869    window.unifiedUploader.init();
870  } catch (e) {
871    console.error('Failed to init uploader:', e);
872  }
873}
874// Normal page load: wait for DOMContentLoaded. Popup: the form is injected after
875// DOMContentLoaded already fired, so run immediately when the DOM is already
876// parsed -- otherwise the uploader (image cropper) never initializes in the
877// modal. The earlier empty-box / stuck-button symptom was FontAwesome 4 vs 6
878// (the FA6 spinner glyph was missing); the form now injects FA6, so the cropper
879// controls and spinner render and the uploader completes normally here too.
880if (document.readyState === 'loading') {
881  document.addEventListener('DOMContentLoaded', cmsInitFormUploader);
882} else {
883  cmsInitFormUploader();
884}
885
886async function unifiedSubmitForm(event) {
887  console.log('[forms] unifiedSubmitForm called v5 - 2026-01-26 Enhanced spinner');
888  if (event) { event.preventDefault(); event.stopPropagation(); }
889  
890  // Use event.target if available (most reliable)
891  const form = (event && event.target && event.target.tagName === 'FORM') ? event.target : (document.getElementById('CustomForm') || document.querySelector('form'));
892
893  // Enforce native constraint validation (required / type=email / pattern ...)
894  // BEFORE anything else. This handler preventDefault()s the native submit on its
895  // first line, which also bypasses the browser's own required-field check -- so
896  // without this call a blank required field would fetch-POST straight through
897  // (legacy custom forms had no client-side guard at all). reportValidity() focuses
898  // the first invalid field, shows the browser's validation bubble, and bails.
899  // Runs before the submit button is put into its spinner/disabled state so a
900  // blocked submit leaves the form fully usable.
901  if (form && typeof form.reportValidity === 'function' && !form.reportValidity()) {
902    return false;
903  }
904
905  // Ensure any processed files are in the form before submission
906  if (window.unifiedUploader && window.unifiedUploader.ensureProcessedFilesInForm) {
907    window.unifiedUploader.ensureProcessedFilesInForm();
908  }
909  
910  const btn = form.querySelector('button[type="submit"], #SUBMIT1, input[type="submit"]');
911  const originalHtml = btn ? (btn.tagName === 'INPUT' ? btn.value : btn.innerHTML) : 'Submit';
912  
913  // Show loading state with spinner
914  if (btn) {
915    btn.disabled = true;
916    if (btn.tagName === 'INPUT') {
917      // Inputs can't hold an inline span, so use the class-based ::after spinner.
918      btn.classList.add('btn-loading');
919      btn.value = '  Processing...';
920      btn.style.paddingLeft = '35px';
921    } else {
922      // Buttons: the inline ring span is the single spinner. Do NOT add the
923      // btn-loading class here -- button.btn-loading::after renders a SECOND
924      // spinner, which produced two spinning icons at once on submit. Keep the
925      // disabled look via inline styles instead (robust even in popups where the
926      // injected spinner CSS may be absent).
927      btn.style.pointerEvents = 'none';
928      btn.style.opacity = '0.85';
929      btn.innerHTML = '<span class="form-spinner-ring"></span> Processing...';
930    }
931  }
932  
933  // Single spinner only: the disabled submit button already shows a spinner
934  // ("Processing..."), so we intentionally do NOT add the full-form overlay
935  // spinner here -- it produced two spinning icons at once (most visible in the
936  // popup). overlay stays null; the cleanup checks below are guarded for it.
937  let overlay = null;
938  try {
939    // Mint a fresh reCAPTCHA token before reading the form. On popup-rendered
940    // forms the on-load mint may not have fired yet (api.js was injected only
941    // moments ago by sys-popup's executeScripts), so without this the hidden
942    // token field is still empty and the server blocks as recaptcha_missing.
943    if (typeof window.cmsMintCaptchaToken === 'function') {
944      try { await window.cmsMintCaptchaToken(); } catch (e) {}
945    }
946    const formData = new FormData(form);
947
948    // Capture display TEXT for all select, radio, and checkbox elements
949    // Add as fieldname_text so email shows human-readable labels instead of raw values
950    form.querySelectorAll('select').forEach(function(select) {
951      if (select.name && select.selectedIndex >= 0) {
952        if (select.multiple) {
953          // Multi-select: join the text of EVERY selected option, not just the first
954          var multiTexts = Array.prototype.map.call(select.selectedOptions, function(o) { return o.text; });
955          formData.append(select.name + '_text', multiTexts.join(', '));
956        } else {
957          const selectedOption = select.options[select.selectedIndex];
958          if (selectedOption) {
959            formData.append(select.name + '_text', selectedOption.text);
960          }
961        }
962      }
963    });
964    // Capture checked radio button labels
965    var radiosDone = {};
966    form.querySelectorAll('input[type="radio"]:checked').forEach(function(radio) {
967      if (radio.name && !radiosDone[radio.name]) {
968        radiosDone[radio.name] = true;
969        var label = form.querySelector('label[for="' + radio.id + '"]');
970        if (label) {
971          formData.append(radio.name + '_text', label.textContent.trim());
972        }
973      }
974    });
975    // Capture checked checkbox labels
976    var checkboxTexts = {};
977    form.querySelectorAll('input[type="checkbox"]:checked').forEach(function(cb) {
978      if (cb.name) {
979        var cleanName = cb.name.replace('[]', '');
980        var label = form.querySelector('label[for="' + cb.id + '"]');
981        var text = label ? label.textContent.trim() : (cb.value === 'on' ? 'Yes' : cb.value);
982        if (!checkboxTexts[cleanName]) checkboxTexts[cleanName] = [];
983        checkboxTexts[cleanName].push(text);
984      }
985    });
986    Object.keys(checkboxTexts).forEach(function(name) {
987      formData.append(name + '_text', checkboxTexts[name].join(', '));
988    });
989    const response = await fetch(cmsResolvePostUrl(form), {
990      method: 'POST',
991      body: formData,
992      headers: { 'Accept': 'application/json' }
993    });
994    const result = await response.json();
995    console.log('[forms] v3 Server response:', JSON.stringify(result));
996    console.log('[forms] v3 Keys in result:', Object.keys(result).join(', '));
997    console.log('[forms] v3 requiresCardInput:', result.requiresCardInput, 'clientConfig:', !!result.clientConfig);
998    console.log('[forms] v3 isPaymentRedirect:', result.isPaymentRedirect, 'redirectUrl:', result.redirectUrl);
999    if (result.success) {
1000      // PRIORITY 0: Check if payment is already complete (Authorize.net Accept.js)
1001      if (result.isPaymentComplete) {
1002        console.log('[forms] Payment complete! Transaction:', result.transactionId);
1003
1004        // Auto-login: set subscriber_token cookie if provided
1005        if (result.subscriberToken) {
1006          try {
1007            var tokenPayload = JSON.parse(atob(result.subscriberToken.split('.')[1]));
1008            var maxAge = tokenPayload.exp ? (tokenPayload.exp - Math.floor(Date.now() / 1000)) : (30 * 24 * 60 * 60);
1009            document.cookie = 'subscriber_token=' + encodeURIComponent(result.subscriberToken) + '; path=/; max-age=' + maxAge + '; SameSite=Lax';
1010            console.log('[forms] Auto-login: subscriber_token cookie set');
1011          } catch (e) {
1012            console.warn('[forms] Auto-login: failed to set cookie', e);
1013          }
1014        }
1015
1016        // Build success message with custom confirm message if available
1017        let successMsg = 'Payment successful! Transaction ID: ' + result.transactionId;
1018        if (result.confirmMessage) {
1019          successMsg = result.confirmMessage + '<br><br><small>Transaction ID: ' + result.transactionId + '</small>';
1020        }
1021
1022        // Redirect back to article if return URL is available (from paywall subscribe flow)
1023        var returnUrl = null;
1024        try {
1025          returnUrl = localStorage.getItem('subscriber_return_url');
1026        } catch (e) { /* ignore */ }
1027        // Also check URL query param
1028        if (!returnUrl) {
1029          try {
1030            var params = new URLSearchParams(window.location.search);
1031            returnUrl = params.get('return_url');
1032          } catch (e) { /* ignore */ }
1033        }
1034
1035        if (returnUrl) {
1036          try { localStorage.removeItem('subscriber_return_url'); } catch (e) { /* ignore */ }
1037          // Show brief success message then redirect
1038          successMsg += '<p style="margin-top:15px;color:#666;">Redirecting you back to your article...</p>';
1039          showFormMessage(successMsg, true);
1040          setTimeout(function() { window.location.href = returnUrl; }, 2000);
1041        } else {
1042          showFormMessage(successMsg, true);
1043        }
1044        form.reset();
1045        return;
1046      }
1047      
1048      // PRIORITY 1: Check for payment redirect FIRST (Stripe Checkout)
1049      // Payment forms MUST redirect to the payment gateway before showing any message
1050      if (result.isPaymentRedirect && result.redirectUrl) {
1051        console.log('[forms] Payment redirect detected, redirecting to:', result.redirectUrl);
1052        window.location.href = result.redirectUrl;
1053        return;
1054      }
1055      
1056      // PRIORITY 1.5: Check if card input is required (Authorize.net Accept.js)
1057      console.log('[forms] v3 Checking requiresCardInput:', result.requiresCardInput, 'clientConfig exists:', !!result.clientConfig);
1058      if (result.requiresCardInput && result.clientConfig) {
1059        console.log('[forms] v3 Card input required! Showing Accept.js modal...');
1060        try {
1061          await showAcceptJsCardInput(result.clientConfig, form, formData, result);
1062          console.log('[forms] v3 showAcceptJsCardInput completed');
1063        } catch (modalError) {
1064          console.error('[forms] v3 showAcceptJsCardInput error:', modalError);
1065        }
1066        return;
1067      }
1068      
1069      // PRIORITY 2: Check for regular redirect URL
1070      if (result.redirectUrl && result.redirectUrl !== window.location.href) {
1071        console.log('[forms] Redirecting to:', result.redirectUrl);
1072        window.location.href = result.redirectUrl;
1073        return;
1074      }
1075      
1076      // PRIORITY 3: Show thanks content (email_confirm_message, etc.)
1077      if (result.thanksContent) {
1078        // CRITICAL: Scroll to top BEFORE replacing content to avoid layout shifts
1079        window.scrollTo({ top: 0, behavior: 'smooth' });
1080        
1081        // Check if standalone thank you page is requested
1082        if (result.standaloneThankYou) {
1083          // Replace entire page content with standalone thank you page
1084          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>';
1085          window.scrollTo({ top: 0, behavior: 'instant' });
1086          return;
1087        }
1088        
1089        // Replace form content with thanks message (embedded mode)
1090        form.innerHTML = '<div id="form-thanks-message" style="padding:40px;text-align:center;min-height:200px">' + result.thanksContent + '</div>';
1091        
1092        // CRITICAL: Force scroll to top using multiple methods for maximum compatibility
1093        const forceScrollToTop = () => {
1094          console.log('[forms] Executing robust scroll-to-top');
1095          
1096          // 1. Standard window scroll
1097          window.scrollTo({ top: 0, behavior: 'smooth' });
1098          
1099          // 2. Element-based scroll (most reliable when embedded)
1100          const thanksEl = document.getElementById('form-thanks-message');
1101          if (thanksEl) {
1102            thanksEl.scrollIntoView({ behavior: 'smooth', block: 'start' });
1103          }
1104          
1105          // 3. Recursive parent scroll (for nested scrollable containers)
1106          try {
1107            let parent = form.parentElement;
1108            while (parent && parent !== document.body) {
1109              if (parent.scrollHeight > parent.clientHeight) {
1110                console.log('[forms] Resetting parent scroll:', parent);
1111                parent.scrollTop = 0;
1112              }
1113              parent = parent.parentElement;
1114            }
1115          } catch (e) {}
1116          
1117          // 4. Fallback for older/mobile browsers
1118          document.body.scrollTop = 0;
1119          document.documentElement.scrollTop = 0;
1120          
1121          // 5. Hash trick to force top
1122          if (window.location.hash !== '') {
1123            window.location.hash = '';
1124          }
1125          
1126          // 6. If inside iframe, try to scroll parent window
1127          try {
1128            if (window.parent && window.parent !== window) {
1129              window.parent.scrollTo({ top: 0, behavior: 'smooth' });
1130            }
1131          } catch (e) {}
1132        };
1133
1134        // Execute in multiple phases to ensure layout is settled
1135        forceScrollToTop();
1136        requestAnimationFrame(forceScrollToTop);
1137        setTimeout(forceScrollToTop, 100);
1138        setTimeout(forceScrollToTop, 500);
1139        setTimeout(forceScrollToTop, 1000);
1140        setTimeout(forceScrollToTop, 2000);
1141      } else {
1142        // Default: redirect to home
1143        window.location.href = "/";
1144      }
1145    } else {
1146      // Remove overlay and reset button on error
1147      if (overlay && overlay.parentNode) overlay.remove();
1148      showFormMessage(result.error || "Submission failed");
1149      if (btn) {
1150        btn.disabled = false;
1151        btn.classList.remove('btn-loading');
1152        btn.style.paddingLeft = '';
1153        btn.style.pointerEvents = '';
1154        btn.style.opacity = '';
1155        if (btn.tagName === 'INPUT') {
1156          btn.value = originalHtml;
1157        } else {
1158          btn.innerHTML = originalHtml;
1159        }
1160      }
1161    }
1162  } catch (e) {
1163    console.error(e);
1164    // Remove overlay and reset button on network error
1165    if (overlay && overlay.parentNode) overlay.remove();
1166    showFormMessage("Network error. Please check your connection and try again.");
1167    if (btn) {
1168      btn.disabled = false;
1169      btn.classList.remove('btn-loading');
1170      btn.style.paddingLeft = '';
1171      btn.style.pointerEvents = '';
1172      btn.style.opacity = '';
1173      if (btn.tagName === 'INPUT') {
1174        btn.value = originalHtml;
1175      } else {
1176        btn.innerHTML = originalHtml;
1177      }
1178    }
1179  }
1180  return false;
1181}
1182
1183// ========== STRIPE PAYMENT SUCCESS HANDLER ==========
1184// Check for payment success redirect from Stripe on page load
1185(function checkStripePaymentSuccess() {
1186  const urlParams = new URLSearchParams(window.location.search);
1187  const paymentStatus = urlParams.get('payment');
1188  const sessionId = urlParams.get('session_id');
1189  const returnUrl = urlParams.get('return_url');
1190  
1191  if (paymentStatus === 'success' && sessionId) {
1192    console.log('[forms] Detected Stripe payment success, session:', sessionId);
1193    console.log('[forms] Return URL:', returnUrl || 'none');
1194    
1195    // Show loading message
1196    showFormMessage('Processing payment confirmation...');
1197    
1198    // Fetch session details from our API
1199    fetch((typeof __CMS_BASE_PATH !== 'undefined' ? __CMS_BASE_PATH : '') + '/api/payment/session/' + encodeURIComponent(sessionId))
1200      .then(response => response.json())
1201      .then(data => {
1202        if (data.success) {
1203          const amount = data.amount ? '$' + parseFloat(data.amount).toFixed(2) : '';
1204          const txId = data.transaction_id || sessionId;
1205          
1206          // Build success message
1207          let msg = '<div style="margin-bottom:15px;font-size:16px;">Your subscription has been activated!</div>';
1208          msg += '<div style="margin-bottom:15px;font-size:18px;font-weight:600;">Thank you for subscribing.</div>';
1209          if (amount) {
1210            msg += '<div style="margin-bottom:10px;color:#666;">Amount: <strong>' + amount + '</strong></div>';
1211          }
1212          if (data.description && data.description !== 'Payment') {
1213            msg += '<div style="margin-bottom:10px;color:#666;">Plan: <strong>' + data.description + '</strong></div>';
1214          }
1215          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>';
1216          
1217          // If there's a return URL, add redirect notice
1218          if (returnUrl) {
1219            msg += '<div style="margin-top:15px;color:#666;font-size:14px;">Redirecting you back to your article in 3 seconds...</div>';
1220          }
1221          
1222          showFormMessage(msg, true);
1223          
1224          // Clean up URL (remove query params)
1225          if (window.history && window.history.replaceState) {
1226            const cleanUrl = window.location.pathname;
1227            window.history.replaceState({}, document.title, cleanUrl);
1228          }
1229          
1230          // Redirect to return URL after 3 seconds (back to the article)
1231          if (returnUrl) {
1232            setTimeout(function() {
1233              // Ensure return URL is same origin for security
1234              try {
1235                const returnUrlObj = new URL(returnUrl, window.location.origin);
1236                if (returnUrlObj.origin === window.location.origin) {
1237                  window.location.href = returnUrl;
1238                }
1239              } catch (e) {
1240                // If it starts with /, treat as relative URL
1241                if (returnUrl.startsWith('/')) {
1242                  window.location.href = returnUrl;
1243                }
1244              }
1245            }, 3000);
1246          }
1247        } else {
1248          showFormMessage('Payment was processed but we could not retrieve details. Your payment was successful.', true);
1249          // Still redirect if return URL exists
1250          if (returnUrl) {
1251            setTimeout(function() { window.location.href = returnUrl; }, 3000);
1252          }
1253        }
1254      })
1255      .catch(err => {
1256        console.error('[forms] Error fetching session:', err);
1257        // Still show success even if API fails - payment went through
1258        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);
1259        // Still redirect if return URL exists
1260        if (returnUrl) {
1261          setTimeout(function() { window.location.href = returnUrl; }, 3000);
1262        }
1263      });
1264  } else if (paymentStatus === 'cancelled') {
1265    showFormMessage('Payment was cancelled. You can try again when ready.');
1266    // Clean up URL
1267    if (window.history && window.history.replaceState) {
1268      const cleanUrl = window.location.pathname;
1269      window.history.replaceState({}, document.title, cleanUrl);
1270    }
1271  }
1272})();
1273</script>
1273</div>
1274                            </div>
1275                        </div>  
1276                        <div class="row mb-2">
1277                            <div class="col-12">
1278                                <hr class="my-2 text-secondary">
1279                                <div data-cms-block="adgroup-12" data-cms-block-label="Advertisement 12" data-cms-el="adgroup" data-cms-adgroup="12">
1279<script type="text/javascript" language="JavaScript">AdGroup12();</script>
1279</div>
1280                            </div>
1281                        </div>
1282                    </div>
1283                </div>
1284                <div class="cus-column-133-2 container col-lg-3 pe-lg-0 ps-lg-3 border-start">
1285                    <div class="w-100 cus-position-sticky float-start" data-sticky="10">
1286                        <div class="row mb-2">
1287                            <div class="col-12 px-0">
1288                                <div data-cms-block="highlight-2" data-cms-block-label="Highlights 2" data-cms-el="highlight" data-cms-highlight="2">
1288<script type="text/javascript" language="JavaScript">GetHighlights2();</script>
1288</div>
1289                            </div>
1290                        </div>
1291                        <div class="row">
1292                            <div class="col-12">
1293                                <div data-cms-block="poll-1" data-cms-block-label="Poll 1" data-cms-el="poll" data-poll-id="1">
1293<script type="text/javascript" language="JavaScript">GetPoll1();</script>
1293</div>
1294                            </div>
1295                        </div>
1296                        <div class="row mb-2">
1297                            <div class="col-12">
1298                                <hr class="my-2 text-secondary">
1299                                <div data-cms-block="adgroup-11" data-cms-block-label="Advertisement 11" data-cms-el="adgroup" data-cms-adgroup="11">
1299<script type="text/javascript" language="JavaScript">AdGroup11();</script>
1299</div>
1300                                <div data-cms-block="adgroup-13" data-cms-block-label="Advertisement 13" data-cms-el="adgroup" data-cms-adgroup="13">
1300<script type="text/javascript" language="JavaScript">AdGroup13();</script>
1300</div>
1301                            </div>
1302                        </div>
1303                    </div>
1304                </div>
1305                <style>@media (max-width: 992px) {.cus-column-133-2 {border-width: 0 !important;} }</style>
1306            </div>
1307            <!-- /2-columns -->
1308            <!-- footer -->
1309            <div class="cus-footer-1-133-footer row bg-light border p-2 py-5 mt-5">
1310                <div class="container col-12">
1311                    <div class="row mb-2">
1312                        <div class="col-lg-6 mb-2 mb-lg-0 hpe-custom-text-4">
1313                            <i class="fa fa-map-marker text-red" style="padding-right: 0.8rem" aria-hidden="true"></i>
1313<script type="text/javascript">Section4();</script>
1313
1314                        </div>
1315                        <div class="col-lg-6">
1316                            <div class="float-sm-end hpe-custom-text-6">
1317                                <i class="fa fa-phone text-red pe-2" aria-hidden="true"></i>
1317<script type="text/javascript">Section6();</script>
1317
1318                            </div>
1319                        </div>
1320                    </div>
1321                    <div class="row mb-2 pb-2 border-bottom">
1322                        <div class="col-lg-6 mb-2 mb-lg-0 hpe-custom-text-5">
1323                            <i class="fa fa-copyright text-red pe-2" aria-hidden="true"></i>
1323<script type="text/javascript">Section5();</script>
1323
1324                        </div>
1325                        <div class="col-lg-6">
1326                            <div class="float-sm-end hpe-custom-text-7">
1327                                <i class="fa fa-envelope text-red pe-2" aria-hidden="true"></i>
1328                            </div>
1329                        </div>
1330                    </div>
1331                    <div class="row mb-2 d-flex justify-content-center">
1332                        <div class="col-6 col-lg-3 d-flex justify-content-center px-0 hpe-logo" data-logo-width="1250">
1333                            <div data-cms-el="logo">
1333<script type="text/javascript" language="JavaScript">GetLogo();</script>
1333</div>
1334                        </div>
1335                    </div>
1336                    <div class="row d-flex justify-content-center ">
1337
1338                    </div>
1339                </div>
1340            </div>
1341            <!-- /footer -->
1342        </div>
1343    </div>
1344    <!-- go to top -->
1345    <div class="cus-scroll-top position-fixed end-0 bg-dark text-white fs-4 px-2" style="cursor: pointer;bottom: auto;transition: 400ms linear;" data-bs-toggle="tooltip" data-bs-placement="top" title="Go to top"><i class="fa fa-angle-up"></i></div>
1346    
1346<script>
1347        if (document.getElementsByClassName("cus-scroll-top")) {
1348            window.addEventListener("scroll", function() {
1349                if (document.body.scrollTop > 600 || document.documentElement.scrollTop > 600) {
1350                    document.getElementsByClassName('cus-scroll-top')[0].style.bottom = 0;
1351                } else {
1352                    document.getElementsByClassName('cus-scroll-top')[0].style.bottom = "-100px";
1353                }
1354            });
1355            document.getElementsByClassName('cus-scroll-top')[0].addEventListener('click', function() {
1356                window.scrollTo(0, 0);
1357            });
1358        }
1359    </script>
1359
1360    <!-- /go to top -->
1361    <div class="cus-g-analytics-133">
1361<script language="javascript">GetGoogleAnalytics('');</script>
1361</div>
1362    <!-- tooltip -->
1363    
1363<script>
1364        var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'))
1365        var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {
1366            return new bootstrap.Tooltip(tooltipTriggerEl)
1367        });
1368    </script>
1368
1369    <!-- /tooltip -->
1370<script defer src="/sys-popup.js?v=1789926857"></script>
vendor: 1 bytes, line 1370
1370
1371<script>
1372// Form data restoration (runs on page load) - reads from COOKIE
1373(function() {
1374  console.log('[forms] Restoration script running...');
1375  console.log('[forms] Current cookies:', document.cookie);
1376  try {
1377    var cookies = document.cookie.split('; ');
1378    var pendingCookie = null;
1379    for (var i = 0; i < cookies.length; i++) {
1380      if (cookies[i].indexOf('_pendingFormData=') === 0) {
1381        pendingCookie = cookies[i];
1382        break;
1383      }
1384    }
1385    console.log('[forms] Found pending cookie:', !!pendingCookie);
1386    if (pendingCookie) {
1387      var cookieValue = pendingCookie.substring('_pendingFormData='.length);
1388      console.log('[forms] Cookie value length:', cookieValue.length);
1389      var formData = JSON.parse(decodeURIComponent(cookieValue));
1390      console.log('[forms] Parsed form data:', Object.keys(formData));
1391      var form = document.getElementById('CustomForm') || document.querySelector('form');
1392      console.log('[forms] Found form:', !!form, form ? form.id : 'no id');
1393      if (form) {
1394        Object.keys(formData).forEach(function(key) {
1395          var value = formData[key];
1396          if (value && typeof value === 'string') {
1397            var field = form.querySelector('[name="' + key + '"]');
1398            if (field) {
1399              console.log('[forms] Restoring field:', key, '=', value.substring(0, 20));
1400              if (field.tagName === 'SELECT') {
1401                field.value = value;
1402              } else if (field.type !== 'file' && field.type !== 'hidden') {
1403                field.value = value;
1404              }
1405              // Trigger change event for floating labels
1406              field.dispatchEvent(new Event('input', { bubbles: true }));
1407              field.dispatchEvent(new Event('change', { bubbles: true }));
1408            }
1409          }
1410        });
1411        console.log('[forms] Form data restored successfully');
1412      }
1413      // Clear the cookies
1414      document.cookie = '_pendingFormData=; path=/; max-age=0';
1415      document.cookie = '_pendingFormUrl=; path=/; max-age=0';
1416      console.log('[forms] Cookies cleared');
1417    }
1418  } catch (e) {
1419    console.error('[forms] Error restoring form data:', e);
1420  }
1421})();
1422</script>
vendor: 1 bytes, line 1422
1422
1423<script>
1424(function(){
1425  document.addEventListener('submit',function(e){
1426    var form=e.target;if(!form||form.tagName!=='FORM')return;
1427    var btn=form.querySelector('button[type="submit"],input[type="submit"],.survey-btn-submit,#SUBMIT1');
1428    if(!btn||btn.disabled)return;
1429    btn.disabled=true;
1430    if(btn.tagName==='INPUT'){btn.value='  Submitting...';}
1431    else{btn.innerHTML='<span class="form-submit-spinner"></span> Submitting...';}
1432  },true);
1433})();
1434</script>
1434</body>
1435<!--Template-133-->
1436
1437</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.