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