PageSourceSearch

https://treasuresjewelryky.com/

html treasuresjewelryky.com collected 2026-09-29 03:42:30 UTC 161,045 bytes, 3,452 lines download raw bytes

1
2<!DOCTYPE html>
3<html>
4<head>
5    <meta charset="utf-8" />
6    <meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover, maximum-scale=1.0" />
7    <meta name="format-detection" content="telephone=no" />
8    <meta property="og:locale" content="en_US" />
9    <meta property="og:type" content="website" />
10        <meta property="og:title" content="Treasures Jewelry - Paducah, KY" />
11            <meta property="og:url" content="https://treasuresjewelryky.com/" />
12                <meta property="og:image" content="https://du9m0k402rjmo.cloudfront.net/images/P_25532/8005bd29-14a9-4ccd-8216-4d89afd2c0e2.jpg" />
13            <meta property="og:description" content="Since opening our doors in 1995, Treasures Jewelry has proudly served Paducah, KY, as a trusted, full-service jewelry store rooted in craftsmanship, quality, and personal service. What began as a local shop has grown into a beloved destination for those who appreciate the beauty and meaning behind every piece of jewelry.
14
15We specialize in carat-plus diamonds, vintage and estate jewelry, and custom designs that reflect the unique stories of our customers. Our talented in-house design team works closely with you to create one-of-a-kind pieces for any occasion—whether it&#39;s a reimagined heirloom or a brand-new creation. And when it comes to care and maintenance, our on-site repair services are known for their precision, speed, and affordability.
16
17Treasures Jewelry is a one-stop store for those who appreciate truly unique jewelry. Our showroom features an ever-changing selection of fine jewelry and gifts, ensuring that every visit brings something new to discover. We also offer interest-free financing, making it easier to invest in the jewelry you love without compromise.
18
19Above all, we pride ourselves on creating a shopping experience that exceeds expectations. Whether you&#39;re buying, designing, repairing, or simply browsing, we’re here to help you find the perfect piece—and make the moment memorable." />
20        <meta name="description" content="Since opening our doors in 1995, Treasures Jewelry has proudly served Paducah, KY, as a trusted, full-service jewelry store rooted in craftsmanship, quality, and personal service. What began as a local shop has grown into a beloved destination for those who appreciate the beauty and meaning behind every piece of jewelry.
21
22We specialize in carat-plus diamonds, vintage and estate jewelry, and custom designs that reflect the unique stories of our customers. Our talented in-house design team works closely with you to create one-of-a-kind pieces for any occasion—whether it&#39;s a reimagined heirloom or a brand-new creation. And when it comes to care and maintenance, our on-site repair services are known for their precision, speed, and affordability.
23
24Treasures Jewelry is a one-stop store for those who appreciate truly unique jewelry. Our showroom features an ever-changing selection of fine jewelry and gifts, ensuring that every visit brings something new to discover. We also offer interest-free financing, making it easier to invest in the jewelry you love without compromise.
25
26Above all, we pride ourselves on creating a shopping experience that exceeds expectations. Whether you&#39;re buying, designing, repairing, or simply browsing, we’re here to help you find the perfect piece—and make the moment memorable." />
27            <meta name="title" content="Treasures Jewelry - Paducah KY" />
28            <meta name="keywords" content="High Carat Diamonds,Jeweler,Jewelry Store,Custom Jewelry,Custom Rings and Jewelry,Costume Jewelry,Heirloom Jewelry,Fine Jewelry,Navajo Jewelry,Gold Buyer,Christmas Gifts,Jewelry and Costume Jewelry" />
29    <title>Treasures Jewelry - Paducah, KY</title>
30    
30<script src="/Scripts/Profile/googleAnalytics.js" type="text/javascript"></script>
vendor: 112 bytes, lines 30-33
30
31    <script type="text/javascript" src="https://www.google.com/recaptcha/api.js" async defer></script>
32
33    
33<script src="https://code.jquery.com/jquery-3.5.0.min.js" integrity="sha256-xNzN2a4ltkB44Mc/Jz3pT4iU1cmeR0FkXs4pru/JxaQ=" crossorigin="anonymous"></script>
33
34    
35    
35<script>window.jQuery || document.write('
35<script src="/scripts/templates/jquery-3.5.0.min.js"><\/script>')</script>
35
36
37    
37<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/umd/popper.min.js" integrity="sha384-9/reFTGAW83EW2RDu2S0VKaIzap3H66lZH81PoYlFhbGU+6BZp6G7niu735Sk7lN" crossorigin="anonymous"></script>
37
38    
39    
39<script>if (typeof (Popper) === 'undefined') { document.write('
39<script src="/scripts/templates/popper.min.js"><\/script>') }</script>
39
40
41    <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.1.0/css/all.css" integrity="sha384-lKuwvrZot6UHsBSfcMvOkWwlCMgc0TaWr+30HWe3a4ltaBwTZhyTEggF5tJv8tbt" crossorigin="anonymous">
42
43    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" integrity="sha384-xOolHFLEh07PJGoPkLv1IbcEPTNtaed2xpHsD9ESMhqIYd0nLMwNLD69Npy4HI+N" crossorigin="anonymous">
44
45    
45<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.min.js" integrity="sha384-mrcBkRTg0HmTfecoh1I+48Ptm7cAe18uN+3GsS5SXXGSwzpjIhJZkxEJ5jYaZmE" crossorigin="anonymous"></script>
45
46    
47    
47<script>if (typeof ($.fn.modal) === 'undefined') { document.write('
47<script src="/scripts/templates/bootstrap.min.js"><\/script>') }</script>
47
48
49    
49<script src="/Scripts/Templates/googleMaps.js" type="text/javascript"></script>
49
50    <link href="/Content/Templates/custom-bootstrap.css" type="text/css" rel="stylesheet" />
51    
51<script src="/Scripts/bootbox.min.js" type="text/javascript"></script>
51
52    
52<script src="/Scripts/Profile/jquery.barrating.1.1.4.js" type="text/javascript"></script>
52
53    
53<script src="/Scripts/Templates/cleave.min.js" type="text/javascript"></script>
53
54    
54<script src="/Scripts/Templates/cleave-phone.us.js" type="text/javascript"></script>
54
55    
55<script src="/Scripts/Templates/slick.min.js" type="text/javascript"></script>
55
56    <link href="/Content/Templates/slick.css" type="text/css" rel="stylesheet" />
57    <link href="/Content/Templates/slick-theme.css" type="text/css" rel="stylesheet" />
58    
58<script src="/Scripts/Templates/googleMapsMultiLocation.js" type="text/javascript"></script>
vendor: 66 bytes, lines 58-59
58
59    <script src="https://www.google.com/recaptcha/api.js?render=
596LcokacUAAAAAH_snk3O5bpdYwjpC5XAuXNLrJLH
vendor: 40 bytes, lines 59-60
59" type="text/javascript"></script>
60    
60<script src="https://player.vimeo.com/api/player.js" type="text/javascript"></script>
60
61
62    <link href="/Content/Templates/chatbot.css" type="text/css" rel="stylesheet" />
63
64    <meta name="viewport" content="width=device-width, user-scalable=yes,initial-scale=1, maximum-scale=2" />
65    <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
66    
67    
68    <style>
69        :root {
70            --text_color: 255, 255, 255, 1;
71            --text_color_rgba: rgba(var(--text_color));
72            --customer_color: #046D7A;
73            --post_text_color: 255, 255, 255, 1;
74            --post_text_color_rgba: rgba(var(--post_text_color));
75        }
76    </style>
77    <link href="/Content/Templates/template_6.css" type="text/css" rel="stylesheet" />
78
79        <link rel="canonical" href="https://treasuresjewelryky.com/">
80
81
82<script type="application/ld+json">
83{
84  "@context": "https://schema.org",
85  "@graph": [
86    {
87      "@type": "LocalBusiness",
88      "@id": "https://treasuresjewelryky.com/#localbusiness",
89      "name": "Treasures Jewelry",
90      "url": "https://treasuresjewelryky.com/",
91      "description": "Since opening our doors in 1995, Treasures Jewelry has proudly served Paducah, KY, as a trusted, full-service jewelry store rooted in craftsmanship, quality, and personal service. What began as a local shop has grown into a beloved destination for those who appreciate the beauty and meaning behind every piece of jewelry.  We specialize in carat-plus diamonds, vintage and estate jewelry, and custom designs that reflect the unique stories of our customers. Our talented in-house design team works closely with you to create one-of-a-kind pieces for any occasion—whether it's a reimagined heirloom or a brand-new creation. And when it comes to care and maintenance, our on-site repair services are known for their precision, speed, and affordability.  Treasures Jewelry is a one-stop store for those who appreciate truly unique jewelry. Our showroom features an ever-changing selection of fine jewelry and gifts, ensuring that every visit brings something new to discover. We also offer interest-free financing, making it easier to invest in the jewelry you love without compromise.  Above all, we pride ourselves on creating a shopping experience that exceeds expectations. Whether you're buying, designing, repairing, or simply browsing, we’re here to help you find the perfect piece—and make the moment memorable.",
92      "image": "https://du9m0k402rjmo.cloudfront.net/images/P_25532/8005bd29-14a9-4ccd-8216-4d89afd2c0e2.jpg",
93      "logo": "https://du9m0k402rjmo.cloudfront.net/images/P_25532/8005bd29-14a9-4ccd-8216-4d89afd2c0e2.jpg",
94      "address": {
95        "@type": "PostalAddress",
96        "streetAddress": "3790 Hinkleville Rd., Ste E",
97        "addressLocality": "Paducah",
98        "addressRegion": "KY",
99        "postalCode": "42001",
100        "addressCountry": "US"
101      },
102      "telephone": "(270) 331-3000",
103      "email": "[email protected]",
104      "geo": {
105        "@type": "GeoCoordinates",
106        "latitude": 37.0831492,
107        "longitude": -88.6339159
108      },
109      "openingHoursSpecification": [
110        {
111          "@type": "OpeningHoursSpecification",
112          "dayOfWeek": "Tuesday",
113          "opens": "10:00",
114          "closes": "17:00"
115        },
116        {
117          "@type": "OpeningHoursSpecification",
118          "dayOfWeek": "Wednesday",
119          "opens": "10:00",
120          "closes": "17:00"
121        },
122        {
123          "@type": "OpeningHoursSpecification",
124          "dayOfWeek": "Thursday",
125          "opens": "10:00",
126          "closes": "17:00"
127        },
128        {
129          "@type": "OpeningHoursSpecification",
130          "dayOfWeek": "Friday",
131          "opens": "10:00",
132          "closes": "17:00"
133        },
134        {
135          "@type": "OpeningHoursSpecification",
136          "dayOfWeek": "Saturday",
137          "opens": "10:00",
138          "closes": "16:00"
139        }
140      ],
141      "paymentAccepted": "Checks, American Express, Discover, MasterCard, Visa, Debit Cards, Interest Free Financing",
142      "sameAs": [
143        "https://www.google.com/maps/place/Carroll's+Treasures+Jewelry/@37.0834037,-88.6340631,17z/data=!4m5!3m4!1s0x887a107859156a9f:0xb503fb88db2dcc90!8m2!3d37.0831715!4d-88.6339014",
144        "https://www.facebook.com/CarrollsTreasuresJewelry/"
145      ]
146    },
147    {
148      "@type": "WebSite",
149      "@id": "https://treasuresjewelryky.com/#website",
150      "url": "https://treasuresjewelryky.com/",
151      "name": "Treasures Jewelry",
152      "description": "Since opening our doors in 1995, Treasures Jewelry has proudly served Paducah, KY, as a trusted, full-service jewelry store rooted in craftsmanship, quality, and personal service. What began as a local shop has grown into a beloved destination for those who appreciate the beauty and meaning behind every piece of jewelry.  We specialize in carat-plus diamonds, vintage and estate jewelry, and custom designs that reflect the unique stories of our customers. Our talented in-house design team works closely with you to create one-
152of-a-kind pieces for any occasion—whether it's a reimagined heirloom or a brand-new creation. And when it comes to care and maintenance, our on-site repair services are known for their precision, speed, and affordability.  Treasures Jewelry is a one-stop store for those who appreciate truly unique jewelry. Our showroom features an ever-changing selection of fine jewelry and gifts, ensuring that every visit brings something new to discover. We also offer interest-free financing, making it easier to invest in the jewelry you love without compromise.  Above all, we pride ourselves on creating a shopping experience that exceeds expectations. Whether you're buying, designing, repairing, or simply browsing, we’re here to help you find the perfect piece—and make the moment memorable.",
153      "potentialAction": {
154        "@type": "SearchAction",
155        "target": "https://treasuresjewelryky.com/?s={search_term_string}",
156        "query-input": "required name=search_term_string"
157      }
158    },
159    {
160      "@type": "WebPage",
161      "@id": "https://treasuresjewelryky.com/#webpage",
162      "url": "https://treasuresjewelryky.com/",
163      "name": "Treasures Jewelry - Paducah, KY",
164      "description": "Since opening our doors in 1995, Treasures Jewelry has proudly served Paducah, KY, as a trusted, full-service jewelry store rooted in craftsmanship, quality, and personal service. What began as a local shop has grown into a beloved destination for those who appreciate the beauty and meaning behind every piece of jewelry.  We specialize in carat-plus diamonds, vintage and estate jewelry, and custom designs that reflect the unique stories of our customers. Our talented in-house design team works closely with you to create one-of-a-kind pieces for any occasion—whether it's a reimagined heirloom or a brand-new creation. And when it comes to care and maintenance, our on-site repair services are known for their precision, speed, and affordability.  Treasures Jewelry is a one-stop store for those who appreciate truly unique jewelry. Our showroom features an ever-changing selection of fine jewelry and gifts, ensuring that every visit brings something new to discover. We also offer interest-free financing, making it easier to invest in the jewelry you love without compromise.  Above all, we pride ourselves on creating a shopping experience that exceeds expectations. Whether you're buying, designing, repairing, or simply browsing, we’re here to help you find the perfect piece—and make the moment memorable.",
165      "isPartOf": {
166        "@id": "https://treasuresjewelryky.com/#website"
167      },
168      "about": {
169        "@id": "https://treasuresjewelryky.com/#localbusiness"
170      },
171      "primaryImageOfPage": {
172        "@type": "ImageObject",
173        "url": "https://du9m0k402rjmo.cloudfront.net/images/P_25532/8005bd29-14a9-4ccd-8216-4d89afd2c0e2.jpg"
174      },
175      "breadcrumb": {
176        "@type": "BreadcrumbList",
177        "itemListElement": [
178          {
179            "@type": "ListItem",
180            "position": 1,
181            "name": "Home",
182            "item": "https://treasuresjewelryky.com/"
183          }
184        ]
185      }
186    },
187    {
188      "@type": "Service",
189      "@id": "https://treasuresjewelryky.com/#service",
190      "name": "Our Services",
191      "provider": {
192        "@id": "https://treasuresjewelryky.com/#localbusiness"
193      },
194      "serviceType": [
195        "Jewelry Services: At Treasures, we treat your jewelry with the care it deserves. Our on-site services include professional cleaning to restore brilliance, precise sizing and resizing for a perfect fit, and thorough inspections and appraisals to ensure your pieces are in top condition and properly valued. We also assist with insurance replacements, helping you navigate claims with ease. Best of all, many of these services are available while you wait, so you can enjoy convenience without sacrificing quality.",
196        "Custom & Design Services: Your jewelry should be as unique as you are. Our on-site custom design service allows you to collaborate directly with our skilled jewelers to create one-
196of-a-kind pieces tailored to your style and vision. Whether you're redesigning a family heirloom or dreaming up something entirely new, we bring your ideas to life with craftsmanship and creativity.",
197        "Watch Services: Keep your timepieces ticking with our watch battery replacement service. Quick, reliable, and done on-site, we make it easy to maintain your favorite watches without the hassle of sending them away.",
198        "Gold & Buying Services: Turn your unused gold into immediate value with our gold buying services. We offer instant cash for gold, providing fair and competitive rates right on the spot. Whether you're selling old jewelry or broken pieces, we make the process simple and secure.",
199        "Financing & Specials: We believe everyone should have access to beautiful jewelry. That’s why we offer interest-free financing, making it easier to invest in meaningful pieces without financial strain. Be sure to check out our weekly and monthly specials for exciting deals and limited-time offers on select items and services."
200      ],
201      "description": "Professional services offered by Treasures Jewelry"
202    },
203    {
204      "@type": "FAQPage",
205      "@id": "https://treasuresjewelryky.com/#faqpage",
206      "url": "https://treasuresjewelryky.com/#faq",
207      "name": "Frequently Asked Questions",
208      "description": "Frequently asked questions about Treasures Jewelry",
209      "mainEntity": [
210        {
211          "@type": "Question",
212          "name": "What types of jewelry do you specialize in?",
213          "acceptedAnswer": {
214            "@type": "Answer",
215            "text": "We specialize in carat-plus diamonds, vintage and estate jewelry, and custom-designed pieces. Our collection is always evolving, so there’s something new to discover with every visit."
216          }
217        },
218        {
219          "@type": "Question",
220          "name": "Can I have a custom piece made?",
221          "acceptedAnswer": {
222            "@type": "Answer",
223            "text": "Absolutely! Our in-house design team can create one-of-a-kind custom jewelry tailored to your style and occasion. You can also click here and to start your own custom designs https://treasuresjewelryky.jewelershowcase.com/browse/3c-collection Stop by or contact us to start your design journey."
224          }
225        },
226        {
227          "@type": "Question",
228          "name": "Do you offer jewelry repair?",
229          "acceptedAnswer": {
230            "@type": "Answer",
231            "text": "Yes, we offer on-site jewelry repair at some of the most competitive prices in the area. Many services are available while you wait."
232          }
233        },
234        {
235          "@type": "Question",
236          "name": "Do you buy gold?",
237          "acceptedAnswer": {
238            "@type": "Answer",
239            "text": "Yes, we buy gold and silver and offer competitive prices with immediate cash payments. Our experienced team provides honest, transparent evaluations to ensure you receive fair value for your items."
240          }
241        },
242        {
243          "@type": "Question",
244          "name": "Can I shop your jewelry online?",
245          "acceptedAnswer": {
246            "@type": "Answer",
247            "text": "Yes! You can browse our selection of diamonds and fine jewelry through our online showroom: https://treasuresjewelryky.jewelershowcase.com/ For custom pieces or estate items, we recommend visiting us in-store for the full experience."
248          }
249        },
250        {
251          "@type": "Question",
252          "name": "Is everything in-store also available online?",
253          "acceptedAnswer": {
254            "@type": "Answer",
255            "text": "Not always. Our ever-changing inventory, especially vintage and estate pieces, may not be listed online. Visit us in person to explore the full collection or visit our online shop here: https://treasuresjewelryky.jewelershowcase.com/"
256          }
257        },
258        {
259          "@type": "Question",
260          "name": "How do I contact you with questions or to start a custom order?",
261          "acceptedAnswer": {
262            "@type": "Answer",
263            "text": "You can reach us through our website contact and click the Contact & Hours, call us directly at 270-331-3000, or click Shop Our Inventory button. We’re happy to help: https://treasuresjewelryky.jewelershowcase.com/"
264          }
265        }
266      ]
267    }
268  ]
269}
270</script>
270</head>
271<body>
272    <div id="bootstrapCssTest" class="d-none"></div>
273    
273<script>
274        $(function () {
275            
276            if ($('#bootstrapCssTest').is(':visible')) {
277                $("head").prepend('<link rel="stylesheet" href="/content/templates/bootstrap.min.css">');
278            }
279        });
280    </script>
280
281
282    
283
284
285<input type="hidden" id="areaMarkers" />
286
287<!-- NAVBAR -->
288<div class="container-fullwidth fixed-top">
289    
290
291
292
293
294<header class="content-header custom-background-color d-flex flex-wrap align-items-center justify-content-between py-0 px-2">
295
296    
297        <div class="nav-image-mobile-left">
298            <a href="#home-section" id="HomeNav" onclick="DisplayPage('#homePage')">
299                <img src="https://du9m0k402rjmo.cloudfront.net/images/P_25532/8005bd29-14a9-4ccd-8216-4d89afd2c0e2.jpg" alt="navbar logo" class="d-line-block align-top nav-logo" />
300            </a>
301        </div>
302    <div class="nav-location pt-2">
303        <ul class="mx-auto p-0 header-address d-flex flex-wrap justify-content-center">
304            
305            <li class="nav-business_name text-center header-item mx-1 px-1 text-font-color">
306                Treasures Jewelry
307            </li>
308
309            
310                    <li class="text-center header-item mx-1 px-1 text-font-color">
311
312                        3790 Hinkleville Rd. Ste E
313                    </li>
314
315                <li class="text-center header-item mx-1 px-1 text-font-color">
316                    Paducah, KY 42001
317                </li>
318            <li class="navbar-hours-sm text-center header-item mx-1 px-1">
319                <a href="#" id="navbar-hours-sm" class="text-font-color" onclick="DisplayPage('#contactPage')"><i class="fas fa-clock fa-lg px-1 text-font-color"></i>Click Here for Hours</a>
320            </li>
321
322            
323                <li class="nav-phone-sm text-center header-item mx-1 px-1">
324                    <a id="PhoneNav" href="tel:2703313000" class="phone-nav-mobile text-font-color">
325                        <i class="fas fa-phone fa-inverse fa-xs fa-rotate-90"></i>
326                        (270) 331-3000
327                    </a>
328                </li>
329        </ul>
330    </div>
331
332
333    
334    <div class="navbar-hours pb-1 mx-auto">
335        <a href="#" id="navbar-hours" class="text-font-color" onclick="DisplayPage('#contactPage')"><i class="fas fa-clock fa-lg px-1 text-font-color"></i>Click Here for Hours</a>
336    </div>
337
338
339    
340    <div class="nav-phone-social pb-1 d-flex flex-wrap justify-content-center">
341        
342            <div class="nav-phone flex-column align-self-center mx-1 px-1 pb-1">
343                <a id="PhoneNav" href="tel:2703313000" class="phone-nav-mobile text-font-color">
344                    <i class="fas fa-phone fa-inverse fa-xs fa-rotate-90"></i>
345                    (270) 331-3000
346                </a>
347            </div>
348        <div class="nav-social mx-1 px-1">
349                <div class="mx-auto text-center d-flex flex-wrap justify-content-center">
350                        <div class="m-1">
351                            <a class="text-font-color social-link-footer" href="https://www.google.com/maps/place/Carroll&#39;s+Treasures+Jewelry/@37.0834037,-88.6340631,17z/data=!4m5!3m4!1s0x887a107859156a9f:0xb503fb88db2dcc90!8m2!3d37.0831715!4d-88.6339014" target="_blank" id="google-social-footer" title="Google">
352                                <i class="fab fa-google fa-lg text-font-color"></i>
353                            </a>
354                        </div>
355                                            <div class="m-1">
356                            <a class="text-font-color social-link-footer" href="https://www.facebook.com/CarrollsTreasuresJewelry/" target="_blank" id="facebook-social-footer" title="Facebook">
357                                <i class="fab fa-facebook-f fa-lg text-font-color"></i>
358                            </a>
359                        </div>
360                                                                                                                    </div>
361        </div>
362    </div>
363</header>
364
365
366<nav class="bg-default-color navbar navbar-light bg-light navbar-expand-xl pt-1 pb-2">
367
368    
369        <div class="nav-image bg-default-color bg-light flex-column text-center nav-image-desktop">
370            <a href="#home-section" class="navbar-brand ml-3" id="HomeNav" onclick="DisplayPage('#homePage')">
371                <img src="https://du9m0k402rjmo.cloudfront.net/images/P_25532/8005bd29-14a9-4ccd-8216-4d89afd2c0e2.jpg" alt="navbar logo" class="d-line-block align-top nav-logo" />
372            </a>
373        </div>
374
375    <button class="navbar-toggler nav-menu collapsed" type="button" data-toggle="collapse" data-target="#navbarToggler" aria-controls="navbarToggler" aria-expanded="false" aria-label="Toggle navigation">
376        <span class="navbar-toggler-icon"></span>
377        <span class="my-1 mx-2 close">X</span>
378    </button>
379
380    <div class="collapse navbar-collapse flex-column mx-auto" id="navbarToggler">
381        
382        <div class="d-none d-xl-block nav-section">
383            <div class="navbar-nav d-flex flex-wrap align-items-center">
384
385
386<div class="col nav-item text-center header-item mx-auto text-nowrap">            <a href="#" id="HomePageNavigationLink" class="nav-link p-3" onclick="DisplayPage('#homePage')">Home</a>
387</div><div class="col nav-item text-center header-item mx-auto text-nowrap">            <a href="#" id="AboutPageNavigationLink" class="nav-link p-3" onclick="DisplayPage('#aboutPage')">About</a>
388</div><div class="col nav-item text-center header-item mx-auto text-nowrap">            <a target="_blank" href="https://treasuresjewelryky.jewelershowcase.com/" id="DocumentPageNavigationLink" class="nav-link p-3">Shop Our Inventory</a>
389</div><div class="col nav-item text-center header-item mx-auto text-nowrap">            <a href="#" id="ServicesPageNavigationLink" class="nav-link p-3" onclick="DisplayPage('#servicesPage')">Services</a>
390</div><div class="col nav-item text-center header-item mx-auto text-nowrap">            <a href="#" id="FaqPageNavigationLink" class="nav-link p-3" onclick="DisplayPage('#faqPage')">FAQ</a>
391</div><div class="col nav-item text-center header-item mx-auto text-nowrap">            <a href="#" id="PhotosNavigationLink" class="nav-link p-3" onclick="DisplayPage('#imageryPage')">Imagery</a>
392</div><div class="col nav-item text-center header-item mx-auto text-nowrap">            <a href="#" id="testimonialsPageNavigationLink" class="nav-link p-3" onclick="DisplayPage('#testimonialsPage')">Testimonials</a>
393</div><div class="col nav-item text-center header-item mx-auto text-nowrap">            <a href="#" id="ContactPageNavigationLink" class="nav-link p-3" onclick="DisplayPage('#contactPage')">Contact &amp; Hours</a>
394</div>            </div>
395        </div>
396        
397        <div class="d-xs-block d-xl-none">
398            <ul class="navbar-nav mx-auto mr-auto mt-2 mt-xl-0 mb-2">
399                    <li class="nav-item text-center header-item mr-1 ml-1">
400                        Treasures Jewelry
401                    </li>
402                
403
404<li class="nav-item text-center header-item mr-1 ml-1 text-nowrap">            <a href="#" id="HomePageNavigationLink" class="nav-link p-3" onclick="DisplayPage('#homePage')">Home</a>
405</li><li class="nav-item text-center header-item mr-1 ml-1 text-nowrap">            <a href="#" id="AboutPageNavigationLink" class="nav-link p-3" onclick="DisplayPage('#aboutPage')">About</a>
406</li><li class="nav-item text-center header-item mr-1 ml-1 text-nowrap">            <a target="_blank" href="https://treasuresjewelryky.jewelershowcase.com/" id="DocumentPageNavigationLink" class="nav-link p-3">Shop Our Inventory</a>
407</li><li class="nav-item text-center header-item mr-1 ml-1 text-nowrap">            <a href="#" id="ServicesPageNavigationLink" class="nav-link p-3" onclick="DisplayPage('#servicesPage')">Services</a>
408</li><li class="nav-item text-center header-item mr-1 ml-1 text-nowrap">            <a href="#" id="FaqPageNavigationLink" class="nav-link p-3" onclick="DisplayPage('#faqPage')">FAQ</a>
409</li><li class="nav-item text-center header-item mr-1 ml-1 text-nowrap">            <a href="#" id="PhotosNavigationLink" class="nav-link p-3" onclick="DisplayPage('#imageryPage')">Imagery</a>
410</li><li class="nav-item text-center header-item mr-1 ml-1 text-nowrap">            <a href="#" id="testimonialsPageNavigationLink" class="nav-link p-3" onclick="DisplayPage('#testimonialsPage')">Testimonials</a>
411</li><li class="nav-item text-center header-item mr-1 ml-1 text-nowrap">            <a href="#" id="ContactPageNavigationLink" class="nav-link p-3" onclick="DisplayPage('#contactPage')">Contact &amp; Hours</a>
412</li>            </ul>
413        </div>
414    </div>
415</nav>
416
417</div>
418
419<div id="pages" class="pages-left">
420    <!--Home Page Information-->
421    <div class="content collapse show bg-alt-color" id="homePage">
422
423<div class="d-flex flex-wrap">
424    <div class="w-100 mx-auto home-banner">
425        <div class="parallax w-100">
426                <div class="img-fluid banner-image " style="background-image: url(https://du9m0k402rjmo.
426cloudfront.net/images/P_25532/e7296619-e342-4a72-a31e-aee17e1210e0.jpg)"></div>
427            <div class="home-content">
428                <div class="d-flex flex-wrap justify-content-center align-items-center px-2"></div>
429            </div>
430        </div>
431    </div>
432
433    
434        <div class="d-flex align-items-center justify-content-center col-12 text-center description mx-auto slogan p-3 slogan-speakable" style="color: #000000; opacity: 0.7">
435            Specializing in Carat-Plus Diamonds!
436        </div>
437            <div class="slider-attributes-container">
438            <div class="slider slider-attributes mx-auto">
439                    <div>
440                        <div class="image-slider-attributes-border m-5">
441                            <div class="image-slider-attributes-border-inner">
442                                <div class="image-slider-attributes custom-background-color d-flex justify-content-center align-items-center">
443                                    <span class="m-2 text-font-color">Navajo Jewelry</span>
444                                </div>
445                            </div>
446                        </div>
447                    </div>
448                    <div>
449                        <div class="image-slider-attributes-border m-5">
450                            <div class="image-slider-attributes-border-inner">
451                                <div class="image-slider-attributes custom-background-color d-flex justify-content-center align-items-center">
452                                    <span class="m-2 text-font-color">Fine Jewelry</span>
453                                </div>
454                            </div>
455                        </div>
456                    </div>
457                    <div>
458                        <div class="image-slider-attributes-border m-5">
459                            <div class="image-slider-attributes-border-inner">
460                                <div class="image-slider-attributes custom-background-color d-flex justify-content-center align-items-center">
461                                    <span class="m-2 text-font-color">Heirloom Jewelry</span>
462                                </div>
463                            </div>
464                        </div>
465                    </div>
466                    <div>
467                        <div class="image-slider-attributes-border m-5">
468                            <div class="image-slider-attributes-border-inner">
469                                <div class="image-slider-attributes custom-background-color d-flex justify-content-center align-items-center">
470                                    <span class="m-2 text-font-color">Costume Jewelry</span>
471                                </div>
472                            </div>
473                        </div>
474                    </div>
475                    <div>
476                        <div class="image-slider-attributes-border m-5">
477                            <div class="image-slider-attributes-border-inner">
478                                <div class="image-slider-attributes custom-background-color d-flex justify-content-center align-items-center">
479                                    <span class="m-2 text-font-color">Rings</span>
480                                </div>
481                            </div>
482                        </div>
483                    </div>
484                    <div>
485                        <div class="image-slider-attributes-border m-5">
486                            <div class="image-slider-attributes-border-inner">
487                                <div class="image-slider-attributes custom-background-color d-flex justify-content-center align-items-center">
488                                    <span class="m-2 text-font-color">Earrings</span>
489                                </div>
490                            </div>
491                        </div>
492                    </div>
493            </div>
494        </div>
495        <nav id="circle-attributes" class="navbar-attribute custom-background-color w-100">
496            <div class="w-100 d-flex flex-row justify-content-center text-center">
497                <div class="inner py-1">
498                        <div class="col nav-item text-center header-item mx-auto text-wrap">
499                            <span class="nav-link">Navajo Jewelry</span>
500                        </div>
501                        <div class="col nav-item text-center header-item mx-auto text-wrap">
502                            <span class="nav-link">Fine Jewelry</span>
503                        </div>
504                        <div class="col nav-item text-center header-item mx-auto text-wrap">
505                            <span class="nav-link">Heirloom Jewelry</span>
506                        </div>
507                        <div class="col nav-item text-center header-item mx-auto text-wrap">
508                            <span class="nav-link">Costume Jewelry</span>
509                        </div>
510                        <div class="col nav-item text-center header-item mx-auto text-wrap">
511                            <span class="nav-link">Rings</span>
512                        </div>
513                        <div class="col nav-item text-center header-item mx-auto text-wrap">
514                            <span class="nav-link">Earrings</span>
515                        </div>
516                </div>
517            </div>
518        </nav>
519    <div class="w-100 w-lg-75 mx-auto text-center p-4">
520            <div class="p-2 section-header text-center">
521                Established in 1995
522            </div>
523                    <div class="p-2 section-information text-center">
524                Located in Paducah, KY
525            </div>
526    </div>
527
528    
529        <div class="w-100 w-lg-75 mx-auto mt-4 mb-4">
530            <div class="slider slider-single w-100">
531                    <div class="image-slider m-2">
532                        <img alt="Image" src="https://du9m0k402rjmo.cloudfront.net/images/P_25532/f324ab1e-94e6-4598-a8da-7387d7a175d0.jpg" class="img-fluid text-center mx-auto" />
533                    </div>
534                    <div class="image-slider m-2">
535                        <img alt="Image" src="https://du9m0k402rjmo.cloudfront.net/images/P_25532/fbb3aa4d-62ab-4685-b5d6-d788b2a2afe2.jpg" class="img-fluid text-center mx-auto" />
536                    </div>
537                    <div class="image-slider m-2">
538                        <img alt="Image" src="https://du9m0k402rjmo.cloudfront.net/images/P_25532/c4d56bc0-021c-4023-977d-f2bcb7d898f9.jpg" class="img-fluid text-center mx-auto" />
539                    </div>
540                    <div class="image-slider m-2">
541                        <img alt="Image" src="https://du9m0k402rjmo.cloudfront.net/images/P_25532/3917c280-f1e3-4fdc-8678-33875868981b.jpg" class="img-fluid text-center mx-auto" />
542                    </div>
543                    <div class="image-slider m-2">
544                        <img alt="Image" src="https://du9m0k402rjmo.cloudfront.net/images/P_25532/a2b7ee9c-34d7-43dc-b769-72fd9de28490.jpg" class="img-fluid text-center mx-auto" />
545                    </div>
546                    <div class="image-slider m-2">
547                        <img alt="Image" src="https://du9m0k402rjmo.cloudfront.net/images/P_25532/4554aa09-9fb9-4f94-9e63-a42a3f077ea0.jpg" class="img-fluid text-center mx-auto" />
548                    </div>
549                    <div class="image-slider m-2">
550                        <img alt="Image" src="https://du9m0k402rjmo.cloudfront.net/images/P_25532/03bbfcb0-b644-4b84-9f10-99836bca8afb.jpeg" class="img-fluid text-center mx-auto" />
551                    </div>
552                    <div class="image-slider m-2">
553                        <img alt="Image" src="https://du9m0k402rjmo.cloudfront.net/images/P_25532/8e25c82f-85c7-4634-baa3-dba52d543b5f.jpeg" class="img-fluid text-center mx-auto" />
554                    </div>
555                    <div class="image-slider m-2">
556                        <img alt="Image" src="https://du9m0k402rjmo.cloudfront.net/images/P_25532/789df3c7-a24e-4b3b-88ab-fbfd8a83ba07.jpg" class="img-fluid text-center mx-auto" />
557                    </div>
558                    <div class="image-slider m-2">
559                        <img alt="Image" src="https://du9m0k402rjmo.cloudfront.net/images/P_25532/c950e5e7-0af9-402e-9976-6e1417d717f4.jpg" class="img-fluid text-center mx-auto" />
560                    </div>
561                    <div class="image-slider m-2">
562                        <img alt="Image" src="https://du9m0k402rjmo.
562cloudfront.net/images/P_25532/b1a38da7-08cc-4206-a6a1-d732d75178f3.jpg" class="img-fluid text-center mx-auto" />
563                    </div>
564                    <div class="image-slider m-2">
565                        <img alt="Image" src="https://du9m0k402rjmo.cloudfront.net/images/P_25532/4053eee0-d044-4c3b-832e-f6c25c0011c7.jpg" class="img-fluid text-center mx-auto" />
566                    </div>
567                    <div class="image-slider m-2">
568                        <img alt="Image" src="https://du9m0k402rjmo.cloudfront.net/images/P_25532/c71f7fbb-1e23-4339-b069-dc00ef1c6df0.jpg" class="img-fluid text-center mx-auto" />
569                    </div>
570                    <div class="image-slider m-2">
571                        <img alt="Image" src="https://du9m0k402rjmo.cloudfront.net/images/P_25532/f1b57936-fb95-434c-a6f2-8a514aec0f3b.jpg" class="img-fluid text-center mx-auto" />
572                    </div>
573                    <div class="image-slider m-2">
574                        <img alt="Image" src="https://du9m0k402rjmo.cloudfront.net/images/P_25532/b9cb7f5b-1421-4d92-a972-b6e9deeee22f.jpg" class="img-fluid text-center mx-auto" />
575                    </div>
576                    <div class="image-slider m-2">
577                        <img alt="Image" src="https://du9m0k402rjmo.cloudfront.net/images/P_25532/1e2ed5cb-6f71-443f-a08d-c0d56e87de5a.jpg" class="img-fluid text-center mx-auto" />
578                    </div>
579                    <div class="image-slider m-2">
580                        <img alt="Image" src="https://du9m0k402rjmo.cloudfront.net/images/P_25532/410e7b95-83ea-4697-a9ce-9291873bcf7e.jpg" class="img-fluid text-center mx-auto" />
581                    </div>
582            </div>
583            <div class="slider slider-nav w-45 mx-auto mt-3 mb-3">
584                    <div class="image-slider-thumbnail">
585                        <img alt="Image" src="https://du9m0k402rjmo.cloudfront.net/images/P_25532/f324ab1e-94e6-4598-a8da-7387d7a175d0.jpg" class="img-fluid text-center mx-auto" />
586                    </div>
587                    <div class="image-slider-thumbnail">
588                        <img alt="Image" src="https://du9m0k402rjmo.cloudfront.net/images/P_25532/fbb3aa4d-62ab-4685-b5d6-d788b2a2afe2.jpg" class="img-fluid text-center mx-auto" />
589                    </div>
590                    <div class="image-slider-thumbnail">
591                        <img alt="Image" src="https://du9m0k402rjmo.cloudfront.net/images/P_25532/c4d56bc0-021c-4023-977d-f2bcb7d898f9.jpg" class="img-fluid text-center mx-auto" />
592                    </div>
593                    <div class="image-slider-thumbnail">
594                        <img alt="Image" src="https://du9m0k402rjmo.cloudfront.net/images/P_25532/3917c280-f1e3-4fdc-8678-33875868981b.jpg" class="img-fluid text-center mx-auto" />
595                    </div>
596                    <div class="image-slider-thumbnail">
597                        <img alt="Image" src="https://du9m0k402rjmo.cloudfront.net/images/P_25532/a2b7ee9c-34d7-43dc-b769-72fd9de28490.jpg" class="img-fluid text-center mx-auto" />
598                    </div>
599                    <div class="image-slider-thumbnail">
600                        <img alt="Image" src="https://du9m0k402rjmo.cloudfront.net/images/P_25532/4554aa09-9fb9-4f94-9e63-a42a3f077ea0.jpg" class="img-fluid text-center mx-auto" />
601                    </div>
602                    <div class="image-slider-thumbnail">
603                        <img alt="Image" src="https://du9m0k402rjmo.cloudfront.net/images/P_25532/03bbfcb0-b644-4b84-9f10-99836bca8afb.jpeg" class="img-fluid text-center mx-auto" />
604                    </div>
605                    <div class="image-slider-thumbnail">
606                        <img alt="Image" src="https://du9m0k402rjmo.cloudfront.net/images/P_25532/8e25c82f-85c7-4634-baa3-dba52d543b5f.jpeg" class="img-fluid text-center mx-auto" />
607                    </div>
608                    <div class="image-slider-thumbnail">
609                        <img alt="Image" src="https://du9m0k402rjmo.cloudfront.net/images/P_25532/
609789df3c7-a24e-4b3b-88ab-fbfd8a83ba07.jpg" class="img-fluid text-center mx-auto" />
610                    </div>
611                    <div class="image-slider-thumbnail">
612                        <img alt="Image" src="https://du9m0k402rjmo.cloudfront.net/images/P_25532/c950e5e7-0af9-402e-9976-6e1417d717f4.jpg" class="img-fluid text-center mx-auto" />
613                    </div>
614                    <div class="image-slider-thumbnail">
615                        <img alt="Image" src="https://du9m0k402rjmo.cloudfront.net/images/P_25532/b1a38da7-08cc-4206-a6a1-d732d75178f3.jpg" class="img-fluid text-center mx-auto" />
616                    </div>
617                    <div class="image-slider-thumbnail">
618                        <img alt="Image" src="https://du9m0k402rjmo.cloudfront.net/images/P_25532/4053eee0-d044-4c3b-832e-f6c25c0011c7.jpg" class="img-fluid text-center mx-auto" />
619                    </div>
620                    <div class="image-slider-thumbnail">
621                        <img alt="Image" src="https://du9m0k402rjmo.cloudfront.net/images/P_25532/c71f7fbb-1e23-4339-b069-dc00ef1c6df0.jpg" class="img-fluid text-center mx-auto" />
622                    </div>
623                    <div class="image-slider-thumbnail">
624                        <img alt="Image" src="https://du9m0k402rjmo.cloudfront.net/images/P_25532/f1b57936-fb95-434c-a6f2-8a514aec0f3b.jpg" class="img-fluid text-center mx-auto" />
625                    </div>
626                    <div class="image-slider-thumbnail">
627                        <img alt="Image" src="https://du9m0k402rjmo.cloudfront.net/images/P_25532/b9cb7f5b-1421-4d92-a972-b6e9deeee22f.jpg" class="img-fluid text-center mx-auto" />
628                    </div>
629                    <div class="image-slider-thumbnail">
630                        <img alt="Image" src="https://du9m0k402rjmo.cloudfront.net/images/P_25532/1e2ed5cb-6f71-443f-a08d-c0d56e87de5a.jpg" class="img-fluid text-center mx-auto" />
631                    </div>
632                    <div class="image-slider-thumbnail">
633                        <img alt="Image" src="https://du9m0k402rjmo.cloudfront.net/images/P_25532/410e7b95-83ea-4697-a9ce-9291873bcf7e.jpg" class="img-fluid text-center mx-auto" />
634                    </div>
635            </div>
636        </div>
637            <div class="w-100 p-0 mt-4 mb-4">
638            <iframe id='gbvFrame' src="https://www.google.com/maps/embed?pb=!4v1788987139750!6m8!1m7!1sCAoSHENJQUJJaEFmd1c1VUdDbXlzc1MyejNLSS1BTW0.!2m2!1d37.08018587505894!2d-88.67347344926424!3f174.29288152645844!4f-3.6754048578813894!5f0.7820865974627469" width="100%" height="450px;" style="border:0;" allowfullscreen="" loading="lazy" referrerpolicy="strict-origin-when-cross-origin"></iframe>
639        </div>
640
641            <div class="w-100 mx-auto bg-image-container">
642            <div class="bg-image " style="background-image: url(https://du9m0k402rjmo.cloudfront.net/images/P_25532/2f3e621f-f8f1-4bc6-82c2-6a6585b6e134.jpg)"></div>
643            <div class="w-lg-40 p-3 mt-md-5 mb-md-5">
644                <div class="mx-auto p-3 testimonial-blurb">
645                    <div class="blurb-review-info">
646    <p class="paragraph-content">
647        <div class="blurb-rating m-2 mt-3">
648                    <img class="star-rating-image" src="/content/profile/images/star_yellow_5.0.png" />
649        </div>
650        <div class="blurb-authordate m-2 mb-3">
651            <span class="blurb-author">
652- Alan            </span>
653            <span class="blurb-date">
6547/26/2026            </span>
655        </div>
656        <div class="blurb m-2 mt-3 mb-3">
657
658&quot;Had a great experience here! Had a piece of custom jewelry that needed to be repaired, they got it done quickly! They also cleaned my jewelry as well for free! Customer service my extremely amazing as well! Will 100% be back! Great place to support!&quot;        </div>
659        <div class="blurb-more m-2 mt-3">
660            <div class="d-flex flex-wrap flex-column text-center mx-auto mt-1 mb-1 p-0">
661                <a id="testimonialsBlurbMore" href="#testimonialsPage" class="d-flex align-items-center justify-content-center btn btn-secondary p-2 mr-auto testimonialsBlurbMore" >
662                    See More &nbsp; <i class="fas fa-arrow-right"></i>
663                </a>
664            </div>
665        </div>
666    </p>
667</div>
668                </div>
669            </div>
670        </div>
671</div>
672    </div>
673
674    <!--About Page Information-->
675    <div class="content collapse bg-alt-color" id="aboutPage"></div>
676
677    <!--Services Page Information-->
678    <div class="content collapse bg-alt-color" id="servicesPage"></div>
679
680    <!--Testimonial Page Information-->
681    <div class="content collapse bg-alt-color" id="testimonialsPage"></div>
682
683    <!-- REVIEW MODAL -->
684    <div id="reviewFormParentContainer"></div>
685
686    <!--Contact Page Information-->
687    <div class="content collapse bg-alt-color" id="contactPage"></div>
688
689    <!--Imagery Page Information-->
690    <div class="content collapse bg-alt-color" id="imageryPage"></div>
691
692    <!--Posts Page Information-->
693
694    <!--Locations Page Information-->
695    <div class="content collapse bg-alt-color" id="locationsPage"></div>
696
697    <!--360 Tour Page-->
698    <div class="content collapse bg-alt-color pt-3" id="gsvPage"></div>
699
700    <!--FAQ Page Information-->
701    <div class="content collapse bg-alt-color" id="faqPage"></div>
702
703    <!--Additional Content Page-->
704    <div class="content collapse bg-alt-color pt-3" id="contentPage"></div>
705
706</div> 
707
708<!--FOOTER Information-->
709<footer id="footer-container" class="footer custom-background-color">
710<div class="d-flex flex-wrap text-center justify-content-center p-3">
711    <div class="footer-content mx-auto">
712
713        <!--Payment Methods -->
714            <div id="paymentTypeDark" class="mx-auto mt-2 mb-2 text-center d-flex flex-wrap justify-content-center paymentType">
715                    <div class="m-2">
716                        <img alt="Payment Image" class="img-fluid text-center mx-auto payment-img" src="/content/Templates/images/payment/americanexpress.png" />
717                    </div>
718                    <div class="m-2">
719                        <img alt="Payment Image" class="img-fluid text-center mx-auto payment-img" src="/content/Templates/images/payment/discover.png" />
720                    </div>
721                    <div class="m-2">
722                        <img alt="Payment Image" class="img-fluid text-center mx-auto payment-img" src="/content/Templates/images/payment/mastercard.png" />
723                    </div>
724                    <div class="m-2">
725                        <img alt="Payment Image" class="img-fluid text-center mx-auto payment-img" src="/content/Templates/images/payment/visa.png" />
726                    </div>
727            </div>
728            <div id="paymentTypeLight" class="mx-auto mt-2 mb-2 text-center d-flex flex-wrap justify-content-center paymentType">
729                    <div class="m-2">
730                        <img alt="Payment Image" class="img-fluid text-center mx-auto payment-img" src="/content/Templates/images/payment/americanexpress_white.png" />
731                    </div>
732                    <div class="m-2">
733                        <img alt="Payment Image" class="img-fluid text-center mx-auto payment-img" src="/content/Templates/images/payment/discover_white.png" />
734                    </div>
735                    <div class="m-2">
736                        <img alt="Payment Image" class="img-fluid text-center mx-auto payment-img" src="/content/Templates/images/payment/mastercard_white.png" />
737                    </div>
738                    <div class="m-2">
739                        <img alt="Payment Image" class="img-fluid text-center mx-auto payment-img" src="/content/Templates/images/payment/visa_white.png" />
740                    </div>
741            </div>
742
743        <div id="footer-address">
744            <div class="d-flex flex-wrap justify-content-center pt-1">
745                <ul class="mx-auto p-0 mt-2 mt-lg-0 mb-2 business-info-footer d-flex flex-wrap justify-content-center">
746                        <li class="text-center mr-1 ml-1 pl-1 pr-1 text-font-color footer-business-name">
747                            Treasures Jewelry
748                        </li>
749                                                <li class="text-center header-item mr-1 ml-1 pl-1 pr-1 text-font-color">
750
751                                3790 Hinkleville Rd. Ste E
752                            </li>
753                                            <li class="text-center header-item mr-1 ml-1 pl-1 pr-1 text-font-color">
754                            Paducah, KY 42001
755                        </li>
756                </ul>
757            </div>
758        </div>
759                <div class="d-flex flex-wrap flex-column text-center mx-auto mt-1 mb-1 p-0">
760                    <a id="phoneLink" href="tel:2703313000" class="phoneLinkInput d-flex align-items-start justify-content-center btn btn-secondary p-2 mx-auto text-font-color">
761                        (270) 331-3000
762                    </a>
763                </div>
764        <div class="mt-3">
765                <div class="mx-auto mt-2 mb-2 text-center d-flex flex-wrap justify-content-center">
766                        <div class="m-2">
767                            <a class="text-font-color social-link-footer" href="https://www.google.com/maps/place/Carroll&#39;s+Treasures+Jewelry/@37.0834037,-88.6340631,17z/data=!4m5!3m4!1s0x887a107859156a9f:0xb503fb88db2dcc90!8m2!3d37.0831715!4d-88.6339014" target="_blank" id="google-social-footer" title="Google">
768                                <i class="fab fa-google fa-lg"></i>
769                            </a>
770                        </div>
771                                            <div class="m-2">
772                            <a class="text-font-color social-link-footer" href="https://www.facebook.com/CarrollsTreasuresJewelry/" target="_blank" id="facebook-social-footer" title="Facebook">
773                                <i class="fab fa-facebook-f fa-lg"></i>
774                            </a>
775                        </div>
776                                                                                                                    </div>
777        </div>
778        <div class="text-center tos pt-4">
779            <a class="text-font-color" href="/Home/TermsOfUse" id="tosLink" target="_blank">Terms of Use |</a>
780            <a class="text-font-color" href="/Home/PrivacyPolicy" id="ppLink" target="_blank">Privacy Policy</a>
781        </div>
782        <div class="text-center" style="font-size: 0.75rem; color: #999; padding-top: 0.5rem;">
783            &copy; 2026 American Marketing & Publishing, L.L.C. All rights reserved. Names, logos, and other marks displayed are the property of their respective owners.
784        </div>
785    </div>
786</div>
787</footer>
788
789    <div class="accessibility-img py-2 px-2">
790        <div class="d-flex flex-wrap justify-content-center align-items-center text-center">
791            <a href="/Accessibility?domain=treasuresjewelryky" target="_blank" class="dark">
792                <img src="/Content/Templates/images/accessibility_icon.png" height="60" width="42" />
793            </a>
794        </div>
795    </div>
796
797
798
799
800<div class="chatbot-toggle-container">
801  <button id="chatbot-toggle">
802    <img src="/Content/Templates/images/chat_icon.png" height="60" width="60" />
803  </button>
804</div>
805
806<!-- Chat Window -->
807<div id="chat-window">
808  <!-- Chat Header -->
809  <div class="chat-header">
810    <div class="chat-header-content">
811      <h3 class="chat-header-title">Treasures Jewelry Assistant</h3>
812    </div>
813    <button id="close-chat" class="chat-close-btn" aria-label="Close chat">
814      <i class="fas fa-times"></i>
815    </button>
816  </div>
817
818  <!-- Chat Messages -->
819  <div id="chat-messages">
820    <div class="chat-message-container">
821      <div class="chat-message">
822        Hi there! How can we help you today?
823      </div>
824    </div>
825  </div>
826
827  <div id="disclaimer-info">
828    <div class="disclaimer-content">
829      <div class="disclaimer-text">
830        AI Responses not guaranteed; verify before reliance
831      </div>
832    </div>
833  </div>
834
835  <!-- Cost Display -->
836  <div id="cost-info">
837    <div class="cost-info-row">
838      <div class="cost-info-left">
839        <i class="fas fa-dollar-sign fa-xs cost-icon"></i>
840        <span id="cost-display">Cost: $0.00000</span>
841      </div>
842      <span id="percentage-display">0.0% of $0.02</span>
843    </div>
844    <div class="cost-progress-bar">
845      <div id="cost-progress"></div>
846    </div>
847  </div>
848
849  <!-- Chat Input -->
850  <div class="chat-input-container">
851    <form id="chat-form">
852      <input type="text" id="chat-input" placeholder="Type your message..." />
853      <button type="submit" id="send-message">
854        <i class="fas fa-paper-plane"></i>
855      </button>
856    </form>
857    <div id="character-count">0/250</div>
858    <div id="character-limit-message" style="display: none; color: #dc2626; font-size: 12px; margin-top: 4px;">
859      Your message is too long. Please limit your question to 250 characters or less.
860    </div>
861  </div>
862</div>
863
864<!-- Contact Form Window -->
865<div id="contact-form-window">
866  <div class="contact-form-header">
867    <h3 class="contact-form-title">Contact Form</h3>
868    <button id="close-contact-form" class="contact-form-close-btn" aria-label="Close contact form">
869      <i class="fas fa-times"></i>
870    </button>
871  </div>
872
873  <div class="contact-form-content">
874    <form id="chatbot-contact-form">
875      <input type="hidden" id="chat_captcha_alt" name="chat_captcha_alt" value="lQQ3D1/Gq4KfyHaWelQAzXMfGbIKTjtrrlkXj6AXlSo3wi3Jb9M4r+YBxY+RkPdd" />
876      <input type="hidden" id="chat_g-Recaptcha-Response-Contact" name="chat_g-Recaptcha-Response-Contact" value="" />
877      <input type="hidden" name="chat_aid" value="380253f5-c602-41d1-a8b4-5c0a0902920a" />
878      <input type="hidden" name="chat_contactSubject" value="FrontDesk&#8482; Contact Form" />
879      <input type="hidden" name="chat_contactAddress" value="" />
880      <input type="hidden" name="chat_contactZip" value="" />
881      <input type="hidden" name="chat_contactCity" value="" />
882      <input type="hidden" name="chat_contactState" value="" />
883
884      <div class="ai-liability mt-1 mb-1">(Messages sent through this site are subject to third party moderation and are not encrypted or secure. We always try to respond as soon as possible, but off-hours inquiries may take us a little longer to reply.)</div>
885
886      <div class="form-group">
887        <label for="chat_contactName" class="form-label">Name *</label>
888        <input type="text" id="chat_contactName" name="chat_contactName" class="form-input" required />
889      </div>
890
891      <div class="form-group">
892        <label for="chat_contactEmail" class="form-label">Email *</label>
893        <input type="email" id="chat_contactEmail" name="chat_contactEmail" class="form-input" required />
894      </div>
895
896      <div class="form-group">
897        <label for="chat_contactPhone" class="form-label">Phone</label>
898        <input type="tel" id="chat_contactPhone" name="chat_contactPhone" class="form-input" />
899      </div>
900
901      <div class="form-group">
902        <label for="chat_contactMessage" class="form-label">Message *</label>
903        <textarea id="chat_contactMessage" name="chat_contactMessage" rows="4" class="form-textarea" required></textarea>
904      </div>
905
906      <div id="classicCaptcha" class="d-flex flex-column">
907        <div class="g-recaptcha ml-auto mb-3 captcha-responsive" data-sitekey="6LeprWcUAAAAAF533Xd5p6kCrnRs0z4ceJieYgeO"></div>
908      </div>
909
910      <!-- Sticky footer section with reCAPTCHA disclaimer and submit button -->
911      <div class="form-sticky-footer">
912        <div class="grecaptcha-info">
913          This site is protected by reCAPTCHA and the Google
914          <a href="https://policies.google.com/privacy">Privacy Policy</a> and
915          <a href="https://policies.google.com/terms">Terms of Service</a> apply.
916        </div>
917        <button type="submit" id="contact-submit-btn" class="form-submit-btn">Submit</button>
918      </div>
919    </form>
920  </div>
921</div>
922
923<script>
924    // Wrap entire chatbot functionality in a namespace to prevent conflicts
925    window.ChatbotModule = (function() {
926        'use strict';
927
928        // Private variables
929        let isOpen = false;
930        let contactFormOpen = false;
931        let messages = [
932            { role: 'assistant', content: 'Hi there! How can we help you today?' }
933        ];
934        let isLoading = false;
935        let showContactForm = false;
936        let limitReached = false;
937        let apiCost = 0;
938        const maxCost = 0.5;
939        const maxQuestionLength = 250;
940
941        // Private element references
942        let $chatbotToggle;
943        let $chatWindow;
944        let $contactFormWindow;
945        let $closeChat;
946        let $closeContactForm;
947        let $chatMessages;
948        let $chatForm;
949        let $chatInput;
950        let $sendMessage;
951        let $characterCount;
952        let $costDisplay;
953        let $percentageDisplay;
954        let $costProgress;
955        let $contactForm;
956
957        // Initialize element references
958        function initializeElements() {
959            $chatbotToggle = $('#chatbot-toggle');
960            $chatWindow = $('#chat-window');
961            $contactFormWindow = $('#contact-form-window');
962            $closeChat = $('#close-chat');
963            $closeContactForm = $('#close-contact-form');
964            $chatMessages = $('#chat-messages');
965            $chatForm = $('#chat-form');
966            $chatInput = $('#chat-input');
967            $sendMessage = $('#send-message');
968            $characterCount = $('#character-count');
969            $costDisplay = $('#cost-display');
970            $percentageDisplay = $('#percentage-display');
971            $costProgress = $('#cost-progress');
972            $contactForm = $('#chatbot-contact-form');
973        }
974
975        // Initialize
976        function init() {
977            // Initialize element references
978            initializeElements();
979
980            // Load cost from localStorage
981            const savedCost = localStorage.getItem('api_cost');
982            if (savedCost) {
983                apiCost = parseFloat(savedCost);
984
985                // Check if cost limit is reached
986                if (apiCost >= maxCost) {
987                    limitReached = true;
988                    updateChatInputState();
989                }
990            }
991
992            // Initialize character count display
993            updateCharacterCount();
994
995            document.documentElement.style.setProperty('--adaptive-text-color', '#374151');
996            document.documentElement.style.setProperty('--image-invert', 'none');
997
998            setTimeout(updateTextColors, 100);
999
1000            // Ensure chatbot stays on top even when modals are opened
1001            $(document).on('shown.bs.modal', function (e) {
1002              // Temporarily boost chatbot z-index when modals are shown
1003              $('.chatbot-toggle-container').css('z-index', '2147483647');
1004              $('#chat-window').css('z-index', '2147483646');
1005              $('#contact-form-window').css('z-index', '2147483645');
1006            });
1007
1008            // Set up event listeners
1009            setupEventListeners();
1010        }
1011
1012        // Event Listeners with namespacing
1013        function setupEventListeners() {
1014            // Remove any existing chatbot event listeners to prevent duplicates
1015            $chatbotToggle.off('.chatbot');
1016            $closeChat.off('.chatbot');
1017            $closeContactForm.off('.chatbot');
1018            $chatForm.off('.chatbot');
1019            $chatInput.off('.chatbot');
1020            $contactForm.off('.chatbot');
1021
1022            // Toggle chat window
1023            $chatbotToggle.on('click.chatbot', function(e) {
1024                e.preventDefault();
1025                e.stopPropagation();
1026                toggleChat();
1027            });
1028
1029            $closeChat.on('click.chatbot', function(e) {
1030                e.preventDefault();
1031                e.stopPropagation();
1032                closeChat();
1033            });
1034
1035            $closeContactForm.on('click.chatbot', function(e) {
1036                e.preventDefault();
1037                e.stopPropagation();
1038                hideContactForm();
1039            });
1040
1041            // Send message
1042            $chatForm.on('submit.chatbot', function (e) {
1043                e.preventDefault();
1044                e.stopPropagation();
1045
1046                // Check if submit button is disabled
1047                if ($sendMessage.prop('disabled') || $sendMessage.hasClass('disabled')) {
1048                    return false;
1049                }
1050
1051                sendMessage();
1052            });
1053
1054            // Character count - update on every keystroke
1055            $chatInput.on('input.chatbot', function(e) {
1056                // Only handle if this is specifically the chatbot input
1057                if ($(this).attr('id') === 'chat-input') {
1058                    updateCharacterCount();
1059                }
1060            });
1061
1062            // Also check on keyup to catch paste events
1063            $chatInput.on('keyup.chatbot paste.chatbot', function(e) {
1064                // Only handle if this is specifically the chatbot input
1065                if ($(this).attr('id') === 'chat-input') {
1066                    setTimeout(updateCharacterCount, 10);
1067                }
1068            });
1069
1070            // Handle "Enter" key for sending messages
1071            $chatInput.on('keydown.chatbot', function (e) {
1072                // Only handle if this is specifically the chatbot input
1073                if ($(this).attr('id') !== 'chat-input') {
1074                    return;
1075                }
1076
1077                if (e.key === 'Enter' && !e.shiftKey && !limitReached) {
1078                    e.preventDefault();
1079                    e.stopImmediatePropagation();
1080
1081                    // Check if submit button is disabled
1082                    if ($sendMessage.prop('disabled') || $sendMessage.hasClass('disabled')) {
1083                        return false;
1084                    }
1085
1086                    sendMessage();
1087                    return;
1088                }
1089            });
1090
1091            // Contact form submission
1092            $contactForm.on('submit.chatbot', function (e) {
1093                e.preventDefault();
1094                e.stopPropagation();
1095                submitContactForm();
1096            });
1097        }
1098
1099        // Toggle chat window
1100      function toggleChat() {
1101        if (!isOpen) {
1102          // Opening the chat
1103          isOpen = true;
1104
1105          // Hide toggle button on both mobile and desktop
1106          $('.chatbot-toggle-container').addClass('hide-toggle');
1107
1108          // First show the window (still off-screen)
1109          $chatWindow.show();
1110
1111          // Force a reflow to ensure the transition will work
1112          $chatWindow[0].offsetHeight;
1113
1114          // Then add the class that triggers the slide-in animation
1115          setTimeout(function () {
1116            $chatWindow.addClass('show');
1117            scrollToBottom();
1118          }, 10);
1119        } else {
1120          // Closing the chat
1121          isOpen = false;
1122
1123          // Show toggle button again
1124          $('.chatbot-toggle-container').removeClass('hide-toggle');
1125
1126          // Remove the show class to trigger slide-out animation
1127          $chatWindow.removeClass('show');
1128
1129          // Hide the window after the animation completes
1130          setTimeout(function () {
1131            $chatWindow.hide();
1132          }, 300); // Match the CSS transition duration
1133
1134          // Also hide contact form if open
1135          if (contactFormOpen) {
1136            hideContactForm();
1137          }
1138        }
1139      }
1140
1141        // Close chat window
1142      function closeChat() {
1143        if (isOpen) {
1144          isOpen = false;
1145
1146          // Show toggle button again
1147          $('.chatbot-toggle-container').removeClass('hide-toggle');
1148
1149          // Trigger slide-out animation
1150          $chatWindow.removeClass('show');
1151
1152          // Hide after animation
1153          setTimeout(function () {
1154            $chatWindow.hide();
1155          }, 300);
1156
1157          if (contactFormOpen) {
1158            hideContactForm();
1159          }
1160        }
1161      }
1162
1163        // Update character count and submit button state
1164        function updateCharacterCount() {
1165            const count = $chatInput.val().length;
1166            const remaining = maxQuestionLength - count;
1167            const $limitMessage = $('#character-limit-message');
1168
1169            if (count > maxQuestionLength) {
1170                // Over limit - disable submit button and show message
1171                $characterCount.text(`${count}/${maxQuestionLength} (${Math.abs(remaining)} over limit)`).css('color', '#dc2626');
1172                $limitMessage.text(`Your message is too long. Please limit your question to ${maxQuestionLength} characters or less. Your message is currently ${count} characters.`).show();
1173                $chatInput.addClass('over-limit');
1174
1175                // Disable submit button with proper styling
1176                $sendMessage.prop('disabled', true).addClass('disabled');
1177                $sendMessage.css({
1178                    'background-color': '#9ca3af',
1179                    'color': '#6b7280',
1180                    'cursor': 'not-allowed',
1181                    'opacity': '0.5',
1182                    'pointer-events': 'none'
1183                });
1184
1185            } else if (remaining <= 20) {
1186                // Close to limit - show warning but allow submit
1187                $characterCount.text(`${count}/${maxQuestionLength}`).css('color', '#f59e0b');
1188                $limitMessage.hide();
1189                $chatInput.removeClass('over-limit');
1190
1191                // Enable submit button and reset styling
1192                $sendMessage.prop('disabled', false).removeClass('disabled');
1193                $sendMessage.css({
1194                    'background-color': '',
1195                    'color': '',
1196                    'cursor': '',
1197                    'opacity': '',
1198                    'pointer-events': ''
1199                });
1200
1201            } else {
1202                // Within limit - normal state
1203                $characterCount.text(`${count}/${maxQuestionLength}`).css('color', '#6b7280');
1204                $limitMessage.hide();
1205                $chatInput.removeClass('over-limit');
1206
1207                // Enable submit button and reset styling
1208                $sendMessage.prop('disabled', false).removeClass('disabled');
1209                $sendMessage.css({
1210                    'background-color': '',
1211                    'color': '',
1212                    'cursor': '',
1213                    'opacity': '',
1214                    'pointer-events': ''
1215                });
1216            }
1217        }
1218
1219        // Send message
1220        function sendMessage() {
1221            const message = $chatInput.val().trim();
1222            if (!message || isLoading || limitReached) return;
1223
1224            // Double check character limit including whitespace
1225            if (message.length > maxQuestionLength) {
1226                appendMessage('assistant', `Your message is too long. Please limit your question to ${maxQuestionLength} characters or less. Your message is currently ${message.length} characters.`);
1227                return;
1228            }
1229
1230            // Add user message to chat
1231            messages.push({ role: 'user', content: message });
1232            appendMessage('user', message);
1233
1234            // Clear input
1235            $chatInput.val('');
1236            updateCharacterCount();
1237
1238            // Send to API
1239            fetchChatResponse(messages);
1240        }
1241
1242        // Fetch chat response from API
1243        function fetchChatResponse(messages) {
1244            isLoading = true;
1245            showLoadingIndicator();
1246
1247            $.ajax({
1248                url: '/Home/Chat',
1249                type: 'POST',
1250                contentType: 'application/json',
1251                data: JSON.stringify({
1252                    Messages: messages,
1253                    ProfileId: '25532'
1254                }),
1255                headers: {
1256                    'RequestVerificationToken': $('input[name="__RequestVerificationToken"]').val()
1257                },
1258                success: function (response) {
1259                    hideLoadingIndicator();
1260
1261                    if (response.error) {
1262                        appendMessage('assistant', `Error: ${response.error}`);
1263                        console.error('API Error:', response.error);
1264                        isLoading = false;
1265                        return;
1266                    }
1267
1268                    // Update cost
1269                    apiCost = response.Cost;
1270                    localStorage.setItem('api_cost', apiCost.toString());
1271
1272                    // Check if limit reached
1273                    if (response.LimitReached) {
1274                        limitReached = true;
1275                        showContactFormWindow();
1276                        appendMessage('assistant', 'Our AI chat has reached its capacity. Please use the contact form to get in touch directly with us.');
1277                    } else {
1278                        // Check if response contains contact form trigger
1279                        if (response.Message.includes('<start_contact_form>')) {
1280                            const cleanResponse = response.Message.replace('<start_contact_form>', '');
1281                            appendMessage('assistant', cleanResponse);
1282                            showContactFormWindow();
1283                        } else {
1284                            appendMessage('assistant', response.Message);
1285                        }
1286
1287                        // Add response to messages array
1288                        messages.push({ role: 'assistant', content: response.Message });
1289                    }
1290
1291                    isLoading = false;
1292                    updateChatInputState();
1293                },
1294                error: function (xhr, status, error) {
1295                    hideLoadingIndicator();
1296                    appendMessage('assistant', 'Sorry, I encountered an error. Please try again later.');
1297                    console.error('AJAX Error:', error);
1298                    isLoading = false;
1299                }
1300            });
1301        }
1302
1303        // Append message to chat
1304        function appendMessage(role, content) {
1305            content = convertMarkdownLinksToHTML(content);
1306            const rootStyles = getComputedStyle(document.documentElement);
1307            const customerColor = rootStyles.getPropertyValue('--customer_color').trim();
1308            const adaptivefontColor = rootStyles.getPropertyValue('--adaptive-text-color').trim();
1309
1310            const messageClass = role === 'user' ? 'flex-end' : 'flex-start';
1311            const bgColor = role === 'user' ? customerColor : 'white';
1312            const textColor = role === 'user' ? adaptivefontColor : '#374151';
1313            const borderRadius = role === 'user' ? 'border-bottom-right-radius: 0;' : 'border-bottom-left-radius: 0;';
1314            const border = role === 'user' ? '' : 'border: 1px solid #e5e7eb;';
1315
1316            const messageHtml = `
1317                <div style="display: flex; justify-content: ${messageClass}; margin-bottom: 16px;">
1318                    <div style="max-width: 75%; padding: 12px; border-radius: 8px; background-color: ${bgColor}; ${border} ${borderRadius} color: ${textColor}; word-wrap: break-word; overflow-wrap: break-word;">
1319                        ${content}
1320                    </div>
1321                </div>
1322            `;
1323
1324            $chatMessages.append(messageHtml);
1325            scrollToBottom();
1326        }
1327
1328        // Show loading indicator
1329        function showLoadingIndicator() {
1330            const loadingHtml = `
1331                <div id="loading-indicator" style="display: flex; justify-content: flex-start; margin-bottom: 16px;">
1332                    <div style="max-width: 75%; padding: 12px; border-radius: 8px; background-color: white; border: 1px solid #e5e7eb; color: #374151; display: flex; gap: 4px;">
1333                        <div class="loading-dot" style="width: 8px; height: 8px; background-color: #9ca3af; border-radius: 50%;"></div>
1334                        <div class="loading-dot" style="width: 8px; height: 8px; background-color: #9ca3af; border-radius: 50%;"></div>
1335                        <div class="loading-dot" style="width: 8px; height: 8px; background-color: #9ca3af; border-radius: 50%;"></div>
1336                    </div>
1337                </div>
1338            `;
1339
1340            $chatMessages.append(loadingHtml);
1341            animateLoadingDots();
1342            scrollToBottom();
1343
1344            // Disable input while loading
1345            $chatInput.prop('disabled', true);
1346            $sendMessage.prop('disabled', true);
1347        }
1348
1349        // Animate loading dots
1350        function animateLoadingDots() {
1351            if (!$("#loading-indicator").length) return;
1352
1353            $(".loading-dot").each(function (index) {
1354                var $dot = $(this);
1355                setTimeout(function () {
1356                    $dot.animate({ opacity: 0.3 }, 300)
1357                        .animate({ opacity: 1 }, 300);
1358                }, index * 200);
1359            });
1360
1361            setTimeout(function () {
1362                animateLoadingDots();
1363            }, 900);
1364        }
1365
1366        // Hide loading indicator
1367        function hideLoadingIndicator() {
1368            $('#loading-indicator').remove();
1369
1370            // Enable input after loading (unless limit reached)
1371            if (!limitReached) {
1372                $chatInput.prop('disabled', false);
1373                updateCharacterCount(); // This will set the correct submit button state
1374            }
1375        }
1376
1377        // Scroll to bottom of chat
1378        function scrollToBottom() {
1379            $chatMessages.scrollTop($chatMessages[0].scrollHeight);
1380        }
1381
1382        // Update cost display
1383        function updateCostDisplay() {
1384            $("#cost-info").show();
1385            $costDisplay.text(`Cost: $${apiCost.toFixed(5)}`);
1386
1387            const percentage = (apiCost / maxCost) * 100;
1388            $percentageDisplay.text(`${percentage.toFixed(1)}% of $${maxCost.toFixed(2)}`);
1389
1390            $costProgress.css('width', `${percentage}%`);
1391
1392            // Change progress bar color if near limit
1393            if (percentage > 80) {
1394                $costProgress.css("background-color", "#dc2626");
1395            } else {
1396                $costProgress.css("background-color", "#4f46e5");
1397            }
1398
1399            // Update chat input state
1400            updateChatInputState();
1401        }
1402
1403        // Update chat input state based on limit
1404        function updateChatInputState() {
1405            if (limitReached) {
1406                $chatInput.prop('disabled', true);
1407                $sendMessage.prop('disabled', true);
1408                $chatInput.attr('placeholder', 'Chat Unavailable.');
1409            } else {
1410                $chatInput.prop('disabled', false);
1411                updateCharacterCount(); // This will set the correct submit button state
1412                $chatInput.attr('placeholder', 'Type your message...');
1413            }
1414        }
1415
1416        // Show contact form
1417      function showContactFormWindow() {
1418        if (!contactFormOpen) {
1419          contactFormOpen = true;
1420
1421          // Hide toggle button when contact form opens
1422          $('.chatbot-toggle-container').addClass('hide-toggle');
1423
1424          if (isMobile()) {
1425            // On mobile, slide out chat and slide in contact form
1426            $chatWindow.removeClass('show');
1427            setTimeout(function () {
1428              $chatWindow.hide();
1429              $contactFormWindow.show();
1430              // Force reflow
1431              $contactFormWindow[0].offsetHeight;
1432              // Add show class for slide animation
1433              setTimeout(function () {
1434                $contactFormWindow.addClass('show');
1435                $('.contact-form-content').scrollTop(0);
1436              }, 10);
1437            }, 300);
1438          } else {
1439            // Desktop - slide chat to left and slide in contact form
1440            $chatWindow.animate({ right: '390px' }, 300);
1441            $contactFormWindow.show();
1442            setTimeout(function () {
1443              $contactFormWindow.animate({ right: '20px' }, 300);
1444            }, 50);
1445          }
1446        }
1447      }
1448
1449      // Hide contact form - slides out and chat returns to original position
1450      function hideContactForm() {
1451        if (contactFormOpen) {
1452          contactFormOpen = false;
1453
1454          if (isMobile()) {
1455            // Slide out contact form
1456            $contactFormWindow.removeClass('show');
1457
1458            setTimeout(function () {
1459              $contactFormWindow.hide();
1460              // Show chat window again if it was open
1461              if (isOpen) {
1462                $chatWindow.show();
1463                // Force reflow
1464                $chatWindow[0].offsetHeight;
1465                setTimeout(function () {
1466                  $chatWindow.addClass('show');
1467                }, 10);
1468              } else {
1469                // If chat is not open, show toggle button
1470                $('.chatbot-toggle-container').removeClass('hide-toggle');
1471              }
1472            }, 300);
1473          } else {
1474            // Desktop - animate back
1475            $contactFormWindow.animate({ right: '-370px' }, 300, function () {
1476              $contactFormWindow.hide();
1477            });
1478            $chatWindow.animate({ right: '20px' }, 300);
1479
1480            // Only show toggle if both windows are closed
1481            if (!isOpen) {
1482              $('.chatbot-toggle-container').removeClass('hide-toggle');
1483            }
1484          }
1485        }
1486      }
1487
1488      // Submit contact form
1489        function submitContactForm() {
1490            const name = $('#chat_contactName').val();
1491            const email = $('#chat_contactEmail').val();
1492            const phone = $('#chat_contactPhone').val();
1493            const message = $('#chat_contactMessage').val();
1494
1495            // Basic validation
1496            if (!name || !email || !message) {
1497                alert('Please fill out all required fields.');
1498                return;
1499            }
1500
1501            // Email validation
1502            const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
1503            if (!emailRegex.test(email)) {
1504                alert('Please enter a valid email address.');
1505                return;
1506            }
1507
1508            // Message length validation
1509            if (message.length < 10) {
1510                alert('Your message must be at least 10 characters long.');
1511                return;
1512            }
1513
1514            // Disable form during submission
1515            $('#contact-submit-btn').prop('disabled', true).text('Sending...');
1516
1517            var form = $("#chatbot-contact-form");
1518
1519            // Execute reCAPTCHA before submitting
1520            grecaptcha.ready(function() {
1521                grecaptcha.execute('6LcokacUAAAAAH_snk3O5bpdYwjpC5XAuXNLrJLH', {action: 'contact_us'}).then(function(token) {
1522                    // Set the reCAPTCHA token
1523                    $("#chat_g-Recaptcha-Response-Contact").val(token);
1524
1525                    // Submit the form with reCAPTCHA token
1526                    $.ajax({
1527                        url: "/Home/ChatContactPost",
1528                        type: 'POST',
1529                        data: form.serialize(),
1530                        success: function (response) {
1531                            if (typeof response === 'string' && response.indexOf('{"message":') != -1) {
1532                                var jsonData = JSON.parse(response);
1533                                if (jsonData.success) {
1534                                    appendMessage('assistant', 'Thanks for providing your information! We will get back to you soon.');
1535                                    hideContactForm();
1536
1537                                    // Reset the form
1538                                    $('#chat_contactName').val('');
1539                                    $('#chat_contactEmail').val('');
1540                                    $('#chat_contactPhone').val('');
1541                                    $('#chat_contactMessage').val('');
1542                                } else {
1543                                    alert(jsonData.message || 'There was an error processing your request.');
1544                                }
1545                            } else if (response.success) {
1546                                appendMessage('assistant', 'Thanks for providing your information! We will get back to you soon.');
1547                                hideContactForm();
1548
1549                                // Reset the form
1550                                $('#chat_contactName').val('');
1551                                $('#chat_contactEmail').val('');
1552                                $('#chat_contactPhone').val('');
1553                                $('#chat_contactMessage').val('');
1554
1555                            } else {
1556                                alert(response.message || 'There was an error processing your request.');
1557                            }
1558
1559                            $('#contact-submit-btn').prop('disabled', false).text('Submit');
1560                        },
1561                        error: function (xhr, status, error) {
1562                            alert('Failed to submit your information. Please try again.');
1563                            console.error('AJAX Error:', error);
1564                            $('#contact-submit-btn').prop('disabled', false).text('Submit');
1565                        }
1566                    });
1567                });
1568            });
1569        }
1570
1571        function convertMarkdownLinksToHTML(text) {
1572            return text.replace(/\[([^\]]+)\]\(([^)]+)\)/g, (match, linkText, url) => {
1573                // Add target="_blank" for http/https links
1574                if (url.startsWith('http://') || url.startsWith('https://')) {
1575                    return `<a href="${url}" target="_blank" rel="noopener noreferrer">${linkText}</a>`;
1576                }
1577                // Keep tel: and mailto: links as-is
1578                return `<a href="${url}">${linkText}</a>`;
1579            });
1580        }
1581
1582        function getLuminance(hex) {
1583            // Remove # if present
1584            hex = hex.replace('#', '');
1585
1586            // Convert hex to RGB
1587            const r = parseInt(hex.substr(0, 2), 16) / 255;
1588            const g = parseInt(hex.substr(2, 2), 16) / 255;
1589            const b = parseInt(hex.substr(4, 2), 16) / 255;
1590
1591            // Calculate relative luminance
1592            const rLum = r <= 0.03928 ? r / 12.92 : Math.pow((r + 0.055) / 1.055, 2.4);
1593            const gLum = g <= 0.03928 ? g / 12.92 : Math.pow((g + 0.055) / 1.055, 2.4);
1594            const bLum = b <= 0.03928 ? b / 12.92 : Math.pow((b + 0.055) / 1.055, 2.4);
1595
1596            return 0.2126 * rLum + 0.7152 * gLum + 0.0722 * bLum;
1597        }
1598
1599        function isLightColor(hex) {
1600            const luminance = getLuminance(hex);
1601            return luminance > 0.5; // Threshold for light vs dark
1602        }
1603
1604        function updateTextColors() {
1605            const rootStyles = getComputedStyle(document.documentElement);
1606            let customerColor = rootStyles.getPropertyValue('--customer_color').trim();
1607
1608            // Check if customer color is not set or is empty
1609            if (!customerColor || customerColor === '') {
1610                const defaultColor = '#f3f3f3';
1611
1612                // Set the default customer color
1613                document.documentElement.style.setProperty('--customer_color', defaultColor);
1614                customerColor = defaultColor;
1615            }
1616
1617            const isLight = isLightColor(customerColor);
1618            const textColor = isLight ? '#000000b3' : '#ffffff';
1619
1620            const $chatbotToggle = $('#chatbot-toggle');
1621            if (isLight) {
1622                $chatbotToggle.removeClass('dark-background').addClass('light-background');
1623            } else {
1624                $chatbotToggle.removeClass('light-background').addClass('dark-background');
1625            }
1626
1627            // Update the CSS custom property
1628            document.documentElement.style.setProperty('--adaptive-text-color', textColor);
1629        }
1630
1631        function isMobile() {
1632            return window.innerWidth <= 768;
1633        }
1634
1635        // Public interface
1636        return {
1637            init: init
1638        };
1639    })();
1640
1641    // Initialize the chatbot module when document is ready
1642    $(document).ready(function () {
1643        if (window.ChatbotModule) {
1644            window.ChatbotModule.init();
1645        }
1646    });
1647</script>
1647
1648<!-- Modal -->
1649<div class="modal" id="carouselImageryPhotoModal">
1650    <div class="modal-dialog modal-dialog-centered modal-lg">
1651        <div class="modal-content">
1652            <div class="modal-header"><button type="button" class="close" data-dismiss="modal">&times;</button></div>
1653            <div class="modal-body">
1654                    <div class="w-100 w-lg-75 mx-auto mt-4 mb-4">
1655                        <div class="slider slider-imagery w-100">
1656                                <div class="image-slider m-2">
1657                                    <img alt="Image" src="https://du9m0k402rjmo.cloudfront.net/images/P_25532/f324ab1e-94e6-4598-a8da-7387d7a175d0.jpg" class="img-fluid text-center mx-auto" />
1658                                </div>
1659                                <div class="image-slider m-2">
1660                                    <img alt="Image" src="https://du9m0k402rjmo.cloudfront.net/images/P_25532/fbb3aa4d-62ab-4685-b5d6-d788b2a2afe2.jpg" class="img-fluid text-center mx-auto" />
1661                                </div>
1662                                <div class="image-slider m-2">
1663                                    <img alt="Image" src="https://du9m0k402rjmo.cloudfront.net/images/P_25532/c4d56bc0-021c-4023-977d-f2bcb7d898f9.jpg" class="img-fluid text-center mx-auto" />
1664                                </div>
1665                                <div class="image-slider m-2">
1666                                    <img alt="Image" src="https://du9m0k402rjmo.cloudfront.net/images/P_25532/3917c280-f1e3-4fdc-8678-33875868981b.jpg" class="img-fluid text-center mx-auto" />
1667                                </div>
1668                                <div class="image-slider m-2">
1669                                    <img alt="Image" src="https://du9m0k402rjmo.cloudfront.net/images/P_25532/a2b7ee9c-34d7-43dc-b769-72fd9de28490.jpg" class="img-fluid text-center mx-auto" />
1670                                </div>
1671                                <div class="image-slider m-2">
1672                                    <img alt="Image" src="https://du9m0k402rjmo.cloudfront.net/images/P_25532/4554aa09-9fb9-4f94-9e63-a42a3f077ea0.jpg" class="img-fluid text-center mx-auto" />
1673                                </div>
1674                                <div class="image-slider m-2">
1675                                    <img alt="Image" src="https://du9m0k402rjmo.cloudfront.net/images/P_25532/03bbfcb0-b644-4b84-9f10-99836bca8afb.jpeg" class="img-fluid text-center mx-auto" />
1676                                </div>
1677                                <div class="image-slider m-2">
1678                                    <img alt="Image" src="https://du9m0k402rjmo.cloudfront.net/images/P_25532/8e25c82f-85c7-4634-baa3-dba52d543b5f.jpeg" class="img-fluid text-center mx-auto" />
1679                                </div>
1680                                <div class="image-slider m-2">
1681                                    <img alt="Image" src="https://du9m0k402rjmo.cloudfront.net/images/P_25532/789df3c7-a24e-4b3b-88ab-fbfd8a83ba07.jpg" class="img-fluid text-center mx-auto" />
1682                                </div>
1683                                <div class="image-slider m-2">
1684                                    <img alt="Image" src="https://du9m0k402rjmo.cloudfront.net/images/P_25532/c950e5e7-0af9-402e-9976-6e1417d717f4.jpg" class="img-fluid text-center mx-auto" />
1685                                </div>
1686                                <div class="image-slider m-2">
1687                                    <img alt="Image" src="https://du9m0k402rjmo.cloudfront.net/images/P_25532/b1a38da7-08cc-4206-a6a1-d732d75178f3.jpg" class="img-fluid text-center mx-auto" />
1688                                </div>
1689                                <div class="image-slider m-2">
1690                                    <img alt="Image" src="https://du9m0k402rjmo.cloudfront.net/images/P_25532/4053eee0-d044-4c3b-832e-f6c25c0011c7.jpg" class="img-fluid text-center mx-auto" />
1691                                </div>
1692                                <div class="image-slider m-2">
1693                                    <img alt="Image" src="https://du9m0k402rjmo.
1693cloudfront.net/images/P_25532/c71f7fbb-1e23-4339-b069-dc00ef1c6df0.jpg" class="img-fluid text-center mx-auto" />
1694                                </div>
1695                                <div class="image-slider m-2">
1696                                    <img alt="Image" src="https://du9m0k402rjmo.cloudfront.net/images/P_25532/f1b57936-fb95-434c-a6f2-8a514aec0f3b.jpg" class="img-fluid text-center mx-auto" />
1697                                </div>
1698                                <div class="image-slider m-2">
1699                                    <img alt="Image" src="https://du9m0k402rjmo.cloudfront.net/images/P_25532/b9cb7f5b-1421-4d92-a972-b6e9deeee22f.jpg" class="img-fluid text-center mx-auto" />
1700                                </div>
1701                                <div class="image-slider m-2">
1702                                    <img alt="Image" src="https://du9m0k402rjmo.cloudfront.net/images/P_25532/1e2ed5cb-6f71-443f-a08d-c0d56e87de5a.jpg" class="img-fluid text-center mx-auto" />
1703                                </div>
1704                                <div class="image-slider m-2">
1705                                    <img alt="Image" src="https://du9m0k402rjmo.cloudfront.net/images/P_25532/410e7b95-83ea-4697-a9ce-9291873bcf7e.jpg" class="img-fluid text-center mx-auto" />
1706                                </div>
1707                        </div>
1708                    </div>
1709            </div>
1710        </div>
1711    </div>
1712</div>
1713
1714<!-- Modal -->
1715<div class="modal" id="carouselImageryVideoModal">
1716    <div class="modal-dialog modal-dialog-centered modal-xl">
1717        <div class="modal-content">
1718            <div class="modal-header"><button type="button" class="close" data-dismiss="modal">&times;</button></div>
1719            <div class="modal-body">
1720            </div>
1721        </div>
1722    </div>
1723</div>
1724
1725<div id="loadingImg" class="loader" style="display:none !important">
1726    <i class="fas fa-circle"></i>
1727    <i class="fas fa-circle"></i>
1728    <i class="fas fa-circle"></i>
1729</div>
1730
1731<script type="text/javascript">
1732    var isMobile = false;
1733    var isTablet = false;
1734    var pageSize = 5;
1735    var pageIndex = 0;
1736    var notReputation = false;
1737    var hasbanner = false;
1738    var keepPostUp = false;
1739    var listOfSites = "";
1740    var numOfReviews = 89;
1741    var numOfFilteredReviews = 89;
1742    var testimonialPageBackgroundColor = '#046D7A';
1743    var numOfPosts = 0;
1744    var postsPageIndex = 0;
1745    var geocode = null;
1746    var isSubmittingReview = false; //global flag to track submission
1747
1748    $(document).ready(function () {
1749
1750        if ($(window).width() < 576) {
1751            $("#gallerysection").addClass("pr-3");
1752            $("#gallerysection").addClass("pl-3");
1753        }
1754        else {
1755            $("#gallerysection").removeClass("pr-3");
1756            $("#gallerysection").removeClass("pl-3");
1757        }
1758
1759        if($("#contact_us_phone").length > 0){
1760            var cleave = new Cleave('#contact_us_phone', {
1761                phone: true,
1762                phoneRegionCode: 'US'
1763            });
1764        }
1765
1766        // Load the review modal async on page load
1767        $.get('/Home/GetReviewModalContent', { id: 25532, template: "Template_6"}, function (data) {
1768            if (data != "") {
1769                $("#reviewFormParentContainer").append(data);
1770                $('#starRating').barrating({
1771                    theme: 'bootstrap-stars',
1772                    deselectable: true,
1773                    onSelect: function (value, text, event) {
1774                        $('.br-widget').removeClass('error');
1775                        $('.alert').alert('close');
1776                    }
1777                });
1778
1779            }
1780        });
1781
1782        checkMobile();
1783        checkTablet();
1784        bgSlider();
1785        initializeCarousel();
1786        checkHashRoute();
1787
1788        PauseVideoPlayer();
1789
1790        if(hasbanner){
1791            GetPostsBanner();
1792        }
1793
1794        $(window).on('hashchange', function(){
1795            checkHashRoute();
1796        });
1797
1798        document.addEventListener("visibilitychange", function () {
1799            if (document["hidden"]) {
1800                PauseVideoPlayer();
1801            }
1802        });
1803
1804        var navMain = $("#navbarToggler");
1805        navMain.on("click", "a", null, function () {
1806            navMain.collapse('hide');
1807        });
1808
1809        $(window).scroll(function () {
1810            var scroll = $(window).scrollTop();
1811            if (('True' == 'False') || ('True' == 'True' && window.outerWidth > 767.98)) { /*false=center/true=left*/
1812                if (scroll > 150){
1813                    $(".content").addClass("page-section-adjust");
1814                    $(".nav-logo").addClass("nav-logo-adjust");
1815                    $(".nav-location").addClass("nav-item-adjust");
1816                }
1817                else if(scroll <= 150){
1818                    $(".content").removeClass("page-section-adjust");
1819                    $(".nav-logo").removeClass("nav-logo-adjust");
1820                    $(".nav-location").removeClass("nav-item-adjust");
1821                }
1822            }
1823        });
1824
1825        $("#carouselImageryVideoModal").on('shown.bs.modal', function (e) {
1826            $("video").each(function () { this.pause() }); //stop html5 video from playing
1827        });
1828
1829        $("#carouselImageryVideoModal").on('hidden.bs.modal', function (e) {
1830            $("video").each(function () { this.pause() }); //stop html5 video from playing
1831            $('.slider-video').slick('unslick'); //destroy slider to prevent video from playing after closing
1832        });
1833
1834        $(document).on("click", "#btnContactPost", function (e) {
1835            $("#btnContactPost").prop('disabled', true);
1836            $("#btnContactPost").css('font-weight', 'normal');
1837            contactUsPost(e);
1838        });
1839
1840
1841        var analyticsCategory = "Desktop";
1842        if (isMobile == true) {
1843            analyticsCategory = "Mobile";
1844        }
1845
1846        if (testimonialPageBackgroundColor != null && testimonialPageBackgroundColor != '' && testimonialPageBackgroundColor != "#F5F5F5") {
1847            //set footer background color
1848            $('.custom-background-color').css('background-color', testimonialPageBackgroun
1848dColor);
1849            //set footer text color appropriately
1850            setFooterColor(testimonialPageBackgroundColor);
1851        }
1852        else {
1853            //set footer background color to white
1854            var white = "#FFFFFF";
1855            $('.custom-background-color').css('background-color', white);
1856            //set footer text color appropriately
1857            setFooterColor(white);
1858        }
1859
1860        $("#HomePageNavigationLink").click(function(e){
1861            $('html, body').animate({ scrollTop: 0 }, 'fast');
1862        });
1863
1864        $(".business-name").click(function(e){
1865            $('html, body').animate({ scrollTop: 0 }, 'fast');
1866        });
1867
1868        $(".testimonialsBlurbMore").click(function(e){
1869            $('html, body').animate({ scrollTop: 0 }, 'fast');
1870        });
1871
1872        $('#starRating').barrating({
1873            theme: 'bootstrap-stars',
1874            deselectable: true,
1875            onSelect: function (value, text, event) {
1876                $('.br-widget').removeClass('error');
1877                $('.alert').alert('close');
1878            }
1879        });
1880
1881        if(numOfPosts > 0){
1882            GetPostsData(0);
1883        }
1884
1885        $(document).on('click', "#nextPosts", function (e) {
1886            ScrollForPosts(e);
1887            GetPostsData(1);
1888        });
1889
1890        $(document).on('click', "#prevPosts", function (e) {
1891            ScrollForPosts(e);
1892            GetPostsData(-1);
1893        });
1894
1895        $(document).on('click', "#postReview", function (e) {
1896            e.preventDefault();
1897            e.stopPropagation();
1898
1899            if (isSubmittingReview) {
1900                console.log('Review submission already in progress - blocking duplicate submission');
1901                return false;
1902            }
1903
1904            var $button = $(this);
1905            var $form = $("#postReviewForm");
1906            var $modal = $("#reviewFormSection");
1907
1908            isSubmittingReview = true;
1909            console.log('Starting review submission');
1910
1911            setProcessingState($button, $form, true);
1912
1913            var alertType = "success";
1914
1915            if(validateReview("#postReview")) {
1916                console.log('Review validation passed');
1917                ShowLoading();
1918
1919                grecaptcha.ready(function() {
1920                    grecaptcha.execute('6LcokacUAAAAAH_snk3O5bpdYwjpC5XAuXNLrJLH', {action: 'testimonial_review'}).then(function(token) {
1921                        $("#g-Recaptcha-Response-Review").attr("value", token);
1922
1923                        var rating = null;
1924                        var selectElement = document.getElementById('starRating');
1925                        var selectRating = selectElement ? selectElement.value : null;
1926                        var selectedOption = $('#starRating option:selected').val();
1927                        var barRating = null;
1928                        var reviewerAlias = $('#review_alias').val() || '';
1929                        var reviewHeading = $('#review_heading').val() || '';
1930                        var antiForgeryToken = $('input[name="__RequestVerificationToken"]').val();
1931                        var recaptchaToken = $('#g-Recaptcha-Response-Review').val();
1932                        var timeToPost = $('#phoneNumber_alternative').val();
1933
1934                        var reviewText = $('#review').val() || '';
1935                        var profileId = 25532;
1936
1937                        console.log('Trying to get rating value...');
1938
1939                        var selectRating = $('#starRating')[0] ? $('#starRating')[0].value : null;
1940                        console.log('Select element direct value:', selectRating);
1941
1942                        var jqueryRating = $('#starRating').val();
1943                        console.log('jQuery val() result:', jqueryRating, typeof jqueryRating);
1944
1945                        if (typeof $('#starRating').barrating === 'function') {
1946                            try {
1947                                var barResult = $('#starRating').barrating('show');
1948
1949                                if (barResult && typeof barResult === 'string') {
1950                                    barRating = barResult;
1951                                } else if (barResult && typeof barResult === 'number') {
1952                                    barRating = barResult.toString();
1953                                }
1954                            } catch (e) {
1955                                console.log('Error getting barrating value:', e);
1956                            }
1957                        }
1958
1959                        var selectedOption = $('#starRating option:selected').val();
1960                        console.log('Selected option value:', selectedOption);
1961
1962                        var jqueryResult = $('#starRating').val();
1963                        var jqueryRating = null;
1964
1965                        if (jqueryResult && typeof jqueryResult === 'string') {
1966                            jqueryRating = jqueryResult;
1967                        } else if (jqueryResult && typeof jqueryResult === 'number') {
1968                            jqueryRating = jqueryResult.toString();
1969                        }
1970
1971                        if (barRating && barRating !== "" && barRating !== "0") {
1972                            rating = barRating;
1973                        } else if (selectRating && selectRating !== "" && selectRating !== "0") {
1974                            rating = selectRating;
1975                        } else if (selectedOption && selectedOption !== "" && selectedOption !== "0") {
1976                            rating = selectedOption;
1977                        } else if (jqueryRating && jqueryRating !== "" && jqueryRating !== "0") {
1978                            rating = jqueryRating;
1979                        }
1980
1981                        if (rating && typeof rating !== 'string') {
1982                            console.log('WARNING: Rating is not a string, converting:', rating, typeof rating);
1983                            rating = String(rating);
1984                        }
1985
1986                        if (rating && typeof rating === 'object') {
1987                            console.error('CRITICAL ERROR: Rating is still an object!', rating);
1988                            rating = null;
1989                        }
1990
1991                        console.log('Validation check - rating found:', rating, typeof rating);
1992                        console.log('Final rating value:', rating, typeof rating);
1993
1994                        console.log('Form values before sending:');
1995                        console.log('- Review text:', reviewText);
1996                        console.log('- Rating:', rating);
1997                        console.log('- Profile ID:', profileId);
1998                        console.log('- Reviewer alias:', reviewerAlias);
1999                        console.log('- Review heading:', reviewHeading);
2000                        console.log('- Anti-forgery token:', antiForgeryToken ? 'Present' : 'Missing');
2001
2002                        // Build form data
2003                        var formDataArray = [
2004                            { name: 'profile_id', value: profileId },
2005                            { name: 'review', value: reviewText },
2006                            { name: 'review_rating', value: rating },
2007                            { name: 'reviewer_alias', value: reviewerAlias },
2008                            { name: 'review_heading', value: reviewHeading },
2009                            { name: '__RequestVerificationToken', value: antiForgeryToken },
2010                            { name: 'g-Recaptcha-Response-Review', value: recaptchaToken },
2011                            { name: 'phoneNumber_alternative', value: timeToPost },
2012                            { name: '_t', value: new Date().getTime() }
2013                        ];
2014
2015                        var formData = formDataArray
2016                            .filter(item => item.value !== undefined && item.value !== null && item.value !== '')
2017                            .map(item => encodeURIComponent(item.name) + '=' + encodeURIComponent(item.value))
2018                            .join('&');
2019
2020                        console.log('Manual form data built:', formData);
2021
2022                        $.ajax({
2023                            url: "/Home/ReviewPost",
2024                            type: "POST",
2025                            data: formData,
2026                            contentType: "application/x-www-form-urlencoded; charset=UTF-8",
2027                            dataType: "json",
2028                            success: function(data) {
2029                                console.log('Review submission response:', data);
2030
2031                                if (!data.message || data.message.trim() === '') {
2032                                    data.message = data.success ?
2033                                        'Thank you for your review! It has been submitted successfully.' :
2034                                        'There was an issue submitting your review. Please check all fields and try again.';
2035                                }
2036
2037                                alertType = data.success ? "success" : "warning";
2038
2039                                if (!data.success) {
2040                                    recaptchaReviewIncomplete();
2041                                    showClassicCaptcha("review");
2042                                }
2043
2044                                $form.find('.alert').remove();
2045
2046                                var alertHtml = '<div class="alert alert-' + alertType + ' alert-dismissible" role="alert">' +
2047                                                '<button type="button" class="close" data-dismiss="alert" aria-label="Close">' +
2048                                                '<span aria-hidden="true">&times;</span></button>' +
2049                                                data.message + '</div>';
2050
2051                                $form.prepend(alertHtml);
2052
2053                                $modal.find('.modal-body').scrollTop(0);
2054
2055                                if(alertType === "success") {
2056                                    // Auto-hide modal after showing success message
2057                                    setTimeout(function () {
2058                                        $modal.modal('hide');
2059                                        ClearReviewFields();
2060                                    }, 3000);
2061                                }
2062
2063                                // Fade out alert after delay
2064                                setTimeout(function() {
2065                                    $form.find('.alert').fadeOut(500, function() {
2066                                        $(this).remove();
2067                                    });
2068                                }, 6000);
2069                            },
2070                            error: function(xhr, status, error) {
2071                                console.error('AJAX Error:', status, error);
2072                                console.error('Response Text:', xhr.responseText);
2073
2074                                $form.find('.alert').remove();
2075                                var errorHtml = '<div class="alert alert-danger alert-dismissible" role="alert">' +
2076                                                '<button type="button" class="close" data-dismiss="alert" aria-label="Close">' +
2077                                                '<span aria-hidden="true">&times;</span></button>' +
2078                                                'An error occurred while submitting your review. Please try again.</div>';
2079                                $form.prepend(errorHtml);
2080
2081                                $modal.find('.modal-body').scrollTop(0);
2082                            },
2083                            complete: function() {
2084                                // Reset states
2085                                console.log('Resetting processing state');
2086                                setProcessingState($button, $form, false);
2087                                HideLoading();
2088                                isSubmittingReview = false;
2089                                console.log('Review submission completed');
2090                            }
2091                        });
2092
2093                    }).catch(function(error) {
2094                        console.error('reCAPTCHA Error:', error);
2095
2096                        $form.find('.alert').remove();
2097                        var captchaErrorHtml = '<div class="alert alert-danger alert-dismissible" role="alert">
2097' +
2098                                                '<button type="button" class="close" data-dismiss="alert" aria-label="Close">' +
2099                                                '<span aria-hidden="true">&times;</span></button>' +
2100                                                'Security verification failed. Please refresh the page and try again.</div>';
2101                        $form.prepend(captchaErrorHtml);
2102
2103                        $modal.find('.modal-body').scrollTop(0);
2104                        setProcessingState($button, $form, false);
2105                        HideLoading();
2106                        isSubmittingReview = false;
2107                    });
2108                });
2109            } else {
2110                console.log('Review validation failed');
2111
2112                var missingFields = [];
2113                if (!$('#review').val() || $('#review').val().trim() === '') {
2114                    missingFields.push('review text');
2115                }
2116
2117                var rating = null;
2118                var selectRating = $('#starRating')[0] ? $('#starRating')[0].value : null;
2119                var jqueryRating = $('#starRating').val();
2120                var selectedOption = $('#starRating option:selected').val();
2121                var barRating = null;
2122
2123                if (typeof $('#starRating').barrating === 'function') {
2124                    try {
2125                        barRating = $('#starRating').barrating('show');
2126                    } catch (e) {
2127                        // Ignore error
2128                    }
2129                }
2130
2131                if (barRating && barRating !== "" && barRating !== "0") {
2132                    rating = barRating;
2133                } else if (selectRating && selectRating !== "" && selectRating !== "0") {
2134                    rating = selectRating;
2135                } else if (selectedOption && selectedOption !== "" && selectedOption !== "0") {
2136                    rating = selectedOption;
2137                } else if (typeof jqueryRating === 'string' && jqueryRating !== "" && jqueryRating !== "0") {
2138                    rating = jqueryRating;
2139                }
2140
2141                console.log('Validation check - rating found:', rating);
2142
2143                if (!rating || rating === "" || rating === "0") {
2144                    missingFields.push('rating');
2145                }
2146
2147                var validationMessage = 'Please fill out the following required fields: ' + missingFields.join(' and ') + '.';
2148                console.log('Validation message:', validationMessage);
2149
2150                $form.find('.alert').remove();
2151                var validationHtml = '<div class="alert alert-warning alert-dismissible" role="alert">' +
2152                                    '<button type="button" class="close" data-dismiss="alert" aria-label="Close">' +
2153                                    '<span aria-hidden="true">&times;</span></button>' +
2154                                    validationMessage + '</div>';
2155                $form.prepend(validationHtml);
2156
2157                $modal.find('.modal-body').scrollTop(0);
2158                setProcessingState($button, $form, false);
2159                isSubmittingReview = false;
2160
2161                return false;
2162            }
2163        });
2164
2165        $('#reviewFormSection').on('hidden.bs.modal', function () {
2166            console.log('Modal hidden - resetting submission state');
2167            isSubmittingReview = false;
2168            setProcessingState($("#postReview"), $("#postReviewForm"), false);
2169            $(this).find('.alert').remove();
2170        });
2171
2172        $('#reviewFormSection').on('show.bs.modal', function () {
2173            console.log('Modal shown - ensuring clean state');
2174            isSubmittingReview = false;
2175            setProcessingState($("#postReview"), $("#postReviewForm"), false);
2176
2177            $("#postReview").prop('disabled', false);
2178            $("#postReview").css('font-weight', 'bold');
2179
2180            setTimeout(function () {
2181                console.log('=== STAR RATING DEBUG ===');
2182                console.log('Star rating element:', $('#starRating')[0]);
2183                console.log('Star rating jQuery object:', $('#starRating'));
2184                console.log('Star rating direct value:', $('#starRating')[0] ? $('#starRating')[0].value : 'N/A');
2185                console.log('Star rating jQuery val():', $('#starRating').val());
2186                console.log('Star rating selected option:', $('#starRating option:selected').val());
2187                console.log('Barrating plugin available:', typeof $('#starRating').barrating === 'function');
2188                if (typeof $('#starRating').barrating === 'function') {
2189                    try {
2190                        console.log('Barrating current value:', $('#starRating').barrating('show'));
2191                    } catch (e) {
2192                        console.log('Error getting barrating value:', e);
2193                    }
2194                }
2195                console.log('=== END STAR RATING DEBUG ===');
2196            }, 100);
2197        });
2198
2199        // Prevent modal from closing during submission
2200        $('#reviewFormSection').on('hide.bs.modal', function (e) {
2201            if (isSubmittingReview) {
2202                console.log('Preventing modal close during submission');
2203                e.preventDefault();
2204                return false;
2205            }
2206        });
2207
2208        $('a').on('click', function () {
2209            if (this.id !== "undefined" && this.id !== "") {
2210                gtag('event', 'Link Click', {
2211                    'event_category': analyticsCategory,
2212                    'event_label': this.id
2213                });
2214            }
2215        });
2216
2217        $('#PhoneNav').on('click', function () {
2218            gtag('event', 'Link Click', {
2219                'event_category': analyticsCategory,
2220                'event_label': "CustomerBusinessPhoneLinkTemplate6"
2221            });
2222        });
2223        $('.phoneLinkInput').on('click', function () {
2224            gtag('event', 'Link Click', {
2225                'event_category': analyticsCategory,
2226                'event_label': "CustomerBusinessPhoneLinkTemplate6-1"
2227            });
2228        });
2229        $('#contactPhoneLink').on('click', function () {
2230            gtag('event', 'Link Click', {
2231                'event_category': analyticsCategory,
2232                'event_label': "CustomerBusinessPhoneLinkTemplate6-2"
2233            });
2234        });
2235        $('#contactPrimaryPhoneLink').on('click', function () {
2236            gtag('event', 'Link Click', {
2237                'event_category': analyticsCategory,
2238                'event_label': "CustomerBusinessPhoneLinkTemplate6-3"
2239            });
2240        });
2241        $('#contactSecondaryPhoneLink').on('click', function () {
2242            gtag('event', 'Link Click', {
2243                'event_category': analyticsCategory,
2244                'event_label': "CustomerBusinessPhoneLinkTemplate6-4"
2245            });
2246        });
2247        $('#contactMobilePhoneLink').on('click', function () {
2248            gtag('event', 'Link Click', {
2249                'event_category': analyticsCategory,
2250                'event_label': "CustomerBusinessPhoneLinkTemplate6-5"
2251            });
2252        });
2253        $('#contactFaxPhoneLink').on('click', function () {
2254            gtag('event', 'Link Click', {
2255                'event_category': analyticsCategory,
2256                'event_label': "CustomerBusinessPhoneLinkTemplate6-6"
2257            });
2258        });
2259        $('#contactTollfreePhoneLink').on('click', function () {
2260            gtag('event', 'Link Click', {
2261                'event_category': analyticsCategory,
2262                'event_label': "CustomerBusinessPhoneLinkTemplate6-7"
2263            });
2264        });
2265        $('#contactPhoneC1').on('click', function () {
2266            gtag('event', 'Link Click', {
2267                'event_category': analyticsCategory,
2268                'event_label': "CustomerContactPhoneLinkTemplate6-8"
2269            });
2270        });
2271        $('#contactPhoneC2').on('click', function () {
2272            gtag('event', 'Link Click', {
2273                'event_category': analyticsCategory,
2274                'event_label': "CustomerContactPhoneLinkTemplate6-9"
2275            });
2276        });
2277        $('#contactPhoneC3').on('click', function () {
2278            gtag('event', 'Link Click', {
2279                'event_category': analyticsCategory,
2280                'event_label': "CustomerContactPhoneLinkTemplate6-10"
2281            });
2282        });
2283        $('#contactPhoneC4').on('click', function () {
2284            gtag('event', 'Link Click', {
2285                'event_category': analyticsCategory,
2286                'event_label': "CustomerContactPhoneLinkTemplate6-11"
2287            });
2288        });
2289        $('#contactPhoneC5').on('click', function () {
2290            gtag('event', 'Link Click', {
2291                'event_category': analyticsCategory,
2292                'event_label': "CustomerContactPhoneLinkTemplate6-12"
2293            });
2294        });
2295        $('#contactEmail').on('click', function () {
2296            gtag('event', 'Link Click', {
2297                'event_category': analyticsCategory,
2298                'event_label': "CustomerBusinessEmailLinkTemplate6"
2299            });
2300        });
2301        $('#writeReviewBt').on('click', function () {
2302            gtag('event', 'Button Click', {
2303                'event_category': analyticsCategory,
2304                'event_label': "WriteReviewButtonTemplate6"
2305            });
2306        });
2307        $(document).on('click', '#postReview', function () {
2308            gtag('event', 'Button Click', {
2309                'event_category': analyticsCategory,
2310                'event_label': "PostReviewButtonTemplate6"
2311            });
2312        });
2313        $('#nextReview').on('click', function () {
2314            gtag('event', 'Button Click', {
2315                'event_category': analyticsCategory,
2316                'event_label': "ShowNextReviewsButtonTemplate6"
2317            });
2318        });
2319        $('#prevReview').on('click', function () {
2320            gtag('event', 'Button Click', {
2321                'event_category': analyticsCategory,
2322                'event_label': "ShowPreviousReviewsButtonTemplate6"
2323            });
2324        });
2325        $('#google-social').on('click', function () {
2326            gtag('event', 'Link Click', {
2327                'event_category': analyticsCategory,
2328                'event_label': "CustomerGoogleSocialLinkTemplate6-1"
2329            });
2330        });
2331        $('#facebook-social').on('click', function () {
2332            gtag('event', 'Link Click', {
2333                'event_category': analyticsCategory,
2334                'event_label': "CustomerFacebookSocialLinkTemplate6-1"
2335            });
2336        });
2337        $('#yelp-social').on('click', function () {
2338            gtag('event', 'Link Click', {
2339                'event_category': analyticsCategory,
2340                'event_label': "CustomerYelpSocialLinkTemplate6-1"
2341            });
2342        });
2343        $('#twitter-social').on('click', function () {
2344            gtag('event', 'Link Click', {
2345                'event_category': analyticsCategory,
2346                'event_label': "CustomerTwitterSocialLinkTemplate6-1"
2347            });
2348        });
2349        $('#linkedin-social').on('click', function () {
2350            gtag('event', 'Link Click', {
2351                'event_category': analyticsCategory,
2352                'event_label': "CustomerLinkedinSocialLinkTemplate6-1"
2353            });
2354        });
2355        $('#instagram-social').on('click', function () {
2356            gtag('event', 'Link Click', {
2357                'event_category': analyticsCategory,
2358                'event_label': "CustomerInstagramSocialLinkTemplate6-1"
2359            });
2360        });
2361        $('#google-social-footer').on('click', function () {
2362            gtag('event', 'Link Click', {
2363                'event_category': analyticsCategory,
2364                'event_label': "CustomerGoogleSocialLinkTemplate6-2"
2365            });
2366        });
2367        $('#facebook-social-footer').on('click', function () {
2368            gtag('event', 'Link Click', {
2369                'event_category': analyticsCategory,
2370                'event_label': "CustomerFacebookSocialLinkTemplate6-2"
2371            });
2372        });
2373        $('#yelp-social-footer').on('click', function () {
2374            gtag('event', 'Link Click', {
2375                'event_category': analyticsCategory,
2376                'event_label': "CustomerYelpSocialLinkTemplate6-2"
2377            });
2378        });
2379        $('#twitter-social-footer').on('click', function () {
2380            gtag('event', 'Link Click', {
2381                'event_category': analyticsCategory,
2382                'event_label': "CustomerTwitterSocialLinkTemplate6-2"
2383            });
2384        });
2385        $('#linkedin-social-footer').on('click', function () {
2386            gtag('event', 'Link Click', {
2387                'event_category': analyticsCategory,
2388                'event_label': "CustomerLinkedinSocialLinkTemplate6-2"
2389            });
2390        });
2391        $('#instagram-social-footer').on('click', function () {
2392            gtag('event', 'Link Click', {
2393                'event_category': analyticsCategory,
2394                'event_label': "CustomerInstagramSocialLinkTemplate6-2"
2395            });
2396        });
2397        $('#contactEmailFooter').on('click', function () {
2398            gtag('event', 'Link Click', {
2399                'event_category': analyticsCategory,
2400                'event_label': "CustomerBusinessEmailLinkTemplate6-2"
2401            });
2402        });
2403        $('#btnContactPost').on('click', function () {
2404            gtag('event', 'Link Click', {
2405                'event_category': analyticsCategory,
2406                'event_label': "CustomerContactLeadPostTemplate6"
2407            });
2408        });
2409        $("#external-review-link").on('click', function () {
2410            gtag('event', 'Link Click', {
2411                'event_category': analyticsCategory,
2412                'event_label': "CustomerExternalReviewLinkTemplate6"
2413            });
2414        });
2415        $('#video').on('click', function () {
2416            gtag('event', 'Video Click', {
2417                'event_category': analyticsCategory,
2418                'event_label': "CustomerVideoTemplate6"
2419            });
2420        });
2421        $('#website-social').on('click', function () {
2422            gtag('event', 'Link Click', {
2423                'event_category': analyticsCategory,
2424                'event_label': "CustomerWebsiteSocialLinkTemplate6-1"
2425            });
2426        });
2427        $('#website-social-footer').on('click', function () {
2428            gtag('event', 'Link Click', {
2429                'event_category': analyticsCategory,
2430                'event_label': "CustomerWebsiteSocialLinkTemplate6-2"
2431            });
2432        });
2433        $('#photos-image-element').on('click', function () {
2434            gtag('event', 'Link Click', {
2435                'event_category': analyticsCategory,
2436                'event_label': "CustomerWebsiteImageryPhotoTemplate6"
2437            });
2438        });
2439        $('#HomePageNavigationLink').on('click', function () {
2440            gtag('event', 'Link Click', {
2441                'event_category': analyticsCategory,
2442                'event_label': "CustomerHomePageNavLinkTemplate6"
2443            });
2444        });
2445        $('#ContactPageNavigationLink').on('click', function () {
2446            gtag('event', 'Link Click', {
2447                'event_category': analyticsCategory,
2448                'event_label': "CustomerContactPageNavLinkTemplate6"
2449            });
2450        });
2451        $('#PhotosNavigationLink').on('click', function () {
2452            gtag('event', 'Link Click', {
2453                'event_category': analyticsCategory,
2454                'event_label': "CustomerPhotosPageNavLinkTemplate6"
2455            });
2456        });
2457        $('#testimoinalsPageNavigationLink').on('click', function () {
2458            gtag('event', 'Link Click', {
2459                'event_category': analyticsCategory,
2460                'event_label': "CustomerTestimonialsPageNavLinkTemplate6"
2461            });
2462        });
2463        $('#ServicesPageNavigationLink').on('click', function () {
2464            gtag('event', 'Link Click', {
2465                'event_category': analyticsCategory,
2466                'event_label': "CustomerServicesPageNavLinkTemplate6"
2467            });
2468        });
2469        $('#AboutPageNavigationLink').on('click', function () {
2470            gtag('event', 'Link Click', {
2471                'event_category': analyticsCategory,
2472                'event_label': "CustomerAboutPageNavLinkTemplate6"
2473            });
2474        });
2475        $('#GSVPageNavigationLink').on('click', function () {
2476            gtag('event', 'Link Click', {
2477                'event_category': analyticsCategory,
2478                'event_label': "CustomerGSVTourPageNavLinkTemplate3"
2479            });
2480        });
2481        //unable to directly track cross domain iFrame clicks. Track only first click on the iFrame itself
2482        var monitor = setInterval(function () {
2483            var elem = document.activeElement;
2484            if (elem && elem.tagName == "IFRAME" && elem.id == "googleMapEmbed") {
2485                gtag('event', 'iFrame Click', {
2486                    'event_category': analyticsCategory,
2487                    'event_label': "GoogleDirectionsTemplate6"
2488                });
2489                clearInterval(monitor);
2490            }
2491        }, 1000);
2492    });
2493
2494    var servicesRendered = false;
2495    var aboutRendered = false;
2496    var testimonialsRendered = false;
2497    var contactRendered = false;
2498    var photosRendered = false;
2499    var locationsRendered = false;
2500    var gsvRendered = false;
2501    var faqRendered = false;
2502    var contentRendered = false;
2503
2504    function DisplayPage(page) {
2505
2506        PauseVideoPlayer();
2507
2508        if (!$(page).hasClass("show")) {
2509            $("#pages div.collapse.show").collapse("hide");
2510        }
2511        $(page).collapse("show");
2512
2513        if(page == "#homePage")
2514        {
2515            var carousel = $(".slick-slider");
2516            if(carousel != null)
2517            {
2518                carousel.slick('refresh');
2519            }
2520        }
2521
2522        if (page == "#testimonialsPage") {
2523             // Load Testimonials via Ajax if not already loaded
2524            if (!testimonialsRendered) {
2525                ShowLoading();
2526                $.get('/Home/GetTestimonialsContent', {id: 25532, template: "Template_6"}, function (data) {
2527                    if (data != "")
2528                    {
2529                        $("#testimonialsPage").append(data);
2530                    }
2531                }).always(function() {
2532                    HideLoading();
2533                    testimonialsRendered = true;
2534                    GetReviewData(0);
2535                });
2536            }
2537
2538            $("html, body").animate({ scrollTop: 0 }, "fast");
2539        }
2540
2541        if (page == "#aboutPage") {
2542            // Load About via Ajax if not already loaded
2543            if (!aboutRendered) {
2544                ShowLoading();
2545                $.get('/Home/GetAboutContent', { id: 25532, template: "Template_6"}, function (data) {
2546                    if (data != "")
2547                    {
2548                        $("#aboutPage").append(data);
2549                        $.getScript("https://maps.googleapis.com/maps/api/js?key=AIzaSyB2UoPWVWPR8WrIFK_zqJ5nTN1NvGm9dqY&callback=initMap");
2550                    }
2551                }).always(function() {
2552                    HideLoading();
2553                    aboutRendered = true;
2554                });
2555            }
2556        }
2557
2558        if (page == "#servicesPage") {
2559            // Load Services via Ajax if not already loaded
2560            if (!servicesRendered) {
2561                ShowLoading();
2562                $.get('/Home/GetServicesContent', { id: 25532, template: "Template_6"}, function (data) {
2563                    if (data != "")
2564                    {
2565                        $("#servicesPage").append(data);
2566                    }
2567                }).always(function() {
2568                    HideLoading();
2569                    servicesRendered = true;
2570                });
2571            }
2572        }
2573
2574        if (page == "#imageryPage") {
2575            // Load photos via Ajax if not already loaded
2576            if (!photosRendered) {
2577                ShowLoading();
2578                $.get('/Home/GetPhotosContent', { id: 25532, template: "Template_6"}, function (data) {
2579                    if (data != "")
2580                    {
2581                        $("#imageryPage").append(data);
2582                    }
2583                }).always(function() {
2584                    HideLoading();
2585                    photosRendered = true;
2586                });
2587            }
2588        }
2589
2590        if (page == "#contactPage") {
2591            // Load Contact via Ajax if not already loaded
2592            if (!contactRendered) {
2593                ShowLoading();
2594                $.get('/Home/GetContactContent', { id: 25532, template: "Template_6"}, function (data) {
2595                    if (data != "")
2596                    {
2597                        $("#contactPage").append(data);
2598                    }
2599                }).always(function() {
2600                    HideLoading();
2601                    contactRendered = true;
2602                });
2603            }
2604        }
2605
2606         if (page == "#locationsPage") {
2607            // Load Locations via Ajax if not already loaded
2608             if (!locationsRendered) {
2609                 ShowLoading();
2610
2611                 $.get('/Home/GetLocationsContent', { id: 25532, template: "Template_6" }, function (data) {
2612                     if (data != "")
2613                     {
2614                        $("#locationsPage").append(data);
2615                     }
2616                 }).always(function() {
2617                    HideLoading();
2618                    locationsRendered = true;
2619                 });
2620             }
2621         }
2622
2623        if (page == "#gsvPage") {
2624            // Load GSV via Ajax if not already loaded
2625            if (!gsvRendered) {
2626                ShowLoading();
2627                $.get('/Home/Get360TourContent', { id: 25532, template: "Template_6"}, function (data) {
2628                    if (data != "")
2629                    {
2630                        $("#gsvPage").append(data);
2631                    }
2632                }).always(function() {
2633                    HideLoading();
2634                    gsvRendered = true;
2635                });
2636            }
2637        }
2638
2639        if (page == "#faqPage") {
2640            // Load Faqs via Ajax if not already loaded
2641            if (!faqRendered) {
2642                ShowLoading();
2643
2644                $.get('/Home/GetFAQContent', { id: 25532, template: "Template_6" }, function (data) {
2645                    if (data != "") {
2646                        $("#faqPage").append(data);
2647                    }
2648                }).always(function () {
2649                    HideLoading();
2650                    faqRendered = true;
2651                });
2652            }
2653        }
2654
2655        if (page == "#contentPage") {
2656            if (!contentRendered) {
2657                ShowLoading();
2658
2659                $.get('/Home/GetAdditionalContentContent', { id: 25532, template: "Template_6" }, function (data) {
2660                    if (data != "") {
2661                        $("#contentPage").append(data);
2662                    }
2663                }).always(function () {
2664                    HideLoading();
2665                    contentRendered = true;
2666                });
2667            }
2668        }
2669    }
2670
2671    function nextReview() {
2672        ScrollForReviews();
2673        GetReviewData(1);
2674    }
2675
2676    function prevReview() {
2677        ScrollForReviews();
2678        GetReviewData(-1);
2679    }
2680
2681    function GetReviewData(i)
2682    {
2683        if(i != 0){
2684            ShowLoading();
2685        }
2686        pageIndex = pageIndex + i;
2687        $.get('/Home/GetEnhancedTestimonialReviewInfo', {id: 25532, pageIndex: pageIndex, pageSize: pageSize, notReputation: notReputation, file: '_TemplateReviewContent'}, function (data) {
2688            if (data != "")
2689            {
2690                $(".reviewInfo").html(data);
2691            }
2692        }).always(function() {
2693            HideLoading();
2694        });
2695        SetPaginationButtons();
2696    }
2697
2698    function GetPostsData(i)
2699    {
2700        if(i != 0){
2701            ShowLoading();
2702        }
2703        postsPageIndex = postsPageIndex + i;
2704        $.get('/Home/GetTestimonialPostsInfo', {id: 25532, program_id: 17, profileDomain: 'https://treasuresjewelryky.com/', subdomain: 'treasuresjewelryky', testimonialSSL : 'False', domainSSL : 'True', pageIndex: postsPageIndex, pageSize: pageSize, file: '_TestimonialPostsContent'}, function (data) {
2705            if (data != "")
2706            {
2707                $(".postsInfo").html(data);
2708            }
2709        }).always(function() {
2710            HideLoading();
2711        });
2712        SetPostsPaginationButtons();
2713    }
2714
2715    function GetPostsBanner()
2716    {
2717        ShowLoading();
2718        var bannerObj = null;
2719        $.ajax({
2720            method: "POST",
2721            url: "/Home/GetPostBanner",
2722            data:JSON.stringify(
2723            {
2724                banner: bannerObj,
2725                testimonialPageColor: (false) ? 'transparent' :'#046D7A',
2726                postsColor: '#046D7A'
2727            }),
2728            contentType: 'application/json',
2729            success: function (data) {
2730                if(isMobile || isTablet){
2731                    setTimeout(function(){
2732                        $(".home-content").prepend(data);
2733                    }, 5000);
2734                }
2735                else{
2736                    $(".home-content").prepend(data);
2737                }
2738
2739                //remove banner after 30 seconds regardless of mobile/tablet/desktop
2740                 if (!keepPostUp) {
2741                    setTimeout(function () {
2742                        $("#posts-banner-alert").remove();
2743                    }, 30000);
2744                }
2745            }
2746        }).always(function() {
2747            HideLoading();
2748        });
2749    }
2750
2751    function SetPaginationButtons()
2752    {
2753        //look ahead by one
2754        if(((pageIndex + 1) * pageSize) >= numOfReviews){
2755            $("#nextReview").hide();
2756        }
2757        else{
2758            $("#nextReview").show();
2759            $("#nextReview").prop('disabled', false);
2760        }
2761
2762        if(pageIndex <= 0) {
2763            pageIndex = 0;
2764            $("#prevReview").hide();
2765        }
2766        else if (pageIndex > 0){
2767            $("#prevReview").show();
2768            $("#prevReview").prop('disabled', false);
2769        }
2770    }
2771
2772    function SetPostsPaginationButtons()
2773    {
2774        //look ahead by one
2775        if(((postsPageIndex + 1) * pageSize) >= numOfPosts){
2776            $("#nextPosts").hide();
2777        }
2778        else{
2779            $("#nextPosts").show();
2780            $("#nextPosts").prop('disabled', false);
2781        }
2782
2783        if(postsPageIndex <= 0) {
2784            postsPageIndex = 0;
2785            $("#prevPosts").hide();
2786        }
2787        else if (postsPageIndex > 0){
2788            $("#prevPosts").show();
2789            $("#prevPosts").prop('disabled', false);
2790        }
2791    }
2792
2793    function ShowLoading()
2794    {
2795        $("#loadingImg").show();
2796    }
2797
2798    function HideLoading()
2799    {
2800        $("#loadingImg").hide();
2801    }
2802
2803    function checkMobile() {
2804        var windowsize = $(window).width();
2805        switch (true) {
2806        case /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent):
2807            isMobile = true;
2808            break;
2809        case windowsize < 800:
2810            isMobile = true;
2811            break;
2812        default:
2813            isMobile = false;
2814      }
2815    }
2816
2817    function checkTablet() {
2818        var windowsize = $(window).width();
2819        switch (true) {
2820        case (windowsize >= 800) && (windowsize < 1200):
2821            isTablet = true;
2822            break;
2823        default:
2824            isTablet = false;
2825      }
2826    }
2827
2828    function DisplayPhoto(imageUrl){
2829        bootbox.alert({
2830            message:'<img class="img-fluid d-block mx-auto" src="' + imageUrl + '" />',
2831            size: "large",
2832            backdrop: true,
2833            buttons: {
2834                ok: {
2835                    className: 'btn-outline-dark',
2836                    label: 'Close'
2837                }
2838            }
2839        });
2840    }
2841
2842    function DisplayPhotoSlider(index){
2843        if(!$(".slider-imagery").hasClass("slick-initialized"))
2844        {
2845            $('.slider-imagery').slick({
2846                slidesToShow: 1,
2847                slidesToScroll: 1,
2848                arrows: true,
2849                fade: false,
2850                adaptiveHeight: false,
2851                infinite: true,
2852                useTransform: true,
2853                speed: 400,
2854                cssEase: 'cubic-bezier(0.77, 0, 0.18, 1)',
2855                autoplay: true,
2856            });
2857        }
2858
2859        $(".slider-imagery").slick('slickGoTo', index);
2860
2861        $("#carouselImageryPhotoModal").modal('show');
2862    }
2863
2864    function DisplayVideoSlider(index) {
2865
2866        if(!$(".slider-video").hasClass("slick-initialized"))
2867        {
2868            $('.slider-video').slick({
2869                slidesToShow: 1,
2870                slidesToScroll: 1,
2871                arrows: true,
2872                fade: false,
2873                adaptiveHeight: false,
2874                infinite: true,
2875                useTransform: true,
2876                speed: 400,
2877                cssEase: 'cubic-bezier(0.77, 0, 0.18, 1)',
2878            });
2879        }
2880
2881        PauseVideoPlayer();
2882
2883        //arrow onclick tracker
2884        var el = document.querySelectorAll(".slick-arrow");
2885        for (var i = 0; i < el.length; i++) {
2886            el[i].onclick = function () {
2887                PauseVideoPlayer();
2888            };
2889        }
2890
2891
2892        $(".slider-video").slick('slickGoTo', index);
2893
2894        $("#carouselImageryVideoModal").modal('show');
2895    }
2896
2897    function PauseVideoPlayer() {
2898
2899        var videos = document.querySelectorAll('video');
2900        var iframes = document.querySelectorAll('iframe');
2901
2902        //mp4
2903        Array.prototype.forEach.call(videos, video => {
2904            video.pause();
2905        });
2906
2907        //youtube
2908        Array.prototype.forEach.call(iframes, iframe => {
2909            iframe.contentWindow.postMessage(JSON.stringify({
2910                event: 'command',
2911                func: 'pauseVideo'
2912            }), '*');
2913        });
2914
2915        //wistia + vimeo
2916        Array.prototype.forEach.call(iframes, iframe => {
2917            iframe.contentWindow.postMessage(JSON.stringify({
2918                "method": "pause",
2919                "value": "true"
2920            }), '*');
2921        });
2922    }
2923
2924    function setFooterColor(hexColor)
2925    {
2926        //set footer text color based on background color
2927        var r = parseInt(hexColor.substr(1,2),16);
2928        var g = parseInt(hexColor.substr(3,2),16);
2929        var b = parseInt(hexColor.substr(5,2),16);
2930        var rgb = ((r*299)+(g*587)+(b*114))/1000;
2931
2932        var textColor = (rgb >= 128) ? 'black' : 'white';
2933        //text needs to be black
2934        if(textColor == 'black')
2935        {
2936            //set payment method icons
2937            if ($('.paymentType').hasClass('light')) {
2938                $('.paymentType').removeClass('light');
2939                $('.paymentType').remove('#paymentTypeLight');
2940            }
2941            if (!$('.paymentType').hasClass('dark')) {
2942                $('.paymentType').addClass('dark');
2943                $('.paymentType').remove('#paymentTypeLight');
2944                $('.paymentType').add('#paymentTypeDark');
2945            }
2946        }
2947        //text needs to be white
2948        else if(textColor == 'white')
2949        {
2950            //mobile menu hamburger
2951            if ($('.navbar-toggler').hasClass('dark')) {
2952                $('.navbar-toggler').css('background-color', 'transparent');
2953            }
2954            if (!$('.navbar-toggler').hasClass('light')) {
2955                $('.navbar-toggler').css('background-color', 'white');
2956            }
2957
2958            //set payment method icons
2959            if ($('.paymentType').hasClass('dark')) {
2960                $('.paymentType').removeClass('dark');
2961                $('.paymentType').remove('#paymentTypeDark');
2962            }
2963            if (!$('.paymentType').hasClass('light')) {
2964                $('.paymentType').addClass('light');
2965                $('.paymentType').remove('#paymentTypeDark');
2966                $('.paymentType').add('#paymentTypeLight');
2967            }
2968        }
2969    }
2970
2971    function checkHashRoute()
2972    {
2973        if ((location.hash != null) && (location.hash != "") && (location.hash == '#homePage' || location.hash == '#aboutPage' || location.hash == '#servicesPage' || location.hash == '#testimonialsPage' || location.hash == '#contactPage' || location.hash == '#locationsPage' || location.hash == '#faqPage' || location.hash == '#gsvPage' || location.hash == '#contentPage') ) {
2974            DisplayPage(location.hash);
2975        }
2976    }
2977
2978  function contactUsPost(event) {
2979    var _contactForm = $("#ContactPostForm");
2980
2981    // Clear previous validation states
2982    $('.validation-error-message').remove();
2983    _contactForm.find('.validation-error').removeClass('validation-error');
2984    $("#contactResponseMessage").empty();
2985
2986    if (_contactForm[0].checkValidity()) {
2987      contactUsSubmit(event);
2988    } else {
2989      var firstInvalidField = null;
2990
2991      _contactForm.find('input[required], textarea[required], select[required]').each(function () {
2992        var $field = $(this);
2993
2994        if (!this.checkValidity()) {
2995          var fieldId = $field.attr('id') || $field.attr('name');
2996          var fieldLabel = getFieldLabel(fieldId);
2997
2998          $field.addClass('validation-error');
2999
3000          var errorMessage = getCustomErrorMessage($field, fieldLabel);
3001          $field.after(`<div class="validation-error-message">${errorMessage}</div>`);
3002
3003          if (!firstInvalidField) {
3004            firstInvalidField = $field;
3005          }
3006        }
3007      });
3008
3009      // Focus first invalid field
3010      if (firstInvalidField) {
3011        firstInvalidField.focus();
3012      }
3013
3014      // Re-enable submit button
3015      $("#btnContactPost").prop('disabled', false);
3016      $("#btnContactPost").css('font-weight', 'bold');
3017    }
3018  }
3019
3020  function getFieldLabel(fieldId) {
3021    var labels = {
3022      'contact_us_phone': 'Phone Number',
3023      'contact_us_address': 'Address',
3024      'contact_us_city': 'City',
3025      'contact_us_state': 'State',
3026      'contact_us_zip': 'ZIP Code',
3027      'contact_us_subject': 'Subject',
3028      'contact_us_name': 'Name',
3029      'contact_us_email': 'Email',
3030      'contact_us_message': 'Message'
3031    };
3032    return labels[fieldId] || 'This field';
3033  }
3034
3035  function getCustomErrorMessage($field, fieldLabel) {
3036    if ($field.prop('required') && !$field.val().trim()) {
3037      return `${fieldLabel} required`;
3038    }
3039
3040    if ($field.attr('type') === 'email' && $field.val()) {
3041      return `Please enter a valid email address.`;
3042    }
3043
3044    return `Please enter a valid ${fieldLabel.toLowerCase()}.`;
3045  }
3046
3047    function contactUsSubmit(event) {
3048        event.preventDefault();
3049
3050        var form = $("#ContactPostForm");
3051        grecaptcha.ready(function() {
3052            grecaptcha.execute('6LcokacUAAAAAH_snk3O5bpdYwjpC5XAuXNLrJLH', {action: 'contact_us'}).then(function(token) {
3053                $("#g-Recaptcha-Response-Contact").attr("value", token); //add token for server side validation
3054                $.ajax({
3055                    type: "POST",
3056                    url: "/Home/ContactPost",
3057                    data: form.serialize(),
3058                    success: function(data){
3059                        if (data.indexOf('{"message":') != -1) {
3060                            var jsonData = JSON.parse(data);
3061                            if (!jsonData.success) {
3062                                $("#contactResponseMessage").html('<div class="alert alert-warning alert-dissmisable" role="alert"><button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button>' + jsonData.message + '</div>');
3063                                recaptchaContactUsInComplete();
3064                                showClassicCaptcha("contact");
3065                            }
3066                            else{
3067                                $("#contactResponseMessage").html('<div class="alert alert-success alert-dissmisable" role="alert"><button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button>' + jsonData.message + '</div>');
3068                                recaptchaContactUsComplete();
3069                            }
3070                        }
3071                    }
3072                });
3073            });
3074        });
3075    }
3076
3077    function bgSlider() {
3078        var index = 0;
3079        var opacity = 'False';
3080
3081        $imageEls = $('.parallax .parallax-image'); // Get the images to be cycled.
3082
3083        setInterval(function () {
3084            // Get the next index.  If at end, restart to the beginning.
3085            index = index + 1 < $imageEls.length ? index + 1 : 0;
3086
3087            // Show the next
3088            if (opacity == 'True') {
3089                $imageEls.eq(index).addClass('opacity');
3090            }
3091            else {
3092                $imageEls.eq(index).addClass('show');
3093            }
3094
3095            // Hide the previous
3096            if (opacity == 'True') {
3097                $imageEls.eq(index - 1).removeClass('opacity');
3098            }
3099            else {
3100                $imageEls.eq(index - 1).removeClass('show');
3101            }
3102        }, 5000);
3103    }
3104
3105    function initializeCarousel(){
3106        //https://codepen.io/dolce/pen/QarQde
3107        $('.slider-single').slick({
3108            slidesToShow: 1,
3109            slidesToScroll: 1,
3110            arrows: true,
3111            fade: false,
3112            adaptiveHeight: false,
3113            infinite: true,
3114            useTransform: true,
3115            speed: 400,
3116            cssEase: 'cubic-bezier(0.77, 0, 0.18, 1)',
3117            autoplay: true,
3118        });
3119
3120        $('.slider-nav')
3121        .on('init', function(event, slick) {
3122 	        $('.slider-nav .slick-slide.slick-current').addClass('is-active');
3123        })
3124        .slick({
3125 	        slidesToShow: 5,
3126 	        slidesToScroll: 5,
3127 	        dots: false,
3128 	        focusOnSelect: false,
3129 	        infinite: true,
3130        });
3131
3132        $('.slider-attributes')
3133        .on('init', function(event, slick) {
3134            $('.slider-attributes .slick-slide.slick-current').addClass('is-active');
3135        })
3136        .slick({
3137 	        slidesToShow: 3,
3138 	        slidesToScroll: 3,
3139 	        dots: false,
3140 	        focusOnSelect: false,
3141 	        infinite: true
3142        });
3143
3144        $('.slider-single').on('afterChange', function(event, slick, currentSlide) {
3145            $('.slider-nav').slick('slickGoTo', currentSlide);
3146            var currrentNavSlideElem = '.slider-nav .slick-slide[data-slick-index="' + currentSlide + '"]';
3147            $('.slider-nav .slick-slide.is-active').removeClass('is-active');
3148            $(currrentNavSlideElem).addClass('is-active');
3149
3150            if (currentSlide > 6) {
3151                var m = parseInt(currentSlide / 6);
3152                var d = 6 * m;
3153                var currentAttributeSlide = currentSlide - d;
3154            }
3155            else if (currentSlide >= 3 && currentSlide <= 6)
3156            {
3157                var m = parseInt(currentSlide / 3);
3158                var d = 3 * m;
3159                var currentAttributeSlide = currentSlide - d;
3160            }
3161            else {
3162                currentAttributeSlide = currentSlide;
3163            }
3164
3165            if (6 > 3) {
3166            $('.slider-attributes').slick('slickGoTo', currentAttributeSlide);
3167            var currrentNavAttributeSlideElem = '.slider-attributes .slick-slide[data-slick-index="' + currentAttributeSlide + '"]';
3168            $('.slider-attributes .slick-slide.is-active').removeClass('is-active');
3169            $(currrentNavAttributeSlideElem).addClass('is-active');
3170            }
3171        });
3172
3173        $('.slider-nav').on('click', '.slick-slide', function(event) {
3174            event.preventDefault();
3175            var goToSingleSlide = $(this).data('slick-index');
3176            $('.slider-single').slick('slickGoTo', goToSingleSlide);
3177        });
3178
3179        $('.slider-attributes').on('click', '.slick-slide', function(event) {
3180            event.preventDefault();
3181            var goToSingleSlide = $(this).data('slick-index');
3182            $('.slider-single').slick('slickGoTo', goToSingleSlide);
3183        });
3184    }
3185
3186    function ScrollForReviews(){
3187        // target element
3188        var $id = $(".review-partial-content");
3189        if ($id.length === 0) {
3190            return;
3191        }
3192
3193        // prevent standard hash navigation (avoid blinking in IE)
3194        //e.preventDefault();
3195
3196        // top position relative to the document
3197        var pos = $id.offset().top - $('.navbar').height();
3198
3199        // animated top scrolling
3200        // .stop() keeps from scrolling to top then to element
3201        $('body, html').stop().animate({ scrollTop: pos }, 500);
3202    }
3203
3204    function ScrollForPosts(e){
3205        // target element
3206        var $id = $(".posts-partial-content");
3207        if ($id.length === 0) {
3208            return;
3209        }
3210
3211        // prevent standard hash navigation (avoid blinking in IE)
3212        e.preventDefault();
3213
3214        // top position relative to the document
3215        var pos = $id.offset().top - $('.navbar').height();
3216
3217        // animated top scrolling
3218        // .stop() keeps from scrolling to top then to element
3219        $('body, html').stop().animate({ scrollTop: pos }, 500);
3220    }
3221
3222    function recaptchaContactUsInComplete(){
3223        $("#btnContactPost").prop('disabled', false);
3224        $("#btnContactPost").css('font-weight', 'bold');
3225    }
3226
3227  function recaptchaContactUsComplete() {
3228    $("#btnContactPost").prop('disabled', false);
3229    $("#btnContactPost").css('font-weight', 'normal');
3230    $("#ContactPostForm").trigger("reset");
3231  }
3232
3233    function recaptchaReviewIncomplete(){
3234        $("#postReview").prop('disabled', false);
3235        $("#postReview").css('font-weight', 'bold');
3236    }
3237
3238    function recaptchaReviewComplete(){
3239        $("#postReview").css('font-weight', 'normal');
3240        $("#postReviewForm").trigger("reset");
3241        $("#postReview").prop('disabled', false);
3242    }
3243
3244    function showClassicCaptcha(type) {
3245        if(type === "review"){
3246            $("#classicCaptchaReview").show();
3247        }
3248        else{
3249            $("#classicCaptcha").show();
3250        }
3251    }
3252
3253    function ClearReviewFields() {
3254        $('#starRating').barrating('clear');
3255        $("#review").val("");
3256        $("#review_alias").val("");
3257        $("#review_heading").val("");
3258        $("#reviewCaptcha").val("");
3259    }
3260
3261    function resetReviewButton($button) {
3262        var $buttonText = $button.find('.button-text');
3263        var $spinner = $button.find('.spinner');
3264
3265        $button.prop('disabled', false);
3266
3267        if ($buttonText.length && $spinner.length) {
3268            $buttonText.show();
3269            $spinner.hide();
3270        } else {
3271            var originalText = $button.data('original-text');
3272            if (originalText) {
3273                $button.html(originalText);
3274            }
3275        }
3276    }
3277
3278    function setProcessingState($button, $form, isProcessing) {
3279        var $buttonText = $button.find('.button-text');
3280        var $spinner = $button.find('.spinner');
3281
3282        if (isProcessing) {
3283            $button.prop('disabled', true);
3284            $form.addClass('review-form-processing');
3285            $form.find('input, textarea, select').not('#profile_id, #g-Recaptcha-Response-Review, [type="hidden"]').prop('disabled', true);
3286
3287            if ($buttonText.length && $spinner.length) {
3288                $buttonText.hide();
3289                $spinner.show();
3290            } else {
3291                $button.data('original-text', $button.html());
3292                $button.html('<i class="fas fa-spinner fa-spin"></i> Processing...');
3293            }
3294        } else {
3295            $button.prop('disabled', false);
3296            $form.removeClass('review-form-processing');
3297            $form.find('input, textarea, select').prop('disabled', false);
3298
3299            if ($buttonText.length && $spinner.length) {
3300                $buttonText.show();
3301                $spinner.hide();
3302            } else {
3303                var originalText = $button.data('original-text');
3304                if (originalText) {
3305                    $button.html(originalText);
3306                }
3307            }
3308        }
3309    }
3310
3311    function ClearReviewFields() {
3312        console.log('Clearing review fields');
3313        $('#starRating').barrating('clear');
3314        $("#review").val("");
3315        $("#review_alias").val("");
3316        $("#review_heading").val("");
3317        $("#reviewCaptcha").val("");
3318
3319        $("#postReviewForm input, #postReviewForm textarea").removeClass('error');
3320        $("#postReviewForm .br-widget").removeClass('error');
3321    }
3322
3323    function validateReview(btn) {
3324        var $form = $("#postReviewForm");
3325        var isValid = true;
3326
3327        console.log('Starting validation...');
3328
3329        $form.find('input, textarea').removeClass('error');
3330        $form.find('.br-widget').removeClass('error');
3331
3332        var reviewText = $('#review').val();
3333        console.log('Review text length:', reviewText ? reviewText.trim().length : 0);
3334
3335        if (!reviewText || reviewText.trim().length === 0) {
3336            console.log('Review text validation failed - empty or whitespace only');
3337            $('#review').addClass('error');
3338            $('#review').focus();
3339            isValid = false;
3340        } else {
3341            console.log('Review text validation passed');
3342        }
3343
3344        var rating = null;
3345        var selectRating = $('#starRating')[0] ? $('#starRating')[0].value : null;
3346        var jqueryRating = $('#starRating').val();
3347        var selectedOption = $('#starRating option:selected').val();
3348        var barRating = null;
3349
3350        if (typeof $('#starRating').barrating === 'function') {
3351            try {
3352                var barResult = $('#starRating').barrating('show');
3353                if (barResult && typeof barResult === 'string') {
3354                    barRating = barResult;
3355                } else if (barResult && typeof barResult === 'number') {
3356                    barRating = barResult.toString();
3357                }
3358            } catch (e) {
3359                console.log('Error getting barrating value:', e);
3360            }
3361        }
3362
3363        if (jqueryRating && typeof jqueryRating === 'string') {
3364        } else if (jqueryRating && typeof jqueryRating === 'number') {
3365            jqueryRating = jqueryRating.toString();
3366        } else {
3367            jqueryRating = null;
3368        }
3369
3370        if (barRating && barRating !== "" && barRating !== "0") {
3371            rating = barRating;
3372        } else if (selectRating && selectRating !== "" && selectRating !== "0") {
3373            rating = selectRating;
3374        } else if (selectedOption && selectedOption !== "" && selectedOption !== "0") {
3375            rating = selectedOption;
3376        } else if (jqueryRating && jqueryRating !== "" && jqueryRating !== "0") {
3377            rating = jqueryRating;
3378        }
3379
3380        if (rating && typeof rating !== 'string') {
3381            console.log('WARNING: Rating is not a string, converting:', rating, typeof rating);
3382            rating = String(rating);
3383        }
3384
3385        if (rating && typeof rating === 'object') {
3386            console.error('CRITICAL ERROR: Rating is still an object!', rating);
3387            rating = null;
3388        }
3389
3390        console.log('Validation - Final rating value:', rating, typeof rating);
3391
3392        if (!rating || rating === "" || rating === "0") {
3393            console.log('Rating validation failed');
3394            $('.br-widget').addClass('error');
3395            isValid = false;
3396        } else {
3397            console.log('Rating validation passed with value:', rating);
3398        }
3399
3400        console.log('Validation result:', isValid);
3401        return isValid;
3402    }
3403
3404    function validateReviewLength() {
3405        var text = $('#review').val();
3406        var success = true;
3407
3408        if (text.trim().length == 0) {
3409            $('#review').addClass('error');
3410            success = false;
3411        }
3412        return success;
3413    }
3414
3415    function validateRating() {
3416        var rating = null;
3417
3418        // Use the same rating detection logic
3419        var selectRating = $('#starRating')[0] ? $('#starRating')[0].value : null;
3420        var jqueryRating = $('#starRating').val();
3421        var selectedOption = $('#starRating option:selected').val();
3422        var barRating = null;
3423
3424        if (typeof $('#starRating').barrating === 'function') {
3425            try {
3426                barRating = $('#starRating').barrating('show');
3427            } catch (e) {
3428                console.log('Error getting barrating value in validateRating:', e);
3429            }
3430        }
3431
3432        // Determine which rating to use
3433        if (barRating && barRating !== "" && barRating !== "0") {
3434            rating = barRating;
3435        } else if (selectRating && selectRating !== "" && selectRating !== "0") {
3436            rating = selectRating;
3437        } else if (selectedOption && selectedOption !== "" && selectedOption !== "0") {
3438            rating = selectedOption;
3439        } else if (typeof jqueryRating === 'string' && jqueryRating !== "" && jqueryRating !== "0") {
3440            rating = jqueryRating;
3441        }
3442
3443        var success = true;
3444        if (!rating || rating === "" || rating === "0") {
3445            $('.br-widget').addClass('error');
3446            success = false;
3447        }
3448        return success;
3449    }
3450</script>
3450
3451</body>
3452</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.