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/fav.png"> 13 <link rel="icon" type="image/png" href="/images/fav.png"> 14 15 <!-- Site Meta Data --> 16 <title>Westminster California Businesses - Find & Compare Westminster California Business Professionals</title> 17 <meta name="description" content="Search our Westminster California Business database and connect with top rated Westminster California Businesses."> 18 <meta name="keywords" content="Westminster California Business,Westminster California Businesses,Westminster California Businesses,search Westminster California Businesses,find Westminster California Businesses"> 19 <meta name="robots" content="index, follow"> 20 21 <!-- Canonical URL --> 22 <link rel="canonical" href="https://www.westminsterchamber.org/search_results"> 23 <link rel="alternate" type="application/rss+xml" title="Westminster Chamber of Commerce RSS Feed" href="https://www.westminsterchamber.org/rss" /> 24 <link rel='next' href='https://www.westminsterchamber.org/search_results?page=2'> 25 26 <!-- Social Media Meta Data --> 27 <meta property="og:type" content="website"> 28 <meta property="og:url" content="https://www.westminsterchamber.org/search_results"> 29 <meta property="og:site_name" content="Westminster Chamber of Commerce"> 30 <meta property="og:title" content="The Best Westminster California Businesses Rated By Past Clients"> 31 <meta property="og:description" content="Who is the best Westminster California Businesses? Compare and connect with the top rated Westminster California Businesses."> 32 <meta property="og:image" content="https://www.westminsterchamber.org/images/hero-slider/PHOTO-2022-09-21-16-51-02-(2).webp"> 33
33<script> 34 var siteInfoSpan=document.createElement('span'); 35 siteInfoSpan.style.cssText='position:absolute;color:transparent;width:100%;z-index:-1;height:50px;top:0;'; 36 siteInfoSpan.textContent='www.westminsterchamber.org - Westminster Chamber of Commerce'; 37 document.documentElement.appendChild(siteInfoSpan); 38 </script>
38 39 40 <!-- Preload --> 41 <link rel="preload" as="style" href="https://www.optimizecdn.com/directory/cdn/assets/bootstrap/css/critical-styles.pkgd.min.css?v=09.05.26" fetchpriority="high" crossorigin> 42 <link rel="preload" as="style" href="https://fonts.googleapis.com/css?family=Cabin:300,400,600,700,800,900|PT+Sans:300,400,600,700,800,900|Roboto:300,400,600,700,800,900&display=swap" fetchpriority="high"> 43 44 <!-- Non-Critical Stylesheet - Render Before Critical Styles --> 45 <link rel="stylesheet" media="print" onload="this.onload=null;this.removeAttribute('media');" href="https://www.optimizecdn.com/directory/cdn/assets/bootstrap/css/non-critical-styles.pkgd.min.css?v=3.3.0" crossorigin> 46 <noscript> 47 <link rel="stylesheet" href="https://www.optimizecdn.com/directory/cdn/assets/bootstrap/css/non-critical-styles.pkgd.min.css" crossorigin> 48 </noscript> 49 50 <!-- Critical Stylesheet --> 51 <link rel="stylesheet" href="https://www.optimizecdn.com/directory/cdn/assets/bootstrap/css/critical-styles.pkgd.min.css?v=09.05.26" crossorigin> 52 53 <!-- Google Fonts Stylesheet --> 54 <link rel="stylesheet" media="print" onload="this.onload=null;this.removeAttribute('media');" href="https://fonts.googleapis.com/css?family=Cabin:300,400,600,700,800,900|PT+Sans:300,400,600,700,800,900|Roboto:300,400,600,700,800,900&display=swap"> 55 <noscript> 56 <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|Roboto:300,400,600,700,800,900&display=swap"> 57 </noscript> 58 59 <!-- FontAwesome Stylesheet --> 60 <link rel="stylesheet" media="print" onload="this.onload=null;this.removeAttribute('media');" href="https://www.optimizecdn.com/directory/cdn/assets/bootstrap/font-awesome/css/font-awesome.min.css" crossorigin> 61 <noscript> 62 <link rel="stylesheet" href="https://www.optimizecdn.com/directory/cdn/assets/bootstrap/font-awesome/css/font-awesome.min.css" crossorigin> 63 </noscript> 64 65 <!-- Bootstrap Icons Stylesheet --> 66 <link rel="stylesheet" media="print" onload="this.onload=null;this.removeAttribute('media');" href="https://www.optimizecdn.com/directory/cdn/assets/bootstrap/fonts/bootstrap-icons.min.css?v=1.13.1" crossorigin> 67 <noscript> 68 <link rel="stylesheet" href="https://www.optimizecdn.com/directory/cdn/assets/bootstrap/fonts/bootstrap-icons.min.css?v=1.13.1" crossorigin> 69 </noscript> 70 71 <!-- Critical JavaScript --> 72
72<script src="https://www.optimizecdn.com/directory/cdn/assets/bootstrap/js/jquery.min.js"></script>
72 73
73<script src="https://www.optimizecdn.com/directory/cdn/assets/bootstrap/js/bootstrap-3.3.5.min.js"></script>
73 74
74<script> 75 /* jQuery.event.special.touchstart = { 76 setup: function( _, ns, handle ) { 77 this.addEventListener("touchstart", handle, { passive: !ns.includes("noPreventDefault") }); 78 } 79 }; */ 80 jQuery.event.special.touchmove = { 81 setup: function( _, ns, handle ) { 82 this.addEventListener("touchmove", handle, { passive: !ns.includes("noPreventDefault") }); 83 } 84 }; 85 jQuery.event.special.wheel = { 86 setup: function( _, ns, handle ){ 87 this.addEventListener("wheel", handle, { passive: true }); 88 } 89 }; 90 jQuery.event.special.mousewheel = { 91 setup: function( _, ns, handle ){ 92 this.addEventListener("mousewheel", handle, { passive: true }); 93 } 94 }; 95 </script>
95 96 97 <!-- Breadcrumb Position --> 98 <style>html.bc-relocate .container:has(> .breadcrumb):has(~ .hero_section_container) .breadcrumb{display:none!important;}html.bc-relocate .hero_section_container + .clearfix + .container::before{content:"";display:block;min-height:24px;}.hero_section_container + .clearfix + .container > .breadcrumb:first-child{position:relative;top:-24px;}</style> 99
99<script>document.documentElement.classList.add('bc-relocate');document.addEventListener('DOMContentLoaded',function(){var bc=document.querySelector('ol.breadcrumb'),hero=document.querySelector('.hero_section_container');if(bc&&hero){var t=hero.nextElementSibling;while(t&&!t.classList.contains('container'))t=t.nextElementSibling;if(t)t.insertBefore(bc,t.firstChild);}document.documentElement.classList.remove('bc-relocate');});</script>
99 100 101 102 <!-- Prefetch --> 103 <link rel="prefetch" href="https://www.optimizecdn.com/directory/cdn/assets/bootstrap/jquery.lazy/1.7.9/jquery.lazy.min.js" as="script"> 104 <link rel="prefetch" href="https://www.optimizecdn.com/directory/cdn/assets/bootstrap/js/websiteScripts.min.js?v=8.0.0" as="script"> 105 106 <!-- Custom Site-wide HEAD Content -->
106<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-9069257265845180" 107 crossorigin="anonymous"></script>
vendor: 2 bytes, line 107
107
108<script> 109Â Â var hsscript = document.createElement("script"); 110Â Â hsscript.src = "https://cdn.jsdelivr.net/npm/hockeystack@latest/hockeystack.min.js"; 111Â Â hsscript.async = 1; 112Â Â hsscript.dataset.apikey = "880cd94d2663223a75e68d70bd2631"; 113Â Â hsscript.dataset.cookieless = 1; 114Â Â hsscript.dataset.autoIdentify = 1; 115Â Â document.getElementsByTagName('head')[0].append(hsscript); 116</script>
vendor: 2 bytes, line 116
116
117<script type="text/javascript"> 118 (function(c,l,a,r,i,t,y){ 119 c[a]=c[a]||function(){(c[a].q=c[a].q||[]).push(arguments)}; 120 t=l.createElement(r);t.async=1;t.src="https://www.clarity.ms/tag/"+i; 121 y=l.getElementsByTagName(r)[0];y.parentNode.insertBefore(t,y); 122 })(window, document, "clarity", "script", "fr45wek0yo"); 123</script>
123 124<!-- Google tag (gtag.js) -->
vendor: 65 bytes, lines 124-125
124 125<script async src="https://www.googletagmanager.com/gtag/js?id=
125G-SSCD6BSGLV
vendor: 13 bytes, line 125
125"></script>
126<script> 127
vendor: 138 bytes, lines 127-131
127window.dataLayer = window.dataLayer || []; 128 function gtag(){dataLayer.push(arguments);} 129 gtag('js', new Date()); 130 131 gtag('config', '
131G-SSCD6BSGLV
vendor: 5 bytes, line 131
131');
132</script>
132
132<script> 133 function g() { 134 window.addEventListener('load', () => { 135 if (typeof initializeG === 'function') { 136 initializeG(); 137 } else if (typeof initializeGoogleMaps === 'function') { 138 initializeGoogleMaps(); 139 } 140 }); 141 } 142 </script>
142 143
143<script src="https://maps.googleapis.com/maps/api/js?v=quarterly&libraries=places®ion=US&callback=g&language=en&key=AIzaSyDbfKV3pdAqtZWJp2D8818eBlTy7zr0DQk"></script>
143 144 145</head> 146<body> 147<style type='text/css'> 148 </style><!--GOOGLE TAG MANAGER CODE--><!-- 149IMPORTANT: It is not recommended to customize this widget as it directly connects to fields in DESIGN SETTINGS. If new design settings are created and this widget is already customized, then the website will not be able to apply any new design setitngs. 150 151INSTEAD: If custom CSS rules are needed, add them directly into the DESIGN SETTINGS > CUSTOM CSS section. 152--> 153<style> 154 .upload-form-field::before { 155 content: "choose files"; 156 display: inline-block; 157 border: 1px solid #999; 158 border-radius: 3px; 159 padding: 5px 8px; 160 } 161 #first_container span.input-group-addon,#first_container .datepicker *,#first_container .input-group-addon, #first_container .input-group-addon *,#first_container .fr-action-buttons .fr-submit,.fr-popup .fr-layer.fr-color-hex-layer .fr-action-buttons button.fr-command { 162 white-space: nowrap !important; 163 } 164 /* Main Website Design */ 165 body,.modal-header,.modal-content,.modal-body,.modal-footer { 166 background: rgb(255, 255, 255); 167 color: rgb(44, 44, 44); 168 font-family: 'Cabin'; 169 font-size: 14px; 170 } 171 .select2-container .select2-choice { 172 font-family: 'Cabin'!important; 173 } 174 html{ 175 background: rgb(44, 44, 44) } 176 .bootstrap-datetimepicker-widget *:not(.active,[data-action="togglePeriod"]) a, .bootstrap-datetimepicker-widget *:not(.active,[data-action="togglePeriod"]) td,.datepicker th.picker-switch,.datepicker .dow { 177 color: #000 !important; 178 } 179 a,a.h1,a.h2,a.h3,a.h4,a.h5,a.h6,.pricing_menu li ul li a:not(.btn) { 180 color: rgb(0, 102, 153); 181 } 182 a:hover, a:focus,.pricing_menu li ul li a:not(.btn):hover,.pricing_menu li ul li a:not(.btn):focus,.btn:hover,.btn:focus { 183 color: rgb(14, 122, 176); 184 } 185 .breadcrumb a{ 186 color: rgba(118, 118, 118,0.9); 187 } 188 .breadcrumb a:hover, .breadcrumb a:focus,.breadcrumb > .active { 189 color: rgb(118, 118, 118); 190 } 191 .help-inline, .help-block { 192 color: rgba(44, 44, 44,0.5); 193 } 194 .h1, .h2, .h3, .h4, .h5, .h6, h1, h2, h3, h4, h5, h6 { 195 font-family: 'PT Sans'; 196 } 197 /* Header Design */ 198 .header, .mobile_website_logo img { 199 background: rgb(255, 255, 255); 200 } 201 .header .mini-nav li a:not(.btn):not(.network-icon), .header .mini-nav span { 202 color: rgb(118, 118, 118); 203 font-size: 14px; 204 } 205 .header .mini-nav li a:not(.btn):hover { 206 color: rgba(118, 118, 118,0.95); 207 } 208 .header .btn_get_listed { 209 background-color: rgb(240, 52, 52); 210 border: 1px solid rgb(240, 52, 52); 211 color: rgb(255, 255, 255)!important; 212 } 213 .header .btn_get_listed:hover, .header .btn_get_listed:focus { 214 background-color: rgba(240, 52, 52,0.97); 215 } 216 .header .btn_search { 217 background-color: rgba(0, 102, 153,0.97); 218 border: 1px solid rgb(0, 102, 153); 219 color: rgb(255, 255, 255); 220 } 221 .header .btn_search:hover, .header .btn_search:focus { 222 background-color: rgb(0, 102, 153); 223 color: rgb(255, 255, 255); 224 } 225 226 /* Logo Design */ 227 .logo,.logo:hover,.logo:focus { 228 color: rgb(44, 44, 44); 229 font-family: 'PT Sans'; 230 } 231 .logo .slogan { 232 color: rgb(118, 118, 118); 233 } 234 .logo .fa { 235 color: rgb(0, 102, 153); 236 } 237 238 /* Main Menu Design */ 239 .member-profile-tabs > ul, .member-profile-tabs .tabs-container { 240 background: rgb(221, 221, 221); 241 position: sticky; 242 z-index: 1; 243 top: 0px; 244 } 245 /* Google Translate When Main Menu Sticky Top */ 246 @media only screen and (max-width: 1100px) { 247 .member-profile-tabs > ul, .member-profile-tabs .tabs-container { 248 top: 50px; 249 } 250 } 251 .header ul.nav.navbar-nav li ul { 252 background-color: rgb(71, 134, 141); 253 } 254 .header ul.nav.navbar-nav li ul li a, .header ul.nav.navbar-nav li ul li span { 255 color: rgb(255, 255, 255); 256 font-weight: 400; 257 } 258 .header .navbar-default, .pagination > .active > a { 259 background-color: rgb(71, 134, 141); 260 } 261 .header ul.nav.navbar-nav li ul li a:hover, .header ul.nav.navbar-nav li ul li a:focus{ 262 border-left-color: rgb(255, 255, 255); 263 background: rgb(255, 255, 255); 264 color: rgb(71, 134, 141); 265 }
266 .navbar-default .navbar-toggle .icon-bar { 267 background-color: rgb(255, 255, 255); 268 } 269 .user_sidebar, .main_menu, .compact-mobile-search { 270 color: rgb(255, 255, 255); 271 } 272 .navbar-default .navbar-nav > li > a, .navbar-default .navbar-nav > li > span { 273 color: rgb(255, 255, 255); 274 font-weight: 400; 275 } 276 .navbar-default .navbar-nav > li:hover > a,.navbar-default .navbar-nav > li > a:hover,.navbar-default .navbar-nav > li > a:active, .navbar-default .navbar-nav > li > a:focus { 277 color: rgb(255, 255, 255); 278 } 279 .navbar-default .navbar-nav > li { 280 font-family: 'Cabin'; 281 } 282 283 284 285 /* Footer Design */ 286 .footer { 287 background-color: rgb(44, 44, 44); 288 display: block; 289 } 290 .footer, .footer_menu a,.footer_terms a,.footer_menu .content { 291 color: rgb(239, 239, 239); 292 } 293 .footer_menu a:hover, .footer_terms a:hover, .footer_menu a:focus, .footer_terms a:focus { 294 color: rgb(255, 255, 255); 295 } 296 .footer_menu .head { 297 color: rgb(255, 255, 255); 298 } 299 .btn_footer_get_listed { 300 background-color: rgb(240, 52, 52); 301 border: 1px solid rgb(240, 52, 52); 302 color: rgb(255, 255, 255)!important; 303 } 304 .btn_footer_get_listed:hover, .btn_footer_get_listed:focus{ 305 background-color: rgba(240, 52, 52,0.95); 306 } 307 308 /* Homepage Design */ 309 .homepage_settings h1, .homepage_settings h2, .homepage_map h1, .homepage_map h2 { 310 font-family: 'PT Sans'; 311 } 312 .homepage_settings h1, .homepage_map h1 { 313 color: rgb(255, 255, 255); 314 font-weight: 600; 315 text-align: center; 316 } 317 .homepage_settings h2, .homepage_map h2 { 318 color: rgb(41, 41, 41); 319 font-weight: 400; 320 text-align: center; 321 322 } 323 .homepage_settings .search_box label { 324 color: rgb(49, 49, 49); 325 } 326 .btn_home_search, .search_box input[type=submit] { 327 background-color: rgb(0, 102, 153); 328 border: 1px solid rgb(0, 102, 153); 329 color: rgb(255, 255, 255); 330 } 331 .btn_home_search:hover, .btn_home_search:focus, .search_box input[type=submit]:hover, .search_box input[type=submit]:focus { 332 background-color: rgba(0, 102, 153,0.97); 333 color: rgb(255, 255, 255); 334 } 335 .homepage_settings .search_box { 336 337 background-color: rgba( 255, 255, 255, 0.8); 338 } 339 340 /* Homepage Steps Module */ 341 .homepage_steps { 342 background: none; 343 box-shadow: none; 344 padding: 0; 345 color: rgb(255, 255, 255); 346 } 347 .homepage_steps a.homepage_step_link,.homepage_steps a.homepage_step_link:hover,.homepage_steps a.homepage_step_link:active{ 348 color: rgb(255, 255, 255)!important; 349 } 350 .homepage_steps .fa { 351 color: rgb(255, 255, 255); 352 background-color: rgba(255, 255, 255,0.075); 353 } 354 .homepage_steps h2 + p { 355 opacity: .6; 356 } 357 358 /* Blog Posts Slider Settings */ 359 #myCarousel h2 a, .carousel-caption p,#myCarousel .list-group-item h2, #myCarousel li.list-group-item h4 { 360 color: rgb(71, 71, 71); 361 } 362 #myCarousel .list-group-item { 363 background-color: rgba(245, 245, 245,0.9); 364 border-color: rgba(245, 245, 245,0.80); 365 } 366 #myCarousel .carousel-caption { 367 background-color: rgba(245, 245, 245,0.8); 368 } 369 #myCarousel .list-group, #myCarousel .carousel-inner { 370 background-color: rgb(245, 245, 245) } 371 #myCarousel .list-group .active, #myCarousel .list-group-item:hover { 372 background-color: rgb(245, 245, 245) } 373 #myCarousel .list-group .active h2, #myCarousel .list-group-item:hover h2{ 374 color: rgb(71, 71, 71); 375 } 376 377 /* Additional Settings */ 378 .well blockquote { 379 background: rgb(255, 255, 255) none repeat scroll 0 0; 380 border-color: rgb(221, 221, 221); 381 color: rgb(44, 44, 44); 382 padding: 10px 20px; 383 } 384 .account-form-box form table tr td table { 385 background-color: transparent!important; 386 border: none!important; 387 } 388 389 .account-form-box form table tr td table td { 390 background-color: transparent!important; 391 color: rgb(44, 44, 44)!important; 392 border: none!important; 393 } 394 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{ 395 color: rgb(44, 44, 44)!important; 396 } 397 .table.dataTable > thead > tr > th, .table > thead > tr > th, .fr-view table th, .fr-view table tfoot td { 398 border-color: rgba(85, 85, 85,0.1); 399 background-color: rgb(245, 245, 245); 400 color: rgb(85, 85, 85);
401 font-weight:600; 402 border-left: none; 403 border-bottom-width: 1px; 404 } 405 .table > tbody > tr > td, .table > tbody > tr > th, .table > tfoot > tr > td, .table > tfoot > tr > th, .table > thead > tr > td, table.dataTable.no-footer { 406 border-color: rgba(85, 85, 85,0.1); 407 } 408 .table > tfoot > tr > td:not(:last-child) { 409 border-right: 1px solid rgba(85, 85, 85,0.1); 410 } 411 table.dataTable.no-footer, table.dataTable { 412 border: 1px solid rgb(221, 221, 221)!important; 413 } 414 .table-view li:not(.table-display-about_me li, .froala-data li), .table-view .table-view-group > div { 415 border-top:1px solid rgb(221, 221, 221); 416 } 417 .table-view .table-view-group:last-child { 418 border-bottom:1px solid rgb(221, 221, 221); 419 } 420 table.dataTable tbody tr, .table-striped.dataTable, .table-striped, .fr-view .table-striped { 421 background-color: rgb(245, 245, 245)!important; 422 } 423 .table-striped.dataTable, .table-striped, .fr-view .table-striped { 424 border: 1px solid rgba(85, 85, 85,0.15); 425 border-collapse: separate; 426 overflow: hidden; 427 } 428 table#feature-body-datatable:has(.dropdown.open),table#digital-products-transactions:has(.dropdown.open), table#example:has(.dropdown.open) { 429 overflow: visible; 430 } 431 .table-striped.dataTable tbody > tr:nth-of-type(2n+1),.table-striped > tbody > tr:nth-of-type(2n+1) { 432 background-color: rgba(255, 255, 255,0.5)!important; 433 } 434 .nav-tabs, hr, .account-menu-title, .modal-header { 435 border-color: rgb(221, 221, 221); 436 } 437 .sidemenu_panel .list-group-item{ 438 background-color: transparent!important; 439 color: rgb(41, 41, 41)!important; 440 } 441 .img-thumbnail { 442 background-color: rgb(245, 245, 245)!important; 443 border: 1px solid rgb(221, 221, 221); 444 } 445 .member_admin_sidemenu p, .member_admin_sidemenu h3 { 446 color: rgb(41, 41, 41)!important; 447 } 448 .close { 449 color: rgb(44, 44, 44); 450 opacity: 1; 451 } 452 .member_results_header h1, .content_w_sidebar.feature-search h1, .feature_results_header h1 { 453 font-size:34px; 454 display: block; 455 } 456 .member_results_header h2, .feature_results_header h2 { 457 font-size:28px; 458 display: block; 459 } 460 .homepage_settings { 461 padding-top: 90px; 462 padding-bottom: 200px; 463 } 464 @media (max-width: 768px) { .mobile_website_logo .visible-xs {display: block !important;}} 465 @media only screen and (max-width: 768px) { 466 .member-profile-header .favorite {float:none} 467 } 468 469 470 @media only screen and (max-width: 1100px) { 471 } 472 .views > i.fa.activeView, .views > i.fa:hover { 473 background-color: rgb(44, 44, 44); 474 color: rgb(255, 255, 255); 475 } 476 .views > i.fa { 477 background-color: rgba(44, 44, 44,0.1); 478 color: rgb(44, 44, 44); 479 } 480 .ui-rangeSlider-label { 481 background-color: rgb(71, 134, 141)!important; 482 color: rgb(255, 255, 255)!important; 483 } 484 .pricing_menu li .title { 485 background: rgb(0, 102, 153); 486 color: rgb(255, 255, 255); 487 } 488 p.account-tip{ 489 color: rgb(44, 44, 44); 490 } 491 .circled_number { 492 background: rgb(0, 102, 153); 493 color: rgb(255, 255, 255); 494 } 495 .pic { 496 background-color: rgba(0, 102, 153,0.8); 497 color: rgb(255, 255, 255); 498 background-repeat: no-repeat; 499 background-position: center; 500 } 501 .pic .pic-caption { 502 background: linear-gradient(0deg, rgba(0, 0, 0, 0) 0%,rgba(0, 102, 153,0.85) 50%); 503 color: rgb(255, 255, 255); 504 } 505 .slick-prev-fa i, .slick-next-fa i{ 506 color: rgb(0, 102, 153); 507 } 508 .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 { 509 background-color: rgb(245, 245, 245); 510 border-color: rgb(221, 221, 221); 511 color: rgb(41, 41, 41); 512 } 513 .nav-pills > li.active a, .nav-pills > li > a:hover { 514 background-color: rgb(0, 102, 153)!important; 515 border-color: rgb(0, 102, 153)!important; 516 color: rgb(255, 255, 255)!important; 517 } 518 .sidemenu_panel .panel-heading { 519 color: rgb(41, 41, 41)!important; 520 background-color: rgb(245, 245, 245)!important; 521 } 522 .member-profile-tabs .nav-tabs > li:not(.active) > a, .login-register-tabs.nav-tabs > li:not(.active) > a, .nav-tabs > li:not(.active) > a { 523 background: rgba(245, 245, 245,0.5); 524 color: #616161; 525 } 526 .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 { 527 background: rgba(245, 245, 245,1); 528 color: rgb(44, 44, 44); 529 }
530 .author-snapshot .well:not(.well.bg-default) { 531 background-color: rgb(245, 245, 245)!important; 532 border-color: rgb(221, 221, 221)!important; 533 color: rgb(41, 41, 41)!important; 534 } 535 .nav-tabs>li>a, .nav-pills>li>a { 536 font-weight: 600; 537 } 538 .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{ 539 color: rgba(41, 41, 41,0.5); 540 } 541 #service_areas_table td,#service_areas_table_wrapper label, #service_areas_table_info, #service_areas_table_paginate > a { 542 color: rgb(41, 41, 41) !important; 543 } 544 .popover { 545 background-color: rgb(245, 245, 245); 546 border-color: rgb(245, 245, 245); 547 padding:0; 548 text-align:left; 549 } 550 .popover-title, .popover-content { 551 background-color: rgb(245, 245, 245); 552 color: rgb(41, 41, 41); 553 border-color: rgb(245, 245, 245); 554 text-align:left; 555 } 556 .popover-content { 557 background-color: rgba(41, 41, 41,.05); 558 border-radius: 4px; 559 transform: translate(-1px, -1px); 560 width: calc(100% + 2px); 561 margin-bottom: -2px; 562 } 563 .popover.left > .arrow::after { 564 border-left-color: rgb(245, 245, 245)!important; 565 } 566 .popover.right > .arrow::after { 567 border-right-color: rgb(245, 245, 245)!important; 568 } 569 .popover.bottom > .arrow::after { 570 border-bottom-color: rgb(245, 245, 245)!important; 571 } 572 .popover.top > .arrow::after { 573 border-top-color: rgb(245, 245, 245)!important; 574 } 575 .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{ 576 background-color: rgb(255, 255, 255); 577 color: rgb(44, 44, 44); 578 } 579 .module h1, .module h2, .module h3, .module h4, .module h5 { 580 color: rgb(62, 62, 62); 581 } 582 .module p:not(.fr-box.fr-basic .fr-element p) { 583 color: rgb(41, 41, 41); 584 } 585 .pagination>.active>a { 586 border-color: rgba(255, 255, 255,0.2); 587 } 588 .pagination>.active>a { 589 color: rgb(255, 255, 255); 590 } 591 .pagination > .active > a:hover, .pagination > .active > a:focus { 592 border-color: rgba(255, 255, 255,0.2); 593 background-color: rgb(71, 134, 141); 594 color: rgb(255, 255, 255); 595 } 596 .pagination > li > a { 597 color: rgb(71, 134, 141); 598 border-color: rgba(71, 134, 141,0.2); 599 background-color: rgb(255, 255, 255); 600 } 601 .pagination > li > a:focus, .pagination > li > a:hover, .pagination > li > span:focus, .pagination > li > span:hover { 602 background-color: rgb(71, 134, 141); 603 border-color: rgb(71, 134, 141); 604 color: rgb(255, 255, 255); 605 } 606 607 .nav-pills.nav-wizard > li a, .nav-pills.nav-wizard > li a:hover{ 608 background-color: rgb(250, 250, 250)!important; 609 color: rgb(41, 41, 41)!important; 610 } 611 .member_wizard2 li.incomplete a, .member_wizard2 li.incomplete a:hover { 612 background-color: rgb(240, 52, 52)!important; 613 border-color: rgb(240, 52, 52); 614 color: rgb(255, 255, 255); 615 } 616 .nav-pills.nav-wizard > li.active a, .nav-pills.member_wizard > li.active:hover a { 617 background-color: rgb(51, 122, 183)!important; 618 color: rgb(255, 255, 255)!important; 619 } 620 .member_wizard2 li.completed a, .member_wizard2 li.completed a:hover { 621 background-color: rgb(71, 134, 141)!important; 622 border-color: rgb(71, 134, 141); 623 color: rgb(255, 255, 255); 624 } 625 626 .nav-pills.nav-wizard > li.active .nav-arrow, .nav-pills.nav-wizard > li.active:hover .nav-arrow { 627 border-color: transparent transparent transparent rgb(51, 122, 183)!important; 628 } 629 .nav-pills.nav-wizard > li.active .nav-wedge, .nav-pills.nav-wizard > li.active:hover .nav-wedge{ 630 border-color: rgb(51, 122, 183) rgb(51, 122, 183) rgb(51, 122, 183) transparent!important; 631 } 632 633 li.completed .nav-wedge, .nav-pills.nav-wizard > li.completed:hover .nav-wedge { 634 border-color: rgb(0, 166, 128) rgb(0, 166, 128) rgb(0, 166, 128) transparent!important; 635 } 636 637 li.incomplete .nav-wedge, .nav-pills.nav-wizard > li.incomplete:hover .nav-wedge { 638 border-color: rgb(250, 250, 250) rgb(250, 250, 250) rgb(250, 250, 250) transparent!important; 639 } 640 641 .nav-pills.member_wizard > li.completed a, .nav-pills.member_wizard > li.completed a:hover { 642 background-color: rgb(0, 166, 128)!important; 643 color: rgb(255, 255, 255)!important; 644 } 645 646 .member_wizard2 li { 647 color: rgb(255, 255, 255); 648 border-right: 10px solid rgb(255, 255, 255); 649 } 650 651 li.completed .nav-arrow, .nav-pills.nav-wizard > li.completed:hover .nav-arrow { 652 border-color: transparent transparent transparent rgb(0, 166, 128)!important; 653 } 654 655 li.incomplete .nav-arrow, .nav-pills.nav-wizard > li.incomplete:hover .nav-arrow{ 656 border-color: transparent transparent transparent rgb(250, 250, 250)!important; 657 } 658 659 /* Default Colors */ 660 .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 { 661 background-color: rgb(0, 102, 153); 662 border-color: rgb(0, 102, 153); 663 color: rgb(255, 255, 255); 664 } 665 .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 { 666 background-color: rgba(0, 102, 153,0.95); 667 border-color: rgb(0, 102, 153); 668 color: rgb(255, 255, 255); 669 } 670 .panel-primary { 671 background-color: #d9e8f0; 672 border-color: rgb(0, 102, 153); 673 } 674 .bg-primary,.progress-bar-primary,.module p.bg-primary,.label-primary,.badge-primary,.pricing_menu .title.bg-primary, .
674well .well.bg-primary, .module .well.bg-primary, .well .module.bg-primary,.tab-content .module.bg-primary,.tab-content .well.bg-primary { 675 background-color: rgb(0, 102, 153); 676 color: rgb(255, 255, 255); 677 } 678 .bg-primary .badge { 679 background-color:rgb(255, 255, 255); 680 color: rgb(0, 102, 153); 681 } 682 .btn-primary.btn-outline { 683 background: transparent; 684 color: rgb(0, 102, 153); 685 transition: all 250ms ease-in-out 0ms; 686 } 687 .btn-primary.btn-outline:hover { 688 background: rgba(0, 102, 153,0.1); 689 color: rgb(0, 102, 153); 690 } 691 .alert-primary { 692 background-color:rgba(0, 102, 153,0.7); 693 border-color:rgba(0, 102, 153,0.2); 694 color: rgba(255, 255, 255,0.9); 695 } 696 .alert-primary-subtle, .label-primary-subtle, .badge-primary-subtle { 697 background-color: #cce0eb; 698 border-color: #cce0eb; 699 color: rgb(0, 102, 153); 700 color: color-mix(in srgb, rgb(0, 102, 153) 50%, rgb(44, 44, 44) 50%); 701 } 702 .btn.dropdown-toggle.btn-primary *, .btn-primary a { 703 color: rgb(255, 255, 255); 704 } 705 .text-primary{ 706 color: rgb(0, 102, 153); 707 } 708 .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 { 709 background-color: rgb(60, 187, 222); 710 border-color: rgb(60, 187, 222); 711 color: rgb(255, 255, 255); 712 } 713 .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 { 714 background-color: rgba(60, 187, 222,0.95); 715 border-color: rgb(60, 187, 222); 716 color: rgb(255, 255, 255); 717 } 718 .panel-info { 719 background-color: #e2f5fa; 720 border-color: rgb(60, 187, 222); 721 } 722 .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 { 723 background-color: rgb(60, 187, 222); 724 color: rgb(255, 255, 255); 725 } 726 .bg-info .badge { 727 background-color:rgb(255, 255, 255); 728 color: rgb(60, 187, 222); 729 } 730 .btn-info.btn-outline { 731 background: transparent; 732 color: rgb(60, 187, 222); 733 transition: all 250ms ease-in-out 0ms; 734 } 735 .btn-info.btn-outline:hover { 736 background: rgba(60, 187, 222,0.1); 737 color: rgb(60, 187, 222); 738 } 739 .alert-info { 740 background-color:rgba(60, 187, 222,0.7); 741 border-color:rgba(60, 187, 222,0.2); 742 color: rgba(255, 255, 255,0.9); 743 } 744 .alert-info-subtle, .label-info-subtle, .badge-info-subtle { 745 background-color: #d8f1f8; 746 border-color: #d8f1f8; 747 color: rgb(60, 187, 222); 748 color: color-mix(in srgb, rgb(60, 187, 222) 50%, rgb(44, 44, 44) 50%); 749 } 750 .btn.dropdown-toggle.btn-info *, .btn-info a { 751 color: rgb(255, 255, 255); 752 } 753 .text-info{ 754 color: rgb(60, 187, 222); 755 } 756 .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 { 757 background-color: rgb(71, 134, 141); 758 border-color: rgb(71, 134, 141); 759 color: rgb(255, 255, 255); 760 } 761 .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 { 762 background-color: rgba(71, 134, 141,0.95); 763 border-color: rgb(71, 134, 141); 764 color: rgb(255, 255, 255); 765 } 766 .panel-success { 767 background-color: #e3edee; 768 border-color: rgb(71, 134, 141); 769 } 770 .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 { 771 background-color: rgb(71, 134, 141); 772 color: rgb(255, 255, 255); 773 } 774 .bg-success .badge { 775 background-color: rgb(255, 255, 255); 776 color: rgb(71, 134, 141); 777 } 778 .btn-success.btn-outline { 779 background: transparent; 780 color: rgb(71, 134, 141); 781 transition: all 250ms ease-in-out 0ms; 782 } 783 .btn-success.btn-outline:hover { 784 background: rgba(71, 134, 141,0.1); 785 color: rgb(71, 134, 141); 786 } 787 .alert-success { 788 background-color:rgba(71, 134, 141,0.7); 789 border-color:rgba(71, 134, 141,0.2); 790 color: rgba(255, 255, 255,0.9); 791 } 792 .alert-success-subtle, .label-success-subtle, .badge-success-subtle { 793 background-color: #dae7e8; 794 border-color: #dae7e8; 795 color: rgb(71, 134, 141); 796 color: color-mix(in srgb, rgb(71, 134, 141) 50%, rgb(44, 44, 44) 50%); 797 } 798 .btn.dropdown-toggle.btn-success *, .btn-success a { 799 color: rgb(255, 255, 255); 800 } 801 .text-success{ 802 color: rgb(71, 134, 141); 803 } 804 .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 { 805 background-color: rgb(240, 52, 52); 806 border-color: rgb(240, 52, 52); 807 color: rgb(255, 255, 255); 808 } 809 .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 { 810 background-color: rgba(240, 52, 52,0.95); 811 border-color: rgb(240, 52, 52); 812 color: rgb(255, 255, 255); 813 } 814 .panel-warning { 815 background-color: #fde1e1; 816 border-color: rgb(240, 52, 52); 817 } 818 .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 { 819 background-color: rgb(240, 52, 52); 820 color: rgb(255, 255, 255); 821 } 822 .bg-warning .badge { 823 background-color: rgb(255, 255, 255); 824 color: rgb(240, 52, 52); 825 } 826 .btn-warning.btn-outline { 827 background: transparent; 828 color: rgb(240, 52, 52); 829 transition: all 250ms ease-in-out 0ms; 830 } 831 .btn-warning.btn-outline:hover { 832 background: rgba(240, 52, 52,0.1); 833 color: rgb(240, 52, 52); 834 } 835 .alert-warning { 836 background-color:rgba(240, 52, 52,0.7); 837 border-color:rgba(240, 52, 52,0.2); 838 color: rgba(255, 255, 255,0.9); 839 } 840 .alert-warning-subtle, .label-warning-subtle, .badge-warning-subtle { 841 background-color: #fcd6d6; 842 border-color: #fcd6d6; 843 color: rgb(240, 52, 52); 844 color: color-mix(in srgb, rgb(240, 52, 52) 50%, rgb(44, 44, 44) 50%); 845 } 846 .btn.dropdown-toggle.btn-warning *, .btn-warning a { 847 color: rgb(255, 255, 255); 848 } 849 .text-warning { 850 color: rgb(240, 52, 52); 851 } 852 .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 { 853 background-color: rgb(240, 52, 52); 854 border-color: rgb(240, 52, 52); 855 color: rgb(255, 255, 255); 856 } 857 .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 { 858 background-color: rgba(240, 52, 52,0.95); 859 border-color: rgb(240, 52, 52); 860 color: rgb(255, 255, 255); 861 } 862 .has-error .form-control { 863 border-color: rgb(240, 52, 52); 864 } 865 .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 { 866 background: rgb(240, 52, 52); 867 color: rgb(255, 255, 255) !important; 868 } 869 .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 { 870 color: rgb(240, 52, 52); 871 } 872 .panel-danger { 873 background-color: #fde1e1; 874 border-color: rgb(240, 52, 52); 875 } 876 .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 { 877 background-color: rgb(240, 52, 52); 878 color: rgb(255, 255, 255); 879 } 880 .bg-danger .badge { 881 background-color: rgb(255, 255, 255); 882 color: rgb(240, 52, 52); 883 } 884 .btn-danger.btn-outline { 885 background: transparent; 886 color: rgb(240, 52, 52); 887 transition: all 250ms ease-in-out 0ms; 888 } 889 .btn-danger.btn-outline:hover { 890 background: rgba(240, 52, 52,0.1); 891 color: rgb(240, 52, 52); 892 } 893 .alert-danger { 894 background-color:rgba(240, 52, 52,0.7); 895 border-color:rgba(240, 52, 52,0.2); 896 color: rgba(255, 255, 255,0.9); 897 } 898 .alert-danger-subtle, .label-danger-subtle, .badge-danger-subtle { 899 background-color: #fcd6d6; 900 border-color: #fcd6d6; 901 color: rgb(240, 52, 52); 902 color: color-mix(in srgb, rgb(240, 52, 52) 50%, rgb(44, 44, 44) 50%); 903 } 904 .btn.dropdown-toggle.btn-danger *, .btn-danger a { 905 color: rgb(255, 255, 255); 906 } 907 .text-danger{ 908 color: rgb(240, 52, 52); 909 } 910 .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
910s, 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 { 911 background-color: rgb(245, 245, 245); 912 border-color: rgb(245, 245, 245); 913 color: rgb(85, 85, 85); 914 } 915 .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 { 916 background-color: rgba(245, 245, 245,0.95); 917 border-color: rgb(245, 245, 245); 918 color: rgb(85, 85, 85); 919 } 920 .sidemenu_panel .panel-default .panel_heading { 921 background-color: rgb(245, 245, 245)!important; 922 border-color: rgb(245, 245, 245)!important; 923 color: rgb(85, 85, 85)!important; 924 } 925 .panel-default .panel-heading, .member_accounts .panel-default > .panel-heading, .panel-default.categories-panel .panel-heading { 926 927 box-shadow: 0 0 1000px 0 rgba(85, 85, 85,0.02) inset; 928 background-color: rgb(245, 245, 245); 929 } 930 .panel-default, .member_accounts .panel-default { 931 932 background-color: rgba(245, 245, 245,0.15); 933 border-color: #fefefe; 934 border-color: color-mix(in srgb,rgb(245, 245, 245) 100%,rgba(245, 245, 245) 10%); 935 } 936 .member_admin_sidemenu .panel-default { 937 background-color: transparent; 938 } 939 .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 { 940 background-color: rgb(245, 245, 245); 941 color: rgb(85, 85, 85); 942 } 943 .bg-default .badge { 944 background-color: rgb(85, 85, 85); 945 color: rgb(245, 245, 245); 946 } 947 .btn-default.btn-outline { 948 background: transparent; 949 color: rgb(245, 245, 245); 950 transition: all 250ms ease-in-out 0ms; 951 } 952 .btn-default.btn-outline:hover { 953 background: rgba(245, 245, 245,0.1); 954 color: rgb(245, 245, 245); 955 } 956 .alert-default { 957 background-color:rgb(245, 245, 245); 958 border-color:rgb(245, 245, 245); 959 color: rgb(85, 85, 85); 960 } 961 .alert-default-subtle, .label-default-subtle, .badge-default-subtle { 962 background-color:rgba(245, 245, 245,0.5); 963 border-color: rgba(245, 245, 245,0.5); 964 color: rgb(85, 85, 85); 965 color: color-mix(in srgb, rgb(85, 85, 85) 50%, rgb(44, 44, 44) 50%); 966 } 967 .btn.dropdown-toggle.btn-default *, .btn-default a { 968 color: rgb(85, 85, 85); 969 } 970 .text-default{ 971 color: rgb(245, 245, 245); 972 } 973 .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 { 974 background-color: rgb(44, 44, 44); 975 border: 1px solid rgb(44, 44, 44); 976 color: rgb(255, 255, 255); 977 } 978 .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 { 979 background-color: rgba(44, 44, 44,0.95); 980 border-color: rgb(44, 44, 44); 981 color: rgb(255, 255, 255); 982 } 983 .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 { 984 background-color: rgb(44, 44, 44); 985 color: rgb(255, 255, 255); 986 } 987 .bg-secondary .badge { 988 background-color:rgb(255, 255, 255); 989 color: rgb(44, 44, 44); 990 } 991 .btn-secondary.btn-outline { 992 background: transparent; 993 color: rgb(44, 44, 44); 994 transition: all 250ms ease-in-out 0ms; 995 } 996 .btn-secondary.btn-outline:hover { 997 background: rgba(44, 44, 44,0.1); 998 color: rgb(44, 44, 44); 999 } 1000 .panel-secondary { 1001 background-color: #dfdfdf; 1002 border-color: rgb(44, 44, 44); 1003 } 1004 .alert-secondary { 1005 background-color:rgb(44, 44, 44); 1006 border-color:rgb(44, 44, 44); 1007 color: rgb(255, 255, 255); 1008 } 1009 .alert-secondary-subtle, .label-secondary-subtle, .badge-secondary-subtle { 1010 background-color:rgba(44, 44, 44,0.8); 1011 border-color: rgba(44, 44, 44,0.5);
1012 color: rgb(255, 255, 255); 1013 } 1014 .btn-outline { 1015 -webkit-backdrop-filter: blur(5px); 1016 backdrop-filter: blur(5px); 1017 } 1018 .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 { 1019 background-color: rgb(255, 255, 255); 1020 border: 1px solid rgb(255, 255, 255); 1021 color: rgb(44, 44, 44); 1022 } 1023 .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 { 1024 background-color: rgba(255, 255, 255,0.95); 1025 border: 1px solid rgb(255, 255, 255); 1026 color: rgb(44, 44, 44); 1027 } 1028 .btn.btn-body.dropdown-toggle * { 1029 color: rgb(44, 44, 44) 1030 } 1031 .btn-body.dropdown-toggle + ul li, .daterangepicker .ranges { 1032 color: #333; 1033 } 1034 .bg-body { 1035 background: rgb(255, 255, 255); 1036 color: rgb(44, 44, 44); 1037 } 1038 .bg-content-box { 1039 background: rgb(245, 245, 245); 1040 color: rgb(41, 41, 41); 1041 } 1042 .bg-content-box-border { 1043 background: rgb(221, 221, 221); 1044 } 1045 .btn.dropdown-toggle.btn-secondary *, .btn-secondary a { 1046 color: rgb(255, 255, 255); 1047 } 1048 .text-secondary { 1049 color: rgb(44, 44, 44); 1050 } 1051 .text-body { 1052 color: rgb(255, 255, 255); 1053 } 1054 .feature-post #post-content .alert-secondary.btn-block, .feature-search .img_section .alert-secondary.btn-block, .search_result .img_section .alert-secondary { 1055 border-radius: 10px; 1056 background-color: rgba(44, 44, 44,0.2); 1057 } 1058 1059 /* Footer Newsletter Row */ 1060 .newsletter_row .alert { 1061 color: rgb(255, 255, 255); 1062 } 1063 .newsletter_row { 1064 background-color: rgb(0, 102, 153); 1065 color: rgb(255, 255, 255); 1066 } 1067 .newsletter_row input[type="submit"],.newsletter_footer_button { 1068 background-color: rgba(0, 166, 128,0.97); 1069 color: rgb(255, 255, 255); 1070 border-color: rgb(0, 166, 128); 1071 } 1072 .newsletter_row input[type="submit"]:hover,.newsletter_row input[type="submit"]:focus,.newsletter_footer_button:hover,.newsletter_footer_button:focus { 1073 background-color: rgb(0, 166, 128); 1074 color: rgb(255, 255, 255); 1075 } 1076 .newsletter_button_left { 1077 border-right: 1px solid rgba(255, 255, 255,0.2); 1078 } 1079 .newsletter_button_right { 1080 border-left: 1px solid rgba(255, 255, 255,0.2); 1081 } 1082 .newsletter_row small.help-block { 1083 background: rgb(255, 255, 255); 1084 margin-top: -5px; 1085 float: left; 1086 padding: 8px; 1087 border-radius: 1px; 1088 color: rgb(0, 102, 153); 1089 text-transform: capitalize; 1090 } 1091 .newsletter_row .has-success .checkbox,.newsletter_row .has-error .checkbox{ 1092 color: rgb(255, 255, 255); 1093 } 1094 @media only screen and (max-width: 767px) { 1095 .newsletter_button_right,.newsletter_button_left{ 1096 border: none; 1097 margin: 5px 0; 1098 } 1099 } 1100 1101 /* Font Sizes */ 1102 1103 .navbar-default .navbar-nav > li > a, .navbar-default .navbar-nav > li > span { 1104 font-size: 16px; 1105 } 1106 .header .logo { 1107 font-size: 36px; 1108 } 1109 .homepage_title h1, .homepage_settings h1 { 1110 letter-spacing: -1px; 1111 font-size: 80px; 1112 margin-bottom: 20px; 1113 } 1114 @media only screen and (max-width: 768px) { 1115 .homepage_title h1, .homepage_settings h1 {margin-bottom: 15px;} 1116 } 1117 .homepage_settings h2 { 1118 font-size: 28px; 1119 } 1120 1121 .ui-rangeSlider-bar{ 1122 background: rgb(0, 102, 153)!important; 1123 } 1124 1125 1126 1127 @media only screen and (max-width: 1024px){ 1128 .modal {margin-top: 40px;} 1129 } 1130 @media only screen and (max-width: 768px){ 1131 .modal {margin-top: 60px;} 1132 } 1133 1134 /* Calendar Styles */ 1135 1136 #cal-slide-content { 1137 color: rgb(85, 85, 85)!important; 1138 background-color: rgb(245, 245, 245)!important; 1139 -webkit-box-shadow: none!important; 1140 box-shadow: none!important; 1141 } 1142 #cal-slide-content a.event-item { 1143 color: rgb(85, 85, 85)!important; 1144 font-weight:bold!important; 1145 } 1146 #cal-slide-content a.event-item small { 1147 display: inline-block; 1148 } 1149 .cal-month-box, .cal-year-box, .cal-week-box { 1150 border: 1px solid rgb(221, 221, 221)!important; 1151 } 1152 .cal-year-box .row-fluid, .cal-month-box .cal-row-fluid { 1153 border-bottom: 1px solid rgb(221, 221, 221)!important; 1154 } 1155 .cal-year-box [class*="span"], .cal-month-box [class*="cal-cell"] { 1156 border-right: 1px solid rgb(221, 221, 221)!important; 1157 } 1158 .cal-year-box .row-fluid, .cal-row-fluid, #cal-day-box .cal-day-hour:nth-child(odd) { 1159 background-color: rgb(255, 255, 255)!important; 1160 } 1161 .cal-month-day span:not(.pull-right):not(.events-count-label):not(.events-label) { 1162 color: rgb(85, 85, 85)!important; 1163 } 1164 .cal-day-today span[data-cal-date] { 1165 color: rgb(44, 44, 44)!important; 1166 } 1167 .cal-year-box .row-fluid [class*="span"]:last-child, .cal-month-box .cal-row-fluid [class*="cal-cell"]:last-child { 1168 border: 0!important; 1169 } 1170 .cal-row-head { 1171 background: rgb(245, 245, 245)!important; 1172 } 1173 .day-highlight:hover, .day-highlight { 1174 background-color: rgb(221, 221, 221)!important; 1175 } 1176 .cal-event-list .event.pull-left { 1177 background-color: rgb(44, 44, 44)!important; 1178 opacity: 0.4; 1179 margin-top: 7px!important; 1180 } 1181 .cal-day-today { 1182 background-color: rgb(221, 221, 221)!important; 1183 } 1184 #cal-day-tick { 1185 border: 1px solid rgb(221, 221, 221)!important; 1186 background-color: rgb(221, 221, 221)!important; 1187 } 1188 .cal-day-weekend span[data-cal-date]{
1189 color: rgb(44, 44, 44)!important; 1190 } 1191 .rsDefault, .rsDefault .rsOverflow, .rsDefault .rsSlide, .rsDefault .rsVideoFrameHolder, .rsDefault .rsThumbs { 1192 border-radius: 10px; 1193 background: #151515!important; 1194 } 1195 .img_section .no-radius-bottom + .alert-secondary .rsDefault .rsSlide, .img_section .no-radius-bottom + .alert-secondary .rsDefault .rsOverflow { 1196 border-radius:0; 1197 } 1198 1199 #first_container .favorite, #first_container .fa.favorite { 1200 color: rgb(170, 184, 194); 1201 background: rgb(245, 245, 245); 1202 border: 1px solid rgb(245, 245, 245); 1203 white-space:nowrap!important; 1204 height:24px; 1205 padding:0 6px; 1206 border-radius:8px; 1207 } 1208 #first_container .favorite span, #first_container .fa.favorite span { 1209 font-family: 'Cabin'; 1210 white-space:nowrap!important; 1211 } 1212 #first_container .favoriteActive:not(.favorite.comments-count-badge), #first_container .fa.favoriteActive:not(.favorite.comments-count-badge .fa) { 1213 color: rgb(226, 38, 77); 1214 } 1215 #first_container .favorite::after, #first_container .fa.favorite::after { 1216 font-family: 'Cabin'; 1217 margin-left: 3px; 1218 } 1219 #first_container .favorite span, #first_container .fa.favorite span{ 1220 padding-left: 4px; 1221 font-family: 'Cabin'; 1222 font-size: 11px; 1223 letter-spacing:.5px; 1224 top:-1px; 1225 position:relative; 1226 font-weight:700; 1227 } 1228 #first_container .favorite span:empty, #first_container .fa.favorite span:empty { 1229 padding: 0; 1230 } 1231 #first_container .favorite .bookmark-number, #first_container .fa.favorite .bookmark-number { 1232 padding: 1px 0; 1233 border-radius: 100px; 1234 display: inline-block; 1235 font-weight: bold; 1236 min-width: 15px; 1237 font-size: .8em; 1238 vertical-align: bottom; 1239 height: 15px; 1240 line-height: 13px; 1241 margin-left: 3px; 1242 text-align: center; 1243 } 1244 #first_container .favorite.favoriteActive .bookmark-number:not(.comments-count-badge .bookmark-number), #first_container .fa.favorite.favoriteActive .bookmark-number { 1245 background: rgb(226, 38, 77); 1246 color: #fff; 1247 } 1248 1249 span.checkbox_value::after { 1250 content: ', '; 1251 } 1252 1253 span.checkbox_value:last-child::after { 1254 content: ''; 1255 } 1256 1257 .member_results .grid_element{ 1258 position:relative; 1259 overflow:hidden; 1260 display: inline-block; 1261 width:100%; 1262} 1263.member_results .grid_element::before { 1264 position: absolute; 1265 top: 24px; 1266 text-align: center; 1267 width: 200px; 1268 left: -62px; 1269 transform: rotate(-45deg); 1270 -webkit-transform: rotate(-45deg); 1271 z-index: 1; 1272 line-height: 1.2em; 1273 padding: 6px 0; 1274 font-weight: bold; 1275 letter-spacing: 1px; 1276} 1277@media only screen and (max-width: 767px) { 1278 .member_results .grid-container > hr { 1279 border-color: transparent; 1280 } 1281 .member_results .grid_element{ 1282 overflow:visible; 1283 } 1284 .member_results .grid_element::before { 1285 top: -19px!important; 1286 transform: rotate(0deg); 1287 -webkit-transform: rotate(0deg); 1288 font-size: 10px !important; 1289 letter-spacing: 0; 1290 width: auto; 1291 padding: 3px 6px; 1292 } 1293} 1294 1295 1296 1297 1298 1299 /* Homepage Sections Background Color Logic */ 1300 1301 1302 .homepage-section-1 { 1303 padding: 40px 0 40px; 1304 } 1305 1306 1307 .homepage-section-1 { 1308 background: rgb(75, 183, 179); 1309 } 1310 1311 1312 .homepage-section-2 { 1313 padding: 40px 0 40px; 1314 } 1315 1316 1317 .homepage-section-3 { 1318 padding: 40px 0 40px; 1319 } 1320 1321 1322 .homepage-section-4 { 1323 padding: 40px 0 40px; 1324 } 1325 1326 1327 .homepage-section-5 { 1328 padding: 40px 0 40px; 1329 } 1330 1331 1332 .homepage-section-6 { 1333 padding: 40px 0 40px; 1334 } 1335 1336 1337 .homepage-section-7 { 1338 padding: 40px 0 40px; 1339 } 1340 1341 1342 .homepage-section-8 { 1343 padding: 40px 0 40px; 1344 } 1345 1346 1347 .homepage-section-9 { 1348 padding: 40px 0 40px; 1349 } 1350 1351 1352 .homepage-section-10 { 1353 padding: 40px 0 40px; 1354 } 1355 1356 1357 .homepage-section-11 { 1358 padding: 40px 0 40px; 1359 } 1360 1361 1362 .homepage-section-12 { 1363 padding: 40px 0 40px; 1364 } 1365 1366 1367 .homepage-section-13 { 1368 padding: 40px 0 40px; 1369 } 1370 1371 1372 .homepage-section-14 { 1373 padding: 40px 0 40px; 1374 } 1375 1376 1377 .homepage-section-15 { 1378 padding: 40px 0 40px; 1379 } 1380 1381 1382 /* Additional Settings */ 1383 1384 1385 /* Streaming Widgets Title Settings */ 1386 1387 .streaming-title { 1388 text-align: left; 1389 font-size: 48px; 1390 line-height:1.5em; 1391 font-weight: normal; 1392 font-family: 'Roboto'; 1393 padding-bottom: 60px; 1394 } 1395 1396 @media only screen and (max-width: 990px) { 1397 .streaming-title { 1398 line-height:1.1em; 1399 } 1400 } 1401 1402 .streaming-title + hr { 1403 display: none; 1404 } 1405 1406 .homepage-join-module .module h2:first-of-type { 1407 color: rgb(62, 62, 62); 1408 } 1409 1410 .homepage-join-module .module{ 1411 background: rgb(238, 238, 238); 1412 border-color: rgb(75, 183, 179); 1413 } 1414 1415 .homepage-about-module .module h2:first-of-type { 1416 color: rgb(62, 62, 62); 1417 } 1418 1419 .homepage-about-module .module{ 1420 background: rgb(238, 238, 238); 1421 border-color: rgb(75, 183, 179); 1422 1423 } 1424 1425 .the-post-description > :is(h2, h3, h4, h5):not(:first-child) { 1426 font-weight: 600; 1427 margin-top: 20px; 1428 } 1429 1430 /* Keep: Ensure ul/ol respect padding and margins */ 1431 .the-post-description > :is(ul, ol) { 1432 display: flow-root; 1433 } 1434 .the-post-description li { 1435 margin-bottom: 8px; 1436 } 1437
1438 .btn:not(#refcode_submit):not(.input-group-btn .btn):not(.logo-preview-input):not(.cover-preview-input):not(.member_login):not(.img-circle):not(.submit_reply):not(.submit_comment):not(.view-more):not(.image-preview-input):not(.no-radius-bottom):not(.no-radius-top):not(.btn-facebook), .btn-sm:not(.img-circle):not(.view-more):not(.image-preview-input):not(.no-radius-bottom):not(.no-radius-top), .btn-xs:not(.img-circle):not(.view-more):not(.image-preview-input):not(.no-radius-bottom):not(.no-radius-top), button:not(.social_share_buttons button):not(.social_share_buttons a):not(#refcode_submit):not(.input-group-btn button), .btn-group-lg > .btn, .btn-lg, .btn-lg, .btn-xl, .input-group-sm > .input-group-btn > .btn, .favorite, .tags a, select#sid.input-lg, select#tid.input-lg, select#ttid.input-lg, select.combobox.input-lg, select#bd-chained.input-lg, select#category-chained.input-lg, select.infinite-chained.input-lg, select.subcategory-chained.input-lg, select.search-chained.input-lg, select#country-chained.input-lg, select#state-chained.input-lg, select#country-chained-2.input-lg, select#state-chained-2.input-lg, select#profession_id.input-lg, [name^="bd_phone_country_code"].input-lg, select.input-lg, select#sid, select#tid, select#ttid, select.combobox, select#bd-chained, select#category-chained, select.infinite-chained, select.subcategory-chained, select.search-chained, select#country-chained, select#state-chained, select#country-chained-2, select#state-chained-2, select#profession_id, [name^="bd_phone_country_code"] { 1439 border-radius: 0px!important; 1440 } 1441 1442 .write_comment_container, .tab-content, .well:not(.well .well):not(.module .well):not(.tab-content .well):not(.well.make-connection):not(.slick-slide .well), .module:not(.module .module):not(.well .module):not(.tab-content .module):not(.search_box .module):not(.posted-by-snippet), .panel, .pic:not(.slick-slide .pic), .member_accounts > .account-form-box { 1443 box-shadow: 0 8px 8px -4px #0000001a,0 4px 4px -4px #0000001a; 1444 } 1445 1446 .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 { 1447 border-radius:1000px!important; 1448 } 1449 1450 .img-rounded img, img.fr-dib.img-rounded{ 1451 border-radius: 10px!important; 1452 } 1453 1454 /* Google Translate Module */ 1455 .skiptranslate{font-size:0} 1456 .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} 1457 .skiptranslate.goog-te-gadget span,img.goog-te-gadget-icon{display:none!important} 1458 .goog-te-gadget .goog-te-combo{margin-bottom:-4px} 1459 .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)} 1460 @media only screen and (max-width: 1100px) { 1461 .skiptranslate:not(.skiptranslate[style="display: none;"]){height:39px} 1462 .skiptranslate:not(.skiptranslate[style="display: none;"]) ~ .header{margin-top:10px!important} 1463 .skiptranslate:not(.skiptranslate[style="display: none;"]) ~ .announcement-bar{margin-top:10px} 1464 .skiptranslate:not(.skiptranslate[style="display: none;"]) ~ .announcement-bar ~ .header{margin-top:0!important} 1465 .skiptranslate:not(.skiptranslate[style="display: none;"]) ~ .header .mobile-main-menu{top:89px!important;height:calc(100% - 90px)!important} 1466 .skiptranslate:not(.skiptranslate[style="display: none;"]) ~ .header .navbar{top:39px} 1467 .skiptranslate:not(.skiptranslate[style="display: none;"]) ~ #first_container .member_sidebar.open{top: 89px;} 1468 } 1469 @media only screen and (max-width: 767px) { 1470 .skiptranslate:not(.skiptranslate[style="display: none;"]) ~ .announcement-bar.hidden-xs ~ .header{margin-top:10px!important} 1471 } 1472 1473 1474 1475</style> 1476 1477 <!-- ON-PAGE CSS FUNCTIONS --> 1478 <style type="text/css"> 1479 .search-con { 1480 font-size: 18px; 1481 font-weight: 600px; 1482 color: rgb(255, 255, 255); 1483 1484} 1485.TopSection { 1486 padding-top: 10px; 1487 border: 3px outset Silver; 1488 background-color: LightSlateGray; 1489 text-align: center; 1490 margin: auto; 1491 display: block !important; 1492 font-size: 20px; 1493} 1494.con-us { 1495 font-size: 18px; 1496 font-weight: 600px; 1497 color: rgb(255, 255, 255); 1498 1499} 1500.m-t-li { 1501 margin-bottom: 5px; 1502} 1503.footer-mg{ 1504 margin-top: 2rem; 1505} 1506 1507 1508/* 1509#hero-divider .btn{ 1510 background: transparent; 1511 border-color: #fff; 1512}
1513body, .modal-header, .modal-content, .modal-body, .modal-footer{ 1514 line-height: 1.6em; 1515 letter-spacing: 0.5px; 1516} 1517p{ 1518 margin-bottom: 20px !important; 1519} 1520.spacialimg{ 1521 border: 3px solid rgb(116, 121, 125); 1522 padding: 7px; 1523 border-radius: 10px; 1524 box-shadow: 0px 1px 8px 2px #707070; 1525 margin-bottom: 10px; 1526} 1527.feature-search .img_section .alert-secondary.btn-block, .search_result .img_section .alert-secondary { 1528 border: 3px solid rgb(116, 121, 125); 1529 padding: 7px; 1530 border-radius: 10px; 1531 box-shadow: 0px 0px 5px 0px #707070; 1532 margin-bottom: 10px; 1533} 1534.search_result.member-level-4 .mid_section a.h3{ 1535 border-bottom: 1px solid #ddd; 1536 display: block; 1537 padding-bottom: 10px; 1538 margin-top: 5%; 1539} 1540.search_result.member-level-4 .mid_section{ 1541 padding-left:4%; 1542} 1543.footer{ 1544 padding:0px; 1545} 1546.footer_menu li{ 1547 display:none; 1548} 1549.footer_menu li.col-md-12:last-child,.footer_menu li.col-md-12:last-child li{ 1550 display:inline-block; 1551} 1552.footer_menu ul{ 1553 margin-bottom: 0px; 1554} 1555.homepage_steps .fa { 1556 font-size: 35px; 1557} 1558.homepage_steps { 1559 font-size: 15px; 1560 padding: 60px 0; 1561} 1562.clearfix-lg { 1563 display:none; 1564} 1565.homepage-section-2, .homepage-section-3, .homepage-section-4{ 1566 padding: 60px 0; 1567} 1568.recent-member img.img-rounded{ 1569 border-radius:0!important; 1570} 1571.visit-westminster-quote{ 1572 padding: 50px 0; 1573 font-size: 34px; 1574 line-height: normal; 1575} 1576.visit-westminster-section2 { 1577 background: #FCF8ED; 1578 display: inline-block; 1579 width: 100%; 1580} 1581.visit-westminster-section2 h2 { 1582 text-align: center; 1583 margin-top: 50px; 1584 color: #bc9b5d; 1585 font-size: 60px; 1586} 1587.visit-westminster-section2 h5 { 1588 text-align: center; 1589 font-size: 16px; 1590 color: #3983BD; 1591 margin-bottom: 20px; 1592} 1593.recent-member .well a.h4{ 1594 color:rgb(41,41,41); 1595} 1596.shopping-section-common img{ 1597 width:100%; 1598} 1599.shopping-section-common h2{ 1600 margin-top: 50px; 1601 text-align: center; 1602} 1603.shopping-section-common h4 { 1604 text-align: center; 1605 font-size: 15px; 1606 text-transform: uppercase; 1607 margin-bottom: 20px; 1608} 1609.shopping-section-common { 1610 display: inline-block; 1611 width: 100%; 1612} 1613.tourist-info-section2 .col-md-4.text-right img{ 1614 height:571px; 1615} 1616.stay-carousel { 1617 height: 400px; 1618 margin: 0 auto; 1619 overflow: hidden; 1620 max-width: 700px; 1621 width:100%; 1622 margin-bottom:20px; 1623} 1624.stay-carousel .item img{ 1625 width:100%; 1626} 1627.about-section-common { 1628 display: inline-block; 1629 width: 100%; 1630} 1631.about-section1, .about-section3 { 1632 background: #EAF4F6; 1633} 1634 1635 1636 1637 1638about-section1 img{ 1639 width:100%; 1640} 1641.about-section3-bck { 1642 background: url(/images/about2.webp); 1643 background-repeat: repeat; 1644 background-size: auto; 1645 background-position: center center; 1646 height:900px; 1647 margin-bottom: 50px; 1648} 1649.board-directors-section-common { 1650 display: inline-block; 1651 width: 100%; 1652 margin-top: 20px; 1653} 1654.board-directors-section-common p span { 1655 display: inline-block; 1656 width: 100%; 1657} 1658.board-directors-section-common .col-md-12 { 1659 max-width: 768px; 1660 margin: 10px auto; 1661 position: relative; 1662 float: none; 1663 width:100%; 1664} 1665.city-council-section-common { 1666 display: inline-block; 1667 width: 100%; 1668 padding: 40px 0; 1669} 1670.city-directory-section-common{ 1671 display: inline-block; 1672 width: 100%; 1673 padding: 40px 0; 1674} 1675.city-directory-bottom-section{ 1676 margin-top: 40px; 1677} 1678.city-directory-section-common span{ 1679 display: inline-block; 1680 width: 100%; 1681} 1682.city-directory-section-common h3 { 1683 margin-top: 25px; 1684 display: inline-block; 1685width: 100%; 1686} 1687.city-council-section-common span{ 1688 display: inline-block; 1689width: 100%; 1690} 1691.member-directory .col-md-3{ 1692 margin-bottom: 10px; 1693} 1694 1695 1696.fr-view .fr-img-caption .fr-img-wrap .custom-img{ 1697 1698 width: 60%; 1699} 1700 1701 1702@media only screen and (max-width: 767px) { 1703 #website_logo{ 1704 margin-top:20px; 1705 } 1706 1707 .fr-view table{ 1708 text-align: center; 1709 } 1710 1711 .fr-view .froala-table .second-row{ 1712 display: flex; 1713 flex-direction: column-reverse; 1714 1715 1716 } 1717 1718 .header .navbar-default{ 1719 1720 background-color: #F2F2F2; 1721} 1722 1723 .footer{ 1724 background-color: #3A3A3A; 1725 1726 } 1727 1728} 1729*/ 1730.container.d-flex.main-class { 1731 margin-top: -20px; 1732 margin-left: -20px; 1733} 1734/*@media only screen and (max-width: 705px) { 1735 .card { 1736 width: 30px; 1737} 1738}*/ 1739/*@media only screen and (max-width: 470px) { 1740 .card { 1741 padding-top: 3px; 1742} 1743}*/ 1744@media only screen and (min-width: 650px) { 1745img.card-icons { 1746 min-width: 50px; 1747} 1748} 1749@media only screen and (max-width: 649px) { 1750img.card-icons { 1751 min-width: 30px; 1752} 1753} 1754.col-md-6.col-sm-6.col-xs-6.d-flex.justify-content-end { 1755 display: flex; 1756} 1757@media only screen and (max-width: 370px) { 1758.card { 1759 margin-left: -30px; 1760} 1761} </style> 1762 <!-- Best of Westminster 2026 voting banner - added 2026-07-15 --> 1763<style> 1764@keyframes bow2026-nudge { 0%,100% { transform: translateX(0); } 50% { transform: translateX(7px); } } 1765#bow2026-banner .bow2026-finger { display:inline-block; animation: bow2026-nudge 1s ease-in-out infinite; vertical-align:middle; font-size:20px; margin:0 4px 0 10px; } 1766@media (prefers-reduced-motion: reduce) { #bow2026-banner .bow2026-finger { animation: none; } } 1767#bow2026-banner { position: -webkit-sticky; position: sticky; top: 0; } 1768.bow2026-menu-close { display: none !important; } 1769@media only screen and (max-width: 1100px) { 1770 html { background: #ffffff; } 1771 #bow2026-banner { position: fixed; top: 0; left: 0; right: 0; z-index: 3001; } 1772 .header nav.navbar-default { top: var(--bow2026-h, 42px); background: transparent; border: none; box-shadow: none; } 1773 .header nav.navbar-default .navbar-header { position: relative; z-index: 99999; } 1774 .header nav.navbar-default .navbar-toggle { background-color: #1e5c63; border-color: rgba(255,255,255,0.55); margin-right: 10px; position: relative; z-index: 99999; }
1775 .header nav.navbar-default .navbar-toggle .icon-bar { background-color: #ffffff; } 1776 .header nav.navbar-default .navbar-collapse { background-color: #1e5c63; border: none; } 1777 .header { margin-top: calc(50px + var(--bow2026-h, 42px)); } 1778 .mobile-main-menu { top: calc(var(--bow2026-h, 42px) + 50px) !important; height: calc(100vh - var(--bow2026-h, 42px) - 50px) !important; } 1779 .bow2026-menu-close { display: block !important; background: rgba(0,0,0,0.28) !important; border-bottom: 1px solid rgba(255,255,255,0.35); position: relative; min-height: 44px; } 1780 .bow2026-menu-close::before { content: "â Close Menu"; color: #ffffff; font-weight: bold; display: inline-block; padding: 12px 0 12px 10px; } 1781 .bow2026-menu-close a { position: absolute !important; top: 0; left: 0; width: 100% !important; height: 100%; padding: 0 !important; float: none !important; margin: 0 !important; } 1782} 1783</style> 1784<div id="bow2026-banner" style="background:#1e5c63;color:#ffffff;text-align:center;padding:10px 14px;font-size:15px;line-height:1.6;z-index:9999;"> 1785 <span style="vertical-align:middle;">ð <strong>Best of Westminster 2026</strong> â Help your favorite local businesses win!</span><span class="bow2026-finger">ð</span><a href="https://www.surveymonkey.com/r/BestofWestminster2026" target="_blank" rel="noopener" style="display:inline-block;background:#e8262c;color:#ffffff;font-weight:bold;text-decoration:none;padding:4px 18px;border-radius:4px;vertical-align:middle;white-space:nowrap;">Vote Now</a> 1786</div>
1787<script> 1788(function(){ 1789 function bowSize(){ var b=document.getElementById("bow2026-banner"); if(!b) return; 1790 document.documentElement.style.setProperty("--bow2026-h", b.offsetHeight+"px"); } 1791 function bowClose(){ 1792 var lists=document.querySelectorAll(".header .mobile-main-menu ul.sidebar-nav, .header nav.navbar-default .navbar-collapse ul.navbar-nav"); 1793 for(var i=0;i<lists.length;i++){ 1794 var ul=lists[i]; 1795 var li=ul.querySelector(".bow2026-menu-close"); 1796 if(!li){ 1797 li=document.createElement("li"); 1798 li.className="bow2026-menu-close"; 1799 var a=document.createElement("a"); 1800 a.href="#"; a.setAttribute("aria-label","Close Menu"); 1801 li.appendChild(a); 1802 var cf=document.createElement("div"); cf.className="clearfix"; li.appendChild(cf); 1803 } 1804 if(ul.firstElementChild!==li){ ul.insertBefore(li, ul.firstChild); } 1805 li.style.setProperty("display","block","important"); 1806 var la=li.querySelector("a"); 1807 if(la){ if(la.firstChild){ la.textContent=""; } la.style.setProperty("display","block","important"); } 1808 var homeA=ul.querySelector('a[href="/home"]'); 1809 if(homeA){ 1810 homeA.style.setProperty("display","inline-block","important"); 1811 if(homeA.parentElement && homeA.parentElement.tagName==="LI"){ homeA.parentElement.style.setProperty("display","block","important"); } 1812 } 1813 var kids=ul.children; 1814 for(var k=0;k<kids.length;k++){ 1815 if(kids[k]!==li && kids[k].style && kids[k].style.display==="none"){ kids[k].style.setProperty("display","block","important"); } 1816 } 1817 } 1818 } 1819 function bowInit(){ bowSize(); bowClose(); } 1820 window.addEventListener("resize", bowSize); 1821 window.addEventListener("load", bowInit); 1822 setTimeout(bowInit, 2000); 1823 document.addEventListener("click", function(e){ if(e.target && e.target.closest && e.target.closest(".navbar-toggle")){ setTimeout(bowClose, 400); } }); 1824 /* bow2026-delegated */ 1825 document.addEventListener("click", function(e){ var c=(e.target && e.target.closest) ? e.target.closest(".bow2026-menu-close") : null; if(c){ e.preventDefault(); var t=document.querySelector(".header nav.navbar-default .navbar-toggle"); if(t){ t.click(); } } }, true); 1826 document.addEventListener("DOMContentLoaded", bowInit); 1827 bowInit(); 1828})(); 1829</script>
1829 1830<!-- End Best of Westminster 2026 banner --> 1831<div class="header"> 1832 <div class="container"> 1833 <div class="row header-main-row"> 1834 <style type='text/css'> .logo-text:has(.logo_title:empty) { 1835 display:none 1836} </style><div id="website_logo" class="col-md-5 xs-nopad xs-hpad sm-text-center xs-bmargin header-left-container"> 1837 <a class="logo logo-image inline-block vpad sm-nopad sm-tmargin" href="https://www.westminsterchamber.org" title="Westminster Chamber of Commerce"> 1838 <img width="450" height="65" src="/images/Logo/change-logo.png" alt="Westminster Chamber of Commerce"> 1839 </a> 1840 <div class="clearfix"></div> 1841</div> 1842 <style type='text/css'> body input.tt-hint,body input.form-control.normal-autosuggest-input.tt-query { 1843 background-color: white !important; 1844} 1845.mini-nav:not(:has(li)) { 1846 display: none!important; 1847} 1848/* Parent Container - Main List */ 1849.mini-nav li:has(ul) { 1850 position: relative; 1851 border-radius: 8px 8px 0 0; 1852} 1853.mini-nav > li:has(ul) { 1854 padding-left: 0; 1855 padding-right: 0; 1856 background: rgb(255, 255, 255); 1857} 1858.mini-nav > li:has(ul) > a:not(.btn), .mini-nav > li:has(ul) > span { 1859 padding: 10px 15px; 1860 margin: 0!important; 1861} 1862.mini-nav > li:hover:has(ul), .mini-nav > li:hover:has(ul) { 1863 box-shadow: 0 -1px 3px rgba(118, 118, 118,0.25); 1864} 1865/* Parent Links */ 1866.mini-nav > li > a:not(.btn), .mini-nav > li > span:not(.btn) { 1867 display:inline-block; 1868 border-radius: 8px 8px 0 0; 1869} 1870.mini-nav > li:hover > a:not(.btn), .mini-nav > li:hover > span { 1871 background: rgb(255, 255, 255); 1872 display: inline-block; 1873 position: relative; 1874 z-index: 1000; 1875} 1876/* First Level Dropdowns */ 1877.mini-nav li ul { 1878 background: rgb(255, 255, 255); 1879 box-shadow: 0 0px 3px rgba(118, 118, 118,0.25), 0 5px 5px 5px rgba(118, 118, 118,0.05); 1880 text-align: left; 1881 display: none; 1882 border-radius: 0 8px 8px 8px; 1883 list-style: none; 1884 padding: 10px; 1885 position: absolute; 1886 white-space: nowrap; 1887 min-width: 130%; 1888 width: auto; 1889 top: 100%; 1890 left: 0; 1891 z-index: 999; 1892 margin-top: -1px; 1893} 1894.mini-nav li:hover > ul { 1895 display: block; 1896} 1897/* First Level Dropdown Items */ 1898.mini-nav li ul li { 1899 position: relative; 1900 display: block; 1901 width: 100%; 1902} 1903.mini-nav li ul li a, .mini-nav li ul li span { 1904 font-size: 12.95px !important; 1905 display: block; 1906 font-weight: 400; 1907 padding: 8px 12px; 1908 border-radius: 8px; 1909 text-decoration: none; 1910 width: 100%; 1911} 1912.mini-nav li ul li a:hover, .mini-nav li ul li span:hover { 1913 box-shadow: 0 0 0 25px rgba(118, 118, 118,0.05) inset; 1914} 1915/* Second Level Dropdowns */ 1916.mini-nav li ul li ul { 1917 display: none; 1918 position: absolute; 1919 top: 0; 1920 left: 100%; 1921 margin: 0; 1922 border-radius: 8px; 1923} 1924.mini-nav li ul li:hover > ul { 1925 display: block; 1926} 1927/* Edge Positioning - Last Child Dropdowns */ 1928.mini-nav > li:last-child ul { 1929 right: 0; 1930 left: auto; 1931 border-radius: 8px 0 8px 8px; 1932} 1933.mini-nav > li:last-child ul li ul { 1934 right: 100%; 1935 left: auto; 1936} 1937/* Flex Spacing Utility */ 1938.mini-nav.mini-nav-flex-spaced { 1939 display: flex; 1940 justify-content: space-between; 1941 align-items: center; 1942 flex-wrap: wrap; 1943 row-gap: 0;
1944} 1945.mini-nav.mini-nav-flex-spaced > li { 1946 flex: none; 1947 padding: 0; 1948 margin: 2px 0; 1949 order: 2; 1950} 1951.mini-nav.mini-nav-flex-spaced > li.header-member-account-links, 1952.mini-nav:has(li ul) > li.header-member-account-links { 1953 order: 1; 1954 margin-left: auto; 1955 width: 100%; 1956 margin-bottom: 10px; 1957} 1958.logged-in-member-header .mini-nav.mini-nav-flex-spaced.list-inline > li { 1959 line-height: 1em; 1960 min-height: 0; 1961} 1962@media (min-width: 992px) { 1963 .header-main-row { 1964 display: flex; 1965 align-items: center; 1966 flex-wrap: wrap; 1967 } 1968} 1969@media (max-width: 991px) { 1970 .mini-nav.mini-nav-flex-spaced { 1971 justify-content: center; 1972 } 1973 .mini-nav.mini-nav-flex-spaced > li { 1974 margin-left: 5px !important; 1975 margin-right: 5px !important; 1976 } 1977} </style><div class="col-md-7 text-right sm-text-center header-right-container nolpad xs-hpad"> 1978 <ul class="mini-nav nobmargin list-inline xs-nopad xs-tmargin tpad"> 1979 <li class='bmargin xs-nomargin'><span id='link340' class='bmargin'> 714-898-9648</span></li><li class='bmargin xs-nomargin'><a href='/about/contact' id='link341' class='hpad bmargin'>Contact Us</a></li><li class='bmargin xs-nomargin'><a href='/login' id='link342' class='rpad bmargin'>Member Login</a></li><li class='bmargin norpad xs-nopad xs-vmargin'><a href='/join' id='link343' class='btn btn_get_listed bold'>Get your business Listed Today</a></li> </ul> 1980 <div class="clearfix"></div> 1981 <form action="/search_results" name="frm1" class="form-inline website-search"> 1982 <div class="input-group input-group-sm bmargin sm-autosuggest"> 1983 <span class="input-group-addon"><i class="fa fa-search"></i></span> 1984 <input type="text" 1985 placeholder="Name or Keyword" value="" name="q" 1986 class="member_search form-control input-sm" autocomplete="off"> 1987 </div> 1988 <input type="submit" value="Search" class="btn btn-sm btn_search bmargin xs-btn-block bold"> 1989 </form> 1990 </div> 1991 </div> 1992 </div> 1993 <style type='text/css'> .mobile-main-menu .hasChildren span a { 1994 padding: 0px; 1995} 1996 1997.user_sidebar > img { 1998 width: 32px; 1999 height: 32px; 2000 position: absolute; 2001 z-index: 10; 2002 border-radius: 100px; 2003 top: -1px; 2004 object-fit: cover; 2005 left: -10px; 2006 background: rgb(245, 245, 245); 2007} 2008#member_sidebar_toggle img+.fa { 2009 display: none; 2010} 2011.main_menu, .user_sidebar, .compact-mobile-search { 2012 padding: 5px 8px; 2013 margin-right:0; 2014 min-height: 33.0333px; 2015 min-width: 38.116px; 2016} 2017.main_menu i, .user_sidebar i { 2018 font-size: 16px; 2019} 2020.navbar-nav li { 2021 float: none!Important; 2022} 2023.navbar-default{ 2024 -webkit-transition: all .6s ease-in-out; 2025 -moz-transition: all .6s ease-in-out; 2026 -o-transition: all .6s ease-in-out; 2027 transition: all .6s ease-in-out; 2028} 2029.transparent_menu { 2030 background-color: rgba(71, 134, 141,0.95)!important; 2031} 2032@media only screen and (max-width: 991px) { 2033 #popover {display: none} 2034} 2035@media only screen and (max-width: 1100px){ 2036 .mobile-main-menu{display:block!important} 2037 .navbar-toggle {display: block} 2038 #bs-main_menu .nav {display: none!important} 2039} 2040.mobile-main-menu { 2041 position: fixed; 2042 height: calc(100% - 50px)!important; 2043 width: 250px; 2044 background: rgb(71, 134, 141); 2045 z-index: 99999; 2046 right: -250px; 2047 top: 50px; 2048 display: none; 2049 -webkit-transition: all .6s ease-in-out; 2050 -moz-transition: all .6s ease-in-out; 2051 -o-transition: all .6s ease-in-out; 2052 transition: all .6s ease-in-out; 2053 overflow-y: auto!important; 2054 overflow-x: hidden!important; 2055} 2056.mobile-main-menu ul li i { 2057 color: rgb(255, 255, 255); 2058 cursor: pointer; 2059 float: right; 2060 padding: 13px; 2061} 2062.mobile-main-menu.opened{ 2063 right: 0px!important; 2064} 2065.mobile-main-menu ul li a, .mobile-main-menu ul li span { 2066 display: inline-block; 2067 float: left; 2068 -webkit-touch-callout: none; 2069 -webkit-user-select: none; 2070 -khtml-user-select: none; 2071 -moz-user-select: none; 2072 -ms-user-select: none; 2073 user-select: none; 2074 padding: 10px 0px; 2075 width: 80%; 2076 width: calc(100% - 40px); 2077} 2078.mobile-main-menu .sidebar-nav li ul { 2079 height: 0px; 2080 overflow: hidden; 2081 list-style: none; 2082 color: rgb(255, 255, 255); 2083 padding-left: 10px; 2084} 2085.mobile-main-menu .sidebar-nav li.sub_open > ul{ 2086 height: 100%; 2087} 2088.mobile-main-menu ul.sidebar-nav { 2089 position: absolute; 2090 width: 250px; 2091 margin: 0; 2092 padding: 0; 2093 list-style: none; 2094 font-size: 14px; 2095} 2096.mobile-main-menu .sidebar-nav > li { 2097 display: block; 2098 line-height: 20px; 2099 padding: 0 15px 0 20px; 2100} 2101.mobile-main-menu .sidebar-nav li a, .mobile-main-menu .sidebar-nav li span { 2102 text-decoration: none; 2103 color: rgb(255, 255, 255); 2104 padding-left:10px; 2105} 2106.mobile-main-menu .sidebar-nav li a i, .mobile-main-menu .sidebar-nav li span i { 2107 display: none; 2108} 2109 2110 </style><div class="mobile-main-menu"> 2111 <ul class="sidebar-nav"> 2112 <li class=''><a href='/home' id='link344'>
2112Home</a></li><li class=''><a href='/the-chamber' id='link320'>The Chamber</a><ul><li class=''><a href='/about' id='link356'>About the Chamber</a></li><li class=''><a href='/board-of-directors' id='link357'>Chamber Board Of Directors</a></li><li class=''><a href='/join' id='link358'>Join The Chamber</a></li></ul></li><li class=''><a href='/the-city' id='link345'>The City</a><ul><li class=''><a href='/visit-westminster' id='link346'>Visit Westminster</a><ul><li class=''><a href='/stay' id='link352'>Stay</a></li><li class=''><a href='/dine' id='link353'>Dine</a></li><li class=''><a href='/shopping' id='link354'>Shop</a></li><li class=''><a href='/search_results' id='link355'>Business Directory</a></li></ul></li><li class=''><a href='/' id='link347'>Live in Westminster</a></li><li class=''><a href='/jobs' id='link348'>Work in Westminster</a></li><li class=''><a href='https://www.westminster-ca.gov/business' id='link349'>Start a Business in Westminster</a></li><li class=''><a href='https://www.westminster-ca.gov/' id='link350' target='_blank'>City Website</a></li><li class=''><a href='https://www.westminster-ca.gov/government/mayor-and-city-council-members' id='link351'>City Council</a></li></ul></li><li class=''><a href='/search_results' id='link339'>Business Directory</a></li><li class=''><a href='/events-news' id='link334'>Events & News</a><ul><li class=''><a href='/events' id='link335'>Chamber Events</a></li><li class=''><a href='/events-calendar' id='link336'>Calendar</a></li><li class=''><a href='/news' id='link337'>Member News</a></li></ul></li><li class=''><a href='/about/contact' id='link338'>Contact Us</a></li> </ul> 2113</div> 2114<nav class="navbar navbar-default "> 2115 <div class="container container-fluid"> 2116 2117 <div class="navbar-header"> 2118 <button type="button" class="navbar-toggle collapsed main_menu" data-toggle="collapse" aria-label="main_menu"> 2119 <i class="fa fa-bars fa-fw"></i> 2120 </button> 2121 2122 2123 2124 </div> 2125 2126 2127 <div class="tablet-menu collapse navbar-collapse nopad" id="bs-main_menu"> 2128 <ul class="tablet-menu-ul nav navbar-nav nav-justified"> 2129 <li class=''><a href='/home' id='link344'>Home</a></li><li class=''><a href='/the-chamber' id='link320'>The Chamber</a><ul><li class=''><a href='/about' id='link356'>About the Chamber</a></li><li class=''><a href='/board-of-directors' id='link357'>Chamber Board Of Directors</a></li><li class=''><a href='/join' id='link358'>Join The Chamber</a></li></ul></li><li class=''><a href='/the-city' id='link345'>The City</a><ul><li class=''><a href='/visit-westminster' id='link346'>Visit Westminster</a><ul><li class=''><a href='/stay' id='link352'>Stay</a></li><li class=''><a href='/dine' id='link353'>Dine</a></li><li class=''><a href='/shopping' id='link354'>Shop</a></li><li class=''><a href='/search_results' id='link355'>Business Directory</a></li></ul></li><li class=''><a href='/' id='link347'>Live in Westminster</a></li><li class=''><a href='/jobs' id='link348'>Work in Westminster</a></li><li class=''><a href='https://www.westminster-ca.gov/business' id='link349'>Start a Business in Westminster</a></li><li class=''><a href='https://www.westminster-ca.gov/' id='link350' target='_blank'>City Website</a></li><li class=''><a href='https://www.westminster-ca.gov/government/mayor-and-city-council-members' id='link351'>City Council</a></li></ul></li><li class=''><a href='/search_results' id='link339'>Business Directory</a></li><li class=''><a href='/events-news' id='link334'>Events & News</a><ul><li class=''><a href='/events' id='link335'>Chamber Events</a></li><li class=''><a href='/events-calendar' id='link336'>Calendar</a></li><li class=''><a href='/news' id='link337'>Member News</a></li></ul></li><li class=''><a href='/about/contact' id='link338'>Contact Us</a></li> </ul> 2130 </div> 2131 </div> 2132</nav> 2133<!--CSS IF MENU IS FIXED TOP--> 2134 2135</div> 2136<div class="clearfix"></div> 2137<!-- Begin Content --> 2138<div id="first_container" class="content-container fr-view home-sec"> 2139 <div class="container"> 2140 <div class="clearfix body-content"></div> 2141 <style type='text/css'> div#map-bounds { 2142 width: 100%; 2143 height: 600px; 2144 display: block; 2145} 2146.gsc-control-cse.gsc-control-cse-en { 2147 border-radius: 4px; 2148 margin-top: 20px; 2149 padding-top: 0;
2150} 2151.mid_section .btn-sm.btn-block { 2152 width:auto; 2153 display:inline-block 2154} 2155.tab-content #results > div > hr { 2156 display: none; 2157} </style> <div class="clearfix"></div> 2158 <div class="row content_w_sidebar member_results"> 2159 2160 <div class='col-md-9 main-container'><style type='text/css'> .views { 2161 margin-top: -1px!important; 2162} 2163.member-search-result-filters + .clearfix + div > hr { 2164 margin-top: 10px; 2165} 2166@media only screen and (max-width: 767px) { 2167 .member_results .sort-members-select, .member_results .overall_rating_filter { 2168 float: left; 2169 width: 150px; 2170 } 2171} </style> 2172 <div class="col-xs-12 col-sm-4 fpad-sm nohpad member-search-result-count-container"> 2173 Showing 1 - <span class="current__amount__js">9</span> of 2174 2175 <span class="total__js">157</span> Results 2176 </div> 2177 <div class="col-xs-12 col-sm-8 nopad text-right bmargin member-search-result-filters"> 2178 <div class="form-inline"> 2179 <div class="form-group sort-members-select"> 2180 <select class="form-control pull-right input-sm" name=sort 2181 onchange="window.location='/search_results?sort='+this.value;" id="sortbox"> 2182 <option value="" selected>Sort Results 2183 </option> 2184 2185 <option value="reviews" > 2186 Sort by Most Reviews 2187 </option> 2188 <option value="name ASC" > 2189 Sort by Name A-Z 2190 </option> 2191 <option value="name DESC" > 2192 Sort by Name Z-A 2193 </option> 2194 <option value="last_name_asc" > 2195 Sort By Last Name A-Z 2196 </option> 2197 <option value="last_name_desc" > 2198 Sort By Last Name Z-A 2199 </option> 2200 </select> 2201 </div> 2202 <div class="form-group"> 2203 <style type='text/css'> .gridBreak { 2204 display:block!important; 2205 border: 0; 2206 margin: 0; 2207 } 2208 2209.search_result.grid { 2210 display: grid; 2211} 2212.views > i { 2213 font-size: 18px; 2214 margin-left: 5px; 2215 border-radius: 4px; 2216 cursor: pointer; 2217 width: 30px; 2218 height: 30px; 2219 line-height: 30px; 2220 display: inline-flex; 2221 align-items: center; 2222 justify-content: center; 2223 text-align: center; 2224 vertical-align: top; 2225 transition: all 100ms linear 0ms; 2226} 2227a.gridA { 2228 font-size: 18px; 2229 text-align: center; 2230 margin: 10px 0; 2231 display: block; 2232} 2233.grid .favorite::after, .grid p + .clearfix.fpad-sm, .grid .clearfix.fpad-sm + .clearfix.fpad-sm, .map_container, .views .mapView, .grid .member-search-full-name::after { 2234 display:none; 2235} 2236.visible-lg { 2237 word-wrap: break-word; 2238} 2239.grid .post-location-snippet b + span { 2240 display: block; 2241} 2242@media only screen and (max-width: 767px) { 2243 .member_results .sort-members-select, .member_results .overall_rating_filter { 2244 float: left; 2245 width: 150px; 2246 } 2247} </style> <div class='views pull-right '> 2248 <i class='fa fa-th-list activeView listView'></i> 2249 <i class='fa fa-th js-click gridView hidden-xs'></i> 2250 <i class="fa fa-map-marker mapView"></i> 2251 </div> 2252 </div> 2253 </div> 2254 <div class="clearfix"></div> 2255 </div> 2256 <div class="clearfix"></div> 2257 2258 <div class="member_results_header"> 2259 <h1 class="bold nomargin">Westminster California Businesses Results</h1> 2260 </div> 2261 <div itemscope itemtype="https://schema.org/CollectionPage" itemid="https://www.westminsterchamber.org/search_results#entity"> 2262 <meta itemprop="name" content="Westminster California Businesses - Find & Compare Westminster California Business Professionals"> 2263 <meta itemprop="headline" content="Westminster California Businesses Results"> 2264 <meta itemprop="description" content="Search our Westminster California Business database and connect with top rated Westminster California Businesses."> 2265 <link itemprop="primaryImageOfPage" href="/images/Logo/change-logo.png"> 2266 <meta itemprop="keywords" content="Westminster California Businesses Results, Westminster Chamber of Commerce, Westminster California Businesses"> 2267 <meta itemprop="inLanguage" content="en-US"> 2268 <link itemprop="url" href="https://www.westminsterchamber.org/search_results"> 2269 <meta itemprop="mainEntityOfPage" content="https://www.westminsterchamber.org/search_results#page"> 2270 <meta itemprop="dateModified" content="2026-09-01T00:00:00-07:00"> 2271 <meta itemprop="lastReviewed" content="2026-09-01T00:00:00-07:00"> 2272 <meta itemprop="copyrightYear" content="2026"> 2273 <link itemprop="copyrightHolder" href="https://www.westminsterchamber.org/#organization"> 2274 <link itemprop="reviewedBy" href="https://www.westminsterchamber.org/#organization"> 2275 <link itemprop="isPartOf" href="https://www.westminsterchamber.org/#website"> 2276 <link itemprop="publisher" href="https://www.westminsterchamber.org/#organization"> 2277 <div itemprop="mainEntity" itemscope itemtype="https://schema.org/ItemList" itemid="https://www.westminsterchamber.org/search_results#itemlist"> 2278 <meta itemprop="name" content="Westminster California Businesses Results"> 2279 <link itemprop="url" href="https://www.westminsterchamber.org/search_results"> 2280 <meta itemprop="description" content="Search our Westminster California Business database and connect with top rated Westminster California Businesses."> 2281 <meta itemprop="mainEntityOfPage" content="https://www.westminsterchamber.org/search_results#page"> 2282 <meta itemprop="itemListOrder" content="http://schema.org/ItemListOrderAscending"> 2283 <meta itemprop="numberOfItems" content="9"> 2284 <hr> 2285<div class="grid-container"><div class="row-fluid member_results level_6 search_result clearfix" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem"> 2286 <meta itemprop="name" content="C2Thrive Local Marketing - C2Thrive LLC">
2287 <link itemprop="url" href="https://www.westminsterchamber.org/search_results"> 2288 <meta itemprop="position" content="1"> 2289 <div itemprop="item" itemscope itemtype="https://schema.org/LocalBusiness" itemid="https://www.westminsterchamber.org/united-states/westminster/advertising-media/c2thrive-local-marketing-c2thrive-llc#entity"> 2290 <meta itemprop="name" content="C2Thrive Local Marketing - C2Thrive LLC"> 2291 <link itemprop="url" href="https://www.westminsterchamber.org/united-states/westminster/advertising-media/c2thrive-local-marketing-c2thrive-llc"> 2292 <link itemprop="image" href="https://www.westminsterchamber.org/logos/profile/limage-664-491-photo.jpg"> 2293 <meta itemprop="priceRange" content="$$"> 2294 <meta itemprop="telephone" content="714278-7827"> 2295 <meta itemprop="description" content="C2Thrive Local Marketing helps local businesses grow with website design, SEO, Google listings, email & SMS marketing, review management, and local advertising campaigns."> 2296 <div itemprop="address" itemscope itemtype="https://schema.org/PostalAddress"> 2297 <meta itemprop="streetAddress" content="N/A"> 2298 <meta itemprop="addressLocality" content="Westminster"> 2299 <meta itemprop="addressRegion" content="CA"> 2300 <meta itemprop="postalCode" content="92683"> 2301 <meta itemprop="addressCountry" content="US"> 2302 </div> 2303 <div itemprop="geo" itemscope itemtype="https://schema.org/GeoCoordinates"> 2304 <meta itemprop="latitude" content="33.75917570"> 2305 <meta itemprop="longitude" content="-117.98970580"> 2306 </div> 2307 <link itemprop="mainEntityOfPage" href="https://www.westminsterchamber.org/united-states/westminster/advertising-media/c2thrive-local-marketing-c2thrive-llc#page"> 2308 </div> 2309 <div class="grid_element"> 2310 <div class="img_section col-xs-2 nopad"> 2311 <a title="C2Thrive Local Marketing - C2Thrive LLC - Westminster California Businesses" href="/united-states/westminster/advertising-media/c2thrive-local-marketing-c2thrive-llc"> 2312 <img class="search_result_image img-rounded center-block" loading="auto" width="400" height="400" alt="C2Thrive Local Marketing - C2Thrive LLC" src="https://www.westminsterchamber.org/logos/profile/limage-664-491-photo.jpg" /> 2313 2314 </a> 2315 </div> 2316 <div class="mid_section col-xs-10 col-sm-7 norpad"> 2317 <span class="postItem" data-userid="664" data-datatype="10" data-dataid="10" data-postid="0"></span><button class="item-post-list-0 favorite fa fa-heart" aria-label="LIKE" data-count="0" data-postid="0" data-state="0" data-activefeature="1" data-activefavorite="CORE MEMBERSHIP" data-toggle="modal" data-target="#myModal" ><span id='bookmark-content'>LIKE</span> <span class='' id='number-0'></span></button> <a class="center-block" title="C2Thrive Local Marketing - C2Thrive LLC" href="/united-states/westminster/advertising-media/c2thrive-local-marketing-c2thrive-llc"> 2318 <span class="h3 bold inline-block nomargin member-search-full-name notranslate"> 2319 C2Thrive Local Marketing - C2Thrive LLC </span> 2320 </a> 2321 <div class="clearfix fpad-sm nobpad"></div> 2322 <div class="clearfix fpad-sm nobpad"></div> 2323 2324 2325 <p class="small nomargin member-search-description"> 2326 C2Thrive Local Marketing helps local businesses grow with website design, SEO, Google listings, email & SMS marketing, review management, and local advertising campaigns. </p> 2327 <div class="clearfix fpad-sm nobpad"></div> 2328 <span class="member-search-location rmargin"> 2329 <i class="fa fa-map-marker text-danger"></i> 2330 <small> 2331 Westminster, California, <span class="inline-block">92683</span>, <span class=inline-block>United States</span></small></span> </div> 2332 <div class="info_section hidden-xs col-sm-3 norpad"> 2333 <div class="module nomargin fpad-md text-center"> 2334 <a href="/united-states/westminster/advertising-media/c2thrive-local-marketing-c2thrive-llc"> 2335 <img alt="C2Thrive Local Marketing - C2Thrive LLC" src="/images/badges/search_badge_wcc.png" /> 2336</a> 2337<div class="clearfix bpad"></div> 2338 <a 2339 title="View Listing - C2Thrive Local Marketing - C2Thrive LLC" 2340 aria-label="View Listing - C2Thrive Local Marketing - C2Thrive LLC" 2341 class="btn btn-sm btn-primary btn-block bold search_view_listing_button" 2342 href="/united-states/westminster/advertising-media/c2thrive-local-marketing-c2thrive-llc">View Listing</a> 2343 <div class="clearfix fpad-sm nobpad"></div> 2344 <a 2345 title="Send Message - C2Thrive Local Marketing - C2Thrive LLC" 2346 aria-label="Send Message - C2Thrive Local Marketing - C2Thrive LLC" 2347 class="btn btn-sm btn-secondary btn-block bold search_contact_now_button" 2348 href="/united-states/westminster/advertising-media/c2thrive-local-marketing-c2thrive-llc/connect">Send Message</a> 2349 <div class="clearfix"></div> 2350 <div class="clearfix fpad-sm nobpad"></div> 2351 <span class="btn btn-secondary btn-outline btn-sm bold click-to-call-button search_show_phone_button btn-block"> 2352 <div class="myPhoneHideParent" onClick="clickToCall(this)" title="Show Phone Number" data-token="664" style="text-overflow:ellipsis;white-space:nowrap;overflow:hidden;"> 2353 <i class="fa fa-phone fa-fw"></i> 2354 Show Phone Number 2355 </div> 2356 <div class="hide myphoneHide"> 2357 <a href="tel:7142787827"><span class="text-secondary">Call: <u>(714) 278-7827</u></span></a> </div> 2358 </span> 2359 </div> 2360 </div> 2361 <div class="clearfix"></div> 2362 </div> 2363</div> 2364<div class="clearfix"></div> 2365<hr> 2366<span class="google-pin-location" id="google-pin" data-token="664"data-hideMessages="0" data-lat="33.75917570" data-lng="-117.98970580" data-name="C2Thrive Local Marketing - C2Thrive LLC" data-filename="/united-states/westminster/advertising-media/c2thrive-local-marketing-c2thrive-llc" data-photo="/logos/profile/limage-664-491-photo.jpg" data-phone="(714) 278-7827" data-addon="1"></span><div class="row-fluid member_results level_8 search_result clearfix" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem"> 2367 <meta itemprop="name" content="Cirque Du Soleil">
2368 <link itemprop="url" href="https://www.westminsterchamber.org/search_results"> 2369 <meta itemprop="position" content="2"> 2370 <div itemprop="item" itemscope itemtype="https://schema.org/LocalBusiness" itemid="https://www.westminsterchamber.org/arts-culture-entertainment/cirque-du-soleil#entity"> 2371 <meta itemprop="name" content="Cirque Du Soleil"> 2372 <link itemprop="url" href="https://www.westminsterchamber.org/arts-culture-entertainment/cirque-du-soleil"> 2373 <link itemprop="image" href="https://www.westminsterchamber.org/logos/profile/limage-531-131-photo.jpg"> 2374 <meta itemprop="priceRange" content="$$"> 2375 <meta itemprop="telephone" content="702-850-5211"> 2376 <meta itemprop="description" content=" Cirque du Soleil Entertainment Group is a world leader in live entertainment. Since its inception in 1984, more than 378 million people around the world have been inspired"> 2377 <div itemprop="address" itemscope itemtype="https://schema.org/PostalAddress"> 2378 <meta itemprop="streetAddress" content="N/A"> 2379 <meta itemprop="addressLocality" content="N/A"> 2380 <meta itemprop="addressRegion" content="N/A"> 2381 <meta itemprop="postalCode" content="N/A"> 2382 <meta itemprop="addressCountry" content="US"> 2383 </div> 2384 <link itemprop="mainEntityOfPage" href="https://www.westminsterchamber.org/arts-culture-entertainment/cirque-du-soleil#page"> 2385 </div> 2386 <div class="grid_element"> 2387 <div class="img_section col-xs-2 nopad"> 2388 <a title="Cirque Du Soleil - Westminster California Businesses" href="/arts-culture-entertainment/cirque-du-soleil"> 2389 <img class="search_result_image img-rounded center-block" loading="auto" width="400" height="400" alt="Cirque Du Soleil" src="https://www.westminsterchamber.org/logos/profile/limage-531-131-photo.jpg" /> 2390 2391 </a> 2392 </div> 2393 <div class="mid_section col-xs-10 col-sm-7 norpad"> 2394 <span class="postItem" data-userid="531" data-datatype="10" data-dataid="10" data-postid="0"></span><button class="item-post-list-0 favorite fa fa-heart" aria-label="LIKE" data-count="0" data-postid="0" data-state="0" data-activefeature="1" data-activefavorite="Claimable Listing" data-toggle="modal" data-target="#myModal" ><span id='bookmark-content'>LIKE</span> <span class='' id='number-0'></span></button> <a class="center-block" title="Cirque Du Soleil" href="/arts-culture-entertainment/cirque-du-soleil"> 2395 <span class="h3 bold inline-block nomargin member-search-full-name notranslate"> 2396 Cirque Du Soleil </span> 2397 </a> 2398 <div class="clearfix fpad-sm nobpad"></div> 2399 <div class="clearfix fpad-sm nobpad"></div> 2400 2401 <p class="small nomargin member-search-description"> 2402 Cirque du Soleil Entertainment Group is a world leader in live entertainment. Since its inception in 1984, more than 378 million people around the world have been inspired </p> 2403 </div> 2404 <div class="info_section hidden-xs col-sm-3 norpad"> 2405 <div class="module nomargin fpad-md text-center"> 2406 <a 2407 title="View Listing - Cirque Du Soleil" 2408 aria-label="View Listing - Cirque Du Soleil" 2409 class="btn btn-sm btn-primary btn-block bold search_view_listing_button" 2410 href="/arts-culture-entertainment/cirque-du-soleil">View Listing</a> 2411 <div class="clearfix fpad-sm nobpad"></div> 2412 <a 2413 title="Send Message - Cirque Du Soleil" 2414 aria-label="Send Message - Cirque Du Soleil" 2415 class="btn btn-sm btn-secondary btn-block bold search_contact_now_button" 2416 href="/arts-culture-entertainment/cirque-du-soleil/connect">Send Message</a> 2417 <div class="clearfix"></div> 2418 <div class="clearfix fpad-sm nobpad"></div> 2419 <span class="btn btn-secondary btn-outline btn-sm bold click-to-call-button search_show_phone_button btn-block"> 2420 <div class="myPhoneHideParent" onClick="clickToCall(this)" title="Show Phone Number" data-token="531" style="text-overflow:ellipsis;white-space:nowrap;overflow:hidden;"> 2421 <i class="fa fa-phone fa-fw"></i> 2422 Show Phone Number 2423 </div> 2424 <div class="hide myphoneHide"> 2425 <a href="tel:7028505211"><span class="text-secondary">Call: <u>702-850-5211</u></span></a> </div> 2426 </span> 2427 </div> 2428 </div> 2429 <div class="clearfix"></div> 2430 </div> 2431</div> 2432<div class="clearfix"></div> 2433<hr> 2434<div class="row-fluid member_results level_6 search_result clearfix" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem"> 2435 <meta itemprop="name" content="Like The Fish Media">
2436 <link itemprop="url" href="https://www.westminsterchamber.org/search_results"> 2437 <meta itemprop="position" content="3"> 2438 <div itemprop="item" itemscope itemtype="https://schema.org/LocalBusiness" itemid="https://www.westminsterchamber.org/california/westminster/advertising-media/like-the-fish-media#entity"> 2439 <meta itemprop="name" content="Like The Fish Media"> 2440 <link itemprop="url" href="https://www.westminsterchamber.org/california/westminster/advertising-media/like-the-fish-media"> 2441 <link itemprop="image" href="https://www.westminsterchamber.org/logos/profile/limage-138-415-photo.png"> 2442 <meta itemprop="priceRange" content="$$"> 2443 <meta itemprop="telephone" content="562686-3957"> 2444 <div itemprop="address" itemscope itemtype="https://schema.org/PostalAddress"> 2445 <meta itemprop="streetAddress" content="N/A"> 2446 <meta itemprop="addressLocality" content="Westminster"> 2447 <meta itemprop="addressRegion" content="CA"> 2448 <meta itemprop="postalCode" content="N/A"> 2449 <meta itemprop="addressCountry" content="US"> 2450 </div> 2451 <div itemprop="geo" itemscope itemtype="https://schema.org/GeoCoordinates"> 2452 <meta itemprop="latitude" content="33.75917570"> 2453 <meta itemprop="longitude" content="-117.98970580"> 2454 </div> 2455 <link itemprop="mainEntityOfPage" href="https://www.westminsterchamber.org/california/westminster/advertising-media/like-the-fish-media#page"> 2456 </div> 2457 <div class="grid_element"> 2458 <div class="img_section col-xs-2 nopad"> 2459 <a title="Like The Fish Media - Westminster California Businesses" href="/california/westminster/advertising-media/like-the-fish-media"> 2460 <img class="search_result_image img-rounded center-block" loading="auto" width="400" height="400" alt="Like The Fish Media" src="https://www.westminsterchamber.org/logos/profile/limage-138-415-photo.png" /> 2461 2462 </a> 2463 </div> 2464 <div class="mid_section col-xs-10 col-sm-7 norpad"> 2465 <span class="postItem" data-userid="138" data-datatype="10" data-dataid="10" data-postid="0"></span><button class="item-post-list-0 favorite fa fa-heart" aria-label="LIKE" data-count="0" data-postid="0" data-state="0" data-activefeature="1" data-activefavorite="CORE MEMBERSHIP" data-toggle="modal" data-target="#myModal" ><span id='bookmark-content'>LIKE</span> <span class='' id='number-0'></span></button> <a class="center-block" title="Like The Fish Media" href="/california/westminster/advertising-media/like-the-fish-media"> 2466 <span class="h3 bold inline-block nomargin member-search-full-name notranslate"> 2467 Like The Fish Media </span> 2468 </a> 2469 <div class="clearfix fpad-sm nobpad"></div> 2470 <div class="clearfix fpad-sm nobpad"></div> 2471 2472 <div class="clearfix fpad-sm nobpad"></div> 2473 <span class="member-search-location rmargin"> 2474 <i class="fa fa-map-marker text-danger"></i> 2475 <small> 2476 Westminster, California, <span class=inline-block>United States</span></small></span> </div> 2477 <div class="info_section hidden-xs col-sm-3 norpad"> 2478 <div class="module nomargin fpad-md text-center"> 2479 <a href="/california/westminster/advertising-media/like-the-fish-media"> 2480 <img alt="Like The Fish Media" src="/images/badges/search_badge_wcc.png" /> 2481</a> 2482<div class="clearfix bpad"></div> 2483 <a 2484 title="View Listing - Like The Fish Media" 2485 aria-label="View Listing - Like The Fish Media" 2486 class="btn btn-sm btn-primary btn-block bold search_view_listing_button" 2487 href="/california/westminster/advertising-media/like-the-fish-media">View Listing</a> 2488 <div class="clearfix fpad-sm nobpad"></div> 2489 <a 2490 title="Send Message - Like The Fish Media" 2491 aria-label="Send Message - Like The Fish Media" 2492 class="btn btn-sm btn-secondary btn-block bold search_contact_now_button" 2493 href="/california/westminster/advertising-media/like-the-fish-media/connect">Send Message</a> 2494 <div class="clearfix"></div> 2495 <div class="clearfix fpad-sm nobpad"></div> 2496 <span class="btn btn-secondary btn-outline btn-sm bold click-to-call-button search_show_phone_button btn-block"> 2497 <div class="myPhoneHideParent" onClick="clickToCall(this)" title="Show Phone Number" data-token="138" style="text-overflow:ellipsis;white-space:nowrap;overflow:hidden;"> 2498 <i class="fa fa-phone fa-fw"></i> 2499 Show Phone Number 2500 </div> 2501 <div class="hide myphoneHide"> 2502 <a href="tel:5626863957"><span class="text-secondary">Call: <u>(562) 686-3957</u></span></a> </div> 2503 </span> 2504 </div> 2505 </div> 2506 <div class="clearfix"></div> 2507 </div> 2508</div> 2509<div class="clearfix"></div> 2510<hr> 2511<span class="google-pin-location" id="google-pin" data-token="138"data-hideMessages="0" data-lat="33.75917570" data-lng="-117.98970580" data-name="Like The Fish Media" data-filename="/california/westminster/advertising-media/like-the-fish-media" data-photo="/logos/profile/limage-138-415-photo.png" data-phone="(562) 686-3957" data-addon="1"></span><div class="row-fluid member_results level_6 search_result clearfix" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem"> 2512 <meta itemprop="name" content="Loi Dao">
2513 <link itemprop="url" href="https://www.westminsterchamber.org/search_results"> 2514 <meta itemprop="position" content="4"> 2515 <div itemprop="item" itemscope itemtype="https://schema.org/LocalBusiness" itemid="https://www.westminsterchamber.org/united-states/real-estate-services/loi-dao#entity"> 2516 <meta itemprop="name" content="Loi Dao"> 2517 <link itemprop="url" href="https://www.westminsterchamber.org/united-states/real-estate-services/loi-dao"> 2518 <link itemprop="image" href="https://www.westminsterchamber.org/pictures/profile/pimage-503-170-photo.jpeg"> 2519 <meta itemprop="priceRange" content="$$"> 2520 <meta itemprop="telephone" content="4135616010"> 2521 <meta itemprop="description" content="Husband | Father | Marine | Orange County Realtor"> 2522 <div itemprop="address" itemscope itemtype="https://schema.org/PostalAddress"> 2523 <meta itemprop="streetAddress" content="N/A"> 2524 <meta itemprop="addressLocality" content="N/A"> 2525 <meta itemprop="addressRegion" content="CA"> 2526 <meta itemprop="postalCode" content="N/A"> 2527 <meta itemprop="addressCountry" content="US"> 2528 </div> 2529 <div itemprop="geo" itemscope itemtype="https://schema.org/GeoCoordinates"> 2530 <meta itemprop="latitude" content="33.71747080"> 2531 <meta itemprop="longitude" content="-117.83114280"> 2532 </div> 2533 <link itemprop="mainEntityOfPage" href="https://www.westminsterchamber.org/united-states/real-estate-services/loi-dao#page"> 2534 </div> 2535 <div class="grid_element"> 2536 <div class="img_section col-xs-2 nopad"> 2537 <a title="Loi Dao - Westminster California Businesses" href="/united-states/real-estate-services/loi-dao"> 2538 <img class="search_result_image img-rounded center-block" loading="auto" width="400" height="400" alt="Loi Dao" src="https://www.westminsterchamber.org/pictures/profile/pimage-503-170-photo.jpeg" /> 2539 2540 </a> 2541 </div> 2542 <div class="mid_section col-xs-10 col-sm-7 norpad"> 2543 <span class="postItem" data-userid="503" data-datatype="10" data-dataid="10" data-postid="0"></span><button class="item-post-list-0 favorite fa fa-heart" aria-label="LIKE" data-count="0" data-postid="0" data-state="0" data-activefeature="1" data-activefavorite="CORE MEMBERSHIP" data-toggle="modal" data-target="#myModal" ><span id='bookmark-content'>LIKE</span> <span class='' id='number-0'></span></button> <a class="center-block" title="Loi Dao" href="/united-states/real-estate-services/loi-dao"> 2544 <span class="h3 bold inline-block nomargin member-search-full-name notranslate"> 2545 Loi Dao </span> 2546 <span class="hidden-xs inline-block member-search-company notranslate"> 2547 Romeo Echo </span> 2548 </a> 2549 <div class="clearfix fpad-sm nobpad"></div> 2550 <div class="clearfix fpad-sm nobpad"></div> 2551 2552 2553 <p class="small nomargin member-search-description"> 2554 Husband | Father | Marine | Orange County Realtor </p> 2555 <div class="clearfix fpad-sm nobpad"></div> 2556 <span class="member-search-location rmargin"> 2557 <i class="fa fa-map-marker text-danger"></i> 2558 <small> 2559 California, <span class=inline-block>United States</span></small></span> </div> 2560 <div class="info_section hidden-xs col-sm-3 norpad"> 2561 <div class="module nomargin fpad-md text-center"> 2562 <a href="/united-states/real-estate-services/loi-dao"> 2563 <img alt="Loi Dao" src="/images/badges/search_badge_wcc.png" /> 2564</a> 2565<div class="clearfix bpad"></div> 2566 <a 2567 title="View Listing - Loi Dao" 2568 aria-label="View Listing - Loi Dao" 2569 class="btn btn-sm btn-primary btn-block bold search_view_listing_button" 2570 href="/united-states/real-estate-services/loi-dao">View Listing</a> 2571 <div class="clearfix fpad-sm nobpad"></div> 2572 <a 2573 title="Send Message - Loi Dao" 2574 aria-label="Send Message - Loi Dao" 2575 class="btn btn-sm btn-secondary btn-block bold search_contact_now_button" 2576 href="/united-states/real-estate-services/loi-dao/connect">Send Message</a> 2577 <div class="clearfix"></div> 2578 <div class="clearfix fpad-sm nobpad"></div> 2579 <span class="btn btn-secondary btn-outline btn-sm bold click-to-call-button search_show_phone_button btn-block"> 2580 <div class="myPhoneHideParent" onClick="clickToCall(this)" title="Show Phone Number" data-token="503" style="text-overflow:ellipsis;white-space:nowrap;overflow:hidden;"> 2581 <i class="fa fa-phone fa-fw"></i> 2582 Show Phone Number 2583 </div> 2584 <div class="hide myphoneHide"> 2585 <a href="tel:4135616010"><span class="text-secondary">Call: <u>4135616010</u></span></a> </div> 2586 </span> 2587 </div> 2588 </div> 2589 <div class="clearfix"></div> 2590 </div> 2591</div> 2592<div class="clearfix"></div> 2593<hr> 2594<span class="google-pin-location" id="google-pin" data-token="503"data-hideMessages="0" data-lat="33.71747080" data-lng="-117.83114280" data-name="Loi Dao" data-filename="/united-states/real-estate-services/loi-dao" data-photo="/pictures/profile/pimage-503-170-photo.jpeg" data-phone="4135616010" data-addon="1"></span><div class="row-fluid member_results level_6 search_result clearfix" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem"> 2595 <meta itemprop="name" content="qasimcompany">
2596 <link itemprop="url" href="https://www.westminsterchamber.org/search_results"> 2597 <meta itemprop="position" content="5"> 2598 <div itemprop="item" itemscope itemtype="https://schema.org/LocalBusiness" itemid="https://www.westminsterchamber.org/pakistan/lahore/family-community-civic-organizations/qasimcompany#entity"> 2599 <meta itemprop="name" content="qasimcompany"> 2600 <link itemprop="url" href="https://www.westminsterchamber.org/pakistan/lahore/family-community-civic-organizations/qasimcompany"> 2601 <link itemprop="image" href="https://www.westminsterchamber.org/images/profile-profile-holder.png"> 2602 <meta itemprop="priceRange" content="$$"> 2603 <meta itemprop="telephone" content="+923018888888"> 2604 <meta itemprop="description" content="this is my short desc"> 2605 <div itemprop="address" itemscope itemtype="https://schema.org/PostalAddress"> 2606 <meta itemprop="streetAddress" content="Ahmed Ali Rd"> 2607 <meta itemprop="addressLocality" content="Lahore"> 2608 <meta itemprop="addressRegion" content="Punjab"> 2609 <meta itemprop="postalCode" content="54000"> 2610 <meta itemprop="addressCountry" content="PK"> 2611 </div> 2612 <div itemprop="geo" itemscope itemtype="https://schema.org/GeoCoordinates"> 2613 <meta itemprop="latitude" content="31.59251480"> 2614 <meta itemprop="longitude" content="74.30948500"> 2615 </div> 2616 <link itemprop="mainEntityOfPage" href="https://www.westminsterchamber.org/pakistan/lahore/family-community-civic-organizations/qasimcompany#page"> 2617 </div> 2618 <div class="grid_element"> 2619 <div class="img_section col-xs-2 nopad"> 2620 <a title="qasimcompany - Westminster California Businesses" href="/pakistan/lahore/family-community-civic-organizations/qasimcompany"> 2621 <img class="search_result_image img-rounded center-block lazyloader" loading="auto" width="400" height="400" alt="qasimcompany" data-src="https://www.westminsterchamber.org/images/profile-profile-holder.png"> 2622 2623 </a> 2624 </div> 2625 <div class="mid_section col-xs-10 col-sm-7 norpad"> 2626 <span class="postItem" data-userid="533" data-datatype="10" data-dataid="10" data-postid="0"></span><button class="item-post-list-0 favorite fa fa-heart" aria-label="LIKE" data-count="0" data-postid="0" data-state="0" data-activefeature="1" data-activefavorite="CORE MEMBERSHIP" data-toggle="modal" data-target="#myModal" ><span id='bookmark-content'>LIKE</span> <span class='' id='number-0'></span></button> <a class="center-block" title="qasimcompany" href="/pakistan/lahore/family-community-civic-organizations/qasimcompany"> 2627 <span class="h3 bold inline-block nomargin member-search-full-name notranslate"> 2628 qasimcompany </span> 2629 </a> 2630 <div class="clearfix fpad-sm nobpad"></div> 2631 <div class="clearfix fpad-sm nobpad"></div> 2632 2633 2634 <p class="small nomargin member-search-description"> 2635 this is my short desc </p> 2636 <div class="clearfix fpad-sm nobpad"></div> 2637 <span class="member-search-location rmargin"> 2638 <i class="fa fa-map-marker text-danger"></i> 2639 <small> 2640 Lahore, Punjab, <span class="inline-block">54000</span>, <span class=inline-block>Pakistan</span></small></span> </div> 2641 <div class="info_section hidden-xs col-sm-3 norpad"> 2642 <div class="module nomargin fpad-md text-center"> 2643 <a href="/pakistan/lahore/family-community-civic-organizations/qasimcompany"> 2644 <img alt="qasimcompany" src="/images/badges/search_badge_wcc.png" /> 2645</a> 2646<div class="clearfix bpad"></div> 2647 <a 2648 title="View Listing - qasimcompany" 2649 aria-label="View Listing - qasimcompany" 2650 class="btn btn-sm btn-primary btn-block bold search_view_listing_button" 2651 href="/pakistan/lahore/family-community-civic-organizations/qasimcompany">View Listing</a> 2652 <div class="clearfix fpad-sm nobpad"></div> 2653 <a 2654 title="Send Message - qasimcompany" 2655 aria-label="Send Message - qasimcompany" 2656 class="btn btn-sm btn-secondary btn-block bold search_contact_now_button" 2657 href="/pakistan/lahore/family-community-civic-organizations/qasimcompany/connect">Send Message</a> 2658 <div class="clearfix"></div> 2659 <div class="clearfix fpad-sm nobpad"></div> 2660 <span class="btn btn-secondary btn-outline btn-sm bold click-to-call-button search_show_phone_button btn-block"> 2661 <div class="myPhoneHideParent" onClick="clickToCall(this)" title="Show Phone Number" data-token="533" style="text-overflow:ellipsis;white-space:nowrap;overflow:hidden;"> 2662 <i class="fa fa-phone fa-fw"></i> 2663 Show Phone Number 2664 </div> 2665 <div class="hide myphoneHide"> 2666 <a href="tel:+923018888888"><span class="text-secondary">Call: <u>+923018888888</u></span></a> </div> 2667 </span> 2668 </div> 2669 </div> 2670 <div class="clearfix"></div> 2671 </div> 2672</div> 2673<div class="clearfix"></div> 2674<hr> 2675<span class="google-pin-location" id="google-pin" data-token="533"data-hideMessages="0" data-lat="31.59251480" data-lng="74.30948500" data-name="qasimcompany" data-filename="/pakistan/lahore/family-community-civic-organizations/qasimcompany" data-photo="/images/profile-profile-holder.png" data-phone="+923018888888" data-addon="1"></span><div class="row-fluid member_results level_6 search_result clearfix" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem"> 2676 <meta itemprop="name" content="Squared Up Cleaning">
2677 <link itemprop="url" href="https://www.westminsterchamber.org/search_results"> 2678 <meta itemprop="position" content="6"> 2679 <div itemprop="item" itemscope itemtype="https://schema.org/LocalBusiness" itemid="https://www.westminsterchamber.org/united-states/westminster/business-professional-services/squared-up-cleaning#entity"> 2680 <meta itemprop="name" content="Squared Up Cleaning"> 2681 <link itemprop="url" href="https://www.westminsterchamber.org/united-states/westminster/business-professional-services/squared-up-cleaning"> 2682 <link itemprop="image" href="https://www.westminsterchamber.org/images/profile-profile-holder.png"> 2683 <meta itemprop="priceRange" content="$$"> 2684 <meta itemprop="telephone" content="7143154675"> 2685 <div itemprop="address" itemscope itemtype="https://schema.org/PostalAddress"> 2686 <meta itemprop="streetAddress" content="13761 Goldenwest St"> 2687 <meta itemprop="addressLocality" content="Westminster"> 2688 <meta itemprop="addressRegion" content="CA"> 2689 <meta itemprop="postalCode" content="92684"> 2690 <meta itemprop="addressCountry" content="US"> 2691 </div> 2692 <div itemprop="geo" itemscope itemtype="https://schema.org/GeoCoordinates"> 2693 <meta itemprop="latitude" content="33.76173180"> 2694 <meta itemprop="longitude" content="-118.00785860"> 2695 </div> 2696 <link itemprop="mainEntityOfPage" href="https://www.westminsterchamber.org/united-states/westminster/business-professional-services/squared-up-cleaning#page"> 2697 </div> 2698 <div class="grid_element"> 2699 <div class="img_section col-xs-2 nopad"> 2700 <a title="Squared Up Cleaning - Westminster California Businesses" href="/united-states/westminster/business-professional-services/squared-up-cleaning"> 2701 <img class="search_result_image img-rounded center-block lazyloader" loading="auto" width="400" height="400" alt="Squared Up Cleaning" data-src="https://www.westminsterchamber.org/images/profile-profile-holder.png"> 2702 2703 </a> 2704 </div> 2705 <div class="mid_section col-xs-10 col-sm-7 norpad"> 2706 <span class="postItem" data-userid="684" data-datatype="10" data-dataid="10" data-postid="0"></span><button class="item-post-list-0 favorite fa fa-heart" aria-label="LIKE" data-count="0" data-postid="0" data-state="0" data-activefeature="1" data-activefavorite="CORE MEMBERSHIP" data-toggle="modal" data-target="#myModal" ><span id='bookmark-content'>LIKE</span> <span class='' id='number-0'></span></button> <a class="center-block" title="Squared Up Cleaning" href="/united-states/westminster/business-professional-services/squared-up-cleaning"> 2707 <span class="h3 bold inline-block nomargin member-search-full-name notranslate"> 2708 Squared Up Cleaning </span> 2709 </a> 2710 <div class="clearfix fpad-sm nobpad"></div> 2711 <div class="clearfix fpad-sm nobpad"></div> 2712 2713 <div class="clearfix fpad-sm nobpad"></div> 2714 <span class="member-search-location rmargin"> 2715 <i class="fa fa-map-marker text-danger"></i> 2716 <small> 2717 Westminster, California, <span class="inline-block">92684</span>, <span class=inline-block>United States</span></small></span> </div> 2718 <div class="info_section hidden-xs col-sm-3 norpad"> 2719 <div class="module nomargin fpad-md text-center"> 2720 <a href="/united-states/westminster/business-professional-services/squared-up-cleaning"> 2721 <img alt="Squared Up Cleaning" src="/images/badges/search_badge_wcc.png" /> 2722</a> 2723<div class="clearfix bpad"></div> 2724 <a 2725 title="View Listing - Squared Up Cleaning" 2726 aria-label="View Listing - Squared Up Cleaning" 2727 class="btn btn-sm btn-primary btn-block bold search_view_listing_button" 2728 href="/united-states/westminster/business-professional-services/squared-up-cleaning">View Listing</a> 2729 <div class="clearfix fpad-sm nobpad"></div> 2730 <a 2731 title="Send Message - Squared Up Cleaning" 2732 aria-label="Send Message - Squared Up Cleaning" 2733 class="btn btn-sm btn-secondary btn-block bold search_contact_now_button" 2734 href="/united-states/westminster/business-professional-services/squared-up-cleaning/connect">Send Message</a> 2735 <div class="clearfix"></div> 2736 <div class="clearfix fpad-sm nobpad"></div> 2737 <span class="btn btn-secondary btn-outline btn-sm bold click-to-call-button search_show_phone_button btn-block"> 2738 <div class="myPhoneHideParent" onClick="clickToCall(this)" title="Show Phone Number" data-token="684" style="text-overflow:ellipsis;white-space:nowrap;overflow:hidden;"> 2739 <i class="fa fa-phone fa-fw"></i> 2740 Show Phone Number 2741 </div> 2742 <div class="hide myphoneHide"> 2743 <a href="tel:7143154675"><span class="text-secondary">Call: <u>7143154675</u></span></a> </div> 2744 </span> 2745 </div> 2746 </div> 2747 <div class="clearfix"></div> 2748 </div> 2749</div> 2750<div class="clearfix"></div> 2751<hr> 2752<span class="google-pin-location" id="google-pin" data-token="684"data-hideMessages="0" data-lat="33.76173180" data-lng="-118.00785860" data-name="Squared Up Cleaning" data-filename="/united-states/westminster/business-professional-services/squared-up-cleaning" data-photo="/images/profile-profile-holder.png" data-phone="7143154675" data-addon="1"></span><div class="row-fluid member_results level_6 search_result clearfix" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem"> 2753 <meta itemprop="name" content="Universal Remodeling">
2754 <link itemprop="url" href="https://www.westminsterchamber.org/search_results"> 2755 <meta itemprop="position" content="7"> 2756 <div itemprop="item" itemscope itemtype="https://schema.org/LocalBusiness" itemid="https://www.westminsterchamber.org/united-states/westminster/home-services/universal-remodeling#entity"> 2757 <meta itemprop="name" content="Universal Remodeling"> 2758 <link itemprop="url" href="https://www.westminsterchamber.org/united-states/westminster/home-services/universal-remodeling"> 2759 <link itemprop="image" href="https://www.westminsterchamber.org/logos/profile/limage-775-192-photo.webp"> 2760 <meta itemprop="priceRange" content="$$"> 2761 <meta itemprop="telephone" content="657763-4683"> 2762 <meta itemprop="description" content="Marketing specialist for Home Service Businesses (SEO, Paid Advertising, Lead Generation- C2Thrive Local Marketing). Working with Universal Remodeling."> 2763 <div itemprop="address" itemscope itemtype="https://schema.org/PostalAddress"> 2764 <meta itemprop="streetAddress" content="5911 Westminster Blvd."> 2765 <meta itemprop="addressLocality" content="Westminster"> 2766 <meta itemprop="addressRegion" content="CA"> 2767 <meta itemprop="postalCode" content="92683"> 2768 <meta itemprop="addressCountry" content="US"> 2769 </div> 2770 <div itemprop="geo" itemscope itemtype="https://schema.org/GeoCoordinates"> 2771 <meta itemprop="latitude" content="33.75930320"> 2772 <meta itemprop="longitude" content="-118.02599630"> 2773 </div> 2774 <link itemprop="mainEntityOfPage" href="https://www.westminsterchamber.org/united-states/westminster/home-services/universal-remodeling#page"> 2775 </div> 2776 <div class="grid_element"> 2777 <div class="img_section col-xs-2 nopad"> 2778 <a title="Universal Remodeling - Westminster California Businesses" href="/united-states/westminster/home-services/universal-remodeling"> 2779 <img class="search_result_image img-rounded center-block lazyloader" loading="auto" width="400" height="400" alt="Universal Remodeling" data-src="https://www.westminsterchamber.org/logos/profile/limage-775-192-photo.webp"> 2780 2781 </a> 2782 </div> 2783 <div class="mid_section col-xs-10 col-sm-7 norpad"> 2784 <span class="postItem" data-userid="775" data-datatype="10" data-dataid="10" data-postid="0"></span><button class="item-post-list-0 favorite fa fa-heart" aria-label="LIKE" data-count="0" data-postid="0" data-state="0" data-activefeature="1" data-activefavorite="CORE MEMBERSHIP" data-toggle="modal" data-target="#myModal" ><span id='bookmark-content'>LIKE</span> <span class='' id='number-0'></span></button> <a class="center-block" title="Universal Remodeling" href="/united-states/westminster/home-services/universal-remodeling"> 2785 <span class="h3 bold inline-block nomargin member-search-full-name notranslate"> 2786 Universal Remodeling </span> 2787 </a> 2788 <div class="clearfix fpad-sm nobpad"></div> 2789 <div class="clearfix fpad-sm nobpad"></div> 2790 2791 2792 <p class="small nomargin member-search-description"> 2793 Marketing specialist for Home Service Businesses (SEO, Paid Advertising, Lead Generation- C2Thrive Local Marketing). Working with Universal Remodeling. </p> 2794 <div class="clearfix fpad-sm nobpad"></div> 2795 <span class="member-search-location rmargin"> 2796 <i class="fa fa-map-marker text-danger"></i> 2797 <small> 2798 Westminster, California, <span class="inline-block">92683</span>, <span class=inline-block>United States</span></small></span> </div> 2799 <div class="info_section hidden-xs col-sm-3 norpad"> 2800 <div class="module nomargin fpad-md text-center"> 2801 <a href="/united-states/westminster/home-services/universal-remodeling"> 2802 <img alt="Universal Remodeling" src="/images/badges/search_badge_wcc.png" /> 2803</a> 2804<div class="clearfix bpad"></div> 2805 <a 2806 title="View Listing - Universal Remodeling" 2807 aria-label="View Listing - Universal Remodeling" 2808 class="btn btn-sm btn-primary btn-block bold search_view_listing_button" 2809 href="/united-states/westminster/home-services/universal-remodeling">View Listing</a> 2810 <div class="clearfix fpad-sm nobpad"></div> 2811 <a 2812 title="Send Message - Universal Remodeling" 2813 aria-label="Send Message - Universal Remodeling" 2814 class="btn btn-sm btn-secondary btn-block bold search_contact_now_button" 2815 href="/united-states/westminster/home-services/universal-remodeling/connect">Send Message</a> 2816 <div class="clearfix"></div> 2817 <div class="clearfix fpad-sm nobpad"></div> 2818 <span class="btn btn-secondary btn-outline btn-sm bold click-to-call-button search_show_phone_button btn-block"> 2819 <div class="myPhoneHideParent" onClick="clickToCall(this)" title="Show Phone Number" data-token="775" style="text-overflow:ellipsis;white-space:nowrap;overflow:hidden;"> 2820 <i class="fa fa-phone fa-fw"></i> 2821 Show Phone Number 2822 </div> 2823 <div class="hide myphoneHide"> 2824 <a href="tel:6577634683"><span class="text-secondary">Call: <u>(657) 763-4683</u></span></a> </div> 2825 </span> 2826 </div> 2827 </div> 2828 <div class="clearfix"></div> 2829 </div> 2830</div> 2831<div class="clearfix"></div> 2832<hr> 2833<span class="google-pin-location" id="google-pin" data-token="775"data-hideMessages="0" data-lat="33.75930320" data-lng="-118.02599630" data-name="Universal Remodeling" data-filename="/united-states/westminster/home-services/universal-remodeling" data-photo="/logos/profile/limage-775-192-photo.webp" data-phone="(657) 763-4683" data-addon="1"></span><div class="row-fluid member_results level_6 search_result clearfix" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem"> 2834 <meta itemprop="name" content="White Glove Plumbing Orange County">
2835 <link itemprop="url" href="https://www.westminsterchamber.org/search_results"> 2836 <meta itemprop="position" content="8"> 2837 <div itemprop="item" itemscope itemtype="https://schema.org/LocalBusiness" itemid="https://www.westminsterchamber.org/united-states/santa-ana/business-professional-services/white-glove-plumbing-orange-county#entity"> 2838 <meta itemprop="name" content="White Glove Plumbing Orange County"> 2839 <link itemprop="url" href="https://www.westminsterchamber.org/united-states/santa-ana/business-professional-services/white-glove-plumbing-orange-county"> 2840 <link itemprop="image" href="https://www.westminsterchamber.org/logos/profile/limage-682-396-photo.png"> 2841 <meta itemprop="priceRange" content="$$"> 2842 <meta itemprop="telephone" content="949209-5206"> 2843 <meta itemprop="description" content="White Glove Plumbing is Orange Countyâs go-to plumber for homes and businessesâfast, friendly, and 24/7."> 2844 <div itemprop="address" itemscope itemtype="https://schema.org/PostalAddress"> 2845 <meta itemprop="streetAddress" content="1430 E Borchard Ave"> 2846 <meta itemprop="addressLocality" content="Santa Ana"> 2847 <meta itemprop="addressRegion" content="CA"> 2848 <meta itemprop="postalCode" content="92705"> 2849 <meta itemprop="addressCountry" content="US"> 2850 </div> 2851 <div itemprop="geo" itemscope itemtype="https://schema.org/GeoCoordinates"> 2852 <meta itemprop="latitude" content="33.72783690"> 2853 <meta itemprop="longitude" content="-117.85115680"> 2854 </div> 2855 <link itemprop="mainEntityOfPage" href="https://www.westminsterchamber.org/united-states/santa-ana/business-professional-services/white-glove-plumbing-orange-county#page"> 2856 </div> 2857 <div class="grid_element"> 2858 <div class="img_section col-xs-2 nopad"> 2859 <a title="White Glove Plumbing Orange County - Westminster California Businesses" href="/united-states/santa-ana/business-professional-services/white-glove-plumbing-orange-county"> 2860 <img class="search_result_image img-rounded center-block lazyloader" loading="auto" width="400" height="400" alt="White Glove Plumbing Orange County" data-src="https://www.westminsterchamber.org/logos/profile/limage-682-396-photo.png"> 2861 2862 </a> 2863 </div> 2864 <div class="mid_section col-xs-10 col-sm-7 norpad"> 2865 <span class="postItem" data-userid="682" data-datatype="10" data-dataid="10" data-postid="0"></span><button class="item-post-list-0 favorite fa fa-heart" aria-label="LIKE" data-count="0" data-postid="0" data-state="0" data-activefeature="1" data-activefavorite="CORE MEMBERSHIP" data-toggle="modal" data-target="#myModal" ><span id='bookmark-content'>LIKE</span> <span class='' id='number-0'></span></button> <a class="center-block" title="White Glove Plumbing Orange County" href="/united-states/santa-ana/business-professional-services/white-glove-plumbing-orange-county"> 2866 <span class="h3 bold inline-block nomargin member-search-full-name notranslate"> 2867 White Glove Plumbing Orange County </span> 2868 </a> 2869 <div class="clearfix fpad-sm nobpad"></div> 2870 <div class="clearfix fpad-sm nobpad"></div> 2871 2872 2873 <p class="small nomargin member-search-description"> 2874 White Glove Plumbing is Orange Countyâs go-to plumber for homes and businessesâfast, friendly, and 24/7. </p> 2875 <div class="clearfix fpad-sm nobpad"></div> 2876 <span class="member-search-location rmargin"> 2877 <i class="fa fa-map-marker text-danger"></i> 2878 <small> 2879 Santa Ana, California, <span class="inline-block">92705</span>, <span class=inline-block>United States</span></small></span> </div> 2880 <div class="info_section hidden-xs col-sm-3 norpad"> 2881 <div class="module nomargin fpad-md text-center"> 2882 <a href="/united-states/santa-ana/business-professional-services/white-glove-plumbing-orange-county"> 2883 <img alt="White Glove Plumbing Orange County" src="/images/badges/search_badge_wcc.png" /> 2884</a> 2885<div class="clearfix bpad"></div> 2886 <a 2887 title="View Listing - White Glove Plumbing Orange County" 2888 aria-label="View Listing - White Glove Plumbing Orange County" 2889 class="btn btn-sm btn-primary btn-block bold search_view_listing_button" 2890 href="/united-states/santa-ana/business-professional-services/white-glove-plumbing-orange-county">View Listing</a> 2891 <div class="clearfix fpad-sm nobpad"></div> 2892 <a 2893 title="Send Message - White Glove Plumbing Orange County" 2894 aria-label="Send Message - White Glove Plumbing Orange County" 2895 class="btn btn-sm btn-secondary btn-block bold search_contact_now_button" 2896 href="/united-states/santa-ana/business-professional-services/white-glove-plumbing-orange-county/connect">Send Message</a> 2897 <div class="clearfix"></div> 2898 <div class="clearfix fpad-sm nobpad"></div> 2899 <span class="btn btn-secondary btn-outline btn-sm bold click-to-call-button search_show_phone_button btn-block"> 2900 <div class="myPhoneHideParent" onClick="clickToCall(this)" title="Show Phone Number" data-token="682" style="text-overflow:ellipsis;white-space:nowrap;overflow:hidden;"> 2901 <i class="fa fa-phone fa-fw"></i> 2902 Show Phone Number 2903 </div> 2904 <div class="hide myphoneHide"> 2905 <a href="tel:9492095206"><span class="text-secondary">Call: <u>(949) 209-5206</u></span></a> </div> 2906 </span> 2907 </div> 2908 </div> 2909 <div class="clearfix"></div> 2910 </div> 2911</div> 2912<div class="clearfix"></div> 2913<hr> 2914<span class="google-pin-location" id="google-pin" data-token="682"data-hideMessages="0" data-lat="33.72783690" data-lng="-117.85115680" data-name="White Glove Plumbing Orange County" data-filename="/united-states/santa-ana/business-professional-services/white-glove-plumbing-orange-county" data-photo="/logos/profile/limage-682-396-photo.png" data-phone="(949) 209-5206" data-addon="1"></span><div class="row-fluid member_results level_1 search_result clearfix" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem"> 2915 <meta itemprop="name" content="Abrazar">
2916 <link itemprop="url" href="https://www.westminsterchamber.org/search_results"> 2917 <meta itemprop="position" content="9"> 2918 <div itemprop="item" itemscope itemtype="https://schema.org/LocalBusiness" itemid="https://www.westminsterchamber.org/california/westminster/family-community-civic-organizations/abrazar#entity"> 2919 <meta itemprop="name" content="Abrazar"> 2920 <link itemprop="url" href="https://www.westminsterchamber.org/california/westminster/family-community-civic-organizations/abrazar"> 2921 <link itemprop="image" href="https://www.westminsterchamber.org/logos/profile/limage-28-86-photo.jpg"> 2922 <meta itemprop="priceRange" content="$$"> 2923 <meta itemprop="telephone" content="714-893-3581"> 2924 <div itemprop="address" itemscope itemtype="https://schema.org/PostalAddress"> 2925 <meta itemprop="streetAddress" content="7101 Wyoming St"> 2926 <meta itemprop="addressLocality" content="Westminster"> 2927 <meta itemprop="addressRegion" content="CA"> 2928 <meta itemprop="postalCode" content="92683"> 2929 <meta itemprop="addressCountry" content="US"> 2930 </div> 2931 <div itemprop="geo" itemscope itemtype="https://schema.org/GeoCoordinates"> 2932 <meta itemprop="latitude" content="33.76116460"> 2933 <meta itemprop="longitude" content="-118.00493070"> 2934 </div> 2935 <link itemprop="mainEntityOfPage" href="https://www.westminsterchamber.org/california/westminster/family-community-civic-organizations/abrazar#page"> 2936 </div> 2937 <div class="grid_element"> 2938 <div class="img_section col-xs-2 nopad"> 2939 <a title="Abrazar - Westminster California Businesses" href="/california/westminster/family-community-civic-organizations/abrazar"> 2940 <img class="search_result_image img-rounded center-block lazyloader" loading="auto" width="400" height="400" alt="Abrazar" data-src="https://www.westminsterchamber.org/logos/profile/limage-28-86-photo.jpg"> 2941 2942 </a> 2943 </div> 2944 <div class="mid_section col-xs-10 col-sm-7 norpad"> 2945 <span class="postItem" data-userid="28" data-datatype="10" data-dataid="10" data-postid="0"></span><button class="item-post-list-0 favorite fa fa-heart" aria-label="LIKE" data-count="0" data-postid="0" data-state="0" data-activefeature="1" data-activefavorite="NON-PROFIT / GOVERNMENT MEMBERSHIP" data-toggle="modal" data-target="#myModal" ><span id='bookmark-content'>LIKE</span> <span class='' id='number-0'></span></button> <a class="center-block" title="Abrazar" href="/california/westminster/family-community-civic-organizations/abrazar"> 2946 <span class="h3 bold inline-block nomargin member-search-full-name notranslate"> 2947 Abrazar </span> 2948 </a> 2949 <div class="clearfix fpad-sm nobpad"></div> 2950 <div class="clearfix fpad-sm nobpad"></div> 2951 2952 <div class="clearfix fpad-sm nobpad"></div> 2953 <span class="member-search-location rmargin"> 2954 <i class="fa fa-map-marker text-danger"></i> 2955 <small> 2956 Westminster, California, <span class="inline-block">92683</span>, <span class=inline-block>United States</span></small></span> </div> 2957 <div class="info_section hidden-xs col-sm-3 norpad"> 2958 <div class="module nomargin fpad-md text-center"> 2959 <a href="/california/westminster/family-community-civic-organizations/abrazar"> 2960 <img alt="Abrazar" src="/images/badges/search_badge_wcc.png" /> 2961</a> 2962<div class="clearfix bpad"></div> 2963 <a 2964 title="View Listing - Abrazar" 2965 aria-label="View Listing - Abrazar" 2966 class="btn btn-sm btn-primary btn-block bold search_view_listing_button" 2967 href="/california/westminster/family-community-civic-organizations/abrazar">View Listing</a> 2968 <div class="clearfix fpad-sm nobpad"></div> 2969 <a 2970 title="Send Message - Abrazar" 2971 aria-label="Send Message - Abrazar" 2972 class="btn btn-sm btn-secondary btn-block bold search_contact_now_button" 2973 href="/california/westminster/family-community-civic-organizations/abrazar/connect">Send Message</a> 2974 <div class="clearfix"></div> 2975 <div class="clearfix fpad-sm nobpad"></div> 2976 <span class="btn btn-secondary btn-outline btn-sm bold click-to-call-button search_show_phone_button btn-block"> 2977 <div class="myPhoneHideParent" onClick="clickToCall(this)" title="Show Phone Number" data-token="28" style="text-overflow:ellipsis;white-space:nowrap;overflow:hidden;"> 2978 <i class="fa fa-phone fa-fw"></i> 2979 Show Phone Number 2980 </div> 2981 <div class="hide myphoneHide"> 2982 <a href="tel:7148933581"><span class="text-secondary">Call: <u>714-893-3581</u></span></a> </div> 2983 </span> 2984 </div> 2985 </div> 2986 <div class="clearfix"></div> 2987 </div> 2988</div> 2989<div class="clearfix"></div> 2990<hr> 2991<span class="google-pin-location" id="google-pin" data-token="28"data-hideMessages="0" data-lat="33.76116460" data-lng="-118.00493070" data-name="Abrazar" data-filename="/california/westminster/family-community-civic-organizations/abrazar" data-photo="/logos/profile/limage-28-86-photo.jpg" data-phone="714-893-3581" data-addon="1"></span></div> 2992<div class="col-md-12 text-center nopad clickToLoadMoreContainer">
2993 <div id="btnToLoadMorePost" class="btn btn-secondary btn-block btn-lg bold clickToLoadMoreBtn " data-page="2" data-lvl="" data-type="10" data-dc="1">Click To Load More Results</div> 2994</div><div class="clearfix clearfix-lg"></div> 2995<style> 2996 .gridBtnLazyLoadOld { 2997 clear: both; 2998 position: absolute; 2999 bottom: -30px; 3000 } 3001 .loadingMore{ 3002 pointer-events: none; 3003 } 3004 .grid-container.visible.row hr { 3005 display: none; 3006 } 3007</style> 3008 <div class="map_container" style="display:none;"> 3009 <style type='text/css'> .info_window p { 3010 text-align: center; 3011 font-size: 12px; 3012 margin: 5px 0; 3013} 3014.info_window > a { 3015 display: block; 3016 text-align: center; 3017 margin: 5px 0; 3018} 3019.info_window img { 3020 display: block; 3021 max-width: 125px; 3022 margin: 0 auto; 3023 max-height:80px; 3024} 3025.info_window { 3026 width: 150px; 3027} 3028.gm-style-iw div div { 3029 overflow: visible!important; 3030} 3031#map-canvas { 3032 height: 500px; 3033 margin-bottom: 15px; 3034 width: 100%; 3035} 3036.suggestion-search-location { 3037 margin: 2px 2px; 3038 color: #333; 3039 background-color: #CEDDE9; 3040 display: inline-block; 3041 padding: 5px 11px; 3042} 3043 3044.other-locations-container { 3045 overflow: hidden; 3046 max-height: 32px; 3047 transition: all 0.5s ease 0s; 3048} 3049span.show-more-suggestions { 3050 padding: 5px; 3051 margin: 0px 13px 9px 4px; 3052 display: inline-block; 3053 cursor: pointer; 3054 color: #1a0dab; 3055 font-weight: 500; 3056} 3057span.show-more-suggestions:hover { 3058 text-decoration: underline; 3059} 3060.suggestions-heading { 3061 margin-bottom: 5px; 3062} </style><div id="map-canvas"></div> </div>
3063<script async> 3064 function clickToCall (element, hideFlag=true) { 3065 var userToken = $(element).attr("data-token") 3066 $.ajax({ 3067 url: "/api/stats/json/post/users_clicks/insert", 3068 dataType: "json", 3069 type: "POST", 3070 data: { 3071 user_id: userToken, 3072 click_name: "Phone Number", 3073 click_type: 'Phone Number', 3074 //click_url: $(element).attr("href"), 3075 click_from: window.location.href 3076 }, 3077 success: function (data) { 3078 3079 } 3080 }); 3081 if(hideFlag){ 3082 $(element).siblings().toggleClass("hide"); 3083 $(element).remove(); 3084 } else { 3085 $(element).addClass("hide").siblings().removeClass("hide"); 3086 } 3087 } 3088</script>
3088 3089 <div class="member-pagination-block"> 3090 <style type='text/css'> .member-pagination-block:not(:has(li)) { 3091 display: none; 3092} </style><div class="clearfix tmargin"></div> 3093<ul class="pagination pagination-lg"> 3094 </ul> 3095<div class="clearfix clearfix-lg"></div> <div class="clearfix"></div> 3096 </div> 3097 </div> 3098 </div> 3099 </div> 3100 3101 <div class="col-sm-12 col-md-3 sidebar-container"> <!-- 3102 3103This search module will detect which of the default membership features' search results pages is being viewed and display the related search feature. 3104 3105IMPORTANT: 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. 3106 3107--> 3108 3109<div class="module sidebar-search-member-keyword-location"> 3110 <h2>Find Westminster California Businesses</h2> 3111 <form action="/search_results" class="website-search" accept-charset="UTF-8" method="get"> 3112 3113 <div class="form-group normal-autosuggest"> 3114 <label>What do you need:</label> 3115 <input type="text" name="q" value="" placeholder="Name or Keyword" class="form-control member_search"> 3116 </div> 3117 3118 <div class="form-group"> 3119 <label>Search by location:</label> 3120 <input type=text autocomplete="off" placeholder="City or Post Code" class="googleSuggest googleLocation form-control" id="location_google_maps_homepage" name="location_value" value=""> 3121 </div> 3122 3123 <div class="form-group nomargin"> 3124 <button class="btn btn-primary btn-block" type="submit">Search Now</button> 3125 </div> 3126 </form> 3127</div><div class="module newsletter-sign-up-form"> 3128 <h2 class="bpad text-center">Join Our Newsletter</h2> 3129 <a href="#" data-toggle="modal" data-target="#newsletter_subscribe_modal" class="btn btn-primary btn-block"> 3130 Click to Subscribe 3131 </a> 3132</div> 3133 3134<div class="modal fade" id="newsletter_subscribe_modal" tabindex="-1" role="dialog" aria-hidden="true"> 3135 <div class="modal-dialog"> 3136 <div class="modal-content"> 3137 <div class="container-fluid"> 3138 <div class="row"> 3139 <div class="col-md-12"> 3140 <br> 3141 <button type="button" class="close" data-dismiss="modal" aria-label="Close"> 3142 <span aria-hidden="true">×</span> 3143 </button> 3144 <h3 class="nomargin"> 3145 Join Our Newsletter 3146 </h3> 3147 <hr> 3148 <div class="newsletter_modal_form_container"> 3149 <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="mysql_real_escape_string_runned" value="1" id="newsletter_modal_signup_380-element-1"/><input type="hidden" name="form" value="myform" id="newsletter_modal_signup_380-element-2"/><input type="hidden" name="formname" value="newsletter_modal_signup" id="newsletter_modal_signup_380-element-3"/><input type="hidden" name="dowiz" value="1" id="newsletter_modal_signup_380-element-4"/><input type="hidden" name="save" value="1" id="newsletter_modal_signup_380-element-5"/><input type="hidden" name="url_origin_pars" value="/search_results" id="newsletter_modal_signup_380-element-6"/><input type="hidden" name="action" autocomplete="off" value="subscribe" id="newsletter_modal_signup_380-element-7"/><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-8"/></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-9"/></div><div class="form-group"><div class="form-group security_question_label"> 3150 <div id="newsletter_modal_signup_380-captchaContainer" class="control-group"> 3151 <div class="g-recaptcha" id="newsletter_modal_signup_380-google-recaptcha"></div> 3152 </div> 3153 <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> 3154 <div class="clearfix bmargin"></div> 3155 <input type="hidden" name="recaptcha" id="newsletter_modal_signup_380-rcap"> 3156</div> 3157 <style> 3158 .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 { 3159 transform: scale(0.77); 3160 -webkit-transform: scale(0.77); 3161 transform-origin: 0 0; 3162 -webkit-transform-origin: 0 0; 3163 margin-bottom: -15px; 3164 } 3165 3166 .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 { 3167 transform: scale(0.77); 3168 -webkit-transform: scale(0.77); 3169 transform-origin: 0 0; 3170 -webkit-transform-origin: 0 0; 3171 margin-bottom: -15px; 3172 } 3173 </style> 3174
3174<script type="text/javascript"> 3175 if(typeof formsFound == "undefined"){ 3176 var formID = ''; 3177 var currentCaptcha = {}; 3178 var captchaHolders = {}; 3179 var formsFound = {}; 3180 var captchaApiRequested = false; 3181 /* The forms the visitor has actually interacted with - only these get a widget. */ 3182 var captchaArmedForms = []; 3183 /* api.js stays lazy - nothing is fetched from Google until the visitor actually 3184 touches the form. 'click' alone was too narrow: a keyboard-only visitor tabs in 3185 and presses Enter without ever clicking, so api.js never loaded, the captcha 3186 never rendered, and the form POSTed an empty token. */ 3187 var captchaTriggerEvents = ['click', 'keydown', 'focusin', 'touchstart']; 3188 3189 window.addEventListener('load', () => { 3190 formID = document.querySelectorAll('[name="recaptcha"]'); 3191 if (typeof formID != "undefined" && formID !== null) { 3192 for (let i = 0; i < formID.length; i++) { 3193 let formIDForm = formID[i].closest('form'); 3194 let captchaHolder = formIDForm.querySelector(".g-recaptcha"); 3195 3196 if (typeof formsFound[formIDForm.id] != "undefined") { 3197 formsFound[formIDForm.id]['counter']++; 3198 }else{ 3199 formsFound[formIDForm.id] = {'counter' : 1}; 3200 } 3201 3202 formIDForm.setAttribute('data-counter', formsFound[formIDForm.id]['counter']); 3203 captchaHolder.setAttribute('id',captchaHolder.id+'-'+formsFound[formIDForm.id]['counter']); 3204 3205 if (typeof formIDForm != "undefined" && formIDForm !== null) { 3206 captchaTriggerEvents.forEach( evt => 3207 formIDForm.addEventListener(evt, reCaptchaOnFormInteraction, false) 3208 ); 3209 } 3210 } 3211 } 3212 }); 3213 } 3214 3215 function reCaptchaOnFormInteraction(event) { 3216 if (event && event.currentTarget) { 3217 captchaArmForm(event.currentTarget); 3218 } 3219 if (captchaApiRequested) { 3220 renderArmedCaptchas(); 3221 return; 3222 } 3223 captchaApiRequested = true; 3224 3225 var head = document.getElementsByTagName('head')[0]; 3226 var script = document.createElement('script'); 3227 script.type = 'text/javascript'; 3228 script.src = 'https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit&hl=en'; 3229 head.appendChild(script); 3230 } 3231 3232 var captchaArmForm = function (formEl) { 3233 if (!formEl) { 3234 return; 3235 } 3236 for (var a = 0; a < captchaArmedForms.length; a++) { 3237 if (captchaArmedForms[a] === formEl) { 3238 return; 3239 } 3240 } 3241 captchaArmedForms.push(formEl); 3242 }; 3243 3244 var captchaSolvedCallback = function (holder) { 3245 return function () { 3246 var formEl = holder.closest('form'); 3247 if (!formEl) { 3248 return; 3249 } 3250 $(formEl).find('.security_question_label').removeClass('has-error'); 3251 $(formEl).find('#recaptcha_error').css('display', 'none'); 3252 var notification = document.getElementById(formEl.id + '-notification'); 3253 if (notification && notification.classList.contains('alert-danger-subtle')) { 3254 $(notification).slideUp(); 3255 } 3256 }; 3257 }; 3258 3259 var renderArmedCaptchas = function () { 3260 if (typeof grecaptcha === "undefined" || typeof grecaptcha.render !== "function") { 3261 return; 3262 } 3263 for (var f = 0; f < captchaArmedForms.length; f++) { 3264 var holder = captchaArmedForms[f].querySelector('div[class=g-rec
3264aptcha]'); 3265 3266 if (!holder || !holder.id || holder.getClientRects().length === 0) { 3267 continue; 3268 } 3269 /* Guard a second render: grecaptcha throws on an element it already claimed. */ 3270 if (typeof captchaHolders[holder.id] === "undefined") { 3271 captchaHolders[holder.id] = grecaptcha.render(holder.id, { 3272 'sitekey': '6LfhXt8sAAAAAJL4MkgqvsOdY53C6pIw3RIhlGMq', 3273 'callback': captchaSolvedCallback(holder) 3274 }); 3275 } 3276 } 3277 }; 3278 3279 var onloadCallback = function (event) { 3280 renderArmedCaptchas(); 3281 }; 3282 3283 </script>
vendor: 1 bytes, line 3283
3283
3284<script> 3285 $(document).ready(function(){ 3286 /* Implicit submission (Enter inside a field) fires 'submit' without firing a click on 3287 the submit button, so the click guard below never sees it and the form POSTed an 3288 empty token. Bound on document/capture so it runs before FormValidation's own 3289 handler on the form - at AT_TARGET the capture flag does not order listeners, so a 3290 listener on the form itself would not reliably win. Native HTMLFormElement.submit() 3291 does not dispatch 'submit', so the solved-captcha path below is unaffected. */ 3292 var captchaGuardedForm = document.getElementById('newsletter_modal_signup_380'); 3293 if (captchaGuardedForm) { 3294 document.addEventListener('submit', function (event) { 3295 if (event.target !== captchaGuardedForm) { 3296 return; 3297 } 3298 3299 var formId = captchaGuardedForm.id; 3300 var captchaHolderKey = formId + "-google-recaptcha-" + $(captchaGuardedForm).data('counter'); 3301 var captchaRendered = typeof captchaHolders[captchaHolderKey] != "undefined"; 3302 3303 if (captchaRendered && grecaptcha.getResponse(captchaHolders[captchaHolderKey]) !== "") { 3304 $("#" + formId + " .security_question_label").removeClass("has-error"); 3305 $("#" + formId + " #recaptcha_error").css("display", "none"); 3306 return; 3307 } 3308 3309 /* Unsolved, or api.js still in flight: either way there is no token to send. */ 3310 event.preventDefault(); 3311 event.stopImmediatePropagation(); 3312 $("#" + formId + " .security_question_label").addClass("has-error"); 3313 $("#" + formId + " #recaptcha_error").css("display", "block"); 3314 return false; 3315 }, true); 3316 } 3317 $("#newsletter_modal_signup_380 input[type=submit]").unbind('click'); 3318 $("#newsletter_modal_signup_380 input[type=submit]").click(function (event) { 3319 3320 var formId = $(this.form).attr('id'); 3321 var captchaHolderKey = formId + "-google-recaptcha-" +$(this.form).data('counter'); 3322 3323 if (typeof captchaHolders[captchaHolderKey] != "undefined") { 3324 if (grecaptcha.getResponse(captchaHolders[captchaHolderKey]) === "") { 3325 event.preventDefault(); 3326 $("#" + formId).formValidation('validate'); 3327 $("#" + formId + " .security_question_label").addClass("has-error"); 3328 $("#" + formId + " #recaptcha_error").css("display", "block"); 3329 return false; 3330 } 3331 3332 /* Solved captcha: clear the error UI and let the click proceed untouched. 3333 The browser then fires a REAL, button-initiated submit event, so 3334 FormValidation runs its normal chain (success.form.fv -> AJAX modal on 3335 checkout / native POST on login). Re-submitting here artificially broke 3336 both ways: native form.submit() skips the FV chain (checkout rendered the 3337 raw JSON response), and jQuery .submit() fires a synthetic submit that FV 3338 refuses, leaving the form stuck after the first error (Bug 2). */ 3339 $("#" + formId + " .security_question_label").removeClass("has-error"); 3340 $("#" + formId + " #recaptcha_error").css("display", "none"); 3341 } 3342 }); 3343 }); 3344</script>
3344</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-12"/></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-13"/></div><input type='hidden' name='origin' value='/search_results'></form>
3344<script type="text/javascript">jQuery(document).ready(function() { jQuery("#newsletter_modal_signup_380").bind("submit", function() { 3345 });}); </script>
3345 </div> 3346 <br> 3347 </div> 3348 </div> 3349 </div> 3350 </div> 3351 </div> 3352</div><div class="module member-join-offer"> 3353 <h2>Join Our Community</h2> 3354 <p> 3355 <b>1.</b> Register a member account<br> 3356 <b>2.</b> Create a searchable listing<br> 3357 <b>3.</b> Connect with more clients 3358 </p> 3359 <a title="Get Listed Today" href="/join" class="btn btn-primary btn-block">Get Listed Today</a> 3360</div> 3361 </div> 3362 </div> 3363 3364 <div class="clearfix"></div> 3365 </div> 3366</div> 3367<!-- End Content --> 3368<div class="clearfix footer-clear-element clearfix-lg"></div> 3369 3370<style type='text/css'> .newsletter_row input[type="email"] { 3371 float: none; 3372 margin-left: auto; 3373 margin-right: auto; 3374 width: 62% !important; 3375} </style><div class="content-container newsletter_row"> 3376 <div class="container text-center vpad"> 3377 <div class="col-md-12 xs-nopad"> 3378 <style type='text/css'> @media only screen and (min-width: 768px) { 3379 .newsletter_footer_button { 3380 display: flex; 3381 align-items: center; 3382 margin-left: auto; 3383 margin-right: auto; 3384 } 3385} </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"> 3386 <div class="col-sm-6 nopad newsletter_button_left"> 3387 Join Our Newsletter 3388 </div> 3389 <div class="col-sm-6 nopad newsletter_button_right"> 3390 Click to Subscribe 3391 <i class='fa fa-chevron-circle-right fa-fw'></i> 3392 </div> 3393 3394 <div class="clearfix"></div> 3395</a> 3396 </div> 3397 </div> 3398</div><div class="footer"> 3399 <div class="container"> 3400 <div class="row"> 3401 <ul class="footer_menu sm-text-center"> 3402 <li class='btn TopSection'><a href='/join' id='link399'>Westminster California Businesses - Get Listed Today</a></li><li class='col-md-3 col-md-offset-1 footer-mg'><span id='link359' class='head'> About Us</span><ul><li class=''><a href='https://www.westminsterchamber.org/categories' id='link412'>Browse Categories</a></li><li class='m-t-li'><a href='https://www.westminsterchamber.org/locations' id='link413'>Browse Locations</a></li><li class=''><a href='https://www.westminsterchamber.org/about' id='link360' class='content'>How It Works</a></li></ul></li><li class='col-md-3 col-md-offset-1 footer-mg'><span id='link367' class='head'> Connect with Us</span><ul><li class=''><span id='link368'> <style>.network-icon.twitter,.network-icon.tiktok{background:#000}</style> 3403<div class="list-social-links"> 3404 <a class="network-icon contact" href="/about/contact" title="Contact Us Westminster Chamber of Commerce"> 3405 <i class="bi bi-envelope"></i> 3406 </a> 3407 <a class="network-icon facebook" href="https://www.facebook.com/WestminsterChamberOfCommerce/" target="_blank" title="Westminster Chamber of Commerce Facebook"> 3408 <i class="bi bi-facebook"></i> 3409 </a> 3410 3411 3412 3413 <a class="network-icon instagram" href="https://www.instagram.com/wmchamber/" target="_blank" title="Westminster Chamber of Commerce Instagram"> 3414 <i class="bi bi-instagram"></i> 3415 </a> 3416 <div class="clearfix"></div> 3417</div></span></li></ul></li><li class='col-md-3 col-md-offset-1 footer-mg'><span id='link407' class='head'> Support</span><ul><li class=''><a href='/login' id='link408'>Member Login</a></li><li class=''><a href='/about/contact' id='link409'>Contact Us</a></li><li class=''><a href='https://www.westminsterchamber.org/join' id='link415' target='_blank'>List Your Company</a></li></ul></li><li class='col-md-12 clearfix'><span id='link370'> </span></li><li class='col-md-12 clearfix vmargin text-center remove-mb'><span id='link373'> </span><ul><li class='btn-lg font-sm novpad norpad inline-block'><span id='link375'> © 2026</span></li><li class='font-sm inline-block hpad'><a href='/' id='link376' title='Westminster Chamber of Commerce'>Westminster Chamber of Commerce</a></li><li class='font-sm inline-block'><span id='link377'> All Rights Reserved</span></li><li class='font-sm inline-block hpad'><a href='/about/terms' id='link378' title='Terms of Use'>Terms of Use</a></li><li class='font-sm inline-block'><a href='/about/privacy' id='link379' title='Privacy Policy'>Privacy Policy</a></li></ul></li><li class=''><span id='link406'> </span></li> </ul> 3418 </div> 3419 </div> 3420</div><style type='text/css'> .scrollup { 3421 border-radius: 3px; 3422 width: 40px; 3423 height: 40px; 3424 opacity: 0.4; 3425 position: fixed; 3426 bottom: 30px; 3427 right: 30px; 3428 display: none; 3429 background: rgba(119, 119, 119, 0.8); 3430 z-index: 1000000; 3431} 3432.scrollup i { 3433 font-size: 36px; 3434 color: white; 3435 position: relative; 3436 top: 0px; 3437 left: 10px; 3438} </style> <div class="myModal modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="mySmallMod
3438alLabel" 3439 data-backdrop="static" data-keyboard="false"> 3440 <div class="modal-dialog" role="document"> 3441 <div class="modal-content"> 3442 <div class="modal-body nohpad nobpad"> 3443 <button type="button" style="z-index:10;position:absolute;right:15px;" class="close hmargin" 3444 data-dismiss="modal">× 3445 </button> 3446 <style> 3447 .member-login-container:not(.modal .module) { 3448 width: 555px; 3449 max-width: 100%; 3450 margin-left: auto; 3451 margin-right: auto; 3452 margin-bottom:0; 3453 background-color: rgb(245, 245, 245)!important; 3454 border-color: rgb(221, 221, 221)!important; 3455 color: rgb(41, 41, 41)!important; 3456 } 3457 .login-register-tabs, .login-register-content { 3458 width: 555px!important; 3459 max-width: 100%; 3460 margin-left: auto!important; 3461 margin-right: auto!important; 3462 background-color: rgb(221, 221, 221); 3463 } 3464 .login-register-content { 3465 background: transparent; 3466 padding: 0; 3467 border: none; 3468 } 3469 .login-register-content h2, .login-register-content h2+hr, .login-register-content .account-menu-title { 3470 display: none!important; 3471 } 3472 .express_login_create_account_prefix hr { 3473 margin: 15px 0 10px; 3474 }
3475 .modal-content #containerFBLogin, .modal-content #containerGoogleLogin { 3476 margin:15px 0; 3477 } 3478 3479 /* CSS When Login Form and Express Registration Rendered in Sidebar */ 3480 .col-md-3 .bd-chat-well-container,.col-md-4 .bd-chat-well-container { 3481 padding: 15px 10px; 3482 } 3483 .col-md-3 .bd-chat-center-text,.col-md-4 .bd-chat-center-text { 3484 margin: 0; 3485 font-size: 20px; 3486 padding: 0 15px; 3487 } 3488 .col-md-3 .member-login-page-container .login-register-tabs *, .col-md-4 .member-login-page-container .login-register-tabs * { 3489 font-size: 12px; 3490 line-height: 1.2em; 3491 vertical-align: bottom; 3492 } 3493 .col-md-3 .member-login-page-container .login-register-tabs a, .col-md-4 .member-login-page-container .login-register-tabs a { 3494 padding: 5px !important; 3495 height: 50px; 3496 vertical-align: middle; 3497 display: table-cell !important; 3498 width: 1%; 3499 } 3500 .col-md-3 .member-login-page-container .login-register-content, .col-md-4 .member-login-page-container .login-register-content { 3501 padding: 0; 3502 } 3503 .col-md-3 .member-login-container, .col-md-4 .member-login-container { 3504 padding: 15px !important; 3505 font-size: 13px; 3506 } 3507 .col-md-3 .member-login-page-container .input-lg, .col-md-4 .member-login-page-container .input-lg { 3508 height: 34px; 3509 padding: 6px 12px; 3510 font-size: 14px; 3511 } 3512 .col-md-3 .member-login-page-container .security_question_label, .col-md-4 .member-login-page-container .security_question_label { 3513 transform: scale(.85); 3514 margin: -1.15em -1.15em 0; 3515 } 3516 .col-md-3 #containerFBLogin, .col-md-4 #containerFBLogin, .col-md-3 #containerGoogleLogin, .col-md-4 #containerGoogleLogin, .col-md-3 .login-cta-buttons li, .col-md-4 .login-cta-buttons li { 3517 width: 100%; 3518 display: block; 3519 margin-top:5px; 3520 } 3521 .col-md-3 .login-cta-buttons li, .col-md-4 .login-cta-buttons li { 3522 padding:0 3523 } 3524 .col-md-3 .login-cta-buttons ul.nav, .col-md-4 .login-cta-buttons ul.nav { 3525 margin-top: -10px; 3526 } 3527 .col-md-3 #googleAction, .col-md-3 #facebookAction, .col-md-4 #googleAction, .col-md-4 #facebookAction { 3528 padding: 0; 3529 min-height: 0; 3530 font-size: 14px; 3531 margin: 0; 3532 } 3533 .col-md-3 #googleAction img, .col-md-3 #facebookAction img, .col-md-4 #googleAction img, .col-md-4 #facebookAction img { 3534 height: 36px !important; 3535 margin-right: 5px; 3536 position: relative!important; 3537 display: inline-block; 3538 } 3539 @media only screen and (max-width: 767px) { 3540 .col-md-3 .member-login-page-container .login-register-tabs a, .col-md-4 .member-login-page-container .login-register-tabs a { 3541 display: block !important; 3542 width: 100%; 3543 line-height: 40px; 3544 } 3545 3546 #containerGoogleLogin { 3547 text-align: center; 3548 margin-top: 10px; 3549 } 3550 #containerGoogleLogin #gBtn { 3551 display: inline-block; 3552 } 3553 } 3554 </style> 3555 <div class="row member-login-page-container"> 3556 <div class="fpad-lg novpad"> 3557 3558 3559 <div class="module fpad-xl member-login-container"> 3560 <style type="text/css">label span.required { color: #B94A48; }span.help-inline, span.help-block {font-size: .9em; }</style><form action="/api/widget/json/get/Bootstrap%20Theme%20-%20Member%20Login%20Page" id="member_login_190" method="post" labelwidth="100" labelpaddingtop="0.5em" enctype="multipart/form-data" form_action_type="redirect" form_action_div return_data_type="" name="member_login_190" class=" ">
3560<input type="hidden" name="sized" value="0" id="member_login_190-element-0"/><input type="hidden" name="mysql_real_escape_string_runned" value="1" id="member_login_190-element-1"/><input type="hidden" name="form" value="myform" id="member_login_190-element-2"/><input type="hidden" name="formname" value="member_login" id="member_login_190-element-3"/><input type="hidden" name="dowiz" value="1" id="member_login_190-element-4"/><input type="hidden" name="save" value="1" id="member_login_190-element-5"/><input type="hidden" name="url_origin_pars" value="/search_results" id="member_login_190-element-6"/><input type="hidden" name="action" autocomplete="off" value="login" id="member_login_190-element-7"/><h2 class="nomargin member-login-h2-form-title">Member Login</h2><hr><style type='text/css'> #containerGoogleLogin #gBtn { 3561 display: inline-block; 3562 text-align: center; 3563 width: 216px; 3564} 3565 3566.module #containerFBLogin #facebookAction img, .module #containerFBLogin #facebookAction img { 3567 position: absolute !important; 3568} 3569.module #containerFBLogin a#facebookAction { 3570 max-width: 200px; 3571 position: relative; 3572 left: -8px; 3573 3574} </style> <!-- Required Font-Family for Social Buttons --> 3575 <link rel="stylesheet" media="print" onload="this.onload=null;this.removeAttribute('media');" href="https://fonts.googleapis.com/css?family=Roboto:500&display=swap"> 3576 <noscript> 3577 <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:500&display=swap"> 3578 </noscript> 3579 3580 <div class="row social-login-row"> 3581 </div><div class="form-group"><label class="vertical-label bd-email" for="member_login_190-element-10"><span class="required">* </span>Email Address</label><input type="email" name="email" required placeholder="[email protected]" autocomplete="off" value class="form-control input-lg" id="member_login_190-element-10"/></div><div class="form-group"><label class="vertical-label bd-password" for="member_login_190-element-11"><span class="required">* </span>Password</label> 3582 <style> 3583 #togglePassword { 3584 background: none; 3585 border: none; 3586 cursor: pointer; 3587 font-weight: bold; 3588 font-size: .85em; 3589 position: absolute; 3590 right: 5px; 3591 top: 0; 3592 } 3593 </style><button type="button" tabindex="-1" id="togglePassword" onclick="showPassword(this);"> <i class="fa fa-lock" aria-hidden="true"></i></button> 3594
3594<script> 3595 function showPassword(node){ 3596 const parent = node.closest('.form-group'); 3597 const passwordField = parent.querySelector(`input[type='password'], input[type='text']`); 3598 const isPassword = passwordField.getAttribute('type') === 'password'; 3599 passwordField.setAttribute('type', isPassword ? 'text' : 'password'); 3600 const iconHTML = isPassword ? `<i class="fa fa-unlock" aria-hidden="true"></i>` : `<i class="fa fa-lock" aria-hidden="true"></i>`; 3601 node.innerHTML = iconHTML; 3602 } 3603 </script>
3603<input type="password" name="pass" required placeholder="Enter Password" autocomplete="off" value class="form-control input-lg" id="member_login_190-element-11"/></div><span class="help-block bpad bmargin notmargin"> <a href="/login/retrieval">Forgot Password? Click to Reset Password</a></span><div class="form-group"><div class="form-group security_question_label"> 3604 <div id="member_login_190-captchaContainer" class="control-group"> 3605 <div class="g-recaptcha" id="member_login_190-google-recaptcha"></div> 3606 </div> 3607 <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> 3608 <div class="clearfix bmargin"></div> 3609 <input type="hidden" name="recaptcha" id="member_login_190-rcap"> 3610</div> 3611 <style> 3612 .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 { 3613 transform: scale(0.77); 3614 -webkit-transform: scale(0.77); 3615 transform-origin: 0 0; 3616 -webkit-transform-origin: 0 0; 3617 margin-bottom: -15px; 3618 } 3619 3620 .modal #member_login_190-captchaContainer, .col-md-4 #member_login_190-captchaContainer, .col-md-3 #member_login_190-captchaContainer, .col-lg-3 #member_login_190-captchaContainer, .col-lg-4 #member_login_190-captchaContainer { 3621 transform: scale(0.77); 3622 -webkit-transform: scale(0.77); 3623 transform-origin: 0 0; 3624 -webkit-transform-origin: 0 0; 3625 margin-bottom: -15px; 3626 } 3627 </style> 3628
3628<script type="text/javascript"> 3629 if(typeof formsFound == "undefined"){ 3630 var formID = ''; 3631 var currentCaptcha = {}; 3632 var captchaHolders = {}; 3633 var formsFound = {}; 3634 var captchaApiRequested = false; 3635 /* The forms the visitor has actually interacted with - only these get a widget. */ 3636 var captchaArmedForms = []; 3637 /* api.js stays lazy - nothing is fetched from Google until the visitor actually 3638 touches the form. 'click' alone was too narrow: a keyboard-only visitor tabs in 3639 and presses Enter without ever clicking, so api.js never loaded, the captcha 3640 never rendered, and the form POSTed an empty token. */ 3641 var captchaTriggerEvents = ['click', 'keydown', 'focusin', 'touchstart']; 3642 3643 window.addEventListener('load', () => { 3644 formID = document.querySelectorAll('[name="recaptcha"]'); 3645 if (typeof formID != "undefined" && formID !== null) { 3646 for (let i = 0; i < formID.length; i++) { 3647 let formIDForm = formID[i].closest('form'); 3648 let captchaHolder = formIDForm.querySelector(".g-recaptcha"); 3649 3650 if (typeof formsFound[formIDForm.id] != "undefined") { 3651 formsFound[formIDForm.id]['counter']++; 3652 }else{ 3653 formsFound[formIDForm.id] = {'counter' : 1}; 3654 } 3655 3656 formIDForm.setAttribute('data-counter', formsFound[formIDForm.id]['counter']); 3657 captchaHolder.setAttribute('id',captchaHolder.id+'-'+formsFound[formIDForm.id]['counter']); 3658 3659 if (typeof formIDForm != "undefined" && formIDForm !== null) { 3660 captchaTriggerEvents.forEach( evt => 3661 formIDForm.addEventListener(evt, reCaptchaOnFormInteraction, false) 3662 ); 3663 } 3664 } 3665 } 3666 }); 3667 } 3668 3669 function reCaptchaOnFormInteraction(event) { 3670 if (event && event.currentTarget) { 3671 captchaArmForm(event.currentTarget); 3672 } 3673 if (captchaApiRequested) { 3674 renderArmedCaptchas(); 3675 return; 3676 } 3677 captchaApiRequested = true; 3678 3679 var head = document.getElementsByTagName('head')[0]; 3680 var script = document.createElement('script'); 3681 script.type = 'text/javascript'; 3682 script.src = 'https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit&hl=en'; 3683 head.appendChild(script); 3684 } 3685 3686 var captchaArmForm = function (formEl) { 3687 if (!formEl) { 3688 return; 3689 } 3690 for (var a = 0; a < captchaArmedForms.length; a++) { 3691 if (captchaArmedForms[a] === formEl) { 3692 return; 3693 } 3694 } 3695 captchaArmedForms.push(formEl); 3696 }; 3697 3698 var captchaSolvedCallback = function (holder) { 3699 return function () { 3700 var formEl = holder.closest('form'); 3701 if (!formEl) { 3702 return; 3703 } 3704 $(formEl).find('.security_question_label').removeClass('has-error'); 3705 $(formEl).find('#recaptcha_error').css('display', 'none'); 3706 var notification = document.getElementById(formEl.id + '-notification'); 3707 if (notification && notification.classList.contains('alert-danger-subtle')) { 3708 $(notification).slideUp(); 3709 } 3710 }; 3711 }; 3712 3713 var renderArmedCaptchas = function () { 3714 if (typeof grecaptcha === "undefined" || typeof grecaptcha.render !== "function") { 3715 return; 3716 } 3717 for (var f = 0; f < captchaArmedForms.length; f++) { 3718 var holder = captchaArmedForms[f].querySelector('div[class=g-rec
3718aptcha]'); 3719 3720 if (!holder || !holder.id || holder.getClientRects().length === 0) { 3721 continue; 3722 } 3723 /* Guard a second render: grecaptcha throws on an element it already claimed. */ 3724 if (typeof captchaHolders[holder.id] === "undefined") { 3725 captchaHolders[holder.id] = grecaptcha.render(holder.id, { 3726 'sitekey': '6LfhXt8sAAAAAJL4MkgqvsOdY53C6pIw3RIhlGMq', 3727 'callback': captchaSolvedCallback(holder) 3728 }); 3729 } 3730 } 3731 }; 3732 3733 var onloadCallback = function (event) { 3734 renderArmedCaptchas(); 3735 }; 3736 3737 </script>
vendor: 1 bytes, line 3737
3737
3738<script> 3739 $(document).ready(function(){ 3740 /* Implicit submission (Enter inside a field) fires 'submit' without firing a click on 3741 the submit button, so the click guard below never sees it and the form POSTed an 3742 empty token. Bound on document/capture so it runs before FormValidation's own 3743 handler on the form - at AT_TARGET the capture flag does not order listeners, so a 3744 listener on the form itself would not reliably win. Native HTMLFormElement.submit() 3745 does not dispatch 'submit', so the solved-captcha path below is unaffected. */ 3746 var captchaGuardedForm = document.getElementById('member_login_190'); 3747 if (captchaGuardedForm) { 3748 document.addEventListener('submit', function (event) { 3749 if (event.target !== captchaGuardedForm) { 3750 return; 3751 } 3752 3753 var formId = captchaGuardedForm.id; 3754 var captchaHolderKey = formId + "-google-recaptcha-" + $(captchaGuardedForm).data('counter'); 3755 var captchaRendered = typeof captchaHolders[captchaHolderKey] != "undefined"; 3756 3757 if (captchaRendered && grecaptcha.getResponse(captchaHolders[captchaHolderKey]) !== "") { 3758 $("#" + formId + " .security_question_label").removeClass("has-error"); 3759 $("#" + formId + " #recaptcha_error").css("display", "none"); 3760 return; 3761 } 3762 3763 /* Unsolved, or api.js still in flight: either way there is no token to send. */ 3764 event.preventDefault(); 3765 event.stopImmediatePropagation(); 3766 $("#" + formId + " .security_question_label").addClass("has-error"); 3767 $("#" + formId + " #recaptcha_error").css("display", "block"); 3768 return false; 3769 }, true); 3770 } 3771 $("#member_login_190 input[type=submit]").unbind('click'); 3772 $("#member_login_190 input[type=submit]").click(function (event) { 3773 3774 var formId = $(this.form).attr('id'); 3775 var captchaHolderKey = formId + "-google-recaptcha-" +$(this.form).data('counter'); 3776 3777 if (typeof captchaHolders[captchaHolderKey] != "undefined") { 3778 if (grecaptcha.getResponse(captchaHolders[captchaHolderKey]) === "") { 3779 event.preventDefault(); 3780 $("#" + formId).formValidation('validate'); 3781 $("#" + formId + " .security_question_label").addClass("has-error"); 3782 $("#" + formId + " #recaptcha_error").css("display", "block"); 3783 return false; 3784 } 3785 3786 /* Solved captcha: clear the error UI and let the click proceed untouched. 3787 The browser then fires a REAL, button-initiated submit event, so 3788 FormValidation runs its normal chain (success.form.fv -> AJAX modal on 3789 checkout / native POST on login). Re-submitting here artificially broke 3790 both ways: native form.submit() skips the FV chain (checkout rendered the 3791 raw JSON response), and jQuery .submit() fires a synthetic submit that FV 3792 refuses, leaving the form stuck after the first error (Bug 2). */ 3793 $("#" + formId + " .security_question_label").removeClass("has-error"); 3794 $("#" + formId + " #recaptcha_error").css("display", "none"); 3795 } 3796 }); 3797 }); 3798</script>
3798</div><div class="form-actions"><input type="submit" value="Login Now" name class="btn btn-primary btn-lg btn-block " id="member_login_190-element-14"/></div><div class="login-cta-buttons"><hr class="cta-hr"><ul class="list-inline nomargin inline-block btn-block"><li class='col-md-12 norpad sm-nopad nav'><a href='/join' id='link418' class='btn btn-success btn-block'>Are You a Local Business? <span class="inline-block">List Your Company Now</span></a></li></ul><div class="clearfix"></div></div></form>
3798<script type="text/javascript">jQuery(document).ready(function() { jQuery("#member_login_190").bind("submit", function() { 3799 });}); </script>
3799 <div class="clearfix"></div> 3800 </div> 3801 3802 3803 </div> 3804 </div> 3805 </div> 3806 </div> 3807 </div> 3808 </div> 3809 3810 3811 3812 <link rel="stylesheet" type="text/css" href="https://www.optimizecdn.com/directory/cdn/assets/bootstrap/limonte-sweetalert2/6.11.2/sweetalert2.min.css">
3813<script src="https://www.optimizecdn.com/directory/cdn/assets/bootstrap/limonte-sweetalert2/6.11.2/sweetalert2.min.js"></script>
3813 3814
3815<script> 3816 function clearContent(thisObj){ 3817 var size; 3818 if(thisObj.hasClass('input-sm') || thisObj.parents('.input-group').hasClass('input-group-sm')){ 3819 size = "small"; 3820 } else if (thisObj.hasClass('input-lg') || thisObj.parents('.input-group').hasClass('large-autosuggest')){ 3821 size = "large"; 3822 } else { 3823 size = "medium"; 3824 } 3825 if(!thisObj.parent().hasClass('input_wrapper')){ 3826 if(thisObj.parent().hasClass('input-group-sm')){ 3827 thisObj.wrap('<span class="input-group-sm input_wrapper"></span>'); 3828 } else if (thisObj.parent().hasClass('input-group-lg')){ 3829 thisObj.wrap('<span class="input-group-lg input_wrapper"></span>'); 3830 } else { 3831 thisObj.wrap('<span class="input_wrapper"></span>'); 3832 } 3833 } 3834 if(thisObj.val() != ""){ 3835 if(thisObj.hasClass('googleSuggest')){ 3836 thisObj.parent().find('.fill_location').remove(); 3837 } 3838 if (!thisObj.parent().find('.clear_content').length){ 3839 thisObj.parent().append(`<span class="clear_content ${size}"><i class="fa fa-times-circle" aria-hidden="true"></i></span>`); 3840 if (thisObj.hasClass("tt-input")) { 3841 thisObj.focus(); 3842 } 3843 3844 } 3845 } 3846 } 3847 3848 $(document).on('click', '.drp-buttons .applyBtn', function(){ 3849 clearContent($(".dateRange input")); 3850 }); 3851 3852 $('.sm-autosuggest input, .googleSuggest, .large-autosuggest input, .md-autosuggest input, .normal-autosuggest input, .google-writen-location, .dateRange input').keyup(function(){ 3853 clearContent($(this)); 3854 }); 3855 3856 $(document).ready(function(){ 3857 $('.sm-autosuggest input, input.googleSuggest, .large-autosuggest input, .md-autosuggest input, .normal-autosuggest input, .google-writen-location, .dateRange input').each(function(){ 3858 clearContent($(this)); 3859 }) 3860 }) 3861 3862 $(document).on('click', '.clear_content', function(){ 3863 $(this).parent().find('input').val(''); 3864 //tt-input its a class for typeahead auto-suggest 3865 if ($(this).parent().find('input').hasClass("tt-input")) { 3866 $(this).parent().find('input').typeahead('val',''); 3867 } 3868 clearContent($(this).parent().find('input')); 3869 $(this).remove(); 3870 }); 3871 3872 $(window).on('load', function () { 3873 setTimeout(function() { 3874 // add missing href attribute to multi-category options in search modules 3875 $('.bootstrap-select.show-tick .dropdown-menu a').attr('href', '#'); 3876 }, 2000); 3877 }); 3878</script>
3878 3879 3880 3881 3882<a href="#" class="scrollup" title="scrollup"> 3883 <i class="fa fa-caret-up" aria-hidden="true"></i> 3884</a>
3885<script> 3886 $(document).ready(function(){ 3887 // .progressbar() comes from bootstrap-progressbar.min.js, loaded only by widgets 1236/1318. 3888 // Elsewhere it used to fall through to jQuery UI's; jQuery UI is no longer global, so an 3889 // unguarded call throws and kills the rest of this ready() handler (scrollup, crop button). 3890 if ($.fn.progressbar) { 3891 $('.progress .progress-bar').progressbar({ 3892 display_text: 'fill' 3893 }); 3894 } 3895 $(window).scroll(function(){ 3896 3897 if ($(this).scrollTop() > 600) { 3898 $('.scrollup').fadeIn(); 3899 3900 } else { 3901 $('.scrollup').fadeOut(); 3902 } 3903 }); 3904 $('.scrollup').click(function(){ 3905 $("html, body").animate({ 3906 scrollTop: 0 3907 }, 600); 3908 return false; 3909 }); 3910 $('#cropButton').click(function(){ 3911 var iframe = $("#cropiFrame"); 3912 iframe.attr("src", iframe.data("src")); 3913 }); 3914 }); 3915</script>
vendor: 2 bytes, line 3915
3915
3916<script defer> 3917 var favoriteMode = ""; 3918 var apiEngine = ""; 3919 var api = 0; // Set API to use. Default is 0 3920 var activeMembershipLevelEnable = ""; 3921 var favoriteUserClickId = ""; 3922 var bookmarkLabel = `LIKE`; 3923 var bookmarkCountLabel = `LIKES`; 3924 var currentButton; 3925 3926 function favoriteOn(lookForAll = false) { 3927 $('.col-md-6.col-md-offset-3').addClass("col-md-12").removeClass('col-md-6 col-md-offset-3'); 3928 favoriteMode = 'search'; 3929 if ($('.sidebarenabled').data('sidebar')) { 3930 favoriteMode = 'detail'; 3931 if (!$('.sidebarenabled').siblings('.postItem').data('userid')) { 3932 $('.sidebarenabled').siblings('.listingData').remove(); 3933 } 3934 } 3935 favoriteUserClickId = $('.favorite').data('activeuser'); 3936 activeMembershipLevelEnable = $('.favorite').data('activefeatureenable'); 3937 3938// Sets the API URL to use based on API value 3939 if (api == 0) { 3940 apiEngine = '/api/data/html/get/data_widgets/widget_name?name=Bootstrap%20Theme%20-%20Function%20-%20Add%20to%20Favorites%20Button'; 3941 } else if (api == 1) { 3942 apiEngine = '/api/data/html/get/data_widgets/widget_name?name=Bootstrap Theme - Function - Add to Favorites Button'; 3943 } else { 3944 apiEngine = '/api/widget/json/get/Bootstrap Theme - Function - Add to Favorites Button'; 3945 } 3946 if (favoriteUserClickId) { 3947 var favoriteCounter = $('.favorite').siblings('.postItem'); 3948 if ($('.sidebarenabled').data('sidebar') || lookForAll) { 3949 3950 if (favoriteCounter.length == 1) { 3951 var favoriteMode = 'detail'; 3952 var favoriteDataType = $('.sidebarenabled').siblings('.postItem').data('datatype'); 3953 var favoriteDataId = $('.sidebarenabled').siblings('.postItem').data('dataid'); 3954 var favoritePostId = $('.sidebarenabled').siblings('.postItem').data('postid'); 3955 var favoriteUserId = []; 3956 $('.sidebarenabled').siblings('.postItem').each(function () { 3957 favoriteUserId.push($(this).data('userid')); 3958 }); 3959 } else { 3960 var favoriteMode = 'multiSidebar'; 3961 var favoriteDataType = []; 3962 var favoriteDataId = []; 3963 var favoritePostId = []; 3964 var favoriteUserId = []; 3965 $('.postItem').each(function () { 3966 favoriteDataType.push($(this).data('datatype')); 3967 favoriteDataId.push($(this).data('dataid')); 3968 favoritePostId.push($(this).data('postid')); 3969 favoriteUserId.push($(this).data('userid')); 3970 }); 3971 } 3972 } else { 3973 var favoriteMode = 'search'; 3974 var favoriteDataType = $('.favorite').siblings('.postItem').data('datatype'); 3975 var favoriteDataId = $('.favorite').siblings('.postItem').data('dataid'); 3976 if (lookForAll) { 3977 favoriteDataType = (favoriteDataType == 10) ? 11 : 10; 3978 } 3979 if (favoriteDataType != 10) { 3980 var favoritePostId = []; 3981 $('.postItem').each(function () { 3982 favoritePostId.push($(this).data('postid')); 3983 }); 3984 var favoriteUserId = $('.favorite').siblings('.postItem').data('userid'); 3985 } else { 3986 var favoriteUserId = []; 3987 $('.postItem').each(function () { 3988 favoriteUserId.push($(this).data('userid')); 3989 }); 3990 var favoritePostId = $('.favorite').siblings('.postItem').data('postid'); 3991 } 3992 } 3993 favoriteCall(favoriteUserClickId, favoriteUserId, favoriteDataType, favoriteDataId, favoritePostId, favoriteMode, 'check'); 3994 } 3995 } 3996 3997 $(document).on('click', '.favorite', function (e) { 3998 var favoriteUserClickId = $('.favorite').data('activeuser'); 3999 if (favoriteUserClickId && activeMembershipLevelEnable) { 4000 var thisButton = $(this); 4001 currentButton = thisButton; 4002 $(thisButton).attr("disabled", true); 4003 var favoriteUserClickId = $(this).data('activeuser'); 4004 var favoriteUserId = $(this).siblings('.postItem').data('userid'); 4005 var favoriteDataType = $(this).siblings('.postItem').data('datatype'); 4006 var favoriteDataId = $(this).siblings('.postItem').data('dataid'); 4007 var favoritePostId = $(this).siblings('.postItem').data('postid'); 4008 $(this).toggleClass('favoriteActive'); 4009 if ($(this).data('state') == 0) { 4010 favoriteCall(favoriteUserClickId, favoriteUserId, favoriteDataType, favoriteDataId, favoritePostId, favoriteMode, 'add'); 4011 $(this).data('state', 1); 4012 } else { 4013 favoriteCall(favoriteUserClickId, favoriteUserId, favoriteDataType, favoriteDataId, favoritePostId, favoriteMode, 'delete'); 4014 $(this).data('state', 0); 4015 } 4016 setTimeout(function () { 4017 $(thisButton).attr("disabled", false); 4018 }, 500); 4019 } 4020 });
4021 4022 function toogleBookmark(node) { 4023 var postId = $(node).data('postid'); 4024 var count = $(node).data('count'); 4025 var numberNode = $(node).find("#number-" + postId); 4026 var textLabelNode = $(node).find("#bookmark-content"); 4027 4028 if ($(node).hasClass('favoriteActive') !== false) { 4029 count--; 4030 } else { 4031 count++; 4032 } 4033 4034 $(node).data("count", count); 4035 4036 if (count > 0) { 4037 $(textLabelNode).html(bookmarkCountLabel); 4038 $(numberNode).html(' (' + count + ')'); 4039 } else { 4040 $(textLabelNode).html(bookmarkLabel); 4041 $(numberNode).html(''); 4042 } 4043 } 4044 4045 // Function that Adds, Deletes and Selects Favorites from Backend 4046 function favoriteCall(favoriteUserClickId, favoriteUserId, favoriteDataType, favoriteDataId, favoritePostId, favoriteMode, favoriteAction) { 4047 $.post(apiEngine, { 4048 favoriteUserClickId: favoriteUserClickId, 4049 favoriteUserId: favoriteUserId, 4050 favoriteDataType: favoriteDataType, 4051 favoriteDataId: favoriteDataId, 4052 favoritePostId: favoritePostId, 4053 favoriteMode: favoriteMode, 4054 favoriteAction: favoriteAction 4055 }, function (data) { 4056 if (api == 0) { 4057 var splitData = data.split('<split>'); 4058 data = splitData[1]; 4059 } 4060 4061 if(favoriteAction == "add" && data == "save_favorite_error"){ 4062 $(currentButton).trigger('click'); 4063 swal({ 4064 type:"warning", 4065 title: `Action Unavailable`, 4066 html: `Your account is currently not ACTIVE. <br> Only ACTIVE accounts can perform this action.`, 4067 }); 4068 } 4069 4070 if (data !== null && data !== 'null') { 4071 // Checks if the action 'check' was send 4072 if (favoriteAction == 'check' && favoriteMode != 'multiSidebar') { 4073 // Checks if we are in a Detail Page 4074 if (!$('.sidebarenabled').data('sidebar')) { 4075 // Checks if we are viewing a Member 4076 if (favoriteDataType != 10) { 4077 $.each(JSON.parse(data), function (index, value) { 4078 $('.postItem[data-postid="' + value + '"]').siblings('.favorite').addClass('favoriteActive'); 4079 $('.postItem[data-postid="' + value + '"]').siblings('.favorite').data('state', 1); 4080 }); 4081 } else { 4082 $.each(JSON.parse(data), function (index, value) { 4083 $('.member_results .postItem[data-userid="' + value + '"]').siblings('.favorite').addClass('favoriteActive'); 4084 $('.member_results .postItem[data-userid="' + value + '"]').siblings('.favorite').data('state', 1); 4085 }); 4086 } 4087 } else { 4088 // Checks if we are viewing a Member 4089 if (favoriteDataType != 10) { 4090 $.each(JSON.parse(data), function (index, value) { 4091 $('.sidebarenabled').siblings('.favorite').addClass('favoriteActive'); 4092 $('.sidebarenabled').siblings('.favorite').data('state', 1); 4093 }); 4094 } else { 4095 $.each(JSON.parse(data), function (index, value) { 4096 $('.sidebarenabled').siblings('.favorite').addClass('favoriteActive'); 4097 $('.sidebarenabled').siblings('.favorite').data('state', 1); 4098 }); 4099 } 4100 } 4101 } else if (favoriteAction == 'check' && favoriteMode == 'multiSidebar') { 4102 let totalDataCount = JSON.parse(data); 4103 if (totalDataCount) { 4104 totalDataCount = totalDataCount.length; 4105 for (let i = 0; i < totalDataCount; i++) { 4106 if (JSON.parse(data)[i].dataQuery != 0) { 4107 $('.postItem[data-postid="' + JSON.parse(data)[i].postQuery + '"][data-dataid="' + JSON.parse(data)[i].dataQuery + '"]').siblings('.favorite').addClass('favoriteActive'); 4108 $('.postItem[data-postid="' + JSON.parse(data)[i].postQuery + '"][data-dataid="' + JSON.parse(data)[i].dataQuery + '"]').siblings('.favorite').data('state', 1); 4109 } else { 4110 /* dataQuery == 0 means a MEMBER favorite (users_favorite dataType 10). 4111 Restrict the match to member-type spans: on profile pages the owner's 4112 post spans carry the same data-userid, and without this filter one 4113 member favorite marked every post button of that owner as saved. */ 4114 $('.postItem[data-userid="' + JSON.parse(data)[i].postQuery + '"][data-datatype="10"]').siblings('.favorite').addClass('favoriteActive'); 4115 $('.postItem[data-userid="' + JSON.parse(data)[i].postQuery + '"][data-datatype="10"]').siblings('.favorite').data('state', 1); 4116 } 4117 } 4118 } 4119 } 4120 } 4121 }); 4122 } 4123 4124 // Code that runs once to show all favored posts by a registered user 4125 4126 favoriteOn(); 4127 favoriteOn(true); 4128</script>
4128<script> 4129 const listView = document.getElementsByClassName('listView')[0]; 4130 const gridView = document.getElementsByClassName('gridView')[0]; 4131 const queryString = {"sized":0,"mysql_real_escape_string_runned":"1","form":"myform","formname":"member_login","dowiz":1,"save":1,"url_origin_pars":"\/search_results"}; 4132 const profId = ``; 4133 const servId =null; 4134 const countryId = ``; 4135 const stateId = ``; 4136 const cityId = ``; 4137 const seed = ``; 4138 const profs = {"new_filename":"search_results"}; 4139 const btnPositionInside = document.querySelector('.grid-container .clickToLoadMoreContainer'); 4140 const btnPositionOutside = document.querySelector('.grid-container ~ .clickToLoadMoreContainer'); 4141 const amountToSum = 9; 4142 let currentAmountText = document.querySelector('.current__amount__js'); 4143 let totalAmount = document.querySelector('.total__js'); 4144 let btnClickMore = document.getElementsByClassName('clickToLoadMoreBtn')[0]; 4145 let btnClickMoreContainer = document.getElementsByClassName('clickToLoadMoreContainer')[0]; 4146 let flagFirstTime = true; 4147 let autoLoadResults = true; 4148 let lastElementPost ; 4149 if(typeof totalAmount !== "undefined" && totalAmount !== null){ 4150 let removeCommasAndDots = /[.,\s]/g; 4151 totalAmount = totalAmount.innerHTML.replace(removeCommasAndDots, ''); 4152 } 4153 /*event listener*/ 4154 if (typeof btnClickMore !== "undefined") { 4155 btnClickMore.addEventListener('click', function (event) { 4156 let viewIcons = document.querySelectorAll('.views i.gridView.activeView')[0]; 4157 let featureDCId = this.dataset.dc; 4158 let currentPage = this.dataset.page; 4159 let dataType = this.dataset.type; 4160 let levId = this.dataset.lvl; 4161 this.dataset.page = parseInt(currentPage) + 1; 4162 let url = `/wapi/widget`; 4163 let currentBTN = this;
4164 let currentHTML = this.innerHTML; 4165 lastElementPost = document.querySelectorAll('.search_result'); 4166 this.classList.add('loadingMore'); 4167 this.innerHTML = `<i class="fa fa-circle-o-notch fa-spin fa-fw"></i> Loading...`; 4168 let formData = new FormData(); 4169 autoLoadResults=false; 4170 setClassLoaded(); 4171 4172 formData.append('dc_id', featureDCId); 4173 formData.append('header_type', 'html'); 4174 formData.append('request_type', 'POST'); 4175 formData.append('currentPage', currentPage); 4176 formData.append('dataType', dataType); 4177 formData.append('queryString', JSON.stringify(queryString)); 4178 formData.append('profId', profId); 4179 formData.append('servId', JSON.stringify(servId)); 4180 formData.append('countryId', countryId); 4181 formData.append('stateId', stateId); 4182 formData.append('cityId', cityId); 4183 formData.append('levId', levId); 4184 formData.append('seed', seed); 4185 formData.append('profsPost', JSON.stringify(profs)); 4186 formData.append('widget_name', 'Add-On - Bootstrap Theme - Search - Lazy Loader'); 4187 let myInit = { 4188 method: 'POST', 4189 body: formData 4190 }; 4191 fetch(url, myInit) 4192 .then(function (response) { 4193 return response.text(); 4194 }).then(function (html) { 4195 let parser = new DOMParser(); 4196 4197 // Parse the text 4198 let result = parser.parseFromString(html, "text/html"); 4199 let newResultsHTML = result.getElementById('grabHTML__js').innerHTML; 4200 autoLoadResults =true; 4201 let amountOfClicks = result.getElementById('grabHTML__js').dataset.pages; 4202 4203 var countBefore = $('.grid-container .search_result').length; 4204 4205 if (typeof btnPositionOutside !== "undefined" && btnPositionOutside !== null) { 4206 $('.grid-container').append(newResultsHTML); 4207 } 4208 if (typeof btnPositionInside !== "undefined" && btnPositionInside !== null || btnPositionOutside === null && dataType == 13) { 4209 $('.clickToLoadMoreContainer').before(newResultsHTML); 4210 } 4211 4212 // Fade in only the actually new results 4213 var newCount = $('.grid-container .search_result').length - countBefore; 4214 var $allNew = $('.grid-container .search_result').slice(-newCount); 4215 $allNew.css({opacity: 0, transition: 'opacity 0.4s ease'}); 4216 4217 currentBTN.innerHTML = currentHTML; // default html 4218 currentBTN.classList.remove('loadingMore'); 4219 4220 if (typeof viewIcons !== 'undefined') { 4221 applyGridClasses($allNew); 4222 // Recalculate gridBreak classes and hide clearfix/hr between grid items 4223 $('.gridBreak').removeClass('gridBreak'); 4224 /* Row-break stride must follow the column class actually on the page, same rule as applyGridClasses */ 4225 var bdGridFourPerRow = $('.grid-container .search_result.col-md-3.grid').length > 0; 4226 $('.grid-container.visible > hr:nth-of-type(' + (bdGridFourPerRow ? '4n' : '3n') + ')').addClass('gridBreak'); 4227 $('.grid-container .col-md-4 + .clearfix:not(.search_result), .grid-container .col-md-3 + .clearfix:not(.search_result), .grid-container .clearfix + hr, .grid-container hr + .clearfix:not(.search_result)').hide(); 4228 if (typeof masonry_opened !== 'undefined' && masonry_opened == 1) { 4229 setTimeout(function(){ 4230 $('.grid-container').masonry('appended', $allNew); 4231 setTimeout(function(){ $allNew.css('opacity', 1); }, 100); 4232 checkAllImagesLoaded(); 4233 }, 500); 4234 } else { 4235 setTimeout(function(){ $allNew.css('opacity', 1); }, 100); 4236 checkAllImagesLoaded(); 4237 } 4238 } else { 4239 setTimeout(function(){ $allNew.css('opacity', 1); }, 50); 4240 } 4241 if (typeof favoriteOn == 'function') { 4242 favoriteOn(); 4243 } 4244 if (typeof runRoyalSlider == 'function') { 4245 runRoyalSlider(); 4246 } 4247 4248 setAmountPages(currentBTN, amountOfClicks); 4249 if (typeof currentAmountText !== "undefined" && currentAmountText !== null) { 4250 let newAmount = parseInt(currentAmountText.innerHTML) + parseInt(amountToSum); 4251 if (newAmount >= parseInt(totalAmount)) { 4252 newAmount = document.querySelector('.total__js').innerHTML; 4253 } 4254 currentAmountText.innerHTML = newAmount.toString() 4255 } 4256 if (typeof google != "undefined" && google.hasOwnProperty('maps')){ 4257 if (typeof initializeMapSR == 'function') { 4258 initializeMapSR(); 4259 }else{ 4260 $('.mapView.activeView').click(); 4261 } 4262 } 4263 }).catch((error) => { 4264 console.error('Error:', error); 4265 }); 4266 }); 4267 // Check if insta_load_btn_behavior is set 4268 4269 } 4270 if (typeof gridView !== "undefined" && typeof btnClickMoreContainer !== "undefined") { 4271 gridView.addEventListener('click', function () { 4272 gridView.classList.add('activeView'); 4273 if (gridView.classList.contains('activeView')) { 4274 btnClickMoreContainer.classList.add('gridBtnLazyLoad'); 4275 } else { 4276 btnClickMoreContainer.classList.remove('gridBtnLazyLoad'); 4277 } 4278 }); 4279 } 4280 if (typeof listView !== "undefined" && typeof btnClickMoreContainer !== "undefined") { 4281 4282 listView.addEventListener('click', function () { 4283 listView.classList.add('activeView'); 4284 if (listView.classList.contains('activeView')) { 4285 btnClickMoreContainer.classList.remove('gridBtnLazyLoad'); 4286 } else { 4287 btnClickMoreContainer.classList.add('gridBtnLazyLoad'); 4288 } 4289 }); 4290 } 4291 4292 function setAmountPages(btn, amount) { 4293 if (!("pages" in btn.dataset)) { 4294 btn.dataset.pages = parseInt(amount) - 1; // we do -1 because the one just clicked 4295 } else { 4296 btn.dataset.pages = parseInt(btn.dataset.pages) - 1; 4297 } 4298 if (btn.dataset.pages <= 0) { 4299 removeListenToScroll(); 4300 btn.remove(); 4301 } 4302 } 4303 4304 function setClassLoaded() { 4305 if (flagFirstTime) { 4306 flagFirstTime = false; 4307 let images = document.querySelectorAll('.grid-container img:not(.loaded)');
4308 images.forEach(image => { 4309 image.classList.add("loaded"); 4310 }); 4311 } 4312 } 4313 function applyGridClasses($el) { 4314 $el.find('.img_section.col-xs-2').removeClass('col-xs-2').addClass('col-xs-12 bmargin ex-col-2'); 4315 $el.find('.img_section.col-sm-3').removeClass('col-sm-3').addClass('col-sm-12 bmargin ex-col-3'); 4316 $el.find('.img_section.col-sm-4').removeClass('col-sm-4').addClass('col-sm-12 bmargin ex-col-4'); 4317 $el.find('.mid_section.col-sm-9').removeClass('col-sm-9').addClass('col-sm-12 ex-col-9'); 4318 $el.find('.mid_section.col-sm-6').removeClass('col-sm-6').addClass('col-sm-12 ex-col-6'); 4319 $el.find('.mid_section.col-sm-7').removeClass('col-sm-7').addClass('col-sm-12 nohpad ex-col-7 text-center bpad'); 4320 $el.find('.mid_section.col-sm-8').removeClass('col-sm-8').addClass('col-sm-12 ex-col-8 nohpad bpad'); 4321 $el.find('.mid_section .post-location-snippet').addClass('text-center'); 4322 $el.find('.mid_section.ex-col-7 .sm-block').addClass('show'); 4323 $el.find('.mid_section .row-fluid.bpad .col-md-8').removeClass('col-md-8').addClass('col-sm-12 bmargin'); 4324 $el.find('.mid_section .row-fluid.bpad a').addClass('btn-block'); 4325 $el.find('.mid_section .row-fluid.bpad').addClass('text-center'); 4326 $el.find('.info_section').removeClass('col-sm-3 norpad').addClass('col-sm-12 nopad'); 4327 $el.find('.mid_section > div > p').addClass('text-center'); 4328 $el.find('.mid_section h2').addClass('nomargin'); 4329 $el.find('.mid_section a.h3').addClass('text-center h4 tmargin'); 4330 $el.find('.mid_section .view-details').removeClass('rmargin'); 4331 $el.find('.mid_section .contact-member').removeClass('lmargin'); 4332 $el.find('.member-search-full-name').removeClass('rmargin'); 4333 $el.find('.member-search-reviews').removeClass('rmargin'); 4334 $el.find('.member-search-location').removeClass('rmargin rpad'); 4335 $el.find('.member-search-company').addClass('btn-block'); 4336 $el.find('.view_phone_number').addClass('center-block'); 4337 $el.find('.phone_number').addClass('btn-block'); 4338 $el.find('.search_result_image').addClass('grid_image'); 4339 $el.find('.post-search-category').removeClass('inline-block').addClass('text-center'); 4340 $el.find('.post-results-star').removeClass('pull-right').addClass('text-center tmargin'); 4341 /* Mirror the column class the initial conversion (widget 2294) already applied - re-evaluating the conditions here can disagree and mix 3-per-row with 4-per-row; 2294 owns the decision (incl. the Web Page sidebar override) */ 4342 if ($('.grid-container .search_result.col-md-3.grid').not($el).length > 0) { 4343 $el.addClass('col-xs-12 col-sm-3 col-md-3 grid').removeClass('row-fluid'); 4344 } else { 4345 $el.addClass('col-xs-12 col-sm-4 col-md-4 grid').removeClass('row-fluid'); 4346 } 4347 $el.find('.grid_element').addClass('well xs-center-block'); 4348 $el.find('.col-md-3 + .clearfix, .col-md-4 + .clearfix, .clearfix + hr, hr + .clearfix, .mid_section > p, .mid_section .row-fluid.bpad p.nomargin, .tags, table.bmargin,.posted-by,.star_rating .the-rating-text').hide(); 4349 $el.find('h2.h3.bold > a').addClass('gridA'); 4350 $el.find('.info_section .module').removeClass('module fpad'); 4351 } 4352 4353 function refreshUI(){ 4354 if (typeof masonry_opened !== 'undefined' && masonry_opened == 1) { 4355 $('.grid-container').masonry('layout'); 4356 } 4357 } 4358 function checkAllImagesLoaded() { 4359 let images = document.querySelectorAll('.grid-container img:not(.loaded)'); 4360 let countImg = 0; 4361 4362 if (images.length === 0) { 4363 refreshUI(); 4364 return; 4365 } 4366 4367 images.forEach(image => { 4368 image.classList.add("loaded"); 4369 4370 if (image.complete) { 4371 countImg++; 4372 if (countImg === images.length) { 4373 refreshUI(); 4374 } 4375 return; 4376 } 4377 4378 image.addEventListener('load', () => { 4379 countImg++; 4380 if (countImg === images.length) { 4381 refreshUI() 4382 } 4383 }); 4384 image.addEventListener('error', () => { 4385 countImg++; 4386 if (countImg === images.length) { 4387 refreshUI() 4388 } 4389 }); 4390 }); 4391 4392 } 4393 4394 // Variables 4395 let userStartedScrolling = false; // Flag to check if the user has started scrolling 4396 let wasPreviouslyInViewport = false; // To track if the button was in the viewport previously 4397 4398 4399 // Function to remove the scroll event listener 4400 function removeListenToScroll(){ 4401 window.removeEventListener('scroll', listenToScroll); 4402 } 4403 4404 // Function to check button visibility and load content 4405 function listenToScroll() { 4406 const isInViewport = isElementInViewport(btnClickMore); 4407 4408 // Check if the button has just entered the viewport 4409 const justEnteredViewport = !wasPreviouslyInViewport && isInViewport; 4410 4411 // If button just entered the viewport, user has started scrolling, and autoLoadResults is true 4412 if (userStartedScrolling && justEnteredViewport && autoLoadResults) { 4413 // Add a delay (2 seconds) before automatically clicking the button to load content 4414 setTimeout(function() { 4415 btnClickMore.click(); 4416 autoLoadResults = false; // Set the flag too false to avoid subsequent auto-clicks 4417 }, 2000); 4418 } 4419 4420 // If the button is out of the viewport, reset autoLoadResults 4421 if (!isInViewport) { 4422 autoLoadResults = true; 4423 } 4424 4425 // Update the previous viewport status for the next check 4426 wasPreviouslyInViewport = isInViewport; 4427 } 4428 4429 // Function to determine if a DOM element is in the viewport 4430 function isElementInViewport(el) { 4431 const rect = el.getBoundingClientRect(); 4432 return ( 4433 rect.top >= 0 && 4434 rect.left >= 0 && 4435 rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && 4436 rect.right <= (window.innerWidth || document.documentElement.clientWidth) 4437 ); 4438 } 4439 4440</script>
vendor: 2 bytes, line 4440
4440
4441<script type="text/javascript"> 4442 4443 4444 4445 //function to get url GET parameters 4446 function getUrlParameter(sParam) { 4447 var sPageURL = window.location.search.substring(1); 4448 var sURLVariables = sPageURL.split('&'); 4449 4450 for (var i = 0; i < sURLVariables.length; i++) { 4451 var sParameterName = sURLVariables[i].split('='); 4452 if (sParameterName[0] == sParam) { 4453 return decodeURIComponent(sParameterName[1]); 4454 } 4455 } 4456 } 4457 4458 //stating variables for the first initialize of the sidebar map 4459 var mapSR; 4460 var geocoder; 4461 var mapSRLat = parseFloat(getUrlParameter('lat')); 4462 var mapSRLng = parseFloat(getUrlParameter('lng')); 4463 var theZoom = 8; 4464 var bounds; 4465 if (isNaN(mapSRLat) || isNaN(mapSRLng)) { 4466 4467 mapSRLat = parseFloat(42.877742); 4468 mapSRLng = parseFloat(-97.380979); 4469 theZoom = parseFloat('6'); 4470 } 4471 //function that initializes the creation of the google map 4472 function setJsMapSR(element=null) { 4473 if (window['setJsMapSR_var'] ===true) { 4474 return; 4475 } 4476 if(element == null){ 4477 element = document.getElementById('map-canvas'); 4478 if (element === null) { 4479 element = document.querySelector('div[data-id]'); 4480 } 4481 } 4482 window['setJsMapSR_var']=true; 4483 var styles = [{"featureType":"landscape","stylers":[{"hue":"#FFBB00"},{"saturation":43.400000000000006},{"lightness":37.599999999999994},{"gamma":1}]},{"featureType":"road.highway","stylers":[{"hue":"#FFC200"},{"saturation":-61.8},{"lightness":45.599999999999994},{"gamma":1}]},{"featureType":"road.arterial","stylers":[{"hue":"#FF0300"},{"saturation":-100},{"lightness":51.19999999999999},{"gamma":1}]},{"featureType":"road.local","stylers":[{"hue":"#FF0300"},{"saturation":-100},{"lightness":52},{"gamma":1}]},{"featureType":"water","stylers":[{"hue":"#0078FF"},{"saturation":-13.200000000000003},{"lightness":2.4000000000000057},{"gamma":1}]},{"featureType":"poi","stylers":[{"hue":"#00FF6A"},{"saturation":-1.0989010989011234},{"lightness":11.200000000000017},{"gamma":1}]}]; 4484 var styledMap = new google.maps.StyledMapType(styles, {name: "Styled Map"}); 4485 4486 let mapDivElement = element; 4487 if (typeof mapDivElement !== undefined && mapDivElement != null) { 4488 var mapSROptions = { 4489 center: {lat: mapSRLat, lng: mapSRLng}, 4490 mapTypeControlOptions: {mapTypeIds: [google.maps.MapTypeId.ROADMAP, 'map_style']}, 4491 mapTypeControl: false, 4492 zoom: theZoom, 4493 controlSize: 26, 4494 mapSRTypeControl: false, 4495 streetViewControl: false, 4496 scrollwheel: false 4497 }; 4498 mapSR = new google.maps.Map(mapDivElement, mapSROptions); 4499 mapSR.mapTypes.set('map_style', styledMap); 4500 mapSR.setMapTypeId('map_style'); 4501 4502 //This piece of code will create an autosuggest for every input with the class "googleSuggest" 4503 var counter = 1; 4504 var inputsArray = []; 4505 initializeMapSR(); // add markers 4506 } 4507 } 4508 4509 function isFloat(value) { 4510 value = parseFloat(value); 4511 if ( 4512 typeof value === 'number' && 4513 !Number.isNaN(value) && 4514 !Number.isInteger(value) 4515 ) { 4516 return true; 4517 } 4518 4519 return false; 4520 } 4521 4522 function initializeMapSR() { 4523 //the markers process will only happen if there are spans with the class "google-pin-location" 4524 if ($('.google-pin-location:not(".marker-pin")').length > 0) { 4525 //array with all the markers 4526 var markersArray = []; 4527 // variable to close the last window 4528 var closeLastWindows = null; 4529 if (window['google_bounds'] != true) { 4530 window['google_bounds'] = true; 4531 bounds = new google.maps.LatLngBounds(); 4532 } 4533 //function that will set a marker on the map for each user location 4534 $('.google-pin-location:not(".marker-pin")').each(function () { 4535 $(this).addClass('marker-pin');
4536 if( !isFloat($(this).attr("data-lat")) || !isFloat($(this).attr("data-lng"))){ 4537 return; 4538 } 4539 4540 // Making the icon 4541 var iconImage = '/images/marker.png'; 4542 //var markerLatLng = parseFloat($(this).attr("data-lat"))+","+parseFloat($(this).attr("data-lng")); 4543 var markerLatLng = {lat:parseFloat($(this).attr("data-lat")),lng:parseFloat($(this).attr("data-lng"))}; 4544 var markerName = $(this).attr("data-name"); 4545 var marker = new google.maps.Marker({ 4546 position: markerLatLng, 4547 map: mapSR, 4548 icon: iconImage, 4549 title: markerName 4550 }); 4551 bounds.extend(markerLatLng); 4552 var hideLink = $(this).attr('data-hideMessages'); 4553 var phonehtml = ''; 4554 if ($(this).attr("data-phone") != "") { 4555 phonehtml = '<p class="btn-xs btn-default btn-block"><i class="fa fa-phone fa-fw"></i>' + $(this).attr("data-phone") + '</p>'; 4556 if ($(this).attr("data-addon") == 1) { 4557 phonehtml = '<div class="btn btn-xs btn-block btn-secondary btn-outline js-btn" onClick="clickToCall(this, false)" title="Show Phone Number" data-token="' + $(this).attr("data-token") +'">Show Phone Number</div><p class="hide btn-phone btn btn-xs btn-block tmargin btn-secondary btn-outline"><i class="fa fa-phone fa-fw"></i> <a href="tel:' + $(this).attr("data-phone") +'"><span class="text-secondary">' + $(this).attr("data-phone") + '</span></a></p>'; 4558 } 4559 } 4560 4561 if (hideLink == 1) { 4562 marker['infowindow'] = new google.maps.InfoWindow({ 4563 content: `<div class="info_window"> 4564 <img src="` + $(this).attr("data-photo") + `">` + 4565 `<a class="h5 bold" href=` + $(this).attr("data-filename") + `>` 4566 + $(this).attr("data-name") + 4567 `</a>` 4568 + phonehtml + 4569 `<a class="btn btn-xs btn-success btn-block view_profile" href=` + $(this).attr("data-filename") + `> 4570 View Listing 4571 </a>` + 4572 `</div>` 4573 }); 4574 } else { 4575 marker['infowindow'] = new google.maps.InfoWindow({ 4576 content: `<div class="info_window"> 4577 <img src="` + $(this).attr("data-photo") + `">` + 4578 `<a class="h5 bold" href=` + $(this).attr("data-filename") + `>` 4579 + $(this).attr("data-name") + 4580 `</a>` 4581 + phonehtml + 4582 `<a class="btn btn-xs btn-primary btn-block view_profile" href=` + $(this).attr("data-filename") + `> 4583 View Listing 4584 </a>` + 4585 `<a class="btn btn-xs btn-secondary btn-block contact_now" href=` + $(this).attr("data-filename") + `/connect> 4586 Send Message 4587 </a>` + 4588 `</div>` 4589 }); 4590 } 4591 // assuming you also want to hide the infowindow when user mouses-out 4592 4593 function closeInfoWindows() { 4594 if (closeLastWindows != null) { 4595 closeLastWindows.close(); 4596 } 4597 } 4598 4599 var typeOfListener = 'mouseover'; // by default for desktop 4600 google.maps.event.addListener(marker, typeOfListener, function () { 4601 if (window['mapCloseTimeout']) { 4602 clearTimeout(window['mapCloseTimeout']); 4603 } 4604 closeInfoWindows(); 4605 closeLastWindows = this['infowindow']; 4606 this['infowindow'].open(mapSR, this); 4607 }); 4608 4609 // Close infowindow when mouse leaves the marker (desktop only) 4610 if (typeOfListener === 'mouseover') { 4611 google.maps.event.addListener(marker, 'mouseout', function () { 4612 var self = this; 4613 window['mapCloseTimeout'] = setTimeout(function () { 4614 self['infowindow'].close(); 4615 if (closeLastWindows === self['infowindow']) { 4616 closeLastWindows = null; 4617 } 4618 }, 300); 4619 }); 4620 } 4621 4622 }); 4623 4624 // Keep infowindow open when mouse hovers over its content (desktop only) 4625 $(document).on('mouseenter', '.gm-style-iw', function () { 4626 if (window['mapCloseTimeout']) { 4627 clearTimeout(window['mapCloseTimeout']); 4628 } 4629 }).on('mouseleave', '.gm-style-iw', function () { 4630 if (closeLastWindows != null) {
4631 closeLastWindows.close(); 4632 closeLastWindows = null; 4633 } 4634 }); 4635 4636 mapSR.fitBounds(bounds); 4637 } 4638 if ($('#map-canvas').length > 0) { 4639 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>"; 4640 $('body').append(cssHideLogo); 4641 4642 } else { 4643 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>"; 4644 $('body').append(cssHideLogo); 4645 } 4646 } 4647 4648 function showPhone(elemente) { 4649 $(elemente).addClass("hide").siblings().removeClass("hide"); 4650} 4651 function initGMap() { 4652 4653 // Check if the map is loaded. 4654 const mapIconView = document.querySelector('.mapView'); 4655 if (typeof mapIconView !== undefined && mapIconView != null) { 4656 mapIconView.addEventListener('click', initGMap); 4657 mapIconView.removeEventListener('click', initGMap); 4658 } 4659 const mapDivID = document.getElementById('map-canvas'); 4660 4661 if (typeof google === 'object' && google.hasOwnProperty('maps')) { 4662 // Set the map source. 4663 setJsMapSR(mapDivID); 4664 } else { 4665 // If the map is not loaded, wait for it to load before setting the source. 4666 googleMapOnFormClick().then(() => { 4667 setJsMapSR(mapDivID); 4668 }); 4669 } 4670 4671 } 4672 4673 window.addEventListener('load', () => { 4674 // Get the lazy map div, either by data-id or by ID. 4675 const lazyMapDiv = document.querySelector('div[data-id]') 4676 const mapDivID = document.getElementById('map-canvas'); 4677 // Add a delay to allow the map to load before initializing it. 4678 setTimeout(() => { 4679 // Check if the map div exists. 4680 if (typeof lazyMapDiv !== "undefined" && lazyMapDiv !== null) { 4681 lazyMapDiv.id = lazyMapDiv.dataset.id; 4682 let mapIconView = document.querySelector('.mapView'); 4683 if (typeof mapIconView !== undefined && mapIconView != null) { 4684 mapIconView.addEventListener('click', initGMap); 4685 // If map view is already active, initialize immediately 4686 if (mapIconView.classList.contains('activeView')) { 4687 initGMap(); 4688 } 4689 } 4690 } else if (typeof mapDivID !== "undefined" || mapDivID !== null) { 4691 // Initialize the map. 4692 initGMap(); 4693 } 4694 }, 500); 4695 }); 4696</script>
4696<script> 4697 4698$('.view_phone_number').click(function(event){ 4699 event.preventDefault(); 4700 $(this).hide(); 4701 $(this).next('span.phone_number').css("display","inline-block"); 4702}); 4703</script>
4703 4704 4705 4706
4706<script type="text/javascript"> 4707 // Try to load coordinates from sessionStorage on page load 4708 var vlat = 0; 4709 var vlon = 0; 4710 try { 4711 var savedLat = sessionStorage.getItem('bd_geolocation_lat'); 4712 var savedLon = sessionStorage.getItem('bd_geolocation_lon'); 4713 if (savedLat && savedLon) { 4714 vlat = parseFloat(savedLat); 4715 vlon = parseFloat(savedLon); 4716 } 4717 } catch(e) {} 4718 var isSubmit = false; 4719 var isGettingLocation = false; // Flag to prevent multiple simultaneous geolocation requests 4720 4721 // Function to save coordinates to sessionStorage 4722 function saveCoordinatesToSession(lat, lon) { 4723 try { 4724 sessionStorage.setItem('bd_geolocation_lat', lat.toString()); 4725 sessionStorage.setItem('bd_geolocation_lon', lon.toString()); 4726 } catch(e) {} 4727 } 4728 4729 // Function to get coordinates from sessionStorage if current ones are 0 4730 function getCoordinatesFromSession() { 4731 if (vlat === 0 && vlon === 0) { 4732 try { 4733 var savedLat = sessionStorage.getItem('bd_geolocation_lat'); 4734 var savedLon = sessionStorage.getItem('bd_geolocation_lon'); 4735 if (savedLat && savedLon) { 4736 vlat = parseFloat(savedLat); 4737 vlon = parseFloat(savedLon); 4738 return true; 4739 } 4740 } catch(e) {} 4741 } 4742 return false; 4743 } 4744 var cityTypes = [ 4745 'colloquial_area', 4746 'locality', 4747 'sublocality', 4748 'sublocality_level_1', 4749 'sublocality_level_2', 4750 'sublocality_level_3', 4751 'sublocality_level_4', 4752 'sublocality_level_5', 4753 'neighborhood', 4754 'ward', 4755 'postal_town' 4756 ]; 4757 4758 var postalTypes = [ 4759 'postal_code', 4760 'postal_code_prefix', 4761 'postal_code_suffix', 4762 'street_number', 4763 'premise', 4764 'subpremise', 4765 'route', 4766 'intersection', 4767 'street_address', 4768 'floor', 4769 'room', 4770 'post_box', 4771 'delivery_address' 4772 ]; 4773 4774 var isSubmitting = false; 4775 window.cachedSelectedOption = [{ 'typed_location': '' }]; 4776 window.isSubmittingMainSearch = false; 4777 4778 document.addEventListener('DOMContentLoaded', () => { 4779 let isSubmitting = false; // Add flag at the top level 4780 4781 setTimeout(()=>{ 4782 let googleSuggestForm = document.querySelectorAll('.googleSuggest,.google-writen-location,input[name="lead_location"],.fill_location'); 4783 if (typeof googleSuggestForm != "undefined") { 4784 for (let i = 0; i < googleSuggestForm.length; i++) { 4785 let closestForm = googleSuggestForm[i].closest('form'); 4786 if(typeof closestForm != "undefined" && closestForm != null){ 4787 closestForm.addEventListener('focusin', googleMapOnFormClick, false); 4788 4789 }else{ 4790 googleSuggestForm[i].addEventListener('input', googleMapOnFormClick, false); 4791 } 4792 googleSuggestForm[i].addEventListener('click', googleMapOnFormClick, false); 4793 } 4794 } 4795 },200); 4796 4797 $('.website-search button[type=submit]').click(async function (e) { 4798 e.preventDefault(); // Prevent the default submit action 4799 var nativeForm = $(this).closest('form')[0]; 4800 if (nativeForm && typeof nativeForm.reportValidity === 'function' && !nativeForm.reportValidity()) { 4801 return false; 4802 } 4803 await googleMapOnFormClick(); 4804 $(this).closest('form').submit(); 4805 }); 4806 }); 4807 window['gmapClick'] = false; 4808 function googleMapOnFormClick() { 4809 if(window.gmapClick){ 4810 return; 4811 } 4812 window.gmapClick = true; 4813 4814 return new Promise((resolve, reject) => { 4815 window.isSubmittingMainSearch = false; 4816 let googleSuggestForm = document.querySelectorAll('.googleSuggest, .google-writen-location, input[name="lead_location"], .fill_location'); 4817 let mapUri = "https://maps.googleapis.com/ma
4817ps/api/js?v=quarterly&libraries=places®ion=US&callback=initializeG&language=en&key=AIzaSyDbfKV3pdAqtZWJp2D8818eBlTy7zr0DQk"; 4818 4819 if (typeof google !== "undefined" && google.hasOwnProperty('maps')) { 4820 resolve('already loaded'); 4821 return; 4822 } 4823 4824 let loadMapScriptAsync = function (uri) { 4825 return new Promise((resolve, reject) => { 4826 let script = document.createElement('script'); 4827 script.type = 'text/javascript'; 4828 script.src = uri; 4829 script.async = true; 4830 script.onload = function () { 4831 resolve("ok"); 4832 }; 4833 script.onerror = function () { 4834 reject("Failed to load Google Maps script."); 4835 }; 4836 document.head.appendChild(script); 4837 }); 4838 }; 4839 4840 loadMapScriptAsync(mapUri) 4841 .then(() => { 4842 resolve(); 4843 }) 4844 .catch((error) => { 4845 console.error(error); 4846 reject(); 4847 }); 4848 4849 }); 4850 } 4851 4852 function initializeG() { 4853 var geocoder; 4854 //This piece of code will create an autosuggest for every input with the class "googleSuggest" 4855 var counter = 1; 4856 var inputsArray = []; 4857 window.cachedSelectedOption = [{ 'typed_location': '' }]; 4858 let mapExists = document.querySelectorAll('[id^="map"]').length > 0; 4859 const functionsToInvoke = { 4860 setJsMap: true, 4861 setJsMapOverview: mapExists, 4862 setJsMapSR: mapExists, 4863 setJsMapSidebar: mapExists 4864 }; 4865 if (window['maps_loaded'] !== true) { 4866 for (let func in functionsToInvoke) { 4867 if (typeof window[func] === 'function' && functionsToInvoke[func]) { 4868 window['maps_loaded'] = true; 4869 window[func](); 4870 } 4871 } 4872 } 4873 $(".googleSuggest").each(function () { 4874 //get the id from the input to be the unique identifier for each autocomplete 4875 var inputId = $(this).attr("id"); 4876 var inputElement = $(this); 4877 inputsArray[counter] = /** @type {HTMLInputElement} */( 4878 document.getElementById('' + inputId)); 4879 const mainCountry = ''; 4880 const inputOptions = { 4881 fields: ['address_components', 'adr_address','formatted_address', 'geometry', 'icon', 'name','place_id','plus_code','type'], 4882 types: ['geocode'] 4883 } 4884 const language = "en"; 4885 4886 if (language) { 4887 inputOptions.language = language; 4888 } 4889 if (mainCountry) { 4890 inputOptions.componentRestrictions = {country: mainCountry}; 4891 inputOptions.region = mainCountry; 4892 } 4893 4894 var autocomplete = new google.maps.places.Autocomplete(inputsArray[counter], inputOptions); 4895 google.maps.event.addListener(autocomplete, 'place_changed', function () { 4896 const place = autocomplete.getPlace(); 4897 4898 cachedSelectedOption = []; 4899 cachedSelectedOption.push(place); 4900 4901 cachedSelectedOption[0]['typed_location'] = inputElement.val(); 4902 /* if(cachedSelectedOption[0]['adr_address']){ 4903 let cleanLocation = cachedSelectedOption[0]['adr_address'].replace(/<[^>]*>/g, ''); 4904 cachedSelectedOption[0]['typed_location'] = cleanLocation; 4905 inputElement.val(cleanLocation); 4906 }*/ 4907 if (cachedSelectedOption[0]['address_components'] == undefined) { 4908 cachedSelectedOption = []; 4909 var emptyObj = { 4910 'typed_location': '' 4911 }; 4912 cachedSelectedOption.push(emptyObj); 4913 } 4914 }); 4915 //the code that prevents the submition when hit enter on a google location autocomplete item 4916 inputElement.keydown( function (e) { 4917 if (e.keyCode == 13) { 4918 var pacCounter = 0; 4919 //need to run a loop to check each pac container 4920 $('.pac-container').each(function () { 4921 4922 if ($(this).css("display") != "none") { 4923 pacCounter++; 4924 } 4925 }); 4926 if (pacCounter > 0) { 4927 e.preventDefault(); 4928 } 4929 } 4930 }); 4931 counter++; 4932 }); 4933 4934 //triggers every time a form with the id website-search is trigered 4935 $('.website-search').submit(function (e) { 4936 4937 var currentForm = $(this); 4938 var locationInput = $(this).find(".googleLocation"); 4939 var $submitButton = currentForm.find('input[type=submit], button[type=submit]'); 4940 4941 4942 if (locationInput.val() != "" && typeof locationInput.val() != 'undefined') { 4943 4944 // Set submitting flag 4945 window.isSubmittingMainSearch = true; 4946 $submitButton.prop('disabled', true); 4947 4948 e.preventDefault(); 4949 //this variable has the main country of the site 4950 var form = currentForm; 4951 var urlGET = form.serialize(); 4952 var formActionUrl = form.attr("action"); 4953 var locationValue = locationInput.val(); 4954 4955 4956 4957 const mainCountry = ''; 4958 const inputOptions = { 4959 address:locationValue 4960 } 4961 const language = "en"; 4962 4963 if (language) { 4964 inputOptions.language = language; 4965 } 4966 if (mainCountry) { 4967 inputOptions.componentRestrictions = {country: mainCountry}; 4968 inputOptions.region = mainCountry; 4969 } 4970 4971 if (typeof cachedSelectedOption == 'undefined') { 4972 var emptyForm = { 4973 'typed_location': '' 4974 }; 4975 cachedSelectedOption.push(emptyForm); 4976 } 4977 4978 if (locationValue != cachedSelectedOption[0]['typed_location']) { 4979 geocoder = new google.maps.Geocoder(); 4980 geocoder.geocode(inputOptions, function (results, status) { 4981 4982 //if the google response of the geocoding was successful it will use that info to build the url for the new search 4983 if (status == google.maps.GeocoderStatus.OK) { 4984 parseInfoToSearch(results, urlGET, formActionUrl); 4985 4986 } else { 4987 var urlPath = formActionUrl; 4988 var redirect = urlPath + "?" + urlGET; 4989 //will redirect the page using the new url that has been constructed 4990 window.location.href = redirect; 4991 } 4992 }); 4993 4994 } else { 4995 parseInfoToSearch(cachedSelectedOption, urlGET, formActionUrl); 4996 } 4997 } 4998 }); 4999 5000 5001 //check if a map has been loaded 5002 if ($('#map-canvas').length > 0) { 5003 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>"; 5004 $('body').append(cssHideLogo); 5005 } else { 5006 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>"; 5007 $('body').append(cssHideLogo); 5008 } 5009
5010 if (geocodeVisitorsSetting == 1 && geocodingMethod === "IP") { 5011 populateSearchFields(); 5012 } 5013 5014 if($('.googleSuggest').val() == ""){ 5015 populateSearchFields(); 5016 } 5017 5018 var geocodeVisitorsSetting = '0'; 5019 var geocodingMethod = 'HTML5'; 5020 5021 //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 5022 5023 var vlon = ''; 5024 var vlat = ''; 5025 } 5026 5027 function switchPlaceID(placeId,urlGET, formActionUrl) { 5028 let request = { 5029 placeId: placeId, 5030 fields: ['address_components', 'adr_address', 'formatted_address', 'geometry', 'icon', 'name', 'place_id', 'plus_code', 'type'], 5031 }; 5032 5033 let service = new google.maps.places.PlacesService(document.createElement('div')); 5034 service.getDetails(request, function(place, status) { 5035 if (status === google.maps.places.PlacesServiceStatus.OK) { 5036 let dataArray = []; 5037 dataArray.push(place); 5038 parseInfoToSearch(dataArray, urlGET, formActionUrl); 5039 } else { 5040 console.error('Place details request failed with status:', status); 5041 } 5042 }); 5043 } 5044 5045 function parseInfoToSearch(results, urlGET, formActionUrl) { 5046 var urlSearchParams = new URLSearchParams(urlGET); 5047 var parameters = {}; 5048 var addressComponentsArray = []; 5049 if (results.length > 1) { 5050 if(urlSearchParams.get("location_value")?.toLowerCase() === "nebraska" && results.length === 2){ 5051 let tempResult = results[0]; 5052 results[0] = results[1]; 5053 results[1] = tempResult; 5054 } 5055 for (let i = 0; i < results.length; i++) { 5056 if (results[i].types[0] === 'natural_feature' || 5057 results[i].types[0] === 'airport' || 5058 results[i].types[0] === 'point_of_interest' || 5059 results[i].types[0] === 'establishment' || 5060 results[i].types[0] === 'political' || 5061 results[i].types[0] === 'park') { 5062 results.splice(i, 1); 5063 } 5064 } 5065 } 5066 var adComLength = results[0].address_components.length; 5067 5068 if(results[0].place_id == 'ChIJmQrivHKsQjQR4MIK3c41aj8'){ 5069 switchPlaceID('ChIJi73bYWusQjQRgqQGXK260bw',urlGET, formActionUrl); 5070 return; 5071 } 5072 sessionStorage.setItem("google_result",JSON.stringify(results)); 5073 5074 5075 var foundPostalType = results[0].types.find(type => postalTypes.includes(type)); 5076 var foundCityType = results[0].types.find(type => cityTypes.includes(type)); 5077 5078 //loop that will build the array with the address components and will get the short name of country and administrative area level 1 5079 for (var i = 0; i < adComLength; i++) { 5080 5081 if (results[0].address_components[i]['types'][0] == "country") { 5082 parameters.country_sn = results[0].address_components[i]['short_name']; 5083 } 5084 if (results[0].address_components[i]['types'][0] == "administrative_area_level_1") { 5085 parameters.adm_lvl_1_sn = results[0].address_components[i]['short_name']; 5086 } 5087 if (results[0].address_components[i]['types'][0] == "administrative_area_level_1") { 5088 parameters.stateSearchLN = results[0].address_components[i]['long_name']; 5089 } 5090 if (results[0].address_components[i]['types'][0] == "administrative_area_level_2") { 5091 parameters.county_sn = results[0].address_components[i]['short_name']; 5092 } 5093 if ($.inArray(results[0].address_components[i]['types'][0], cityTypes) !== -1 && (foundCityType || foundPostalType ) ) { 5094 parameters.city = results[0].address_components[i]['long_name']; 5095 } 5096 if (results[0].address_components[i]['types'][0] == "postal_code" || results[0].address_components[i]['types'][0] == "postal_code_prefix") { 5097 parameters.postal_code = results[0].address_components[i]['long_name']; 5098 } 5099 } 5100 5101 5102 // Filter out 'political' from result types - use more specific type when available 5103 // Same pattern as BD-directory-maps-typePolitical (PR #5642) 5104 if (results[0].types && results[0].types.length > 1 && results[0].types[0] === 'political') { 5105 results[0].types.splice(0, 1); 5106 } 5107 5108 // Pick the most specific type from results, skip "political" (too generic) 5109 parameters.location_type = results[0].types[0]; 5110 for (var t = 0; t < results[0].types.length; t++) { 5111 if (results[0].types[t] != 'political') { 5112 parameters.location_type = results[0].types[t]; 5113 break; 5114 } 5115 } 5116 5117 // When searching by city/locality, omit postal_code â Google returns 5118 // a partial zip prefix that doesn't match all members in the city 5119 if (parameters.location_type == 'locality' && parameters.postal_code) { 5120 delete parameters.postal_code; 5121 } 5122 5123 if (parameters.adm_lvl_1_sn != '') { 5124 parameters.stateSearch = parameters.adm_lvl_1_sn; 5125 } 5126 if (parameters.country_sn == "GB") { 5127 delete parameters.adm_lvl_1_sn; 5128 } 5129 5130 //will check if the response had the bounds parameters 5131 //if it had it will add the south west and north east parameters to the new url 5132 if (results[0].geometry.hasOwnProperty('bounds') || results[0].geometry.hasOwnProperty('viewport')) { 5133 5134 if (results[0].geometry.hasOwnProperty('bounds')) { 5135 var boundsResponse = results[0].geometry.bounds; 5136 5137 } else { 5138 var boundsResponse = results[0].geometry.viewport; 5139 } 5140 parameters.swlat = boundsResponse.getSouthWest
5140().lat(); 5141 parameters.nelat = boundsResponse.getNorthEast().lat(); 5142 parameters.swlng = boundsResponse.getSouthWest().lng(); 5143 parameters.nelng = boundsResponse.getNorthEast().lng(); 5144 5145 //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 5146 } else { 5147 parameters.fsearch = "radius"; 5148 } 5149 var locationCenterResponse = results[0].geometry.location; 5150 parameters.lat = locationCenterResponse.lat(); 5151 parameters.lng = locationCenterResponse.lng(); 5152 parameters.faddress = results[0].formatted_address; 5153 parameters.place_id = results[0].place_id; 5154 var formatParameters = $.param(parameters); 5155 urlGET = urlGET + "&" + formatParameters; 5156 var urlPath = formActionUrl; 5157 var redirect = urlPath + "?" + urlGET; 5158 //will redirect the page using the new url that has been constructed 5159 window.location.href = redirect; 5160 } 5161 function populateSearchFields() { 5162 var prePopulateLocationSetting = '0'; 5163 var geolocationMethod = 'HTML5'; 5164 5165 // If geolocation is in progress and we don't have coordinates yet, wait a bit 5166 if (isGettingLocation && (vlat === 0 || vlon === 0)) { 5167 var waitStartTime = performance.now(); 5168 var waitInterval = setInterval(function() { 5169 if (!isGettingLocation || (vlat !== 0 && vlon !== 0)) { 5170 clearInterval(waitInterval); 5171 // Retry after a short delay to ensure coordinates are set 5172 setTimeout(function() { 5173 populateSearchFields(); 5174 }, 100); 5175 } else if ((performance.now() - waitStartTime) > 10000) { 5176 // Timeout after 10 seconds - try sessionStorage 5177 clearInterval(waitInterval); 5178 if (getCoordinatesFromSession()) { 5179 setTimeout(function() { 5180 populateSearchFields(); 5181 }, 100); 5182 } 5183 } 5184 }, 200); 5185 return; 5186 } 5187 5188 // If coordinates are 0, try to get from sessionStorage 5189 if (vlat === 0 || vlon === 0) { 5190 getCoordinatesFromSession(); 5191 } 5192 5193 // Validate coordinates first 5194 var hasValidCoordinates = (vlat !== '' && vlon !== '' && vlat != undefined && vlon != undefined && vlat != 0 && vlon != 0 && Math.abs(vlat) <= 90 && Math.abs(vlon) <= 180); 5195 5196 if (!hasValidCoordinates) { 5197 return; 5198 } 5199 5200 //if set to one will get the lat and lng to do reverse geocoding 5201 if (prePopulateLocationSetting == 1 && (geolocationMethod === "HTML5" || geolocationMethod === "IP")) { 5202 var visitorLatLng = new google.maps.LatLng(parseFloat(vlat), parseFloat(vlon)); 5203 var visitorGeocoder = new google.maps.Geocoder(); 5204 var formattedAddress = []; 5205 var preFormattedStructure = { 5206 "locality": "long_name", 5207 "administrative_area_level_2": "long_name", 5208 "administrative_area_level_1": "long_name", 5209 "country": "long_name" 5210 }; 5211 visitorGeocoder.geocode({'latLng': visitorLatLng}, function (results, status) { 5212 //if the google response of the geocoding was successful it will use that info to build the url for the new search 5213 if (status == google.maps.GeocoderStatus.OK) { 5214 window.cachedSelectedOption = results; 5215 $.each(preFormattedStructure, function (findex, fvalue) { 5216 $.each(results[0].address_components, function (rindex, rvalue) { 5217 if (rvalue.types[0] == findex) { 5218 formattedAddress.push(rvalue.long_name); 5219 } 5220 }); 5221 }); 5222 $('.googleSuggest').each(function () { 5223 if ($(this).val() == '') { 5224 if (formattedAddress.length > 0) { 5225 $(this).val(formattedAddress.join(', ')); 5226 clearContent($(this)); 5227 } 5228 } 5229 }); 5230 } else { 5231 $('.googleSuggest').each(function () { 5232 $(this).val(''); 5233 }); 5234 } 5235 }); 5236 } 5237 } 5238 function showError(error) { 5239 switch (error.code) { 5240 case error.PERMISSION_DENIED: 5241 case 1: // PERMISSION_DENIED 5242 $('.fill_location.clicked').popover({ 5243 content: `Your local browser settings have prevented location targeting. Please enable location permissions in your browser settings.`, 5244 container: 'body' 5245 }); 5246 $('.fill_location.clicked').popover('toggle'); 5247 setTimeout(function () { 5248 $('.fill_location.clicked').popover('hide'); 5249 $('.fill_location.clicked').removeClass('clicked'); 5250 }, 4000); 5251 break; 5252 case error.POSITION_UNAVAILABLE: 5253 case 2: // POSITION_UNAVAILABLE 5254 $('.fill_location.clicked').popover({ 5255 content: `Location information is unavailable. Please check your device location settings.`, 5256 container: 'body' 5257 }); 5258 $('.fill_location.clicked').popover('toggle'); 5259 setTimeout(function () { 5260 $('.fill_location.clicked').popover('hide'); 5261 $('.fill_location.clicked').removeClass('clicked'); 5262 }, 4000); 5263 break; 5264 case error.TIMEOUT: 5265 case 3: // TIMEOUT 5266 $('.fill_location.clicked').popover({ 5267 content: `Location request timed out. Please ensure location services are enabled and try again.`, 5268 container: 'body' 5269 }); 5270 $('.fill_location.clicked').popover('toggle'); 5271 setTimeout(function () { 5272 $('.fill_location.clicked').popover('hide'); 5273 $('.fill_location.clicked').removeClass('clicked'); 5274 }, 4000); 5275 break; 5276 case error.UNKNOWN_ERROR: 5277 default: 5278 $('.fill_location.clicked').popover({ 5279 content: `An error occurred while getting your location. Please try again.`, 5280 container: 'body' 5281 }); 5282 $('.fill_location.clicked').popover('toggle'); 5283 setTimeout(function () { 5284 $('.fill_location.clicked').popover('hide'); 5285 $('.fill_location.clicked').removeClass('clicked'); 5286 }, 4000); 5287 break; 5288 } 5289 } 5290 if (navigator.geolocation) { 5291 if ($(".googleSuggest")[0]) { 5292 $(document).on('click', '.fill_location', function getCXPosition() { 5293 // Prevent multiple simultaneous geolocation requests 5294 if (isGettingLocation) { 5295 return; 5296 } 5297 5298 var $button = $(this); 5299 $button.addClass('clicked'); 5300 var startPos; 5301 5302 // Set flag to prevent concurrent requests 5303 isGettingLocation = true; 5304 5305 // Function to actually get the position 5306 var attemptGetPosition = function() { 5307 // Try with shorter timeout first for faster response 5308 var geoOptions = {
5309 enableHighAccuracy: false, // Use false for faster response 5310 timeout: 8000, // 8 second timeout (reduced for faster failure) 5311 maximumAge: 300000 // Accept cached position up to 5 minutes old 5312 }; 5313 5314 navigator.geolocation.getCurrentPosition(function (position) { 5315 startPos = position; 5316 vlat = startPos.coords.latitude; 5317 vlon = startPos.coords.longitude; 5318 5319 // Validate coordinates before proceeding 5320 if (!vlat || !vlon || vlat === 0 || vlon === 0) { 5321 isGettingLocation = false; 5322 $button.removeClass('clicked'); 5323 return; 5324 } 5325 5326 // Save coordinates to sessionStorage 5327 saveCoordinatesToSession(vlat, vlon);
5328 5329 $.get("/api/data/html/get/data_widgets/widget_name", { 5330 "vlat": vlat, 5331 "vlon": vlon, 5332 "name": "Website - Save Coordinates Session" 5333 }); 5334 5335 populateSearchFields(); 5336 5337 // Clear flag 5338 isGettingLocation = false; 5339 $button.removeClass('clicked'); 5340 }, function(error) { 5341 // Clear flag on error 5342 isGettingLocation = false; 5343 $button.removeClass('clicked'); 5344 5345 // For timeout errors, try sessionStorage as fallback 5346 if (error.code === 3) { 5347 if (getCoordinatesFromSession()) { 5348 // Use cached coordinates 5349 $.get("/api/data/html/get/data_widgets/widget_name", { 5350 "vlat": vlat, 5351 "vlon": vlon, 5352 "name": "Website - Save Coordinates Session" 5353 }); 5354 5355 populateSearchFields(); 5356 5357 // Clear flag 5358 isGettingLocation = false; 5359 $button.removeClass('clicked'); 5360 } else { 5361 $button.popover({ 5362 content: `Location request timed out. Please ensure location services are enabled and grant permission when prompted.`, 5363 container: 'body' 5364 }); 5365 $button.popover('show'); 5366 setTimeout(function() { 5367 $button.popover('hide'); 5368 }, 5000); 5369 } 5370 } else { 5371 showError(error); 5372 } 5373 }, geoOptions); 5374 }; 5375 5376 // Check if geolocation permission is already denied (but don't block if it's prompt) 5377 if (navigator.permissions && navigator.permissions.query) { 5378 navigator.permissions.query({name: 'geolocation'}).then(function(result) { 5379 if (result.state === 'denied') { 5380 isGettingLocation = false; 5381 $button.removeClass('clicked'); 5382 showError({code: 1, message: 'Permission denied'}); 5383 return; 5384 } else { 5385 // Permission is granted or prompt - proceed with geolocation 5386 attemptGetPosition(); 5387 } 5388 }).catch(function(err) { 5389 // If permission API not supported, proceed anyway 5390 attemptGetPosition(); 5391 }); 5392 } else { 5393 // Permission API not available, proceed with geolocation 5394 attemptGetPosition(); 5395 } 5396 }) 5397 } 5398 } else { 5399 console.log('Geolocation is not supported for this Browser/OS version yet.'); 5400 } 5401 function getUrlParameter(sParam) { 5402 var sPageURL = window.location.search.substring(1); 5403 var sURLVariables = sPageURL.split('&'); 5404 5405 for (var i = 0; i < sURLVariables.length; i++) { 5406 var sParameterName = sURLVariables[i].split('='); 5407 5408 if (sParameterName[0] == sParam) { 5409 return decodeURIComponent(sParameterName[1]); 5410 } 5411 } 5412 } 5413 </script>
5413 5414
5414<script> 5415 // switchClass() is jQuery UI (Effects), which is no longer loaded on every page. 5416 // removeClass().addClass() is the same class swap, applied immediately instead of 5417 // after animateClass()'s queued 400ms default. 5418 $(document).ready(function(){ 5419 $('.navbar-header .navbar-toggle.main_menu').click(function(){ 5420 $('.mobile-main-menu').toggleClass('opened'); 5421 }); 5422 $('.mobile-main-menu .sidebar-nav').find('li').each(function(){ 5423 $(this).addClass('hasChildren'); 5424 if ($(this).children('ul').length > 0){ 5425 $(this).prepend('<i class="fa fa-plus" aria-hidden="true"></i>'); 5426 $(this).find('a').after('<div class="clearfix"></div>'); 5427 $(this).find('span').after('<div class="clearfix"></div>'); 5428 } 5429 $(this).append('<div class="clearfix"></div>'); 5430 }); 5431 5432 $('.mobile-main-menu .sidebar-nav li i').click(function(){ 5433 if ($(this).parent().children('ul').length > 0){ 5434 $(this).parent().toggleClass('sub_open'); 5435 } 5436 if ($(this).hasClass('fa-plus')){ 5437 $(this).removeClass('fa-plus').addClass('fa-minus'); 5438 } else { 5439 $(this).removeClass('fa-minus').addClass('fa-plus'); 5440 } 5441 }); 5442 }) 5443 5444 if ($(window).width() > 740 && $(window).width() < 1100) { 5445 5446 $(document).ready(function(){ 5447 $('.tablet-menu .tablet-menu-ul').find('li').each(function(){ 5448 5449 if ($(this).children('ul').length > 0){ 5450 $(this).prepend('<i class="fa fa-plus tablet-fa hidden-sm hidden-md hidden-lg" aria-hidden="true"></i>'); 5451 $(this).find('a').after('<div class="clearfix"></div>'); 5452 var this_link = $(this).children('a').text().replace(/[^\x00-\x7F]/g, "");; 5453 $(this).children('a').html(this_link); 5454 $(this).find('span').after('<div class="clearfix"></div>'); 5455 } 5456 $(this).append('<div class="clearfix"></div>'); 5457 }); 5458 5459 $('.tablet-menu .tablet-menu-ul li i').click(function(){ 5460 5461 if ($(this).parent().children('ul').length > 0){ 5462 $(this).parent().toggleClass('sub_open'); 5463 5464 if ($(this).siblings( "ul" ).hasClass('tablet-block')){ 5465 $(this).siblings( "ul" ).removeClass('tablet-block').addClass('tablet-none'); 5466 } else { 5467 $(this).siblings( "ul" ).addClass( "tablet-block" ); 5468 5469 if ($(this).siblings( "ul" ).hasClass('tablet-none')){ 5470 $(this).siblings( "ul" ).removeClass('tablet-none') 5471 } 5472 5473 if ($(this).parent().siblings().children('ul').hasClass('tablet-block')) { 5474 $(this).parent().siblings().children('ul').removeClass('tablet-block').addClass('tablet-none'); 5475 $(this).parent().siblings().children('i').removeClass('fa-minus').addClass('fa-plus'); 5476 } 5477 5478 if ($(this).parent().siblings().children('ul').children().children('ul').hasClass('tablet-block')) { 5479 $(this).parent().siblings().children('ul').children().children('ul').removeClass('tablet-block').addClass('tablet-none'); 5480 $(this).parent().siblings().children('ul').children().children('i').removeClass('fa-minus').addClass('fa-plus'); 5481 } 5482 5483 if ($(this).siblings('ul').children('ul').children().children('ul').hasClass('tablet-block')) { 5484 $(this).siblings('ul').children('ul').children().children('ul').removeClass('tablet-block').addClass('tablet-none'); 5485 $(this).siblings('ul').children('ul').children().children('i').removeClass('fa-minus').addClass('fa-plus'); 5486 } 5487 5488 } 5489 5490 } 5491 5492 if ($(this).hasClass('fa-plus')){ 5493 $(this).removeClass('fa-plus').addClass('fa-minus'); 5494 } else { 5495 $(this).removeClass('fa-minus').addClass('fa-plus'); 5496 } 5497 }); 5498 }) 5499 } 5500 // Append unique ID attribute for mobile main menu links 5501 $('.mobile-main-menu a,.mobile-main-menu span').attr("id", function() { return $(this).attr("id") + "-mobile" }); 5502</script>
5502 5503
5504<script> 5505/* Keeps the announcement bar flush with the navbar: this widget's CSS emits static 50px 5506 offsets that are blind to the hide-menu settings, so a hidden or fixed compact-logo 5507 navbar leaves a gap or an overlap. Measure the real navbar state and own the offset. */ 5508(function () { 5509 function alignAnnouncementToNavbar() { 5510 var ann = document.querySelector('.announcement-bar'); 5511 if (!ann) { return; } 5512 /* above the widget's own offset breakpoints: restore stylesheet values */ 5513 if (window.innerWidth > 1100) { 5514 ann.style.removeProperty('margin-top'); 5515 ann.style.removeProperty('top'); 5516 return; 5517 } 5518 var navbar = document.querySelector('.header nav.navbar.navbar-default'); 5519 var navStyle = navbar ? window.getComputedStyle(navbar) : null; 5520 /* navbar hidden: the 50px offsets have nothing to clear, sit flush */ 5521 if (!navbar || navStyle.display === 'none') { 5522 ann.style.setProperty('margin-top', '0px', 'important'); 5523 ann.style.setProperty('top', '0px', 'important'); 5524 return; 5525 } 5526 if (window.innerWidth >= 768) { return; } 5527 /* only act while the navbar is pinned and showing the compact logo */ 5528 if (navStyle.position !== 'fixed') { return; } 5529 var logo = navbar.querySelector('.mobile_website_logo'); 5530 if (!logo || window.getComputedStyle(logo).display === 'none') { return; } 5531 var navRect = navbar.getBoundingClientRect(); 5532 var annRect = ann.getBoundingClientRect(); 5533 var delta = Math.round(navRect.bottom - annRect.top); /* >0 overlap, <0 gap */ 5534 if (delta === 0) { return; } 5535 var currentMt = parseFloat(window.getComputedStyle(ann).marginTop) || 0; 5536 var nextMt = currentMt + delta; 5537 /* a transient element above the bar during load can inflate the measure; a 5538 negative margin would pull the bar behind the navbar, so clamp at 0 */ 5539 if (nextMt < 0) { nextMt = 0; } 5540 /* !important to beat the widget's "margin-top: 50px !important" rule */ 5541 ann.style.setProperty('margin-top', nextMt + 'px', 'important'); 5542 } 5543 5544 function run() { 5545 alignAnnouncementToNavbar(); 5546 /* re-run after late layout shifts (fonts, async embeds) */ 5547 window.setTimeout(alignAnnouncementToNavbar, 250); 5548 window.setTimeout(alignAnnouncementToNavbar, 1200); 5549 } 5550 5551 if (document.readyState === 'loading') { 5552 document.addEventListener('DOMContentLoaded', run); 5553 } else { 5554 run(); 5555 } 5556 window.addEventListener('load', alignAnnouncementToNavbar); 5557 var resizeTimer; 5558 window.addEventListener('resize', function () { 5559 window.clearTimeout(resizeTimer); 5560 resizeTimer = window.setTimeout(alignAnnouncementToNavbar, 150); 5561 }); 5562})(); 5563</script>
vendor: 2 bytes, line 5563
5563
5564<script attribute='text/javascript'> 5565 var map; 5566 var members = {}; 5567 function initializeMap() { 5568 map = new google.maps.Map(document.getElementById('map-bounds'), { 5569 center: {lat: 0, lng: 0}, 5570 zoom: 8, 5571 disableDefaultUI: true, 5572 }); 5573 } 5574 function toogleShapeBox(user_id,node){ 5575 if($(node).is(':checked') == true){ 5576 members['user_id_'+user_id].boundsShape.setMap(map); 5577 }else{ 5578 members['user_id_'+user_id].boundsShape.setMap(null); 5579 } 5580 } 5581 5582 function loadMarker(lat,lng,showInfoWindow,title){ 5583 var contentString = ''; 5584 var marker = new google.maps.Marker({ 5585 position: {lat:lat,lng:lng}, 5586 map: map, 5587 title: 'Bounds Box Objects' 5588 }); 5589 5590 if(showInfoWindow === true){ 5591 5592 contentString = '<table>'; 5593 5594 $.each(members,function(index,value){ 5595 contentString += '<tr>'; 5596 contentString += '<td><input type="checkbox" checked="true" onchange="toogleShapeBox('+value.user_id+',this)"><td>'; 5597 contentString += '<td>'+value.name+'<td>'; 5598 contentString += '</tr>'; 5599 }); 5600 contentString += '</table>'; 5601 5602 var infowindow = new google.maps.InfoWindow({ 5603 content: contentString 5604 }); 5605 5606 marker.addListener('click', function() { 5607 infowindow.open(map, marker); 5608 }); 5609 5610 }else{ 5611 marker.setIcon('https://maps.google.com/mapfiles/ms/icons/green-dot.png'); 5612 var infowindow = new google.maps.InfoWindow({ 5613 content: title 5614 }); 5615 5616 marker.addListener('click', function() { 5617 infowindow.open(map, marker); 5618 }); 5619 5620 } 5621 } 5622 5623 function drawBounds(lat,lng,swlat,swlng,nelat,nelng,color,address,user_id,name){ 5624 5625 latlngs = []; 5626 5627 latlngs.push({ lat: swlat, lng: swlng });//bottom left 5628 latlngs.push({ lat: swlat, lng: lng });//bottom center 5629 latlngs.push({ lat: swlat, lng: nelng });//bottom right 5630 latlngs.push({ lat: lat, lng: nelng });// center right 5631 latlngs.push({ lat: nelat, lng: nelng });//top right 5632 latlngs.push({ lat: nelat, lng: lng });//top center 5633 latlngs.push({ lat: nelat, lng: swlng });//top left 5634 latlngs.push({ lat: lat, lng: swlng });//center left 5635 5636 5637 members['user_id_'+user_id] = { 5638 boundsShape:new google.maps.Polygon({ 5639 paths: latlngs, 5640 strokeColor: color, 5641 strokeOpacity: 0.8, 5642 strokeWeight: 3, 5643 fillColor: 'color', 5644 fillOpacity: 0.35 5645 }), 5646 name:name, 5647 user_id:user_id, 5648 color:color 5649 } 5650 5651 members['user_id_'+user_id].boundsShape.setMap(map); 5652 } 5653 5654 5655</script>
5655<script> 5656 function loadMasonryJs() { 5657 return new Promise((resolve, reject) => { 5658 if (window["masonryJs"]) { 5659 resolve("already load masonry"); 5660 } else { 5661 let script = document.createElement('script'); 5662 script.type = 'text/javascript'; 5663 script.src = "https://www.optimizecdn.com/directory/cdn/assets/bootstrap/js/masonry_gridview.pkgd.min.js"; 5664 script.async = true; 5665 script.onload = function () { 5666 window['masonryJs'] = true; 5667 resolve("ok"); 5668 }; 5669 let head = document.getElementsByTagName('head')[0]; 5670 head.appendChild(script); 5671 5672 } 5673 }); 5674 } 5675 5676 var map_opened = 0; 5677 var masonry_opened = 0; 5678 5679 $(".views > i").click(function () { 5680 $(".views > i").removeClass('activeView'); 5681 $(this).addClass('activeView'); 5682 }); 5683 $(".views > i.gridView").click(async function () { 5684 await loadMasonryJs(); 5685 $('.grid-container .clickToLoadMoreContainer').addClass('gridBtnLazyLoad') 5686 if (map_opened == 1) { 5687 $('.grid-container').removeClass('hidden'); 5688 $('.map_container').hide(); 5689 map_opened = 0; 5690 } 5691 $('.grid-container').addClass('visible'); 5692 $('.img_section.col-xs-2').removeClass('col-xs-2').addClass('col-xs-12 bmargin ex-col-2'); 5693 $('.img_section.col-sm-3').removeClass('col-sm-3').addClass('col-sm-12 bmargin ex-col-3'); 5694 $('.img_section.col-sm-4').removeClass('col-sm-4').addClass('col-sm-12 bmargin ex-col-4'); 5695 $('.mid_section.col-sm-9').removeClass('col-sm-9').addClass('col-sm-12 ex-col-9'); 5696 $('.mid_section.col-sm-6').removeClass('col-sm-6').addClass('col-sm-12 ex-col-6'); 5697 $('.mid_section.col-sm-7').removeClass('col-sm-7').addClass('col-sm-12 nohpad ex-col-7 text-center bpad'); 5698 $('.mid_section.col-sm-8').removeClass('col-sm-8').addClass('col-sm-12 ex-col-8 nohpad bpad'); 5699 $('.mid_section .post-location-snippet').addClass('text-center'); 5700 $('.mid_section.ex-col-7 .sm-block').addClass('show'); 5701 $('.mid_section .row-fluid.bpad .col-md-8').removeClass('col-md-8').addClass('col-sm-12 bmargin'); 5702 $('.mid_section .row-fluid.bpad a').addClass('btn-block'); 5703 $('.mid_section .row-fluid.bpad').addClass('text-center'); 5704 $('.info_section').removeClass('col-sm-3 norpad').addClass('col-sm-12 nopad'); 5705 $('.mid_section > div > p').addClass('text-center'); 5706 $('.mid_section h2').addClass('nomargin'); 5707 $('.mid_section a.h3').addClass('text-center h4 tmargin'); 5708 $('.mid_section .view-details').removeClass('rmargin'); 5709 $('.mid_section .contact-member').removeClass('lmargin'); 5710 $('.member-search-full-name').removeClass('rmargin'); 5711 $('.member-search-reviews').removeClass('rmargin'); 5712 $('.member-search-location').removeClass('rmargin rpad'); 5713 $('.member-search-company').addClass('btn-block'); 5714 $('.view_phone_number').addClass('center-block'); 5715 $('.phone_number').addClass('btn-block'); 5716 $('.search_result_image').addClass('grid_image'); 5717 $('.post-search-category').removeClass('inline-block').addClass('text-center'); 5718 $('.post-results-star').removeClass('pull-right').addClass('text-center tmargin'); 5719 5720 $('.grid-container.visible > hr:nth-of-type(3n)').addClass('gridBreak'); 5721 $('.search_result').addClass('col-xs-12 col-sm-4 col-md-4 grid').removeClass('row-fluid'); 5722 $('.grid_element').addClass('well xs-center-block'); 5723 5724 $('.col-md-3 + .clearfix, .col-md-4 + .clearfix, .clearfix + hr, .search_result hr + .clearfix, .mid_section > p, .mid_section .row-fluid.bpad p.nomargin, .tags, table.bmargin,.posted-by,.star_rating .the-rating-text').hide(); 5725 $('h2.h3.bold > a').addClass('gridA'); 5726 $('.info_section .module').removeClass('module fpad'); 5727 $('.grid-container').addClass('row'); 5728 document.body.classList.add('bdGridDone'); 5729 5730 });
5731 $(".views > i.listView").click(function () { 5732 $('.grid-container .clickToLoadMoreContainer').removeClass('gridBtnLazyLoad') 5733 5734 $('.clearfix.spacing').remove(); 5735 $('.grid-container').addClass('visible'); 5736 $('.img_section.ex-col-2').removeClass('col-xs-12 ex-col-2 bmargin').addClass('col-xs-2'); 5737 $('.img_section.ex-col-3').removeClass('col-sm-12 ex-col-3 bmargin').addClass('col-sm-3'); 5738 $('.img_section.ex-col-4').removeClass('col-sm-12 ex-col-4 bmargin').addClass('col-sm-4'); 5739 $('.mid_section.col-sm-12.ex-col-9').removeClass('col-sm-12').addClass('col-sm-9'); 5740 $('.mid_section.col-sm-12.ex-col-6').removeClass('col-sm-12').addClass('col-sm-6'); 5741 $('.mid_section.col-sm-12.ex-col-7').removeClass('col-sm-12 nohpad bpad ex-col-7 text-center').addClass('col-sm-7'); 5742 $('.mid_section.col-sm-12.ex-col-8').removeClass('col-sm-12 nohpad bpad').addClass('col-sm-8'); 5743 $('.mid_section .post-location-snippet.text-center').removeClass('text-center'); 5744 $('.mid_section.col-sm-7 .sm-block').removeClass('show'); 5745 $('.mid_section.col-sm-12.ex-col-12').removeClass('col-sm-12').addClass('col-sm-12'); 5746 $('.mid_section .row-fluid.bpad .col-sm-12').removeClass('col-sm-12 bmargin').addClass('col-md-8'); 5747 $('.mid_section .row-fluid.bpad a').removeClass('btn-block'); 5748 $('.mid_section .row-fluid.bpad').removeClass('text-center'); 5749 $('.info_section').removeClass('col-sm-12 nopad').addClass('col-sm-3 norpad'); 5750 $('.info_section > div.nomargin').addClass('module fpad'); 5751 $('.mid_section > div > p').removeClass('text-center'); 5752 $('.mid_section h2').removeClass('nomargin'); 5753 $('.mid_section a.h3').removeClass('text-center h4 tmargin'); 5754 $('.mid_section .view-details').addClass('rmargin'); 5755 $('.mid_section .contact-member').addClass('lmargin'); 5756 $('.member-search-full-name').addClass('rmargin'); 5757 $('.member-search-reviews').addClass('rmargin'); 5758 $('.member-search-location').addClass('rmargin rpad'); 5759 $('.member-search-company').removeClass('btn-block'); 5760 $('.view_phone_number').removeClass('center-block'); 5761 $('.search_result_image').removeClass('grid_image'); 5762 $('.ex-col-8 h2.h3.bold a.gridA').removeClass('bmargin'); 5763 $('.gridBreak').removeClass('gridBreak'); 5764 $('.post-search-category').removeClass('text-center').addClass('inline-block'); 5765 $('.post-results-star').removeClass('text-center tmargin').addClass(' pull-right'); 5766 $('.search_result').removeClass('col-md-4 col-sm-4 col-xs-12 grid').addClass('row-fluid'); 5767 $('.grid_element').removeClass('well'); 5768 $('.search_result .grid_element + .clearfix, .clearfix + hr, hr + .clearfix, .clearfix, .mid_section > p, .mid_section .row-fluid.bpad p.nomargin, .tags,.posted-by, table.bmargin, .star_rating span').show(); 5769 $('h2.h3.bold > a').removeClass('gridA'); 5770 $('.grid-container').removeClass('row'); 5771 if (map_opened == 1) { 5772 $('.grid-container').removeClass('hidden'); 5773 $('.map_container').hide(); 5774 map_opened = 0; 5775 } 5776 }); 5777 5778 $('.views > i.mapView').click(function () { 5779 $('.clearfix.spacing').remove(); 5780 $('.grid-container').addClass('hidden'); 5781 $('.map_container').show(); 5782 map_opened = 1; 5783 if(typeof initializeGoogleMaps === "function"){ 5784 initializeGoogleMaps(); 5785 } 5786 }); 5787 if (document.getElementById("google-pin") !== null) { 5788 $('.mapView').css('display', 'inline-block'); 5789 } 5790 $(document).ready(function () { 5791 if ($('.views .fa:visible').length == 1) { 5792 $('.views').hide(); 5793 } else { 5794 $('.views').show(); 5795 } 5796 }) 5797</script>
5797<script> 5798 $('#captchaContainer').removeClass('form-control '); 5799 $(".website_url_field").keyup(function(){ 5800 var fieldName = $(this).attr('name'); 5801 $(this).val($(this).val().replace(/\s+/g, '')); 5802 $('#myform').formValidation('revalidateField', fieldName); 5803 }); 5804</script>
vendor: 2 bytes, line 5804
5804
5805<script> 5806 $('#newsletter input[name="email"]').on('keypress', function() { 5807 $("#newsletter > .gdpr_consent_email").show(); 5808 }); 5809 $('#newsletter_signup_footer input[name="email"]').on('keypress', function() { 5810 $("#newsletter_signup_footer > .gdpr_consent_email").show(); 5811 }); 5812</script>
5812
5812<script src="https://www.optimizecdn.com/directory/cdn/bootstrap/formvalidation/current/dist/js/formValidation.min.js"></script>
5812 5813
5813<script src="https://www.optimizecdn.com/directory/cdn/bootstrap/formvalidation/current/dist/js/framework/bootstrap.min.js"></script>
5813 5814
5814<script type="text/javascript"> 5815 function decodeHtml(html) { 5816 var txt = document.createElement("textarea"); 5817 txt.innerHTML = html; 5818 return txt.value; 5819 } 5820 5821 // Override FormValidation URI validator to prevent recursion with URLs that contain @ characters 5822 $(function() { 5823 function applyFix() { 5824 // Check if FormValidation library and URI validator are loaded 5825 if (FormValidation && FormValidation.Validator && FormValidation.Validator.uri) { 5826 FormValidation.Validator.uri.validate = function(validator, $field, options) { 5827 var value = validator.getFieldValue($field, 'uri').trim(); 5828 return value === '' || new RegExp('^https?://[^\\s]+\\.[^\\s]{2,}').test(value); 5829 }; 5830 return true; 5831 } 5832 return false; 5833 } 5834 5835 if (!applyFix()) { 5836 setTimeout(applyFix, 50); 5837 } 5838 }); 5839 </script>
5839 5840
5840<script type="text/javascript"> 5841 5842 var counterSubmit = 0; 5843 $(document).ready(function() { 5844 /* grecaptcha.reset() with no argument always resets widget 0. On a page with two 5845 captcha holders that clears the wrong checkbox, so the widget the visitor solved 5846 keeps a token Google has already spent and every retry fails the security check. 5847 captchaHolders is published by widget 1995 keyed by "<formId>-google-recaptcha"; 5848 an undefined id means no per-form id is known and the arg-less call is used, 5849 exactly as before. */ 5850 function bdCaptchaWidgetId(formId) { 5851 if (typeof captchaHolders === "undefined" || !formId) { 5852 return undefined; 5853 } 5854 /* recaptcha.php renames each holder to "<id>-<counter>" before render (recaptcha.php ~L84), 5855 so captchaHolders is keyed by the RENAMED id - not "<formId>-google-recaptcha". Resolve from 5856 the holder element itself so the counter never has to be reconstructed. */ 5857 var form = document.getElementById(formId); 5858 var holder = form && form.querySelector(".g-recaptcha"); 5859 return holder ? captchaHolders[holder.id] : undefined; 5860 } 5861 5862 function bdCaptchaReset(formId) { 5863 if (typeof grecaptcha === "undefined" || typeof grecaptcha.reset !== "function") { 5864 return; 5865 } 5866 var widgetId = bdCaptchaWidgetId(formId); 5867 if (widgetId === undefined) { 5868 grecaptcha.reset(); 5869 } else { 5870 grecaptcha.reset(widgetId); 5871 } 5872 } 5873 5874 // Ghost-field strip (card d4tk1CMp): the server-side validator config can carry 5875 // rules for fields that are NOT rendered in this form (conditionally-rendered or 5876 // duplicated form configs). Those phantom rules make formValidation mis-evaluate 5877 // isValid(), so an empty required field bypasses validation and submits natively. 5878 // Remove any rule whose field has no matching element before initializing. 5879 // NOTE: this is the ONLY layer re-applied from reverted PR #5902. It strictly 5880 // REMOVES rules (never adds validators, never overrides native submit, never 5881 // intercepts on capture phase, never re-validates on click) â so it cannot 5882 // reproduce the "Save button slides down / nav broken / no success message" 5883 // regression that caused #5902 to be rolled back on site 19413. 5884 var validatorConfig = {"framework":"bootstrap","addOns":{"reCaptcha2":{"element":"captchaContainer","language":"en","theme":"light","siteKey":"6LfhXt8sAAAAAJL4MkgqvsOdY53C6pIw3RIhlGMq","timeout":"120","message":"The captcha is not valid"}},"fields":{"email":{"validators":{"notEmpty":{"message":"Please enter a value"},"emailAddress":{"message":"Please enter a valid email address"}}}}}; 5885 var formElement = $(`form[name='newsletter_modal_signup_380']`); 5886 if(validatorConfig && validatorConfig.fields) { 5887 Object.keys(validatorConfig.fields).forEach(function(fieldName) { 5888 if(formElement.find('[name="' + fieldName + '"]').length === 0) { 5889 delete validatorConfig.fields[fieldName]; 5890 } 5891 }); 5892 } 5893 5894 // Scroll to the first invalid field when submit fails validation, 5895 // so the user can immediately see why the form will not submit 5896 formElement.on('err.form.fv', function(e) { 5897 var $firstError = $(e.target).find('.form-group.has-error').first(); 5898 if ($firstError.length) { 5899 $('html, body').animate({ scrollTop: $firstError.offset().top - 100 }, 700); 5900 } 5901 }); 5902 5903 formElement.formValidation(validatorConfig).on('success.form.fv', function(e,fvdata) { 5904 5905 if('newsletter_modal_signup' == 'unsubscribe_email'){ 5906 return true; 5907 } 5908 // Prevent form submission 5909 e.preventDefault(); 5910 $form = $(e.target), 5911 fv = $form.data('formValidation'); 5912 5913 // Check HTML5 required fields that FormValidation may not know about 5914 var requiredEmpty = false; 5915 $form.find('[required]').each(function() { 5916 var val = $(this).val(); 5917 if (val === '' || val === null || (typeof val === 'string' && val.trim() === '')) { 5918 requiredEmpty = true; 5919 $(this).closest('.form-group').addClass('has-error'); 5920 if ($(this).siblings('.required-error').length === 0) { 5921 $(this).after('<small class="required-error help-block" style="color:#a94442;">Please enter a value</small>'); 5922 } 5923 } else { 5924 var $reqGroup = $(this).closest('.form-group'); 5925 $(this).siblings('.required-error').remove(); 5926 // Keep has-error if another validator is still failing for this field 5927 if ($reqGroup.find('small[data-fv-validator][data-fv-result="INVALID"]').length === 0) { 5928 $reqGroup.removeClass('has-error'); 5929 } 5930 } 5931 }); 5932 if (requiredEmpty) { 5933 fv.disableSubmitButtons(false); 5934 counterSubmit = 0; 5935 // Scroll to the first field with an error (HTML5-required scan does 5936 // not trigger err.form.fv, so handle the scroll here too) 5937 var $firstReqError = $form.find('.form-group.has-error').first(); 5938 if ($firstReqError.length) { 5939 $('html, body').animate({ scrollTop: $firstReqError.offset().top - 100 }, 700); 5940 } 5941 return false; 5942 } 5943 5944 var values = $(this).serialize(); 5945 5946 5947 var locationFieldCorrect = true; 5948 5949 if($("#newsletter_modal_signup_380 .location_required").length > 0){ 5950 $("#newsletter_modal_signup_380 .location_required").each(function (index) { 5951 if($(this).data('state') == 1){ 5952 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() == "") { 5953 locationFieldCorrect = false; 5954 } 5955 } 5956 }); 5957 } 5958 5959 if(locationFieldCorrect === false){ 5960 //check that there is a latitude or longitude 5961 swal(`Whoops!`, `The location information is required to submit this form`, "error"); 5962 return false; 5963 } 5964 5965 5966 if (!$(this).attr("action")) { 5967 var action = ''; 5968 5969 } else { 5970 var action = $(this).attr("action"); 5971 } 5972 if (!$(this).attr("method")) { 5973 var method = 'post'; 5974 5975 } else { 5976 var method = $(this).attr("method"); 5977 } 5978 if (!$(this).attr("form_action_type")) { 5979 var form_action_type = 'notification'; 5980 5981 } else { 5982 var form_action_type = $(this).attr("form_action_type"); 5983 } 5984 if (!$(this).attr("form_action_div")) { 5985 /* Empty "ID to Replace" default: prefer #main-content, fall back to legacy #first_container if absent */ 5986 var form_action_div = $('#main-content').length ? '#main-content' : '#first_container'; 5987 5988 } else { 5989 var form_action_div = $(this).attr("form_action_div"); 5990 } 5991 if (!$(this).attr("return_data_type")) { 5992 var return_data_type = 'json'; 5993 5994 } else { 5995 var return_data_type = $(this).attr("return_data_type"); 5996 } 5997 var submitInFlight = counterSubmit != 0 || (Date.now() - ($form.data('bdLastSubmitAt') || 0) < 5000); 5998 if (!submitInFlight) { 5999 if ($("#newsletter_modal_signup_380-notification").html() != "") { 6000 $("#newsletter_modal_signup_380-notification").remove(); 6001 } 6002 if ($(this).find('input[type="submit"]').length > 0) { 6003 $(this).find('input[type="submit"]').before('<div id="newsletter_modal_signup_380-notification" class="alert"></div>'); 6004 6005 } else { 6006 $(this).prepend('<div id="newsletter_modal_signup_380-notification" class="alert"></div>'); 6007 } 6008 } 6009 var notification = $("#newsletter_modal_signup_380-notification"); 6010 6011 if ((form_action_type == "" || form_action_type == "default") && action.indexOf("account") >= 0) { 6012 notification.html(`Processing Request...`).addClass("alert-warning-subtle"); 6013 setTimeout(function(){ 6014 fv.defaultSubmit(); 6015 }, 100); 6016 } else { 6017 notification.html(`Processing Request...`).addClass("alert-warning-subtle"); 6018 if(!submitInFlight) { 6019 counterSubmit++; 6020 $form.data('bdLastSubmitAt', Date.now()); 6021 6022 var fields = $(this).serializeArray(); 6023 var formField = []; 6024 var processData = true; 6025 var contentType = "application/x-www-form-urlencoded; charset=UTF-8"; 6026 6027 6028 6029 if($("#newsletter_modal_signup_380 input[type=file]").length > 0){ 6030 6031 var formObject = new FormData(); 6032 processData = false; 6033 contentType = false; 6034 6035 $(fields).each(function(index,field){ 6036 formField.push(field.name+"="+field.value); 6037 }); 6038 6039 values = formField.join("&"); 6040 6041 $(formField).each(function(index,fieldValue){ 6042 var fieldInfo = fieldValue.split('='); 6043 formObject.append(fieldInfo[0],fieldInfo[1]); 6044 }); 6045 6046 $("#newsletter_modal_signup_380 input[type=file]").each(function(index,node){ 6047 var file = this.files[0]; 6048 if(typeof file != "undefined"){ 6049 formObject.append("file_addon["+$(node).attr('name')+"]", file, file.name); 6050 } 6051 }); 6052 }else{ 6053 6054 $(fields).each(function(index,field){ 6055 formField.push(field.name+"="+encodeURIComponent(field.value)); 6056 }); 6057 6058 var formObject = formField.join("&"); 6059 } 6060 6061 $.ajax({
6062 url: action, 6063 type: method, 6064 data: formObject, 6065 dataType: return_data_type, 6066 processData: processData, 6067 contentType: contentType, 6068 success: function (data) { 6069 // Re-query live node: success.form.fv fires twice, orphaning the closure ref captured above. 6070 notification = $("#newsletter_modal_signup_380-notification"); 6071 if (return_data_type == "html") { 6072 var result = 'success'; 6073 6074 if (!data != "") { 6075 var result_widget = data['result_widget']; 6076 } 6077 6078 } else { 6079 6080 6081 if (!data['result']) { 6082 var result = 'error'; 6083 } else { 6084 var result = data['result']; 6085 } 6086 if (!data['result_widget']) { 6087 var result_widget = ''; 6088 6089 } else { 6090 var result_widget = data['result_widget']; 6091 } 6092 } 6093 if (result == "success") { 6094 6095 if (!data['message']) { 6096 var message = `Your information has submitted successfully!`; 6097 6098 } else { 6099 var message = data['message']; 6100 } 6101 if (!data['redirect_url']) { 6102 var redirect_url = ''; 6103 6104 } else { 6105 var redirect_url = data['redirect_url']; 6106 } 6107 6108 6109 6110 if (form_action_type == "notification") { 6111 if (redirect_url && (action.indexOf('Member%20Login%20Page') >= 0 || action.indexOf('Member Login Page') >= 0)) { 6112 if (redirect_url.substring(0, 1) != "/" && redirect_url.substring(0, 1) != "h") { 6113 redirect_url = "/" + redirect_url; 6114 } 6115 if (notification.parents('.modal').length) { 6116 $('.modal-backdrop').hide(); 6117 $('.modal').modal('hide'); 6118 } 6119 window.location.href = redirect_url; 6120 fv.resetForm(true); 6121 } else { 6122 notification.html(message + '<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>') 6123 .addClass('alert-dismissible') 6124 .addClass("alert-success-subtle") 6125 .removeClass("alert-danger-subtle") 6126 .removeClass("alert-warning-subtle") 6127 6128 6129 6130 if(notification.parents('.modal').length && 'newsletter_modal_signup_380' == 'whmcs_billing_address'){ 6131 setTimeout(function(){ 6132 notification.parents('.modal').modal('hide'); 6133 }, 1000); 6134 } 6135 } 6136 6137 } else if (form_action_type == "widget") { 6138 6139 if (result_widget != '') { 6140 6141 setTimeout(function(){ 6142 if(form_action_div != '.newsletter_modal_form_container'){ 6143 $("html, body").animate({ scrollTop: 0 }, 600); 6144 } 6145 $(form_action_div).html(decodeHtml(result_widget)).text(); 6146 6147 }, 1000); 6148 } 6149 6150 } else if (form_action_type == "redirect") { 6151 6152 if (redirect_url == "") { 6153 redirect_url = decodeURIComponent(""); 6154 } 6155 6156 if (redirect_url.substring(0, 1) != "/" && redirect_url.substring(0, 1) != "h") { 6157 redirect_url = "/" + redirect_url; 6158 } 6159 current_location = "/search_results"; 6160 refresh_pages_string = "/login"; 6161 refresh_pages_string = refresh_pages_string.replace(/ /g,''); 6162 refresh_pages_array = refresh_pages_string.split(','); 6163 notification.html(message) 6164 .addClass("alert-success-subtle") 6165 .removeClass("alert-danger-subtle") 6166 .removeClass("alert-warning-subtle") 6167 .delay(2000).slideUp(); 6168 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" )){ 6169 window.location.href = window.location.href+'?logged'; 6170 } else { 6171 window.location.href = redirect_url; 6172 } 6173 6174 fv.resetForm(true); 6175 } 6176 if(form_action_div != '.newsletter_modal_form_container' && 'newsletter_modal_signup_380' != 'whmcs_billing_address'){ 6177 $('.modal-backdrop').hide(); 6178 } 6179 } else { 6180 bdCaptchaReset(formElement.attr('id')); 6181 if (!data['message']) { 6182 var message = `You entered invali
6182d data. Please try to save again.`; 6183 6184 } else { 6185 var message = data['message']; 6186 } 6187 $("#newsletter_modal_signup_380-notification").html(message) 6188 .addClass("alert-danger-subtle") 6189 .removeClass("alert-success-subtle") 6190 .removeClass("alert-warning-subtle") 6191 .fadeIn(); 6192 fv.disableSubmitButtons(false); 6193 } 6194 counterSubmit = 0; 6195 }, 6196 error: function (e) { 6197 6198 if(typeof grecaptcha !== "undefined" && typeof grecaptcha.reset === "function"){ 6199 bdCaptchaReset(formElement.attr('id')); 6200 $("#newsletter_modal_signup_380-notification").html(`Recaptcha Error`); 6201 } else { 6202 $("#newsletter_modal_signup_380-notification").html(`A connection error occurred while saving. Please try to save again.`); 6203 } 6204 $("#newsletter_modal_signup_380-notification").addClass("alert-warning-subtle") 6205 .removeClass("alert-success-subtle") 6206 .removeClass("alert-warning-subtle") 6207 .fadeIn(); 6208 counterSubmit = 0; 6209 } 6210 });/// End Ajax 6211 } 6212 }//END else 6213 }).bind('keydown', function(event) { 6214 6215 if (event.ctrlKey || event.metaKey) { 6216 6217 switch (String.fromCharCode(event.which).toLowerCase()) { 6218 6219 case 's': 6220 var nativeForm = $(this)[0]; 6221 if (nativeForm && typeof nativeForm.reportValidity === 'function' && !nativeForm.reportValidity()) { 6222 event.preventDefault(); 6223 return false; 6224 } 6225 $(this).submit(); 6226 break; 6227 } 6228 } 6229 }); 6230 6231 /// This will turn any select2 that are required in the form builder to being required elements. 6232 $('#newsletter_modal_signup_380 select').each(function (i, obj) { 6233 setTimeout(function(){ 6234 if ($(obj).prop("required") && $(obj).attr("style") == "display: none;") { 6235 $(obj).css("z-index","-999"); 6236 $(obj).css("height","0"); 6237 $(obj).css("width","0"); 6238 $(obj).css("display","block"); 6239 $(obj).css("position","absolute"); 6240 } 6241 }, 3000); 6242 }); 6243 6244 // Clear required-error messages when user fills in a required field 6245 $('#newsletter_modal_signup_380').on('keyup change', '[required]', function() { 6246 var val = $(this).val(); 6247 if (val !== '' && val !== null && val.trim() !== '') { 6248 var $group = $(this).closest('.form-group'); 6249 // Remove only this handler's own required message 6250 $(this).siblings('.required-error').remove(); 6251 // Keep has-error if another FormValidation validator is still failing 6252 // (e.g. stringLength, regexp). has-error is shared, so removing it 6253 // wholesale would clobber other validators' red styling. 6254 if ($group.find('small[data-fv-validator][data-fv-result="INVALID"]').length === 0) { 6255 $group.removeClass('has-error'); 6256 } 6257 } 6258 }); 6259 6260 });//END $('# echo $_SERVER[form_element_id]; ').formValidation( 6261 </script>
6261 6262 <div class="modal fade" id="newsletter_subscribe_modal" tabindex="-1" role="dialog" aria-hidden="true"> 6263 <div class="modal-dialog"> 6264 <div class="modal-content"> 6265 <div class="container-fluid"> 6266 <div class="row"> 6267 <div class="col-md-12"> 6268 <br> 6269 <button type="button" class="close" data-dismiss="modal" aria-label="Close"> 6270 <span aria-hidden="true">×</span> 6271 </button> 6272 <h3 class="nomargin"> 6273 Join Our Newsletter 6274 </h3> 6275 <hr> 6276 <div class="newsletter_modal_form_container"> 6277 <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="mysql_real_escape_string_runned" value="1" id="newsletter_modal_signup_380-element-1"/><input type="hidden" name="form" value="myform" id="newsletter_modal_signup_380-element-2"/><input type="hidden" name="formname" value="newsletter_modal_signup" id="newsletter_modal_signup_380-element-3"/><input type="hidden" name="dowiz" value="1" id="newsletter_modal_signup_380-element-4"/><input type="hidden" name="save" value="1" id="newsletter_modal_signup_380-element-5"/><input type="hidden" name="url_origin_pars" value="/search_results" id="newsletter_modal_signup_380-element-6"/><input type="hidden" name="action" autocomplete="off" value="subscribe" id="newsletter_modal_signup_380-element-7"/><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-8"/></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-9"/></div><div class="form-group"><div class="form-group security_question_label"> 6278 <div id="newsletter_modal_signup_380-captchaContainer" class="control-group"> 6279 <div class="g-recaptcha" id="newsletter_modal_signup_380-google-recaptcha"></div> 6280 </div> 6281 <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> 6282 <div class="clearfix bmargin"></div> 6283 <input type="hidden" name="recaptcha" id="newsletter_modal_signup_380-rcap"> 6284</div> 6285 <style> 6286 .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 { 6287 transform: scale(0.77); 6288 -webkit-transform: scale(0.77); 6289 transform-origin: 0 0; 6290 -webkit-transform-origin: 0 0; 6291 margin-bottom: -15px; 6292 } 6293 6294 .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 { 6295 transform: scale(0.77); 6296 -webkit-transform: scale(0.77); 6297 transform-origin: 0 0; 6298 -webkit-transform-origin: 0 0; 6299 margin-bottom: -15px; 6300 } 6301 </style> 6302
6302<script type="text/javascript"> 6303 if(typeof formsFound == "undefined"){ 6304 var formID = ''; 6305 var currentCaptcha = {}; 6306 var captchaHolders = {}; 6307 var formsFound = {}; 6308 var captchaApiRequested = false; 6309 /* The forms the visitor has actually interacted with - only these get a widget. */ 6310 var captchaArmedForms = []; 6311 /* api.js stays lazy - nothing is fetched from Google until the visitor actually 6312 touches the form. 'click' alone was too narrow: a keyboard-only visitor tabs in 6313 and presses Enter without ever clicking, so api.js never loaded, the captcha 6314 never rendered, and the form POSTed an empty token. */ 6315 var captchaTriggerEvents = ['click', 'keydown', 'focusin', 'touchstart']; 6316 6317 window.addEventListener('load', () => { 6318 formID = document.querySelectorAll('[name="recaptcha"]'); 6319 if (typeof formID != "undefined" && formID !== null) { 6320 for (let i = 0; i < formID.length; i++) { 6321 let formIDForm = formID[i].closest('form'); 6322 let captchaHolder = formIDForm.querySelector(".g-recaptcha"); 6323 6324 if (typeof formsFound[formIDForm.id] != "undefined") { 6325 formsFound[formIDForm.id]['counter']++; 6326 }else{ 6327 formsFound[formIDForm.id] = {'counter' : 1}; 6328 } 6329 6330 formIDForm.setAttribute('data-counter', formsFound[formIDForm.id]['counter']); 6331 captchaHolder.setAttribute('id',captchaHolder.id+'-'+formsFound[formIDForm.id]['counter']); 6332 6333 if (typeof formIDForm != "undefined" && formIDForm !== null) { 6334 captchaTriggerEvents.forEach( evt => 6335 formIDForm.addEventListener(evt, reCaptchaOnFormInteraction, false) 6336 ); 6337 } 6338 } 6339 } 6340 }); 6341 } 6342 6343 function reCaptchaOnFormInteraction(event) { 6344 if (event && event.currentTarget) { 6345 captchaArmForm(event.currentTarget); 6346 } 6347 if (captchaApiRequested) { 6348 renderArmedCaptchas(); 6349 return; 6350 } 6351 captchaApiRequested = true; 6352 6353 var head = document.getElementsByTagName('head')[0]; 6354 var script = document.createElement('script'); 6355 script.type = 'text/javascript'; 6356 script.src = 'https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit&hl=en'; 6357 head.appendChild(script); 6358 } 6359 6360 var captchaArmForm = function (formEl) { 6361 if (!formEl) { 6362 return; 6363 } 6364 for (var a = 0; a < captchaArmedForms.length; a++) { 6365 if (captchaArmedForms[a] === formEl) { 6366 return; 6367 } 6368 } 6369 captchaArmedForms.push(formEl); 6370 }; 6371 6372 var captchaSolvedCallback = function (holder) { 6373 return function () { 6374 var formEl = holder.closest('form'); 6375 if (!formEl) { 6376 return; 6377 } 6378 $(formEl).find('.security_question_label').removeClass('has-error'); 6379 $(formEl).find('#recaptcha_error').css('display', 'none'); 6380 var notification = document.getElementById(formEl.id + '-notification'); 6381 if (notification && notification.classList.contains('alert-danger-subtle')) { 6382 $(notification).slideUp(); 6383 } 6384 }; 6385 }; 6386 6387 var renderArmedCaptchas = function () { 6388 if (typeof grecaptcha === "undefined" || typeof grecaptcha.render !== "function") { 6389 return; 6390 } 6391 for (var f = 0; f < captchaArmedForms.length; f++) { 6392 var holder = captchaArmedForms[f].querySelector('div[class=g-rec
6392aptcha]'); 6393 6394 if (!holder || !holder.id || holder.getClientRects().length === 0) { 6395 continue; 6396 } 6397 /* Guard a second render: grecaptcha throws on an element it already claimed. */ 6398 if (typeof captchaHolders[holder.id] === "undefined") { 6399 captchaHolders[holder.id] = grecaptcha.render(holder.id, { 6400 'sitekey': '6LfhXt8sAAAAAJL4MkgqvsOdY53C6pIw3RIhlGMq', 6401 'callback': captchaSolvedCallback(holder) 6402 }); 6403 } 6404 } 6405 }; 6406 6407 var onloadCallback = function (event) { 6408 renderArmedCaptchas(); 6409 }; 6410 6411 </script>
vendor: 1 bytes, line 6411
6411
6412<script> 6413 $(document).ready(function(){ 6414 /* Implicit submission (Enter inside a field) fires 'submit' without firing a click on 6415 the submit button, so the click guard below never sees it and the form POSTed an 6416 empty token. Bound on document/capture so it runs before FormValidation's own 6417 handler on the form - at AT_TARGET the capture flag does not order listeners, so a 6418 listener on the form itself would not reliably win. Native HTMLFormElement.submit() 6419 does not dispatch 'submit', so the solved-captcha path below is unaffected. */ 6420 var captchaGuardedForm = document.getElementById('newsletter_modal_signup_380'); 6421 if (captchaGuardedForm) { 6422 document.addEventListener('submit', function (event) { 6423 if (event.target !== captchaGuardedForm) { 6424 return; 6425 } 6426 6427 var formId = captchaGuardedForm.id; 6428 var captchaHolderKey = formId + "-google-recaptcha-" + $(captchaGuardedForm).data('counter'); 6429 var captchaRendered = typeof captchaHolders[captchaHolderKey] != "undefined"; 6430 6431 if (captchaRendered && grecaptcha.getResponse(captchaHolders[captchaHolderKey]) !== "") { 6432 $("#" + formId + " .security_question_label").removeClass("has-error"); 6433 $("#" + formId + " #recaptcha_error").css("display", "none"); 6434 return; 6435 } 6436 6437 /* Unsolved, or api.js still in flight: either way there is no token to send. */ 6438 event.preventDefault(); 6439 event.stopImmediatePropagation(); 6440 $("#" + formId + " .security_question_label").addClass("has-error"); 6441 $("#" + formId + " #recaptcha_error").css("display", "block"); 6442 return false; 6443 }, true); 6444 } 6445 $("#newsletter_modal_signup_380 input[type=submit]").unbind('click'); 6446 $("#newsletter_modal_signup_380 input[type=submit]").click(function (event) { 6447 6448 var formId = $(this.form).attr('id'); 6449 var captchaHolderKey = formId + "-google-recaptcha-" +$(this.form).data('counter'); 6450 6451 if (typeof captchaHolders[captchaHolderKey] != "undefined") { 6452 if (grecaptcha.getResponse(captchaHolders[captchaHolderKey]) === "") { 6453 event.preventDefault(); 6454 $("#" + formId).formValidation('validate'); 6455 $("#" + formId + " .security_question_label").addClass("has-error"); 6456 $("#" + formId + " #recaptcha_error").css("display", "block"); 6457 return false; 6458 } 6459 6460 /* Solved captcha: clear the error UI and let the click proceed untouched. 6461 The browser then fires a REAL, button-initiated submit event, so 6462 FormValidation runs its normal chain (success.form.fv -> AJAX modal on 6463 checkout / native POST on login). Re-submitting here artificially broke 6464 both ways: native form.submit() skips the FV chain (checkout rendered the 6465 raw JSON response), and jQuery .submit() fires a synthetic submit that FV 6466 refuses, leaving the form stuck after the first error (Bug 2). */ 6467 $("#" + formId + " .security_question_label").removeClass("has-error"); 6468 $("#" + formId + " #recaptcha_error").css("display", "none"); 6469 } 6470 }); 6471 }); 6472</script>
6472</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-12"/></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-13"/></div><input type='hidden' name='origin' value='/search_results'></form>
6472<script type="text/javascript">jQuery(document).ready(function() { jQuery("#newsletter_modal_signup_380").bind("submit", function() { 6473 });}); </script>
6473 </div> 6474 <br> 6475 </div> 6476 </div> 6477 </div> 6478 </div> 6479 </div> 6480</div>
6480<script type="text/javascript"> 6481(function () { 6482 try { 6483 var email = new URLSearchParams(window.location.search).get('email'); 6484 if (!email) { return; } 6485 email = email.trim(); 6486 if (email.indexOf('@') === -1) { return; } 6487 /* Sets the input value property (never HTML) -> XSS-safe regardless of the query value. */ 6488 var fill = function () { 6489 var fields = document.querySelectorAll('input[name="email_r"]'); 6490 for (var i = 0; i < fields.length; i++) { 6491 if (!fields[i].value) { fields[i].value = email; } 6492 } 6493 }; 6494 if (document.readyState === 'loading') { 6495 document.addEventListener('DOMContentLoaded', fill); 6496 } else { 6497 fill(); 6498 } 6499 } catch (e) {} 6500})(); 6501</script>
6501 6502
6502<script src="https://www.optimizecdn.com/directory/cdn/bootstrap/formvalidation/current/dist/js/formValidation.min.js"></script>
6502 6503
6503<script src="https://www.optimizecdn.com/directory/cdn/bootstrap/formvalidation/current/dist/js/framework/bootstrap.min.js"></script>
6503 6504
6504<script type="text/javascript"> 6505 function decodeHtml(html) { 6506 var txt = document.createElement("textarea"); 6507 txt.innerHTML = html; 6508 return txt.value; 6509 } 6510 6511 // Override FormValidation URI validator to prevent recursion with URLs that contain @ characters 6512 $(function() { 6513 function applyFix() { 6514 // Check if FormValidation library and URI validator are loaded 6515 if (FormValidation && FormValidation.Validator && FormValidation.Validator.uri) { 6516 FormValidation.Validator.uri.validate = function(validator, $field, options) { 6517 var value = validator.getFieldValue($field, 'uri').trim(); 6518 return value === '' || new RegExp('^https?://[^\\s]+\\.[^\\s]{2,}').test(value); 6519 }; 6520 return true; 6521 } 6522 return false; 6523 } 6524 6525 if (!applyFix()) { 6526 setTimeout(applyFix, 50); 6527 } 6528 }); 6529 </script>
6529 6530
6530<script type="text/javascript"> 6531 6532 var counterSubmit = 0; 6533 $(document).ready(function() { 6534 /* grecaptcha.reset() with no argument always resets widget 0. On a page with two 6535 captcha holders that clears the wrong checkbox, so the widget the visitor solved 6536 keeps a token Google has already spent and every retry fails the security check. 6537 captchaHolders is published by widget 1995 keyed by "<formId>-google-recaptcha"; 6538 an undefined id means no per-form id is known and the arg-less call is used, 6539 exactly as before. */ 6540 function bdCaptchaWidgetId(formId) { 6541 if (typeof captchaHolders === "undefined" || !formId) { 6542 return undefined; 6543 } 6544 /* recaptcha.php renames each holder to "<id>-<counter>" before render (recaptcha.php ~L84), 6545 so captchaHolders is keyed by the RENAMED id - not "<formId>-google-recaptcha". Resolve from 6546 the holder element itself so the counter never has to be reconstructed. */ 6547 var form = document.getElementById(formId); 6548 var holder = form && form.querySelector(".g-recaptcha"); 6549 return holder ? captchaHolders[holder.id] : undefined; 6550 } 6551 6552 function bdCaptchaReset(formId) { 6553 if (typeof grecaptcha === "undefined" || typeof grecaptcha.reset !== "function") { 6554 return; 6555 } 6556 var widgetId = bdCaptchaWidgetId(formId); 6557 if (widgetId === undefined) { 6558 grecaptcha.reset(); 6559 } else { 6560 grecaptcha.reset(widgetId); 6561 } 6562 } 6563 6564 // Ghost-field strip (card d4tk1CMp): the server-side validator config can carry 6565 // rules for fields that are NOT rendered in this form (conditionally-rendered or 6566 // duplicated form configs). Those phantom rules make formValidation mis-evaluate 6567 // isValid(), so an empty required field bypasses validation and submits natively. 6568 // Remove any rule whose field has no matching element before initializing. 6569 // NOTE: this is the ONLY layer re-applied from reverted PR #5902. It strictly 6570 // REMOVES rules (never adds validators, never overrides native submit, never 6571 // intercepts on capture phase, never re-validates on click) â so it cannot 6572 // reproduce the "Save button slides down / nav broken / no success message" 6573 // regression that caused #5902 to be rolled back on site 19413. 6574 var validatorConfig = {"framework":"bootstrap","addOns":{"reCaptcha2":{"element":"captchaContainer","language":"en","theme":"light","siteKey":"6LfhXt8sAAAAAJL4MkgqvsOdY53C6pIw3RIhlGMq","timeout":"120","message":"The captcha is not valid"}},"fields":{"email":{"validators":{"notEmpty":{"message":"Please enter a value"},"emailAddress":{"message":"Please enter a valid email address"}}},"pass":{"validators":{"notEmpty":{"message":"Please enter a value"}}}}}; 6575 var formElement = $(`form[name='member_login_190']`); 6576 if(validatorConfig && validatorConfig.fields) { 6577 Object.keys(validatorConfig.fields).forEach(function(fieldName) { 6578 if(formElement.find('[name="' + fieldName + '"]').length === 0) { 6579 delete validatorConfig.fields[fieldName]; 6580 } 6581 }); 6582 } 6583 6584 // Scroll to the first invalid field when submit fails validation, 6585 // so the user can immediately see why the form will not submit 6586 formElement.on('err.form.fv', function(e) { 6587 var $firstError = $(e.target).find('.form-group.has-error').first(); 6588 if ($firstError.length) { 6589 $('html, body').animate({ scrollTop: $firstError.offset().top - 100 }, 700); 6590 } 6591 }); 6592
6593 formElement.formValidation(validatorConfig).on('success.form.fv', function(e,fvdata) { 6594 6595 if('member_login' == 'unsubscribe_email'){ 6596 return true; 6597 } 6598 // Prevent form submission 6599 e.preventDefault(); 6600 $form = $(e.target), 6601 fv = $form.data('formValidation'); 6602 6603 // Check HTML5 required fields that FormValidation may not know about 6604 var requiredEmpty = false; 6605 $form.find('[required]').each(function() { 6606 var val = $(this).val(); 6607 if (val === '' || val === null || (typeof val === 'string' && val.trim() === '')) { 6608 requiredEmpty = true; 6609 $(this).closest('.form-group').addClass('has-error'); 6610 if ($(this).siblings('.required-error').length === 0) { 6611 $(this).after('<small class="required-error help-block" style="color:#a94442;">Please enter a value</small>'); 6612 } 6613 } else { 6614 var $reqGroup = $(this).closest('.form-group'); 6615 $(this).siblings('.required-error').remove(); 6616 // Keep has-error if another validator is still failing for this field 6617 if ($reqGroup.find('small[data-fv-validator][data-fv-result="INVALID"]').length === 0) { 6618 $reqGroup.removeClass('has-error'); 6619 } 6620 } 6621 }); 6622 if (requiredEmpty) { 6623 fv.disableSubmitButtons(false); 6624 counterSubmit = 0; 6625 // Scroll to the first field with an error (HTML5-required scan does 6626 // not trigger err.form.fv, so handle the scroll here too) 6627 var $firstReqError = $form.find('.form-group.has-error').first(); 6628 if ($firstReqError.length) { 6629 $('html, body').animate({ scrollTop: $firstReqError.offset().top - 100 }, 700); 6630 } 6631 return false; 6632 } 6633 6634 var values = $(this).serialize(); 6635 6636 6637 var locationFieldCorrect = true; 6638 6639 if($("#member_login_190 .location_required").length > 0){ 6640 $("#member_login_190 .location_required").each(function (index) { 6641 if($(this).data('state') == 1){ 6642 if($('#member_login_190 input[name="lead_location"]').val() == "" || $('#member_login_190 input[name="lat"]').val() == "" || $('#member_login_190 input[name="lng"]').val() == "") { 6643 locationFieldCorrect = false; 6644 } 6645 } 6646 }); 6647 } 6648 6649 if(locationFieldCorrect === false){ 6650 //check that there is a latitude or longitude 6651 swal(`Whoops!`, `The location information is required to submit this form`, "error"); 6652 return false; 6653 } 6654 6655 6656 if (!$(this).attr("action")) { 6657 var action = ''; 6658 6659 } else { 6660 var action = $(this).attr("action"); 6661 } 6662 if (!$(this).attr("method")) { 6663 var method = 'post'; 6664 6665 } else { 6666 var method = $(this).attr("method"); 6667 } 6668 if (!$(this).attr("form_action_type")) { 6669 var form_action_type = 'notification'; 6670 6671 } else { 6672 var form_action_type = $(this).attr("form_action_type"); 6673 } 6674 if (!$(this).attr("form_action_div")) { 6675 /* Empty "ID to Replace" default: prefer #main-content, fall back to legacy #first_container if absent */ 6676 var form_action_div = $('#main-content').length ? '#main-content' : '#first_container'; 6677 6678 } else { 6679 var form_action_div = $(this).attr("form_action_div"); 6680 } 6681 if (!$(this).attr("return_data_type")) { 6682 var return_data_type = 'json'; 6683 6684 } else { 6685 var return_data_type = $(this).attr("return_data_type"); 6686 } 6687 var submitInFlight = counterSubmit != 0 || (Date.now() - ($form.data('bdLastSubmitAt') || 0) < 5000); 6688 if (!submitInFlight) { 6689 if ($("#member_login_190-notification").html() != "") { 6690 $("#member_login_190-notification").remove(); 6691 } 6692 if ($(this).find('input[type="submit"]').length > 0) { 6693 $(this).find('input[type="submit"]').before('<div id="member_login_190-notification" class="alert"></div>'); 6694 6695 } else { 6696 $(this).prepend('<div id="member_login_190-notification" class="alert"></div>'); 6697 } 6698 } 6699 var notification = $("#member_login_190-notification"); 6700 6701 if ((form_action_type == "" || form_action_type == "default") && action.indexOf("account") >= 0) { 6702 notification.html(`Processing Request...`).addClass("alert-warning-subtle"); 6703 setTimeout(function(){ 6704 fv.defaultSubmit(); 6705 }, 100); 6706 } else { 6707 notification.html(`Processing Request...`).addClass("alert-warning-subtle"); 6708 if(!submitInFlight) { 6709 counterSubmit++; 6710 $form.data('bdLastSubmitAt', Date.now()); 6711 6712 var fields = $(this).serializeArray(); 6713 var formField = []; 6714 var processData = true; 6715 var contentType = "application/x-www-form-urlencoded; charset=UTF-8"; 6716 6717 6718 6719 if($("#member_login_190 input[type=file]").length > 0){ 6720 6721 var formObject = new FormData(); 6722 processData = false; 6723 contentType = false; 6724 6725 $(fields).each(function(index,field){ 6726 formField.push(field.name+"="+field.value); 6727 }); 6728 6729 values = formField.join("&"); 6730 6731 $(formField).each(function(index,fieldValue){ 6732 var fieldInfo = fieldValue.split('='); 6733 formObject.append(fieldInfo[0],fieldInfo[1]); 6734 }); 6735 6736 $("#member_login_190 input[type=file]").each(function(index,node){ 6737 var file = this.files[0]; 6738 if(typeof file != "undefined"){ 6739 formObject.append("file_addon["+$(node).attr('name')+"]", file, file.name); 6740 } 6741 }); 6742 }else{ 6743 6744 $(fields).each(function(index,field){ 6745 formField.push(field.name+"="+encodeURIComponent(field.value)); 6746 }); 6747 6748 var formObject = formField.join("&"); 6749 } 6750 6751 $.ajax({
6752 url: action, 6753 type: method, 6754 data: formObject, 6755 dataType: return_data_type, 6756 processData: processData, 6757 contentType: contentType, 6758 success: function (data) { 6759 // Re-query live node: success.form.fv fires twice, orphaning the closure ref captured above. 6760 notification = $("#member_login_190-notification"); 6761 if (return_data_type == "html") { 6762 var result = 'success'; 6763 6764 if (!data != "") { 6765 var result_widget = data['result_widget']; 6766 } 6767 6768 } else { 6769 6770 6771 if (!data['result']) { 6772 var result = 'error'; 6773 } else { 6774 var result = data['result']; 6775 } 6776 if (!data['result_widget']) { 6777 var result_widget = ''; 6778 6779 } else { 6780 var result_widget = data['result_widget']; 6781 } 6782 } 6783 if (result == "success") { 6784 6785 if (!data['message']) { 6786 var message = `Your information has submitted successfully!`; 6787 6788 } else { 6789 var message = data['message']; 6790 } 6791 if (!data['redirect_url']) { 6792 var redirect_url = ''; 6793 6794 } else { 6795 var redirect_url = data['redirect_url']; 6796 } 6797 6798 6799 6800 if (form_action_type == "notification") { 6801 if (redirect_url && (action.indexOf('Member%20Login%20Page') >= 0 || action.indexOf('Member Login Page') >= 0)) { 6802 if (redirect_url.substring(0, 1) != "/" && redirect_url.substring(0, 1) != "h") { 6803 redirect_url = "/" + redirect_url; 6804 } 6805 if (notification.parents('.modal').length) { 6806 $('.modal-backdrop').hide(); 6807 $('.modal').modal('hide'); 6808 } 6809 window.location.href = redirect_url; 6810 fv.resetForm(true); 6811 } else { 6812 notification.html(message + '<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>') 6813 .addClass('alert-dismissible') 6814 .addClass("alert-success-subtle") 6815 .removeClass("alert-danger-subtle") 6816 .removeClass("alert-warning-subtle") 6817 6818 6819 6820 if(notification.parents('.modal').length && 'member_login_190' == 'whmcs_billing_address'){ 6821 setTimeout(function(){ 6822 notification.parents('.modal').modal('hide'); 6823 }, 1000); 6824 } 6825 } 6826 6827 } else if (form_action_type == "widget") { 6828 6829 if (result_widget != '') { 6830 6831 setTimeout(function(){ 6832 if(form_action_div != '.newsletter_modal_form_container'){ 6833 $("html, body").animate({ scrollTop: 0 }, 600); 6834 } 6835 $(form_action_div).html(decodeHtml(result_widget)).text(); 6836 6837 }, 1000); 6838 } 6839 6840 } else if (form_action_type == "redirect") { 6841 6842 if (redirect_url == "") { 6843 redirect_url = decodeURIComponent(""); 6844 } 6845 6846 if (redirect_url.substring(0, 1) != "/" && redirect_url.substring(0, 1) != "h") { 6847 redirect_url = "/" + redirect_url; 6848 } 6849 current_location = "/search_results"; 6850 refresh_pages_string = "/login"; 6851 refresh_pages_string = refresh_pages_string.replace(/ /g,''); 6852 refresh_pages_array = refresh_pages_string.split(','); 6853 notification.html(message) 6854 .addClass("alert-success-subtle") 6855 .removeClass("alert-danger-subtle") 6856 .removeClass("alert-warning-subtle") 6857 .delay(2000).slideUp(); 6858 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" )){ 6859 window.location.href = window.location.href+'?logged'; 6860 } else { 6861 window.location.href = redirect_url; 6862 } 6863 6864 fv.resetForm(true); 6865 } 6866 if(form_action_div != '.newsletter_modal_form_container' && 'member_login_190' != 'whmcs_billing_address'){ 6867 $('.modal-backdrop').hide(); 6868 } 6869 } else { 6870 bdCaptchaReset(formElement.attr('id')); 6871 if (!data['message']) { 6872 var message = `You entered invali
6872d data. Please try to save again.`; 6873 6874 } else { 6875 var message = data['message']; 6876 } 6877 $("#member_login_190-notification").html(message) 6878 .addClass("alert-danger-subtle") 6879 .removeClass("alert-success-subtle") 6880 .removeClass("alert-warning-subtle") 6881 .fadeIn(); 6882 fv.disableSubmitButtons(false); 6883 } 6884 counterSubmit = 0; 6885 }, 6886 error: function (e) { 6887 6888 if(typeof grecaptcha !== "undefined" && typeof grecaptcha.reset === "function"){ 6889 bdCaptchaReset(formElement.attr('id')); 6890 $("#member_login_190-notification").html(`Recaptcha Error`); 6891 } else { 6892 $("#member_login_190-notification").html(`A connection error occurred while saving. Please try to save again.`); 6893 } 6894 $("#member_login_190-notification").addClass("alert-warning-subtle") 6895 .removeClass("alert-success-subtle") 6896 .removeClass("alert-warning-subtle") 6897 .fadeIn(); 6898 counterSubmit = 0; 6899 } 6900 });/// End Ajax 6901 } 6902 }//END else 6903 }).bind('keydown', function(event) { 6904 6905 if (event.ctrlKey || event.metaKey) { 6906 6907 switch (String.fromCharCode(event.which).toLowerCase()) { 6908 6909 case 's': 6910 var nativeForm = $(this)[0]; 6911 if (nativeForm && typeof nativeForm.reportValidity === 'function' && !nativeForm.reportValidity()) { 6912 event.preventDefault(); 6913 return false; 6914 } 6915 $(this).submit(); 6916 break; 6917 } 6918 } 6919 }); 6920 6921 /// This will turn any select2 that are required in the form builder to being required elements. 6922 $('#member_login_190 select').each(function (i, obj) { 6923 setTimeout(function(){ 6924 if ($(obj).prop("required") && $(obj).attr("style") == "display: none;") { 6925 $(obj).css("z-index","-999"); 6926 $(obj).css("height","0"); 6927 $(obj).css("width","0"); 6928 $(obj).css("display","block"); 6929 $(obj).css("position","absolute"); 6930 } 6931 }, 3000); 6932 }); 6933 6934 // Clear required-error messages when user fills in a required field 6935 $('#member_login_190').on('keyup change', '[required]', function() { 6936 var val = $(this).val(); 6937 if (val !== '' && val !== null && val.trim() !== '') { 6938 var $group = $(this).closest('.form-group'); 6939 // Remove only this handler's own required message 6940 $(this).siblings('.required-error').remove(); 6941 // Keep has-error if another FormValidation validator is still failing 6942 // (e.g. stringLength, regexp). has-error is shared, so removing it 6943 // wholesale would clobber other validators' red styling. 6944 if ($group.find('small[data-fv-validator][data-fv-result="INVALID"]').length === 0) { 6945 $group.removeClass('has-error'); 6946 } 6947 } 6948 }); 6949 6950 });//END $('# echo $_SERVER[form_element_id]; ').formValidation( 6951 </script>
6951 6952
6952<script> 6953 window.addEventListener('load', (event) => { 6954 setTimeout(() => { 6955 }, 501); 6956 }); 6957 </script>
vendor: 2 bytes, line 6957
6957
6958<script> 6959 function decision(message, url) { 6960 if (confirm(message)) { 6961 setTimeout(function () { 6962 window.location = url; 6963 }, 0); 6964 } 6965 } 6966</script>
vendor: 2 bytes, line 6966
6966
6967<script> 6968 // Function to add alt, width, and height attributes to <img> elements without them 6969 function addAttributesToImages() { 6970 var images = document.querySelectorAll('img:not([alt]), img:not([width]), img:not([height])'); 6971 Array.prototype.forEach.call(images, function(img) { 6972 // Skip if we've already processed this image 6973 if (img.dataset.processed === 'true') { 6974 return; 6975 } 6976 6977 // Mark this image as being processed 6978 img.dataset.processed = 'true'; 6979 6980 // Add alt attribute if missing 6981 if (!img.hasAttribute('alt')) { 6982 var src = img.getAttribute('src') || 'image'; // Default src to 'image' if missing 6983 var altText = src.split('/').pop().split('?')[0].replace(/\.\w+$/, ''); 6984 6985 try { 6986 altText = decodeURIComponent(altText) 6987 .replace(/[_\-+,.:;]+/g, ' ') 6988 .replace(/\s+/g, ' ') 6989 .trim(); 6990 } catch (e) { 6991 altText = 'image'; // Fallback to 'image' if decoding fails 6992 } 6993 6994 // Ensure altText is not empty, otherwise use 'image' 6995 altText = altText || 'image'; 6996 6997 img.setAttribute('alt', altText); 6998 } 6999 7000 // Add width and height attributes if missing 7001 if (!img.hasAttribute('width') || !img.hasAttribute('height')) { 7002 // Handle SVG differently 7003 if (img.src && img.src.endsWith('.svg')) { 7004 // For SVG, use the viewBox to set width and height, if available 7005 fetch(img.src) 7006 .then(response => { 7007 if (!response.ok) { 7008 throw new Error('Failed to fetch SVG: ' + response.status); 7009 } 7010 return response.text(); 7011 }) 7012 .then(svgText => { 7013 var parser = new DOMParser(); 7014 var svgDoc = parser.parseFromString(svgText, "image/svg+xml"); 7015 var svgElement = svgDoc.querySelector('svg'); 7016 7017 if (svgElement) { 7018 var viewBox = svgElement.getAttribute('viewBox'); 7019 if (viewBox) { 7020 var viewBoxValues = viewBox.split(' '); 7021 var width = viewBoxValues[2]; 7022 var height = viewBoxValues[3]; 7023 7024 if (!img.hasAttribute('width')) { 7025 img.setAttribute('width', width); 7026 } 7027 if (!img.hasAttribute('height')) { 7028 img.setAttribute('height', height); 7029 } 7030 } 7031 } 7032 }) 7033 .catch(error => { 7034 // Fallback to default dimensions for SVG 7035 if (!img.hasAttribute('width')) { 7036 img.setAttribute('width', '100'); 7037 } 7038 if (!img.hasAttribute('height')) { 7039 img.setAttribute('height', '100'); 7040 } 7041 }); 7042 } else { 7043 // For non-SVG images, use natural dimensions 7044 var tempImg = new Image(); 7045 tempImg.src = img.src; 7046 7047 tempImg.onload = function() { 7048 if (!img.hasAttribute('width')) { 7049 img.setAttribute('width', tempImg.naturalWidth); 7050 } 7051 if (!img.hasAttribute('height')) { 7052 img.setAttribute('height', tempImg.naturalHeight); 7053 } 7054 }; 7055 7056 tempImg.onerror = function() { 7057 // Fallback to default dimensions 7058 if (!img.hasAttribute('width')) { 7059 img.setAttribute('width', '100'); 7060 } 7061 if (!img.hasAttribute('height')) { 7062 img.setAttribute('height', '100'); 7063 } 7064 }; 7065 } 7066 } 7067 }); 7068 } 7069 7070 document.addEventListener('DOMContentLoaded', function() { 7071 // Run the function initially to catch images already in the DOM 7072 addAttributesToImages(); 7073 7074 // Create a MutationObserver to monitor the DOM for added/changed images 7075 var observer = new MutationObserver(function(mutations) { 7076 mutations.forEach(function(mutation) { 7077 if (mutation.addedNodes.length > 0 || mutation.type === 'attributes') { 7078 // Only process if we have new images or src attribute changes 7079 var hasNewImages = false; 7080 7081 if (mutation.addedNodes.length > 0) { 7082 mutation.addedNodes.forEach(function(node) { 7083 if (node.nodeType === 1) { // Element node 7084 if (node.tagName === 'IMG' || node.querySelectorAll) { 7085 hasNewImages = true; 7086 } 7087 } 7088 }); 7089 } 7090 7091 if (mutation.type === 'attributes' && mutation.attributeName === 'src') { 7092 hasNewImages = true; 7093 } 7094 7095 if (hasNewImages) { 7096 addAttributesToImages(); 7097 } 7098 } 7099 }); 7100 }); 7101 7102 // Start observing the document body for changes 7103 observer.observe(document.body, { 7104 childList: true, // Watch for added or removed nodes 7105 subtree: true, // Watch the entire subtree 7106 attributes: true, // Watch for attribute changes 7107 attributeFilter: ['src'] // Specifically watch for changes in the 'src' attribute 7108 }); 7109 }); 7110</script>
7110<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] { 7111 cursor: wait 7112} 7113select.select2-preload { 7114 line-height: initial; 7115} 7116 7117select#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"] { 7118 -webkit-appearance: none; 7119 -moz-appearance: none; 7120 appearance: none; 7121 background-image: url(/images/select2ArrowDown.png) !important; 7122 background-repeat: no-repeat !important; 7123 background-size: 10px 9px !important; 7124 background-position: 99% 16px; 7125 border-radius: 6px; 7126 overflow: hidden; 7127} 7128.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"] { 7129 background-position: 98.2% 12px; 7130} </style> <!-- DROPDOWN SELECT SCRIPT --> 7131 <!-- Select2 CSS Included in website-styles.pkgd.min.css --> 7132 <!--[if lt IE 9]> 7133
7133<script defer src="https://www.optimizecdn.com/directory/cdn/assets/html5shiv/3.7.2/html5shiv.min.js"></script>
7133 7134
7134<script defer src="https://www.optimizecdn.com/directory/cdn/bootstrap/select2/master/js/respond.min.js"></script>
7134 7135 <![endif]--> 7136
7136<script> 7137 7138 var preloaded_ttid = false; 7139 var preloaded_tid = false; 7140 var preloaded_sid = false; 7141 var path2 = window.location.pathname.replace(/\//g, "_"); 7142 7143 if (performance.navigation.type !== 2) { 7144 if (sessionStorage.getItem('select2-ttid'+path2) !== null) { 7145 sessionStorage.removeItem('select2-ttid'+path2); 7146 } 7147 7148 if (sessionStorage.getItem('select2-tid'+path2) !== null) { 7149 sessionStorage.removeItem('select2-tid'+path2); 7150 } 7151 7152 if (sessionStorage.getItem('select2-sid'+path2) !== null) { 7153 sessionStorage.removeItem('select2-sid'+path2); 7154 } 7155 7156 }else if(performance.navigation.type === 2){ 7157 if (sessionStorage.getItem('select2-ttid'+path2) !== null) { 7158 preloaded_ttid = sessionStorage.getItem('select2-ttid'+path2); 7159 } 7160 7161 if (sessionStorage.getItem('select2-tid'+path2) !== null) { 7162 preloaded_tid = sessionStorage.getItem('select2-tid'+path2); 7163 } 7164 7165 if (sessionStorage.getItem('select2-sid'+path2) !== null) { 7166 preloaded_sid = sessionStorage.getItem('select2-sid'+path2); 7167 } 7168 } 7169 7170 window.addEventListener('load', () => { 7171 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"]'); 7172 if (typeof select2Inputs != "undefined") { 7173 for (let i = 0; i < select2Inputs.length; i++) { 7174 let inputPlaceHolder = select2Inputs[i].getAttribute('placeholder'); 7175 if (!select2Inputs[i].getAttribute('placeholder')) { 7176 inputPlaceHolder = select2Inputs[i].getAttribute('data-placeholder'); 7177 } 7178 let countryCode = select2Inputs[i].getAttribute('data-country-code'); 7179 if (select2Inputs[i].getAttribute('data-country-code') != null && countryCode > 0 && typeof isoCountries != 'undefined') { 7180 for (let c = 0; c < isoCountries.length; c++) { 7181 if(isoCountries[c].id == countryCode){ 7182 // select2Inputs[i].querySelector('option:first-child').text = isoCountries[c].text; 7183 select2Inputs[i].text = isoCountries[c].text; 7184 } 7185 } 7186 7187 } 7188 if(select2Inputs[i].hasAttribute('data-country-code')){ 7189 inputPlaceHolder = null; //reset the input 7190 } 7191 if (inputPlaceHolder != '' && inputPlaceHolder !== null) { 7192 select2Inputs[i].querySelector('option:first-child').text = inputPlaceHolder; 7193 select2Inputs[i].style.color = "#a8a8a8"; 7194 if(!select2Inputs[i].querySelector('option:first-child').hasAttribute('value')){ 7195 select2Inputs[i].querySelector('option:first-child').value=''; 7196 } 7197 } 7198 select2Inputs[i].classList.add("select2-preload"); 7199 select2Inputs[i].addEventListener('mousedown', select2OnFormClick, false); 7200 } 7201 } 7202 }); 7203 7204 function select2OnFormClick(event = false) { 7205 let elemtClicked = ''; 7206 if (event !== false) { 7207 event.preventDefault(); 7208 event.stopImmediatePropagation(); 7209 elemtClicked = event.target; 7210 elemtClicked.disabled = true; 7211 } 7212 7213 let loadScriptAsync = function (uri) { 7214 return new Promise((resolve, reject) => { 7215 let script = document.createElement('script'); 7216 script.type = 'text/javascript'; 7217 script.src = uri; 7218 script.async = true; 7219 script.onload = function () { 7220 if (event !== false) { 7221 elemtClicked.disabled = false; 7222 select2Initialize(); 7223 $(elemtClicked).select2('open'); 7224 $(elemtClicked).on("select2-close", function () { 7225 setTimeout(function() { 7226 $('.select2-container-active').removeClass('select2-container-active'); 7227 $(':focus').blur(); 7228 }, 1); 7229 }); 7230 if (elemtClicked.hasAttribute('data-fv-field')) { 7231 if (window.getComputedStyle(elemtClicked).display === "none") { 7232 // if element is display none, the formvalition can not read 7233 elemtClicked.style.cssText = "display: block;position: absolute;visibility: hidden !important;height: 0;width: 0;opacity: 0 !important;"
7234 } 7235 } 7236 } else { 7237 select2Initialize(); 7238 } 7239 resolve("ok"); 7240 }; 7241 let head = document.getElementsByTagName('head')[0]; 7242 head.appendChild(script); 7243 }); 7244 } 7245 7246 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"]'); 7247 7248 if (typeof select2Inputs != "undefined") { 7249 for (let i = 0; i < select2Inputs.length; i++) { 7250 let inputPlaceHolder = select2Inputs[i].getAttribute('placeholder'); 7251 if (!select2Inputs[i].getAttribute('placeholder')) { 7252 inputPlaceHolder = select2Inputs[i].getAttribute('data-placeholder'); 7253 } 7254 if(select2Inputs[i].hasAttribute('data-country-code')){ 7255 inputPlaceHolder = null; //reset the input 7256 } 7257 if (inputPlaceHolder != '' && inputPlaceHolder !== null) { 7258 select2Inputs[i].querySelector('option:first-child').text = ''; 7259 } 7260 select2Inputs[i].removeEventListener('mousedown', select2OnFormClick, false); 7261 } 7262 } 7263 let scriptLoaded = loadScriptAsync('https://www.optimizecdn.com/directory/cdn/bootstrap/select2/3.5.2/select2.min.js?v=3.5.5'); 7264 return scriptLoaded; 7265 } 7266 7267 function select2Initialize(){ 7268 function getSecondLevel(div,id) { 7269 $("#" + div).select2("data", { 7270 id: "", 7271 text: `Loading...` 7272 }); 7273 $.ajax({
7274 url : '/ajaxsearch/get-services', 7275 type : "GET", 7276 data : { 7277 'specialty_id' : id 7278 }, 7279 dataType: "json", 7280 success : function(data) { 7281 var options = ''; 7282 7283 for (var i = 0; i < data.length; i++) { 7284 options += '<option value="' + data[i].value + '">' + data[i].title + '</option>'; 7285 } 7286 if (div == "tid"){ 7287 $("#ttid").select2("data", { 7288 id: "", 7289 text: "No options available" 7290 }); 7291 7292 7293 $("#ttid").select2("enable", false); 7294 7295 $("#" + div).change(function () { 7296 sessionStorage.setItem("select2-tid"+path2,$(this).val()); 7297 }); 7298 } 7299 if (data.length > 1) { 7300 $("#" + div).select2("enable",true); 7301 $("#" + div).html(options); 7302 $("#" + div).select2("val", ""); 7303 7304 } else { 7305 $("#"+div).select2("data", { 7306 id: "", 7307 text: "No options available" 7308 }); 7309 $("#"+div).select2("val", ""); 7310 } 7311 7312 if(div == 'tid' && preloaded_tid !== false){ 7313 $("#" + div).select2("val", preloaded_tid); 7314 $("#" + div).trigger('change'); 7315 } 7316 } 7317 }); 7318 } 7319 function getSecondLevelAccount(div,id) { 7320 $("#" + div).select2("data", { 7321 id: "", 7322 text: `Loading...` 7323 }); 7324 $.ajax({
7325 url : '/ajaxsearch/get-services', 7326 type : "GET", 7327 data : { 7328 'specialty_id' : id 7329 }, 7330 dataType: "json", 7331 success : function(data) { 7332 var options = ''; 7333 7334 for (var i = 0; i < data.length; i++) { 7335 options += '<option value="' + data[i].value + '">' + data[i].title + '</option>'; 7336 } 7337 if (data.length > 1) { 7338 $("#" + div).select2("close"); 7339 $("#" + div).select2("val", ""); 7340 $("#" + div).select2("enable",true); 7341 $("#" + div).html(options); 7342 7343 7344 } else { 7345 $("#"+div).select2("data", { 7346 id: "", 7347 text: "No options available" 7348 }); 7349 $("#"+div).select2("val", ""); 7350 } 7351 } 7352 }); 7353 } 7354 function getThirdLevel(div,id,id2) { 7355 $("#"+div).select2("data", { 7356 id: "", 7357 text: `Loading...` 7358 }); 7359 7360 $.ajax({
7361 url : '/ajaxsearch/get-locations', 7362 type : "GET", 7363 data : { 7364 'specialty_id' : id, 7365 'treatment_id' : id2, 7366 }, 7367 dataType: "json", 7368 success : function(data) { 7369 var options = ''; 7370 7371 for (var i = 0; i < data.length; i++) { 7372 options += '<option value="' + data[i].value + '">' + data[i].title + '</option>'; 7373 } 7374 if (data.length > 1) { 7375 $("#" + div).select2("enable",true); 7376 $("#" + div).html(options); 7377 $("#" + div).select2("val", ""); 7378 7379 } else { 7380 $("#"+div).select2("data", { 7381 id: "", 7382 text: "No options available" 7383 }); 7384 $("#"+div).select2("val", ""); 7385 } 7386 } 7387 }); 7388 } 7389 var current_country = ''; 7390 function getStateList(div,id) { 7391 if (id != current_country) { 7392 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). */ 7393 7394 $("#"+div).select2("data", { 7395 id: "", 7396 text: `Loading...` 7397 }); 7398 $.ajax({
7399 url : '/ajaxsearch/get-states', 7400 type : "GET", 7401 data : { 7402 'country' : id 7403 }, 7404 dataType: "json", 7405 success : function(data) { 7406 $("#" + div).html(''); // clear options 7407 7408 /* p949P6dS: data[0] is always the server-side "(Select from List)" placeholder, 7409 so <=2 entries means the country has at most 1 real region (Singapore, 7410 Martinique, zero-region). Client wants those to read "No State/Province 7411 Available" instead of "(Select from List)"; the single real region stays 7412 selectable. Reset/enable now runs on EVERY response (was gated behind 7413 data.length > 1, which left zero-region countries stuck on "Loading..." 7414 and disabled); auto-open stays multi-region only. */ 7415 var hasStates = (data.length > 2); 7416 for (var i = 0; i < data.length; i++) { 7417 var optionTitle = (!hasStates && data[i].value === "") ? `No State/Province Available for This Country` : data[i].title; 7418 var newOption = new Option(optionTitle, data[i].value, false, false); 7419 $("#" + div).append(newOption).trigger('change'); 7420 7421 } 7422 if (data.length === 0) { 7423 $("#" + div).append(new Option(`No State/Province Available for This Country`, "", false, false)).trigger('change'); 7424 } 7425 7426 $("#" + div).select2("enable",true); 7427 $("#" + div).prop("disabled", false); 7428 $("#" + div).select2("val", ""); 7429 if (hasStates) { 7430 $("#" + div).select2("open"); 7431 } 7432 } 7433 }); 7434 } else { 7435 /* p949P6dS AC#3: the select2-open handler runs select2("enable",false) BEFORE 7436 re-calling getStateList, and for a country with <=2 options (Singapore, 7437 Martinique) that re-call short-circuits here on the id == current_country 7438 guard. This branch previously only reset the value, so the field was left 7439 permanently disabled: select2-container-disabled, clicks never open it, the 7440 single real region is unselectable. Mirror the success path's re-enable so a 7441 short-circuited re-open leaves the field usable. Multi-region countries never 7442 hit this (their open handler is gated behind count <= 2). */ 7443 $("#" + div).select2("enable", true); 7444 $("#" + div).prop("disabled", false); 7445 $("#" + div).select2("val", ""); 7446 } 7447 } 7448 /* p949P6dS: keep the checkout/billing required-State validation in sync with the 7449 server-side waiver, on BOTH layers. When the selected country has selectable 7450 sub-regions (Canada, US, ...) FormValidation validates state_code (inline "Required 7451 Field" on submit); when it has none (Singapore, Martinique, zero-region) the state_code 7452 validator is disabled + un-flagged so those countries are not blocked. Delegated so it 7453 binds even though the billing form is revealed after step 1; guarded to no-op on any 7454 page/form without FormValidation + a state_code field. The server still enforces the 7455 same rule (bd-core-files form_controller), so this is UX only, not the security gate. */ 7456 function bdSyncStateRequired(hasStates) { 7457 var $stField = $("#state-chained"); 7458 var $stForm = $stField.closest("form"); 7459 var stFv = ($stForm.length) ? ($stForm.data("formValidation") || $stForm.data("bootstrapValidator")) : null; 7460 if (!stFv || !stFv.options || !stFv.options.fields || !stFv.options.fields.state_code) { 7461 return; 7462 } 7463 stFv.options.fields.state_code.excluded = hasStates ? false : true; 7464 try { stFv.enableFieldValidators("state_code", hasStates); } catch (e) {} 7465 7466 /* p949P6dS: keep the visible "* " required marker on the State label in sync with the 7467 waiver. functions_up.php renders <span class="required">* </span> on the state_code 7468 label when AVS forces the field required; for a no-state country (Singapore, 7469 Martinique) the field is genuinely waived so the asterisk must go away, and come 7470 back when the country has selectable states again. Scoped to the state label. */ 7471 var $stReq = $("label[for='state-chained'] .required", $stForm); 7472 $stReq.css("display", hasStates ? "" : "none"); 7473 7474 /* p949P6dS: the ACTUAL blocker. The billing form carries a SECOND required layer, 7475 independent of FormValidation: the form's success.form.fv handler loops 7476 $form.find('[required]') and, for any empty one, appends <small class="required-error"> 7477 Required Field</small> + returns false, hard-blocking the submit. AVS renders the 7478 state_code <select> with the HTML5 `required` attribute, so a no-state country 7479 (empty state) stayed blocked with "Required Field" even after the FormValidation 7480 waiver above. Drop the `required` attribute (+ clear its custom error) when the 7481 country has no selectable states, and restore it when it does. Remember the server- 7482 rendered original so we never ADD required to a field AVS left optional. */ 7483 if ($stField.attr("data-bd-orig-required") === undefined) { 7484 $stField.attr("data-bd-orig-required", 7485 ($stField.prop("required") || $stField.attr("required") !== undefined) ? "1" : "0"); 7486 } 7487 var stOrigRequired = ($stField.attr("data-bd-orig-required") === "1"); 7488 7489 var $stRow = $stField.closest(".form-group,.fv-row,.row"); 7490 if (!hasStates) { 7491 try { if (typeof stFv.resetField === "function") { stFv.resetField("state_code", true); } } catch (e) {} 7492 $stRow.removeClass("has-error has-success"); 7493 $stRow.find(".help-block[data-fv-validator]").css("display", "none"); 7494 /* drop the HTML5 required gate + its "Required Field" message for no-state country */ 7495 $stField.removeAttr("required").prop("required", false); 7496 $stField.siblings(".required-error").remove(); 7497 $stRow.find(".required-error").remove(); 7498
7499 /* p949P6dS: on the Member-Dashboard billing modal the Save button is disabled by 7500 FormValidation until the whole form is valid; for a no-state country the user 7501 has no state to pick, so nothing re-enables it and Save stays stuck disabled -> 7502 "cannot save". Re-enable it directly. IMPORTANT: do NOT call stFv.validate() 7503 here â in this FormValidation build validate() on an already-valid form fires 7504 success.form.fv (a real submit), which saved the address on the country change 7505 AND consumed the one-time CSRF token, so the actual Save click then failed with 7506 "You entered invalid data. Please try to save again." disableSubmitButtons only 7507 toggles the button; no submit. Scoped to the billing modal so checkout is 7508 untouched. */ 7509 if ($stForm.closest("#billing_address_modal").length) { 7510 try { if (typeof stFv.disableSubmitButtons === "function") { stFv.disableSubmitButtons(false); } } catch (e) {} 7511 $stForm.find("input.submitter, button.submitter, [type=submit]") 7512 .removeClass("disabled").prop("disabled", false).removeAttr("disabled"); 7513 } 7514 } else if (stOrigRequired) { 7515 /* country has states again â restore the required gate AVS originally set */ 7516 $stField.attr("required", "required").prop("required", true); 7517 } 7518 } 7519 $(document).off("change.bdStateReq").on("change.bdStateReq", "#country-chained", function() { 7520 var bdCc = $(this).val(); 7521 var $bdForm = $("#state-chained").closest("form"); 7522 var bdFv = ($bdForm.length) ? ($bdForm.data("formValidation") || $bdForm.data("bootstrapValidator")) : null; 7523 if (!bdFv || !bdFv.options || !bdFv.options.fields || !bdFv.options.fields.state_code || bdCc === "") { 7524 return; 7525 } 7526 $.ajax({
7527 url: "/ajaxsearch/get-states", 7528 type: "GET", 7529 data: { "country": bdCc }, 7530 dataType: "text", 7531 success: function(bdResp) { 7532 /* count entries without regex (DB+eval mangles backslashes): split on the 7533 literal "value" key; total entries = splits - 1; >2 means placeholder + 2+ 7534 real regions == has selectable states. Text parse also survives the 7535 malformed-JSON zero-region response. */ 7536 var bdTotal = bdResp.split(`"value"`).length - 1; 7537 bdSyncStateRequired(bdTotal > 2); 7538 } 7539 }); 7540 }); 7541 /* p949P6dS: the Member Dashboard billing modal (widget 1861) pre-selects the member's 7542 SAVED country_code at document.ready without firing a change event, so the handler 7543 above never ran for it and an AVS-forced required State (functions_up.php forces 7544 field_required=1 on state_code when whmcs_avs_on / stripe_accept_intl_payments is on) 7545 stayed active for a saved no-state country â blocking the save with "Required Field" 7546 on a country that has no state to pick. Sync once for an already-selected country. 7547 The namespaced trigger fires only this handler (not select2/getStateList), and the 7548 handler no-ops when the country is empty or state_code is not a validated field, so 7549 checkout and every other chained-select page are unaffected. */ 7550 $("#country-chained").each(function() { 7551 if ($(this).val() !== "") { 7552 $(this).trigger("change.bdStateReq"); 7553 } 7554 }); 7555 function getInfinityChained(div,id) { 7556 $("#"+div).select2("data", { 7557 id: "", 7558 text: `Loading...` 7559 }); 7560 $.ajax({
7561 url : '/ajaxsearch/get-subcategory', 7562 type : "GET", 7563 data : { 7564 'parent' : id 7565 }, 7566 dataType: "json", 7567 success : function(data) { 7568 var options = ''; 7569 7570 for (var i = 0; i < data.length; i++) { 7571 options += '<option value="' + data[i].value + '">' + data[i].title + '</option>'; 7572 } 7573 if (data.length > 1) { 7574 $("#" + div).select2("enable",true); 7575 $("#" + div).html(options); 7576 if(div == 'tid' && '' != ''){ 7577 $("#" + div).select2("val", ""); 7578 $("#" + div).trigger('change'); 7579 } else if(div == 'tid' && preloaded_tid !== false){ 7580 $("#" + div).select2("val", preloaded_tid); 7581 $("#" + div).trigger('change'); 7582 }else { 7583 $("#" + div).select2("val", ""); 7584 } 7585 7586 7587 7588 7589 } else { 7590 $("#" + div).select2("data", { 7591 id: "", 7592 text: "No options available" 7593 }); 7594 } 7595 } 7596 }); 7597 } 7598 function categoryChained(div,id) { 7599 $("#" + div).select2("data", { 7600 id: "", 7601 text: `Loading...` 7602 }); 7603 if(div == "tid") { 7604 url_link = '/ajaxsearch/get-services' 7605 data_passed = {'specialty_id' : id} 7606 } else { 7607 url_link = '/ajaxsearch/category-list'; 7608 data_passed = {'parent' : id} ; 7609 } 7610 7611 var selectName = $("select[next="+div+"]").prop("name"); 7612 7613 7614 if( (selectName == "ttid" || selectName == "sid" || selectName == "tid") ){ 7615 7616 sessionStorage.setItem("select2-"+selectName+path2,id); 7617 } 7618 7619 $.ajax({
7620 url : url_link, 7621 type : "GET", 7622 data : data_passed, 7623 dataType: "json", 7624 success : function(data) { 7625 var options = ''; 7626 7627 for (var i = 0; i < data.length; i++) { 7628 options += '<option value="' + data[i].value + '">' + data[i].title + '</option>'; 7629 } 7630 7631 if (data.length > 1) { 7632 $("#" + div).select2("enable",true); 7633 $("#" + div).html(options); 7634 7635 if(div == "ttid" && preloaded_ttid !== false){ 7636 $("#" + div).select2("val", preloaded_ttid); 7637 $("#" + div).trigger('change'); 7638 }else if(div == "tid" && preloaded_tid !== false){ 7639 $("#" + div).select2("val", preloaded_tid); 7640 $("#" + div).trigger('change'); 7641 }else{ 7642 $("#" + div).select2("val", ""); 7643 } 7644 7645 7646 7647 } else { 7648 $("#" + div).select2("data", { 7649 id: "", 7650 text: "No options available" 7651 }); 7652 } 7653 } 7654 }); 7655 } 7656 function formatCountry(country) { 7657 if (!country.id && country.text.includes("+")) { 7658 let dataCountry = country.text; 7659 dataCountry = dataCountry.split('+') 7660 country.code = dataCountry[0].trim(); 7661 country.id = dataCountry[1].trim(); 7662 return country; 7663 } else if (!country.code) { 7664 return country.text; 7665 } 7666 var $country = $( 7667 '<span class="flag-icon flag-icon-' + country.code.toLowerCase() + ' flag-icon-squared"></span>' + 7668 '<span class="flag-text" style="margin-left:10px;">' + country.text + '</span>' 7669 ); 7670 return $country; 7671 } 7672 7673 let phoneCountryCode = document.querySelector("[name^='bd_phone_country_code']"); 7674 if (typeof phoneCountryCode != 'undefined' && phoneCountryCode != null && typeof isoCountries != 'undefined') { 7675 $("[name^='bd_phone_country_code']").select2({ 7676 placeholder:`Country`, 7677 data:isoCountries, 7678 searchInputPlaceholder: `Enter Country Code`, 7679 formatResult : formatCountry, 7680 dropdownAutoWidth: true, 7681 width: "resolve", 7682 }).on("select2-opening", function (e) { 7683 if (typeof e.currentTarget.attributes['data-default-country-code'] !== "undefined") { 7684 $(this).val(e.currentTarget.attributes['data-default-country-code'].value) 7685 .removeAttr("data-default-country-code") 7686 .trigger('change') 7687 .trigger('open'); 7688 } 7689 }).change(function (e) { 7690 let select2Span = $(this).attr('id'); 7691 if (e.val) { 7692 $('#'+$(this).attr('id')+'--flag').remove(); 7693 $('#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>') 7694 }else{ 7695 $('#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>') 7696 } 7697 $(this).removeAttr("data-default-country-flag"); 7698 7699 }); 7700 } 7701 $("#bd-chained").select2({ 7702 title: "Select Category", 7703 placeholder: "Select Category", 7704 allowClear: true, 7705 formatNoMatches: function () { 7706 return "No matches found"; 7707 } 7708 }).change(function () { 7709 var id = $(this).val(); 7710 $("#tid").select2("enable",false); 7711 getInfinityChained("tid",id); 7712 }); 7713 $("#category-chained").select2({ 7714 title: "Select Category", 7715 placeholder: "Select Category", 7716 allowClear: true 7717 }).change(function () { 7718 var id = $(this).val(); 7719 $("#subcategory-chained").select2("enable",false); 7720 categoryChained("subcategory-chained",id); 7721 }); 7722 7723 $(".select-category-chained").select2({ 7724 title: "Select Category", 7725 placeholder: "Select Category", 7726 allowClear: true 7727 }) 7728 $(".infinite-chained").select2({ 7729 title: "Select option from list", 7730 placeholder: "Click to select an option", 7731 allowClear: true, 7732 formatNoMatches: function () { 7733 return "No matches found"; 7734 } 7735 }).change(function () { 7736 var id = $(this).val(); 7737 var attr = $(this).attr('next'); 7738 var selectName = $(this).prop('name'); 7739 if ( selectName=='ttid' || attr =='ttid' ) { 7740 $("#" + attr).select2("enable",false); 7741 categoryChained(attr,id); 7742 sessionStorage.setItem("select2-"+selectName+path2,id); 7743 } 7744 }).on("select2-close", function () { 7745 setTimeout(function() { 7746 $('.select2-container-active').removeClass('select2-container-active'); 7747 $(':focus').blur(); 7748 }, 1); 7749 }); 7750 $("#subcategory-chained").select2(); 7751 $(".combobox").select2();
7752 $(".search-chained").select2(); 7753 7754 $("select#country-chained").select2({ 7755 title: "", 7756 placeholder: "", 7757 val: "", 7758 allowClear: true, 7759 formatNoMatches: function () { 7760 return "No matches found"; 7761 } 7762 }).change(function () { 7763 var id = $(this).val(); 7764 $("#state-chained").select2("enable",false); 7765 getStateList("state-chained",id); 7766 var state = ""; 7767 7768 if (id == "CA") { 7769 state = "Province"; 7770 7771 } else if (id == "UK") { 7772 state = "Region"; 7773 7774 } else if (id == "US" || id == "AU") { 7775 state = "State"; 7776 7777 } else { 7778 state = "Region"; 7779 } 7780 $("#state-chained").prev(".control-label").text(state); 7781 }); 7782 $("#state-chained").select2(); 7783 7784 $("#state-chained").on("select2-open", function(event) { 7785 event.preventDefault(); 7786 var id = $("#country-chained").val(); 7787 var count = $('#state-chained option').length; 7788 7789 if (id != "" && count <= 2) { 7790 $("#state-chained").select2("enable",false); 7791 getStateList("state-chained",id); 7792 var state = ""; 7793 7794 if (id == "CA") { 7795 state = "Province"; 7796 7797 } else if (id == "UK") { 7798 state = "Region"; 7799 7800 } else if (id == "US" || id == "AU") { 7801 state = "State"; 7802 7803 } else { 7804 state = "Region"; 7805 } 7806 $("#state-chained").prev(".control-label").text(state); 7807 } 7808 }); 7809 7810 $("#country-chained-2").select2({ 7811 title: "Select Country", 7812 placeholder: "(select country)", 7813 val: "", 7814 allowClear: true, 7815 formatNoMatches: function () { 7816 return "No matches found"; 7817 } 7818 }).change(function () { 7819 var id = $(this).val(); 7820 $("#state-chained-2").select2("enable",false); 7821 getStateList("state-chained-2",id); 7822 var state = ""; 7823 7824 if (id == "CA") { 7825 state = "Province"; 7826 7827 } else if (id == "UK") { 7828 state = "Region"; 7829 7830 } else if (id == "US" || id == "AU") { 7831 state = "State"; 7832 7833 } else { 7834 state = "Region"; 7835 } 7836 $("#state-chained-2").prev(".control-label").text(state); 7837 }); 7838 7839 $("#state-chained-2").select2(); 7840 $("#profession_id").select2({ 7841 placeholder: "Select From List", 7842 allowClear: true, 7843 formatNoMatches: function () { 7844 return "No matches found"; 7845 } 7846 }).change(function () { 7847 var id = $(this).val(); 7848 getSecondLevelAccount("category_id",id); 7849 }); 7850 $("#sid").select2({ 7851 title: "Select Category", 7852 placeholder: "Select Category", 7853 allowClear: true, 7854 formatNoMatches: function () { 7855 return "No matches found"; 7856 } 7857 }).change(function () { 7858 var id = $(this).val(); 7859 $("#tid").select2("enable",false); 7860 getSecondLevel("tid",id); 7861 $("#tid").select2("open"); 7862 sessionStorage.setItem("select2-sid"+path2,id); 7863 }); 7864 $("#location_value_dropdown").select2({ 7865 title: "More Options", 7866 placeholder: "More Options", 7867 allowClear: true, 7868 formatNoMatches: function () { 7869 return "No matches found"; 7870 } 7871 }); 7872 $("#tid").select2({ 7873 title: "Select Sub-category", 7874 placeholder: "Select Sub-category", 7875 allowClear: true, 7876 formatNoMatches: function () { 7877 return "No matches found"; 7878 } 7879 }); 7880 $("#location_value_dropdown").select2({ 7881 title: "More Options", 7882 placeholder: "More Options", 7883 allowClear: true 7884 }); 7885 } 7886 7887 if(preloaded_ttid !== false || preloaded_tid !== false || preloaded_sid !== false){ 7888 $(document).ready(function(){ 7889 // Skip if homepage widget already handles preload 7890 if(window._bdCategoryPreloaded) return; 7891 7892 if(preloaded_sid !== false && $("#sid").length > 0){ 7893 select2OnFormClick(); 7894 setTimeout(() => { 7895 $("#sid").select2('val', preloaded_sid); 7896 $('#sid').trigger('change'); 7897 }, 500); 7898 }else if(preloaded_tid !== false && $("#sid").length <= 0){ 7899 select2OnFormClick(); 7900 setTimeout(() => { 7901 $("#tid").select2('val', preloaded_tid);
7902 $('#tid').trigger('change'); 7903 }, 500); 7904 } 7905 }); 7906 } 7907 </script>
vendor: 2 bytes, line 7907
7907
7908<script> 7909 // Function to add aria-label to <select> elements without it, for better pagespeed accessibility score 7910 $(document).ready(function() { 7911 var ariaLabelCounter = {}; // Object to keep track of aria-label counts for uniqueness 7912 7913 // Iterate over each select element that does not have an aria-label 7914 $('select:not([aria-label])').each(function() { 7915 // Use the ID or placeholder as the base for the aria-label, stripping HTML tags 7916 var baseLabel = this.id || $(this).attr('placeholder') || 'select'; 7917 baseLabel = baseLabel.replace(/<[^>]*>/g, '').trim(); // Remove HTML tags and trim 7918 7919 // Ensure uniqueness of each aria-label 7920 ariaLabelCounter[baseLabel] = (ariaLabelCounter[baseLabel] || 0) + 1; 7921 var ariaLabel = baseLabel + '-' + ariaLabelCounter[baseLabel]; 7922 7923 // Truncate aria-label to 100 characters 7924 ariaLabel = ariaLabel.length > 100 ? ariaLabel.substring(0, 100) : ariaLabel; 7925 7926 // Set the aria-label attribute to the unique label 7927 $(this).attr('aria-label', ariaLabel); 7928 }); 7929 }); 7930</script>
vendor: 2 bytes, line 7930
7930
7931<script type="application/ld+json"> 7932{ 7933 "@context": "https://schema.org", 7934 "@graph": [ 7935 { 7936 "@type": "WebSite", 7937 "@id": "https://www.westminsterchamber.org/#website", 7938 "name": "Westminster Chamber of Commerce", 7939 "url": "https://www.westminsterchamber.org/", 7940 "inLanguage": "en-US", 7941 "dateModified": "2026-09-01T00:00:00-07:00", 7942 "potentialAction": { 7943 "@type": "SearchAction", 7944 "target": "https://www.westminsterchamber.org/sitesearch?q={search_term_string}", 7945 "query-input": "required name=search_term_string", 7946 "name": "Search Directory: Westminster Chamber of Commerce" 7947 }, 7948 "publisher": { 7949 "@id": "https://www.westminsterchamber.org/#organization" 7950 } 7951 }, 7952 { 7953 "@type": "Organization", 7954 "@id": "https://www.westminsterchamber.org/#organization", 7955 "name": "Westminster Chamber of Commerce", 7956 "description": "Search the most complete westminster california businesses directory. Find westminster california businesses.", 7957 "url": "https://www.westminsterchamber.org/", 7958 "mainEntityOfPage": { 7959 "@type": "WebPage", 7960 "@id": "https://www.westminsterchamber.org/#webpage" 7961 }, 7962 "contactPoint": [ 7963 { 7964 "@type": "ContactPoint", 7965 "email": "[email protected]", 7966 "contactType": "customer support", 7967 "availableLanguage": [ 7968 "en" 7969 ], 7970 "areaServed": "US" 7971 } 7972 ], 7973 "areaServed": { 7974 "@type": "Country", 7975 "name": "US" 7976 }, 7977 "telephone": "714-898-9648", 7978 "sameAs": [ 7979 "https://www.facebook.com/WestminsterChamberOfCommerce/", 7980 "https://www.instagram.com/wmchamber/" 7981 ], 7982 "logo": { 7983 "@type": "ImageObject", 7984 "@id": "https://www.westminsterchamber.org/#logo", 7985 "url": "/images/Logo/change-logo.png" 7986 }, 7987 "image": { 7988 "@type": "ImageObject", 7989 "@id": "https://www.westminsterchamber.org/#image", 7990 "url": "/images/Logo/change-logo.png" 7991 }, 7992 "keywords": [ 7993 "Westminster California Business", 7994 "Westminster California Businesses", 7995 "Westminster Chamber of Commerce", 7996 "Westminster Chamber of Commerce", 7997 "Westminster California Businesses", 7998 "Westminster California Business" 7999 ] 8000 } 8001 ] 8002}</script>
8002 8003
8004<script> 8005// Bootstrap Icons fallback loader - ensures Bootstrap Icons work even if HEAD widget is customized, do not delete 8006(function() { 8007 if (!document.querySelector('link[href*="bootstrap-icons"]')) { 8008 var link = document.createElement('link'); 8009 link.rel = 'stylesheet'; 8010 link.href = 'https://www.optimizecdn.com/directory/cdn/assets/bootstrap/fonts/bootstrap-icons.min.css?v=1.13.1'; 8011 document.head.appendChild(link); 8012 } 8013})(); 8014</script>
8014 8015<style type='text/css'> .input-group.normal-autosuggest input,.input-group.sm-autosuggest input, .input-group.md-autosuggest input { 8016 border-radius: 0 8px 8px 0 !important; 8017 } 8018.normal-autosuggest .twitter-typeahead, .sm-autosuggest .twitter-typeahead, .md-autosuggest .twitter-typeahead, .large-autosuggest .twitter-typeahead { 8019 display: inline-block; 8020 height: 25px; 8021 position: relative; 8022 width: 100%; 8023} 8024.input-group.normal-autosuggest .twitter-typeahead, .input-group.sm-autosuggest .twitter-typeahead, .input-group.large-autosuggest .twitter-typeahead:not(.search_box .twitter-typeahead) { 8025 width: inherit; 8026} 8027.normal-autosuggest .twitter-typeahead .clear_content.medium{ 8028 bottom: 0px; 8029} 8030.sm-autosuggest .twitter-typeahead .clear_content.small{ 8031 bottom: -4px; 8032} 8033.md-autosuggest.input-group .twitter-typeahead .clear_content.medium { 8034 bottom: -2px; 8035} 8036.md-autosuggest .twitter-typeahead { 8037 height: 32px; 8038} 8039.md-autosuggest .input-group-addon + .input_wrapper .twitter-typeahead { 8040 height: 38px; 8041 vertical-align: top; 8042} 8043.md-autosuggest-input + .clear_content.medium { 8044 bottom: 0px; 8045} 8046.large-autosuggest .twitter-typeahead { 8047 height: 40px; 8048} 8049.normal-autosuggest .twitter-typeahead{ 8050 height: 38px; 8051} 8052.normal-autosuggest .twitter-typeahead .tt-hint, .sm-autosuggest .twitter-typeahead .tt-hint { 8053 background: #fff !important; 8054 border: 1px solid #ccc!important; 8055 border-radius: 0 8px 8px 0; 8056 box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075) inset!important; 8057 color: transparent; 8058 left: 0; 8059 padding: 4px 11px; 8060 position: absolute; 8061 top: 0; 8062 width: 100%; 8063 font-size:12px; 8064} 8065.normal-autosuggest.input-group-addon .fa, .sm-autosuggest .input-group-addon .fa, .input-group-sm .input-group-addon .fa {font-size:12px} 8066.md-autosuggest .twitter-typeahead .tt-hint { 8067 height: 100%; 8068 background: #ffffff none repeat scroll 0 0 !important; 8069 border: 1px solid #cccccc !important; 8070 border-radius: 0 8px 8px 0; 8071 box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075) inset !important; 8072 color: rgba(0, 0, 0, 0); 8073 left: 0; 8074 padding: 6px 11px; 8075 position: absolute; 8076 top: 0; 8077 width: 100%; 8078} 8079.large-autosuggest {background: #fff !important;border-radius:10px;} 8080.large-autosuggest input {width: 100%!important;box-shadow:none; border-radius: 10px;} 8081 .input-group.large-autosuggest input,.input-group.large-autosuggest .twitter-typeahead .tt-hint { 8082 border-radius: 0 10px 10px 0!important; 8083 } 8084 .large-autosuggest .twitter-typeahead .tt-hint { 8085 background: #fff !important; 8086 border: 1px solid #ccc!important; 8087 border-radius: 10px; 8088 box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075) inset!important; 8089 color: transparent; 8090 left: 0; 8091 position: absolute; 8092 top: 0; 8093 width: 100%; 8094 font-size: 18px; 8095 height: 46px; 8096 line-height: 1.33333; 8097 padding: 10px 15px; 8098} 8099.tt-dataset .empty-message { 8100 display: none !important; 8101} 8102.twitter-typeahead .tt-query {background-color:#fff!important} 8103.input-group.large-autosuggest span:first-child .tt-hint {border-radius: 0 !important;} 8104span.tt-dropdown-menu { 8105 border: 1px solid #FCFCFC; 8106 border-radius: 5px; 8107 box-shadow: 0 5px 10px rgba(0,0,0,.2); 8108 width: 100% !important; 8109} 8110.tt-is-under-cursor a.suggest-link { 8111 background: #55ACEE; 8112} 8113 8114.tt-is-under-cursor .media-heading, 8115.tt-is-under-cursor .suggest-origin, 8116.tt-is-under-cursor .location{ 8117 color:#fff!important; 8118} 8119.tt-suggestion .media .media-body .suggest-origin { 8120 color: rgba(45, 91, 137,0.9); 8121 padding: 1px 0; 8122 border-radius: 6px; 8123 font-weight: bold; 8124 line-height: 12px; 8125} 8126.tt-suggestion { 8127 background: #fff; 8128 border-bottom: 1px solid #eee; 8129 -webkit-transition: all 0.3s ease-in-out; 8130 -moz-transition: all 0.3s ease-in-out; 8131 -o-transition: all 0.3s ease-in-out; 8132 transition: all 0.3s ease-in-out; 8133} 8134body .tt-suggestions .media.br-bottom img { 8135 max-width: 45px; 8136 height: auto; 8137} 8138body .tt-suggestions .media-body span { 8139 font-size: 10px; 8140} 8141body .tt-suggestions .media-body h4 { 8142 font-size: 12px; 8143 margin: 2px 0px; 8144 text-transform: capitalize; 8145} 8146a.suggest-link { 8147 padding: 5px; 8148 display: block; 8149} 8150a.suggest-link img { 8151 border-radius: 100px; 8152 display: block; 8153 margin: 0 auto; 8154 height: 100%!important; 8155 width: 100%; 8156 object-fit: cover; 8157} 8158.left-suggest-col {
8159 display: inline-block; 8160 vertical-align: middle; 8161 width: 44px; 8162 height: 44px; 8163} 8164.right-suggest-col { 8165 display: inline-block; 8166 padding-left: 1%; 8167 text-align: left; 8168 vertical-align: middle; 8169 width: calc(100% - 1% - 50px); 8170} 8171p.media-heading { 8172 color: #333; 8173 font-size: 12px; 8174 font-weight: 600; 8175 margin-bottom: 0; 8176} 8177p.suggest-origin { 8178 font-size: 10px; 8179 color: #333; 8180 margin:0; 8181} 8182p.location { 8183 color: #333; 8184 font-size: 10px; 8185 margin: 2px 0; 8186} 8187body .tt-is-under-cursor a.suggest-link { 8188 background: #F7F7F7; 8189} 8190body .tt-is-under-cursor .media-heading, body .tt-is-under-cursor .suggest-origin, body .tt-is-under-cursor .location { 8191 color: #333!important; 8192} 8193a.suggest-link[data-heading="heading"] { 8194 pointer-events: none; 8195 cursor: default; 8196 text-decoration: none; 8197} 8198body .tt-is-under-cursor a.suggest-link[data-heading="heading"] { 8199 background: rgb(71, 134, 141); 8200} 8201/* --- all the novalue css --- */ 8202a.suggest-link .suggest-origin[data-state="novalue"] { 8203 display: none; 8204} 8205a.suggest-link .location[data-state="novalue"] { 8206 display: none; 8207} 8208a.suggest-link img[data-state="novalue"] { 8209 display: none; 8210} 8211a.suggest-link .suggest-origin[data-state="heading"] { 8212 display: none; 8213} 8214a.suggest-link .media-heading[data-heading="heading"] { 8215 color:rgb(255, 255, 255)!important; 8216 font-weight: bold; 8217 padding: 4px; 8218 font-size: 13px; 8219} 8220.left-suggest-col[data-photo="novalue"], .left-suggest-col[data-photo="undefined"] { 8221 display: none; 8222} 8223.right-suggest-col[data-photo="novalue"], .right-suggest-col[data-photo="undefined"] { 8224 width: 100%; 8225} 8226a.suggest-link[href="novalue"] { 8227 cursor: default !important; 8228 pointer-events: none; 8229} 8230a.suggest-link[data-heading="heading"] { 8231 background-color: rgb(71, 134, 141); 8232} 8233div.content-shell { 8234 overflow: inherit; 8235} 8236span.tt-dropdown-menu div { 8237 float: none; 8238} 8239.tt-menu { 8240 border-radius: 0 0 6px 6px; 8241 box-shadow: 0 0 3px rgba(0, 0, 0, 0.2); 8242 overflow: hidden; 8243 width: 100%; 8244 z-index: 150 !important; 8245} 8246.tt-menu .tt-dataset { 8247 overflow-y: auto; 8248 max-height: 200px; 8249} </style>
8249<script type="text/javascript"> 8250 8251 if (typeof decodeHtml != "function") { 8252 function decodeHtml(html) { 8253 var txt = document.createElement("textarea"); 8254 txt.innerHTML = html; 8255 return txt.value; 8256 } 8257 } 8258 function initializeTypeheadMember_search() { 8259 var member_searchEngine = new Bloodhound({ 8260 initialize: false, 8261 datumTokenizer: function (d) { 8262 return Bloodhound.tokenizers.whitespace(value); 8263 }, 8264 queryTokenizer: Bloodhound.tokenizers.whitespace, 8265 remote: { 8266 url: `/api/suggest/json/get/1,users_data,Listings,1,1,1,1,1,3|88,list_professions,Main Categories,1,0,1,1,1,3|89,list_services,Sub Categories,1,0,1,1,1,3?tID=35&q=%QUERY`, 8267 wildcard: '%QUERY', 8268 filter: function (response) { 8269 8270 if (response != null) { 8271 //var response = response.slice(1); 8272 $.each( 8273 response, function (key, value) { 8274 response[key]['value'] = decodeHtml(value['value']); 8275 response[key]['comes_f'] = decodeHtml(value['comes_f']); 8276 response[key]['location'] = decodeHtml(value['location']); 8277 8278 if (response[key]['value'].indexOf('-/-') >= 0) { 8279 var splitResult = response[key]['value'].split('-/-'); 8280 response[key]['value'] = splitResult[0]; 8281 } 8282 } 8283 ); 8284 8285 } else { 8286 response = {error: "null"}; 8287 } 8288 8289 return response; 8290 } 8291 } 8292 }); 8293 var member_searchDataSrc = member_searchEngine.initialize(); 8294 8295 member_searchDataSrc 8296 .done(function () { /*console.log('Autosuggestions engine initialized.'); */ 8297 }) 8298 .fail(function () { /*console.log('err, something went wrong while initializing autosuggestions engine:(');*/ 8299 }) 8300 8301 $('.member_search').typeahead({ 8302 minLength: 2, 8303 highlight: true, 8304 hint: false }, 8305 { 8306 display: 'value', 8307 source: member_searchEngine.ttAdapter(), 8308 limit: 10, 8309 templates: { 8310 empty: [ 8311 '<div class="empty-message">', 8312 'Result not found', 8313 '</div>' 8314 ].join(" "), 8315 notFound: [ 8316 '<div class="notFound-message">', 8317 'Result not found', 8318 '</div>' 8319 ].join(" "), 8320 suggestion: function (data) { 8321 8322 if (data == "null") { 8323 strTemplate = '<div class="empty-message">Result not found</div>'; 8324 8325 } else { 8326 strTemplate = '<a class="suggest-link" href="' + data.link + '" data-state="' + data.link + '" data-heading="' + data.comes_f + '"> <div class="left-suggest-col" data-photo="' + data.photo + '"> <img src="' + data.photo + '" data-state="' + data.photo + '"> </div> <div class="right-suggest-col" data-photo="' + data.photo + '"> <p class="media-heading" data-state="' + data.value + '" data-heading="' + data.comes_f + '">' + data.value + '</p> <p class="suggest-origin" data-state="' + data.comes_f + '">' + data.comes_f + '</p> <p class="location" data-state="' + data.location + '">' + data.location + '</p> </div> </a> '; 8327 8328 if ((data.link == undefined) || (data.link == "") || (data.link == "novalue")) { 8329 strTemplate = strTemplate.replace(/href=".*?"/, "href='#'"); 8330 } 8331 8332 if ((data.photo == undefined) || (data.photo == "") || (data.photo == "novalue")) { 8333 strTemplate = strTemplate.replace(/<img src=".*?>/, ""); 8334 } 8335 } 8336 8337 return strTemplate; 8338 } 8339 }, 8340 }).on('typeahead:selected', function (obj, datum) { 8341 /* 8342 console.log(obj); 8343 console.log(datum); 8344 */ 8345 }); 8346 8347 $('.member_search').each(function () {
8348 var inputWidth = $(this).outerWidth(); 8349 $(this).siblings('.tt-dropdown-menu').css('width', inputWidth + 'px'); 8350 }); 8351 } 8352 </script>
8352 8353
8353<script> 8354 let typeheadElement = '.member_search'; 8355 let TypeheadNameListFunction = 'initializeTypeheadMember_search'; 8356 let typeheadFormElement = undefined; 8357 window.addEventListener('load', () => { 8358 if(typeheadElement.length > 1) { 8359 typeheadFormElement = document.querySelectorAll(typeheadElement); 8360 } 8361 if (typeof typeheadFormElement != "undefined") { 8362 for (let i = 0; i < typeheadFormElement.length; i++) { 8363 let closestForm = typeheadFormElement[i].closest('form'); 8364 if (typeof closestForm != "undefined" && closestForm != null) { 8365 closestForm.addEventListener('focus', typeheadFormClick, false); 8366 } 8367 typeheadFormElement[i].addEventListener('focus', typeheadFormClick, false); 8368 } 8369 } 8370 }); 8371 function initializeTypehead(){ 8372 let splitFunctionNames= TypeheadNameListFunction.split(','); 8373 for ( let funcName of splitFunctionNames) 8374 if (typeof funcName != 'function') { 8375 window[funcName](); // execute the function 8376 8377 } 8378 } 8379 function typeheadFormClick(event) { 8380 8381 let head = document.getElementsByTagName('head')[0]; 8382 let script = document.createElement('script'); 8383 let elementClicked = event.target; 8384 script.type = 'text/javascript'; 8385 script.src = "https://cdnjs.cloudflare.com/ajax/libs/corejs-typeahead/0.11.1/typeahead.bundle.min.js"; 8386 script.onload = function () { 8387 initializeTypehead(); 8388 elementClicked.focus(); 8389 }; 8390 head.appendChild(script); 8391 if (typeof typeheadFormElement != "undefined") { 8392 for (let i = 0; i < typeheadFormElement.length; i++) { 8393 let closestForm = typeheadFormElement[i].closest('form'); 8394 if (typeof closestForm != "undefined" && closestForm != null) { 8395 closestForm.removeEventListener('focus', typeheadFormClick, false); 8396 } 8397 typeheadFormElement[i].removeEventListener('focus', typeheadFormClick, false) 8398 } 8399 } 8400 } 8401 8402 8403 </script>
8403 8404 8405
8405<script> 8406 window.addEventListener('load', () => { 8407 let embedlyClass = document.querySelector('.fr-embedly'); 8408 if (typeof embedlyClass != "undefined" && embedlyClass != null) { 8409 let embedlyURI = "https://www.optimizecdn.com/directory/cdn/assets/bootstrap/js/embedly_widget.min.js"; 8410 let head = document.getElementsByTagName("head")[0]; 8411 let script = document.createElement('script'); 8412 script.type = 'text/javascript'; 8413 script.src = embedlyURI; 8414 script.async = true; 8415 script.onload = function() { 8416 setTimeout(function() { 8417 if (typeof embedly !== 'undefined' && embedly.card) { 8418 document.querySelectorAll('.embedly-card').forEach(function(card) { 8419 embedly.card(card); 8420 }); 8421 } 8422 }, 500); 8423 }; 8424 head.appendChild(script); 8425 } 8426 }); 8427</script>
8427<script type="text/javascript" src="https://www.optimizecdn.com/directory/cdn/assets/bootstrap/jquery.lazy/1.7.9/jquery.lazy.min.js"></script>
8427<script> 8428 $(function () { 8429 $(".lazyloader").Lazy({ 8430 afterLoad: function(element) { 8431 $(".gridView.activeView").click(); 8432 } 8433 }); 8434 8435 }); 8436 $("button[class*='slick'],button[id*='slick']").click(function () { 8437 $(this).parents(".row").find(".lazyloader").lazy({ 8438 bind: "event", 8439 delay: 0 8440 }); 8441 }); 8442 $("[class*='slick'],[id*='slick']").on("swipe",function(){ 8443 $(this).parents(".row").find(".lazyloader").lazy({ 8444 bind: "event", 8445 delay: 0 8446 }); 8447 }); 8448 </script>
8448<script defer src="https://www.optimizecdn.com/directory/cdn/assets/bootstrap/js/websiteScripts.min.js?v=8.0.0"></script>
8448 8449 </body> 8450 </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.