1<!DOCTYPE HTML> 2<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="en-US"> 3<head> 4 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 5 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 6 <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2, user-scalable=1"> 7 8 <!-- Preconnect --> 9 <link rel="preconnect" href="https://www.optimizecdn.com" crossorigin> 10 <link rel="preconnect" href="https://fonts.googleapis.com"> 11 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> 12 <link rel="apple-touch-icon" href="/images/favicon.png"> 13 <link rel="icon" type="image/png" href="/images/favicon.png"> 14 15 <!-- Site Meta Data --> 16 <title>Trainers - Find & Compare Professional Professionals</title> 17 <meta name="description" content="Search our Professional database and connect with top rated Trainers."> 18 <meta name="keywords" content="Professional,Trainer,Trainers,search Trainers,find Trainers"> 19 <meta name="robots" content="index, follow"> 20 21 <!-- Canonical URL --> 22 <link rel="canonical" href="https://www.thetrainerdirectory.com/search_results"> 23 <link rel="alternate" type="application/rss+xml" title="The Trainer Directory RSS Feed" href="https://www.thetrainerdirectory.com/rss" /> 24 25 <!-- Social Media Meta Data --> 26 <meta property="og:type" content="website"> 27 <meta property="og:url" content="https://www.thetrainerdirectory.com/search_results"> 28 <meta property="og:site_name" content="The Trainer Directory"> 29 <meta property="og:title" content="The Best Trainers Rated By Past Clients"> 30 <meta property="og:description" content="Who is the best Trainer? Compare and connect with the top rated Trainers."> 31 <meta property="og:image" content="https://www.thetrainerdirectory.com/images/background.jpg"> 32
32<script> 33 if (window.innerWidth <= 768 && !document.referrer) { 34 document.write('<div id="mobile-loading-message" aria-hidden="true" onwheel="event.preventDefault()" ontouchmove="event.preventDefault()" style="display:block;position:sticky;top:0;width:100vw;height:100vh;background:rgb(245, 247, 250);color:rgb(41, 41, 41);z-index:9999;font-family:Arial,sans-serif;font-size:16px;line-height:24px;padding-top:50px;text-align:center;touch-action:none;overscroll-behavior:none;pointer-events:auto;"><div style="width:24px;height:24px;border:3px solid rgba(99,111,124,0.2);border-top-color:rgb(99,111,124);border-radius:50%;animation:spin 1.5s linear infinite;margin:10px auto"></div><span class="text" role="status">Loading<br>The Trainer Directory</span></div><style>@keyframes spin{to{transform:rotate(360deg);}}</style>'); 35 setTimeout(function(){var p=document.getElementById('mobile-loading-message');if(p){p.style.display='none';p.classList.add('hidden-xs','hide');}},7500);} 36 </script>
36 37 38 <!-- Preload --> 39 <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> 40 <link rel="preload" as="style" href="https://fonts.googleapis.com/css?family=Nunito:300,400,600,700,800,900|Ubuntu:300,400,600,700,800,900&display=swap" fetchpriority="high"> 41 42 <!-- Non-Critical Stylesheet - Render Before Critical Styles --> 43 <link rel="stylesheet" media="print" onload="this.onload=null;this.removeAttribute('media');" href="https://www.optimizecdn.com/directory/cdn/assets/bootstrap/css/non-critical-styles.pkgd.min.css?v=3.3.0" crossorigin> 44 <noscript> 45 <link rel="stylesheet" href="https://www.optimizecdn.com/directory/cdn/assets/bootstrap/css/non-critical-styles.pkgd.min.css" crossorigin> 46 </noscript> 47 48 <!-- Critical Stylesheet --> 49 <link rel="stylesheet" href="https://www.optimizecdn.com/directory/cdn/assets/bootstrap/css/critical-styles.pkgd.min.css?v=09.05.26" crossorigin> 50 51 <!-- Google Fonts Stylesheet --> 52 <link rel="stylesheet" media="print" onload="this.onload=null;this.removeAttribute('media');" href="https://fonts.googleapis.com/css?family=Nunito:300,400,600,700,800,900|Ubuntu:300,400,600,700,800,900&display=swap"> 53 <noscript> 54 <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Nunito:300,400,600,700,800,900|Ubuntu:300,400,600,700,800,900&display=swap"> 55 </noscript> 56 57 <!-- FontAwesome Stylesheet --> 58 <link rel="stylesheet" media="print" onload="this.onload=null;this.removeAttribute('media');" href="https://www.optimizecdn.com/directory/cdn/assets/bootstrap/font-awesome/css/font-awesome.min.css" crossorigin> 59 <noscript> 60 <link rel="stylesheet" href="https://www.optimizecdn.com/directory/cdn/assets/bootstrap/font-awesome/css/font-awesome.min.css" crossorigin> 61 </noscript> 62 63 <!-- Bootstrap Icons Stylesheet --> 64 <link rel="stylesheet" media="print" onload="this.onload=null;this.removeAttribute('media');" href="https://www.optimizecdn.com/directory/cdn/assets/bootstrap/fonts/bootstrap-icons.min.css?v=1.13.1" crossorigin> 65 <noscript> 66 <link rel="stylesheet" href="https://www.optimizecdn.com/directory/cdn/assets/bootstrap/fonts/bootstrap-icons.min.css?v=1.13.1" crossorigin> 67 </noscript> 68 69 <!-- Critical JavaScript --> 70
70<script src="https://www.optimizecdn.com/directory/cdn/assets/bootstrap/libraries/latest/jquery.min.js"></script>
70 71
71<script src="https://www.optimizecdn.com/directory/cdn/assets/bootstrap/libraries/latest/bootstrap.min.js"></script>
71 72
72<script> 73 /* jQuery.event.special.touchstart = { 74 setup: function( _, ns, handle ) { 75 this.addEventListener("touchstart", handle, { passive: !ns.includes("noPreventDefault") }); 76 } 77 }; */ 78 jQuery.event.special.touchmove = { 79 setup: function( _, ns, handle ) { 80 this.addEventListener("touchmove", handle, { passive: !ns.includes("noPreventDefault") }); 81 } 82 }; 83 jQuery.event.special.wheel = { 84 setup: function( _, ns, handle ){ 85 this.addEventListener("wheel", handle, { passive: true }); 86 } 87 }; 88 jQuery.event.special.mousewheel = { 89 setup: function( _, ns, handle ){ 90 this.addEventListener("mousewheel", handle, { passive: true }); 91 } 92 }; 93 </script>
93 94 95 <!-- Breadcrumb Position --> 96 <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> 97
97<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>
97 98 99 100 <!-- Prefetch --> 101 <link rel="prefetch" href="https://www.optimizecdn.com/directory/cdn/assets/bootstrap/jquery.lazy/1.7.9/jquery.lazy.min.js" as="script"> 102 <link rel="prefetch" href="https://www.optimizecdn.com/directory/cdn/assets/bootstrap/js/websiteScripts.min.js?v=8.0.0" as="script"> 103 104 105</head> 106 107<body class="general-session"><!-- 108IMPORTANT: 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. 109 110INSTEAD: If custom CSS rules are needed, add them directly into the DESIGN SETTINGS > CUSTOM CSS section. 111--> 112<style> 113 .upload-form-field::before { 114 content: "choose files"; 115 display: inline-block; 116 border: 1px solid #999; 117 border-radius: 3px; 118 padding: 5px 8px; 119 } 120 #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 { 121 white-space: nowrap !important; 122 } 123 /* Main Website Design */ 124 body,.modal-header,.modal-content,.modal-body,.modal-footer { 125 background: rgb(245, 247, 250); 126 color: rgb(41, 41, 41); 127 font-family: 'Nunito'; 128 font-size: 16px; 129 } 130 .select2-container .select2-choice { 131 font-family: 'Nunito'!important; 132 } 133 html{ 134 background: rgb(0, 45, 98) } 135 .bootstrap-datetimepicker-widget *:not(.active,[data-action="togglePeriod"]) a, .bootstrap-datetimepicker-widget *:not(.active,[data-action="togglePeriod"]) td,.datepicker th.picker-switch,.datepicker .dow { 136 color: #000 !important; 137 } 138 a,a.h1,a.h2,a.h3,a.h4,a.h5,a.h6,.pricing_menu li ul li a:not(.btn) { 139 color: rgb(51, 122, 183); 140 } 141 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 { 142 color: rgb(35, 82, 124); 143 } 144 .breadcrumb a{ 145 color: rgba(119, 119, 119,0.9); 146 } 147 .breadcrumb a:hover, .breadcrumb a:focus,.breadcrumb > .active { 148 color: rgb(119, 119, 119); 149 } 150 .help-inline, .help-block { 151 color: rgba(41, 41, 41,0.5); 152 } 153 .h1, .h2, .h3, .h4, .h5, .h6, h1, h2, h3, h4, h5, h6 { 154 font-family: 'Ubuntu'; 155 } 156 /* Header Design */ 157 .header, .mobile_website_logo img { 158 background: rgb(245, 247, 250); 159 } 160 .header .mini-nav li a:not(.btn):not(.network-icon), .header .mini-nav span { 161 color: rgb(41, 41, 41); 162 font-size: 16px; 163 } 164 .header .mini-nav li a:not(.btn):hover { 165 color: rgba(41, 41, 41,0.95); 166 } 167 .header .btn_get_listed { 168 background-color: rgb(255, 186, 8); 169 border: 1px solid rgb(255, 186, 8); 170 color: rgb(245, 247, 250)!important; 171 } 172 .header .btn_get_listed:hover, .header .btn_get_listed:focus { 173 background-color: rgba(255, 186, 8,0.97); 174 } 175 .header .btn_search { 176 background-color: rgba(0, 45, 98,0.97); 177 border: 1px solid rgb(0, 45, 98); 178 color: rgb(255, 255, 255); 179 } 180 .header .btn_search:hover, .header .btn_search:focus { 181 background-color: rgb(0, 45, 98); 182 color: rgb(255, 255, 255); 183 } 184 185 /* Logo Design */ 186 .logo,.logo:hover,.logo:focus { 187 color: rgb(24, 46, 69); 188 font-family: 'Nunito'; 189 } 190 .logo .slogan { 191 color: rgb(153, 153, 153); 192 } 193 .logo .fa { 194 color: rgb(24, 46, 69); 195 } 196 197 /* Main Menu Design */ 198 .member-profile-tabs > ul, .member-profile-tabs .tabs-container { 199 background: rgb(255, 255, 255); 200 position: sticky; 201 z-index: 1; 202 top: 0px; 203 } 204 /* Google Translate When Main Menu Sticky Top */ 205 @media only screen and (max-width: 1100px) { 206 .member-profile-tabs > ul, .member-profile-tabs .tabs-container { 207 top: 50px; 208 } 209 } 210 .header ul.nav.navbar-nav li ul { 211 background-color: rgb(255, 255, 255); 212 } 213 .header ul.nav.navbar-nav li ul li a, .header ul.nav.navbar-nav li ul li span { 214 color: rgb(24, 46, 69); 215 font-weight: 400; 216 } 217 .header .navbar-default, .pagination > .active > a { 218 background-color: rgb(0, 45, 98); 219 } 220 .header ul.nav.navbar-nav li ul li a:hover, .header ul.nav.navbar-nav li ul li a:focus{ 221 border-left-color: rgb(24, 46, 69); 222 background: rgb(24, 46, 69); 223 color: rgb(255, 255, 255); 224 }
225 .navbar-default .navbar-toggle .icon-bar { 226 background-color: rgb(255, 255, 255); 227 } 228 .user_sidebar, .main_menu, .compact-mobile-search { 229 color: rgb(255, 255, 255); 230 } 231 .navbar-default .navbar-nav > li > a, .navbar-default .navbar-nav > li > span { 232 color: rgb(255, 255, 255); 233 font-weight: 400; 234 } 235 .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 { 236 color: rgb(250, 250, 250); 237 } 238 .navbar-default .navbar-nav > li { 239 font-family: 'Ubuntu'; 240 } 241 242 #website_logo .logo-image { 243 max-width: 320px; 244 } 245 246 247 /* Footer Design */ 248 .footer { 249 background-color: rgb(0, 45, 98); 250 display: block; 251 } 252 .footer, .footer_menu a,.footer_terms a,.footer_menu .content { 253 color: rgb(239, 239, 239); 254 } 255 .footer_menu a:hover, .footer_terms a:hover, .footer_menu a:focus, .footer_terms a:focus { 256 color: rgb(255, 255, 255); 257 } 258 .footer_menu .head { 259 color: rgb(255, 255, 255); 260 } 261 .btn_footer_get_listed { 262 background-color: rgb(255, 186, 8); 263 border: 1px solid rgb(255, 186, 8); 264 color: rgb(255, 255, 255)!important; 265 } 266 .btn_footer_get_listed:hover, .btn_footer_get_listed:focus{ 267 background-color: rgba(255, 186, 8,0.95); 268 } 269 270 /* Homepage Design */ 271 .homepage_settings h1, .homepage_settings h2, .homepage_map h1, .homepage_map h2 { 272 font-family: 'Ubuntu'; 273 } 274 .homepage_settings h1, .homepage_map h1 { 275 color: rgb(255, 255, 255); 276 font-weight: 300; 277 text-align: left; 278 } 279 .homepage_settings h2, .homepage_map h2 { 280 color: rgb(255, 255, 255); 281 font-weight: 400; 282 text-align: left; 283 284 } 285 .homepage_settings .search_box label { 286 color: rgb(255, 255, 255); 287 } 288 .btn_home_search, .search_box input[type=submit] { 289 background-color: rgb(255, 186, 8); 290 border: 1px solid rgb(255, 186, 8); 291 color: rgb(255, 255, 255); 292 } 293 .btn_home_search:hover, .btn_home_search:focus, .search_box input[type=submit]:hover, .search_box input[type=submit]:focus { 294 background-color: rgba(255, 186, 8,0.97); 295 color: rgb(255, 255, 255); 296 } 297 .homepage_settings .search_box { 298 299 background-color: rgba( 32, 80, 129, 0.5); 300 } 301 302 /* Homepage Steps Module */ 303 .homepage_steps { 304 background: none; 305 box-shadow: none; 306 padding: 0; 307 color: rgb(0, 45, 98); 308 } 309 .homepage_steps a.homepage_step_link,.homepage_steps a.homepage_step_link:hover,.homepage_steps a.homepage_step_link:active{ 310 color: rgb(0, 45, 98)!important; 311 } 312 .homepage_steps .fa { 313 color: rgb(116, 129, 143); 314 background-color: rgba(116, 129, 143,0.075); 315 } 316 .homepage_steps h2 + p { 317 opacity: .6; 318 } 319 320 /* Blog Posts Slider Settings */ 321 #myCarousel h2 a, .carousel-caption p,#myCarousel .list-group-item h2, #myCarousel li.list-group-item h4 { 322 color: rgb(255, 255, 255); 323 } 324 #myCarousel .list-group-item { 325 background-color: rgba(32, 80, 129,0.9); 326 border-color: rgba(32, 80, 129,0.80); 327 } 328 #myCarousel .carousel-caption { 329 background-color: rgba(32, 80, 129,0.8); 330 } 331 #myCarousel .list-group, #myCarousel .carousel-inner { 332 background-color: rgb(32, 80, 129) } 333 #myCarousel .list-group .active, #myCarousel .list-group-item:hover { 334 background-color: rgb(32, 80, 129) } 335 #myCarousel .list-group .active h2, #myCarousel .list-group-item:hover h2{ 336 color: rgb(250, 250, 250); 337 } 338 339 /* Additional Settings */ 340 .well blockquote { 341 background: rgb(245, 247, 250) none repeat scroll 0 0; 342 border-color: rgb(255, 255, 255); 343 color: rgb(41, 41, 41); 344 padding: 10px 20px; 345 } 346 .account-form-box form table tr td table { 347 background-color: transparent!important; 348 border: none!important; 349 } 350 351 .account-form-box form table tr td table td { 352 background-color: transparent!important; 353 color: rgb(41, 41, 41)!important; 354 border: none!important; 355 } 356 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{ 357 color: rgb(41, 41, 41)!important; 358 } 359 .table.dataTable > thead > tr > th, .table > thead > tr > th, .fr-view table th, .fr-view table tfoot td { 360 border-color: rgba(85, 85, 85,0.1); 361 background-color: rgb(238, 238, 238); 362 color: rgb(85, 85, 85);
363 font-weight:600; 364 border-left: none; 365 border-bottom-width: 1px; 366 } 367 .table > tbody > tr > td, .table > tbody > tr > th, .table > tfoot > tr > td, .table > tfoot > tr > th, .table > thead > tr > td, table.dataTable.no-footer { 368 border-color: rgba(85, 85, 85,0.1); 369 } 370 .table > tfoot > tr > td:not(:last-child) { 371 border-right: 1px solid rgba(85, 85, 85,0.1); 372 } 373 table.dataTable.no-footer, table.dataTable { 374 border: 1px solid rgb(255, 255, 255)!important; 375 } 376 .table-view li:not(.table-display-about_me li, .froala-data li), .table-view .table-view-group > div { 377 border-top:1px solid rgb(255, 255, 255); 378 } 379 .table-view .table-view-group:last-child { 380 border-bottom:1px solid rgb(255, 255, 255); 381 } 382 table.dataTable tbody tr, .table-striped.dataTable, .table-striped, .fr-view .table-striped { 383 background-color: rgb(255, 255, 255)!important; 384 } 385 .table-striped.dataTable, .table-striped, .fr-view .table-striped { 386 border: 1px solid rgba(85, 85, 85,0.15); 387 border-collapse: separate; 388 overflow: hidden; 389 } 390 table#feature-body-datatable:has(.dropdown.open),table#digital-products-transactions:has(.dropdown.open), table#example:has(.dropdown.open) { 391 overflow: visible; 392 } 393 .table-striped.dataTable tbody > tr:nth-of-type(2n+1),.table-striped > tbody > tr:nth-of-type(2n+1) { 394 background-color: rgba(245, 247, 250,0.5)!important; 395 } 396 .nav-tabs, hr, .account-menu-title, .modal-header { 397 border-color: rgb(255, 255, 255); 398 } 399 .sidemenu_panel .list-group-item{ 400 background-color: transparent!important; 401 color: rgb(41, 41, 41)!important; 402 } 403 .img-thumbnail { 404 background-color: rgb(255, 255, 255)!important; 405 border: 1px solid rgb(255, 255, 255); 406 } 407 .member_admin_sidemenu p, .member_admin_sidemenu h3 { 408 color: rgb(41, 41, 41)!important; 409 } 410 .close { 411 color: rgb(41, 41, 41); 412 opacity: 1; 413 } 414 .member_results_header h1, .content_w_sidebar.feature-search h1, .feature_results_header h1 { 415 font-size:34px; 416 display: block; 417 } 418 .member_results_header h2, .feature_results_header h2 { 419 font-size:28px; 420 display: block; 421 } 422 .homepage_settings { 423 padding-top: 130px; 424 padding-bottom: 180px; 425 } 426 @media (max-width: 768px) { .mobile_website_logo .visible-xs {display: block !important;}} 427 @media only screen and (max-width: 768px) { 428 .member-profile-header .favorite {float:none} 429 } 430 431 432 @media only screen and (max-width: 1100px) { 433 } 434 .views > i.fa.activeView, .views > i.fa:hover { 435 background-color: rgb(41, 41, 41); 436 color: rgb(245, 247, 250); 437 } 438 .views > i.fa { 439 background-color: rgba(41, 41, 41,0.1); 440 color: rgb(41, 41, 41); 441 } 442 .ui-rangeSlider-label { 443 background-color: rgb(0, 45, 98)!important; 444 color: rgb(255, 255, 255)!important; 445 } 446 .pricing_menu li .title { 447 background: rgb(32, 80, 129); 448 color: rgb(255, 255, 255); 449 } 450 p.account-tip{ 451 color: rgb(41, 41, 41); 452 } 453 .circled_number { 454 background: rgb(32, 80, 129); 455 color: rgb(255, 255, 255); 456 } 457 .pic { 458 background-color: rgba(24, 46, 69,0.8); 459 color: rgb(255, 255, 255); 460 background-repeat: no-repeat; 461 background-position: center; 462 } 463 .pic .pic-caption { 464 background: linear-gradient(0deg, rgba(0, 0, 0, 0) 0%,rgba(24, 46, 69,0.85) 50%); 465 color: rgb(255, 255, 255); 466 } 467 .slick-prev-fa i, .slick-next-fa i{ 468 color: rgb(24, 46, 69); 469 } 470 .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 { 471 background-color: rgb(255, 255, 255); 472 border-color: rgb(255, 255, 255); 473 color: rgb(41, 41, 41); 474 } 475 .nav-pills > li.active a, .nav-pills > li > a:hover { 476 background-color: rgb(255, 186, 8)!important; 477 border-color: rgb(255, 186, 8)!important; 478 color: rgb(255, 255, 255)!important; 479 } 480 .sidemenu_panel .panel-heading { 481 color: rgb(41, 41, 41)!important; 482 background-color: rgb(255, 255, 255)!important; 483 } 484 .member-profile-tabs .nav-tabs > li:not(.active) > a, .login-register-tabs.nav-tabs > li:not(.active) > a, .nav-tabs > li:not(.active) > a { 485 background: rgba(255, 255, 255,0.5); 486 color: #5f5f5f; 487 } 488 .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 { 489 background: rgba(255, 255, 255,1); 490 color: rgb(41, 41, 41); 491 }
492 .author-snapshot .well:not(.well.bg-default) { 493 background-color: rgb(255, 255, 255)!important; 494 border-color: rgb(255, 255, 255)!important; 495 color: rgb(41, 41, 41)!important; 496 } 497 .nav-tabs>li>a, .nav-pills>li>a { 498 font-weight: 600; 499 } 500 .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{ 501 color: rgba(41, 41, 41,0.5); 502 } 503 #service_areas_table td,#service_areas_table_wrapper label, #service_areas_table_info, #service_areas_table_paginate > a { 504 color: rgb(41, 41, 41) !important; 505 } 506 .popover { 507 background-color: rgb(255, 255, 255); 508 border-color: rgb(255, 255, 255); 509 padding:0; 510 text-align:left; 511 } 512 .popover-title, .popover-content { 513 background-color: rgb(255, 255, 255); 514 color: rgb(41, 41, 41); 515 border-color: rgb(255, 255, 255); 516 text-align:left; 517 } 518 .popover-content { 519 background-color: rgba(41, 41, 41,.05); 520 border-radius: 4px; 521 transform: translate(-1px, -1px); 522 width: calc(100% + 2px); 523 margin-bottom: -2px; 524 } 525 .popover.left > .arrow::after { 526 border-left-color: rgb(255, 255, 255)!important; 527 } 528 .popover.right > .arrow::after { 529 border-right-color: rgb(255, 255, 255)!important; 530 } 531 .popover.bottom > .arrow::after { 532 border-bottom-color: rgb(255, 255, 255)!important; 533 } 534 .popover.top > .arrow::after { 535 border-top-color: rgb(255, 255, 255)!important; 536 } 537 .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{ 538 background-color: rgb(245, 247, 250); 539 color: rgb(41, 41, 41); 540 } 541 .module h1, .module h2, .module h3, .module h4, .module h5 { 542 color: rgb(62, 62, 62); 543 } 544 .module p:not(.fr-box.fr-basic .fr-element p) { 545 color: rgb(41, 41, 41); 546 } 547 .pagination>.active>a { 548 border-color: rgba(255, 255, 255,0.2); 549 } 550 .pagination>.active>a { 551 color: rgb(255, 255, 255); 552 } 553 .pagination > .active > a:hover, .pagination > .active > a:focus { 554 border-color: rgba(255, 255, 255,0.2); 555 background-color: rgb(0, 45, 98); 556 color: rgb(255, 255, 255); 557 } 558 .pagination > li > a { 559 color: rgb(0, 45, 98); 560 border-color: rgba(0, 45, 98,0.2); 561 background-color: rgb(255, 255, 255); 562 } 563 .pagination > li > a:focus, .pagination > li > a:hover, .pagination > li > span:focus, .pagination > li > span:hover { 564 background-color: rgb(0, 45, 98); 565 border-color: rgb(0, 45, 98); 566 color: rgb(255, 255, 255); 567 } 568 569 .nav-pills.nav-wizard > li a, .nav-pills.nav-wizard > li a:hover{ 570 background-color: rgb(238, 238, 238)!important; 571 color: rgb(85, 85, 85)!important; 572 } 573 .member_wizard2 li.incomplete a, .member_wizard2 li.incomplete a:hover { 574 background-color: rgb(240, 173, 78)!important; 575 border-color: rgb(240, 173, 78); 576 color: rgb(255, 255, 255); 577 } 578 .nav-pills.nav-wizard > li.active a, .nav-pills.member_wizard > li.active:hover a { 579 background-color: rgb(51, 122, 183)!important; 580 color: rgb(255, 255, 255)!important; 581 } 582 .member_wizard2 li.completed a, .member_wizard2 li.completed a:hover { 583 background-color: rgb(0, 45, 98)!important; 584 border-color: rgb(0, 45, 98); 585 color: rgb(255, 255, 255); 586 } 587 588 .nav-pills.nav-wizard > li.active .nav-arrow, .nav-pills.nav-wizard > li.active:hover .nav-arrow { 589 border-color: transparent transparent transparent rgb(51, 122, 183)!important; 590 } 591 .nav-pills.nav-wizard > li.active .nav-wedge, .nav-pills.nav-wizard > li.active:hover .nav-wedge{ 592 border-color: rgb(51, 122, 183) rgb(51, 122, 183) rgb(51, 122, 183) transparent!important; 593 } 594 595 li.completed .nav-wedge, .nav-pills.nav-wizard > li.completed:hover .nav-wedge { 596 border-color: rgb(30, 166, 154) rgb(30, 166, 154) rgb(30, 166, 154) transparent!important; 597 } 598 599 li.incomplete .nav-wedge, .nav-pills.nav-wizard > li.incomplete:hover .nav-wedge { 600 border-color: rgb(238, 238, 238) rgb(238, 238, 238) rgb(238, 238, 238) transparent!important; 601 } 602 603 .nav-pills.member_wizard > li.completed a, .nav-pills.member_wizard > li.completed a:hover { 604 background-color: rgb(30, 166, 154)!important; 605 color: rgb(255, 255, 255)!important; 606 } 607 608 .member_wizard2 li { 609 color: rgb(255, 255, 255); 610 border-right: 10px solid rgb(245, 247, 250); 611 } 612 613 li.completed .nav-arrow, .nav-pills.nav-wizard > li.completed:hover .nav-arrow { 614 border-color: transparent transparent transparent rgb(30, 166, 154)!important; 615 } 616 617 li.incomplete .nav-arrow, .nav-pills.nav-wizard > li.incomplete:hover .nav-arrow{ 618 border-color: transparent transparent transparent rgb(238, 238, 238)!important; 619 } 620 621 /* Default Colors */ 622 .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 { 623 background-color: rgb(255, 186, 8); 624 border-color: rgb(255, 186, 8); 625 color: rgb(255, 255, 255); 626 } 627 .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 { 628 background-color: rgba(255, 186, 8,0.95); 629 border-color: rgb(255, 186, 8); 630 color: rgb(255, 255, 255); 631 } 632 .panel-primary { 633 background-color: #fff5da; 634 border-color: rgb(255, 186, 8); 635 } 636 .bg-primary,.progress-bar-primary,.module p.bg-primary,.label-primary,.badge-primary,.pricing_menu .title.bg-primary, .
636well .well.bg-primary, .module .well.bg-primary, .well .module.bg-primary,.tab-content .module.bg-primary,.tab-content .well.bg-primary { 637 background-color: rgb(255, 186, 8); 638 color: rgb(255, 255, 255); 639 } 640 .bg-primary .badge { 641 background-color:rgb(255, 255, 255); 642 color: rgb(255, 186, 8); 643 } 644 .btn-primary.btn-outline { 645 background: transparent; 646 color: rgb(255, 186, 8); 647 transition: all 250ms ease-in-out 0ms; 648 } 649 .btn-primary.btn-outline:hover { 650 background: rgba(255, 186, 8,0.1); 651 color: rgb(255, 186, 8); 652 } 653 .alert-primary { 654 background-color:rgba(255, 186, 8,0.7); 655 border-color:rgba(255, 186, 8,0.2); 656 color: rgba(255, 255, 255,0.9); 657 } 658 .alert-primary-subtle, .label-primary-subtle, .badge-primary-subtle { 659 background-color: #fff1ce; 660 border-color: #fff1ce; 661 color: rgb(255, 186, 8); 662 color: color-mix(in srgb, rgb(255, 186, 8) 50%, rgb(41, 41, 41) 50%); 663 } 664 .btn.dropdown-toggle.btn-primary *, .btn-primary a { 665 color: rgb(255, 255, 255); 666 } 667 .text-primary{ 668 color: rgb(255, 186, 8); 669 } 670 .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 { 671 background-color: rgb(32, 80, 129); 672 border-color: rgb(32, 80, 129); 673 color: rgb(255, 255, 255); 674 } 675 .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 { 676 background-color: rgba(32, 80, 129,0.95); 677 border-color: rgb(32, 80, 129); 678 color: rgb(255, 255, 255); 679 } 680 .panel-info { 681 background-color: #dee5ec; 682 border-color: rgb(32, 80, 129); 683 } 684 .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 { 685 background-color: rgb(32, 80, 129); 686 color: rgb(255, 255, 255); 687 } 688 .bg-info .badge { 689 background-color:rgb(255, 255, 255); 690 color: rgb(32, 80, 129); 691 } 692 .btn-info.btn-outline { 693 background: transparent; 694 color: rgb(32, 80, 129); 695 transition: all 250ms ease-in-out 0ms; 696 } 697 .btn-info.btn-outline:hover { 698 background: rgba(32, 80, 129,0.1); 699 color: rgb(32, 80, 129); 700 } 701 .alert-info { 702 background-color:rgba(32, 80, 129,0.7); 703 border-color:rgba(32, 80, 129,0.2); 704 color: rgba(255, 255, 255,0.9); 705 } 706 .alert-info-subtle, .label-info-subtle, .badge-info-subtle { 707 background-color: #d2dce6; 708 border-color: #d2dce6; 709 color: rgb(32, 80, 129); 710 color: color-mix(in srgb, rgb(32, 80, 129) 50%, rgb(41, 41, 41) 50%); 711 } 712 .btn.dropdown-toggle.btn-info *, .btn-info a { 713 color: rgb(255, 255, 255); 714 } 715 .text-info{ 716 color: rgb(32, 80, 129); 717 } 718 .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 { 719 background-color: rgb(0, 45, 98); 720 border-color: rgb(0, 45, 98); 721 color: rgb(255, 255, 255); 722 } 723 .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 { 724 background-color: rgba(0, 45, 98,0.95); 725 border-color: rgb(0, 45, 98); 726 color: rgb(255, 255, 255); 727 } 728 .panel-success { 729 background-color: #d9e0e7; 730 border-color: rgb(0, 45, 98); 731 } 732 .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 { 733 background-color: rgb(0, 45, 98); 734 color: rgb(255, 255, 255); 735 } 736 .bg-success .badge { 737 background-color: rgb(255, 255, 255); 738 color: rgb(0, 45, 98); 739 } 740 .btn-success.btn-outline { 741 background: transparent; 742 color: rgb(0, 45, 98); 743 transition: all 250ms ease-in-out 0ms; 744 } 745 .btn-success.btn-outline:hover { 746 background: rgba(0, 45, 98,0.1); 747 color: rgb(0, 45, 98); 748 } 749 .alert-success { 750 background-color:rgba(0, 45, 98,0.7); 751 border-color:rgba(0, 45, 98,0.2); 752 color: rgba(255, 255, 255,0.9); 753 } 754 .alert-success-subtle, .label-success-subtle, .badge-success-subtle { 755 background-color: #ccd5e0; 756 border-color: #ccd5e0; 757 color: rgb(0, 45, 98); 758 color: color-mix(in srgb, rgb(0, 45, 98) 50%, rgb(41, 41, 41) 50%); 759 } 760 .btn.dropdown-toggle.btn-success *, .btn-success a { 761 color: rgb(255, 255, 255); 762 } 763 .text-success{ 764 color: rgb(0, 45, 98); 765 } 766 .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 { 767 background-color: rgb(240, 173, 78); 768 border-color: rgb(240, 173, 78); 769 color: rgb(255, 255, 255); 770 } 771 .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 { 772 background-color: rgba(240, 173, 78,0.95); 773 border-color: rgb(240, 173, 78); 774 color: rgb(255, 255, 255); 775 } 776 .panel-warning { 777 background-color: #fdf3e4; 778 border-color: rgb(240, 173, 78); 779 } 780 .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 { 781 background-color: rgb(240, 173, 78); 782 color: rgb(255, 255, 255); 783 } 784 .bg-warning .badge { 785 background-color: rgb(255, 255, 255); 786 color: rgb(240, 173, 78); 787 } 788 .btn-warning.btn-outline { 789 background: transparent; 790 color: rgb(240, 173, 78); 791 transition: all 250ms ease-in-out 0ms; 792 } 793 .btn-warning.btn-outline:hover { 794 background: rgba(240, 173, 78,0.1); 795 color: rgb(240, 173, 78); 796 } 797 .alert-warning { 798 background-color:rgba(240, 173, 78,0.7); 799 border-color:rgba(240, 173, 78,0.2); 800 color: rgba(255, 255, 255,0.9); 801 } 802 .alert-warning-subtle, .label-warning-subtle, .badge-warning-subtle { 803 background-color: #fcefdc; 804 border-color: #fcefdc; 805 color: rgb(240, 173, 78); 806 color: color-mix(in srgb, rgb(240, 173, 78) 50%, rgb(41, 41, 41) 50%); 807 } 808 .btn.dropdown-toggle.btn-warning *, .btn-warning a { 809 color: rgb(255, 255, 255); 810 } 811 .text-warning { 812 color: rgb(240, 173, 78); 813 } 814 .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 { 815 background-color: rgb(217, 83, 79); 816 border-color: rgb(217, 83, 79); 817 color: rgb(255, 255, 255); 818 } 819 .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 { 820 background-color: rgba(217, 83, 79,0.95); 821 border-color: rgb(217, 83, 79); 822 color: rgb(255, 255, 255); 823 } 824 .has-error .form-control { 825 border-color: rgb(217, 83, 79); 826 } 827 .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 { 828 background: rgb(217, 83, 79); 829 color: rgb(255, 255, 255) !important; 830 } 831 .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 { 832 color: rgb(217, 83, 79); 833 } 834 .panel-danger { 835 background-color: #f9e5e5; 836 border-color: rgb(217, 83, 79); 837 } 838 .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 { 839 background-color: rgb(217, 83, 79); 840 color: rgb(255, 255, 255); 841 } 842 .bg-danger .badge { 843 background-color: rgb(255, 255, 255); 844 color: rgb(217, 83, 79); 845 } 846 .btn-danger.btn-outline { 847 background: transparent; 848 color: rgb(217, 83, 79); 849 transition: all 250ms ease-in-out 0ms; 850 } 851 .btn-danger.btn-outline:hover { 852 background: rgba(217, 83, 79,0.1); 853 color: rgb(217, 83, 79); 854 } 855 .alert-danger { 856 background-color:rgba(217, 83, 79,0.7); 857 border-color:rgba(217, 83, 79,0.2); 858 color: rgba(255, 255, 255,0.9); 859 } 860 .alert-danger-subtle, .label-danger-subtle, .badge-danger-subtle { 861 background-color: #f7dddc; 862 border-color: #f7dddc; 863 color: rgb(217, 83, 79); 864 color: color-mix(in srgb, rgb(217, 83, 79) 50%, rgb(41, 41, 41) 50%); 865 } 866 .btn.dropdown-toggle.btn-danger *, .btn-danger a { 867 color: rgb(255, 255, 255); 868 } 869 .text-danger{ 870 color: rgb(217, 83, 79); 871 } 872 .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
872s, 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 { 873 background-color: rgb(238, 238, 238); 874 border-color: rgb(238, 238, 238); 875 color: rgb(85, 85, 85); 876 } 877 .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 { 878 background-color: rgba(238, 238, 238,0.95); 879 border-color: rgb(238, 238, 238); 880 color: rgb(85, 85, 85); 881 } 882 .sidemenu_panel .panel-default .panel_heading { 883 background-color: rgb(238, 238, 238)!important; 884 border-color: rgb(238, 238, 238)!important; 885 color: rgb(85, 85, 85)!important; 886 } 887 .panel-default .panel-heading, .member_accounts .panel-default > .panel-heading, .panel-default.categories-panel .panel-heading { 888 889 box-shadow: 0 0 1000px 0 rgba(85, 85, 85,0.02) inset; 890 background-color: rgb(238, 238, 238); 891 } 892 .panel-default, .member_accounts .panel-default { 893 894 background-color: rgba(238, 238, 238,0.15); 895 border-color: #fdfdfd; 896 border-color: color-mix(in srgb,rgb(238, 238, 238) 100%,rgba(238, 238, 238) 10%); 897 } 898 .member_admin_sidemenu .panel-default { 899 background-color: transparent; 900 } 901 .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 { 902 background-color: rgb(238, 238, 238); 903 color: rgb(85, 85, 85); 904 } 905 .bg-default .badge { 906 background-color: rgb(85, 85, 85); 907 color: rgb(238, 238, 238); 908 } 909 .btn-default.btn-outline { 910 background: transparent; 911 color: rgb(238, 238, 238); 912 transition: all 250ms ease-in-out 0ms; 913 } 914 .btn-default.btn-outline:hover { 915 background: rgba(238, 238, 238,0.1); 916 color: rgb(238, 238, 238); 917 } 918 .alert-default { 919 background-color:rgb(238, 238, 238); 920 border-color:rgb(238, 238, 238); 921 color: rgb(85, 85, 85); 922 } 923 .alert-default-subtle, .label-default-subtle, .badge-default-subtle { 924 background-color:rgba(238, 238, 238,0.5); 925 border-color: rgba(238, 238, 238,0.5); 926 color: rgb(85, 85, 85); 927 color: color-mix(in srgb, rgb(85, 85, 85) 50%, rgb(41, 41, 41) 50%); 928 } 929 .btn.dropdown-toggle.btn-default *, .btn-default a { 930 color: rgb(85, 85, 85); 931 } 932 .text-default{ 933 color: rgb(238, 238, 238); 934 } 935 .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 { 936 background-color: rgb(41, 41, 41); 937 border: 1px solid rgb(41, 41, 41); 938 color: rgb(245, 247, 250); 939 } 940 .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 { 941 background-color: rgba(41, 41, 41,0.95); 942 border-color: rgb(41, 41, 41); 943 color: rgb(245, 247, 250); 944 } 945 .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 { 946 background-color: rgb(41, 41, 41); 947 color: rgb(245, 247, 250); 948 } 949 .bg-secondary .badge { 950 background-color:rgb(245, 247, 250); 951 color: rgb(41, 41, 41); 952 } 953 .btn-secondary.btn-outline { 954 background: transparent; 955 color: rgb(41, 41, 41); 956 transition: all 250ms ease-in-out 0ms; 957 } 958 .btn-secondary.btn-outline:hover { 959 background: rgba(41, 41, 41,0.1); 960 color: rgb(41, 41, 41); 961 } 962 .panel-secondary { 963 background-color: #dfdfdf; 964 border-color: rgb(41, 41, 41); 965 } 966 .alert-secondary { 967 background-color:rgb(41, 41, 41); 968 border-color:rgb(41, 41, 41); 969 color: rgb(245, 247, 250); 970 } 971 .alert-secondary-subtle, .label-secondary-subtle, .badge-secondary-subtle { 972 background-color:rgba(41, 41, 41,0.8); 973 border-color: rgba(41, 41, 41,0.5); 974 color: rgb(245, 247, 250); 975 } 976 .btn-outline { 977 -webkit-backdrop-filter: blur(5px); 978 backdrop-filter: blur(5px); 979 } 980 .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 { 981 background-color: rgb(245, 247, 250); 982 border: 1px solid rgb(245, 247, 250); 983 color: rgb(41, 41, 41); 984 } 985 .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 { 986 background-color: rgba(245, 247, 250,0.95); 987 border: 1px solid rgb(245, 247, 250); 988 color: rgb(41, 41, 41); 989 } 990 .btn.btn-body.dropdown-toggle * { 991 color: rgb(41, 41, 41) 992 } 993 .btn-body.dropdown-toggle + ul li, .daterangepicker .ranges { 994 color: #333; 995 } 996 .bg-body { 997 background: rgb(245, 247, 250); 998 color: rgb(41, 41, 41); 999 } 1000 .bg-content-box { 1001 background: rgb(255, 255, 255); 1002 color: rgb(41, 41, 41); 1003 } 1004 .bg-content-box-border { 1005 background: rgb(255, 255, 255); 1006 } 1007 .btn.dropdown-toggle.btn-secondary *, .btn-secondary a { 1008 color: rgb(245, 247, 250); 1009 } 1010 .text-secondary { 1011 color: rgb(41, 41, 41); 1012 } 1013 .text-body { 1014 color: rgb(245, 247, 250); 1015 } 1016 .feature-post #post-content .alert-secondary.btn-block, .feature-search .img_section .alert-secondary.btn-block, .search_result .img_section .alert-secondary { 1017 border-radius: 10px; 1018 background-color: rgba(41, 41, 41,0.2); 1019 } 1020 1021 /* Footer Newsletter Row */ 1022 .newsletter_row .alert { 1023 color: rgb(255, 255, 255); 1024 } 1025 .newsletter_row { 1026 background-color: rgb(32, 80, 129); 1027 color: rgb(255, 255, 255); 1028 } 1029 .newsletter_row input[type="submit"],.newsletter_footer_button { 1030 background-color: rgba(30, 166, 154,0.97); 1031 color: rgb(255, 255, 255); 1032 border-color: rgb(30, 166, 154); 1033 } 1034 .newsletter_row input[type="submit"]:hover,.newsletter_row input[type="submit"]:focus,.newsletter_footer_button:hover,.newsletter_footer_button:focus { 1035 background-color: rgb(30, 166, 154); 1036 color: rgb(255, 255, 255); 1037 } 1038 .newsletter_button_left { 1039 border-right: 1px solid rgba(255, 255, 255,0.2); 1040 } 1041 .newsletter_button_right { 1042 border-left: 1px solid rgba(255, 255, 255,0.2); 1043 } 1044 .newsletter_row small.help-block { 1045 background: rgb(255, 255, 255); 1046 margin-top: -5px; 1047 float: left; 1048 padding: 8px; 1049 border-radius: 1px; 1050 color: rgb(32, 80, 129); 1051 text-transform: capitalize; 1052 } 1053 .newsletter_row .has-success .checkbox,.newsletter_row .has-error .checkbox{ 1054 color: rgb(255, 255, 255); 1055 } 1056 @media only screen and (max-width: 767px) { 1057 .newsletter_button_right,.newsletter_button_left{ 1058 border: none; 1059 margin: 5px 0; 1060 } 1061 } 1062 1063 /* Font Sizes */ 1064 1065 .navbar-default .navbar-nav > li > a, .navbar-default .navbar-nav > li > span { 1066 font-size: 16px; 1067 } 1068 .header .logo { 1069 font-size: 34px; 1070 } 1071 .homepage_title h1, .homepage_settings h1 { 1072 letter-spacing: -1px; 1073 font-size: 60px; 1074 margin-bottom: 20px; 1075 } 1076 @media only screen and (max-width: 768px) { 1077 .homepage_title h1, .homepage_settings h1 {margin-bottom: 15px;} 1078 } 1079 .homepage_settings h2 { 1080 font-size: 28px; 1081 } 1082 1083 .ui-rangeSlider-bar{ 1084 background: rgb(255, 186, 8)!important; 1085 } 1086 1087 1088 1089 @media only screen and (max-width: 1024px){ 1090 .modal {margin-top: 40px;} 1091 } 1092 @media only screen and (max-width: 768px){ 1093 .modal {margin-top: 60px;} 1094 } 1095 1096 /* Calendar Styles */ 1097 1098 #cal-slide-content { 1099 color: rgb(85, 85, 85)!important; 1100 background-color: rgb(238, 238, 238)!important; 1101 -webkit-box-shadow: none!important; 1102 box-shadow: none!important; 1103 } 1104 #cal-slide-content a.event-item { 1105 color: rgb(85, 85, 85)!important; 1106 font-weight:bold!important; 1107 } 1108 #cal-slide-content a.event-item small { 1109 display: inline-block; 1110 } 1111 .cal-month-box, .cal-year-box, .cal-week-box { 1112 border: 1px solid rgb(255, 255, 255)!important; 1113 } 1114 .cal-year-box .row-fluid, .cal-month-box .cal-row-fluid { 1115 border-bottom: 1px solid rgb(255, 255, 255)!important; 1116 } 1117 .cal-year-box [class*="span"], .cal-month-box [class*="cal-cell"] { 1118 border-right: 1px solid rgb(255, 255, 255)!important; 1119 } 1120 .cal-year-box .row-fluid, .cal-row-fluid, #cal-day-box .cal-day-hour:nth-child(odd) { 1121 background-color: rgb(245, 247, 250)!important; 1122 } 1123 .cal-month-day span:not(.pull-right):not(.events-count-label):not(.events-label) { 1124 color: rgb(85, 85, 85)!important; 1125 } 1126 .cal-day-today span[data-cal-date] { 1127 color: rgb(41, 41, 41)!important; 1128 } 1129 .cal-year-box .row-fluid [class*="span"]:last-child, .cal-month-box .cal-row-fluid [class*="cal-cell"]:last-child { 1130 border: 0!important; 1131 } 1132 .cal-row-head { 1133 background: rgb(255, 255, 255)!important; 1134 } 1135 .day-highlight:hover, .day-highlight { 1136 background-color: rgb(255, 255, 255)!important; 1137 } 1138 .cal-event-list .event.pull-left { 1139 background-color: rgb(41, 41, 41)!important; 1140 opacity: 0.4; 1141 margin-top: 7px!important; 1142 } 1143 .cal-day-today { 1144 background-color: rgb(255, 255, 255)!important; 1145 } 1146 #cal-day-tick { 1147 border: 1px solid rgb(255, 255, 255)!important; 1148 background-color: rgb(255, 255, 255)!important; 1149 } 1150 .cal-day-weekend span[data-cal-date]{
1151 color: rgb(41, 41, 41)!important; 1152 } 1153 .rsDefault, .rsDefault .rsOverflow, .rsDefault .rsSlide, .rsDefault .rsVideoFrameHolder, .rsDefault .rsThumbs { 1154 border-radius: 10px; 1155 background: #151515!important; 1156 } 1157 .img_section .no-radius-bottom + .alert-secondary .rsDefault .rsSlide, .img_section .no-radius-bottom + .alert-secondary .rsDefault .rsOverflow { 1158 border-radius:0; 1159 } 1160 1161 #first_container .favorite, #first_container .fa.favorite { 1162 color: rgb(85, 85, 85); 1163 background: rgb(238, 238, 238); 1164 border: 1px solid rgb(238, 238, 238); 1165 white-space:nowrap!important; 1166 height:24px; 1167 padding:0 6px; 1168 border-radius:8px; 1169 } 1170 #first_container .favorite span, #first_container .fa.favorite span { 1171 font-family: 'Nunito'; 1172 white-space:nowrap!important; 1173 } 1174 #first_container .favoriteActive:not(.favorite.comments-count-badge), #first_container .fa.favoriteActive:not(.favorite.comments-count-badge .fa) { 1175 color: rgb(217, 83, 79); 1176 } 1177 #first_container .favorite::after, #first_container .fa.favorite::after { 1178 font-family: 'Nunito'; 1179 margin-left: 3px; 1180 } 1181 #first_container .favorite span, #first_container .fa.favorite span{ 1182 padding-left: 4px; 1183 font-family: 'Nunito'; 1184 font-size: 11px; 1185 letter-spacing:.5px; 1186 top:-1px; 1187 position:relative; 1188 font-weight:700; 1189 } 1190 #first_container .favorite span:empty, #first_container .fa.favorite span:empty { 1191 padding: 0; 1192 } 1193 #first_container .favorite .bookmark-number, #first_container .fa.favorite .bookmark-number { 1194 padding: 1px 0; 1195 border-radius: 100px; 1196 display: inline-block; 1197 font-weight: bold; 1198 min-width: 15px; 1199 font-size: .8em; 1200 vertical-align: bottom; 1201 height: 15px; 1202 line-height: 13px; 1203 margin-left: 3px; 1204 text-align: center; 1205 } 1206 #first_container .favorite.favoriteActive .bookmark-number:not(.comments-count-badge .bookmark-number), #first_container .fa.favorite.favoriteActive .bookmark-number { 1207 background: rgb(217, 83, 79); 1208 color: #fff; 1209 } 1210 1211 span.checkbox_value::after { 1212 content: ', '; 1213 } 1214 1215 span.checkbox_value:last-child::after { 1216 content: ''; 1217 } 1218 #first_container .member-profile-tabs .profile-tabs-nav { 1219 overflow-x: auto; 1220 overflow-y: hidden; 1221 display: flex; 1222 flex-direction: row 1223 } 1224 1225 #first_container .member-profile-tabs .profile-tabs-nav > li * { 1226 white-space: nowrap !important 1227 } 1228 1229 .member-profile-tabs .profile-tabs-nav::-webkit-scrollbar { 1230 display: none 1231 } 1232 1233 .member-profile-tabs .profile-tabs-nav { 1234 scrollbar-width: none 1235 } 1236 1237 .member-profile-tabs .tabs-container { 1238 display: flex; 1239 align-items: center; 1240 border-radius:8px 8px 0 0; 1241 } 1242 .member-profile-tabs .tabs-container > ul { 1243 border: none; 1244 } 1245 .member-profile-tabs .scroll-arrow { 1246 display: none; 1247 cursor: pointer; 1248 z-index: 2; 1249 padding: 0 15px; 1250 background-color: rgb(238, 238, 238); 1251 color: rgb(85, 85, 85); 1252 height: 41px; 1253 line-height: 42px; 1254 margin-top: 2px; 1255 margin-left: 5px; 1256 border-radius:4px; 1257 } 1258 1259 .member-profile-tabs .scroll-arrow.left-arrow { 1260 margin-right: -6px; 1261 } 1262 1263 .member-profile-tabs .scroll-arrow.right-arrow { 1264 margin-left: -10px; 1265 margin-right: 5px; 1266 } 1267 1268 .member_results .grid_element{ 1269 position:relative; 1270 overflow:hidden; 1271 display: inline-block; 1272 width:100%; 1273} 1274.member_results .grid_element::before { 1275 position: absolute; 1276 top: 24px; 1277 text-align: center; 1278 width: 200px; 1279 left: -62px; 1280 transform: rotate(-45deg); 1281 -webkit-transform: rotate(-45deg); 1282 z-index: 1; 1283 line-height: 1.2em; 1284 padding: 6px 0; 1285 font-weight: bold; 1286 letter-spacing: 1px; 1287} 1288@media only screen and (max-width: 767px) { 1289 .member_results .grid-container > hr { 1290 border-color: transparent; 1291 } 1292 .member_results .grid_element{ 1293 overflow:visible; 1294 } 1295 .member_results .grid_element::before { 1296 top: -19px!important; 1297 transform: rotate(0deg); 1298 -webkit-transform: rotate(0deg); 1299 font-size: 10px !important; 1300 letter-spacing: 0; 1301 width: auto; 1302 padding: 3px 6px; 1303 } 1304} 1305 1306 1307 .popover .popover-content img,.member_results .info_window img,.member_results .search_result_image, .featured-member-image img, .recent-member-image img, .member-review-image img, .member-profile-header > div:not(.member-badges) img, .review_photo, .contact-image, .member_result > div > div img, .member_sidebar .member_admin_sidemenu .img-thumbnail, .current-photo-container img, .current-logo-container img, .author-snapsh
1307ot .search_result_image, .saved-member { 1308 border-radius: 1000px!important; 1309 } 1310 1311 1312 1313 /* Homepage Sections Background Color Logic */ 1314 1315 1316 .homepage-section-1 { 1317 padding: 40px 0 40px; 1318 } 1319 1320 1321 .homepage-section-2 { 1322 padding: 40px 0 40px; 1323 } 1324 1325 1326 .homepage-section-3 { 1327 padding: 40px 0 40px; 1328 } 1329 1330 1331 .homepage-section-3 { 1332 background: rgb(245, 247, 250); 1333 } 1334 1335 1336 .homepage-section-4 { 1337 padding: 40px 0 40px; 1338 } 1339 1340 1341 .homepage-section-5 { 1342 padding: 40px 0 40px; 1343 } 1344 1345 1346 .homepage-section-5 { 1347 background: rgb(32, 80, 129); 1348 } 1349 1350 1351 .homepage-section-6 { 1352 padding: 40px 0 40px; 1353 } 1354 1355 1356 .homepage-section-6 { 1357 background: rgb(245, 247, 250); 1358 } 1359 1360 1361 .homepage-section-7 { 1362 padding: 40px 0 40px; 1363 } 1364 1365 1366 .homepage-section-8 { 1367 padding: 40px 0 40px; 1368 } 1369 1370 1371 .homepage-section-9 { 1372 padding: 40px 0 40px; 1373 } 1374 1375 1376 .homepage-section-10 { 1377 padding: 40px 0 40px; 1378 } 1379 1380 1381 .homepage-section-11 { 1382 padding: 40px 0 40px; 1383 } 1384 1385 1386 .homepage-section-12 { 1387 padding: 40px 0 40px; 1388 } 1389 1390 1391 .homepage-section-13 { 1392 padding: 40px 0 40px; 1393 } 1394 1395 1396 .homepage-section-14 { 1397 padding: 40px 0 40px; 1398 } 1399 1400 1401 .homepage-section-15 { 1402 padding: 40px 0 40px; 1403 } 1404 1405 1406 /* Additional Settings */ 1407 1408 1409 /* Streaming Widgets Title Settings */ 1410 1411 .streaming-title { 1412 text-align: center; 1413 font-size: 48px; 1414 line-height:1.5em; 1415 font-weight: 300; 1416 font-family: 'Ubuntu'; 1417 padding-bottom: 50px; 1418 } 1419 1420 @media only screen and (max-width: 990px) { 1421 .streaming-title { 1422 line-height:1.1em; 1423 } 1424 } 1425 1426 .streaming-title + hr { 1427 display: none; 1428 } 1429 1430 .homepage-join-module .module h2:first-of-type { 1431 color: rgb(62, 62, 62); 1432 } 1433 1434 .homepage-join-module .module{ 1435 background: rgb(250, 250, 250); 1436 border-color: rgb(245, 247, 250); 1437 } 1438 1439 .homepage-about-module .module h2:first-of-type { 1440 color: rgb(62, 62, 62); 1441 } 1442 1443 .homepage-about-module .module{ 1444 background: rgb(250, 250, 250); 1445 border-color: rgb(245, 247, 250); 1446 1447 } 1448 1449 .the-post-description > :is(h2, h3, h4, h5):not(:first-child) { 1450 font-weight: 600; 1451 margin-top: 20px; 1452 } 1453 1454 /* Keep: Ensure ul/ol respect padding and margins */ 1455 .the-post-description > :is(ul, ol) { 1456 display: flow-root; 1457 } 1458 .the-post-description li { 1459 margin-bottom: 8px; 1460 } 1461 1462 .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-ch
1462ained, select#country-chained, select#state-chained, select#country-chained-2, select#state-chained-2, select#profession_id, [name^="bd_phone_country_code"] { 1463 border-radius: 100px!important; 1464 } 1465 1466 .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 { 1467 box-shadow: 0 8px 8px -4px #0000001a,0 4px 4px -4px #0000001a; 1468 } 1469 1470 .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 { 1471 border-radius:1000px!important; 1472 } 1473 1474 .img-rounded img, img.fr-dib.img-rounded{ 1475 border-radius: 10px!important; 1476 } 1477 1478 /* Google Translate Module */ 1479 .skiptranslate{font-size:0} 1480 .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} 1481 .skiptranslate.goog-te-gadget span,img.goog-te-gadget-icon{display:none!important} 1482 .goog-te-gadget .goog-te-combo{margin-bottom:-4px} 1483 .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)} 1484 @media only screen and (max-width: 1100px) { 1485 .skiptranslate:not(.skiptranslate[style="display: none;"]){height:39px} 1486 .skiptranslate:not(.skiptranslate[style="display: none;"]) ~ .header{margin-top:10px!important} 1487 .skiptranslate:not(.skiptranslate[style="display: none;"]) ~ .announcement-bar{margin-top:10px} 1488 .skiptranslate:not(.skiptranslate[style="display: none;"]) ~ .announcement-bar ~ .header{margin-top:0!important} 1489 .skiptranslate:not(.skiptranslate[style="display: none;"]) ~ .header .mobile-main-menu{top:89px!important;height:calc(100% - 90px)!important} 1490 .skiptranslate:not(.skiptranslate[style="display: none;"]) ~ .header .navbar{top:39px} 1491 .skiptranslate:not(.skiptranslate[style="display: none;"]) ~ #first_container .member_sidebar.open{top: 89px;} 1492 } 1493 @media only screen and (max-width: 767px) { 1494 .skiptranslate:not(.skiptranslate[style="display: none;"]) ~ .announcement-bar.hidden-xs ~ .header{margin-top:10px!important} 1495 } 1496 1497 1498 1499</style> 1500 1501<!--GOOGLE TAG MANAGER CODE--> <!-- ON-PAGE CSS FUNCTIONS --> 1502 <style type="text/css"> 1503 .btn_get_listed { 1504 padding: 8px 12px; 1505} 1506 1507/* Home Page Hero Title Text */ 1508h1.sm-text-center { 1509 display: grid; 1510 grid-template-columns: auto 1fr; 1511 align-items: center; 1512 font-family: Ubuntu, sans-serif; 1513 font-size: 24px; 1514 text-align: left; 1515 margin: 0; 1516 padding-bottom: 40px; 1517 letter-spacing: 1px; 1518} 1519.line1, .line2 { 1520 grid-column: 1; 1521 font-size: 34px; 1522 letter-spacing:0.5px; 1523 padding: 5px 0; 1524 text-align: right; 1525} 1526 1527.trainers { 1528 grid-row: 1 / 3; 1529 grid-column: 2; 1530 font-size: 85px; 1531 font-weight: 400; 1532 padding-left: 15px; 1533} 1534 1535.mobile-text { 1536 display: none; 1537} 1538 1539/* Media query for mobile devices */ 1540@media (max-width: 768px) { 1541 1542 .mobile-text { 1543 display: block; 1544 font-size: 36px; 1545 font-weight: 400; 1546 padding: 10px; 1547 } 1548 1549 .line1, .line2, .trainers { 1550 display: none; 1551 } 1552} 1553 1554.form-group { 1555 margin-bottom: 14px; 1556} 1557 1558/* Grid styling for the checkbox list */ 1559.checkbox-group { 1560 display: grid; 1561 flex-direction: column; 1562 grid-template-columns: repeat(5, 1fr); /* 4 columns by default */ 1563 gap: 2px; 1564} 1565 1566 1567 1568 1569p.location_main { 1570 text-transform: uppercase; 1571 color: #666; 1572 font-size: 14px; 1573 font-weight: bold; 1574} 1575 1576p.location_main:first-of-type { 1577 padding-top: 2px; 1578} 1579 1580.checkbox-group label { 1581 display: block; 1582 font-weight: 400; 1583 margin-bottom: 2px; 1584} 1585 1586/* Optional styling for checkboxes */ 1587input[type="checkbox"] { 1588 margin-right: 2px; 1589} 1590 1591.delivery-locations-helpblock { 1592 padding-bottom: 20px; 1593} 1594 1595/* Media query for mobile: 2 columns on smaller screens */ 1596@media (max-width: 768px) { 1597 .checkbox-group { 1598 grid-template-columns: repeat(2, 1fr); /* 2 columns on mobile */ 1599 } 1600} </style> 1601 <div class="header"> 1602 <div class="container"> 1603 <div class="row header-main-row"> 1604 <style type='text/css'> .logo-text:has(.logo_title:empty) { 1605 display:none 1606} </style><div id="website_logo" class="col-md-5 xs-nopad xs-hpad sm-text-center xs-bmargin header-left-container"> 1607 <a class="logo logo-image inline-block vpad sm-nopad sm-tmargin" href="https://www.thetrainerdirectory.com" title="The Trainer Directory"> 1608 <img width="320" height="82" src="/images/ttd_logo.png" alt="The Trainer Directory"> 1609 </a> 1610 <div class="clearfix"></div> 1611</div> 1612 <style type='text/css'> body input.tt-hint,body input.form-control.normal-autosuggest-input.tt-query { 1613 background-color: white !important; 1614} 1615.mini-nav:not(:has(li)) { 1616 display: none!important; 1617} 1618/* Parent Container - Main List */ 1619.mini-nav li:has(ul) { 1620 position: relative; 1621 border-radius: 8px 8px 0 0; 1622} 1623.mini-nav > li:has(ul) { 1624 padding-left: 0; 1625 padding-right: 0; 1626 background: rgb(245, 247, 250); 1627} 1628.mini-nav > li:has(ul) > a:not(.btn), .mini-nav > li:has(ul) > span { 1629 padding: 10px 15px; 1630 margin: 0!important; 1631} 1632.mini-nav > li:hover:has(ul), .mini-nav > li:hover:has(ul) { 1633 box-shadow: 0 -1px 3px rgba(41, 41, 41,0.25); 1634} 1635/* Parent Links */ 1636.mini-nav > li > a:not(.btn), .mini-nav > li > span:not(.btn) { 1637 display:inline-block; 1638 border-radius: 8px 8px 0 0; 1639} 1640.mini-nav > li:hover > a:not(.btn), .mini-nav > li:hover > span { 1641 background: rgb(245, 247, 250); 1642 display: inline-block; 1643 position: relative; 1644 z-index: 1000; 1645} 1646/* First Level Dropdowns */ 1647.mini-nav li ul { 1648 background: rgb(245, 247, 250); 1649 box-shadow: 0 0px 3px rgba(41, 41, 41,0.25), 0 5px 5px 5px rgba(41, 41, 41,0.05); 1650 text-align: left;
1651 display: none; 1652 border-radius: 0 8px 8px 8px; 1653 list-style: none; 1654 padding: 10px; 1655 position: absolute; 1656 white-space: nowrap; 1657 min-width: 130%; 1658 width: auto; 1659 top: 100%; 1660 left: 0; 1661 z-index: 999; 1662 margin-top: -1px; 1663} 1664.mini-nav li:hover > ul { 1665 display: block; 1666} 1667/* First Level Dropdown Items */ 1668.mini-nav li ul li { 1669 position: relative; 1670 display: block; 1671 width: 100%; 1672} 1673.mini-nav li ul li a, .mini-nav li ul li span { 1674 font-size: 14.8px !important; 1675 display: block; 1676 font-weight: 400; 1677 padding: 8px 12px; 1678 border-radius: 8px; 1679 text-decoration: none; 1680 width: 100%; 1681} 1682.mini-nav li ul li a:hover, .mini-nav li ul li span:hover { 1683 box-shadow: 0 0 0 25px rgba(41, 41, 41,0.05) inset; 1684} 1685/* Second Level Dropdowns */ 1686.mini-nav li ul li ul { 1687 display: none; 1688 position: absolute; 1689 top: 0; 1690 left: 100%; 1691 margin: 0; 1692 border-radius: 8px; 1693} 1694.mini-nav li ul li:hover > ul { 1695 display: block; 1696} 1697/* Edge Positioning - Last Child Dropdowns */ 1698.mini-nav > li:last-child ul { 1699 right: 0; 1700 left: auto; 1701 border-radius: 8px 0 8px 8px; 1702} 1703.mini-nav > li:last-child ul li ul { 1704 right: 100%; 1705 left: auto; 1706} 1707/* Flex Spacing Utility */ 1708.mini-nav.mini-nav-flex-spaced { 1709 display: flex; 1710 justify-content: space-between; 1711 align-items: center; 1712 flex-wrap: wrap; 1713 row-gap: 0;
1714} 1715.mini-nav.mini-nav-flex-spaced > li { 1716 flex: none; 1717 padding: 0; 1718 margin: 2px 0; 1719 order: 2; 1720} 1721.mini-nav.mini-nav-flex-spaced > li.header-member-account-links, 1722.mini-nav:has(li ul) > li.header-member-account-links { 1723 order: 1; 1724 margin-left: auto; 1725 width: 100%; 1726 margin-bottom: 10px; 1727} 1728.logged-in-member-header .mini-nav.mini-nav-flex-spaced.list-inline > li { 1729 line-height: 1em; 1730 min-height: 0; 1731} 1732@media (min-width: 992px) { 1733 .header-main-row { 1734 display: flex; 1735 align-items: center; 1736 flex-wrap: wrap; 1737 } 1738} 1739@media (max-width: 991px) { 1740 .mini-nav.mini-nav-flex-spaced { 1741 justify-content: center; 1742 } 1743 .mini-nav.mini-nav-flex-spaced > li { 1744 margin-left: 5px !important; 1745 margin-right: 5px !important; 1746 } 1747} </style><div class="col-md-7 text-right sm-text-center header-right-container nolpad xs-hpad"> 1748 <ul class="mini-nav nobmargin list-inline xs-nopad xs-tmargin tpad"> 1749 <li class='bmargin xs-nomargin'><a href='/about/contact' id='link320' class='hpad bmargin'>Contact Us</a></li><li class='bmargin xs-nomargin'><a href='/login' id='link321' class='rpad bmargin'>Member Login</a></li><li class='bmargin norpad xs-nopad xs-vmargin'><a href='/join' id='link322' class='btn btn_get_listed bold'>Register as a Trainer</a></li> </ul> 1750 <div class="clearfix"></div> 1751 <form action="/search_results" name="frm1" class="form-inline website-search"> 1752 <div class="input-group input-group-sm bmargin sm-autosuggest"> 1753 <span class="input-group-addon"><i class="fa fa-search"></i></span> 1754 <input type="text" 1755 placeholder="Name or Keyword" value="" name="q" 1756 class="member_search form-control input-sm" autocomplete="off"> 1757 </div> 1758 <div class="input-group input-group-sm bmargin"> 1759 <span class="input-group-addon"><i class="fa fa-location-arrow"></i></span> 1760 <input type="text" autocomplete="off" placeholder="City or Post Code" 1761 value="" id="location_google_maps_header" name="location_value" 1762 class="googleSuggest googleLocation form-control"> 1763 </div> 1764 <input type="submit" value="Search" class="btn btn-sm btn_search bmargin xs-btn-block bold"> 1765 </form> 1766 </div> 1767 </div> 1768 </div> 1769 <style type='text/css'> .mobile-main-menu .hasChildren span a { 1770 padding: 0px; 1771} 1772 1773.user_sidebar > img { 1774 width: 32px; 1775 height: 32px; 1776 position: absolute; 1777 z-index: 10; 1778 border-radius: 100px; 1779 top: -1px; 1780 object-fit: cover; 1781 left: -10px; 1782 background: rgb(238, 238, 238); 1783} 1784#member_sidebar_toggle img+.fa { 1785 display: none; 1786} 1787.main_menu, .user_sidebar, .compact-mobile-search { 1788 padding: 5px 8px; 1789 margin-right:0; 1790 min-height: 33.0333px; 1791 min-width: 38.116px; 1792} 1793.main_menu i, .user_sidebar i { 1794 font-size: 16px; 1795} 1796.navbar-nav li { 1797 float: none!Important; 1798} 1799.navbar-default{ 1800 -webkit-transition: all .6s ease-in-out; 1801 -moz-transition: all .6s ease-in-out; 1802 -o-transition: all .6s ease-in-out; 1803 transition: all .6s ease-in-out; 1804} 1805.transparent_menu { 1806 background-color: rgba(0, 45, 98,0.95)!important; 1807} 1808@media only screen and (max-width: 991px) { 1809 #popover {display: none} 1810} 1811@media only screen and (max-width: 1100px){ 1812 .mobile-main-menu{display:block!important} 1813 .navbar-toggle {display: block} 1814 #bs-main_menu .nav {display: none!important} 1815} 1816.mobile-main-menu { 1817 position: fixed; 1818 height: calc(100% - 50px)!important; 1819 width: 250px; 1820 background: rgb(0, 45, 98); 1821 z-index: 99999; 1822 right: -250px; 1823 top: 50px; 1824 display: none; 1825 -webkit-transition: all .6s ease-in-out; 1826 -moz-transition: all .6s ease-in-out; 1827 -o-transition: all .6s ease-in-out; 1828 transition: all .6s ease-in-out; 1829 overflow-y: auto!important; 1830 overflow-x: hidden!important; 1831} 1832.mobile-main-menu ul li i { 1833 color: rgb(255, 255, 255); 1834 cursor: pointer; 1835 float: right; 1836 padding: 13px; 1837} 1838.mobile-main-menu.opened{ 1839 right: 0px!important; 1840} 1841.mobile-main-menu ul li a, .mobile-main-menu ul li span { 1842 display: inline-block; 1843 float: left; 1844 -webkit-touch-callout: none; 1845 -webkit-user-select: none; 1846 -khtml-user-select: none; 1847 -moz-user-select: none; 1848 -ms-user-select: none; 1849 user-select: none; 1850 padding: 10px 0px; 1851 width: 80%; 1852 width: calc(100% - 40px); 1853} 1854.mobile-main-menu .sidebar-nav li ul { 1855 height: 0px; 1856 overflow: hidden; 1857 list-style: none; 1858 color: rgb(255, 255, 255); 1859 padding-left: 10px; 1860} 1861.mobile-main-menu .sidebar-nav li.sub_open > ul{ 1862 height: 100%; 1863} 1864.mobile-main-menu ul.sidebar-nav { 1865 position: absolute; 1866 width: 250px; 1867 margin: 0; 1868 padding: 0; 1869 list-style: none; 1870 font-size: 14px; 1871} 1872.mobile-main-menu .sidebar-nav > li { 1873 display: block; 1874 line-height: 20px; 1875 padding: 0 15px 0 20px; 1876} 1877.mobile-main-menu .sidebar-nav li a, .mobile-main-menu .sidebar-nav li span { 1878 text-decoration: none; 1879 color: rgb(255, 255, 255); 1880 padding-left:10px; 1881} 1882.mobile-main-menu .sidebar-nav li a i, .mobile-main-menu .sidebar-nav li span i { 1883 display: none; 1884} 1885 1886 </style><div class="mobile-main-menu"> 1887 <ul class="sidebar-nav"> 1888 <li class=''><a href='/home' id='link344'>
1888Home</a></li><li class=''><a href='/about' id='link346'>About</a></li><li class=''><a href='/search_results' id='link345'>Member Directory</a></li><li class=''><a href='/blog' id='link347'>The Trainer Hub</a></li><li class=''><a href='/events' id='link352'>Upcoming Events</a></li><li class=''><a href='/join' id='link348'>Join Today</a></li> </ul> 1889</div> 1890<nav class="navbar navbar-default "> 1891 <div class="container container-fluid"> 1892 1893 <div class="navbar-header"> 1894 <button type="button" class="navbar-toggle collapsed main_menu" data-toggle="collapse" aria-label="main_menu"> 1895 <i class="fa fa-bars fa-fw"></i> 1896 </button> 1897 1898 1899 1900 </div> 1901 1902 1903 <div class="tablet-menu collapse navbar-collapse nopad" id="bs-main_menu"> 1904 <ul class="tablet-menu-ul nav navbar-nav nav-justified"> 1905 <li class=''><a href='/home' id='link344'>Home</a></li><li class=''><a href='/about' id='link346'>About</a></li><li class=''><a href='/search_results' id='link345'>Member Directory</a></li><li class=''><a href='/blog' id='link347'>The Trainer Hub</a></li><li class=''><a href='/events' id='link352'>Upcoming Events</a></li><li class=''><a href='/join' id='link348'>Join Today</a></li> </ul> 1906 </div> 1907 </div> 1908</nav> 1909<!--CSS IF MENU IS FIXED TOP--> 1910 1911</div> 1912<div class="clearfix"></div> 1913<!-- Begin Content --> 1914<main role="main" id="main-content"> 1915<div id="first_container" class="content-container fr-view"> 1916 <div class="container"> 1917 <div class="clearfix body-content"></div> 1918 <style type='text/css'> div#map-bounds { 1919 width: 100%; 1920 height: 600px; 1921 display: block; 1922} 1923.gsc-control-cse.gsc-control-cse-en { 1924 border-radius: 4px; 1925 margin-top: 20px; 1926 padding-top: 0; 1927} 1928.mid_section .btn-sm.btn-block { 1929 width:auto; 1930 display:inline-block 1931} 1932.tab-content #results > div > hr { 1933 display: none; 1934} </style> <div class="clearfix"></div> 1935 <div class="row content_w_sidebar member_results"> 1936 1937 <div class='col-md-9 col-md-push-3 main-container'><style type='text/css'> .views { 1938 margin-top: -1px!important; 1939} 1940.member-search-result-filters + .clearfix + div > hr { 1941 margin-top: 10px; 1942} 1943@media only screen and (max-width: 767px) { 1944 .member_results .sort-members-select, .member_results .overall_rating_filter { 1945 float: left; 1946 width: 150px; 1947 } 1948} </style> 1949 <div class="col-xs-12 col-sm-4 fpad-sm nohpad member-search-result-count-container"> 1950 Showing 1 - <span class="current__amount__js">7</span> of 1951 1952 <span class="total__js">7</span> Results 1953 </div> 1954 <div class="col-xs-12 col-sm-8 nopad text-right bmargin member-search-result-filters"> 1955 <div class="form-inline"> 1956 <div class="form-group sort-members-select"> 1957 <select class="form-control pull-right input-sm" name=sort 1958 onchange="window.location='/search_results?sort='+this.value;" id="sortbox"> 1959 <option value="" selected>Sort Results 1960 </option> 1961 1962 <option value="reviews" > 1963 Sort by Most Reviews 1964 </option> 1965 <option value="name ASC" > 1966 Sort by Name A-Z 1967 </option> 1968 <option value="name DESC" > 1969 Sort by Name Z-A 1970 </option> 1971 <option value="last_name_asc" > 1972 Sort By Last Name A-Z 1973 </option> 1974 <option value="last_name_desc" > 1975 Sort By Last Name Z-A 1976 </option> 1977 </select> 1978 </div> 1979 <div class="form-group"> 1980 <style type='text/css'> @media (min-width: 961px) {
1981 body:not(.bdGridDone) .grid-container:not(.row) { opacity: 0; } 1982 } 1983 1984.search_result.grid { 1985 display: grid; 1986} 1987.views > i { 1988 font-size: 18px; 1989 margin-left: 5px; 1990 border-radius: 4px; 1991 cursor: pointer; 1992 width: 30px; 1993 height: 30px; 1994 line-height: 30px; 1995 display: inline-flex; 1996 align-items: center; 1997 justify-content: center; 1998 text-align: center; 1999 vertical-align: top; 2000 transition: all 100ms linear 0ms; 2001} 2002a.gridA { 2003 font-size: 18px; 2004 text-align: center; 2005 margin: 10px 0; 2006 display: block; 2007} 2008.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 { 2009 display:none; 2010} 2011.visible-lg { 2012 word-wrap: break-word; 2013} 2014.grid .post-location-snippet b + span { 2015 display: block; 2016} 2017@media only screen and (max-width: 767px) { 2018 .member_results .sort-members-select, .member_results .overall_rating_filter { 2019 float: left; 2020 width: 150px; 2021 } 2022} </style> <div class='views pull-right '> 2023 <i class='fa bi bi-list-task activeView listView'></i> 2024 <i class='fa bi bi-grid js-click gridView hidden-xs'></i> 2025 <i class="fa bi bi-geo-alt mapView"></i> 2026 </div> 2027 </div> 2028 </div> 2029 <div class="clearfix"></div> 2030 </div> 2031 <div class="clearfix"></div> 2032 2033 <div class="member_results_header"> 2034 <h1 class="bold nomargin">Trainer Directory</h1> 2035 </div> 2036 <div itemscope itemtype="https://schema.org/CollectionPage" itemid="https://www.thetrainerdirectory.com/search_results#entity"> 2037 <meta itemprop="name" content="Trainers - Find & Compare Professional Professionals"> 2038 <meta itemprop="headline" content="Trainer Directory"> 2039 <meta itemprop="description" content="Search our Professional database and connect with top rated Trainers."> 2040 <link itemprop="primaryImageOfPage" href="/images/ttd_logo.png"> 2041 <meta itemprop="keywords" content="Trainer Directory, The Trainer Directory, Trainer"> 2042 <meta itemprop="inLanguage" content="en-US"> 2043 <link itemprop="url" href="https://www.thetrainerdirectory.com/search_results"> 2044 <meta itemprop="mainEntityOfPage" content="https://www.thetrainerdirectory.com/search_results#page"> 2045 <meta itemprop="copyrightYear" content="2026"> 2046 <link itemprop="copyrightHolder" href="https://www.thetrainerdirectory.com/#organization"> 2047 <link itemprop="isPartOf" href="https://www.thetrainerdirectory.com/#website"> 2048 <link itemprop="publisher" href="https://www.thetrainerdirectory.com/#organization"> 2049 <div itemprop="mainEntity" itemscope itemtype="https://schema.org/ItemList" itemid="https://www.thetrainerdirectory.com/search_results#itemlist"> 2050 <meta itemprop="name" content="Trainer Directory"> 2051 <link itemprop="url" href="https://www.thetrainerdirectory.com/search_results"> 2052 <meta itemprop="description" content="Search our Professional database and connect with top rated Trainers."> 2053 <meta itemprop="mainEntityOfPage" content="https://www.thetrainerdirectory.com/search_results#page"> 2054 <meta itemprop="itemListOrder" content="http://schema.org/ItemListOrderAscending"> 2055 <meta itemprop="numberOfItems" content="7"> 2056 <hr> 2057<div class="grid-container"><div class="row-fluid member_results level_5 search_result clearfix" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem"> 2058 <meta itemprop="name" content="Alison Rood"> 2059 <link itemprop="url" href="https://www.thetrainerdirectory.com/search_results"> 2060 <meta itemprop="position" content="1"> 2061 <div itemprop="item" itemscope itemtype="https://schema.org/LocalBusiness" itemid="https://www.thetrainerdirectory.com/top-level-category/alison-rood#entity"> 2062 <meta itemprop="name" content="Alison Rood"> 2063 <link itemprop="url" href="https://www.thetrainerdirectory.com/top-level-category/alison-rood"> 2064 <link itemprop="image" href="https://www.thetrainerdirectory.com/pictures/profile/pimage-25-255-photo.jpg"> 2065 <meta itemprop="priceRange" content="$$"> 2066 <meta itemprop="telephone" content="N/A"> 2067 <meta itemprop="description" content="Founder and Director of Alison Rood Ltd - Workplace wellness. Coach and trainer."> 2068 <div itemprop="address" itemscope itemtype="https://schema.org/PostalAddress"> 2069 <meta itemprop="streetAddress" content="N/A"> 2070 <meta itemprop="addressLocality" content="N/A"> 2071 <meta itemprop="addressRegion" content="N/A"> 2072 <meta itemprop="postalCode" content="E14 9XA"> 2073 <meta itemprop="addressCountry" content="GB"> 2074 </div> 2075 <div itemprop="geo" itemscope itemtype="https://schema.org/GeoCoordinates"> 2076 <meta itemprop="latitude" content="0.00000000"> 2077 <meta itemprop="longitude" content="0.00000000"> 2078 </div> 2079 <link itemprop="mainEntityOfPage" href="https://www.thetrainerdirectory.com/top-level-category/alison-rood#page"> 2080 </div> 2081 <div class="grid_element"> 2082 <div class="img_section col-xs-2 nopad"> 2083 <a title="Alison Rood - Trainer" href="/top-level-category/alison-rood"> 2084 <img class="search_result_image img-rounded center-block" loading="auto" width="400" height="400" alt="Alison Rood" src="https://www.thetrainerdirectory.com/pictures/profile/pimage-25-255-photo.jpg" /> 2085 2086 </a> 2087 </div> 2088 <div class="mid_section col-xs-10 col-sm-7 norpad">
2089 <span class="postItem" data-userid="25" data-datatype="10" data-dataid="10" data-postid="0"></span><button class="item-post-list-0 favorite fa fa-heart" aria-label="SAVE" data-count="0" data-postid="0" data-state="0" data-activefeature="1" data-activefavorite="Free Membership" data-toggle="modal" data-target="#myModal" ><span id='bookmark-content'>SAVE</span> <span class='' id='number-0'></span></button> <a class="center-block" title="Alison Rood" href="/top-level-category/alison-rood"> 2090 <span class="h3 bold inline-block nomargin member-search-full-name notranslate"> 2091 Alison Rood </span> 2092 <span class="hidden-xs inline-block member-search-company notranslate"> 2093 Alison Rood Ltd </span> 2094 </a> 2095 <div class="clearfix fpad-sm nobpad"></div> 2096 <div class="clearfix fpad-sm nobpad"></div> 2097 2098 2099 <p class="small nomargin member-search-description"> 2100 Founder and Director of Alison Rood Ltd - Workplace wellness. Coach and trainer. </p> 2101 </div> 2102 <div class="info_section hidden-xs col-sm-3 norpad"> 2103 <div class="module nomargin fpad-md text-center"> 2104 <a 2105 title="View Listing - Alison Rood" 2106 aria-label="View Listing - Alison Rood" 2107 class="btn btn-sm btn-primary btn-block bold search_view_listing_button" 2108 href="/top-level-category/alison-rood">View Listing</a> 2109 <div class="clearfix fpad-sm nobpad"></div> 2110 <a 2111 title="Send Message - Alison Rood" 2112 aria-label="Send Message - Alison Rood" 2113 class="btn btn-sm btn-secondary btn-block bold search_contact_now_button" 2114 href="/top-level-category/alison-rood/connect">Send Message</a> 2115 <div class="clearfix"></div> 2116 </div> 2117 </div> 2118 <div class="clearfix"></div> 2119 </div> 2120</div> 2121<div class="clearfix"></div> 2122<hr> 2123<span class="google-pin-location" id="google-pin" data-token="25"data-hideMessages="0" data-lat="0.00000000" data-lng="0.00000000" data-name="Alison Rood" data-filename="/top-level-category/alison-rood" data-photo="/pictures/profile/pimage-25-255-photo.jpg" data-phone="" data-addon="1"></span><div class="row-fluid member_results level_5 search_result clearfix" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem"> 2124 <meta itemprop="name" content="Chris Dudley"> 2125 <link itemprop="url" href="https://www.thetrainerdirectory.com/search_results"> 2126 <meta itemprop="position" content="2"> 2127 <div itemprop="item" itemscope itemtype="https://schema.org/LocalBusiness" itemid="https://www.thetrainerdirectory.com/united-kingdom/leeds/top-level-category/chris-dudley#entity"> 2128 <meta itemprop="name" content="Chris Dudley"> 2129 <link itemprop="url" href="https://www.thetrainerdirectory.com/united-kingdom/leeds/top-level-category/chris-dudley"> 2130 <link itemprop="image" href="https://www.thetrainerdirectory.com/pictures/profile/pimage-22-294-photo.png"> 2131 <meta itemprop="priceRange" content="$$"> 2132 <meta itemprop="telephone" content="07854637326"> 2133 <meta itemprop="description" content="Chris is an experienced and trusted associate trainer who collaborates with various training providers to deliver high-impact workshops both in person and online."> 2134 <div itemprop="address" itemscope itemtype="https://schema.org/PostalAddress"> 2135 <meta itemprop="streetAddress" content="63a Great George St"> 2136 <meta itemprop="addressLocality" content="Leeds"> 2137 <meta itemprop="addressRegion" content="England"> 2138 <meta itemprop="postalCode" content="LS1 3BB"> 2139 <meta itemprop="addressCountry" content="GB"> 2140 </div> 2141 <div itemprop="geo" itemscope itemtype="https://schema.org/GeoCoordinates"> 2142 <meta itemprop="latitude" content="53.80107440"> 2143 <meta itemprop="longitude" content="-1.55222100"> 2144 </div> 2145 <link itemprop="mainEntityOfPage" href="https://www.thetrainerdirectory.com/united-kingdom/leeds/top-level-category/chris-dudley#page"> 2146 </div> 2147 <div class="grid_element"> 2148 <div class="img_section col-xs-2 nopad"> 2149 <a title="Chris Dudley - Trainer" href="/united-kingdom/leeds/top-level-category/c
2149hris-dudley"> 2150 <img class="search_result_image img-rounded center-block" loading="auto" width="400" height="400" alt="Chris Dudley" src="https://www.thetrainerdirectory.com/pictures/profile/pimage-22-294-photo.png" /> 2151 2152 </a> 2153 </div> 2154 <div class="mid_section col-xs-10 col-sm-7 norpad"> 2155 <span class="postItem" data-userid="22" data-datatype="10" data-dataid="10" data-postid="0"></span><button class="item-post-list-0 favorite fa fa-heart" aria-label="SAVE" data-count="0" data-postid="0" data-state="0" data-activefeature="1" data-activefavorite="Free Membership" data-toggle="modal" data-target="#myModal" ><span id='bookmark-content'>SAVE</span> <span class='' id='number-0'></span></button> <a class="center-block" title="Chris Dudley" href="/united-kingdom/leeds/top-level-category/chris-dudley"> 2156 <span class="h3 bold inline-block nomargin member-search-full-name notranslate"> 2157 Chris Dudley </span> 2158 </a> 2159 <div class="clearfix fpad-sm nobpad"></div> 2160 <div class="clearfix fpad-sm nobpad"></div> 2161 2162 2163 <p class="small nomargin member-search-description"> 2164 Chris is an experienced and trusted associate trainer who collaborates with various training providers to deliver high-impact workshops both in person and online. </p> 2165 </div> 2166 <div class="info_section hidden-xs col-sm-3 norpad"> 2167 <div class="module nomargin fpad-md text-center"> 2168 <a 2169 title="View Listing - Chris Dudley" 2170 aria-label="View Listing - Chris Dudley" 2171 class="btn btn-sm btn-primary btn-block bold search_view_listing_button" 2172 href="/united-kingdom/leeds/top-level-category/chris-dudley">View Listing</a> 2173 <div class="clearfix fpad-sm nobpad"></div> 2174 <a 2175 title="Send Message - Chris Dudley" 2176 aria-label="Send Message - Chris Dudley" 2177 class="btn btn-sm btn-secondary btn-block bold search_contact_now_button" 2178 href="/united-kingdom/leeds/top-level-category/chris-dudley/connect">Send Message</a> 2179 <div class="clearfix"></div> 2180 </div> 2181 </div> 2182 <div class="clearfix"></div> 2183 </div> 2184</div> 2185<div class="clearfix"></div> 2186<hr> 2187<span class="google-pin-location" id="google-pin" data-token="22"data-hideMessages="0" data-lat="53.80107440" data-lng="-1.55222100" data-name="Chris Dudley" data-filename="/united-kingdom/leeds/top-level-category/chris-dudley" data-photo="/pictures/profile/pimage-22-294-photo.png" data-phone="" data-addon="1"></span><div class="row-fluid member_results level_5 search_result clearfix" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem"> 2188 <meta itemprop="name" content="Dionne Lewis-Reid"> 2189 <link itemprop="url" href="https://www.thetrainerdirectory.com/search_results"> 2190 <meta itemprop="position" content="3"> 2191 <div itemprop="item" itemscope itemtype="https://schema.org/LocalBusiness" itemid="https://www.thetrainerdirectory.com/london/top-level-category/dionne-lewis-reid#entity"> 2192 <meta itemprop="name" content="Dionne Lewis-Reid"> 2193 <link itemprop="url" href="https://www.thetrainerdirectory.com/london/top-level-category/dionne-lewis-reid"> 2194 <link itemprop="image" href="https://www.thetrainerdirectory.com/pictures/profile/pimage-41-264-photo.jpg"> 2195 <meta itemprop="priceRange" content="$$"> 2196 <meta itemprop="telephone" content="N/A"> 2197 <meta itemprop="description" content="Dionne is a specialist in EDI, conflict resolution, and outplacement, helping organisations and individuals navigate change with fairness, empathy, and impact."> 2198 <div itemprop="address" itemscope itemtype="https://schema.org/PostalAddress"> 2199 <meta itemprop="streetAddress" content="56 Falkland Park Avenue"> 2200 <meta itemprop="addressLocality" content="London"> 2201 <meta itemprop="addressRegion" content="N/A"> 2202 <meta itemprop="postalCode" content="SE25 6SH"> 2203 <meta itemprop="addressCountry" content="GB"> 2204 </div> 2205 <div itemprop="geo" itemscope itemtype="https://schema.org/GeoCoordinates"> 2206 <meta itemprop="latitude" content="0.00000000"> 2207 <meta itemprop="longitude" content="0.00000000"> 2208 </div> 2209 <link itemprop="mainEntityOfPage" href="https://www.thetrainerdirectory.com/london/top-level-category/dionne-lewis-reid#page"> 2210 </div> 2211 <div class="grid_element"> 2212 <div class="img_section col-xs-2 nopad"> 2213 <a title="Dionne Lewis-Reid - Trainer" href="/london/top-level-category/dionne-lewis-reid"> 2214 <img class="search_result_image img-rounded center-block" loading="auto" width="400" height="400" alt="Dionne Lewis-Reid" src="https://www.thetrainerdirectory.com/pictures/profile/pimage-41-264-photo.jpg" /> 2215 2216 </a> 2217 </div> 2218 <div class="mid_section col-xs-10 col-sm-7 norpad">
2219 <span class="postItem" data-userid="41" data-datatype="10" data-dataid="10" data-postid="0"></span><button class="item-post-list-0 favorite fa fa-heart" aria-label="SAVE" data-count="0" data-postid="0" data-state="0" data-activefeature="1" data-activefavorite="Free Membership" data-toggle="modal" data-target="#myModal" ><span id='bookmark-content'>SAVE</span> <span class='' id='number-0'></span></button> <a class="center-block" title="Dionne Lewis-Reid" href="/london/top-level-category/dionne-lewis-reid"> 2220 <span class="h3 bold inline-block nomargin member-search-full-name notranslate"> 2221 Dionne Lewis-Reid </span> 2222 <span class="hidden-xs inline-block member-search-company notranslate"> 2223 Lewis-Reid Ltd </span> 2224 </a> 2225 <div class="clearfix fpad-sm nobpad"></div> 2226 <div class="clearfix fpad-sm nobpad"></div> 2227 2228 2229 <p class="small nomargin member-search-description"> 2230 Dionne is a specialist in EDI, conflict resolution, and outplacement, helping organisations and individuals navigate change with fairness, empathy, and impact. </p> 2231 </div> 2232 <div class="info_section hidden-xs col-sm-3 norpad"> 2233 <div class="module nomargin fpad-md text-center"> 2234 <a 2235 title="View Listing - Dionne Lewis-Reid" 2236 aria-label="View Listing - Dionne Lewis-Reid" 2237 class="btn btn-sm btn-primary btn-block bold search_view_listing_button" 2238 href="/london/top-level-category/dionne-lewis-reid">View Listing</a> 2239 <div class="clearfix fpad-sm nobpad"></div> 2240 <a 2241 title="Send Message - Dionne Lewis-Reid" 2242 aria-label="Send Message - Dionne Lewis-Reid" 2243 class="btn btn-sm btn-secondary btn-block bold search_contact_now_button" 2244 href="/london/top-level-category/dionne-lewis-reid/connect">Send Message</a> 2245 <div class="clearfix"></div> 2246 </div> 2247 </div> 2248 <div class="clearfix"></div> 2249 </div> 2250</div> 2251<div class="clearfix"></div> 2252<hr> 2253<span class="google-pin-location" id="google-pin" data-token="41"data-hideMessages="0" data-lat="0.00000000" data-lng="0.00000000" data-name="Dionne Lewis-Reid" data-filename="/london/top-level-category/dionne-lewis-reid" data-photo="/pictures/profile/pimage-41-264-photo.jpg" data-phone="" data-addon="1"></span><div class="row-fluid member_results level_5 search_result clearfix" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem"> 2254 <meta itemprop="name" content="Laure Goubau"> 2255 <link itemprop="url" href="https://www.thetrainerdirectory.com/search_results"> 2256 <meta itemprop="position" content="4"> 2257 <div itemprop="item" itemscope itemtype="https://schema.org/LocalBusiness" itemid="https://www.thetrainerdirectory.com/top-level-category/laure-goubau#entity"> 2258 <meta itemprop="name" content="Laure Goubau"> 2259 <link itemprop="url" href="https://www.thetrainerdirectory.com/top-level-category/laure-goubau"> 2260 <link itemprop="image" href="https://www.thetrainerdirectory.com/pictures/profile/pimage-47-254-photo.jpg"> 2261 <meta itemprop="priceRange" content="$$"> 2262 <meta itemprop="telephone" content="N/A"> 2263 <meta itemprop="description" content="Laure Goubau is an Executive Coach and Leadership Development Expert, and the Founder & CEO of Gloria Coach."> 2264 <div itemprop="address" itemscope itemtype="https://schema.org/PostalAddress"> 2265 <meta itemprop="streetAddress" content="Montreal, Quebec, Canada"> 2266 <meta itemprop="addressLocality" content="N/A"> 2267 <meta itemprop="addressRegion" content="N/A"> 2268 <meta itemprop="postalCode" content="N/A"> 2269 <meta itemprop="addressCountry" content="GB"> 2270 </div> 2271 <div itemprop="geo" itemscope itemtype="https://schema.org/GeoCoordinates"> 2272 <meta itemprop="latitude" content="0.00000000"> 2273 <meta itemprop="longitude" content="0.00000000"> 2274 </div> 2275 <link itemprop="mainEntityOfPage" href="https://www.thetrainerdirectory.com/top-level-category/laure-goubau#page"> 2276 </div> 2277 <div class="grid_element"> 2278 <div class="img_section col-xs-2 nopad"> 2279 <a title="Laure Goubau - Trainer" href="/top-level-category/laure-goubau"> 2280 <img class="search_result_image img-rounded center-block" loading="auto" width="400" height="400" alt="Laure Goubau" src="https://www.thetrainerdirectory.com/pictures/profile/pimage-47-254-photo.jpg" /> 2281 2282 </a> 2283 </div> 2284 <div class="mid_section col-xs-10 col-sm-7 norpad">
2285 <span class="postItem" data-userid="47" data-datatype="10" data-dataid="10" data-postid="0"></span><button class="item-post-list-0 favorite fa fa-heart" aria-label="SAVE" data-count="0" data-postid="0" data-state="0" data-activefeature="1" data-activefavorite="Free Membership" data-toggle="modal" data-target="#myModal" ><span id='bookmark-content'>SAVE</span> <span class='' id='number-0'></span></button> <a class="center-block" title="Laure Goubau" href="/top-level-category/laure-goubau"> 2286 <span class="h3 bold inline-block nomargin member-search-full-name notranslate"> 2287 Laure Goubau </span> 2288 <span class="hidden-xs inline-block member-search-company notranslate"> 2289 Executive Coach, Leadership & Talent Development Expert </span> 2290 </a> 2291 <div class="clearfix fpad-sm nobpad"></div> 2292 <div class="clearfix fpad-sm nobpad"></div> 2293 2294 2295 <p class="small nomargin member-search-description"> 2296 Laure Goubau is an Executive Coach and Leadership Development Expert, and the Founder & CEO of Gloria Coach. </p> 2297 </div> 2298 <div class="info_section hidden-xs col-sm-3 norpad"> 2299 <div class="module nomargin fpad-md text-center"> 2300 <a 2301 title="View Listing - Laure Goubau" 2302 aria-label="View Listing - Laure Goubau" 2303 class="btn btn-sm btn-primary btn-block bold search_view_listing_button" 2304 href="/top-level-category/laure-goubau">View Listing</a> 2305 <div class="clearfix fpad-sm nobpad"></div> 2306 <a 2307 title="Send Message - Laure Goubau" 2308 aria-label="Send Message - Laure Goubau" 2309 class="btn btn-sm btn-secondary btn-block bold search_contact_now_button" 2310 href="/top-level-category/laure-goubau/connect">Send Message</a> 2311 <div class="clearfix"></div> 2312 </div> 2313 </div> 2314 <div class="clearfix"></div> 2315 </div> 2316</div> 2317<div class="clearfix"></div> 2318<hr> 2319<span class="google-pin-location" id="google-pin" data-token="47"data-hideMessages="0" data-lat="0.00000000" data-lng="0.00000000" data-name="Laure Goubau" data-filename="/top-level-category/laure-goubau" data-photo="/pictures/profile/pimage-47-254-photo.jpg" data-phone="" data-addon="1"></span><div class="row-fluid member_results level_1 search_result clearfix" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem"> 2320 <meta itemprop="name" content="ALASTAIR DUNS"> 2321 <link itemprop="url" href="https://www.thetrainerdirectory.com/search_results"> 2322 <meta itemprop="position" content="5"> 2323 <div itemprop="item" itemscope itemtype="https://schema.org/LocalBusiness" itemid="https://www.thetrainerdirectory.com/kimberley/top-level-category/alastair-duns#entity"> 2324 <meta itemprop="name" content="ALASTAIR DUNS"> 2325 <link itemprop="url" href="https://www.thetrainerdirectory.com/kimberley/top-level-category/alastair-duns"> 2326 <link itemprop="image" href="https://www.thetrainerdirectory.com/pictures/profile/pimage-40-350-photo.jpg"> 2327 <meta itemprop="priceRange" content="$$"> 2328 <meta itemprop="telephone" content="07765825703"> 2329 <meta itemprop="description" content="I'm a trainer in leadership, high-performance teams & resilience. â I deliver global sessions in English, French, and Spanish, fostering growth and adaptability."> 2330 <div itemprop="address" itemscope itemtype="https://schema.org/PostalAddress"> 2331 <meta itemprop="streetAddress" content="20 Norman Street"> 2332 <meta itemprop="addressLocality" content="Kimberley"> 2333 <meta itemprop="addressRegion" content="N/A"> 2334 <meta itemprop="postalCode" content="NG16 2LA"> 2335 <meta itemprop="addressCountry" content="GB"> 2336 </div> 2337 <div itemprop="geo" itemscope itemtype="https://schema.org/GeoCoordinates"> 2338 <meta itemprop="latitude" content="0.00000000"> 2339 <meta itemprop="longitude" content="0.00000000"> 2340 </div> 2341 <link itemprop="mainEntityOfPage" href="https://www.thetrainerdirectory.com/kimberley/top-level-category/alastair-duns#page"> 2342 </div> 2343 <div class="grid_element"> 2344 <div class="img_section col-xs-2 nopad"> 2345 <a title="ALASTAIR DUNS - Trainer" href="/kimberley/top-level-category/alastair-duns"> 2346 <img class="search_result_image img-rounded center-block lazyloader" loading="auto" width="400" height="400" alt="ALASTAIR DUNS" data-src="https://www.thetrainerdirectory.com/pictures/profile/pimage-40-350-photo.jpg"> 2347 2348 </a> 2349 </div> 2350 <div class="mid_section col-xs-10 col-sm-7 norpad">
2351 <span class="postItem" data-userid="40" data-datatype="10" data-dataid="10" data-postid="0"></span><button class="item-post-list-0 favorite fa fa-heart" aria-label="SAVE" data-count="0" data-postid="0" data-state="0" data-activefeature="1" data-activefavorite="Basic Membership" data-toggle="modal" data-target="#myModal" ><span id='bookmark-content'>SAVE</span> <span class='' id='number-0'></span></button> <a class="center-block" title="ALASTAIR DUNS" href="/kimberley/top-level-category/alastair-duns"> 2352 <span class="h3 bold inline-block nomargin member-search-full-name notranslate"> 2353 ALASTAIR DUNS </span> 2354 </a> 2355 <div class="clearfix fpad-sm nobpad"></div> 2356 <div class="clearfix fpad-sm nobpad"></div> 2357 2358 2359 <p class="small nomargin member-search-description"> 2360 I'm a trainer in leadership, high-performance teams & resilience. â I deliver global sessions in English, French, and Spanish, fostering growth and adaptability. </p> 2361 </div> 2362 <div class="info_section hidden-xs col-sm-3 norpad"> 2363 <div class="module nomargin fpad-md text-center"> 2364 <a 2365 title="View Listing - ALASTAIR DUNS" 2366 aria-label="View Listing - ALASTAIR DUNS" 2367 class="btn btn-sm btn-primary btn-block bold search_view_listing_button" 2368 href="/kimberley/top-level-category/alastair-duns">View Listing</a> 2369 <div class="clearfix fpad-sm nobpad"></div> 2370 <a 2371 title="Send Message - ALASTAIR DUNS" 2372 aria-label="Send Message - ALASTAIR DUNS" 2373 class="btn btn-sm btn-secondary btn-block bold search_contact_now_button" 2374 href="/kimberley/top-level-category/alastair-duns/connect">Send Message</a> 2375 <div class="clearfix"></div> 2376 </div> 2377 </div> 2378 <div class="clearfix"></div> 2379 </div> 2380</div> 2381<div class="clearfix"></div> 2382<hr> 2383<span class="google-pin-location" id="google-pin" data-token="40"data-hideMessages="0" data-lat="0.00000000" data-lng="0.00000000" data-name="ALASTAIR DUNS" data-filename="/kimberley/top-level-category/alastair-duns" data-photo="/pictures/profile/pimage-40-350-photo.jpg" data-phone="" data-addon="0"></span><div class="row-fluid member_results level_1 search_result clearfix" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem"> 2384 <meta itemprop="name" content="Jonathan Cann"> 2385 <link itemprop="url" href="https://www.thetrainerdirectory.com/search_results"> 2386 <meta itemprop="position" content="6"> 2387 <div itemprop="item" itemscope itemtype="https://schema.org/LocalBusiness" itemid="https://www.thetrainerdirectory.com/accra/top-level-category/jonathan-cann#entity"> 2388 <meta itemprop="name" content="Jonathan Cann"> 2389 <link itemprop="url" href="https://www.thetrainerdirectory.com/accra/top-level-category/jonathan-cann"> 2390 <link itemprop="image" href="https://www.thetrainerdirectory.com/pictures/profile/pimage-46-362-photo.jpeg"> 2391 <meta itemprop="priceRange" content="$$"> 2392 <meta itemprop="telephone" content="0501335817"> 2393 <meta itemprop="description" content="I am the CEO of JPCann Associates Group. Also a lead Facilitator and Trainer specializing in Governance, Risk Management, Compliance & Finance. "> 2394 <div itemprop="address" itemscope itemtype="https://schema.org/PostalAddress"> 2395 <meta itemprop="streetAddress" content="Kokomlemle"> 2396 <meta itemprop="addressLocality" content="Accra"> 2397 <meta itemprop="addressRegion" content="N/A"> 2398 <meta itemprop="postalCode" content="N/A"> 2399 <meta itemprop="addressCountry" content="GB"> 2400 </div> 2401 <div itemprop="geo" itemscope itemtype="https://schema.org/GeoCoordinates"> 2402 <meta itemprop="latitude" content="0.00000000"> 2403 <meta itemprop="longitude" content="0.00000000"> 2404 </div> 2405 <link itemprop="mainEntityOfPage" href="https://www.thetrainerdirectory.com/accra/top-level-category/jonathan-cann#page"> 2406 </div> 2407 <div class="grid_element"> 2408 <div class="img_section col-xs-2 nopad"> 2409 <a title="Jonathan Cann - Trainer" href="/accra/top-level-category/jonathan-cann"> 2410 <img class="search_result_image img-rounded center-block lazyloader" loading="auto" width="400" height="400" alt="Jonathan Cann" data-src="https://www.thetrainerdirectory.com/pictures/profile/pimage-46-362-photo.jpeg"> 2411 2412 </a> 2413 </div> 2414 <div class="mid_section col-xs-10 col-sm-7 norpad">
2415 <span class="postItem" data-userid="46" data-datatype="10" data-dataid="10" data-postid="0"></span><button class="item-post-list-0 favorite fa fa-heart" aria-label="SAVE" data-count="0" data-postid="0" data-state="0" data-activefeature="1" data-activefavorite="Basic Membership" data-toggle="modal" data-target="#myModal" ><span id='bookmark-content'>SAVE</span> <span class='' id='number-0'></span></button> <a class="center-block" title="Jonathan Cann" href="/accra/top-level-category/jonathan-cann"> 2416 <span class="h3 bold inline-block nomargin member-search-full-name notranslate"> 2417 Jonathan Cann </span> 2418 <span class="hidden-xs inline-block member-search-company notranslate"> 2419 JPCann Associates </span> 2420 </a> 2421 <div class="clearfix fpad-sm nobpad"></div> 2422 <div class="clearfix fpad-sm nobpad"></div> 2423 2424 2425 <p class="small nomargin member-search-description"> 2426 I am the CEO of JPCann Associates Group. Also a lead Facilitator and Trainer specializing in Governance, Risk Management, Compliance & Finance. </p> 2427 </div> 2428 <div class="info_section hidden-xs col-sm-3 norpad"> 2429 <div class="module nomargin fpad-md text-center"> 2430 <a 2431 title="View Listing - Jonathan Cann" 2432 aria-label="View Listing - Jonathan Cann" 2433 class="btn btn-sm btn-primary btn-block bold search_view_listing_button" 2434 href="/accra/top-level-category/jonathan-cann">View Listing</a> 2435 <div class="clearfix fpad-sm nobpad"></div> 2436 <a 2437 title="Send Message - Jonathan Cann" 2438 aria-label="Send Message - Jonathan Cann" 2439 class="btn btn-sm btn-secondary btn-block bold search_contact_now_button" 2440 href="/accra/top-level-category/jonathan-cann/connect">Send Message</a> 2441 <div class="clearfix"></div> 2442 </div> 2443 </div> 2444 <div class="clearfix"></div> 2445 </div> 2446</div> 2447<div class="clearfix"></div> 2448<hr> 2449<span class="google-pin-location" id="google-pin" data-token="46"data-hideMessages="0" data-lat="0.00000000" data-lng="0.00000000" data-name="Jonathan Cann" data-filename="/accra/top-level-category/jonathan-cann" data-photo="/pictures/profile/pimage-46-362-photo.jpeg" data-phone="" data-addon="0"></span><div class="row-fluid member_results level_1 search_result clearfix" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem"> 2450 <meta itemprop="name" content="Peter Gandolfo"> 2451 <link itemprop="url" href="https://www.thetrainerdirectory.com/search_results"> 2452 <meta itemprop="position" content="7"> 2453 <div itemprop="item" itemscope itemtype="https://schema.org/LocalBusiness" itemid="https://www.thetrainerdirectory.com/top-level-category/peter-gandolfo#entity"> 2454 <meta itemprop="name" content="Peter Gandolfo"> 2455 <link itemprop="url" href="https://www.thetrainerdirectory.com/top-level-category/peter-gandolfo"> 2456 <link itemprop="image" href="https://www.thetrainerdirectory.com/pictures/profile/pimage-45-47-photo.jpg"> 2457 <meta itemprop="priceRange" content="$$"> 2458 <meta itemprop="telephone" content="N/A"> 2459 <meta itemprop="description" content="Peter Gandolfo is an Executive Coach and founder of Gandolfo Group."> 2460 <div itemprop="address" itemscope itemtype="https://schema.org/PostalAddress"> 2461 <meta itemprop="streetAddress" content="N/A"> 2462 <meta itemprop="addressLocality" content="N/A"> 2463 <meta itemprop="addressRegion" content="N/A"> 2464 <meta itemprop="postalCode" content="N/A"> 2465 <meta itemprop="addressCountry" content="GB"> 2466 </div> 2467 <link itemprop="mainEntityOfPage" href="https://www.thetrainerdirectory.com/top-level-category/peter-gandolfo#page"> 2468 </div> 2469 <div class="grid_element"> 2470 <div class="img_section col-xs-2 nopad"> 2471 <a title="Peter Gandolfo - Trainer" href="/top-level-category/peter-gandolfo"> 2472 <img class="search_result_image img-rounded center-block lazyloader" loading="auto" width="400" height="400" alt="Peter Gandolfo" data-src="https://www.thetrainerdirectory.com/pictures/profile/pimage-45-47-photo.jpg"> 2473 2474 </a> 2475 </div> 2476 <div class="mid_section col-xs-10 col-sm-7 norpad">
2477 <span class="postItem" data-userid="45" data-datatype="10" data-dataid="10" data-postid="0"></span><button class="item-post-list-0 favorite fa fa-heart" aria-label="SAVE" data-count="0" data-postid="0" data-state="0" data-activefeature="1" data-activefavorite="Basic Membership" data-toggle="modal" data-target="#myModal" ><span id='bookmark-content'>SAVE</span> <span class='' id='number-0'></span></button> <a class="center-block" title="Peter Gandolfo" href="/top-level-category/peter-gandolfo"> 2478 <span class="h3 bold inline-block nomargin member-search-full-name notranslate"> 2479 Peter Gandolfo </span> 2480 <span class="hidden-xs inline-block member-search-company notranslate"> 2481 Founder of Gandolfo Group; Master Certified Coach (MCC, ICF) </span> 2482 </a> 2483 <div class="clearfix fpad-sm nobpad"></div> 2484 <div class="clearfix fpad-sm nobpad"></div> 2485 2486 2487 <p class="small nomargin member-search-description"> 2488 Peter Gandolfo is an Executive Coach and founder of Gandolfo Group. </p> 2489 </div> 2490 <div class="info_section hidden-xs col-sm-3 norpad"> 2491 <div class="module nomargin fpad-md text-center"> 2492 <a 2493 title="View Listing - Peter Gandolfo" 2494 aria-label="View Listing - Peter Gandolfo" 2495 class="btn btn-sm btn-primary btn-block bold search_view_listing_button" 2496 href="/top-level-category/peter-gandolfo">View Listing</a> 2497 <div class="clearfix fpad-sm nobpad"></div> 2498 <a 2499 title="Send Message - Peter Gandolfo" 2500 aria-label="Send Message - Peter Gandolfo" 2501 class="btn btn-sm btn-secondary btn-block bold search_contact_now_button" 2502 href="/top-level-category/peter-gandolfo/connect">Send Message</a> 2503 <div class="clearfix"></div> 2504 </div> 2505 </div> 2506 <div class="clearfix"></div> 2507 </div> 2508</div> 2509<div class="clearfix"></div> 2510<hr> 2511</div> 2512 2513 <div class="map_container" style="display:none;"> 2514 <style type='text/css'> .info_window p { 2515 text-align: center; 2516 font-size: 12px; 2517 margin: 5px 0; 2518} 2519.info_window > a { 2520 display: block; 2521 text-align: center; 2522 margin: 5px 0; 2523} 2524.info_window img {
2525 display: block; 2526 max-width: 125px; 2527 margin: 0 auto; 2528 max-height:80px; 2529} 2530.info_window { 2531 width: 150px; 2532} 2533.gm-style-iw div div { 2534 overflow: visible!important; 2535} 2536#map-canvas { 2537 height: 500px; 2538 margin-bottom: 15px; 2539 width: 100%; 2540} 2541.suggestion-search-location { 2542 margin: 2px 2px; 2543 color: #333; 2544 background-color: #CEDDE9; 2545 display: inline-block; 2546 padding: 5px 11px; 2547} 2548 2549.other-locations-container { 2550 overflow: hidden; 2551 max-height: 32px; 2552 transition: all 0.5s ease 0s; 2553} 2554span.show-more-suggestions { 2555 padding: 5px; 2556 margin: 0px 13px 9px 4px; 2557 display: inline-block; 2558 cursor: pointer; 2559 color: #1a0dab; 2560 font-weight: 500; 2561} 2562span.show-more-suggestions:hover { 2563 text-decoration: underline; 2564} 2565.suggestions-heading { 2566 margin-bottom: 5px; 2567} </style><div data-id="map-canvas"></div> </div>
2568<script> 2569 function clickToCall (element, hideFlag=true) { 2570 if(hideFlag){ 2571 $(element).siblings().toggleClass("hide"); 2572 $(element).remove(); 2573 } else { 2574 $(element).addClass("hide").siblings().removeClass("hide"); 2575 } 2576 } 2577 </script>
2577 2578 </div> 2579 </div> 2580 </div> 2581 2582 <div class="col-md-3 col-md-pull-9 sidebar-container"> <!-- 2583 2584This search module will detect which of the default membership features' search results pages is being viewed and display the related search feature. 2585 2586IMPORTANT: 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. 2587 2588--> 2589 2590<div class="module sidebar-search-member-keyword-location"> 2591 <h2>Find Trainers</h2> 2592 <form action="/search_results" class="website-search" accept-charset="UTF-8" method="get"> 2593 2594 <div class="form-group normal-autosuggest"> 2595 <label>What training do you need:</label> 2596 <input type="text" name="q" value="" placeholder="Name or Keyword" class="form-control member_search"> 2597 </div> 2598 2599 <div class="form-group"> 2600 <label>Search by location:</label> 2601 <input type=text autocomplete="off" placeholder="City or Post Code" class="googleSuggest googleLocation form-control" id="location_google_maps_homepage" name="location_value" value=""> 2602 </div> 2603 2604 <div class="form-group nomargin"> 2605 <button class="btn btn-primary btn-block" type="submit">Search Now</button> 2606 </div> 2607 </form> 2608</div><div class="module newsletter-sign-up-form"> 2609 <h2 class="bpad text-center">Join Our Newsletter</h2> 2610 <a href="#" data-toggle="modal" data-target="#newsletter_subscribe_modal" class="btn btn-primary btn-block"> 2611 Click to Subscribe 2612 </a> 2613</div> 2614 2615<div class="modal fade" id="newsletter_subscribe_modal" tabindex="-1" role="dialog" aria-hidden="true"> 2616 <div class="modal-dialog"> 2617 <div class="modal-content"> 2618 <div class="container-fluid"> 2619 <div class="row"> 2620 <div class="col-md-12"> 2621 <br> 2622 <button type="button" class="close" data-dismiss="modal" aria-label="Close"> 2623 <span aria-hidden="true">×</span> 2624 </button> 2625 <h3 class="nomargin"> 2626 Join Our Newsletter 2627 </h3> 2628 <hr> 2629 <div class="newsletter_modal_form_container"> 2630 <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="clearfix"></div> 2631 <div class="gdpr_consent_email well bmargin"> 2632 <div class="form-group nomargin text-left"> 2633 <div class="checkbox nomargin"> 2634 <label class="bmargin small"> <input type="checkbox" class="consent_history" name="consent_history[1]" autocomplete="off" value="1" required="required" data-fv-notempty="true" data-fv-notempty-message="You must agree to the GDPR consent terms"/> 2635 <span class="required">* </span> I understand that the email I enter will be stored by the website. I understand that I may be contacted by the Admin of the website at this email. </label> 2636 </div> 2637 </div> 2638 </div> 2639<div class="form-group"><div class="form-group security_question_label"> 2640 <div id="newsletter_modal_signup_380-captchaContainer" class="control-group"> 2641 <div class="g-recaptcha" id="newsletter_modal_signup_380-google-recaptcha"></div> 2642 </div> 2643 <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> 2644 <div class="clearfix bmargin"></div> 2645 <input type="hidden" name="recaptcha" id="newsletter_modal_signup_380-rcap"> 2646</div> 2647 <style> 2648 .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 { 2649 transform: scale(0.77); 2650 -webkit-transform: scale(0.77); 2651 transform-origin: 0 0; 2652 -webkit-transform-origin: 0 0; 2653 margin-bottom: -15px; 2654 } 2655 2656 .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 { 2657 transform: scale(0.77); 2658 -webkit-transform: scale(0.77); 2659 transform-origin: 0 0; 2660 -webkit-transform-origin: 0 0; 2661 margin-bottom: -15px; 2662 } 2663 </style> 2664
2664<script type="text/javascript"> 2665 if(typeof formsFound == "undefined"){ 2666 var formID = ''; 2667 var currentCaptcha = {}; 2668 var captchaHolders = {}; 2669 var formsFound = {}; 2670 var captchaApiRequested = false; 2671 /* The forms the visitor has actually interacted with - only these get a widget. */ 2672 var captchaArmedForms = []; 2673 /* api.js stays lazy - nothing is fetched from Google until the visitor actually 2674 touches the form. 'click' alone was too narrow: a keyboard-only visitor tabs in 2675 and presses Enter without ever clicking, so api.js never loaded, the captcha 2676 never rendered, and the form POSTed an empty token. */ 2677 var captchaTriggerEvents = ['click', 'keydown', 'focusin', 'touchstart']; 2678 2679 window.addEventListener('load', () => { 2680 formID = document.querySelectorAll('[name="recaptcha"]'); 2681 if (typeof formID != "undefined" && formID !== null) { 2682 for (let i = 0; i < formID.length; i++) { 2683 let formIDForm = formID[i].closest('form'); 2684 let captchaHolder = formIDForm.querySelector(".g-recaptcha"); 2685 2686 if (typeof formsFound[formIDForm.id] != "undefined") { 2687 formsFound[formIDForm.id]['counter']++; 2688 }else{ 2689 formsFound[formIDForm.id] = {'counter' : 1}; 2690 } 2691 2692 formIDForm.setAttribute('data-counter', formsFound[formIDForm.id]['counter']); 2693 captchaHolder.setAttribute('id',captchaHolder.id+'-'+formsFound[formIDForm.id]['counter']); 2694 2695 if (typeof formIDForm != "undefined" && formIDForm !== null) { 2696 captchaTriggerEvents.forEach( evt => 2697 formIDForm.addEventListener(evt, reCaptchaOnFormInteraction, false) 2698 ); 2699 } 2700 } 2701 } 2702 }); 2703 } 2704 2705 function reCaptchaOnFormInteraction(event) { 2706 if (event && event.currentTarget) { 2707 captchaArmForm(event.currentTarget); 2708 } 2709 if (captchaApiRequested) { 2710 renderArmedCaptchas(); 2711 return; 2712 } 2713 captchaApiRequested = true; 2714 2715 var head = document.getElementsByTagName('head')[0]; 2716 var script = document.createElement('script'); 2717 script.type = 'text/javascript'; 2718 script.src = 'https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit&hl=en'; 2719 head.appendChild(script); 2720 } 2721 2722 var captchaArmForm = function (formEl) { 2723 if (!formEl) { 2724 return; 2725 } 2726 for (var a = 0; a < captchaArmedForms.length; a++) { 2727 if (captchaArmedForms[a] === formEl) { 2728 return; 2729 } 2730 } 2731 captchaArmedForms.push(formEl); 2732 }; 2733 2734 var captchaSolvedCallback = function (holder) { 2735 return function () { 2736 var formEl = holder.closest('form'); 2737 if (!formEl) { 2738 return; 2739 } 2740 $(formEl).find('.security_question_label').removeClass('has-error'); 2741 $(formEl).find('#recaptcha_error').css('display', 'none'); 2742 var notification = document.getElementById(formEl.id + '-notification'); 2743 if (notification && notification.classList.contains('alert-danger-subtle')) { 2744 $(notification).slideUp(); 2745 } 2746 }; 2747 }; 2748 2749 var renderArmedCaptchas = function () { 2750 if (typeof grecaptcha === "undefined" || typeof grecaptcha.render !== "function") { 2751 return; 2752 } 2753 for (var f = 0; f < captchaArmedForms.length; f++) { 2754 var holder = captchaArmedForms[f].querySelector('div[class=g-rec
2754aptcha]'); 2755 2756 if (!holder || !holder.id || holder.getClientRects().length === 0) { 2757 continue; 2758 } 2759 /* Guard a second render: grecaptcha throws on an element it already claimed. */ 2760 if (typeof captchaHolders[holder.id] === "undefined") { 2761 captchaHolders[holder.id] = grecaptcha.render(holder.id, { 2762 'sitekey': '6LefnrMqAAAAAJ7P0zC7FpwVr8HmTffHnk3k7ZBX', 2763 'callback': captchaSolvedCallback(holder) 2764 }); 2765 } 2766 } 2767 }; 2768 2769 var onloadCallback = function (event) { 2770 renderArmedCaptchas(); 2771 }; 2772 2773 </script>
vendor: 1 bytes, line 2773
2773
2774<script> 2775 $(document).ready(function(){ 2776 /* Implicit submission (Enter inside a field) fires 'submit' without firing a click on 2777 the submit button, so the click guard below never sees it and the form POSTed an 2778 empty token. Bound on document/capture so it runs before FormValidation's own 2779 handler on the form - at AT_TARGET the capture flag does not order listeners, so a 2780 listener on the form itself would not reliably win. Native HTMLFormElement.submit() 2781 does not dispatch 'submit', so the solved-captcha path below is unaffected. */ 2782 var captchaGuardedForm = document.getElementById('newsletter_modal_signup_380'); 2783 if (captchaGuardedForm) { 2784 document.addEventListener('submit', function (event) { 2785 if (event.target !== captchaGuardedForm) { 2786 return; 2787 } 2788 2789 var formId = captchaGuardedForm.id; 2790 var captchaHolderKey = formId + "-google-recaptcha-" + $(captchaGuardedForm).data('counter'); 2791 var captchaRendered = typeof captchaHolders[captchaHolderKey] != "undefined"; 2792 2793 if (captchaRendered && grecaptcha.getResponse(captchaHolders[captchaHolderKey]) !== "") { 2794 $("#" + formId + " .security_question_label").removeClass("has-error"); 2795 $("#" + formId + " #recaptcha_error").css("display", "none"); 2796 return; 2797 } 2798 2799 /* Unsolved, or api.js still in flight: either way there is no token to send. */ 2800 event.preventDefault(); 2801 event.stopImmediatePropagation(); 2802 $("#" + formId + " .security_question_label").addClass("has-error"); 2803 $("#" + formId + " #recaptcha_error").css("display", "block"); 2804 return false; 2805 }, true); 2806 } 2807 $("#newsletter_modal_signup_380 input[type=submit]").unbind('click'); 2808 $("#newsletter_modal_signup_380 input[type=submit]").click(function (event) { 2809 2810 var formId = $(this.form).attr('id'); 2811 var captchaHolderKey = formId + "-google-recaptcha-" +$(this.form).data('counter'); 2812 2813 if (typeof captchaHolders[captchaHolderKey] != "undefined") { 2814 if (grecaptcha.getResponse(captchaHolders[captchaHolderKey]) === "") { 2815 event.preventDefault(); 2816 $("#" + formId).formValidation('validate'); 2817 $("#" + formId + " .security_question_label").addClass("has-error"); 2818 $("#" + formId + " #recaptcha_error").css("display", "block"); 2819 return false; 2820 } 2821 2822 /* Solved captcha: clear the error UI and let the click proceed untouched. 2823 The browser then fires a REAL, button-initiated submit event, so 2824 FormValidation runs its normal chain (success.form.fv -> AJAX modal on 2825 checkout / native POST on login). Re-submitting here artificially broke 2826 both ways: native form.submit() skips the FV chain (checkout rendered the 2827 raw JSON response), and jQuery .submit() fires a synthetic submit that FV 2828 refuses, leaving the form stuck after the first error (Bug 2). */ 2829 $("#" + formId + " .security_question_label").removeClass("has-error"); 2830 $("#" + formId + " #recaptcha_error").css("display", "none"); 2831 } 2832 }); 2833 }); 2834</script>
2834</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>
2834<script type="text/javascript">jQuery(document).ready(function() { jQuery("#newsletter_modal_signup_380").bind("submit", function() { 2835 });}); </script>
2835 </div> 2836 <br> 2837 </div> 2838 </div> 2839 </div> 2840 </div> 2841 </div> 2842</div><div class="module member-join-offer"> 2843 <h2>Join Our Community</h2> 2844 <p> 2845 <b>1.</b> Register an account<br> 2846 <b>2.</b> Create a searchable listing<br> 2847 <b>3.</b> Connect with more clients 2848 </p> 2849 <a title="Get Listed Today" href="/join" class="btn btn-primary btn-block">Get Listed Today</a> 2850</div> 2851 </div> 2852 </div> 2853 2854 <div class="clearfix"></div> 2855 </div> 2856</div> 2857</main> 2858<!-- End Content --> 2859<div class="clearfix footer-clear-element clearfix-lg"></div> 2860 2861<div class="footer"> 2862 <div class="container"> 2863 <div class="row"> 2864 <ul class="footer_menu sm-text-center"> 2865 <li class='col-md-5'><span id='link323' class='head'> About</span><ul><li class=''><span id='link324' class='content'> The place for Trainers, and the place to find Trainers.</span></li><li class=''><span id='link351' class='companynumber'> The Trainer Directory Limited | Company Number 16109907</span></li></ul></li><li class='col-md-2 col-md-offset-1'><span id='link325' class='head'> Website</span><ul><li class=''><a href='/about' id='link326'>About</a></li><li class=''><a href='/about/contact' id='link327'>Contact Us</a></li></ul></li><li class='col-md-2'><span id='link328' class='head'> Search</span><ul><li class=''><a href='/search_results' id='link329'>Browse Directory</a></li></ul></li><li class='col-md-2'><span id='link331' class='head'> Support</span><ul><li class=''><a href='/login' id='link332'>Member Login</a></li><li class=''><a href='/login/retrieval' id='link333'>Reset Password</a></li></ul></li><li class='col-md-12 clearfix'><span id='link334'> </span></li><li class='col-md-5 vpad vmargin'><span id='link335'> <style>.network-icon.twitter,.network-icon.tiktok{background:#000}</style> 2866<div class="list-social-links"> 2867 <a class="network-icon contact" href="/about/contact" title="Contact Us The Trainer Directory"> 2868 <i class="bi bi-envelope"></i> 2869 </a> 2870 2871 2872 2873 <div class="clearfix"></div> 2874</div></span></li><li class='col-md-6 col-md-offset-1 vpad vmargin'><a href='/join' id='link336' class='btn btn_footer_get_listed btn-lg btn-block bold center sm-block'>Trainers - Join Us Today</a></li><li class='col-md-12 clearfix vmargin text-center'><span id='link337'> </span><ul><li class='clearfix vmargin vpad inline-block'><span id='link338'> </span></li><li class='btn-lg font-sm novpad norpad inline-block'><span id='link339'> © 2026</span></li><li class='font-sm inline-block hpad'><a href='/' id='link340' title='The Trainer Directory'>The Trainer Directory</a></li><li class='font-sm inline-block'><span id='link341'> All Rights Reserved</span></li><li class='font-sm inline-block hpad'><a href='/about/terms' id='link342' title='Terms of Use'>Terms of Use</a></li><li class='font-sm inline-block'><a href='/about/privacy' id='link343' title='Privacy Policy'>Privacy Policy</a></li></ul></li> </ul> 2875 </div> 2876 </div> 2877</div><style type='text/css'> .scrollup { 2878 border-radius: 3px; 2879 width: 40px; 2880 height: 40px; 2881 opacity: 0.4; 2882 position: fixed; 2883 bottom: 30px; 2884 right: 30px; 2885 display: none; 2886 background: rgba(119, 119, 119, 0.8); 2887 z-index: 1000000; 2888} 2889.scrollup i { 2890 font-size: 36px; 2891 color: white; 2892 position: relative; 2893 top: 0px; 2894 left: 10px; 2895} </style> <div class="myModal modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="mySmallModalLabel" 2896 data-backdrop="static" data-keyboard="false"> 2897 <div class="modal-dialog" role="document"> 2898 <div class="modal-content"> 2899 <div class="modal-body nohpad nobpad"> 2900 <button type="button" style="z-index:10;position:absolute;right:15px;" class="close hmargin" 2901 data-dismiss="modal">× 2902 </button> 2903 <style> 2904 .member-login-container:not(.modal .module) { 2905 width: 555px; 2906 max-width: 100%; 2907 margin-left: auto; 2908 margin-right: auto; 2909 margin-bottom:0; 2910 background-color: rgb(255, 255, 255)!important; 2911 border-color: rgb(255, 255, 255)!important; 2912 color: rgb(41, 41, 41)!important; 2913 } 2914 .login-register-tabs, .login-register-content { 2915 width: 555px!important; 2916 max-width: 100%; 2917 margin-left: auto!important; 2918 margin-right: auto!important; 2919 background-color: rgb(255, 255, 255); 2920 } 2921 .login-register-content { 2922 background: transparent; 2923 padding: 0; 2924 border: none; 2925 } 2926 .login-register-content h2, .login-register-content h2+hr, .login-register-content .account-menu-title { 2927 display: none!important; 2928 } 2929 .express_login_create_account_prefix hr { 2930 margin: 15px 0 10px; 2931 }
2932 .modal-content #containerFBLogin, .modal-content #containerGoogleLogin { 2933 margin:15px 0; 2934 } 2935 2936 /* CSS When Login Form and Express Registration Rendered in Sidebar */ 2937 .col-md-3 .bd-chat-well-container,.col-md-4 .bd-chat-well-container { 2938 padding: 15px 10px; 2939 } 2940 .col-md-3 .bd-chat-center-text,.col-md-4 .bd-chat-center-text { 2941 margin: 0; 2942 font-size: 20px; 2943 padding: 0 15px; 2944 } 2945 .col-md-3 .member-login-page-container .login-register-tabs *, .col-md-4 .member-login-page-container .login-register-tabs * { 2946 font-size: 12px; 2947 line-height: 1.2em; 2948 vertical-align: bottom; 2949 } 2950 .col-md-3 .member-login-page-container .login-register-tabs a, .col-md-4 .member-login-page-container .login-register-tabs a { 2951 padding: 5px !important; 2952 height: 50px; 2953 vertical-align: middle; 2954 display: table-cell !important; 2955 width: 1%; 2956 } 2957 .col-md-3 .member-login-page-container .login-register-content, .col-md-4 .member-login-page-container .login-register-content { 2958 padding: 0; 2959 } 2960 .col-md-3 .member-login-container, .col-md-4 .member-login-container { 2961 padding: 15px !important; 2962 font-size: 13px; 2963 } 2964 .col-md-3 .member-login-page-container .input-lg, .col-md-4 .member-login-page-container .input-lg { 2965 height: 34px; 2966 padding: 6px 12px; 2967 font-size: 14px; 2968 } 2969 .col-md-3 .member-login-page-container .security_question_label, .col-md-4 .member-login-page-container .security_question_label { 2970 transform: scale(.85); 2971 margin: -1.15em -1.15em 0; 2972 } 2973 .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 { 2974 width: 100%; 2975 display: block; 2976 margin-top:5px; 2977 } 2978 .col-md-3 .login-cta-buttons li, .col-md-4 .login-cta-buttons li { 2979 padding:0 2980 } 2981 .col-md-3 .login-cta-buttons ul.nav, .col-md-4 .login-cta-buttons ul.nav { 2982 margin-top: -10px; 2983 } 2984 .col-md-3 #googleAction, .col-md-3 #facebookAction, .col-md-4 #googleAction, .col-md-4 #facebookAction { 2985 padding: 0; 2986 min-height: 0; 2987 font-size: 14px; 2988 margin: 0; 2989 } 2990 .col-md-3 #googleAction img, .col-md-3 #facebookAction img, .col-md-4 #googleAction img, .col-md-4 #facebookAction img { 2991 height: 36px !important; 2992 margin-right: 5px; 2993 position: relative!important; 2994 display: inline-block; 2995 } 2996 @media only screen and (max-width: 767px) { 2997 .col-md-3 .member-login-page-container .login-register-tabs a, .col-md-4 .member-login-page-container .login-register-tabs a { 2998 display: block !important; 2999 width: 100%; 3000 line-height: 40px; 3001 } 3002 3003 #containerGoogleLogin { 3004 text-align: center; 3005 margin-top: 10px; 3006 } 3007 #containerGoogleLogin #gBtn { 3008 display: inline-block; 3009 } 3010 } 3011 </style> 3012 <div class="row member-login-page-container"> 3013 <div class="fpad-lg novpad"> 3014 3015 3016 <div class="module fpad-xl member-login-container"> 3017 <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=" ">
3017<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 { 3018 display: inline-block; 3019 text-align: center; 3020 width: 216px; 3021} 3022 3023.module #containerFBLogin #facebookAction img, .module #containerFBLogin #facebookAction img { 3024 position: absolute !important; 3025} 3026.module #containerFBLogin a#facebookAction { 3027 max-width: 200px; 3028 position: relative; 3029 left: -8px; 3030 3031} </style> <!-- Required Font-Family for Social Buttons --> 3032 <link rel="stylesheet" media="print" onload="this.onload=null;this.removeAttribute('media');" href="https://fonts.googleapis.com/css?family=Roboto:500&display=swap"> 3033 <noscript> 3034 <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:500&display=swap"> 3035 </noscript> 3036 3037 <div class="row social-login-row"> 3038 </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> 3039 <style> 3040 #togglePassword { 3041 background: none; 3042 border: none; 3043 cursor: pointer; 3044 font-weight: bold; 3045 font-size: .85em; 3046 position: absolute; 3047 right: 5px; 3048 top: 0; 3049 } 3050 </style><button type="button" tabindex="-1" id="togglePassword" onclick="showPassword(this);"> <i class="fa fa-lock" aria-hidden="true"></i></button> 3051
3051<script> 3052 function showPassword(node){ 3053 const parent = node.closest('.form-group'); 3054 const passwordField = parent.querySelector(`input[type='password'], input[type='text']`); 3055 const isPassword = passwordField.getAttribute('type') === 'password'; 3056 passwordField.setAttribute('type', isPassword ? 'text' : 'password'); 3057 const iconHTML = isPassword ? `<i class="fa fa-unlock" aria-hidden="true"></i>` : `<i class="fa fa-lock" aria-hidden="true"></i>`; 3058 node.innerHTML = iconHTML; 3059 } 3060 </script>
3060<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"> 3061 <div id="member_login_190-captchaContainer" class="control-group"> 3062 <div class="g-recaptcha" id="member_login_190-google-recaptcha"></div> 3063 </div> 3064 <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> 3065 <div class="clearfix bmargin"></div> 3066 <input type="hidden" name="recaptcha" id="member_login_190-rcap"> 3067</div> 3068 <style> 3069 .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 { 3070 transform: scale(0.77); 3071 -webkit-transform: scale(0.77); 3072 transform-origin: 0 0; 3073 -webkit-transform-origin: 0 0; 3074 margin-bottom: -15px; 3075 } 3076 3077 .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 { 3078 transform: scale(0.77); 3079 -webkit-transform: scale(0.77); 3080 transform-origin: 0 0; 3081 -webkit-transform-origin: 0 0; 3082 margin-bottom: -15px; 3083 } 3084 </style> 3085
3085<script type="text/javascript"> 3086 if(typeof formsFound == "undefined"){ 3087 var formID = ''; 3088 var currentCaptcha = {}; 3089 var captchaHolders = {}; 3090 var formsFound = {}; 3091 var captchaApiRequested = false; 3092 /* The forms the visitor has actually interacted with - only these get a widget. */ 3093 var captchaArmedForms = []; 3094 /* api.js stays lazy - nothing is fetched from Google until the visitor actually 3095 touches the form. 'click' alone was too narrow: a keyboard-only visitor tabs in 3096 and presses Enter without ever clicking, so api.js never loaded, the captcha 3097 never rendered, and the form POSTed an empty token. */ 3098 var captchaTriggerEvents = ['click', 'keydown', 'focusin', 'touchstart']; 3099 3100 window.addEventListener('load', () => { 3101 formID = document.querySelectorAll('[name="recaptcha"]'); 3102 if (typeof formID != "undefined" && formID !== null) { 3103 for (let i = 0; i < formID.length; i++) { 3104 let formIDForm = formID[i].closest('form'); 3105 let captchaHolder = formIDForm.querySelector(".g-recaptcha"); 3106 3107 if (typeof formsFound[formIDForm.id] != "undefined") { 3108 formsFound[formIDForm.id]['counter']++; 3109 }else{ 3110 formsFound[formIDForm.id] = {'counter' : 1}; 3111 } 3112 3113 formIDForm.setAttribute('data-counter', formsFound[formIDForm.id]['counter']); 3114 captchaHolder.setAttribute('id',captchaHolder.id+'-'+formsFound[formIDForm.id]['counter']); 3115 3116 if (typeof formIDForm != "undefined" && formIDForm !== null) { 3117 captchaTriggerEvents.forEach( evt => 3118 formIDForm.addEventListener(evt, reCaptchaOnFormInteraction, false) 3119 ); 3120 } 3121 } 3122 } 3123 }); 3124 } 3125 3126 function reCaptchaOnFormInteraction(event) { 3127 if (event && event.currentTarget) { 3128 captchaArmForm(event.currentTarget); 3129 } 3130 if (captchaApiRequested) { 3131 renderArmedCaptchas(); 3132 return; 3133 } 3134 captchaApiRequested = true; 3135 3136 var head = document.getElementsByTagName('head')[0]; 3137 var script = document.createElement('script'); 3138 script.type = 'text/javascript'; 3139 script.src = 'https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit&hl=en'; 3140 head.appendChild(script); 3141 } 3142 3143 var captchaArmForm = function (formEl) { 3144 if (!formEl) { 3145 return; 3146 } 3147 for (var a = 0; a < captchaArmedForms.length; a++) { 3148 if (captchaArmedForms[a] === formEl) { 3149 return; 3150 } 3151 } 3152 captchaArmedForms.push(formEl); 3153 }; 3154 3155 var captchaSolvedCallback = function (holder) { 3156 return function () { 3157 var formEl = holder.closest('form'); 3158 if (!formEl) { 3159 return; 3160 } 3161 $(formEl).find('.security_question_label').removeClass('has-error'); 3162 $(formEl).find('#recaptcha_error').css('display', 'none'); 3163 var notification = document.getElementById(formEl.id + '-notification'); 3164 if (notification && notification.classList.contains('alert-danger-subtle')) { 3165 $(notification).slideUp(); 3166 } 3167 }; 3168 }; 3169 3170 var renderArmedCaptchas = function () { 3171 if (typeof grecaptcha === "undefined" || typeof grecaptcha.render !== "function") { 3172 return; 3173 } 3174 for (var f = 0; f < captchaArmedForms.length; f++) { 3175 var holder = captchaArmedForms[f].querySelector('div[class=g-rec
3175aptcha]'); 3176 3177 if (!holder || !holder.id || holder.getClientRects().length === 0) { 3178 continue; 3179 } 3180 /* Guard a second render: grecaptcha throws on an element it already claimed. */ 3181 if (typeof captchaHolders[holder.id] === "undefined") { 3182 captchaHolders[holder.id] = grecaptcha.render(holder.id, { 3183 'sitekey': '6LefnrMqAAAAAJ7P0zC7FpwVr8HmTffHnk3k7ZBX', 3184 'callback': captchaSolvedCallback(holder) 3185 }); 3186 } 3187 } 3188 }; 3189 3190 var onloadCallback = function (event) { 3191 renderArmedCaptchas(); 3192 }; 3193 3194 </script>
vendor: 1 bytes, line 3194
3194
3195<script> 3196 $(document).ready(function(){ 3197 /* Implicit submission (Enter inside a field) fires 'submit' without firing a click on 3198 the submit button, so the click guard below never sees it and the form POSTed an 3199 empty token. Bound on document/capture so it runs before FormValidation's own 3200 handler on the form - at AT_TARGET the capture flag does not order listeners, so a 3201 listener on the form itself would not reliably win. Native HTMLFormElement.submit() 3202 does not dispatch 'submit', so the solved-captcha path below is unaffected. */ 3203 var captchaGuardedForm = document.getElementById('member_login_190'); 3204 if (captchaGuardedForm) { 3205 document.addEventListener('submit', function (event) { 3206 if (event.target !== captchaGuardedForm) { 3207 return; 3208 } 3209 3210 var formId = captchaGuardedForm.id; 3211 var captchaHolderKey = formId + "-google-recaptcha-" + $(captchaGuardedForm).data('counter'); 3212 var captchaRendered = typeof captchaHolders[captchaHolderKey] != "undefined"; 3213 3214 if (captchaRendered && grecaptcha.getResponse(captchaHolders[captchaHolderKey]) !== "") { 3215 $("#" + formId + " .security_question_label").removeClass("has-error"); 3216 $("#" + formId + " #recaptcha_error").css("display", "none"); 3217 return; 3218 } 3219 3220 /* Unsolved, or api.js still in flight: either way there is no token to send. */ 3221 event.preventDefault(); 3222 event.stopImmediatePropagation(); 3223 $("#" + formId + " .security_question_label").addClass("has-error"); 3224 $("#" + formId + " #recaptcha_error").css("display", "block"); 3225 return false; 3226 }, true); 3227 } 3228 $("#member_login_190 input[type=submit]").unbind('click'); 3229 $("#member_login_190 input[type=submit]").click(function (event) { 3230 3231 var formId = $(this.form).attr('id'); 3232 var captchaHolderKey = formId + "-google-recaptcha-" +$(this.form).data('counter'); 3233 3234 if (typeof captchaHolders[captchaHolderKey] != "undefined") { 3235 if (grecaptcha.getResponse(captchaHolders[captchaHolderKey]) === "") { 3236 event.preventDefault(); 3237 $("#" + formId).formValidation('validate'); 3238 $("#" + formId + " .security_question_label").addClass("has-error"); 3239 $("#" + formId + " #recaptcha_error").css("display", "block"); 3240 return false; 3241 } 3242 3243 /* Solved captcha: clear the error UI and let the click proceed untouched. 3244 The browser then fires a REAL, button-initiated submit event, so 3245 FormValidation runs its normal chain (success.form.fv -> AJAX modal on 3246 checkout / native POST on login). Re-submitting here artificially broke 3247 both ways: native form.submit() skips the FV chain (checkout rendered the 3248 raw JSON response), and jQuery .submit() fires a synthetic submit that FV 3249 refuses, leaving the form stuck after the first error (Bug 2). */ 3250 $("#" + formId + " .security_question_label").removeClass("has-error"); 3251 $("#" + formId + " #recaptcha_error").css("display", "none"); 3252 } 3253 }); 3254 }); 3255</script>
3255</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-xs-12 col-sm-12 col-md-6 nolpad sm-nopad nav'><a href='/checkout/5' id='link349' class='btn btn-danger btn-block sm-bmargin'>Not Joined? <span class="inline-block">Create Your Profile Now</span></a></li><li class='col-xs-12 col-sm-12 col-md-6 norpad sm-nopad nav'><a href='/join' id='link350' class='btn btn-success btn-block'>Are You a Trainer<span class="inline-block">Join Now</span></a></li></ul><div class="clearfix"></div></div></form>
3255<script type="text/javascript">jQuery(document).ready(function() { jQuery("#member_login_190").bind("submit", function() { 3256 });}); </script>
3256 <div class="clearfix"></div> 3257 </div> 3258 3259 3260 </div> 3261 </div> 3262 </div> 3263 </div> 3264 </div> 3265 </div> 3266 3267 3268 3269 <link rel="stylesheet" type="text/css" href="https://www.optimizecdn.com/directory/cdn/assets/bootstrap/limonte-sweetalert2/6.11.2/sweetalert2.min.css">
3270<script src="https://www.optimizecdn.com/directory/cdn/assets/bootstrap/limonte-sweetalert2/6.11.2/sweetalert2.min.js"></script>
3270 3271
3272<script> 3273 function clearContent(thisObj){ 3274 var size; 3275 if(thisObj.hasClass('input-sm') || thisObj.parents('.input-group').hasClass('input-group-sm')){ 3276 size = "small"; 3277 } else if (thisObj.hasClass('input-lg') || thisObj.parents('.input-group').hasClass('large-autosuggest')){ 3278 size = "large"; 3279 } else { 3280 size = "medium"; 3281 } 3282 if(!thisObj.parent().hasClass('input_wrapper')){ 3283 if(thisObj.parent().hasClass('input-group-sm')){ 3284 thisObj.wrap('<span class="input-group-sm input_wrapper"></span>'); 3285 } else if (thisObj.parent().hasClass('input-group-lg')){ 3286 thisObj.wrap('<span class="input-group-lg input_wrapper"></span>'); 3287 } else { 3288 thisObj.wrap('<span class="input_wrapper"></span>'); 3289 } 3290 } 3291 if(thisObj.val() != ""){ 3292 if(thisObj.hasClass('googleSuggest')){ 3293 thisObj.parent().find('.fill_location').remove(); 3294 } 3295 if (!thisObj.parent().find('.clear_content').length){ 3296 thisObj.parent().append(`<span class="clear_content ${size}"><i class="fa fa-times-circle" aria-hidden="true"></i></span>`); 3297 if (thisObj.hasClass("tt-input")) { 3298 thisObj.focus(); 3299 } 3300 3301 } 3302 } 3303 if (thisObj.hasClass('googleSuggest') && thisObj.val().length == 0) { 3304 thisObj.parent().append(`<span class="fill_location ${size}"><i class="fa fa-crosshairs" title="Use Current Location" aria-hidden="true"></i></span>`); 3305 } 3306 if (thisObj.val() == "" && thisObj.parent().find('.clear_content').length){ 3307 thisObj.parent().find('.clear_content').remove(); 3308 } 3309 } 3310 3311 $(document).on('click', '.drp-buttons .applyBtn', function(){ 3312 clearContent($(".dateRange input")); 3313 }); 3314 3315 $('.sm-autosuggest input, .googleSuggest, .large-autosuggest input, .md-autosuggest input, .normal-autosuggest input, .google-writen-location, .dateRange input').keyup(function(){ 3316 clearContent($(this)); 3317 }); 3318 3319 $(document).ready(function(){ 3320 $('.sm-autosuggest input, input.googleSuggest, .large-autosuggest input, .md-autosuggest input, .normal-autosuggest input, .google-writen-location, .dateRange input').each(function(){ 3321 clearContent($(this)); 3322 }) 3323 }) 3324 3325 $(document).on('click', '.clear_content', function(){ 3326 $(this).parent().find('input').val(''); 3327 //tt-input its a class for typeahead auto-suggest 3328 if ($(this).parent().find('input').hasClass("tt-input")) { 3329 $(this).parent().find('input').typeahead('val',''); 3330 } 3331 clearContent($(this).parent().find('input')); 3332 $(this).remove(); 3333 }); 3334 3335 $(window).on('load', function () { 3336 setTimeout(function() { 3337 // add missing href attribute to multi-category options in search modules 3338 $('.bootstrap-select.show-tick .dropdown-menu a').attr('href', '#'); 3339 }, 2000); 3340 }); 3341</script>
3341 3342 3343 3344 3345<a href="#" class="scrollup" title="scrollup"> 3346 <i class="fa fa-caret-up" aria-hidden="true"></i> 3347</a>
3348<script> 3349 $(document).ready(function(){ 3350 // .progressbar() comes from bootstrap-progressbar.min.js, loaded only by widgets 1236/1318. 3351 // Elsewhere it used to fall through to jQuery UI's; jQuery UI is no longer global, so an 3352 // unguarded call throws and kills the rest of this ready() handler (scrollup, crop button). 3353 if ($.fn.progressbar) { 3354 $('.progress .progress-bar').progressbar({ 3355 display_text: 'fill' 3356 }); 3357 } 3358 $(window).scroll(function(){ 3359 3360 if ($(this).scrollTop() > 600) { 3361 $('.scrollup').fadeIn(); 3362 3363 } else { 3364 $('.scrollup').fadeOut(); 3365 } 3366 }); 3367 $('.scrollup').click(function(){ 3368 $("html, body").animate({ 3369 scrollTop: 0 3370 }, 600); 3371 return false; 3372 }); 3373 $('#cropButton').click(function(){ 3374 var iframe = $("#cropiFrame"); 3375 iframe.attr("src", iframe.data("src")); 3376 }); 3377 }); 3378</script>
vendor: 2 bytes, line 3378
3378
3379<script defer> 3380 var favoriteMode = ""; 3381 var apiEngine = ""; 3382 var api = 0; // Set API to use. Default is 0 3383 var activeMembershipLevelEnable = ""; 3384 var favoriteUserClickId = ""; 3385 var bookmarkLabel = `SAVE`; 3386 var bookmarkCountLabel = `SAVES`; 3387 var currentButton; 3388 3389 function favoriteOn(lookForAll = false) { 3390 $('.col-md-6.col-md-offset-3').addClass("col-md-12").removeClass('col-md-6 col-md-offset-3'); 3391 favoriteMode = 'search'; 3392 if ($('.sidebarenabled').data('sidebar')) { 3393 favoriteMode = 'detail'; 3394 if (!$('.sidebarenabled').siblings('.postItem').data('userid')) { 3395 $('.sidebarenabled').siblings('.listingData').remove(); 3396 } 3397 } 3398 favoriteUserClickId = $('.favorite').data('activeuser'); 3399 activeMembershipLevelEnable = $('.favorite').data('activefeatureenable'); 3400 3401// Sets the API URL to use based on API value 3402 if (api == 0) { 3403 apiEngine = '/api/data/html/get/data_widgets/widget_name?name=Bootstrap%20Theme%20-%20Function%20-%20Add%20to%20Favorites%20Button'; 3404 } else if (api == 1) { 3405 apiEngine = '/api/data/html/get/data_widgets/widget_name?name=Bootstrap Theme - Function - Add to Favorites Button'; 3406 } else { 3407 apiEngine = '/api/widget/json/get/Bootstrap Theme - Function - Add to Favorites Button'; 3408 } 3409 if (favoriteUserClickId) { 3410 var favoriteCounter = $('.favorite').siblings('.postItem'); 3411 if ($('.sidebarenabled').data('sidebar') || lookForAll) { 3412 3413 if (favoriteCounter.length == 1) { 3414 var favoriteMode = 'detail'; 3415 var favoriteDataType = $('.sidebarenabled').siblings('.postItem').data('datatype'); 3416 var favoriteDataId = $('.sidebarenabled').siblings('.postItem').data('dataid'); 3417 var favoritePostId = $('.sidebarenabled').siblings('.postItem').data('postid'); 3418 var favoriteUserId = []; 3419 $('.sidebarenabled').siblings('.postItem').each(function () { 3420 favoriteUserId.push($(this).data('userid')); 3421 }); 3422 } else { 3423 var favoriteMode = 'multiSidebar'; 3424 var favoriteDataType = []; 3425 var favoriteDataId = []; 3426 var favoritePostId = []; 3427 var favoriteUserId = []; 3428 $('.postItem').each(function () { 3429 favoriteDataType.push($(this).data('datatype')); 3430 favoriteDataId.push($(this).data('dataid')); 3431 favoritePostId.push($(this).data('postid')); 3432 favoriteUserId.push($(this).data('userid')); 3433 }); 3434 } 3435 } else { 3436 var favoriteMode = 'search'; 3437 var favoriteDataType = $('.favorite').siblings('.postItem').data('datatype'); 3438 var favoriteDataId = $('.favorite').siblings('.postItem').data('dataid'); 3439 if (lookForAll) { 3440 favoriteDataType = (favoriteDataType == 10) ? 11 : 10; 3441 } 3442 if (favoriteDataType != 10) { 3443 var favoritePostId = []; 3444 $('.postItem').each(function () { 3445 favoritePostId.push($(this).data('postid')); 3446 }); 3447 var favoriteUserId = $('.favorite').siblings('.postItem').data('userid'); 3448 } else { 3449 var favoriteUserId = []; 3450 $('.postItem').each(function () { 3451 favoriteUserId.push($(this).data('userid')); 3452 }); 3453 var favoritePostId = $('.favorite').siblings('.postItem').data('postid'); 3454 } 3455 } 3456 favoriteCall(favoriteUserClickId, favoriteUserId, favoriteDataType, favoriteDataId, favoritePostId, favoriteMode, 'check'); 3457 } 3458 } 3459 3460 $(document).on('click', '.favorite', function (e) { 3461 var favoriteUserClickId = $('.favorite').data('activeuser'); 3462 if (favoriteUserClickId && activeMembershipLevelEnable) { 3463 var thisButton = $(this); 3464 currentButton = thisButton; 3465 $(thisButton).attr("disabled", true); 3466 var favoriteUserClickId = $(this).data('activeuser'); 3467 var favoriteUserId = $(this).siblings('.postItem').data('userid'); 3468 var favoriteDataType = $(this).siblings('.postItem').data('datatype'); 3469 var favoriteDataId = $(this).siblings('.postItem').data('dataid'); 3470 var favoritePostId = $(this).siblings('.postItem').data('postid'); 3471 $(this).toggleClass('favoriteActive'); 3472 if ($(this).data('state') == 0) { 3473 favoriteCall(favoriteUserClickId, favoriteUserId, favoriteDataType, favoriteDataId, favoritePostId, favoriteMode, 'add'); 3474 $(this).data('state', 1); 3475 } else { 3476 favoriteCall(favoriteUserClickId, favoriteUserId, favoriteDataType, favoriteDataId, favoritePostId, favoriteMode, 'delete'); 3477 $(this).data('state', 0); 3478 } 3479 setTimeout(function () { 3480 $(thisButton).attr("disabled", false); 3481 }, 500); 3482 } 3483 });
3484 3485 function toogleBookmark(node) { 3486 var postId = $(node).data('postid'); 3487 var count = $(node).data('count'); 3488 var numberNode = $(node).find("#number-" + postId); 3489 var textLabelNode = $(node).find("#bookmark-content"); 3490 3491 if ($(node).hasClass('favoriteActive') !== false) { 3492 count--; 3493 } else { 3494 count++; 3495 } 3496 3497 $(node).data("count", count); 3498 3499 if (count > 0) { 3500 $(textLabelNode).html(bookmarkCountLabel); 3501 $(numberNode).html(' (' + count + ')'); 3502 } else { 3503 $(textLabelNode).html(bookmarkLabel); 3504 $(numberNode).html(''); 3505 } 3506 } 3507 3508 // Function that Adds, Deletes and Selects Favorites from Backend 3509 function favoriteCall(favoriteUserClickId, favoriteUserId, favoriteDataType, favoriteDataId, favoritePostId, favoriteMode, favoriteAction) { 3510 $.post(apiEngine, { 3511 favoriteUserClickId: favoriteUserClickId, 3512 favoriteUserId: favoriteUserId, 3513 favoriteDataType: favoriteDataType, 3514 favoriteDataId: favoriteDataId, 3515 favoritePostId: favoritePostId, 3516 favoriteMode: favoriteMode, 3517 favoriteAction: favoriteAction 3518 }, function (data) { 3519 if (api == 0) { 3520 var splitData = data.split('<split>'); 3521 data = splitData[1]; 3522 } 3523 3524 if(favoriteAction == "add" && data == "save_favorite_error"){ 3525 $(currentButton).trigger('click'); 3526 swal({ 3527 type:"warning", 3528 title: `Action Unavailable`, 3529 html: `Your account is currently not ACTIVE. <br> Only ACTIVE accounts can perform this action.`, 3530 }); 3531 } 3532 3533 if (data !== null && data !== 'null') { 3534 // Checks if the action 'check' was send 3535 if (favoriteAction == 'check' && favoriteMode != 'multiSidebar') { 3536 // Checks if we are in a Detail Page 3537 if (!$('.sidebarenabled').data('sidebar')) { 3538 // Checks if we are viewing a Member 3539 if (favoriteDataType != 10) { 3540 $.each(JSON.parse(data), function (index, value) { 3541 $('.postItem[data-postid="' + value + '"]').siblings('.favorite').addClass('favoriteActive'); 3542 $('.postItem[data-postid="' + value + '"]').siblings('.favorite').data('state', 1); 3543 }); 3544 } else { 3545 $.each(JSON.parse(data), function (index, value) { 3546 $('.member_results .postItem[data-userid="' + value + '"]').siblings('.favorite').addClass('favoriteActive'); 3547 $('.member_results .postItem[data-userid="' + value + '"]').siblings('.favorite').data('state', 1); 3548 }); 3549 } 3550 } else { 3551 // Checks if we are viewing a Member 3552 if (favoriteDataType != 10) { 3553 $.each(JSON.parse(data), function (index, value) { 3554 $('.sidebarenabled').siblings('.favorite').addClass('favoriteActive'); 3555 $('.sidebarenabled').siblings('.favorite').data('state', 1); 3556 }); 3557 } else { 3558 $.each(JSON.parse(data), function (index, value) { 3559 $('.sidebarenabled').siblings('.favorite').addClass('favoriteActive'); 3560 $('.sidebarenabled').siblings('.favorite').data('state', 1); 3561 }); 3562 } 3563 } 3564 } else if (favoriteAction == 'check' && favoriteMode == 'multiSidebar') { 3565 let totalDataCount = JSON.parse(data); 3566 if (totalDataCount) { 3567 totalDataCount = totalDataCount.length; 3568 for (let i = 0; i < totalDataCount; i++) { 3569 if (JSON.parse(data)[i].dataQuery != 0) { 3570 $('.postItem[data-postid="' + JSON.parse(data)[i].postQuery + '"][data-dataid="' + JSON.parse(data)[i].dataQuery + '"]').siblings('.favorite').addClass('favoriteActive'); 3571 $('.postItem[data-postid="' + JSON.parse(data)[i].postQuery + '"][data-dataid="' + JSON.parse(data)[i].dataQuery + '"]').siblings('.favorite').data('state', 1); 3572 } else { 3573 /* dataQuery == 0 means a MEMBER favorite (users_favorite dataType 10). 3574 Restrict the match to member-type spans: on profile pages the owner's 3575 post spans carry the same data-userid, and without this filter one 3576 member favorite marked every post button of that owner as saved. */ 3577 $('.postItem[data-userid="' + JSON.parse(data)[i].postQuery + '"][data-datatype="10"]').siblings('.favorite').addClass('favoriteActive'); 3578 $('.postItem[data-userid="' + JSON.parse(data)[i].postQuery + '"][data-datatype="10"]').siblings('.favorite').data('state', 1); 3579 } 3580 } 3581 } 3582 } 3583 } 3584 }); 3585 } 3586 3587 // Code that runs once to show all favored posts by a registered user 3588 3589 favoriteOn(); 3590 favoriteOn(true); 3591</script>
3591<script> 3592 const listView = document.getElementsByClassName('listView')[0]; 3593 const gridView = document.getElementsByClassName('gridView')[0]; 3594 const queryString = {"sized":0,"mysql_real_escape_string_runned":"1","form":"myform","formname":"member_login","dowiz":1,"save":1,"url_origin_pars":"\/search_results"}; 3595 const profId = ``; 3596 const servId =null; 3597 const countryId = ``; 3598 const stateId = ``; 3599 const cityId = ``; 3600 const seed = ``; 3601 const profs = {"new_filename":"search_results"}; 3602 const btnPositionInside = document.querySelector('.grid-container .clickToLoadMoreContainer'); 3603 const btnPositionOutside = document.querySelector('.grid-container ~ .clickToLoadMoreContainer'); 3604 const amountToSum = 7; 3605 let currentAmountText = document.querySelector('.current__amount__js'); 3606 let totalAmount = document.querySelector('.total__js'); 3607 let btnClickMore = document.getElementsByClassName('clickToLoadMoreBtn')[0]; 3608 let btnClickMoreContainer = document.getElementsByClassName('clickToLoadMoreContainer')[0]; 3609 let flagFirstTime = true; 3610 let autoLoadResults = true; 3611 let lastElementPost ; 3612 if(typeof totalAmount !== "undefined" && totalAmount !== null){ 3613 let removeCommasAndDots = /[.,\s]/g; 3614 totalAmount = totalAmount.innerHTML.replace(removeCommasAndDots, ''); 3615 } 3616 /*event listener*/ 3617 if (typeof btnClickMore !== "undefined") { 3618 btnClickMore.addEventListener('click', function (event) { 3619 let viewIcons = document.querySelectorAll('.views i.gridView.activeView')[0]; 3620 let featureDCId = this.dataset.dc; 3621 let currentPage = this.dataset.page; 3622 let dataType = this.dataset.type; 3623 let levId = this.dataset.lvl; 3624 this.dataset.page = parseInt(currentPage) + 1; 3625 let url = `/wapi/widget`; 3626 let currentBTN = this;
3627 let currentHTML = this.innerHTML; 3628 lastElementPost = document.querySelectorAll('.search_result'); 3629 this.classList.add('loadingMore'); 3630 this.innerHTML = `<i class="fa fa-circle-o-notch fa-spin fa-fw"></i> Loading...`; 3631 let formData = new FormData(); 3632 autoLoadResults=false; 3633 setClassLoaded(); 3634 3635 formData.append('dc_id', featureDCId); 3636 formData.append('header_type', 'html'); 3637 formData.append('request_type', 'POST'); 3638 formData.append('currentPage', currentPage); 3639 formData.append('dataType', dataType); 3640 formData.append('queryString', JSON.stringify(queryString)); 3641 formData.append('profId', profId); 3642 formData.append('servId', JSON.stringify(servId)); 3643 formData.append('countryId', countryId); 3644 formData.append('stateId', stateId); 3645 formData.append('cityId', cityId); 3646 formData.append('levId', levId); 3647 formData.append('seed', seed); 3648 formData.append('profsPost', JSON.stringify(profs)); 3649 formData.append('widget_name', 'Add-On - Bootstrap Theme - Search - Lazy Loader'); 3650 let myInit = { 3651 method: 'POST', 3652 body: formData 3653 }; 3654 fetch(url, myInit) 3655 .then(function (response) { 3656 return response.text(); 3657 }).then(function (html) { 3658 let parser = new DOMParser(); 3659 3660 // Parse the text 3661 let result = parser.parseFromString(html, "text/html"); 3662 let newResultsHTML = result.getElementById('grabHTML__js').innerHTML; 3663 autoLoadResults =true; 3664 let amountOfClicks = result.getElementById('grabHTML__js').dataset.pages; 3665 3666 var countBefore = $('.grid-container .search_result').length; 3667 3668 if (typeof btnPositionOutside !== "undefined" && btnPositionOutside !== null) { 3669 $('.grid-container').append(newResultsHTML); 3670 } 3671 if (typeof btnPositionInside !== "undefined" && btnPositionInside !== null || btnPositionOutside === null && dataType == 13) { 3672 $('.clickToLoadMoreContainer').before(newResultsHTML); 3673 } 3674 3675 // Fade in only the actually new results 3676 var newCount = $('.grid-container .search_result').length - countBefore; 3677 var $allNew = $('.grid-container .search_result').slice(-newCount); 3678 $allNew.css({opacity: 0, transition: 'opacity 0.4s ease'}); 3679 3680 currentBTN.innerHTML = currentHTML; // default html 3681 currentBTN.classList.remove('loadingMore'); 3682 3683 if (typeof viewIcons !== 'undefined') { 3684 applyGridClasses($allNew); 3685 // Recalculate gridBreak classes and hide clearfix/hr between grid items 3686 $('.gridBreak').removeClass('gridBreak'); 3687 /* Row-break stride must follow the column class actually on the page, same rule as applyGridClasses */ 3688 var bdGridFourPerRow = $('.grid-container .search_result.col-md-3.grid').length > 0; 3689 $('.grid-container.visible > hr:nth-of-type(' + (bdGridFourPerRow ? '4n' : '3n') + ')').addClass('gridBreak'); 3690 $('.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(); 3691 if (typeof masonry_opened !== 'undefined' && masonry_opened == 1) { 3692 setTimeout(function(){ 3693 $('.grid-container').masonry('appended', $allNew); 3694 setTimeout(function(){ $allNew.css('opacity', 1); }, 100); 3695 checkAllImagesLoaded(); 3696 }, 500); 3697 } else { 3698 setTimeout(function(){ $allNew.css('opacity', 1); }, 100); 3699 checkAllImagesLoaded(); 3700 } 3701 } else { 3702 setTimeout(function(){ $allNew.css('opacity', 1); }, 50); 3703 } 3704 if (typeof favoriteOn == 'function') { 3705 favoriteOn(); 3706 } 3707 if (typeof runRoyalSlider == 'function') { 3708 runRoyalSlider(); 3709 } 3710 3711 setAmountPages(currentBTN, amountOfClicks); 3712 if (typeof currentAmountText !== "undefined" && currentAmountText !== null) { 3713 let newAmount = parseInt(currentAmountText.innerHTML) + parseInt(amountToSum); 3714 if (newAmount >= parseInt(totalAmount)) { 3715 newAmount = document.querySelector('.total__js').innerHTML; 3716 } 3717 currentAmountText.innerHTML = newAmount.toString() 3718 } 3719 if (typeof google != "undefined" && google.hasOwnProperty('maps')){ 3720 if (typeof initializeMapSR == 'function') { 3721 initializeMapSR(); 3722 }else{ 3723 $('.mapView.activeView').click(); 3724 } 3725 } 3726 }).catch((error) => { 3727 console.error('Error:', error); 3728 }); 3729 }); 3730 // Check if insta_load_btn_behavior is set 3731 3732 } 3733 if (typeof gridView !== "undefined" && typeof btnClickMoreContainer !== "undefined") { 3734 gridView.addEventListener('click', function () { 3735 gridView.classList.add('activeView'); 3736 if (gridView.classList.contains('activeView')) { 3737 btnClickMoreContainer.classList.add('gridBtnLazyLoad'); 3738 } else { 3739 btnClickMoreContainer.classList.remove('gridBtnLazyLoad'); 3740 } 3741 }); 3742 } 3743 if (typeof listView !== "undefined" && typeof btnClickMoreContainer !== "undefined") { 3744 3745 listView.addEventListener('click', function () { 3746 listView.classList.add('activeView'); 3747 if (listView.classList.contains('activeView')) { 3748 btnClickMoreContainer.classList.remove('gridBtnLazyLoad'); 3749 } else { 3750 btnClickMoreContainer.classList.add('gridBtnLazyLoad'); 3751 } 3752 }); 3753 } 3754 3755 function setAmountPages(btn, amount) { 3756 if (!("pages" in btn.dataset)) { 3757 btn.dataset.pages = parseInt(amount) - 1; // we do -1 because the one just clicked 3758 } else { 3759 btn.dataset.pages = parseInt(btn.dataset.pages) - 1; 3760 } 3761 if (btn.dataset.pages <= 0) { 3762 removeListenToScroll(); 3763 btn.remove(); 3764 } 3765 } 3766 3767 function setClassLoaded() { 3768 if (flagFirstTime) { 3769 flagFirstTime = false; 3770 let images = document.querySelectorAll('.grid-container img:not(.loaded)');
3771 images.forEach(image => { 3772 image.classList.add("loaded"); 3773 }); 3774 } 3775 } 3776 function applyGridClasses($el) { 3777 $el.find('.img_section.col-xs-2').removeClass('col-xs-2').addClass('col-xs-12 bmargin ex-col-2'); 3778 $el.find('.img_section.col-sm-3').removeClass('col-sm-3').addClass('col-sm-12 bmargin ex-col-3'); 3779 $el.find('.img_section.col-sm-4').removeClass('col-sm-4').addClass('col-sm-12 bmargin ex-col-4'); 3780 $el.find('.mid_section.col-sm-9').removeClass('col-sm-9').addClass('col-sm-12 ex-col-9'); 3781 $el.find('.mid_section.col-sm-6').removeClass('col-sm-6').addClass('col-sm-12 ex-col-6'); 3782 $el.find('.mid_section.col-sm-7').removeClass('col-sm-7').addClass('col-sm-12 nohpad ex-col-7 text-center bpad'); 3783 $el.find('.mid_section.col-sm-8').removeClass('col-sm-8').addClass('col-sm-12 ex-col-8 nohpad bpad'); 3784 $el.find('.mid_section .post-location-snippet').addClass('text-center'); 3785 $el.find('.mid_section.ex-col-7 .sm-block').addClass('show'); 3786 $el.find('.mid_section .row-fluid.bpad .col-md-8').removeClass('col-md-8').addClass('col-sm-12 bmargin'); 3787 $el.find('.mid_section .row-fluid.bpad a').addClass('btn-block'); 3788 $el.find('.mid_section .row-fluid.bpad').addClass('text-center'); 3789 $el.find('.info_section').removeClass('col-sm-3 norpad').addClass('col-sm-12 nopad'); 3790 $el.find('.mid_section > div > p').addClass('text-center'); 3791 $el.find('.mid_section h2').addClass('nomargin'); 3792 $el.find('.mid_section a.h3').addClass('text-center h4 tmargin'); 3793 $el.find('.mid_section .view-details').removeClass('rmargin'); 3794 $el.find('.mid_section .contact-member').removeClass('lmargin'); 3795 $el.find('.member-search-full-name').removeClass('rmargin'); 3796 $el.find('.member-search-reviews').removeClass('rmargin'); 3797 $el.find('.member-search-location').removeClass('rmargin rpad'); 3798 $el.find('.member-search-company').addClass('btn-block'); 3799 $el.find('.view_phone_number').addClass('center-block'); 3800 $el.find('.phone_number').addClass('btn-block'); 3801 $el.find('.search_result_image').addClass('grid_image'); 3802 $el.find('.post-search-category').removeClass('inline-block').addClass('text-center'); 3803 $el.find('.post-results-star').removeClass('pull-right').addClass('text-center tmargin'); 3804 /* 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) */ 3805 if ($('.grid-container .search_result.col-md-3.grid').not($el).length > 0) { 3806 $el.addClass('col-xs-12 col-sm-3 col-md-3 grid').removeClass('row-fluid'); 3807 } else { 3808 $el.addClass('col-xs-12 col-sm-4 col-md-4 grid').removeClass('row-fluid'); 3809 } 3810 $el.find('.grid_element').addClass('well xs-center-block'); 3811 $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(); 3812 $el.find('h2.h3.bold > a').addClass('gridA'); 3813 $el.find('.info_section .module').removeClass('module fpad'); 3814 } 3815 3816 function refreshUI(){ 3817 if (typeof masonry_opened !== 'undefined' && masonry_opened == 1) { 3818 $('.grid-container').masonry('layout'); 3819 } 3820 } 3821 function checkAllImagesLoaded() { 3822 let images = document.querySelectorAll('.grid-container img:not(.loaded)'); 3823 let countImg = 0; 3824 3825 if (images.length === 0) { 3826 refreshUI(); 3827 return; 3828 } 3829 3830 images.forEach(image => { 3831 image.classList.add("loaded"); 3832 3833 if (image.complete) { 3834 countImg++; 3835 if (countImg === images.length) { 3836 refreshUI(); 3837 } 3838 return; 3839 } 3840 3841 image.addEventListener('load', () => { 3842 countImg++; 3843 if (countImg === images.length) { 3844 refreshUI() 3845 } 3846 }); 3847 image.addEventListener('error', () => { 3848 countImg++; 3849 if (countImg === images.length) { 3850 refreshUI() 3851 } 3852 }); 3853 }); 3854 3855 } 3856 3857 // Variables 3858 let userStartedScrolling = false; // Flag to check if the user has started scrolling 3859 let wasPreviouslyInViewport = false; // To track if the button was in the viewport previously 3860 3861 3862 // Function to remove the scroll event listener 3863 function removeListenToScroll(){ 3864 window.removeEventListener('scroll', listenToScroll); 3865 } 3866 3867 // Function to check button visibility and load content 3868 function listenToScroll() { 3869 const isInViewport = isElementInViewport(btnClickMore); 3870 3871 // Check if the button has just entered the viewport 3872 const justEnteredViewport = !wasPreviouslyInViewport && isInViewport; 3873 3874 // If button just entered the viewport, user has started scrolling, and autoLoadResults is true 3875 if (userStartedScrolling && justEnteredViewport && autoLoadResults) { 3876 // Add a delay (2 seconds) before automatically clicking the button to load content 3877 setTimeout(function() { 3878 btnClickMore.click(); 3879 autoLoadResults = false; // Set the flag too false to avoid subsequent auto-clicks 3880 }, 2000); 3881 } 3882 3883 // If the button is out of the viewport, reset autoLoadResults 3884 if (!isInViewport) { 3885 autoLoadResults = true; 3886 } 3887 3888 // Update the previous viewport status for the next check 3889 wasPreviouslyInViewport = isInViewport; 3890 } 3891 3892 // Function to determine if a DOM element is in the viewport 3893 function isElementInViewport(el) { 3894 const rect = el.getBoundingClientRect(); 3895 return ( 3896 rect.top >= 0 && 3897 rect.left >= 0 && 3898 rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && 3899 rect.right <= (window.innerWidth || document.documentElement.clientWidth) 3900 ); 3901 } 3902 3903</script>
vendor: 2 bytes, line 3903
3903
3904<script type="text/javascript"> 3905 3906 3907 3908 //function to get url GET parameters 3909 function getUrlParameter(sParam) { 3910 var sPageURL = window.location.search.substring(1); 3911 var sURLVariables = sPageURL.split('&'); 3912 3913 for (var i = 0; i < sURLVariables.length; i++) { 3914 var sParameterName = sURLVariables[i].split('='); 3915 if (sParameterName[0] == sParam) { 3916 return decodeURIComponent(sParameterName[1]); 3917 } 3918 } 3919 } 3920 3921 //stating variables for the first initialize of the sidebar map 3922 var mapSR; 3923 var geocoder; 3924 var mapSRLat = parseFloat(getUrlParameter('lat')); 3925 var mapSRLng = parseFloat(getUrlParameter('lng')); 3926 var theZoom = 8; 3927 var bounds; 3928 if (isNaN(mapSRLat) || isNaN(mapSRLng)) { 3929 3930 mapSRLat = parseFloat(55.3781); 3931 mapSRLng = parseFloat(-3.4360); 3932 theZoom = parseFloat('6'); 3933 } 3934 //function that initializes the creation of the google map 3935 function setJsMapSR(element=null) { 3936 if (window['setJsMapSR_var'] ===true) { 3937 return; 3938 } 3939 if(element == null){ 3940 element = document.getElementById('map-canvas'); 3941 if (element === null) { 3942 element = document.querySelector('div[data-id]'); 3943 } 3944 } 3945 window['setJsMapSR_var']=true; 3946 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}]}]; 3947 var styledMap = new google.maps.StyledMapType(styles, {name: "Styled Map"}); 3948 3949 let mapDivElement = element; 3950 if (typeof mapDivElement !== undefined && mapDivElement != null) { 3951 var mapSROptions = { 3952 center: {lat: mapSRLat, lng: mapSRLng}, 3953 mapTypeControlOptions: {mapTypeIds: [google.maps.MapTypeId.ROADMAP, 'map_style']}, 3954 mapTypeControl: false, 3955 zoom: theZoom, 3956 controlSize: 26, 3957 mapSRTypeControl: false, 3958 streetViewControl: false, 3959 scrollwheel: false 3960 }; 3961 mapSR = new google.maps.Map(mapDivElement, mapSROptions); 3962 mapSR.mapTypes.set('map_style', styledMap); 3963 mapSR.setMapTypeId('map_style'); 3964 3965 //This piece of code will create an autosuggest for every input with the class "googleSuggest" 3966 var counter = 1; 3967 var inputsArray = []; 3968 initializeMapSR(); // add markers 3969 } 3970 } 3971 3972 function isFloat(value) { 3973 value = parseFloat(value); 3974 if ( 3975 typeof value === 'number' && 3976 !Number.isNaN(value) && 3977 !Number.isInteger(value) 3978 ) { 3979 return true; 3980 } 3981 3982 return false; 3983 } 3984 3985 function initializeMapSR() { 3986 //the markers process will only happen if there are spans with the class "google-pin-location" 3987 if ($('.google-pin-location:not(".marker-pin")').length > 0) { 3988 //array with all the markers 3989 var markersArray = []; 3990 // variable to close the last window 3991 var closeLastWindows = null; 3992 if (window['google_bounds'] != true) { 3993 window['google_bounds'] = true; 3994 bounds = new google.maps.LatLngBounds(); 3995 } 3996 //function that will set a marker on the map for each user location 3997 $('.google-pin-location:not(".marker-pin")').each(function () { 3998 $(this).addClass('marker-pin');
3999 if( !isFloat($(this).attr("data-lat")) || !isFloat($(this).attr("data-lng"))){ 4000 return; 4001 } 4002 4003 // Making the icon 4004 var iconImage = '/images/marker.png'; 4005 //var markerLatLng = parseFloat($(this).attr("data-lat"))+","+parseFloat($(this).attr("data-lng")); 4006 var markerLatLng = {lat:parseFloat($(this).attr("data-lat")),lng:parseFloat($(this).attr("data-lng"))}; 4007 var markerName = $(this).attr("data-name"); 4008 var marker = new google.maps.Marker({ 4009 position: markerLatLng, 4010 map: mapSR, 4011 icon: iconImage, 4012 title: markerName 4013 }); 4014 bounds.extend(markerLatLng); 4015 var hideLink = $(this).attr('data-hideMessages'); 4016 var phonehtml = ''; 4017 if ($(this).attr("data-phone") != "") { 4018 phonehtml = '<p class="btn-xs btn-default btn-block"><i class="fa fa-phone fa-fw"></i>' + $(this).attr("data-phone") + '</p>'; 4019 if ($(this).attr("data-addon") == 1) { 4020 phonehtml = '<div class="btn btn-xs btn-block btn-secondary btn-outline js-btn" onClick="clickToCall(this, false)" title="See Phone Number" data-token="' + $(this).attr("data-token") +'">See 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>'; 4021 } 4022 } 4023 4024 if (hideLink == 1) { 4025 marker['infowindow'] = new google.maps.InfoWindow({ 4026 content: `<div class="info_window"> 4027 <img src="` + $(this).attr("data-photo") + `">` + 4028 `<a class="h5 bold" href=` + $(this).attr("data-filename") + `>` 4029 + $(this).attr("data-name") + 4030 `</a>` 4031 + phonehtml + 4032 `<a class="btn btn-xs btn-success btn-block view_profile" href=` + $(this).attr("data-filename") + `> 4033 View Listing 4034 </a>` + 4035 `</div>` 4036 }); 4037 } else { 4038 marker['infowindow'] = new google.maps.InfoWindow({ 4039 content: `<div class="info_window"> 4040 <img src="` + $(this).attr("data-photo") + `">` + 4041 `<a class="h5 bold" href=` + $(this).attr("data-filename") + `>` 4042 + $(this).attr("data-name") + 4043 `</a>` 4044 + phonehtml + 4045 `<a class="btn btn-xs btn-primary btn-block view_profile" href=` + $(this).attr("data-filename") + `> 4046 View Listing 4047 </a>` + 4048 `<a class="btn btn-xs btn-secondary btn-block contact_now" href=` + $(this).attr("data-filename") + `/connect> 4049 Send Message 4050 </a>` + 4051 `</div>` 4052 }); 4053 } 4054 // assuming you also want to hide the infowindow when user mouses-out 4055 4056 function closeInfoWindows() { 4057 if (closeLastWindows != null) { 4058 closeLastWindows.close(); 4059 } 4060 } 4061 4062 var typeOfListener = 'mouseover'; // by default for desktop 4063 google.maps.event.addListener(marker, typeOfListener, function () { 4064 if (window['mapCloseTimeout']) { 4065 clearTimeout(window['mapCloseTimeout']); 4066 } 4067 closeInfoWindows(); 4068 closeLastWindows = this['infowindow']; 4069 this['infowindow'].open(mapSR, this); 4070 }); 4071 4072 // Close infowindow when mouse leaves the marker (desktop only) 4073 if (typeOfListener === 'mouseover') { 4074 google.maps.event.addListener(marker, 'mouseout', function () { 4075 var self = this; 4076 window['mapCloseTimeout'] = setTimeout(function () { 4077 self['infowindow'].close(); 4078 if (closeLastWindows === self['infowindow']) { 4079 closeLastWindows = null; 4080 } 4081 }, 300); 4082 }); 4083 } 4084 4085 }); 4086 4087 // Keep infowindow open when mouse hovers over its content (desktop only) 4088 $(document).on('mouseenter', '.gm-style-iw', function () { 4089 if (window['mapCloseTimeout']) { 4090 clearTimeout(window['mapCloseTimeout']); 4091 } 4092 }).on('mouseleave', '.gm-style-iw', function () { 4093 if (closeLastWindows != null) {
4094 closeLastWindows.close(); 4095 closeLastWindows = null; 4096 } 4097 }); 4098 4099 mapSR.fitBounds(bounds); 4100 } 4101 if ($('#map-canvas').length > 0) { 4102 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>"; 4103 $('body').append(cssHideLogo); 4104 4105 } else { 4106 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>"; 4107 $('body').append(cssHideLogo); 4108 } 4109 } 4110 4111 function showPhone(elemente) { 4112 $(elemente).addClass("hide").siblings().removeClass("hide"); 4113} 4114 function initGMap() { 4115 4116 // Check if the map is loaded. 4117 const mapIconView = document.querySelector('.mapView'); 4118 if (typeof mapIconView !== undefined && mapIconView != null) { 4119 mapIconView.addEventListener('click', initGMap); 4120 mapIconView.removeEventListener('click', initGMap); 4121 } 4122 const mapDivID = document.getElementById('map-canvas'); 4123 4124 if (typeof google === 'object' && google.hasOwnProperty('maps')) { 4125 // Set the map source. 4126 setJsMapSR(mapDivID); 4127 } else { 4128 // If the map is not loaded, wait for it to load before setting the source. 4129 googleMapOnFormClick().then(() => { 4130 setJsMapSR(mapDivID); 4131 }); 4132 } 4133 4134 } 4135 4136 window.addEventListener('load', () => { 4137 // Get the lazy map div, either by data-id or by ID. 4138 const lazyMapDiv = document.querySelector('div[data-id]') 4139 const mapDivID = document.getElementById('map-canvas'); 4140 // Add a delay to allow the map to load before initializing it. 4141 setTimeout(() => { 4142 // Check if the map div exists. 4143 if (typeof lazyMapDiv !== "undefined" && lazyMapDiv !== null) { 4144 lazyMapDiv.id = lazyMapDiv.dataset.id; 4145 let mapIconView = document.querySelector('.mapView'); 4146 if (typeof mapIconView !== undefined && mapIconView != null) { 4147 mapIconView.addEventListener('click', initGMap); 4148 // If map view is already active, initialize immediately 4149 if (mapIconView.classList.contains('activeView')) { 4150 initGMap(); 4151 } 4152 } 4153 } else if (typeof mapDivID !== "undefined" || mapDivID !== null) { 4154 // Initialize the map. 4155 initGMap(); 4156 } 4157 }, 500); 4158 }); 4159</script>
4159<script> 4160 4161$('.view_phone_number').click(function(event){ 4162 event.preventDefault(); 4163 $(this).hide(); 4164 $(this).next('span.phone_number').css("display","inline-block"); 4165}); 4166</script>
4166 4167 4168 4169
4169<script type="text/javascript"> 4170 /* CT dissolved its county governments in 1960, so Google returns its 8 counties as 4171 colloquial_area instead of administrative_area_level_2 â they must never reach a 4172 city field. Google translates the component name to the site language, so the 4173 language-stable place_id is checked first and the word list only backs it up. */ 4174 if (typeof window.bdIsColloquialCounty !== 'function') { 4175 window.bdIsColloquialCounty = function (componentName, resultPlaceId) { 4176 var countyPlaceIds = [ 4177 'ChIJWRM2Nakw5okRoTCxHvz_5xw', /* Middlesex County, CT */ 4178 'ChIJmeTbuDYH6IkR3xgeNvszpgg', /* Fairfield County, CT */ 4179 'ChIJiT24cvvP54kR2fSPHkp0Akc', /* New Haven County, CT */ 4180 'ChIJvYe7N7eQ54kRL6nZaXRwPkI', /* Litchfield County, CT */ 4181 'ChIJtxC3p6qs54kRIvK-2bctar0', /* Hartford County, CT */ 4182 'ChIJj-lvZQli5okRGCuGRd6xKt0', /* Tolland County, CT */ 4183 'ChIJRWKqeLdi5okRLXWDlSEGeTY', /* Windham County, CT */ 4184 'ChIJwTIQbvVv5okRU5_gSJczUTQ' /* New London County, CT */ 4185 ]; 4186 4187 if (typeof resultPlaceId === 'string' && resultPlaceId !== '' 4188 && countyPlaceIds.indexOf(resultPlaceId) !== -1) { 4189 return true; 4190 } 4191 4192 if (typeof componentName !== 'string' || componentName === '') { 4193 return false; 4194 } 4195 4196 var name = componentName.toLowerCase(); 4197 4198 /* Only unambiguous county words â generic ones (region, district) would strip 4199 legitimate colloquial areas, and their languages already match on place_id. 4200 Word-boundary matched so names like "Countyline, OK" are left alone. */ 4201 var wordTokens = ['county', 'condado', 'comté', 'contea', 4202 'comitatul', 'hrabstwo', 'megye', 'konderria']; 4203 var isAlnum = function (ch) { 4204 return (ch >= 'a' && ch <= 'z') || (ch >= '0' && ch <= '9'); 4205 }; 4206 4207 for (var t = 0; t < wordTokens.length; t++) { 4208 var token = wordTokens[t]; 4209 var from = 0; 4210 while (true) { 4211 var at = name.indexOf(token, from); 4212 if (at === -1) { 4213 break; 4214 } 4215 var before = (at > 0) ? name.charAt(at - 1) : ' '; 4216 var after = ((at + token.length) < name.length) ? name.charAt(at + token.length) : ' '; 4217 if (!isAlnum(before) && !isAlnum(after)) { 4218 return true; 4219 } 4220 from = at + 1; 4221 } 4222 } 4223 4224 /* Non-latin scripts have no alphanumeric word boundary. */ 4225 var scriptTokens = ['каÑнÑи', 'کاؤÙÙ¹Û', 'à¤à¤¾à¤à¤à¤à¥', 'ì¹´ì´í°']; 4226 for (var s = 0; s < scriptTokens.length; s++) { 4227 if (name.indexOf(scriptTokens[s]) !== -1) { 4228 return true; 4229 } 4230 } 4231 4232 return false; 4233 }; 4234 } 4235 4236 // Try to load coordinates from sessionStorage on page load 4237 var vlat = 0; 4238 var vlon = 0; 4239 try { 4240 var savedLat = sessionStorage.getItem('bd_geolocation_lat'); 4241 var savedLon = sessionStorage.getItem('bd_geolocation_lon'); 4242 if (savedLat && savedLon) { 4243 vlat = parseFloat(savedLat); 4244 vlon = parseFloat(savedLon); 4245 } 4246 } catch(e) {} 4247 var isSubmit = false; 4248 var isGettingLocation = false; // Flag to prevent multiple simultaneous geolocation requests 4249 4250 // Function to save coordinates to sessionStorage 4251 function saveCoordinatesToSession(lat, lon) { 4252 try { 4253 sessionStorage.setItem('bd_geolocation_lat', lat.toString()); 4254 sessionStorage.setItem('bd_geolocation_lon', lon.toString()); 4255 } catch(e) {} 4256 } 4257 4258 // Function to get coordinates from sessionStorage if current ones are 0 4259 function getCoordinatesFromSession() { 4260 if (vlat === 0 && vlon === 0) { 4261 try { 4262 var savedLat = sessionStorage.getItem('bd_geolocation_lat'); 4263 var savedLon = sessionStorage.getItem('bd_geolocation_lon'); 4264 if (savedLat && savedLon) { 4265 vlat = parseFloat(savedLat); 4266 vlon = parseFloat(savedLon); 4267 return true; 4268 } 4269 } catch(e) {} 4270 } 4271 return false; 4272 } 4273 var cityTypes = [ 4274 'colloquial_area', 4275 'locality', 4276 'sublocality', 4277 'sublocality_level_1', 4278 'sublocality_level_2', 4279 'sublocality_level_3', 4280 'sublocality_level_4', 4281 'sublocality_level_5', 4282 'neighborhood', 4283 'ward', 4284 'postal_town' 4285 ]; 4286 4287 var postalTypes = [ 4288 'postal_code', 4289 'postal_code_prefix', 4290 'postal_code_suffix', 4291 'street_number', 4292 'premise', 4293 'subpremise', 4294 'route', 4295 'intersection', 4296 'street_address', 4297 'floor', 4298 'room', 4299 'post_box', 4300 'delivery_address' 4301 ]; 4302 4303 var isSubmitting = false; 4304 window.cachedSelectedOption = [{ 'typed_location': '' }]; 4305 window.isSubmittingMainSearch = false; 4306 4307 document.addEventListener('DOMContentLoaded', () => { 4308 let isSubmitting = false; // Add flag at the top level 4309 4310 setTimeout(()=>{ 4311 let googleSuggestForm = document.querySelectorAll('.googleSuggest,.google-writen-location,input[name="lead_location"],.fill_location'); 4312 if (typeof googleSuggestForm != "undefined") { 4313 for (let i = 0; i < googleSuggestForm.length; i++) { 4314 let closestForm = googleSuggestForm[i].closest('form'); 4315 if(typeof closestForm != "undefined" && closestForm != null){ 4316 closestForm.addEventListener('focusin', googleMapOnFormClick, false); 4317 4318 }else{ 4319 googleSuggestForm[i].addEventListener('input', googleMapOnFormClick, false); 4320 } 4321 googleSuggestForm[i].addEventListener('click', googleMapOnFormClick, false); 4322 } 4323 } 4324 },200);
4325 4326 $('.website-search button[type=submit]').click(async function (e) { 4327 e.preventDefault(); // Prevent the default submit action 4328 var nativeForm = $(this).closest('form')[0]; 4329 if (nativeForm && typeof nativeForm.reportValidity === 'function' && !nativeForm.reportValidity()) { 4330 return false; 4331 } 4332 await googleMapOnFormClick(); 4333 $(this).closest('form').submit(); 4334 }); 4335 }); 4336 window['gmapClick'] = false; 4337 function googleMapOnFormClick() { 4338 if(window.gmapClick){ 4339 return; 4340 } 4341 window.gmapClick = true; 4342 4343 return new Promise((resolve, reject) => { 4344 window.isSubmittingMainSearch = false; 4345 let googleSuggestForm = document.querySelectorAll('.googleSuggest, .google-writen-location, input[name="lead_location"], .fill_location'); 4346 let mapUri = "https://maps.googleapis.com/maps/api/js?v=quarterly&libraries=places®ion=GB&callback=initializeG&language=en&key=AIzaSyDDI6MtCAWExiktccYlUaJiNkILNwo2zCU"; 4347 4348 if (typeof google !== "undefined" && google.hasOwnProperty('maps')) { 4349 resolve('already loaded'); 4350 return; 4351 } 4352 4353 let loadMapScriptAsync = function (uri) { 4354 return new Promise((resolve, reject) => { 4355 let script = document.createElement('script'); 4356 script.type = 'text/javascript'; 4357 script.src = uri; 4358 script.async = true; 4359 script.onload = function () { 4360 resolve("ok"); 4361 }; 4362 script.onerror = function () { 4363 reject("Failed to load Google Maps script."); 4364 }; 4365 document.head.appendChild(script); 4366 }); 4367 }; 4368 4369 loadMapScriptAsync(mapUri) 4370 .then(() => { 4371 resolve(); 4372 }) 4373 .catch((error) => { 4374 console.error(error); 4375 reject(); 4376 }); 4377 4378 }); 4379 } 4380 4381 function initializeG() { 4382 var geocoder; 4383 //This piece of code will create an autosuggest for every input with the class "googleSuggest" 4384 var counter = 1; 4385 var inputsArray = []; 4386 window.cachedSelectedOption = [{ 'typed_location': '' }]; 4387 let mapExists = document.querySelectorAll('[id^="map"]').length > 0; 4388 const functionsToInvoke = { 4389 setJsMap: true, 4390 setJsMapOverview: mapExists, 4391 setJsMapSR: mapExists, 4392 setJsMapSidebar: mapExists 4393 }; 4394 if (window['maps_loaded'] !== true) { 4395 for (let func in functionsToInvoke) { 4396 if (typeof window[func] === 'function' && functionsToInvoke[func]) { 4397 window['maps_loaded'] = true; 4398 window[func](); 4399 } 4400 } 4401 } 4402 $(".googleSuggest").each(function () { 4403 //get the id from the input to be the unique identifier for each autocomplete 4404 var inputId = $(this).attr("id"); 4405 var inputElement = $(this); 4406 inputsArray[counter] = /** @type {HTMLInputElement} */( 4407 document.getElementById('' + inputId)); 4408 const mainCountry = ''; 4409 const inputOptions = { 4410 fields: ['address_components', 'adr_address','formatted_address', 'geometry', 'icon', 'name','place_id','plus_code','type'], 4411 types: ['geocode'] 4412 } 4413 const language = "en"; 4414 4415 if (language) { 4416 inputOptions.language = language; 4417 } 4418 if (mainCountry) { 4419 inputOptions.componentRestrictions = {country: mainCountry}; 4420 inputOptions.region = mainCountry; 4421 } 4422 4423 var autocomplete = new google.maps.places.Autocomplete(inputsArray[counter], inputOptions); 4424 google.maps.event.addListener(autocomplete, 'place_changed', function () { 4425 const place = autocomplete.getPlace(); 4426 4427 cachedSelectedOption = []; 4428 cachedSelectedOption.push(place); 4429 4430 cachedSelectedOption[0]['typed_location'] = inputElement.val(); 4431 /* if(cachedSelectedOption[0]['adr_address']){ 4432 let cleanLocation = cachedSelectedOption[0]['adr_address'].replace(/<[^>]*>/g, ''); 4433 cachedSelectedOption[0]['typed_location'] = cleanLocation; 4434 inputElement.val(cleanLocation); 4435 }*/ 4436 if (cachedSelectedOption[0]['address_components'] == undefined) { 4437 cachedSelectedOption = []; 4438 var emptyObj = { 4439 'typed_location': '' 4440 }; 4441 cachedSelectedOption.push(emptyObj); 4442 } 4443 }); 4444 //the code that prevents the submition when hit enter on a google location autocomplete item 4445 inputElement.keydown( function (e) { 4446 if (e.keyCode == 13) { 4447 var pacCounter = 0; 4448 //need to run a loop to check each pac container 4449 $('.pac-container').each(function () { 4450 4451 if ($(this).css("display") != "none") { 4452 pacCounter++; 4453 } 4454 }); 4455 if (pacCounter > 0) { 4456 e.preventDefault(); 4457 } 4458 } 4459 }); 4460 counter++; 4461 }); 4462 4463 //triggers every time a form with the id website-search is trigered 4464 $('.website-search').submit(function (e) { 4465 4466 var currentForm = $(this); 4467 var locationInput = $(this).find(".googleLocation"); 4468 var $submitButton = currentForm.find('input[type=submit], button[type=submit]'); 4469 4470 4471 if (locationInput.val() != "" && typeof locationInput.val() != 'undefined') { 4472 4473 // Set submitting flag 4474 window.isSubmittingMainSearch = true; 4475 $submitButton.prop('disabled', true); 4476 4477 e.preventDefault(); 4478 //this variable has the main country of the site 4479 var form = currentForm; 4480 var urlGET = form.serialize(); 4481 var formActionUrl = form.attr("action"); 4482 var locationValue = locationInput.val(); 4483 4484 4485 4486 const mainCountry = ''; 4487 const inputOptions = { 4488 address:locationValue 4489 } 4490 const language = "en"; 4491 4492 if (language) { 4493 inputOptions.language = language; 4494 } 4495 if (mainCountry) { 4496 inputOptions.componentRestrictions = {country: mainCountry}; 4497 inputOptions.region = mainCountry; 4498 } 4499 4500 if (typeof cachedSelectedOption == 'undefined') { 4501 var emptyForm = { 4502 'typed_location': '' 4503 }; 4504 cachedSelectedOption.push(emptyForm); 4505 } 4506 4507 if (locationValue != cachedSelectedOption[0]['typed_location']) { 4508 geocoder = new google.maps.Geocoder(); 4509 geocoder.geocode(inputOptions, function (results, status) { 4510 4511 //if the google response of the geocoding was successful it will use that info to build the url for the new search 4512 if (status == google.maps.GeocoderStatus.OK) { 4513 parseInfoToSearch(results, urlGET, formActionUrl); 4514 4515 } else { 4516 var urlPath = formActionUrl; 4517 var redirect = urlPath + "?" + urlGET; 4518 //will redirect the page using the new url that has been constructed 4519 window.location.href = redirect; 4520 } 4521 }); 4522 4523 } else { 4524 parseInfoToSearch(cachedSelectedOption, urlGET, formActionUrl); 4525 } 4526 } 4527 }); 4528 4529 4530 //check if a map has been loaded 4531 if ($('#map-canvas').length > 0) { 4532 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>"; 4533 $('body').append(cssHideLogo); 4534 } else { 4535 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>"; 4536 $('body').append(cssHideLogo); 4537 } 4538
4539 if (geocodeVisitorsSetting == 1 && geocodingMethod === "IP") { 4540 populateSearchFields(); 4541 } 4542 4543 if($('.googleSuggest').val() == ""){ 4544 populateSearchFields(); 4545 } 4546 4547 var geocodeVisitorsSetting = '1'; 4548 var geocodingMethod = 'HTML5'; 4549 4550 //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 4551 4552 var vlon = ''; 4553 var vlat = ''; 4554 } 4555 4556 function switchPlaceID(placeId,urlGET, formActionUrl) { 4557 let request = { 4558 placeId: placeId, 4559 fields: ['address_components', 'adr_address', 'formatted_address', 'geometry', 'icon', 'name', 'place_id', 'plus_code', 'type'], 4560 }; 4561 4562 let service = new google.maps.places.PlacesService(document.createElement('div')); 4563 service.getDetails(request, function(place, status) { 4564 if (status === google.maps.places.PlacesServiceStatus.OK) { 4565 let dataArray = []; 4566 dataArray.push(place); 4567 parseInfoToSearch(dataArray, urlGET, formActionUrl); 4568 } else { 4569 console.error('Place details request failed with status:', status); 4570 } 4571 }); 4572 } 4573 4574 function parseInfoToSearch(results, urlGET, formActionUrl) { 4575 var urlSearchParams = new URLSearchParams(urlGET); 4576 var parameters = {}; 4577 var addressComponentsArray = []; 4578 if (results.length > 1) { 4579 if(urlSearchParams.get("location_value")?.toLowerCase() === "nebraska" && results.length === 2){ 4580 let tempResult = results[0]; 4581 results[0] = results[1]; 4582 results[1] = tempResult; 4583 } 4584 for (let i = 0; i < results.length; i++) { 4585 if (results[i].types[0] === 'natural_feature' || 4586 results[i].types[0] === 'airport' || 4587 results[i].types[0] === 'point_of_interest' || 4588 results[i].types[0] === 'establishment' || 4589 results[i].types[0] === 'political' || 4590 results[i].types[0] === 'park') { 4591 results.splice(i, 1); 4592 } 4593 } 4594 } 4595 var adComLength = results[0].address_components.length; 4596 4597 if(results[0].place_id == 'ChIJmQrivHKsQjQR4MIK3c41aj8'){ 4598 switchPlaceID('ChIJi73bYWusQjQRgqQGXK260bw',urlGET, formActionUrl); 4599 return; 4600 } 4601 sessionStorage.setItem("google_result",JSON.stringify(results)); 4602 4603 4604 var foundPostalType = results[0].types.find(type => postalTypes.includes(type)); 4605 var foundCityType = results[0].types.find(type => cityTypes.includes(type)); 4606 4607 //loop that will build the array with the address components and will get the short name of country and administrative area level 1 4608 for (var i = 0; i < adComLength; i++) { 4609 4610 if (results[0].address_components[i]['types'][0] == "country") { 4611 parameters.country_sn = results[0].address_components[i]['short_name']; 4612 } 4613 if (results[0].address_components[i]['types'][0] == "administrative_area_level_1") { 4614 parameters.adm_lvl_1_sn = results[0].address_components[i]['short_name']; 4615 } 4616 if (results[0].address_components[i]['types'][0] == "administrative_area_level_1") { 4617 parameters.stateSearchLN = results[0].address_components[i]['long_name']; 4618 } 4619 if (results[0].address_components[i]['types'][0] == "administrative_area_level_2") { 4620 /* short_name is what the service-area writer stores in 4621 service_areas.county_sn, so the search must send the same 4622 form or county matching breaks wherever short != long. */ 4623 parameters.county_sn = results[0].address_components[i]['short_name']; 4624 } 4625 if ($.inArray(results[0].address_components[i]['types'][0], cityTypes) !== -1 && (foundCityType || foundPostalType ) ) { 4626 var addrType = results[0].address_components[i]['types'][0]; 4627 var addrLong = results[0].address_components[i]['long_name']; 4628 /* CT counties come back as colloquial_area â keep them out of parameters.city. */ 4629 if (addrType !== 'colloquial_area' 4630 || !window.bdIsColloquialCounty(addrLong, results[0].place_id)) { 4631 parameters.city = addrLong; 4632 } 4633 } 4634 if (results[0].address_components[i]['types'][0] == "postal_code" || results[0].address_components[i]['types'][0] == "postal_code_prefix") { 4635 parameters.postal_code = results[0].address_components[i]['long_name']; 4636 } 4637 } 4638 4639 4640 // Filter out 'political' from result types - use more specific type when available 4641 // Same pattern as BD-directory-maps-typePolitical (PR #5642) 4642 if (results[0].types && results[0].types.length > 1 && results[0].types[0] === 'political') { 4643 results[0].types.splice(0, 1); 4644 } 4645 4646 // Pick the most specific type from results, skip "political" (too generic) 4647 parameters.location_type = results[0].types[0]; 4648 for (var t = 0; t < results[0].types.length; t++) { 4649 if (results[0].types[t] != 'political') { 4650 parameters.location_type = results[0].types[t]; 4651 break; 4652 } 4653 } 4654 4655 // When searching by city/locality, omit postal_code â Google returns 4656 // a partial zip prefix that doesn't match all members in the city 4657 if (parameters.location_type == 'locality' && parameters.postal_code) { 4658 delete parameters.postal_code; 4659 } 4660 4661 if (parameters.adm_lvl_1_sn != '') { 4662 parameters.stateSearch = parameters.adm_lvl_1_sn; 4663 } 4664 if (parameters.country_sn == "GB") { 4665 delete parameters.adm_lvl_1_sn; 4666 } 4667 4668 //will check if the response had the bounds parameters 4669 //if it had it will add the south west and north east parameters to the new url 4670 if (results[0].geometry.hasOwnProperty('bounds') || results[0].geometry.hasOwnProperty('viewport')) { 4671 4672 if (results[0].geometry.hasOwnProperty('bounds')) { 4673 var boundsResponse = results[0].geometry.bounds; 4674 4675 } else { 4676 var boundsResponse = results[0].geometry.viewport; 4677 } 4678 parameters.swlat = boundsResponse.getSouthWest
4678().lat(); 4679 parameters.nelat = boundsResponse.getNorthEast().lat(); 4680 parameters.swlng = boundsResponse.getSouthWest().lng(); 4681 parameters.nelng = boundsResponse.getNorthEast().lng(); 4682 4683 //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 4684 } else { 4685 parameters.fsearch = "radius"; 4686 } 4687 var locationCenterResponse = results[0].geometry.location; 4688 parameters.lat = locationCenterResponse.lat(); 4689 parameters.lng = locationCenterResponse.lng(); 4690 parameters.faddress = results[0].formatted_address; 4691 parameters.place_id = results[0].place_id; 4692 var formatParameters = $.param(parameters); 4693 urlGET = urlGET + "&" + formatParameters; 4694 var urlPath = formActionUrl; 4695 var redirect = urlPath + "?" + urlGET; 4696 //will redirect the page using the new url that has been constructed 4697 window.location.href = redirect; 4698 } 4699 function populateSearchFields() { 4700 var prePopulateLocationSetting = '1'; 4701 var geolocationMethod = 'HTML5'; 4702 4703 // If geolocation is in progress and we don't have coordinates yet, wait a bit 4704 if (isGettingLocation && (vlat === 0 || vlon === 0)) { 4705 var waitStartTime = performance.now(); 4706 var waitInterval = setInterval(function() { 4707 if (!isGettingLocation || (vlat !== 0 && vlon !== 0)) { 4708 clearInterval(waitInterval); 4709 // Retry after a short delay to ensure coordinates are set 4710 setTimeout(function() { 4711 populateSearchFields(); 4712 }, 100); 4713 } else if ((performance.now() - waitStartTime) > 10000) { 4714 // Timeout after 10 seconds - try sessionStorage 4715 clearInterval(waitInterval); 4716 if (getCoordinatesFromSession()) { 4717 setTimeout(function() { 4718 populateSearchFields(); 4719 }, 100); 4720 } 4721 } 4722 }, 200); 4723 return; 4724 } 4725 4726 // If coordinates are 0, try to get from sessionStorage 4727 if (vlat === 0 || vlon === 0) { 4728 getCoordinatesFromSession(); 4729 } 4730 4731 // Validate coordinates first 4732 var hasValidCoordinates = (vlat !== '' && vlon !== '' && vlat != undefined && vlon != undefined && vlat != 0 && vlon != 0 && Math.abs(vlat) <= 90 && Math.abs(vlon) <= 180); 4733 4734 if (!hasValidCoordinates) { 4735 return; 4736 } 4737 4738 //if set to one will get the lat and lng to do reverse geocoding 4739 if (prePopulateLocationSetting == 1 && (geolocationMethod === "HTML5" || geolocationMethod === "IP")) { 4740 var visitorLatLng = new google.maps.LatLng(parseFloat(vlat), parseFloat(vlon)); 4741 var visitorGeocoder = new google.maps.Geocoder(); 4742 var formattedAddress = []; 4743 var preFormattedStructure = { 4744 "locality": "long_name", 4745 "administrative_area_level_2": "long_name", 4746 "administrative_area_level_1": "long_name", 4747 "country": "long_name" 4748 }; 4749 visitorGeocoder.geocode({'latLng': visitorLatLng}, function (results, status) { 4750 //if the google response of the geocoding was successful it will use that info to build the url for the new search 4751 if (status == google.maps.GeocoderStatus.OK) { 4752 window.cachedSelectedOption = results; 4753 $.each(preFormattedStructure, function (findex, fvalue) { 4754 $.each(results[0].address_components, function (rindex, rvalue) { 4755 if (rvalue.types[0] == findex) { 4756 formattedAddress.push(rvalue.long_name); 4757 } 4758 }); 4759 }); 4760 $('.googleSuggest').each(function () { 4761 if ($(this).val() == '') { 4762 if (formattedAddress.length > 0) { 4763 $(this).val(formattedAddress.join(', ')); 4764 clearContent($(this)); 4765 } 4766 } 4767 }); 4768 } else { 4769 $('.googleSuggest').each(function () { 4770 $(this).val(''); 4771 }); 4772 } 4773 }); 4774 } 4775 } 4776 function showError(error) { 4777 switch (error.code) { 4778 case error.PERMISSION_DENIED: 4779 case 1: // PERMISSION_DENIED 4780 $('.fill_location.clicked').popover({ 4781 content: `Your local browser settings have prevented location targeting. Please enable location permissions in your browser settings.`, 4782 container: 'body' 4783 }); 4784 $('.fill_location.clicked').popover('toggle'); 4785 setTimeout(function () { 4786 $('.fill_location.clicked').popover('hide'); 4787 $('.fill_location.clicked').removeClass('clicked'); 4788 }, 4000); 4789 break; 4790 case error.POSITION_UNAVAILABLE: 4791 case 2: // POSITION_UNAVAILABLE 4792 $('.fill_location.clicked').popover({ 4793 content: `Location information is unavailable. Please check your device location settings.`, 4794 container: 'body' 4795 }); 4796 $('.fill_location.clicked').popover('toggle'); 4797 setTimeout(function () { 4798 $('.fill_location.clicked').popover('hide'); 4799 $('.fill_location.clicked').removeClass('clicked'); 4800 }, 4000); 4801 break; 4802 case error.TIMEOUT: 4803 case 3: // TIMEOUT 4804 $('.fill_location.clicked').popover({ 4805 content: `Location request timed out. Please ensure location services are enabled and try again.`, 4806 container: 'body' 4807 }); 4808 $('.fill_location.clicked').popover('toggle'); 4809 setTimeout(function () { 4810 $('.fill_location.clicked').popover('hide'); 4811 $('.fill_location.clicked').removeClass('clicked'); 4812 }, 4000); 4813 break; 4814 case error.UNKNOWN_ERROR: 4815 default: 4816 $('.fill_location.clicked').popover({ 4817 content: `An error occurred while getting your location. Please try again.`, 4818 container: 'body' 4819 }); 4820 $('.fill_location.clicked').popover('toggle'); 4821 setTimeout(function () { 4822 $('.fill_location.clicked').popover('hide'); 4823 $('.fill_location.clicked').removeClass('clicked'); 4824 }, 4000); 4825 break; 4826 } 4827 } 4828 if (navigator.geolocation) { 4829 if ($(".googleSuggest")[0]) { 4830 $(document).on('click', '.fill_location', function getCXPosition() { 4831 // Prevent multiple simultaneous geolocation requests 4832 if (isGettingLocation) { 4833 return; 4834 } 4835 4836 var $button = $(this); 4837 $button.addClass('clicked'); 4838 var startPos; 4839 4840 // Set flag to prevent concurrent requests 4841 isGettingLocation = true; 4842 4843 // Function to actually get the position 4844 var attemptGetPosition = function() { 4845 // Try with shorter timeout first for faster response 4846 var geoOptions = {
4847 enableHighAccuracy: false, // Use false for faster response 4848 timeout: 8000, // 8 second timeout (reduced for faster failure) 4849 maximumAge: 300000 // Accept cached position up to 5 minutes old 4850 }; 4851 4852 navigator.geolocation.getCurrentPosition(function (position) { 4853 startPos = position; 4854 vlat = startPos.coords.latitude; 4855 vlon = startPos.coords.longitude; 4856 4857 // Validate coordinates before proceeding 4858 if (!vlat || !vlon || vlat === 0 || vlon === 0) { 4859 isGettingLocation = false; 4860 $button.removeClass('clicked'); 4861 return; 4862 } 4863 4864 // Save coordinates to sessionStorage 4865 saveCoordinatesToSession(vlat, vlon);
4866 4867 $.get("/api/data/html/get/data_widgets/widget_name", { 4868 "vlat": vlat, 4869 "vlon": vlon, 4870 "name": "Website - Save Coordinates Session" 4871 }); 4872 4873 populateSearchFields(); 4874 4875 // Clear flag 4876 isGettingLocation = false; 4877 $button.removeClass('clicked'); 4878 }, function(error) { 4879 // Clear flag on error 4880 isGettingLocation = false; 4881 $button.removeClass('clicked'); 4882 4883 // For timeout errors, try sessionStorage as fallback 4884 if (error.code === 3) { 4885 if (getCoordinatesFromSession()) { 4886 // Use cached coordinates 4887 $.get("/api/data/html/get/data_widgets/widget_name", { 4888 "vlat": vlat, 4889 "vlon": vlon, 4890 "name": "Website - Save Coordinates Session" 4891 }); 4892 4893 populateSearchFields(); 4894 4895 // Clear flag 4896 isGettingLocation = false; 4897 $button.removeClass('clicked'); 4898 } else { 4899 $button.popover({ 4900 content: `Location request timed out. Please ensure location services are enabled and grant permission when prompted.`, 4901 container: 'body' 4902 }); 4903 $button.popover('show'); 4904 setTimeout(function() { 4905 $button.popover('hide'); 4906 }, 5000); 4907 } 4908 } else { 4909 showError(error); 4910 } 4911 }, geoOptions); 4912 }; 4913 4914 // Check if geolocation permission is already denied (but don't block if it's prompt) 4915 if (navigator.permissions && navigator.permissions.query) { 4916 navigator.permissions.query({name: 'geolocation'}).then(function(result) { 4917 if (result.state === 'denied') { 4918 isGettingLocation = false; 4919 $button.removeClass('clicked'); 4920 showError({code: 1, message: 'Permission denied'}); 4921 return; 4922 } else { 4923 // Permission is granted or prompt - proceed with geolocation 4924 attemptGetPosition(); 4925 } 4926 }).catch(function(err) { 4927 // If permission API not supported, proceed anyway 4928 attemptGetPosition(); 4929 }); 4930 } else { 4931 // Permission API not available, proceed with geolocation 4932 attemptGetPosition(); 4933 } 4934 }) 4935 } 4936 } else { 4937 console.log('Geolocation is not supported for this Browser/OS version yet.'); 4938 } 4939 function getUrlParameter(sParam) { 4940 var sPageURL = window.location.search.substring(1); 4941 var sURLVariables = sPageURL.split('&'); 4942 4943 for (var i = 0; i < sURLVariables.length; i++) { 4944 var sParameterName = sURLVariables[i].split('='); 4945 4946 if (sParameterName[0] == sParam) { 4947 return decodeURIComponent(sParameterName[1]); 4948 } 4949 } 4950 } 4951 </script>
4951 4952
4952<script> 4953 // switchClass() is jQuery UI (Effects), which is no longer loaded on every page. 4954 // removeClass().addClass() is the same class swap, applied immediately instead of 4955 // after animateClass()'s queued 400ms default. 4956 $(document).ready(function(){ 4957 $('.navbar-header .navbar-toggle.main_menu').click(function(){ 4958 $('.mobile-main-menu').toggleClass('opened'); 4959 }); 4960 $('.mobile-main-menu .sidebar-nav').find('li').each(function(){ 4961 $(this).addClass('hasChildren'); 4962 if ($(this).children('ul').length > 0){ 4963 $(this).prepend('<i class="fa fa-plus" aria-hidden="true"></i>'); 4964 $(this).find('a').after('<div class="clearfix"></div>'); 4965 $(this).find('span').after('<div class="clearfix"></div>'); 4966 } 4967 $(this).append('<div class="clearfix"></div>'); 4968 }); 4969 4970 $('.mobile-main-menu .sidebar-nav li i').click(function(){ 4971 if ($(this).parent().children('ul').length > 0){ 4972 $(this).parent().toggleClass('sub_open'); 4973 } 4974 if ($(this).hasClass('fa-plus')){ 4975 $(this).removeClass('fa-plus').addClass('fa-minus'); 4976 } else { 4977 $(this).removeClass('fa-minus').addClass('fa-plus'); 4978 } 4979 }); 4980 }) 4981 4982 if ($(window).width() > 740 && $(window).width() < 1100) { 4983 4984 $(document).ready(function(){ 4985 $('.tablet-menu .tablet-menu-ul').find('li').each(function(){ 4986 4987 if ($(this).children('ul').length > 0){ 4988 $(this).prepend('<i class="fa fa-plus tablet-fa hidden-sm hidden-md hidden-lg" aria-hidden="true"></i>'); 4989 $(this).find('a').after('<div class="clearfix"></div>'); 4990 var this_link = $(this).children('a').text().replace(/[^\x00-\x7F]/g, "");; 4991 $(this).children('a').html(this_link); 4992 $(this).find('span').after('<div class="clearfix"></div>'); 4993 } 4994 $(this).append('<div class="clearfix"></div>'); 4995 }); 4996 4997 $('.tablet-menu .tablet-menu-ul li i').click(function(){ 4998 4999 if ($(this).parent().children('ul').length > 0){ 5000 $(this).parent().toggleClass('sub_open'); 5001 5002 if ($(this).siblings( "ul" ).hasClass('tablet-block')){ 5003 $(this).siblings( "ul" ).removeClass('tablet-block').addClass('tablet-none'); 5004 } else { 5005 $(this).siblings( "ul" ).addClass( "tablet-block" ); 5006 5007 if ($(this).siblings( "ul" ).hasClass('tablet-none')){ 5008 $(this).siblings( "ul" ).removeClass('tablet-none') 5009 } 5010 5011 if ($(this).parent().siblings().children('ul').hasClass('tablet-block')) { 5012 $(this).parent().siblings().children('ul').removeClass('tablet-block').addClass('tablet-none'); 5013 $(this).parent().siblings().children('i').removeClass('fa-minus').addClass('fa-plus'); 5014 } 5015 5016 if ($(this).parent().siblings().children('ul').children().children('ul').hasClass('tablet-block')) { 5017 $(this).parent().siblings().children('ul').children().children('ul').removeClass('tablet-block').addClass('tablet-none'); 5018 $(this).parent().siblings().children('ul').children().children('i').removeClass('fa-minus').addClass('fa-plus'); 5019 } 5020 5021 if ($(this).siblings('ul').children('ul').children().children('ul').hasClass('tablet-block')) { 5022 $(this).siblings('ul').children('ul').children().children('ul').removeClass('tablet-block').addClass('tablet-none'); 5023 $(this).siblings('ul').children('ul').children().children('i').removeClass('fa-minus').addClass('fa-plus'); 5024 } 5025 5026 } 5027 5028 } 5029 5030 if ($(this).hasClass('fa-plus')){ 5031 $(this).removeClass('fa-plus').addClass('fa-minus'); 5032 } else { 5033 $(this).removeClass('fa-minus').addClass('fa-plus'); 5034 } 5035 }); 5036 }) 5037 } 5038 // Append unique ID attribute for mobile main menu links 5039 $('.mobile-main-menu a,.mobile-main-menu span').attr("id", function() { return $(this).attr("id") + "-mobile" }); 5040</script>
5040 5041
5042<script> 5043/* Keeps the announcement bar flush with the navbar: this widget's CSS emits static 50px 5044 offsets that are blind to the hide-menu settings, so a hidden or fixed compact-logo 5045 navbar leaves a gap or an overlap. Measure the real navbar state and own the offset. */ 5046(function () { 5047 function alignAnnouncementToNavbar() { 5048 var ann = document.querySelector('.announcement-bar'); 5049 if (!ann) { return; } 5050 /* above the widget's own offset breakpoints: restore stylesheet values */ 5051 if (window.innerWidth > 1100) { 5052 ann.style.removeProperty('margin-top'); 5053 ann.style.removeProperty('top'); 5054 return; 5055 } 5056 var navbar = document.querySelector('.header nav.navbar.navbar-default'); 5057 var navStyle = navbar ? window.getComputedStyle(navbar) : null; 5058 /* navbar hidden: the 50px offsets have nothing to clear, sit flush */ 5059 if (!navbar || navStyle.display === 'none') { 5060 ann.style.setProperty('margin-top', '0px', 'important'); 5061 ann.style.setProperty('top', '0px', 'important'); 5062 return; 5063 } 5064 if (window.innerWidth >= 768) { return; } 5065 /* only act while the navbar is pinned and showing the compact logo */ 5066 if (navStyle.position !== 'fixed') { return; } 5067 var logo = navbar.querySelector('.mobile_website_logo'); 5068 if (!logo || window.getComputedStyle(logo).display === 'none') { return; } 5069 var navRect = navbar.getBoundingClientRect(); 5070 var annRect = ann.getBoundingClientRect(); 5071 var delta = Math.round(navRect.bottom - annRect.top); /* >0 overlap, <0 gap */ 5072 if (delta === 0) { return; } 5073 var currentMt = parseFloat(window.getComputedStyle(ann).marginTop) || 0; 5074 var nextMt = currentMt + delta; 5075 /* a transient element above the bar during load can inflate the measure; a 5076 negative margin would pull the bar behind the navbar, so clamp at 0 */ 5077 if (nextMt < 0) { nextMt = 0; } 5078 /* !important to beat the widget's "margin-top: 50px !important" rule */ 5079 ann.style.setProperty('margin-top', nextMt + 'px', 'important'); 5080 } 5081 5082 function run() { 5083 alignAnnouncementToNavbar(); 5084 /* re-run after late layout shifts (fonts, async embeds) */ 5085 window.setTimeout(alignAnnouncementToNavbar, 250); 5086 window.setTimeout(alignAnnouncementToNavbar, 1200); 5087 } 5088 5089 if (document.readyState === 'loading') { 5090 document.addEventListener('DOMContentLoaded', run); 5091 } else { 5092 run(); 5093 } 5094 window.addEventListener('load', alignAnnouncementToNavbar); 5095 var resizeTimer; 5096 window.addEventListener('resize', function () { 5097 window.clearTimeout(resizeTimer); 5098 resizeTimer = window.setTimeout(alignAnnouncementToNavbar, 150); 5099 }); 5100})(); 5101</script>
vendor: 2 bytes, line 5101
5101
5102<script attribute='text/javascript'> 5103 var map; 5104 var members = {}; 5105 function initializeMap() { 5106 map = new google.maps.Map(document.getElementById('map-bounds'), { 5107 center: {lat: 0, lng: 0}, 5108 zoom: 8, 5109 disableDefaultUI: true, 5110 }); 5111 } 5112 function toogleShapeBox(user_id,node){ 5113 if($(node).is(':checked') == true){ 5114 members['user_id_'+user_id].boundsShape.setMap(map); 5115 }else{ 5116 members['user_id_'+user_id].boundsShape.setMap(null); 5117 } 5118 } 5119 5120 function loadMarker(lat,lng,showInfoWindow,title){ 5121 var contentString = ''; 5122 var marker = new google.maps.Marker({ 5123 position: {lat:lat,lng:lng}, 5124 map: map, 5125 title: 'Bounds Box Objects' 5126 }); 5127 5128 if(showInfoWindow === true){ 5129 5130 contentString = '<table>'; 5131 5132 $.each(members,function(index,value){ 5133 contentString += '<tr>'; 5134 contentString += '<td><input type="checkbox" checked="true" onchange="toogleShapeBox('+value.user_id+',this)"><td>'; 5135 contentString += '<td>'+value.name+'<td>'; 5136 contentString += '</tr>'; 5137 }); 5138 contentString += '</table>'; 5139 5140 var infowindow = new google.maps.InfoWindow({ 5141 content: contentString 5142 }); 5143 5144 marker.addListener('click', function() { 5145 infowindow.open(map, marker); 5146 }); 5147 5148 }else{ 5149 marker.setIcon('https://maps.google.com/mapfiles/ms/icons/green-dot.png'); 5150 var infowindow = new google.maps.InfoWindow({ 5151 content: title 5152 }); 5153 5154 marker.addListener('click', function() { 5155 infowindow.open(map, marker); 5156 }); 5157 5158 } 5159 } 5160 5161 function drawBounds(lat,lng,swlat,swlng,nelat,nelng,color,address,user_id,name){ 5162 5163 latlngs = []; 5164 5165 latlngs.push({ lat: swlat, lng: swlng });//bottom left 5166 latlngs.push({ lat: swlat, lng: lng });//bottom center 5167 latlngs.push({ lat: swlat, lng: nelng });//bottom right 5168 latlngs.push({ lat: lat, lng: nelng });// center right 5169 latlngs.push({ lat: nelat, lng: nelng });//top right 5170 latlngs.push({ lat: nelat, lng: lng });//top center 5171 latlngs.push({ lat: nelat, lng: swlng });//top left 5172 latlngs.push({ lat: lat, lng: swlng });//center left 5173 5174 5175 members['user_id_'+user_id] = { 5176 boundsShape:new google.maps.Polygon({ 5177 paths: latlngs, 5178 strokeColor: color, 5179 strokeOpacity: 0.8, 5180 strokeWeight: 3, 5181 fillColor: 'color', 5182 fillOpacity: 0.35 5183 }), 5184 name:name, 5185 user_id:user_id, 5186 color:color 5187 } 5188 5189 members['user_id_'+user_id].boundsShape.setMap(map); 5190 } 5191 5192 5193</script>
5193<script> 5194 function loadMasonryJs() { 5195 return new Promise((resolve, reject) => { 5196 if (window["masonryJs"]) { 5197 resolve("already load masonry"); 5198 } else { 5199 let script = document.createElement('script'); 5200 script.type = 'text/javascript'; 5201 script.src = "https://www.optimizecdn.com/directory/cdn/assets/bootstrap/js/masonry_gridview.pkgd.min.js"; 5202 script.async = true; 5203 script.onload = function () { 5204 window['masonryJs'] = true; 5205 resolve("ok"); 5206 }; 5207 let head = document.getElementsByTagName('head')[0]; 5208 head.appendChild(script); 5209 5210 } 5211 }); 5212 } 5213 5214 var map_opened = 0; 5215 var masonry_opened = 0; 5216 5217 $(".views > i").click(function () { 5218 $(".views > i").removeClass('activeView'); 5219 $(this).addClass('activeView'); 5220 }); 5221 $(".views > i.gridView").click(async function () { 5222 await loadMasonryJs(); 5223 $('.grid-container .clickToLoadMoreContainer').addClass('gridBtnLazyLoad') 5224 if (map_opened == 1) { 5225 $('.grid-container').removeClass('hidden'); 5226 $('.map_container').hide(); 5227 map_opened = 0; 5228 } 5229 $('.grid-container').addClass('visible'); 5230 $('.img_section.col-xs-2').removeClass('col-xs-2').addClass('col-xs-12 bmargin ex-col-2'); 5231 $('.img_section.col-sm-3').removeClass('col-sm-3').addClass('col-sm-12 bmargin ex-col-3'); 5232 $('.img_section.col-sm-4').removeClass('col-sm-4').addClass('col-sm-12 bmargin ex-col-4'); 5233 $('.mid_section.col-sm-9').removeClass('col-sm-9').addClass('col-sm-12 ex-col-9'); 5234 $('.mid_section.col-sm-6').removeClass('col-sm-6').addClass('col-sm-12 ex-col-6'); 5235 $('.mid_section.col-sm-7').removeClass('col-sm-7').addClass('col-sm-12 nohpad ex-col-7 text-center bpad'); 5236 $('.mid_section.col-sm-8').removeClass('col-sm-8').addClass('col-sm-12 ex-col-8 nohpad bpad'); 5237 $('.mid_section .post-location-snippet').addClass('text-center'); 5238 $('.mid_section.ex-col-7 .sm-block').addClass('show'); 5239 $('.mid_section .row-fluid.bpad .col-md-8').removeClass('col-md-8').addClass('col-sm-12 bmargin'); 5240 $('.mid_section .row-fluid.bpad a').addClass('btn-block'); 5241 $('.mid_section .row-fluid.bpad').addClass('text-center'); 5242 $('.info_section').removeClass('col-sm-3 norpad').addClass('col-sm-12 nopad'); 5243 $('.mid_section > div > p').addClass('text-center'); 5244 $('.mid_section h2').addClass('nomargin'); 5245 $('.mid_section a.h3').addClass('text-center h4 tmargin'); 5246 $('.mid_section .view-details').removeClass('rmargin'); 5247 $('.mid_section .contact-member').removeClass('lmargin'); 5248 $('.member-search-full-name').removeClass('rmargin'); 5249 $('.member-search-reviews').removeClass('rmargin'); 5250 $('.member-search-location').removeClass('rmargin rpad'); 5251 $('.member-search-company').addClass('btn-block'); 5252 $('.view_phone_number').addClass('center-block'); 5253 $('.phone_number').addClass('btn-block'); 5254 $('.search_result_image').addClass('grid_image'); 5255 $('.post-search-category').removeClass('inline-block').addClass('text-center'); 5256 $('.post-results-star').removeClass('pull-right').addClass('text-center tmargin'); 5257 5258 $('.grid-container.visible > hr:nth-of-type(3n)').addClass('gridBreak'); 5259 $('.search_result').addClass('col-xs-12 col-sm-4 col-md-4 grid').removeClass('row-fluid'); 5260 $('.grid_element').addClass('well xs-center-block'); 5261 5262 $('.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(); 5263 $('h2.h3.bold > a').addClass('gridA'); 5264 $('.info_section .module').removeClass('module fpad'); 5265 $('.grid-container').addClass('row'); 5266 document.body.classList.add('bdGridDone'); 5267 $('.grid-container').masonry({ 5268 // options 5269 itemSelector: '.search_result', 5270 columnWidth: '.search_result', 5271 horizontalOrder: true, 5272 5273 }); 5274 masonry_opened = 1; 5275 5276 });
5277 $(".views > i.listView").click(function () { 5278 $('.grid-container .clickToLoadMoreContainer').removeClass('gridBtnLazyLoad') 5279 5280 $('.clearfix.spacing').remove(); 5281 if (masonry_opened == 1) { 5282 $('.grid-container').masonry('destroy'); 5283 } 5284 $('.grid-container').addClass('visible'); 5285 $('.img_section.ex-col-2').removeClass('col-xs-12 ex-col-2 bmargin').addClass('col-xs-2'); 5286 $('.img_section.ex-col-3').removeClass('col-sm-12 ex-col-3 bmargin').addClass('col-sm-3'); 5287 $('.img_section.ex-col-4').removeClass('col-sm-12 ex-col-4 bmargin').addClass('col-sm-4'); 5288 $('.mid_section.col-sm-12.ex-col-9').removeClass('col-sm-12').addClass('col-sm-9'); 5289 $('.mid_section.col-sm-12.ex-col-6').removeClass('col-sm-12').addClass('col-sm-6'); 5290 $('.mid_section.col-sm-12.ex-col-7').removeClass('col-sm-12 nohpad bpad ex-col-7 text-center').addClass('col-sm-7'); 5291 $('.mid_section.col-sm-12.ex-col-8').removeClass('col-sm-12 nohpad bpad').addClass('col-sm-8'); 5292 $('.mid_section .post-location-snippet.text-center').removeClass('text-center'); 5293 $('.mid_section.col-sm-7 .sm-block').removeClass('show'); 5294 $('.mid_section.col-sm-12.ex-col-12').removeClass('col-sm-12').addClass('col-sm-12'); 5295 $('.mid_section .row-fluid.bpad .col-sm-12').removeClass('col-sm-12 bmargin').addClass('col-md-8'); 5296 $('.mid_section .row-fluid.bpad a').removeClass('btn-block'); 5297 $('.mid_section .row-fluid.bpad').removeClass('text-center'); 5298 $('.info_section').removeClass('col-sm-12 nopad').addClass('col-sm-3 norpad'); 5299 $('.info_section > div.nomargin').addClass('module fpad'); 5300 $('.mid_section > div > p').removeClass('text-center'); 5301 $('.mid_section h2').removeClass('nomargin'); 5302 $('.mid_section a.h3').removeClass('text-center h4 tmargin'); 5303 $('.mid_section .view-details').addClass('rmargin'); 5304 $('.mid_section .contact-member').addClass('lmargin'); 5305 $('.member-search-full-name').addClass('rmargin'); 5306 $('.member-search-reviews').addClass('rmargin'); 5307 $('.member-search-location').addClass('rmargin rpad'); 5308 $('.member-search-company').removeClass('btn-block'); 5309 $('.view_phone_number').removeClass('center-block'); 5310 $('.search_result_image').removeClass('grid_image'); 5311 $('.ex-col-8 h2.h3.bold a.gridA').removeClass('bmargin'); 5312 $('.gridBreak').removeClass('gridBreak'); 5313 $('.post-search-category').removeClass('text-center').addClass('inline-block'); 5314 $('.post-results-star').removeClass('text-center tmargin').addClass(' pull-right'); 5315 $('.search_result').removeClass('col-md-4 col-sm-4 col-xs-12 grid').addClass('row-fluid'); 5316 $('.grid_element').removeClass('well'); 5317 $('.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(); 5318 $('h2.h3.bold > a').removeClass('gridA'); 5319 $('.grid-container').removeClass('row'); 5320 if (map_opened == 1) { 5321 $('.grid-container').removeClass('hidden'); 5322 $('.map_container').hide(); 5323 map_opened = 0; 5324 } 5325 }); 5326 5327 $('.views > i.mapView').click(function () { 5328 $('.clearfix.spacing').remove(); 5329 $('.grid-container').addClass('hidden'); 5330 $('.map_container').show(); 5331 map_opened = 1; 5332 if(typeof initializeGoogleMaps === "function"){ 5333 initializeGoogleMaps(); 5334 } 5335 }); 5336 if (document.getElementById("google-pin") !== null) { 5337 $('.mapView').css('display', 'inline-block'); 5338 } 5339 $(document).ready(function () { 5340 if ($('.views .fa:visible').length == 1) { 5341 $('.views').hide(); 5342 } else { 5343 $('.views').show(); 5344 } 5345 }) 5346</script>
5346<script> 5347 $('#captchaContainer').removeClass('form-control '); 5348 $(".website_url_field").keyup(function(){ 5349 var fieldName = $(this).attr('name'); 5350 $(this).val($(this).val().replace(/\s+/g, '')); 5351 $('#myform').formValidation('revalidateField', fieldName); 5352 }); 5353</script>
vendor: 2 bytes, line 5353
5353
5354<script> 5355 $('#newsletter input[name="email"]').on('keypress', function() { 5356 $("#newsletter > .gdpr_consent_email").show(); 5357 }); 5358 $('#newsletter_signup_footer input[name="email"]').on('keypress', function() { 5359 $("#newsletter_signup_footer > .gdpr_consent_email").show(); 5360 }); 5361</script>
5361
5361<script src="https://www.optimizecdn.com/directory/cdn/bootstrap/formvalidation/current/dist/js/formValidation.min.js"></script>
5361 5362
5362<script src="https://www.optimizecdn.com/directory/cdn/bootstrap/formvalidation/current/dist/js/framework/bootstrap.min.js"></script>
5362 5363
5363<script type="text/javascript"> 5364 function decodeHtml(html) { 5365 var txt = document.createElement("textarea"); 5366 txt.innerHTML = html; 5367 return txt.value; 5368 } 5369 5370 // Override FormValidation URI validator to prevent recursion with URLs that contain @ characters 5371 $(function() { 5372 function applyFix() { 5373 // Check if FormValidation library and URI validator are loaded 5374 if (FormValidation && FormValidation.Validator && FormValidation.Validator.uri) { 5375 FormValidation.Validator.uri.validate = function(validator, $field, options) { 5376 var value = validator.getFieldValue($field, 'uri').trim(); 5377 return value === '' || new RegExp('^https?://[^\\s]+\\.[^\\s]{2,}').test(value); 5378 }; 5379 return true; 5380 } 5381 return false; 5382 } 5383 5384 if (!applyFix()) { 5385 setTimeout(applyFix, 50); 5386 } 5387 }); 5388 </script>
5388 5389
5389<script type="text/javascript"> 5390 5391 var counterSubmit = 0; 5392 $(document).ready(function() { 5393 /* grecaptcha.reset() with no argument always resets widget 0. On a page with two 5394 captcha holders that clears the wrong checkbox, so the widget the visitor solved 5395 keeps a token Google has already spent and every retry fails the security check. 5396 captchaHolders is published by widget 1995 keyed by "<formId>-google-recaptcha"; 5397 an undefined id means no per-form id is known and the arg-less call is used, 5398 exactly as before. */ 5399 function bdCaptchaWidgetId(formId) { 5400 if (typeof captchaHolders === "undefined" || !formId) { 5401 return undefined; 5402 } 5403 /* recaptcha.php renames each holder to "<id>-<counter>" before render (recaptcha.php ~L84), 5404 so captchaHolders is keyed by the RENAMED id - not "<formId>-google-recaptcha". Resolve from 5405 the holder element itself so the counter never has to be reconstructed. */ 5406 var form = document.getElementById(formId); 5407 var holder = form && form.querySelector(".g-recaptcha"); 5408 return holder ? captchaHolders[holder.id] : undefined; 5409 } 5410 5411 function bdCaptchaReset(formId) { 5412 if (typeof grecaptcha === "undefined" || typeof grecaptcha.reset !== "function") { 5413 return; 5414 } 5415 var widgetId = bdCaptchaWidgetId(formId); 5416 if (widgetId === undefined) { 5417 grecaptcha.reset(); 5418 } else { 5419 grecaptcha.reset(widgetId); 5420 } 5421 } 5422 5423 // Ghost-field strip (card d4tk1CMp): the server-side validator config can carry 5424 // rules for fields that are NOT rendered in this form (conditionally-rendered or 5425 // duplicated form configs). Those phantom rules make formValidation mis-evaluate 5426 // isValid(), so an empty required field bypasses validation and submits natively. 5427 // Remove any rule whose field has no matching element before initializing. 5428 // NOTE: this is the ONLY layer re-applied from reverted PR #5902. It strictly 5429 // REMOVES rules (never adds validators, never overrides native submit, never 5430 // intercepts on capture phase, never re-validates on click) â so it cannot 5431 // reproduce the "Save button slides down / nav broken / no success message" 5432 // regression that caused #5902 to be rolled back on site 19413. 5433 var validatorConfig = {"framework":"bootstrap","addOns":{"reCaptcha2":{"element":"captchaContainer","language":"en","theme":"light","siteKey":"6LefnrMqAAAAAJ7P0zC7FpwVr8HmTffHnk3k7ZBX","timeout":"120","message":"The captcha is not valid"}},"fields":{"email":{"validators":{"notEmpty":{"message":"Required Field"},"emailAddress":{"message":"Please enter a valid email address"}}}}}; 5434 var formElement = $(`form[name='newsletter_modal_signup_380']`); 5435 if(validatorConfig && validatorConfig.fields) { 5436 Object.keys(validatorConfig.fields).forEach(function(fieldName) { 5437 if(formElement.find('[name="' + fieldName + '"]').length === 0) { 5438 delete validatorConfig.fields[fieldName]; 5439 } 5440 }); 5441 } 5442 5443 // Scroll to the first invalid field when submit fails validation, 5444 // so the user can immediately see why the form will not submit 5445 formElement.on('err.form.fv', function(e) { 5446 var $firstError = $(e.target).find('.form-group.has-error').first(); 5447 if ($firstError.length) { 5448 $('html, body').animate({ scrollTop: $firstError.offset().top - 100 }, 700); 5449 } 5450 }); 5451 5452 formElement.formValidation(validatorConfig).on('success.form.fv', function(e,fvdata) { 5453 5454 if('newsletter_modal_signup' == 'unsubscribe_email'){ 5455 return true; 5456 } 5457 // Prevent form submission 5458 e.preventDefault(); 5459 $form = $(e.target), 5460 fv = $form.data('formValidation'); 5461 5462 // Check HTML5 required fields that FormValidation may not know about 5463 var requiredEmpty = false; 5464 $form.find('[required]').each(function() { 5465 var val = $(this).val(); 5466 if (val === '' || val === null || (typeof val === 'string' && val.trim() === '')) { 5467 requiredEmpty = true; 5468 $(this).closest('.form-group').addClass('has-error'); 5469 if ($(this).siblings('.required-error').length === 0) { 5470 $(this).after('<small class="required-error help-block" style="color:#a94442;">Required Field</small>'); 5471 } 5472 } else { 5473 var $reqGroup = $(this).closest('.form-group'); 5474 $(this).siblings('.required-error').remove(); 5475 // Keep has-error if another validator is still failing for this field 5476 if ($reqGroup.find('small[data-fv-validator][data-fv-result="INVALID"]').length === 0) { 5477 $reqGroup.removeClass('has-error'); 5478 } 5479 } 5480 }); 5481 if (requiredEmpty) { 5482 fv.disableSubmitButtons(false); 5483 counterSubmit = 0; 5484 // Scroll to the first field with an error (HTML5-required scan does 5485 // not trigger err.form.fv, so handle the scroll here too) 5486 var $firstReqError = $form.find('.form-group.has-error').first(); 5487 if ($firstReqError.length) { 5488 $('html, body').animate({ scrollTop: $firstReqError.offset().top - 100 }, 700); 5489 } 5490 return false; 5491 } 5492 5493 var values = $(this).serialize(); 5494 5495 5496 var locationFieldCorrect = true; 5497 5498 if($("#newsletter_modal_signup_380 .location_required").length > 0){ 5499 $("#newsletter_modal_signup_380 .location_required").each(function (index) { 5500 if($(this).data('state') == 1){ 5501 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() == "") { 5502 locationFieldCorrect = false; 5503 } 5504 } 5505 }); 5506 } 5507 5508 if(locationFieldCorrect === false){ 5509 //check that there is a latitude or longitude 5510 swal(`Whoops!`, `The location information is required to submit this form`, "error"); 5511 return false; 5512 } 5513 5514 5515 if (!$(this).attr("action")) { 5516 var action = ''; 5517 5518 } else { 5519 var action = $(this).attr("action"); 5520 } 5521 if (!$(this).attr("method")) { 5522 var method = 'post'; 5523 5524 } else { 5525 var method = $(this).attr("method"); 5526 } 5527 if (!$(this).attr("form_action_type")) { 5528 var form_action_type = 'notification'; 5529 5530 } else { 5531 var form_action_type = $(this).attr("form_action_type"); 5532 } 5533 if (!$(this).attr("form_action_div")) { 5534 /* Empty "ID to Replace" default: prefer #main-content, fall back to legacy #first_container if absent */ 5535 var form_action_div = $('#main-content').length ? '#main-content' : '#first_container'; 5536 5537 } else { 5538 var form_action_div = $(this).attr("form_action_div"); 5539 } 5540 if (!$(this).attr("return_data_type")) { 5541 var return_data_type = 'json'; 5542 5543 } else { 5544 var return_data_type = $(this).attr("return_data_type"); 5545 } 5546 var submitInFlight = counterSubmit != 0 || (Date.now() - ($form.data('bdLastSubmitAt') || 0) < 5000); 5547 if (!submitInFlight) { 5548 if ($("#newsletter_modal_signup_380-notification").html() != "") { 5549 $("#newsletter_modal_signup_380-notification").remove(); 5550 } 5551 if ($(this).find('input[type="submit"]').length > 0) { 5552 $(this).find('input[type="submit"]').before('<div id="newsletter_modal_signup_380-notification" class="alert"></div>'); 5553 5554 } else { 5555 $(this).prepend('<div id="newsletter_modal_signup_380-notification" class="alert"></div>'); 5556 } 5557 } 5558 var notification = $("#newsletter_modal_signup_380-notification"); 5559 5560 if ((form_action_type == "" || form_action_type == "default") && action.indexOf("account") >= 0) { 5561 notification.html(`Processing Request...`).addClass("alert-warning-subtle"); 5562 setTimeout(function(){ 5563 fv.defaultSubmit(); 5564 }, 100); 5565 } else { 5566 notification.html(`Processing Request...`).addClass("alert-warning-subtle"); 5567 if(!submitInFlight) { 5568 counterSubmit++; 5569 $form.data('bdLastSubmitAt', Date.now()); 5570 5571 var fields = $(this).serializeArray(); 5572 var formField = []; 5573 var processData = true; 5574 var contentType = "application/x-www-form-urlencoded; charset=UTF-8"; 5575 5576 5577 5578 if($("#newsletter_modal_signup_380 input[type=file]").length > 0){ 5579 5580 var formObject = new FormData(); 5581 processData = false; 5582 contentType = false; 5583 5584 $(fields).each(function(index,field){ 5585 formField.push(field.name+"="+field.value); 5586 }); 5587 5588 values = formField.join("&"); 5589 5590 $(formField).each(function(index,fieldValue){ 5591 var fieldInfo = fieldValue.split('='); 5592 formObject.append(fieldInfo[0],fieldInfo[1]); 5593 }); 5594 5595 $("#newsletter_modal_signup_380 input[type=file]").each(function(index,node){ 5596 var file = this.files[0]; 5597 if(typeof file != "undefined"){ 5598 formObject.append("file_addon["+$(node).attr('name')+"]", file, file.name); 5599 } 5600 }); 5601 }else{ 5602 5603 $(fields).each(function(index,field){ 5604 formField.push(field.name+"="+encodeURIComponent(field.value)); 5605 }); 5606 5607 var formObject = formField.join("&"); 5608 } 5609 5610 $.ajax({
5611 url: action, 5612 type: method, 5613 data: formObject, 5614 dataType: return_data_type, 5615 processData: processData, 5616 contentType: contentType, 5617 success: function (data) { 5618 // Re-query live node: success.form.fv fires twice, orphaning the closure ref captured above. 5619 notification = $("#newsletter_modal_signup_380-notification"); 5620 if (return_data_type == "html") { 5621 var result = 'success'; 5622 5623 if (!data != "") { 5624 var result_widget = data['result_widget']; 5625 } 5626 5627 } else { 5628 5629 5630 if (!data['result']) { 5631 var result = 'error'; 5632 } else { 5633 var result = data['result']; 5634 } 5635 if (!data['result_widget']) { 5636 var result_widget = ''; 5637 5638 } else { 5639 var result_widget = data['result_widget']; 5640 } 5641 } 5642 if (result == "success") { 5643 5644 if (!data['message']) { 5645 var message = `Your information has submitted successfully!`; 5646 5647 } else { 5648 var message = data['message']; 5649 } 5650 if (!data['redirect_url']) { 5651 var redirect_url = ''; 5652 5653 } else { 5654 var redirect_url = data['redirect_url']; 5655 } 5656 5657 5658 5659 if (form_action_type == "notification") { 5660 if (redirect_url && (action.indexOf('Member%20Login%20Page') >= 0 || action.indexOf('Member Login Page') >= 0)) { 5661 if (redirect_url.substring(0, 1) != "/" && redirect_url.substring(0, 1) != "h") { 5662 redirect_url = "/" + redirect_url; 5663 } 5664 if (notification.parents('.modal').length) { 5665 $('.modal-backdrop').hide(); 5666 $('.modal').modal('hide'); 5667 } 5668 window.location.href = redirect_url; 5669 fv.resetForm(true); 5670 } else { 5671 notification.html(message + '<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>') 5672 .addClass('alert-dismissible') 5673 .addClass("alert-success-subtle") 5674 .removeClass("alert-danger-subtle") 5675 .removeClass("alert-warning-subtle") 5676 5677 5678 5679 if(notification.parents('.modal').length && 'newsletter_modal_signup_380' == 'whmcs_billing_address'){ 5680 setTimeout(function(){ 5681 notification.parents('.modal').modal('hide'); 5682 }, 1000); 5683 } 5684 } 5685 5686 } else if (form_action_type == "widget") { 5687 5688 if (result_widget != '') { 5689 5690 setTimeout(function(){ 5691 if(form_action_div != '.newsletter_modal_form_container'){ 5692 $("html, body").animate({ scrollTop: 0 }, 600); 5693 } 5694 $(form_action_div).html(decodeHtml(result_widget)).text(); 5695 5696 }, 1000); 5697 } 5698 5699 } else if (form_action_type == "redirect") { 5700 5701 if (redirect_url == "") { 5702 redirect_url = decodeURIComponent(""); 5703 } 5704 5705 if (redirect_url.substring(0, 1) != "/" && redirect_url.substring(0, 1) != "h") { 5706 redirect_url = "/" + redirect_url; 5707 } 5708 current_location = "/search_results"; 5709 refresh_pages_string = "/login"; 5710 refresh_pages_string = refresh_pages_string.replace(/ /g,''); 5711 refresh_pages_array = refresh_pages_string.split(','); 5712 notification.html(message) 5713 .addClass("alert-success-subtle") 5714 .removeClass("alert-danger-subtle") 5715 .removeClass("alert-warning-subtle") 5716 .delay(2000).slideUp(); 5717 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" )){ 5718 window.location.href = window.location.href+'?logged'; 5719 } else { 5720 window.location.href = redirect_url; 5721 } 5722 5723 fv.resetForm(true); 5724 } 5725 if(form_action_div != '.newsletter_modal_form_container' && 'newsletter_modal_signup_380' != 'whmcs_billing_address'){ 5726 $('.modal-backdrop').hide(); 5727 } 5728 } else { 5729 bdCaptchaReset(formElement.attr('id')); 5730 if (!data['message']) { 5731 var message = `You entered invali
5731d data. Please try to save again.`; 5732 5733 } else { 5734 var message = data['message']; 5735 } 5736 $("#newsletter_modal_signup_380-notification").html(message) 5737 .addClass("alert-danger-subtle") 5738 .removeClass("alert-success-subtle") 5739 .removeClass("alert-warning-subtle") 5740 .fadeIn(); 5741 fv.disableSubmitButtons(false); 5742 } 5743 counterSubmit = 0; 5744 }, 5745 error: function (e) { 5746 5747 if(typeof grecaptcha !== "undefined" && typeof grecaptcha.reset === "function"){ 5748 bdCaptchaReset(formElement.attr('id')); 5749 $("#newsletter_modal_signup_380-notification").html(`Recaptcha Error`); 5750 } else { 5751 $("#newsletter_modal_signup_380-notification").html(`A connection error occurred while saving. Please try to save again.`); 5752 } 5753 $("#newsletter_modal_signup_380-notification").addClass("alert-warning-subtle") 5754 .removeClass("alert-success-subtle") 5755 .removeClass("alert-warning-subtle") 5756 .fadeIn(); 5757 counterSubmit = 0; 5758 } 5759 });/// End Ajax 5760 } 5761 }//END else 5762 }).bind('keydown', function(event) { 5763 5764 if (event.ctrlKey || event.metaKey) { 5765 5766 switch (String.fromCharCode(event.which).toLowerCase()) { 5767 5768 case 's': 5769 var nativeForm = $(this)[0]; 5770 if (nativeForm && typeof nativeForm.reportValidity === 'function' && !nativeForm.reportValidity()) { 5771 event.preventDefault(); 5772 return false; 5773 } 5774 $(this).submit(); 5775 break; 5776 } 5777 } 5778 }); 5779 5780 /// This will turn any select2 that are required in the form builder to being required elements. 5781 $('#newsletter_modal_signup_380 select').each(function (i, obj) { 5782 setTimeout(function(){ 5783 if ($(obj).prop("required") && $(obj).attr("style") == "display: none;") { 5784 $(obj).css("z-index","-999"); 5785 $(obj).css("height","0"); 5786 $(obj).css("width","0"); 5787 $(obj).css("display","block"); 5788 $(obj).css("position","absolute"); 5789 } 5790 }, 3000); 5791 }); 5792 5793 // Clear required-error messages when user fills in a required field 5794 $('#newsletter_modal_signup_380').on('keyup change', '[required]', function() { 5795 var val = $(this).val(); 5796 if (val !== '' && val !== null && val.trim() !== '') { 5797 var $group = $(this).closest('.form-group'); 5798 // Remove only this handler's own required message 5799 $(this).siblings('.required-error').remove(); 5800 // Keep has-error if another FormValidation validator is still failing 5801 // (e.g. stringLength, regexp). has-error is shared, so removing it 5802 // wholesale would clobber other validators' red styling. 5803 if ($group.find('small[data-fv-validator][data-fv-result="INVALID"]').length === 0) { 5804 $group.removeClass('has-error'); 5805 } 5806 } 5807 }); 5808 5809 });//END $('# echo $_SERVER[form_element_id]; ').formValidation( 5810 </script>
5810 5811
5811<script type="text/javascript"> 5812(function () { 5813 try { 5814 var email = new URLSearchParams(window.location.search).get('email'); 5815 if (!email) { return; } 5816 email = email.trim(); 5817 if (email.indexOf('@') === -1) { return; } 5818 /* Sets the input value property (never HTML) -> XSS-safe regardless of the query value. */ 5819 var fill = function () { 5820 var fields = document.querySelectorAll('input[name="email_r"]'); 5821 for (var i = 0; i < fields.length; i++) { 5822 if (!fields[i].value) { fields[i].value = email; } 5823 } 5824 }; 5825 if (document.readyState === 'loading') { 5826 document.addEventListener('DOMContentLoaded', fill); 5827 } else { 5828 fill(); 5829 } 5830 } catch (e) {} 5831})(); 5832</script>
5832 5833
5833<script type="text/javascript"> 5834 5835 var counterSubmit = 0; 5836 $(document).ready(function() { 5837 /* grecaptcha.reset() with no argument always resets widget 0. On a page with two 5838 captcha holders that clears the wrong checkbox, so the widget the visitor solved 5839 keeps a token Google has already spent and every retry fails the security check. 5840 captchaHolders is published by widget 1995 keyed by "<formId>-google-recaptcha"; 5841 an undefined id means no per-form id is known and the arg-less call is used, 5842 exactly as before. */ 5843 function bdCaptchaWidgetId(formId) { 5844 if (typeof captchaHolders === "undefined" || !formId) { 5845 return undefined; 5846 } 5847 /* recaptcha.php renames each holder to "<id>-<counter>" before render (recaptcha.php ~L84), 5848 so captchaHolders is keyed by the RENAMED id - not "<formId>-google-recaptcha". Resolve from 5849 the holder element itself so the counter never has to be reconstructed. */ 5850 var form = document.getElementById(formId); 5851 var holder = form && form.querySelector(".g-recaptcha"); 5852 return holder ? captchaHolders[holder.id] : undefined; 5853 } 5854 5855 function bdCaptchaReset(formId) { 5856 if (typeof grecaptcha === "undefined" || typeof grecaptcha.reset !== "function") { 5857 return; 5858 } 5859 var widgetId = bdCaptchaWidgetId(formId); 5860 if (widgetId === undefined) { 5861 grecaptcha.reset(); 5862 } else { 5863 grecaptcha.reset(widgetId); 5864 } 5865 } 5866 5867 // Ghost-field strip (card d4tk1CMp): the server-side validator config can carry 5868 // rules for fields that are NOT rendered in this form (conditionally-rendered or 5869 // duplicated form configs). Those phantom rules make formValidation mis-evaluate 5870 // isValid(), so an empty required field bypasses validation and submits natively. 5871 // Remove any rule whose field has no matching element before initializing. 5872 // NOTE: this is the ONLY layer re-applied from reverted PR #5902. It strictly 5873 // REMOVES rules (never adds validators, never overrides native submit, never 5874 // intercepts on capture phase, never re-validates on click) â so it cannot 5875 // reproduce the "Save button slides down / nav broken / no success message" 5876 // regression that caused #5902 to be rolled back on site 19413. 5877 var validatorConfig = {"framework":"bootstrap","addOns":{"reCaptcha2":{"element":"captchaContainer","language":"en","theme":"light","siteKey":"6LefnrMqAAAAAJ7P0zC7FpwVr8HmTffHnk3k7ZBX","timeout":"120","message":"The captcha is not valid"}},"fields":{"email":{"validators":{"notEmpty":{"message":"Required Field"},"emailAddress":{"message":"Please enter a valid email address"}}},"pass":{"validators":{"notEmpty":{"message":"Required Field"}}}}}; 5878 var formElement = $(`form[name='member_login_190']`); 5879 if(validatorConfig && validatorConfig.fields) { 5880 Object.keys(validatorConfig.fields).forEach(function(fieldName) { 5881 if(formElement.find('[name="' + fieldName + '"]').length === 0) { 5882 delete validatorConfig.fields[fieldName]; 5883 } 5884 }); 5885 } 5886 5887 // Scroll to the first invalid field when submit fails validation, 5888 // so the user can immediately see why the form will not submit 5889 formElement.on('err.form.fv', function(e) { 5890 var $firstError = $(e.target).find('.form-group.has-error').first(); 5891 if ($firstError.length) { 5892 $('html, body').animate({ scrollTop: $firstError.offset().top - 100 }, 700); 5893 } 5894 }); 5895
5896 formElement.formValidation(validatorConfig).on('success.form.fv', function(e,fvdata) { 5897 5898 if('member_login' == 'unsubscribe_email'){ 5899 return true; 5900 } 5901 // Prevent form submission 5902 e.preventDefault(); 5903 $form = $(e.target), 5904 fv = $form.data('formValidation'); 5905 5906 // Check HTML5 required fields that FormValidation may not know about 5907 var requiredEmpty = false; 5908 $form.find('[required]').each(function() { 5909 var val = $(this).val(); 5910 if (val === '' || val === null || (typeof val === 'string' && val.trim() === '')) { 5911 requiredEmpty = true; 5912 $(this).closest('.form-group').addClass('has-error'); 5913 if ($(this).siblings('.required-error').length === 0) { 5914 $(this).after('<small class="required-error help-block" style="color:#a94442;">Required Field</small>'); 5915 } 5916 } else { 5917 var $reqGroup = $(this).closest('.form-group'); 5918 $(this).siblings('.required-error').remove(); 5919 // Keep has-error if another validator is still failing for this field 5920 if ($reqGroup.find('small[data-fv-validator][data-fv-result="INVALID"]').length === 0) { 5921 $reqGroup.removeClass('has-error'); 5922 } 5923 } 5924 }); 5925 if (requiredEmpty) { 5926 fv.disableSubmitButtons(false); 5927 counterSubmit = 0; 5928 // Scroll to the first field with an error (HTML5-required scan does 5929 // not trigger err.form.fv, so handle the scroll here too) 5930 var $firstReqError = $form.find('.form-group.has-error').first(); 5931 if ($firstReqError.length) { 5932 $('html, body').animate({ scrollTop: $firstReqError.offset().top - 100 }, 700); 5933 } 5934 return false; 5935 } 5936 5937 var values = $(this).serialize(); 5938 5939 5940 var locationFieldCorrect = true; 5941 5942 if($("#member_login_190 .location_required").length > 0){ 5943 $("#member_login_190 .location_required").each(function (index) { 5944 if($(this).data('state') == 1){ 5945 if($('#member_login_190 input[name="lead_location"]').val() == "" || $('#member_login_190 input[name="lat"]').val() == "" || $('#member_login_190 input[name="lng"]').val() == "") { 5946 locationFieldCorrect = false; 5947 } 5948 } 5949 }); 5950 } 5951 5952 if(locationFieldCorrect === false){ 5953 //check that there is a latitude or longitude 5954 swal(`Whoops!`, `The location information is required to submit this form`, "error"); 5955 return false; 5956 } 5957 5958 5959 if (!$(this).attr("action")) { 5960 var action = ''; 5961 5962 } else { 5963 var action = $(this).attr("action"); 5964 } 5965 if (!$(this).attr("method")) { 5966 var method = 'post'; 5967 5968 } else { 5969 var method = $(this).attr("method"); 5970 } 5971 if (!$(this).attr("form_action_type")) { 5972 var form_action_type = 'notification'; 5973 5974 } else { 5975 var form_action_type = $(this).attr("form_action_type"); 5976 } 5977 if (!$(this).attr("form_action_div")) { 5978 /* Empty "ID to Replace" default: prefer #main-content, fall back to legacy #first_container if absent */ 5979 var form_action_div = $('#main-content').length ? '#main-content' : '#first_container'; 5980 5981 } else { 5982 var form_action_div = $(this).attr("form_action_div"); 5983 } 5984 if (!$(this).attr("return_data_type")) { 5985 var return_data_type = 'json'; 5986 5987 } else { 5988 var return_data_type = $(this).attr("return_data_type"); 5989 } 5990 var submitInFlight = counterSubmit != 0 || (Date.now() - ($form.data('bdLastSubmitAt') || 0) < 5000); 5991 if (!submitInFlight) { 5992 if ($("#member_login_190-notification").html() != "") { 5993 $("#member_login_190-notification").remove(); 5994 } 5995 if ($(this).find('input[type="submit"]').length > 0) { 5996 $(this).find('input[type="submit"]').before('<div id="member_login_190-notification" class="alert"></div>'); 5997 5998 } else { 5999 $(this).prepend('<div id="member_login_190-notification" class="alert"></div>'); 6000 } 6001 } 6002 var notification = $("#member_login_190-notification"); 6003 6004 if ((form_action_type == "" || form_action_type == "default") && action.indexOf("account") >= 0) { 6005 notification.html(`Processing Request...`).addClass("alert-warning-subtle"); 6006 setTimeout(function(){ 6007 fv.defaultSubmit(); 6008 }, 100); 6009 } else { 6010 notification.html(`Processing Request...`).addClass("alert-warning-subtle"); 6011 if(!submitInFlight) { 6012 counterSubmit++; 6013 $form.data('bdLastSubmitAt', Date.now()); 6014 6015 var fields = $(this).serializeArray(); 6016 var formField = []; 6017 var processData = true; 6018 var contentType = "application/x-www-form-urlencoded; charset=UTF-8"; 6019 6020 6021 6022 if($("#member_login_190 input[type=file]").length > 0){ 6023 6024 var formObject = new FormData(); 6025 processData = false; 6026 contentType = false; 6027 6028 $(fields).each(function(index,field){ 6029 formField.push(field.name+"="+field.value); 6030 }); 6031 6032 values = formField.join("&"); 6033 6034 $(formField).each(function(index,fieldValue){ 6035 var fieldInfo = fieldValue.split('='); 6036 formObject.append(fieldInfo[0],fieldInfo[1]); 6037 }); 6038 6039 $("#member_login_190 input[type=file]").each(function(index,node){ 6040 var file = this.files[0]; 6041 if(typeof file != "undefined"){ 6042 formObject.append("file_addon["+$(node).attr('name')+"]", file, file.name); 6043 } 6044 }); 6045 }else{ 6046 6047 $(fields).each(function(index,field){ 6048 formField.push(field.name+"="+encodeURIComponent(field.value)); 6049 }); 6050 6051 var formObject = formField.join("&"); 6052 } 6053 6054 $.ajax({
6055 url: action, 6056 type: method, 6057 data: formObject, 6058 dataType: return_data_type, 6059 processData: processData, 6060 contentType: contentType, 6061 success: function (data) { 6062 // Re-query live node: success.form.fv fires twice, orphaning the closure ref captured above. 6063 notification = $("#member_login_190-notification"); 6064 if (return_data_type == "html") { 6065 var result = 'success'; 6066 6067 if (!data != "") { 6068 var result_widget = data['result_widget']; 6069 } 6070 6071 } else { 6072 6073 6074 if (!data['result']) { 6075 var result = 'error'; 6076 } else { 6077 var result = data['result']; 6078 } 6079 if (!data['result_widget']) { 6080 var result_widget = ''; 6081 6082 } else { 6083 var result_widget = data['result_widget']; 6084 } 6085 } 6086 if (result == "success") { 6087 6088 if (!data['message']) { 6089 var message = `Your information has submitted successfully!`; 6090 6091 } else { 6092 var message = data['message']; 6093 } 6094 if (!data['redirect_url']) { 6095 var redirect_url = ''; 6096 6097 } else { 6098 var redirect_url = data['redirect_url']; 6099 } 6100 6101 6102 6103 if (form_action_type == "notification") { 6104 if (redirect_url && (action.indexOf('Member%20Login%20Page') >= 0 || action.indexOf('Member Login Page') >= 0)) { 6105 if (redirect_url.substring(0, 1) != "/" && redirect_url.substring(0, 1) != "h") { 6106 redirect_url = "/" + redirect_url; 6107 } 6108 if (notification.parents('.modal').length) { 6109 $('.modal-backdrop').hide(); 6110 $('.modal').modal('hide'); 6111 } 6112 window.location.href = redirect_url; 6113 fv.resetForm(true); 6114 } else { 6115 notification.html(message + '<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>') 6116 .addClass('alert-dismissible') 6117 .addClass("alert-success-subtle") 6118 .removeClass("alert-danger-subtle") 6119 .removeClass("alert-warning-subtle") 6120 6121 6122 6123 if(notification.parents('.modal').length && 'member_login_190' == 'whmcs_billing_address'){ 6124 setTimeout(function(){ 6125 notification.parents('.modal').modal('hide'); 6126 }, 1000); 6127 } 6128 } 6129 6130 } else if (form_action_type == "widget") { 6131 6132 if (result_widget != '') { 6133 6134 setTimeout(function(){ 6135 if(form_action_div != '.newsletter_modal_form_container'){ 6136 $("html, body").animate({ scrollTop: 0 }, 600); 6137 } 6138 $(form_action_div).html(decodeHtml(result_widget)).text(); 6139 6140 }, 1000); 6141 } 6142 6143 } else if (form_action_type == "redirect") { 6144 6145 if (redirect_url == "") { 6146 redirect_url = decodeURIComponent(""); 6147 } 6148 6149 if (redirect_url.substring(0, 1) != "/" && redirect_url.substring(0, 1) != "h") { 6150 redirect_url = "/" + redirect_url; 6151 } 6152 current_location = "/search_results"; 6153 refresh_pages_string = "/login"; 6154 refresh_pages_string = refresh_pages_string.replace(/ /g,''); 6155 refresh_pages_array = refresh_pages_string.split(','); 6156 notification.html(message) 6157 .addClass("alert-success-subtle") 6158 .removeClass("alert-danger-subtle") 6159 .removeClass("alert-warning-subtle") 6160 .delay(2000).slideUp(); 6161 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" )){ 6162 window.location.href = window.location.href+'?logged'; 6163 } else { 6164 window.location.href = redirect_url; 6165 } 6166 6167 fv.resetForm(true); 6168 } 6169 if(form_action_div != '.newsletter_modal_form_container' && 'member_login_190' != 'whmcs_billing_address'){ 6170 $('.modal-backdrop').hide(); 6171 } 6172 } else { 6173 bdCaptchaReset(formElement.attr('id')); 6174 if (!data['message']) { 6175 var message = `You entered invali
6175d data. Please try to save again.`; 6176 6177 } else { 6178 var message = data['message']; 6179 } 6180 $("#member_login_190-notification").html(message) 6181 .addClass("alert-danger-subtle") 6182 .removeClass("alert-success-subtle") 6183 .removeClass("alert-warning-subtle") 6184 .fadeIn(); 6185 fv.disableSubmitButtons(false); 6186 } 6187 counterSubmit = 0; 6188 }, 6189 error: function (e) { 6190 6191 if(typeof grecaptcha !== "undefined" && typeof grecaptcha.reset === "function"){ 6192 bdCaptchaReset(formElement.attr('id')); 6193 $("#member_login_190-notification").html(`Recaptcha Error`); 6194 } else { 6195 $("#member_login_190-notification").html(`A connection error occurred while saving. Please try to save again.`); 6196 } 6197 $("#member_login_190-notification").addClass("alert-warning-subtle") 6198 .removeClass("alert-success-subtle") 6199 .removeClass("alert-warning-subtle") 6200 .fadeIn(); 6201 counterSubmit = 0; 6202 } 6203 });/// End Ajax 6204 } 6205 }//END else 6206 }).bind('keydown', function(event) { 6207 6208 if (event.ctrlKey || event.metaKey) { 6209 6210 switch (String.fromCharCode(event.which).toLowerCase()) { 6211 6212 case 's': 6213 var nativeForm = $(this)[0]; 6214 if (nativeForm && typeof nativeForm.reportValidity === 'function' && !nativeForm.reportValidity()) { 6215 event.preventDefault(); 6216 return false; 6217 } 6218 $(this).submit(); 6219 break; 6220 } 6221 } 6222 }); 6223 6224 /// This will turn any select2 that are required in the form builder to being required elements. 6225 $('#member_login_190 select').each(function (i, obj) { 6226 setTimeout(function(){ 6227 if ($(obj).prop("required") && $(obj).attr("style") == "display: none;") { 6228 $(obj).css("z-index","-999"); 6229 $(obj).css("height","0"); 6230 $(obj).css("width","0"); 6231 $(obj).css("display","block"); 6232 $(obj).css("position","absolute"); 6233 } 6234 }, 3000); 6235 }); 6236 6237 // Clear required-error messages when user fills in a required field 6238 $('#member_login_190').on('keyup change', '[required]', function() { 6239 var val = $(this).val(); 6240 if (val !== '' && val !== null && val.trim() !== '') { 6241 var $group = $(this).closest('.form-group'); 6242 // Remove only this handler's own required message 6243 $(this).siblings('.required-error').remove(); 6244 // Keep has-error if another FormValidation validator is still failing 6245 // (e.g. stringLength, regexp). has-error is shared, so removing it 6246 // wholesale would clobber other validators' red styling. 6247 if ($group.find('small[data-fv-validator][data-fv-result="INVALID"]').length === 0) { 6248 $group.removeClass('has-error'); 6249 } 6250 } 6251 }); 6252 6253 });//END $('# echo $_SERVER[form_element_id]; ').formValidation( 6254 </script>
6254 6255
6255<script> 6256 /* Switch fires at DOM-ready with libs pre-warmed â never serialize it behind 6257 window.load/timers (list-view flash); masonry re-lays out once images finish. */ 6258 var bdGridImagesWarm = loadImagesloadedJs(); 6259 if (typeof loadMasonryJs === "function") { loadMasonryJs(); } 6260 6261 $(document).ready(function () { 6262 if ($(window).width() > 960) { 6263 $(".feature-search .js-click").trigger("click"); 6264 bdGridImagesWarm.then(function () { 6265 if (typeof $.fn.imagesLoaded !== "function") { return; } 6266 $('.grid-container').imagesLoaded(function () { 6267 if (typeof masonry_opened !== "undefined" && masonry_opened == 1) { 6268 $('.grid-container').masonry('layout'); 6269 } 6270 }); 6271 }); 6272 } 6273 $('.grid-container').addClass('visible'); 6274 }); 6275 6276 async function loadImagesloadedJs() { 6277 return new Promise((resolve, reject) => { 6278 if (window["imagesLoadedJs"]) { 6279 resolve("already loaded imagesloaded.pkgd.min.js"); 6280 } 6281 let srcJs = "https://www.optimizecdn.com/directory/cdn/assets/bootstrap/js/imagesloaded.pkgd.min.js"; 6282 let head = document.getElementsByTagName("head")[0]; 6283 let script = document.createElement('script'); 6284 script.type = 'text/javascript'; 6285 script.src = srcJs; 6286 script.async = true; 6287 script.onload = function () { 6288 window["imagesLoadedJs"] = true; 6289 resolve("ok"); 6290 }; 6291 script.onerror = function () { 6292 $('.grid-container').addClass('visible'); 6293 resolve("error loading imagesloaded - showing grid as fallback"); 6294 }; 6295 head.appendChild(script); 6296 }); 6297 } 6298 </script>
6298 6299
6299<script> 6300 window.addEventListener('load', (event) => { 6301 setTimeout(() => { 6302 }, 501); 6303 }); 6304 </script>
vendor: 2 bytes, line 6304
6304
6305<script> 6306 function decision(message, url) { 6307 if (confirm(message)) { 6308 setTimeout(function () { 6309 window.location = url; 6310 }, 0); 6311 } 6312 } 6313</script>
vendor: 2 bytes, line 6313
6313
6314<script> 6315 // Function to add alt, width, and height attributes to <img> elements without them 6316 function addAttributesToImages() { 6317 var images = document.querySelectorAll('img:not([alt]), img:not([width]), img:not([height])'); 6318 Array.prototype.forEach.call(images, function(img) { 6319 // Skip if we've already processed this image 6320 if (img.dataset.processed === 'true') { 6321 return; 6322 } 6323 6324 // Mark this image as being processed 6325 img.dataset.processed = 'true'; 6326 6327 // Add alt attribute if missing 6328 if (!img.hasAttribute('alt')) { 6329 var src = img.getAttribute('src') || 'image'; // Default src to 'image' if missing 6330 var altText = src.split('/').pop().split('?')[0].replace(/\.\w+$/, ''); 6331 6332 try { 6333 altText = decodeURIComponent(altText) 6334 .replace(/[_\-+,.:;]+/g, ' ') 6335 .replace(/\s+/g, ' ') 6336 .trim(); 6337 } catch (e) { 6338 altText = 'image'; // Fallback to 'image' if decoding fails 6339 } 6340 6341 // Ensure altText is not empty, otherwise use 'image' 6342 altText = altText || 'image'; 6343 6344 img.setAttribute('alt', altText); 6345 } 6346 6347 // Add width and height attributes if missing 6348 if (!img.hasAttribute('width') || !img.hasAttribute('height')) { 6349 // Handle SVG differently 6350 if (img.src && img.src.endsWith('.svg')) { 6351 // For SVG, use the viewBox to set width and height, if available 6352 fetch(img.src) 6353 .then(response => { 6354 if (!response.ok) { 6355 throw new Error('Failed to fetch SVG: ' + response.status); 6356 } 6357 return response.text(); 6358 }) 6359 .then(svgText => { 6360 var parser = new DOMParser(); 6361 var svgDoc = parser.parseFromString(svgText, "image/svg+xml"); 6362 var svgElement = svgDoc.querySelector('svg'); 6363 6364 if (svgElement) { 6365 var viewBox = svgElement.getAttribute('viewBox'); 6366 if (viewBox) { 6367 var viewBoxValues = viewBox.split(' '); 6368 var width = viewBoxValues[2]; 6369 var height = viewBoxValues[3]; 6370 6371 if (!img.hasAttribute('width')) { 6372 img.setAttribute('width', width); 6373 } 6374 if (!img.hasAttribute('height')) { 6375 img.setAttribute('height', height); 6376 } 6377 } 6378 } 6379 }) 6380 .catch(error => { 6381 // Fallback to default dimensions for SVG 6382 if (!img.hasAttribute('width')) { 6383 img.setAttribute('width', '100'); 6384 } 6385 if (!img.hasAttribute('height')) { 6386 img.setAttribute('height', '100'); 6387 } 6388 }); 6389 } else { 6390 // For non-SVG images, use natural dimensions 6391 var tempImg = new Image(); 6392 tempImg.src = img.src; 6393 6394 tempImg.onload = function() { 6395 if (!img.hasAttribute('width')) { 6396 img.setAttribute('width', tempImg.naturalWidth); 6397 } 6398 if (!img.hasAttribute('height')) { 6399 img.setAttribute('height', tempImg.naturalHeight); 6400 } 6401 }; 6402 6403 tempImg.onerror = function() { 6404 // Fallback to default dimensions 6405 if (!img.hasAttribute('width')) { 6406 img.setAttribute('width', '100'); 6407 } 6408 if (!img.hasAttribute('height')) { 6409 img.setAttribute('height', '100'); 6410 } 6411 }; 6412 } 6413 } 6414 }); 6415 } 6416 6417 document.addEventListener('DOMContentLoaded', function() { 6418 // Run the function initially to catch images already in the DOM 6419 addAttributesToImages(); 6420 6421 // Create a MutationObserver to monitor the DOM for added/changed images 6422 var observer = new MutationObserver(function(mutations) { 6423 mutations.forEach(function(mutation) { 6424 if (mutation.addedNodes.length > 0 || mutation.type === 'attributes') { 6425 // Only process if we have new images or src attribute changes 6426 var hasNewImages = false; 6427 6428 if (mutation.addedNodes.length > 0) { 6429 mutation.addedNodes.forEach(function(node) { 6430 if (node.nodeType === 1) { // Element node 6431 if (node.tagName === 'IMG' || node.querySelectorAll) { 6432 hasNewImages = true; 6433 } 6434 } 6435 }); 6436 } 6437 6438 if (mutation.type === 'attributes' && mutation.attributeName === 'src') { 6439 hasNewImages = true; 6440 } 6441 6442 if (hasNewImages) { 6443 addAttributesToImages(); 6444 } 6445 } 6446 }); 6447 }); 6448 6449 // Start observing the document body for changes 6450 observer.observe(document.body, { 6451 childList: true, // Watch for added or removed nodes 6452 subtree: true, // Watch the entire subtree 6453 attributes: true, // Watch for attribute changes 6454 attributeFilter: ['src'] // Specifically watch for changes in the 'src' attribute 6455 }); 6456 }); 6457</script>
6457<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] { 6458 cursor: wait 6459} 6460select.select2-preload { 6461 line-height: initial; 6462} 6463 6464select#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"] { 6465 -webkit-appearance: none; 6466 -moz-appearance: none; 6467 appearance: none; 6468 background-image: url(/images/select2ArrowDown.png) !important; 6469 background-repeat: no-repeat !important; 6470 background-size: 10px 9px !important; 6471 background-position: 99% 16px; 6472 border-radius: 6px; 6473 overflow: hidden; 6474} 6475.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"] { 6476 background-position: 98.2% 12px; 6477} </style> <!-- DROPDOWN SELECT SCRIPT --> 6478 <!-- Select2 CSS Included in website-styles.pkgd.min.css --> 6479 <!--[if lt IE 9]> 6480
6480<script defer src="https://www.optimizecdn.com/directory/cdn/assets/html5shiv/3.7.2/html5shiv.min.js"></script>
6480 6481
6481<script defer src="https://www.optimizecdn.com/directory/cdn/bootstrap/select2/master/js/respond.min.js"></script>
6481 6482 <![endif]--> 6483
6483<script> 6484 6485 var preloaded_ttid = false; 6486 var preloaded_tid = false; 6487 var preloaded_sid = false; 6488 var path2 = window.location.pathname.replace(/\//g, "_"); 6489 6490 if (performance.navigation.type !== 2) { 6491 if (sessionStorage.getItem('select2-ttid'+path2) !== null) { 6492 sessionStorage.removeItem('select2-ttid'+path2); 6493 } 6494 6495 if (sessionStorage.getItem('select2-tid'+path2) !== null) { 6496 sessionStorage.removeItem('select2-tid'+path2); 6497 } 6498 6499 if (sessionStorage.getItem('select2-sid'+path2) !== null) { 6500 sessionStorage.removeItem('select2-sid'+path2); 6501 } 6502 6503 }else if(performance.navigation.type === 2){ 6504 if (sessionStorage.getItem('select2-ttid'+path2) !== null) { 6505 preloaded_ttid = sessionStorage.getItem('select2-ttid'+path2); 6506 } 6507 6508 if (sessionStorage.getItem('select2-tid'+path2) !== null) { 6509 preloaded_tid = sessionStorage.getItem('select2-tid'+path2); 6510 } 6511 6512 if (sessionStorage.getItem('select2-sid'+path2) !== null) { 6513 preloaded_sid = sessionStorage.getItem('select2-sid'+path2); 6514 } 6515 } 6516 6517 window.addEventListener('load', () => { 6518 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"]'); 6519 if (typeof select2Inputs != "undefined") { 6520 for (let i = 0; i < select2Inputs.length; i++) { 6521 let inputPlaceHolder = select2Inputs[i].getAttribute('placeholder'); 6522 if (!select2Inputs[i].getAttribute('placeholder')) { 6523 inputPlaceHolder = select2Inputs[i].getAttribute('data-placeholder'); 6524 } 6525 let countryCode = select2Inputs[i].getAttribute('data-country-code'); 6526 if (select2Inputs[i].getAttribute('data-country-code') != null && countryCode > 0 && typeof isoCountries != 'undefined') { 6527 for (let c = 0; c < isoCountries.length; c++) { 6528 if(isoCountries[c].id == countryCode){ 6529 // select2Inputs[i].querySelector('option:first-child').text = isoCountries[c].text; 6530 select2Inputs[i].text = isoCountries[c].text; 6531 } 6532 } 6533 6534 } 6535 if(select2Inputs[i].hasAttribute('data-country-code')){ 6536 inputPlaceHolder = null; //reset the input 6537 } 6538 if (inputPlaceHolder != '' && inputPlaceHolder !== null) { 6539 select2Inputs[i].querySelector('option:first-child').text = inputPlaceHolder; 6540 select2Inputs[i].style.color = "#a8a8a8"; 6541 if(!select2Inputs[i].querySelector('option:first-child').hasAttribute('value')){ 6542 select2Inputs[i].querySelector('option:first-child').value=''; 6543 } 6544 } 6545 select2Inputs[i].classList.add("select2-preload"); 6546 select2Inputs[i].addEventListener('mousedown', select2OnFormClick, false); 6547 } 6548 } 6549 }); 6550 6551 function select2OnFormClick(event = false) { 6552 let elemtClicked = ''; 6553 if (event !== false) { 6554 event.preventDefault(); 6555 event.stopImmediatePropagation(); 6556 elemtClicked = event.target; 6557 elemtClicked.disabled = true; 6558 } 6559 6560 let loadScriptAsync = function (uri) { 6561 return new Promise((resolve, reject) => { 6562 let script = document.createElement('script'); 6563 script.type = 'text/javascript'; 6564 script.src = uri; 6565 script.async = true; 6566 script.onload = function () { 6567 if (event !== false) { 6568 elemtClicked.disabled = false; 6569 select2Initialize(); 6570 $(elemtClicked).select2('open'); 6571 $(elemtClicked).on("select2-close", function () { 6572 setTimeout(function() { 6573 $('.select2-container-active').removeClass('select2-container-active'); 6574 $(':focus').blur(); 6575 }, 1); 6576 }); 6577 if (elemtClicked.hasAttribute('data-fv-field')) { 6578 if (window.getComputedStyle(elemtClicked).display === "none") { 6579 // if element is display none, the formvalition can not read 6580 elemtClicked.style.cssText = "display: block;position: absolute;visibility: hidden !important;height: 0;width: 0;opacity: 0 !important;"
6581 } 6582 } 6583 } else { 6584 select2Initialize(); 6585 } 6586 resolve("ok"); 6587 }; 6588 let head = document.getElementsByTagName('head')[0]; 6589 head.appendChild(script); 6590 }); 6591 } 6592 6593 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"]'); 6594 6595 if (typeof select2Inputs != "undefined") { 6596 for (let i = 0; i < select2Inputs.length; i++) { 6597 let inputPlaceHolder = select2Inputs[i].getAttribute('placeholder'); 6598 if (!select2Inputs[i].getAttribute('placeholder')) { 6599 inputPlaceHolder = select2Inputs[i].getAttribute('data-placeholder'); 6600 } 6601 if(select2Inputs[i].hasAttribute('data-country-code')){ 6602 inputPlaceHolder = null; //reset the input 6603 } 6604 if (inputPlaceHolder != '' && inputPlaceHolder !== null) { 6605 select2Inputs[i].querySelector('option:first-child').text = ''; 6606 } 6607 select2Inputs[i].removeEventListener('mousedown', select2OnFormClick, false); 6608 } 6609 } 6610 let scriptLoaded = loadScriptAsync('https://www.optimizecdn.com/directory/cdn/bootstrap/select2/3.5.2/select2.min.js?v=3.5.5'); 6611 return scriptLoaded; 6612 } 6613 6614 function select2Initialize(){ 6615 function getSecondLevel(div,id) { 6616 $("#" + div).select2("data", { 6617 id: "", 6618 text: `Loading...` 6619 }); 6620 $.ajax({
6621 url : '/ajaxsearch/get-services', 6622 type : "GET", 6623 data : { 6624 'specialty_id' : id 6625 }, 6626 dataType: "json", 6627 success : function(data) { 6628 var options = ''; 6629 6630 for (var i = 0; i < data.length; i++) { 6631 options += '<option value="' + data[i].value + '">' + data[i].title + '</option>'; 6632 } 6633 if (div == "tid"){ 6634 $("#ttid").select2("data", { 6635 id: "", 6636 text: "No options available" 6637 }); 6638 6639 6640 $("#ttid").select2("enable", false); 6641 6642 $("#" + div).change(function () { 6643 sessionStorage.setItem("select2-tid"+path2,$(this).val()); 6644 }); 6645 } 6646 if (data.length > 1) { 6647 $("#" + div).select2("enable",true); 6648 $("#" + div).html(options); 6649 $("#" + div).select2("val", ""); 6650 6651 } else { 6652 $("#"+div).select2("data", { 6653 id: "", 6654 text: "No options available" 6655 }); 6656 $("#"+div).select2("val", ""); 6657 } 6658 6659 if(div == 'tid' && preloaded_tid !== false){ 6660 $("#" + div).select2("val", preloaded_tid); 6661 $("#" + div).trigger('change'); 6662 } 6663 } 6664 }); 6665 } 6666 function getSecondLevelAccount(div,id) { 6667 $("#" + div).select2("data", { 6668 id: "", 6669 text: `Loading...` 6670 }); 6671 $.ajax({
6672 url : '/ajaxsearch/get-services', 6673 type : "GET", 6674 data : { 6675 'specialty_id' : id 6676 }, 6677 dataType: "json", 6678 success : function(data) { 6679 var options = ''; 6680 6681 for (var i = 0; i < data.length; i++) { 6682 options += '<option value="' + data[i].value + '">' + data[i].title + '</option>'; 6683 } 6684 if (data.length > 1) { 6685 $("#" + div).select2("close"); 6686 $("#" + div).select2("val", ""); 6687 $("#" + div).select2("enable",true); 6688 $("#" + div).html(options); 6689 6690 6691 } else { 6692 $("#"+div).select2("data", { 6693 id: "", 6694 text: "No options available" 6695 }); 6696 $("#"+div).select2("val", ""); 6697 } 6698 } 6699 }); 6700 } 6701 function getThirdLevel(div,id,id2) { 6702 $("#"+div).select2("data", { 6703 id: "", 6704 text: `Loading...` 6705 }); 6706 6707 $.ajax({
6708 url : '/ajaxsearch/get-locations', 6709 type : "GET", 6710 data : { 6711 'specialty_id' : id, 6712 'treatment_id' : id2, 6713 }, 6714 dataType: "json", 6715 success : function(data) { 6716 var options = ''; 6717 6718 for (var i = 0; i < data.length; i++) { 6719 options += '<option value="' + data[i].value + '">' + data[i].title + '</option>'; 6720 } 6721 if (data.length > 1) { 6722 $("#" + div).select2("enable",true); 6723 $("#" + div).html(options); 6724 $("#" + div).select2("val", ""); 6725 6726 } else { 6727 $("#"+div).select2("data", { 6728 id: "", 6729 text: "No options available" 6730 }); 6731 $("#"+div).select2("val", ""); 6732 } 6733 } 6734 }); 6735 } 6736 var current_country = ''; 6737 function getStateList(div,id) { 6738 if (id != current_country) { 6739 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). */ 6740 6741 $("#"+div).select2("data", { 6742 id: "", 6743 text: `Loading...` 6744 }); 6745 $.ajax({
6746 url : '/ajaxsearch/get-states', 6747 type : "GET", 6748 data : { 6749 'country' : id 6750 }, 6751 dataType: "json", 6752 success : function(data) { 6753 $("#" + div).html(''); // clear options 6754 6755 /* p949P6dS: data[0] is always the server-side "(Select from List)" placeholder, 6756 so <=2 entries means the country has at most 1 real region (Singapore, 6757 Martinique, zero-region). Client wants those to read "No State/Province 6758 Available" instead of "(Select from List)"; the single real region stays 6759 selectable. Reset/enable now runs on EVERY response (was gated behind 6760 data.length > 1, which left zero-region countries stuck on "Loading..." 6761 and disabled); auto-open stays multi-region only. */ 6762 var hasStates = (data.length > 2); 6763 for (var i = 0; i < data.length; i++) { 6764 var optionTitle = (!hasStates && data[i].value === "") ? `No State/Province Available for This Country` : data[i].title; 6765 var newOption = new Option(optionTitle, data[i].value, false, false); 6766 $("#" + div).append(newOption).trigger('change'); 6767 6768 } 6769 if (data.length === 0) { 6770 $("#" + div).append(new Option(`No State/Province Available for This Country`, "", false, false)).trigger('change'); 6771 } 6772 6773 $("#" + div).select2("enable",true); 6774 $("#" + div).prop("disabled", false); 6775 $("#" + div).select2("val", ""); 6776 if (hasStates) { 6777 $("#" + div).select2("open"); 6778 } 6779 } 6780 }); 6781 } else { 6782 /* p949P6dS AC#3: the select2-open handler runs select2("enable",false) BEFORE 6783 re-calling getStateList, and for a country with <=2 options (Singapore, 6784 Martinique) that re-call short-circuits here on the id == current_country 6785 guard. This branch previously only reset the value, so the field was left 6786 permanently disabled: select2-container-disabled, clicks never open it, the 6787 single real region is unselectable. Mirror the success path's re-enable so a 6788 short-circuited re-open leaves the field usable. Multi-region countries never 6789 hit this (their open handler is gated behind count <= 2). */ 6790 $("#" + div).select2("enable", true); 6791 $("#" + div).prop("disabled", false); 6792 $("#" + div).select2("val", ""); 6793 } 6794 } 6795 /* p949P6dS: keep the checkout/billing required-State validation in sync with the 6796 server-side waiver, on BOTH layers. When the selected country has selectable 6797 sub-regions (Canada, US, ...) FormValidation validates state_code (inline "Required 6798 Field" on submit); when it has none (Singapore, Martinique, zero-region) the state_code 6799 validator is disabled + un-flagged so those countries are not blocked. Delegated so it 6800 binds even though the billing form is revealed after step 1; guarded to no-op on any 6801 page/form without FormValidation + a state_code field. The server still enforces the 6802 same rule (bd-core-files form_controller), so this is UX only, not the security gate. */ 6803 function bdSyncStateRequired(hasStates) { 6804 var $stField = $("#state-chained"); 6805 var $stForm = $stField.closest("form"); 6806 var stFv = ($stForm.length) ? ($stForm.data("formValidation") || $stForm.data("bootstrapValidator")) : null; 6807 if (!stFv || !stFv.options || !stFv.options.fields || !stFv.options.fields.state_code) { 6808 return; 6809 } 6810 stFv.options.fields.state_code.excluded = hasStates ? false : true; 6811 try { stFv.enableFieldValidators("state_code", hasStates); } catch (e) {} 6812 6813 /* p949P6dS: keep the visible "* " required marker on the State label in sync with the 6814 waiver. functions_up.php renders <span class="required">* </span> on the state_code 6815 label when AVS forces the field required; for a no-state country (Singapore, 6816 Martinique) the field is genuinely waived so the asterisk must go away, and come 6817 back when the country has selectable states again. Scoped to the state label. */ 6818 var $stReq = $("label[for='state-chained'] .required", $stForm); 6819 $stReq.css("display", hasStates ? "" : "none"); 6820 6821 /* p949P6dS: the ACTUAL blocker. The billing form carries a SECOND required layer, 6822 independent of FormValidation: the form's success.form.fv handler loops 6823 $form.find('[required]') and, for any empty one, appends <small class="required-error"> 6824 Required Field</small> + returns false, hard-blocking the submit. AVS renders the 6825 state_code <select> with the HTML5 `required` attribute, so a no-state country 6826 (empty state) stayed blocked with "Required Field" even after the FormValidation 6827 waiver above. Drop the `required` attribute (+ clear its custom error) when the 6828 country has no selectable states, and restore it when it does. Remember the server- 6829 rendered original so we never ADD required to a field AVS left optional. */ 6830 if ($stField.attr("data-bd-orig-required") === undefined) { 6831 $stField.attr("data-bd-orig-required", 6832 ($stField.prop("required") || $stField.attr("required") !== undefined) ? "1" : "0"); 6833 } 6834 var stOrigRequired = ($stField.attr("data-bd-orig-required") === "1"); 6835 6836 var $stRow = $stField.closest(".form-group,.fv-row,.row"); 6837 if (!hasStates) { 6838 try { if (typeof stFv.resetField === "function") { stFv.resetField("state_code", true); } } catch (e) {} 6839 $stRow.removeClass("has-error has-success"); 6840 $stRow.find(".help-block[data-fv-validator]").css("display", "none"); 6841 /* drop the HTML5 required gate + its "Required Field" message for no-state country */ 6842 $stField.removeAttr("required").prop("required", false); 6843 $stField.siblings(".required-error").remove(); 6844 $stRow.find(".required-error").remove(); 6845
6846 /* p949P6dS: on the Member-Dashboard billing modal the Save button is disabled by 6847 FormValidation until the whole form is valid; for a no-state country the user 6848 has no state to pick, so nothing re-enables it and Save stays stuck disabled -> 6849 "cannot save". Re-enable it directly. IMPORTANT: do NOT call stFv.validate() 6850 here â in this FormValidation build validate() on an already-valid form fires 6851 success.form.fv (a real submit), which saved the address on the country change 6852 AND consumed the one-time CSRF token, so the actual Save click then failed with 6853 "You entered invalid data. Please try to save again." disableSubmitButtons only 6854 toggles the button; no submit. Scoped to the billing modal so checkout is 6855 untouched. */ 6856 if ($stForm.closest("#billing_address_modal").length) { 6857 try { if (typeof stFv.disableSubmitButtons === "function") { stFv.disableSubmitButtons(false); } } catch (e) {} 6858 $stForm.find("input.submitter, button.submitter, [type=submit]") 6859 .removeClass("disabled").prop("disabled", false).removeAttr("disabled"); 6860 } 6861 } else if (stOrigRequired) { 6862 /* country has states again â restore the required gate AVS originally set */ 6863 $stField.attr("required", "required").prop("required", true); 6864 } 6865 } 6866 $(document).off("change.bdStateReq").on("change.bdStateReq", "#country-chained", function() { 6867 var bdCc = $(this).val(); 6868 var $bdForm = $("#state-chained").closest("form"); 6869 var bdFv = ($bdForm.length) ? ($bdForm.data("formValidation") || $bdForm.data("bootstrapValidator")) : null; 6870 if (!bdFv || !bdFv.options || !bdFv.options.fields || !bdFv.options.fields.state_code || bdCc === "") { 6871 return; 6872 } 6873 $.ajax({
6874 url: "/ajaxsearch/get-states", 6875 type: "GET", 6876 data: { "country": bdCc }, 6877 dataType: "text", 6878 success: function(bdResp) { 6879 /* count entries without regex (DB+eval mangles backslashes): split on the 6880 literal "value" key; total entries = splits - 1; >2 means placeholder + 2+ 6881 real regions == has selectable states. Text parse also survives the 6882 malformed-JSON zero-region response. */ 6883 var bdTotal = bdResp.split(`"value"`).length - 1; 6884 bdSyncStateRequired(bdTotal > 2); 6885 } 6886 }); 6887 }); 6888 /* p949P6dS: the Member Dashboard billing modal (widget 1861) pre-selects the member's 6889 SAVED country_code at document.ready without firing a change event, so the handler 6890 above never ran for it and an AVS-forced required State (functions_up.php forces 6891 field_required=1 on state_code when whmcs_avs_on / stripe_accept_intl_payments is on) 6892 stayed active for a saved no-state country â blocking the save with "Required Field" 6893 on a country that has no state to pick. Sync once for an already-selected country. 6894 The namespaced trigger fires only this handler (not select2/getStateList), and the 6895 handler no-ops when the country is empty or state_code is not a validated field, so 6896 checkout and every other chained-select page are unaffected. */ 6897 $("#country-chained").each(function() { 6898 if ($(this).val() !== "") { 6899 $(this).trigger("change.bdStateReq"); 6900 } 6901 }); 6902 function getInfinityChained(div,id) { 6903 $("#"+div).select2("data", { 6904 id: "", 6905 text: `Loading...` 6906 }); 6907 $.ajax({
6908 url : '/ajaxsearch/get-subcategory', 6909 type : "GET", 6910 data : { 6911 'parent' : id 6912 }, 6913 dataType: "json", 6914 success : function(data) { 6915 var options = ''; 6916 6917 for (var i = 0; i < data.length; i++) { 6918 options += '<option value="' + data[i].value + '">' + data[i].title + '</option>'; 6919 } 6920 if (data.length > 1) { 6921 $("#" + div).select2("enable",true); 6922 $("#" + div).html(options); 6923 if(div == 'tid' && '' != ''){ 6924 $("#" + div).select2("val", ""); 6925 $("#" + div).trigger('change'); 6926 } else if(div == 'tid' && preloaded_tid !== false){ 6927 $("#" + div).select2("val", preloaded_tid); 6928 $("#" + div).trigger('change'); 6929 }else { 6930 $("#" + div).select2("val", ""); 6931 } 6932 6933 6934 6935 6936 } else { 6937 $("#" + div).select2("data", { 6938 id: "", 6939 text: "No options available" 6940 }); 6941 } 6942 } 6943 }); 6944 } 6945 function categoryChained(div,id) { 6946 $("#" + div).select2("data", { 6947 id: "", 6948 text: `Loading...` 6949 }); 6950 if(div == "tid") { 6951 url_link = '/ajaxsearch/get-services' 6952 data_passed = {'specialty_id' : id} 6953 } else { 6954 url_link = '/ajaxsearch/category-list'; 6955 data_passed = {'parent' : id} ; 6956 } 6957 6958 var selectName = $("select[next="+div+"]").prop("name"); 6959 6960 6961 if( (selectName == "ttid" || selectName == "sid" || selectName == "tid") ){ 6962 6963 sessionStorage.setItem("select2-"+selectName+path2,id); 6964 } 6965 6966 $.ajax({
6967 url : url_link, 6968 type : "GET", 6969 data : data_passed, 6970 dataType: "json", 6971 success : function(data) { 6972 var options = ''; 6973 6974 for (var i = 0; i < data.length; i++) { 6975 options += '<option value="' + data[i].value + '">' + data[i].title + '</option>'; 6976 } 6977 6978 if (data.length > 1) { 6979 $("#" + div).select2("enable",true); 6980 $("#" + div).html(options); 6981 6982 if(div == "ttid" && preloaded_ttid !== false){ 6983 $("#" + div).select2("val", preloaded_ttid); 6984 $("#" + div).trigger('change'); 6985 }else if(div == "tid" && preloaded_tid !== false){ 6986 $("#" + div).select2("val", preloaded_tid); 6987 $("#" + div).trigger('change'); 6988 }else{ 6989 $("#" + div).select2("val", ""); 6990 } 6991 6992 6993 6994 } else { 6995 $("#" + div).select2("data", { 6996 id: "", 6997 text: "No options available" 6998 }); 6999 } 7000 } 7001 }); 7002 } 7003 function formatCountry(country) { 7004 if (!country.id && country.text.includes("+")) { 7005 let dataCountry = country.text; 7006 dataCountry = dataCountry.split('+') 7007 country.code = dataCountry[0].trim(); 7008 country.id = dataCountry[1].trim(); 7009 return country; 7010 } else if (!country.code) { 7011 return country.text; 7012 } 7013 var $country = $( 7014 '<span class="flag-icon flag-icon-' + country.code.toLowerCase() + ' flag-icon-squared"></span>' + 7015 '<span class="flag-text" style="margin-left:10px;">' + country.text + '</span>' 7016 ); 7017 return $country; 7018 } 7019 7020 let phoneCountryCode = document.querySelector("[name^='bd_phone_country_code']"); 7021 if (typeof phoneCountryCode != 'undefined' && phoneCountryCode != null && typeof isoCountries != 'undefined') { 7022 $("[name^='bd_phone_country_code']").select2({ 7023 placeholder:`Country`, 7024 data:isoCountries, 7025 searchInputPlaceholder: `Enter Country Code`, 7026 formatResult : formatCountry, 7027 dropdownAutoWidth: true, 7028 width: "resolve", 7029 }).on("select2-opening", function (e) { 7030 if (typeof e.currentTarget.attributes['data-default-country-code'] !== "undefined") { 7031 $(this).val(e.currentTarget.attributes['data-default-country-code'].value) 7032 .removeAttr("data-default-country-code") 7033 .trigger('change') 7034 .trigger('open'); 7035 } 7036 }).change(function (e) { 7037 let select2Span = $(this).attr('id'); 7038 if (e.val) { 7039 $('#'+$(this).attr('id')+'--flag').remove(); 7040 $('#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>') 7041 }else{ 7042 $('#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>') 7043 } 7044 $(this).removeAttr("data-default-country-flag"); 7045 7046 }); 7047 } 7048 $("#bd-chained").select2({ 7049 title: "Select Category", 7050 placeholder: "Select Category", 7051 allowClear: true, 7052 formatNoMatches: function () { 7053 return "No matches found"; 7054 } 7055 }).change(function () { 7056 var id = $(this).val(); 7057 $("#tid").select2("enable",false); 7058 getInfinityChained("tid",id); 7059 }); 7060 $("#category-chained").select2({ 7061 title: "Select Category", 7062 placeholder: "Select Category", 7063 allowClear: true 7064 }).change(function () { 7065 var id = $(this).val(); 7066 $("#subcategory-chained").select2("enable",false); 7067 categoryChained("subcategory-chained",id); 7068 }); 7069 7070 $(".select-category-chained").select2({ 7071 title: "Select Category", 7072 placeholder: "Select Category", 7073 allowClear: true 7074 }) 7075 $(".infinite-chained").select2({ 7076 title: "Select option from list", 7077 placeholder: "Click to select an option", 7078 allowClear: true, 7079 formatNoMatches: function () { 7080 return "No matches found"; 7081 } 7082 }).change(function () { 7083 var id = $(this).val(); 7084 var attr = $(this).attr('next'); 7085 var selectName = $(this).prop('name'); 7086 if ( selectName=='ttid' || attr =='ttid' ) { 7087 $("#" + attr).select2("enable",false); 7088 categoryChained(attr,id); 7089 sessionStorage.setItem("select2-"+selectName+path2,id); 7090 } 7091 }).on("select2-close", function () { 7092 setTimeout(function() { 7093 $('.select2-container-active').removeClass('select2-container-active'); 7094 $(':focus').blur(); 7095 }, 1); 7096 }); 7097 $("#subcategory-chained").select2(); 7098 $(".combobox").select2();
7099 $(".search-chained").select2(); 7100 7101 $("select#country-chained").select2({ 7102 title: "", 7103 placeholder: "", 7104 val: "", 7105 allowClear: true, 7106 formatNoMatches: function () { 7107 return "No matches found"; 7108 } 7109 }).change(function () { 7110 var id = $(this).val(); 7111 $("#state-chained").select2("enable",false); 7112 getStateList("state-chained",id); 7113 var state = ""; 7114 7115 if (id == "CA") { 7116 state = "Province"; 7117 7118 } else if (id == "UK") { 7119 state = "Region"; 7120 7121 } else if (id == "US" || id == "AU") { 7122 state = "State"; 7123 7124 } else { 7125 state = "Region"; 7126 } 7127 $("#state-chained").prev(".control-label").text(state); 7128 }); 7129 $("#state-chained").select2(); 7130 7131 $("#state-chained").on("select2-open", function(event) { 7132 event.preventDefault(); 7133 var id = $("#country-chained").val(); 7134 var count = $('#state-chained option').length; 7135 7136 if (id != "" && count <= 2) { 7137 $("#state-chained").select2("enable",false); 7138 getStateList("state-chained",id); 7139 var state = ""; 7140 7141 if (id == "CA") { 7142 state = "Province"; 7143 7144 } else if (id == "UK") { 7145 state = "Region"; 7146 7147 } else if (id == "US" || id == "AU") { 7148 state = "State"; 7149 7150 } else { 7151 state = "Region"; 7152 } 7153 $("#state-chained").prev(".control-label").text(state); 7154 } 7155 }); 7156 7157 $("#country-chained-2").select2({ 7158 title: "Select Country", 7159 placeholder: "(select country)", 7160 val: "", 7161 allowClear: true, 7162 formatNoMatches: function () { 7163 return "No matches found"; 7164 } 7165 }).change(function () { 7166 var id = $(this).val(); 7167 $("#state-chained-2").select2("enable",false); 7168 getStateList("state-chained-2",id); 7169 var state = ""; 7170 7171 if (id == "CA") { 7172 state = "Province"; 7173 7174 } else if (id == "UK") { 7175 state = "Region"; 7176 7177 } else if (id == "US" || id == "AU") { 7178 state = "State"; 7179 7180 } else { 7181 state = "Region"; 7182 } 7183 $("#state-chained-2").prev(".control-label").text(state); 7184 }); 7185 7186 $("#state-chained-2").select2(); 7187 $("#profession_id").select2({ 7188 placeholder: "Select From List", 7189 allowClear: true, 7190 formatNoMatches: function () { 7191 return "No matches found"; 7192 } 7193 }).change(function () { 7194 var id = $(this).val(); 7195 getSecondLevelAccount("category_id",id); 7196 }); 7197 $("#sid").select2({ 7198 title: "Select Category", 7199 placeholder: "Select Category", 7200 allowClear: true, 7201 formatNoMatches: function () { 7202 return "No matches found"; 7203 } 7204 }).change(function () { 7205 var id = $(this).val(); 7206 $("#tid").select2("enable",false); 7207 getSecondLevel("tid",id); 7208 $("#tid").select2("open"); 7209 sessionStorage.setItem("select2-sid"+path2,id); 7210 }); 7211 $("#location_value_dropdown").select2({ 7212 title: "More Options", 7213 placeholder: "More Options", 7214 allowClear: true, 7215 formatNoMatches: function () { 7216 return "No matches found"; 7217 } 7218 }); 7219 $("#tid").select2({ 7220 title: "Select Sub-category", 7221 placeholder: "Select Sub-category", 7222 allowClear: true, 7223 formatNoMatches: function () { 7224 return "No matches found"; 7225 } 7226 }); 7227 $("#location_value_dropdown").select2({ 7228 title: "More Options", 7229 placeholder: "More Options", 7230 allowClear: true 7231 }); 7232 } 7233 7234 if(preloaded_ttid !== false || preloaded_tid !== false || preloaded_sid !== false){ 7235 $(document).ready(function(){ 7236 // Skip if homepage widget already handles preload 7237 if(window._bdCategoryPreloaded) return; 7238 7239 if(preloaded_sid !== false && $("#sid").length > 0){ 7240 select2OnFormClick(); 7241 setTimeout(() => { 7242 $("#sid").select2('val', preloaded_sid); 7243 $('#sid').trigger('change'); 7244 }, 500); 7245 }else if(preloaded_tid !== false && $("#sid").length <= 0){ 7246 select2OnFormClick(); 7247 setTimeout(() => { 7248 $("#tid").select2('val', preloaded_tid);
7249 $('#tid').trigger('change'); 7250 }, 500); 7251 } 7252 }); 7253 } 7254 </script>
vendor: 2 bytes, line 7254
7254
7255<script> 7256 // Function to add aria-label to <select> elements without it, for better pagespeed accessibility score 7257 $(document).ready(function() { 7258 var ariaLabelCounter = {}; // Object to keep track of aria-label counts for uniqueness 7259 7260 // Iterate over each select element that does not have an aria-label 7261 $('select:not([aria-label])').each(function() { 7262 // Use the ID or placeholder as the base for the aria-label, stripping HTML tags 7263 var baseLabel = this.id || $(this).attr('placeholder') || 'select'; 7264 baseLabel = baseLabel.replace(/<[^>]*>/g, '').trim(); // Remove HTML tags and trim 7265 7266 // Ensure uniqueness of each aria-label 7267 ariaLabelCounter[baseLabel] = (ariaLabelCounter[baseLabel] || 0) + 1; 7268 var ariaLabel = baseLabel + '-' + ariaLabelCounter[baseLabel]; 7269 7270 // Truncate aria-label to 100 characters 7271 ariaLabel = ariaLabel.length > 100 ? ariaLabel.substring(0, 100) : ariaLabel; 7272 7273 // Set the aria-label attribute to the unique label 7274 $(this).attr('aria-label', ariaLabel); 7275 }); 7276 }); 7277</script>
vendor: 2 bytes, line 7277
7277
7278<script type="application/ld+json"> 7279{ 7280 "@context": "https://schema.org", 7281 "@graph": [ 7282 { 7283 "@type": "WebSite", 7284 "@id": "https://www.thetrainerdirectory.com/#website", 7285 "name": "The Trainer Directory", 7286 "url": "https://www.thetrainerdirectory.com/", 7287 "inLanguage": "en-US", 7288 "potentialAction": { 7289 "@type": "SearchAction", 7290 "target": "https://www.thetrainerdirectory.com/sitesearch?q={search_term_string}", 7291 "query-input": "required name=search_term_string", 7292 "name": "Search Directory: The Trainer Directory" 7293 }, 7294 "publisher": { 7295 "@id": "https://www.thetrainerdirectory.com/#organization" 7296 } 7297 }, 7298 { 7299 "@type": "Organization", 7300 "@id": "https://www.thetrainerdirectory.com/#organization", 7301 "name": "The Trainer Directory", 7302 "description": "Search the most complete trainer directory. Find trainers.", 7303 "url": "https://www.thetrainerdirectory.com/", 7304 "mainEntityOfPage": { 7305 "@type": "WebPage", 7306 "@id": "https://www.thetrainerdirectory.com/#webpage" 7307 }, 7308 "contactPoint": [ 7309 { 7310 "@type": "ContactPoint", 7311 "email": "[email protected]", 7312 "contactType": "customer support", 7313 "availableLanguage": [ 7314 "en" 7315 ], 7316 "areaServed": "GB" 7317 } 7318 ], 7319 "areaServed": { 7320 "@type": "Country", 7321 "name": "GB" 7322 }, 7323 "logo": { 7324 "@type": "ImageObject", 7325 "@id": "https://www.thetrainerdirectory.com/#logo", 7326 "url": "/images/ttd_logo.png" 7327 }, 7328 "image": { 7329 "@type": "ImageObject", 7330 "@id": "https://www.thetrainerdirectory.com/#image", 7331 "url": "/images/ttd_logo.png" 7332 }, 7333 "keywords": [ 7334 "Professional", 7335 "Trainer", 7336 "The Trainer Directory", 7337 "The Trainer Directory", 7338 "Trainer", 7339 "Professional" 7340 ] 7341 } 7342 ] 7343}</script>
7343 7344
7345<script> 7346// Bootstrap Icons fallback loader - ensures Bootstrap Icons work even if HEAD widget is customized, do not delete 7347(function() { 7348 if (!document.querySelector('link[href*="bootstrap-icons"]')) { 7349 var link = document.createElement('link'); 7350 link.rel = 'stylesheet'; 7351 link.href = 'https://www.optimizecdn.com/directory/cdn/assets/bootstrap/fonts/bootstrap-icons.min.css?v=1.13.1'; 7352 document.head.appendChild(link); 7353 } 7354})(); 7355</script>
7355 7356<style type='text/css'> .input-group.normal-autosuggest input,.input-group.sm-autosuggest input, .input-group.md-autosuggest input { 7357 border-radius: 0 8px 8px 0 !important; 7358 } 7359.normal-autosuggest .twitter-typeahead, .sm-autosuggest .twitter-typeahead, .md-autosuggest .twitter-typeahead, .large-autosuggest .twitter-typeahead { 7360 display: inline-block; 7361 height: 25px; 7362 position: relative; 7363 width: 100%; 7364} 7365.input-group.normal-autosuggest .twitter-typeahead, .input-group.sm-autosuggest .twitter-typeahead, .input-group.large-autosuggest .twitter-typeahead:not(.search_box .twitter-typeahead) { 7366 width: inherit; 7367} 7368.normal-autosuggest .twitter-typeahead .clear_content.medium{ 7369 bottom: 0px; 7370} 7371.sm-autosuggest .twitter-typeahead .clear_content.small{ 7372 bottom: -4px; 7373} 7374.md-autosuggest.input-group .twitter-typeahead .clear_content.medium { 7375 bottom: -2px; 7376} 7377.md-autosuggest .twitter-typeahead { 7378 height: 32px; 7379} 7380.md-autosuggest .input-group-addon + .input_wrapper .twitter-typeahead { 7381 height: 38px; 7382 vertical-align: top; 7383} 7384.md-autosuggest-input + .clear_content.medium { 7385 bottom: 0px; 7386} 7387.large-autosuggest .twitter-typeahead { 7388 height: 40px; 7389} 7390.normal-autosuggest .twitter-typeahead{ 7391 height: 38px; 7392} 7393.normal-autosuggest .twitter-typeahead .tt-hint, .sm-autosuggest .twitter-typeahead .tt-hint { 7394 background: #fff !important; 7395 border: 1px solid #ccc!important; 7396 border-radius: 0 8px 8px 0; 7397 box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075) inset!important; 7398 color: transparent; 7399 left: 0; 7400 padding: 4px 11px; 7401 position: absolute; 7402 top: 0; 7403 width: 100%; 7404 font-size:12px; 7405} 7406.normal-autosuggest.input-group-addon .fa, .sm-autosuggest .input-group-addon .fa, .input-group-sm .input-group-addon .fa {font-size:12px} 7407.md-autosuggest .twitter-typeahead .tt-hint { 7408 height: 100%; 7409 background: #ffffff none repeat scroll 0 0 !important; 7410 border: 1px solid #cccccc !important; 7411 border-radius: 0 8px 8px 0; 7412 box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075) inset !important; 7413 color: rgba(0, 0, 0, 0); 7414 left: 0; 7415 padding: 6px 11px; 7416 position: absolute; 7417 top: 0; 7418 width: 100%; 7419} 7420.large-autosuggest {background: #fff !important;border-radius:10px;} 7421.large-autosuggest input {width: 100%!important;box-shadow:none; border-radius: 10px;} 7422 .input-group.large-autosuggest input,.input-group.large-autosuggest .twitter-typeahead .tt-hint { 7423 border-radius: 0 10px 10px 0!important; 7424 } 7425 .large-autosuggest .twitter-typeahead .tt-hint { 7426 background: #fff !important; 7427 border: 1px solid #ccc!important; 7428 border-radius: 10px; 7429 box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075) inset!important; 7430 color: transparent; 7431 left: 0; 7432 position: absolute; 7433 top: 0; 7434 width: 100%; 7435 font-size: 18px; 7436 height: 46px; 7437 line-height: 1.33333; 7438 padding: 10px 15px; 7439} 7440.tt-dataset .empty-message { 7441 display: none !important; 7442} 7443.twitter-typeahead .tt-query {background-color:#fff!important} 7444.input-group.large-autosuggest span:first-child .tt-hint {border-radius: 0 !important;} 7445span.tt-dropdown-menu { 7446 border: 1px solid #FCFCFC; 7447 border-radius: 5px; 7448 box-shadow: 0 5px 10px rgba(0,0,0,.2); 7449 width: 100% !important; 7450} 7451.tt-is-under-cursor a.suggest-link { 7452 background: #55ACEE; 7453} 7454 7455.tt-is-under-cursor .media-heading, 7456.tt-is-under-cursor .suggest-origin, 7457.tt-is-under-cursor .location{ 7458 color:#fff!important; 7459} 7460.tt-suggestion .media .media-body .suggest-origin { 7461 color: rgba(45, 91, 137,0.9); 7462 padding: 1px 0; 7463 border-radius: 6px; 7464 font-weight: bold; 7465 line-height: 12px; 7466} 7467.tt-suggestion { 7468 background: #fff; 7469 border-bottom: 1px solid #eee; 7470 -webkit-transition: all 0.3s ease-in-out; 7471 -moz-transition: all 0.3s ease-in-out; 7472 -o-transition: all 0.3s ease-in-out; 7473 transition: all 0.3s ease-in-out; 7474} 7475body .tt-suggestions .media.br-bottom img { 7476 max-width: 45px; 7477 height: auto; 7478} 7479body .tt-suggestions .media-body span { 7480 font-size: 10px; 7481} 7482body .tt-suggestions .media-body h4 { 7483 font-size: 12px; 7484 margin: 2px 0px; 7485 text-transform: capitalize; 7486} 7487a.suggest-link { 7488 padding: 5px; 7489 display: block; 7490} 7491a.suggest-link img { 7492 border-radius: 100px; 7493 display: block; 7494 margin: 0 auto; 7495 height: 100%!important; 7496 width: 100%; 7497 object-fit: cover; 7498} 7499.left-suggest-col {
7500 display: inline-block; 7501 vertical-align: middle; 7502 width: 44px; 7503 height: 44px; 7504} 7505.right-suggest-col { 7506 display: inline-block; 7507 padding-left: 1%; 7508 text-align: left; 7509 vertical-align: middle; 7510 width: calc(100% - 1% - 50px); 7511} 7512p.media-heading { 7513 color: #333; 7514 font-size: 12px; 7515 font-weight: 600; 7516 margin-bottom: 0; 7517} 7518p.suggest-origin { 7519 font-size: 10px; 7520 color: #333; 7521 margin:0; 7522} 7523p.location { 7524 color: #333; 7525 font-size: 10px; 7526 margin: 2px 0; 7527} 7528body .tt-is-under-cursor a.suggest-link { 7529 background: #F7F7F7; 7530} 7531body .tt-is-under-cursor .media-heading, body .tt-is-under-cursor .suggest-origin, body .tt-is-under-cursor .location { 7532 color: #333!important; 7533} 7534a.suggest-link[data-heading="heading"] { 7535 pointer-events: none; 7536 cursor: default; 7537 text-decoration: none; 7538} 7539body .tt-is-under-cursor a.suggest-link[data-heading="heading"] { 7540 background: rgb(0, 45, 98); 7541} 7542/* --- all the novalue css --- */ 7543a.suggest-link .suggest-origin[data-state="novalue"] { 7544 display: none; 7545} 7546a.suggest-link .location[data-state="novalue"] { 7547 display: none; 7548} 7549a.suggest-link img[data-state="novalue"] { 7550 display: none; 7551} 7552a.suggest-link .suggest-origin[data-state="heading"] { 7553 display: none; 7554} 7555a.suggest-link .media-heading[data-heading="heading"] { 7556 color:rgb(255, 255, 255)!important; 7557 font-weight: bold; 7558 padding: 4px; 7559 font-size: 13px; 7560} 7561.left-suggest-col[data-photo="novalue"], .left-suggest-col[data-photo="undefined"] { 7562 display: none; 7563} 7564.right-suggest-col[data-photo="novalue"], .right-suggest-col[data-photo="undefined"] { 7565 width: 100%; 7566} 7567a.suggest-link[href="novalue"] { 7568 cursor: default !important; 7569 pointer-events: none; 7570} 7571a.suggest-link[data-heading="heading"] { 7572 background-color: rgb(0, 45, 98); 7573} 7574div.content-shell { 7575 overflow: inherit; 7576} 7577span.tt-dropdown-menu div { 7578 float: none; 7579} 7580.tt-menu { 7581 border-radius: 0 0 6px 6px; 7582 box-shadow: 0 0 3px rgba(0, 0, 0, 0.2); 7583 overflow: hidden; 7584 width: 100%; 7585 z-index: 150 !important; 7586} 7587.tt-menu .tt-dataset { 7588 overflow-y: auto; 7589 max-height: 200px; 7590} </style>
7590<script type="text/javascript"> 7591 7592 if (typeof decodeHtml != "function") { 7593 function decodeHtml(html) { 7594 var txt = document.createElement("textarea"); 7595 txt.innerHTML = html; 7596 return txt.value; 7597 } 7598 } 7599 function initializeTypeheadMember_search() { 7600 var member_searchEngine = new Bloodhound({ 7601 initialize: false, 7602 datumTokenizer: function (d) { 7603 return Bloodhound.tokenizers.whitespace(value); 7604 }, 7605 queryTokenizer: Bloodhound.tokenizers.whitespace, 7606 remote: { 7607 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`, 7608 wildcard: '%QUERY', 7609 filter: function (response) { 7610 7611 if (response != null) { 7612 //var response = response.slice(1); 7613 $.each( 7614 response, function (key, value) { 7615 response[key]['value'] = decodeHtml(value['value']); 7616 response[key]['comes_f'] = decodeHtml(value['comes_f']); 7617 response[key]['location'] = decodeHtml(value['location']); 7618 7619 if (response[key]['value'].indexOf('-/-') >= 0) { 7620 var splitResult = response[key]['value'].split('-/-'); 7621 response[key]['value'] = splitResult[0]; 7622 } 7623 } 7624 ); 7625 7626 } else { 7627 response = {error: "null"}; 7628 } 7629 7630 return response; 7631 } 7632 } 7633 }); 7634 var member_searchDataSrc = member_searchEngine.initialize(); 7635 7636 member_searchDataSrc 7637 .done(function () { /*console.log('Autosuggestions engine initialized.'); */ 7638 }) 7639 .fail(function () { /*console.log('err, something went wrong while initializing autosuggestions engine:(');*/ 7640 }) 7641 7642 $('.member_search').typeahead({ 7643 minLength: 2, 7644 highlight: true, 7645 hint: false }, 7646 { 7647 display: 'value', 7648 source: member_searchEngine.ttAdapter(), 7649 limit: 10, 7650 templates: { 7651 empty: [ 7652 '<div class="empty-message">', 7653 'Result not found', 7654 '</div>' 7655 ].join(" "), 7656 notFound: [ 7657 '<div class="notFound-message">', 7658 'Result not found', 7659 '</div>' 7660 ].join(" "), 7661 suggestion: function (data) { 7662 7663 if (data == "null") { 7664 strTemplate = '<div class="empty-message">Result not found</div>'; 7665 7666 } else { 7667 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> '; 7668 7669 if ((data.link == undefined) || (data.link == "") || (data.link == "novalue")) { 7670 strTemplate = strTemplate.replace(/href=".*?"/, "href='#'"); 7671 } 7672 7673 if ((data.photo == undefined) || (data.photo == "") || (data.photo == "novalue")) { 7674 strTemplate = strTemplate.replace(/<img src=".*?>/, ""); 7675 } 7676 } 7677 7678 return strTemplate; 7679 } 7680 }, 7681 }).on('typeahead:selected', function (obj, datum) { 7682 /* 7683 console.log(obj); 7684 console.log(datum); 7685 */ 7686 }); 7687 7688 $('.member_search').each(function () {
7689 var inputWidth = $(this).outerWidth(); 7690 $(this).siblings('.tt-dropdown-menu').css('width', inputWidth + 'px'); 7691 }); 7692 } 7693 </script>
7693 7694
7694<script> 7695 let typeheadElement = '.member_search'; 7696 let TypeheadNameListFunction = 'initializeTypeheadMember_search'; 7697 let typeheadFormElement = undefined; 7698 window.addEventListener('load', () => { 7699 if(typeheadElement.length > 1) { 7700 typeheadFormElement = document.querySelectorAll(typeheadElement); 7701 } 7702 if (typeof typeheadFormElement != "undefined") { 7703 for (let i = 0; i < typeheadFormElement.length; i++) { 7704 let closestForm = typeheadFormElement[i].closest('form'); 7705 if (typeof closestForm != "undefined" && closestForm != null) { 7706 closestForm.addEventListener('focus', typeheadFormClick, false); 7707 } 7708 typeheadFormElement[i].addEventListener('focus', typeheadFormClick, false); 7709 } 7710 } 7711 }); 7712 function initializeTypehead(){ 7713 let splitFunctionNames= TypeheadNameListFunction.split(','); 7714 for ( let funcName of splitFunctionNames) 7715 if (typeof funcName != 'function') { 7716 window[funcName](); // execute the function 7717 7718 } 7719 } 7720 function typeheadFormClick(event) { 7721 7722 let head = document.getElementsByTagName('head')[0]; 7723 let script = document.createElement('script'); 7724 let elementClicked = event.target; 7725 script.type = 'text/javascript'; 7726 script.src = "https://cdnjs.cloudflare.com/ajax/libs/corejs-typeahead/0.11.1/typeahead.bundle.min.js"; 7727 script.onload = function () { 7728 initializeTypehead(); 7729 elementClicked.focus(); 7730 }; 7731 head.appendChild(script); 7732 if (typeof typeheadFormElement != "undefined") { 7733 for (let i = 0; i < typeheadFormElement.length; i++) { 7734 let closestForm = typeheadFormElement[i].closest('form'); 7735 if (typeof closestForm != "undefined" && closestForm != null) { 7736 closestForm.removeEventListener('focus', typeheadFormClick, false); 7737 } 7738 typeheadFormElement[i].removeEventListener('focus', typeheadFormClick, false) 7739 } 7740 } 7741 } 7742 7743 7744 </script>
7744 7745 7746
7746<script> 7747 window.addEventListener('load', () => { 7748 let embedlyClass = document.querySelector('.fr-embedly'); 7749 if (typeof embedlyClass != "undefined" && embedlyClass != null) { 7750 let embedlyURI = "https://www.optimizecdn.com/directory/cdn/assets/bootstrap/js/embedly_widget.min.js"; 7751 let head = document.getElementsByTagName("head")[0]; 7752 let script = document.createElement('script'); 7753 script.type = 'text/javascript'; 7754 script.src = embedlyURI; 7755 script.async = true; 7756 script.onload = function() { 7757 setTimeout(function() { 7758 if (typeof embedly !== 'undefined' && embedly.card) { 7759 document.querySelectorAll('.embedly-card').forEach(function(card) { 7760 embedly.card(card); 7761 }); 7762 } 7763 }, 500); 7764 }; 7765 head.appendChild(script); 7766 } 7767 }); 7768</script>
7768<script type="text/javascript" src="https://www.optimizecdn.com/directory/cdn/assets/bootstrap/jquery.lazy/1.7.9/jquery.lazy.min.js"></script>
7768<script> 7769 $(function () { 7770 $(".lazyloader").Lazy({ 7771 afterLoad: function(element) { 7772 $(".gridView.activeView").click(); 7773 } 7774 }); 7775 7776 }); 7777 $("button[class*='slick'],button[id*='slick']").click(function () { 7778 $(this).parents(".row").find(".lazyloader").lazy({ 7779 bind: "event", 7780 delay: 0 7781 }); 7782 }); 7783 $("[class*='slick'],[id*='slick']").on("swipe",function(){ 7784 $(this).parents(".row").find(".lazyloader").lazy({ 7785 bind: "event", 7786 delay: 0 7787 }); 7788 }); 7789 </script>
7789<script defer src="https://www.optimizecdn.com/directory/cdn/assets/bootstrap/js/websiteScripts.min.js?v=8.0.0"></script>
7789 7790 </body> 7791 </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.