1<!DOCTYPE html> 2<html lang="en" ng-app="dpiApp"> 3 4<head> 5 6 7 8 <meta charset="utf-8"> 9<meta name="viewport" content="width=device-width, initial-scale=1.0"> 10 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 11 <meta name="google-site-verification" 12 content="" /> 13 <meta name="viewport" content="width=device-width, initial-scale=1"> 14 <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> 15 <title> 16 Vivian Lehman You Have Realty | Search 17 </title> 18 19 20 21 22 23<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css" integrity="sha512-pap0P6p6z+zDlZ7+2Mxd6c2/RbT+pkkHp/0VJ6cZq1a5v3xYxXQkYTZKghxFN3XfPt1nLkD+q61V+0rJ0T6Uzg==" crossorigin="anonymous" referrerpolicy="no-referrer" /> 24 25 26 27 28 <link rel="icon" type="image/png" href="https://www.youhaverealty.com/themes/6898/images/fav.jpg" 29 sizes="24x24">
30<script src="https://kit.fontawesome.com/0372972d6b.js" crossorigin="anonymous"></script>
30 31 <meta name="description" 32 content="Now itâs easy to search the MLS for active Properties for Sale, for Rent, and view New Developments with floor plans. All active listings with photos and details. 33 - You Have Realty" /> 34 <meta property="og:title" 35 content="Vivian Lehman You Have Realty | Search" /> 36 <meta property="og:description" 37 content="Now itâs easy to search the MLS for active Properties for Sale, for Rent, and view New Developments with floor plans. All active listings with photos and details. 38 39Now itâs easy to search the MLS for active Properties for Sale, for Rent, and view New Developments with floor plans. All active listings with photos and details. 40" /> 41 <meta property="og:type" content="website" /> 42
43<script src="https://kit.fontawesome.com/0372972d6b.js" crossorigin="anonymous"></script>
43 44<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/font/bootstrap-icons.css"> 45 46 <meta property="og:image" 47 content="https://www.youhaverealty.com/uploads/default_template/medium/default_share.jpg" /> 48 <meta property="og:url" content="" /> 49 <meta itemprop="description" 50 content="Now itâs easy to search the MLS for active Properties for Sale, for Rent, and view New Developments with floor plans. All active listings with photos and details. 51 52Now itâs easy to search the MLS for active Properties for Sale, for Rent, and view New Developments with floor plans. All active listings with photos and details. 53"> 54 <!-- Bootstrap --> 55 <link href="https://www.youhaverealty.com/themes/public-common-files/bootstrap/css/bootstrap.min.css" rel="stylesheet"> 56 <link rel="stylesheet" type="text/css" 57 href="https://www.youhaverealty.com/themes/6898/css/animate.min.css" /> 58 <link rel="stylesheet" type="text/css" 59 href="https://www.youhaverealty.com/themes/6898/css/overlay.css" /> 60 <link rel="stylesheet" type="text/css" 61 href="https://www.youhaverealty.com/themes/6898/css/swiper-bundle.min.css" /> 62 <link rel="stylesheet" type="text/css" 63 href="https://www.youhaverealty.com/themes/6898/css/lightslider.min.css" /> 64 <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/bootstrap-utilities.css"> 65 <!-- Custom CSS --> 66 <link rel="stylesheet" type="text/css" 67 href="https://www.youhaverealty.com/themes/6898/css/jquery-ui-1.12.1.css" /> 68 <link rel="stylesheet" type="text/css" 69 href="https://www.youhaverealty.com/themes/6898/css/chosen-1.4.2.css" /> 70 <link rel="stylesheet" type="text/css" 71 href="https://www.youhaverealty.com/themes/6898/css/owl.carousel.min.css" /> 72 <link rel="stylesheet" type="text/css" 73 href="https://www.youhaverealty.com/themes/6898/css/owl.theme.default.min.css" /> 74 75 76 <link href="https://unpkg.com/[email protected]/dist/aos.css" rel="stylesheet"> 77
77<script src="https://kit.fontawesome.com/0372972d6b.js" crossorigin="anonymous"></script>
77 78
78<script src="https://www.youhaverealty.com/themes/public-common-files/js/main.js"></script>
78 79
79<script src="https://www.youhaverealty.com/themes/public-common-files/js/modernizr.js"></script>
79 80
80<script src="https://unpkg.com/[email protected]/dist/aos.js"></script>
80 81 82 <link href="https://www.youhaverealty.com/themes/6898/css/jquery.mCustomScrollbar.css" 83 rel="stylesheet"> 84 <link rel='stylesheet' href='https://www.youhaverealty.com/themes/6898/css/loading-bar.min.css' 85 type='text/css' media='all' /> 86 <!-- menu extra items --> 87 <link href="https://www.youhaverealty.com/themes/6898/css/tutorial.css" rel="stylesheet"> 88 <link href="https://www.youhaverealty.com/themes/6898/css/style.css?v=1775718994" rel="stylesheet">
89<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyAfUt0e88sbSCGqblsMOhPdYarM1doX254&libraries=drawing&callback=Function.prototype&v=3.64"></script>
89<link href="https://www.youhaverealty.com/themes/6898/css/search-page-style.css?v=1775718994" rel="stylesheet"> <link href="https://www.youhaverealty.com/themes/6898/css/dev.css" rel="stylesheet"> 90 <link href="https://www.youhaverealty.com/themes/6898/css/responsive.css" rel="stylesheet"> 91<link href="https://www.youhaverealty.com/themes/6898/css/aistyle.css?v=1709649869" rel="stylesheet"><link href="https://unpkg.com/[email protected]/dist/aos.css" rel="stylesheet"> 92 93
93<script src="https://www.youhaverealty.com/themes/public-common-files/js/modernizr.js"></script>
vendor: 1 bytes, line 93
93
94<script src="https://unpkg.com/[email protected]/dist/aos.js"></script>
94 95 96 <style> [ng-cloak], [ng\:cloak], [data-ng-cloak], [x-ng-cloak], .ng-cloak { display: none !important; }</style> 97
97<script> 98 var base_url = 'https://www.youhaverealty.com'; 99 var current_theme = '6898'; 100var html_version = "1791387288"; 101 var mls_ids = "[1,4]"; var uri_prefix = '/'; 102 var user_id = '6898'; 103 var theme_image_url = '/../dpi_beta/uploads/'; 104 var ssr_page = ''; 105 </script>
105 106 <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> 107 <!-- WARNING: Respond.js doesn't work if you view the page via file:// --> 108 <!--[if lt IE 9]> 109
109<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
109 110
110<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
110 111 <![endif]--> 112 <base href="https://www.youhaverealty.com/"> 113 <!-- $uri_prefix made in Admin\Masters\ThemePreviewController --> 114
114<script> 115 (function (i, s, o, g, r, a, m) { 116 i['GoogleAnalyticsObject'] = r; 117 i[r] = i[r] || function () { 118 (i[r].q = i[r].q || []).push(arguments) 119 }, i[r].l = 1 * new Date(); 120 a = s.createElement(o), 121 m = s.getElementsByTagName(o)[0]; 122 a.async = 1; 123 a.src = g; 124 m.parentNode.insertBefore(a, m) 125 })(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga'); 126 </script>
126 127 128<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/font/bootstrap-icons.css">
129<script src="https://use.fontawesome.com/8ef1806ee0.js"></script>
vendor: 1 bytes, line 129
129
130<script> 131 window.addEventListener('load', function() { 132 console.log('Checking URL parameters for auth token...'); 133 134 // Use URLSearchParams to extract query parameters directly 135 const urlParams = new URLSearchParams(window.location.search); 136 137 const token = urlParams.get('auth_token'); 138 const userInfo = urlParams.get('usr_info'); 139 // Edit params 140 const saveSearchEditing = urlParams.get('save_search_editing'); 141 const saveSearchId = urlParams.get('save_search_id'); 142 const polygonLatLongForSavedSearch = urlParams.get('polygon_lat_long_for_saved_search'); 143 const ngStorageSearchParams = urlParams.get('ngStorage-search_params'); 144 const hitSavedSearch = urlParams.get('hit_saved_search'); 145 146 console.log('Token from URL:', token); 147 148 if (token) { 149 console.log('will run after 3sec'); 150 151 // setTimeout(() => { 152 console.log('Storing auth token and user info in localStorage...'); 153 localStorage.setItem('access_token', token); 154 if (userInfo) localStorage.setItem('usr_info', userInfo); 155 156 // Clean URL 157 const cleanUrl = window.location.pathname + window.location.hash; 158 window.history.replaceState({}, document.title, cleanUrl); 159 localStorage.setItem('save_search_editing', saveSearchEditing); 160 localStorage.setItem('save_search_id', saveSearchId); 161 localStorage.setItem('polygon_lat_long_for_saved_search', polygonLatLongForSavedSearch); 162 console.log('typeof localStorage.getItem(ngStorage-search_params)- ', typeof localStorage.getItem('ngStorage-search_params')); 163 console.log('typeof localStorage.getItem(ngStorage-search_params) !== undefined ', typeof localStorage.getItem('ngStorage-search_params') !== 'undefined'); 164 165 console.log('localStorage.getItem(ngStorage-search_params)', localStorage.getItem('ngStorage-search_params')); 166 167 console.log('ngStorageSearchParams -', ngStorageSearchParams); 168 169 if (typeof localStorage.getItem('ngStorage-search_params') !== 'undefined') { 170 console.log('ngstorage search setting'); 171 172 localStorage.setItem('ngStorage-search_params', ngStorageSearchParams); 173 localStorage.setItem('hit_saved_search', hitSavedSearch); 174 console.log('localStorage.getItem(ngStorage-search_params)222', localStorage.getItem('ngStorage-search_params')); 175 } 176 if (angular) { 177 console.log('Setting in to AngularJS'); 178 angular.element(document).ready(function () { 179 var scope = angular.element(document.querySelector('[ng-app]')).scope(); 180 scope.$apply(function() { 181 scope.is_front_logged = 1; // Update the variable in AngularJS scope 182 }); 183 if (ngStorageSearchParams) { 184 console.log('Setting ngStorage.search_params...'); 185 var $localStorage = angular.element(document.querySelector('[ng-app]')).injector().get('$localStorage'); 186 $localStorage.search_params = ngStorageSearchParams; 187 } 188 }); 189 } else { 190 console.log('AngularJS not found, cannot update scope variable.'); 191 } 192 193 194 // }, 10000); 195 } 196 }); 197 198 function updateCrmLink(el) { 199 var encodedId = encodeURIComponent( 200 btoa(unescape(encodeURIComponent(user_id))) 201 ); 202 203 el.href = 'https://crm.dpirealtywebsites.com/login?member_id=' + encodedId; 204 } 205 206</script>
206 207 208 <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/flatpickr/dist/flatpickr.min.css"/> 209
209<script src="https://cdn.jsdelivr.net/npm/flatpickr"></script>
209 210 </head></head> 211 212<body ng-controller='indexcontroller' ng-cloak ng-show="show_body"> 213 <div id="page"> 214 <div id="fb-root"></div> 215 <!--
215<script async defer crossorigin="anonymous" src="https://connect.facebook.net/en_US/sdk.js#xfbml=1&version=v3.3&appId=295624401368296&autoLogAppEvents=1"></script>
215--> 216
216<script async defer crossorigin="anonymous" src="https://connect.facebook.net/en_GB/sdk.js?version=v10.0"> 217 </script>
217 218 <!-- Dynamic Header Start --> 219 220 221<header id="header" class="header d-flex align-items-center light-background"> 222 223 224 <div class="container-fluid position-relative d-flex align-items-center justify-content-between" style="width: 100%;"> 225 226 <a href="https://www.youhaverealty.com/" class="logo d-flex align-items-center me-auto me-xl-0"> 227 <!-- Uncomment the line below if you also wish to use an image logo --> 228 <img src="https://www.youhaverealty.com/themes/6898/images/vi-Logo.png" alt=""> 229 230 </a> 231 232 233 234 235 <nav id="navmenu" class="navmenu"> 236 <ul> 237 238 239 240 241 242 243 244 <li data-is-active="active"><a href="https://www.youhaverealty.com/">Home</a></li> 245 246 247 248 249 250 251 252 253 <li data-is-active="active"><a href="https://www.youhaverealty.com/9/about/9">About</a></li> 254 255 <li data-is-active="active"><a href="https://www.youhaverealty.com/15/our_team/15">Our team</a></li> 256 257 <li class="dropdown"> 258 <a href="#"><span>Search</span> <i class="fa fa-chevron-down toggle-dropdown" style="font-size:6px;margin-top: 2 px;"></i></a> 259 <ul> 260 261 <li><a href="https://www.youhaverealty.com/for_sale">For Sale</a></li> 262 <li><a href="https://www.youhaverealty.com/for_rent">For Rent</a></li> 263 264 265 266 267 <li><a href="https://www.youhaverealty.com/11/search/11">Property Search</a></li> 268 269 270 </ul> 271 </li> 272 <li><a href="https://www.youhaverealty.com/our_listings">Featured Listings</a></li> 273 274 275 276 <li><a href="https://www.youhaverealty.com/existing_developments">Developments</a></li> 277 278 279 280 <li class="dropdown"> 281 <a href="#"><span>Resources</span> <i class="fa fa-chevron-down toggle-dropdown" style="font-size:6px;margin-top: 2px;"></i></a> 282 <ul> 283 284 285<li><a href="https://www.youhaverealty.com/195/free_home_evaluation/278">Free Home Evaluation</a></li> 286 287<li><a href="https://www.youhaverealty.com/dream-home-finder">Dream Home Finder</a></li> 288 289<li><a href="https://www.youhaverealty.com/median-home-values"> AI Median Home Values</a></li> 290 291<li><a href="https://www.youhaverealty.com/mortage-calculator">Mortgage Calculator</a></li> 292 293 294 </ul> 295 </li> 296 297 298 <li><a href="https://www.youhaverealty.com/blog">Blog</a></li> 299 300 <li><a href="https://www.youhaverealty.com/17/contact/17">Contact</a></li> 301 <li><a href="tel:{{agentDetails.offc_phone}}"> {{agentDetails.offc_phone}}</a> </li> 302 303 </ul> 304 <i class="mobile-nav-toggle d-xl-none fa fa-bars" style="font-size: 20px;margin-left: 11px;margin-right: -5px;"></i> 305 </nav> 306 307 308 309 </div> 310 </header> 311 312 313 314 315 316 317 318 319 <!--/.site-header --> 320 <!-- Dynamic Header End --> 321 <!-- This is the place where the dynamic html will be placed start --> 322 <div ng-if="is_maintain==1" class="text-center"> 323 <img class="img-responsive" ng-src="https://www.youhaverealty.com/backend/images/underconstruction.png" 324 style="display: inline-block;"> 325 <h4>{{status_msg}}</h4> 326 </div> 327 <ng-view ng-if="is_maintain==0" autoscroll="true"> 328 </ng-view> 329 <!-- This is the place where the dynamic html will be placed end --> 330 331<style> 332.modern-footer { 333background: radial-gradient(#14629a, #042034); 334 color: #ffffff; 335 padding: 60px 0 0 0; 336 font-size: 15px; 337} 338 339.modern-footer .footer-logo img { 340 max-width: 220px; 341 width: 100%; 342 height: auto; 343 display: block; 344 margin-bottom: 20px; 345} 346 347.modern-footer .footer-text { 348 color: rgba(255,255,255,0.75); 349 line-height: 26px; 350 margin-bottom: 25px; 351} 352 353.modern-footer .footer-title { 354 font-size: 18px; 355 font-weight: 700; 356 color: #ffffff; 357 margin-bottom: 20px; 358 text-transform: uppercase; 359 letter-spacing: 1px; 360} 361 362.modern-footer .footer-contact-list, 363.modern-footer .footer-links { 364 list-style: none; 365 padding: 0; 366 margin: 0; 367} 368 369.modern-footer .footer-contact-list li, 370.modern-footer .footer-links li { 371 margin-bottom: 12px; 372 color: rgba(255,255,255,0.82); 373 line-height: 24px; 374} 375 376.modern-footer .footer-links a, 377.modern-footer .footer-contact-list a, 378.modern-footer .footer-bottom a { 379 color: #ffffff; 380 text-decoration: none; 381 transition: all 0.3s ease; 382} 383 384.modern-footer .footer-links a:hover, 385.modern-footer .footer-contact-list a:hover, 386.modern-footer .footer-bottom a:hover {
387 color: #c9a96a; 388 text-decoration: none; 389} 390 391.modern-footer .social-icons { 392 list-style: none; 393 padding: 0; 394 margin: 0; 395 display: flex; 396 flex-wrap: wrap; 397} 398 399.modern-footer .social-icons li { 400 margin-right: 10px; 401 margin-bottom: 10px; 402} 403 404.modern-footer .social-icons a { 405 width: 42px; 406 height: 42px; 407 border: 1px solid rgba(255,255,255,0.18); 408 border-radius: 50%; 409 display: flex; 410 align-items: center; 411 justify-content: center; 412 background: rgba(255,255,255,0.04); 413 transition: all 0.3s ease; 414} 415 416.modern-footer .social-icons a:hover { 417 background: #c9a96a; 418 border-color: #c9a96a; 419 transform: translateY(-2px); 420} 421 422.modern-footer .social-icons svg { 423 width: 18px; 424 height: 18px; 425 fill: #ffffff; 426} 427 428.modern-footer .contact-name { 429 font-size: 22px; 430 font-weight: 700; 431 color: #ffffff; 432 margin-bottom: 10px; 433 line-height: 30px; 434} 435 436.modern-footer .footer-divider { 437 border-top: 1px solid rgba(255,255,255,0.10); 438 margin-top: 35px; 439} 440 441.modern-footer .footer-bottom { 442 padding: 20px 0; 443 font-size: 13px; 444 color: rgba(255,255,255,0.70); 445} 446 447.modern-footer .footer-bottom-left { 448 display: flex; 449 align-items: flex-start; 450} 451 452.modern-footer .footer-bottom-left img { 453 max-height: 52px; 454 width: auto; 455 margin-right: 12px; 456 margin-top: 2px; 457} 458 459.modern-footer .footer-bottom p { 460 margin-bottom: 0; 461 line-height: 22px; 462} 463 464.modern-footer .powered-by { 465 text-align: right; 466} 467 468.modern-footer .icon-inline { 469 width: 18px; 470 display: inline-block; 471 text-align: center; 472 margin-right: 8px; 473} 474 475@media (max-width: 991px) { 476 .modern-footer { 477 padding-top: 45px; 478 } 479 480 .modern-footer .footer-col { 481 margin-bottom: 35px; 482 } 483 484 .modern-footer .powered-by { 485 text-align: left; 486 margin-top: 15px; 487 } 488 489 .modern-footer .footer-bottom-left { 490 margin-bottom: 15px; 491 } 492} 493</style> 494 495<footer class="modern-footer"> 496 <div class="container"> 497 <div class="row"> 498 499 <!-- Column 1 --> 500 <div class="col-lg-4 col-md-6 footer-col"> 501 <div class="footer-logo"> 502 <img src="https://www.youhaverealty.com/themes/6898/images/vi-Logo.png" alt="Logo"> 503 </div> 504 505 <p class="footer-text"> 506 Real estate guidance, local expertise, and personalized service to help you buy, sell, or invest with confidence. 507 </p> 508 509 <ul class="social-icons"> 510 <li ng-if="agentDetails.fb_url!=''"> 511 <a href="{{ agentDetails.fb_url | httpCheck }}" target="_blank" aria-label="Facebook"> 512 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><path d="M279.14 288l14.22-92.66h-88.91v-60.13c0-25.35 12.42-50.06 52.24-50.06H297V6.26S260.43 0 225.36 0c-73.22 0-121.08 44.38-121.08 124.72v70.62H22.89V288h81.39v224h100.17V288z"/></svg> 513 </a> 514 </li> 515 516 <li ng-if="agentDetails.twitter_url!=''"> 517 <a href="{{ agentDetails.twitter_url | httpCheck }}" target="_blank" aria-label="X"> 518 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M389.2 48h70.6L305.6 224.2 487 464H345L233.7 318.6 106.5 464H35.8L200.7 275.5 26.8 48H172.4L272.9 180.9 389.2 48z"/></svg> 519 </a> 520 </li> 521 522 <li ng-if="agentDetails.linkedin_url!=''"> 523 <a href="{{ agentDetails.linkedin_url | httpCheck }}" target="_blank" aria-label="LinkedIn"> 524 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M100.28 448H7.4V148.9h92.88zM53.79 108.1C24.09 108.1 0 83.5 0 53.8a53.79 53.79 0 0 1 107.58 0c0 29.7-24.1 54.3-53.79 54.3zM447.9 448h-92.68V302.4c0-34.7-.7-79.2-48.29-79.2-48.3 0-55.7 37.7-55.7 76.7V448h-92.78V148.9h89.08v40.8h1.3c12.4-23.5 42.7-48.3 87.88-48.3 94 0 111.28 61.9 111.28 142.3V448z"/></svg> 525 </a> 526 </li> 527 528 <li ng-if="agentDetails.instagram_url!=''"> 529 <a href="{{ agentDetails.instagram_url | httpCheck }}" target="_blank" aria-label="Instagram"> 530 <i class="bi bi-instagram"></i> 531 </a> 532</li> 533 534<li ng-if="agentDetails.youtube_url!=''"> 535 <a href="{{ agentDetails.youtube_url | httpCheck }}" target="_blank" aria-label="YouTube"> 536 <i class="bi bi-youtube"></i> 537 </a> 538</li> 539 540 <li ng-if="agentDetails.google_url!=''"> 541 <a href="{{ agentDetails.google_url | httpCheck }}" target="_blank" aria-label="Google"> 542 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 488 512"><path d="M488 261.8C488 403.3 391.1 504 248 504 110.8 504 0 393.2 0 256S110.8 8 248 8c66.8 0 123 24.5 166.3 64.9l-67.5 64.9C258.5 52.6 94.3 116.6 94.3 256c0 86.5 69.1 156.6 153.7 156.6 98.2 0 135-70.4 140.8-106.9H248v-85.3h236.1c2.3 12.7 3.9 24.9 3.9 41.4z"/></svg> 543 </a> 544 </li> 545 </ul> 546 </div> 547 548 <!-- Column 2 --> 549 <div class="col-lg-4 col-md-6 footer-col"> 550 <h5 class="footer-title">Contact</h5> 551 552 <div class="contact-name"> 553 {{agentDetails.first_name+''+((agentDetails.middle_name_display==1)?' '+agentDetails.middle_name:'')+' '+agentDetails.last_name}} 554 </div> 555 556 <ul class="footer-contact-list"> 557 <li ng-if="agentDetails.account_type=='individual'">{{agentDetails.title}}</li> 558 <li>{{agentDetails.company}}</li> 559 <li> 560 {{ agentDetails.address1 ? agentDetails.address1 : '' }}{{ agentDetails.address2 ? ', ' + agentDetails.address2 : '' }}<br> 561 {{ agentDetails.city_name ? agentDetails.city_name : '' }}{{ agentDetails.state_code ? ', ' + agentDetails.state_code : '' }}{{ agentDetails.zip ? ', ' + agentDetails.zip : '' }} 562 </li> 563 <li>
564 <span class="icon-inline"><i class="fa fa-phone"></i></span> 565 <a href="tel:{{ agentDetails.offc_phone }}">{{ agentDetails.offc_phone }}</a> 566 </li> 567 <li> 568 <span class="icon-inline"><i class="fa fa-envelope"></i></span> 569 <a href="mailto:{{ agentDetails.account_email }}">{{ agentDetails.account_email }}</a> 570 </li> 571 </ul> 572 </div> 573 574 <!-- Column 3 --> 575 <div class="col-lg-4 col-md-12 footer-col"> 576 <h5 class="footer-title">Quick Links</h5> 577 578 <ul class="footer-links"> 579 <li> 580 <a href="https://www.youhaverealty.com/107/privacy_policy/766">Privacy Policy</a> 581 </li> 582 <li> 583 <a href="#" onclick="updateCrmLink(this);" target="_blank">Agent Login</a> 584 </li> 585 <li ng-hide="is_front_logged!=0"> 586 <a href="javascript:void(0)" ng-click="showClientLoginPopup()">Guest Login</a> 587 </li> 588 <li ng-show="is_front_logged!=0"> 589 <a href="javascript:void(0)" ng-click="logout()">Logout</a> 590 </li> 591 </ul> 592 </div> 593 594 </div> 595 596 <div class="footer-divider"></div> 597 598 <div class="row footer-bottom"> 599 <div class="col-lg-8"> 600 <div class="footer-bottom-left"> 601 <img src="https://www.youhaverealty.com/themes/6898/images/whiteR.png" alt="Equal Housing Logo"> 602 <p> 603 ADA Compliance: In concurrence with the National Association of Realtors guidelines, 604 Vivian Lehman is committed to providing an accessible website. If you have 605 difficulty accessing content, difficulty viewing a file on the website, or notice any 606 accessibility problems, please contact me at 407-733-4700 to specify the nature 607 of the issue and any assistive technology you use. 608 </p> 609 </div> 610 </div> 611 612 <div class="col-lg-4 powered-by"> 613 <p> 614 Powered by 615 <a href="http://dpishowcase.com/" target="_blank">DPI Realty Websites</a><br> 616 © 2026 DPI Realty Websites. All Rights Reserved. 617 </p> 618 </div> 619 </div> 620 </div> 621</footer> 622 623 <!-- Dyanamic Footer For Preview Page End--> 624 </div> 625 <!--/#page--> 626 <a href="#" data-toggle="modal" data-target="#myModal"> <img src="https://www.youhaverealty.com/themes/6898/images/ADA.png" alt="Floating Icon" class="floating-left"></a> 627 628 629<style> 630 631 .floating-left { 632 position: fixed; 633 bottom: 20px; /* distance from bottom */ 634 left: 20px; /* distance from left */ 635 width: 50px; /* adjust size */ 636 height: auto; 637 z-index: 9999; /* keep it above other content */ 638 cursor: pointer; 639 } 640 641 /* Optional: add hover effect */ 642 .floating-left:hover { 643 opacity: 0.8; 644 transform: scale(1.05); 645 transition: all 0.2s ease-in-out; 646 } 647</style> 648 649 650 651 652 653 654 655 <!-- start ada modal --> 656 <div class="modal fade" id="myModal" role="dialog"> 657 <div class="modal-dialog"> 658 <div class="modal-content"> 659 <div class="modal-header"> 660 <button type="button" class="close" data-dismiss="modal">×</button> 661 <h4 class="modal-title">Accessibility Widget</h4> 662 </div> 663 <div class="modal-body"> 664 <table class="table table-bordered"> 665 <thead> 666 </thead> 667 <tbody> 668 <tr> 669 <td> 670 <button id="bigtext" type="button" class="btn btn-primary" onclick="bigSize()"> 671 Bigger Text 672 </button> 673 <div id="progress"></div> 674 </td> 675 <td> 676 <button id="stext" type="button" class="btn btn-primary" onclick="speechtext()"> 677 Speechd Text 678 </button> 679 </td> 680 </tr> 681 </tbody> 682 </table> 683 </div> 684 </div> 685 </div> 686 </div> 687 <!-- end ada modal --> 688 689 690 691<!-- Agent Floating Icon --> 692<div class="agent-icon" id="agentIcon"> 693 <img src="https://www.youhaverealty.com/themes/6898/images/pop999.png" alt="Agent"> 694</div> 695 696<!-- Agent Popup Box --> 697<div class="agent-popup" id="agentPopup"> 698 <span class="close" id="closePopup">×</span> 699 <div class="text-center"> 700 <img src="https://www.youhaverealty.com/themes/6898/images/pop999.png" class="agent-photo" alt="Realtor"> 701 <h3 class="font-weight-bold mb-1">{{ agentDetails.first_name + '' + ((agentDetails.middle_name_display == 1) ? ' ' + agentDetails.middle_name : '') + ' ' + agentDetails.last_name }}</h3> 702 <p class="small text-muted">I believe real estate is about more than a transactionâitâs about your legacy. I would love to hear your vision for the future. Letâs connect below.</p> 703 <a href="tel:{{ agentDetails.offc_phone }}" class="btn btn-outline-primary btn-sm">ð Call or Text</a> 704 <a href="mailto:{{ agentDetails.account_email }}" class="btn btn-primary btn-sm">ð§ Email </a> 705 </div> 706</div> 707 708 709 710 711 712 <!-- Bower js --> 713
713<script src="https://www.youhaverealty.com/themes/public-common-files/bower_components/jquery/dist/jquery.min.js"></script>
713 714
714<script src="https://www.youhaverealty.com/themes/public-common-files/bower_components/angular/angular.min.js"></script>
vendor: 1 bytes, line 714
714
715<script src="https://www.youhaverealty.com/themes/public-common-files/js/angular-ui-router.min.js"></script>
715
715<script src="https://www.youhaverealty.com/themes/public-common-files/bower_components/bootstrap/dist/js/bootstrap.min.js"> 716</script>
716 717
717<script 718 src="https://www.youhaverealty.com/themes/public-common-files/bower_components/angular-animate/angular-animate.min.js"> 719</script>
719 720
720<script 721 src="https://www.youhaverealty.com/themes/public-common-files/bower_components/angular-cookies/angular-cookies.min.js"> 722</script>
722 723
723<script 724 src="https://www.youhaverealty.com/themes/public-common-files/bower_components/angular-resource/angular-resource.min.js"> 725</script>
725 726
726<script src="https://www.youhaverealty.com/themes/public-common-files/bower_components/angular-route/angular-route.min.js"> 727</script>
727 728
728<script 729 src="https://www.youhaverealty.com/themes/public-common-files/bower_components/angular-sanitize/angular-sanitize.min.js"> 730</script>
730 731
731<script src="https://www.youhaverealty.com/themes/public-common-files/bower_components/angular-touch/angular-touch.min.js"> 732</script>
732 733
733<script 734 src="https://www.youhaverealty.com/themes/public-common-files/bower_components/angular-update-meta/dist/update-meta.min.js"> 735</script>
735 736
736<script 737 src="https://www.youhaverealty.com/themes/public-common-files/bower_components/marker_cluster/src/markerclusterer.js"> 738</script>
738 739
739<script src="https://www.youhaverealty.com/themes/public-common-files/bower_components/ng-idle/angular-idle.min.js"> 740</script>
740 741
741<script type="text/javascript" src="https://www.youhaverealty.com/themes/public-common-files/js/lodash.min-2.4.1.js"> 742</script>
742 743
743<script type="text/javascript" src="https://www.youhaverealty.com/themes/public-common-files/js/angular-highlightjs.js"> 744</script>
744 745
745<script type="text/javascript" src="https://www.youhaverealty.com/themes/public-common-files/js/ui-bootstrap-tpls-1.0.0.js"> 746</script>
746 747
747<script src="https://www.youhaverealty.com/themes/public-common-files/bootstrap/js/bootstrap-hover-dropdown.min.js"> 748</script>
748 749
749<script src="https://www.youhaverealty.com/themes/public-common-files/bower_components/moment/moment.js"></script>
749 750
750<script 751 src="https://www.youhaverealty.com/themes/public-common-files/bower_components/eonasdan-bootstrap-datetimepicker/build/js/bootstrap-datetimepicker.min.js"> 752</script>
752 753
753<script type="text/javascript" src="https://www.youhaverealty.com/themes/public-common-files/js/swiper-bundle.min.js"> 754</script>
754 755
755<script src="https://www.youhaverealty.com/themes/public-common-files/bower_components/jquery-ui/jquery-ui.min.js"></script>
755 756
756<script src="https://www.youhaverealty.com/themes/public-common-files/bower_components/oclazyload/dist/ocLazyLoad.min.js"> 757</script>
757 758
758<script src="https://www.youhaverealty.com/themes/public-common-files/bower_components/odometer/odometer.min.js"></script>
758 759
759<script 760 src="https://www.youhaverealty.com/themes/public-common-files/bower_components/angular-odometer/dist/angular-odometer.min.js"> 761</script>
761 762
762<script 763 src="https://www.youhaverealty.com/themes/public-common-files/bower_components/angular-messages/angular-messages.min.js"> 764</script>
764 765
765<script 766 src="https://www.youhaverealty.com/themes/public-common-files/bower_components/angular-validation-match/dist/angular-validation-match.min.js"> 767</script>
767 768
768<script 769 src="https://www.youhaverealty.com/themes/public-common-files/bower_components/angular-loading-bar/build/loading-bar.min.js"> 770</script>
770 771
771<script src="https://www.youhaverealty.com/themes/public-common-files/bower_components/angular-aria/angular-aria.min.js"> 772</script>
772 773
773<script 774 src="https://www.youhaverealty.com/themes/public-common-files/bower_components/angular-material/angular-material.min.js"> 775</script>
775 776
776<script 777 src="https://www.youhaverealty.com/themes/public-common-files/bower_components/angular-payments/lib/angular-payments.min.js"> 778</script>
778 779
779<script 780 src="https://www.youhaverealty.com/themes/public-common-files/bower_components/angular-tablesort/js/angular-tablesort.js"> 781</script>
781 782 <!-- Bower js --> 783 <!-- Public js --> 784
784<script type='text/javascript' src="https://www.youhaverealty.com/themes/public-common-files/js/loading-bar.min.js"> 785</script>
785 786
786<script src="https://www.youhaverealty.com/themes/public-common-files/js/angular-validator.min.js"></script>
786 787
787<script src="https://www.youhaverealty.com/themes/public-common-files/js/jquery.flexslider.js"></script>
787 788
788<script src="https://www.youhaverealty.com/themes/public-common-files/js/imgLiquid-min.js"></script>
788 789
789<script src="https://www.youhaverealty.com/themes/public-common-files/js/jquery.simpleWeather.min.js"></script>
789 790
790<script src="https://www.youhaverealty.com/themes/public-common-files/js/lightslider.min.js" type="text/javascript"> 791</script>
791 792
792<script src="https://www.youhaverealty.com/themes/public-common-files/js/jquery.mCustomScrollbar.concat.min.js" 793 type="text/javascript"></script>
793 794
794<script src="https://www.youhaverealty.com/themes/public-common-files/js/chosen.jquery.min-1.4.2.js"></script>
794 795
795<script src="https://www.youhaverealty.com/themes/public-common-files/js/angular-chosen.min.js"></script>
795 796
796<script src="https://www.youhaverealty.com/themes/public-common-files/js/jquery.sticky-kit.min.js"></script>
796 797
797<script src="https://www.youhaverealty.com/themes/public-common-files/js/ngStorage-0.3.6.min.js"></script>
797 798
798<script src="https://www.youhaverealty.com/themes/public-common-files/js/ng-infinite-scroll.min.js"></script>
798 799
799<script src="https://www.youhaverealty.com/themes/public-common-files/js/owl.carousel.js"></script>
799 800 <!-- extra menu items js --> 801
801<script src="https://www.youhaverealty.com/themes/public-common-files/js/tutorial.js"></script>
801 802
802<script src="https://www.youhaverealty.com/themes/public-common-files/js/isotope.pkgd.min.js"></script>
802 803
803<script src="https://www.youhaverealty.com/themes/public-common-files/js/init.js"></script>
803 804 <!-- Public js --> 805 <!-- Angular Scripts --> 806
806<script src="https://www.youhaverealty.com/resources/assets/themes/asset-common-files/config/angularconfig.js"></script>
806 807
807<script src="https://www.youhaverealty.com/resources/assets/themes/asset-common-files/config/config-service.js"></script>
807 808
808<script 809 src="https://www.youhaverealty.com/resources/assets/themes/asset-common-files/app.js?v=1791380094"> 810</script>
810 811
811<script src="https://cdn.jsdelivr.net/npm/sweetalert2@8"></script>
811 812
812<script 813 src="https://www.youhaverealty.com/resources/assets/themes/asset-common-files/controllers/shared/agent-register-modal.js?v=1782392222"> 814</script>
vendor: 1 bytes, line 814
814
815<script 816 src="https://www.youhaverealty.com/resources/assets/themes/asset-common-files/controllers/recentlysoldpropertycontroller.js?v=1789109828"> 817</script>
817
817<script 818 src="https://www.youhaverealty.com/resources/assets/themes/asset-common-files/controllers/homecontroller.js?v=1785409119"> 819</script>
vendor: 1 bytes, line 819
819
820<script 821 src="https://www.youhaverealty.com/resources/assets/themes/asset-common-files/controllers/ourlistingscontroller.js?v=1789109828"> 822</script>
822<script 823 src="https://www.youhaverealty.com/resources/assets/themes/asset-common-files/controllers/mylistingscontroller.js?v=1789109828"> 824</script>
824<script 825 src="https://www.youhaverealty.com/resources/assets/themes/asset-common-files/controllers/resetpasswordcontroller.js?v=1782392222"> 826</script>
826
826<script 827 src="https://www.youhaverealty.com/resources/assets/themes/asset-common-files/controllers/idxcontroller.js?v=1786709036"> 828</script>
828 829
829<script 830 src="https://www.youhaverealty.com/resources/assets/themes/asset-common-files/controllers/databasepoweredcontroller.js?v=1782392222"> 831</script>
831 832
832<script 833 src="https://www.youhaverealty.com/resources/assets/themes/asset-common-files/controllers/criteriacontroller.js?v=1782392222"> 834</script>
834 835
835<script 836 src="https://www.youhaverealty.com/resources/assets/themes/asset-common-files/controllers/searchpropertycontroller.js?v=1790759615"> 837</script>
vendor: 1 bytes, line 837
837
838<script 839 src="https://www.youhaverealty.com/resources/assets/themes/asset-common-files/controllers/propertylistcriteriacontroller.js?v=1789109828"> 840</script>
840
840<script 841 src="https://www.youhaverealty.com/resources/assets/themes/asset-common-files/controllers/projectcontroller.js?v=1782392222"> 842</script>
842 843
843<script 844 src="https://www.youhaverealty.com/resources/assets/themes/asset-common-files/controllers/resourcescontroller.js?v=1784007458"> 845</script>
845 846
846<script 847 src="https://www.youhaverealty.com/resources/assets/themes/asset-common-files/controllers/staticcontroller.js?v=1782392222"> 848</script>
848 849
849<script 850 src="https://www.youhaverealty.com/resources/assets/themes/asset-common-files/controllers/registercontroller.js?v=1782392222"> 851</script>
851 852
852<script 853 src="https://www.youhaverealty.com/resources/assets/themes/asset-common-files/controllers/listingcontroller.js?v=1782392222"> 854</script>
854 855
855<script 856 src="https://www.youhaverealty.com/resources/assets/themes/asset-common-files/controllers/recentsalelistingcontroller.js?v=1782392222"> 857</script>
857 858
858<script 859 src="https://www.youhaverealty.com/resources/assets/themes/asset-common-files/controllers/recentlyclosedsearchpropertycontroller.js?v=1782392222"> 860</script>
860 861
861<script 862 src="https://www.youhaverealty.com/resources/assets/themes/asset-common-files/controllers/commercialsearchcontroller.js?v=1785490177"> 863</script>
863 864 865
865<script src="https://www.youhaverealty.com/themes/public-common-files/js/main.js"></script>
865 866 867 <!-- Code provided by Google --> 868 <div id="google_translate_element" style='display:none'></div> 869
869<script type="text/javascript"> 870 function googleTranslateElementInit() { 871 new google.translate.TranslateElement({ 872 pageLanguage: 'en', 873 layout: google.translate.TranslateElement.InlineLayout.SIMPLE, 874 autoDisplay: false 875 }, 'google_translate_element'); 876 } 877 </script>
877 878
878<script src="//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit" type="text/javascript"> 879 </script>
879 880 <!-- Flag click handler --> 881
881<script type="text/javascript"> 882 $('.translation-links a').click(function () { 883 let sel_html = $(this)[0].outerHTML; 884 console.log('sel_html', sel_html); 885 var lang = $(this).data('lang'); 886 var $frame = $('.goog-te-menu-frame:first'); 887 if (!$frame.size()) { 888 alert("Error: Could not find Google translate frame."); 889 return false; 890 } 891 $frame.contents().find('.goog-te-menu2-item span.text:contains(' + lang + ')').get(0).click(); 892 $('.select-language').html(sel_html); 893 return false; 894 }); 895 896 $(document).ready(function () { 897 $("#dpionloadloader").css("display", "block"); 898 }); 899 </script>
899 900 901
901<script type="text/javascript"> 902 // New Translation Element Init 903 function googleTranslateElementInit() { 904 new google.translate.TranslateElement({ 905 pageLanguage: "en", 906 autoDisplay: false 907 }, 908 "google_translate_element" 909 ); //remove the layout 910 } 911 // New Translation Element Init 912 // Flag click handler 913 $(".translation-links a").click(function () { 914 var lang = $(this).data("lang"); 915 var $frame = $(".goog-te-menu-frame:first"); 916 if (!$frame.size()) { 917 alert("Error: Could not find Google translate frame."); 918 return false; 919 } 920 $frame.contents().find(".goog-te-menu2-item span.text:contains(" + lang + ")").get(0).click(); 921 return false; 922 }); 923 // New Translation code 924 $(document).ready(function () { 925 setTimeout(() => { 926 googleTranslateElementInit(); 927 var lang = "English"; 928 $("#google_translate_element select option").each(function () { 929 if ($(this).text().indexOf(lang) > -1) { 930 $(this).parent().val($(this).val()); 931 var container = document.getElementById( 932 "google_translate_element" 933 ); 934 var select = container.getElementsByTagName("select")[0]; 935 triggerHtmlEvent(select, "change"); 936 } 937 }); 938 console.log("Translation reset"); 939 // Hide the translation bar 940 $(".skiptranslate").hide(); 941 }, 900); 942 }); 943 function triggerHtmlEvent(element, eventName) { 944 var event; 945 if (document.createEvent) { 946 event = document.createEvent("HTMLEvents"); 947 event.initEvent(eventName, true, true); 948 element.dispatchEvent(event); 949 } else { 950 event = document.createEventObject(); 951 event.eventType = eventName; 952 element.fireEvent("on" + event.eventType, event); 953 } 954 } 955 // Flag click handler 956 $(".translation-links a").off("click").click(function (e) { 957 e.preventDefault(); 958 console.log("Flag clicked"); 959 var lang = $(this).data("lang"); 960 $("#google_translate_element select option").each(function () { 961 if ($(this).text().indexOf(lang) > -1) { 962 $(this).parent().val($(this).val()); 963 var container = document.getElementById( 964 "google_translate_element" 965 ); 966 var select = container.getElementsByTagName("select")[0]; 967 triggerHtmlEvent(select, "change"); 968 } 969 }); 970 971 // Hide the translation bar 972 $(".skiptranslate").hide(); 973 }); 974 // New Translation code 975 </script>
975 976 <!--start ada js --> 977
977<script> 978 bcount = 0; 979 980 function bigSize() { 981 bcount++; 982 if (bcount == 1) { 983 document.getElementById("bigtext").innerHTML = 'Bigger Text <span class="glyphicon glyphicon-ok"></span>'; 984 document.getElementById("progress").innerHTML = 985 '<span class="glyphicon glyphicon-minus"></span><span class="glyphicon glyphicon-minus"></span>'; 986 document.body.style.fontSize = "20px"; 987 } 988 if (bcount == 2) { 989 document.getElementById("bigtext").innerHTML = 'Bigger Text <span class="glyphicon glyphicon-ok"></span>'; 990 document.getElementById("progress").innerHTML = 991 '<span class="glyphicon glyphicon-minus"></span><span class="glyphicon glyphicon-minus"></span><span class="glyphicon glyphicon-minus"></span>'; 992 document.body.style.fontSize = "25px"; 993 } 994 if (bcount == 3) { 995 document.getElementById("bigtext").innerHTML = 'Bigger Text <span class="glyphicon glyphicon-ok"></span>'; 996 document.getElementById("progress").innerHTML = 997 '<span class="glyphicon glyphicon-minus"></span><span class="glyphicon glyphicon-minus"></span><span class="glyphicon glyphicon-minus"></span><span class="glyphicon glyphicon-minus"></span>'; 998 document.body.style.fontSize = "30px"; 999 } 1000 if (bcount >= 4) { 1001 document.getElementById("bigtext").innerHTML = 'Bigger Text'; 1002 document.getElementById("progress").innerHTML = ''; 1003 document.body.style.fontSize = null; 1004 bcount = 0; 1005 } 1006 } 1007 1008 function speech(speechmsg) { 1009 var synth = window.speechSynthesis; 1010 synth.cancel(); 1011 var utterance1 = new SpeechSynthesisUtterance(speechmsg); 1012 synth.speak(utterance1); 1013 speechmsg = ''; 1014 } 1015 1016 function myFunction(e) { 1017 speech(e.target.innerText) 1018 } 1019 var count = 0; 1020 1021 function speechtext() { 1022 count++; 1023 if (count == 1) { 1024 speech('Screen reader enable'); 1025 document.getElementById("stext").innerHTML = 1026 'Speech Text <span class="glyphicon glyphicon-volume-up"></span>'; 1027 document.addEventListener("click", myFunction); 1028 } else { 1029 speech('Screen reader disable'); 1030 document.getElementById("stext").innerHTML = 'Speech Text'; 1031 document.removeEventListener("click", myFunction); 1032 count = 0; 1033 } 1034 } 1035 </script>
1035 1036 <!--end ada js --> 1037
1037<script src="https://apis.google.com/js/api:client.js"></script>
1037 1038
1038<script> 1039 const modal_pic = '651809233.jpg'; 1040 const gm_api_key = 'AIzaSyAfUt0e88sbSCGqblsMOhPdYarM1doX254'; 1041 </script>
1041 1042 <div ng-controller="agentregistermodalcontroller"> 1043 <modal></modal> 1044 </div> 1045 <!-- start ada css --> 1046 <style type="text/css"> 1047 .modal-dialog { 1048 /*width: 350px;*/ 1049 /*height: auto;*/ 1050 } 1051 1052 .modal-backdrop { 1053 background-color: transparent; 1054 } 1055 </style> 1056 <!-- end ada css --> 1057 1058
1058<script src="https://cdn.jsdelivr.net/npm/vanilla-hcaptcha"></script>
1058 1059 1060
1060<script> 1061 $(document).ready(function() { 1062 $(".main-menu ul li").has("ul").append("<span class='subToggle'></span>"); 1063 1064 $(".subToggle").click(function() { 1065 $(this).prev("ul").slideToggle(0); 1066 $(this).toggleClass("active"); 1067 }); 1068 1069 $(".menu-open-btn").click(function() { 1070 $(".header-left").addClass("show"); 1071 $("body").addClass("overflow"); 1072 $(".page-overlay").show(0); 1073 }); 1074 1075 $(".page-overlay,.menu-close-btn").click(function() { 1076 $(".header-left").removeClass("show"); 1077 $("body").removeClass("overflow"); 1078 $(".page-overlay").hide(0); 1079 }); 1080 1081 $(".main-header .main-menu ul li a").click(function() { 1082 $(".header-left").removeClass("show"); 1083 $("body").removeClass("overflow"); 1084 $(".page-overlay").hide(0); 1085 }); 1086 1087 $(window).resize(function() { 1088 if ($(window).width() > 1200) { 1089 $(".header-left").removeClass("show"); 1090 $("body").removeClass("overflow"); 1091 $(".page-overlay").hide(0); 1092 $(".subToggle").removeClass("active"); 1093 $(".main-menu").find("ul").removeAttr("style"); 1094 } 1095 }); 1096 }); 1097 </script>
1097 1098 1099 1100 1101
1102<script> 1103 document.getElementById('agentIcon').addEventListener('click', function () { 1104 document.getElementById('agentPopup').style.display = 'block'; 1105 }); 1106 1107 document.getElementById('closePopup').addEventListener('click', function () { 1108 document.getElementById('agentPopup').style.display = 'none'; 1109 }); 1110 1111 // Optional: Click outside to close 1112 document.addEventListener('click', function (event) { 1113 const popup = document.getElementById('agentPopup'); 1114 const icon = document.getElementById('agentIcon'); 1115 if (!popup.contains(event.target) && !icon.contains(event.target)) { 1116 popup.style.display = 'none'; 1117 } 1118 }); 1119</script>
1119 1120 1121 1122 1123 1124 1125 1126 1127<!-- Client registration and registration popup --> 1128<div class="modal fade register-modal" tabindex="-1" role="dialog" id="clientRegistrationModal"> 1129 <div class="modal-dialog modal-lg" role="document"> 1130 <div class="modal-content"> 1131 1132 <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span 1133 aria-hidden="true">×</span></button> 1134 1135 <div class="register-modal-row"> 1136 <div class="image-col"> 1137 <div class="image-holder"> 1138 <img src="https://www.youhaverealty.com/themes/6898/images/bea-PopUp.jpg"> 1139 </div> 1140 1141 </div> <!-- end image-col --> 1142 1143 <div class="register-content-col"> 1144 <div class="register-content-heading-block"> 1145 <h3 class="headingText">Let's Connect</h3> 1146 <p class="sub-headingText">Sign up today and receive email alerts of new listings that come 1147 on 1148 the 1149 market.</p> 1150 </div> 1151 1152 <div class="other-login"> 1153 1154 <div 1155 class="other-btn-holder text-center d-md-flex flex-row align-items-center justify-content-center"> 1156 1157 <a class="btn other-btn mx-1 my-1" onclick="fblogin()" 1158 ng-show="agentDetails.facebook_app_id && agentDetails.facebook_app_id != 'null'"> 1159 <img src="{{ base_url }}/uploads/index_files/icons/facebook-login.svg" width="10">Sign 1160 in 1161 with Facebook</a> 1162 1163 <a class="btn other-btn mx-1 my-1" ng-click="loginWithGoogle()"> 1164 <img src="{{ base_url }}/uploads/index_files/icons/google-login.svg" width="17"> Sign 1165 up 1166 with Google </a> 1167 1168 </div> 1169 <div class="orDevider mt-4 mb-3 text-center"> 1170 <div class="orText">or Sign in with Email</div> 1171 </div> 1172 </div> 1173 1174 <form angular-validator-submit="submitClientRegistration()" name="agentForm" angular-validator 1175 novalidate> 1176 <div class="form-area text-left"> 1177 <div class="form-group"> 1178 <label class="control-label">Name <sup class="text-danger">*</sup></label> 1179 <input type="text" class="form-control" name="name" id="name" ng-model="agentform.name" 1180 required> 1181 <div ng-show="agentForm.$submitted"> 1182 <div ng-show="agentForm.name.$error.required" style="color:red">Name field is 1183 required</div> 1184 </div> 1185 </div> 1186 <div class="form-group"> 1187 <label class="control-label">Email Address <sup class="text-danger">*</sup></label> 1188 <input type="email" class="form-control" name="agent_email" id="agent_email" 1189 ng-model="agentform.email" required> 1190 <div ng-show="agentForm.$submitted"> 1191 <div ng-show="agentForm.agent_email.$error.required" style="color:red">Email 1192 field 1193 is required</div> 1194 </div> 1195 </div> 1196 <div class="form-group"> 1197 <label class="control-label">Mobile Number <sup class="text-danger">*</sup></label> 1198 <input type="text" class="form-control" name="primary_phone" id="primary_phone" 1199 ng-model="agentform.primary_phone" required> 1200 <div ng-show="agentForm.$submitted"> 1201 <div ng-show="agentForm.primary_phone.$error.required" style="color:red"> 1202 Mobile 1203 Number field is required</div> 1204 </div> 1205 </div> 1206 <div class="form-group"> 1207 <label class="control-label">What Zip Code Are You Interested In</label> 1208 <input type="text" class="form-control" name="zip_code" id="zip_code" 1209 ng-model="agentform.zip_code"> 1210 </div> 1211 1212 <div class="form-group"> 1213 <custom-captcha model="agentform.captcha"></custom-captcha> 1214 </div> 1215 <div class="form-btn-holder"> 1216 <button type="submit" class="btn btn-comn-regal-blue btn-center">Register</button> 1217 </div> 1218 </div> 1219 </form> 1220 <p class="register-modal-infoText">Already Have an 1221 Account? 1222 Please <a ng-click="showClientLoginPopup()" style="cursor:pointer">Sign In</a></p> 1223 1224 </div> <!-- end register-content-col --> 1225 </div> <!-- end register-modal-row --> 1226 </div> 1227 </div> 1228</div> 1229<div class="modal fade register-modal" tabindex="-1" role="dialog" id="clientLoginModal"> 1230 <div class="modal-dialog modal-lg" role="document"> 1231 <div class="modal-content"> 1232 1233 <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span 1234 aria-hidden="true">×</span></button> 1235 1236 <div class="register-modal-row"> 1237 <div class="image-col"> 1238 <div class="image-holder"> 1239 <img src="https://www.youhaverealty.com/themes/6898/images/bea-PopUp.jpg"> 1240 </div> 1241 1242 </div> <!-- end image-col --> 1243 1244 <div class="register-content-col"> 1245 <div class="register-content-heading-block"> 1246 <h3 class="headingText">Let's Connect</h3> 1247 <p class="sub-headingText">Sign in to receive updates.</p> 1248 </div> 1249 1250 <div class="other-login"> 1251 1252 <div 1253 class="other-btn-holder text-center d-md-flex flex-row align-items-center justify-content-center"> 1254 1255 <a class="btn other-btn mx-1 my-1" onclick="fblogin()" 1256 ng-show="agentDetails.facebook_app_id && agentDetails.facebook_app_id != 'null'"> 1257 <img src="{{ base_url }}/uploads/index_files/icons/facebook-login.svg" width="10">Sign 1258 in 1259 with Facebook</a> 1260 1261 <a class="btn other-btn mx-1 my-1" ng-click="loginWithGoogle()"> 1262 <img src="{{ base_url }}/uploads/index_files/icons/google-login.svg" width="17"> Sign 1263 in 1264 with Google </a> 1265 1266 </div> 1267 <div class="orDevider mt-4 mb-3 text-center"> 1268 <div class="orText">or Sign in with Email</div> 1269 </div> 1270 </div> 1271 1272 <form angular-validator-submit="submitClientLogin()" name="agentForm" angular-validator novalidate> 1273 <div class="form-area text-left"> 1274 <div class="form-group"> 1275 <label class="control-label">Email Address <sup class="text-danger">*</sup></label> 1276 <input type="email" class="form-control" name="agent_email" id="agent_email" 1277 ng-model="agentform.email" required> 1278 <div ng-show="agentForm.$submitted"> 1279 <div ng-show="agentForm.agent_email.$error.required" style="color:red">Email 1280 field 1281 is required</div> 1282 </div> 1283 </div> 1284 <div class="form-group"> 1285 <label class="control-label">Password <sup class="text-danger">*</sup></label> 1286 <input type="password" class="form-control" name="password" id="password" 1287 ng-model="agentform.password" required> 1288 <div ng-show="agentForm.$submitted"> 1289 <div ng-show="agentForm.password.$error.required" style="color:red">Password 1290 is required</div> 1291 </div> 1292 </div> 1293 1294 <div class="form-group"> 1295 <custom-captcha model="agentform.captcha"></custom-captcha> 1296 </div> 1297 <div class="form-btn-holder"> 1298 <button type="submit" class="btn btn-comn-regal-blue btn-center">Login</button> 1299 </div> 1300 </div> 1301 </form> 1302 <p class="register-modal-infoText">Don't Have an 1303 Account? 1304 Please <a style="cursor: pointer;" ng-click="showClientRegistrationPopup()">Sign Up</a> 1305 </p> 1306 1307 </div> <!-- end register-content-col --> 1308 </div> <!-- end register-modal-row --> 1309 </div> 1310 </div> 1311</div> 1312 1313<div class="modal fade register-modal" data-backdrop="static" data-keyboard="false" tabindex="-1" role="dialog" 1314 id="updateProfileModal"> 1315 <div class="modal-dialog modal-md" role="document"> 1316 <div class="modal-content p-5"> 1317 <div class="row"> 1318 <div class="col-md-12"> 1319 <div class="register-content-heading-block"> 1320 <h3 class="headingText">Complete the registration</h3> 1321 <p class="sub-headingText">Complete the registration to receive updates</p> 1322 </div> 1323 <form angular-validator-submit="updateProfile()" name="agentForm" angular-validator novalidate> 1324 <div class="form-area text-left"> 1325 <div class="form-group"> 1326 <label class="control-label">Mobile Number <sup class="text-danger">*</sup></label> 1327 <input type="text" class="form-control" name="primary_phone" id="primary_phone" 1328 ng-model="agentform.primary_phone" required> 1329 <div ng-show="agentForm.$submitted"> 1330 <div ng-show="agentForm.primary_phone.$error.required" style="color:red"> 1331 Mobile 1332 Number field is required</div> 1333 </div> 1334 </div> 1335 <div class="form-group"> 1336 <label class="control-label">What Zip Code Are You Interested In</label> 1337 <input type="text" class="form-control" name="zip_code" id="zip_code" 1338 ng-model="agentform.zip_code"> 1339 </div> 1340 <div class="form-btn-holder"> 1341 <button type="submit" class="btn btn-comn-regal-blue btn-center">Update</button> 1342 </div> 1343 </div> 1344 </form> 1345 </div> <!-- end register-content-col --> 1346 </div> <!-- end register-modal-row --> 1347 <br> 1348 </div> 1349 </div> 1350</div>
1351<script> 1352 let responseData = {}; 1353 let clientEmail = ""; 1354 responseData.booking_info = {}; 1355 1356 function setupChatbotBooking(apiData, contact) { 1357 var injector = angular.element(document.body).injector(); 1358 var BookingService = injector.get("BookingService"); 1359 BookingService.setInitialData({ 1360 member_id: user_id 1361 }); 1362 BookingService.setAfterContact(apiData); 1363 return BookingService.isBookingLinkVisible(); 1364 } 1365 1366 function onCrmChatReady(api) { 1367 api.on('lead_captured', function(lead) { 1368 console.log('lead_captured', lead); 1369 clientEmail = lead.email; 1370 responseData.booking_info.client_id = lead.client_id; 1371 responseData.booking_info.member_id = lead.member.id; 1372 responseData.booking_info.client_email = clientEmail; 1373 1374 // Member info 1375 responseData.booking_info.member_details = lead.member; 1376 1377 // Login here 1378 const payload = { 1379 page: "search", 1380 member_id: String(responseData.booking_info.member_id), 1381 client_id: lead.client_id 1382 }; 1383 const loginUrl = base_url + "/firstclient/client-login"; 1384 fetch(loginUrl, { 1385 method: "POST", 1386 credentials: "include", // Remove if not needed 1387 headers: { 1388 "Content-Type": "application/json" 1389 }, 1390 body: JSON.stringify(payload) 1391 }) 1392 .then(async (response) => { 1393 if (!response.ok) { 1394 throw new Error(`HTTP ${response.status}`); 1395 } 1396 1397 const data = await response.json(); 1398 // Login the user 1399 const loginData = data.login_data; 1400 if (loginData) { 1401 localStorage.setItem('access_token', loginData.token); 1402 localStorage.setItem('usr_info', loginData.encripted_usr_info); 1403 var injector = angular.element(document.querySelector('[ng-app]')).injector(); 1404 var $rootScope = injector.get('$rootScope'); 1405 1406 $rootScope.$applyAsync(function() { 1407 $rootScope.is_front_logged = 1; 1408 $rootScope.refreshLoggedUser(); 1409 }); 1410 console.log("User logged in successfully"); 1411 } 1412 }) 1413 .catch((error) => { 1414 console.error("Save Search Error:", error); 1415 }); 1416 1417 setupChatbotBooking(responseData, lead); 1418 }); 1419 api.on('save_search', function(lead) { 1420 console.log(lead); 1421 // return; 1422 1423 // Saving the search 1424 // { 1425 // "page": "search", 1426 // "parsed_data": "{\"property_type\":\"\",\"property_types\":[\"Single Family\"],\"bedroom\":0,\"bathroom\":0,\"min_price\":100000,\"max_price\":1000000,\"search_listing_sort\":\"listprice_desc\",\"search_listing_date_sort\":\"listdate_\",\"image_category\":\"\",\"limit\":20,\"page\":1,\"advance_search\":\"{\\\"city\\\":[\\\"Miami\\\"],\\\"bedrooms\\\":0,\\\"bathrooms\\\":0}\",\"advance_search_updated\":\"{\\\"city\\\":[\\\"Miami\\\"]}\",\"agentid\":\"1150\",\"all_bound\":\"{}\",\"menu_id\":null,\"criteria_id\":null,\"page_name\":null}", 1427 // "member_id": "1150" 1428 // } 1429 1430 1431 // const lead = { 1432 // budget: "100000-2000000", 1433 // client_id: 96522, 1434 // email: "[email protected]", 1435 // full_name: "Wasim Kabir", 1436 // location: "Miami", 1437 // member_id: 1150, 1438 // move_time: "Next month", 1439 // primary_phone: "9087654321", 1440 // property_type: "Single Family", 1441 // } 1442 1443 1444 1445 // Parse budget 1446 let minPrice = null; 1447 let maxPrice = null; 1448 1449 if (lead.budget) { 1450 const budget = lead.budget.split("-").map(Number); 1451 if (budget.length === 1) { 1452 // min 20% below budget, max 20% above budget 1453 minPrice = Math.floor(budget[0] * 0.8);
1454 maxPrice = Math.ceil(budget[0] * 1.2); 1455 } else if (budget.length > 1) { 1456 minPrice = budget[0]; 1457 maxPrice = budget[1]; 1458 } 1459 } 1460 // else { 1461 // minPrice = budget[0] || null; 1462 // maxPrice = budget.length > 1 ? budget[1] : null; 1463 // } 1464 let advanceSearch = {}; 1465 let advanceSearchUpdated = {}; 1466 1467 if (lead.zip_code != null && lead.zip_code != '') { 1468 // Advance search objects 1469 advanceSearch = { 1470 zip_code: [lead.zip_code], 1471 bedrooms: 0, 1472 bathrooms: 0 1473 }; 1474 1475 advanceSearchUpdated = { 1476 zip_code: [lead.zip_code], 1477 }; 1478 } else { 1479 // Advance search objects 1480 advanceSearch = { 1481 // city: [lead.location], 1482 city: [lead.city], 1483 bedrooms: 0, 1484 bathrooms: 0 1485 }; 1486 1487 advanceSearchUpdated = { 1488 // city: [lead.location] 1489 city: [lead.city] 1490 }; 1491 } 1492 1493 1494 // Build parsed_data 1495 const parsedData = { 1496 property_type: "", 1497 // property_types: [lead.property_type], 1498 property_types: [], 1499 bedroom: 0, 1500 bathroom: 0, 1501 min_price: minPrice, 1502 ...(maxPrice !== null && { 1503 max_price: maxPrice 1504 }), 1505 search_listing_sort: "listprice_desc", 1506 search_listing_date_sort: "listdate_", 1507 image_category: "", 1508 limit: 20, 1509 page: 1, 1510 advance_search: JSON.stringify(advanceSearch), 1511 advance_search_updated: JSON.stringify(advanceSearchUpdated), 1512 agentid: String(lead.member.id), 1513 all_bound: "{}", 1514 menu_id: null, 1515 criteria_id: null, 1516 page_name: null 1517 }; 1518 1519 // Final payload 1520 const payload = { 1521 page: "search", 1522 parsed_data: JSON.stringify(parsedData), 1523 member_id: String(responseData.booking_info.member_id), 1524 client_id: lead.client_id 1525 }; 1526 // const saveSearchUrl = base_url + "/firstclient/save-search-and-login"; 1527 const saveSearchUrl = base_url + "/firstclient/save-search"; 1528 fetch(saveSearchUrl, { 1529 method: "POST", 1530 credentials: "include", // Remove if not needed 1531 headers: { 1532 "Content-Type": "application/json" 1533 }, 1534 body: JSON.stringify(payload) 1535 }) 1536 .then(async (response) => { 1537 if (!response.ok) { 1538 throw new Error(`HTTP ${response.status}`); 1539 } 1540 1541 const data = await response.json(); 1542 console.log("Save Search Success:", data); 1543 // // Login the user 1544 // const loginData = data.login_data; 1545 // if(loginData) { 1546 // localStorage.setItem('access_token', loginData.token); 1547 // localStorage.setItem('usr_info', loginData.encripted_usr_info); 1548 // var injector = angular.element(document.querySelector('[ng-app]')).injector(); 1549 // var $rootScope = injector.get('$rootScope'); 1550 1551 // $rootScope.$applyAsync(function () { 1552 // $rootScope.is_front_logged = 1; 1553 // $rootScope.refreshLoggedUser(); 1554 // }); 1555 // console.log("User logged in successfully"); 1556 // } 1557 }) 1558 .catch((error) => { 1559 console.error("Save Search Error:", error); 1560 }); 1561 console.log(lead); 1562 }); 1563 api.on('schedule_calendar_booking', function(data) { 1564 console.log(responseData); 1565 1566 console.log("Minimize the chat"); 1567 api.minimize(); 1568 1569 console.log('schedule_calendar_booking', data); 1570 var injector = angular.element(document.body).injector(); 1571 1572 if (!injector) { 1573 console.error('AngularJS injector not found.'); 1574 return; 1575 } 1576 1577 injector.invoke(function( 1578 $compile, 1579 $rootScope, 1580 $timeout, 1581 BookingService 1582 ) { 1583 1584 BookingService.setInitialData({ 1585 member_id: responseData.booking_info.member_details.id 1586 }); 1587 1588 BookingService.setAfterContact(responseData); 1589 1590 // Create a child scope 1591 var chatbotScope = $rootScope.$new(); 1592 1593 // Give the directive its own member_details 1594 chatbotScope.chatbotMemberDetails = responseData.booking_info.member_details; 1595 1596 // Remove previous instance 1597 angular.element("#chatbot-slot-booking").remove(); 1598 // Hide any modal-backdrop divs that might be present 1599 // <div class="modal-backdrop fade in"></div> 1600 // Remove the fade and in classes to prevent the backdrop from blocking interaction 1601 // $(".modal-backdrop").removeClass("fade in"); 1602 $('.slotBookingModal').on('hidden.bs.modal', function() { 1603 // 1. Remove the backdrop element from the DOM 1604 $('.modal-backdrop').remove(); 1605 1606 // 2. Restore scrolling to the main page body 1607 $('body').removeClass('modal-open'); 1608 }); 1609 1610 var el = angular.element( 1611 '<div id="chatbot-slot-booking">' + 1612 '<slot-booking ' + 1613 'member-details="chatbotMemberDetails" ' + 1614 'chatbot-mode="true">' + 1615 '</slot-booking>' + 1616 '</div>' 1617 ); 1618 1619 angular.element(document.body).append(el); 1620 1621 $compile(el)(chatbotScope); 1622 chatbotScope.$digest(); 1623 1624 $timeout(function() { 1625 $rootScope.$broadcast("slotBooking:open"); 1626 }); 1627 }); 1628 1629 document.addEventListener('bookingCompleted', (event) => { 1630 console.log(event.detail.booking_info); 1631 let bookingId = event.detail.booking_info.data.meeting_id; 1632 // Minimize the booking calendar 1633 $('.slotBookingModal').hide(); 1634 1635 api.open(); 1636 api.confirmBooking(bookingId); 1637 }); 1638 }); 1639 } 1640</script>
vendor: 1 bytes, line 1640
1640
1641<script src="https://chatbot.dpirealtywebsites.com/embed/chatbot-loader.js" data-member-id="6898" 1642 data-title="Chat with us" data-primary-color="#0d6efd" 1643 data-booking-url="https://new-crm.dpirealtywebsites.com/book?member_id=6898" 1644 data-callback="onCrmChatReady" defer></script>
1644 1645</body> 1646 1647</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.