1<!DOCTYPE HTML> 2<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="en-US"> 3<head> 4 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 5 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 6 <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2, user-scalable=1"> 7 8 <!-- Preconnect --> 9 <link rel="preconnect" href="https://www.optimizecdn.com" crossorigin> 10 <link rel="preconnect" href="https://fonts.googleapis.com"> 11 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> 12 <link rel="apple-touch-icon" href="/images/apple-icon-76x76.png"> 13 <link rel="icon" type="image/png" href="/images/apple-icon-76x76.png"> 14 15 <!-- Site Meta Data --> 16 <title>Home Improvement Pros Directory - Find Home Improvement Pros - My Three Bids</title> 17 <meta name="description" content="Search the most complete home improvement pros directory. Find home improvement pros. contractor San Francisco contractor near me hvac san jose"> 18 <meta name="keywords" content="Home-Improvement Match-Making Made Easy,Home Improvement Pros, My Three Bids"> 19 <meta name="robots" content="index, follow"> 20 21 <!-- Canonical URL --> 22 <link rel="canonical" href="https://www.mythreebids.com/"> 23 <link rel="alternate" type="application/rss+xml" title="My Three Bids RSS Feed" href="https://www.mythreebids.com/rss" /> 24 25 <!-- Social Media Meta Data --> 26 <meta property="og:type" content="website"> 27 <meta property="og:url" content="https://www.mythreebids.com"> 28 <meta property="og:site_name" content="My Three Bids"> 29 <meta property="og:title" content="Home Improvement Pros Directory - Find Home Improvement Pros - My Three Bids"> 30 <meta property="og:description" content="Search the most complete home improvement pros database. Find Home Improvement Pros."> 31 <meta property="og:image" content="https://www.mythreebids.com/images/buildingxx.jpg"> 32
32<script> 33 var siteInfoSpan=document.createElement('span'); 34 siteInfoSpan.style.cssText='position:absolute;color:transparent;width:100%;z-index:-1;height:50px;top:0;'; 35 siteInfoSpan.textContent='www.mythreebids.com - My Three Bids'; 36 document.documentElement.appendChild(siteInfoSpan); 37 </script>
37 38 39 <!-- Preload --> 40 <link rel="preload" as="style" href="https://www.optimizecdn.com/directory/cdn/assets/bootstrap/css/critical-styles.pkgd.min.css?v=09.05.26" fetchpriority="high" crossorigin> 41 <link rel="preload" as="style" href="https://fonts.googleapis.com/css?family=Montserrat:300,400,600,700,800,900|Open+Sans:300,400,600,700,800,900&display=swap" fetchpriority="high"> 42 43 <!-- Non-Critical Stylesheet - Render Before Critical Styles --> 44 <link rel="stylesheet" media="print" onload="this.onload=null;this.removeAttribute('media');" href="https://www.optimizecdn.com/directory/cdn/assets/bootstrap/css/non-critical-styles.pkgd.min.css?v=3.3.0" crossorigin> 45 <noscript> 46 <link rel="stylesheet" href="https://www.optimizecdn.com/directory/cdn/assets/bootstrap/css/non-critical-styles.pkgd.min.css" crossorigin> 47 </noscript> 48 49 <!-- Critical Stylesheet --> 50 <link rel="stylesheet" href="https://www.optimizecdn.com/directory/cdn/assets/bootstrap/css/critical-styles.pkgd.min.css?v=09.05.26" crossorigin> 51 52 <!-- Google Fonts Stylesheet --> 53 <link rel="stylesheet" media="print" onload="this.onload=null;this.removeAttribute('media');" href="https://fonts.googleapis.com/css?family=Montserrat:300,400,600,700,800,900|Open+Sans:300,400,600,700,800,900&display=swap"> 54 <noscript> 55 <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Montserrat:300,400,600,700,800,900|Open+Sans:300,400,600,700,800,900&display=swap"> 56 </noscript> 57 58 <!-- FontAwesome Stylesheet --> 59 <link rel="stylesheet" media="print" onload="this.onload=null;this.removeAttribute('media');" href="https://www.optimizecdn.com/directory/cdn/assets/bootstrap/font-awesome/css/font-awesome.min.css" crossorigin> 60 <noscript> 61 <link rel="stylesheet" href="https://www.optimizecdn.com/directory/cdn/assets/bootstrap/font-awesome/css/font-awesome.min.css" crossorigin> 62 </noscript> 63 64 <!-- Bootstrap Icons Stylesheet --> 65 <link rel="stylesheet" media="print" onload="this.onload=null;this.removeAttribute('media');" href="https://www.optimizecdn.com/directory/cdn/assets/bootstrap/fonts/bootstrap-icons.min.css?v=1.13.1" crossorigin> 66 <noscript> 67 <link rel="stylesheet" href="https://www.optimizecdn.com/directory/cdn/assets/bootstrap/fonts/bootstrap-icons.min.css?v=1.13.1" crossorigin> 68 </noscript> 69 70 <!-- Critical JavaScript --> 71
71<script src="https://www.optimizecdn.com/directory/cdn/assets/bootstrap/js/jquery.min.js"></script>
71 72
72<script src="https://www.optimizecdn.com/directory/cdn/assets/bootstrap/js/bootstrap-3.3.5.min.js"></script>
72 73
73<script> 74 /* jQuery.event.special.touchstart = { 75 setup: function( _, ns, handle ) { 76 this.addEventListener("touchstart", handle, { passive: !ns.includes("noPreventDefault") }); 77 } 78 }; */ 79 jQuery.event.special.touchmove = { 80 setup: function( _, ns, handle ) { 81 this.addEventListener("touchmove", handle, { passive: !ns.includes("noPreventDefault") }); 82 } 83 }; 84 jQuery.event.special.wheel = { 85 setup: function( _, ns, handle ){ 86 this.addEventListener("wheel", handle, { passive: true }); 87 } 88 }; 89 jQuery.event.special.mousewheel = { 90 setup: function( _, ns, handle ){ 91 this.addEventListener("mousewheel", handle, { passive: true }); 92 } 93 }; 94 </script>
94 95 96 97 98 <!-- Prefetch --> 99 <link rel="prefetch" href="https://www.optimizecdn.com/directory/cdn/assets/bootstrap/jquery.lazy/1.7.9/jquery.lazy.min.js" as="script"> 100 <link rel="prefetch" href="https://www.optimizecdn.com/directory/cdn/assets/bootstrap/js/websiteScripts.min.js?v=8.0.0" as="script"> 101 102 <!-- Custom Site-wide HEAD Content --><!-- Facebook Pixel Code -->
103<script>
vendor: 426 bytes, lines 103-112
103 104 !function(f,b,e,v,n,t,s) 105 {if(f.fbq)return;n=f.fbq=function(){n.callMethod? 106 n.callMethod.apply(n,arguments):n.queue.push(arguments)}; 107 if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0'; 108 n.queue=[];t=b.createElement(e);t.async=!0; 109 t.src=v;s=b.getElementsByTagName(e)[0]; 110 s.parentNode.insertBefore(t,s)}(window, document,'script', 111 'https://connect.facebook.net/en_US/fbevents.js'); 112 fbq('init', '
112265861294151305
vendor: 34 bytes, lines 112-113
112'); 113 fbq('track', 'PageView');
114</script>
114 115<noscript><img height="1" width="1" style="display:none" 116 src="https://www.facebook.com/tr?id=265861294151305&ev=PageView&noscript=1" 117/></noscript> 118<!-- End Facebook Pixel Code --> 119 120<!-- Global site tag (gtag.js) - Google Analytics -->
vendor: 65 bytes, lines 120-121
120 121<script async src="https://www.googletagmanager.com/gtag/js?id=
121UA-116190422-1
vendor: 13 bytes, line 121
121"></script>
122<script> 123
vendor: 138 bytes, lines 123-127
123window.dataLayer = window.dataLayer || []; 124 function gtag(){dataLayer.push(arguments);} 125 gtag('js', new Date()); 126 127 gtag('config', '
127UA-116190422-1
vendor: 5 bytes, line 127
127');
128</script>
128 129 130<!-- Google Tag Manager -->
131<script>
vendor: 331 bytes, lines 131-135
131(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 132new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 133j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 134'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 135})(window,document,'script','dataLayer','
135GTM-K9772GL
vendor: 3 bytes, line 135
135');
135</script>
135 136<!-- End Google Tag Manager --> 137 138<!-- Google Tag Manager (noscript) -->
vendor: 69 bytes, lines 138-139
138 139<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
139GTM-K9772GL
vendor: 85 bytes, lines 139-140
139" 140height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
141<!-- End Google Tag Manager (noscript) --> 142 143<!-- LinkedIn Insights Tag -->
144<script type="text/javascript"> 145_linkedin_partner_id = "1172236"; 146window._linkedin_data_partner_ids = window._linkedin_data_partner_ids || []; 147window._linkedin_data_partner_ids.push(_linkedin_partner_id); 148</script>
148<script type="text/javascript"> 149(function(){var s = document.getElementsByTagName("script")[0]; 150var b = document.createElement("script"); 151b.type = "text/javascript";b.async = true; 152b.src = "https://snap.licdn.com/li.lms-analytics/insight.min.js"; 153s.parentNode.insertBefore(b, s);})(); 154</script>
154 155<noscript> 156<img height="1" width="1" style="display:none;" alt="" src="https://dc.ads.linkedin.com/collect/?pid=1172236&fmt=gif" /> 157</noscript> 158<!-- End LinkedIn Insights Tag -->
159<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
vendor: 2 bytes, line 159
159
160<script> 161 (adsbygoogle = window.adsbygoogle || []).push({ 162 google_ad_client: "ca-pub-8697680130481023", 163 enable_page_level_ads: true 164 }); 165</script>
165
165<script> 166 function g() { 167 window.addEventListener('load', () => { 168 if (typeof initializeG === 'function') { 169 initializeG(); 170 } else if (typeof initializeGoogleMaps === 'function') { 171 initializeGoogleMaps(); 172 } 173 }); 174 } 175 </script>
175 176
176<script src="https://maps.googleapis.com/maps/api/js?v=quarterly&libraries=places®ion=US&callback=g&language=en&key=AIzaSyCCwTRssV2ULLZZVmwRimtzkaNB0BFfJS0"></script>
176 177 178</head> 179 180<body class="general-session"><!-- 181IMPORTANT: It is not recommended to customize this widget as it directly connects to fields in DESIGN SETTINGS. If new design settings are created and this widget is already customized, then the website will not be able to apply any new design setitngs. 182 183INSTEAD: If custom CSS rules are needed, add them directly into the DESIGN SETTINGS > CUSTOM CSS section. 184--> 185<style> 186 .upload-form-field::before { 187 content: "choose files"; 188 display: inline-block; 189 border: 1px solid #999; 190 border-radius: 3px; 191 padding: 5px 8px; 192 } 193 #first_container span.input-group-addon,#first_container .datepicker *,#first_container .input-group-addon, #first_container .input-group-addon *,#first_container .fr-action-buttons .fr-submit,.fr-popup .fr-layer.fr-color-hex-layer .fr-action-buttons button.fr-command { 194 white-space: nowrap !important; 195 } 196 /* Main Website Design */ 197 body,.modal-header,.modal-content,.modal-body,.modal-footer { 198 background: rgb(255, 255, 255); 199 color: rgb(9, 75, 11); 200 font-family: 'Montserrat'; 201 font-size: 14px; 202 } 203 .select2-container .select2-choice { 204 font-family: 'Montserrat'!important; 205 } 206 html{ 207 background: rgb(41, 160, 54) } 208 .bootstrap-datetimepicker-widget *:not(.active,[data-action="togglePeriod"]) a, .bootstrap-datetimepicker-widget *:not(.active,[data-action="togglePeriod"]) td,.datepicker th.picker-switch,.datepicker .dow { 209 color: #000 !important; 210 } 211 a,a.h1,a.h2,a.h3,a.h4,a.h5,a.h6,.pricing_menu li ul li a:not(.btn) { 212 color: rgb(35, 122, 61); 213 } 214 a:hover, a:focus,.pricing_menu li ul li a:not(.btn):hover,.pricing_menu li ul li a:not(.btn):focus,.btn:hover,.btn:focus { 215 color: rgb(38, 180, 68); 216 } 217 .breadcrumb a{ 218 color: rgba(41, 160, 54,0.9); 219 } 220 .breadcrumb a:hover, .breadcrumb a:focus,.breadcrumb > .active { 221 color: rgb(41, 160, 54); 222 } 223 .help-inline, .help-block { 224 color: rgba(9, 75, 11,0.5); 225 } 226 .h1, .h2, .h3, .h4, .h5, .h6, h1, h2, h3, h4, h5, h6 { 227 font-family: 'Montserrat'; 228 } 229 /* Header Design */ 230 .header, .mobile_website_logo img { 231 background: rgb(255, 255, 255); 232 } 233 .header .mini-nav li a:not(.btn):not(.network-icon), .header .mini-nav span { 234 color: rgb(35, 129, 54); 235 } 236 .header .mini-nav li a:not(.btn):hover { 237 color: rgba(35, 129, 54,0.95); 238 } 239 .header .btn_get_listed { 240 background-color: rgb(58, 180, 62); 241 border: 1px solid rgb(58, 180, 62); 242 color: rgb(255, 255, 255)!important; 243 } 244 .header .btn_get_listed:hover, .header .btn_get_listed:focus { 245 background-color: rgba(58, 180, 62,0.97); 246 } 247 .header .btn_search { 248 background-color: rgba(61, 187, 39,0.97); 249 border: 1px solid rgb(61, 187, 39); 250 color: rgb(255, 255, 255); 251 } 252 .header .btn_search:hover, .header .btn_search:focus { 253 background-color: rgb(61, 187, 39); 254 color: rgb(255, 255, 255); 255 } 256 257 /* Logo Design */ 258 .logo,.logo:hover,.logo:focus { 259 color: rgb(255, 255, 255); 260 font-family: 'Montserrat'; 261 } 262 .logo .slogan { 263 color: rgb(141, 141, 141); 264 } 265 .logo .fa { 266 color: rgb(255, 255, 255); 267 } 268 269 /* Main Menu Design */ 270 .member-profile-tabs > ul, .member-profile-tabs .tabs-container { 271 background: rgb(238, 238, 238); 272 position: sticky; 273 z-index: 1; 274 top: 50px; 275 } 276 /* Google Translate When Main Menu Sticky Top */ 277 .skiptranslate:not([style*="display: none;"]) ~ .header .navbar-fixed-top { 278 top: 39px; 279 } 280 .skiptranslate iframe, .skiptranslate:not(.skiptranslate.goog-te-gadget) { 281 position: fixed !important; 282 top: 0 !important; 283 z-index: 999; 284 } 285 @media only screen and (max-width: 1100px) { 286 .member-profile-tabs > ul, .member-profile-tabs .tabs-container { 287 top: 50px; 288 } 289 } 290 .header ul.nav.navbar-nav li ul { 291 background-color: #fafafa; 292 } 293 .header ul.nav.navbar-nav li ul li a, .header ul.nav.navbar-nav li ul li span { 294 color: rgb(41, 41, 41); 295 font-weight: 400; 296 } 297 .header .navbar-default, .pagination > .active > a { 298 background-color: rgb(231, 244, 230); 299 } 300 .header ul.nav.navbar-nav li ul li a:hover, .header ul.nav.navbar-nav li ul li a:focus{ 301 border-left-color: rgb(41, 41, 41); 302 background: rgb(41, 41, 41); 303 color: #fafafa; 304 }
305 .navbar-default .navbar-toggle .icon-bar { 306 background-color: rgb(64, 64, 64); 307 } 308 .user_sidebar, .main_menu, .compact-mobile-search { 309 color: rgb(64, 64, 64); 310 } 311 .navbar-default .navbar-nav > li > a, .navbar-default .navbar-nav > li > span { 312 color: rgb(64, 64, 64); 313 font-weight: 400; 314 } 315 .navbar-default .navbar-nav > li:hover > a,.navbar-default .navbar-nav > li > a:hover,.navbar-default .navbar-nav > li > a:active, .navbar-default .navbar-nav > li > a:focus { 316 color: rgb(41, 160, 54); 317 } 318 .navbar-default .navbar-nav > li { 319 font-family: 'Montserrat'; 320 } 321 322 323 324 /* Footer Design */ 325 .footer { 326 background-color: rgb(41, 160, 54); 327 display: block; 328 } 329 .footer, .footer_menu a,.footer_terms a,.footer_menu .content { 330 color: rgb(255, 255, 255); 331 } 332 .footer_menu a:hover, .footer_terms a:hover, .footer_menu a:focus, .footer_terms a:focus { 333 color: rgb(255, 255, 255); 334 } 335 .footer_menu .head { 336 color: rgb(255, 255, 255); 337 } 338 .btn_footer_get_listed { 339 background-color: rgb(0, 131, 33); 340 border: 1px solid rgb(0, 131, 33); 341 color: rgb(255, 255, 255)!important; 342 } 343 .btn_footer_get_listed:hover, .btn_footer_get_listed:focus{ 344 background-color: rgba(0, 131, 33,0.95); 345 } 346 347 /* Homepage Design */ 348 .homepage_settings h1, .homepage_settings h2, .homepage_map h1, .homepage_map h2 { 349 font-family: 'Montserrat'; 350 } 351 .homepage_settings h1, .homepage_map h1 { 352 color: rgb(255, 255, 255); 353 font-weight: 600; 354 text-align: left; 355 } 356 .homepage_settings h2, .homepage_map h2 { 357 color: rgb(255, 255, 255); 358 font-weight: 400; 359 text-align: left; 360 361 } 362 .homepage_settings .search_box label { 363 color: rgb(255, 255, 255); 364 } 365 .btn_home_search, .search_box input[type=submit] { 366 background-color: rgb(18, 111, 29); 367 border: 1px solid rgb(18, 111, 29); 368 color: rgb(255, 255, 255); 369 } 370 .btn_home_search:hover, .btn_home_search:focus, .search_box input[type=submit]:hover, .search_box input[type=submit]:focus { 371 background-color: rgba(18, 111, 29,0.97); 372 color: rgb(255, 255, 255); 373 } 374 .homepage_settings .search_box { 375 376 background-color: rgba( 65, 204, 80, 0.6); 377 } 378 379 /* Homepage Steps Module */ 380 .homepage_steps { 381 background: rgb(32, 180, 49); 382 color: rgb(255, 255, 255); 383 padding-top: 15px; 384 padding-bottom: 15px; 385 } 386 .homepage_steps a.homepage_step_link,.homepage_steps a.homepage_step_link:hover,.homepage_steps a.homepage_step_link:active{ 387 color: rgb(255, 255, 255)!important; 388 } 389 .homepage_steps .fa { 390 color: rgb(255, 255, 255); 391 background-color: rgba(255, 255, 255,0.075); 392 } 393 .homepage_steps h2 + p { 394 opacity: .6; 395 } 396 397 /* Blog Posts Slider Settings */ 398 #myCarousel h2 a, .carousel-caption p,#myCarousel .list-group-item h2, #myCarousel li.list-group-item h4 { 399 color: rgb(64, 64, 64); 400 } 401 #myCarousel .list-group-item { 402 background-color: rgba(231, 244, 230,0.9); 403 border-color: rgba(231, 244, 230,0.80); 404 } 405 #myCarousel .carousel-caption { 406 background-color: rgba(231, 244, 230,0.8); 407 } 408 #myCarousel .list-group, #myCarousel .carousel-inner { 409 background-color: rgb(231, 244, 230) } 410 #myCarousel .list-group .active, #myCarousel .list-group-item:hover { 411 background-color: rgb(231, 244, 230) } 412 #myCarousel .list-group .active h2, #myCarousel .list-group-item:hover h2{ 413 color: rgb(41, 160, 54); 414 } 415 416 /* Additional Settings */ 417 .well blockquote { 418 background: rgb(255, 255, 255) none repeat scroll 0 0; 419 border-color: rgb(238, 238, 238); 420 color: rgb(9, 75, 11); 421 padding: 10px 20px; 422 } 423 .account-form-box form table tr td table { 424 background-color: transparent!important; 425 border: none!important; 426 } 427 428 .account-form-box form table tr td table td { 429 background-color: transparent!important; 430 color: rgb(9, 75, 11)!important; 431 border: none!important; 432 } 433 div.dataTables_length label, div.dataTables_filter label, .dataTables_wrapper .dataTables_paginate .paginate_button.disabled, .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover, .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active{ 434 color: rgb(9, 75, 11)!important; 435 } 436 .table.dataTable > thead > tr > th, .table > thead > tr > th, .fr-view table th, .fr-view table tfoot td { 437 border-color: rgba(85, 85, 85,0.1); 438 background-color: rgb(255, 255, 255); 439 color: rgb(85, 85, 85);
440 font-weight:600; 441 border-left: none; 442 border-bottom-width: 1px; 443 } 444 .table > tbody > tr > td, .table > tbody > tr > th, .table > tfoot > tr > td, .table > tfoot > tr > th, .table > thead > tr > td, table.dataTable.no-footer { 445 border-color: rgba(85, 85, 85,0.1); 446 } 447 .table > tfoot > tr > td:not(:last-child) { 448 border-right: 1px solid rgba(85, 85, 85,0.1); 449 } 450 table.dataTable.no-footer, table.dataTable { 451 border: 1px solid rgb(238, 238, 238)!important; 452 } 453 .table-view li:not(.table-display-about_me li, .froala-data li), .table-view .table-view-group > div { 454 border-top:1px solid rgb(238, 238, 238); 455 } 456 .table-view .table-view-group:last-child { 457 border-bottom:1px solid rgb(238, 238, 238); 458 } 459 table.dataTable tbody tr, .table-striped.dataTable, .table-striped, .fr-view .table-striped { 460 background-color: rgb(250, 250, 250)!important; 461 } 462 .table-striped.dataTable, .table-striped, .fr-view .table-striped { 463 border: 1px solid rgba(85, 85, 85,0.15); 464 border-collapse: separate; 465 overflow: hidden; 466 } 467 table#feature-body-datatable:has(.dropdown.open),table#digital-products-transactions:has(.dropdown.open), table#example:has(.dropdown.open) { 468 overflow: visible; 469 } 470 .table-striped.dataTable tbody > tr:nth-of-type(2n+1),.table-striped > tbody > tr:nth-of-type(2n+1) { 471 background-color: rgba(255, 255, 255,0.5)!important; 472 } 473 .nav-tabs, hr, .account-menu-title, .modal-header { 474 border-color: rgb(238, 238, 238); 475 } 476 .sidemenu_panel .list-group-item{ 477 background-color: transparent!important; 478 color: rgb(41, 41, 41)!important; 479 } 480 .img-thumbnail { 481 background-color: rgb(250, 250, 250)!important; 482 border: 1px solid rgb(238, 238, 238); 483 } 484 .member_admin_sidemenu p, .member_admin_sidemenu h3 { 485 color: rgb(41, 41, 41)!important; 486 } 487 .close { 488 color: rgb(9, 75, 11); 489 opacity: 1; 490 } 491 .member_results_header h1, .content_w_sidebar.feature-search h1, .feature_results_header h1 { 492 font-size:36px; 493 display: block; 494 } 495 .member_results_header h2, .feature_results_header h2 { 496 font-size:30px; 497 display: block; 498 } 499 .homepage_settings { 500 padding-top: 60px; 501 padding-bottom: 60px; 502 } 503 @media (max-width: 768px) { .mobile_website_logo .visible-xs {display: block !important;}} 504 @media only screen and (max-width: 768px) { 505 .member-profile-header .favorite {float:none} 506 } 507 508 509 @media only screen and (max-width: 1100px) { 510 } 511 .views > i.fa.activeView, .views > i.fa:hover { 512 background-color: rgb(9, 75, 11); 513 color: rgb(255, 255, 255); 514 } 515 .views > i.fa { 516 background-color: rgba(9, 75, 11,0.1); 517 color: rgb(9, 75, 11); 518 } 519 .ui-rangeSlider-label { 520 background-color: rgb(231, 244, 230)!important; 521 color: rgb(64, 64, 64)!important; 522 } 523 .pricing_menu li .title { 524 background: rgb(41, 160, 54); 525 color: rgb(255, 255, 255); 526 } 527 p.account-tip{ 528 color: rgb(9, 75, 11); 529 } 530 .circled_number { 531 background: rgb(41, 160, 54); 532 color: rgb(255, 255, 255); 533 } 534 .pic { 535 background-color: rgba(41, 160, 54,0.8); 536 color: rgb(255, 255, 255); 537 background-repeat: no-repeat; 538 background-position: center; 539 } 540 .pic .pic-caption { 541 background: linear-gradient(0deg, rgba(0, 0, 0, 0) 0%,rgba(41, 160, 54,0.85) 50%); 542 color: rgb(255, 255, 255); 543 } 544 .slick-prev-fa i, .slick-next-fa i{ 545 color: rgb(41, 160, 54); 546 } 547 .module, .well, .tab-content, .nav-tabs>li.active>a, .nav-tabs>li.active>a:focus, .nav-tabs>li.active>a:hover, .nav-tabs>li>a:focus, .nav-tabs>li>a:hover, .nav-tabs.nav-justified>li.active>a, .nav-tabs.nav-justified>li.active>a:focus, .nav-tabs.nav-justified>li.active>a:hover, .nav-tab.nav-justified>li>a:focus, .nav-tabs.nav-justified>li>a:hover, .account-form-box,.account-form-box .module .module,.account-form-box .module .well,.account-form-box .well .well,.account-form-box .well .module,.module .module .module,.module .well .well,.module .module .well,.module .well .module,.well .well .well,.well .module .module,.well .well .module,.well .module .well, .froala-table.module, .froala-table td.module { 548 background-color: rgb(250, 250, 250); 549 border-color: rgb(238, 238, 238); 550 color: rgb(41, 41, 41); 551 } 552 .nav-pills > li.active a, .nav-pills > li > a:hover { 553 background-color: rgb(17, 128, 34)!important; 554 border-color: rgb(17, 128, 34)!important; 555 color: rgb(255, 255, 255)!important; 556 } 557 .sidemenu_panel .panel-heading { 558 color: rgb(41, 41, 41)!important; 559 background-color: rgb(250, 250, 250)!important; 560 } 561 .member-profile-tabs .nav-tabs > li:not(.active) > a, .login-register-tabs.nav-tabs > li:not(.active) > a, .nav-tabs > li:not(.active) > a { 562 background: rgba(250, 250, 250,0.5); 563 color: #477848; 564 } 565 .member-profile-tabs .nav-tabs > li:not(.active) > a:hover, .login-register-tabs.nav-tabs > li:not(.active) > a:hover, .nav-tabs > li:not(.active) > a:hover { 566 background: rgba(250, 250, 250,1); 567 color: rgb(9, 75, 11); 568 }
569 .author-snapshot .well:not(.well.bg-default) { 570 background-color: rgb(250, 250, 250)!important; 571 border-color: rgb(238, 238, 238)!important; 572 color: rgb(41, 41, 41)!important; 573 } 574 .nav-tabs>li>a, .nav-pills>li>a { 575 font-weight: 600; 576 } 577 .module .help-inline,.module .help-block,.well .help-inline,.well .help-block,.account-form-box .help-inline,.account-form-box .help-block,.account-form-box p.account-tip{ 578 color: rgba(41, 41, 41,0.5); 579 } 580 #service_areas_table td,#service_areas_table_wrapper label, #service_areas_table_info, #service_areas_table_paginate > a { 581 color: rgb(41, 41, 41) !important; 582 } 583 .popover { 584 background-color: rgb(250, 250, 250); 585 border-color: rgb(250, 250, 250); 586 padding:0; 587 text-align:left; 588 } 589 .popover-title, .popover-content { 590 background-color: rgb(250, 250, 250); 591 color: rgb(41, 41, 41); 592 border-color: rgb(250, 250, 250); 593 text-align:left; 594 } 595 .popover-content { 596 background-color: rgba(41, 41, 41,.05); 597 border-radius: 4px; 598 transform: translate(-1px, -1px); 599 width: calc(100% + 2px); 600 margin-bottom: -2px; 601 } 602 .popover.left > .arrow::after { 603 border-left-color: rgb(250, 250, 250)!important; 604 } 605 .popover.right > .arrow::after { 606 border-right-color: rgb(250, 250, 250)!important; 607 } 608 .popover.bottom > .arrow::after { 609 border-bottom-color: rgb(250, 250, 250)!important; 610 } 611 .popover.top > .arrow::after { 612 border-top-color: rgb(250, 250, 250)!important; 613 } 614 .progress, .table-view .table-view-group:nth-child(2n-1),.tab-content .well, .tab-content .module,#account-tabs .well,#account-tabs .module,.account-form-box .module,.account-form-box .well,.module .module,.well .well,.module .well,.well .module{ 615 background-color: rgb(255, 255, 255); 616 color: rgb(9, 75, 11); 617 } 618 .module h1, .module h2, .module h3, .module h4, .module h5 { 619 color: rgb(62, 62, 62); 620 } 621 .module p:not(.fr-box.fr-basic .fr-element p) { 622 color: rgb(41, 41, 41); 623 } 624 .pagination>.active>a { 625 border-color: rgba(64, 64, 64,0.2); 626 } 627 .pagination>.active>a { 628 color: rgb(64, 64, 64); 629 } 630 .pagination > .active > a:hover, .pagination > .active > a:focus { 631 border-color: rgba(64, 64, 64,0.2); 632 background-color: rgb(231, 244, 230); 633 color: rgb(64, 64, 64); 634 } 635 .pagination > li > a { 636 color: rgb(231, 244, 230); 637 border-color: rgba(231, 244, 230,0.2); 638 background-color: rgb(64, 64, 64); 639 } 640 .pagination > li > a:focus, .pagination > li > a:hover, .pagination > li > span:focus, .pagination > li > span:hover { 641 background-color: rgb(231, 244, 230); 642 border-color: rgb(231, 244, 230); 643 color: rgb(64, 64, 64); 644 } 645 646 .nav-pills.nav-wizard > li a, .nav-pills.nav-wizard > li a:hover{ 647 background-color: rgb(250, 250, 250)!important; 648 color: rgb(41, 41, 41)!important; 649 } 650 .member_wizard2 li.incomplete a, .member_wizard2 li.incomplete a:hover { 651 background-color: rgb(19, 131, 19)!important; 652 border-color: rgb(19, 131, 19); 653 color: rgb(255, 255, 255); 654 } 655 .nav-pills.nav-wizard > li.active a, .nav-pills.member_wizard > li.active:hover a { 656 background-color: rgb(64, 225, 62)!important; 657 color: rgb(255, 255, 255)!important; 658 } 659 .member_wizard2 li.completed a, .member_wizard2 li.completed a:hover { 660 background-color: rgb(19, 173, 15)!important; 661 border-color: rgb(19, 173, 15); 662 color: rgb(255, 255, 255); 663 } 664 665 .nav-pills.nav-wizard > li.active .nav-arrow, .nav-pills.nav-wizard > li.active:hover .nav-arrow { 666 border-color: transparent transparent transparent rgb(64, 225, 62)!important; 667 } 668 .nav-pills.nav-wizard > li.active .nav-wedge, .nav-pills.nav-wizard > li.active:hover .nav-wedge{ 669 border-color: rgb(64, 225, 62) rgb(64, 225, 62) rgb(64, 225, 62) transparent!important; 670 } 671 672 li.completed .nav-wedge, .nav-pills.nav-wizard > li.completed:hover .nav-wedge { 673 border-color: rgb(92, 184, 92) rgb(92, 184, 92) rgb(92, 184, 92) transparent!important; 674 } 675 676 li.incomplete .nav-wedge, .nav-pills.nav-wizard > li.incomplete:hover .nav-wedge { 677 border-color: rgb(250, 250, 250) rgb(250, 250, 250) rgb(250, 250, 250) transparent!important; 678 } 679 680 .nav-pills.member_wizard > li.completed a, .nav-pills.member_wizard > li.completed a:hover { 681 background-color: rgb(92, 184, 92)!important; 682 color: rgb(255, 255, 255)!important; 683 } 684 685 .member_wizard2 li { 686 color: rgb(255, 255, 255); 687 border-right: 10px solid rgb(255, 255, 255); 688 } 689 690 li.completed .nav-arrow, .nav-pills.nav-wizard > li.completed:hover .nav-arrow { 691 border-color: transparent transparent transparent rgb(92, 184, 92)!important; 692 } 693 694 li.incomplete .nav-arrow, .nav-pills.nav-wizard > li.incomplete:hover .nav-arrow{ 695 border-color: transparent transparent transparent rgb(250, 250, 250)!important; 696 } 697 698 /* Default Colors */ 699 .btn-primary, .btn-primary.disabled, .btn-primary.disabled.active, .btn-primary.disabled.focus, .btn-primary.disabled:active, .btn-primary.disabled:focus, .btn-primary.disabled:hover, .btn-primary[disabled], .btn-primary[disabled].active, .btn-primary[disabled].focus, .btn-primary[disabled]:active, .btn-primary[disabled]:focus, .btn-primary[disabled]:hover, fieldset[disabled] .btn-primary, fieldset[disabled] .btn-primary.active, fieldset[disabled] .btn-primary.focus, fieldset[disabled] .btn-primary:active, fieldset[disabled] .btn-primary:focus, fieldset[disabled] .btn-primary:hover, .btn.dropdown-toggle.btn-primary,.navbar-default .navbar-nav > li > a.btn-primary, .navbar-default .navbar-nav > li > span.btn-primary,.mobile-main-menu .sidebar-nav li a.btn-primary, .mobile-main-menu .sidebar-nav li span.btn-primary { 700 background-color: rgb(17, 128, 34); 701 border-color: rgb(17, 128, 34); 702 color: rgb(255, 255, 255); 703 } 704 .btn-primary:hover, .btn-primary:focus, .btn-primary:active,.btn-primary:active:focus, .btn-primary:active:hover, .nav > li > a.btn-primary:focus, .nav > li > a.btn-primary:hover,.btn-primary.active,.open > .dropdown-toggle.btn-primary, .btn-primary.active.focus, .btn-primary.active:focus, .btn-primary.active:hover, .btn-primary:active.focus, .open>.dropdown-toggle.btn-primary:hover, .open>.dropdown-toggle.btn-primary:focus, .open>.dropdown-toggle.btn-primary.focus,a.bg-primary:focus,a.bg-primary:hover, .panel-primary .panel-heading, .btn.dropdown-toggle.btn-primary:hover,.upload-form-field,.upload-form-field:hover,.upload-form-field:active:focus,.upload-form-field:before, .label-primary[href]:focus, .label-primary[href]:hover { 705 background-color: rgba(17, 128, 34,0.95); 706 border-color: rgb(17, 128, 34); 707 color: rgb(255, 255, 255); 708 } 709 .panel-primary { 710 background-color: #dbecde; 711 border-color: rgb(17, 128, 34); 712 } 713 .bg-primary,.progress-bar-primary,.module p.bg-primary,.label-primary,.badge-primary,.pricing_menu .title.bg-primary, .
713well .well.bg-primary, .module .well.bg-primary, .well .module.bg-primary,.tab-content .module.bg-primary,.tab-content .well.bg-primary { 714 background-color: rgb(17, 128, 34); 715 color: rgb(255, 255, 255); 716 } 717 .bg-primary .badge { 718 background-color:rgb(255, 255, 255); 719 color: rgb(17, 128, 34); 720 } 721 .btn-primary.btn-outline { 722 background: transparent; 723 color: rgb(17, 128, 34); 724 transition: all 250ms ease-in-out 0ms; 725 } 726 .btn-primary.btn-outline:hover { 727 background: rgba(17, 128, 34,0.1); 728 color: rgb(17, 128, 34); 729 } 730 .alert-primary { 731 background-color:rgba(17, 128, 34,0.7); 732 border-color:rgba(17, 128, 34,0.2); 733 color: rgba(255, 255, 255,0.9); 734 } 735 .alert-primary-subtle, .label-primary-subtle, .badge-primary-subtle { 736 background-color: #cfe6d3; 737 border-color: #cfe6d3; 738 color: rgb(17, 128, 34); 739 color: color-mix(in srgb, rgb(17, 128, 34) 50%, rgb(9, 75, 11) 50%); 740 } 741 .btn.dropdown-toggle.btn-primary *, .btn-primary a { 742 color: rgb(255, 255, 255); 743 } 744 .text-primary{ 745 color: rgb(17, 128, 34); 746 } 747 .btn-info, .btn-info.disabled, .btn-info.disabled.active, .btn-info.disabled.focus, .btn-info.disabled:active, .btn-info.disabled:focus, .btn-info.disabled:hover, .btn-info[disabled], .btn-info[disabled].active, .btn-info[disabled].focus, .btn-info[disabled]:active, .btn-info[disabled]:focus, .btn-info[disabled]:hover, fieldset[disabled] .btn-info, fieldset[disabled] .btn-info.active, fieldset[disabled] .btn-info.focus, fieldset[disabled] .btn-info:active, fieldset[disabled] .btn-info:focus, fieldset[disabled] .btn-info:hover, .btn.dropdown-toggle.btn-info,.navbar-default .navbar-nav > li > a.btn-info, .navbar-default .navbar-nav > li > span.btn-info,.mobile-main-menu .sidebar-nav li a.btn-info, .mobile-main-menu .sidebar-nav li span.btn-info { 748 background-color: rgb(255, 255, 255); 749 border-color: rgb(255, 255, 255); 750 color: rgb(19, 173, 15); 751 } 752 .btn-info:hover, .btn-info:focus, .btn-info:active,.btn-info:active:focus, .btn-info:active:hover, .nav > li > a.btn-info:focus, .nav > li > a.btn-info:hover,.btn-info.active,.open > .dropdown-toggle.btn-info, .btn-info.active.focus, .btn-info.active:focus, .btn-info.active:hover, .btn-info:active.focus, .open>.dropdown-toggle.btn-info:hover, .open>.dropdown-toggle.btn-info:focus, .open>.dropdown-toggle.btn-info.focus,a.bg-info:focus,a.bg-info:hover, .panel-info .panel-heading, .btn.dropdown-toggle.btn-info:hover, .label-info[href]:focus, .label-info[href]:hover { 753 background-color: rgba(255, 255, 255,0.95); 754 border-color: rgb(255, 255, 255); 755 color: rgb(19, 173, 15); 756 } 757 .panel-info { 758 background-color: #ffffff; 759 border-color: rgb(255, 255, 255); 760 } 761 .bg-info,.progress-bar-info,.module p.bg-info,.label-info,.badge-info,.pricing_menu .title.bg-info, .well .well.bg-info, .module .well.bg-info, .well .module.bg-info,.tab-content .module.bg-info,.tab-content .well.bg-info { 762 background-color: rgb(255, 255, 255); 763 color: rgb(19, 173, 15); 764 } 765 .bg-info .badge { 766 background-color:rgb(19, 173, 15); 767 color: rgb(255, 255, 255); 768 } 769 .btn-info.btn-outline { 770 background: transparent; 771 color: rgb(255, 255, 255); 772 transition: all 250ms ease-in-out 0ms; 773 } 774 .btn-info.btn-outline:hover { 775 background: rgba(255, 255, 255,0.1); 776 color: rgb(255, 255, 255); 777 } 778 .alert-info { 779 background-color:rgba(255, 255, 255,0.7); 780 border-color:rgba(255, 255, 255,0.2); 781 color: rgba(19, 173, 15,0.9); 782 } 783 .alert-info-subtle, .label-info-subtle, .badge-info-subtle { 784 background-color: #ffffff; 785 border-color: #ffffff; 786 color: rgb(255, 255, 255); 787 color: color-mix(in srgb, rgb(255, 255, 255) 50%, rgb(9, 75, 11) 50%); 788 } 789 .btn.dropdown-toggle.btn-info *, .btn-info a { 790 color: rgb(19, 173, 15); 791 } 792 .text-info{ 793 color: rgb(255, 255, 255); 794 } 795 .btn-success, .btn-success.disabled, .btn-success.disabled.active, .btn-success.disabled.focus, .btn-success.disabled:active, .btn-success.disabled:focus, .btn-success.disabled:hover, .btn-success[disabled], .btn-success[disabled].active, .btn-success[disabled].focus, .btn-success[disabled]:active, .btn-success[disabled]:focus, .btn-success[disabled]:hover, fieldset[disabled] .btn-success, fieldset[disabled] .btn-success.active, fieldset[disabled] .btn-success.focus, fieldset[disabled] .btn-success:active, fieldset[disabled] .btn-success:focus, fieldset[disabled] .btn-success:hover, .btn.dropdown-toggle.btn-success,.navbar-default .navbar-nav > li > a.btn-success, .navbar-default .navbar-nav > li > span.btn-success,.mobile-main-menu .sidebar-nav li a.btn-success, .mobile-main-menu .sidebar-nav li span.btn-success { 796 background-color: rgb(19, 173, 15); 797 border-color: rgb(19, 173, 15); 798 color: rgb(255, 255, 255); 799 } 800 .btn-success:hover, .btn-success:focus, .btn-success:active,.btn-success:active:focus, .btn-success:active:hover, .nav > li > a.btn-success:focus, .nav > li > a.btn-success:hover,.btn-success.active,.open > .dropdown-toggle.btn-success, .btn-success.active.focus, .btn-success.active:focus, .btn-success.active:hover, .btn-success:active.focus, .open>.dropdown-toggle.btn-success:hover, .open>.dropdown-toggle.btn-success:focus, .open>.dropdown-toggle.btn-success.focus,a.bg-success:focus,a.bg-success:hover, .panel-success .panel-heading, .btn.dropdown-toggle.btn-success:hover, .label-success[href]:focus, .label-success[href]:hover { 801 background-color: rgba(19, 173, 15,0.95); 802 border-color: rgb(19, 173, 15); 803 color: rgb(255, 255, 255); 804 } 805 .panel-success { 806 background-color: #dcf3db; 807 border-color: rgb(19, 173, 15); 808 } 809 .bg-success,.progress-bar-success,.module p.bg-success,.label-success,.badge-success,.pricing_menu .title.bg-success, .well .well.bg-success, .module .well.bg-success, .well .module.bg-success,.tab-content .module.bg-success,.tab-content .well.bg-success { 810 background-color: rgb(19, 173, 15); 811 color: rgb(255, 255, 255); 812 } 813 .bg-success .badge { 814 background-color: rgb(255, 255, 255); 815 color: rgb(19, 173, 15); 816 } 817 .btn-success.btn-outline { 818 background: transparent; 819 color: rgb(19, 173, 15); 820 transition: all 250ms ease-in-out 0ms; 821 } 822 .btn-success.btn-outline:hover { 823 background: rgba(19, 173, 15,0.1); 824 color: rgb(19, 173, 15); 825 } 826 .alert-success { 827 background-color:rgba(19, 173, 15,0.7); 828 border-color:rgba(19, 173, 15,0.2); 829 color: rgba(255, 255, 255,0.9); 830 } 831 .alert-success-subtle, .label-success-subtle, .badge-success-subtle { 832 background-color: #d0efcf; 833 border-color: #d0efcf; 834 color: rgb(19, 173, 15); 835 color: color-mix(in srgb, rgb(19, 173, 15) 50%, rgb(9, 75, 11) 50%); 836 } 837 .btn.dropdown-toggle.btn-success *, .btn-success a { 838 color: rgb(255, 255, 255); 839 } 840 .text-success{ 841 color: rgb(19, 173, 15); 842 } 843 .btn-warning, .btn-warning.disabled, .btn-warning.disabled.active, .btn-warning.disabled.focus, .btn-warning.disabled:active, .btn-warning.disabled:focus, .btn-warning.disabled:hover, .btn-warning[disabled], .btn-warning[disabled].active, .btn-warning[disabled].focus, .btn-warning[disabled]:active, .btn-warning[disabled]:focus, .btn-warning[disabled]:hover, fieldset[disabled] .btn-warning, fieldset[disabled] .btn-warning.active, fieldset[disabled] .btn-warning.focus, fieldset[disabled] .btn-warning:active, fieldset[disabled] .btn-warning:focus, fieldset[disabled] .btn-warning:hover, .btn.dropdown-toggle.btn-warning,.navbar-default .navbar-nav > li > a.btn-warning, .navbar-default .navbar-nav > li > span.btn-warning,.mobile-main-menu .sidebar-nav li a.btn-warning, .mobile-main-menu .sidebar-nav li span.btn-warning { 844 background-color: rgb(19, 131, 19); 845 border-color: rgb(19, 131, 19); 846 color: rgb(255, 255, 255); 847 } 848 .btn-warning:hover, .btn-warning:focus, .btn-warning:active,.btn-warning:active:focus, .btn-warning:active:hover, .nav > li > a.btn-warning:focus, .nav > li > a.btn-warning:hover,.btn-warning.active,.open > .dropdown-toggle.btn-warning, .btn-warning.active.focus, .btn-warning.active:focus, .btn-warning.active:hover, .btn-warning:active.focus, .open>.dropdown-toggle.btn-warning:hover, .open>.dropdown-toggle.btn-warning:focus, .open>.dropdown-toggle.btn-warning.focus,a.bg-warning:focus,a.bg-warning:hover, .panel-warning .panel-heading, .btn.dropdown-toggle.btn-warning:hover, .label-warning[href]:focus, .label-warning[href]:hover { 849 background-color: rgba(19, 131, 19,0.95); 850 border-color: rgb(19, 131, 19); 851 color: rgb(255, 255, 255); 852 } 853 .panel-warning { 854 background-color: #dcecdc; 855 border-color: rgb(19, 131, 19); 856 } 857 .bg-warning,.progress-bar-warning,.module p.bg-warning,.label-warning,.badge-warning,.pricing_menu .title.bg-warning, .well .well.bg-warning, .module .well.bg-warning, .well .module.bg-warning,.tab-content .module.bg-warning,.tab-content .well.bg-warning { 858 background-color: rgb(19, 131, 19); 859 color: rgb(255, 255, 255); 860 } 861 .bg-warning .badge { 862 background-color: rgb(255, 255, 255); 863 color: rgb(19, 131, 19); 864 } 865 .btn-warning.btn-outline { 866 background: transparent; 867 color: rgb(19, 131, 19); 868 transition: all 250ms ease-in-out 0ms; 869 } 870 .btn-warning.btn-outline:hover { 871 background: rgba(19, 131, 19,0.1); 872 color: rgb(19, 131, 19); 873 } 874 .alert-warning { 875 background-color:rgba(19, 131, 19,0.7); 876 border-color:rgba(19, 131, 19,0.2); 877 color: rgba(255, 255, 255,0.9); 878 } 879 .alert-warning-subtle, .label-warning-subtle, .badge-warning-subtle { 880 background-color: #d0e6d0; 881 border-color: #d0e6d0; 882 color: rgb(19, 131, 19); 883 color: color-mix(in srgb, rgb(19, 131, 19) 50%, rgb(9, 75, 11) 50%); 884 } 885 .btn.dropdown-toggle.btn-warning *, .btn-warning a { 886 color: rgb(255, 255, 255); 887 } 888 .text-warning { 889 color: rgb(19, 131, 19); 890 } 891 .btn-danger, .btn-danger.disabled, .btn-danger.disabled.active, .btn-danger.disabled.focus, .btn-danger.disabled:active, .btn-danger.disabled:focus, .btn-danger.disabled:hover, .btn-danger[disabled], .btn-danger[disabled].active, .btn-danger[disabled].focus, .btn-danger[disabled]:active, .btn-danger[disabled]:focus, .btn-danger[disabled]:hover, fieldset[disabled] .btn-danger, fieldset[disabled] .btn-danger.active, fieldset[disabled] .btn-danger.focus, fieldset[disabled] .btn-danger:active, fieldset[disabled] .btn-danger:focus, fieldset[disabled] .btn-danger:hover, .btn.dropdown-toggle.btn-danger,.navbar-default .navbar-nav > li > a.btn-danger, .navbar-default .navbar-nav > li > span.btn-danger,.mobile-main-menu .sidebar-nav li a.btn-danger, .mobile-main-menu .sidebar-nav li span.btn-danger { 892 background-color: rgb(0, 216, 35); 893 border-color: rgb(0, 216, 35); 894 color: rgb(255, 255, 255); 895 } 896 .btn-danger:hover, .btn-danger:focus, .btn-danger:active,.btn-danger:active:focus, .btn-danger:active:hover, .nav > li > a.btn-danger:focus, .nav > li > a.btn-danger:hover,.btn-danger.active,.open > .dropdown-toggle.btn-danger, .btn-danger.active.focus, .btn-danger.active:focus, .btn-danger.active:hover, .btn-danger:active.focus, .open>.dropdown-toggle.btn-danger:hover, .open>.dropdown-toggle.btn-danger:focus, .open>.dropdown-toggle.btn-danger.focus,a.bg-danger:focus,a.bg-danger:hover, .panel-danger .panel-heading, .btn.dropdown-toggle.btn-danger:hover, .label-danger[href]:focus, .label-danger[href]:hover { 897 background-color: rgba(0, 216, 35,0.95); 898 border-color: rgb(0, 216, 35); 899 color: rgb(255, 255, 255); 900 } 901 .has-error .form-control { 902 border-color: rgb(0, 216, 35); 903 } 904 .has-error .help-block:not(.form-field-help-block), .has-error ~ .help-block:not(.form-field-help-block),.has-error .help-block:not(.form-field-help-block) a, .has-error ~ .help-block:not(.form-field-help-block) a { 905 background: rgb(0, 216, 35); 906 color: rgb(255, 255, 255) !important; 907 } 908 .has-error .checkbox, .has-error .checkbox-inline, .has-error .control-label, .has-error .help-block, .has-error .radio, .has-error .radio-inline, .has-error.checkbox label, .has-error.checkbox-inline label, .has-error.radio label, .has-error.radio-inline label { 909 color: rgb(0, 216, 35); 910 } 911 .panel-danger { 912 background-color: #d9f9de; 913 border-color: rgb(0, 216, 35); 914 } 915 .bg-danger,.progress-bar-danger,.module p.bg-danger,.label-danger,.badge-danger,.pricing_menu .title.bg-danger, .well .well.bg-danger, .module .well.bg-danger, .well .module.bg-danger,.tab-content .module.bg-danger,.tab-content .well.bg-danger { 916 background-color: rgb(0, 216, 35); 917 color: rgb(255, 255, 255); 918 } 919 .bg-danger .badge { 920 background-color: rgb(255, 255, 255); 921 color: rgb(0, 216, 35); 922 } 923 .btn-danger.btn-outline { 924 background: transparent; 925 color: rgb(0, 216, 35); 926 transition: all 250ms ease-in-out 0ms; 927 } 928 .btn-danger.btn-outline:hover { 929 background: rgba(0, 216, 35,0.1); 930 color: rgb(0, 216, 35); 931 } 932 .alert-danger { 933 background-color:rgba(0, 216, 35,0.7); 934 border-color:rgba(0, 216, 35,0.2); 935 color: rgba(255, 255, 255,0.9); 936 } 937 .alert-danger-subtle, .label-danger-subtle, .badge-danger-subtle { 938 background-color: #ccf7d3; 939 border-color: #ccf7d3; 940 color: rgb(0, 216, 35); 941 color: color-mix(in srgb, rgb(0, 216, 35) 50%, rgb(9, 75, 11) 50%); 942 } 943 .btn.dropdown-toggle.btn-danger *, .btn-danger a { 944 color: rgb(255, 255, 255); 945 } 946 .text-danger{ 947 color: rgb(0, 216, 35); 948 } 949 .btn-default, .tags a, .btn-default.disabled, .btn-default.disabled.active, .btn-default.disabled.focus, .btn-default.disabled:active, .btn-default.disabled:focus, .btn-default.disabled:hover, .btn-default[disabled], .btn-default[disabled].active, .btn-default[disabled].focus, .btn-default[disabled]:active, .btn-default[disabled]:focus, .btn-default[disabled]:hover, fieldset[disabled] .btn-default, fieldset[disabled] .btn-default.active, fieldset[disabled] .btn-default.focu
949s, fieldset[disabled] .btn-default:active, fieldset[disabled] .btn-default:focus, fieldset[disabled] .btn-default:hover, .btn.dropdown-toggle.btn-default, #popover .mini_profile_pic,.navbar-default .navbar-nav > li > a.btn-default, .navbar-default .navbar-nav > li > span.btn-default,.mobile-main-menu .sidebar-nav li a.btn-default, .mobile-main-menu .sidebar-nav li span.btn-default { 950 background-color: rgb(255, 255, 255); 951 border-color: rgb(255, 255, 255); 952 color: rgb(85, 85, 85); 953 } 954 .btn-default:hover, .btn-default:focus, .btn-default:active,.btn-default:active:focus, .btn-default:active:hover,.tags a:hover, .nav > li > a.btn-default:focus, .nav > li > a.btn-default:hover,.btn-default.active,.open > .dropdown-toggle.btn-default, .btn-default.active.focus, .btn-default.active:focus, .btn-default.active:hover, .btn-default:active.focus, .open>.dropdown-toggle.btn-default:hover, .open>.dropdown-toggle.btn-default:focus, .open>.dropdown-toggle.btn-default.focus,a.bg-default:focus,a.bg-default:hover, .panel-default .panel-heading, .member_accounts .panel-default > .panel-heading, .panel-default.categories-panel .panel-heading, .btn.dropdown-toggle.btn-default:hover, #popover .mini_profile_pic, .label-default[href]:focus, .label-default[href]:hover { 955 background-color: rgba(255, 255, 255,0.95); 956 border-color: rgb(255, 255, 255); 957 color: rgb(85, 85, 85); 958 } 959 .sidemenu_panel .panel-default .panel_heading { 960 background-color: rgb(255, 255, 255)!important; 961 border-color: rgb(255, 255, 255)!important; 962 color: rgb(85, 85, 85)!important; 963 } 964 .panel-default .panel-heading, .member_accounts .panel-default > .panel-heading, .panel-default.categories-panel .panel-heading { 965 966 box-shadow: 0 0 1000px 0 rgba(85, 85, 85,0.02) inset; 967 background-color: rgb(255, 255, 255); 968 } 969 .panel-default, .member_accounts .panel-default { 970 971 background-color: rgba(255, 255, 255,0.15); 972 border-color: #ffffff; 973 border-color: color-mix(in srgb,rgb(255, 255, 255) 100%,rgba(255, 255, 255) 10%); 974 } 975 .member_admin_sidemenu .panel-default { 976 background-color: transparent; 977 } 978 .bg-default,.progress-bar-default,.module p.bg-default,.label-default,.badge-default,.pricing_menu .title.bg-default, .well .well.bg-default, .module .well.bg-default, .well .module.bg-default,.tab-content .module.bg-default,.tab-content .well.bg-default { 979 background-color: rgb(255, 255, 255); 980 color: rgb(85, 85, 85); 981 } 982 .bg-default .badge { 983 background-color: rgb(85, 85, 85); 984 color: rgb(255, 255, 255); 985 } 986 .btn-default.btn-outline { 987 background: transparent; 988 color: rgb(255, 255, 255); 989 transition: all 250ms ease-in-out 0ms; 990 } 991 .btn-default.btn-outline:hover { 992 background: rgba(255, 255, 255,0.1); 993 color: rgb(255, 255, 255); 994 } 995 .alert-default { 996 background-color:rgb(255, 255, 255); 997 border-color:rgb(255, 255, 255); 998 color: rgb(85, 85, 85); 999 } 1000 .alert-default-subtle, .label-default-subtle, .badge-default-subtle { 1001 background-color:rgba(255, 255, 255,0.5); 1002 border-color: rgba(255, 255, 255,0.5); 1003 color: rgb(85, 85, 85); 1004 color: color-mix(in srgb, rgb(85, 85, 85) 50%, rgb(9, 75, 11) 50%); 1005 } 1006 .btn.dropdown-toggle.btn-default *, .btn-default a { 1007 color: rgb(85, 85, 85); 1008 } 1009 .text-default{ 1010 color: rgb(255, 255, 255); 1011 } 1012 .btn-secondary, .btn.dropdown-toggle.btn-secondary,.navbar-default .navbar-nav > li > a.btn-secondary, .navbar-default .navbar-nav > li > span.btn-secondary,.mobile-main-menu .sidebar-nav li a.btn-secondary, .mobile-main-menu .sidebar-nav li span.btn-secondary { 1013 background-color: rgb(9, 75, 11); 1014 border: 1px solid rgb(9, 75, 11); 1015 color: rgb(255, 255, 255); 1016 } 1017 .btn-secondary:hover, .btn-secondary:focus, .btn-secondary:active,.btn-secondary:active:focus, .btn-secondary:active:hover, .nav > li > a.btn-secondary:focus, .nav > li > a.btn-secondary:hover,.btn-secondary.active,.open > .dropdown-toggle.btn-secondary, .btn-secondary.active.focus, .btn-secondary.active:focus, .btn-secondary.active:hover, .btn-secondary:active.focus, .open>.dropdown-toggle.btn-secondary:hover, .open>.dropdown-toggle.btn-secondary:focus, .open>.dropdown-toggle.btn-secondary.focus,a.bg-secondary:focus,a.bg-secondary:hover,.btn.dropdown-toggle.btn-secondary:hover, .panel-secondary .panel-heading, .label-secondary[href]:focus, .label-secondary[href]:hover { 1018 background-color: rgba(9, 75, 11,0.95); 1019 border-color: rgb(9, 75, 11); 1020 color: rgb(255, 255, 255); 1021 } 1022 .bg-secondary,.progress-bar-secondary,.module p.bg-secondary,.module p.bg-secondary:not(.fr-box.fr-basic .fr-element p),.label-secondary,.badge-secondary,.pricing_menu .title.bg-secondary, .well .well.bg-secondary, .module .well.bg-secondary, .well .module.bg-secondary,.tab-content .module.bg-secondary,.tab-content .well.bg-secondary { 1023 background-color: rgb(9, 75, 11); 1024 color: rgb(255, 255, 255); 1025 } 1026 .bg-secondary .badge { 1027 background-color:rgb(255, 255, 255); 1028 color: rgb(9, 75, 11); 1029 } 1030 .btn-secondary.btn-outline { 1031 background: transparent; 1032 color: rgb(9, 75, 11); 1033 transition: all 250ms ease-in-out 0ms; 1034 } 1035 .btn-secondary.btn-outline:hover { 1036 background: rgba(9, 75, 11,0.1); 1037 color: rgb(9, 75, 11); 1038 } 1039 .panel-secondary { 1040 background-color: #dae4da; 1041 border-color: rgb(9, 75, 11); 1042 } 1043 .alert-secondary { 1044 background-color:rgb(9, 75, 11); 1045 border-color:rgb(9, 75, 11); 1046 color: rgb(255, 255, 255); 1047 } 1048 .alert-secondary-subtle, .label-secondary-subtle, .badge-secondary-subtle { 1049 background-color:rgba(9, 75, 11,0.8); 1050 border-color: rgba(9, 75, 11,0.5); 1051 color: rgb(255, 255, 255); 1052 } 1053 .btn-outline { 1054 -webkit-backdrop-filter: blur(5px); 1055 backdrop-filter: blur(5px); 1056 } 1057 .btn-body, .btn-body.disabled, .btn-body.disabled.active, .btn-body.disabled.focus, .btn-body.disabled:active, .btn-body.disabled:focus, .btn-body.disabled:hover, .btn-body[disabled], .btn-body[disabled].active, .btn-body[disabled].focus, .btn-body[disabled]:active, .btn-body[disabled]:focus, .btn-body[disabled]:hover, fieldset[disabled] .btn-body, fieldset[disabled] .btn-body.active, fieldset[disabled] .btn-body.focus, fieldset[disabled] .btn-body:active, fieldset[disabled] .btn-body:focus, fieldset[disabled] .btn-body:hover, .btn.dropdown-toggle.btn-body,.navbar-default .navbar-nav > li > a.btn-body, .navbar-default .navbar-nav > li > span.btn-body,.mobile-main-menu .sidebar-nav li a.btn-body, .mobile-main-menu .sidebar-nav li span.btn-body { 1058 background-color: rgb(255, 255, 255); 1059 border: 1px solid rgb(255, 255, 255); 1060 color: rgb(9, 75, 11); 1061 } 1062 .btn-body:hover, .btn-body:focus, .btn-body:active,.btn-body:active:focus, .btn-body:active:hover, .nav > li > a.btn-body:focus, .nav > li > a.btn-body:hover,.btn-body.active,.open > .dropdown-toggle.btn-body, .btn-body.active.focus, .btn-body.active:focus, .btn-body.active:hover, .btn-body:active.focus, .open>.dropdown-toggle.btn-body:hover, .open>.dropdown-toggle.btn-body:focus, .open>.dropdown-toggle.btn-body.focus,a.bg-body:focus,a.bg-body:hover, .panel-body .panel-heading, .btn.dropdown-toggle.btn-body:hover, .label-body[href]:focus, .label-body[href]:hover { 1063 background-color: rgba(255, 255, 255,0.95); 1064 border: 1px solid rgb(255, 255, 255); 1065 color: rgb(9, 75, 11); 1066 } 1067 .btn.btn-body.dropdown-toggle * { 1068 color: rgb(9, 75, 11) 1069 } 1070 .btn-body.dropdown-toggle + ul li, .daterangepicker .ranges { 1071 color: #333; 1072 } 1073 .bg-body { 1074 background: rgb(255, 255, 255); 1075 color: rgb(9, 75, 11); 1076 } 1077 .bg-content-box { 1078 background: rgb(250, 250, 250); 1079 color: rgb(41, 41, 41); 1080 } 1081 .bg-content-box-border { 1082 background: rgb(238, 238, 238); 1083 } 1084 .btn.dropdown-toggle.btn-secondary *, .btn-secondary a { 1085 color: rgb(255, 255, 255); 1086 } 1087 .text-secondary { 1088 color: rgb(9, 75, 11); 1089 } 1090 .text-body { 1091 color: rgb(255, 255, 255); 1092 } 1093 .feature-post #post-content .alert-secondary.btn-block, .feature-search .img_section .alert-secondary.btn-block, .search_result .img_section .alert-secondary { 1094 border-radius: 10px; 1095 background-color: rgba(9, 75, 11,0.2); 1096 } 1097 1098 /* Footer Newsletter Row */ 1099 .newsletter_row .alert { 1100 color: rgb(255, 255, 255); 1101 } 1102 .newsletter_row { 1103 background-color: rgb(0, 128, 26); 1104 color: rgb(255, 255, 255); 1105 } 1106 .newsletter_row input[type="submit"],.newsletter_footer_button { 1107 background-color: rgba(0, 212, 34,0.97); 1108 color: rgb(255, 255, 255); 1109 border-color: rgb(0, 212, 34); 1110 } 1111 .newsletter_row input[type="submit"]:hover,.newsletter_row input[type="submit"]:focus,.newsletter_footer_button:hover,.newsletter_footer_button:focus { 1112 background-color: rgb(0, 212, 34); 1113 color: rgb(255, 255, 255); 1114 } 1115 .newsletter_button_left { 1116 border-right: 1px solid rgba(255, 255, 255,0.2); 1117 } 1118 .newsletter_button_right { 1119 border-left: 1px solid rgba(255, 255, 255,0.2); 1120 } 1121 .newsletter_row small.help-block { 1122 background: rgb(255, 255, 255); 1123 margin-top: -5px; 1124 float: left; 1125 padding: 8px; 1126 border-radius: 1px; 1127 color: rgb(0, 128, 26); 1128 text-transform: capitalize; 1129 } 1130 .newsletter_row .has-success .checkbox,.newsletter_row .has-error .checkbox{ 1131 color: rgb(255, 255, 255); 1132 } 1133 @media only screen and (max-width: 767px) { 1134 .newsletter_button_right,.newsletter_button_left{ 1135 border: none; 1136 margin: 5px 0; 1137 } 1138 } 1139 1140 /* Font Sizes */ 1141 1142 .navbar-default .navbar-nav > li > a, .navbar-default .navbar-nav > li > span { 1143 font-size: 17px; 1144 } 1145 .header .logo { 1146 font-size: 33px; 1147 } 1148 .homepage_title h1, .homepage_settings h1 { 1149 letter-spacing: -1px; 1150 font-size: 33px; 1151 margin-bottom: 20px; 1152 } 1153 @media only screen and (max-width: 768px) { 1154 .homepage_title h1, .homepage_settings h1 {margin-bottom: 15px;} 1155 } 1156 .homepage_settings h2 { 1157 font-size: 20px; 1158 } 1159 1160 .ui-rangeSlider-bar{ 1161 background: rgb(18, 111, 29)!important; 1162 } 1163 1164 1165 1166 @media only screen and (max-width: 1024px){ 1167 .modal {margin-top: 40px;} 1168 } 1169 @media only screen and (max-width: 768px){ 1170 .modal {margin-top: 60px;} 1171 } 1172 1173 /* Calendar Styles */ 1174 1175 #cal-slide-content { 1176 color: rgb(85, 85, 85)!important; 1177 background-color: rgb(255, 255, 255)!important; 1178 -webkit-box-shadow: none!important; 1179 box-shadow: none!important; 1180 } 1181 #cal-slide-content a.event-item { 1182 color: rgb(85, 85, 85)!important; 1183 font-weight:bold!important; 1184 } 1185 #cal-slide-content a.event-item small { 1186 display: inline-block; 1187 } 1188 .cal-month-box, .cal-year-box, .cal-week-box { 1189 border: 1px solid rgb(238, 238, 238)!important; 1190 } 1191 .cal-year-box .row-fluid, .cal-month-box .cal-row-fluid { 1192 border-bottom: 1px solid rgb(238, 238, 238)!important; 1193 } 1194 .cal-year-box [class*="span"], .cal-month-box [class*="cal-cell"] { 1195 border-right: 1px solid rgb(238, 238, 238)!important; 1196 } 1197 .cal-year-box .row-fluid, .cal-row-fluid, #cal-day-box .cal-day-hour:nth-child(odd) { 1198 background-color: rgb(255, 255, 255)!important; 1199 } 1200 .cal-month-day span:not(.pull-right):not(.events-count-label):not(.events-label) { 1201 color: rgb(85, 85, 85)!important; 1202 } 1203 .cal-day-today span[data-cal-date] { 1204 color: rgb(9, 75, 11)!important; 1205 } 1206 .cal-year-box .row-fluid [class*="span"]:last-child, .cal-month-box .cal-row-fluid [class*="cal-cell"]:last-child { 1207 border: 0!important; 1208 } 1209 .cal-row-head { 1210 background: rgb(250, 250, 250)!important; 1211 } 1212 .day-highlight:hover, .day-highlight { 1213 background-color: rgb(238, 238, 238)!important; 1214 } 1215 .cal-event-list .event.pull-left { 1216 background-color: rgb(9, 75, 11)!important; 1217 opacity: 0.4; 1218 margin-top: 7px!important; 1219 } 1220 .cal-day-today { 1221 background-color: rgb(238, 238, 238)!important; 1222 } 1223 #cal-day-tick { 1224 border: 1px solid rgb(238, 238, 238)!important; 1225 background-color: rgb(238, 238, 238)!important; 1226 } 1227 .cal-day-weekend span[data-cal-date]{
1228 color: rgb(9, 75, 11)!important; 1229 } 1230 .rsDefault, .rsDefault .rsOverflow, .rsDefault .rsSlide, .rsDefault .rsVideoFrameHolder, .rsDefault .rsThumbs { 1231 border-radius: 10px; 1232 background: #151515!important; 1233 } 1234 .img_section .no-radius-bottom + .alert-secondary .rsDefault .rsSlide, .img_section .no-radius-bottom + .alert-secondary .rsDefault .rsOverflow { 1235 border-radius:0; 1236 } 1237 1238 #first_container .favorite, #first_container .fa.favorite { 1239 color: rgb(43, 187, 79); 1240 background: rgb(255, 255, 255); 1241 border: 1px solid rgb(255, 255, 255); 1242 white-space:nowrap!important; 1243 height:24px; 1244 padding:0 6px; 1245 border-radius:8px; 1246 } 1247 #first_container .favorite span, #first_container .fa.favorite span { 1248 font-family: 'Montserrat'; 1249 white-space:nowrap!important; 1250 } 1251 #first_container .favoriteActive:not(.favorite.comments-count-badge), #first_container .fa.favoriteActive:not(.favorite.comments-count-badge .fa) { 1252 color: rgb(0, 253, 30); 1253 } 1254 #first_container .favorite::after, #first_container .fa.favorite::after { 1255 font-family: 'Montserrat'; 1256 margin-left: 3px; 1257 } 1258 #first_container .favorite span, #first_container .fa.favorite span{ 1259 padding-left: 4px; 1260 font-family: 'Montserrat'; 1261 font-size: 11px; 1262 letter-spacing:.5px; 1263 top:-1px; 1264 position:relative; 1265 font-weight:700; 1266 } 1267 #first_container .favorite span:empty, #first_container .fa.favorite span:empty { 1268 padding: 0; 1269 } 1270 #first_container .favorite .bookmark-number, #first_container .fa.favorite .bookmark-number { 1271 padding: 1px 0; 1272 border-radius: 100px; 1273 display: inline-block; 1274 font-weight: bold; 1275 min-width: 15px; 1276 font-size: .8em; 1277 vertical-align: bottom; 1278 height: 15px; 1279 line-height: 13px; 1280 margin-left: 3px; 1281 text-align: center; 1282 } 1283 #first_container .favorite.favoriteActive .bookmark-number:not(.comments-count-badge .bookmark-number), #first_container .fa.favorite.favoriteActive .bookmark-number { 1284 background: rgb(0, 253, 30); 1285 color: #fff; 1286 } 1287 1288 span.checkbox_value::after { 1289 content: ', '; 1290 } 1291 1292 span.checkbox_value:last-child::after { 1293 content: ''; 1294 } 1295 1296 .member_results .grid_element{ 1297 position:relative; 1298 overflow:hidden; 1299 display: inline-block; 1300 width:100%; 1301} 1302.member_results .grid_element::before { 1303 position: absolute; 1304 top: 24px; 1305 text-align: center; 1306 width: 200px; 1307 left: -62px; 1308 transform: rotate(-45deg); 1309 -webkit-transform: rotate(-45deg); 1310 z-index: 1; 1311 line-height: 1.2em; 1312 padding: 6px 0; 1313 font-weight: bold; 1314 letter-spacing: 1px; 1315} 1316@media only screen and (max-width: 767px) { 1317 .member_results .grid-container > hr { 1318 border-color: transparent; 1319 } 1320 .member_results .grid_element{ 1321 overflow:visible; 1322 } 1323 .member_results .grid_element::before { 1324 top: -19px!important; 1325 transform: rotate(0deg); 1326 -webkit-transform: rotate(0deg); 1327 font-size: 10px !important; 1328 letter-spacing: 0; 1329 width: auto; 1330 padding: 3px 6px; 1331 } 1332} 1333 1334 1335 1336 1337 1338 /* Homepage Sections Background Color Logic */ 1339 1340 1341 .homepage-section-2 { 1342 padding: 40px 0 40px; 1343 } 1344 1345 1346 .homepage-section-3 { 1347 padding: 40px 0 40px; 1348 } 1349 1350 1351 .homepage-section-4 { 1352 padding: 40px 0 40px; 1353 } 1354 1355 1356 .homepage-section-5 { 1357 padding: 40px 0 40px; 1358 } 1359 1360 1361 .homepage-section-6 { 1362 padding: 40px 0 40px; 1363 } 1364 1365 1366 .homepage-section-7 { 1367 padding: 40px 0 40px; 1368 } 1369 1370 1371 .homepage-section-8 { 1372 padding: 40px 0 40px; 1373 } 1374 1375 1376 .homepage-section-9 { 1377 padding: 40px 0 40px; 1378 } 1379 1380 1381 .homepage-section-10 { 1382 padding: 40px 0 40px; 1383 } 1384 1385 1386 .homepage-section-11 { 1387 padding: 40px 0 40px; 1388 } 1389 1390 1391 .homepage-section-12 { 1392 padding: 40px 0 40px; 1393 } 1394 1395 1396 .homepage-section-13 { 1397 padding: 40px 0 40px; 1398 } 1399 1400 1401 .homepage-section-14 { 1402 padding: 40px 0 40px; 1403 } 1404 1405 1406 .homepage-section-15 { 1407 padding: 40px 0 40px; 1408 } 1409 1410 1411 /* Additional Settings */ 1412 1413 1414 /* Streaming Widgets Title Settings */ 1415 1416 .streaming-title { 1417 text-align: left; 1418 font-size: 30px; 1419 line-height:1.5em; 1420 font-weight: 600; 1421 padding-bottom: 0px; 1422 } 1423 1424 @media only screen and (max-width: 990px) { 1425 .streaming-title { 1426 line-height:1.1em; 1427 } 1428 } 1429 1430 1431 .homepage-join-module .module h2:first-of-type { 1432 color: ; 1433 } 1434 1435 .homepage-join-module .module{ 1436 background: ; 1437 border-color: ; 1438 } 1439 1440 .homepage-about-module .module h2:first-of-type { 1441 color: ; 1442 } 1443 1444 .homepage-about-module .module{ 1445 background: ; 1446 border-color: ; 1447 1448 } 1449 1450 .the-post-description > :is(h2, h3, h4, h5):not(:first-child) { 1451 font-weight: 600; 1452 margin-top: 20px; 1453 } 1454 1455 /* Keep: Ensure ul/ol respect padding and margins */ 1456 .the-post-description > :is(ul, ol) { 1457 display: flow-root; 1458 } 1459 .the-post-description li { 1460 margin-bottom: 8px; 1461 } 1462 1463 1464 1465 .img-circle, .img-rounded.img-circle, .img-circle img, .img-rounded.img-circle img, img.fr-dib.img-circle, img.fr-dib.img-rounded.img-circle { 1466 border-radius:1000px!important; 1467 } 1468 1469 .img-rounded img, img.fr-dib.img-rounded{ 1470 border-radius: 10px!important; 1471 } 1472 1473 /* Google Translate Module */ 1474 .skiptranslate iframe {position: absolute;top: -40px;} 1475 .skiptranslate{font-size:0} 1476 .goog-te-gadget-simple{border:1px solid #ccc;border-radius:4px;box-shadow:0 1px 1px rgba(0,0,0,0.075) inset;color:#555} 1477 .skiptranslate.goog-te-gadget span,img.goog-te-gadget-icon{display:none!important} 1478 .goog-te-gadget .goog-te-combo{margin-bottom:-4px} 1479 .skiptranslate.goog-te-gadget select{border:1px solid #ddd;border-radius:3px;font-size:12px;padding:2px 4px;width:100%;background:#fff;margin:0;height:30px;line-height:30px;display:block;color:#555;box-shadow:inset 0 1px 1px rgba(0,0,0,.075)} 1480 @media only screen and (max-width: 1100px) { 1481 .skiptranslate:not(.skiptranslate[style="display: none;"]){height:39px} 1482 .skiptranslate:not(.skiptranslate[style="display: none;"]) ~ .header{margin-top:10px!important} 1483 .skiptranslate:not(.skiptranslate[style="display: none;"]) ~ .announcement-bar{margin-top:10px} 1484 .skiptranslate:not(.skiptranslate[style="display: none;"]) ~ .announcement-bar ~ .header{margin-top:0!important} 1485 .skiptranslate:not(.skiptranslate[style="display: none;"]) ~ .header .mobile-main-menu{top:89px!important;height:calc(100% - 90px)!important} 1486 .skiptranslate:not(.skiptranslate[style="display: none;"]) ~ .header .navbar{top:39px} 1487 .skiptranslate:not(.skiptranslate[style="display: none;"]) ~ #first_container .member_sidebar.open{top: 89px;} 1488 } 1489 @media only screen and (max-width: 767px) { 1490 .skiptranslate:not(.skiptranslate[style="display: none;"]) ~ .announcement-bar.hidden-xs ~ .header{margin-top:10px!important} 1491 } 1492 1493 1494 1495</style> 1496 1497<!--GOOGLE TAG MANAGER CODE--><div class="header"> 1498 <div class="container"> 1499 <div class="row header-main-row"> 1500 <style type='text/css'> .logo-text:has(.logo_title:empty) { 1501 display:none 1502} </style><div id="website_logo" class="col-md-5 xs-nopad xs-hpad sm-text-center xs-bmargin header-left-container"> 1503 <a class="logo logo-image inline-block vpad sm-nopad sm-tmargin" href="https://www.mythreebids.com" title="My Three Bids"> 1504 <img width="8560" height="2328" src="/images/brand-logo-4.5.18.png" alt="My Three Bids"> 1505 </a> 1506 <div class="clearfix"></div> 1507</div> 1508 <style type='text/css'> body input.tt-hint,body input.form-control.normal-autosuggest-input.tt-query { 1509 background-color: white !important; 1510} 1511.mini-nav:not(:has(li)) { 1512 display: none!important; 1513} 1514/* Parent Container - Main List */ 1515.mini-nav li:has(ul) { 1516 position: relative; 1517 border-radius: 8px 8px 0 0; 1518} 1519.mini-nav > li:has(ul) { 1520 padding-left: 0; 1521 padding-right: 0; 1522 background: rgb(255, 255, 255); 1523} 1524.mini-nav > li:has(ul) > a:not(.btn), .mini-nav > li:has(ul) > span { 1525 padding: 10px 15px; 1526 margin: 0!important; 1527} 1528.mini-nav > li:hover:has(ul), .mini-nav > li:hover:has(ul) { 1529 box-shadow: 0 -1px 3px rgba(35, 129, 54,0.25); 1530} 1531/* Parent Links */ 1532.mini-nav > li > a:not(.btn), .mini-nav > li > span:not(.btn) { 1533 display:inline-block; 1534 border-radius: 8px 8px 0 0; 1535} 1536.mini-nav > li:hover > a:not(.btn), .mini-nav > li:hover > span { 1537 background: rgb(255, 255, 255); 1538 display: inline-block; 1539 position: relative; 1540 z-index: 1000; 1541} 1542/* First Level Dropdowns */ 1543.mini-nav li ul { 1544 background: rgb(255, 255, 255); 1545 box-shadow: 0 0px 3px rgba(35, 129, 54,0.25), 0 5px 5px 5px rgba(35, 129, 54,0.05); 1546 text-align: left;
1547 display: none; 1548 border-radius: 0 8px 8px 8px; 1549 list-style: none; 1550 padding: 10px; 1551 position: absolute; 1552 white-space: nowrap; 1553 min-width: 130%; 1554 width: auto; 1555 top: 100%; 1556 left: 0; 1557 z-index: 999; 1558 margin-top: -1px; 1559} 1560.mini-nav li:hover > ul { 1561 display: block; 1562} 1563/* First Level Dropdown Items */ 1564.mini-nav li ul li { 1565 position: relative; 1566 display: block; 1567 width: 100%; 1568} 1569.mini-nav li ul li a, .mini-nav li ul li span { 1570 font-size: 0px !important; 1571 display: block; 1572 font-weight: 400; 1573 padding: 8px 12px; 1574 border-radius: 8px; 1575 text-decoration: none; 1576 width: 100%; 1577} 1578.mini-nav li ul li a:hover, .mini-nav li ul li span:hover { 1579 box-shadow: 0 0 0 25px rgba(35, 129, 54,0.05) inset; 1580} 1581/* Second Level Dropdowns */ 1582.mini-nav li ul li ul { 1583 display: none; 1584 position: absolute; 1585 top: 0; 1586 left: 100%; 1587 margin: 0; 1588 border-radius: 8px; 1589} 1590.mini-nav li ul li:hover > ul { 1591 display: block; 1592} 1593/* Edge Positioning - Last Child Dropdowns */ 1594.mini-nav > li:last-child ul { 1595 right: 0; 1596 left: auto; 1597 border-radius: 8px 0 8px 8px; 1598} 1599.mini-nav > li:last-child ul li ul { 1600 right: 100%; 1601 left: auto; 1602} 1603/* Flex Spacing Utility */ 1604.mini-nav.mini-nav-flex-spaced { 1605 display: flex; 1606 justify-content: space-between; 1607 align-items: center; 1608 flex-wrap: wrap; 1609 row-gap: 0;
1610} 1611.mini-nav.mini-nav-flex-spaced > li { 1612 flex: none; 1613 padding: 0; 1614 margin: 2px 0; 1615 order: 2; 1616} 1617.mini-nav.mini-nav-flex-spaced > li.header-member-account-links, 1618.mini-nav:has(li ul) > li.header-member-account-links { 1619 order: 1; 1620 margin-left: auto; 1621 width: 100%; 1622 margin-bottom: 10px; 1623} 1624.logged-in-member-header .mini-nav.mini-nav-flex-spaced.list-inline > li { 1625 line-height: 1em; 1626 min-height: 0; 1627} 1628@media (min-width: 992px) { 1629 .header-main-row { 1630 display: flex; 1631 align-items: center; 1632 flex-wrap: wrap; 1633 } 1634} 1635@media (max-width: 991px) { 1636 .mini-nav.mini-nav-flex-spaced { 1637 justify-content: center; 1638 } 1639 .mini-nav.mini-nav-flex-spaced > li { 1640 margin-left: 5px !important; 1641 margin-right: 5px !important; 1642 } 1643} </style><div class="col-md-7 text-right sm-text-center header-right-container nolpad xs-hpad"> 1644 <ul class="mini-nav nobmargin list-inline xs-nopad xs-tmargin tpad"> 1645 <style type='text/css'> div[id^="goog-"]{display: none !important;} 1646.goog-te-banner { 1647 overflow-x: auto; 1648} </style> <li class="align-middle" style="min-width:137px;height:30px"> 1649 <div id="google_translate_element" style="width:127px;float:right;opacity:0;"></div> 1650 <i id='spin_remove' class="fa fa-circle-o-notch fa-spin "></i> 1651 </li> 1652<li class='bmargin'><a href='/about/contact' id='link209' class='hpad bmargin'>Contact Us</a></li><li class='bmargin'><a href='/login' id='link208' class='rpad bmargin'>Member Login</a></li><li class=''><span id='link351'> <a href="tel:1-833-698-4733">1-833-698-4733</a></span></li><li class='bmargin norpad'><a href='/getmatched' id='link210' class='btn btn_get_listed bold'>Get Three Bids Free! <i class="fa fa-chevron-right lmargin"></i></a></li> </ul> 1653 <div class="clearfix"></div> 1654 </div> 1655 </div> 1656 </div> 1657 <style type='text/css'> .mobile-main-menu .hasChildren span a { 1658 padding: 0px; 1659} 1660 1661.user_sidebar > img { 1662 width: 32px; 1663 height: 32px; 1664 position: absolute; 1665 z-index: 10; 1666 border-radius: 100px; 1667 top: -1px; 1668 object-fit: cover; 1669 left: -10px; 1670 background: rgb(255, 255, 255); 1671} 1672#member_sidebar_toggle img+.fa { 1673 display: none; 1674} 1675.main_menu, .user_sidebar, .compact-mobile-search { 1676 padding: 5px 8px; 1677 margin-right:0; 1678 min-height: 33.0333px; 1679 min-width: 38.116px; 1680} 1681.main_menu i, .user_sidebar i { 1682 font-size: 16px; 1683} 1684.navbar-nav li { 1685 float: none!Important; 1686} 1687.navbar-default{ 1688 -webkit-transition: all .6s ease-in-out; 1689 -moz-transition: all .6s ease-in-out; 1690 -o-transition: all .6s ease-in-out; 1691 transition: all .6s ease-in-out; 1692} 1693.transparent_menu { 1694 background-color: rgba(231, 244, 230,0.95)!important; 1695} 1696@media only screen and (max-width: 991px) { 1697 #popover {display: none} 1698} 1699@media only screen and (max-width: 1100px){ 1700 .mobile-main-menu{display:block!important} 1701 .navbar-toggle {display: block} 1702 #bs-main_menu .nav {display: none!important} 1703} 1704.mobile-main-menu { 1705 position: fixed; 1706 height: calc(100% - 50px)!important; 1707 width: 250px; 1708 background: rgb(231, 244, 230); 1709 z-index: 99999; 1710 right: -250px; 1711 top: 50px; 1712 display: none; 1713 -webkit-transition: all .6s ease-in-out; 1714 -moz-transition: all .6s ease-in-out; 1715 -o-transition: all .6s ease-in-out; 1716 transition: all .6s ease-in-out; 1717 overflow-y: auto!important; 1718 overflow-x: hidden!important; 1719} 1720.mobile-main-menu ul li i { 1721 color: rgb(64, 64, 64); 1722 cursor: pointer; 1723 float: right; 1724 padding: 13px; 1725} 1726.mobile-main-menu.opened{ 1727 right: 0px!important; 1728} 1729.mobile-main-menu ul li a, .mobile-main-menu ul li span { 1730 display: inline-block; 1731 float: left; 1732 -webkit-touch-callout: none; 1733 -webkit-user-select: none; 1734 -khtml-user-select: none; 1735 -moz-user-select: none; 1736 -ms-user-select: none; 1737 user-select: none; 1738 padding: 10px 0px; 1739 width: 80%; 1740 width: calc(100% - 40px); 1741} 1742.mobile-main-menu .sidebar-nav li ul { 1743 height: 0px; 1744 overflow: hidden; 1745 list-style: none; 1746 color: rgb(64, 64, 64); 1747 padding-left: 10px; 1748} 1749.mobile-main-menu .sidebar-nav li.sub_open > ul{ 1750 height: 100%; 1751} 1752.mobile-main-menu ul.sidebar-nav { 1753 position: absolute; 1754 width: 250px; 1755 margin: 0; 1756 padding: 0; 1757 list-style: none; 1758 font-size: 14px; 1759} 1760.mobile-main-menu .sidebar-nav > li { 1761 display: block; 1762 line-height: 20px; 1763 padding: 0 15px 0 20px; 1764} 1765.mobile-main-menu .sidebar-nav li a, .mobile-main-menu .sidebar-nav li span { 1766 text-decoration: none; 1767 color: rgb(64, 64, 64); 1768 padding-left:10px; 1769} 1770.mobile-main-menu .sidebar-nav li a i, .mobile-main-menu .sidebar-nav li span i { 1771 display: none; 1772} 1773 1774 </style><div class="mobile-main-menu"> 1775 <ul class="sidebar-nav"> 1776 <li class=''><a href='/home' id='link1'>Home  </a></li><li class=''><a href='/different ' id='link266'>How We're Different</a></li><li class=''><a href='/getmatched' id='link264'>Get 3 Bids Free!</a></li><li class=''><a href='/blog' id='link347'>Blog</a></li><li class=''><a href='/aboutus' id='link265'>About Us</a></li><li class=''><a href='/about/contact' id='link263'>Contact Us</a></li> </ul> 1777</div> 1778<nav class="navbar navbar-default lockedonscroll"> 1779 <div class="container container-fluid"> 1780 1781 <div class="navbar-header"> 1782 <button type="button" class="navbar-toggle collapsed main_menu" data-toggle="collapse" aria-label="main_menu"> 1783 <i class="fa fa-bars fa-fw"></i> 1784 </button> 1785 1786 1787 1788 </div> 1789 1790 1791 <div class="tablet-menu collapse navbar-collapse nopad" id="bs-main_menu"> 1792 <ul class="tablet-menu-ul nav navbar-nav nav-justified"> 1793 <li class=''><a href='/home' id='link1'>Home  </a></li><li class=''><a href='/different ' id='link266'>How We're Different</a></li><li class=''><a href='/getmatched' id='link264'>Get 3 Bids Free!</a></li><li class=''><a href='/blog' id='link347'>Blog</a></li><li class=''><a href='/aboutus' id='link265'>About Us</a></li><li class=''><a href='/about/contact' id='link263'>Contact Us</a></li> </ul> 1794 </div> 1795 </div> 1796</nav> 1797<!--CSS IF MENU IS FIXED TOP--> 1798 1799</div> 1800<!-- 1801 1802IMPORTANT: This widget contains real Adsense code as a sample to show how this widget functions. Please replace the current Adsense code below with your own code in order to generate revenue from this ad space. 1803 1804-->
1805<div class="container clearfix text-center banner-ad-unit above-content-banner-ad"> 1806 <div class="clearfix"></div> 1807</div> 1808<div class="clearfix"></div><div class="clearfix"></div> 1809<!-- Begin Content --> 1810<main role="main" id="main-content"> 1811<div id="first_container" class="content-container fr-view"> 1812 <style type='text/css'> #first_container { 1813 background-color: rgb(223, 241, 221); 1814} 1815body{ 1816 z-index: 0; 1817} 1818.vegas-slide-inner {background-position:center top!important;} 1819.previous { 1820 left: 10px; 1821 right: auto; 1822 background-image: url('/directory/cdn/assets/bootstrap/vegas/img/icon-previous.svg') !important; 1823 -webkit-transform: translateY(-50%); 1824 -ms-transform: translateY(-50%); 1825 transform: translateY(-50%); 1826} 1827.vegas-wrapper .previous, .vegas-wrapper .next { 1828 opacity: .8; 1829 visibility: hidden; 1830 display: block; 1831 position: absolute; 1832 width: 32px; 1833 height: 32px; 1834 margin: 0; 1835 padding: 0; 1836 background: center center no-repeat; 1837 background-size: cover; 1838 top: 50%; 1839} 1840.vegas-wrapper .next { 1841 left: auto; 1842 right: 10px; 1843 background-image: url('/directory/cdn/assets/bootstrap/vegas/img/icon-next.svg') !important; 1844 -webkit-transform: translateY(-50%); 1845 -ms-transform: translateY(-50%); 1846 transform: translateY(-50%); 1847} 1848 1849.vegas-transition-zoomIn2-out, 1850.vegas-transition-zoomOut, 1851.vegas-transition-zoomOut2{ 1852 webkit-transform: scale(1) !important; 1853 transform: scale(1) !important; 1854 opacity: 0; 1855} 1856.homepage_settings { 1857 z-index: 9999; 1858} 1859.slider-container { 1860 position: absolute 1861} 1862 </style><style type='text/css'> .vegas-transition-zoomOut-in,.vegas-transition-zoomOut2-in{opacity:1 !important} </style> <div class="container"> 1863 <div class="clearfix body-content"></div> 1864 <style type='text/css'> .body-content {margin:0px;} 1865 #first_container { 1866 background-position: center top; 1867 background-repeat: no-repeat; 1868 position: relative; 1869 background-size: cover; 1870 } 1871 1872 1873.search_box,.homepage_settings .center-block { 1874float: 1875 left!important; 1876} 1877 1878 1879@media only screen and (max-width: 768px) { 1880 #first_container { 1881 background-position: left top; 1882 } 1883 .homepage_title,.homepage_settings h2,.search_box { 1884 float:none!important; 1885 } 1886 } 1887 1888[class^="homepage-section-"]:empty { 1889 display: none; 1890} 1891.primary-hero-content .search_box, .secondary-hero-content .search_box { 1892 width: 100%; 1893} 1894.homepage_settings:has(.secondary-hero-content) { 1895 display: flex; 1896 align-items: center; 1897 flex-wrap: wrap; 1898} 1899 .homepage_settings:has(.secondary-hero-content) .primary-hero-content { 1900 order: 0; 1901 } 1902 .homepage_settings:has(.secondary-hero-content) .secondary-hero-content { 1903 order: 1; 1904 } 1905.homepage_settings:has(.secondary-hero-content) > * { 1906 order: 10; 1907} </style> <div class="row-fluid row homepage_settings"> 1908 <div class="col-xs-12 col-sm-12 col-md-9 center-block homepage_title primary-hero-content"> 1909 </div> 1910 <div class="clearfix"></div> 1911 <div class="col-md-12"> 1912 1913 <div class="clearfix"></div> 1914 <div class="clearfix"></div> 1915 <div class="col-md-6 col-xs-12 search_box fpad img-rounded center-block"> 1916 <h2 class="fpad bold nomargin sm-text-center col-md-12"> 1917 <div style="text-align:center;"><a href="https://www.mythreebids.com/getmatched" class="btn btn-lg center-block btn-primary"><b>CLICK HERE to get Three Bids FREE! </b></a></div><p><br> 1918 1919Or search for local Pros below </h2> 1920 <div class="clearfix"></div> 1921 <form class="fpad form-horizontal website-search" name="frm1" action="/search_results"> 1922 <div class="form-group nomargin hidden-sm hidden-xs"> 1923 <label> 1924 What do you need: 1925 </label> 1926 </div> 1927 <div class="form-group nomargin bpad"> 1928 <select placeholder="Select an option" name="sid" id="sid" class="form-control input-lg"> 1929 <option value=""></option> 1930 <option value='20'>Cleaning and Restoration</option> 1931<option value='9'>Concrete</option> 1932<option value='7'>Electrical</option> 1933<option value='18'>Fences</option> 1934<option value='17'>Flooring</option> 1935<option value='11'>Garage</option> 1936<option value='13'>General Contractor</option> 1937<option value='15'>Handyman</option> 1938<option value='1'>Heating and Cooling</option> 1939<option value='19'>Insulation</option> 1940<option value='8'>Landscaping</option> 1941<option value='16'>Other</option> 1942<option value='14'>Paint</option> 1943<option value='6'>Plumbing</option> 1944<option value='10'>Pool</option> 1945<option value='5'>Remodeling</option> 1946<option value='4'>Roofing</option> 1947<option value='12'>Room Addition</option> 1948<option value='2'>Solar</option> 1949<option value='3'>Windows and Doors</option> 1950 </select> 1951 </div> 1952 <div class="form-group nomargin hidden-sm hidden-xs"> 1953 <label> 1954 Search by location below: 1955 </label> 1956 </div> 1957 <div class="form-group nomargin"> 1958 <input type="text" placeholder="City or Post Code" class="googleSuggest googleLocation form-control input-lg" name="location_value" id="location_google_maps_homepage" value=""> 1959 </div> 1960 <div class="col-md-12 nopad tmargin"> 1961 <button type="submit" class="btn btn-lg btn-block btn_home_search">Search Now</button> 1962 </div> 1963 <div class="clearfix"></div> 1964 </form> 1965 <div class="clearfix"></div> 1966 </div> 1967 <div class="clearfix"></div> 1968 <div class="clearfix"></div> 1969 1970 <div class="clearfix"></div> 1971 </div> 1972 <div class="clearfix"></div> 1973 </div> 1974 <div class="clearfix"></div> 1975 </div></div> <!-- closes container + content-container --> 1976 1977 1978<div class="homepage-sections fr-view"> 1979 <div class="homepage-section-1"><div id="hero-divider" class="content-container homepage_steps"> 1980 <div class="container"> 1981 <div class="col-sm-12 col-md-4 text-center sm-bmargin sm-bpad sm-tmargin homepage_step_1"> 1982 <a class="homepage_step_link center-block" href="http://mythreebids.com/categories" title=""> 1983 1984 1985 1986 1987 <p class="sm-bmargin"><img src="https://www.mythreebids.com/images/1-(1).jpg"></p> 1988 1989 1990 </a> 1991 <div class="clearfix"></div> 1992 </div> 1993 <div class="clearfix hidden-lg hidden-md"></div> 1994 <div class="col-sm-12 col-md-4 text-center sm-bmargin sm-bpad sm-tmargin homepage_step_2"> 1995 <a class="homepage_step_link center-block" href="http://mythreebids.com/getmatched" title="Click here to see"> 1996 1997 1998 1999 2000 <p class="sm-bmargin"><img src="https://www.mythreebids.com/images/CONNATION.jpg">Click here to see which three Pro's 2001will "SMART-MATCH" with you now!</p> 2002 2003 2004 </a> 2005 <div class="clearfix"></div> 2006 </div> 2007 <div class="clearfix hidden-lg hidden-md"></div> 2008 <div class="col-sm-12 col-md-4 text-center sm-bmargin sm-bpad sm-tmargin homepage_step_3"> 2009 <a class="homepage_step_link center-block" href="http://mythreebids.com/getmatched" title="Our Algorithm Matches Pro's"> 2010 2011 2012 2013 2014 <p class="sm-bmargin"><img src="https://www.mythreebids.com/images/get3.jpg">Our Algorithm Matches Pro's Based to YOUR Needs 100% Free! Click here now!</p> 2015 2016 2017 </a> 2018 <div class="clearfix"></div> 2019 </div> 2020 <div class="clearfix hidden-lg hidden-md"></div> 2021 </div> 2022</div></div> 2023 <div class="homepage-section-3"><div class="clearfix"></div> 2024<div class="content-container top-level-category-stream"> 2025 <div class="clearfix"></div> 2026 <div class="container"> 2027 <div class="row"> 2028 <div class="col-md-12"> 2029 <a href="/categories" class="view-all-btn-desktop hidden-xs btn btn-info"> 2030 View All 2031 </a> 2032 <h2 class="nomargin sm-text-center streaming-title" style="color: rgb(9, 75, 11)"> 2033 <img src="https://www.mythreebids.com/images/pc.png"> 2034 </h2> 2035 <hr> 2036 </div> 2037 <div class="clearfix"></div> 2038<div class="row"> 2039<div class="col-md-12 slickTopCategories"> 2040 <div class="top-category-single col-sm-6 col-md-3 text-center bmargin bpad"> 2041 <div class="pic lazyloader" data-src="/images/HVAC.jpg">
2042 <span class="pic-caption bottom-to-top" onclick> 2043 <h3 class="pic-title bmargin"> 2044 Heating and Cooling 2045 </h3> 2046 <hr> 2047 <a alt="Heating and Cooling" title="Heating and Cooling" href="/heating-and-cooling" title="Heating And Cooling" class="btn btn-success fpad-lg vpad view-more"> 2048 View Category 2049 </a> 2050 </span> 2051 <a aria-label="View Category" alt="Heating and Cooling" title="Heating and Cooling" href="/heating-and-cooling" class="homepage-link-element "></a> 2052 </div> 2053 </div> 2054 <div class="top-category-single col-sm-6 col-md-3 text-center bmargin bpad"> 2055 <div class="pic lazyloader" data-src="/images/DSC_0427.jpg"> 2056 <span class="pic-caption bottom-to-top" onclick> 2057 <h3 class="pic-title bmargin"> 2058 Solar 2059 </h3> 2060 <hr> 2061 <a alt="Solar" title="Solar" href="/solar" title="Solar" class="btn btn-success fpad-lg vpad view-more"> 2062 View Category 2063 </a> 2064 </span> 2065 <a aria-label="View Category" alt="Solar" title="Solar" href="/solar" class="homepage-link-element "></a> 2066 </div> 2067 </div> 2068 <div class="top-category-single col-sm-6 col-md-3 text-center bmargin bpad"> 2069 <div class="pic lazyloader" data-src="/images/roof_shingle.jpg"> 2070 <span class="pic-caption bottom-to-top" onclick> 2071 <h3 class="pic-title bmargin"> 2072 Roofing 2073 </h3> 2074 <hr> 2075 <a alt="Roofing" title="Roofing" href="/roofing" title="Roofing" class="btn btn-success fpad-lg vpad view-more"> 2076 View Category 2077 </a> 2078 </span> 2079 <a aria-label="View Category" alt="Roofing" title="Roofing" href="/roofing" class="homepage-link-element "></a> 2080 </div> 2081 </div> 2082 <div class="top-category-single col-sm-6 col-md-3 text-center bmargin bpad"> 2083 <div class="pic lazyloader" data-src="/images/Home-Remodeling.png"> 2084 <span class="pic-caption bottom-to-top" onclick> 2085 <h3 class="pic-title bmargin"> 2086 Remodeling 2087 </h3> 2088 <hr> 2089 <a alt="Remodeling" title="Remodeling" href="/remodeling" title="Remodeling" class="btn btn-success fpad-lg vpad view-more"> 2090 View Category 2091 </a> 2092 </span> 2093 <a aria-label="View Category" alt="Remodeling" title="Remodeling" href="/remodeling" class="homepage-link-element "></a> 2094 </div> 2095 </div> 2096 <div class="top-category-single col-sm-6 col-md-3 text-center bmargin bpad"> 2097 <div class="pic lazyloader" data-src="/images/paint-cans-58a6d5363df78c345b56a637.jpg"> 2098 <span class="pic-caption bottom-to-top" onclick> 2099 <h3 class="pic-title bmargin"> 2100 Paint 2101 </h3> 2102 <hr> 2103 <a alt="Paint" title="Paint" href="/paint" title="Paint" class="btn btn-success fpad-lg vpad view-more"> 2104 View Category 2105 </a> 2106 </span> 2107 <a aria-label="View Category" alt="Paint" title="Paint" href="/paint" class="homepage-link-element "></a> 2108 </div> 2109 </div> 2110 <div class="top-category-single col-sm-6 col-md-3 text-center bmargin bpad"> 2111 <div class="pic lazyloader" data-src="/images/Electrical-Panel-Repairs.jpeg"> 2112 <span class="pic-caption bottom-to-top" onclick> 2113 <h3 class="pic-title bmargin"> 2114 Electrical 2115 </h3> 2116 <hr> 2117 <a alt="Electrical" title="Electrical" href="/electrical" title="Electrical" class="btn btn-success fpad-lg vpad view-more"> 2118 View Category 2119 </a> 2120 </span> 2121 <a aria-label="View Category" alt="Electrical" title="Electrical" href="/electrical" class="homepage-link-element "></a> 2122 </div> 2123 </div> 2124 <div class="top-category-single col-sm-6 col-md-3 text-center bmargin bpad"> 2125 <div class="pic lazyloader" data-src="/images/commercial-plumbing_01.jpg">
2126 <span class="pic-caption bottom-to-top" onclick> 2127 <h3 class="pic-title bmargin"> 2128 Plumbing 2129 </h3> 2130 <hr> 2131 <a alt="Plumbing" title="Plumbing" href="/plumbing" title="Plumbing" class="btn btn-success fpad-lg vpad view-more"> 2132 View Category 2133 </a> 2134 </span> 2135 <a aria-label="View Category" alt="Plumbing" title="Plumbing" href="/plumbing" class="homepage-link-element "></a> 2136 </div> 2137 </div> 2138 <div class="top-category-single col-sm-6 col-md-3 text-center bmargin bpad"> 2139 <div class="pic lazyloader" data-src="/images/general-contractor-houston-also-specialized-general-contractor-building-decorating-general-contractor-school-houston.jpg"> 2140 <span class="pic-caption bottom-to-top" onclick> 2141 <h3 class="pic-title bmargin"> 2142 General Contractor 2143 </h3> 2144 <hr> 2145 <a alt="General Contractor" title="General Contractor" href="/general-contractor" title="General Contractor" class="btn btn-success fpad-lg vpad view-more"> 2146 View Category 2147 </a> 2148 </span> 2149 <a aria-label="View Category" alt="General Contractor" title="General Contractor" href="/general-contractor" class="homepage-link-element "></a> 2150 </div> 2151 </div> 2152</div> 2153 <div class="clearfix"></div> 2154 <div class="col-md-6"> 2155 <a href="/categories" class="btn btn-lg btn-info btn-block visible-xs-block">View All</a> 2156 </div> 2157 </div> 2158</div> 2159</div> 2160</div> 2161 </div> 2162 <div class="homepage-section-4"><div class="clearfix" id="capa1"></div> 2163<div class="content-container"> 2164 <div class="container"> 2165 <div class="row" id="join-about-modules"> 2166 <div class="col-md-6 homepage-join-module"> 2167 <div class="module fpad-xl text-center nomargin"> 2168 <h2> 2169 Homeowners </h2> 2170 <div> 2171 In addition to vetting contractors, our M3B algorithm uses real market data to help you find up to three of your SMART-MATCHED Home-Improvement professionals or Contractors based on factors that include pricing, warranties, customer service, time of install, and more. It's free and quick! Call or click today!<br> </div> <div class="clearfix"></div> 2172 <a href="/getmatched" class="btn btn-lg tmargin center-block btn-primary"> 2173 100% free for Homeowners - CLICK HERE ! </a> 2174 <div class="clearfix"></div> 2175 </div> 2176 </div> 2177 <div class="clearfix clearfix-lg hidden-md hidden-lg"></div> 2178 <div class="col-md-6 homepage-about-module"> 2179 <div class="module fpad-xl text-center nomargin"> 2180 <h2> 2181 Contractors and Pros </h2> 2182 <div> 2183 Smart Contractors love us! Connect With More Clients that are Matched to YOUR business and spend more time helping your clients rather than searching for them! Meet homeowners that are looking for quality contractors in a way that makes sense for everyone. Find out why we're so different. Approval is fast, and information is free.<p> 2184<a href="http://www.mythreebids.com/join" class="btn btn-lg center-block btn-primary">CLICK HERE and find out more now!</a> </div> <div class="clearfix"></div> 2185 </div> 2186 </div> 2187 </div> 2188 </div> 2189</div></div> 2190 <div class="homepage-section-6"> <div class="clearfix"></div> 2191 <div class="content-container"> 2192 <div class="clearfix"></div> 2193 <div class="container"> 2194 <div class="row"> 2195 <div class="col-md-12"> 2196 <a href="/blog" class="view-all-btn-desktop hidden-xs btn btn-info"> 2197 View All 2198 </a> 2199 <h2 class="nomargin sm-text-center streaming-title" style="color: rgb(9, 75, 11)"> 2200 <img src="https://www.mythreebids.com/images/bb.png"> </h2> 2201 <hr> 2202 </div> 2203 <div class="clearfix"></div> 2204 <div class="row"> 2205 <div class="col-md-12 slickBlogArticles"> 2206 <div class="col-sm-6 col-md-3 text-center bmargin "> 2207 <div class="pic lazyloader" data-src="/uploads/ne
2207ws-pictures/48675--blog-post-image-20221221084533.jpg"> 2208 <span class="pic-caption bottom-to-top" onclick> 2209 <h3 class="pic-title">Benefits of Early Solar Adoption</h3> 2210 <p>The future of residential solar energy in the United States ...</p> 2211 <a href="/blog/benefits-of-early-solar-adoption" class="btn btn-success fpad-lg vpad view-more" aria-label="View More - Benefits of Early Solar Adoption"> 2212 View More 2213 </a> 2214 </span> 2215 <a aria-label="View More" href="/blog/benefits-of-early-solar-adoption" class="homepage-link-element " aria-label="View More - Benefits of Early Solar Adoption"></a> 2216 </div> 2217 </div> 2218 <div class="col-sm-6 col-md-3 text-center bmargin "> 2219 <div class="pic lazyloader" data-src="/uploads/news-pictures/49558-marksbury-blog-post-image-20221124021051.png"> 2220 <span class="pic-caption bottom-to-top" onclick> 2221 <h3 class="pic-title">Plumbing Bath, Plumbers Taunton & Br...</h3> 2222 <p>All Plumbing services Bath, Bristol, Taunton, Somerset,...</p> 2223 <a href="/blog/plumbing-bath-plumbers-taunton-amp-bristol-ads-plumbing" class="btn btn-success fpad-lg vpad view-more" aria-label="View More - Plumbing Bath, Plumbers Taunton & Br..."> 2224 View More 2225 </a> 2226 </span> 2227 <a aria-label="View More" href="/blog/plumbing-bath-plumbers-taunton-amp-bristol-ads-plumbing" class="homepage-link-element " aria-label="View More - Plumbing Bath, Plumbers Taunton & Br..."></a> 2228 </div> 2229 </div> 2230 <div class="col-sm-6 col-md-3 text-center bmargin "> 2231 <div class="pic lazyloader" data-src="/uploads/news-pictures/49874--blog-post-image-20220722031812.jpg"> 2232 <span class="pic-caption bottom-to-top" onclick> 2233 <h3 class="pic-title">Tanishq Accounting and Taxation</h3> 2234 <p>Tanishq Accounting is a leading accounting firm in Victoria....</p> 2235 <a href="/blog/tanishq-accounting-and-taxation" class="btn btn-success fpad-lg vpad view-more" aria-label="View More - Tanishq Accounting and Taxation"> 2236 View More 2237 </a> 2238 </span> 2239 <a aria-label="View More" href="/blog/tanishq-accounting-and-taxation" class="homepage-link-element " aria-label="View More - Tanishq Accounting and Taxation"></a> 2240 </div> 2241 </div> 2242 <div class="col-sm-6 col-md-3 text-center bmargin "> 2243 <div class="pic lazyloader" data-src="/uploads/news-pictures/49839--blog-post-image-20220623033539.jpg"> 2244 <span class="pic-caption bottom-to-top" onclick> 2245 <h3 class="pic-title">My Office Stationers</h3> 2246 <p>My Office Stationers is your one-stop shop for quality ...</p> 2247 <a href="/blog/my-office-stationers" class="btn btn-success fpad-lg vpad view-more" aria-label="View More - My Office Stationers"> 2248 View More 2249 </a> 2250 </span> 2251 <a aria-label="View More" href="/blog/my-office-stationers" class="homepage-link-element " aria-label="View More - My Office Stationers"></a> 2252 </div> 2253 </div> 2254 </div> 2255 </div> 2256 <div class="clearfix"></div> 2257 <div class="col-md-6"> 2258 <a href="blog" 2259 class="btn btn-lg btn-info btn-block visible-xs-block">View All</a> 2260 </div> 2261 <div class="clearfix"></div> 2262 </div> 2263 </div> 2264 </div> 2265 </div> 2266 <div class="content-container custom-homepage-content homepage-section-7"> 2267 <div class="container"> 2268 <p style="text-align: center;"><br></p><p style="text-align: center;"><img src="https://www.mythreebids.com/images/imageedit_6_6100308913.gif"></p> </div> 2269 </div> 2270 </div>
2271<script> 2272(function(){ 2273 if (typeof performance === 'undefined' || performance.navigation.type !== 2) return; 2274 2275 var path = window.location.pathname.split('/').join('_'); 2276 var storedSid = sessionStorage.getItem('select2-sid' + path); 2277 var storedTid = sessionStorage.getItem('select2-tid' + path); 2278 var storedTtid = sessionStorage.getItem('select2-ttid' + path); 2279 2280 if (!storedSid && !storedTid && !storedTtid) return; 2281 2282 window._bdCategoryPreloaded = true; 2283 2284 function waitForSelect2(selector, callback, maxWait) { 2285 maxWait = maxWait || 5000; 2286 var start = Date.now(); 2287 var check = setInterval(function() { 2288 var $el = $(selector); 2289 if ($el.length && $el.data('select2')) { 2290 clearInterval(check); 2291 callback($el); 2292 } else if (Date.now() - start > maxWait) { 2293 clearInterval(check); 2294 } 2295 }, 100); 2296 } 2297 2298 function waitForOptions(selector, callback, maxWait) { 2299 maxWait = maxWait || 5000; 2300 var start = Date.now(); 2301 var check = setInterval(function() { 2302 var $el = $(selector); 2303 if ($el.length && $el.data('select2') && $el.find('option').length > 1) { 2304 clearInterval(check); 2305 callback($el); 2306 } else if (Date.now() - start > maxWait) { 2307 clearInterval(check); 2308 } 2309 }, 100); 2310 } 2311 2312 $(document).ready(function(){ 2313 if (typeof select2OnFormClick !== 'function') return; 2314 2315 // Clean up stale select2 DOM from bfcache before re-initializing 2316 var staleContainers = document.querySelectorAll('.select2-container'); 2317 for (var i = 0; i < staleContainers.length; i++) { 2318 staleContainers[i].parentNode.removeChild(staleContainers[i]); 2319 } 2320 var offscreenSelects = document.querySelectorAll('.select2-offscreen'); 2321 for (var j = 0; j < offscreenSelects.length; j++) { 2322 offscreenSelects[j].className = offscreenSelects[j].className.replace('select2-offscreen', '').trim(); 2323 offscreenSelects[j].style.display = ''; 2324 } 2325 2326 var initPromise = select2OnFormClick(); 2327 var afterInit = function(){ 2328 if (storedSid && $("#sid").length) { 2329 waitForSelect2('#sid', function($sid) { 2330 $sid.select2('val', storedSid); 2331 $sid.trigger('change'); 2332 }); 2333 } 2334 2335 $(".infinite-chained[name='sid']").each(function(){ 2336 var el = this; 2337 if (storedSid && el.id !== 'sid') { 2338 waitForSelect2('#' + el.id, function($el) { 2339 $el.select2('val', storedSid); 2340 $el.trigger('change'); 2341 }); 2342 } 2343 }); 2344 2345 if (storedTid) { 2346 waitForOptions('#tid', function($tid) { 2347 $tid.select2('val', storedTid); 2348 $tid.trigger('change'); 2349 }); 2350 } 2351 2352 if (storedTtid) { 2353 waitForOptions('#ttid', function($ttid) { 2354 $ttid.select2('val', storedTtid); 2355 }); 2356 } 2357 }; 2358 2359 if (initPromise && typeof initPromise.then === 'function') { 2360 initPromise.then(afterInit); 2361 } else { 2362 setTimeout(afterInit, 500); 2363 } 2364 }); 2365})(); 2366</script>
2366 <div class="clearfix"></div> 2367 </div> 2368</div> 2369</main> 2370<!-- End Content --> 2371<div class="clearfix footer-clear-element "></div> 2372<!-- 2373 2374IMPORTANT: This widget contains real Adsense code as a sample to show how this widget functions. Please replace the current Adsense code below with your own code in order to generate revenue from this ad space. 2375 2376--> 2377<div class="clearfix"></div> 2378<div class="content-container banner-ad-unit footer-banner-container"> 2379 2380 <div class="container text-center banner-ad-unit footer-banner-ad"> 2381 2382 <div class="clearfix clearfix-lg"></div> 2383 <!-- HVAC Concord Leaderboard [async] -->
2384<script type="text/javascript">if (!window.AdButler){(function(){var s = document.createElement("script"); s.async = true; s.type = "text/javascript";s.src = 'https://servedbyadbutler.com/app.js';var n = document.getElementsByTagName("script")[0]; n.parentNode.insertBefore(s, n);}());}</script>
vendor: 2 bytes, line 2384
2384
2385<script type="text/javascript"> 2386var AdButler = AdButler || {}; AdButler.ads = AdButler.ads || []; 2387var abkw = window.abkw || ''; 2388var plc320379 = window.plc320379 || 0; 2389document.write('<'+'div id="placement_320379_'+plc320379+'"></'+'div>'); 2390AdButler.ads.push({handler: function(opt){ AdButler.register(173031, 320379, [728,90], 'placement_320379_'+opt.place, opt); }, opt: { place: plc320379++, keywords: abkw, domain: 'servedbyadbutler.com', click:'CLICK_MACRO_PLACEHOLDER' }}); 2391</script>
2391 2392 2393<!-- Bottom Results Page [async] -->
2394<script type="text/javascript">if (!window.AdButler){(function(){var s = document.createElement("script"); s.async = true; s.type = "text/javascript";s.src = 'https://servedbyadbutler.com/app.js';var n = document.getElementsByTagName("script")[0]; n.parentNode.insertBefore(s, n);}());}</script>
vendor: 2 bytes, line 2394
2394
2395<script type="text/javascript"> 2396var AdButler = AdButler || {}; AdButler.ads = AdButler.ads || []; 2397var abkw = window.abkw || ''; 2398var plc320121 = window.plc320121 || 0; 2399document.write('<'+'div id="placement_320121_'+plc320121+'"></'+'div>'); 2400AdButler.ads.push({handler: function(opt){ AdButler.register(173031, 320121, [728,90], 'placement_320121_'+opt.place, opt); }, opt: { place: plc320121++, keywords: abkw, domain: 'servedbyadbutler.com', click:'CLICK_MACRO_PLACEHOLDER' }}); 2401</script>
2401 <div class="clearfix clearfix-lg"></div> 2402 </div> 2403</div> 2404<div class="clearfix"></div> 2405<style type='text/css'> .newsletter_row input[type="email"] { 2406 float: none; 2407 margin-left: auto; 2408 margin-right: auto; 2409 width: 62% !important; 2410} </style><div class="content-container newsletter_row"> 2411 <div class="container text-center vpad"> 2412 <div class="col-md-12 xs-nopad"> 2413 <style type='text/css'> @media only screen and (min-width: 768px) { 2414 .newsletter_footer_button { 2415 display: flex; 2416 align-items: center; 2417 margin-left: auto; 2418 margin-right: auto; 2419 } 2420} </style><a href="#" data-toggle="modal" data-target="#newsletter_subscribe_modal" class="btn btn-lg newsletter_footer_button col-xs-12 col-md-6 nofloat fpad bold"> 2421 <div class="col-sm-6 nopad newsletter_button_left"> 2422 Join Our Newsletter 2423 </div> 2424 <div class="col-sm-6 nopad newsletter_button_right"> 2425 Click to Subscribe 2426 <i class='fa fa-chevron-circle-right fa-fw'></i> 2427 </div> 2428 2429 <div class="clearfix"></div> 2430</a> 2431 </div> 2432 </div> 2433</div><div class="footer"> 2434 <div class="container"> 2435 <div class="row"> 2436 <ul class="footer_menu sm-text-center"> 2437 <li class='col-md-5'><a href='/aboutus' id='link157' class='head'>About Us</a><ul><li class=''><a href='/aboutus' id='link158' class='content'>My Three Bids is for every smart Home Owner who is looking to find local quality Contractors using more data than simply "Location" and "Type of Project". Our 100% Free service is fast and easy to use. Call or click today, and get up to three bids free!</a></li></ul></li><li class='col-md-2 col-md-offset-1'><span id='link159' class='head'> Why M3B?</span><ul><li class=''><a href='/different' id='link160'>How We're Different</a></li><li class=''><a href='/vetting' id='link301'>Contractor Vetting</a></li><li class=''><a href='/blog' id='link353'>M3B Blog</a></li><li class=''><a href='https://www.mythreebids.com/getmatched' id='link304'>Get Matched Now</a></li></ul></li><li class='col-md-2'><span id='link165' class='head'> Support</span><ul><li class=''><a href='/join' id='link303'>Pros Join Here</a></li><li class=''><a href='https://www.mythreebids.com/other/my-three-bids/reviews/43' id='link354'>Reviews</a></li><li class=''><a href='/about/terms' id='link300'>Terms of Service</a></li><li class=''><a href='/login/retrieval' id='link166'>Reset Password </a></li></ul></li><li class='col-md-2'><span id='link162' class='head'> Company</span><ul><li class=''><a href='https://www.glassdoor.com/Reviews/My-Three-Bids-Reviews-E2103395.htm' id='link352'>Careers</a></li><li class=''><a href='/Press' id='link357'>Press</a></li><li class=''><a href='/aboutus' id='link163'>About Us</a></li><li class=''><a href='/about/contact' id='link167'>Contact Us</a></li><li class=''><span id='link297'> <p><style>.network-icon.twitter,.network-icon.tiktok{background:#000}</style> 2438<div class="list-social-links"> 2439 <a class="network-icon contact" href="/about/contact" title="Contact Us My Three Bids"> 2440 <i class="bi bi-envelope"></i> 2441 </a> 2442 2443 2444 2445 <a class="network-icon instagram" href="http://www.instagram.com/mythreebids" target="_blank" title="My Three Bids Instagram"> 2446 <i class="bi bi-instagram"></i> 2447 </a> 2448 <div class="clearfix"></div> 2449</div></span></li></ul></li><li class=''><span id='link349'> </span></li><li class='' "float:center;"><span id='link298'> <center><img src="https://www.mythreebids.com/images/imageedit_13_6010173607.gif"> 2450<p></center></span></li> </ul> 2451 </div> 2452 <div class="col-md-12 fpad fmargin small text-center footer_terms"> 2453 © 2026 <a title="My Three Bids" href="/"> 2454 My Three Bids </a> 2455 All Rights Reserved. 2456 <div class="inline-block"> 2457 <a title="Terms Of Use - My Three Bids" href="/about/terms"> 2458 Terms Of Use 2459 </a> 2460 | 2461 <a title="Don't Sell My Info" href="/dontsellmyinfo"> 2462 Don't Sell My Info 2463 </a> 2464 | 2465 <a title="Privacy Policy - My Three Bids" href="/about/privacy"> 2466 Privacy Policy 2467 </a> 2468 </div> 2469</div> 2470 </div> 2471</div><style type='text/css'> .scrollup { 2472 border-radius: 3px; 2473 width: 40px; 2474 height: 40px; 2475 opacity: 0.4; 2476 position: fixed; 2477 bottom: 30px; 2478 right: 30px; 2479 display: none; 2480 background: rgba(119, 119, 119, 0.8); 2481 z-index: 1000000; 2482} 2483.scrollup i { 2484 font-size: 36px; 2485 color: white; 2486 position: relative; 2487 top: 0px; 2488 left: 10px; 2489} </style> 2490 2491 2492 <link rel="stylesheet" type="text/css" href="https://www.optimizecdn.com/directory/cdn/assets/bootstrap/limonte-sweetalert2/6.11.2/sweetalert2.min.css">
2493<script src="https://www.optimizecdn.com/directory/cdn/assets/bootstrap/limonte-sweetalert2/6.11.2/sweetalert2.min.js"></script>
2493 2494
2495<script> 2496 function clearContent(thisObj){ 2497 var size; 2498 if(thisObj.hasClass('input-sm') || thisObj.parents('.input-group').hasClass('input-group-sm')){ 2499 size = "small"; 2500 } else if (thisObj.hasClass('input-lg') || thisObj.parents('.input-group').hasClass('large-autosuggest')){ 2501 size = "large"; 2502 } else { 2503 size = "medium"; 2504 } 2505 if(!thisObj.parent().hasClass('input_wrapper')){ 2506 if(thisObj.parent().hasClass('input-group-sm')){ 2507 thisObj.wrap('<span class="input-group-sm input_wrapper"></span>'); 2508 } else if (thisObj.parent().hasClass('input-group-lg')){ 2509 thisObj.wrap('<span class="input-group-lg input_wrapper"></span>'); 2510 } else { 2511 thisObj.wrap('<span class="input_wrapper"></span>'); 2512 } 2513 } 2514 if(thisObj.val() != ""){ 2515 if(thisObj.hasClass('googleSuggest')){ 2516 thisObj.parent().find('.fill_location').remove(); 2517 } 2518 if (!thisObj.parent().find('.clear_content').length){ 2519 thisObj.parent().append(`<span class="clear_content ${size}"><i class="fa fa-times-circle" aria-hidden="true"></i></span>`); 2520 if (thisObj.hasClass("tt-input")) { 2521 thisObj.focus(); 2522 } 2523 2524 } 2525 } 2526 } 2527 2528 $(document).on('click', '.drp-buttons .applyBtn', function(){ 2529 clearContent($(".dateRange input")); 2530 }); 2531 2532 $('.sm-autosuggest input, .googleSuggest, .large-autosuggest input, .md-autosuggest input, .normal-autosuggest input, .google-writen-location, .dateRange input').keyup(function(){ 2533 clearContent($(this)); 2534 }); 2535 2536 $(document).ready(function(){ 2537 $('.sm-autosuggest input, input.googleSuggest, .large-autosuggest input, .md-autosuggest input, .normal-autosuggest input, .google-writen-location, .dateRange input').each(function(){ 2538 clearContent($(this)); 2539 }) 2540 }) 2541 2542 $(document).on('click', '.clear_content', function(){ 2543 $(this).parent().find('input').val(''); 2544 //tt-input its a class for typeahead auto-suggest 2545 if ($(this).parent().find('input').hasClass("tt-input")) { 2546 $(this).parent().find('input').typeahead('val',''); 2547 } 2548 clearContent($(this).parent().find('input')); 2549 $(this).remove(); 2550 }); 2551 2552 $(window).on('load', function () { 2553 setTimeout(function() { 2554 // add missing href attribute to multi-category options in search modules 2555 $('.bootstrap-select.show-tick .dropdown-menu a').attr('href', '#'); 2556 }, 2000); 2557 }); 2558</script>
2558 2559 2560 2561 2562<a href="#" class="scrollup" title="scrollup"> 2563 <i class="fa fa-caret-up" aria-hidden="true"></i> 2564</a>
2565<script> 2566 $(document).ready(function () { 2567 2568 if ($('.navbar-default').length > 0) { 2569 var menu = $('.navbar-default'); 2570 var origOffsetY = menu.offset().top; 2571 2572 function scroll() { 2573 2574 if ($(window).scrollTop() > origOffsetY) { 2575 $('.navbar-default').addClass('navbar-fixed-top'); 2576 $('.navbar-default').addClass('transparent_menu'); 2577 2578 } else { 2579 $('.navbar-default').removeClass('navbar-fixed-top'); 2580 $('.navbar-default').removeClass('transparent_menu'); 2581 } 2582 } 2583 document.onscroll = scroll; 2584 }; 2585 }); 2586 $(document).ready(function(){ 2587 // .progressbar() comes from bootstrap-progressbar.min.js, loaded only by widgets 1236/1318. 2588 // Elsewhere it used to fall through to jQuery UI's; jQuery UI is no longer global, so an 2589 // unguarded call throws and kills the rest of this ready() handler (scrollup, crop button). 2590 if ($.fn.progressbar) { 2591 $('.progress .progress-bar').progressbar({ 2592 display_text: 'fill' 2593 }); 2594 } 2595 $(window).scroll(function(){ 2596 2597 if ($(this).scrollTop() > 600) { 2598 $('.scrollup').fadeIn(); 2599 2600 } else { 2601 $('.scrollup').fadeOut(); 2602 } 2603 }); 2604 $('.scrollup').click(function(){ 2605 $("html, body").animate({ 2606 scrollTop: 0 2607 }, 600); 2608 return false; 2609 }); 2610 $('#cropButton').click(function(){ 2611 var iframe = $("#cropiFrame"); 2612 iframe.attr("src", iframe.data("src")); 2613 }); 2614 }); 2615</script>
2615 2616 <!-- Facebook Javascript SDK --> 2617
2617<script> 2618 function loadFBjs(delay = 500) { 2619 return new Promise((resolve, reject) => { 2620 if (window["fbjs"]) { 2621 resolve("already load FB"); 2622 } 2623 let body = document.getElementsByTagName("body")[0] 2624 let divFbRoot = document.createElement("div"); 2625 divFbRoot.id = 'fb-root'; 2626 2627 body.prepend(divFbRoot); 2628 setTimeout(function () { 2629 (function (d, s, id) { 2630 var js, fjs = d.getElementsByTagName(s)[0]; 2631 if (d.getElementById(id)) return; 2632 js = d.createElement(s); 2633 js.id = id; 2634 js.async = false; 2635 js.src = "//connect.facebook.net/en_US/sdk.js#version=v24.0&xfbml=1&appId=235873637177070&status=true&cookie=true&"; 2636 fjs.parentNode.insertBefore(js, fjs); 2637 js.onload = function () { 2638 window["fbjs"] = true; 2639 resolve("ok"); 2640 }; 2641 }(document, 'script', 'facebook-jssdk')); 2642 }, delay) 2643 }); 2644 } 2645 </script>
2645 2646 2647
2647<script type="text/javascript"> 2648 /* CT dissolved its county governments in 1960, so Google returns its 8 counties as 2649 colloquial_area instead of administrative_area_level_2 â they must never reach a 2650 city field. Google translates the component name to the site language, so the 2651 language-stable place_id is checked first and the word list only backs it up. */ 2652 if (typeof window.bdIsColloquialCounty !== 'function') { 2653 window.bdIsColloquialCounty = function (componentName, resultPlaceId) { 2654 var countyPlaceIds = [ 2655 'ChIJWRM2Nakw5okRoTCxHvz_5xw', /* Middlesex County, CT */ 2656 'ChIJmeTbuDYH6IkR3xgeNvszpgg', /* Fairfield County, CT */ 2657 'ChIJiT24cvvP54kR2fSPHkp0Akc', /* New Haven County, CT */ 2658 'ChIJvYe7N7eQ54kRL6nZaXRwPkI', /* Litchfield County, CT */ 2659 'ChIJtxC3p6qs54kRIvK-2bctar0', /* Hartford County, CT */ 2660 'ChIJj-lvZQli5okRGCuGRd6xKt0', /* Tolland County, CT */ 2661 'ChIJRWKqeLdi5okRLXWDlSEGeTY', /* Windham County, CT */ 2662 'ChIJwTIQbvVv5okRU5_gSJczUTQ' /* New London County, CT */ 2663 ]; 2664 2665 if (typeof resultPlaceId === 'string' && resultPlaceId !== '' 2666 && countyPlaceIds.indexOf(resultPlaceId) !== -1) { 2667 return true; 2668 } 2669 2670 if (typeof componentName !== 'string' || componentName === '') { 2671 return false; 2672 } 2673 2674 var name = componentName.toLowerCase(); 2675 2676 /* Only unambiguous county words â generic ones (region, district) would strip 2677 legitimate colloquial areas, and their languages already match on place_id. 2678 Word-boundary matched so names like "Countyline, OK" are left alone. */ 2679 var wordTokens = ['county', 'condado', 'comté', 'contea', 2680 'comitatul', 'hrabstwo', 'megye', 'konderria']; 2681 var isAlnum = function (ch) { 2682 return (ch >= 'a' && ch <= 'z') || (ch >= '0' && ch <= '9'); 2683 }; 2684 2685 for (var t = 0; t < wordTokens.length; t++) { 2686 var token = wordTokens[t]; 2687 var from = 0; 2688 while (true) { 2689 var at = name.indexOf(token, from); 2690 if (at === -1) { 2691 break; 2692 } 2693 var before = (at > 0) ? name.charAt(at - 1) : ' '; 2694 var after = ((at + token.length) < name.length) ? name.charAt(at + token.length) : ' '; 2695 if (!isAlnum(before) && !isAlnum(after)) { 2696 return true; 2697 } 2698 from = at + 1; 2699 } 2700 } 2701 2702 /* Non-latin scripts have no alphanumeric word boundary. */ 2703 var scriptTokens = ['каÑнÑи', 'کاؤÙÙ¹Û', 'à¤à¤¾à¤à¤à¤à¥', 'ì¹´ì´í°']; 2704 for (var s = 0; s < scriptTokens.length; s++) { 2705 if (name.indexOf(scriptTokens[s]) !== -1) { 2706 return true; 2707 } 2708 } 2709 2710 return false; 2711 }; 2712 } 2713 2714 // Try to load coordinates from sessionStorage on page load 2715 var vlat = 0; 2716 var vlon = 0; 2717 try { 2718 var savedLat = sessionStorage.getItem('bd_geolocation_lat'); 2719 var savedLon = sessionStorage.getItem('bd_geolocation_lon'); 2720 if (savedLat && savedLon) { 2721 vlat = parseFloat(savedLat); 2722 vlon = parseFloat(savedLon); 2723 } 2724 } catch(e) {} 2725 var isSubmit = false; 2726 var isGettingLocation = false; // Flag to prevent multiple simultaneous geolocation requests 2727 2728 // Function to save coordinates to sessionStorage 2729 function saveCoordinatesToSession(lat, lon) { 2730 try { 2731 sessionStorage.setItem('bd_geolocation_lat', lat.toString()); 2732 sessionStorage.setItem('bd_geolocation_lon', lon.toString()); 2733 } catch(e) {} 2734 } 2735 2736 // Function to get coordinates from sessionStorage if current ones are 0 2737 function getCoordinatesFromSession() { 2738 if (vlat === 0 && vlon === 0) { 2739 try { 2740 var savedLat = sessionStorage.getItem('bd_geolocation_lat'); 2741 var savedLon = sessionStorage.getItem('bd_geolocation_lon'); 2742 if (savedLat && savedLon) { 2743 vlat = parseFloat(savedLat); 2744 vlon = parseFloat(savedLon); 2745 return true; 2746 } 2747 } catch(e) {} 2748 } 2749 return false; 2750 } 2751 var cityTypes = [ 2752 'colloquial_area', 2753 'locality', 2754 'sublocality', 2755 'sublocality_level_1', 2756 'sublocality_level_2', 2757 'sublocality_level_3', 2758 'sublocality_level_4', 2759 'sublocality_level_5', 2760 'neighborhood', 2761 'ward', 2762 'postal_town' 2763 ]; 2764 2765 var postalTypes = [ 2766 'postal_code', 2767 'postal_code_prefix', 2768 'postal_code_suffix', 2769 'street_number', 2770 'premise', 2771 'subpremise', 2772 'route', 2773 'intersection', 2774 'street_address', 2775 'floor', 2776 'room', 2777 'post_box', 2778 'delivery_address' 2779 ]; 2780 2781 var isSubmitting = false; 2782 window.cachedSelectedOption = [{ 'typed_location': '' }]; 2783 window.isSubmittingMainSearch = false; 2784 2785 document.addEventListener('DOMContentLoaded', () => { 2786 let isSubmitting = false; // Add flag at the top level 2787 2788 setTimeout(()=>{ 2789 let googleSuggestForm = document.querySelectorAll('.googleSuggest,.google-writen-location,input[name="lead_location"],.fill_location'); 2790 if (typeof googleSuggestForm != "undefined") { 2791 for (let i = 0; i < googleSuggestForm.length; i++) { 2792 let closestForm = googleSuggestForm[i].closest('form'); 2793 if(typeof closestForm != "undefined" && closestForm != null){ 2794 closestForm.addEventListener('focusin', googleMapOnFormClick, false); 2795 2796 }else{ 2797 googleSuggestForm[i].addEventListener('input', googleMapOnFormClick, false); 2798 } 2799 googleSuggestForm[i].addEventListener('click', googleMapOnFormClick, false); 2800 } 2801 } 2802 },200);
2803 2804 $('.website-search button[type=submit]').click(async function (e) { 2805 e.preventDefault(); // Prevent the default submit action 2806 var nativeForm = $(this).closest('form')[0]; 2807 if (nativeForm && typeof nativeForm.reportValidity === 'function' && !nativeForm.reportValidity()) { 2808 return false; 2809 } 2810 await googleMapOnFormClick(); 2811 $(this).closest('form').submit(); 2812 }); 2813 }); 2814 window['gmapClick'] = false; 2815 function googleMapOnFormClick() { 2816 if(window.gmapClick){ 2817 return; 2818 } 2819 window.gmapClick = true; 2820 2821 return new Promise((resolve, reject) => { 2822 window.isSubmittingMainSearch = false; 2823 let googleSuggestForm = document.querySelectorAll('.googleSuggest, .google-writen-location, input[name="lead_location"], .fill_location'); 2824 let mapUri = "https://maps.googleapis.com/maps/api/js?v=quarterly&libraries=places®ion=US&callback=initializeG&language=en&key=AIzaSyCCwTRssV2ULLZZVmwRimtzkaNB0BFfJS0"; 2825 2826 if (typeof google !== "undefined" && google.hasOwnProperty('maps')) { 2827 resolve('already loaded'); 2828 return; 2829 } 2830 2831 let loadMapScriptAsync = function (uri) { 2832 return new Promise((resolve, reject) => { 2833 let script = document.createElement('script'); 2834 script.type = 'text/javascript'; 2835 script.src = uri; 2836 script.async = true; 2837 script.onload = function () { 2838 resolve("ok"); 2839 }; 2840 script.onerror = function () { 2841 reject("Failed to load Google Maps script."); 2842 }; 2843 document.head.appendChild(script); 2844 }); 2845 }; 2846 2847 loadMapScriptAsync(mapUri) 2848 .then(() => { 2849 resolve(); 2850 }) 2851 .catch((error) => { 2852 console.error(error); 2853 reject(); 2854 }); 2855 2856 }); 2857 } 2858 2859 function initializeG() { 2860 var geocoder; 2861 //This piece of code will create an autosuggest for every input with the class "googleSuggest" 2862 var counter = 1; 2863 var inputsArray = []; 2864 window.cachedSelectedOption = [{ 'typed_location': '' }]; 2865 let mapExists = document.querySelectorAll('[id^="map"]').length > 0; 2866 const functionsToInvoke = { 2867 setJsMap: true, 2868 setJsMapOverview: mapExists, 2869 setJsMapSR: mapExists, 2870 setJsMapSidebar: mapExists 2871 }; 2872 if (window['maps_loaded'] !== true) { 2873 for (let func in functionsToInvoke) { 2874 if (typeof window[func] === 'function' && functionsToInvoke[func]) { 2875 window['maps_loaded'] = true; 2876 window[func](); 2877 } 2878 } 2879 } 2880 $(".googleSuggest").each(function () { 2881 //get the id from the input to be the unique identifier for each autocomplete 2882 var inputId = $(this).attr("id"); 2883 var inputElement = $(this); 2884 inputsArray[counter] = /** @type {HTMLInputElement} */( 2885 document.getElementById('' + inputId)); 2886 const mainCountry = 'US'; 2887 const inputOptions = { 2888 fields: ['address_components', 'adr_address','formatted_address', 'geometry', 'icon', 'name','place_id','plus_code','type'], 2889 types: ['geocode'] 2890 } 2891 const language = "en"; 2892 2893 if (language) { 2894 inputOptions.language = language; 2895 } 2896 if (mainCountry) { 2897 inputOptions.componentRestrictions = {country: mainCountry}; 2898 inputOptions.region = mainCountry; 2899 } 2900 2901 var autocomplete = new google.maps.places.Autocomplete(inputsArray[counter], inputOptions); 2902 google.maps.event.addListener(autocomplete, 'place_changed', function () { 2903 const place = autocomplete.getPlace(); 2904 2905 cachedSelectedOption = []; 2906 cachedSelectedOption.push(place); 2907 2908 cachedSelectedOption[0]['typed_location'] = inputElement.val(); 2909 /* if(cachedSelectedOption[0]['adr_address']){ 2910 let cleanLocation = cachedSelectedOption[0]['adr_address'].replace(/<[^>]*>/g, ''); 2911 cachedSelectedOption[0]['typed_location'] = cleanLocation; 2912 inputElement.val(cleanLocation); 2913 }*/ 2914 if (cachedSelectedOption[0]['address_components'] == undefined) { 2915 cachedSelectedOption = []; 2916 var emptyObj = { 2917 'typed_location': '' 2918 }; 2919 cachedSelectedOption.push(emptyObj); 2920 } 2921 }); 2922 //the code that prevents the submition when hit enter on a google location autocomplete item 2923 inputElement.keydown( function (e) { 2924 if (e.keyCode == 13) { 2925 var pacCounter = 0; 2926 //need to run a loop to check each pac container 2927 $('.pac-container').each(function () { 2928 2929 if ($(this).css("display") != "none") { 2930 pacCounter++; 2931 } 2932 }); 2933 if (pacCounter > 0) { 2934 e.preventDefault(); 2935 } 2936 } 2937 }); 2938 counter++; 2939 }); 2940 2941 //triggers every time a form with the id website-search is trigered 2942 $('.website-search').submit(function (e) { 2943 2944 var currentForm = $(this); 2945 var locationInput = $(this).find(".googleLocation"); 2946 var $submitButton = currentForm.find('input[type=submit], button[type=submit]'); 2947 2948 2949 if (locationInput.val() != "" && typeof locationInput.val() != 'undefined') { 2950 2951 // Set submitting flag 2952 window.isSubmittingMainSearch = true; 2953 $submitButton.prop('disabled', true); 2954 2955 e.preventDefault(); 2956 //this variable has the main country of the site 2957 var form = currentForm; 2958 var urlGET = form.serialize(); 2959 var formActionUrl = form.attr("action"); 2960 var locationValue = locationInput.val(); 2961 2962 2963 2964 const mainCountry = 'US'; 2965 const inputOptions = { 2966 address:locationValue 2967 } 2968 const language = "en"; 2969 2970 if (language) { 2971 inputOptions.language = language; 2972 } 2973 if (mainCountry) { 2974 inputOptions.componentRestrictions = {country: mainCountry}; 2975 inputOptions.region = mainCountry; 2976 } 2977 2978 if (typeof cachedSelectedOption == 'undefined') { 2979 var emptyForm = { 2980 'typed_location': '' 2981 }; 2982 cachedSelectedOption.push(emptyForm); 2983 } 2984 2985 if (locationValue != cachedSelectedOption[0]['typed_location']) { 2986 geocoder = new google.maps.Geocoder(); 2987 geocoder.geocode(inputOptions, function (results, status) { 2988 2989 //if the google response of the geocoding was successful it will use that info to build the url for the new search 2990 if (status == google.maps.GeocoderStatus.OK) { 2991 parseInfoToSearch(results, urlGET, formActionUrl); 2992 2993 } else { 2994 var urlPath = formActionUrl; 2995 var redirect = urlPath + "?" + urlGET; 2996 //will redirect the page using the new url that has been constructed 2997 window.location.href = redirect; 2998 } 2999 }); 3000 3001 } else { 3002 parseInfoToSearch(cachedSelectedOption, urlGET, formActionUrl); 3003 } 3004 } 3005 }); 3006 3007 3008 //check if a map has been loaded 3009 if ($('#map-canvas').length > 0) { 3010 var cssHideLogo = "<style>.pac-container:after { /* Disclaimer: not needed to show 'powered by Google' if also a Google Map is shown */background-image: none !important;height: 0px;}</style>"; 3011 $('body').append(cssHideLogo); 3012 } else { 3013 var cssHideLogo = "<style>.pac-container:after { /* Disclaimer: not needed to show 'powered by Google' if also a Google Map is shown */background-image: block !important;height: 16px;}</style>"; 3014 $('body').append(cssHideLogo); 3015 } 3016
3017 if (geocodeVisitorsSetting == 1 && geocodingMethod === "IP") { 3018 populateSearchFields(); 3019 } 3020 3021 if($('.googleSuggest').val() == ""){ 3022 populateSearchFields(); 3023 } 3024 3025 var geocodeVisitorsSetting = '0'; 3026 var geocodingMethod = 'HTML5'; 3027 3028 //check the advanced setting "geocode_visitor_default" if set to 1 will override the "location_value" values to the formatted desire address from the google reverse geocoding response 3029 3030 var vlon = ''; 3031 var vlat = ''; 3032 } 3033 3034 function switchPlaceID(placeId,urlGET, formActionUrl) { 3035 let request = { 3036 placeId: placeId, 3037 fields: ['address_components', 'adr_address', 'formatted_address', 'geometry', 'icon', 'name', 'place_id', 'plus_code', 'type'], 3038 }; 3039 3040 let service = new google.maps.places.PlacesService(document.createElement('div')); 3041 service.getDetails(request, function(place, status) { 3042 if (status === google.maps.places.PlacesServiceStatus.OK) { 3043 let dataArray = []; 3044 dataArray.push(place); 3045 parseInfoToSearch(dataArray, urlGET, formActionUrl); 3046 } else { 3047 console.error('Place details request failed with status:', status); 3048 } 3049 }); 3050 } 3051 3052 function parseInfoToSearch(results, urlGET, formActionUrl) { 3053 var urlSearchParams = new URLSearchParams(urlGET); 3054 var parameters = {}; 3055 var addressComponentsArray = []; 3056 if (results.length > 1) { 3057 if(urlSearchParams.get("location_value")?.toLowerCase() === "nebraska" && results.length === 2){ 3058 let tempResult = results[0]; 3059 results[0] = results[1]; 3060 results[1] = tempResult; 3061 } 3062 for (let i = 0; i < results.length; i++) { 3063 if (results[i].types[0] === 'natural_feature' || 3064 results[i].types[0] === 'airport' || 3065 results[i].types[0] === 'point_of_interest' || 3066 results[i].types[0] === 'establishment' || 3067 results[i].types[0] === 'political' || 3068 results[i].types[0] === 'park') { 3069 results.splice(i, 1); 3070 } 3071 } 3072 } 3073 var adComLength = results[0].address_components.length; 3074 3075 if(results[0].place_id == 'ChIJmQrivHKsQjQR4MIK3c41aj8'){ 3076 switchPlaceID('ChIJi73bYWusQjQRgqQGXK260bw',urlGET, formActionUrl); 3077 return; 3078 } 3079 sessionStorage.setItem("google_result",JSON.stringify(results)); 3080 3081 3082 var foundPostalType = results[0].types.find(type => postalTypes.includes(type)); 3083 var foundCityType = results[0].types.find(type => cityTypes.includes(type)); 3084 3085 //loop that will build the array with the address components and will get the short name of country and administrative area level 1 3086 for (var i = 0; i < adComLength; i++) { 3087 3088 if (results[0].address_components[i]['types'][0] == "country") { 3089 parameters.country_sn = results[0].address_components[i]['short_name']; 3090 } 3091 if (results[0].address_components[i]['types'][0] == "administrative_area_level_1") { 3092 parameters.adm_lvl_1_sn = results[0].address_components[i]['short_name']; 3093 } 3094 if (results[0].address_components[i]['types'][0] == "administrative_area_level_1") { 3095 parameters.stateSearchLN = results[0].address_components[i]['long_name']; 3096 } 3097 if (results[0].address_components[i]['types'][0] == "administrative_area_level_2") { 3098 /* short_name is what the service-area writer stores in 3099 service_areas.county_sn, so the search must send the same 3100 form or county matching breaks wherever short != long. */ 3101 parameters.county_sn = results[0].address_components[i]['short_name']; 3102 } 3103 if ($.inArray(results[0].address_components[i]['types'][0], cityTypes) !== -1 && (foundCityType || foundPostalType ) ) { 3104 var addrType = results[0].address_components[i]['types'][0]; 3105 var addrLong = results[0].address_components[i]['long_name']; 3106 /* CT counties come back as colloquial_area â keep them out of parameters.city. */ 3107 if (addrType !== 'colloquial_area' 3108 || !window.bdIsColloquialCounty(addrLong, results[0].place_id)) { 3109 parameters.city = addrLong; 3110 } 3111 } 3112 if (results[0].address_components[i]['types'][0] == "postal_code" || results[0].address_components[i]['types'][0] == "postal_code_prefix") { 3113 parameters.postal_code = results[0].address_components[i]['long_name']; 3114 } 3115 } 3116 3117 3118 // Filter out 'political' from result types - use more specific type when available 3119 // Same pattern as BD-directory-maps-typePolitical (PR #5642) 3120 if (results[0].types && results[0].types.length > 1 && results[0].types[0] === 'political') { 3121 results[0].types.splice(0, 1); 3122 } 3123 3124 // Pick the most specific type from results, skip "political" (too generic) 3125 parameters.location_type = results[0].types[0]; 3126 for (var t = 0; t < results[0].types.length; t++) { 3127 if (results[0].types[t] != 'political') { 3128 parameters.location_type = results[0].types[t]; 3129 break; 3130 } 3131 } 3132 3133 // When searching by city/locality, omit postal_code â Google returns 3134 // a partial zip prefix that doesn't match all members in the city 3135 if (parameters.location_type == 'locality' && parameters.postal_code) { 3136 delete parameters.postal_code; 3137 } 3138 3139 if (parameters.adm_lvl_1_sn != '') { 3140 parameters.stateSearch = parameters.adm_lvl_1_sn; 3141 } 3142 if (parameters.country_sn == "GB") { 3143 delete parameters.adm_lvl_1_sn; 3144 } 3145 3146 //will check if the response had the bounds parameters 3147 //if it had it will add the south west and north east parameters to the new url 3148 if (results[0].geometry.hasOwnProperty('bounds') || results[0].geometry.hasOwnProperty('viewport')) { 3149 3150 if (results[0].geometry.hasOwnProperty('bounds')) { 3151 var boundsResponse = results[0].geometry.bounds; 3152 3153 } else { 3154 var boundsResponse = results[0].geometry.viewport; 3155 } 3156 parameters.swlat = boundsResponse.getSouthWest
3156().lat(); 3157 parameters.nelat = boundsResponse.getNorthEast().lat(); 3158 parameters.swlng = boundsResponse.getSouthWest().lng(); 3159 parameters.nelng = boundsResponse.getNorthEast().lng(); 3160 3161 //if there were not bounds parameters in the response it will send the parameter fsearch as radius so a radius search will be performed because of lack of info for this location 3162 } else { 3163 parameters.fsearch = "radius"; 3164 } 3165 var locationCenterResponse = results[0].geometry.location; 3166 parameters.lat = locationCenterResponse.lat(); 3167 parameters.lng = locationCenterResponse.lng(); 3168 parameters.faddress = results[0].formatted_address; 3169 parameters.place_id = results[0].place_id; 3170 var formatParameters = $.param(parameters); 3171 urlGET = urlGET + "&" + formatParameters; 3172 var urlPath = formActionUrl; 3173 var redirect = urlPath + "?" + urlGET; 3174 //will redirect the page using the new url that has been constructed 3175 window.location.href = redirect; 3176 } 3177 function populateSearchFields() { 3178 var prePopulateLocationSetting = '0'; 3179 var geolocationMethod = 'HTML5'; 3180 3181 // If geolocation is in progress and we don't have coordinates yet, wait a bit 3182 if (isGettingLocation && (vlat === 0 || vlon === 0)) { 3183 var waitStartTime = performance.now(); 3184 var waitInterval = setInterval(function() { 3185 if (!isGettingLocation || (vlat !== 0 && vlon !== 0)) { 3186 clearInterval(waitInterval); 3187 // Retry after a short delay to ensure coordinates are set 3188 setTimeout(function() { 3189 populateSearchFields(); 3190 }, 100); 3191 } else if ((performance.now() - waitStartTime) > 10000) { 3192 // Timeout after 10 seconds - try sessionStorage 3193 clearInterval(waitInterval); 3194 if (getCoordinatesFromSession()) { 3195 setTimeout(function() { 3196 populateSearchFields(); 3197 }, 100); 3198 } 3199 } 3200 }, 200); 3201 return; 3202 } 3203 3204 // If coordinates are 0, try to get from sessionStorage 3205 if (vlat === 0 || vlon === 0) { 3206 getCoordinatesFromSession(); 3207 } 3208 3209 // Validate coordinates first 3210 var hasValidCoordinates = (vlat !== '' && vlon !== '' && vlat != undefined && vlon != undefined && vlat != 0 && vlon != 0 && Math.abs(vlat) <= 90 && Math.abs(vlon) <= 180); 3211 3212 if (!hasValidCoordinates) { 3213 return; 3214 } 3215 3216 //if set to one will get the lat and lng to do reverse geocoding 3217 if (prePopulateLocationSetting == 1 && (geolocationMethod === "HTML5" || geolocationMethod === "IP")) { 3218 var visitorLatLng = new google.maps.LatLng(parseFloat(vlat), parseFloat(vlon)); 3219 var visitorGeocoder = new google.maps.Geocoder(); 3220 var formattedAddress = []; 3221 var preFormattedStructure = { 3222 "locality": "long_name", 3223 "administrative_area_level_2": "long_name", 3224 "administrative_area_level_1": "long_name", 3225 "country": "long_name" 3226 }; 3227 visitorGeocoder.geocode({'latLng': visitorLatLng}, function (results, status) { 3228 //if the google response of the geocoding was successful it will use that info to build the url for the new search 3229 if (status == google.maps.GeocoderStatus.OK) { 3230 window.cachedSelectedOption = results; 3231 $.each(preFormattedStructure, function (findex, fvalue) { 3232 $.each(results[0].address_components, function (rindex, rvalue) { 3233 if (rvalue.types[0] == findex) { 3234 formattedAddress.push(rvalue.long_name); 3235 } 3236 }); 3237 }); 3238 $('.googleSuggest').each(function () { 3239 if ($(this).val() == '') { 3240 if (formattedAddress.length > 0) { 3241 $(this).val(formattedAddress.join(', ')); 3242 clearContent($(this)); 3243 } 3244 } 3245 }); 3246 } else { 3247 $('.googleSuggest').each(function () { 3248 $(this).val(''); 3249 }); 3250 } 3251 }); 3252 } 3253 } 3254 function showError(error) { 3255 switch (error.code) { 3256 case error.PERMISSION_DENIED: 3257 case 1: // PERMISSION_DENIED 3258 $('.fill_location.clicked').popover({ 3259 content: `Your local browser settings have prevented location targeting. Please enable location permissions in your browser settings.`, 3260 container: 'body' 3261 }); 3262 $('.fill_location.clicked').popover('toggle'); 3263 setTimeout(function () { 3264 $('.fill_location.clicked').popover('hide'); 3265 $('.fill_location.clicked').removeClass('clicked'); 3266 }, 4000); 3267 break; 3268 case error.POSITION_UNAVAILABLE: 3269 case 2: // POSITION_UNAVAILABLE 3270 $('.fill_location.clicked').popover({ 3271 content: `Location information is unavailable. Please check your device location settings.`, 3272 container: 'body' 3273 }); 3274 $('.fill_location.clicked').popover('toggle'); 3275 setTimeout(function () { 3276 $('.fill_location.clicked').popover('hide'); 3277 $('.fill_location.clicked').removeClass('clicked'); 3278 }, 4000); 3279 break; 3280 case error.TIMEOUT: 3281 case 3: // TIMEOUT 3282 $('.fill_location.clicked').popover({ 3283 content: `Location request timed out. Please ensure location services are enabled and try again.`, 3284 container: 'body' 3285 }); 3286 $('.fill_location.clicked').popover('toggle'); 3287 setTimeout(function () { 3288 $('.fill_location.clicked').popover('hide'); 3289 $('.fill_location.clicked').removeClass('clicked'); 3290 }, 4000); 3291 break; 3292 case error.UNKNOWN_ERROR: 3293 default: 3294 $('.fill_location.clicked').popover({ 3295 content: `An error occurred while getting your location. Please try again.`, 3296 container: 'body' 3297 }); 3298 $('.fill_location.clicked').popover('toggle'); 3299 setTimeout(function () { 3300 $('.fill_location.clicked').popover('hide'); 3301 $('.fill_location.clicked').removeClass('clicked'); 3302 }, 4000); 3303 break; 3304 } 3305 } 3306 if (navigator.geolocation) { 3307 if ($(".googleSuggest")[0]) { 3308 $(document).on('click', '.fill_location', function getCXPosition() { 3309 // Prevent multiple simultaneous geolocation requests 3310 if (isGettingLocation) { 3311 return; 3312 } 3313 3314 var $button = $(this); 3315 $button.addClass('clicked'); 3316 var startPos; 3317 3318 // Set flag to prevent concurrent requests 3319 isGettingLocation = true; 3320 3321 // Function to actually get the position 3322 var attemptGetPosition = function() { 3323 // Try with shorter timeout first for faster response 3324 var geoOptions = {
3325 enableHighAccuracy: false, // Use false for faster response 3326 timeout: 8000, // 8 second timeout (reduced for faster failure) 3327 maximumAge: 300000 // Accept cached position up to 5 minutes old 3328 }; 3329 3330 navigator.geolocation.getCurrentPosition(function (position) { 3331 startPos = position; 3332 vlat = startPos.coords.latitude; 3333 vlon = startPos.coords.longitude; 3334 3335 // Validate coordinates before proceeding 3336 if (!vlat || !vlon || vlat === 0 || vlon === 0) { 3337 isGettingLocation = false; 3338 $button.removeClass('clicked'); 3339 return; 3340 } 3341 3342 // Save coordinates to sessionStorage 3343 saveCoordinatesToSession(vlat, vlon);
3344 3345 $.get("/api/data/html/get/data_widgets/widget_name", { 3346 "vlat": vlat, 3347 "vlon": vlon, 3348 "name": "Website - Save Coordinates Session" 3349 }); 3350 3351 populateSearchFields(); 3352 3353 // Clear flag 3354 isGettingLocation = false; 3355 $button.removeClass('clicked'); 3356 }, function(error) { 3357 // Clear flag on error 3358 isGettingLocation = false; 3359 $button.removeClass('clicked'); 3360 3361 // For timeout errors, try sessionStorage as fallback 3362 if (error.code === 3) { 3363 if (getCoordinatesFromSession()) { 3364 // Use cached coordinates 3365 $.get("/api/data/html/get/data_widgets/widget_name", { 3366 "vlat": vlat, 3367 "vlon": vlon, 3368 "name": "Website - Save Coordinates Session" 3369 }); 3370 3371 populateSearchFields(); 3372 3373 // Clear flag 3374 isGettingLocation = false; 3375 $button.removeClass('clicked'); 3376 } else { 3377 $button.popover({ 3378 content: `Location request timed out. Please ensure location services are enabled and grant permission when prompted.`, 3379 container: 'body' 3380 }); 3381 $button.popover('show'); 3382 setTimeout(function() { 3383 $button.popover('hide'); 3384 }, 5000); 3385 } 3386 } else { 3387 showError(error); 3388 } 3389 }, geoOptions); 3390 }; 3391 3392 // Check if geolocation permission is already denied (but don't block if it's prompt) 3393 if (navigator.permissions && navigator.permissions.query) { 3394 navigator.permissions.query({name: 'geolocation'}).then(function(result) { 3395 if (result.state === 'denied') { 3396 isGettingLocation = false; 3397 $button.removeClass('clicked'); 3398 showError({code: 1, message: 'Permission denied'}); 3399 return; 3400 } else { 3401 // Permission is granted or prompt - proceed with geolocation 3402 attemptGetPosition(); 3403 } 3404 }).catch(function(err) { 3405 // If permission API not supported, proceed anyway 3406 attemptGetPosition(); 3407 }); 3408 } else { 3409 // Permission API not available, proceed with geolocation 3410 attemptGetPosition(); 3411 } 3412 }) 3413 } 3414 } else { 3415 console.log('Geolocation is not supported for this Browser/OS version yet.'); 3416 } 3417 function getUrlParameter(sParam) { 3418 var sPageURL = window.location.search.substring(1); 3419 var sURLVariables = sPageURL.split('&'); 3420 3421 for (var i = 0; i < sURLVariables.length; i++) { 3422 var sParameterName = sURLVariables[i].split('='); 3423 3424 if (sParameterName[0] == sParam) { 3425 return decodeURIComponent(sParameterName[1]); 3426 } 3427 } 3428 } 3429 </script>
3429 3430
3430<script type="text/javascript"> 3431 function googleTranslateElementInit() { 3432 let spinIcon = document.getElementById('spin_remove'); 3433 if (typeof spinIcon !== `undefined` && spinIcon != null) { 3434 spinIcon.remove(); 3435 } 3436 new google.translate.TranslateElement({ 3437 pageLanguage: 'en', 3438 includedLanguages: 'af,am,ar,az,be,bg,bn,bs,ca,co,cs,cy,da,de,el,eo,es,et,eu,fa,fi,fr,fy,ga,gd,gl,gu,ha,haw,hi,hr,ht,hu,hy,id,ig,is,it,iw,ja,jw,ka,kk,km,kn,ko,ku,ky,la,lo,lt,lv,mg,mi,mk,ml,mn,mr,ms,mt,ne,nl,no,ny,pa,pl,ps,pt,pt-PT,ro,ru,sd,si,sk,sl,sn,so,sq,sr,st,su,sv,sw,ta,te,tg,th,tl,tr,uk,ur,uz,vi,xh,yi,yo,zh-CN,zh-TW,zu', 3439 autoDisplay: false, 3440 layout: google.translate.TranslateElement.InlineLayout.HORIZONTAL 3441 }, 3442 'google_translate_element'); 3443 $('#google_translate_element').delay(9000).css("opacity", "1"); 3444 } 3445 3446 3447 function loadGoogleTranslate() { 3448 let head = document.getElementsByTagName('head')[0]; 3449 let script = document.createElement('script'); 3450 script.type = 'text/javascript'; 3451 script.src = "//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit"; 3452 head.appendChild(script); 3453 } 3454 3455 if (!sessionStorage.getItem("googleTranslate") == 1) { 3456 window.addEventListener('load', (e) => { 3457 let alreadyLoaded = false; 3458 let loadingByTime = setTimeout(function () { 3459 if (!alreadyLoaded) { 3460 alreadyLoaded = true; 3461 loadGoogleTranslate(); 3462 } 3463 }, 8000); 3464 window.addEventListener('scroll', initOnScroll, false); 3465 function initOnScroll() { 3466 clearTimeout(loadingByTime); 3467 if (!alreadyLoaded) { 3468 alreadyLoaded = true; 3469 loadGoogleTranslate(); 3470 } 3471 window.removeEventListener('scroll', initOnScroll,false); 3472 } 3473 if (document.cookie.indexOf('googtrans=') !== -1) { 3474 if (!alreadyLoaded) { 3475 alreadyLoaded = true; 3476 loadGoogleTranslate(); 3477 } 3478 } 3479 sessionStorage.setItem("googleTranslate", "1"); 3480 }); 3481 3482 } else { 3483 loadGoogleTranslate() 3484 } 3485 </script>
vendor: 2 bytes, line 3485
3485
3486<script> 3487 // switchClass() is jQuery UI (Effects), which is no longer loaded on every page. 3488 // removeClass().addClass() is the same class swap, applied immediately instead of 3489 // after animateClass()'s queued 400ms default. 3490 $(document).ready(function(){ 3491 $('.navbar-header .navbar-toggle.main_menu').click(function(){ 3492 $('.mobile-main-menu').toggleClass('opened'); 3493 }); 3494 $('.mobile-main-menu .sidebar-nav').find('li').each(function(){ 3495 $(this).addClass('hasChildren'); 3496 if ($(this).children('ul').length > 0){ 3497 $(this).prepend('<i class="fa fa-plus" aria-hidden="true"></i>'); 3498 $(this).find('a').after('<div class="clearfix"></div>'); 3499 $(this).find('span').after('<div class="clearfix"></div>'); 3500 } 3501 $(this).append('<div class="clearfix"></div>'); 3502 }); 3503 3504 $('.mobile-main-menu .sidebar-nav li i').click(function(){ 3505 if ($(this).parent().children('ul').length > 0){ 3506 $(this).parent().toggleClass('sub_open'); 3507 } 3508 if ($(this).hasClass('fa-plus')){ 3509 $(this).removeClass('fa-plus').addClass('fa-minus'); 3510 } else { 3511 $(this).removeClass('fa-minus').addClass('fa-plus'); 3512 } 3513 }); 3514 }) 3515 3516 if ($(window).width() > 740 && $(window).width() < 1100) { 3517 3518 $(document).ready(function(){ 3519 $('.tablet-menu .tablet-menu-ul').find('li').each(function(){ 3520 3521 if ($(this).children('ul').length > 0){ 3522 $(this).prepend('<i class="fa fa-plus tablet-fa hidden-sm hidden-md hidden-lg" aria-hidden="true"></i>'); 3523 $(this).find('a').after('<div class="clearfix"></div>'); 3524 var this_link = $(this).children('a').text().replace(/[^\x00-\x7F]/g, "");; 3525 $(this).children('a').html(this_link); 3526 $(this).find('span').after('<div class="clearfix"></div>'); 3527 } 3528 $(this).append('<div class="clearfix"></div>'); 3529 }); 3530 3531 $('.tablet-menu .tablet-menu-ul li i').click(function(){ 3532 3533 if ($(this).parent().children('ul').length > 0){ 3534 $(this).parent().toggleClass('sub_open'); 3535 3536 if ($(this).siblings( "ul" ).hasClass('tablet-block')){ 3537 $(this).siblings( "ul" ).removeClass('tablet-block').addClass('tablet-none'); 3538 } else { 3539 $(this).siblings( "ul" ).addClass( "tablet-block" ); 3540 3541 if ($(this).siblings( "ul" ).hasClass('tablet-none')){ 3542 $(this).siblings( "ul" ).removeClass('tablet-none') 3543 } 3544 3545 if ($(this).parent().siblings().children('ul').hasClass('tablet-block')) { 3546 $(this).parent().siblings().children('ul').removeClass('tablet-block').addClass('tablet-none'); 3547 $(this).parent().siblings().children('i').removeClass('fa-minus').addClass('fa-plus'); 3548 } 3549 3550 if ($(this).parent().siblings().children('ul').children().children('ul').hasClass('tablet-block')) { 3551 $(this).parent().siblings().children('ul').children().children('ul').removeClass('tablet-block').addClass('tablet-none'); 3552 $(this).parent().siblings().children('ul').children().children('i').removeClass('fa-minus').addClass('fa-plus'); 3553 } 3554 3555 if ($(this).siblings('ul').children('ul').children().children('ul').hasClass('tablet-block')) { 3556 $(this).siblings('ul').children('ul').children().children('ul').removeClass('tablet-block').addClass('tablet-none'); 3557 $(this).siblings('ul').children('ul').children().children('i').removeClass('fa-minus').addClass('fa-plus'); 3558 } 3559 3560 } 3561 3562 } 3563 3564 if ($(this).hasClass('fa-plus')){ 3565 $(this).removeClass('fa-plus').addClass('fa-minus'); 3566 } else { 3567 $(this).removeClass('fa-minus').addClass('fa-plus'); 3568 } 3569 }); 3570 }) 3571 } 3572 // Append unique ID attribute for mobile main menu links 3573 $('.mobile-main-menu a,.mobile-main-menu span').attr("id", function() { return $(this).attr("id") + "-mobile" }); 3574</script>
3574 3575
3576<script> 3577/* Keeps the announcement bar flush with the navbar: this widget's CSS emits static 50px 3578 offsets that are blind to the hide-menu settings, so a hidden or fixed compact-logo 3579 navbar leaves a gap or an overlap. Measure the real navbar state and own the offset. */ 3580(function () { 3581 function alignAnnouncementToNavbar() { 3582 var ann = document.querySelector('.announcement-bar'); 3583 if (!ann) { return; } 3584 /* above the widget's own offset breakpoints: restore stylesheet values */ 3585 if (window.innerWidth > 1100) { 3586 ann.style.removeProperty('margin-top'); 3587 ann.style.removeProperty('top'); 3588 return; 3589 } 3590 var navbar = document.querySelector('.header nav.navbar.navbar-default'); 3591 var navStyle = navbar ? window.getComputedStyle(navbar) : null; 3592 /* navbar hidden: the 50px offsets have nothing to clear, sit flush */ 3593 if (!navbar || navStyle.display === 'none') { 3594 ann.style.setProperty('margin-top', '0px', 'important'); 3595 ann.style.setProperty('top', '0px', 'important'); 3596 return; 3597 } 3598 if (window.innerWidth >= 768) { return; } 3599 /* only act while the navbar is pinned and showing the compact logo */ 3600 if (navStyle.position !== 'fixed') { return; } 3601 var logo = navbar.querySelector('.mobile_website_logo'); 3602 if (!logo || window.getComputedStyle(logo).display === 'none') { return; } 3603 var navRect = navbar.getBoundingClientRect(); 3604 var annRect = ann.getBoundingClientRect(); 3605 var delta = Math.round(navRect.bottom - annRect.top); /* >0 overlap, <0 gap */ 3606 if (delta === 0) { return; } 3607 var currentMt = parseFloat(window.getComputedStyle(ann).marginTop) || 0; 3608 var nextMt = currentMt + delta; 3609 /* a transient element above the bar during load can inflate the measure; a 3610 negative margin would pull the bar behind the navbar, so clamp at 0 */ 3611 if (nextMt < 0) { nextMt = 0; } 3612 /* !important to beat the widget's "margin-top: 50px !important" rule */ 3613 ann.style.setProperty('margin-top', nextMt + 'px', 'important'); 3614 } 3615 3616 function run() { 3617 alignAnnouncementToNavbar(); 3618 /* re-run after late layout shifts (fonts, async embeds) */ 3619 window.setTimeout(alignAnnouncementToNavbar, 250); 3620 window.setTimeout(alignAnnouncementToNavbar, 1200); 3621 } 3622 3623 if (document.readyState === 'loading') { 3624 document.addEventListener('DOMContentLoaded', run); 3625 } else { 3626 run(); 3627 } 3628 window.addEventListener('load', alignAnnouncementToNavbar); 3629 var resizeTimer; 3630 window.addEventListener('resize', function () { 3631 window.clearTimeout(resizeTimer); 3632 resizeTimer = window.setTimeout(alignAnnouncementToNavbar, 150); 3633 }); 3634})(); 3635</script>
3635 3636
3636<script> 3637 window.addEventListener("load", () => { 3638 let containerSlider = document.createElement('div'); 3639 let containerSlider2 = document.createElement('div'); 3640 const firstContainer = document.getElementById('first_container') 3641 3642 containerSlider.classList.add('slider-container'); 3643 containerSlider2.classList.add('slider-container-in'); 3644 containerSlider.style.height = containerSlider2.style.height = firstContainer.offsetHeight + 'px'; 3645 containerSlider.style.width = firstContainer.offsetWidth + 'px'; 3646 containerSlider2.style.height = firstContainer.offsetHeight + 'px'; 3647 containerSlider2.style.width = firstContainer.offsetWidth + 'px'; 3648 3649 3650 containerSlider.prepend(containerSlider2) 3651 firstContainer.prepend(containerSlider) 3652 3653 3654 let script = document.createElement('script'); 3655 let head = document.getElementsByTagName('head')[0]; 3656 script.src = 'https://www.optimizecdn.com/directory/cdn/assets/bootstrap/js/vegas.min.js'; 3657 head.appendChild(script); 3658 let link = document.createElement('link'); 3659 link.rel = 'stylesheet'; 3660 link.href = 'https://www.optimizecdn.com/directory/cdn/assets/bootstrap/css/vegas.min.css'; 3661 head.appendChild(link); 3662 3663 script.onload = function () { 3664 $('#first_container .slider-container-in').vegas({ 3665 color: 'rgb(223, 241, 221)', 3666 delay: 4000, 3667 transitionDuration: 3000, 3668 timer: false, 3669 transition: 'fade', 3670 slides: [ 3671 {src: '/images/buildingxx.jpg'}, 3672 {src: '/images/housesx.jpg'}, 3673 {src: '/images/roofer.jpg'}, 3674 {src: '/images/painted-doorway.jpg'}, 3675 {src: '/images/solar.jpg'}, 3676 {src: '/images/fence_1.jpg'}, 3677 ], 3678 }); 3679 3680 $('a.previous').on('click', function () { 3681 $('#first_container .slider-container-in').vegas('options', 'transition', 'fade').vegas('previous'); 3682 return false; 3683 }); 3684 3685 $('a.next').on('click', function () { 3686 $('#first_container .slider-container-in').vegas('options', 'transition', 'fade').vegas('next'); 3687 return false; 3688 }); 3689 } 3690 }); 3691 </script>
3691 3692
3692<script> 3693 $(document).ready(function() { 3694 var i; 3695 var imageRatio = 0.5625; 3696 for (i = 0; i < 16; i++) { 3697 3698 var sectionid = ".homepage-section-" + i + " .pic"; 3699 var calc = Math.floor($(sectionid).width() * imageRatio); 3700 $(sectionid).css({ 3701 'height': calc + 'px' 3702 }); 3703 3704 var spanid = ".homepage-section-" + i + " .pic .pic-caption"; 3705 var calc2 = $(sectionid).height() - 42; 3706 $(spanid).css({ 3707 'transform' : 'translateY(' + calc2 + 'px)' 3708 }); 3709 } 3710 }); 3711</script>
3711<script> 3712 $('#captchaContainer').removeClass('form-control '); 3713 $(".website_url_field").keyup(function(){ 3714 var fieldName = $(this).attr('name'); 3715 $(this).val($(this).val().replace(/\s+/g, '')); 3716 $('#myform').formValidation('revalidateField', fieldName); 3717 }); 3718</script>
vendor: 2 bytes, line 3718
3718
3719<script> 3720 $('#newsletter input[name="email"]').on('keypress', function() { 3721 $("#newsletter > .gdpr_consent_email").show(); 3722 }); 3723 $('#newsletter_signup_footer input[name="email"]').on('keypress', function() { 3724 $("#newsletter_signup_footer > .gdpr_consent_email").show(); 3725 }); 3726</script>
3726
3726<script src="https://www.optimizecdn.com/directory/cdn/bootstrap/formvalidation/current/dist/js/formValidation.min.js"></script>
3726 3727
3727<script src="https://www.optimizecdn.com/directory/cdn/bootstrap/formvalidation/current/dist/js/framework/bootstrap.min.js"></script>
3727 3728
3728<script type="text/javascript"> 3729 function decodeHtml(html) { 3730 var txt = document.createElement("textarea"); 3731 txt.innerHTML = html; 3732 return txt.value; 3733 } 3734 3735 // Override FormValidation URI validator to prevent recursion with URLs that contain @ characters 3736 $(function() { 3737 function applyFix() { 3738 // Check if FormValidation library and URI validator are loaded 3739 if (FormValidation && FormValidation.Validator && FormValidation.Validator.uri) { 3740 FormValidation.Validator.uri.validate = function(validator, $field, options) { 3741 var value = validator.getFieldValue($field, 'uri').trim(); 3742 return value === '' || new RegExp('^https?://[^\\s]+\\.[^\\s]{2,}').test(value); 3743 }; 3744 return true; 3745 } 3746 return false; 3747 } 3748 3749 if (!applyFix()) { 3750 setTimeout(applyFix, 50); 3751 } 3752 }); 3753 </script>
3753 3754
3754<script type="text/javascript"> 3755 3756 var counterSubmit = 0; 3757 $(document).ready(function() { 3758 /* grecaptcha.reset() with no argument always resets widget 0. On a page with two 3759 captcha holders that clears the wrong checkbox, so the widget the visitor solved 3760 keeps a token Google has already spent and every retry fails the security check. 3761 captchaHolders is published by widget 1995 keyed by "<formId>-google-recaptcha"; 3762 an undefined id means no per-form id is known and the arg-less call is used, 3763 exactly as before. */ 3764 function bdCaptchaWidgetId(formId) { 3765 if (typeof captchaHolders === "undefined" || !formId) { 3766 return undefined; 3767 } 3768 /* recaptcha.php renames each holder to "<id>-<counter>" before render (recaptcha.php ~L84), 3769 so captchaHolders is keyed by the RENAMED id - not "<formId>-google-recaptcha". Resolve from 3770 the holder element itself so the counter never has to be reconstructed. */ 3771 var form = document.getElementById(formId); 3772 var holder = form && form.querySelector(".g-recaptcha"); 3773 return holder ? captchaHolders[holder.id] : undefined; 3774 } 3775 3776 function bdCaptchaReset(formId) { 3777 if (typeof grecaptcha === "undefined" || typeof grecaptcha.reset !== "function") { 3778 return; 3779 } 3780 var widgetId = bdCaptchaWidgetId(formId); 3781 if (widgetId === undefined) { 3782 grecaptcha.reset(); 3783 } else { 3784 grecaptcha.reset(widgetId); 3785 } 3786 } 3787 3788 // Ghost-field strip (card d4tk1CMp): the server-side validator config can carry 3789 // rules for fields that are NOT rendered in this form (conditionally-rendered or 3790 // duplicated form configs). Those phantom rules make formValidation mis-evaluate 3791 // isValid(), so an empty required field bypasses validation and submits natively. 3792 // Remove any rule whose field has no matching element before initializing. 3793 // NOTE: this is the ONLY layer re-applied from reverted PR #5902. It strictly 3794 // REMOVES rules (never adds validators, never overrides native submit, never 3795 // intercepts on capture phase, never re-validates on click) â so it cannot 3796 // reproduce the "Save button slides down / nav broken / no success message" 3797 // regression that caused #5902 to be rolled back on site 19413. 3798 var validatorConfig = {"framework":"bootstrap","addOns":{"reCaptcha2":{"element":"captchaContainer","language":"en","theme":"light","siteKey":"6LchsF4UAAAAAAv1LZ2ERSrOL31n6VbvhBbPtJOx","timeout":"120","message":"The captcha is not valid"}},"fields":{"email":{"validators":{"notEmpty":{"message":"Required Field"},"emailAddress":{"message":"Please enter a valid email address"}}}}}; 3799 var formElement = $(`form[name='newsletter_modal_signup_380']`); 3800 if(validatorConfig && validatorConfig.fields) { 3801 Object.keys(validatorConfig.fields).forEach(function(fieldName) { 3802 if(formElement.find('[name="' + fieldName + '"]').length === 0) { 3803 delete validatorConfig.fields[fieldName]; 3804 } 3805 }); 3806 } 3807 3808 // Scroll to the first invalid field when submit fails validation, 3809 // so the user can immediately see why the form will not submit 3810 formElement.on('err.form.fv', function(e) { 3811 var $firstError = $(e.target).find('.form-group.has-error').first(); 3812 if ($firstError.length) { 3813 $('html, body').animate({ scrollTop: $firstError.offset().top - 100 }, 700); 3814 } 3815 }); 3816 3817 formElement.formValidation(validatorConfig).on('success.form.fv', function(e,fvdata) { 3818 3819 if('newsletter_modal_signup' == 'unsubscribe_email'){ 3820 return true; 3821 } 3822 // Prevent form submission 3823 e.preventDefault(); 3824 $form = $(e.target), 3825 fv = $form.data('formValidation'); 3826 3827 // Check HTML5 required fields that FormValidation may not know about 3828 var requiredEmpty = false; 3829 $form.find('[required]').each(function() { 3830 var val = $(this).val(); 3831 if (val === '' || val === null || (typeof val === 'string' && val.trim() === '')) { 3832 requiredEmpty = true; 3833 $(this).closest('.form-group').addClass('has-error'); 3834 if ($(this).siblings('.required-error').length === 0) { 3835 $(this).after('<small class="required-error help-block" style="color:#a94442;">Required Field</small>'); 3836 } 3837 } else { 3838 var $reqGroup = $(this).closest('.form-group'); 3839 $(this).siblings('.required-error').remove(); 3840 // Keep has-error if another validator is still failing for this field 3841 if ($reqGroup.find('small[data-fv-validator][data-fv-result="INVALID"]').length === 0) { 3842 $reqGroup.removeClass('has-error'); 3843 } 3844 } 3845 }); 3846 if (requiredEmpty) { 3847 fv.disableSubmitButtons(false); 3848 counterSubmit = 0; 3849 // Scroll to the first field with an error (HTML5-required scan does 3850 // not trigger err.form.fv, so handle the scroll here too) 3851 var $firstReqError = $form.find('.form-group.has-error').first(); 3852 if ($firstReqError.length) { 3853 $('html, body').animate({ scrollTop: $firstReqError.offset().top - 100 }, 700); 3854 } 3855 return false; 3856 } 3857 3858 var values = $(this).serialize(); 3859 3860 3861 var locationFieldCorrect = true; 3862 3863 if($("#newsletter_modal_signup_380 .location_required").length > 0){ 3864 $("#newsletter_modal_signup_380 .location_required").each(function (index) { 3865 if($(this).data('state') == 1){ 3866 if($('#newsletter_modal_signup_380 input[name="lead_location"]').val() == "" || $('#newsletter_modal_signup_380 input[name="lat"]').val() == "" || $('#newsletter_modal_signup_380 input[name="lng"]').val() == "") { 3867 locationFieldCorrect = false; 3868 } 3869 } 3870 }); 3871 } 3872 3873 if(locationFieldCorrect === false){ 3874 //check that there is a latitude or longitude 3875 swal(`Whoops!`, `The location information is required to submit this form`, "error"); 3876 return false; 3877 } 3878 3879 3880 if (!$(this).attr("action")) { 3881 var action = ''; 3882 3883 } else { 3884 var action = $(this).attr("action"); 3885 } 3886 if (!$(this).attr("method")) { 3887 var method = 'post'; 3888 3889 } else { 3890 var method = $(this).attr("method"); 3891 } 3892 if (!$(this).attr("form_action_type")) { 3893 var form_action_type = 'notification'; 3894 3895 } else { 3896 var form_action_type = $(this).attr("form_action_type"); 3897 } 3898 if (!$(this).attr("form_action_div")) { 3899 /* Empty "ID to Replace" default: prefer #main-content, fall back to legacy #first_container if absent */ 3900 var form_action_div = $('#main-content').length ? '#main-content' : '#first_container'; 3901 3902 } else { 3903 var form_action_div = $(this).attr("form_action_div"); 3904 } 3905 if (!$(this).attr("return_data_type")) { 3906 var return_data_type = 'json'; 3907 3908 } else { 3909 var return_data_type = $(this).attr("return_data_type"); 3910 } 3911 var submitInFlight = counterSubmit != 0 || (Date.now() - ($form.data('bdLastSubmitAt') || 0) < 5000); 3912 if (!submitInFlight) { 3913 if ($("#newsletter_modal_signup_380-notification").html() != "") { 3914 $("#newsletter_modal_signup_380-notification").remove(); 3915 } 3916 if ($(this).find('input[type="submit"]').length > 0) { 3917 $(this).find('input[type="submit"]').before('<div id="newsletter_modal_signup_380-notification" class="alert"></div>'); 3918 3919 } else { 3920 $(this).prepend('<div id="newsletter_modal_signup_380-notification" class="alert"></div>'); 3921 } 3922 } 3923 var notification = $("#newsletter_modal_signup_380-notification"); 3924 3925 if ((form_action_type == "" || form_action_type == "default") && action.indexOf("account") >= 0) { 3926 notification.html(`Processing Request...`).addClass("alert-warning-subtle"); 3927 setTimeout(function(){ 3928 fv.defaultSubmit(); 3929 }, 100); 3930 } else { 3931 notification.html(`Processing Request...`).addClass("alert-warning-subtle"); 3932 if(!submitInFlight) { 3933 counterSubmit++; 3934 $form.data('bdLastSubmitAt', Date.now()); 3935 3936 var fields = $(this).serializeArray(); 3937 var formField = []; 3938 var processData = true; 3939 var contentType = "application/x-www-form-urlencoded; charset=UTF-8"; 3940 3941 3942 3943 if($("#newsletter_modal_signup_380 input[type=file]").length > 0){ 3944 3945 var formObject = new FormData(); 3946 processData = false; 3947 contentType = false; 3948 3949 $(fields).each(function(index,field){ 3950 formField.push(field.name+"="+field.value); 3951 }); 3952 3953 values = formField.join("&"); 3954 3955 $(formField).each(function(index,fieldValue){ 3956 var fieldInfo = fieldValue.split('='); 3957 formObject.append(fieldInfo[0],fieldInfo[1]); 3958 }); 3959 3960 $("#newsletter_modal_signup_380 input[type=file]").each(function(index,node){ 3961 var file = this.files[0]; 3962 if(typeof file != "undefined"){ 3963 formObject.append("file_addon["+$(node).attr('name')+"]", file, file.name); 3964 } 3965 }); 3966 }else{ 3967 3968 $(fields).each(function(index,field){ 3969 formField.push(field.name+"="+encodeURIComponent(field.value)); 3970 }); 3971 3972 var formObject = formField.join("&"); 3973 } 3974 3975 $.ajax({
3976 url: action, 3977 type: method, 3978 data: formObject, 3979 dataType: return_data_type, 3980 processData: processData, 3981 contentType: contentType, 3982 success: function (data) { 3983 // Re-query live node: success.form.fv fires twice, orphaning the closure ref captured above. 3984 notification = $("#newsletter_modal_signup_380-notification"); 3985 if (return_data_type == "html") { 3986 var result = 'success'; 3987 3988 if (!data != "") { 3989 var result_widget = data['result_widget']; 3990 } 3991 3992 } else { 3993 3994 3995 if (!data['result']) { 3996 var result = 'error'; 3997 } else { 3998 var result = data['result']; 3999 } 4000 if (!data['result_widget']) { 4001 var result_widget = ''; 4002 4003 } else { 4004 var result_widget = data['result_widget']; 4005 } 4006 } 4007 if (result == "success") { 4008 4009 if (!data['message']) { 4010 var message = `Your information has submitted successfully!`; 4011 4012 } else { 4013 var message = data['message']; 4014 } 4015 if (!data['redirect_url']) { 4016 var redirect_url = ''; 4017 4018 } else { 4019 var redirect_url = data['redirect_url']; 4020 } 4021 4022 4023 4024 if (form_action_type == "notification") { 4025 if (redirect_url && (action.indexOf('Member%20Login%20Page') >= 0 || action.indexOf('Member Login Page') >= 0)) { 4026 if (redirect_url.substring(0, 1) != "/" && redirect_url.substring(0, 1) != "h") { 4027 redirect_url = "/" + redirect_url; 4028 } 4029 if (notification.parents('.modal').length) { 4030 $('.modal-backdrop').hide(); 4031 $('.modal').modal('hide'); 4032 } 4033 window.location.href = redirect_url; 4034 fv.resetForm(true); 4035 } else { 4036 notification.html(message + '<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>') 4037 .addClass('alert-dismissible') 4038 .addClass("alert-success-subtle") 4039 .removeClass("alert-danger-subtle") 4040 .removeClass("alert-warning-subtle") 4041 4042 4043 4044 if(notification.parents('.modal').length && 'newsletter_modal_signup_380' == 'whmcs_billing_address'){ 4045 setTimeout(function(){ 4046 notification.parents('.modal').modal('hide'); 4047 }, 1000); 4048 } 4049 } 4050 4051 } else if (form_action_type == "widget") { 4052 4053 if (result_widget != '') { 4054 4055 setTimeout(function(){ 4056 if(form_action_div != '.newsletter_modal_form_container'){ 4057 $("html, body").animate({ scrollTop: 0 }, 600); 4058 } 4059 $(form_action_div).html(decodeHtml(result_widget)).text(); 4060 4061 }, 1000); 4062 } 4063 4064 } else if (form_action_type == "redirect") { 4065 4066 if (redirect_url == "") { 4067 redirect_url = decodeURIComponent(""); 4068 } 4069 4070 if (redirect_url.substring(0, 1) != "/" && redirect_url.substring(0, 1) != "h") { 4071 redirect_url = "/" + redirect_url; 4072 } 4073 current_location = "/"; 4074 refresh_pages_string = "/login"; 4075 refresh_pages_string = refresh_pages_string.replace(/ /g,''); 4076 refresh_pages_array = refresh_pages_string.split(','); 4077 notification.html(message) 4078 .addClass("alert-success-subtle") 4079 .removeClass("alert-danger-subtle") 4080 .removeClass("alert-warning-subtle") 4081 .delay(2000).slideUp(); 4082 if(action == "/api/widget/json/get/Bootstrap%20Theme%20-%20Member%20Login%20Page" && current_location.indexOf("/login") == -1 && refresh_pages_string != '' && (!refresh_pages_array.includes(current_location) || refresh_pages_string == "/login" )){ 4083 window.location.href = window.location.href+'?logged'; 4084 } else { 4085 window.location.href = redirect_url; 4086 } 4087 4088 fv.resetForm(true); 4089 } 4090 if(form_action_div != '.newsletter_modal_form_container' && 'newsletter_modal_signup_380' != 'whmcs_billing_address'){ 4091 $('.modal-backdrop').hide(); 4092 } 4093 } else { 4094 bdCaptchaReset(formElement.attr('id')); 4095 if (!data['message']) { 4096 var message = `You entered invali
4096d data. Please try to save again.`; 4097 4098 } else { 4099 var message = data['message']; 4100 } 4101 $("#newsletter_modal_signup_380-notification").html(message) 4102 .addClass("alert-danger-subtle") 4103 .removeClass("alert-success-subtle") 4104 .removeClass("alert-warning-subtle") 4105 .fadeIn(); 4106 fv.disableSubmitButtons(false); 4107 } 4108 counterSubmit = 0; 4109 }, 4110 error: function (e) { 4111 4112 if(typeof grecaptcha !== "undefined" && typeof grecaptcha.reset === "function"){ 4113 bdCaptchaReset(formElement.attr('id')); 4114 $("#newsletter_modal_signup_380-notification").html(`Recaptcha Error`); 4115 } else { 4116 $("#newsletter_modal_signup_380-notification").html(`A connection error occurred while saving. Please try to save again.`); 4117 } 4118 $("#newsletter_modal_signup_380-notification").addClass("alert-warning-subtle") 4119 .removeClass("alert-success-subtle") 4120 .removeClass("alert-warning-subtle") 4121 .fadeIn(); 4122 counterSubmit = 0; 4123 } 4124 });/// End Ajax 4125 } 4126 }//END else 4127 }).bind('keydown', function(event) { 4128 4129 if (event.ctrlKey || event.metaKey) { 4130 4131 switch (String.fromCharCode(event.which).toLowerCase()) { 4132 4133 case 's': 4134 var nativeForm = $(this)[0]; 4135 if (nativeForm && typeof nativeForm.reportValidity === 'function' && !nativeForm.reportValidity()) { 4136 event.preventDefault(); 4137 return false; 4138 } 4139 $(this).submit(); 4140 break; 4141 } 4142 } 4143 }); 4144 4145 /// This will turn any select2 that are required in the form builder to being required elements. 4146 $('#newsletter_modal_signup_380 select').each(function (i, obj) { 4147 setTimeout(function(){ 4148 if ($(obj).prop("required") && $(obj).attr("style") == "display: none;") { 4149 $(obj).css("z-index","-999"); 4150 $(obj).css("height","0"); 4151 $(obj).css("width","0"); 4152 $(obj).css("display","block"); 4153 $(obj).css("position","absolute"); 4154 } 4155 }, 3000); 4156 }); 4157 4158 // Clear required-error messages when user fills in a required field 4159 $('#newsletter_modal_signup_380').on('keyup change', '[required]', function() { 4160 var val = $(this).val(); 4161 if (val !== '' && val !== null && val.trim() !== '') { 4162 var $group = $(this).closest('.form-group'); 4163 // Remove only this handler's own required message 4164 $(this).siblings('.required-error').remove(); 4165 // Keep has-error if another FormValidation validator is still failing 4166 // (e.g. stringLength, regexp). has-error is shared, so removing it 4167 // wholesale would clobber other validators' red styling. 4168 if ($group.find('small[data-fv-validator][data-fv-result="INVALID"]').length === 0) { 4169 $group.removeClass('has-error'); 4170 } 4171 } 4172 }); 4173 4174 });//END $('# echo $_SERVER[form_element_id]; ').formValidation( 4175 </script>
4175 4176 <div class="modal fade" id="newsletter_subscribe_modal" tabindex="-1" role="dialog" aria-hidden="true"> 4177 <div class="modal-dialog"> 4178 <div class="modal-content"> 4179 <div class="container-fluid"> 4180 <div class="row"> 4181 <div class="col-md-12"> 4182 <br> 4183 <button type="button" class="close" data-dismiss="modal" aria-label="Close"> 4184 <span aria-hidden="true">×</span> 4185 </button> 4186 <h3 class="nomargin"> 4187 Join Our Newsletter 4188 </h3> 4189 <hr> 4190 <div class="newsletter_modal_form_container"> 4191 <style type="text/css">label span.required { color: #B94A48; }span.help-inline, span.help-block {font-size: .9em; }</style><form action="/api/widget/json/get/Bootstrap%20Theme%20-%20Module%20-%20Newsletter%20Actions" id="newsletter_modal_signup_380" method="post" labelwidth="100" labelpaddingtop="0.5em" enctype="multipart/form-data" form_action_type="widget" form_action_div=".newsletter_modal_form_container" return_data_type="" name="newsletter_modal_signup_380" class=" "><input type="hidden" name="sized" value="0" id="newsletter_modal_signup_380-element-0"/><input type="hidden" name="form" value="myform" id="newsletter_modal_signup_380-element-1"/><input type="hidden" name="formname" value="newsletter_modal_signup" id="newsletter_modal_signup_380-element-2"/><input type="hidden" name="dowiz" value="1" id="newsletter_modal_signup_380-element-3"/><input type="hidden" name="save" value="1" id="newsletter_modal_signup_380-element-4"/><input type="hidden" name="url_origin_pars" value="/home" id="newsletter_modal_signup_380-element-5"/><input type="hidden" name="action" autocomplete="off" value="subscribe" id="newsletter_modal_signup_380-element-6"/><div class="form-group"><input type="text" name="first_name" placeholder="Name" autocomplete="off" value class="form-control control-group form-control " id="newsletter_modal_signup_380-element-7"/></div><div class="form-group"><input type="email" name="email" required placeholder="Enter email address" autocomplete="off" value class="form-control control-group form-control" id="newsletter_modal_signup_380-element-8"/></div><div class="form-group"><div class="form-group security_question_label"> 4192 <div id="newsletter_modal_signup_380-captchaContainer" class="control-group"> 4193 <div class="g-recaptcha" id="newsletter_modal_signup_380-google-recaptcha"></div> 4194 </div> 4195 <small class="help-block" id="recaptcha_error" style="display:none;" data-fv-validator="notEmpty" data-fv-for="recaptcha" data-fv-result="INVALID" />The security check was not completed successfully.</small> 4196 <div class="clearfix bmargin"></div> 4197 <input type="hidden" name="recaptcha" id="newsletter_modal_signup_380-rcap"> 4198</div> 4199 <style> 4200 .modal .g-recaptcha-scale, .col-md-4 .g-recaptcha-scale, .col-md-3 .g-recaptcha-scale, .col-lg-3 .g-recaptcha-scale, .col-lg-4 .g-recaptcha-scale { 4201 transform: scale(0.77); 4202 -webkit-transform: scale(0.77); 4203 transform-origin: 0 0; 4204 -webkit-transform-origin: 0 0; 4205 margin-bottom: -15px; 4206 } 4207 4208 .modal #newsletter_modal_signup_380-captchaContainer, .col-md-4 #newsletter_modal_signup_380-captchaContainer, .col-md-3 #newsletter_modal_signup_380-captchaContainer, .col-lg-3 #newsletter_modal_signup_380-captchaContainer, .col-lg-4 #newsletter_modal_signup_380-captchaContainer { 4209 transform: scale(0.77); 4210 -webkit-transform: scale(0.77); 4211 transform-origin: 0 0; 4212 -webkit-transform-origin: 0 0; 4213 margin-bottom: -15px; 4214 } 4215 </style> 4216
4216<script type="text/javascript"> 4217 if(typeof formsFound == "undefined"){ 4218 var formID = ''; 4219 var currentCaptcha = {}; 4220 var captchaHolders = {}; 4221 var formsFound = {}; 4222 var captchaApiRequested = false; 4223 /* The forms the visitor has actually interacted with - only these get a widget. */ 4224 var captchaArmedForms = []; 4225 /* api.js stays lazy - nothing is fetched from Google until the visitor actually 4226 touches the form. 'click' alone was too narrow: a keyboard-only visitor tabs in 4227 and presses Enter without ever clicking, so api.js never loaded, the captcha 4228 never rendered, and the form POSTed an empty token. */ 4229 var captchaTriggerEvents = ['click', 'keydown', 'focusin', 'touchstart']; 4230 4231 window.addEventListener('load', () => { 4232 formID = document.querySelectorAll('[name="recaptcha"]'); 4233 if (typeof formID != "undefined" && formID !== null) { 4234 for (let i = 0; i < formID.length; i++) { 4235 let formIDForm = formID[i].closest('form'); 4236 let captchaHolder = formIDForm.querySelector(".g-recaptcha"); 4237 4238 if (typeof formsFound[formIDForm.id] != "undefined") { 4239 formsFound[formIDForm.id]['counter']++; 4240 }else{ 4241 formsFound[formIDForm.id] = {'counter' : 1}; 4242 } 4243 4244 formIDForm.setAttribute('data-counter', formsFound[formIDForm.id]['counter']); 4245 captchaHolder.setAttribute('id',captchaHolder.id+'-'+formsFound[formIDForm.id]['counter']); 4246 4247 if (typeof formIDForm != "undefined" && formIDForm !== null) { 4248 captchaTriggerEvents.forEach( evt => 4249 formIDForm.addEventListener(evt, reCaptchaOnFormInteraction, false) 4250 ); 4251 } 4252 } 4253 } 4254 }); 4255 } 4256 4257 function reCaptchaOnFormInteraction(event) { 4258 if (event && event.currentTarget) { 4259 captchaArmForm(event.currentTarget); 4260 } 4261 if (captchaApiRequested) { 4262 renderArmedCaptchas(); 4263 return; 4264 } 4265 captchaApiRequested = true; 4266 4267 var head = document.getElementsByTagName('head')[0]; 4268 var script = document.createElement('script'); 4269 script.type = 'text/javascript'; 4270 script.src = 'https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit&hl=en'; 4271 head.appendChild(script); 4272 } 4273 4274 var captchaArmForm = function (formEl) { 4275 if (!formEl) { 4276 return; 4277 } 4278 for (var a = 0; a < captchaArmedForms.length; a++) { 4279 if (captchaArmedForms[a] === formEl) { 4280 return; 4281 } 4282 } 4283 captchaArmedForms.push(formEl); 4284 }; 4285 4286 var captchaSolvedCallback = function (holder) { 4287 return function () { 4288 var formEl = holder.closest('form'); 4289 if (!formEl) { 4290 return; 4291 } 4292 $(formEl).find('.security_question_label').removeClass('has-error'); 4293 $(formEl).find('#recaptcha_error').css('display', 'none'); 4294 var notification = document.getElementById(formEl.id + '-notification'); 4295 if (notification && notification.classList.contains('alert-danger-subtle')) { 4296 $(notification).slideUp(); 4297 } 4298 }; 4299 }; 4300 4301 var renderArmedCaptchas = function () { 4302 if (typeof grecaptcha === "undefined" || typeof grecaptcha.render !== "function") { 4303 return; 4304 } 4305 for (var f = 0; f < captchaArmedForms.length; f++) { 4306 var holder = captchaArmedForms[f].querySelector('div[class=g-rec
4306aptcha]'); 4307 4308 if (!holder || !holder.id || holder.getClientRects().length === 0) { 4309 continue; 4310 } 4311 /* Guard a second render: grecaptcha throws on an element it already claimed. */ 4312 if (typeof captchaHolders[holder.id] === "undefined") { 4313 captchaHolders[holder.id] = grecaptcha.render(holder.id, { 4314 'sitekey': '6LchsF4UAAAAAAv1LZ2ERSrOL31n6VbvhBbPtJOx', 4315 'callback': captchaSolvedCallback(holder) 4316 }); 4317 } 4318 } 4319 }; 4320 4321 var onloadCallback = function (event) { 4322 renderArmedCaptchas(); 4323 }; 4324 4325 </script>
vendor: 1 bytes, line 4325
4325
4326<script> 4327 $(document).ready(function(){ 4328 /* Implicit submission (Enter inside a field) fires 'submit' without firing a click on 4329 the submit button, so the click guard below never sees it and the form POSTed an 4330 empty token. Bound on document/capture so it runs before FormValidation's own 4331 handler on the form - at AT_TARGET the capture flag does not order listeners, so a 4332 listener on the form itself would not reliably win. Native HTMLFormElement.submit() 4333 does not dispatch 'submit', so the solved-captcha path below is unaffected. */ 4334 var captchaGuardedForm = document.getElementById('newsletter_modal_signup_380'); 4335 if (captchaGuardedForm) { 4336 document.addEventListener('submit', function (event) { 4337 if (event.target !== captchaGuardedForm) { 4338 return; 4339 } 4340 4341 var formId = captchaGuardedForm.id; 4342 var captchaHolderKey = formId + "-google-recaptcha-" + $(captchaGuardedForm).data('counter'); 4343 var captchaRendered = typeof captchaHolders[captchaHolderKey] != "undefined"; 4344 4345 if (captchaRendered && grecaptcha.getResponse(captchaHolders[captchaHolderKey]) !== "") { 4346 $("#" + formId + " .security_question_label").removeClass("has-error"); 4347 $("#" + formId + " #recaptcha_error").css("display", "none"); 4348 return; 4349 } 4350 4351 /* Unsolved, or api.js still in flight: either way there is no token to send. */ 4352 event.preventDefault(); 4353 event.stopImmediatePropagation(); 4354 $("#" + formId + " .security_question_label").addClass("has-error"); 4355 $("#" + formId + " #recaptcha_error").css("display", "block"); 4356 return false; 4357 }, true); 4358 } 4359 $("#newsletter_modal_signup_380 input[type=submit]").unbind('click'); 4360 $("#newsletter_modal_signup_380 input[type=submit]").click(function (event) { 4361 4362 var formId = $(this.form).attr('id'); 4363 var captchaHolderKey = formId + "-google-recaptcha-" +$(this.form).data('counter'); 4364 4365 if (typeof captchaHolders[captchaHolderKey] != "undefined") { 4366 if (grecaptcha.getResponse(captchaHolders[captchaHolderKey]) === "") { 4367 event.preventDefault(); 4368 $("#" + formId).formValidation('validate'); 4369 $("#" + formId + " .security_question_label").addClass("has-error"); 4370 $("#" + formId + " #recaptcha_error").css("display", "block"); 4371 return false; 4372 } 4373 4374 /* Solved captcha: clear the error UI and let the click proceed untouched. 4375 The browser then fires a REAL, button-initiated submit event, so 4376 FormValidation runs its normal chain (success.form.fv -> AJAX modal on 4377 checkout / native POST on login). Re-submitting here artificially broke 4378 both ways: native form.submit() skips the FV chain (checkout rendered the 4379 raw JSON response), and jQuery .submit() fires a synthetic submit that FV 4380 refuses, leaving the form stuck after the first error (Bug 2). */ 4381 $("#" + formId + " .security_question_label").removeClass("has-error"); 4382 $("#" + formId + " #recaptcha_error").css("display", "none"); 4383 } 4384 }); 4385 }); 4386</script>
4386</div><div class="form-group"><input type="hidden" name="bd_hpc" autocomplete="off" value class="form-control control-group " id="newsletter_modal_signup_380-element-11"/></div><div class="form-actions"><input type="submit" value="Subscribe Now" name class="btn btn-primary btn-block btn-lg bold " id="newsletter_modal_signup_380-element-12"/></div><input type='hidden' name='origin' value='/'></form>
4386<script type="text/javascript">jQuery(document).ready(function() { jQuery("#newsletter_modal_signup_380").bind("submit", function() { 4387 });}); </script>
4387 </div> 4388 <br> 4389 </div> 4390 </div> 4391 </div> 4392 </div> 4393 </div> 4394</div>
4394<script> 4395 window.addEventListener('load', (event) => { 4396 setTimeout(() => { 4397 }, 501); 4398 }); 4399 </script>
vendor: 2 bytes, line 4399
4399
4400<script> 4401 function decision(message, url) { 4402 if (confirm(message)) { 4403 setTimeout(function () { 4404 window.location = url; 4405 }, 0); 4406 } 4407 } 4408</script>
vendor: 2 bytes, line 4408
4408
4409<script> 4410 // Function to add alt, width, and height attributes to <img> elements without them 4411 function addAttributesToImages() { 4412 var images = document.querySelectorAll('img:not([alt]), img:not([width]), img:not([height])'); 4413 Array.prototype.forEach.call(images, function(img) { 4414 // Skip if we've already processed this image 4415 if (img.dataset.processed === 'true') { 4416 return; 4417 } 4418 4419 // Mark this image as being processed 4420 img.dataset.processed = 'true'; 4421 4422 // Add alt attribute if missing 4423 if (!img.hasAttribute('alt')) { 4424 var src = img.getAttribute('src') || 'image'; // Default src to 'image' if missing 4425 var altText = src.split('/').pop().split('?')[0].replace(/\.\w+$/, ''); 4426 4427 try { 4428 altText = decodeURIComponent(altText) 4429 .replace(/[_\-+,.:;]+/g, ' ') 4430 .replace(/\s+/g, ' ') 4431 .trim(); 4432 } catch (e) { 4433 altText = 'image'; // Fallback to 'image' if decoding fails 4434 } 4435 4436 // Ensure altText is not empty, otherwise use 'image' 4437 altText = altText || 'image'; 4438 4439 img.setAttribute('alt', altText); 4440 } 4441 4442 // Add width and height attributes if missing 4443 if (!img.hasAttribute('width') || !img.hasAttribute('height')) { 4444 // Handle SVG differently 4445 if (img.src && img.src.endsWith('.svg')) { 4446 // For SVG, use the viewBox to set width and height, if available 4447 fetch(img.src) 4448 .then(response => { 4449 if (!response.ok) { 4450 throw new Error('Failed to fetch SVG: ' + response.status); 4451 } 4452 return response.text(); 4453 }) 4454 .then(svgText => { 4455 var parser = new DOMParser(); 4456 var svgDoc = parser.parseFromString(svgText, "image/svg+xml"); 4457 var svgElement = svgDoc.querySelector('svg'); 4458 4459 if (svgElement) { 4460 var viewBox = svgElement.getAttribute('viewBox'); 4461 if (viewBox) { 4462 var viewBoxValues = viewBox.split(' '); 4463 var width = viewBoxValues[2]; 4464 var height = viewBoxValues[3]; 4465 4466 if (!img.hasAttribute('width')) { 4467 img.setAttribute('width', width); 4468 } 4469 if (!img.hasAttribute('height')) { 4470 img.setAttribute('height', height); 4471 } 4472 } 4473 } 4474 }) 4475 .catch(error => { 4476 // Fallback to default dimensions for SVG 4477 if (!img.hasAttribute('width')) { 4478 img.setAttribute('width', '100'); 4479 } 4480 if (!img.hasAttribute('height')) { 4481 img.setAttribute('height', '100'); 4482 } 4483 }); 4484 } else { 4485 // For non-SVG images, use natural dimensions 4486 var tempImg = new Image(); 4487 tempImg.src = img.src; 4488 4489 tempImg.onload = function() { 4490 if (!img.hasAttribute('width')) { 4491 img.setAttribute('width', tempImg.naturalWidth); 4492 } 4493 if (!img.hasAttribute('height')) { 4494 img.setAttribute('height', tempImg.naturalHeight); 4495 } 4496 }; 4497 4498 tempImg.onerror = function() { 4499 // Fallback to default dimensions 4500 if (!img.hasAttribute('width')) { 4501 img.setAttribute('width', '100'); 4502 } 4503 if (!img.hasAttribute('height')) { 4504 img.setAttribute('height', '100'); 4505 } 4506 }; 4507 } 4508 } 4509 }); 4510 } 4511 4512 document.addEventListener('DOMContentLoaded', function() { 4513 // Run the function initially to catch images already in the DOM 4514 addAttributesToImages(); 4515 4516 // Create a MutationObserver to monitor the DOM for added/changed images 4517 var observer = new MutationObserver(function(mutations) { 4518 mutations.forEach(function(mutation) { 4519 if (mutation.addedNodes.length > 0 || mutation.type === 'attributes') { 4520 // Only process if we have new images or src attribute changes 4521 var hasNewImages = false; 4522 4523 if (mutation.addedNodes.length > 0) { 4524 mutation.addedNodes.forEach(function(node) { 4525 if (node.nodeType === 1) { // Element node 4526 if (node.tagName === 'IMG' || node.querySelectorAll) { 4527 hasNewImages = true; 4528 } 4529 } 4530 }); 4531 } 4532 4533 if (mutation.type === 'attributes' && mutation.attributeName === 'src') { 4534 hasNewImages = true; 4535 } 4536 4537 if (hasNewImages) { 4538 addAttributesToImages(); 4539 } 4540 } 4541 }); 4542 }); 4543 4544 // Start observing the document body for changes 4545 observer.observe(document.body, { 4546 childList: true, // Watch for added or removed nodes 4547 subtree: true, // Watch the entire subtree 4548 attributes: true, // Watch for attribute changes 4549 attributeFilter: ['src'] // Specifically watch for changes in the 'src' attribute 4550 }); 4551 }); 4552</script>
4552<style type='text/css'> select#sid[disabled], select#tid[disabled], select.combobox[disabled], select#bd-chained[disabled], select#category-chained[disabled], select.infinite-chained[disabled], select.subcategory-chained[disabled], select.search-chained[disabled], select#country-chained[disabled], select#state-chained[disabled], select#country-chained-2[disabled], select#state-chained-2[disabled], select#profession_id[disabled] { 4553 cursor: wait 4554} 4555select.select2-preload { 4556 line-height: initial; 4557} 4558 4559select#sid, select#tid, select#ttid, select.combobox, select#bd-chained, select#category-chained, select.infinite-chained, select.subcategory-chained, select.search-chained, select#country-chained, select#state-chained, select#country-chained-2, select#state-chained-2, select#profession_id, [name^="bd_phone_country_code"] { 4560 -webkit-appearance: none; 4561 -moz-appearance: none; 4562 appearance: none; 4563 background-image: url(/images/select2ArrowDown.png) !important; 4564 background-repeat: no-repeat !important; 4565 background-size: 10px 9px !important; 4566 background-position: 99% 16px; 4567 border-radius: 6px; 4568 overflow: hidden; 4569} 4570.module select#sid, .module select#tid, .module select.combobox, .module select#bd-chained, .module select#category-chained, .module select.infinite-chained, .module select.subcategory-chained, .module select.search-chained, .module select#country-chained, .module select#state-chained, .module select#country-chained-2, .module select#state-chained-2, .module select#profession_id, [name^="bd_phone_country_code"] { 4571 background-position: 98.2% 12px; 4572} </style> <!-- DROPDOWN SELECT SCRIPT --> 4573 <!-- Select2 CSS Included in website-styles.pkgd.min.css --> 4574 <!--[if lt IE 9]> 4575
4575<script defer src="https://www.optimizecdn.com/directory/cdn/assets/html5shiv/3.7.2/html5shiv.min.js"></script>
4575 4576
4576<script defer src="https://www.optimizecdn.com/directory/cdn/bootstrap/select2/master/js/respond.min.js"></script>
4576 4577 <![endif]--> 4578
4578<script> 4579 4580 var preloaded_ttid = false; 4581 var preloaded_tid = false; 4582 var preloaded_sid = false; 4583 var path2 = window.location.pathname.replace(/\//g, "_"); 4584 4585 if (performance.navigation.type !== 2) { 4586 if (sessionStorage.getItem('select2-ttid'+path2) !== null) { 4587 sessionStorage.removeItem('select2-ttid'+path2); 4588 } 4589 4590 if (sessionStorage.getItem('select2-tid'+path2) !== null) { 4591 sessionStorage.removeItem('select2-tid'+path2); 4592 } 4593 4594 if (sessionStorage.getItem('select2-sid'+path2) !== null) { 4595 sessionStorage.removeItem('select2-sid'+path2); 4596 } 4597 4598 }else if(performance.navigation.type === 2){ 4599 if (sessionStorage.getItem('select2-ttid'+path2) !== null) { 4600 preloaded_ttid = sessionStorage.getItem('select2-ttid'+path2); 4601 } 4602 4603 if (sessionStorage.getItem('select2-tid'+path2) !== null) { 4604 preloaded_tid = sessionStorage.getItem('select2-tid'+path2); 4605 } 4606 4607 if (sessionStorage.getItem('select2-sid'+path2) !== null) { 4608 preloaded_sid = sessionStorage.getItem('select2-sid'+path2); 4609 } 4610 } 4611 4612 window.addEventListener('load', () => { 4613 let select2Inputs = document.querySelectorAll('.select-category-chained,#sid,#tid,.combobox,#bd-chained,#category-chained,.infinite-chained,.subcategory-chained,.search-chained,select#country-chained,#state-chained,#country-chained-2,#state-chained-2,#profession_id,[name^="bd_phone_country_code"]'); 4614 if (typeof select2Inputs != "undefined") { 4615 for (let i = 0; i < select2Inputs.length; i++) { 4616 let inputPlaceHolder = select2Inputs[i].getAttribute('placeholder'); 4617 if (!select2Inputs[i].getAttribute('placeholder')) { 4618 inputPlaceHolder = select2Inputs[i].getAttribute('data-placeholder'); 4619 } 4620 let countryCode = select2Inputs[i].getAttribute('data-country-code'); 4621 if (select2Inputs[i].getAttribute('data-country-code') != null && countryCode > 0 && typeof isoCountries != 'undefined') { 4622 for (let c = 0; c < isoCountries.length; c++) { 4623 if(isoCountries[c].id == countryCode){ 4624 // select2Inputs[i].querySelector('option:first-child').text = isoCountries[c].text; 4625 select2Inputs[i].text = isoCountries[c].text; 4626 } 4627 } 4628 4629 } 4630 if(select2Inputs[i].hasAttribute('data-country-code')){ 4631 inputPlaceHolder = null; //reset the input 4632 } 4633 if (inputPlaceHolder != '' && inputPlaceHolder !== null) { 4634 select2Inputs[i].querySelector('option:first-child').text = inputPlaceHolder; 4635 select2Inputs[i].style.color = "#a8a8a8"; 4636 if(!select2Inputs[i].querySelector('option:first-child').hasAttribute('value')){ 4637 select2Inputs[i].querySelector('option:first-child').value=''; 4638 } 4639 } 4640 select2Inputs[i].classList.add("select2-preload"); 4641 select2Inputs[i].addEventListener('mousedown', select2OnFormClick, false); 4642 } 4643 } 4644 }); 4645 4646 function select2OnFormClick(event = false) { 4647 let elemtClicked = ''; 4648 if (event !== false) { 4649 event.preventDefault(); 4650 event.stopImmediatePropagation(); 4651 elemtClicked = event.target; 4652 elemtClicked.disabled = true; 4653 } 4654 4655 let loadScriptAsync = function (uri) { 4656 return new Promise((resolve, reject) => { 4657 let script = document.createElement('script'); 4658 script.type = 'text/javascript'; 4659 script.src = uri; 4660 script.async = true; 4661 script.onload = function () { 4662 if (event !== false) { 4663 elemtClicked.disabled = false; 4664 select2Initialize(); 4665 $(elemtClicked).select2('open'); 4666 $(elemtClicked).on("select2-close", function () { 4667 setTimeout(function() { 4668 $('.select2-container-active').removeClass('select2-container-active'); 4669 $(':focus').blur(); 4670 }, 1); 4671 }); 4672 if (elemtClicked.hasAttribute('data-fv-field')) { 4673 if (window.getComputedStyle(elemtClicked).display === "none") { 4674 // if element is display none, the formvalition can not read 4675 elemtClicked.style.cssText = "display: block;position: absolute;visibility: hidden !important;height: 0;width: 0;opacity: 0 !important;"
4676 } 4677 } 4678 } else { 4679 select2Initialize(); 4680 } 4681 resolve("ok"); 4682 }; 4683 let head = document.getElementsByTagName('head')[0]; 4684 head.appendChild(script); 4685 }); 4686 } 4687 4688 let select2Inputs = document.querySelectorAll('.select-category-chained,#sid,#tid,.combobox,#bd-chained,#category-chained,.infinite-chained,.subcategory-chained,.search-chained,select#country-chained,#state-chained,#country-chained-2,#state-chained-2,#profession_id,[name^="bd_phone_country_code"]'); 4689 4690 if (typeof select2Inputs != "undefined") { 4691 for (let i = 0; i < select2Inputs.length; i++) { 4692 let inputPlaceHolder = select2Inputs[i].getAttribute('placeholder'); 4693 if (!select2Inputs[i].getAttribute('placeholder')) { 4694 inputPlaceHolder = select2Inputs[i].getAttribute('data-placeholder'); 4695 } 4696 if(select2Inputs[i].hasAttribute('data-country-code')){ 4697 inputPlaceHolder = null; //reset the input 4698 } 4699 if (inputPlaceHolder != '' && inputPlaceHolder !== null) { 4700 select2Inputs[i].querySelector('option:first-child').text = ''; 4701 } 4702 select2Inputs[i].removeEventListener('mousedown', select2OnFormClick, false); 4703 } 4704 } 4705 let scriptLoaded = loadScriptAsync('https://www.optimizecdn.com/directory/cdn/bootstrap/select2/3.5.2/select2.min.js?v=3.5.5'); 4706 return scriptLoaded; 4707 } 4708 4709 function select2Initialize(){ 4710 function getSecondLevel(div,id) { 4711 $("#" + div).select2("data", { 4712 id: "", 4713 text: `Loading...` 4714 }); 4715 $.ajax({
4716 url : '/ajaxsearch/get-services', 4717 type : "GET", 4718 data : { 4719 'specialty_id' : id 4720 }, 4721 dataType: "json", 4722 success : function(data) { 4723 var options = ''; 4724 4725 for (var i = 0; i < data.length; i++) { 4726 options += '<option value="' + data[i].value + '">' + data[i].title + '</option>'; 4727 } 4728 if (div == "tid"){ 4729 $("#ttid").select2("data", { 4730 id: "", 4731 text: "No options available" 4732 }); 4733 4734 4735 $("#ttid").select2("enable", false); 4736 4737 $("#" + div).change(function () { 4738 sessionStorage.setItem("select2-tid"+path2,$(this).val()); 4739 }); 4740 } 4741 if (data.length > 1) { 4742 $("#" + div).select2("enable",true); 4743 $("#" + div).html(options); 4744 $("#" + div).select2("val", ""); 4745 4746 } else { 4747 $("#"+div).select2("data", { 4748 id: "", 4749 text: "No options available" 4750 }); 4751 $("#"+div).select2("val", ""); 4752 } 4753 4754 if(div == 'tid' && preloaded_tid !== false){ 4755 $("#" + div).select2("val", preloaded_tid); 4756 $("#" + div).trigger('change'); 4757 } 4758 } 4759 }); 4760 } 4761 function getSecondLevelAccount(div,id) { 4762 $("#" + div).select2("data", { 4763 id: "", 4764 text: `Loading...` 4765 }); 4766 $.ajax({
4767 url : '/ajaxsearch/get-services', 4768 type : "GET", 4769 data : { 4770 'specialty_id' : id 4771 }, 4772 dataType: "json", 4773 success : function(data) { 4774 var options = ''; 4775 4776 for (var i = 0; i < data.length; i++) { 4777 options += '<option value="' + data[i].value + '">' + data[i].title + '</option>'; 4778 } 4779 if (data.length > 1) { 4780 $("#" + div).select2("close"); 4781 $("#" + div).select2("val", ""); 4782 $("#" + div).select2("enable",true); 4783 $("#" + div).html(options); 4784 4785 4786 } else { 4787 $("#"+div).select2("data", { 4788 id: "", 4789 text: "No options available" 4790 }); 4791 $("#"+div).select2("val", ""); 4792 } 4793 } 4794 }); 4795 } 4796 function getThirdLevel(div,id,id2) { 4797 $("#"+div).select2("data", { 4798 id: "", 4799 text: `Loading...` 4800 }); 4801 4802 $.ajax({
4803 url : '/ajaxsearch/get-locations', 4804 type : "GET", 4805 data : { 4806 'specialty_id' : id, 4807 'treatment_id' : id2, 4808 }, 4809 dataType: "json", 4810 success : function(data) { 4811 var options = ''; 4812 4813 for (var i = 0; i < data.length; i++) { 4814 options += '<option value="' + data[i].value + '">' + data[i].title + '</option>'; 4815 } 4816 if (data.length > 1) { 4817 $("#" + div).select2("enable",true); 4818 $("#" + div).html(options); 4819 $("#" + div).select2("val", ""); 4820 4821 } else { 4822 $("#"+div).select2("data", { 4823 id: "", 4824 text: "No options available" 4825 }); 4826 $("#"+div).select2("val", ""); 4827 } 4828 } 4829 }); 4830 } 4831 var current_country = ''; 4832 function getStateList(div,id) { 4833 if (id != current_country) { 4834 current_country = id; /* BUGFIX p949P6dS: record the country being fetched so the select2-open re-fetch handler short-circuits at this guard instead of looping forever. current_country was declared (line 274) but never assigned, so this guard was always true: success -> select2("open") re-fired the open handler -> getStateList(id) -> re-fetch -> "Loading..." re-pinned -> infinite loop (Singapore = 2 regions). */ 4835 4836 $("#"+div).select2("data", { 4837 id: "", 4838 text: `Loading...` 4839 }); 4840 $.ajax({
4841 url : '/ajaxsearch/get-states', 4842 type : "GET", 4843 data : { 4844 'country' : id 4845 }, 4846 dataType: "json", 4847 success : function(data) { 4848 $("#" + div).html(''); // clear options 4849 4850 /* p949P6dS: data[0] is always the server-side "(Select from List)" placeholder, 4851 so <=2 entries means the country has at most 1 real region (Singapore, 4852 Martinique, zero-region). Client wants those to read "No State/Province 4853 Available" instead of "(Select from List)"; the single real region stays 4854 selectable. Reset/enable now runs on EVERY response (was gated behind 4855 data.length > 1, which left zero-region countries stuck on "Loading..." 4856 and disabled); auto-open stays multi-region only. */ 4857 var hasStates = (data.length > 2); 4858 for (var i = 0; i < data.length; i++) { 4859 var optionTitle = (!hasStates && data[i].value === "") ? `No State/Province Available for This Country` : data[i].title; 4860 var newOption = new Option(optionTitle, data[i].value, false, false); 4861 $("#" + div).append(newOption).trigger('change'); 4862 4863 } 4864 if (data.length === 0) { 4865 $("#" + div).append(new Option(`No State/Province Available for This Country`, "", false, false)).trigger('change'); 4866 } 4867 4868 $("#" + div).select2("enable",true); 4869 $("#" + div).prop("disabled", false); 4870 $("#" + div).select2("val", ""); 4871 if (hasStates) { 4872 $("#" + div).select2("open"); 4873 } 4874 } 4875 }); 4876 } else { 4877 /* p949P6dS AC#3: the select2-open handler runs select2("enable",false) BEFORE 4878 re-calling getStateList, and for a country with <=2 options (Singapore, 4879 Martinique) that re-call short-circuits here on the id == current_country 4880 guard. This branch previously only reset the value, so the field was left 4881 permanently disabled: select2-container-disabled, clicks never open it, the 4882 single real region is unselectable. Mirror the success path's re-enable so a 4883 short-circuited re-open leaves the field usable. Multi-region countries never 4884 hit this (their open handler is gated behind count <= 2). */ 4885 $("#" + div).select2("enable", true); 4886 $("#" + div).prop("disabled", false); 4887 $("#" + div).select2("val", ""); 4888 } 4889 } 4890 /* p949P6dS: keep the checkout/billing required-State validation in sync with the 4891 server-side waiver, on BOTH layers. When the selected country has selectable 4892 sub-regions (Canada, US, ...) FormValidation validates state_code (inline "Required 4893 Field" on submit); when it has none (Singapore, Martinique, zero-region) the state_code 4894 validator is disabled + un-flagged so those countries are not blocked. Delegated so it 4895 binds even though the billing form is revealed after step 1; guarded to no-op on any 4896 page/form without FormValidation + a state_code field. The server still enforces the 4897 same rule (bd-core-files form_controller), so this is UX only, not the security gate. */ 4898 function bdSyncStateRequired(hasStates) { 4899 var $stField = $("#state-chained"); 4900 var $stForm = $stField.closest("form"); 4901 var stFv = ($stForm.length) ? ($stForm.data("formValidation") || $stForm.data("bootstrapValidator")) : null; 4902 if (!stFv || !stFv.options || !stFv.options.fields || !stFv.options.fields.state_code) { 4903 return; 4904 } 4905 stFv.options.fields.state_code.excluded = hasStates ? false : true; 4906 try { stFv.enableFieldValidators("state_code", hasStates); } catch (e) {} 4907 4908 /* p949P6dS: keep the visible "* " required marker on the State label in sync with the 4909 waiver. functions_up.php renders <span class="required">* </span> on the state_code 4910 label when AVS forces the field required; for a no-state country (Singapore, 4911 Martinique) the field is genuinely waived so the asterisk must go away, and come 4912 back when the country has selectable states again. Scoped to the state label. */ 4913 var $stReq = $("label[for='state-chained'] .required", $stForm); 4914 $stReq.css("display", hasStates ? "" : "none"); 4915 4916 /* p949P6dS: the ACTUAL blocker. The billing form carries a SECOND required layer, 4917 independent of FormValidation: the form's success.form.fv handler loops 4918 $form.find('[required]') and, for any empty one, appends <small class="required-error"> 4919 Required Field</small> + returns false, hard-blocking the submit. AVS renders the 4920 state_code <select> with the HTML5 `required` attribute, so a no-state country 4921 (empty state) stayed blocked with "Required Field" even after the FormValidation 4922 waiver above. Drop the `required` attribute (+ clear its custom error) when the 4923 country has no selectable states, and restore it when it does. Remember the server- 4924 rendered original so we never ADD required to a field AVS left optional. */ 4925 if ($stField.attr("data-bd-orig-required") === undefined) { 4926 $stField.attr("data-bd-orig-required", 4927 ($stField.prop("required") || $stField.attr("required") !== undefined) ? "1" : "0"); 4928 } 4929 var stOrigRequired = ($stField.attr("data-bd-orig-required") === "1"); 4930 4931 var $stRow = $stField.closest(".form-group,.fv-row,.row"); 4932 if (!hasStates) { 4933 try { if (typeof stFv.resetField === "function") { stFv.resetField("state_code", true); } } catch (e) {} 4934 $stRow.removeClass("has-error has-success"); 4935 $stRow.find(".help-block[data-fv-validator]").css("display", "none"); 4936 /* drop the HTML5 required gate + its "Required Field" message for no-state country */ 4937 $stField.removeAttr("required").prop("required", false); 4938 $stField.siblings(".required-error").remove(); 4939 $stRow.find(".required-error").remove(); 4940
4941 /* p949P6dS: on the Member-Dashboard billing modal the Save button is disabled by 4942 FormValidation until the whole form is valid; for a no-state country the user 4943 has no state to pick, so nothing re-enables it and Save stays stuck disabled -> 4944 "cannot save". Re-enable it directly. IMPORTANT: do NOT call stFv.validate() 4945 here â in this FormValidation build validate() on an already-valid form fires 4946 success.form.fv (a real submit), which saved the address on the country change 4947 AND consumed the one-time CSRF token, so the actual Save click then failed with 4948 "You entered invalid data. Please try to save again." disableSubmitButtons only 4949 toggles the button; no submit. Scoped to the billing modal so checkout is 4950 untouched. */ 4951 if ($stForm.closest("#billing_address_modal").length) { 4952 try { if (typeof stFv.disableSubmitButtons === "function") { stFv.disableSubmitButtons(false); } } catch (e) {} 4953 $stForm.find("input.submitter, button.submitter, [type=submit]") 4954 .removeClass("disabled").prop("disabled", false).removeAttr("disabled"); 4955 } 4956 } else if (stOrigRequired) { 4957 /* country has states again â restore the required gate AVS originally set */ 4958 $stField.attr("required", "required").prop("required", true); 4959 } 4960 } 4961 $(document).off("change.bdStateReq").on("change.bdStateReq", "#country-chained", function() { 4962 var bdCc = $(this).val(); 4963 var $bdForm = $("#state-chained").closest("form"); 4964 var bdFv = ($bdForm.length) ? ($bdForm.data("formValidation") || $bdForm.data("bootstrapValidator")) : null; 4965 if (!bdFv || !bdFv.options || !bdFv.options.fields || !bdFv.options.fields.state_code || bdCc === "") { 4966 return; 4967 } 4968 $.ajax({
4969 url: "/ajaxsearch/get-states", 4970 type: "GET", 4971 data: { "country": bdCc }, 4972 dataType: "text", 4973 success: function(bdResp) { 4974 /* count entries without regex (DB+eval mangles backslashes): split on the 4975 literal "value" key; total entries = splits - 1; >2 means placeholder + 2+ 4976 real regions == has selectable states. Text parse also survives the 4977 malformed-JSON zero-region response. */ 4978 var bdTotal = bdResp.split(`"value"`).length - 1; 4979 bdSyncStateRequired(bdTotal > 2); 4980 } 4981 }); 4982 }); 4983 /* p949P6dS: the Member Dashboard billing modal (widget 1861) pre-selects the member's 4984 SAVED country_code at document.ready without firing a change event, so the handler 4985 above never ran for it and an AVS-forced required State (functions_up.php forces 4986 field_required=1 on state_code when whmcs_avs_on / stripe_accept_intl_payments is on) 4987 stayed active for a saved no-state country â blocking the save with "Required Field" 4988 on a country that has no state to pick. Sync once for an already-selected country. 4989 The namespaced trigger fires only this handler (not select2/getStateList), and the 4990 handler no-ops when the country is empty or state_code is not a validated field, so 4991 checkout and every other chained-select page are unaffected. */ 4992 $("#country-chained").each(function() { 4993 if ($(this).val() !== "") { 4994 $(this).trigger("change.bdStateReq"); 4995 } 4996 }); 4997 function getInfinityChained(div,id) { 4998 $("#"+div).select2("data", { 4999 id: "", 5000 text: `Loading...` 5001 }); 5002 $.ajax({
5003 url : '/ajaxsearch/get-subcategory', 5004 type : "GET", 5005 data : { 5006 'parent' : id 5007 }, 5008 dataType: "json", 5009 success : function(data) { 5010 var options = ''; 5011 5012 for (var i = 0; i < data.length; i++) { 5013 options += '<option value="' + data[i].value + '">' + data[i].title + '</option>'; 5014 } 5015 if (data.length > 1) { 5016 $("#" + div).select2("enable",true); 5017 $("#" + div).html(options); 5018 if(div == 'tid' && '' != ''){ 5019 $("#" + div).select2("val", ""); 5020 $("#" + div).trigger('change'); 5021 } else if(div == 'tid' && preloaded_tid !== false){ 5022 $("#" + div).select2("val", preloaded_tid); 5023 $("#" + div).trigger('change'); 5024 }else { 5025 $("#" + div).select2("val", ""); 5026 } 5027 5028 5029 5030 5031 } else { 5032 $("#" + div).select2("data", { 5033 id: "", 5034 text: "No options available" 5035 }); 5036 } 5037 } 5038 }); 5039 } 5040 function categoryChained(div,id) { 5041 $("#" + div).select2("data", { 5042 id: "", 5043 text: `Loading...` 5044 }); 5045 if(div == "tid") { 5046 url_link = '/ajaxsearch/get-services' 5047 data_passed = {'specialty_id' : id} 5048 } else { 5049 url_link = '/ajaxsearch/category-list'; 5050 data_passed = {'parent' : id} ; 5051 } 5052 5053 var selectName = $("select[next="+div+"]").prop("name"); 5054 5055 5056 if( (selectName == "ttid" || selectName == "sid" || selectName == "tid") ){ 5057 5058 sessionStorage.setItem("select2-"+selectName+path2,id); 5059 } 5060 5061 $.ajax({
5062 url : url_link, 5063 type : "GET", 5064 data : data_passed, 5065 dataType: "json", 5066 success : function(data) { 5067 var options = ''; 5068 5069 for (var i = 0; i < data.length; i++) { 5070 options += '<option value="' + data[i].value + '">' + data[i].title + '</option>'; 5071 } 5072 5073 if (data.length > 1) { 5074 $("#" + div).select2("enable",true); 5075 $("#" + div).html(options); 5076 5077 if(div == "ttid" && preloaded_ttid !== false){ 5078 $("#" + div).select2("val", preloaded_ttid); 5079 $("#" + div).trigger('change'); 5080 }else if(div == "tid" && preloaded_tid !== false){ 5081 $("#" + div).select2("val", preloaded_tid); 5082 $("#" + div).trigger('change'); 5083 }else{ 5084 $("#" + div).select2("val", ""); 5085 } 5086 5087 5088 5089 } else { 5090 $("#" + div).select2("data", { 5091 id: "", 5092 text: "No options available" 5093 }); 5094 } 5095 } 5096 }); 5097 } 5098 function formatCountry(country) { 5099 if (!country.id && country.text.includes("+")) { 5100 let dataCountry = country.text; 5101 dataCountry = dataCountry.split('+') 5102 country.code = dataCountry[0].trim(); 5103 country.id = dataCountry[1].trim(); 5104 return country; 5105 } else if (!country.code) { 5106 return country.text; 5107 } 5108 var $country = $( 5109 '<span class="flag-icon flag-icon-' + country.code.toLowerCase() + ' flag-icon-squared"></span>' + 5110 '<span class="flag-text" style="margin-left:10px;">' + country.text + '</span>' 5111 ); 5112 return $country; 5113 } 5114 5115 let phoneCountryCode = document.querySelector("[name^='bd_phone_country_code']"); 5116 if (typeof phoneCountryCode != 'undefined' && phoneCountryCode != null && typeof isoCountries != 'undefined') { 5117 $("[name^='bd_phone_country_code']").select2({ 5118 placeholder:`Country`, 5119 data:isoCountries, 5120 searchInputPlaceholder: `Enter Country Code`, 5121 formatResult : formatCountry, 5122 dropdownAutoWidth: true, 5123 width: "resolve", 5124 }).on("select2-opening", function (e) { 5125 if (typeof e.currentTarget.attributes['data-default-country-code'] !== "undefined") { 5126 $(this).val(e.currentTarget.attributes['data-default-country-code'].value) 5127 .removeAttr("data-default-country-code") 5128 .trigger('change') 5129 .trigger('open'); 5130 } 5131 }).change(function (e) { 5132 let select2Span = $(this).attr('id'); 5133 if (e.val) { 5134 $('#'+$(this).attr('id')+'--flag').remove(); 5135 $('#s2id_' + select2Span + ' a span.select2-chosen').prepend('<span class="flag-icon flag-icon-' + e.added.code.toLowerCase() + ' flag-icon-squared" style="margin-right:10px"></span>') 5136 }else{ 5137 $('#s2id_' + select2Span + ' a span.select2-chosen').prepend('<span class="flag-icon flag-icon-' + $(this).attr('data-default-country-flag').toLowerCase() + ' flag-icon-squared" style="margin-right:10px"></span>') 5138 } 5139 $(this).removeAttr("data-default-country-flag"); 5140 5141 }); 5142 } 5143 $("#bd-chained").select2({ 5144 title: "Select An Option", 5145 placeholder: "Select An Option", 5146 allowClear: true, 5147 formatNoMatches: function () { 5148 return "No matches found"; 5149 } 5150 }).change(function () { 5151 var id = $(this).val(); 5152 $("#tid").select2("enable",false); 5153 getInfinityChained("tid",id); 5154 }); 5155 $("#category-chained").select2({ 5156 title: "Select An Option", 5157 placeholder: "Select An Option", 5158 allowClear: true 5159 }).change(function () { 5160 var id = $(this).val(); 5161 $("#subcategory-chained").select2("enable",false); 5162 categoryChained("subcategory-chained",id); 5163 }); 5164 5165 $(".select-category-chained").select2({ 5166 title: "Select An Option", 5167 placeholder: "Select An Option", 5168 allowClear: true 5169 }) 5170 $(".infinite-chained").select2({ 5171 title: "Select option from list", 5172 placeholder: "Click to select an option", 5173 allowClear: true, 5174 formatNoMatches: function () { 5175 return "No matches found"; 5176 } 5177 }).change(function () { 5178 var id = $(this).val(); 5179 var attr = $(this).attr('next'); 5180 var selectName = $(this).prop('name'); 5181 if ( selectName=='ttid' || attr =='ttid' ) { 5182 $("#" + attr).select2("enable",false); 5183 categoryChained(attr,id); 5184 sessionStorage.setItem("select2-"+selectName+path2,id); 5185 } 5186 }).on("select2-close", function () { 5187 setTimeout(function() { 5188 $('.select2-container-active').removeClass('select2-container-active'); 5189 $(':focus').blur(); 5190 }, 1); 5191 }); 5192 $("#subcategory-chained").select2(); 5193 $(".combobox").select2();
5194 $(".search-chained").select2(); 5195 5196 $("select#country-chained").select2({ 5197 title: "", 5198 placeholder: "", 5199 val: "", 5200 allowClear: true, 5201 formatNoMatches: function () { 5202 return "No matches found"; 5203 } 5204 }).change(function () { 5205 var id = $(this).val(); 5206 $("#state-chained").select2("enable",false); 5207 getStateList("state-chained",id); 5208 var state = ""; 5209 5210 if (id == "CA") { 5211 state = "Province"; 5212 5213 } else if (id == "UK") { 5214 state = "Region"; 5215 5216 } else if (id == "US" || id == "AU") { 5217 state = "State"; 5218 5219 } else { 5220 state = "Region"; 5221 } 5222 $("#state-chained").prev(".control-label").text(state); 5223 }); 5224 $("#state-chained").select2(); 5225 5226 $("#state-chained").on("select2-open", function(event) { 5227 event.preventDefault(); 5228 var id = $("#country-chained").val(); 5229 var count = $('#state-chained option').length; 5230 5231 if (id != "" && count <= 2) { 5232 $("#state-chained").select2("enable",false); 5233 getStateList("state-chained",id); 5234 var state = ""; 5235 5236 if (id == "CA") { 5237 state = "Province"; 5238 5239 } else if (id == "UK") { 5240 state = "Region"; 5241 5242 } else if (id == "US" || id == "AU") { 5243 state = "State"; 5244 5245 } else { 5246 state = "Region"; 5247 } 5248 $("#state-chained").prev(".control-label").text(state); 5249 } 5250 }); 5251 5252 $("#country-chained-2").select2({ 5253 title: "Select Country", 5254 placeholder: "(select country)", 5255 val: "", 5256 allowClear: true, 5257 formatNoMatches: function () { 5258 return "No matches found"; 5259 } 5260 }).change(function () { 5261 var id = $(this).val(); 5262 $("#state-chained-2").select2("enable",false); 5263 getStateList("state-chained-2",id); 5264 var state = ""; 5265 5266 if (id == "CA") { 5267 state = "Province"; 5268 5269 } else if (id == "UK") { 5270 state = "Region"; 5271 5272 } else if (id == "US" || id == "AU") { 5273 state = "State"; 5274 5275 } else { 5276 state = "Region"; 5277 } 5278 $("#state-chained-2").prev(".control-label").text(state); 5279 }); 5280 5281 $("#state-chained-2").select2(); 5282 $("#profession_id").select2({ 5283 placeholder: "Select From List", 5284 allowClear: true, 5285 formatNoMatches: function () { 5286 return "No matches found"; 5287 } 5288 }).change(function () { 5289 var id = $(this).val(); 5290 getSecondLevelAccount("category_id",id); 5291 }); 5292 $("#sid").select2({ 5293 title: "Select An Option", 5294 placeholder: "Select An Option", 5295 allowClear: true, 5296 formatNoMatches: function () { 5297 return "No matches found"; 5298 } 5299 }).change(function () { 5300 var id = $(this).val(); 5301 $("#tid").select2("enable",false); 5302 getSecondLevel("tid",id); 5303 $("#tid").select2("open"); 5304 sessionStorage.setItem("select2-sid"+path2,id); 5305 }); 5306 $("#location_value_dropdown").select2({ 5307 title: "(optional)", 5308 placeholder: "(optional)", 5309 allowClear: true, 5310 formatNoMatches: function () { 5311 return "No matches found"; 5312 } 5313 }); 5314 $("#tid").select2({ 5315 title: "Select An Option", 5316 placeholder: "Select An Option", 5317 allowClear: true, 5318 formatNoMatches: function () { 5319 return "No matches found"; 5320 } 5321 }); 5322 $("#location_value_dropdown").select2({ 5323 title: "(optional)", 5324 placeholder: "(optional)", 5325 allowClear: true 5326 }); 5327 } 5328 5329 if(preloaded_ttid !== false || preloaded_tid !== false || preloaded_sid !== false){ 5330 $(document).ready(function(){ 5331 // Skip if homepage widget already handles preload 5332 if(window._bdCategoryPreloaded) return; 5333 5334 if(preloaded_sid !== false && $("#sid").length > 0){ 5335 select2OnFormClick(); 5336 setTimeout(() => { 5337 $("#sid").select2('val', preloaded_sid); 5338 $('#sid').trigger('change'); 5339 }, 500); 5340 }else if(preloaded_tid !== false && $("#sid").length <= 0){ 5341 select2OnFormClick(); 5342 setTimeout(() => { 5343 $("#tid").select2('val', preloaded_tid);
5344 $('#tid').trigger('change'); 5345 }, 500); 5346 } 5347 }); 5348 } 5349 </script>
vendor: 2 bytes, line 5349
5349
5350<script> 5351 // Function to add aria-label to <select> elements without it, for better pagespeed accessibility score 5352 $(document).ready(function() { 5353 var ariaLabelCounter = {}; // Object to keep track of aria-label counts for uniqueness 5354 5355 // Iterate over each select element that does not have an aria-label 5356 $('select:not([aria-label])').each(function() { 5357 // Use the ID or placeholder as the base for the aria-label, stripping HTML tags 5358 var baseLabel = this.id || $(this).attr('placeholder') || 'select'; 5359 baseLabel = baseLabel.replace(/<[^>]*>/g, '').trim(); // Remove HTML tags and trim 5360 5361 // Ensure uniqueness of each aria-label 5362 ariaLabelCounter[baseLabel] = (ariaLabelCounter[baseLabel] || 0) + 1; 5363 var ariaLabel = baseLabel + '-' + ariaLabelCounter[baseLabel]; 5364 5365 // Truncate aria-label to 100 characters 5366 ariaLabel = ariaLabel.length > 100 ? ariaLabel.substring(0, 100) : ariaLabel; 5367 5368 // Set the aria-label attribute to the unique label 5369 $(this).attr('aria-label', ariaLabel); 5370 }); 5371 }); 5372</script>
vendor: 2 bytes, line 5372
5372
5373<script type="application/ld+json"> 5374{ 5375 "@context": "https://schema.org", 5376 "@graph": [ 5377 { 5378 "@type": "WebSite", 5379 "@id": "https://www.mythreebids.com/#website", 5380 "name": "My Three Bids", 5381 "url": "https://www.mythreebids.com/", 5382 "inLanguage": "en-US", 5383 "potentialAction": { 5384 "@type": "SearchAction", 5385 "target": "https://www.mythreebids.com/sitesearch?q={search_term_string}", 5386 "query-input": "required name=search_term_string", 5387 "name": "Search Directory: My Three Bids" 5388 }, 5389 "publisher": { 5390 "@id": "https://www.mythreebids.com/#organization" 5391 } 5392 }, 5393 { 5394 "@type": "Organization", 5395 "@id": "https://www.mythreebids.com/#organization", 5396 "name": "My Three Bids", 5397 "description": "Search the most complete home improvement pros directory. Find home improvement pros. contractor San Francisco contractor near me hvac san jose", 5398 "url": "https://www.mythreebids.com/", 5399 "mainEntityOfPage": { 5400 "@type": "WebPage", 5401 "@id": "https://www.mythreebids.com/#webpage" 5402 }, 5403 "contactPoint": [ 5404 { 5405 "@type": "ContactPoint", 5406 "email": "[email protected]", 5407 "contactType": "customer support", 5408 "availableLanguage": [ 5409 "en" 5410 ], 5411 "areaServed": "US" 5412 } 5413 ], 5414 "areaServed": { 5415 "@type": "Country", 5416 "name": "US" 5417 }, 5418 "telephone": "1-833-698-4733", 5419 "sameAs": [ 5420 "http://www.instagram.com/mythreebids" 5421 ], 5422 "logo": { 5423 "@type": "ImageObject", 5424 "@id": "https://www.mythreebids.com/#logo", 5425 "url": "/images/brand-logo-4.5.18.png" 5426 }, 5427 "image": { 5428 "@type": "ImageObject", 5429 "@id": "https://www.mythreebids.com/#image", 5430 "url": "/images/brand-logo-4.5.18.png" 5431 }, 5432 "keywords": [ 5433 "Home-Improvement Match-Making Made Easy", 5434 "Home Improvement Pros", 5435 "My Three Bids", 5436 "My Three Bids", 5437 "Home Improvement Pros", 5438 "Home-Improvement Match-Making Made Easy" 5439 ] 5440 }, 5441 { 5442 "@type": "WebPage", 5443 "@id": "https://www.mythreebids.com/#webpage", 5444 "url": "https://www.mythreebids.com/", 5445 "name": "Home Improvement Pros Directory - Find Home Improvement Pros - My Three Bids", 5446 "description": "Search the most complete home improvement pros directory. Find home improvement pros. contractor San Francisco contractor near me hvac san jose", 5447 "inLanguage": "en-US", 5448 "copyrightYear": "2026", 5449 "copyrightHolder": { 5450 "@id": "https://www.mythreebids.com/#organization" 5451 }, 5452 "about": "My Three Bids", 5453 "spatialCoverage": { 5454 "@type": "Place", 5455 "address": { 5456 "@type": "PostalAddress", 5457 "addressCountry": "US" 5458 } 5459 }, 5460 "mainEntityOfPage": { 5461 "@id": "https://www.mythreebids.com/#webpage" 5462 }, 5463 "isPartOf": { 5464 "@id": "https://www.mythreebids.com/#website" 5465 }, 5466 "publisher": { 5467 "@id": "https://www.mythreebids.com/#organization" 5468 }, 5469 "keywords": [ 5470 "Home-Improvement Match-Making Made Easy", 5471 "Home Improvement Pros", 5472 "My Three Bids", 5473 "My Three Bids", 5474 "Home Improvement Pros", 5475 "Home-Improvement Match-Making Made Easy" 5476 ], 5477 "dateModified": "2019-03-14T09:55:17-08:00", 5478 "primaryImageOfPage": { 5479 "@id": "https://www.mythreebids.com/#image" 5480 } 5481 } 5482 ] 5483}</script>
5483 5484
5485<script> 5486// Bootstrap Icons fallback loader - ensures Bootstrap Icons work even if HEAD widget is customized, do not delete 5487(function() { 5488 if (!document.querySelector('link[href*="bootstrap-icons"]')) { 5489 var link = document.createElement('link'); 5490 link.rel = 'stylesheet'; 5491 link.href = 'https://www.optimizecdn.com/directory/cdn/assets/bootstrap/fonts/bootstrap-icons.min.css?v=1.13.1'; 5492 document.head.appendChild(link); 5493 } 5494})(); 5495</script>
5495 5496<style type='text/css'> .input-group.normal-autosuggest input,.input-group.sm-autosuggest input, .input-group.md-autosuggest input { 5497 border-radius: 0 8px 8px 0 !important; 5498 } 5499.normal-autosuggest .twitter-typeahead, .sm-autosuggest .twitter-typeahead, .md-autosuggest .twitter-typeahead, .large-autosuggest .twitter-typeahead { 5500 display: inline-block; 5501 height: 25px; 5502 position: relative; 5503 width: 100%; 5504} 5505.input-group.normal-autosuggest .twitter-typeahead, .input-group.sm-autosuggest .twitter-typeahead, .input-group.large-autosuggest .twitter-typeahead:not(.search_box .twitter-typeahead) { 5506 width: inherit; 5507} 5508.normal-autosuggest .twitter-typeahead .clear_content.medium{ 5509 bottom: 0px; 5510} 5511.sm-autosuggest .twitter-typeahead .clear_content.small{ 5512 bottom: -4px; 5513} 5514.md-autosuggest.input-group .twitter-typeahead .clear_content.medium { 5515 bottom: -2px; 5516} 5517.md-autosuggest .twitter-typeahead { 5518 height: 32px; 5519} 5520.md-autosuggest .input-group-addon + .input_wrapper .twitter-typeahead { 5521 height: 38px; 5522 vertical-align: top; 5523} 5524.md-autosuggest-input + .clear_content.medium { 5525 bottom: 0px; 5526} 5527.large-autosuggest .twitter-typeahead { 5528 height: 40px; 5529} 5530.normal-autosuggest .twitter-typeahead{ 5531 height: 38px; 5532} 5533.normal-autosuggest .twitter-typeahead .tt-hint, .sm-autosuggest .twitter-typeahead .tt-hint { 5534 background: #fff !important; 5535 border: 1px solid #ccc!important; 5536 border-radius: 0 8px 8px 0; 5537 box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075) inset!important; 5538 color: transparent; 5539 left: 0; 5540 padding: 4px 11px; 5541 position: absolute; 5542 top: 0; 5543 width: 100%; 5544 font-size:12px; 5545} 5546.normal-autosuggest.input-group-addon .fa, .sm-autosuggest .input-group-addon .fa, .input-group-sm .input-group-addon .fa {font-size:12px} 5547.md-autosuggest .twitter-typeahead .tt-hint { 5548 height: 100%; 5549 background: #ffffff none repeat scroll 0 0 !important; 5550 border: 1px solid #cccccc !important; 5551 border-radius: 0 8px 8px 0; 5552 box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075) inset !important; 5553 color: rgba(0, 0, 0, 0); 5554 left: 0; 5555 padding: 6px 11px; 5556 position: absolute; 5557 top: 0; 5558 width: 100%; 5559} 5560.large-autosuggest {background: #fff !important;border-radius:10px;} 5561.large-autosuggest input {width: 100%!important;box-shadow:none; border-radius: 10px;} 5562 .input-group.large-autosuggest input,.input-group.large-autosuggest .twitter-typeahead .tt-hint { 5563 border-radius: 0 10px 10px 0!important; 5564 } 5565 .large-autosuggest .twitter-typeahead .tt-hint { 5566 background: #fff !important; 5567 border: 1px solid #ccc!important; 5568 border-radius: 10px; 5569 box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075) inset!important; 5570 color: transparent; 5571 left: 0; 5572 position: absolute; 5573 top: 0; 5574 width: 100%; 5575 font-size: 18px; 5576 height: 46px; 5577 line-height: 1.33333; 5578 padding: 10px 15px; 5579} 5580.tt-dataset .empty-message { 5581 display: none !important; 5582} 5583.twitter-typeahead .tt-query {background-color:#fff!important} 5584.input-group.large-autosuggest span:first-child .tt-hint {border-radius: 0 !important;} 5585span.tt-dropdown-menu { 5586 border: 1px solid #FCFCFC; 5587 border-radius: 5px; 5588 box-shadow: 0 5px 10px rgba(0,0,0,.2); 5589 width: 100% !important; 5590} 5591.tt-is-under-cursor a.suggest-link { 5592 background: #55ACEE; 5593} 5594 5595.tt-is-under-cursor .media-heading, 5596.tt-is-under-cursor .suggest-origin, 5597.tt-is-under-cursor .location{ 5598 color:#fff!important; 5599} 5600.tt-suggestion .media .media-body .suggest-origin { 5601 color: rgba(45, 91, 137,0.9); 5602 padding: 1px 0; 5603 border-radius: 6px; 5604 font-weight: bold; 5605 line-height: 12px; 5606} 5607.tt-suggestion { 5608 background: #fff; 5609 border-bottom: 1px solid #eee; 5610 -webkit-transition: all 0.3s ease-in-out; 5611 -moz-transition: all 0.3s ease-in-out; 5612 -o-transition: all 0.3s ease-in-out; 5613 transition: all 0.3s ease-in-out; 5614} 5615body .tt-suggestions .media.br-bottom img { 5616 max-width: 45px; 5617 height: auto; 5618} 5619body .tt-suggestions .media-body span { 5620 font-size: 10px; 5621} 5622body .tt-suggestions .media-body h4 { 5623 font-size: 12px; 5624 margin: 2px 0px; 5625 text-transform: capitalize; 5626} 5627a.suggest-link { 5628 padding: 5px; 5629 display: block; 5630} 5631a.suggest-link img { 5632 border-radius: 100px; 5633 display: block; 5634 margin: 0 auto; 5635 height: 100%!important; 5636 width: 100%; 5637 object-fit: cover; 5638} 5639.left-suggest-col {
5640 display: inline-block; 5641 vertical-align: middle; 5642 width: 44px; 5643 height: 44px; 5644} 5645.right-suggest-col { 5646 display: inline-block; 5647 padding-left: 1%; 5648 text-align: left; 5649 vertical-align: middle; 5650 width: calc(100% - 1% - 50px); 5651} 5652p.media-heading { 5653 color: #333; 5654 font-size: 12px; 5655 font-weight: 600; 5656 margin-bottom: 0; 5657} 5658p.suggest-origin { 5659 font-size: 10px; 5660 color: #333; 5661 margin:0; 5662} 5663p.location { 5664 color: #333; 5665 font-size: 10px; 5666 margin: 2px 0; 5667} 5668body .tt-is-under-cursor a.suggest-link { 5669 background: #F7F7F7; 5670} 5671body .tt-is-under-cursor .media-heading, body .tt-is-under-cursor .suggest-origin, body .tt-is-under-cursor .location { 5672 color: #333!important; 5673} 5674a.suggest-link[data-heading="heading"] { 5675 pointer-events: none; 5676 cursor: default; 5677 text-decoration: none; 5678} 5679body .tt-is-under-cursor a.suggest-link[data-heading="heading"] { 5680 background: rgb(231, 244, 230); 5681} 5682/* --- all the novalue css --- */ 5683a.suggest-link .suggest-origin[data-state="novalue"] { 5684 display: none; 5685} 5686a.suggest-link .location[data-state="novalue"] { 5687 display: none; 5688} 5689a.suggest-link img[data-state="novalue"] { 5690 display: none; 5691} 5692a.suggest-link .suggest-origin[data-state="heading"] { 5693 display: none; 5694} 5695a.suggest-link .media-heading[data-heading="heading"] { 5696 color:rgb(64, 64, 64)!important; 5697 font-weight: bold; 5698 padding: 4px; 5699 font-size: 13px; 5700} 5701.left-suggest-col[data-photo="novalue"], .left-suggest-col[data-photo="undefined"] { 5702 display: none; 5703} 5704.right-suggest-col[data-photo="novalue"], .right-suggest-col[data-photo="undefined"] { 5705 width: 100%; 5706} 5707a.suggest-link[href="novalue"] { 5708 cursor: default !important; 5709 pointer-events: none; 5710} 5711a.suggest-link[data-heading="heading"] { 5712 background-color: rgb(231, 244, 230); 5713} 5714div.content-shell { 5715 overflow: inherit; 5716} 5717span.tt-dropdown-menu div { 5718 float: none; 5719} 5720.tt-menu { 5721 border-radius: 0 0 6px 6px; 5722 box-shadow: 0 0 3px rgba(0, 0, 0, 0.2); 5723 overflow: hidden; 5724 width: 100%; 5725 z-index: 150 !important; 5726} 5727.tt-menu .tt-dataset { 5728 overflow-y: auto; 5729 max-height: 200px; 5730} </style>
5730<script> 5731 window.addEventListener('load', () => { 5732 let embedlyClass = document.querySelector('.fr-embedly'); 5733 if (typeof embedlyClass != "undefined" && embedlyClass != null) { 5734 let embedlyURI = "https://www.optimizecdn.com/directory/cdn/assets/bootstrap/js/embedly_widget.min.js"; 5735 let head = document.getElementsByTagName("head")[0]; 5736 let script = document.createElement('script'); 5737 script.type = 'text/javascript'; 5738 script.src = embedlyURI; 5739 script.async = true; 5740 script.onload = function() { 5741 setTimeout(function() { 5742 if (typeof embedly !== 'undefined' && embedly.card) { 5743 document.querySelectorAll('.embedly-card').forEach(function(card) { 5744 embedly.card(card); 5745 }); 5746 } 5747 }, 500); 5748 }; 5749 head.appendChild(script); 5750 } 5751 }); 5752</script>
5752<script type="text/javascript" src="https://www.optimizecdn.com/directory/cdn/assets/bootstrap/jquery.lazy/1.7.9/jquery.lazy.min.js"></script>
5752<script> 5753 $(function () { 5754 $(".lazyloader").Lazy({ 5755 afterLoad: function(element) { 5756 $(".gridView.activeView").click(); 5757 } 5758 }); 5759 5760 }); 5761 $("button[class*='slick'],button[id*='slick']").click(function () { 5762 $(this).parents(".row").find(".lazyloader").lazy({ 5763 bind: "event", 5764 delay: 0 5765 }); 5766 }); 5767 $("[class*='slick'],[id*='slick']").on("swipe",function(){ 5768 $(this).parents(".row").find(".lazyloader").lazy({ 5769 bind: "event", 5770 delay: 0 5771 }); 5772 }); 5773 </script>
5773<script defer src="https://www.optimizecdn.com/directory/cdn/assets/bootstrap/js/websiteScripts.min.js?v=8.0.0"></script>
5773 5774 </body> 5775 </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.