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://ik.imagekit.io" crossorigin> 11 <link rel="preconnect" href="https://fonts.googleapis.com"> 12 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> 13 <link rel="apple-touch-icon" href="/images/fdd-favicon.png"> 14 <link rel="icon" type="image/png" href="/images/fdd-favicon.png"> 15 16 <!-- Site Meta Data --> 17 <title>Contact Us - Family Dental Directory</title> 18 <meta name="description" content="Contact Family Dental Directory. Fill in the form below to contact us. "> 19 <meta name="keywords" content="dental,dentist"> 20 <meta name="robots" content="index, follow"> 21 22 <!-- Canonical URL --> 23 <link rel="canonical" href="https://www.familydentaldirectory.com/about/contact"> 24 <link rel="alternate" type="application/rss+xml" title="Family Dental Directory RSS Feed" href="https://www.familydentaldirectory.com/rss" /> 25 26 <!-- Social Media Meta Data --> 27 <meta property="og:type" content="website"> 28 <meta property="og:url" content="https://www.familydentaldirectory.com/about/contact"> 29 <meta property="og:site_name" content="Family Dental Directory"> 30 <meta property="og:title" content="Contact Us - Family Dental Directory"> 31 <meta property="og:description" content="Contact family dental directory. Fill in the form below to contact us."> 32 <meta property="og:image" content="https://ik.imagekit.io/dentaldirectory/find-a-dentist-near-me "> 33
33<script> 34 var siteInfoSpan=document.createElement('span'); 35 siteInfoSpan.style.cssText='position:absolute;color:transparent;width:100%;z-index:-1;height:50px;top:0;'; 36 siteInfoSpan.textContent='www.familydentaldirectory.com - Family Dental Directory'; 37 document.documentElement.appendChild(siteInfoSpan); 38 </script>
38 39 40 <!-- Preload --> 41 <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> 42 <link rel="preload" as="style" href="https://fonts.googleapis.com/css?family=Poppins:300,400,600,700,800,900&display=swap" fetchpriority="high"> 43 44 <!-- Non-Critical Stylesheet - Render Before Critical Styles --> 45 <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> 46 <noscript> 47 <link rel="stylesheet" href="https://www.optimizecdn.com/directory/cdn/assets/bootstrap/css/non-critical-styles.pkgd.min.css" crossorigin> 48 </noscript> 49 50 <!-- Critical Stylesheet --> 51 <link rel="stylesheet" href="https://www.optimizecdn.com/directory/cdn/assets/bootstrap/css/critical-styles.pkgd.min.css?v=09.05.26" crossorigin> 52 53 <!-- Google Fonts Stylesheet --> 54 <link rel="stylesheet" media="print" onload="this.onload=null;this.removeAttribute('media');" href="https://fonts.googleapis.com/css?family=Poppins:300,400,600,700,800,900&display=swap"> 55 <noscript> 56 <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Poppins:300,400,600,700,800,900&display=swap"> 57 </noscript> 58 59 <!-- FontAwesome Stylesheet --> 60 <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> 61 <noscript> 62 <link rel="stylesheet" href="https://www.optimizecdn.com/directory/cdn/assets/bootstrap/font-awesome/css/font-awesome.min.css" crossorigin> 63 </noscript> 64 65 <!-- Bootstrap Icons Stylesheet --> 66 <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> 67 <noscript> 68 <link rel="stylesheet" href="https://www.optimizecdn.com/directory/cdn/assets/bootstrap/fonts/bootstrap-icons.min.css?v=1.13.1" crossorigin> 69 </noscript> 70 71 <!-- Critical JavaScript --> 72
72<script src="https://www.optimizecdn.com/directory/cdn/assets/bootstrap/js/jquery.min.js"></script>
72 73
73<script src="https://www.optimizecdn.com/directory/cdn/assets/bootstrap/js/bootstrap-3.3.5.min.js"></script>
73 74
74<script> 75 /* jQuery.event.special.touchstart = { 76 setup: function( _, ns, handle ) { 77 this.addEventListener("touchstart", handle, { passive: !ns.includes("noPreventDefault") }); 78 } 79 }; */ 80 jQuery.event.special.touchmove = { 81 setup: function( _, ns, handle ) { 82 this.addEventListener("touchmove", handle, { passive: !ns.includes("noPreventDefault") }); 83 } 84 }; 85 jQuery.event.special.wheel = { 86 setup: function( _, ns, handle ){ 87 this.addEventListener("wheel", handle, { passive: true }); 88 } 89 }; 90 jQuery.event.special.mousewheel = { 91 setup: function( _, ns, handle ){ 92 this.addEventListener("mousewheel", handle, { passive: true }); 93 } 94 }; 95 </script>
95 96 97 <!-- Breadcrumb Position --> 98 <style>html.bc-relocate .container:has(> .breadcrumb):has(~ .hero_section_container) .breadcrumb{display:none!important;}html.bc-relocate .hero_section_container + .clearfix + .container::before{content:"";display:block;min-height:24px;}.hero_section_container + .clearfix + .container > .breadcrumb:first-child{position:relative;top:-24px;}</style> 99
99<script>document.documentElement.classList.add('bc-relocate');document.addEventListener('DOMContentLoaded',function(){var bc=document.querySelector('ol.breadcrumb'),hero=document.querySelector('.hero_section_container');if(bc&&hero){var t=hero.nextElementSibling;while(t&&!t.classList.contains('container'))t=t.nextElementSibling;if(t)t.insertBefore(bc,t.firstChild);}document.documentElement.classList.remove('bc-relocate');});</script>
99 100 101 102 <!-- Prefetch --> 103 <link rel="prefetch" href="https://www.optimizecdn.com/directory/cdn/assets/bootstrap/jquery.lazy/1.7.9/jquery.lazy.min.js" as="script"> 104 <link rel="prefetch" href="https://www.optimizecdn.com/directory/cdn/assets/bootstrap/js/websiteScripts.min.js?v=8.0.0" as="script"> 105 106 <!-- Custom Site-wide HEAD Content --><!-- Google Tag Manager -->
107<script>
vendor: 331 bytes, lines 107-111
107(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 108new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 109j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 110'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 111})(window,document,'script','dataLayer','
111GTM-PN3DXFK
vendor: 3 bytes, line 111
111');
111</script>
111 112<!-- End Google Tag Manager --> 113<!-- GA4 Google tag (gtag.js) --> 114<!-- Google tag (gtag.js) -->
vendor: 65 bytes, lines 114-115
114 115<script async src="https://www.googletagmanager.com/gtag/js?id=
115G-RVEFJ5ETGX
vendor: 13 bytes, line 115
115"></script>
116<script> 117
vendor: 138 bytes, lines 117-121
117window.dataLayer = window.dataLayer || []; 118 function gtag(){dataLayer.push(arguments);} 119 gtag('js', new Date()); 120 121 gtag('config', '
121G-RVEFJ5ETGX
vendor: 5 bytes, line 121
121');
122</script>
122 123<!-- End GA4 Google tag (gtag.js) --> 124<!-- Adsense Header Code FDD -->
125<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8713240839949798" crossorigin="anonymous"></script>
125 126<!-- test update -->
127<script> 128 (function(p,t,n,e,r,o){ p['__partnerObject']=r;function f(){ 129 var c={ a:arguments,q:[]};var r=this.push(c);return "number"!=typeof r?r:f.bind(c.q);} 130 f.q=f.q||[];p[r]=p[r]||f.bind(f.q);p[r].q=p[r].q||f.q;o=t.createElement(n); 131 var _=t.getElementsByTagName(n)[0];o.async=1;o.src=e+'?v'+(~~(new Date().getTime()/1e6)); 132 _.parentNode.insertBefore(o,_);})(window, document, 'script', 'https://app.partnero.com/js/universal.js', 'po'); 133 po('settings', 'assets_host', 'https://assets.partnero.com'); 134 po('program', 'ZAGLM5O8', 'load'); 135</script>
135 136<!-- Part of CT API Data Signals sent via our custom form path widgets -->
137<script type="text/javascript"> 138 var date = new Date(); 139 window.onload = function () { 140 var jsOn = document.getElementsByName("js_on")[0]; 141 if(jsOn){ 142 jsOn.value = date.getFullYear(); 143 } 144 }; 145</script>
145 146</head> 147 148<body class="general-session"><!-- 149IMPORTANT: 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. 150 151INSTEAD: If custom CSS rules are needed, add them directly into the DESIGN SETTINGS > CUSTOM CSS section. 152--> 153<style> 154 .upload-form-field::before { 155 content: "choose files"; 156 display: inline-block; 157 border: 1px solid #999; 158 border-radius: 3px; 159 padding: 5px 8px; 160 } 161 #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 { 162 white-space: nowrap !important; 163 } 164 /* Main Website Design */ 165 body,.modal-header,.modal-content,.modal-body,.modal-footer { 166 background: rgb(255, 255, 255); 167 color: rgb(41, 41, 41); 168 font-family: 'Poppins'; 169 font-size: 14px; 170 } 171 .select2-container .select2-choice { 172 font-family: 'Poppins'!important; 173 } 174 html{ 175 background: rgb(35, 35, 35) } 176 .bootstrap-datetimepicker-widget *:not(.active,[data-action="togglePeriod"]) a, .bootstrap-datetimepicker-widget *:not(.active,[data-action="togglePeriod"]) td,.datepicker th.picker-switch,.datepicker .dow { 177 color: #000 !important; 178 } 179 a,a.h1,a.h2,a.h3,a.h4,a.h5,a.h6,.pricing_menu li ul li a:not(.btn) { 180 color: rgb(51, 122, 183); 181 } 182 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 { 183 color: rgb(51, 122, 183); 184 } 185 .breadcrumb a{ 186 color: rgba(119, 119, 119,0.9); 187 } 188 .breadcrumb a:hover, .breadcrumb a:focus,.breadcrumb > .active { 189 color: rgb(119, 119, 119); 190 } 191 .help-inline, .help-block { 192 color: rgba(41, 41, 41,0.5); 193 } 194 .h1, .h2, .h3, .h4, .h5, .h6, h1, h2, h3, h4, h5, h6 { 195 font-family: 'Poppins'; 196 } 197 /* Header Design */ 198 .header, .mobile_website_logo img { 199 background: rgb(247, 247, 247); 200 } 201 .header .mini-nav li a:not(.btn):not(.network-icon), .header .mini-nav span { 202 color: rgb(41, 41, 41); 203 font-size: 14px; 204 } 205 .header .mini-nav li a:not(.btn):hover { 206 color: rgba(41, 41, 41,0.95); 207 } 208 .header .btn_get_listed { 209 background-color: rgb(171, 181, 146); 210 border: 1px solid rgb(171, 181, 146); 211 color: rgb(255, 255, 255)!important; 212 } 213 .header .btn_get_listed:hover, .header .btn_get_listed:focus { 214 background-color: rgba(171, 181, 146,0.97); 215 } 216 .header .btn_search { 217 background-color: rgba(171, 181, 146,0.97); 218 border: 1px solid rgb(171, 181, 146); 219 color: rgb(255, 255, 255); 220 } 221 .header .btn_search:hover, .header .btn_search:focus { 222 background-color: rgb(171, 181, 146); 223 color: rgb(255, 255, 255); 224 } 225 226 /* Logo Design */ 227 .logo,.logo:hover,.logo:focus { 228 color: rgb(51, 122, 183); 229 font-family: 'Poppins'; 230 } 231 .logo .slogan { 232 color: rgb(153, 153, 153); 233 } 234 .logo .fa { 235 color: rgb(51, 122, 183); 236 } 237 238 /* Main Menu Design */ 239 .member-profile-tabs > ul, .member-profile-tabs .tabs-container { 240 background: rgb(238, 238, 238); 241 position: sticky; 242 z-index: 1; 243 top: 0px; 244 } 245 /* Google Translate When Main Menu Sticky Top */ 246 @media only screen and (max-width: 1100px) { 247 .member-profile-tabs > ul, .member-profile-tabs .tabs-container { 248 top: 50px; 249 } 250 } 251 .header ul.nav.navbar-nav li ul { 252 background-color: rgb(255, 255, 255); 253 } 254 .header ul.nav.navbar-nav li ul li a, .header ul.nav.navbar-nav li ul li span { 255 color: rgb(51, 122, 183); 256 font-weight: 400; 257 } 258 .header .navbar-default, .pagination > .active > a { 259 background-color: rgb(238, 238, 238); 260 } 261 .header ul.nav.navbar-nav li ul li a:hover, .header ul.nav.navbar-nav li ul li a:focus{ 262 border-left-color: rgb(51, 122, 183); 263 background: rgb(51, 122, 183); 264 color: rgb(255, 255, 255); 265 }
266 .navbar-default .navbar-toggle .icon-bar { 267 background-color: rgb(51, 122, 183); 268 } 269 .user_sidebar, .main_menu, .compact-mobile-search { 270 color: rgb(51, 122, 183); 271 } 272 .navbar-default .navbar-nav > li > a, .navbar-default .navbar-nav > li > span { 273 color: rgb(51, 122, 183); 274 font-weight: 400; 275 } 276 .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 { 277 color: rgb(250, 250, 250); 278 } 279 .navbar-default .navbar-nav > li { 280 font-family: 'Poppins'; 281 } 282 283 284 285 /* Footer Design */ 286 .footer { 287 background-color: rgb(35, 35, 35); 288 display: block; 289 } 290 .footer, .footer_menu a,.footer_terms a,.footer_menu .content { 291 color: rgb(239, 239, 239); 292 } 293 .footer_menu a:hover, .footer_terms a:hover, .footer_menu a:focus, .footer_terms a:focus { 294 color: rgb(255, 255, 255); 295 } 296 .footer_menu .head { 297 color: rgb(255, 255, 255); 298 } 299 .btn_footer_get_listed { 300 background-color: rgb(217, 83, 79); 301 border: 1px solid rgb(217, 83, 79); 302 color: rgb(255, 255, 255)!important; 303 } 304 .btn_footer_get_listed:hover, .btn_footer_get_listed:focus{ 305 background-color: rgba(217, 83, 79,0.95); 306 } 307 308 /* Homepage Design */ 309 .homepage_settings h1, .homepage_settings h2, .homepage_map h1, .homepage_map h2 { 310 font-family: 'Poppins'; 311 } 312 .homepage_settings h1, .homepage_map h1 { 313 color: rgb(255, 255, 255); 314 font-weight: 600; 315 text-align: left; 316 } 317 .homepage_settings h2, .homepage_map h2 { 318 color: rgb(255, 255, 255); 319 font-weight: 400; 320 text-align: left; 321 322 } 323 .homepage_settings .search_box label { 324 color: rgb(255, 255, 255); 325 } 326 .btn_home_search, .search_box input[type=submit] { 327 background-color: rgb(171, 181, 146); 328 border: 1px solid rgb(171, 181, 146); 329 color: rgb(255, 255, 255); 330 } 331 .btn_home_search:hover, .btn_home_search:focus, .search_box input[type=submit]:hover, .search_box input[type=submit]:focus { 332 background-color: rgba(171, 181, 146,0.97); 333 color: rgb(255, 255, 255); 334 } 335 .homepage_settings .search_box { 336 padding: 10px; 337 338 background-color: rgba( 51, 122, 183, 0.8); 339 } 340 341 /* Homepage Steps Module */ 342 .homepage_steps { 343 background: none; 344 box-shadow: none; 345 padding: 0; 346 color: rgb(255, 255, 255); 347 } 348 .homepage_steps a.homepage_step_link,.homepage_steps a.homepage_step_link:hover,.homepage_steps a.homepage_step_link:active{ 349 color: rgb(255, 255, 255)!important; 350 } 351 .homepage_steps .fa { 352 color: rgb(255, 255, 255); 353 background-color: rgba(255, 255, 255,0.075); 354 } 355 .homepage_steps h2 + p { 356 opacity: .6; 357 } 358 359 /* Blog Posts Slider Settings */ 360 #myCarousel h2 a, .carousel-caption p,#myCarousel .list-group-item h2, #myCarousel li.list-group-item h4 { 361 color: rgb(255, 255, 255); 362 } 363 #myCarousel .list-group-item { 364 background-color: rgba(32, 80, 129,0.9); 365 border-color: rgba(32, 80, 129,0.80); 366 } 367 #myCarousel .carousel-caption { 368 background-color: rgba(32, 80, 129,0.8); 369 } 370 #myCarousel .list-group, #myCarousel .carousel-inner { 371 background-color: rgb(32, 80, 129) } 372 #myCarousel .list-group .active, #myCarousel .list-group-item:hover { 373 background-color: rgb(32, 80, 129) } 374 #myCarousel .list-group .active h2, #myCarousel .list-group-item:hover h2{ 375 color: rgb(250, 250, 250); 376 } 377 378 /* Additional Settings */ 379 .well blockquote { 380 background: rgb(255, 255, 255) none repeat scroll 0 0; 381 border-color: rgb(238, 238, 238); 382 color: rgb(41, 41, 41); 383 padding: 10px 20px; 384 } 385 .account-form-box form table tr td table { 386 background-color: transparent!important; 387 border: none!important; 388 } 389 390 .account-form-box form table tr td table td { 391 background-color: transparent!important; 392 color: rgb(41, 41, 41)!important; 393 border: none!important; 394 } 395 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{ 396 color: rgb(41, 41, 41)!important; 397 } 398 .table.dataTable > thead > tr > th, .table > thead > tr > th, .fr-view table th, .fr-view table tfoot td { 399 border-color: rgba(85, 85, 85,0.1); 400 background-color: rgb(238, 238, 238); 401 color: rgb(85, 85, 85);
402 font-weight:600; 403 border-left: none; 404 border-bottom-width: 1px; 405 } 406 .table > tbody > tr > td, .table > tbody > tr > th, .table > tfoot > tr > td, .table > tfoot > tr > th, .table > thead > tr > td, table.dataTable.no-footer { 407 border-color: rgba(85, 85, 85,0.1); 408 } 409 .table > tfoot > tr > td:not(:last-child) { 410 border-right: 1px solid rgba(85, 85, 85,0.1); 411 } 412 table.dataTable.no-footer, table.dataTable { 413 border: 1px solid rgb(238, 238, 238)!important; 414 } 415 .table-view li:not(.table-display-about_me li, .froala-data li), .table-view .table-view-group > div { 416 border-top:1px solid rgb(238, 238, 238); 417 } 418 .table-view .table-view-group:last-child { 419 border-bottom:1px solid rgb(238, 238, 238); 420 } 421 table.dataTable tbody tr, .table-striped.dataTable, .table-striped, .fr-view .table-striped { 422 background-color: rgb(250, 250, 250)!important; 423 } 424 .table-striped.dataTable, .table-striped, .fr-view .table-striped { 425 border: 1px solid rgba(85, 85, 85,0.15); 426 border-collapse: separate; 427 overflow: hidden; 428 } 429 table#feature-body-datatable:has(.dropdown.open),table#digital-products-transactions:has(.dropdown.open), table#example:has(.dropdown.open) { 430 overflow: visible; 431 } 432 .table-striped.dataTable tbody > tr:nth-of-type(2n+1),.table-striped > tbody > tr:nth-of-type(2n+1) { 433 background-color: rgba(255, 255, 255,0.5)!important; 434 } 435 .nav-tabs, hr, .account-menu-title, .modal-header { 436 border-color: rgb(238, 238, 238); 437 } 438 .sidemenu_panel .list-group-item{ 439 background-color: transparent!important; 440 color: rgb(41, 41, 41)!important; 441 } 442 .img-thumbnail { 443 background-color: rgb(250, 250, 250)!important; 444 border: 1px solid rgb(238, 238, 238); 445 } 446 .member_admin_sidemenu p, .member_admin_sidemenu h3 { 447 color: rgb(41, 41, 41)!important; 448 } 449 .close { 450 color: rgb(41, 41, 41); 451 opacity: 1; 452 } 453 .member_results_header h1, .content_w_sidebar.feature-search h1, .feature_results_header h1 { 454 font-size:34px; 455 display: block; 456 } 457 .member_results_header h2, .feature_results_header h2 { 458 font-size:28px; 459 display: block; 460 } 461 .homepage_settings { 462 padding-top: 60px; 463 padding-bottom: 90px; 464 } 465 @media (max-width: 768px) { .mobile_website_logo .visible-xs {display: block !important;}} 466 @media only screen and (max-width: 768px) { 467 .member-profile-header .favorite {float:none} 468 } 469 470 471 @media only screen and (max-width: 1100px) { 472 } 473 .views > i.fa.activeView, .views > i.fa:hover { 474 background-color: rgb(41, 41, 41); 475 color: rgb(255, 255, 255); 476 } 477 .views > i.fa { 478 background-color: rgba(41, 41, 41,0.1); 479 color: rgb(41, 41, 41); 480 } 481 .ui-rangeSlider-label { 482 background-color: rgb(238, 238, 238)!important; 483 color: rgb(51, 122, 183)!important; 484 } 485 .pricing_menu li .title { 486 background: rgb(51, 122, 183); 487 color: rgb(255, 255, 255); 488 } 489 p.account-tip{ 490 color: rgb(41, 41, 41); 491 } 492 .circled_number { 493 background: rgb(51, 122, 183); 494 color: rgb(255, 255, 255); 495 } 496 .pic { 497 background-color: rgba(51, 122, 183,0.8); 498 color: rgb(255, 255, 255); 499 background-repeat: no-repeat; 500 background-position: center; 501 } 502 .pic .pic-caption { 503 background: linear-gradient(0deg, rgba(0, 0, 0, 0) 0%,rgba(51, 122, 183,0.85) 50%); 504 color: rgb(255, 255, 255); 505 } 506 .slick-prev-fa i, .slick-next-fa i{ 507 color: rgb(51, 122, 183); 508 } 509 .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 { 510 background-color: rgb(250, 250, 250); 511 border-color: rgb(238, 238, 238); 512 color: rgb(41, 41, 41); 513 } 514 .nav-pills > li.active a, .nav-pills > li > a:hover { 515 background-color: rgb(171, 181, 146)!important; 516 border-color: rgb(171, 181, 146)!important; 517 color: rgb(255, 255, 255)!important; 518 } 519 .sidemenu_panel .panel-heading { 520 color: rgb(41, 41, 41)!important; 521 background-color: rgb(250, 250, 250)!important; 522 } 523 .member-profile-tabs .nav-tabs > li:not(.active) > a, .login-register-tabs.nav-tabs > li:not(.active) > a, .nav-tabs > li:not(.active) > a { 524 background: rgba(250, 250, 250,0.5); 525 color: #5f5f5f; 526 } 527 .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 { 528 background: rgba(250, 250, 250,1); 529 color: rgb(41, 41, 41); 530 }
531 .author-snapshot .well:not(.well.bg-default) { 532 background-color: rgb(250, 250, 250)!important; 533 border-color: rgb(238, 238, 238)!important; 534 color: rgb(41, 41, 41)!important; 535 } 536 .nav-tabs>li>a, .nav-pills>li>a { 537 font-weight: 600; 538 } 539 .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{ 540 color: rgba(41, 41, 41,0.5); 541 } 542 #service_areas_table td,#service_areas_table_wrapper label, #service_areas_table_info, #service_areas_table_paginate > a { 543 color: rgb(41, 41, 41) !important; 544 } 545 .popover { 546 background-color: rgb(250, 250, 250); 547 border-color: rgb(250, 250, 250); 548 padding:0; 549 text-align:left; 550 } 551 .popover-title, .popover-content { 552 background-color: rgb(250, 250, 250); 553 color: rgb(41, 41, 41); 554 border-color: rgb(250, 250, 250); 555 text-align:left; 556 } 557 .popover-content { 558 background-color: rgba(41, 41, 41,.05); 559 border-radius: 4px; 560 transform: translate(-1px, -1px); 561 width: calc(100% + 2px); 562 margin-bottom: -2px; 563 } 564 .popover.left > .arrow::after { 565 border-left-color: rgb(250, 250, 250)!important; 566 } 567 .popover.right > .arrow::after { 568 border-right-color: rgb(250, 250, 250)!important; 569 } 570 .popover.bottom > .arrow::after { 571 border-bottom-color: rgb(250, 250, 250)!important; 572 } 573 .popover.top > .arrow::after { 574 border-top-color: rgb(250, 250, 250)!important; 575 } 576 .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{ 577 background-color: rgb(255, 255, 255); 578 color: rgb(41, 41, 41); 579 } 580 .module h1, .module h2, .module h3, .module h4, .module h5 { 581 color: rgb(62, 62, 62); 582 } 583 .module p:not(.fr-box.fr-basic .fr-element p) { 584 color: rgb(41, 41, 41); 585 } 586 .pagination>.active>a { 587 border-color: rgba(51, 122, 183,0.2); 588 } 589 .pagination>.active>a { 590 color: rgb(51, 122, 183); 591 } 592 .pagination > .active > a:hover, .pagination > .active > a:focus { 593 border-color: rgba(51, 122, 183,0.2); 594 background-color: rgb(238, 238, 238); 595 color: rgb(51, 122, 183); 596 } 597 .pagination > li > a { 598 color: rgb(238, 238, 238); 599 border-color: rgba(238, 238, 238,0.2); 600 background-color: rgb(51, 122, 183); 601 } 602 .pagination > li > a:focus, .pagination > li > a:hover, .pagination > li > span:focus, .pagination > li > span:hover { 603 background-color: rgb(238, 238, 238); 604 border-color: rgb(238, 238, 238); 605 color: rgb(51, 122, 183); 606 } 607 608 .nav-pills.nav-wizard > li a, .nav-pills.nav-wizard > li a:hover{ 609 background-color: rgb(171, 181, 146)!important; 610 color: rgb(255, 255, 255)!important; 611 } 612 .member_wizard2 li.incomplete a, .member_wizard2 li.incomplete a:hover { 613 background-color: rgb(171, 181, 146)!important; 614 border-color: rgb(171, 181, 146); 615 color: rgb(255, 255, 255); 616 } 617 .nav-pills.nav-wizard > li.active a, .nav-pills.member_wizard > li.active:hover a { 618 background-color: rgb(51, 122, 183)!important; 619 color: rgb(255, 255, 255)!important; 620 } 621 .member_wizard2 li.completed a, .member_wizard2 li.completed a:hover { 622 background-color: rgb(116, 180, 177)!important; 623 border-color: rgb(116, 180, 177); 624 color: rgb(255, 255, 255); 625 } 626 627 .nav-pills.nav-wizard > li.active .nav-arrow, .nav-pills.nav-wizard > li.active:hover .nav-arrow { 628 border-color: transparent transparent transparent rgb(51, 122, 183)!important; 629 } 630 .nav-pills.nav-wizard > li.active .nav-wedge, .nav-pills.nav-wizard > li.active:hover .nav-wedge{ 631 border-color: rgb(51, 122, 183) rgb(51, 122, 183) rgb(51, 122, 183) transparent!important; 632 } 633 634 li.completed .nav-wedge, .nav-pills.nav-wizard > li.completed:hover .nav-wedge { 635 border-color: rgb(170, 184, 194) rgb(170, 184, 194) rgb(170, 184, 194) transparent!important; 636 } 637 638 li.incomplete .nav-wedge, .nav-pills.nav-wizard > li.incomplete:hover .nav-wedge { 639 border-color: rgb(171, 181, 146) rgb(171, 181, 146) rgb(171, 181, 146) transparent!important; 640 } 641 642 .nav-pills.member_wizard > li.completed a, .nav-pills.member_wizard > li.completed a:hover { 643 background-color: rgb(170, 184, 194)!important; 644 color: rgb(255, 255, 255)!important; 645 } 646 647 .member_wizard2 li { 648 color: rgb(255, 255, 255); 649 border-right: 10px solid rgb(255, 255, 255); 650 } 651 652 li.completed .nav-arrow, .nav-pills.nav-wizard > li.completed:hover .nav-arrow { 653 border-color: transparent transparent transparent rgb(170, 184, 194)!important; 654 } 655 656 li.incomplete .nav-arrow, .nav-pills.nav-wizard > li.incomplete:hover .nav-arrow{ 657 border-color: transparent transparent transparent rgb(171, 181, 146)!important; 658 } 659 660 /* Default Colors */ 661 .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 { 662 background-color: rgb(171, 181, 146); 663 border-color: rgb(171, 181, 146); 664 color: rgb(255, 255, 255); 665 } 666 .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 { 667 background-color: rgba(171, 181, 146,0.95); 668 border-color: rgb(171, 181, 146); 669 color: rgb(255, 255, 255); 670 } 671 .panel-primary { 672 background-color: #f2f4ef; 673 border-color: rgb(171, 181, 146); 674 } 675 .bg-primary,.progress-bar-primary,.module p.bg-primary,.label-primary,.badge-primary,.pricing_menu .title.bg-primary, .
675well .well.bg-primary, .module .well.bg-primary, .well .module.bg-primary,.tab-content .module.bg-primary,.tab-content .well.bg-primary { 676 background-color: rgb(171, 181, 146); 677 color: rgb(255, 255, 255); 678 } 679 .bg-primary .badge { 680 background-color:rgb(255, 255, 255); 681 color: rgb(171, 181, 146); 682 } 683 .btn-primary.btn-outline { 684 background: transparent; 685 color: rgb(171, 181, 146); 686 transition: all 250ms ease-in-out 0ms; 687 } 688 .btn-primary.btn-outline:hover { 689 background: rgba(171, 181, 146,0.1); 690 color: rgb(171, 181, 146); 691 } 692 .alert-primary { 693 background-color:rgba(171, 181, 146,0.7); 694 border-color:rgba(171, 181, 146,0.2); 695 color: rgba(255, 255, 255,0.9); 696 } 697 .alert-primary-subtle, .label-primary-subtle, .badge-primary-subtle { 698 background-color: #eef0e9; 699 border-color: #eef0e9; 700 color: rgb(171, 181, 146); 701 color: color-mix(in srgb, rgb(171, 181, 146) 50%, rgb(41, 41, 41) 50%); 702 } 703 .btn.dropdown-toggle.btn-primary *, .btn-primary a { 704 color: rgb(255, 255, 255); 705 } 706 .text-primary{ 707 color: rgb(171, 181, 146); 708 } 709 .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 { 710 background-color: rgb(51, 122, 183); 711 border-color: rgb(51, 122, 183); 712 color: rgb(255, 255, 255); 713 } 714 .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 { 715 background-color: rgba(51, 122, 183,0.95); 716 border-color: rgb(51, 122, 183); 717 color: rgb(255, 255, 255); 718 } 719 .panel-info { 720 background-color: #e0ebf4; 721 border-color: rgb(51, 122, 183); 722 } 723 .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 { 724 background-color: rgb(51, 122, 183); 725 color: rgb(255, 255, 255); 726 } 727 .bg-info .badge { 728 background-color:rgb(255, 255, 255); 729 color: rgb(51, 122, 183); 730 } 731 .btn-info.btn-outline { 732 background: transparent; 733 color: rgb(51, 122, 183); 734 transition: all 250ms ease-in-out 0ms; 735 } 736 .btn-info.btn-outline:hover { 737 background: rgba(51, 122, 183,0.1); 738 color: rgb(51, 122, 183); 739 } 740 .alert-info { 741 background-color:rgba(51, 122, 183,0.7); 742 border-color:rgba(51, 122, 183,0.2); 743 color: rgba(255, 255, 255,0.9); 744 } 745 .alert-info-subtle, .label-info-subtle, .badge-info-subtle { 746 background-color: #d6e4f1; 747 border-color: #d6e4f1; 748 color: rgb(51, 122, 183); 749 color: color-mix(in srgb, rgb(51, 122, 183) 50%, rgb(41, 41, 41) 50%); 750 } 751 .btn.dropdown-toggle.btn-info *, .btn-info a { 752 color: rgb(255, 255, 255); 753 } 754 .text-info{ 755 color: rgb(51, 122, 183); 756 } 757 .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 { 758 background-color: rgb(116, 180, 177); 759 border-color: rgb(116, 180, 177); 760 color: rgb(255, 255, 255); 761 } 762 .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 { 763 background-color: rgba(116, 180, 177,0.95); 764 border-color: rgb(116, 180, 177); 765 color: rgb(255, 255, 255); 766 } 767 .panel-success { 768 background-color: #eaf4f3; 769 border-color: rgb(116, 180, 177); 770 } 771 .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 { 772 background-color: rgb(116, 180, 177); 773 color: rgb(255, 255, 255); 774 } 775 .bg-success .badge { 776 background-color: rgb(255, 255, 255); 777 color: rgb(116, 180, 177); 778 } 779 .btn-success.btn-outline { 780 background: transparent; 781 color: rgb(116, 180, 177); 782 transition: all 250ms ease-in-out 0ms; 783 } 784 .btn-success.btn-outline:hover { 785 background: rgba(116, 180, 177,0.1); 786 color: rgb(116, 180, 177); 787 } 788 .alert-success { 789 background-color:rgba(116, 180, 177,0.7); 790 border-color:rgba(116, 180, 177,0.2); 791 color: rgba(255, 255, 255,0.9); 792 } 793 .alert-success-subtle, .label-success-subtle, .badge-success-subtle { 794 background-color: #e3f0ef; 795 border-color: #e3f0ef; 796 color: rgb(116, 180, 177); 797 color: color-mix(in srgb, rgb(116, 180, 177) 50%, rgb(41, 41, 41) 50%); 798 } 799 .btn.dropdown-toggle.btn-success *, .btn-success a { 800 color: rgb(255, 255, 255); 801 } 802 .text-success{ 803 color: rgb(116, 180, 177); 804 } 805 .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 { 806 background-color: rgb(171, 181, 146); 807 border-color: rgb(171, 181, 146); 808 color: rgb(255, 255, 255); 809 } 810 .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 { 811 background-color: rgba(171, 181, 146,0.95); 812 border-color: rgb(171, 181, 146); 813 color: rgb(255, 255, 255); 814 } 815 .panel-warning { 816 background-color: #f2f4ef; 817 border-color: rgb(171, 181, 146); 818 } 819 .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 { 820 background-color: rgb(171, 181, 146); 821 color: rgb(255, 255, 255); 822 } 823 .bg-warning .badge { 824 background-color: rgb(255, 255, 255); 825 color: rgb(171, 181, 146); 826 } 827 .btn-warning.btn-outline { 828 background: transparent; 829 color: rgb(171, 181, 146); 830 transition: all 250ms ease-in-out 0ms; 831 } 832 .btn-warning.btn-outline:hover { 833 background: rgba(171, 181, 146,0.1); 834 color: rgb(171, 181, 146); 835 } 836 .alert-warning { 837 background-color:rgba(171, 181, 146,0.7); 838 border-color:rgba(171, 181, 146,0.2); 839 color: rgba(255, 255, 255,0.9); 840 } 841 .alert-warning-subtle, .label-warning-subtle, .badge-warning-subtle { 842 background-color: #eef0e9; 843 border-color: #eef0e9; 844 color: rgb(171, 181, 146); 845 color: color-mix(in srgb, rgb(171, 181, 146) 50%, rgb(41, 41, 41) 50%); 846 } 847 .btn.dropdown-toggle.btn-warning *, .btn-warning a { 848 color: rgb(255, 255, 255); 849 } 850 .text-warning { 851 color: rgb(171, 181, 146); 852 } 853 .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 { 854 background-color: rgb(171, 181, 146); 855 border-color: rgb(171, 181, 146); 856 color: rgb(255, 255, 255); 857 } 858 .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 { 859 background-color: rgba(171, 181, 146,0.95); 860 border-color: rgb(171, 181, 146); 861 color: rgb(255, 255, 255); 862 } 863 .has-error .form-control { 864 border-color: rgb(171, 181, 146); 865 } 866 .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 { 867 background: rgb(171, 181, 146); 868 color: rgb(255, 255, 255) !important; 869 } 870 .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 { 871 color: rgb(171, 181, 146); 872 } 873 .panel-danger { 874 background-color: #f2f4ef; 875 border-color: rgb(171, 181, 146); 876 } 877 .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 { 878 background-color: rgb(171, 181, 146); 879 color: rgb(255, 255, 255); 880 } 881 .bg-danger .badge { 882 background-color: rgb(255, 255, 255); 883 color: rgb(171, 181, 146); 884 } 885 .btn-danger.btn-outline { 886 background: transparent; 887 color: rgb(171, 181, 146); 888 transition: all 250ms ease-in-out 0ms; 889 } 890 .btn-danger.btn-outline:hover { 891 background: rgba(171, 181, 146,0.1); 892 color: rgb(171, 181, 146); 893 } 894 .alert-danger { 895 background-color:rgba(171, 181, 146,0.7); 896 border-color:rgba(171, 181, 146,0.2); 897 color: rgba(255, 255, 255,0.9); 898 } 899 .alert-danger-subtle, .label-danger-subtle, .badge-danger-subtle { 900 background-color: #eef0e9; 901 border-color: #eef0e9; 902 color: rgb(171, 181, 146); 903 color: color-mix(in srgb, rgb(171, 181, 146) 50%, rgb(41, 41, 41) 50%); 904 } 905 .btn.dropdown-toggle.btn-danger *, .btn-danger a { 906 color: rgb(255, 255, 255); 907 } 908 .text-danger{ 909 color: rgb(171, 181, 146); 910 } 911 .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
911s, 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 { 912 background-color: rgb(238, 238, 238); 913 border-color: rgb(238, 238, 238); 914 color: rgb(85, 85, 85); 915 } 916 .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 { 917 background-color: rgba(238, 238, 238,0.95); 918 border-color: rgb(238, 238, 238); 919 color: rgb(85, 85, 85); 920 } 921 .sidemenu_panel .panel-default .panel_heading { 922 background-color: rgb(238, 238, 238)!important; 923 border-color: rgb(238, 238, 238)!important; 924 color: rgb(85, 85, 85)!important; 925 } 926 .panel-default .panel-heading, .member_accounts .panel-default > .panel-heading, .panel-default.categories-panel .panel-heading { 927 928 box-shadow: 0 0 1000px 0 rgba(85, 85, 85,0.02) inset; 929 background-color: rgb(238, 238, 238); 930 } 931 .panel-default, .member_accounts .panel-default { 932 933 background-color: rgba(238, 238, 238,0.15); 934 border-color: #fdfdfd; 935 border-color: color-mix(in srgb,rgb(238, 238, 238) 100%,rgba(238, 238, 238) 10%); 936 } 937 .member_admin_sidemenu .panel-default { 938 background-color: transparent; 939 } 940 .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 { 941 background-color: rgb(238, 238, 238); 942 color: rgb(85, 85, 85); 943 } 944 .bg-default .badge { 945 background-color: rgb(85, 85, 85); 946 color: rgb(238, 238, 238); 947 } 948 .btn-default.btn-outline { 949 background: transparent; 950 color: rgb(238, 238, 238); 951 transition: all 250ms ease-in-out 0ms; 952 } 953 .btn-default.btn-outline:hover { 954 background: rgba(238, 238, 238,0.1); 955 color: rgb(238, 238, 238); 956 } 957 .alert-default { 958 background-color:rgb(238, 238, 238); 959 border-color:rgb(238, 238, 238); 960 color: rgb(85, 85, 85); 961 } 962 .alert-default-subtle, .label-default-subtle, .badge-default-subtle { 963 background-color:rgba(238, 238, 238,0.5); 964 border-color: rgba(238, 238, 238,0.5); 965 color: rgb(85, 85, 85); 966 color: color-mix(in srgb, rgb(85, 85, 85) 50%, rgb(41, 41, 41) 50%); 967 } 968 .btn.dropdown-toggle.btn-default *, .btn-default a { 969 color: rgb(85, 85, 85); 970 } 971 .text-default{ 972 color: rgb(238, 238, 238); 973 } 974 .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 { 975 background-color: rgb(41, 41, 41); 976 border: 1px solid rgb(41, 41, 41); 977 color: rgb(255, 255, 255); 978 } 979 .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 { 980 background-color: rgba(41, 41, 41,0.95); 981 border-color: rgb(41, 41, 41); 982 color: rgb(255, 255, 255); 983 } 984 .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 { 985 background-color: rgb(41, 41, 41); 986 color: rgb(255, 255, 255); 987 } 988 .bg-secondary .badge { 989 background-color:rgb(255, 255, 255); 990 color: rgb(41, 41, 41); 991 } 992 .btn-secondary.btn-outline { 993 background: transparent; 994 color: rgb(41, 41, 41); 995 transition: all 250ms ease-in-out 0ms; 996 } 997 .btn-secondary.btn-outline:hover { 998 background: rgba(41, 41, 41,0.1); 999 color: rgb(41, 41, 41); 1000 } 1001 .panel-secondary { 1002 background-color: #dfdfdf; 1003 border-color: rgb(41, 41, 41); 1004 } 1005 .alert-secondary { 1006 background-color:rgb(41, 41, 41); 1007 border-color:rgb(41, 41, 41); 1008 color: rgb(255, 255, 255); 1009 } 1010 .alert-secondary-subtle, .label-secondary-subtle, .badge-secondary-subtle { 1011 background-color:rgba(41, 41, 41,0.8); 1012 border-color: rgba(41, 41, 41,0.5); 1013 color: rgb(255, 255, 255); 1014 } 1015 .btn-outline { 1016 -webkit-backdrop-filter: blur(5px); 1017 backdrop-filter: blur(5px); 1018 } 1019 .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 { 1020 background-color: rgb(255, 255, 255); 1021 border: 1px solid rgb(255, 255, 255); 1022 color: rgb(41, 41, 41); 1023 } 1024 .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 { 1025 background-color: rgba(255, 255, 255,0.95); 1026 border: 1px solid rgb(255, 255, 255); 1027 color: rgb(41, 41, 41); 1028 } 1029 .btn.btn-body.dropdown-toggle * { 1030 color: rgb(41, 41, 41) 1031 } 1032 .btn-body.dropdown-toggle + ul li, .daterangepicker .ranges { 1033 color: #333; 1034 } 1035 .bg-body { 1036 background: rgb(255, 255, 255); 1037 color: rgb(41, 41, 41); 1038 } 1039 .bg-content-box { 1040 background: rgb(250, 250, 250); 1041 color: rgb(41, 41, 41); 1042 } 1043 .bg-content-box-border { 1044 background: rgb(238, 238, 238); 1045 } 1046 .btn.dropdown-toggle.btn-secondary *, .btn-secondary a { 1047 color: rgb(255, 255, 255); 1048 } 1049 .text-secondary { 1050 color: rgb(41, 41, 41); 1051 } 1052 .text-body { 1053 color: rgb(255, 255, 255); 1054 } 1055 .feature-post #post-content .alert-secondary.btn-block, .feature-search .img_section .alert-secondary.btn-block, .search_result .img_section .alert-secondary { 1056 border-radius: 10px; 1057 background-color: rgba(41, 41, 41,0.2); 1058 } 1059 1060 /* Footer Newsletter Row */ 1061 .newsletter_row .alert { 1062 color: rgb(255, 255, 255); 1063 } 1064 .newsletter_row { 1065 background-color: rgb(51, 122, 183); 1066 color: rgb(255, 255, 255); 1067 } 1068 .newsletter_row input[type="submit"],.newsletter_footer_button { 1069 background-color: rgba(92, 184, 92,0.97); 1070 color: rgb(255, 255, 255); 1071 border-color: rgb(92, 184, 92); 1072 } 1073 .newsletter_row input[type="submit"]:hover,.newsletter_row input[type="submit"]:focus,.newsletter_footer_button:hover,.newsletter_footer_button:focus { 1074 background-color: rgb(92, 184, 92); 1075 color: rgb(255, 255, 255); 1076 } 1077 .newsletter_button_left { 1078 border-right: 1px solid rgba(255, 255, 255,0.2); 1079 } 1080 .newsletter_button_right { 1081 border-left: 1px solid rgba(255, 255, 255,0.2); 1082 } 1083 .newsletter_row small.help-block { 1084 background: rgb(255, 255, 255); 1085 margin-top: -5px; 1086 float: left; 1087 padding: 8px; 1088 border-radius: 1px; 1089 color: rgb(51, 122, 183); 1090 text-transform: capitalize; 1091 } 1092 .newsletter_row .has-success .checkbox,.newsletter_row .has-error .checkbox{ 1093 color: rgb(255, 255, 255); 1094 } 1095 @media only screen and (max-width: 767px) { 1096 .newsletter_button_right,.newsletter_button_left{ 1097 border: none; 1098 margin: 5px 0; 1099 } 1100 } 1101 1102 /* Font Sizes */ 1103 1104 .navbar-default .navbar-nav > li > a, .navbar-default .navbar-nav > li > span { 1105 font-size: 16px; 1106 } 1107 .header .logo { 1108 font-size: 34px; 1109 } 1110 .homepage_title h1, .homepage_settings h1 { 1111 letter-spacing: -1px; 1112 font-size: 60px; 1113 margin-bottom: 20px; 1114 } 1115 @media only screen and (max-width: 768px) { 1116 .homepage_title h1, .homepage_settings h1 {margin-bottom: 15px;} 1117 } 1118 .homepage_settings h2 { 1119 font-size: 28px; 1120 } 1121 1122 .ui-rangeSlider-bar{ 1123 background: rgb(171, 181, 146)!important; 1124 } 1125 1126 1127 1128 @media only screen and (max-width: 1024px){ 1129 .modal {margin-top: 40px;} 1130 } 1131 @media only screen and (max-width: 768px){ 1132 .modal {margin-top: 60px;} 1133 } 1134 1135 /* Calendar Styles */ 1136 1137 #cal-slide-content { 1138 color: rgb(85, 85, 85)!important; 1139 background-color: rgb(238, 238, 238)!important; 1140 -webkit-box-shadow: none!important; 1141 box-shadow: none!important; 1142 } 1143 #cal-slide-content a.event-item { 1144 color: rgb(85, 85, 85)!important; 1145 font-weight:bold!important; 1146 } 1147 #cal-slide-content a.event-item small { 1148 display: inline-block; 1149 } 1150 .cal-month-box, .cal-year-box, .cal-week-box { 1151 border: 1px solid rgb(238, 238, 238)!important; 1152 } 1153 .cal-year-box .row-fluid, .cal-month-box .cal-row-fluid { 1154 border-bottom: 1px solid rgb(238, 238, 238)!important; 1155 } 1156 .cal-year-box [class*="span"], .cal-month-box [class*="cal-cell"] { 1157 border-right: 1px solid rgb(238, 238, 238)!important; 1158 } 1159 .cal-year-box .row-fluid, .cal-row-fluid, #cal-day-box .cal-day-hour:nth-child(odd) { 1160 background-color: rgb(255, 255, 255)!important; 1161 } 1162 .cal-month-day span:not(.pull-right):not(.events-count-label):not(.events-label) { 1163 color: rgb(85, 85, 85)!important; 1164 } 1165 .cal-day-today span[data-cal-date] { 1166 color: rgb(41, 41, 41)!important; 1167 } 1168 .cal-year-box .row-fluid [class*="span"]:last-child, .cal-month-box .cal-row-fluid [class*="cal-cell"]:last-child { 1169 border: 0!important; 1170 } 1171 .cal-row-head { 1172 background: rgb(250, 250, 250)!important; 1173 } 1174 .day-highlight:hover, .day-highlight { 1175 background-color: rgb(238, 238, 238)!important; 1176 } 1177 .cal-event-list .event.pull-left { 1178 background-color: rgb(41, 41, 41)!important; 1179 opacity: 0.4; 1180 margin-top: 7px!important; 1181 } 1182 .cal-day-today { 1183 background-color: rgb(238, 238, 238)!important; 1184 } 1185 #cal-day-tick { 1186 border: 1px solid rgb(238, 238, 238)!important; 1187 background-color: rgb(238, 238, 238)!important; 1188 } 1189 .cal-day-weekend span[data-cal-date]{
1190 color: rgb(41, 41, 41)!important; 1191 } 1192 .well, .member_profile .tab-content, .corner_caption,.module,.img-rounded,.nav-tabs *,input,.input-group-sm > .form-control, .input-group-sm > .input-group-addon, textarea,select,.header ul.nav.navbar-nav li ul,.progress, .alert, .pagination, .page-item:first-child .page-link, .page-item:last-child .page-link, .views > i.fa, .ui-rangeSlider-label, .pic, .panel, .panel-heading, .popover, .pricing_menu li .title, .form-control, .select2-choice, .form-group .select2-dropdown-open.select2-drop-above [class^=select2-choice], .select2-drop.select2-drop-above, .select2-drop, .scrollup, .input-group-addon, .img-thumbnail, .current-photo-container img, .current-logo-container img,.favorite,p.account-tip,.modal-content,.input_wrapper input.form-control,.input-group .input_wrapper input.form-control,.input-group-sm .input_wrapper input.form-control,.input-group-lg .input_wrapper input.form-control,.pricing_menu li ul, .img-rounded img.img-rounded { 1193 border-radius:0px !important; 1194 } 1195 .rsDefault, .rsDefault .rsOverflow, .rsDefault .rsSlide, .rsDefault .rsVideoFrameHolder, .rsDefault .rsThumbs { 1196 border-radius: 10px; 1197 background: #151515!important; 1198 } 1199 .img_section .no-radius-bottom + .alert-secondary .rsDefault .rsSlide, .img_section .no-radius-bottom + .alert-secondary .rsDefault .rsOverflow { 1200 border-radius:0; 1201 } 1202 1203 #first_container .favorite, #first_container .fa.favorite { 1204 color: rgb(170, 184, 194); 1205 background: rgb(238, 238, 238); 1206 border: 1px solid rgb(238, 238, 238); 1207 white-space:nowrap!important; 1208 height:24px; 1209 padding:0 6px; 1210 border-radius:8px; 1211 } 1212 #first_container .favorite span, #first_container .fa.favorite span { 1213 font-family: 'Poppins'; 1214 white-space:nowrap!important; 1215 } 1216 #first_container .favoriteActive:not(.favorite.comments-count-badge), #first_container .fa.favoriteActive:not(.favorite.comments-count-badge .fa) { 1217 color: rgb(217, 83, 79); 1218 } 1219 #first_container .favorite::after, #first_container .fa.favorite::after { 1220 font-family: 'Poppins'; 1221 margin-left: 3px; 1222 } 1223 #first_container .favorite span, #first_container .fa.favorite span{ 1224 padding-left: 4px; 1225 font-family: 'Poppins'; 1226 font-size: 11px; 1227 letter-spacing:.5px; 1228 top:-1px; 1229 position:relative; 1230 font-weight:700; 1231 } 1232 #first_container .favorite span:empty, #first_container .fa.favorite span:empty { 1233 padding: 0; 1234 } 1235 #first_container .favorite .bookmark-number, #first_container .fa.favorite .bookmark-number { 1236 padding: 1px 0; 1237 border-radius: 100px; 1238 display: inline-block; 1239 font-weight: bold; 1240 min-width: 15px; 1241 font-size: .8em; 1242 vertical-align: bottom; 1243 height: 15px; 1244 line-height: 13px; 1245 margin-left: 3px; 1246 text-align: center; 1247 } 1248 #first_container .favorite.favoriteActive .bookmark-number:not(.comments-count-badge .bookmark-number), #first_container .fa.favorite.favoriteActive .bookmark-number { 1249 background: rgb(217, 83, 79); 1250 color: #fff; 1251 } 1252 1253 span.checkbox_value::after { 1254 content: ', '; 1255 } 1256 1257 span.checkbox_value:last-child::after { 1258 content: ''; 1259 } 1260 1261 .member_profile .tab-content > .tab-pane { 1262 display: block; 1263 margin-top: 30px; 1264 } 1265 .member-profile-tabs > .tab-content { 1266 border-width: 1px; 1267 border-radius: 4px; 1268 } 1269 .member_profile .tab-content #div1 { 1270 margin-top: 0; 1271 } 1272 .member_profile .nav.nav-tabs { 1273 display: none; 1274 } 1275 1276 1277 1278 .member_results .grid_element{ 1279 position:relative; 1280 overflow:hidden; 1281 display: inline-block; 1282 width:100%; 1283} 1284.member_results .grid_element::before { 1285 position: absolute; 1286 top: 24px; 1287 text-align: center; 1288 width: 200px; 1289 left: -62px; 1290 transform: rotate(-45deg); 1291 -webkit-transform: rotate(-45deg); 1292 z-index: 1; 1293 line-height: 1.2em; 1294 padding: 6px 0; 1295 font-weight: bold; 1296 letter-spacing: 1px; 1297} 1298@media only screen and (max-width: 767px) { 1299 .member_results .grid-container > hr { 1300 border-color: transparent; 1301 } 1302 .member_results .grid_element{ 1303 overflow:visible; 1304 } 1305 .member_results .grid_element::before { 1306 top: -19px!important; 1307 transform: rotate(0deg); 1308 -webkit-transform: rotate(0deg); 1309 font-size: 10px !important; 1310 letter-spacing: 0; 1311 width: auto; 1312 padding: 3px 6px; 1313 } 1314} 1315 1316 1317 1318 .member_results.level_20 .grid_element { 1319 border-style: solid; 1320 border-radius:1px;border-width:5px;border-color:rgb(39, 80, 120); } 1321 .member_results.level_20 .grid_element::before { 1322 border-bottom-left-radius:0!important; 1323 border-radius:1px;color:rgb(255, 255, 255);background-color:rgb(39, 80, 120);font-size:16px;content:'This Business has Been Reported as Closed'; 1324 } 1325 .member_results.level_20 .grid_element { 1326 padding:10px; 1327 } 1328 @media only screen and (max-width: 767px) { 1329 .member_results.level_20 .grid_element::before { 1330 left:-5px;}} 1331 .member_results .grid-container { 1332 margin-top: 30px; 1333 } 1334 .member_results .grid-container > hr { 1335 border-color: transparent; 1336 background: transparent; 1337 } 1338 .member_results.level_20 .grid_element{ 1339 overflow:visible; 1340 } 1341 .member_results.level_20 .grid_element::before { 1342 top: calc(-10px - 16px); 1343 transform: rotate(0deg); 1344 -webkit-transform: rotate(0deg); 1345 letter-spacing: 0; 1346 width: auto; 1347 padding: 3px 8px; 1348 left: calc(-5px + 0.5px); 1349 } 1350 1351 1352
1353 /* Homepage Sections Background Color Logic */ 1354 1355 1356 .homepage-section-1 { 1357 padding: 40px 0 40px; 1358 } 1359 1360 1361 .homepage-section-1 { 1362 background: rgb(51, 122, 183); 1363 } 1364 1365 1366 .homepage-section-2 { 1367 padding: 40px 0 40px; 1368 } 1369 1370 1371 .homepage-section-3 { 1372 padding: 40px 0 40px; 1373 } 1374 1375 1376 .homepage-section-4 { 1377 padding: 40px 0 40px; 1378 } 1379 1380 1381 .homepage-section-5 { 1382 padding: 40px 0 40px; 1383 } 1384 1385 1386 .homepage-section-6 { 1387 padding: 40px 0 40px; 1388 } 1389 1390 1391 .homepage-section-7 { 1392 padding: 40px 0 40px; 1393 } 1394 1395 1396 .homepage-section-8 { 1397 padding: 40px 0 40px; 1398 } 1399 1400 1401 .homepage-section-9 { 1402 padding: 40px 0 40px; 1403 } 1404 1405 1406 .homepage-section-10 { 1407 padding: 40px 0 40px; 1408 } 1409 1410 1411 .homepage-section-11 { 1412 padding: 40px 0 40px; 1413 } 1414 1415 1416 .homepage-section-12 { 1417 padding: 40px 0 40px; 1418 } 1419 1420 1421 .homepage-section-13 { 1422 padding: 40px 0 40px; 1423 } 1424 1425 1426 .homepage-section-14 { 1427 padding: 40px 0 40px; 1428 } 1429 1430 1431 .homepage-section-15 { 1432 padding: 40px 0 40px; 1433 } 1434 1435 1436 /* Additional Settings */ 1437 1438 1439 /* Streaming Widgets Title Settings */ 1440 1441 .streaming-title { 1442 text-align: left; 1443 font-size: 30px; 1444 line-height:1.5em; 1445 font-weight: 600; 1446 font-family: 'Poppins'; 1447 padding-bottom: 0px; 1448 } 1449 1450 @media only screen and (max-width: 990px) { 1451 .streaming-title { 1452 line-height:1.1em; 1453 } 1454 } 1455 1456 1457 .homepage-join-module .module h2:first-of-type { 1458 color: rgb(62, 62, 62); 1459 } 1460 1461 .homepage-join-module .module{ 1462 background: rgb(250, 250, 250); 1463 border-color: rgb(238, 238, 238); 1464 } 1465 1466 .homepage-about-module .module h2:first-of-type { 1467 color: rgb(62, 62, 62); 1468 } 1469 1470 .homepage-about-module .module{ 1471 background: rgb(250, 250, 250); 1472 border-color: rgb(238, 238, 238); 1473 1474 } 1475 1476 .the-post-description > :is(h2, h3, h4, h5):not(:first-child) { 1477 font-weight: 600; 1478 margin-top: 20px; 1479 } 1480 1481 /* Keep: Ensure ul/ol respect padding and margins */ 1482 .the-post-description > :is(ul, ol) { 1483 display: flow-root; 1484 } 1485 .the-post-description li { 1486 margin-bottom: 8px; 1487 } 1488 1489 .btn:not(#refcode_submit):not(.input-group-btn .btn):not(.logo-preview-input):not(.cover-preview-input):not(.member_login):not(.img-circle):not(.submit_reply):not(.submit_comment):not(.view-more):not(.image-preview-input):not(.no-radius-bottom):not(.no-radius-top):not(.btn-facebook), .btn-sm:not(.img-circle):not(.view-more):not(.image-preview-input):not(.no-radius-bottom):not(.no-radius-top), .btn-xs:not(.img-circle):not(.view-more):not(.image-preview-input):not(.no-radius-bottom):not(.no-radius-top), button:not(.social_share_buttons button):not(.social_share_buttons a):not(#refcode_submit):not(.input-group-btn button), .btn-group-lg > .btn, .btn-lg, .btn-lg, .btn-xl, .input-group-sm > .input-group-btn > .btn, .favorite, .tags a, select#sid.input-lg, select#tid.input-lg, select#ttid.input-lg, select.combobox.input-lg, select#bd-chained.input-lg, select#category-chained.input-lg, select.infinite-chained.input-lg, select.subcategory-chained.input-lg, select.search-chained.input-lg, select#country-chained.input-lg, select#state-chained.input-lg, select#country-chained-2.input-lg, select#state-chained-2.input-lg, select#profession_id.input-lg, [name^="bd_phone_country_code"].input-lg, select.input-lg, select#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"] { 1490 border-radius: 0px!important; 1491 } 1492 1493 1494 .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 { 1495 border-radius:1000px!important; 1496 } 1497 1498 .img-rounded img, img.fr-dib.img-rounded{ 1499 border-radius: 10px!important; 1500 } 1501 1502 /* Google Translate Module */ 1503 .skiptranslate{font-size:0} 1504 .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} 1505 .skiptranslate.goog-te-gadget span,img.goog-te-gadget-icon{display:none!important} 1506 .goog-te-gadget .goog-te-combo{margin-bottom:-4px} 1507 .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)} 1508 @media only screen and (max-width: 1100px) { 1509 .skiptranslate:not(.skiptranslate[style="display: none;"]){height:39px} 1510 .skiptranslate:not(.skiptranslate[style="display: none;"]) ~ .header{margin-top:10px!important} 1511 .skiptranslate:not(.skiptranslate[style="display: none;"]) ~ .announcement-bar{margin-top:10px} 1512 .skiptranslate:not(.skiptranslate[style="display: none;"]) ~ .announcement-bar ~ .header{margin-top:0!important} 1513 .skiptranslate:not(.skiptranslate[style="display: none;"]) ~ .header .mobile-main-menu{top:89px!important;height:calc(100% - 90px)!important} 1514 .skiptranslate:not(.skiptranslate[style="display: none;"]) ~ .header .navbar{top:39px} 1515 .skiptranslate:not(.skiptranslate[style="display: none;"]) ~ #first_container .member_sidebar.open{top: 89px;} 1516 } 1517 @media only screen and (max-width: 767px) { 1518 .skiptranslate:not(.skiptranslate[style="display: none;"]) ~ .announcement-bar.hidden-xs ~ .header{margin-top:10px!important} 1519 } 1520 1521 1522 1523</style> 1524 1525<!--GOOGLE TAG MANAGER CODE--> 1526<!-- Google Tag Manager (noscript) -->
vendor: 69 bytes, lines 1526-1527
1526 1527<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
1527GTM-PN3DXFK
vendor: 85 bytes, lines 1527-1528
1527" 1528height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
1529<!-- End Google Tag Manager (noscript) --> <!-- ON-PAGE CSS FUNCTIONS --> 1530 <style type="text/css"> 1531 /* Custom color for claim lisitng button located in SEO template 100 for profiles */ 1532/* color for serves this area button in edit listing post type search results code line 144ish */ 1533.servesarea { 1534background-color:#a79067; 1535color:#ffffff; 1536} 1537 1538 1539/* Account Upgrade Description - "Have Questions About Upgrading? Call Us: (xxx) xxx-xxxx" */ 1540.upgradedesc { 1541 background-color:#fafafa; 1542} 1543 1544/* Account Upgrade PromoCode Block Upgrade20 Background Container*/ 1545.upgrade20 { 1546 padding: 15px; 1547 background-color: #fafafa; 1548} 1549 1550/* Account Upgrade PromoCode Text Elements */ 1551.upgrade20 p, .upgrade20 li { 1552 color: #272F47; 1553} 1554 1555/*------------------------------------------*/ 1556 1557.link-list {list-style: none !important; display: flex !important;flex-wrap: wrap !important;} 1558 1559.link-list li {width: 25% !important;padding: 0 2rem !important;} 1560 1561.link-list a {transition:all 0.3s;display: block !important;padding: 0.75em 0 !important;line-height: 1.5 !important;color: #205081 !important;text-decoration: none !important;font-size: 100% !important;} 1562 1563.text-center{ text-align: center !important; } 1564 1565.title {font-weight:600;} 1566 1567.customheader{ background-color: 1568#205081; padding-top: 40px;padding-bottom: 40px;padding-left: 40px;padding-right: 40px;} 1569 1570.customheader h2, .customheader p, .white{ color:white; } 1571 1572.padded-list {padding-left: 0px; padding-right: 25px; margin-left: 15px; margin-right: 15px;} 1573.padded-title {padding-left: 45px; padding-right: 45px; margin-left: 25px; margin-right: 25px; padding-bottom: 20px} 1574 1575.link-list a:hover {color:#333 !important; padding:2px; transition:all 0.3s} 1576 1577/* This is the code and css for the find-profession- state and city list web pages */ </style> 1578 <div class="header"> 1579 <div class="container"> 1580 <div class="row header-main-row"> 1581 <style type='text/css'> .logo-text:has(.logo_title:empty) { 1582 display:none 1583} </style><div id="website_logo" class="col-md-5 xs-nopad xs-hpad sm-text-center xs-bmargin header-left-container"> 1584 <a class="logo logo-image inline-block vpad sm-nopad sm-tmargin" href="https://www.familydentaldirectory.com" title="Family Dental Directory"> 1585 <img width="214" height="70" src="https://ik.imagekit.io/dentaldirectory/find-a-dentist-near-me/images/family-dental-directory-logo-450x70.png" alt="Family Dental Directory"> 1586 </a> 1587 <div class="clearfix"></div> 1588</div> 1589 <style type='text/css'> body input.tt-hint,body input.form-control.normal-autosuggest-input.tt-query { 1590 background-color: white !important; 1591} 1592.mini-nav:not(:has(li)) { 1593 display: none!important; 1594} 1595/* Parent Container - Main List */ 1596.mini-nav li:has(ul) { 1597 position: relative; 1598 border-radius: 8px 8px 0 0; 1599} 1600.mini-nav > li:has(ul) { 1601 padding-left: 0; 1602 padding-right: 0; 1603 background: rgb(247, 247, 247); 1604} 1605.mini-nav > li:has(ul) > a:not(.btn), .mini-nav > li:has(ul) > span { 1606 padding: 10px 15px; 1607 margin: 0!important; 1608} 1609.mini-nav > li:hover:has(ul), .mini-nav > li:hover:has(ul) { 1610 box-shadow: 0 -1px 3px rgba(41, 41, 41,0.25); 1611} 1612/* Parent Links */ 1613.mini-nav > li > a:not(.btn), .mini-nav > li > span:not(.btn) { 1614 display:inline-block; 1615 border-radius: 8px 8px 0 0; 1616} 1617.mini-nav > li:hover > a:not(.btn), .mini-nav > li:hover > span { 1618 background: rgb(247, 247, 247); 1619 display: inline-block; 1620 position: relative; 1621 z-index: 1000; 1622} 1623/* First Level Dropdowns */ 1624.mini-nav li ul { 1625 background: rgb(247, 247, 247); 1626 box-shadow: 0 0px 3px rgba(41, 41, 41,0.25), 0 5px 5px 5px rgba(41, 41, 41,0.05); 1627 text-align: left; 1628 display: none; 1629 border-radius: 0 8px 8px 8px; 1630 list-style: none; 1631 padding: 10px; 1632 position: absolute; 1633 white-space: nowrap; 1634 min-width: 130%; 1635 width: auto; 1636 top: 100%; 1637 left: 0; 1638 z-index: 999; 1639 margin-top: -1px; 1640} 1641.mini-nav li:hover > ul { 1642 display: block; 1643} 1644/* First Level Dropdown Items */ 1645.mini-nav li ul li { 1646 position: relative; 1647 display: block; 1648 width: 100%; 1649} 1650.mini-nav li ul li a, .mini-nav li ul li span { 1651 font-size: 12.95px !important; 1652 display: block; 1653 font-weight: 400; 1654 padding: 8px 12px; 1655 border-radius: 8px; 1656 text-decoration: none; 1657 width: 100%; 1658} 1659.mini-nav li ul li a:hover, .mini-nav li ul li span:hover { 1660 box-shadow: 0 0 0 25px rgba(41, 41, 41,0.05) inset; 1661} 1662/* Second Level Dropdowns */ 1663.mini-nav li ul li ul {
1664 display: none; 1665 position: absolute; 1666 top: 0; 1667 left: 100%; 1668 margin: 0; 1669 border-radius: 8px; 1670} 1671.mini-nav li ul li:hover > ul { 1672 display: block; 1673} 1674/* Edge Positioning - Last Child Dropdowns */ 1675.mini-nav > li:last-child ul { 1676 right: 0; 1677 left: auto; 1678 border-radius: 8px 0 8px 8px; 1679} 1680.mini-nav > li:last-child ul li ul { 1681 right: 100%; 1682 left: auto; 1683} 1684/* Flex Spacing Utility */ 1685.mini-nav.mini-nav-flex-spaced { 1686 display: flex; 1687 justify-content: space-between; 1688 align-items: center; 1689 flex-wrap: wrap; 1690 row-gap: 0; 1691} 1692.mini-nav.mini-nav-flex-spaced > li { 1693 flex: none; 1694 padding: 0; 1695 margin: 2px 0; 1696 order: 2; 1697} 1698.mini-nav.mini-nav-flex-spaced > li.header-member-account-links, 1699.mini-nav:has(li ul) > li.header-member-account-links { 1700 order: 1; 1701 margin-left: auto; 1702 width: 100%; 1703 margin-bottom: 10px; 1704} 1705.logged-in-member-header .mini-nav.mini-nav-flex-spaced.list-inline > li { 1706 line-height: 1em; 1707 min-height: 0; 1708} 1709@media (min-width: 992px) { 1710 .header-main-row { 1711 display: flex; 1712 align-items: center; 1713 flex-wrap: wrap; 1714 } 1715} 1716@media (max-width: 991px) { 1717 .mini-nav.mini-nav-flex-spaced { 1718 justify-content: center; 1719 } 1720 .mini-nav.mini-nav-flex-spaced > li { 1721 margin-left: 5px !important; 1722 margin-right: 5px !important; 1723 } 1724} </style><div class="col-md-7 text-right sm-text-center header-right-container nolpad xs-hpad"> 1725 <ul class="mini-nav nobmargin list-inline xs-nopad xs-tmargin tpad"> 1726 <li class='bmargin'><a href='/login' id='link208' class='rpad bmargin'>Member Login</a></li><li class='bmargin norpad'><a href='/join' id='link210' class='btn btn_get_listed bold'>Add Your Dental Practice <i class="fa fa-chevron-right lmargin"></i></a></li> </ul> 1727 <div class="clearfix"></div> 1728 <form action="/search_results" name="frm1" class="form-inline website-search"> 1729 <div class="input-group input-group-sm bmargin sm-autosuggest"> 1730 <span class="input-group-addon"><i class="fa fa-search"></i></span> 1731 <input type="text" 1732 placeholder="Name or Keyword" value="" name="q" 1733 class="member_search form-control input-sm" autocomplete="off"> 1734 </div> 1735 <div class="input-group input-group-sm bmargin"> 1736 <span class="input-group-addon"><i class="fa fa-location-arrow"></i></span> 1737 <input type="text" autocomplete="off" placeholder="City or Zip Code" 1738 value="" id="location_google_maps_header" name="location_value" 1739 class="googleSuggest googleLocation form-control"> 1740 </div> 1741 <input type="submit" value="Search" class="btn btn-sm btn_search bmargin xs-btn-block bold"> 1742 </form> 1743 </div> 1744 </div> 1745 </div> 1746 <style type='text/css'> .mobile-main-menu .hasChildren span a { 1747 padding: 0px; 1748} 1749 1750.user_sidebar > img { 1751 width: 32px; 1752 height: 32px; 1753 position: absolute; 1754 z-index: 10; 1755 border-radius: 100px; 1756 top: -1px; 1757 object-fit: cover; 1758 left: -10px; 1759 background: rgb(238, 238, 238); 1760} 1761#member_sidebar_toggle img+.fa { 1762 display: none; 1763} 1764.main_menu, .user_sidebar, .compact-mobile-search { 1765 padding: 5px 8px; 1766 margin-right:0; 1767 min-height: 33.0333px; 1768 min-width: 38.116px; 1769} 1770.main_menu i, .user_sidebar i { 1771 font-size: 16px; 1772} 1773.navbar-nav li { 1774 float: none!Important; 1775} 1776.navbar-default{ 1777 -webkit-transition: all .6s ease-in-out; 1778 -moz-transition: all .6s ease-in-out; 1779 -o-transition: all .6s ease-in-out; 1780 transition: all .6s ease-in-out; 1781} 1782.transparent_menu { 1783 background-color: rgba(238, 238, 238,0.95)!important; 1784} 1785@media only screen and (max-width: 991px) { 1786 #popover {display: none} 1787} 1788@media only screen and (max-width: 1100px){ 1789 .mobile-main-menu{display:block!important} 1790 .navbar-toggle {display: block} 1791 #bs-main_menu .nav {display: none!important} 1792} 1793.mobile-main-menu { 1794 position: fixed; 1795 height: calc(100% - 50px)!important; 1796 width: 250px; 1797 background: rgb(238, 238, 238); 1798 z-index: 99999; 1799 right: -250px; 1800 top: 50px; 1801 display: none; 1802 -webkit-transition: all .6s ease-in-out; 1803 -moz-transition: all .6s ease-in-out; 1804 -o-transition: all .6s ease-in-out; 1805 transition: all .6s ease-in-out; 1806 overflow-y: auto!important; 1807 overflow-x: hidden!important; 1808} 1809.mobile-main-menu ul li i { 1810 color: rgb(51, 122, 183); 1811 cursor: pointer; 1812 float: right; 1813 padding: 13px; 1814} 1815.mobile-main-menu.opened{ 1816 right: 0px!important; 1817} 1818.mobile-main-menu ul li a, .mobile-main-menu ul li span { 1819 display: inline-block; 1820 float: left; 1821 -webkit-touch-callout: none; 1822 -webkit-user-select: none; 1823 -khtml-user-select: none; 1824 -moz-user-select: none; 1825 -ms-user-select: none; 1826 user-select: none; 1827 padding: 10px 0px; 1828 width: 80%; 1829 width: calc(100% - 40px); 1830} 1831.mobile-main-menu .sidebar-nav li ul { 1832 height: 0px; 1833 overflow: hidden; 1834 list-style: none; 1835 color: rgb(51, 122, 183); 1836 padding-left: 10px; 1837} 1838.mobile-main-menu .sidebar-nav li.sub_open > ul{ 1839 height: 100%; 1840} 1841.mobile-main-menu ul.sidebar-nav { 1842 position: absolute; 1843 width: 250px; 1844 margin: 0; 1845 padding: 0; 1846 list-style: none; 1847 font-size: 14px; 1848} 1849.mobile-main-menu .sidebar-nav > li { 1850 display: block; 1851 line-height: 20px; 1852 padding: 0 15px 0 20px; 1853} 1854.mobile-main-menu .sidebar-nav li a, .mobile-main-menu .sidebar-nav li span { 1855 text-decoration: none; 1856 color: rgb(51, 122, 183); 1857 padding-left:10px; 1858} 1859.mobile-main-menu .sidebar-nav li a i, .mobile-main-menu .sidebar-nav li span i { 1860 display: none; 1861} 1862 1863 </style><div class="mobile-main-menu"> 1864 <ul class="sidebar-nav"> 1865 <li class=''><a href='/home' id='link1'>Home</a></li><li class=''><a href='/getmatched' id='link227'>Find a Dentist</a></li><li class=''><a href='/blog' id='link236'>Blog</a></li><li class=''><a href='/join' id='link186'>Join Today</a></li> </ul> 1866</div> 1867<nav class="navbar navbar-default "> 1868 <div class="container container-fluid"> 1869 1870 <div class="navbar-header"> 1871 <button type="button" class="navbar-toggle collapsed main_menu" data-toggle="collapse" aria-label="main_menu"> 1872 <i class="fa fa-bars fa-fw"></i> 1873 </button> 1874 1875 1876 1877 </div> 1878 1879 1880 <div class="tablet-menu collapse navbar-collapse nopad" id="bs-main_menu"> 1881 <ul class="tablet-menu-ul nav navbar-nav nav-justified"> 1882 <li class=''><a href='/home' id='link1'>Home</a></li><li class=''><a href='/getmatched' id='link227'>Find a Dentist</a></li><li class=''><a href='/blog' id='link236'>Blog</a></li><li class=''><a href='/join' id='link186'>Join Today</a></li> </ul> 1883 </div> 1884 </div> 1885</nav> 1886<!--CSS IF MENU IS FIXED TOP--> 1887 1888</div> 1889<!-- 1890 1891IMPORTANT: 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. 1892 1893-->
1894<div class="container clearfix text-center banner-ad-unit above-content-banner-ad"> 1895 <div class="clearfix"></div> 1896</div> 1897<div class="clearfix"></div><div class="clearfix"></div> 1898<!-- Begin Content --> 1899<main role="main" id="main-content"> 1900<div id="first_container" class="content-container fr-view"> 1901 <div class="container"> 1902 <div class="clearfix body-content"></div> 1903 1904 <div class="row"> 1905 1906 <div class="col-md-12"> 1907 <p style="text-align: center;"><style type='text/css'> .contact-us-container { width: 555px; max-width: 100%; margin-left: auto; margin-right: auto;} </style><div class="row"> <div class="fpad-lg novpad"> <div class="module nobmargin contact-us-container"> <h2>Contact Us</h2> <hr> <style type="text/css">label span.required { color: #B94A48; }span.help-inline, span.help-block {font-size: .9em; }</style><form action="/api/widget/json/post/cfa-general-forms-ct-filter" id="contact_form_113" method="post" labelwidth="100" labelpaddingtop="0.5em" enctype="multipart/form-data" form_action_type="widget" form_action_div return_data_type="json" name="contact_form_113" class=" "><input type="hidden" name="sized" value="0" id="contact_form_113-element-0"/><input type="hidden" name="form" value="myform" id="contact_form_113-element-1"/><input type="hidden" name="formname" value="contact_form" id="contact_form_113-element-2"/><input type="hidden" name="dowiz" value="1" id="contact_form_113-element-3"/><input type="hidden" name="save" value="1" id="contact_form_113-element-4"/><input type="hidden" name="url_origin_pars" value="/about/contact" id="contact_form_113-element-5"/><div class="form-group"><label class="vertical-label bd-text" for="contact_form_113-element-6"><span class="required">* </span>Name</label><input type="text" name="yourname" required placeholder="Name" autocomplete="off" value class="form-control" id="contact_form_113-element-6"/></div><div class="form-group"><label class="vertical-label bd-email" for="contact_form_113-element-7"><span class="required">* </span>Email:</label><input type="email" name="inquiry_email" required placeholder="Email:" autocomplete="off" value class="form-control" id="contact_form_113-element-7"/></div><div class="form-group"><label class="vertical-label bd-tel" for="contact_form_113-element-8"><span class="required">* </span>Phone Number</label><input type="tel" name="phone" required placeholder="Phone Number" autocomplete="off" value class="form-control" id="contact_form_113-element-8"/></div><div class="form-group"><label class="vertical-label bd-" for="contact_form_113-element-9"><span class="required">* </span>Enter A Message</label><textarea rows="4" name="comments" required placeholder="Enter A Message" autocomplete="off" class="form-control" id="contact_form_113-element-9"></textarea></div><div class="form-group"><div class="form-group security_question_label"> <div id="contact_form_113-captchaContainer" class="control-group"> <div class="g-recaptcha" id="contact_form_113-google-recaptcha"></div> </div> <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> <div class="clearfix bmargin"></div> <input type="hidden" name="recaptcha" id="contact_form_113-rcap"></div> <style> .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 { transform: scale(0.77); -webkit-transform: scale(0.77); transform-origin: 0 0; -webkit-transform-origin: 0 0; margin-bottom: -15px; } .modal #contact_form_113-captchaContainer, .col-md-4 #contact_form_113-captchaContainer, .col-md-3 #contact_form_113-captchaContainer, .col-lg-3 #contact_form_113-captchaContainer, .col-lg-4 #contact_form_113-captchaContainer { transform: scale(0.77); -webkit-transform: scale(0.77); transform-origin: 0 0; -webkit-transform-origin: 0 0; margin-bottom: -15px; } </style>
1907<script type="text/javascript"> if(typeof formsFound == "undefined"){ var formID = ''; var currentCaptcha = {}; var captchaHolders = {}; var formsFound = {}; var captchaApiRequested = false; /* The forms the visitor has actually interacted with - only these get a widget. */ var captchaArmedForms = []; /* api.js stays lazy - nothing is fetched from Google until the visitor actually touches the form. 'click' alone was too narrow: a keyboard-only visitor tabs in and presses Enter without ever clicking, so api.js never loaded, the captcha never rendered, and the form POSTed an empty token. */ var captchaTriggerEvents = ['click', 'keydown', 'focusin', 'touchstart']; window.addEventListener('load', () => { formID = document.querySelectorAll('[name="recaptcha"]'); if (typeof formID != "undefined" && formID !== null) { for (let i = 0; i < formID.length; i++) { let formIDForm = formID[i].closest('form'); let captchaHolder = formIDForm.querySelector(".g-recaptcha"); if (typeof formsFound[formIDForm.id] != "undefined") { formsFound[formIDForm.id]['counter']++; }else{ formsFound[formIDForm.id] = {'counter' : 1}; } formIDForm.setAttribute('data-counter', formsFound[formIDForm.id]['counter']); captchaHolder.setAttribute('id',captchaHolder.id+'-'+formsFound[formIDForm.id]['counter']); if (typeof formIDForm != "undefined" && formIDForm !== null) { captchaTriggerEvents.forEach( evt => formIDForm.addEventListener(evt, reCaptchaOnFormInteraction, false) ); } } } }); } function reCaptchaOnFormInteraction(event) { if (event && event.currentTarget) { captchaArmForm(event.currentTarget); } if (captchaApiRequested) { renderArmedCaptchas(); return; } captchaApiRequested = true; var head = document.getElementsByTagName('head')[0]; var script = document.createElement('script'); script.type = 'text/javascript'; script.src = 'https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit&hl=en'; head.appendChild(script); } var captchaArmForm = function (formEl) { if (!formEl) { return; } for (var a = 0; a < captchaArmedForms.length; a++) { if (captchaArmedForms[a] === formEl) { return; } } captchaArmedForms.push(formEl); }; var captchaSolvedCallback = function (holder) { return function () { var formEl = holder.closest('form'); if (!formEl) { return; } $(formEl).find('.security_question_label').removeClass('has-error'); $(formEl).find('#recaptcha_error').css('display', 'none'); var notification = document.getElementById(formEl.id + '-notification'); if (notification && notification.classList.contains('alert-danger-subtle')) { $(notification).slideUp(); } }; }; var renderArmedCaptchas = function () { if (typeof grecaptcha === "undefined" || typeof grecaptcha.render !== "function") { return; } for (var f = 0; f < captchaArmedForms.length; f++) { var holder = captchaArmedForms[f].querySelector('div[class=g-recaptcha]'); if (!holder || !holder.id || holder.getClientRects().length === 0) { continue; } /* Guard a second render: grecaptcha throws on an element it already claimed. */ if (typeof captchaHolders[holder.id] === "undefined") { captchaHolders[holder.id] = grecaptcha.render(holder.id, { 'sitekey': '6LdtsoYUAAAAAIH51FbNtwVfAzLFfwDzr_Y6Jneq', 'callback': captchaSolvedCallback(holder) }); } } }; var onloadCallback = function (event) { renderArmedCaptchas(); }; </script>
1907<script> $(document).ready(function(){ /* Implicit submission (Enter inside a field) fires 'submit' without firing a click on the submit button, so the click guard below never sees it and the form POSTed an empty token. Bound on document/capture so it runs before FormValidation's own handler on the form - at AT_TARGET the capture flag does not order listeners, so a listener on the form itself would not reliably win. Native HTMLFormElement.submit() does not dispatch 'submit', so the solved-captcha path below is unaffected. */ var captchaGuardedForm = document.getElementById('contact_form_113'); if (captchaGuardedForm) { document.addEventListener('submit', function (event) { if (event.target !== captchaGuardedForm) { return; } var formId = captchaGuardedForm.id; var captchaHolderKey = formId + "-google-recaptcha-" + $(captchaGuardedForm).data('counter'); var captchaRendered = typeof captchaHolders[captchaHolderKey] != "undefined"; if (captchaRendered && grecaptcha.getResponse(captchaHolders[captchaHolderKey]) !== "") { $("#" + formId + " .security_question_label").removeClass("has-error"); $("#" + formId + " #recaptcha_error").css("display", "none"); return; } /* Unsolved, or api.js still in flight: either way there is no token to send. */ event.preventDefault(); event.stopImmediatePropagation(); $("#" + formId + " .security_question_label").addClass("has-error"); $("#" + formId + " #recaptcha_error").css("display", "block"); return false; }, true); } $("#contact_form_113 input[type=submit]").unbind('click'); $("#contact_form_113 input[type=submit]").click(function (event) { var formId = $(this.form).attr('id'); var captchaHolderKey = formId + "-google-recaptcha-" +$(this.form).data('counter'); if (typeof captchaHolders[captchaHolderKey] != "undefined") { if (grecaptcha.getResponse(captchaHolders[captchaHolderKey]) === "") { event.preventDefault(); $("#" + formId).formValidation('validate'); $("#" + formId + " .security_question_label").addClass("has-error"); $("#" + formId + " #recaptcha_error").css("display", "block"); return false; } /* Solved captcha: clear the error UI and let the click proceed untouched. The browser then fires a REAL, button-initiated submit event, so FormValidation runs its normal chain (success.form.fv -> AJAX modal on checkout / native POST on login). Re-submitting here artificially broke both ways: native form.submit() skips the FV chain (checkout rendered the raw JSON response), and jQuery .submit() fires a synthetic submit that FV refuses, leaving the form stuck after the first error (Bug 2). */ $("#" + formId + " .security_question_label").removeClass("has-error"); $("#" + formId + " #recaptcha_error").css("display", "none"); } }); });</script>
1907</div><div class="form-group"><input type="hidden" name="bd_hpc" autocomplete="off" value class="form-control " id="contact_form_113-element-12"/></div><p class='account-tip'>This form is to contact Family Dental Directory, NOT INDIVIDUAL DENTISTS LISTED ON OUR SITE. If you are trying to contact a dentist listed on our website, please use the "Contact This Dentist" form located in the right column of their profile page.</p><div class="form-actions"><input type="submit" value="Contact Family Dental Directory" name class="btn btn-primary btn-lg btn-block " id="contact_form_113-element-14"/></div></form>
1907<script type="text/javascript">jQuery(document).ready(function() { jQuery("#contact_form_113").bind("submit", function() { });}); </script>
1907 <div class="clearfix"></div> </div> </div></div><br style="box-sizing: border-box; white-space: normal; max-width: 100%; color: rgb(65, 65, 65); font-family: Poppins; font-size: 15px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;"><br></p> </div> 1908 1909 1910 </div> <!-- Closes Row --> 1911 1912 1913
1913<script type="application/ld+json"> 1914{ 1915 "@context": "https://schema.org/", 1916 "@type": "WebPage", 1917 "@id": "https://www.familydentaldirectory.com/about/contact", 1918 "url": "https://www.familydentaldirectory.com/about/contact", 1919 "name": "Contact Us - Family Dental Directory", 1920 "headline": "Contact Family Dental Directory. Fill in the form below to contact us.", 1921 "about": "Family Dental Directory > About Contact", 1922 "inLanguage": "en-US", 1923 "mainEntityOfPage": "https://www.familydentaldirectory.com/about/contact", 1924 "author": { 1925 "@id": "https://www.familydentaldirectory.com/#organization" 1926 }, 1927 "publisher": { 1928 "@id": "https://www.familydentaldirectory.com/#organization" 1929 }, 1930 "isPartOf": { 1931 "@id": "https://www.familydentaldirectory.com/#website" 1932 }, 1933 "primaryImageOfPage": { 1934 "@type": "ImageObject", 1935 "url": "\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t" 1936 }, 1937 "keywords": [ 1938 "dental", 1939 "dentist" 1940 ], 1941 "dateModified": "2026-03-06T16:49:47-07:00" 1942}</script>
1942 1943 <div class="clearfix"></div> 1944 </div> 1945</div> 1946</main> 1947<!-- End Content --> 1948<div class="clearfix footer-clear-element clearfix-lg"></div> 1949<!-- 1950 1951IMPORTANT: 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. 1952 1953--> 1954<div class="clearfix"></div> 1955<div class="clearfix"></div> 1956<div class="footer"> 1957 <div class="container"> 1958 <div class="row"> 1959 <ul class="footer_menu sm-text-center"> 1960 <li class='col-md-4'><span id='link157' class='head'> About</span><ul><li class=''><span id='link158' class='content'> Finding Dentists is easy by searching our trusted network of top-rated Dentists.</span></li></ul></li><li class='col-md-2'><span id='link159' class='head'> Website</span><ul><li class=''><a href='/about' id='link160'>How It Works</a></li><li class=''><a href='/join' id='link161'>List Your Dental Practice</a></li><li class=''><a href='/dental-jobs' id='link293'>Dental Jobs</a></li><li class=''><a href='/blog' id='link237'>Blog</a></li><li class=''><a href='/login/retrieval' id='link166'>Password Retrieval</a></li><li class=''><a href='/about/contact' id='link167'>Contact Us</a></li></ul></li><li class='col-md-6'><span id='link162' class='head'> Find Dentists By State</span><ul><li class=''><span id='link163'> <style type='text/css'> .linklist {list-style: none !important; display: flex !important;flex-wrap: wrap !important;} 1961 1962.linklist li { padding: 0px 0px 0px 4px } 1963 1964.linklist a {display: block !important;color: white !important;text-decoration: none !important; font-size: 12px, transition: all 0.3s;} 1965 1966 1967/* Extra small devices (phones, 600px and down) */ 1968@media only screen and (max-width: 600px) { 1969 .linklist { width: 100%;} 1970} 1971 1972/* Small devices (portrait tablets and large phones, 600px and up) */ 1973@media only screen and (min-width: 600px) { 1974 .linklist {list-style: none !important; display: flex !important;flex-wrap: wrap !important; } 1975 1976 .linklist li { padding: 0px 0px 0px 4px } 1977 1978 .linklist a {display: block !important;color: white !important;text-decoration: none !important; font-size: 12px} 1979 1980 .linklist a:hover { color: #205081 !important; transition: all 0.3s; } 1981} </style><ul class="linklist"> 1982 <li class="statecodes"><a href="/alaska/dentist">AK</a></li> 1983 <li class="statecodes"><a href="/alabama/dentist">AL</a></li> 1984<li class="statecodes"><a href="/arkansas/dentist">AR</a></li> 1985<li class="statecodes"><a href="/arizona/dentist">AZ</a></li> 1986<li class="statecodes"><a href="/california/dentist">CA</a></li> 1987<li class="statecodes"><a href="/colorado/dentist">CO</a></li> 1988<li class="statecodes"><a href="/connecticu/dentistt">CT</a></li> 1989<li class="statecodes"><a href="/delaware/dentist">DE</a></li> 1990<li class="statecodes"><a href="/florida/dentist">FL</a></li> 1991<li class="statecodes"><a href="/georgia/dentist">GA</a></li> 1992<li class="statecodes"><a href="/hawaii/dentist">HI</a></li> 1993<li class="statecodes"><a href="/iowa/dentist">IA</a></li> 1994<li class="statecodes"><a href="/idaho/dentist">ID</a></li> 1995<li class="statecodes"><a href="/illinois/dentist">IL</a></li> 1996<li class="statecodes"><a href="/indiana/dentist">IN</a></li> 1997<li class="statecodes"><a href="/kansas/dentist">KS</a></li> 1998<li class="statecodes"><a href="/kentucky/dentist">KY</a></li> 1999<li class="statecodes"><a href="/louisiana/dentist">LA</a></li> 2000<li class="statecodes"><a href="/massachusetts/dentist">MA</a></li> 2001<li class="statecodes"><a href="/maryland/dentist">MD</a></li> 2002<li class="statecodes"><a href="/maine/dentist">ME</a></li> 2003<li class="statecodes"><a href="/michigan/dentist">MI</a></li> 2004<li class="statecodes"><a href="/minnesota/dentist">MN</a></li> 2005<li class="statecodes"><a href="/missouri/dentist">MO</a></li> 2006<li class="statecodes"><a href="/mississippi/dentist">MS</a></li> 2007<li class="statecodes"><a href="/montana/dentist">MT</a></li> 2008<li class="statecodes"><a href="/north-carolina/dentist">NC</a></li> 2009<li class="statecodes"><a href="/north-dakota/dentist">ND</a></li> 2010<li class="statecodes"><a href="/nebraska/dentist">NE</a></li> 2011<li class="statecodes"><a href="/new-hampshire/dentist">NH</a></li> 2012<li class="statecodes"><a href="/new-jersey/dentist">NJ</a></li> 2013<li class="statecodes"><a href="/new-mexico/dentist">NM</a></li> 2014<li class="statecodes"><a href="/nevada/dentist">NV</a></li> 2015<li class="statecodes"><a href="/new-york/dentist">
2015NY</a></li> 2016<li class="statecodes"><a href="/ohio/dentist">OH</a></li> 2017<li class="statecodes"><a href="/oklahoma/dentist">OK</a></li> 2018<li class="statecodes"><a href="/oregon/dentist">OR</a></li> 2019<li class="statecodes"><a href="/pennsylvani/dentista">PA</a></li> 2020<li class="statecodes"><a href="/rhode-island/dentist">RI</a></li> 2021<li class="statecodes"><a href="/south-carolina/dentist">SC</a></li> 2022<li class="statecodes"><a href="/south-dakota/dentist">SD</a></li> 2023<li class="statecodes"><a href="/tennessee/dentist">TN</a></li> 2024<li class="statecodes"><a href="/texas/dentist">TX</a></li> 2025<li class="statecodes"><a href="/utah/dentist">UT</a></li> 2026<li class="statecodes"><a href="/virginia/dentist">VA</a></li> 2027<li class="statecodes"><a href="/vermont/dentist">VT</a></li> 2028<li class="statecodes"><a href="/washington/dentist">WA</a></li> 2029<li class="statecodes"><a href="/wisconsin/dentist">WI</a></li> 2030<li class="statecodes"><a href="/west-virginia/dentist">WV</a></li> 2031<li class="statecodes"><a href="/wyoming/dentist">WY</a></li> 2032</ul> </span></li><li class=''><span id='link253'> </span></li></ul></li><li class='col-md-5 vpad vmargin'><span id='link211'> <style>.network-icon.twitter,.network-icon.tiktok{background:#000}</style> 2033<div class="list-social-links"> 2034 <a class="network-icon contact" href="/about/contact" title="Contact Us Family Dental Directory"> 2035 <i class="bi bi-envelope"></i> 2036 </a> 2037 <a class="network-icon facebook" href="https://www.facebook.com/familydentaldirectory" target="_blank" title="Family Dental Directory Facebook"> 2038 <i class="bi bi-facebook"></i> 2039 </a> 2040 <a class="network-icon twitter" href="https://twitter.com/familydentaldir" target="_blank" title="Family Dental Directory X"> 2041 <i class="bi bi-twitter-x"></i> 2042 </a> 2043 2044 2045 <a class="network-icon linkedin" href="https://www.linkedin.com/company/dentaldirectory" target="_blank" title="Family Dental Directory LinkedIn"> 2046 <i class="bi bi-linkedin"></i> 2047 </a> 2048 2049 <div class="clearfix"></div> 2050</div></span></li> </ul> 2051 </div> 2052 <div class="col-md-12 fpad fmargin small text-center footer_terms"> 2053 © 2026 <a title="Family Dental Directory" href="/"> 2054 Family Dental Directory </a> 2055 All Rights Reserved. 2056 <div class="inline-block"> 2057 <a title="Terms of Use - Family Dental Directory" href="/about/terms"> 2058 Terms of Use 2059 </a> 2060 | 2061 <a title="Privacy Policy - Family Dental Directory" href="/about/privacy"> 2062 Privacy Policy 2063 </a> 2064 </div> 2065</div> 2066 </div> 2067</div><style type='text/css'> .scrollup { 2068 border-radius: 3px; 2069 width: 40px; 2070 height: 40px; 2071 opacity: 0.4; 2072 position: fixed; 2073 bottom: 30px; 2074 right: 30px; 2075 display: none; 2076 background: rgba(119, 119, 119, 0.8); 2077 z-index: 1000000; 2078} 2079.scrollup i { 2080 font-size: 36px; 2081 color: white; 2082 position: relative; 2083 top: 0px; 2084 left: 10px; 2085} </style> <div class="myModal modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="mySmallModalLabel" 2086 data-backdrop="static" data-keyboard="false"> 2087 <div class="modal-dialog" role="document"> 2088 <div class="modal-content"> 2089 <div class="modal-body nohpad nobpad"> 2090 <button type="button" style="z-index:10;position:absolute;right:15px;" class="close hmargin" 2091 data-dismiss="modal">× 2092 </button> 2093 <style> 2094 .member-login-container:not(.modal .module) { 2095 width: 555px; 2096 max-width: 100%; 2097 margin-left: auto; 2098 margin-right: auto; 2099 margin-bottom:0; 2100 background-color: rgb(250, 250, 250)!important; 2101 border-color: rgb(238, 238, 238)!important; 2102 color: rgb(41, 41, 41)!important; 2103 } 2104 .login-register-tabs, .login-register-content { 2105 width: 555px!important; 2106 max-width: 100%; 2107 margin-left: auto!important; 2108 margin-right: auto!important; 2109 background-color: rgb(238, 238, 238); 2110 } 2111 .login-register-content { 2112 background: transparent; 2113 padding: 0; 2114 border: none; 2115 } 2116 .login-register-content h2, .login-register-content h2+hr, .login-register-content .account-menu-title { 2117 display: none!important; 2118 } 2119 .express_login_create_account_prefix hr { 2120 margin: 15px 0 10px; 2121 }
2122 .modal-content #containerFBLogin, .modal-content #containerGoogleLogin { 2123 margin:15px 0; 2124 } 2125 2126 /* CSS When Login Form and Express Registration Rendered in Sidebar */ 2127 .col-md-3 .bd-chat-well-container,.col-md-4 .bd-chat-well-container { 2128 padding: 15px 10px; 2129 } 2130 .col-md-3 .bd-chat-center-text,.col-md-4 .bd-chat-center-text { 2131 margin: 0; 2132 font-size: 20px; 2133 padding: 0 15px; 2134 } 2135 .col-md-3 .member-login-page-container .login-register-tabs *, .col-md-4 .member-login-page-container .login-register-tabs * { 2136 font-size: 12px; 2137 line-height: 1.2em; 2138 vertical-align: bottom; 2139 } 2140 .col-md-3 .member-login-page-container .login-register-tabs a, .col-md-4 .member-login-page-container .login-register-tabs a { 2141 padding: 5px !important; 2142 height: 50px; 2143 vertical-align: middle; 2144 display: table-cell !important; 2145 width: 1%; 2146 } 2147 .col-md-3 .member-login-page-container .login-register-content, .col-md-4 .member-login-page-container .login-register-content { 2148 padding: 0; 2149 } 2150 .col-md-3 .member-login-container, .col-md-4 .member-login-container { 2151 padding: 15px !important; 2152 font-size: 13px; 2153 } 2154 .col-md-3 .member-login-page-container .input-lg, .col-md-4 .member-login-page-container .input-lg { 2155 height: 34px; 2156 padding: 6px 12px; 2157 font-size: 14px; 2158 } 2159 .col-md-3 .member-login-page-container .security_question_label, .col-md-4 .member-login-page-container .security_question_label { 2160 transform: scale(.85); 2161 margin: -1.15em -1.15em 0; 2162 } 2163 .col-md-3 #containerFBLogin, .col-md-4 #containerFBLogin, .col-md-3 #containerGoogleLogin, .col-md-4 #containerGoogleLogin, .col-md-3 .login-cta-buttons li, .col-md-4 .login-cta-buttons li { 2164 width: 100%; 2165 display: block; 2166 margin-top:5px; 2167 } 2168 .col-md-3 .login-cta-buttons li, .col-md-4 .login-cta-buttons li { 2169 padding:0 2170 } 2171 .col-md-3 .login-cta-buttons ul.nav, .col-md-4 .login-cta-buttons ul.nav { 2172 margin-top: -10px; 2173 } 2174 .col-md-3 #googleAction, .col-md-3 #facebookAction, .col-md-4 #googleAction, .col-md-4 #facebookAction { 2175 padding: 0; 2176 min-height: 0; 2177 font-size: 14px; 2178 margin: 0; 2179 } 2180 .col-md-3 #googleAction img, .col-md-3 #facebookAction img, .col-md-4 #googleAction img, .col-md-4 #facebookAction img { 2181 height: 36px !important; 2182 margin-right: 5px; 2183 position: relative!important; 2184 display: inline-block; 2185 } 2186 @media only screen and (max-width: 767px) { 2187 .col-md-3 .member-login-page-container .login-register-tabs a, .col-md-4 .member-login-page-container .login-register-tabs a { 2188 display: block !important; 2189 width: 100%; 2190 line-height: 40px; 2191 } 2192 2193 #containerGoogleLogin { 2194 text-align: center; 2195 margin-top: 10px; 2196 } 2197 #containerGoogleLogin #gBtn { 2198 display: inline-block; 2199 } 2200 } 2201 </style> 2202 <div class="row member-login-page-container"> 2203 <div class="fpad-lg novpad"> 2204 2205 2206 <div class="module fpad-xl member-login-container"> 2207 <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-%20Member%20Login%20Page" id="member_login_190-1" method="post" labelwidth="100" labelpaddingtop="0.5em" enctype="multipart/form-data" form_action_type="redirect" form_action_div return_data_type="" name="member_login_190-1" class=" ">
2207<input type="hidden" name="sized" value="0" id="member_login_190-1-element-0"/><input type="hidden" name="form" value="myform" id="member_login_190-1-element-1"/><input type="hidden" name="formname" value="member_login" id="member_login_190-1-element-2"/><input type="hidden" name="dowiz" value="1" id="member_login_190-1-element-3"/><input type="hidden" name="save" value="1" id="member_login_190-1-element-4"/><input type="hidden" name="url_origin_pars" value="/about/contact" id="member_login_190-1-element-5"/><input type="hidden" name="action" autocomplete="off" value="login" id="member_login_190-1-element-6"/><h2 class="nomargin member-login-h2-form-title">Member Login</h2><hr><style type='text/css'> #containerGoogleLogin #gBtn { 2208 display: inline-block; 2209 text-align: center; 2210 width: 216px; 2211} 2212 2213.module #containerFBLogin #facebookAction img, .module #containerFBLogin #facebookAction img { 2214 position: absolute !important; 2215} 2216.module #containerFBLogin a#facebookAction { 2217 max-width: 200px; 2218 position: relative; 2219 left: -8px; 2220 2221} </style> <!-- Required Font-Family for Social Buttons --> 2222 <link rel="stylesheet" media="print" onload="this.onload=null;this.removeAttribute('media');" href="https://fonts.googleapis.com/css?family=Roboto:500&display=swap"> 2223 <noscript> 2224 <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:500&display=swap"> 2225 </noscript> 2226 2227 <div class="row social-login-row"> 2228 </div><div class="form-group"><label class="vertical-label bd-email" for="member_login_190-1-element-9"><span class="required">* </span>Email Address</label><input type="email" name="email" required placeholder="[email protected]" autocomplete="off" value class="form-control input-lg" id="member_login_190-1-element-9"/></div><div class="form-group"><label class="vertical-label bd-password" for="member_login_190-1-element-10"><span class="required">* </span>Password</label> 2229 <style> 2230 #togglePassword { 2231 background: none; 2232 border: none; 2233 cursor: pointer; 2234 font-weight: bold; 2235 font-size: .85em; 2236 position: absolute; 2237 right: 5px; 2238 top: 0; 2239 } 2240 </style><button type="button" tabindex="-1" id="togglePassword" onclick="showPassword(this);"> <i class="fa fa-lock" aria-hidden="true"></i></button> 2241
2241<script> 2242 function showPassword(node){ 2243 const parent = node.closest('.form-group'); 2244 const passwordField = parent.querySelector(`input[type='password'], input[type='text']`); 2245 const isPassword = passwordField.getAttribute('type') === 'password'; 2246 passwordField.setAttribute('type', isPassword ? 'text' : 'password'); 2247 const iconHTML = isPassword ? `<i class="fa fa-unlock" aria-hidden="true"></i>` : `<i class="fa fa-lock" aria-hidden="true"></i>`; 2248 node.innerHTML = iconHTML; 2249 } 2250 </script>
2250<input type="password" name="pass" required placeholder="Enter Password" autocomplete="off" value class="form-control input-lg" id="member_login_190-1-element-10"/></div><span class="help-block bpad bmargin notmargin"> <a href="/login/retrieval">Forgot Password? Click to Reset Password</a></span><div class="form-group"><div class="form-group security_question_label"> 2251 <div id="member_login_190-1-captchaContainer" class="control-group"> 2252 <div class="g-recaptcha" id="member_login_190-1-google-recaptcha"></div> 2253 </div> 2254 <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> 2255 <div class="clearfix bmargin"></div> 2256 <input type="hidden" name="recaptcha" id="member_login_190-1-rcap"> 2257</div> 2258 <style> 2259 .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 { 2260 transform: scale(0.77); 2261 -webkit-transform: scale(0.77); 2262 transform-origin: 0 0; 2263 -webkit-transform-origin: 0 0; 2264 margin-bottom: -15px; 2265 } 2266 2267 .modal #member_login_190-1-captchaContainer, .col-md-4 #member_login_190-1-captchaContainer, .col-md-3 #member_login_190-1-captchaContainer, .col-lg-3 #member_login_190-1-captchaContainer, .col-lg-4 #member_login_190-1-captchaContainer { 2268 transform: scale(0.77); 2269 -webkit-transform: scale(0.77); 2270 transform-origin: 0 0; 2271 -webkit-transform-origin: 0 0; 2272 margin-bottom: -15px; 2273 } 2274 </style> 2275
2275<script type="text/javascript"> 2276 if(typeof formsFound == "undefined"){ 2277 var formID = ''; 2278 var currentCaptcha = {}; 2279 var captchaHolders = {}; 2280 var formsFound = {}; 2281 var captchaApiRequested = false; 2282 /* The forms the visitor has actually interacted with - only these get a widget. */ 2283 var captchaArmedForms = []; 2284 /* api.js stays lazy - nothing is fetched from Google until the visitor actually 2285 touches the form. 'click' alone was too narrow: a keyboard-only visitor tabs in 2286 and presses Enter without ever clicking, so api.js never loaded, the captcha 2287 never rendered, and the form POSTed an empty token. */ 2288 var captchaTriggerEvents = ['click', 'keydown', 'focusin', 'touchstart']; 2289 2290 window.addEventListener('load', () => { 2291 formID = document.querySelectorAll('[name="recaptcha"]'); 2292 if (typeof formID != "undefined" && formID !== null) { 2293 for (let i = 0; i < formID.length; i++) { 2294 let formIDForm = formID[i].closest('form'); 2295 let captchaHolder = formIDForm.querySelector(".g-recaptcha"); 2296 2297 if (typeof formsFound[formIDForm.id] != "undefined") { 2298 formsFound[formIDForm.id]['counter']++; 2299 }else{ 2300 formsFound[formIDForm.id] = {'counter' : 1}; 2301 } 2302 2303 formIDForm.setAttribute('data-counter', formsFound[formIDForm.id]['counter']); 2304 captchaHolder.setAttribute('id',captchaHolder.id+'-'+formsFound[formIDForm.id]['counter']); 2305 2306 if (typeof formIDForm != "undefined" && formIDForm !== null) { 2307 captchaTriggerEvents.forEach( evt => 2308 formIDForm.addEventListener(evt, reCaptchaOnFormInteraction, false) 2309 ); 2310 } 2311 } 2312 } 2313 }); 2314 } 2315 2316 function reCaptchaOnFormInteraction(event) { 2317 if (event && event.currentTarget) { 2318 captchaArmForm(event.currentTarget); 2319 } 2320 if (captchaApiRequested) { 2321 renderArmedCaptchas(); 2322 return; 2323 } 2324 captchaApiRequested = true; 2325 2326 var head = document.getElementsByTagName('head')[0]; 2327 var script = document.createElement('script'); 2328 script.type = 'text/javascript'; 2329 script.src = 'https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit&hl=en'; 2330 head.appendChild(script); 2331 } 2332 2333 var captchaArmForm = function (formEl) { 2334 if (!formEl) { 2335 return; 2336 } 2337 for (var a = 0; a < captchaArmedForms.length; a++) { 2338 if (captchaArmedForms[a] === formEl) { 2339 return; 2340 } 2341 } 2342 captchaArmedForms.push(formEl); 2343 }; 2344 2345 var captchaSolvedCallback = function (holder) { 2346 return function () { 2347 var formEl = holder.closest('form'); 2348 if (!formEl) { 2349 return; 2350 } 2351 $(formEl).find('.security_question_label').removeClass('has-error'); 2352 $(formEl).find('#recaptcha_error').css('display', 'none'); 2353 var notification = document.getElementById(formEl.id + '-notification'); 2354 if (notification && notification.classList.contains('alert-danger-subtle')) { 2355 $(notification).slideUp(); 2356 } 2357 }; 2358 }; 2359 2360 var renderArmedCaptchas = function () { 2361 if (typeof grecaptcha === "undefined" || typeof grecaptcha.render !== "function") { 2362 return; 2363 } 2364 for (var f = 0; f < captchaArmedForms.length; f++) { 2365 var holder = captchaArmedForms[f].querySelector('div[class=g-rec
2365aptcha]'); 2366 2367 if (!holder || !holder.id || holder.getClientRects().length === 0) { 2368 continue; 2369 } 2370 /* Guard a second render: grecaptcha throws on an element it already claimed. */ 2371 if (typeof captchaHolders[holder.id] === "undefined") { 2372 captchaHolders[holder.id] = grecaptcha.render(holder.id, { 2373 'sitekey': '6LdtsoYUAAAAAIH51FbNtwVfAzLFfwDzr_Y6Jneq', 2374 'callback': captchaSolvedCallback(holder) 2375 }); 2376 } 2377 } 2378 }; 2379 2380 var onloadCallback = function (event) { 2381 renderArmedCaptchas(); 2382 }; 2383 2384 </script>
vendor: 1 bytes, line 2384
2384
2385<script> 2386 $(document).ready(function(){ 2387 /* Implicit submission (Enter inside a field) fires 'submit' without firing a click on 2388 the submit button, so the click guard below never sees it and the form POSTed an 2389 empty token. Bound on document/capture so it runs before FormValidation's own 2390 handler on the form - at AT_TARGET the capture flag does not order listeners, so a 2391 listener on the form itself would not reliably win. Native HTMLFormElement.submit() 2392 does not dispatch 'submit', so the solved-captcha path below is unaffected. */ 2393 var captchaGuardedForm = document.getElementById('member_login_190-1'); 2394 if (captchaGuardedForm) { 2395 document.addEventListener('submit', function (event) { 2396 if (event.target !== captchaGuardedForm) { 2397 return; 2398 } 2399 2400 var formId = captchaGuardedForm.id; 2401 var captchaHolderKey = formId + "-google-recaptcha-" + $(captchaGuardedForm).data('counter'); 2402 var captchaRendered = typeof captchaHolders[captchaHolderKey] != "undefined"; 2403 2404 if (captchaRendered && grecaptcha.getResponse(captchaHolders[captchaHolderKey]) !== "") { 2405 $("#" + formId + " .security_question_label").removeClass("has-error"); 2406 $("#" + formId + " #recaptcha_error").css("display", "none"); 2407 return; 2408 } 2409 2410 /* Unsolved, or api.js still in flight: either way there is no token to send. */ 2411 event.preventDefault(); 2412 event.stopImmediatePropagation(); 2413 $("#" + formId + " .security_question_label").addClass("has-error"); 2414 $("#" + formId + " #recaptcha_error").css("display", "block"); 2415 return false; 2416 }, true); 2417 } 2418 $("#member_login_190-1 input[type=submit]").unbind('click'); 2419 $("#member_login_190-1 input[type=submit]").click(function (event) { 2420 2421 var formId = $(this.form).attr('id'); 2422 var captchaHolderKey = formId + "-google-recaptcha-" +$(this.form).data('counter'); 2423 2424 if (typeof captchaHolders[captchaHolderKey] != "undefined") { 2425 if (grecaptcha.getResponse(captchaHolders[captchaHolderKey]) === "") { 2426 event.preventDefault(); 2427 $("#" + formId).formValidation('validate'); 2428 $("#" + formId + " .security_question_label").addClass("has-error"); 2429 $("#" + formId + " #recaptcha_error").css("display", "block"); 2430 return false; 2431 } 2432 2433 /* Solved captcha: clear the error UI and let the click proceed untouched. 2434 The browser then fires a REAL, button-initiated submit event, so 2435 FormValidation runs its normal chain (success.form.fv -> AJAX modal on 2436 checkout / native POST on login). Re-submitting here artificially broke 2437 both ways: native form.submit() skips the FV chain (checkout rendered the 2438 raw JSON response), and jQuery .submit() fires a synthetic submit that FV 2439 refuses, leaving the form stuck after the first error (Bug 2). */ 2440 $("#" + formId + " .security_question_label").removeClass("has-error"); 2441 $("#" + formId + " #recaptcha_error").css("display", "none"); 2442 } 2443 }); 2444 }); 2445</script>
2445</div><div class="form-actions"><input type="submit" value="Login Now" name class="btn btn-primary btn-lg btn-block " id="member_login_190-1-element-13"/></div><div class="login-cta-buttons"><hr class="cta-hr"><ul class="list-inline nomargin inline-block btn-block"><li class='col-md-6 nolpad sm-nopad nav'><a href='/join' id='link229' class='btn btn-success btn-block'>Are You a Family Dental Practice? <span class="inline-block">Register Your Business for FREE!</span></a></li></ul><div class="clearfix"></div></div></form>
2445<script type="text/javascript">jQuery(document).ready(function() { jQuery("#member_login_190-1").bind("submit", function() { 2446 });}); </script>
2446 <div class="clearfix"></div> 2447 </div> 2448 2449 2450 </div> 2451 </div> 2452 </div> 2453 </div> 2454 </div> 2455 </div> 2456 2457 2458 2459 <link rel="stylesheet" type="text/css" href="https://www.optimizecdn.com/directory/cdn/assets/bootstrap/limonte-sweetalert2/6.11.2/sweetalert2.min.css">
2460<script src="https://www.optimizecdn.com/directory/cdn/assets/bootstrap/limonte-sweetalert2/6.11.2/sweetalert2.min.js"></script>
2460 2461
2462<script> 2463 function clearContent(thisObj){ 2464 var size; 2465 if(thisObj.hasClass('input-sm') || thisObj.parents('.input-group').hasClass('input-group-sm')){ 2466 size = "small"; 2467 } else if (thisObj.hasClass('input-lg') || thisObj.parents('.input-group').hasClass('large-autosuggest')){ 2468 size = "large"; 2469 } else { 2470 size = "medium"; 2471 } 2472 if(!thisObj.parent().hasClass('input_wrapper')){ 2473 if(thisObj.parent().hasClass('input-group-sm')){ 2474 thisObj.wrap('<span class="input-group-sm input_wrapper"></span>'); 2475 } else if (thisObj.parent().hasClass('input-group-lg')){ 2476 thisObj.wrap('<span class="input-group-lg input_wrapper"></span>'); 2477 } else { 2478 thisObj.wrap('<span class="input_wrapper"></span>'); 2479 } 2480 } 2481 if(thisObj.val() != ""){ 2482 if(thisObj.hasClass('googleSuggest')){ 2483 thisObj.parent().find('.fill_location').remove(); 2484 } 2485 if (!thisObj.parent().find('.clear_content').length){ 2486 thisObj.parent().append(`<span class="clear_content ${size}"><i class="fa fa-times-circle" aria-hidden="true"></i></span>`); 2487 if (thisObj.hasClass("tt-input")) { 2488 thisObj.focus(); 2489 } 2490 2491 } 2492 } 2493 if (thisObj.hasClass('googleSuggest') && thisObj.val().length == 0) { 2494 thisObj.parent().append(`<span class="fill_location ${size}"><i class="fa fa-crosshairs" title="Use Current Location" aria-hidden="true"></i></span>`); 2495 } 2496 if (thisObj.val() == "" && thisObj.parent().find('.clear_content').length){ 2497 thisObj.parent().find('.clear_content').remove(); 2498 } 2499 } 2500 2501 $(document).on('click', '.drp-buttons .applyBtn', function(){ 2502 clearContent($(".dateRange input")); 2503 }); 2504 2505 $('.sm-autosuggest input, .googleSuggest, .large-autosuggest input, .md-autosuggest input, .normal-autosuggest input, .google-writen-location, .dateRange input').keyup(function(){ 2506 clearContent($(this)); 2507 }); 2508 2509 $(document).ready(function(){ 2510 $('.sm-autosuggest input, input.googleSuggest, .large-autosuggest input, .md-autosuggest input, .normal-autosuggest input, .google-writen-location, .dateRange input').each(function(){ 2511 clearContent($(this)); 2512 }) 2513 }) 2514 2515 $(document).on('click', '.clear_content', function(){ 2516 $(this).parent().find('input').val(''); 2517 //tt-input its a class for typeahead auto-suggest 2518 if ($(this).parent().find('input').hasClass("tt-input")) { 2519 $(this).parent().find('input').typeahead('val',''); 2520 } 2521 clearContent($(this).parent().find('input')); 2522 $(this).remove(); 2523 }); 2524 2525 $(window).on('load', function () { 2526 setTimeout(function() { 2527 // add missing href attribute to multi-category options in search modules 2528 $('.bootstrap-select.show-tick .dropdown-menu a').attr('href', '#'); 2529 }, 2000); 2530 }); 2531</script>
2531 2532 2533 2534 2535<a href="#" class="scrollup" title="scrollup"> 2536 <i class="fa fa-caret-up" aria-hidden="true"></i> 2537</a>
2538<script> 2539 $(document).ready(function(){ 2540 // .progressbar() comes from bootstrap-progressbar.min.js, loaded only by widgets 1236/1318. 2541 // Elsewhere it used to fall through to jQuery UI's; jQuery UI is no longer global, so an 2542 // unguarded call throws and kills the rest of this ready() handler (scrollup, crop button). 2543 if ($.fn.progressbar) { 2544 $('.progress .progress-bar').progressbar({ 2545 display_text: 'fill' 2546 }); 2547 } 2548 $(window).scroll(function(){ 2549 2550 if ($(this).scrollTop() > 600) { 2551 $('.scrollup').fadeIn(); 2552 2553 } else { 2554 $('.scrollup').fadeOut(); 2555 } 2556 }); 2557 $('.scrollup').click(function(){ 2558 $("html, body").animate({ 2559 scrollTop: 0 2560 }, 600); 2561 return false; 2562 }); 2563 $('#cropButton').click(function(){ 2564 var iframe = $("#cropiFrame"); 2565 iframe.attr("src", iframe.data("src")); 2566 }); 2567 }); 2568</script>
vendor: 2 bytes, line 2568
2568
2569<script> 2570 $('#captchaContainer').removeClass('form-control '); 2571 $(".website_url_field").keyup(function(){ 2572 var fieldName = $(this).attr('name'); 2573 $(this).val($(this).val().replace(/\s+/g, '')); 2574 $('#myform').formValidation('revalidateField', fieldName); 2575 }); 2576</script>
2576 2577
2577<script src="https://www.optimizecdn.com/directory/cdn/bootstrap/formvalidation/current/dist/js/formValidation.min.js"></script>
2577 2578
2578<script src="https://www.optimizecdn.com/directory/cdn/bootstrap/formvalidation/current/dist/js/framework/bootstrap.min.js"></script>
2578 2579
2579<script type="text/javascript"> 2580 function decodeHtml(html) { 2581 var txt = document.createElement("textarea"); 2582 txt.innerHTML = html; 2583 return txt.value; 2584 } 2585 2586 // Override FormValidation URI validator to prevent recursion with URLs that contain @ characters 2587 $(function() { 2588 function applyFix() { 2589 // Check if FormValidation library and URI validator are loaded 2590 if (FormValidation && FormValidation.Validator && FormValidation.Validator.uri) { 2591 FormValidation.Validator.uri.validate = function(validator, $field, options) { 2592 var value = validator.getFieldValue($field, 'uri').trim(); 2593 return value === '' || new RegExp('^https?://[^\\s]+\\.[^\\s]{2,}').test(value); 2594 }; 2595 return true; 2596 } 2597 return false; 2598 } 2599 2600 if (!applyFix()) { 2601 setTimeout(applyFix, 50); 2602 } 2603 }); 2604 </script>
2604 2605
2605<script type="text/javascript"> 2606 2607 var counterSubmit = 0; 2608 $(document).ready(function() { 2609 /* grecaptcha.reset() with no argument always resets widget 0. On a page with two 2610 captcha holders that clears the wrong checkbox, so the widget the visitor solved 2611 keeps a token Google has already spent and every retry fails the security check. 2612 captchaHolders is published by widget 1995 keyed by "<formId>-google-recaptcha"; 2613 an undefined id means no per-form id is known and the arg-less call is used, 2614 exactly as before. */ 2615 function bdCaptchaWidgetId(formId) { 2616 if (typeof captchaHolders === "undefined" || !formId) { 2617 return undefined; 2618 } 2619 /* recaptcha.php renames each holder to "<id>-<counter>" before render (recaptcha.php ~L84), 2620 so captchaHolders is keyed by the RENAMED id - not "<formId>-google-recaptcha". Resolve from 2621 the holder element itself so the counter never has to be reconstructed. */ 2622 var form = document.getElementById(formId); 2623 var holder = form && form.querySelector(".g-recaptcha"); 2624 return holder ? captchaHolders[holder.id] : undefined; 2625 } 2626 2627 function bdCaptchaReset(formId) { 2628 if (typeof grecaptcha === "undefined" || typeof grecaptcha.reset !== "function") { 2629 return; 2630 } 2631 var widgetId = bdCaptchaWidgetId(formId); 2632 if (widgetId === undefined) { 2633 grecaptcha.reset(); 2634 } else { 2635 grecaptcha.reset(widgetId); 2636 } 2637 } 2638 2639 // Ghost-field strip (card d4tk1CMp): the server-side validator config can carry 2640 // rules for fields that are NOT rendered in this form (conditionally-rendered or 2641 // duplicated form configs). Those phantom rules make formValidation mis-evaluate 2642 // isValid(), so an empty required field bypasses validation and submits natively. 2643 // Remove any rule whose field has no matching element before initializing. 2644 // NOTE: this is the ONLY layer re-applied from reverted PR #5902. It strictly 2645 // REMOVES rules (never adds validators, never overrides native submit, never 2646 // intercepts on capture phase, never re-validates on click) â so it cannot 2647 // reproduce the "Save button slides down / nav broken / no success message" 2648 // regression that caused #5902 to be rolled back on site 19413. 2649 var validatorConfig = {"framework":"bootstrap","addOns":{"reCaptcha2":{"element":"captchaContainer","language":"en","theme":"light","siteKey":"6LdtsoYUAAAAAIH51FbNtwVfAzLFfwDzr_Y6Jneq","timeout":"120","message":"The captcha is not valid"}},"fields":{"yourname":{"validators":{"notEmpty":{"message":"Required Field"}}},"inquiry_email":{"validators":{"notEmpty":{"message":"Required Field"},"emailAddress":{"message":"Please enter a valid email address"}}},"phone":{"validators":{"notEmpty":{"message":"Required Field"}}},"comments":{"validators":{"notEmpty":{"message":"Required Field"},"stringLength":{"min":"20","max":"500","message":"Message must be at least 20 characters"},"regexp":{"regexp":"^((?!<a href|</a>).)*$","message":"Unauthorized Message"}}}}}; 2650 var formElement = $(`form[name='contact_form_113']`); 2651 if(validatorConfig && validatorConfig.fields) { 2652 Object.keys(validatorConfig.fields).forEach(function(fieldName) { 2653 if(formElement.find('[name="' + fieldName + '"]').length === 0) { 2654 delete validatorConfig.fields[fieldName]; 2655 } 2656 }); 2657 } 2658 2659 // Scroll to the first invalid field when submit fails validation, 2660 // so the user can immediately see why the form will not submit 2661 formElement.on('err.form.fv', function(e) { 2662 var $firstError = $(e.target).find('.form-group.has-error').first(); 2663 if ($firstError.length) { 2664 $('html, body').animate({ scrollTop: $firstError.offset().top - 100 }, 700); 2665 } 2666 }); 2667
2668 formElement.formValidation(validatorConfig).on('success.form.fv', function(e,fvdata) { 2669 2670 if('contact_form' == 'unsubscribe_email'){ 2671 return true; 2672 } 2673 // Prevent form submission 2674 e.preventDefault(); 2675 $form = $(e.target), 2676 fv = $form.data('formValidation'); 2677 2678 // Check HTML5 required fields that FormValidation may not know about 2679 var requiredEmpty = false; 2680 $form.find('[required]').each(function() { 2681 var val = $(this).val(); 2682 if (val === '' || val === null || (typeof val === 'string' && val.trim() === '')) { 2683 requiredEmpty = true; 2684 $(this).closest('.form-group').addClass('has-error'); 2685 if ($(this).siblings('.required-error').length === 0) { 2686 $(this).after('<small class="required-error help-block" style="color:#a94442;">Required Field</small>'); 2687 } 2688 } else { 2689 var $reqGroup = $(this).closest('.form-group'); 2690 $(this).siblings('.required-error').remove(); 2691 // Keep has-error if another validator is still failing for this field 2692 if ($reqGroup.find('small[data-fv-validator][data-fv-result="INVALID"]').length === 0) { 2693 $reqGroup.removeClass('has-error'); 2694 } 2695 } 2696 }); 2697 if (requiredEmpty) { 2698 fv.disableSubmitButtons(false); 2699 counterSubmit = 0; 2700 // Scroll to the first field with an error (HTML5-required scan does 2701 // not trigger err.form.fv, so handle the scroll here too) 2702 var $firstReqError = $form.find('.form-group.has-error').first(); 2703 if ($firstReqError.length) { 2704 $('html, body').animate({ scrollTop: $firstReqError.offset().top - 100 }, 700); 2705 } 2706 return false; 2707 } 2708 2709 var values = $(this).serialize(); 2710 2711 2712 var locationFieldCorrect = true; 2713 2714 if($("#contact_form_113 .location_required").length > 0){ 2715 $("#contact_form_113 .location_required").each(function (index) { 2716 if($(this).data('state') == 1){ 2717 if($('#contact_form_113 input[name="lead_location"]').val() == "" || $('#contact_form_113 input[name="lat"]').val() == "" || $('#contact_form_113 input[name="lng"]').val() == "") { 2718 locationFieldCorrect = false; 2719 } 2720 } 2721 }); 2722 } 2723 2724 if(locationFieldCorrect === false){ 2725 //check that there is a latitude or longitude 2726 swal(`Whoops!`, `The location information is required to submit this form`, "error"); 2727 return false; 2728 } 2729 2730 2731 if (!$(this).attr("action")) { 2732 var action = ''; 2733 2734 } else { 2735 var action = $(this).attr("action"); 2736 } 2737 if (!$(this).attr("method")) { 2738 var method = 'post'; 2739 2740 } else { 2741 var method = $(this).attr("method"); 2742 } 2743 if (!$(this).attr("form_action_type")) { 2744 var form_action_type = 'notification'; 2745 2746 } else { 2747 var form_action_type = $(this).attr("form_action_type"); 2748 } 2749 if (!$(this).attr("form_action_div")) { 2750 /* Empty "ID to Replace" default: prefer #main-content, fall back to legacy #first_container if absent */ 2751 var form_action_div = $('#main-content').length ? '#main-content' : '#first_container'; 2752 2753 } else { 2754 var form_action_div = $(this).attr("form_action_div"); 2755 } 2756 if (!$(this).attr("return_data_type")) { 2757 var return_data_type = 'json'; 2758 2759 } else { 2760 var return_data_type = $(this).attr("return_data_type"); 2761 } 2762 var submitInFlight = counterSubmit != 0 || (Date.now() - ($form.data('bdLastSubmitAt') || 0) < 5000); 2763 if (!submitInFlight) { 2764 if ($("#contact_form_113-notification").html() != "") { 2765 $("#contact_form_113-notification").remove(); 2766 } 2767 if ($(this).find('input[type="submit"]').length > 0) { 2768 $(this).find('input[type="submit"]').before('<div id="contact_form_113-notification" class="alert"></div>'); 2769 2770 } else { 2771 $(this).prepend('<div id="contact_form_113-notification" class="alert"></div>'); 2772 } 2773 } 2774 var notification = $("#contact_form_113-notification"); 2775 2776 if ((form_action_type == "" || form_action_type == "default") && action.indexOf("account") >= 0) { 2777 notification.html(`Processing Request...`).addClass("alert-warning-subtle"); 2778 setTimeout(function(){ 2779 fv.defaultSubmit(); 2780 }, 100); 2781 } else { 2782 notification.html(`Processing Request...`).addClass("alert-warning-subtle"); 2783 if(!submitInFlight) { 2784 counterSubmit++; 2785 $form.data('bdLastSubmitAt', Date.now()); 2786 2787 var fields = $(this).serializeArray(); 2788 var formField = []; 2789 var processData = true; 2790 var contentType = "application/x-www-form-urlencoded; charset=UTF-8"; 2791 2792 2793 2794 if($("#contact_form_113 input[type=file]").length > 0){ 2795 2796 var formObject = new FormData(); 2797 processData = false; 2798 contentType = false; 2799 2800 $(fields).each(function(index,field){ 2801 formField.push(field.name+"="+field.value); 2802 }); 2803 2804 values = formField.join("&"); 2805 2806 $(formField).each(function(index,fieldValue){ 2807 var fieldInfo = fieldValue.split('='); 2808 formObject.append(fieldInfo[0],fieldInfo[1]); 2809 }); 2810 2811 $("#contact_form_113 input[type=file]").each(function(index,node){ 2812 var file = this.files[0]; 2813 if(typeof file != "undefined"){ 2814 formObject.append("file_addon["+$(node).attr('name')+"]", file, file.name); 2815 } 2816 }); 2817 }else{ 2818 2819 $(fields).each(function(index,field){ 2820 formField.push(field.name+"="+encodeURIComponent(field.value)); 2821 }); 2822 2823 var formObject = formField.join("&"); 2824 } 2825 2826 $.ajax({
2827 url: action, 2828 type: method, 2829 data: formObject, 2830 dataType: return_data_type, 2831 processData: processData, 2832 contentType: contentType, 2833 success: function (data) { 2834 // Re-query live node: success.form.fv fires twice, orphaning the closure ref captured above. 2835 notification = $("#contact_form_113-notification"); 2836 if (return_data_type == "html") { 2837 var result = 'success'; 2838 2839 if (!data != "") { 2840 var result_widget = data['result_widget']; 2841 } 2842 2843 } else { 2844 2845 2846 if (!data['result']) { 2847 var result = 'error'; 2848 } else { 2849 var result = data['result']; 2850 } 2851 if (!data['result_widget']) { 2852 var result_widget = ''; 2853 2854 } else { 2855 var result_widget = data['result_widget']; 2856 } 2857 } 2858 if (result == "success") { 2859 2860 if (!data['message']) { 2861 var message = `Your information has submitted successfully!`; 2862 2863 } else { 2864 var message = data['message']; 2865 } 2866 if (!data['redirect_url']) { 2867 var redirect_url = ''; 2868 2869 } else { 2870 var redirect_url = data['redirect_url']; 2871 } 2872 2873 2874 2875 if (form_action_type == "notification") { 2876 if (redirect_url && (action.indexOf('Member%20Login%20Page') >= 0 || action.indexOf('Member Login Page') >= 0)) { 2877 if (redirect_url.substring(0, 1) != "/" && redirect_url.substring(0, 1) != "h") { 2878 redirect_url = "/" + redirect_url; 2879 } 2880 if (notification.parents('.modal').length) { 2881 $('.modal-backdrop').hide(); 2882 $('.modal').modal('hide'); 2883 } 2884 window.location.href = redirect_url; 2885 fv.resetForm(true); 2886 } else { 2887 notification.html(message + '<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>') 2888 .addClass('alert-dismissible') 2889 .addClass("alert-success-subtle") 2890 .removeClass("alert-danger-subtle") 2891 .removeClass("alert-warning-subtle") 2892 2893 2894 2895 if(notification.parents('.modal').length && 'contact_form_113' == 'whmcs_billing_address'){ 2896 setTimeout(function(){ 2897 notification.parents('.modal').modal('hide'); 2898 }, 1000); 2899 } 2900 } 2901 2902 } else if (form_action_type == "widget") { 2903 2904 if (result_widget != '') { 2905 2906 setTimeout(function(){ 2907 if(form_action_div != '.newsletter_modal_form_container'){ 2908 $("html, body").animate({ scrollTop: 0 }, 600); 2909 } 2910 $(form_action_div).html(decodeHtml(result_widget)).text(); 2911 2912 }, 1000); 2913 } 2914 2915 } else if (form_action_type == "redirect") { 2916 2917 if (redirect_url == "") { 2918 redirect_url = decodeURIComponent(""); 2919 } 2920 2921 if (redirect_url.substring(0, 1) != "/" && redirect_url.substring(0, 1) != "h") { 2922 redirect_url = "/" + redirect_url; 2923 } 2924 current_location = "/about/contact"; 2925 refresh_pages_string = "/login"; 2926 refresh_pages_string = refresh_pages_string.replace(/ /g,''); 2927 refresh_pages_array = refresh_pages_string.split(','); 2928 notification.html(message) 2929 .addClass("alert-success-subtle") 2930 .removeClass("alert-danger-subtle") 2931 .removeClass("alert-warning-subtle") 2932 .delay(2000).slideUp(); 2933 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" )){ 2934 window.location.href = window.location.href+'?logged'; 2935 } else { 2936 window.location.href = redirect_url; 2937 } 2938 2939 fv.resetForm(true); 2940 } 2941 if(form_action_div != '.newsletter_modal_form_container' && 'contact_form_113' != 'whmcs_billing_address'){ 2942 $('.modal-backdrop').hide(); 2943 } 2944 } else { 2945 bdCaptchaReset(formElement.attr('id')); 2946 if (!data['message']) { 2947 var message = `You entered invali
2947d data. Please try to save again.`; 2948 2949 } else { 2950 var message = data['message']; 2951 } 2952 $("#contact_form_113-notification").html(message) 2953 .addClass("alert-danger-subtle") 2954 .removeClass("alert-success-subtle") 2955 .removeClass("alert-warning-subtle") 2956 .fadeIn(); 2957 fv.disableSubmitButtons(false); 2958 } 2959 counterSubmit = 0; 2960 }, 2961 error: function (e) { 2962 2963 if(typeof grecaptcha !== "undefined" && typeof grecaptcha.reset === "function"){ 2964 bdCaptchaReset(formElement.attr('id')); 2965 $("#contact_form_113-notification").html(`Recaptcha Error`); 2966 } else { 2967 $("#contact_form_113-notification").html(`A connection error occurred while saving. Please try to save again.`); 2968 } 2969 $("#contact_form_113-notification").addClass("alert-warning-subtle") 2970 .removeClass("alert-success-subtle") 2971 .removeClass("alert-warning-subtle") 2972 .fadeIn(); 2973 counterSubmit = 0; 2974 } 2975 });/// End Ajax 2976 } 2977 }//END else 2978 }).bind('keydown', function(event) { 2979 2980 if (event.ctrlKey || event.metaKey) { 2981 2982 switch (String.fromCharCode(event.which).toLowerCase()) { 2983 2984 case 's': 2985 var nativeForm = $(this)[0]; 2986 if (nativeForm && typeof nativeForm.reportValidity === 'function' && !nativeForm.reportValidity()) { 2987 event.preventDefault(); 2988 return false; 2989 } 2990 $(this).submit(); 2991 break; 2992 } 2993 } 2994 }); 2995 2996 /// This will turn any select2 that are required in the form builder to being required elements. 2997 $('#contact_form_113 select').each(function (i, obj) { 2998 setTimeout(function(){ 2999 if ($(obj).prop("required") && $(obj).attr("style") == "display: none;") { 3000 $(obj).css("z-index","-999"); 3001 $(obj).css("height","0"); 3002 $(obj).css("width","0"); 3003 $(obj).css("display","block"); 3004 $(obj).css("position","absolute"); 3005 } 3006 }, 3000); 3007 }); 3008 3009 // Clear required-error messages when user fills in a required field 3010 $('#contact_form_113').on('keyup change', '[required]', function() { 3011 var val = $(this).val(); 3012 if (val !== '' && val !== null && val.trim() !== '') { 3013 var $group = $(this).closest('.form-group'); 3014 // Remove only this handler's own required message 3015 $(this).siblings('.required-error').remove(); 3016 // Keep has-error if another FormValidation validator is still failing 3017 // (e.g. stringLength, regexp). has-error is shared, so removing it 3018 // wholesale would clobber other validators' red styling. 3019 if ($group.find('small[data-fv-validator][data-fv-result="INVALID"]').length === 0) { 3020 $group.removeClass('has-error'); 3021 } 3022 } 3023 }); 3024 3025 });//END $('# echo $_SERVER[form_element_id]; ').formValidation( 3026 </script>
3026 3027 3028
3028<script type="text/javascript"> 3029 /* CT dissolved its county governments in 1960, so Google returns its 8 counties as 3030 colloquial_area instead of administrative_area_level_2 â they must never reach a 3031 city field. Google translates the component name to the site language, so the 3032 language-stable place_id is checked first and the word list only backs it up. */ 3033 if (typeof window.bdIsColloquialCounty !== 'function') { 3034 window.bdIsColloquialCounty = function (componentName, resultPlaceId) { 3035 var countyPlaceIds = [ 3036 'ChIJWRM2Nakw5okRoTCxHvz_5xw', /* Middlesex County, CT */ 3037 'ChIJmeTbuDYH6IkR3xgeNvszpgg', /* Fairfield County, CT */ 3038 'ChIJiT24cvvP54kR2fSPHkp0Akc', /* New Haven County, CT */ 3039 'ChIJvYe7N7eQ54kRL6nZaXRwPkI', /* Litchfield County, CT */ 3040 'ChIJtxC3p6qs54kRIvK-2bctar0', /* Hartford County, CT */ 3041 'ChIJj-lvZQli5okRGCuGRd6xKt0', /* Tolland County, CT */ 3042 'ChIJRWKqeLdi5okRLXWDlSEGeTY', /* Windham County, CT */ 3043 'ChIJwTIQbvVv5okRU5_gSJczUTQ' /* New London County, CT */ 3044 ]; 3045 3046 if (typeof resultPlaceId === 'string' && resultPlaceId !== '' 3047 && countyPlaceIds.indexOf(resultPlaceId) !== -1) { 3048 return true; 3049 } 3050 3051 if (typeof componentName !== 'string' || componentName === '') { 3052 return false; 3053 } 3054 3055 var name = componentName.toLowerCase(); 3056 3057 /* Only unambiguous county words â generic ones (region, district) would strip 3058 legitimate colloquial areas, and their languages already match on place_id. 3059 Word-boundary matched so names like "Countyline, OK" are left alone. */ 3060 var wordTokens = ['county', 'condado', 'comté', 'contea', 3061 'comitatul', 'hrabstwo', 'megye', 'konderria']; 3062 var isAlnum = function (ch) { 3063 return (ch >= 'a' && ch <= 'z') || (ch >= '0' && ch <= '9'); 3064 }; 3065 3066 for (var t = 0; t < wordTokens.length; t++) { 3067 var token = wordTokens[t]; 3068 var from = 0; 3069 while (true) { 3070 var at = name.indexOf(token, from); 3071 if (at === -1) { 3072 break; 3073 } 3074 var before = (at > 0) ? name.charAt(at - 1) : ' '; 3075 var after = ((at + token.length) < name.length) ? name.charAt(at + token.length) : ' '; 3076 if (!isAlnum(before) && !isAlnum(after)) { 3077 return true; 3078 } 3079 from = at + 1; 3080 } 3081 } 3082 3083 /* Non-latin scripts have no alphanumeric word boundary. */ 3084 var scriptTokens = ['каÑнÑи', 'کاؤÙÙ¹Û', 'à¤à¤¾à¤à¤à¤à¥', 'ì¹´ì´í°']; 3085 for (var s = 0; s < scriptTokens.length; s++) { 3086 if (name.indexOf(scriptTokens[s]) !== -1) { 3087 return true; 3088 } 3089 } 3090 3091 return false; 3092 }; 3093 } 3094 3095 // Try to load coordinates from sessionStorage on page load 3096 var vlat = 0; 3097 var vlon = 0; 3098 try { 3099 var savedLat = sessionStorage.getItem('bd_geolocation_lat'); 3100 var savedLon = sessionStorage.getItem('bd_geolocation_lon'); 3101 if (savedLat && savedLon) { 3102 vlat = parseFloat(savedLat); 3103 vlon = parseFloat(savedLon); 3104 } 3105 } catch(e) {} 3106 var isSubmit = false; 3107 var isGettingLocation = false; // Flag to prevent multiple simultaneous geolocation requests 3108 3109 // Function to save coordinates to sessionStorage 3110 function saveCoordinatesToSession(lat, lon) { 3111 try { 3112 sessionStorage.setItem('bd_geolocation_lat', lat.toString()); 3113 sessionStorage.setItem('bd_geolocation_lon', lon.toString()); 3114 } catch(e) {} 3115 } 3116 3117 // Function to get coordinates from sessionStorage if current ones are 0 3118 function getCoordinatesFromSession() { 3119 if (vlat === 0 && vlon === 0) { 3120 try { 3121 var savedLat = sessionStorage.getItem('bd_geolocation_lat'); 3122 var savedLon = sessionStorage.getItem('bd_geolocation_lon'); 3123 if (savedLat && savedLon) { 3124 vlat = parseFloat(savedLat); 3125 vlon = parseFloat(savedLon); 3126 return true; 3127 } 3128 } catch(e) {} 3129 } 3130 return false; 3131 } 3132 var cityTypes = [ 3133 'colloquial_area', 3134 'locality', 3135 'sublocality', 3136 'sublocality_level_1', 3137 'sublocality_level_2', 3138 'sublocality_level_3', 3139 'sublocality_level_4', 3140 'sublocality_level_5', 3141 'neighborhood', 3142 'ward', 3143 'postal_town' 3144 ]; 3145 3146 var postalTypes = [ 3147 'postal_code', 3148 'postal_code_prefix', 3149 'postal_code_suffix', 3150 'street_number', 3151 'premise', 3152 'subpremise', 3153 'route', 3154 'intersection', 3155 'street_address', 3156 'floor', 3157 'room', 3158 'post_box', 3159 'delivery_address' 3160 ]; 3161 3162 var isSubmitting = false; 3163 window.cachedSelectedOption = [{ 'typed_location': '' }]; 3164 window.isSubmittingMainSearch = false; 3165 3166 document.addEventListener('DOMContentLoaded', () => { 3167 let isSubmitting = false; // Add flag at the top level 3168 3169 setTimeout(()=>{ 3170 let googleSuggestForm = document.querySelectorAll('.googleSuggest,.google-writen-location,input[name="lead_location"],.fill_location'); 3171 if (typeof googleSuggestForm != "undefined") { 3172 for (let i = 0; i < googleSuggestForm.length; i++) { 3173 let closestForm = googleSuggestForm[i].closest('form'); 3174 if(typeof closestForm != "undefined" && closestForm != null){ 3175 closestForm.addEventListener('focusin', googleMapOnFormClick, false); 3176 3177 }else{ 3178 googleSuggestForm[i].addEventListener('input', googleMapOnFormClick, false); 3179 } 3180 googleSuggestForm[i].addEventListener('click', googleMapOnFormClick, false); 3181 } 3182 } 3183 },200);
3184 3185 $('.website-search button[type=submit]').click(async function (e) { 3186 e.preventDefault(); // Prevent the default submit action 3187 var nativeForm = $(this).closest('form')[0]; 3188 if (nativeForm && typeof nativeForm.reportValidity === 'function' && !nativeForm.reportValidity()) { 3189 return false; 3190 } 3191 await googleMapOnFormClick(); 3192 $(this).closest('form').submit(); 3193 }); 3194 }); 3195 window['gmapClick'] = false; 3196 function googleMapOnFormClick() { 3197 if(window.gmapClick){ 3198 return; 3199 } 3200 window.gmapClick = true; 3201 3202 return new Promise((resolve, reject) => { 3203 window.isSubmittingMainSearch = false; 3204 let googleSuggestForm = document.querySelectorAll('.googleSuggest, .google-writen-location, input[name="lead_location"], .fill_location'); 3205 let mapUri = "https://maps.googleapis.com/maps/api/js?v=quarterly&libraries=places®ion=US&callback=initializeG&language=en&key=AIzaSyDnrJlcVGFORiXiJFtbG93-x21yvAg7uBQ"; 3206 3207 if (typeof google !== "undefined" && google.hasOwnProperty('maps')) { 3208 resolve('already loaded'); 3209 return; 3210 } 3211 3212 let loadMapScriptAsync = function (uri) { 3213 return new Promise((resolve, reject) => { 3214 let script = document.createElement('script'); 3215 script.type = 'text/javascript'; 3216 script.src = uri; 3217 script.async = true; 3218 script.onload = function () { 3219 resolve("ok"); 3220 }; 3221 script.onerror = function () { 3222 reject("Failed to load Google Maps script."); 3223 }; 3224 document.head.appendChild(script); 3225 }); 3226 }; 3227 3228 loadMapScriptAsync(mapUri) 3229 .then(() => { 3230 resolve(); 3231 }) 3232 .catch((error) => { 3233 console.error(error); 3234 reject(); 3235 }); 3236 3237 }); 3238 } 3239 3240 function initializeG() { 3241 var geocoder; 3242 //This piece of code will create an autosuggest for every input with the class "googleSuggest" 3243 var counter = 1; 3244 var inputsArray = []; 3245 window.cachedSelectedOption = [{ 'typed_location': '' }]; 3246 let mapExists = document.querySelectorAll('[id^="map"]').length > 0; 3247 const functionsToInvoke = { 3248 setJsMap: true, 3249 setJsMapOverview: mapExists, 3250 setJsMapSR: mapExists, 3251 setJsMapSidebar: mapExists 3252 }; 3253 if (window['maps_loaded'] !== true) { 3254 for (let func in functionsToInvoke) { 3255 if (typeof window[func] === 'function' && functionsToInvoke[func]) { 3256 window['maps_loaded'] = true; 3257 window[func](); 3258 } 3259 } 3260 } 3261 $(".googleSuggest").each(function () { 3262 //get the id from the input to be the unique identifier for each autocomplete 3263 var inputId = $(this).attr("id"); 3264 var inputElement = $(this); 3265 inputsArray[counter] = /** @type {HTMLInputElement} */( 3266 document.getElementById('' + inputId)); 3267 const mainCountry = 'US'; 3268 const inputOptions = { 3269 fields: ['address_components', 'adr_address','formatted_address', 'geometry', 'icon', 'name','place_id','plus_code','type'], 3270 types: ['geocode'] 3271 } 3272 const language = "en"; 3273 3274 if (language) { 3275 inputOptions.language = language; 3276 } 3277 if (mainCountry) { 3278 inputOptions.componentRestrictions = {country: mainCountry}; 3279 inputOptions.region = mainCountry; 3280 } 3281 3282 var autocomplete = new google.maps.places.Autocomplete(inputsArray[counter], inputOptions); 3283 google.maps.event.addListener(autocomplete, 'place_changed', function () { 3284 const place = autocomplete.getPlace(); 3285 3286 cachedSelectedOption = []; 3287 cachedSelectedOption.push(place); 3288 3289 cachedSelectedOption[0]['typed_location'] = inputElement.val(); 3290 /* if(cachedSelectedOption[0]['adr_address']){ 3291 let cleanLocation = cachedSelectedOption[0]['adr_address'].replace(/<[^>]*>/g, ''); 3292 cachedSelectedOption[0]['typed_location'] = cleanLocation; 3293 inputElement.val(cleanLocation); 3294 }*/ 3295 if (cachedSelectedOption[0]['address_components'] == undefined) { 3296 cachedSelectedOption = []; 3297 var emptyObj = { 3298 'typed_location': '' 3299 }; 3300 cachedSelectedOption.push(emptyObj); 3301 } 3302 }); 3303 //the code that prevents the submition when hit enter on a google location autocomplete item 3304 inputElement.keydown( function (e) { 3305 if (e.keyCode == 13) { 3306 var pacCounter = 0; 3307 //need to run a loop to check each pac container 3308 $('.pac-container').each(function () { 3309 3310 if ($(this).css("display") != "none") { 3311 pacCounter++; 3312 } 3313 }); 3314 if (pacCounter > 0) { 3315 e.preventDefault(); 3316 } 3317 } 3318 }); 3319 counter++; 3320 }); 3321 3322 //triggers every time a form with the id website-search is trigered 3323 $('.website-search').submit(function (e) { 3324 3325 var currentForm = $(this); 3326 var locationInput = $(this).find(".googleLocation"); 3327 var $submitButton = currentForm.find('input[type=submit], button[type=submit]'); 3328 3329 3330 if (locationInput.val() != "" && typeof locationInput.val() != 'undefined') { 3331 3332 // Set submitting flag 3333 window.isSubmittingMainSearch = true; 3334 $submitButton.prop('disabled', true); 3335 3336 e.preventDefault(); 3337 //this variable has the main country of the site 3338 var form = currentForm; 3339 var urlGET = form.serialize(); 3340 var formActionUrl = form.attr("action"); 3341 var locationValue = locationInput.val(); 3342 3343 3344 3345 const mainCountry = 'US'; 3346 const inputOptions = { 3347 address:locationValue 3348 } 3349 const language = "en"; 3350 3351 if (language) { 3352 inputOptions.language = language; 3353 } 3354 if (mainCountry) { 3355 inputOptions.componentRestrictions = {country: mainCountry}; 3356 inputOptions.region = mainCountry; 3357 } 3358 3359 if (typeof cachedSelectedOption == 'undefined') { 3360 var emptyForm = { 3361 'typed_location': '' 3362 }; 3363 cachedSelectedOption.push(emptyForm); 3364 } 3365 3366 if (locationValue != cachedSelectedOption[0]['typed_location']) { 3367 geocoder = new google.maps.Geocoder(); 3368 geocoder.geocode(inputOptions, function (results, status) { 3369 3370 //if the google response of the geocoding was successful it will use that info to build the url for the new search 3371 if (status == google.maps.GeocoderStatus.OK) { 3372 parseInfoToSearch(results, urlGET, formActionUrl); 3373 3374 } else { 3375 var urlPath = formActionUrl; 3376 var redirect = urlPath + "?" + urlGET; 3377 //will redirect the page using the new url that has been constructed 3378 window.location.href = redirect; 3379 } 3380 }); 3381 3382 } else { 3383 parseInfoToSearch(cachedSelectedOption, urlGET, formActionUrl); 3384 } 3385 } 3386 }); 3387 3388 3389 //check if a map has been loaded 3390 if ($('#map-canvas').length > 0) { 3391 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>"; 3392 $('body').append(cssHideLogo); 3393 } else { 3394 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>"; 3395 $('body').append(cssHideLogo); 3396 } 3397
3398 if (geocodeVisitorsSetting == 1 && geocodingMethod === "IP") { 3399 populateSearchFields(); 3400 } 3401 3402 if($('.googleSuggest').val() == ""){ 3403 populateSearchFields(); 3404 } 3405 3406 var geocodeVisitorsSetting = '1'; 3407 var geocodingMethod = 'HTML5'; 3408 3409 //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 3410 3411 var vlon = ''; 3412 var vlat = ''; 3413 } 3414 3415 function switchPlaceID(placeId,urlGET, formActionUrl) { 3416 let request = { 3417 placeId: placeId, 3418 fields: ['address_components', 'adr_address', 'formatted_address', 'geometry', 'icon', 'name', 'place_id', 'plus_code', 'type'], 3419 }; 3420 3421 let service = new google.maps.places.PlacesService(document.createElement('div')); 3422 service.getDetails(request, function(place, status) { 3423 if (status === google.maps.places.PlacesServiceStatus.OK) { 3424 let dataArray = []; 3425 dataArray.push(place); 3426 parseInfoToSearch(dataArray, urlGET, formActionUrl); 3427 } else { 3428 console.error('Place details request failed with status:', status); 3429 } 3430 }); 3431 } 3432 3433 function parseInfoToSearch(results, urlGET, formActionUrl) { 3434 var urlSearchParams = new URLSearchParams(urlGET); 3435 var parameters = {}; 3436 var addressComponentsArray = []; 3437 if (results.length > 1) { 3438 if(urlSearchParams.get("location_value")?.toLowerCase() === "nebraska" && results.length === 2){ 3439 let tempResult = results[0]; 3440 results[0] = results[1]; 3441 results[1] = tempResult; 3442 } 3443 for (let i = 0; i < results.length; i++) { 3444 if (results[i].types[0] === 'natural_feature' || 3445 results[i].types[0] === 'airport' || 3446 results[i].types[0] === 'point_of_interest' || 3447 results[i].types[0] === 'establishment' || 3448 results[i].types[0] === 'political' || 3449 results[i].types[0] === 'park') { 3450 results.splice(i, 1); 3451 } 3452 } 3453 } 3454 var adComLength = results[0].address_components.length; 3455 3456 if(results[0].place_id == 'ChIJmQrivHKsQjQR4MIK3c41aj8'){ 3457 switchPlaceID('ChIJi73bYWusQjQRgqQGXK260bw',urlGET, formActionUrl); 3458 return; 3459 } 3460 sessionStorage.setItem("google_result",JSON.stringify(results)); 3461 3462 3463 var foundPostalType = results[0].types.find(type => postalTypes.includes(type)); 3464 var foundCityType = results[0].types.find(type => cityTypes.includes(type)); 3465 3466 //loop that will build the array with the address components and will get the short name of country and administrative area level 1 3467 for (var i = 0; i < adComLength; i++) { 3468 3469 if (results[0].address_components[i]['types'][0] == "country") { 3470 parameters.country_sn = results[0].address_components[i]['short_name']; 3471 } 3472 if (results[0].address_components[i]['types'][0] == "administrative_area_level_1") { 3473 parameters.adm_lvl_1_sn = results[0].address_components[i]['short_name']; 3474 } 3475 if (results[0].address_components[i]['types'][0] == "administrative_area_level_1") { 3476 parameters.stateSearchLN = results[0].address_components[i]['long_name']; 3477 } 3478 if (results[0].address_components[i]['types'][0] == "administrative_area_level_2") { 3479 /* short_name is what the service-area writer stores in 3480 service_areas.county_sn, so the search must send the same 3481 form or county matching breaks wherever short != long. */ 3482 parameters.county_sn = results[0].address_components[i]['short_name']; 3483 } 3484 if ($.inArray(results[0].address_components[i]['types'][0], cityTypes) !== -1 && (foundCityType || foundPostalType ) ) { 3485 var addrType = results[0].address_components[i]['types'][0]; 3486 var addrLong = results[0].address_components[i]['long_name']; 3487 /* CT counties come back as colloquial_area â keep them out of parameters.city. */ 3488 if (addrType !== 'colloquial_area' 3489 || !window.bdIsColloquialCounty(addrLong, results[0].place_id)) { 3490 parameters.city = addrLong; 3491 } 3492 } 3493 if (results[0].address_components[i]['types'][0] == "postal_code" || results[0].address_components[i]['types'][0] == "postal_code_prefix") { 3494 parameters.postal_code = results[0].address_components[i]['long_name']; 3495 } 3496 } 3497 3498 3499 // Filter out 'political' from result types - use more specific type when available 3500 // Same pattern as BD-directory-maps-typePolitical (PR #5642) 3501 if (results[0].types && results[0].types.length > 1 && results[0].types[0] === 'political') { 3502 results[0].types.splice(0, 1); 3503 } 3504 3505 // Pick the most specific type from results, skip "political" (too generic) 3506 parameters.location_type = results[0].types[0]; 3507 for (var t = 0; t < results[0].types.length; t++) { 3508 if (results[0].types[t] != 'political') { 3509 parameters.location_type = results[0].types[t]; 3510 break; 3511 } 3512 } 3513 3514 // When searching by city/locality, omit postal_code â Google returns 3515 // a partial zip prefix that doesn't match all members in the city 3516 if (parameters.location_type == 'locality' && parameters.postal_code) { 3517 delete parameters.postal_code; 3518 } 3519 3520 if (parameters.adm_lvl_1_sn != '') { 3521 parameters.stateSearch = parameters.adm_lvl_1_sn; 3522 } 3523 if (parameters.country_sn == "GB") { 3524 delete parameters.adm_lvl_1_sn; 3525 } 3526 3527 //will check if the response had the bounds parameters 3528 //if it had it will add the south west and north east parameters to the new url 3529 if (results[0].geometry.hasOwnProperty('bounds') || results[0].geometry.hasOwnProperty('viewport')) { 3530 3531 if (results[0].geometry.hasOwnProperty('bounds')) { 3532 var boundsResponse = results[0].geometry.bounds; 3533 3534 } else { 3535 var boundsResponse = results[0].geometry.viewport; 3536 } 3537 parameters.swlat = boundsResponse.getSouthWest
3537().lat(); 3538 parameters.nelat = boundsResponse.getNorthEast().lat(); 3539 parameters.swlng = boundsResponse.getSouthWest().lng(); 3540 parameters.nelng = boundsResponse.getNorthEast().lng(); 3541 3542 //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 3543 } else { 3544 parameters.fsearch = "radius"; 3545 } 3546 var locationCenterResponse = results[0].geometry.location; 3547 parameters.lat = locationCenterResponse.lat(); 3548 parameters.lng = locationCenterResponse.lng(); 3549 parameters.faddress = results[0].formatted_address; 3550 parameters.place_id = results[0].place_id; 3551 var formatParameters = $.param(parameters); 3552 urlGET = urlGET + "&" + formatParameters; 3553 var urlPath = formActionUrl; 3554 var redirect = urlPath + "?" + urlGET; 3555 //will redirect the page using the new url that has been constructed 3556 window.location.href = redirect; 3557 } 3558 function populateSearchFields() { 3559 var prePopulateLocationSetting = '1'; 3560 var geolocationMethod = 'HTML5'; 3561 3562 // If geolocation is in progress and we don't have coordinates yet, wait a bit 3563 if (isGettingLocation && (vlat === 0 || vlon === 0)) { 3564 var waitStartTime = performance.now(); 3565 var waitInterval = setInterval(function() { 3566 if (!isGettingLocation || (vlat !== 0 && vlon !== 0)) { 3567 clearInterval(waitInterval); 3568 // Retry after a short delay to ensure coordinates are set 3569 setTimeout(function() { 3570 populateSearchFields(); 3571 }, 100); 3572 } else if ((performance.now() - waitStartTime) > 10000) { 3573 // Timeout after 10 seconds - try sessionStorage 3574 clearInterval(waitInterval); 3575 if (getCoordinatesFromSession()) { 3576 setTimeout(function() { 3577 populateSearchFields(); 3578 }, 100); 3579 } 3580 } 3581 }, 200); 3582 return; 3583 } 3584 3585 // If coordinates are 0, try to get from sessionStorage 3586 if (vlat === 0 || vlon === 0) { 3587 getCoordinatesFromSession(); 3588 } 3589 3590 // Validate coordinates first 3591 var hasValidCoordinates = (vlat !== '' && vlon !== '' && vlat != undefined && vlon != undefined && vlat != 0 && vlon != 0 && Math.abs(vlat) <= 90 && Math.abs(vlon) <= 180); 3592 3593 if (!hasValidCoordinates) { 3594 return; 3595 } 3596 3597 //if set to one will get the lat and lng to do reverse geocoding 3598 if (prePopulateLocationSetting == 1 && (geolocationMethod === "HTML5" || geolocationMethod === "IP")) { 3599 var visitorLatLng = new google.maps.LatLng(parseFloat(vlat), parseFloat(vlon)); 3600 var visitorGeocoder = new google.maps.Geocoder(); 3601 var formattedAddress = []; 3602 var preFormattedStructure = { 3603 "locality": "long_name", 3604 "administrative_area_level_2": "long_name", 3605 "administrative_area_level_1": "long_name", 3606 "country": "long_name" 3607 }; 3608 visitorGeocoder.geocode({'latLng': visitorLatLng}, function (results, status) { 3609 //if the google response of the geocoding was successful it will use that info to build the url for the new search 3610 if (status == google.maps.GeocoderStatus.OK) { 3611 window.cachedSelectedOption = results; 3612 $.each(preFormattedStructure, function (findex, fvalue) { 3613 $.each(results[0].address_components, function (rindex, rvalue) { 3614 if (rvalue.types[0] == findex) { 3615 formattedAddress.push(rvalue.long_name); 3616 } 3617 }); 3618 }); 3619 $('.googleSuggest').each(function () { 3620 if ($(this).val() == '') { 3621 if (formattedAddress.length > 0) { 3622 $(this).val(formattedAddress.join(', ')); 3623 clearContent($(this)); 3624 } 3625 } 3626 }); 3627 } else { 3628 $('.googleSuggest').each(function () { 3629 $(this).val(''); 3630 }); 3631 } 3632 }); 3633 } 3634 } 3635 function showError(error) { 3636 switch (error.code) { 3637 case error.PERMISSION_DENIED: 3638 case 1: // PERMISSION_DENIED 3639 $('.fill_location.clicked').popover({ 3640 content: `Your local browser settings have prevented location targeting. Please enable location permissions in your browser settings.`, 3641 container: 'body' 3642 }); 3643 $('.fill_location.clicked').popover('toggle'); 3644 setTimeout(function () { 3645 $('.fill_location.clicked').popover('hide'); 3646 $('.fill_location.clicked').removeClass('clicked'); 3647 }, 4000); 3648 break; 3649 case error.POSITION_UNAVAILABLE: 3650 case 2: // POSITION_UNAVAILABLE 3651 $('.fill_location.clicked').popover({ 3652 content: `Location information is unavailable. Please check your device location settings.`, 3653 container: 'body' 3654 }); 3655 $('.fill_location.clicked').popover('toggle'); 3656 setTimeout(function () { 3657 $('.fill_location.clicked').popover('hide'); 3658 $('.fill_location.clicked').removeClass('clicked'); 3659 }, 4000); 3660 break; 3661 case error.TIMEOUT: 3662 case 3: // TIMEOUT 3663 $('.fill_location.clicked').popover({ 3664 content: `Location request timed out. Please ensure location services are enabled and try again.`, 3665 container: 'body' 3666 }); 3667 $('.fill_location.clicked').popover('toggle'); 3668 setTimeout(function () { 3669 $('.fill_location.clicked').popover('hide'); 3670 $('.fill_location.clicked').removeClass('clicked'); 3671 }, 4000); 3672 break; 3673 case error.UNKNOWN_ERROR: 3674 default: 3675 $('.fill_location.clicked').popover({ 3676 content: `An error occurred while getting your location. Please try again.`, 3677 container: 'body' 3678 }); 3679 $('.fill_location.clicked').popover('toggle'); 3680 setTimeout(function () { 3681 $('.fill_location.clicked').popover('hide'); 3682 $('.fill_location.clicked').removeClass('clicked'); 3683 }, 4000); 3684 break; 3685 } 3686 } 3687 if (navigator.geolocation) { 3688 if ($(".googleSuggest")[0]) { 3689 $(document).on('click', '.fill_location', function getCXPosition() { 3690 // Prevent multiple simultaneous geolocation requests 3691 if (isGettingLocation) { 3692 return; 3693 } 3694 3695 var $button = $(this); 3696 $button.addClass('clicked'); 3697 var startPos; 3698 3699 // Set flag to prevent concurrent requests 3700 isGettingLocation = true; 3701 3702 // Function to actually get the position 3703 var attemptGetPosition = function() { 3704 // Try with shorter timeout first for faster response 3705 var geoOptions = {
3706 enableHighAccuracy: false, // Use false for faster response 3707 timeout: 8000, // 8 second timeout (reduced for faster failure) 3708 maximumAge: 300000 // Accept cached position up to 5 minutes old 3709 }; 3710 3711 navigator.geolocation.getCurrentPosition(function (position) { 3712 startPos = position; 3713 vlat = startPos.coords.latitude; 3714 vlon = startPos.coords.longitude; 3715 3716 // Validate coordinates before proceeding 3717 if (!vlat || !vlon || vlat === 0 || vlon === 0) { 3718 isGettingLocation = false; 3719 $button.removeClass('clicked'); 3720 return; 3721 } 3722 3723 // Save coordinates to sessionStorage 3724 saveCoordinatesToSession(vlat, vlon);
3725 3726 $.get("/api/data/html/get/data_widgets/widget_name", { 3727 "vlat": vlat, 3728 "vlon": vlon, 3729 "name": "Website - Save Coordinates Session" 3730 }); 3731 3732 populateSearchFields(); 3733 3734 // Clear flag 3735 isGettingLocation = false; 3736 $button.removeClass('clicked'); 3737 }, function(error) { 3738 // Clear flag on error 3739 isGettingLocation = false; 3740 $button.removeClass('clicked'); 3741 3742 // For timeout errors, try sessionStorage as fallback 3743 if (error.code === 3) { 3744 if (getCoordinatesFromSession()) { 3745 // Use cached coordinates 3746 $.get("/api/data/html/get/data_widgets/widget_name", { 3747 "vlat": vlat, 3748 "vlon": vlon, 3749 "name": "Website - Save Coordinates Session" 3750 }); 3751 3752 populateSearchFields(); 3753 3754 // Clear flag 3755 isGettingLocation = false; 3756 $button.removeClass('clicked'); 3757 } else { 3758 $button.popover({ 3759 content: `Location request timed out. Please ensure location services are enabled and grant permission when prompted.`, 3760 container: 'body' 3761 }); 3762 $button.popover('show'); 3763 setTimeout(function() { 3764 $button.popover('hide'); 3765 }, 5000); 3766 } 3767 } else { 3768 showError(error); 3769 } 3770 }, geoOptions); 3771 }; 3772 3773 // Check if geolocation permission is already denied (but don't block if it's prompt) 3774 if (navigator.permissions && navigator.permissions.query) { 3775 navigator.permissions.query({name: 'geolocation'}).then(function(result) { 3776 if (result.state === 'denied') { 3777 isGettingLocation = false; 3778 $button.removeClass('clicked'); 3779 showError({code: 1, message: 'Permission denied'}); 3780 return; 3781 } else { 3782 // Permission is granted or prompt - proceed with geolocation 3783 attemptGetPosition(); 3784 } 3785 }).catch(function(err) { 3786 // If permission API not supported, proceed anyway 3787 attemptGetPosition(); 3788 }); 3789 } else { 3790 // Permission API not available, proceed with geolocation 3791 attemptGetPosition(); 3792 } 3793 }) 3794 } 3795 } else { 3796 console.log('Geolocation is not supported for this Browser/OS version yet.'); 3797 } 3798 function getUrlParameter(sParam) { 3799 var sPageURL = window.location.search.substring(1); 3800 var sURLVariables = sPageURL.split('&'); 3801 3802 for (var i = 0; i < sURLVariables.length; i++) { 3803 var sParameterName = sURLVariables[i].split('='); 3804 3805 if (sParameterName[0] == sParam) { 3806 return decodeURIComponent(sParameterName[1]); 3807 } 3808 } 3809 } 3810 </script>
3810 3811
3811<script> 3812 // switchClass() is jQuery UI (Effects), which is no longer loaded on every page. 3813 // removeClass().addClass() is the same class swap, applied immediately instead of 3814 // after animateClass()'s queued 400ms default. 3815 $(document).ready(function(){ 3816 $('.navbar-header .navbar-toggle.main_menu').click(function(){ 3817 $('.mobile-main-menu').toggleClass('opened'); 3818 }); 3819 $('.mobile-main-menu .sidebar-nav').find('li').each(function(){ 3820 $(this).addClass('hasChildren'); 3821 if ($(this).children('ul').length > 0){ 3822 $(this).prepend('<i class="fa fa-plus" aria-hidden="true"></i>'); 3823 $(this).find('a').after('<div class="clearfix"></div>'); 3824 $(this).find('span').after('<div class="clearfix"></div>'); 3825 } 3826 $(this).append('<div class="clearfix"></div>'); 3827 }); 3828 3829 $('.mobile-main-menu .sidebar-nav li i').click(function(){ 3830 if ($(this).parent().children('ul').length > 0){ 3831 $(this).parent().toggleClass('sub_open'); 3832 } 3833 if ($(this).hasClass('fa-plus')){ 3834 $(this).removeClass('fa-plus').addClass('fa-minus'); 3835 } else { 3836 $(this).removeClass('fa-minus').addClass('fa-plus'); 3837 } 3838 }); 3839 }) 3840 3841 if ($(window).width() > 740 && $(window).width() < 1100) { 3842 3843 $(document).ready(function(){ 3844 $('.tablet-menu .tablet-menu-ul').find('li').each(function(){ 3845 3846 if ($(this).children('ul').length > 0){ 3847 $(this).prepend('<i class="fa fa-plus tablet-fa hidden-sm hidden-md hidden-lg" aria-hidden="true"></i>'); 3848 $(this).find('a').after('<div class="clearfix"></div>'); 3849 var this_link = $(this).children('a').text().replace(/[^\x00-\x7F]/g, "");; 3850 $(this).children('a').html(this_link); 3851 $(this).find('span').after('<div class="clearfix"></div>'); 3852 } 3853 $(this).append('<div class="clearfix"></div>'); 3854 }); 3855 3856 $('.tablet-menu .tablet-menu-ul li i').click(function(){ 3857 3858 if ($(this).parent().children('ul').length > 0){ 3859 $(this).parent().toggleClass('sub_open'); 3860 3861 if ($(this).siblings( "ul" ).hasClass('tablet-block')){ 3862 $(this).siblings( "ul" ).removeClass('tablet-block').addClass('tablet-none'); 3863 } else { 3864 $(this).siblings( "ul" ).addClass( "tablet-block" ); 3865 3866 if ($(this).siblings( "ul" ).hasClass('tablet-none')){ 3867 $(this).siblings( "ul" ).removeClass('tablet-none') 3868 } 3869 3870 if ($(this).parent().siblings().children('ul').hasClass('tablet-block')) { 3871 $(this).parent().siblings().children('ul').removeClass('tablet-block').addClass('tablet-none'); 3872 $(this).parent().siblings().children('i').removeClass('fa-minus').addClass('fa-plus'); 3873 } 3874 3875 if ($(this).parent().siblings().children('ul').children().children('ul').hasClass('tablet-block')) { 3876 $(this).parent().siblings().children('ul').children().children('ul').removeClass('tablet-block').addClass('tablet-none'); 3877 $(this).parent().siblings().children('ul').children().children('i').removeClass('fa-minus').addClass('fa-plus'); 3878 } 3879 3880 if ($(this).siblings('ul').children('ul').children().children('ul').hasClass('tablet-block')) { 3881 $(this).siblings('ul').children('ul').children().children('ul').removeClass('tablet-block').addClass('tablet-none'); 3882 $(this).siblings('ul').children('ul').children().children('i').removeClass('fa-minus').addClass('fa-plus'); 3883 } 3884 3885 } 3886 3887 } 3888 3889 if ($(this).hasClass('fa-plus')){ 3890 $(this).removeClass('fa-plus').addClass('fa-minus'); 3891 } else { 3892 $(this).removeClass('fa-minus').addClass('fa-plus'); 3893 } 3894 }); 3895 }) 3896 } 3897 // Append unique ID attribute for mobile main menu links 3898 $('.mobile-main-menu a,.mobile-main-menu span').attr("id", function() { return $(this).attr("id") + "-mobile" }); 3899</script>
3899 3900
3901<script> 3902/* Keeps the announcement bar flush with the navbar: this widget's CSS emits static 50px 3903 offsets that are blind to the hide-menu settings, so a hidden or fixed compact-logo 3904 navbar leaves a gap or an overlap. Measure the real navbar state and own the offset. */ 3905(function () { 3906 function alignAnnouncementToNavbar() { 3907 var ann = document.querySelector('.announcement-bar'); 3908 if (!ann) { return; } 3909 /* above the widget's own offset breakpoints: restore stylesheet values */ 3910 if (window.innerWidth > 1100) { 3911 ann.style.removeProperty('margin-top'); 3912 ann.style.removeProperty('top'); 3913 return; 3914 } 3915 var navbar = document.querySelector('.header nav.navbar.navbar-default'); 3916 var navStyle = navbar ? window.getComputedStyle(navbar) : null; 3917 /* navbar hidden: the 50px offsets have nothing to clear, sit flush */ 3918 if (!navbar || navStyle.display === 'none') { 3919 ann.style.setProperty('margin-top', '0px', 'important'); 3920 ann.style.setProperty('top', '0px', 'important'); 3921 return; 3922 } 3923 if (window.innerWidth >= 768) { return; } 3924 /* only act while the navbar is pinned and showing the compact logo */ 3925 if (navStyle.position !== 'fixed') { return; } 3926 var logo = navbar.querySelector('.mobile_website_logo'); 3927 if (!logo || window.getComputedStyle(logo).display === 'none') { return; } 3928 var navRect = navbar.getBoundingClientRect(); 3929 var annRect = ann.getBoundingClientRect(); 3930 var delta = Math.round(navRect.bottom - annRect.top); /* >0 overlap, <0 gap */ 3931 if (delta === 0) { return; } 3932 var currentMt = parseFloat(window.getComputedStyle(ann).marginTop) || 0; 3933 var nextMt = currentMt + delta; 3934 /* a transient element above the bar during load can inflate the measure; a 3935 negative margin would pull the bar behind the navbar, so clamp at 0 */ 3936 if (nextMt < 0) { nextMt = 0; } 3937 /* !important to beat the widget's "margin-top: 50px !important" rule */ 3938 ann.style.setProperty('margin-top', nextMt + 'px', 'important'); 3939 } 3940 3941 function run() { 3942 alignAnnouncementToNavbar(); 3943 /* re-run after late layout shifts (fonts, async embeds) */ 3944 window.setTimeout(alignAnnouncementToNavbar, 250); 3945 window.setTimeout(alignAnnouncementToNavbar, 1200); 3946 } 3947 3948 if (document.readyState === 'loading') { 3949 document.addEventListener('DOMContentLoaded', run); 3950 } else { 3951 run(); 3952 } 3953 window.addEventListener('load', alignAnnouncementToNavbar); 3954 var resizeTimer; 3955 window.addEventListener('resize', function () { 3956 window.clearTimeout(resizeTimer); 3957 resizeTimer = window.setTimeout(alignAnnouncementToNavbar, 150); 3958 }); 3959})(); 3960</script>
vendor: 2 bytes, line 3960
3960
3961<script type="text/javascript"> 3962(function () { 3963 try { 3964 var email = new URLSearchParams(window.location.search).get('email'); 3965 if (!email) { return; } 3966 email = email.trim(); 3967 if (email.indexOf('@') === -1) { return; } 3968 /* Sets the input value property (never HTML) -> XSS-safe regardless of the query value. */ 3969 var fill = function () { 3970 var fields = document.querySelectorAll('input[name="email_r"]'); 3971 for (var i = 0; i < fields.length; i++) { 3972 if (!fields[i].value) { fields[i].value = email; } 3973 } 3974 }; 3975 if (document.readyState === 'loading') { 3976 document.addEventListener('DOMContentLoaded', fill); 3977 } else { 3978 fill(); 3979 } 3980 } catch (e) {} 3981})(); 3982</script>
3982 3983
3983<script type="text/javascript"> 3984 3985 var counterSubmit = 0; 3986 $(document).ready(function() { 3987 /* grecaptcha.reset() with no argument always resets widget 0. On a page with two 3988 captcha holders that clears the wrong checkbox, so the widget the visitor solved 3989 keeps a token Google has already spent and every retry fails the security check. 3990 captchaHolders is published by widget 1995 keyed by "<formId>-google-recaptcha"; 3991 an undefined id means no per-form id is known and the arg-less call is used, 3992 exactly as before. */ 3993 function bdCaptchaWidgetId(formId) { 3994 if (typeof captchaHolders === "undefined" || !formId) { 3995 return undefined; 3996 } 3997 /* recaptcha.php renames each holder to "<id>-<counter>" before render (recaptcha.php ~L84), 3998 so captchaHolders is keyed by the RENAMED id - not "<formId>-google-recaptcha". Resolve from 3999 the holder element itself so the counter never has to be reconstructed. */ 4000 var form = document.getElementById(formId); 4001 var holder = form && form.querySelector(".g-recaptcha"); 4002 return holder ? captchaHolders[holder.id] : undefined; 4003 } 4004 4005 function bdCaptchaReset(formId) { 4006 if (typeof grecaptcha === "undefined" || typeof grecaptcha.reset !== "function") { 4007 return; 4008 } 4009 var widgetId = bdCaptchaWidgetId(formId); 4010 if (widgetId === undefined) { 4011 grecaptcha.reset(); 4012 } else { 4013 grecaptcha.reset(widgetId); 4014 } 4015 } 4016 4017 // Ghost-field strip (card d4tk1CMp): the server-side validator config can carry 4018 // rules for fields that are NOT rendered in this form (conditionally-rendered or 4019 // duplicated form configs). Those phantom rules make formValidation mis-evaluate 4020 // isValid(), so an empty required field bypasses validation and submits natively. 4021 // Remove any rule whose field has no matching element before initializing. 4022 // NOTE: this is the ONLY layer re-applied from reverted PR #5902. It strictly 4023 // REMOVES rules (never adds validators, never overrides native submit, never 4024 // intercepts on capture phase, never re-validates on click) â so it cannot 4025 // reproduce the "Save button slides down / nav broken / no success message" 4026 // regression that caused #5902 to be rolled back on site 19413. 4027 var validatorConfig = {"framework":"bootstrap","addOns":{"reCaptcha2":{"element":"captchaContainer","language":"en","theme":"light","siteKey":"6LdtsoYUAAAAAIH51FbNtwVfAzLFfwDzr_Y6Jneq","timeout":"120","message":"The captcha is not valid"}},"fields":{"email":{"validators":{"notEmpty":{"message":"Required Field"},"emailAddress":{"message":"Please enter a valid email address"}}},"pass":{"validators":{"notEmpty":{"message":"Required Field"}}}}}; 4028 var formElement = $(`form[name='member_login_190-1']`); 4029 if(validatorConfig && validatorConfig.fields) { 4030 Object.keys(validatorConfig.fields).forEach(function(fieldName) { 4031 if(formElement.find('[name="' + fieldName + '"]').length === 0) { 4032 delete validatorConfig.fields[fieldName]; 4033 } 4034 }); 4035 } 4036 4037 // Scroll to the first invalid field when submit fails validation, 4038 // so the user can immediately see why the form will not submit 4039 formElement.on('err.form.fv', function(e) { 4040 var $firstError = $(e.target).find('.form-group.has-error').first(); 4041 if ($firstError.length) { 4042 $('html, body').animate({ scrollTop: $firstError.offset().top - 100 }, 700); 4043 } 4044 }); 4045
4046 formElement.formValidation(validatorConfig).on('success.form.fv', function(e,fvdata) { 4047 4048 if('member_login' == 'unsubscribe_email'){ 4049 return true; 4050 } 4051 // Prevent form submission 4052 e.preventDefault(); 4053 $form = $(e.target), 4054 fv = $form.data('formValidation'); 4055 4056 // Check HTML5 required fields that FormValidation may not know about 4057 var requiredEmpty = false; 4058 $form.find('[required]').each(function() { 4059 var val = $(this).val(); 4060 if (val === '' || val === null || (typeof val === 'string' && val.trim() === '')) { 4061 requiredEmpty = true; 4062 $(this).closest('.form-group').addClass('has-error'); 4063 if ($(this).siblings('.required-error').length === 0) { 4064 $(this).after('<small class="required-error help-block" style="color:#a94442;">Required Field</small>'); 4065 } 4066 } else { 4067 var $reqGroup = $(this).closest('.form-group'); 4068 $(this).siblings('.required-error').remove(); 4069 // Keep has-error if another validator is still failing for this field 4070 if ($reqGroup.find('small[data-fv-validator][data-fv-result="INVALID"]').length === 0) { 4071 $reqGroup.removeClass('has-error'); 4072 } 4073 } 4074 }); 4075 if (requiredEmpty) { 4076 fv.disableSubmitButtons(false); 4077 counterSubmit = 0; 4078 // Scroll to the first field with an error (HTML5-required scan does 4079 // not trigger err.form.fv, so handle the scroll here too) 4080 var $firstReqError = $form.find('.form-group.has-error').first(); 4081 if ($firstReqError.length) { 4082 $('html, body').animate({ scrollTop: $firstReqError.offset().top - 100 }, 700); 4083 } 4084 return false; 4085 } 4086 4087 var values = $(this).serialize(); 4088 4089 4090 var locationFieldCorrect = true; 4091 4092 if($("#member_login_190-1 .location_required").length > 0){ 4093 $("#member_login_190-1 .location_required").each(function (index) { 4094 if($(this).data('state') == 1){ 4095 if($('#member_login_190-1 input[name="lead_location"]').val() == "" || $('#member_login_190-1 input[name="lat"]').val() == "" || $('#member_login_190-1 input[name="lng"]').val() == "") { 4096 locationFieldCorrect = false; 4097 } 4098 } 4099 }); 4100 } 4101 4102 if(locationFieldCorrect === false){ 4103 //check that there is a latitude or longitude 4104 swal(`Whoops!`, `The location information is required to submit this form`, "error"); 4105 return false; 4106 } 4107 4108 4109 if (!$(this).attr("action")) { 4110 var action = ''; 4111 4112 } else { 4113 var action = $(this).attr("action"); 4114 } 4115 if (!$(this).attr("method")) { 4116 var method = 'post'; 4117 4118 } else { 4119 var method = $(this).attr("method"); 4120 } 4121 if (!$(this).attr("form_action_type")) { 4122 var form_action_type = 'notification'; 4123 4124 } else { 4125 var form_action_type = $(this).attr("form_action_type"); 4126 } 4127 if (!$(this).attr("form_action_div")) { 4128 /* Empty "ID to Replace" default: prefer #main-content, fall back to legacy #first_container if absent */ 4129 var form_action_div = $('#main-content').length ? '#main-content' : '#first_container'; 4130 4131 } else { 4132 var form_action_div = $(this).attr("form_action_div"); 4133 } 4134 if (!$(this).attr("return_data_type")) { 4135 var return_data_type = 'json'; 4136 4137 } else { 4138 var return_data_type = $(this).attr("return_data_type"); 4139 } 4140 var submitInFlight = counterSubmit != 0 || (Date.now() - ($form.data('bdLastSubmitAt') || 0) < 5000); 4141 if (!submitInFlight) { 4142 if ($("#member_login_190-1-notification").html() != "") { 4143 $("#member_login_190-1-notification").remove(); 4144 } 4145 if ($(this).find('input[type="submit"]').length > 0) { 4146 $(this).find('input[type="submit"]').before('<div id="member_login_190-1-notification" class="alert"></div>'); 4147 4148 } else { 4149 $(this).prepend('<div id="member_login_190-1-notification" class="alert"></div>'); 4150 } 4151 } 4152 var notification = $("#member_login_190-1-notification"); 4153 4154 if ((form_action_type == "" || form_action_type == "default") && action.indexOf("account") >= 0) { 4155 notification.html(`Processing Request...`).addClass("alert-warning-subtle"); 4156 setTimeout(function(){ 4157 fv.defaultSubmit(); 4158 }, 100); 4159 } else { 4160 notification.html(`Processing Request...`).addClass("alert-warning-subtle"); 4161 if(!submitInFlight) { 4162 counterSubmit++; 4163 $form.data('bdLastSubmitAt', Date.now()); 4164 4165 var fields = $(this).serializeArray(); 4166 var formField = []; 4167 var processData = true; 4168 var contentType = "application/x-www-form-urlencoded; charset=UTF-8"; 4169 4170 4171 4172 if($("#member_login_190-1 input[type=file]").length > 0){ 4173 4174 var formObject = new FormData(); 4175 processData = false; 4176 contentType = false; 4177 4178 $(fields).each(function(index,field){ 4179 formField.push(field.name+"="+field.value); 4180 }); 4181 4182 values = formField.join("&"); 4183 4184 $(formField).each(function(index,fieldValue){ 4185 var fieldInfo = fieldValue.split('='); 4186 formObject.append(fieldInfo[0],fieldInfo[1]); 4187 }); 4188 4189 $("#member_login_190-1 input[type=file]").each(function(index,node){ 4190 var file = this.files[0]; 4191 if(typeof file != "undefined"){ 4192 formObject.append("file_addon["+$(node).attr('name')+"]", file, file.name); 4193 } 4194 }); 4195 }else{ 4196 4197 $(fields).each(function(index,field){ 4198 formField.push(field.name+"="+encodeURIComponent(field.value)); 4199 }); 4200 4201 var formObject = formField.join("&"); 4202 } 4203 4204 $.ajax({
4205 url: action, 4206 type: method, 4207 data: formObject, 4208 dataType: return_data_type, 4209 processData: processData, 4210 contentType: contentType, 4211 success: function (data) { 4212 // Re-query live node: success.form.fv fires twice, orphaning the closure ref captured above. 4213 notification = $("#member_login_190-1-notification"); 4214 if (return_data_type == "html") { 4215 var result = 'success'; 4216 4217 if (!data != "") { 4218 var result_widget = data['result_widget']; 4219 } 4220 4221 } else { 4222 4223 4224 if (!data['result']) { 4225 var result = 'error'; 4226 } else { 4227 var result = data['result']; 4228 } 4229 if (!data['result_widget']) { 4230 var result_widget = ''; 4231 4232 } else { 4233 var result_widget = data['result_widget']; 4234 } 4235 } 4236 if (result == "success") { 4237 4238 if (!data['message']) { 4239 var message = `Your information has submitted successfully!`; 4240 4241 } else { 4242 var message = data['message']; 4243 } 4244 if (!data['redirect_url']) { 4245 var redirect_url = ''; 4246 4247 } else { 4248 var redirect_url = data['redirect_url']; 4249 } 4250 4251 4252 4253 if (form_action_type == "notification") { 4254 if (redirect_url && (action.indexOf('Member%20Login%20Page') >= 0 || action.indexOf('Member Login Page') >= 0)) { 4255 if (redirect_url.substring(0, 1) != "/" && redirect_url.substring(0, 1) != "h") { 4256 redirect_url = "/" + redirect_url; 4257 } 4258 if (notification.parents('.modal').length) { 4259 $('.modal-backdrop').hide(); 4260 $('.modal').modal('hide'); 4261 } 4262 window.location.href = redirect_url; 4263 fv.resetForm(true); 4264 } else { 4265 notification.html(message + '<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>') 4266 .addClass('alert-dismissible') 4267 .addClass("alert-success-subtle") 4268 .removeClass("alert-danger-subtle") 4269 .removeClass("alert-warning-subtle") 4270 4271 4272 4273 if(notification.parents('.modal').length && 'member_login_190-1' == 'whmcs_billing_address'){ 4274 setTimeout(function(){ 4275 notification.parents('.modal').modal('hide'); 4276 }, 1000); 4277 } 4278 } 4279 4280 } else if (form_action_type == "widget") { 4281 4282 if (result_widget != '') { 4283 4284 setTimeout(function(){ 4285 if(form_action_div != '.newsletter_modal_form_container'){ 4286 $("html, body").animate({ scrollTop: 0 }, 600); 4287 } 4288 $(form_action_div).html(decodeHtml(result_widget)).text(); 4289 4290 }, 1000); 4291 } 4292 4293 } else if (form_action_type == "redirect") { 4294 4295 if (redirect_url == "") { 4296 redirect_url = decodeURIComponent(""); 4297 } 4298 4299 if (redirect_url.substring(0, 1) != "/" && redirect_url.substring(0, 1) != "h") { 4300 redirect_url = "/" + redirect_url; 4301 } 4302 current_location = "/about/contact"; 4303 refresh_pages_string = "/login"; 4304 refresh_pages_string = refresh_pages_string.replace(/ /g,''); 4305 refresh_pages_array = refresh_pages_string.split(','); 4306 notification.html(message) 4307 .addClass("alert-success-subtle") 4308 .removeClass("alert-danger-subtle") 4309 .removeClass("alert-warning-subtle") 4310 .delay(2000).slideUp(); 4311 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" )){ 4312 window.location.href = window.location.href+'?logged'; 4313 } else { 4314 window.location.href = redirect_url; 4315 } 4316 4317 fv.resetForm(true); 4318 } 4319 if(form_action_div != '.newsletter_modal_form_container' && 'member_login_190-1' != 'whmcs_billing_address'){ 4320 $('.modal-backdrop').hide(); 4321 } 4322 } else { 4323 bdCaptchaReset(formElement.attr('id')); 4324 if (!data['message']) { 4325 var message = `You entered invali
4325d data. Please try to save again.`; 4326 4327 } else { 4328 var message = data['message']; 4329 } 4330 $("#member_login_190-1-notification").html(message) 4331 .addClass("alert-danger-subtle") 4332 .removeClass("alert-success-subtle") 4333 .removeClass("alert-warning-subtle") 4334 .fadeIn(); 4335 fv.disableSubmitButtons(false); 4336 } 4337 counterSubmit = 0; 4338 }, 4339 error: function (e) { 4340 4341 if(typeof grecaptcha !== "undefined" && typeof grecaptcha.reset === "function"){ 4342 bdCaptchaReset(formElement.attr('id')); 4343 $("#member_login_190-1-notification").html(`Recaptcha Error`); 4344 } else { 4345 $("#member_login_190-1-notification").html(`A connection error occurred while saving. Please try to save again.`); 4346 } 4347 $("#member_login_190-1-notification").addClass("alert-warning-subtle") 4348 .removeClass("alert-success-subtle") 4349 .removeClass("alert-warning-subtle") 4350 .fadeIn(); 4351 counterSubmit = 0; 4352 } 4353 });/// End Ajax 4354 } 4355 }//END else 4356 }).bind('keydown', function(event) { 4357 4358 if (event.ctrlKey || event.metaKey) { 4359 4360 switch (String.fromCharCode(event.which).toLowerCase()) { 4361 4362 case 's': 4363 var nativeForm = $(this)[0]; 4364 if (nativeForm && typeof nativeForm.reportValidity === 'function' && !nativeForm.reportValidity()) { 4365 event.preventDefault(); 4366 return false; 4367 } 4368 $(this).submit(); 4369 break; 4370 } 4371 } 4372 }); 4373 4374 /// This will turn any select2 that are required in the form builder to being required elements. 4375 $('#member_login_190-1 select').each(function (i, obj) { 4376 setTimeout(function(){ 4377 if ($(obj).prop("required") && $(obj).attr("style") == "display: none;") { 4378 $(obj).css("z-index","-999"); 4379 $(obj).css("height","0"); 4380 $(obj).css("width","0"); 4381 $(obj).css("display","block"); 4382 $(obj).css("position","absolute"); 4383 } 4384 }, 3000); 4385 }); 4386 4387 // Clear required-error messages when user fills in a required field 4388 $('#member_login_190-1').on('keyup change', '[required]', function() { 4389 var val = $(this).val(); 4390 if (val !== '' && val !== null && val.trim() !== '') { 4391 var $group = $(this).closest('.form-group'); 4392 // Remove only this handler's own required message 4393 $(this).siblings('.required-error').remove(); 4394 // Keep has-error if another FormValidation validator is still failing 4395 // (e.g. stringLength, regexp). has-error is shared, so removing it 4396 // wholesale would clobber other validators' red styling. 4397 if ($group.find('small[data-fv-validator][data-fv-result="INVALID"]').length === 0) { 4398 $group.removeClass('has-error'); 4399 } 4400 } 4401 }); 4402 4403 });//END $('# echo $_SERVER[form_element_id]; ').formValidation( 4404 </script>
4404 4405
4405<script> 4406 window.addEventListener('load', (event) => { 4407 setTimeout(() => { 4408 }, 501); 4409 }); 4410 </script>
vendor: 2 bytes, line 4410
4410
4411<script> 4412 function decision(message, url) { 4413 if (confirm(message)) { 4414 setTimeout(function () { 4415 window.location = url; 4416 }, 0); 4417 } 4418 } 4419</script>
vendor: 2 bytes, line 4419
4419
4420<script> 4421 // Function to add alt, width, and height attributes to <img> elements without them 4422 function addAttributesToImages() { 4423 var images = document.querySelectorAll('img:not([alt]), img:not([width]), img:not([height])'); 4424 Array.prototype.forEach.call(images, function(img) { 4425 // Skip if we've already processed this image 4426 if (img.dataset.processed === 'true') { 4427 return; 4428 } 4429 4430 // Mark this image as being processed 4431 img.dataset.processed = 'true'; 4432 4433 // Add alt attribute if missing 4434 if (!img.hasAttribute('alt')) { 4435 var src = img.getAttribute('src') || 'image'; // Default src to 'image' if missing 4436 var altText = src.split('/').pop().split('?')[0].replace(/\.\w+$/, ''); 4437 4438 try { 4439 altText = decodeURIComponent(altText) 4440 .replace(/[_\-+,.:;]+/g, ' ') 4441 .replace(/\s+/g, ' ') 4442 .trim(); 4443 } catch (e) { 4444 altText = 'image'; // Fallback to 'image' if decoding fails 4445 } 4446 4447 // Ensure altText is not empty, otherwise use 'image' 4448 altText = altText || 'image'; 4449 4450 img.setAttribute('alt', altText); 4451 } 4452 4453 // Add width and height attributes if missing 4454 if (!img.hasAttribute('width') || !img.hasAttribute('height')) { 4455 // Handle SVG differently 4456 if (img.src && img.src.endsWith('.svg')) { 4457 // For SVG, use the viewBox to set width and height, if available 4458 fetch(img.src) 4459 .then(response => { 4460 if (!response.ok) { 4461 throw new Error('Failed to fetch SVG: ' + response.status); 4462 } 4463 return response.text(); 4464 }) 4465 .then(svgText => { 4466 var parser = new DOMParser(); 4467 var svgDoc = parser.parseFromString(svgText, "image/svg+xml"); 4468 var svgElement = svgDoc.querySelector('svg'); 4469 4470 if (svgElement) { 4471 var viewBox = svgElement.getAttribute('viewBox'); 4472 if (viewBox) { 4473 var viewBoxValues = viewBox.split(' '); 4474 var width = viewBoxValues[2]; 4475 var height = viewBoxValues[3]; 4476 4477 if (!img.hasAttribute('width')) { 4478 img.setAttribute('width', width); 4479 } 4480 if (!img.hasAttribute('height')) { 4481 img.setAttribute('height', height); 4482 } 4483 } 4484 } 4485 }) 4486 .catch(error => { 4487 // Fallback to default dimensions for SVG 4488 if (!img.hasAttribute('width')) { 4489 img.setAttribute('width', '100'); 4490 } 4491 if (!img.hasAttribute('height')) { 4492 img.setAttribute('height', '100'); 4493 } 4494 }); 4495 } else { 4496 // For non-SVG images, use natural dimensions 4497 var tempImg = new Image(); 4498 tempImg.src = img.src; 4499 4500 tempImg.onload = function() { 4501 if (!img.hasAttribute('width')) { 4502 img.setAttribute('width', tempImg.naturalWidth); 4503 } 4504 if (!img.hasAttribute('height')) { 4505 img.setAttribute('height', tempImg.naturalHeight); 4506 } 4507 }; 4508 4509 tempImg.onerror = function() { 4510 // Fallback to default dimensions 4511 if (!img.hasAttribute('width')) { 4512 img.setAttribute('width', '100'); 4513 } 4514 if (!img.hasAttribute('height')) { 4515 img.setAttribute('height', '100'); 4516 } 4517 }; 4518 } 4519 } 4520 }); 4521 } 4522 4523 document.addEventListener('DOMContentLoaded', function() { 4524 // Run the function initially to catch images already in the DOM 4525 addAttributesToImages(); 4526 4527 // Create a MutationObserver to monitor the DOM for added/changed images 4528 var observer = new MutationObserver(function(mutations) { 4529 mutations.forEach(function(mutation) { 4530 if (mutation.addedNodes.length > 0 || mutation.type === 'attributes') { 4531 // Only process if we have new images or src attribute changes 4532 var hasNewImages = false; 4533 4534 if (mutation.addedNodes.length > 0) { 4535 mutation.addedNodes.forEach(function(node) { 4536 if (node.nodeType === 1) { // Element node 4537 if (node.tagName === 'IMG' || node.querySelectorAll) { 4538 hasNewImages = true; 4539 } 4540 } 4541 }); 4542 } 4543 4544 if (mutation.type === 'attributes' && mutation.attributeName === 'src') { 4545 hasNewImages = true; 4546 } 4547 4548 if (hasNewImages) { 4549 addAttributesToImages(); 4550 } 4551 } 4552 }); 4553 }); 4554 4555 // Start observing the document body for changes 4556 observer.observe(document.body, { 4557 childList: true, // Watch for added or removed nodes 4558 subtree: true, // Watch the entire subtree 4559 attributes: true, // Watch for attribute changes 4560 attributeFilter: ['src'] // Specifically watch for changes in the 'src' attribute 4561 }); 4562 }); 4563</script>
4563<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] { 4564 cursor: wait 4565} 4566select.select2-preload { 4567 line-height: initial; 4568} 4569 4570select#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"] { 4571 -webkit-appearance: none; 4572 -moz-appearance: none; 4573 appearance: none; 4574 background-image: url(https://ik.imagekit.io/dentaldirectory/find-a-dentist-near-me/images/select2ArrowDown.png) !important; 4575 background-repeat: no-repeat !important; 4576 background-size: 10px 9px !important; 4577 background-position: 99% 16px; 4578 border-radius: 6px; 4579 overflow: hidden; 4580} 4581.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"] { 4582 background-position: 98.2% 12px; 4583} </style>
4583<script> 4584 // Function to add aria-label to <select> elements without it, for better pagespeed accessibility score 4585 $(document).ready(function() { 4586 var ariaLabelCounter = {}; // Object to keep track of aria-label counts for uniqueness 4587 4588 // Iterate over each select element that does not have an aria-label 4589 $('select:not([aria-label])').each(function() { 4590 // Use the ID or placeholder as the base for the aria-label, stripping HTML tags 4591 var baseLabel = this.id || $(this).attr('placeholder') || 'select'; 4592 baseLabel = baseLabel.replace(/<[^>]*>/g, '').trim(); // Remove HTML tags and trim 4593 4594 // Ensure uniqueness of each aria-label 4595 ariaLabelCounter[baseLabel] = (ariaLabelCounter[baseLabel] || 0) + 1; 4596 var ariaLabel = baseLabel + '-' + ariaLabelCounter[baseLabel]; 4597 4598 // Truncate aria-label to 100 characters 4599 ariaLabel = ariaLabel.length > 100 ? ariaLabel.substring(0, 100) : ariaLabel; 4600 4601 // Set the aria-label attribute to the unique label 4602 $(this).attr('aria-label', ariaLabel); 4603 }); 4604 }); 4605</script>
vendor: 2 bytes, line 4605
4605
4606<script type="application/ld+json"> 4607{ 4608 "@context": "https://schema.org", 4609 "@graph": [ 4610 { 4611 "@type": "WebSite", 4612 "@id": "https://www.familydentaldirectory.com/#website", 4613 "name": "Family Dental Directory", 4614 "url": "https://www.familydentaldirectory.com/", 4615 "inLanguage": "en-US", 4616 "potentialAction": { 4617 "@type": "SearchAction", 4618 "target": "https://www.familydentaldirectory.com/sitesearch?q={search_term_string}", 4619 "query-input": "required name=search_term_string", 4620 "name": "Search Directory: Family Dental Directory" 4621 }, 4622 "publisher": { 4623 "@id": "https://www.familydentaldirectory.com/#organization" 4624 } 4625 }, 4626 { 4627 "@type": "Organization", 4628 "@id": "https://www.familydentaldirectory.com/#organization", 4629 "name": "Family Dental Directory", 4630 "description": "Search the most complete dentist directory. Find dentists.", 4631 "url": "https://www.familydentaldirectory.com/", 4632 "mainEntityOfPage": { 4633 "@type": "WebPage", 4634 "@id": "https://www.familydentaldirectory.com/#webpage" 4635 }, 4636 "contactPoint": [ 4637 { 4638 "@type": "ContactPoint", 4639 "email": "[email protected]", 4640 "contactType": "customer support", 4641 "availableLanguage": [ 4642 "en" 4643 ], 4644 "areaServed": "US" 4645 } 4646 ], 4647 "areaServed": { 4648 "@type": "Country", 4649 "name": "US" 4650 }, 4651 "telephone": "(844) 311-9118", 4652 "sameAs": [ 4653 "https://www.facebook.com/familydentaldirectory", 4654 "https://twitter.com/familydentaldir", 4655 "https://www.linkedin.com/company/dentaldirectory" 4656 ], 4657 "logo": { 4658 "@type": "ImageObject", 4659 "@id": "https://www.familydentaldirectory.com/#logo", 4660 "url": "https://ik.imagekit.io/dentaldirectory/find-a-dentist-near-me/images/family-dental-directory-logo-450x70.png" 4661 }, 4662 "image": { 4663 "@type": "ImageObject", 4664 "@id": "https://www.familydentaldirectory.com/#image", 4665 "url": "https://ik.imagekit.io/dentaldirectory/find-a-dentist-near-me/images/family-dental-directory-logo-450x70.png" 4666 }, 4667 "keywords": [ 4668 "Dental", 4669 "Dentist", 4670 "Family Dental Directory", 4671 "Family Dental Directory", 4672 "Dentist", 4673 "Dental" 4674 ] 4675 } 4676 ] 4677}</script>
4677 4678
4679<script> 4680// Bootstrap Icons fallback loader - ensures Bootstrap Icons work even if HEAD widget is customized, do not delete 4681(function() { 4682 if (!document.querySelector('link[href*="bootstrap-icons"]')) { 4683 var link = document.createElement('link'); 4684 link.rel = 'stylesheet'; 4685 link.href = 'https://www.optimizecdn.com/directory/cdn/assets/bootstrap/fonts/bootstrap-icons.min.css?v=1.13.1'; 4686 document.head.appendChild(link); 4687 } 4688})(); 4689</script>
4689<!-- DONT ROLL OUT ALL CODE --> 4690<!-- Active Campaign and Pendo Code FDD -->
4691<script type='text/javascript'> 4692 (function(e, t, o, n, p, r, i) { 4693 e.visitorGlobalObjectAlias = n; 4694 e[e.visitorGlobalObjectAlias] = e[e.visitorGlobalObjectAlias] || function() { 4695 (e[e.visitorGlobalObjectAlias].q = e[e.visitorGlobalObjectAlias].q || []).push(arguments) 4696 }; 4697 e[e.visitorGlobalObjectAlias].l = (new Date).getTime(); 4698 r = t.createElement('script'); 4699 r.src = o; 4700 r.async = true; 4701 i = t.getElementsByTagName('script')[0]; 4702 i.parentNode.insertBefore(r, i) 4703 })(window, document, 'https://diffuser-cdn.app-us1.com/diffuser/diffuser.js', 'vgo'); 4704 vgo('setAccount', '1000230098'); 4705 vgo('setTrackByDefault', true); 4706 vgo('setEmail', ''); 4707 vgo('process'); 4708</script>
4708<!-- Active Campaign and Pendo Code FDD --><style type='text/css'> .input-group.normal-autosuggest input,.input-group.sm-autosuggest input, .input-group.md-autosuggest input { 4709 } 4710.normal-autosuggest .twitter-typeahead, .sm-autosuggest .twitter-typeahead, .md-autosuggest .twitter-typeahead, .large-autosuggest .twitter-typeahead { 4711 display: inline-block; 4712 height: 25px; 4713 position: relative; 4714 width: 100%; 4715} 4716.input-group.normal-autosuggest .twitter-typeahead, .input-group.sm-autosuggest .twitter-typeahead, .input-group.large-autosuggest .twitter-typeahead:not(.search_box .twitter-typeahead) { 4717 width: inherit; 4718} 4719.normal-autosuggest .twitter-typeahead .clear_content.medium{ 4720 bottom: 0px; 4721} 4722.sm-autosuggest .twitter-typeahead .clear_content.small{ 4723 bottom: -4px; 4724} 4725.md-autosuggest.input-group .twitter-typeahead .clear_content.medium { 4726 bottom: -2px; 4727} 4728.md-autosuggest .twitter-typeahead { 4729 height: 32px; 4730} 4731.md-autosuggest .input-group-addon + .input_wrapper .twitter-typeahead { 4732 height: 38px; 4733 vertical-align: top; 4734} 4735.md-autosuggest-input + .clear_content.medium { 4736 bottom: 0px; 4737} 4738.large-autosuggest .twitter-typeahead { 4739 height: 40px; 4740} 4741.normal-autosuggest .twitter-typeahead{ 4742 height: 38px; 4743} 4744.normal-autosuggest .twitter-typeahead .tt-hint, .sm-autosuggest .twitter-typeahead .tt-hint { 4745 background: #fff !important; 4746 border: 1px solid #ccc!important; 4747 border-radius: 0 8px 8px 0; 4748 box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075) inset!important; 4749 color: transparent; 4750 left: 0; 4751 padding: 4px 11px; 4752 position: absolute; 4753 top: 0; 4754 width: 100%; 4755 font-size:12px; 4756} 4757.normal-autosuggest.input-group-addon .fa, .sm-autosuggest .input-group-addon .fa, .input-group-sm .input-group-addon .fa {font-size:12px} 4758.md-autosuggest .twitter-typeahead .tt-hint { 4759 height: 100%; 4760 background: #ffffff none repeat scroll 0 0 !important; 4761 border: 1px solid #cccccc !important; 4762 border-radius: 0 8px 8px 0; 4763 box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075) inset !important; 4764 color: rgba(0, 0, 0, 0); 4765 left: 0; 4766 padding: 6px 11px; 4767 position: absolute; 4768 top: 0; 4769 width: 100%; 4770} 4771.large-autosuggest {background: #fff !important;border-radius:10px;} 4772.large-autosuggest input {width: 100%!important;box-shadow:none; border-radius: 10px;} 4773.large-autosuggest .twitter-typeahead .tt-hint { 4774 background: #fff !important; 4775 border: 1px solid #ccc!important; 4776 border-radius: 10px; 4777 box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075) inset!important; 4778 color: transparent; 4779 left: 0; 4780 position: absolute; 4781 top: 0; 4782 width: 100%; 4783 font-size: 18px; 4784 height: 46px; 4785 line-height: 1.33333; 4786 padding: 10px 15px; 4787} 4788.tt-dataset .empty-message { 4789 display: none !important; 4790} 4791.twitter-typeahead .tt-query {background-color:#fff!important} 4792.input-group.large-autosuggest span:first-child .tt-hint {border-radius: 0 !important;} 4793span.tt-dropdown-menu { 4794 border: 1px solid #FCFCFC; 4795 border-radius: 5px; 4796 box-shadow: 0 5px 10px rgba(0,0,0,.2); 4797 width: 100% !important; 4798} 4799.tt-is-under-cursor a.suggest-link { 4800 background: #55ACEE; 4801} 4802 4803.tt-is-under-cursor .media-heading, 4804.tt-is-under-cursor .suggest-origin, 4805.tt-is-under-cursor .location{ 4806 color:#fff!important; 4807} 4808.tt-suggestion .media .media-body .suggest-origin { 4809 color: rgba(45, 91, 137,0.9); 4810 padding: 1px 0; 4811 border-radius: 6px; 4812 font-weight: bold; 4813 line-height: 12px; 4814} 4815.tt-suggestion { 4816 background: #fff; 4817 border-bottom: 1px solid #eee; 4818 -webkit-transition: all 0.3s ease-in-out; 4819 -moz-transition: all 0.3s ease-in-out; 4820 -o-transition: all 0.3s ease-in-out; 4821 transition: all 0.3s ease-in-out; 4822} 4823body .tt-suggestions .media.br-bottom img { 4824 max-width: 45px; 4825 height: auto; 4826} 4827body .tt-suggestions .media-body span { 4828 font-size: 10px; 4829} 4830body .tt-suggestions .media-body h4 { 4831 font-size: 12px; 4832 margin: 2px 0px; 4833 text-transform: capitalize; 4834} 4835a.suggest-link { 4836 padding: 5px; 4837 display: block; 4838} 4839a.suggest-link img { 4840 border-radius: 100px; 4841 display: block; 4842 margin: 0 auto; 4843 height: 100%!important; 4844 width: 100%; 4845 object-fit: cover; 4846} 4847.left-suggest-col { 4848 display: inline-block; 4849 vertical-align: middle; 4850 width: 44px; 4851 height: 44px;
4852} 4853.right-suggest-col { 4854 display: inline-block; 4855 padding-left: 1%; 4856 text-align: left; 4857 vertical-align: middle; 4858 width: calc(100% - 1% - 50px); 4859} 4860p.media-heading { 4861 color: #333; 4862 font-size: 12px; 4863 font-weight: 600; 4864 margin-bottom: 0; 4865} 4866p.suggest-origin { 4867 font-size: 10px; 4868 color: #333; 4869 margin:0; 4870} 4871p.location { 4872 color: #333; 4873 font-size: 10px; 4874 margin: 2px 0; 4875} 4876body .tt-is-under-cursor a.suggest-link { 4877 background: #F7F7F7; 4878} 4879body .tt-is-under-cursor .media-heading, body .tt-is-under-cursor .suggest-origin, body .tt-is-under-cursor .location { 4880 color: #333!important; 4881} 4882a.suggest-link[data-heading="heading"] { 4883 pointer-events: none; 4884 cursor: default; 4885 text-decoration: none; 4886} 4887body .tt-is-under-cursor a.suggest-link[data-heading="heading"] { 4888 background: rgb(238, 238, 238); 4889} 4890/* --- all the novalue css --- */ 4891a.suggest-link .suggest-origin[data-state="novalue"] { 4892 display: none; 4893} 4894a.suggest-link .location[data-state="novalue"] { 4895 display: none; 4896} 4897a.suggest-link img[data-state="novalue"] { 4898 display: none; 4899} 4900a.suggest-link .suggest-origin[data-state="heading"] { 4901 display: none; 4902} 4903a.suggest-link .media-heading[data-heading="heading"] { 4904 color:rgb(51, 122, 183)!important; 4905 font-weight: bold; 4906 padding: 4px; 4907 font-size: 13px; 4908} 4909.left-suggest-col[data-photo="novalue"], .left-suggest-col[data-photo="undefined"] { 4910 display: none; 4911} 4912.right-suggest-col[data-photo="novalue"], .right-suggest-col[data-photo="undefined"] { 4913 width: 100%; 4914} 4915a.suggest-link[href="novalue"] { 4916 cursor: default !important; 4917 pointer-events: none; 4918} 4919a.suggest-link[data-heading="heading"] { 4920 background-color: rgb(238, 238, 238); 4921} 4922div.content-shell { 4923 overflow: inherit; 4924} 4925span.tt-dropdown-menu div { 4926 float: none; 4927} 4928.tt-menu { 4929 border-radius: 0 0 6px 6px; 4930 box-shadow: 0 0 3px rgba(0, 0, 0, 0.2); 4931 overflow: hidden; 4932 width: 100%; 4933 z-index: 150 !important; 4934} 4935.tt-menu .tt-dataset { 4936 overflow-y: auto; 4937 max-height: 200px; 4938} </style>
4938<script type="text/javascript"> 4939 4940 if (typeof decodeHtml != "function") { 4941 function decodeHtml(html) { 4942 var txt = document.createElement("textarea"); 4943 txt.innerHTML = html; 4944 return txt.value; 4945 } 4946 } 4947 function initializeTypeheadMember_search() { 4948 var member_searchEngine = new Bloodhound({ 4949 initialize: false, 4950 datumTokenizer: function (d) { 4951 return Bloodhound.tokenizers.whitespace(value); 4952 }, 4953 queryTokenizer: Bloodhound.tokenizers.whitespace, 4954 remote: { 4955 url: `/api/suggest/json/get/1,users_data,Listings,1,1,1,1,1,3|88,list_professions,Main Categories,1,1,1,1,1,3|89,list_services,Sub Categories,1,1,1,1,1,3?tID=16&q=%QUERY`, 4956 wildcard: '%QUERY', 4957 filter: function (response) { 4958 4959 if (response != null) { 4960 //var response = response.slice(1); 4961 $.each( 4962 response, function (key, value) { 4963 response[key]['value'] = decodeHtml(value['value']); 4964 response[key]['comes_f'] = decodeHtml(value['comes_f']); 4965 response[key]['location'] = decodeHtml(value['location']); 4966 4967 if (response[key]['value'].indexOf('-/-') >= 0) { 4968 var splitResult = response[key]['value'].split('-/-'); 4969 response[key]['value'] = splitResult[0]; 4970 } 4971 } 4972 ); 4973 4974 } else { 4975 response = {error: "null"}; 4976 } 4977 4978 return response; 4979 } 4980 } 4981 }); 4982 var member_searchDataSrc = member_searchEngine.initialize(); 4983 4984 member_searchDataSrc 4985 .done(function () { /*console.log('Autosuggestions engine initialized.'); */ 4986 }) 4987 .fail(function () { /*console.log('err, something went wrong while initializing autosuggestions engine:(');*/ 4988 }) 4989 4990 $('.member_search').typeahead({ 4991 minLength: 2, 4992 highlight: true, 4993 hint: false }, 4994 { 4995 display: 'value', 4996 source: member_searchEngine.ttAdapter(), 4997 limit: 10, 4998 templates: { 4999 empty: [ 5000 '<div class="empty-message">', 5001 'Result not found', 5002 '</div>' 5003 ].join(" "), 5004 notFound: [ 5005 '<div class="notFound-message">', 5006 'Result not found', 5007 '</div>' 5008 ].join(" "), 5009 suggestion: function (data) { 5010 5011 if (data == "null") { 5012 strTemplate = '<div class="empty-message">Result not found</div>'; 5013 5014 } else { 5015 strTemplate = '<a class="suggest-link" href="' + data.link + '" data-state="' + data.link + '" data-heading="' + data.comes_f + '"> <div class="left-suggest-col" data-photo="' + data.photo + '"> <img src="' + data.photo + '" data-state="' + data.photo + '"> </div> <div class="right-suggest-col" data-photo="' + data.photo + '"> <p class="media-heading" data-state="' + data.value + '" data-heading="' + data.comes_f + '">' + data.value + '</p> <p class="suggest-origin" data-state="' + data.comes_f + '">' + data.comes_f + '</p> <p class="location" data-state="' + data.location + '">' + data.location + '</p> </div> </a> '; 5016 5017 if ((data.link == undefined) || (data.link == "") || (data.link == "novalue")) { 5018 strTemplate = strTemplate.replace(/href=".*?"/, "href='#'"); 5019 } 5020 5021 if ((data.photo == undefined) || (data.photo == "") || (data.photo == "novalue")) { 5022 strTemplate = strTemplate.replace(/<img src=".*?>/, ""); 5023 } 5024 } 5025 5026 return strTemplate; 5027 } 5028 }, 5029 }).on('typeahead:selected', function (obj, datum) { 5030 /* 5031 console.log(obj); 5032 console.log(datum); 5033 */ 5034 }); 5035 5036 $('.member_search').each(function () {
5037 var inputWidth = $(this).outerWidth(); 5038 $(this).siblings('.tt-dropdown-menu').css('width', inputWidth + 'px'); 5039 }); 5040 } 5041 </script>
5041 5042
5042<script> 5043 let typeheadElement = '.member_search'; 5044 let TypeheadNameListFunction = 'initializeTypeheadMember_search'; 5045 let typeheadFormElement = undefined; 5046 window.addEventListener('load', () => { 5047 if(typeheadElement.length > 1) { 5048 typeheadFormElement = document.querySelectorAll(typeheadElement); 5049 } 5050 if (typeof typeheadFormElement != "undefined") { 5051 for (let i = 0; i < typeheadFormElement.length; i++) { 5052 let closestForm = typeheadFormElement[i].closest('form'); 5053 if (typeof closestForm != "undefined" && closestForm != null) { 5054 closestForm.addEventListener('focus', typeheadFormClick, false); 5055 } 5056 typeheadFormElement[i].addEventListener('focus', typeheadFormClick, false); 5057 } 5058 } 5059 }); 5060 function initializeTypehead(){ 5061 let splitFunctionNames= TypeheadNameListFunction.split(','); 5062 for ( let funcName of splitFunctionNames) 5063 if (typeof funcName != 'function') { 5064 window[funcName](); // execute the function 5065 5066 } 5067 } 5068 function typeheadFormClick(event) { 5069 5070 let head = document.getElementsByTagName('head')[0]; 5071 let script = document.createElement('script'); 5072 let elementClicked = event.target; 5073 script.type = 'text/javascript'; 5074 script.src = "https://cdnjs.cloudflare.com/ajax/libs/corejs-typeahead/0.11.1/typeahead.bundle.min.js"; 5075 script.onload = function () { 5076 initializeTypehead(); 5077 elementClicked.focus(); 5078 }; 5079 head.appendChild(script); 5080 if (typeof typeheadFormElement != "undefined") { 5081 for (let i = 0; i < typeheadFormElement.length; i++) { 5082 let closestForm = typeheadFormElement[i].closest('form'); 5083 if (typeof closestForm != "undefined" && closestForm != null) { 5084 closestForm.removeEventListener('focus', typeheadFormClick, false); 5085 } 5086 typeheadFormElement[i].removeEventListener('focus', typeheadFormClick, false) 5087 } 5088 } 5089 } 5090 5091 5092 </script>
5092 5093 5094
5094<script> 5095 window.addEventListener('load', () => { 5096 let embedlyClass = document.querySelector('.fr-embedly'); 5097 if (typeof embedlyClass != "undefined" && embedlyClass != null) { 5098 let embedlyURI = "https://www.optimizecdn.com/directory/cdn/assets/bootstrap/js/embedly_widget.min.js"; 5099 let head = document.getElementsByTagName("head")[0]; 5100 let script = document.createElement('script'); 5101 script.type = 'text/javascript'; 5102 script.src = embedlyURI; 5103 script.async = true; 5104 script.onload = function() { 5105 setTimeout(function() { 5106 if (typeof embedly !== 'undefined' && embedly.card) { 5107 document.querySelectorAll('.embedly-card').forEach(function(card) { 5108 embedly.card(card); 5109 }); 5110 } 5111 }, 500); 5112 }; 5113 head.appendChild(script); 5114 } 5115 }); 5116</script>
5116<script type="text/javascript" src="https://www.optimizecdn.com/directory/cdn/assets/bootstrap/jquery.lazy/1.7.9/jquery.lazy.min.js"></script>
5116<script> 5117 $(function () { 5118 $(".lazyloader").Lazy({ 5119 afterLoad: function(element) { 5120 $(".gridView.activeView").click(); 5121 } 5122 }); 5123 5124 }); 5125 $("button[class*='slick'],button[id*='slick']").click(function () { 5126 $(this).parents(".row").find(".lazyloader").lazy({ 5127 bind: "event", 5128 delay: 0 5129 }); 5130 }); 5131 $("[class*='slick'],[id*='slick']").on("swipe",function(){ 5132 $(this).parents(".row").find(".lazyloader").lazy({ 5133 bind: "event", 5134 delay: 0 5135 }); 5136 }); 5137 </script>
5137<script defer src="https://www.optimizecdn.com/directory/cdn/assets/bootstrap/js/websiteScripts.min.js?v=8.0.0"></script>
5137 5138 </body> 5139 </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.