PageSourceSearch

https://www.stoneandstory.com/myportal/collections

html stoneandstory.com collected 2026-09-26 15:07:32 UTC 151,616 bytes, 2,395 lines download raw bytes

1<!DOCTYPE html> <html lang="en"> <head><meta name="description" content=""> <meta charset="utf-8"> <meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="msvalidate.01" content="52D8CD5F9EA2B1031F2D2472023A5D34"> <title>MyPortal | Collections</title> <link rel="preconnect" href="https://www.google.com"> <link rel="preconnect" href="https://www.gstatic.com" crossorigin> <link rel="dns-prefetch" href="https://cdn1.brivityidx.com"> 
1<script>
2            var head = document.getElementsByTagName('head')[0]
3            var insertBefore = head.insertBefore;
4            head.insertBefore = function (newElement, referenceElement) {
5                // intercept style elements for IEs
6                if (newElement.tagName.toLowerCase() === 'style'
7                    && newElement.styleSheet
8                    && newElement.styleSheet.cssText
9                    && newElement.styleSheet.cssText.replace('\r\n', '').indexOf('.gm-style') === 0) {
10                    return;
11                }
12                // intercept style elements for other browsers
13                if (newElement.tagName.toLowerCase() === 'style'
14                    && newElement.innerHTML
15                    && newElement.innerHTML.replace('\r\n', '').indexOf('.gm-style') === 0) {
16                    return;
17                }
18                insertBefore.call(head, newElement, referenceElement);
19            }; 
20        </script>
20 <link rel="shortcut icon" href="https://cdn1.brivityidx.com/assets/images/uploads/107878/Darin7278_fav28.png" type="image/x-icon"> <link href="https://cdn1.brivityidx.com/assets/css/build-site.min.css?ck=" rel="stylesheet"> <link href="https://cdn1.brivityidx.com/assets/css/build-chatbot-v1.min.css?ck=" rel="stylesheet" media="print" onload="this.media='all'"><noscript><link href="https://cdn1.brivityidx.com/assets/css/build-chatbot-v1.min.css?ck=" rel="stylesheet"></noscript> <link rel="canonical" href="https://www.stoneandstory.com/myportal/collections"> 
20<script>
21            function deferScriptOnLoad(url, sleep = 0) {
22                window.addEventListener('load', function () {
23                    deferScript(url, sleep);
24                });
25            }
26            function deferScript(url, sleep = 0) {
27                if (sleep > 0) {
28                    setTimeout(() => {
29                        deferScript(url);
30                    }, sleep);
31                    return;
32                }
33                let s = document.createElement('script');
34                s.type = 'text/javascript';
35                s.async = true;
36                s.src = url;
37                let x = document.getElementsByTagName('head')[0];
38                x.appendChild(s);
39            }
40
41            /* PLACE_COMPONENTS_LOADER_START */
42            window.sitebuilderPlaceComponents = (function () {
43                var DEFAULT_URL = 'https://mobile-component-services-library-dev.brivity.com/web-components.min.js?ck=1';
44                var BUNDLE_URLS = { default: DEFAULT_URL };
45                var loadPromises = {};
46                var LOAD_TIMEOUT_MS = 10000;
47
48                function urlForTag(tagName) {
49                    return BUNDLE_URLS[tagName] || BUNDLE_URLS.default;
50                }
51
52                function ensureLoaded(tagName) {
53                    var url = urlForTag(tagName);
54                    if (loadPromises[url]) {
55                        return loadPromises[url];
56                    }
57                    loadPromises[url] = new Promise(function (resolve, reject) {
58                        var settled = false;
59                        var timer = setTimeout(function () {
60                            if (settled) return;
61                            settled = true;
62                            reject(new Error('web-components load timeout'));
63                        }, LOAD_TIMEOUT_MS);
64                        var s = document.createElement('script');
65                        s.type = 'text/javascript';
66                        s.async = true;
67                        s.src = url;
68                        s.onerror = function () {
69                            if (settled) return;
70                            settled = true;
71                            clearTimeout(timer);
72                            reject(new Error('web-components script onerror'));
73                        };
74                        document.getElementsByTagName('head')[0].appendChild(s);
75                        if (window.customElements && customElements.whenDefined) {
76                            customElements.whenDefined(tagName).then(function () {
77                                if (settled) return;
78                                settled = true;
79                                clearTimeout(timer);
80                                resolve();
81                            });
82                        }
83                    });
84                    return loadPromises[url];
85                }
86
87                var EAGER_SELECTOR = 'place-propertycard, place-searchpagefilter, place-bedbathfiltermodal, ' +
88                                     'place-listingstatusmodal, place-propertytypemodal, place-savesearchmodal, ' +
89                                     'place-basicmodal, place-details, place-agentbio, place-agentmessaging, ' +
90                                     'place-contactyouragent, place-menu, place-collectionpopup, ' +
91                                     'place-copycollectionmodal, place-removecollectionpopup, place-vs-accumulate';
92
93                function warmIfEagerTagsPresent() {
94                    if (document.querySelector(EAGER_SELECTOR)) {
95                        ensureLoaded('place-propertycard').catch(function () {});
96                    }
97                }
98                if (document.readyState === 'loading') {
99                    document.addEventListener('DOMContentLoaded', warmIfEagerTagsPresent);
100                } else {
101                    warmIfEagerTagsPresent();
102                }
103
104                var INTERACTION_SELECTOR = 'place-getyourhomecta, place-generictoast, ' + EAGER_SELECTOR +
105                                           ', [data-needs-place-components]';
106                function onInteract(e) {
107                    var t = e.target;
108                    if (t && t.closest && t.closest(INTERACTION_SELECTOR)) {
109                        ensureLoaded('place-generictoast').catch(function () {});
110                    }
111                }
112                document.addEventListener('pointerdown', onInteract, true);
113                document.addEventListener('focusin', onInteract, true);
114
115                function idleWarm() {
116                    ensureLoaded('place-generictoast').catch(function () {});
117                }
118                if ('requestIdleCallback' in window) {
119                    requestIdleCallback(idleWarm, { timeout: 5000 });
120                } else {
121                    setTimeout(idleWarm, 3000);
122                }
123
124                return { ensureLoaded: ensureLoaded };
125            })();
126            /* PLACE_COMPONENTS_LOADER_END */
127
128            const googleApiKey = 'AIzaSyAjpuNg6WGCMV5rzoJcIP2QmMTVto6hYmc'
129
130            /* Lazy loader for Google Maps API + turf.js.
131             * The TURF_INLINE / MAPS_API_INLINE placeholders below are emitted by
132             * Sitemodel.php only on pages whose blocks actually consume Maps/turf.
133             * On other pages those tags are stripped, and consumers call
134             * sitebuilderMapsApi.ensureLoaded() to inject them on demand.
135             *
136             * Safari fix vs. the prior reverted attempt (commit 0cef3135e): uses
137             * Google's official &callback= parameter, not setTimeout, to detect
138             * Maps readiness.
139             */
140            window.sitebuilderMapsApi = (function () {
141                var TURF_URL = 'https://cdn.jsdelivr.net/npm/@turf/[email protected]/turf.min.js';
142                var MAPS_URL = 'https://maps.googleapis.com/maps/api/js?libraries=geocoding,places,marker,drawing&key=' +
143                               googleApiKey + '&map_ids=85c127b7bf0255d9&callback=__sitebuilderMapsReady';
144                var LOAD_TIMEOUT_MS = 15000;
145                var loadPromise = null;
146
147                function injectScript(url) {
148                    var s = document.createElement('script');
149                    s.type = 'text/javascript';
150                    s.async = true;
151                    s.src = url;
152                    document.getElementsByTagName('head')[0].appendChild(s);
153                    return s;
154                }
155
156                function loadTurf() {
157                    return new Promise(function (resolve, reject) {
158                        if (window.turf) { resolve(); return; }
159                        var s = injectScript(TURF_URL);
160                        s.onload = function () { resolve(); };
161                        s.onerror = function () { reject(new Error('turf load failed')); };
162                    });
163                }
164
165                function loadMaps() {
166                    return new Promise(function (resolve, reject) {
167                        if (window.google && window.google.maps) { resolve(); return; }
168                        window.__sitebuilderMapsReady = function () { resolve(); };
169                        var s = injectScript(MAPS_URL);
170                        s.onerror = function () { reject(new Error('maps load failed')); };
171                    });
172                }
173
174                function ensureLoaded() {
175                    if (loadPromise) return loadPromise;
176                    if (window.google && window.google.maps && window.turf) {
177                        loadPromise = Promise.resolve();
178                        return loadPromise;
179                    }
180                    loadPromise = new Promise(function (resolve, reject) {
181                        var settled = false;
182                        var timer = setTimeout(function () {
183                            if (settled) return;
184                            settled = true;
185                            reject(new Error('maps/turf load timeout'));
186                        }, LOAD_TIMEOUT_MS);
187                        Promise.all([loadTurf(), loadMaps()]).then(function () {
188                            if (settled) return;
189                            settled = true;
190                            clearTimeout(timer);
191                            resolve();
192                        }, function (err) {
193                            if (settled) return;
194                            settled = true;
195                            clearTimeout(timer);
196                            reject(err);
197                        });
198                    });
199                    return loadPromise;
200                }
201
202                return { ensureLoaded: ensureLoaded };
203            })();
204        </script>
204 <link href="https://cdn1.brivityidx.com/assets/css/style-headers.min.css" rel="stylesheet"><link href="https://cdn1.brivityidx.com/assets/css/style-premium.min.css" rel="stylesheet"><link href="https://cdn1.brivityidx.com/assets/css/style-footers.css" rel="stylesheet"><link href="https://cdn1.brivityidx.com/idx-sites/2/4/1/24129/site_custom.css?v=1789577780" rel="stylesheet">
204<script type="text/javascript" src="https://cdn1.brivityidx.com/idx-sites/2/4/1/24129/global_js_variables.js?v=1789577780"></script>
204<link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link href="https://fonts.googleapis.com/css2?family=Playfair+Display:ital@0;1&display=swap" rel="stylesheet"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/OwlCarousel2/2.3.4/assets/owl.carousel.min.css"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/OwlCarousel2/2.3.4/assets/owl.theme.default.min.css"> 
204<script type="application/ld+json">{"@context":"https://schema.org","@type":"RealEstateAgent","name":"Stone & Story Real Estate Group","url":"https://www.stoneandstory.com","telephone":"+17852510717","address":{"@type":"PostalAddress","streetAddress":"1220 SW Executive Dr","addressLocality":"Topeka","addressRegion":"KS","postalCode":"66615","addressCountry":"US"},"geo":{"@type":"GeoCoordinates","latitude":39.044031,"longitude":-95.7678524},"openingHoursSpecification":{"@type":"OpeningHoursSpecification","dayOfWeek":["Monday","Tuesday","Wednesday","Thursday","Friday"],"opens":"08:00","closes":"17:00"},"aggregateRating":{"@type":"AggregateRating","ratingValue":"4.9","reviewCount":"124"},"priceRange":"$200,000 - $800,000","sameAs":["https://www.facebook.com/stoneandstoryrealestategroup","https://www.instagram.com/stoneandstoryre/","https://www.linkedin.com/company/stoneandstoryrealestategroup","https://www.youtube.com/channel/UCJnouH_Nk44HhbxGx9FCEag"]}</script>
204 
204<script>
205var propDetailsPixelOnReady = function(){
206  let propDetFpst = new FbRealEstatePixelTracker({"eventType": "ViewContent", "content_ids": [""]});
207  propDetFpst.fireEvent();
208};
209if (document.readyState === "complete" || (document.readyState !== "loading" && !document.documentElement.doScroll)) {
210  propDetailsPixelOnReady();
211} else {
212  document.addEventListener("DOMContentLoaded", propDetailsPixelOnReady);
213}
214
215</script>
215 
215<script>
vendor: 327 bytes, lines 215-219
215(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
216new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
217j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
218'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
219})(window,document,'script','dataLayer','
219GTM-MKJHW6BC
vendor: 3 bytes, line 219
219');
219</script>
219 <meta property="og:url" content="https://www.stoneandstory.com/myportal/collections"> <meta property="og:image" content="http://images.brivityidx.com/assets/images/uploads/107878/Darin7278_Thumb28.png"> <meta property="og:image:secure_url" content="https://images.brivityidx.com/assets/images/uploads/107878/Darin7278_Thumb28.png"> <meta property="og:description" content=""> <meta property="og:title" content="MyPortal | Collections"> </head> <body>
vendor: 68 bytes, line 219
219 <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
219GTM-MKJHW6BC
vendor: 83 bytes, line 219
219" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> 
219<meta name="google-signin-client_id" content="1"><meta name="apple-signin-flag" content="1"><meta name="main_sitebuilder_domain" content="https://sitebuilder.brivity.com"> <div id="site-registration-bar" class="collapse"> <input type="hidden" id="huser_id" value=""> <div class="row" style="width: 100%; margin: 0;"> <div class="col-md-12" style="display: none;" id="logged-in"> <div class="topBar flex aiCenter jcBetween"> <div class="topBarLeft flex aiCenter"> <span><topbar_show_agent_name/></span> </div> <div class="topBarRight flex aiCenter"> <a class="topLink flex aiCenter thin favoritesTop" href="/myportal/collections"> <svg width="17" height="17" viewBox="0 0 17 17" fill="none" xmlns="http://www.w3.org/2000/svg"> <g clip-path="url(#clip0_16761_179132)"> <path d="M14.2659 3.57333C13.9254 3.23267 13.5211 2.96243 13.0761 2.77806C12.6312 2.59368 12.1542 2.49878 11.6726 2.49878C11.1909 2.49878 10.714 2.59368 10.269 2.77806C9.82401 2.96243 9.41973 3.23267 9.07922 3.57333L8.37256 4.28L7.66589 3.57333C6.97809 2.88554 6.04524 2.49914 5.07256 2.49914C4.09987 2.49914 3.16702 2.88554 2.47922 3.57333C1.79143 4.26113 1.40503 5.19398 1.40503 6.16667C1.40503 7.13936 1.79143 8.07221 2.47922 8.76L3.18589 9.46667L8.37256 14.6533L13.5592 9.46667L14.2659 8.76C14.6066 8.4195 14.8768 8.01521 15.0612 7.57024C15.2455 7.12526 15.3404 6.64832 15.3404 6.16667C15.3404 5.68501 15.2455 5.20807 15.0612 4.7631C14.8768 4.31812 14.6066 3.91384 14.2659 3.57333V3.57333Z" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> </g> <defs> <clipPath id="clip0_16761_179132"> <rect width="16" height="16" fill="white" transform="translate(0.372559 0.5)"/> </clipPath> </defs> </svg> <span class="ml6 topLabel">Collections&nbsp;</span> </a> <a class="topLink flex aiCenter thin saveSearchTop" href="/myportal/searches"> <svg width="16" height="16" viewBox="0 4 20 17" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M19 21L12 16L5 21V5C5 4.46957 5.21071 3.96086 5.58579 3.58579C5.96086 3.21071 6.46957 3 7 3H17C17.5304 3 18.0391 3.21071 18.4142 3.58579C18.7893 3.96086 19 4.46957 19 5V21Z" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" /> </svg> <span class="ml6 topLabel">Saved Searches&nbsp;</span> </a> <a class="topLink flex aiCenter thin market-report-top" style="display:none" href="/myportal/reports"> <svg width="17" height="17" viewBox="0 0 17 17" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M7.70589 13.1667C10.6514 13.1667 13.0392 10.7789 13.0392 7.83333C13.0392 4.88781 10.6514 2.5 7.70589 2.5C4.76037 2.5 2.37256 4.88781 2.37256 7.83333C2.37256 10.7789 4.76037 13.1667 7.70589 13.1667Z" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> <path d="M14.3725 14.5L11.4725 11.6" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> </svg> <span class="ml6 topLabel">My Reports&nbsp;</span> </a> <a class="aiCenter flex topBarProfile thin" href="/myportal/profile"> <span class="profileName"></span> </a> <a style="padding-right: 0px" class="aiCenter flex thin" id="topBarLogout" href="javascript:void()"> <svg width="23" height="23" viewBox="0 0 23 23" fill="none" xmlns="http://www.w3.org/2000/svg"> <g clip-path="url(#clip0_16761_179186)"> <path d="M16.4003 16.214C19.0038 13.6106 19.0038 9.38945 16.4003 6.78595C13.7968 4.18246 9.57572 4.18246 6.97222 6.78595C4.36873 9.38945 4.36873 13.6105 6.97222 16.214C9.57572 18.8175 13.7968 18.8175 16.4003 16.214Z" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> <path d="M9.80066 9.61438L13.5719 13.3856" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> <path d="M9.80066 13.3856L13.5719 9.61438" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> </g> <defs> <clipPath id="clip0_16761_179186"> <rect width="16" height="16" fill="white" transform="translate(0.372559 11.5) rotate(-45)"/> </clipPath> </defs> </svg> <span class="ml6">Log Out</span> </a> </div> </div> </div> <div id="not-logged-in"> <topbar_agent_info_not_logged_in/> <ul class="list-unstyled list-inline no-margin"> <li class="topBarSignin"><a href="#" onclick="showGoogleOneTap(true);"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-plus-circle mr10"><circle cx="12" cy="12" r="10"></circle><line x1="12" y1="8" x2="12" y2="16"></line>
219<line x1="8" y1="12" x2="16" y2="12"></line></svg> Sign In</a></li> </ul> </div> </div> </div> <input type="hidden" id="huser_email" value=""> <input type="hidden" id="huser_first_name" value=""> <input type="hidden" id="huser_last_name" value=""> <input type="hidden" id="huser_phone" value=""> <input type="hidden" id="huser_uuid" value=""> <div id="page" class="page"><header id="premium-navigation" style="outline: currentcolor none medium; cursor: inherit;" data-selector="#premium-navigation"> <div class="main-nav"> <div class="container"> <div class="navbar-header"> <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse" style="outline: currentcolor none medium; cursor: inherit;" data-selector="a.btn, button.btn, button"> <span class="sr-only">Toggle navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> <a class="navbar-brand" href="/" style="outline: currentcolor none medium; cursor: inherit;"> <img class="img-responsive site_custom_logo_dynamic" src="https://cdn1.brivityidx.com/assets/images/agent-photos/1/3/8/13838992/24129_88f2b13dedbcb0ca.png" alt="" style="outline: currentcolor none medium; cursor: inherit;" data-selector="img"></a> </div> <div class="collapse navbar-collapse render-menu"><ul class="nav navbar-nav navbar-right"><li class="nav-item"><a class="sec-nav-link-color" href="/search">Listings</a></li><li class="nav-item dropdown"><a class="dropdown-toggle sec-nav-link-color" data-toggle="dropdown" data-hover="dropdown" data-delay="0" data-close-others="false">Buying<i class="fa fa-angle-down"></i></a><ul class="dropdown-menu"><li class="sec-nav-drop-color"><a class="sec-nav-drop-link-color" href="/buying">Buying a Home</a></li><li class="sec-nav-drop-color"><a class="sec-nav-drop-link-color" href="/financing">Financing</a></li><li class="sec-nav-drop-color"><a class="sec-nav-drop-link-color" href="/build">Building</a></li></ul><li class="nav-item dropdown"><a class="dropdown-toggle sec-nav-link-color" data-toggle="dropdown" data-hover="dropdown" data-delay="0" data-close-others="false">Selling<i class="fa fa-angle-down"></i></a><ul class="dropdown-menu"><li class="sec-nav-drop-color"><a class="sec-nav-drop-link-color" href="/selling">Selling Your Home</a></li><li class="sec-nav-drop-color"><a class="sec-nav-drop-link-color" href="/home_value">Home Value</a></li></ul><li class="nav-item dropdown"><a class="dropdown-toggle sec-nav-link-color" data-toggle="dropdown" data-hover="dropdown" data-delay="0" data-close-others="false">Rentals<i class="fa fa-angle-down"></i></a><ul class="dropdown-menu"><li class="sec-nav-drop-color"><a class="sec-nav-drop-link-color" href="/property-management">Property Management</a></li><li class="sec-nav-drop-color"><a class="sec-nav-drop-link-color" href="https://www.stoneandstorypm.com/availability">Available Rentals</a></li></ul><li class="nav-item dropdown"><a class="dropdown-toggle sec-nav-link-color" data-toggle="dropdown" data-hover="dropdown" data-delay="0" data-close-others="false">Top Areas<i class="fa fa-angle-down"></i></a><ul class="dropdown-menu"><li class="sec-nav-drop-color"><a class="sec-nav-drop-link-color" href="/search/kansas/topeka">Topeka</a></li><li class="sec-nav-drop-color"><a class="sec-nav-drop-link-color" href="/search?multi_search=Jackson%20County,%20KS&amp;multi_cat=CountyState&amp;status=1&amp;mlsId=434,319%7C321%7C145%7C452&amp;q_sort=createdAt-&amp;q_offset=0">Jackson County, KS</a></li><li class="sec-nav-drop-color"><a class="sec-nav-drop-link-color" href="/search?multi_search=Lawrence,%20KS&amp;multi_cat=CityState&amp;status=1&amp;mlsId=434,319%7C321%7C145%7C452&amp;q_sort=createdAt-&amp;q_offset=0">Lawrence</a></li><li class="sec-nav-drop-color"><a class="sec-nav-drop-link-color" href="/search?multi_search=Junction City, KS|Manhattan, KS&amp;multi_cat=CityState|CityState&amp;status=1&amp;view=no_view&amp;mlsId=434|319|321|145|452&amp;q_sort=createdAt-&amp;q_offset=0">Manhattan/Junction City</a></li><li class="sec-nav-drop-color">
219<a class="sec-nav-drop-link-color" href="/search?multi_search=Kansas City, MO|Johnson County, KS|Wyandotte, KS|Jackson, MO|Cass, MO|Platte, MO|Clay, MO|Kansas City, KS&amp;multi_cat=CityState|CountyState|CountyState|CountyState|CountyState|CountyState|CountyState|CityState&amp;status=1&amp;view=no_view&amp;mlsId=434|319|321|145|452&amp;q_sort=createdAt-&amp;q_offset=0">Kansas City Metro</a></li></ul><li class="nav-item dropdown"><a class="dropdown-toggle sec-nav-link-color" data-toggle="dropdown" data-hover="dropdown" data-delay="0" data-close-others="false">About Us<i class="fa fa-angle-down"></i></a><ul class="dropdown-menu"><li class="sec-nav-drop-color"><a class="sec-nav-drop-link-color" href="/realestateagent/search">Who We Are</a></li><li class="sec-nav-drop-color"><a class="sec-nav-drop-link-color" href="/reviews">Reviews</a></li><li class="sec-nav-drop-color"><a class="sec-nav-drop-link-color" href="/blog">Insights</a></li></ul><li class="nav-item"><a class="sec-nav-link-color" href="/connect">Connect</a></li></ul></div> </div> </div> </header> <div id="slide-out-nav" class=""> <div class="close-nav"> <svg xmlns="http://www.w3.org/2000/svg" width="30" height="30" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-x-circle"> <circle cx="12" cy="12" r="10"></circle> <line x1="15" y1="9" x2="9" y2="15"></line> <line x1="9" y1="9" x2="15" y2="15"></line> </svg> </div> <div class="render-menu"><ul class="nav navbar-nav navbar-right"><li class="nav-item"><a class="sec-nav-link-color" href="/search">Listings</a></li><li class="nav-item dropdown"><a class="dropdown-toggle sec-nav-link-color" data-toggle="dropdown" data-hover="dropdown" data-delay="0" data-close-others="false">Buying<i class="fa fa-angle-down"></i></a><ul class="dropdown-menu"><li class="sec-nav-drop-color"><a class="sec-nav-drop-link-color" href="/buying">Buying a Home</a></li><li class="sec-nav-drop-color"><a class="sec-nav-drop-link-color" href="/financing">Financing</a></li><li class="sec-nav-drop-color"><a class="sec-nav-drop-link-color" href="/build">Building</a></li></ul><li class="nav-item dropdown"><a class="dropdown-toggle sec-nav-link-color" data-toggle="dropdown" data-hover="dropdown" data-delay="0" data-close-others="false">Selling<i class="fa fa-angle-down"></i></a><ul class="dropdown-menu"><li class="sec-nav-drop-color"><a class="sec-nav-drop-link-color" href="/selling">Selling Your Home</a></li><li class="sec-nav-drop-color"><a class="sec-nav-drop-link-color" href="/home_value">Home Value</a></li></ul><li class="nav-item dropdown"><a class="dropdown-toggle sec-nav-link-color" data-toggle="dropdown" data-hover="dropdown" data-delay="0" data-close-others="false">Rentals<i class="fa fa-angle-down"></i></a><ul class="dropdown-menu"><li class="sec-nav-drop-color"><a class="sec-nav-drop-link-color" href="/property-management">Property Management</a></li><li class="sec-nav-drop-color"><a class="sec-nav-drop-link-color" href="https://www.stoneandstorypm.com/availability">Available Rentals</a></li></ul><li class="nav-item dropdown"><a class="dropdown-toggle sec-nav-link-color" data-toggle="dropdown" data-hover="dropdown" data-delay="0" data-close-others="false">Top Areas<i class="fa fa-angle-down"></i></a><ul class="dropdown-menu"><li class="sec-nav-drop-color"><a class="sec-nav-drop-link-color" href="/search/kansas/topeka">Topeka</a></li><li class="sec-nav-drop-color"><a class="sec-nav-drop-link-color" href="/search?multi_search=Jackson%20County,%20KS&amp;multi_cat=CountyState&amp;status=1&amp;mlsId=434,319%7C321%7C145%7C452&amp;q_sort=createdAt-&amp;q_offset=0">Jackson County, KS</a></li><li class="sec-nav-drop-color"><a class="sec-nav-drop-link-color" href="/search?multi_search=Lawrence,%20KS&amp;multi_cat=CityState&amp;status=1&amp;mlsId=434,319%7C321%7C145%7C452&amp;q_sort=createdAt-&amp;q_offset=0">Lawrence</a></li><li class="sec-nav-drop-color"><a class="sec-nav-drop-link-color" href="/search?multi_search=Junction City, KS|Manhattan, KS&amp;multi_cat=CityState|CityState&amp;status=1&amp;view=no_view&amp;
219mlsId=434|319|321|145|452&amp;q_sort=createdAt-&amp;q_offset=0">Manhattan/Junction City</a></li><li class="sec-nav-drop-color"><a class="sec-nav-drop-link-color" href="/search?multi_search=Kansas City, MO|Johnson County, KS|Wyandotte, KS|Jackson, MO|Cass, MO|Platte, MO|Clay, MO|Kansas City, KS&amp;multi_cat=CityState|CountyState|CountyState|CountyState|CountyState|CountyState|CountyState|CityState&amp;status=1&amp;view=no_view&amp;mlsId=434|319|321|145|452&amp;q_sort=createdAt-&amp;q_offset=0">Kansas City Metro</a></li></ul><li class="nav-item dropdown"><a class="dropdown-toggle sec-nav-link-color" data-toggle="dropdown" data-hover="dropdown" data-delay="0" data-close-others="false">About Us<i class="fa fa-angle-down"></i></a><ul class="dropdown-menu"><li class="sec-nav-drop-color"><a class="sec-nav-drop-link-color" href="/realestateagent/search">Who We Are</a></li><li class="sec-nav-drop-color"><a class="sec-nav-drop-link-color" href="/reviews">Reviews</a></li><li class="sec-nav-drop-color"><a class="sec-nav-drop-link-color" href="/blog">Insights</a></li></ul><li class="nav-item"><a class="sec-nav-link-color" href="/connect">Connect</a></li></ul></div> <ul class="social" style="outline: none; cursor: inherit;"> <li data-selector="li" style="outline: none; cursor: inherit;"><a class="btn btn-block agent_facebook_dynamic dynamic_loading dynamic_loading dynamic_loading dynamic_loading dynamic_loading dynamic_loading dynamic_loading dynamic_loading" href="" target="blank" data-selector="a.btn, button.btn, button" style="outline: none; cursor: inherit;padding: 12px 10px;"><i class="fa fa-2x fa-facebook fa-adjust" data-selector=".fa" style="outline: none; cursor: inherit;"></i></a></li> <li data-selector="li" style="outline: none; cursor: inherit;"><a class="btn btn-block agent_twitter_dynamic dynamic_loading dynamic_loading dynamic_loading dynamic_loading dynamic_loading dynamic_loading dynamic_loading dynamic_loading dynamic_loading" href="" target="blank" data-selector="a.btn, button.btn, button" style="outline: none; cursor: inherit;padding: 12px 10px;"><i class="fa fa-2x fa-twitter fa-adjust" data-selector=".fa" style="outline: none; cursor: inherit;"></i></a></li> <li data-selector="li" style="outline: none; cursor: inherit;"><a class="btn btn-block agent_instagram_dynamic dynamic_loading dynamic_loading dynamic_loading dynamic_loading dynamic_loading dynamic_loading dynamic_loading dynamic_loading" href="" target="blank" data-selector="a.btn, button.btn, button" style="outline: none; cursor: inherit;padding: 12px 10px;"><i class="fa fa-2x fa-instagram fa-adjust" data-selector=".fa" style="outline: none; cursor: inherit;"></i></a></li> <li data-selector="li" style="outline: none; cursor: inherit;"><a class="btn btn-block agent_pinterest_dynamic dynamic_loading dynamic_loading dynamic_loading dynamic_loading dynamic_loading dynamic_loading dynamic_loading dynamic_loading dynamic_loading" href="" target="blank" data-selector="a.btn, button.btn, button" style="outline: none; cursor: inherit;padding: 12px 10px;"><i class="fa fa-2x fa-pinterest fa-adjust" data-selector=".fa" style="outline: none; cursor: inherit;"></i></a></li> <li data-selector="li" style="outline: none; cursor: inherit;"><a class="btn btn-block agent_youtube_dynamic dynamic_loading dynamic_loading dynamic_loading dynamic_loading dynamic_loading dynamic_loading dynamic_loading dynamic_loading" href="" target="blank" data-selector="a.btn, button.btn, button" style="outline: none; cursor: inherit;padding: 12px 10px;"><i class="fa fa-2x fa-youtube fa-adjust" data-selector=".fa" style="outline: none; cursor: inherit;"></i></a></li> <li data-selector="li" style="outline: none; cursor: inherit;"><a class="btn btn-block agent_linkedin_dynamic dynamic_loading dynamic_loading dynamic_loading dynamic_loading dynamic_loading dynamic_loading dynamic_loading dynamic_loading dynamic_loading" href="" target="blank" data-selector="a.btn, button.btn, button" style="outline: none; cursor: inherit;padding: 12px 10px;"><i class="fa fa-2x fa-linkedin fa-adjust" data-selector=".fa" style="outline: none; cursor: inherit;"></i></a></li> </ul> </div> <div id="slide-out"> <div class="container-fluid"> <div class="row"> <div class="col-md-12"> <div class="header-flex"> <a class="navbar-brand" href="/" style="outline: none; cursor: inherit;"> <img class="img-responsive site_custom_logo" alt="Logo" src="https://cdn1.brivityidx.com/assets/images/agent-photos/1/3/8/13838992/24129_88f2b13dedbcb0ca.png" data-selector="img" style="outline: none; cursor: inherit;"></a> <div class="menu-toggle"> <svg xmlns="http://www.w3.org/2000/svg" width="30" height="30" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-menu"> <line x1="3" y1="12" x2="21" y2="12"></line> <line x1="3" y1="6" x2="21" y2="6"></line> <line x1="3" y1="18" x2="21" y2="18"></line> </svg> </div> </div> </div> </div> </div> </div> <style> 
220       
221    .center-modal {
222        display:flex;
223        justify-content: center;
224        align-items:center;
225        position:fixed;
226        background-color:rgba(0,0,0,0.4);
227        left:0;
228        top:0;
229        right:0; 
230        bottom:0;
231        z-index: 300;
232    }
233
234    .page-width-parent{
235        max-width: 1280px;
236        margin: 0 auto;
237    }
238
239
240    .property-list-map-view {
241        display:flex;
242        flex-wrap:wrap;
243        gap:16px;
244    }
245    .property-list-map-view-parent {
246        background-color: #F9F9F9;
247        padding:16px;
248        height:710px;
249        overflow:scroll;
250    }
251
252    .property-list-list-view {
253        display:flex;
254        flex-wrap:wrap;
255        gap:24px
256    }
257
258    .property-container {
259        
260        gap:24px;
261    }
262
263    .property-map-container {
264        flex:1;
265        height:710px;
266    }
267
268    .property-pagination {
269        margin-top: 26px;
270    }
271
272    .collection-saved-listings {
273        margin-bottom: 26px;
274        font-size:16px;
275        color:black;
276    }
277
278    .collection-description {
279        padding: 20px 0 18px 8px;
280    }
281
282    .my-feed-parent {
283        margin-top:32px;
284        padding-top:32px; 
285        border-top: solid 1px #C4C4C4;
286    }
287
288    .collection-description-text {
289        font-size:16px;
290        margin:0;
291        color:black;
292    }
293
294    #collections {
295        display:flex;
296        flex-wrap:wrap;
297        gap:40px 24px;
298    }
299
300    #collection-pagination{
301        margin-top: 55px
302    }
303
304    #add-listing-btn{
305        margin-bottom: 20px
306    }
307
308    @media only screen and (min-width: 1280px) {
309        .collection-page {
310            padding:48px 48px 48px 120px;
311        }
312        .my-feed-parent {
313            width:90vw;
314            max-width: 100%;
315            overflow: hidden;
316        }
317        .property-list-map-view-parent {
318            width:500px;
319        }
320        .property-container {
321                display:flex;
322        }
323    }
324
325    @media only screen and (max-width:1280px) {
326        .collection-page {
327            padding:60px 16px 16px 16px;
328        }
329        .my-feed-parent {
330            width: unset;
331        }
332        .property-container {
333                display:flex;
334                flex-direction: column-reverse;
335        }
336        .property-list-map-view {
337            flex-wrap:nowrap;
338            overflow:scroll;
339            height:280px;
340        }
341        .property-list-map-view-parent {
342            height:unset;
343            padding:0px;
344            background-color: #FFFFFF
345        }
346        .property-map-container {
347            flex:none;
348            height:446px;
349        }
350    }
351
352    @media only screen and (max-width:768px) {
353        #collections {
354            justify-content: center;
355        }
356        .property-map-container {
357            width: calc(100% + 32px);
358            margin-left: -16px;
359        }
360        .property-list-map-view {
361            height:250px;
362        }
363    }
364
365</style> 
365<script>
366    window.addEventListener("load", () => {
367    const key = localStorage.getItem('authorization');
368     
369        if( !key) {
370            $("#sign-up-modal").modal('show');
371
372            $("#sign-up-modal").on("hidden.bs.modal", function () {
373                location.reload();
374            });
375        }
376        else{
377
378            let myPortalPage = document.getElementById('myportal-page');
379            myPortalPage.style.display = "block";
380
381            window.location.hash = ""
382
383            function isGuid(value) {    
384                var regex = /[a-f0-9]{8}(?:-[a-f0-9]{4}){3}-[a-f0-9]{12}/i;
385                var match = regex.exec(value);
386                return match != null;
387            }
388
389            let lastUrlItem = window.location.href.substring(window.location.href.lastIndexOf('/') + 1)
390            let showCollectionByUUID = false
391
392            if (isGuid(lastUrlItem)) {
393              showCollectionByUUID = true
394            } 
395
396          
397            class logger extends Collections.BaseLogger {
398                log(e) {
399                    console.log(e);
400                }
401            }
402
403
404            class Pubsub {
405                static events = {};
406                constructor() {
407                    //this.events = {};
408                }
409
410                static subscription (eventName, func) {
411                    return {
412                        subscribe: () => {
413                            if (this.events[eventName]) {
414                                this.events[eventName].push(func);
415                            } else {
416                                this.events[eventName] = [func];
417                            }
418                        },
419                        unsubscribe: () => {
420                            if(this.events[eventName]){
421                                this.events[eventName] = this.events[eventName].filter((subscriber) => subscriber !== func);
422                            }
423                        }
424                    }
425                } 
426
427                static publish(eventName, ...args) {
428                    const funcs = this.events[eventName];
429                    if (Array.isArray(funcs)) {
430                        funcs.forEach((func) => {
431                            func.apply(null, args);
432                        });
433                    }
434                }
435            }
436
437            class CollectionCard  {
438                constructor(collection, count){
439                    
440                    this.element = document.createElement(`place-collectioncard`);
441                    this.collection = collection
442                    let _this = this;
443                    let menuOpen = false;
444                    var images = [];
445                
446                    for (let i = 0; i < collection?.propertiesImages?.length; i++) {
447                        images.push(collection.propertiesImages[i].mainPhoto);
448                    }
449                
450                    this.element.setAttribute("appearance", "regular");
451                    this.element.setAttribute("image", images);
452                    this.element.setAttribute("num_properties", collection?.totalListings ?? 0)
453                    this.element.setAttribute("title", collection.collectionName);
454                    this.element.setAttribute("description", collection.collectionDescription ? collection.collectionDescription : collection.description ? collection.description : "");
455                    this.element.setAttribute("creator", "");
456                    this.element.setAttribute("disable_dropdown", "false");
457                    this.element.setAttribute("style", "height: 254px");
458                    this.element.setAttribute('z_index', count);
459                    this.element.setAttribute("show_menu", "false");
460                    this.element.setAttribute("id", collection.collectionUUID);
461                    this.element.setAttribute("container_styles", "w-[300px]");
462
463                    const collectionUUID = collection.collectionUUID;
464
465                    this.element.addEventListener(`on_menu_item_pressed`, (e) => {
466                        let menuItem = e.detail
467                        Pubsub.publish('collection_card_menu_item_pressed', {collection,menuItem});
468                    });
469
470                    this.element.addEventListener('on_search_pressed', (e) => {
471                        if (e.target.tagName != "svg" && e.target.tagName != "path") {
472                            window.open('../../search.php', '_blank');
473                            e.stopPropagation();
474                        }
475                    });
476                    
477                    this.element.addEventListener(`click`, (e) => {
478                        if (e.target.tagName != "svg" && e.target.tagName != "path" && !menuOpen) {
479                             Pubsub.publish('collection_card_pressed', {collection:_this.collection,e});
480                            e.stopPropagation();
481                        }
482                    });
483
484                    this.element.addEventListener(`on_menu_open`, (e) => {  
485                        if (this.element.getAttribute("title") === "Favorites") {
486                            this.element.setAttribute("disable_menu", "true");
487                        }
488
489                        menuOpen = e.detail;
490                        this.element.setAttribute("show_menu", menuOpen);
491                    });
492                }
493            }
494
495            class CollectionSection  {
496
497              
498                collectionSection = document.getElementById('collection-section')
499                collections = document.getElementById('collections')
500
501                addCollectionCard = (collection, count) => {
502                    const collectionCard = new CollectionCard(collection, count);
503
504
505                   
506                
507                   this.collections.append(collectionCard.element);
508                
509                } 
510
511                show = () => {
512                    this.collectionSection.style.display = 'block'
513                }
514
515                hide = () => {
516                    this.collectionSection.style.display = 'none'
517                }
518            }
519
520            class PropertyCard {
521                constructor(collectionUUID,property){
522                    
523                    let _this = this;
524                    this.element = document.createElement(`place-propertycard`);
525                    let menuOpen = false;
526                    this.property = property;
527 
528                    this.element.setAttribute("id", property.blossorId)
529                    this.element.setAttribute("display_menu", "true");
530                    this.element.setAttribute("show_menu", "false");
531                    this.element.setAttribute("items", '[{"icon":"share-2","text":"Share Property"},{"icon":"layers","text":"Copy to Collection"},{"icon":"trash","text":"Remove from Collection"}]');
532                    
533                    this.element.setAttribute('appearance','small')
534                    this.element.setAttribute('layout_width', '300')
535                    this.element.setAttribute('display_tag', 'true')
536                    this.element.setAttribute('display_favorite', 'true')
537                    this.element.setAttribute('mls',`{
538                        "status":"${property.statusText}", 
539                        "favorite":"true", 
540                        "image":[{"uri":"${property?.photos[0]?.url}"}], 
541                        "price":"${property?.price}",
542                        "address":"${property?.address?.street}",
543                        "state":"${property?.address?.state}", 
544                        "city":"${property?.address?.city}", 
545                        "postalCode":"${property?.address?.zip}", 
546                        "beds":"${property?.bedrooms}", 
547                        "baths":"${property?.totalBaths}",
548                        "sqft":"${property?.sqFeet}"
549                    }`)
550                    this.element.setAttribute('on_hover', 'true')
551
552                    this.element.addEventListener('mouseenter', (e) => {
553                        Pubsub.publish('property_card_mouseenter', property);
554                    })
555
556                    this.element.addEventListener('mouseleave', (e) => {
557                        Pubsub.publish('property_card_mouseleave', property);
558                    })
559
560                    this.element.addEventListener(`on_menu_item_pressed`, (e) => {
561                        let menuItem = e.detail
562                        let propertyCollectionUUID = property.propertyCollectionUUID
563                        let url = this.getPropertyUrl(this.property);
564                        property.searchUrl = url;
565                        Pubsub.publish('property_card_menu_item_pressed', {property,collectionUUID,propertyCollectionUUID,menuItem, url});
566                    });
567
568                    this.element.addEventListener(`on_menu_open`, (e) => {    
569                        menuOpen = e.detail;
570                       this.element.setAttribute("show_menu", menuOpen);
571                    });
572
573                    this.element.addEventListener('click', (e) => {
574                        if (e.target.tagName != "svg" && e.target.tagName != "path" && !menuOpen) {
575                            let state = _this.property.address.state;
576                            let city = _this.slugify(_this.property.address.city);
577                            let zip = _this.property.address.zip
578                            let address = _this.slugify(_this.property.address.street);
579                            let blossorId = _this.property.blossorId;
580                            let url = this.getPropertyUrl(property);
581                            window.open(`../../${url}`, '_blank');
582                        }        
583                    });
584
585                    this.element.addEventListener('on_favorite_press', (e) => {
586                        let propertyCollectionUUID = property.propertyCollectionUUID;
587                        Pubsub.publish('delete_property_modal_pressed', {collectionUUID, propertyCollectionUUID});
588                    });
589
590                }
591
592                getPropertyUrl = (property) => {
593                    let state = property.address.state;
594                    let city = this.slugify(property.address.city);
595                    let zip = property.address.zip
596                    let address = this.slugify(property.address.street);
597                    let blossorId = property.blossorId;
598                    return `homes-for-sale/${state}/${city}/${zip}/${address}/bid-${blossorId}`;
599                }
600
601                slugify(text) {
602                     // replace non letter or digits by -
603                    text = text.replace(/[^\pL\d]+~u/g, '_');
604                    // transliterate
605                    text = text.normalize('NFKD').replace(/[\u0300-\u036F]/g,'')
606                    // remove unwanted characters
607                    text = text.replace(/[^_\w]+/g, '_');
608                    // trim
609                    text = text.trim();
610                    // remove duplicate -
611                    text = text.replace(/_+/g, '-');
612                    // lowercase
613                    text = text.toLowerCase();
614                    if (!text) {
615                        return 'n-a';
616                    }
617                    return text
618                }
619            }
620
621            let dateNow = new Date();
622            dateNow.setDate(dateNow.getDate()-7);
623            dateNow.setHours(dateNow.getHours());
624            dateNow.setMinutes(dateNow.getMinutes());
625            dateNow.setSeconds(dateNow.getSeconds());
626            const sevenDaysAgo = dateNow.getTime();
627
628            class PropertySection   {
629                propertySection = document.getElementById('property-section')
630                listIcon = document.getElementById('property-list-icon')
631                mapIcon = document.getElementById('property-map-icon')
632                propertyHeader = document.getElementById('property-header')
633                propertyList = document.getElementById("property-list")
634                propertyListParent = document.getElementById("property-list-parent")
635                propertyMap = document.getElementById('property-map')
636                selectedView = 'map'
637
638                collectionProperties = []
639
640                properties = []
641            
642
643                constructor() {
644                    this.listIcon.addEventListener('click', () => {
645                        this.setView('list')
646                    })
647
648                    this.mapIcon.addEventListener('click', () => {
649                        this.setView('map')
650                    })
651                }
652
653                show = (collectionUUID, collectionProperties) => {
654                    this.propertySection.style.display = 'block'
655                    this.collectionProperties = collectionProperties
656                    this.collectionUUID = collectionUUID
657                    
658                    this.propertyList.innerHTML = ''
659                    count = 100;
660                     
661                    this.collectionProperties?.data?.properties?.forEach((property) => {
662                         count--
663                        this.addPropertyCard(property,collectionUUID, count)
664                    });
665                }
666
667                hide = () => {
668                    this.propertySection.style.display = 'none'
669                }
670
671                setPropertyCardWidth = () => {
672                    let width;
673                    let imageHeight;
674                    let windowWidth = window.innerWidth
675                    if(this.selectedView == 'map') {
676                        if(windowWidth > 1279) {
677                            width = `220`;
678                            imageHeight = `154`;
679                        } else if(windowWidth > 768) {
680                            width = `325`;
681                            imageHeight = `184`;
682                        } else{
683                            width = `244`;
684                            imageHeight = `154`;                            
685                        }
686                    } 
687                    else {
688                        if(windowWidth > 1440 ){
689                            width = `300`;
690                            imageHeight = `184`;
691                        }
692                        else if(windowWidth > 1279) {
693                            width = `260`;
694                            imageHeight = `152`;
695                        } else if(windowWidth > 768) {
696                            width = `218`;
697                            imageHeight = `152`;
698                        } else{
699                            width = `288`;
700                            imageHeight = `184`;
701                        }
702                    }
703
704                    let propertyCards = document.querySelectorAll('place-propertycard')
705                    propertyCards.forEach((propertyCard) => {
706                        propertyCard.setAttribute('layout_width', width)
707                        propertyCard.setAttribute('image_height', imageHeight)                    
708                    })
709                }
710
711                setView = (view) => {
712                    this.selectedView = view
713                    if (view == 'list') {
714                        this.listIcon.setAttribute('stroke', 'black')
715                        this.mapIcon.setAttribute('stroke', 'gray')
716
717                        this.propertyMap.style.display = 'none'
718                        this.propertyList.classList.add('property-list-list-view')
719                        this.propertyList.classList.remove('property-list-map-view')
720                        this.propertyListParent.classList.remove('property-list-map-view-parent')
721
722                        Pubsub.publish('property_section_show_list_view', this.collectionProperties?.data?.properties);
723                    } else {
724                        this.listIcon.setAttribute('stroke', 'gray')
725                        this.mapIcon.setAttribute('stroke', 'black')
726
727                        this.propertyMap.style.display = 'block'
728                        this.propertyList.classList.remove('property-list-list-view')
729                        this.propertyList.classList.add('property-list-map-view')
730                        this.propertyListParent.classList.add('property-list-map-view-parent')
731
732                        Pubsub.publish('property_section_show_map_view', this.collectionProperties?.data?.properties);
733                    }
734
735                    this.setPropertyCardWidth();
736                }
737
738                scrollIntoView = (id) => {
739                    let propertyCard = document.getElementById(id);
740                    propertyCard.scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'start' })
741                }
742
743                addPropertyCard = (property, collectionUUID, count) => {
744                    
745                    var propertyCardWrapperElement = document.createElement(`div`)
746                    propertyCardWrapperElement.setAttribute('style', `z-index:${count}`)
747                     propertyCardWrapperElement.setAttribute('class', 'property-card-wrapper')
748                     propertyCardWrapperElement.setAttribute("id", property.propertyCollectionUUID);
749                     
750                    const propertyCard = new PropertyCard(collectionUUID,property);
751                    var propertyCardElement = propertyCard.element;
752                
753                    propertyCardWrapperElement.append(propertyCardElement)
754                    
755                    this.propertyList.append(propertyCardWrapperElement)
756                
757                }
758                
759            }
760
761
762            class PageSubHeader{
763                constructor() {
764                    
765                    this.element = document.querySelector('place-pagesubheader')
766
767                    this.element.addEventListener('button_on_press', (e) => {
768                        Pubsub.publish('create_new_collection_pressed', e)
769                    })
770
771                    this.element.addEventListener('top_header_on_press', (e) => {
772                        Pubsub.publish('top_header_back_pressed', e)
773                    })
774
775                     this.element.addEventListener('on_menu_item_pressed', (e) => {
776                        Pubsub.publish('top_header_menu_item_pressed', e.detail)
777                    })
778
779                    this.element.addEventListener('secondary_button_on_press', (e) => {
780                        window.open('../../search.php', '_blank')
781                    })
782                }
783
784                setTitle(title) {
785                    this.element.setAttribute('title', title)
786                }
787
788                setTopHeaderTitle(title){
789                    this.element.setAttribute('top_header_title', title)
790                }
791
792                showTopHeader(){
793                    this.element.setAttribute('show_top_header', true)
794                }
795
796                hideTopHeader(){
797                    this.element.setAttribute('show_top_header', false)
798                }
799
800                showPrimaryButton() {
801                    this.element.setAttribute('show_button', true)
802                }
803
804                hidePrimaryButton() {
805                    this.element.setAttribute('show_button', false)
806                }
807
808                showSecondaryButton(){
809                    this.element.setAttribute('show_secondary_button', true)
810                }
811
812                hideSecondaryButton(){
813                    this.element.setAttribute('show_secondary_button', false)
814                }
815
816                showMenuButton() {
817                    this.element.setAttribute('show_menu_button', true)
818                }
819
820                hideMenuButton() {
821                    this.element.setAttribute('show_menu_button', false)
822                }
823            }
824
825            class CollectionModal  {
826                
827                constructor() {
828                    
829                    let _this = this;
830                    this.element = document.querySelector('place-collectionpopup');
831                    this.collectionUUID = 0;
832
833                    this.element.addEventListener("on_close_press", (e) => {
834                        _this.hide();
835                    });
836
837                    this.element.addEventListener("on_save_press", (e) => {
838                        this.showError(false);
839                        e.detail.collectionUUID = this.collectionUUID
840                         e.detail.type = this.isEditingCollection ? 'edit' : 'save'
841                        Pubsub.publish('on_new_collection_saved', e.detail);
842                    });
843                    
844                }
845
846                setName(name) {
847                    this.element.setAttribute('name_value', name)
848                }
849
850                setDescription(description) {
851                    this.element.setAttribute('description_value', description ? description : "")
852                }
853
854                showError(error) {
855                    this.element.setAttribute('show_error', error)
856                }
857
858                 show(collectionUUID, isEditingCollection) {
859                    this.isEditingCollection = isEditingCollection;
860                    if(collectionUUID){
861                        this.collectionUUID = collectionUUID;
862                    }
863                    this.element.setAttribute('style', 'display:flex')
864                }
865
866                hide() {
867                    this.element.setAttribute('style', 'display:none');
868
869                    this.showError(false)
870
871                    // terrible hack.. only way i could get it to respond to prop changes
872                    // to clear the input fields after closing the modal
873                    this.setName('none')
874                    this.setDescription('none')
875                    setTimeout(() => {
876                        this.setName('')
877                        this.setDescription('')
878                    }, 100);
879                }
880            }
881
882            class CollectionCreatedModal  {
883                constructor() {
884                    
885                   
886                    this.collection = ""
887                    this.element = document.getElementById('collection-created-modal');
888                    let _this = this;
889
890                    this.element.addEventListener("on_primary_press", (e) => {
891                        this.hide();
892                        window.location.href = '../../search.php'
893                    });
894
895                    this.element.addEventListener("on_tertiary_press", (e) => {
896                        _this.hide();
897                        Pubsub.publish('collection_created_modal_view_collection_pressed', _this.collection);
898                    });
899
900                    this.element.addEventListener("on_close_press", (e) => {
901                        _this.hide();
902                    });
903
904                    this.element.setAttribute("stacked_buttons", true)
905                    this.element.setAttribute("primary_button_text", "Search Listings")
906                    this.element.setAttribute("tertiary_button_text", "View Collection")
907                }
908
909                show(collection) {
910                    if(collection){
911                        this.collection = collection;
912                    }
913                    this.element.setAttribute('style', 'display:flex')
914                }
915
916                hide() {
917                    this.element.setAttribute('style', 'display:none');
918                }
919            }
920
921            class EditCollectionModal  {
922                constructor() {
923                    
924                   
925                    this.collection = ""
926                    this.element = document.getElementById('edit-collection-modal');
927                    let _this = this;
928
929                    this.element.addEventListener("on_primary_press", (e) => {
930                        _this.hide();
931                        
932                    });
933
934                    
935
936                    this.element.addEventListener("on_close_press", (e) => {
937                        _this.hide();
938                    });
939                }
940
941                show() {
942                    
943                    this.element.setAttribute('style', 'display:flex')
944                }
945
946                hide() {
947                    this.element.setAttribute('style', 'display:none');
948                }
949            }
950
951            class DeleteCollectionModal {
952                constructor() {
953                   
954                   
955                    this.collection = ""
956                    this.element = document.getElementById('delete-collection-modal');
957                    let _this = this;
958
959                    this.element.addEventListener("on_primary_press", (e) => {
960                        _this.hide();
961                        Pubsub.publish('delete_collection_modal_delete_pressed', _this.collection);
962                    });
963
964                    this.element.addEventListener("on_tertiary_press", (e) => {
965                        this.hide();
966                    });
967
968                    this.element.addEventListener("on_close_press", (e) => {
969                        _this.hide();
970                    });
971                }
972
973                show(collection) {
974                    if(collection){
975                        this.collection = collection;
976                    }
977                    this.element.setAttribute('style', 'display:flex')
978                }
979
980                hide() {
981                    this.element.setAttribute('style', 'display:none');
982                }
983            }
984
985             class ShareSavedPropertyModal {
986                constructor() {
987                    let _this = this;
988                    this.savedProperty = {}
989                    this.element = document.getElementById('share-saved-property-modal');
990
991                    this.element.addEventListener("on_primary_press", (e) => {
992
993                       
994
995                        navigator.clipboard.writeText(this.link)
996                        _this.hide();
997                         Pubsub.publish('share_saved_property_modal_share_pressed');
998                        
999                    });
1000
1001                    this.element.addEventListener("on_close_press", (e) => {
1002                        _this.hide();
1003                    });
1004                }
1005
1006                show = (savedProperty) => {
1007                
1008                    
1009                    this.savedProperty = savedProperty;
1010                    
1011                    this.link = document.location.origin + "/" +  this.savedProperty.searchUrl
1012                    this.element.setAttribute('share_link_text', this.link)
1013                    this.element.setAttribute('style', 'display:flex')
1014                }
1015
1016                hide = () => {
1017                    this.element.setAttribute('style', 'display:none');
1018                }
1019            }
1020
1021            class DeletePropertyModal  {
1022                constructor() {
1023                    
1024                   
1025                    this.collectionUUID = ""
1026                    this.propertyCollectionUUID = ""
1027                    this.element = document.getElementById('delete-property-modal');
1028                    let _this = this;
1029
1030                    this.element.addEventListener("on_primary_press", (e) => {
1031                        _this.hide();
1032                        Pubsub.publish('delete_property_modal_delete_pressed', {"collectionUUID":_this.collectionUUID, "propertyCollectionUUID":_this.propertyCollectionUUID});
1033                    });
1034
1035                    this.element.addEventListener("on_tertiary_press", (e) => {
1036                        this.hide();
1037                    });
1038
1039                    this.element.addEventListener("on_close_press", (e) => {
1040                        _this.hide();
1041                    });
1042                }
1043
1044                show(collectionUUID, propertyCollectionUUID) {
1045                    if(collectionUUID){
1046                        this.collectionUUID = collectionUUID;
1047                    }
1048                    if(propertyCollectionUUID){
1049                        this.propertyCollectionUUID = propertyCollectionUUID;
1050                    }
1051                    this.element.setAttribute('style', 'display:flex')
1052                }
1053
1054                hide() {
1055                    this.element.setAttribute('style', 'display:none');
1056                }
1057            }
1058
1059            class CopyPropertyToCollectionModal {
1060                constructor(){
1061                     
1062                    this.element = document.querySelector('place-copycollectionmodal');
1063                    this.collections = [];
1064                    this.property = {}
1065                    this.isVisible = false;
1066
1067                   
1068
1069                    this.element.addEventListener('close_button', (e) => {
1070                        this.hide();
1071                    });
1072
1073                    this.element.addEventListener('cancel_button', (e) => {
1074                        this.hide();
1075                    });
1076
1077                    this.element.addEventListener('on_save', (e) => {
1078                        Pubsub.publish('copy_property_to_collection_modal_save_pressed', {'collectionUUID':e.detail, 'property':this.property});
1079                    });
1080
1081                    this.element.addEventListener('set_selected_collection', (e) => {
1082                        console.log('set_selected_collection', e)
1083                    });
1084
1085                    this.element.addEventListener('on_link_press', (e) => {
1086                        Pubsub.publish('show_new_collection_modal');
1087                    });
1088
1089                }
1090
1091                getCollectionData(){
1092                    return JSON.parse(this.element.getAttribute("collections"));
1093                }
1094
1095                setCollectionData(collections){
1096                    this.element.setAttribute('collections', JSON.stringify(collections))
1097                }
1098
1099                getCollectionList(collections, currentCollectionName) {
1100                    let collectionList = [];
1101                    collections.forEach(collection => {
1102                        if (currentCollectionName && (collection.collectionName == currentCollectionName)) return;
1103                        collectionList.push({
1104                            collection_title: collection.collectionName,
1105                            id: collection.collectionUUID,
1106                            propertiesImages: collection?.propertiesImages?.length > 0 ? collection?.propertiesImages : [],
1107                        })
1108                    });
1109                    this.setCollectionData(collectionList);
1110
1111                }
1112
1113                setIsAddingToCollection(isAddingToCollection){
1114                    this.element.setAttribute('is_add_to_collection', isAddingToCollection);
1115                }
1116
1117                show(property) {
1118                          
1119                    if(property){
1120                        this.property = property;
1121                    }
1122
1123                    this.isVisible = true;
1124
1125                    let mls = {
1126                        status: property?.status || property?.standardStatus || "",
1127                        image: this.getPropertyImageUrl(property),
1128                        price: property?.price || "0",
1129                        address: ( typeof property?.address === "string") ? property?.address : (property?.address?.street || property?.streetAddress || ""),
1130                        state: property?.state || property?.address?.state || "",
1131                        city: property?.city || property?.address?.city || "",
1132                        postal_code: property?.postal_code || property?.address?.zip || "",
1133                        beds: property?.beds || property?.bedrooms || 0,
1134                        baths: property?.baths || property?.fullBaths || property?.bathsTotalDecimal || 0,
1135                        sqft: property?.sqft || property?.squareFeet || property?.sqFeet || 0,
1136                        creator: property?.creator || "",
1137                    }
1138
1139                    this.element.setAttribute('mls', JSON.stringify(mls))
1140                    this.element.setAttribute('image_url',mls?.image || "")
1141                    this.element.setAttribute('style', 'display:flex')
1142                }
1143
1144                getPropertyImageUrl(property){
1145                   // property?.image[0]?.uri || property?.photos[0]?.url || "",
1146
1147                    if(property.image && property.image.length > 0){
1148                       return property.image[0].uri
1149                    } else if (property.photos && property.photos.length > 0){
1150                       return property.photos[0].url
1151                    } else {
1152                        return ""
1153                    }
1154                }
1155
1156                hide() {
1157                    this.isVisible = false;
1158                    this.element.setAttribute('style', 'display:none');
1159                }
1160            }
1161
1162            class CollectionPaging {
1163                constructor(collectionsPerPage){
1164                   
1165                    
1166                    this.element = document.getElementById('collection-pagination');
1167                    this.collectionsPerPage = collectionsPerPage;
1168
1169                    this.element.addEventListener('page_changed', (e) => {
1170                       Pubsub.publish('collection_page_changed', e.detail);
1171                    });
1172                }
1173
1174                setPageCount(pageCount){
1175                    this.element.setAttribute('page_count', pageCount);
1176                }
1177
1178                show() {
1179                    this.element.setAttribute('style', 'display:flex')
1180                }
1181
1182                hide() {
1183                    this.element.setAttribute('style', 'display:none')
1184                }
1185            }
1186
1187            class PropertyPaging  {
1188                constructor(propertiesPerPage){
1189                    
1190                    
1191                    this.element = document.getElementById('property-pagination');
1192                    this.propertiesPerPage = propertiesPerPage;
1193
1194                    this.element.addEventListener('page_changed', (e) => {
1195                        Pubsub.publish('property_page_changed', e.detail);
1196                    });
1197                }
1198
1199                setPageCount(pageCount){
1200                    this.element.setAttribute('page_count', pageCount);
1201                }
1202
1203                setCurrentPage(currentPage){
1204                    this.element.setAttribute('current_page', currentPage);
1205                }
1206
1207                show() {
1208                    this.element.setAttribute('style', 'display:flex')
1209                }
1210
1211                hide() {
1212                    this.element.setAttribute('style', 'display:none')
1213                }
1214            }
1215
1216            class NewCollectionBlock {
1217                constructor(){
1218                    
1219                    this.element = document.getElementById('new-collection-block');
1220
1221                    this.element.addEventListener('on_main_press', (e) => {
1222                        Pubsub.publish('new_collection_block_create_collection_pressed', e.detail);
1223                    });
1224                }
1225                show(collectionUUID, propertyCollectionUUID) {
1226                    this.element.setAttribute('style', 'display:flex')
1227                }
1228
1229                hide() {
1230                    this.element.setAttribute('style', 'display:none');
1231                }
1232            }
1233
1234            class AddListingsBlock {
1235                constructor() {
1236                   
1237                    this.element = document.getElementById('add-listings-block');
1238
1239                    this.element.addEventListener('on_main_press', (e) => {
1240                        window.open('../../search.php', '_blank')
1241                    });
1242
1243                   this.element.addEventListener("on_tertiary_press", (e) => {
1244                         
1245                    });
1246                }
1247
1248                show() {
1249                    this.element.setAttribute('style', 'display:flex')
1250                }
1251
1252                hide() {
1253                    this.element.setAttribute('style', 'display:none');
1254                }
1255            }
1256
1257            class MyFeed {
1258                constructor(blueroofMiddlewareApi, collectionsService) {
1259                    this.blueroofMiddlewareApi = blueroofMiddlewareApi;
1260                    this.collectionsService = collectionsService;
1261                    this.element = document.querySelector('place-myfeedblock');
1262
1263                    this.element.addEventListener('on_menu_open', (e) => {
1264                        this.element.setAttribute('show_menu', e.detail.e);
1265                        this.element.setAttribute('show_menu_index', e.detail.index);
1266                    });
1267
1268                    this.element.addEventListener('on_view_all_pressed', (e) => {
1269                        window.open('../../search.php', '_blank');
1270                    });
1271
1272                    this.element.addEventListener('on_add_collection', (e) => {
1273                        
1274                        let property = e.detail;
1275                        Pubsub.publish('my_feed_add_collection_pressed', {property});
1276
1277                    });
1278
1279                    this.element.addEventListener('on_share_pressed', (e) => {
1280                    
1281                        let property = e.detail
1282                    
1283                        let url = this.getPropertyUrl(property);
1284                        property.searchUrl = url;
1285                        
1286                        Pubsub.publish('my_feed_share_pressed', {property});
1287                    });
1288
1289                    this.element.addEventListener('on_favorite_pressed', (e) => {
1290                        let property = e.detail.property;
1291                        let isAddingFavorite = e.detail.isAddingFavorite;
1292
1293                        if(isAddingFavorite){
1294                            Pubsub.publish('my_feed_on_favorite_pressed', {property});
1295                        }
1296                        else{
1297                            Pubsub.publish('my_feed_on_unfavorite_pressed', {property});
1298                        }
1299                    });
1300
1301                    this.element.addEventListener('on_property_pressed', (e) => {
1302                        let property = e.detail
1303                    
1304                        let url = this.getPropertyUrl(property);
1305                        property.searchUrl = url;
1306                        window.open('../../' + url, '_blank');
1307                    });
1308                
1309
1310                    this.blueroofMiddlewareApi.getMyFeed().then((data) => {
1311
1312                        let myFeedBlossorIds = data.map(property => property.blossorId);
1313                        
1314
1315                        this.collectionsService.checkIfInCollection(myFeedBlossorIds).then((propertiesInCollections) => {
1316
1317                            let feed = []
1318                            data.forEach((item) => {
1319                            feed.push({
1320                                image: [
1321                                    {
1322                                        title: "",
1323                                        id: 0,
1324                                        uri: item?.photos[0].url,
1325                                    },
1326                                    ],
1327                                    price: item?.price,
1328                                    favorite: propertiesInCollections?.data[item?.blossorId] != null || false,
1329                                    address: item?.streetAddress,
1330                                    city: item?.city,
1331                                    state: item?.state,
1332                                    postal_code: item?.postalCode,
1333                                    beds: item?.bedrooms,
1334                                    status: item?.standardStatus,
1335                                    baths: item?.bathsTotalDecimal,
1336                                    sqft: item?.squareFeet,
1337                                    creator: "",
1338                                    mls_price_history: item?.history[item.history.length-1]?.price,
1339                                    blossorId: item?.blossorId,
1340                                    open_house : item?.openhouses?.length > 0 ? true : false,
1341                                    open_house_date : item?.openhouses[0]?.startDate,
1342                                    open_house_end_time : item?.openhouses[0]?.endDate,
1343                                    property_created_at : item?.listDate,
1344                                    lastStatusChangeDate : item?.lastStatusChangeDate,
1345                                })
1346                            })
1347
1348                            if(feed && feed?.length > 0){
1349                                this.show();
1350                                this.element.setAttribute('mls_data', JSON.stringify(feed));
1351                            }
1352                        });
1353                    });
1354                    
1355                }
1356
1357                getPropertyUrl = (property) => {
1358                    let state = property.state;
1359                    let city = this.slugify(property.city);
1360                    let zip = property.postal_code
1361                    let address = this.slugify(property.address);
1362                    let blossorId = property.blossorId;
1363                    return `homes-for-sale/${state}/${city}/${zip}/${address}/bid-${blossorId}`;
1364                }
1365
1366                slugify(text) {
1367                    // replace non letter or digits by -
1368                    text = text.replace(/[^\pL\d]+~u/g, '_');
1369                    // transliterate
1370                    text = text.normalize('NFKD').replace(/[\u0300-\u036F]/g,'')
1371                    // remove unwanted characters
1372                    text = text.replace(/[^_\w]+/g, '_');
1373                    // trim
1374                    text = text.trim();
1375                    // remove duplicate -
1376                    text = text.replace(/_+/g, '-');
1377                    // lowercase
1378                    text = text.toLowerCase();
1379                    if (!text) {
1380                        return 'n-a';
1381                    }
1382                    return text
1383                }
1384
1385                getMlsData = () => {
1386                    return JSON.parse(this.element.getAttribute('mls_data'));
1387                }
1388
1389                setMlsData = (data) => {
1390                    this.element.setAttribute('mls_data', JSON.stringify(data));
1391                }
1392
1393                show() {
1394                    this.element.setAttribute('style', 'display:flex')
1395                }
1396
1397                hide() {
1398                    this.element.setAttribute('style', 'display:none')
1399                }
1400            }
1401
1402            class BlueroofMiddlewareApi {
1403                constructor() {
1404                    this.baseUrl = "https://brivity-home-middleware.production.brivity.com";
1405                    this.apiKey = localStorage.getItem('authorization');
1406                }
1407
1408                getMyFeed = async () => {
1409                     const response = await fetch(`${this.baseUrl}/listings/voltron`, {
1410                        method: 'POST',
1411                        headers: {
1412                            'Content-Type': 'application/json',
1413                            'Authorization': `${this.apiKey}`
1414                        },
1415                        body: JSON.stringify([])
1416                    });
1417
1418                    const data = await response.json();
1419                    return data;
1420                }
1421                
1422                getLeadBasicInfo = async () => {
1423                    const response = await fetch(`${this.baseUrl}/blueroofleads/basicinfo`, {
1424                        method: 'GET',
1425                        headers: {
1426                            'Content-Type': 'application/json',
1427                            'Authorization': `${this.apiKey}`
1428                        },
1429                       
1430                    });
1431
1432                    const data = await response.json();
1433                    return data;
1434                }
1435
1436                getAgentProfile = async (brivityUserId) => {
1437                    const response = await fetch(`${this.baseUrl}/blueroofagents/profile`, {
1438                        method: 'POST',
1439                        headers: {
1440                            'Content-Type': 'application/json',
1441                            'Authorization': `${this.apiKey}`
1442                        },
1443                        body: `{"brivityUserId": ${brivityUserId}}`
1444                       
1445                    });
1446
1447                    const data = await response.json();
1448                    return data;
1449                }
1450
1451            }
1452
1453            class Map {
1454                constructor(){
1455                    this.element = document.querySelector('place-map');
1456                    this.properties = [];
1457
1458                    this.element.addEventListener('on_marker_clicked', (e) => {
1459                        Pubsub.publish('map_marker_clicked', e.detail.id)
1460                    });
1461                }
1462
1463                setMarkers = (properties) => {
1464                    let markers = [];
1465                    let color = 'black'
1466
1467                    let dateNow = new Date();
1468                    dateNow.setDate(dateNow.getDate()-7);
1469                    dateNow.setHours(dateNow.getHours());
1470                    dateNow.setMinutes(dateNow.getMinutes());
1471                    dateNow.setSeconds(dateNow.getSeconds());
1472                    const sevenDaysAgo = dateNow.getTime();
1473
1474                    this.properties = properties;
1475                    properties?.forEach(property => {
1476
1477                        if(property.statusText == 'Active'){
1478                            color = '#1FA6E8'
1479                        }else if(property.statusText == 'Pending'){
1480                            color = '#FFC82C'
1481                        }else if(property.statusText == 'Sold'){
1482                            color = '#FF7343'
1483                        }
1484
1485                        let listDate = new Date(property.listDate);
1486
1487
1488                        if(listDate.getTime() > sevenDaysAgo){
1489                            color = '#24D0BC'
1490                        }
1491
1492                        markers.push({
1493                            id: `${property.blossorId}`,
1494                            location: property.location,
1495                            price: property.price,
1496                            color : color
1497                        })
1498                    });
1499
1500                    this.element.setAttribute('markers', JSON.stringify(markers));
1501                }
1502
1503                setSelectedMarker = (property) => {
1504                    let markerIndex = this.properties.findIndex((p) => p.blossorId == property.blossorId)
1505                    if(markerIndex > -1){
1506                        this.element.setAttribute('selected_property_index', markerIndex);
1507                    }
1508                }
1509
1510                clearSelectedMarker = () => {
1511                    this.element.setAttribute('selected_property_index', -1);
1512                }
1513
1514            }
1515
1516            class SavedListings {
1517                constructor(){
1518                    this.element = document.getElementById('collection-saved-listings');
1519                }
1520
1521                setCount(count) {
1522                    this.element.innerText = `Saved Listings (${count})`;
1523                }
1524
1525                hide() {
1526                    this.element.style.display = `none`;
1527                }
1528                show() {
1529                    this.element.style.display = `block`;
1530                }
1531            }
1532        
1533            class AddListingBtn {
1534                constructor(){
1535                    this.element = document.getElementById('add-listing-btn');
1536                    this.element.setAttribute('button_style', JSON.stringify({paddingLeft: '0px'}));
1537                    this.element.addEventListener('on_press', (e) => {
1538                        window.open('../../search.php', '_blank')
1539                    })
1540                }
1541
1542                hide() {
1543                    this.element.style.display = `none`;
1544                }
1545                show() {
1546                    this.element.style.display = `block`;
1547                }
1548            }
1549
1550            class Page {
1551                constructor(blueroofMiddlewareApi) {
1552                    this.selectedCollection = {};
1553                    this.inPropertyView = false;
1554                    this.lead = {}
1555                    this.agent = {}
1556                    this.isInMapView = false;
1557                    this.isInListView = true;
1558
1559                    this.authorizationData = JSON.parse(atob(blueroofMiddlewareApi.apiKey.split('.')[1]));
1560                    this.is_blueroof_person = this.authorizationData?.is_blueroof_person;
1561
1562                   
1563                }
1564
1565                setSelectedCollection(collection) {
1566                    this.selectedCollection = collection;
1567                }
1568
1569                setInPropertyView(inPropertyView) {
1570                    this.inPropertyView = inPropertyView;
1571                }
1572            }
1573
1574
1575            class messagingEmitter extends Messaging.BaseEmitter {
1576                
1577                newMessage(message) {
1578                   Pubsub.publish('messaging_emitter_new_message', message);
1579                }
1580            }
1581
1582            
1583
1584            (async () => {
1585
1586                const blueroofMiddlewareApi = new BlueroofMiddlewareApi();
1587                const page = new Page(blueroofMiddlewareApi);
1588
1589                let url = 'https://messaging.brivity.com'
1590                const messaging = new Messaging.Service(url, blueroofMiddlewareApi.apiKey, new messagingEmitter());
1591
1592                let lead =  await blueroofMiddlewareApi.getLeadBasicInfo();
1593                let agent = await blueroofMiddlewareApi.getAgentProfile(lead.data?.brivity_agent_id);
1594
1595                page.lead = lead.data;
1596                page.agent = agent.data;
1597
1598                const collectionsService = new Collections.Service(window?.globalSiteVariables?.options?.apis?.collections?.url ?? '',blueroofMiddlewareApi.apiKey, "sitebuilder", new logger());
1599
1600
1601                const menu = new Menu(page?.is_blueroof_person || false, page?.agent, blueroofMiddlewareApi.baseUrl, blueroofMiddlewareApi.apiKey);
1602                const collectionSection = new CollectionSection()
1603                const propertySection = new PropertySection()
1604                const collectionModal = new CollectionModal();
1605                const collectionCreatedModal = new CollectionCreatedModal();
1606                const deleteCollectionModal = new DeleteCollectionModal();
1607                const editCollectionModal = new EditCollectionModal();
1608                const shareSavedPropertyModal = new ShareSavedPropertyModal();
1609                const deletePropertyModal = new DeletePropertyModal();
1610                const copyPropertyToCollectionModal = new CopyPropertyToCollectionModal();
1611                const pageSubHeader = new PageSubHeader();
1612                const collectionPaging = new CollectionPaging(8)
1613                const propertyPaging = new PropertyPaging(8)
1614                const newCollectionBlock = new NewCollectionBlock();
1615                const addListingsBlock = new AddListingsBlock();
1616                const myFeed = new MyFeed(blueroofMiddlewareApi, collectionsService);
1617                const map = new Map();
1618                const savedListings = new SavedListings();
1619                const addListingBtn = new AddListingBtn();
1620
1621                collectionPaging.hide();
1622                propertySection.hide();
1623
1624                let collections = [];
1625                let extraCollections = 0;
1626                let createCopyCollection = false;
1627              
1628                if(!showCollectionByUUID){
1629                    const collectionDescription = document.getElementById("collectionDescription");
1630
1631                    collectionsService.getCollections(0, collectionPaging.collectionsPerPage).then((e) => {
1632
1633                        extraCollections = e?.data?.totalCollections
1634
1635                        if(e.data.TotalPages > 1) {
1636                            collectionPaging.show()
1637                            collectionPaging.setPageCount(e.data.TotalPages);
1638                        } else {
1639                            collectionPaging.setPageCount(1);
1640                        }
1641                        
1642
1643                        if(e?.data?.Items){
1644                            collections = e.data.Items;
1645                            count = 100;
1646                            e.data.Items.forEach((collection) => {
1647                            count--
1648                            
1649                                collectionSection.addCollectionCard(collection, count)
1650                            });
1651                        }
1652
1653                        copyPropertyToCollectionModal.getCollectionList(collections)
1654                        
1655                        if(collections.length == 0){
1656                            newCollectionBlock.show();
1657                        }
1658
1659                    }).catch((e) => {
1660                        if(collections.length == 0){
1661                            newCollectionBlock.show();
1662                        }
1663                    });
1664                }
1665                else{
1666                    collectionsService.getCollections(0, collectionPaging.collectionsPerPage).then((e) => {
1667                        
1668                        if(e?.data?.Items){
1669                            collections = e.data.Items;
1670                        }
1671                         
1672                    });
1673                }    
1674
1675                Pubsub.subscription('property_card_mouseenter', (property) => {
1676
1677                    document.querySelectorAll('place-propertycard').forEach((propertyCard) => {
1678                        propertyCard.setAttribute('show_border', false);
1679                    })
1680                    
1681                    if(page.isInMapView){
1682                        map.setSelectedMarker(property)
1683                    }
1684                }).subscribe();
1685
1686                Pubsub.subscription('property_card_mouseleave', () => {
1687                    if(page.isInMapView){
1688                        map.clearSelectedMarker()
1689                    }
1690                }).subscribe();
1691
1692                Pubsub.subscription('messaging_emitter_new_message', (message) => {
1693                    toast.show('New message from ' + message.createdByAlias)
1694                }).subscribe();
1695
1696                Pubsub.subscription('property_section_show_map_view', (properties) => {
1697                    map.setMarkers(properties);
1698                    page.isInMapView = true;
1699                    page.isInListView = false;
1700
1701                    document.querySelectorAll('place-propertycard').forEach((propertyCard) => {
1702                        propertyCard.setAttribute('show_border_on_hover', true);
1703                    })
1704                }).subscribe();
1705
1706                Pubsub.subscription('property_section_show_list_view', (properties) => {
1707                    page.isInMapView = false;
1708                    page.isInListView = true;
1709
1710                    document.querySelectorAll('place-propertycard').forEach((propertyCard) => {
1711                        propertyCard.setAttribute('show_border_on_hover', false);
1712                    })
1713                    
1714                }).subscribe();
1715
1716                Pubsub.subscription('property_page_changed', (page) => {
1717                    collectionsService.getCollectionProperties(propertySection.collectionUUID, page, propertyPaging.propertiesPerPage).then((collectionProperties) => {
1718                        map.setMarkers(collectionProperties?.data?.properties);
1719                        savedListings.setCount(collectionProperties?.data?.totalListings || 0);
1720                        propertySection.show(propertySection.collectionUUID,collectionProperties)
1721                        propertySection.setPropertyCardWidth();
1722                        propertyPaging.setCurrentPage(page);
1723                    });
1724                }).subscribe();
1725
1726                Pubsub.subscription("top_header_menu_item_pressed", (menuItemPressed) => {
1727                            
1728                    if(menuItemPressed == 'Edit Collection'){
1729                        collectionModal.setName(page.selectedCollection.collectionName);
1730                        collectionModal.setDescription(page.selectedCollection.collectionDescription);
1731                        collectionModal.show(page.selectedCollection.collectionUUID, true);
1732                    }
1733                    else if(menuItemPressed == 'Delete Collection'){
1734                        deleteCollectionModal.show(page.selectedCollection);
1735                    }
1736                }).subscribe();
1737
1738                Pubsub.subscription('new_collection_block_create_collection_pressed', (e) => {
1739                    collectionModal.show(0, false);
1740                }).subscribe();
1741
1742                Pubsub.subscription('collection_card_pressed', (e) => {
1743                
1744                    window.location.hash = e.collection.collectionUUID;
1745
1746                    page.setSelectedCollection(e.collection);
1747
1748                    collectionsService.getCollectionProperties(e.collection.collectionUUID,1, propertyPaging.propertiesPerPage).then((collectionProperties) => {
1749
1750                    
1751                        savedListings.setCount(collectionProperties?.data?.totalListings || 0);
1752                        propertyPaging.setPageCount(collectionProperties.data.totalPages);
1753                        
1754                    
1755                        if(collectionProperties?.data?.properties == null){
1756                            addListingsBlock.show();
1757                        }
1758                        propertySection.show(e.collection.collectionUUID,collectionProperties)
1759                        propertySection.setPropertyCardWidth();
1760
1761                        if(collectionProperties.data.totalPages > 1){
1762                            propertyPaging.show();
1763                        }
1764                        
1765                    });
1766                    
1767                
1768                    collectionSection.hide();
1769                 
1770                    let collectionList = [];
1771
1772                    collections.forEach(collection => {
1773                        if (collection.collectionName == e.collection.collectionName) return;
1774
1775                        collectionList.push({
1776                            collection_title: collection.collectionName,
1777                            id: collection.collectionUUID,
1778                            propertiesImages: collection?.propertiesImages?.length > 0 ? collection?.propertiesImages : [],
1779                        })
1780                    });
1781
1782                    copyPropertyToCollectionModal.getCollectionList(collections, e.collection.collectionName);
1783
1784                    pageSubHeader.showTopHeader();
1785                    pageSubHeader.setTopHeaderTitle("Collections");
1786                    pageSubHeader.setTitle(e.collection.collectionName);
1787                    pageSubHeader.hidePrimaryButton();
1788                    pageSubHeader.showMenuButton();
1789
1790                    if(window.innerWidth > 768 ){
1791                        pageSubHeader.showSecondaryButton();
1792                    } 
1793
1794                    page.setInPropertyView(true)
1795
1796                    propertyPaging.setCurrentPage(1);
1797                    propertySection.setView('list')
1798                    
1799
1800                    const collectionDescription = document.getElementById('collection-description')
1801                    collectionDescription.style.display="flex"
1802                    collectionDescription.children[0].innerText = e?.collection.collectionDescription || ""
1803                }).subscribe();
1804
1805                Pubsub.subscription('collection_card_menu_item_pressed', (e) => {
1806                    if (e.menuItem == "Delete Collection") {
1807
1808                        deleteCollectionModal.show(e.collection);
1809                        
1810                    } else {
1811
1812
1813                        collectionModal.setName(e.collection.collectionName);
1814                        collectionModal.setDescription(e.collection.collectionDescription);
1815                        collectionModal.show(e.collection.collectionUUID, true);
1816                    }
1817                }).subscribe();
1818
1819                Pubsub.subscription('property_card_menu_item_pressed', (e) => {
1820                    if(e.menuItem == 'Remove from Collection') {
1821                        deletePropertyModal.show(e.collectionUUID, e.propertyCollectionUUID);
1822                    }
1823                    else if(e.menuItem == 'Copy to Collection') {
1824                        copyPropertyToCollectionModal.show(e.property);
1825                    }
1826                    else if(e.menuItem == 'Share Property') {
1827                        
1828                        shareSavedPropertyModal.show(e.property);
1829                    }
1830                }).subscribe();
1831
1832                Pubsub.subscription('delete_property_modal_pressed', (e) => {
1833                    deletePropertyModal.show(e.collectionUUID, e.propertyCollectionUUID);
1834                }).subscribe();
1835
1836                Pubsub.subscription('show_new_collection_modal', (e) => {
1837                    collectionModal.show();
1838                    copyPropertyToCollectionModal.hide();
1839                    createCopyCollection = true;
1840                }).subscribe();
1841
1842                Pubsub.subscription('top_header_back_pressed', () => {
1843                    window.location.hash = '';
1844                    pageSubHeader.hideTopHeader();
1845                    page.selectedCollection = {};
1846                    pageSubHeader.setTitle("COLLECTIONS");
1847                    pageSubHeader.showPrimaryButton();
1848                    pageSubHeader.hideSecondaryButton();
1849                    pageSubHeader.hideMenuButton();
1850
1851                    page.setInPropertyView(false)
1852
1853                    collectionSection.show();
1854                    propertySection.hide()
1855
1856                    propertyPaging.setCurrentPage(1);
1857
1858                    copyPropertyToCollectionModal.getCollectionList(collections)
1859                
1860                    const collectionDescription = document.getElementById('collection-description')
1861                    collectionDescription.style.display="none"
1862                    collectionDescription.children[0].innerText = "";
1863                    addListingsBlock.hide();
1864                }).subscribe()
1865
1866                Pubsub.subscription('create_new_collection_pressed', (e) => {
1867                    collectionModal.show(0, false);
1868                }).subscribe();
1869
1870                Pubsub.subscription('on_new_collection_saved', (e) => {         
1871                    if(e.type == 'save'){
1872                         
1873                        let people = [{ personUUID: page.lead.brivity_uuid, role: "lead" }];
1874                        let properties = [""];
1875                        collectionsService.createCollection(e.name, e.description,  page.lead.brivity_uuid, people, properties).then((e) => {
1876                            
1877                            collections.unshift(e.data);
1878
1879                            extraCollections++
1880                             if(collections.length > 8) {
1881                                 collections.pop();
1882                                 collectionPaging.show()
1883                                 collectionPaging.setPageCount(Math.ceil(extraCollections / 8));
1884                            }
1885
1886                            count = 100;
1887                            collectionSection.collections.innerHTML = "";
1888                            collections.forEach((collection) => {
1889                                count--
1890                                collectionSection.addCollectionCard(collection, count)
1891                            });
1892
1893                            let collectionsList =  copyPropertyToCollectionModal.getCollectionData();
1894                            let newCollection = {
1895                                collection_title: e.data.collectionName,
1896                                id: e.data.collectionUUID,
1897                                propertiesImages: [],
1898                            }
1899                            collectionsList.unshift(newCollection);
1900                            copyPropertyToCollectionModal.setCollectionData(collectionsList);
1901
1902                           if(!copyPropertyToCollectionModal.isVisible){
1903                            if (createCopyCollection) {
1904                                copyPropertyToCollectionModal.isVisible = true;
1905                                copyPropertyToCollectionModal.element.setAttribute('style', 'display:flex');
1906                                createCopyCollection = false;
1907                            } else {
1908                                collectionCreatedModal.show(e.data);
1909                            }
1910                           }
1911
1912                            collectionModal.hide();
1913                            
1914                            newCollectionBlock.hide();
1915                        }).catch((e) => {
1916                            collectionModal.showError(true)
1917                        });
1918                    }
1919                    else{
1920                        collectionsService.updateCollection(e.collectionUUID, e.name, e.description).then((collection) => {
1921                            let element = document.getElementById(e.collectionUUID);
1922                            element.setAttribute('title', e.name);
1923                            element.setAttribute('description', e.description);
1924                            if(Object.keys(page.selectedCollection).length !== 0){
1925                                pageSubHeader.setTitle(e.name);
1926                            }
1927                            const collectionDescription = document.getElementById('collection-description')
1928                            collectionDescription.children[0].innerText = e.description;
1929                            let updatedCollection = collections.findIndex((c) => c.collectionUUID == e.collectionUUID)
1930                            if(updatedCollection != -1){
1931                                collections[updatedCollection].collectionName = e.name;
1932                                collections[updatedCollection].collectionDescription = e.description;
1933                            }
1934                            collectionModal.hide();
1935                            editCollectionModal.show();
1936                        });
1937                    }
1938                }).subscribe();
1939
1940                Pubsub.subscription('collection_created_modal_view_collection_pressed', (collection) => {
1941                    Pubsub.publish('collection_card_pressed', {"collection": collection})
1942                }).subscribe();
1943
1944                Pubsub.subscription('delete_collection_modal_delete_pressed', (collection) => {
1945                    collectionsService.deleteCollection(collection.collectionUUID).then((e) => {
1946                        document.getElementById(collection.collectionUUID).remove();
1947                        toast.show('Collection was Deleted')
1948
1949                        extraCollections--
1950                        
1951                        if(extraCollections.length < 9) {
1952                            collectionPaging.hide()
1953                        }else{
1954                            collectionPaging.setPageCount(Math.ceil(extraCollections / 8));
1955                        }
1956
1957                        if(page.inPropertyView){
1958                            Pubsub.publish('top_header_back_pressed');
1959                        }
1960                    });
1961                }).subscribe();
1962
1963                Pubsub.subscription('delete_property_modal_delete_pressed', (e) => {
1964                    const currentPage = $("#property-pagination").find("#info-parent").filter(
1965                        function() {
1966                            return $(this).css("color") === "rgb(196, 196, 196)"
1967                        }
1968                    ).text();
1969
1970                    const propertiesPerPage = 8;
1971                    const numOfProperties = $("#property-list .property-card-wrapper").length;
1972                    const setPage = numOfProperties === 1 ? currentPage - 1 : currentPage; 
1973
1974                    collectionsService.removePropertyFromCollection(e.collectionUUID, e.propertyCollectionUUID)
1975                        .then(() => {
1976                            toast.show('Property removed from collection');
1977                            
1978                            return collectionsService.getCollectionProperties(e.collectionUUID, setPage, propertiesPerPage);
1979                        })
1980                        .then((collectionProperties) => {
1981                            const totalListingsCount = collectionProperties?.data?.totalListings;
1982                            const properties = collectionProperties?.data?.properties;
1983                            const totalPages = collectionProperties?.data?.totalPages;
1984                            const currentCollection = $(`#${e.collectionUUID}`);
1985
1986                            currentCollection.attr("num_properties", totalListingsCount);
1987                            
1988                            map.setMarkers(properties);
1989                            savedListings.setCount(totalListingsCount || 0);
1990                            propertySection.show(propertySection.collectionUUID, collectionProperties);
1991                            propertySection.setPropertyCardWidth();
1992
1993                            propertyPaging.setCurrentPage(setPage);
1994                            propertyPaging.setPageCount(totalPages);
1995
1996                            if (totalListingsCount <= 8) {
1997                                propertyPaging.hide();
1998                            }
1999                        })
2000                        .catch(error => {
2001                            console.error("Error in collection operations:", error);
2002                        });
2003                }).subscribe();
2004
2005                Pubsub.subscription('copy_property_to_collection_modal_save_pressed', (e) => {
2006
2007                    let collectionUUID = e.collectionUUID;
2008                    let blossorId = e.property.blossorId;
2009                    collectionsService.addPropertyToCollection(collectionUUID, [blossorId]).then(() => {
2010
2011                      
2012                        let data =  copyPropertyToCollectionModal.getCollectionData();
2013                        let myFeedData = myFeed.getMlsData();
2014                         
2015                        collectionsService.getCollectionProperties(collectionUUID,1,1).then((e) => {
2016                        
2017                              // update photos in add property to collection modal
2018                            let collectionIndex =  data.findIndex((x) => x.id == collectionUUID);
2019                            let collection = data[collectionIndex];
2020                            let photo = e?.data?.properties[0]?.photos[0]?.url;
2021                        
2022                            collection.propertiesImages = [];
2023                            if(e?.data?.properties?.length > 0){
2024                                collection.propertiesImages.push({mainPhoto: photo});
2025                            }
2026                            
2027                            data[collectionIndex] = collection;
2028                            
2029                            copyPropertyToCollectionModal.setCollectionData(data);
2030
2031
2032                            // update collection card if in collection view
2033                            pageCollectionIndex = collections.findIndex((x) => x.collectionUUID == collectionUUID)
2034
2035                            if(pageCollectionIndex > -1){
2036                                
2037                                let collectionCard = document.getElementById(collectionUUID);
2038                                let numProperties = parseInt(collectionCard.getAttribute('num_properties'));
2039                                numProperties++;
2040                                collectionCard.setAttribute('num_properties', numProperties);
2041
2042                                let images = collectionCard.getAttribute('image');
2043                                if(images){
2044                                    images += "," + photo;
2045                                }
2046                                else{
2047                                    images = photo;
2048                                }
2049                               
2050                                collectionCard.setAttribute('image', images);
2051                            }
2052
2053                            //update my feed to set property heart as favorited
2054                            let myFeedPropertyIndex = myFeedData.findIndex((x) => x.blossorId == blossorId);
2055                            if(myFeedPropertyIndex > -1){
2056                                myFeedData[myFeedPropertyIndex].favorite = true;
2057                                myFeed.setMlsData(myFeedData);
2058                            }
2059
2060                        })
2061
2062                        copyPropertyToCollectionModal.hide();
2063                        toast.show('Property added to collection')
2064                        
2065                    }).catch((e) => {
2066                        toast.show('Error adding property to collection', true)
2067                    });
2068                }).subscribe();
2069
2070                Pubsub.subscription('collection_page_changed', (e) => {
2071                    collectionsService.getCollections(e, collectionPaging.collectionsPerPage).then((e) => {
2072                        if(e?.data?.Items){
2073                            collections = e.data.Items;
2074
2075                            collectionSection.collections.innerHTML = "";
2076                            count = 100;
2077                            e.data.Items.forEach((collection) => {
2078                            count--
2079                            
2080                                collectionSection.addCollectionCard(collection, count)
2081                            });
2082                        }
2083                    });
2084                }).subscribe();
2085
2086                Pubsub.subscription('share_saved_property_modal_share_pressed', (e) => {
2087                    toast.show('Link Copied!')
2088                }).subscribe();
2089
2090                Pubsub.subscription('my_feed_share_pressed', (e) => {
2091                    shareSavedPropertyModal.show(e.property);
2092                }).subscribe();
2093
2094                Pubsub.subscription('my_feed_add_collection_pressed', (e) => {
2095                    copyPropertyToCollectionModal.setIsAddingToCollection(true);
2096                    copyPropertyToCollectionModal.show(e.property);
2097                }).subscribe();
2098
2099                Pubsub.subscription('map_marker_clicked', (id) => {
2100                    propertySection.scrollIntoView(id);
2101
2102                    document.querySelectorAll('place-propertycard').forEach((propertyCard) => {
2103                        if(propertyCard.id == id) {
2104                            propertyCard.setAttribute('show_border', true)
2105                        }
2106                        else {
2107                            propertyCard.setAttribute('show_border', false)
2108                        } 
2109                    })
2110                }).subscribe();
2111
2112                Pubsub.subscription('my_feed_on_favorite_pressed', (e) => {
2113                    copyPropertyToCollectionModal.setIsAddingToCollection(true);
2114                    copyPropertyToCollectionModal.show(e.property);
2115                }).subscribe();
2116
2117                Pubsub.subscription('my_feed_on_unfavorite_pressed', (e) => {
2118                    let blossorId = e.property.blossorId;
2119                    let myFeedData = myFeed.getMlsData();
2120                    collectionsService.checkIfInCollection([blossorId]).then((propertiesInCollections) => {
2121                        if(propertiesInCollections.data[blossorId]){
2122                            propertiesInCollections.data[blossorId].forEac
2122h((collection) => {
2123                                collectionsService.removePropertyFromCollection(collection.collectionUUID, collection.propertyUUID).then(() => {
2124                                    
2125                                    let data =  copyPropertyToCollectionModal.getCollectionData();
2126                                    let collectionUUID = collection.collectionUUID;
2127                                    collectionsService.getCollectionProperties(collectionUUID,1,1).then((e) => {
2128                                    
2129                                         // update photos in add property to collection modal
2130                                        let collectionIndex =  data.findIndex((x) => x.id == collectionUUID);
2131                                        let collection = data[collectionIndex];
2132                                        let photo = e?.data?.properties?.length > 0 ? e?.data?.properties[0]?.photos[0]?.url : '';
2133                                    
2134                                        collection.propertiesImages = [];
2135                                        if(e?.data?.properties?.length > 0){
2136                                            collection.propertiesImages.push({mainPhoto: photo});
2137                                        }
2138                                        
2139                                        data[collectionIndex] = collection;
2140                                        
2141                                        copyPropertyToCollectionModal.setCollectionData(data);
2142
2143
2144                                         // update collection card if in collection view
2145                                        pageCollectionIndex = collections.findIndex((x) => x.collectionUUID == collectionUUID)
2146
2147                                        if(pageCollectionIndex > -1){
2148                                            
2149                                            let collectionCard = document.getElementById(collectionUUID);
2150                                            let numProperties = parseInt(collectionCard.getAttribute('num_properties'));
2151                                            numProperties--;
2152                                            collectionCard.setAttribute('num_properties', numProperties);
2153
2154                                            let images = collectionCard.getAttribute('image');
2155                                            let newImages = images.split(',').filter((x) => x == photo).join(',');
2156                                            collectionCard.setAttribute('image', newImages);
2157                                        }
2158
2159                                        //update my feed to set property heart as not favorited
2160                                        let myFeedPropertyIndex = myFeedData.findIndex((x) => x.blossorId == blossorId);
2161                                        if(myFeedPropertyIndex > -1){
2162                                            myFeedData[myFeedPropertyIndex].favorite = false;
2163                                            myFeed.setMlsData(myFeedData);
2164                                        }
2165                                    })
2166                                    toast.show('Property removed from collection');
2167                                }).catch((e) => {
2168                                    toast.show('Error removing from collection', true);
2169                                });
2170                            });
2171                        }
2172                    });
2173                }).subscribe();
2174
2175                let modalBackdrop = document.getElementsByClassName('center-modal');
2176                for(let i = 0; i < modalBackdrop.length; i++){
2177                    modalBackdrop[i].addEventListener('click', (e) => {
2178                        if(e.target == modalBackdrop[i]){
2179                            modalBackdrop[i].style.display = 'none';
2180                        }
2181                    });
2182                }
2183
2184                window.addEventListener( "hashchange", function( event ) {
2185                    if(window.location.hash == ''){
2186                        Pubsub.publish("top_header_back_pressed");
2187                    }
2188                });
2189
2190
2191                document.addEventListener("click", (e) => {
2192
2193                    const elements = document.querySelectorAll("[show_menu]");
2194                    elements.forEach((el) => {
2195                        el.setAttribute("show_menu", "false");
2196                    });
2197
2198                    document.getElementById("c2dfac72-6233-4e8d-b0d2-f44e4240ebb4")?.setAttribute("show_menu", "false");
2199                });
2200                if(window.innerWidth < 768 ){
2201                     savedListings.hide();
2202                     pageSubHeader.hideSecondaryButton();
2203                } else{
2204                    addListingBtn.hide();
2205                }
2206            })();
2207        }
2208    })
2209
2210</script>
2210 <div id="myportal-page" style="display:none"> <div style="position:relative; width:100%;"> <div style="position:absolute;z-index:110; top:0; bottom:0; "> <place-menu></place-menu> </div> <div class="collection-page" style="flex:1;"> <div class="page-width-parent"> <place-pagesubheader title="COLLECTIONS" show_top_header="false" button_title="Create New" button_icon="plus" secondary_button_icon="plus" secondary_button_title="Add Listings" show_secondary_button="false" show_menu="false" menu_items='[{ "icon": "edit-2", "text": "Edit Collection" },{ "icon": "trash", "text": "Delete Collection" }]' ></place-pagesubheader> <div id="collection-description" class="collection-description" style="display:none;"> <p class="collection-description-text" style="" ></p> </div> <div id="collection-section" style="margin-top:24px;"> <div id="collections" style="display:flex; flex-wrap:wrap"> <place-actioncard id="new-collection-block" style="display:none;" title="Create A Collection" sub_title="You can create a collection to save and keep track of your favorite properties." button_text="Create New" button_icon="plus" button_icon_fill="white" card_width="300" /> </div> <place-pagination id="collection-pagination" style="display:none"></place-pagination> <div class="my-feed-parent"> <place-myfeedblock style="display:none" display_menu="false"></place-myfeedblock> </div> </div> <div id="property-section"> <div id="property-header" style="display:flex; justify-content: space-between"> <p id="collection-saved-listings" class="collection-saved-listings"></p> <place-button icon="plus" ghost="true" btn_text_styles="text-[#5386E4]" icon_stroke="#5386E4" id="add-listing-btn" title="Add Listing"></place-button> <div style="padding: 0 5px; display:flex"> <place-icon id="property-list-icon" style="margin-right:10px" name="list" size="24" fill="none" stroke="black"></place-icon> <place-icon id="property-map-icon" name="map" size="24" fill="none" stroke="gray"></place-icon> </div> </div> <div class="property-container" style=""> <div id="property-list-parent"> <div id="property-list" class="property-list-list-view"> </div> <div> <place-actioncard id="add-listings-block" style="display:none;" title="Add Listings" sub_title="You can search and add properties to a collection to keep track of your favorite homes using the heart icon." button_text="Search Listings" button_icon="search" button_icon_fill="white" card_width="300" /> </div> </div> <div id="property-map" class="property-map-container" style="display:none" > <place-map map_type_control="true" zoom_control="true"> </place-map> </div> </div> <place-pagination id="property-pagination" class="property-pagination" style="display:none"></place-pagination> </div> </div> </div> </div> <place-basicmodal id="collection-created-modal" class="center-modal" style="display:none" title="Collection Created" sub_title="Would you like to add listings to your new collection? You can search for new listings or copy them from an existing collection." title_icon="heart" primary_button_text="View Collection" tertiary_button_text="Search" stacked_buttons="true" ></place-basicmodal> <place-basicmodal id="delete-collection-modal" class="center-modal" style="display:none" title="Delete Collection" sub_title="Deleting a collection will permanently remove it from your account. Your saved properties will only be visible in your Favorites collection." description="Are you sure you would like to delete this collection?" title_icon="trash" primary_button_text="Delete" tertiary_button_text="Cancel" no_stack_buttons="true" ></place-basicmodal> <place-basicmodal id="edit-collection-modal" class="center-modal" style="display:none" title="Changes Saved" sub_title="The changes to your collection have been saved." title_icon="check" primary_button_text="Close" ></place-basicmodal> <place-basicmodal id="delete-property-modal" class="center-modal" style="display:none" title="Remove Property" sub_title="Deleting this property will remove it from the current collection. Are you sure you would like to delete this property from your collection?" title_icon="trash" primary_button_text="Delete" tertiary_button_text="Cancel" no_stack_buttons="true" ></place-basicmodal> <place-basicmodal id="share-saved-property-modal" class="center-modal" style="display:none" title="Share Property" sub_title="Copy link to share property." title_icon="share" primary_button_text="Copy Link" ></place-basicmodal> <place-copycollectionmodal class="center-modal" style="display:none" collections='[]' ></place-copycollectionmodal> <place-collectionpopup class="center-modal" style="display:none"></place-collectionpopup> </div> <footer data-selector="footer" class="" id="footer-9n" style="outline-offset: -3px;"> <div class="container"> <div class="row"> <div class="col-md-2"> <div class="render-menu hot-nav"> <ul class="" style="outline: none; cursor: inherit;"> <li class="nav-item" data-selector="li"> <a href="/index" style="outline: none; cursor: inherit;">Home</a> </li> <li class="nav-item" data-selector="li"> <a href="/search" style="outline: none; cursor: inherit;">Listings</a> </li> <li class="nav-item" data-selector="li"> <a href="/buying" style="outline: none; cursor: inherit;">Buying</a> </li> <li class="nav-item" data-selector="li"> <a class="white" href="/selling" style="outline: none; cursor: inherit;">Selling</a> </li> <li class="nav-item" data-selector="li"> <a href="/financing" style="outline: none; cursor: inherit;">Financing</a> </li> <li class="nav-item" data-selector="li"> <a href="/home_value" style="outline: none; cursor: inherit;">Home Value</a> </li> <li class="nav-item" data-selector="li"> <a href="/realestateagent/search" style="outline: none; cursor: inherit;">Who We Are</a> </li> <li class="nav-item" data-selector="li"> <a href="/connect" style="outline: none; cursor: inherit;">Connect</a> </li> </ul> </div> </div>
2210 <div class="col-md-7 col-md-offset-1"> <form id="form-contact1" action="" class="form-contact"> <div class="row margin-bottom-0"> <div class="col-sm-6" style="margin-bottom: 20px;"> <div class="form-group"> <input name="contact1_fname" id="contact1_fname" placeholder="First Name" class="form-control contact_fname" type="text" required="" style='background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABHklEQVQ4EaVTO26DQBD1ohQWaS2lg9JybZ+AK7hNwx2oIoVf4UPQ0Lj1FdKktevIpel8AKNUkDcWMxpgSaIEaTVv3sx7uztiTdu2s/98DywOw3Dued4Who/M2aIx5lZV1aEsy0+qiwHELyi+Ytl0PQ69SxAxkWIA4RMRTdNsKE59juMcuZd6xIAFeZ6fGCdJ8kY4y7KAuTRNGd7jyEBXsdOPE3a0QGPsniOnnYMO67LgSQN9T41F2QGrQRRFCwyzoIF2qyBuKKbcOgPXdVeY9rMWgNsjf9ccYesJhk3f5dYT1HX9gR0LLQR30TnjkUEcx2uIuS4RnI+aj6sJR0AM8AaumPaM/rRehyWhXqbFAA9kh3/8/NvHxAYGAsZ/il8IalkCLBfNVAAAAABJRU5ErkJggg=="); background-repeat: no-repeat; background-attachment: scroll; background-size: 16px 18px; background-position: 98% 50%; cursor: auto;'> </div> </div> <div class="col-sm-6" style="margin-bottom: 20px;"> <div class="form-group"> <input name="contact1_lname" id="contact1_lname" placeholder="Last Name" class="form-control contact_lname" type="text" required=""> </div> </div> </div> <div class="row margin-bottom-0"> <div class="col-sm-6" style="margin-bottom: 20px;"> <div class="form-group"> <input name="contact1_email" id="contact1_email" placeholder="Email Address" class="form-control contact_email" type="email" required=""> </div> </div> <div class="col-sm-6" style="margin-bottom: 20px;"> <div class="form-group"> <input name="contact1_phone" id="contact1_phone" placeholder="Phone Number" class="form-control contact_phone" type="tel" required=""> </div> </div> </div> <div class="row margin-bottom-0"> <div class="col-sm-12" style="margin-bottom: 20px;"> <i class="fa fa-caret-down" style="position: absolute; top: 13px; right: 30px; font-size: 14px;" data-selector=".fa"></i> <select name="lead_type" style="width: 100%; height: 40px; padding-left: 12px; font-size: 14px; border-radius: 0; -webkit-appearance: none; -webkit-border-radius: 0px;"> <option value="buyer">I'm interested in buying a home</option> <option value="seller">I'm interested in selling a home</option> <option value="seller/buyer">I'm interested in buying and selling</option> <option value="tenant">I'm interested in finding a home to rent</option> <option value="recruit">I'm interested in a real estate career</option> <option value="n/a">Other reason to contact an agent</option> </select> </div> </div> <div class="row margin-bottom-0"> <div class="col-sm-12" style="margin-bottom: 20px;"> <textarea name="contact1_message" id="contact1_message" class="form-control contact_message" rows="3" placeholder="Your Message"></textarea> </div> </div> <div class="text-right"> <input type="text" id="contact1_robot_field" name="contact1_robot_field" style="display: none;"><button type="submit" class="btn btn-primary squared" data-selector="a.btn, button.btn, button">Send Us A Message</button> </div> <div id="honeypot-div"> <input name="age_required" id="age_required" value="" type="text" style="display: none;"> </div> </form> </div> <div class="col-md-2 col-md-offset-1"> <img class="ftr-logo" src="https://images.brivityidx.com/assets/images/uploads/107878/Darin7278_solo_logo.png" alt="Buy and Sell Homes Real Estate" data-selector="img" style="border-style: none;"> <h3 class="text-left margin-top-40" data-selector="h1, h2, h3, h4, h5, h6">Reach Out</h3> <div class="text-left" style="outline: medium none; cursor: inherit;"> <ul style="list-style-type: none; outline: none; cursor: inherit;"> <li data-selector="li"> <span class="agent_address_dynamic dynamic_loading dynamic_loading dynamic_loading dynamic_loading dynamic_loading"></span> <br><span class="agent_city_dynamic dynamic_loading dynamic_loading dynamic_loading dynamic_loading dynamic_loading"></span>, <span class="agent_state_dynamic dynamic_loading dynamic_loading dynamic_loading dynamic_loading dynamic_loading"></span> <span class="agent_zip_dynamic dynamic_loading dynamic_loading dynamic_loading dynamic_loading dynamic_loading"></span> </li> <li data-selector="li"> Real Estate: <a class="agent_phone_dynami" href="tel:(785)%20251-0717" src="tel:" style="outline: none; cursor: inherit;">(785) 251-0717</a><br> Property Management: <a class="agent_phone_dynami" href="tel:(785)%20325-9337" src="tel:" style="outline: none; cursor: inherit;">(785) 325-9337</a> </li> </ul> </div> </div> </div> <div class="row ftr-anchor"> <div class="col-sm-6 anchor-col no-padding editContent" data-selector=".editContent"> <p class="no-margin" data-selector="p"><span class="get_this_year">2021</span> © <strong>Stone &amp; Story Real Estate Group</strong></p> <p style="margin: 10px 0px; outline: none; cursor: inherit;" data-selector="p"> <img src="https://images.brivityidx.com/assets/images/uploads/1428/Equal-Housing-Realtor_gray50.png" alt="Equal Housing | Realtor" style="width: 50px; outline: none; cursor: inherit;" data-selector="img">   Each office is independently owned and operated. </p> </div> <div class="col-sm-6 anchor-col no-padding"> <ul class="social" style="outline: none; cursor: inherit;"> <li data-selector="li" class="agent_facebook_dynamic dynamic_loading dynamic_loading dynamic_loading dynamic_loading dynamic_loading" href="https://www.facebook.com/Brivity"><a class="btn btn-block agent_facebook_dynamic dynamic_loading dynamic_loading dynamic_loading dynamic_loading dynamic_loading" href="https://www.facebook.com/Brivity" target="blank" data-selector="a.btn, button.btn, button"><i class="fa fa-2x fa-facebook fa-adjust prmry-color" data-selector=".fa"></i></a></li> <li data-selector="li" class="agent_twitter_dynamic dynamic_loading dynamic_loading dynamic_loading dynamic_loading dynamic_loading" href="https://twitter.com/Brivity"><a class="btn btn-block agent_twitter_dynamic dynamic_loading dynamic_loading dynamic_loading dynamic_loading dynamic_loading" href="https://twitter.com/Brivity" target="blank" data-selector="a.btn, button.btn, button"><i class="fa fa-2x fa-twitter fa-adjust prmry-color" data-selector=".fa"></i></a></li> <li data-selector="li" class="agent_instagram_dynamic dynamic_loading dynamic_loading dynamic_loading dynamic_loading dynamic_loading" href="https://www.instagram.com/Brivityplatform/"><a class="btn btn-block agent_instagram_dynamic dynamic_loading dynamic_loading dynamic_loading dynamic_loading dynamic_loading" href="https://www.instagram.com/Brivityplatform/" target="blank" data-selector="a.btn, button.btn, button"><i class="fa fa-2x fa-instagram fa-adjust prmry-color" data-selector=".fa"></i></a></li> <li data-selector="li" class="agent_pinterest_dynamic dynamic_loading dynamic_loading dynamic_loading dynamic_loading dynamic_loading" href="https://www.pinterest.com/"><a class="btn btn-block agent_pinterest_dynamic dynamic_loading dynamic_loading dynamic_loading dynamic_loading dynamic_loading dynamic_loading" href="https://www.pinterest.com/" target="blank" data-selector="a.btn, button.btn, button"><i class="fa fa-2x fa-pinterest fa-adjust prmry-color" data-selector=".fa"></i></a></li> <li data-selector="li" class="agent_youtube_dynamic dynamic_loading dynamic_loading dynamic_loading dynamic_loading dynamic_loading" href="https://www.youtube.com/channel/UCWdVYI1u9hnol74ibn62qFw"><a class="btn btn-block agent_youtube_dynamic dynamic_loading dynamic_loading dynamic_loading dynamic_loading dynamic_loading" href="https://www.youtube.com/channel/UCWdVYI1u9hnol74ibn62qFw" target="blank" data-selector="a.btn, button.btn, button"><i class="fa fa-2x fa-youtube fa-adjust prmry-color" data-selector=".fa"></i></a></li> <li data-selector="li" class="agent_linkedin_dynamic dynamic_loading dynamic_loading dynamic_loading dynamic_loading dynamic_loading" href="https://www.linkedin.com/company/brivity"><a class="btn btn-block agent_linkedin_dynamic dynamic_loading dynamic_loading dynamic_loading dynamic_loading dynamic_loading" href="https://www.linkedin.com/company/brivity" target="blank" data-selector="a.btn, button.btn, button"><i class="fa fa-2x fa-linkedin fa-adjust prmry-color" data-selector=".fa"></i></a></li> </ul> </div> </div> </div> </footer> </div> <section id="seo-anchor"> <div class="container"> <ul class="powered-by"> <li>Powered by <a class="pb-vendor" href="https://www.brivity.com/"> Brivity</a></li> <li class="pb-admin-login"><a href="https://login.brivityidx.com/login"><span class='pb-admin-login-text'>Admin Log In</span></a></li> </ul> <ul class="seo-anchor-links"> <li><a href="/privacy_policy">Privacy Policy</a></li> <li><a href="/tos">DMCA &amp; Terms of Service</a></li> <li><a id='sitemapUrl' href='/sitemap' style='display: inline;'>Sitemap</a></li> </ul> </div> </section> <input type="hidden" id="hchatbot_settings" data-chatbot-version="1" value="{&quot;chat_position&quot;:&quot;right&quot;,&quot;call_to_action_text&quot;:&quot;Hi there! Please let us know if you have any questions and an agent will reach out to you as soon as possible.&quot;,&quot;initial_message&quot;:&quot;Enter your question below and an agent will be in touch with you.&quot;,&quot;tags&quot;:&quot;IDX Chat&quot;,&quot;version&quot;:&quot;1&quot;}">
2211<!-- chatbot v1 -->
2212<!-- Chatbot drawer container -->
2213<div class="chatbot-drawer-container loading">
2214    <div class="chatbot-content-wrapper">
2215        <div class="chatbot-outside-content">
2216            <div class="chatbot-bubble-message-container cb-hide">
2217                <img src="https://cdn.brivity.com/images/people/83546158/3c20754ab60865aca449acdc68f153799d24525b-original.jpg?1767133867" class="chatbot-agent-img" alt="Agent profile image in chat bubble"/>
2218                <div id="call-to-action" class="bubble-message"></div>
2219                <button type="button" class="chatbox-bubble-close" data-dismiss="modal" aria-label="Close">
2220                    <span aria-hidden="true">&times;</span>
2221                </button>
2222            </div>
2223            <button id="chatbot-open-btn" class="chatbot-open-btn bg-prmry" aria-label="Chatbot Open Button">
2224                <svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
2225                    <path d="M20.8 6.35501V16C20.8 17.765 19.365 19.195 17.6 19.195L11.2 19.2L5.755 22.28C5.645 22.365 5.52 22.4 5.4 22.4C5.09 22.4 4.8 22.155 4.8 21.8V19.2H3.2C1.4375 19.2 0 17.765 0 16V6.35501C0 4.63751 1.4375 3.20001 3.2 3.20001H17.6C19.365 3.20001 20.8 4.63751 20.8 6.35501ZM7.2 18.705L10.57 16.8H17.6C18.035 16.8 18.4 16.44 18.4 16V6.40001C18.4 5.96251 18.035 5.60001 17.6 5.60001H3.2C2.7625 5.60001 2.4 5.96251 2.4 6.40001V16C2.4 16.44 2.7625 16.8 3.2 16.8H7.2V18.705ZM12.8 22.4V20.8H15.2V22.4C15.2 22.835 15.56 23.2 16 23.2H21.43L24.8 25.105V23.2H28.8C29.235 23.2 29.6 22.835 29.6 22.4V12.8C29.6 12.365 29.235 12 28.8 12H22.4V9.60001H28.8C30.565 9.60001 32 11.035 32 12.755V22.4C32 24.165 30.565 25.6 28.8 25.6H27.2V28.2C27.2 28.555 26.91 28.8 26.6 28.8C26.48 28.8 26.355 28.765 26.245 28.68L20.8 25.6L16 25.595C14.24 25.595 12.8 24.165 12.8 22.4Z" fill="white"/>
2226                </svg>
2227            </button>
2228        </div>
2229        <div class="chatbot-drawer">
2230            <div class="chatbot-header bg-prmry">
2231                <div class="chatbot-agent-info">
2232                    <img src="https://cdn.brivity.com/images/people/83546158/3c20754ab60865aca449acdc68f153799d24525b-original.jpg?1767133867" class="chatbot-agent-img" alt="Agent profile image in chat header"/>
2233                    <div class="chatbot-agent">
2234                        <h3 class="chatbot-agent-name">Darin Stephens, PhD</h3>
2235                        <h4><span class="chatbot-agent-title">Founder &amp; CEO &amp; Broker</span> | <span class="chatbot-agent-company">Stone &amp; Story Real Estate Group</span></h4>
2236                    </div>
2237                    <a id="chatbot-agent-phone" style="display: none;">(785) 250-7278</a>
2238                </div>
2239                <button id="close-chatbot-drawer" type="button" class="chatbox-modal-close" data-dismiss="modal" aria-label="Close">
2240                    <span aria-hidden="true">&times;</span>
2241                </button>
2242            </div>
2243            <div class="chatbot-body">
2244                <div class="chatbot-message-container">
2245                    <img src="https://cdn.brivity.com/images/people/83546158/3c20754ab60865aca449acdc68f153799d24525b-original.jpg?1767133867" class="chatbot-agent-img" alt="Agent profile image in message"/>
2246                    <h4 id="initial_message" class="chatbot-chat-messages not-loaded"></h4>
2247                    <div class="chatbot-chat-messages loading">
2248                        <span class="typing-indicator">
2249                            <span></span>
2250                            <span></span>
2251                            <span></span>
2252                        </span>
2253                    </div>
2254                </div>
2255                <form id="chatbotForm" class="chatbot-form">
2256                    <input type="name" id="chatbot_fullname" class="chatbox-form-control no-native-focus" placeholder="Full Name"
2257                        pattern="^[A-Za-z'\- ]+ [A-Za-z'\- ]+$"
2258                        required />
2259                    <input type="tel" id="chatbot_phone" class="chatbox-form-control no-native-focus" placeholder="Phone" required />
2260                    <input type="email" id="chatbot_email" class="chatbox-form-control no-native-focus" placeholder="Email"
2261                        pattern="^[^@\s]+@[^@\s]+\.[^@\s]+$"
2262                        required />
2263                    <textarea id="chatbot_message" class="chatbox-form-control chatbot-message" rows="5" name="notes" placeholder="Any Comments or Questions"></textarea>
2264                    <div class="chatbot-consent-container">
2265                        <div class="chatbot-toggle">
2266                                                            By proceeding and clicking the sign up button, you consent to receive calls and texts (SMS/MMS) including marketing and promotional communications, from <span class="agent_name_dynamic"></span>, its affiliates, and agents or vendors acting on their behalf. These 
2266communications may be delivered using an automatic telephone dialing system or by using an artificial or prerecorded voice. Message and data rates may apply. To opt out of text messages, reply STOP. Your consent is not required as a condition of any purchase. By continuing, you also agree to our <a class="opt-out-href" href="/tos">Terms of Use</a> and <a class="opt-out-href" href="/privacy_policy">Privacy Policy</a>.
2267                            </div>
2268                    </div>
2269                    <input type="hidden" id="chatbot_tags">
2270                                    </form>
2271            </div>
2272            <div class="chatbot-footer">
2273                <button type="submit" form="chatbotForm" class="chatbot-send bg-prmry chatbot-btn-disabled" data-dismiss="modal" aria-label="Close" disabled>
2274                    Send 
2275                    <span aria-hidden="true"> 
2276                        <svg class="chatbot-btn-icon" width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
2277                            <g clip-path="url(#clip0_2435_997)">
2278                                <path d="M14.6667 1.33331L7.33337 8.66665" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
2279                                <path d="M14.6667 1.33331L10 14.6666L7.33337 8.66665L1.33337 5.99998L14.6667 1.33331Z" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
2280                            </g>
2281                            <defs>
2282                                <clipPath id="clip0_2435_997">
2283                                    <rect width="16" height="16" fill="white"/>
2284                                </clipPath>
2285                            </defs>
2286                        </svg>
2287                    </span>
2288                </button>
2289            </div>
2290        </div>
2291    </div>
2292</div> <style>
2293                                .signup-consent-checkbox-section {
2294                                    display: none;
2295                                    flex-direction:column;
2296                                    align-items:flex-start;
2297                                    padding: 6px 0;
2298                                }
2299
2300                                .signup-consent-checkbox-section .checkbox {
2301                                    display:flex; 
2302                                    align-items:flex-start; 
2303                                    justify-content:center; 
2304                                    gap:8px; 
2305                                    padding:0 !important;
2306                                }
2307
2308                                .signup-consent-checkbox-section .checkbox input {
2309                                    position:unset;
2310                                    margin:2px 0 0 0 !important;
2311                                }
2312
2313                                .signup-consent-checkbox-section .checkbox span {
2314                                    color: #666666;
2315                                    font-size: 14px;
2316                                    font-weight: 400;
2317                                    line-height:16px;
2318                                }
2319
2320                                .signup-verbage {
2321                                    text-align:center;
2322                                    font-size:10px;
2323                                    line-height:16px;
2324                                }
2325
2326                                .signup-verbage span {
2327                                   color: #8C8C8C; 
2328                                   font-weight:600; 
2329                                }
2330
2331                                .signup-verbage a {
2332                                    color:#5386E4 !important;
2333                                    font-weight:400;
2334                                }
2335
2336                                .signup-verbage .twilio-enabled-verbage {
2337                                    display:none;
2338                                }
2339
2340                                
2341                                
2342                            </style> <div id="modal-mount" data-modal-bundle="https://cdn1.brivityidx.com/assets/modals/v1/all.html?ck=1789512948"></div>
2342 <div id="credential_picker_container_centered"> <div id="credential_picker_header_bar"> <p><button class="signOrLogBtn" onclick="showSignupModal();">Sign up</button> or <button class="signOrLogBtn" onclick="showLoginModal();">Login</button> another way</p> </div> <div id="credential_picker_header_bar_separator"></div> </div> <place-getyourhomecta id="contact_modal" style="display:none; justify-content: center; align-items: center; position:fixed; background-color:rgba(0,0,0,0.4); left:0; top:0; right:0; bottom:0; z-index: 100;" interest_items='[{"text":"Looking to sell ASAP"},{"text":"Looking to sell (1-3 months)"},{"text":"Looking to sell (3-6 months)"}, {"text":"Looking to sell (6-12 months)"},{"text":"Looking to sell (12+ months)"}, {"text":"Just curious"}]' > </place-getyourhomecta> <place-generictoast appear_from_both="true" container_style="right-1/2 z-200"></place-generictoast> 
2342<script>
2343            document.addEventListener("DOMContentLoaded", () => {
2344                class Toast {
2345                    constructor() {
2346                        this.element = document.querySelector('place-generictoast');
2347                    }
2348
2349                    show(message, error = false, link) {
2350                        var dispatch = function () {
2351                            window.dispatchEvent(
2352                                new CustomEvent("ShowToast", {
2353                                    detail: {
2354                                        text: message,
2355                                        error: error,
2356                                        link: link,
2357                                    },
2358                                })
2359                            );
2360                        };
2361                        if (window.sitebuilderPlaceComponents && window.sitebuilderPlaceComponents.ensureLoaded) {
2362                            window.sitebuilderPlaceComponents
2363                                .ensureLoaded('place-generictoast')
2364                                .then(dispatch)
2365                                .catch(function (err) {
2366                                    console.warn('toast.show fallback (web-components unavailable):', message, err);
2367                                });
2368                        } else {
2369                            dispatch();
2370                        }
2371                    }
2372                }
2373
2374                window.toast = new Toast();
2375            });
2376        </script>
2376 
2376<script src="https://cdn.jsdelivr.net/npm/@turf/[email protected]/turf.min.js"></script>
2376 
2376<script src="https://maps.googleapis.com/maps/api/js?libraries=geocoding,places,marker,drawing&key=AIzaSyAjpuNg6WGCMV5rzoJcIP2QmMTVto6hYmc&map_ids=85c127b7bf0255d9"></script>
2376 
2376<script src="https://cdn1.brivityidx.com/assets/js/build.min.js?ck="></script>
2376 
2376<script src="https://cdn1.brivityidx.com/assets/js/top_bar_v2.min.js?ck="></script>
2376 
2376<script src="https://cdn1.brivityidx.com/assets/js/global_js.min.js?ck=1789512947"></script>
2376 
2376<script>deferScript("https://cdn1.brivityidx.com/assets/js/global_js_defer.min.js?ck=1789512947", 5000);</script>
2376 
2376<script>
2377            function shouldLoadChatbotImmediately() {
2378                const settingsEl = document.getElementById('hchatbot_settings');
2379                if (!settingsEl) return false;
2380
2381                const version = Number(settingsEl.dataset.chatbotVersion);
2382                let isInitialized = false;
2383
2384                try {
2385                    const session = JSON.parse(sessionStorage.getItem('cbSession') || '{}');
2386                    isInitialized = session.chatbotInitialized === true;
2387                } catch (e) {}
2388
2389                return version > 1 && isInitialized;
2390            }
2391        </script>
2391 
2391<script>document.getElementById('hchatbot_settings') && Number(document.getElementById('hchatbot_settings').dataset.chatbotVersion) > 1 && deferScript("https://cdnjs.cloudflare.com/ajax/libs/microsoft-signalr/9.0.6/signalr.min.js", 0);</script>
2391 
2391<script>document.getElementById('hchatbot_settings') && deferScript(Number(document.getElementById('hchatbot_settings').dataset.chatbotVersion) > 1 ? "https://cdn1.brivityidx.com/assets/js/chatbot_v2.min.js?ck=1789512945" : "https://cdn1.brivityidx.com/assets/js/chatbot.min.js?ck=1789512945", shouldLoadChatbotImmediately() ? 50 : 5000);</script>
2391 
2391<script type="text/javascript" src="https://cdn1.brivityidx.com/assets/js/jquery.geocomplete.min.js"></script>
2391<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery.bootstrapvalidator/0.5.3/js/bootstrapValidator.min.js"></script>
2391<script type="text/javascript" src="https://cdn1.brivityidx.com/assets/js/member_area_components.js"></script>
2391<script type="text/javascript" src="https://cdn1.brivityidx.com/assets/js/update_agent_info.js"></script>
2391 
2391<script src="https://mobile-component-services-library.s3.amazonaws.com/collections_service.min.js?ck=1"></script>
2391 
2391<script src="https://mobile-component-services-library.s3.amazonaws.com/messaging_service.min.js?ck=1"></script>
2391 
2391<script>$(document).ready(function(){function changePlaceholder(){if($(window).width()<=556){$("#home_value_my_portal_search_address").attr("placeholder","Address")}else if($(window).width()>556){$("#home_value_my_portal_search_address").attr("placeholder","Enter Property Address")}}
2392$(window).resize(changePlaceholder).trigger('resize')})</script>
2392 
2392<script>$(document).ready(function(){$("#sitemap-listings > div.container > div > div.col-xs-12.col-md-12.col-lg-4.col-lg-push-8.seo-intro > a").attr("href","/search")})</script>
2392 
2392<script>$(document).ready(function(){$("ul.seo-anchor-links li:nth-of-type(4) a").attr("href","/search")})</script>
2392 
2392<script>(function($){$.fn.countTo=function(options){options=options||{};return $(this).each(function(){var settings=$.extend({},$.fn.countTo.defaults,{from:$(this).data('from'),to:$(this).data('to'),speed:$(this).data('speed'),refreshInterval:$(this).data('refresh-interval'),decimals:$(this).data('decimals')},options);var loops=Math.ceil(settings.speed/settings.refreshInterval),increment=(settings.to-settings.from)/loops;var self=this,$self=$(this),loopCount=0,value=settings.from,data=$self.data('countTo')||{};$self.data('countTo',data);if(data.interval){clearInterval(data.interval)}
2393data.interval=setInterval(updateTimer,settings.refreshInterval);render(value);function updateTimer(){value+=increment;loopCount++;render(value);if(typeof(settings.onUpdate)=='function'){settings.onUpdate.call(self,value)}
2394if(loopCount>=loops){$self.removeData('countTo');clearInterval(data.interval);value=settings.to;if(typeof(settings.onComplete)=='function'){settings.onComplete.call(self,value)}}}
2395function render(value){var formattedValue=settings.formatter.call(self,value,settings);$self.html(formattedValue)}})};$.fn.countTo.defaults={from:0,to:0,speed:1000,refreshInterval:100,decimals:0,formatter:formatter,onUpdate:null,onComplete:null};function formatter(value,settings){return value.toFixed(settings.decimals)}}(jQuery));jQuery(function($){$('.count-number').data('countToOptions',{formatter:function(value,options){return value.toFixed(options.decimals).replace(/\B(?=(?:\d{3})+(?!\d))/g,',')}});$('.timer').each(count);function count(options){var $this=$(this);options=$.extend({},options||{},$this.data('countToOptions')||{});$this.countTo(options)}})</script>
2395 
2395<script>$(document).ready(function(){$('#sign-up-modal.modal #signupForm').append('<input type="hidden" name="tags" value="registration_signup">')})</script>
2395 
2395<script>$('.menu-toggle').click(function(){$('#slide-out-nav, .slide-out-nav-overlay').addClass('open')});$('.close-nav, .slide-out-nav-overlay').click(function(){$('#slide-out-nav, .slide-out-nav-overlay').removeClass('open')})</script>
2395 
2395<script>$("#slide-out-nav > div.render-menu > ul").append('<li class="nav-item"><a style="color:#fff!important; max-width:250px; margin:0 auto;" id="top-nav-marketing-plan" class="nav-link-color btn-primary" data-toggle="modal" data-target="#getmarketingplan">Get Marketing Plan</a></li>')</script>
2395 
2395<script>$(document).ready(function(){$(".seo-anchor-links li:contains('Sitemap')").css("display","none");$(".seo-anchor-links li:contains('DMCA')").css("border-right","unset");$(".seo-anchor-links li:contains('DMCA')").css("padding-right","unset");$(".seo-anchor-links li:contains('DMCA')").css("margin-right","0px")})</script>
2395 
2395<script src="https://cdnjs.cloudflare.com/ajax/libs/OwlCarousel2/2.3.4/owl.carousel.min.js"></script>
2395 <div class="modal fade magic-modal" id="getmarketingplan" tabindex="-1" role="dialog" aria-labelledby="getmarketingplan" style="display: none;" aria-hidden="true"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-body"> <button type="button" class="close" data-dismiss="modal" aria-label="Close" data-selector="a.btn, button.btn, button" style="outline: none; cursor: inherit;"><span aria-hidden="true">×</span></button> <h4 class="prmry-color" data-selector="h1, h2, h3, h4, h5, h6" style="outline: none; cursor: inherit;">Request property marketing plan</h4> <p data-selector="p" style="outline: none; cursor: inherit;">You're one step away from getting a free marketing plan that shows how we'll sell your home for the most amount of money in the least amount of time - hassle free.</p> <form class="form-contact" id="form-contact6"> <input type="hidden" name="lead_type" value="seller"><input type="hidden" name="tags" value="Marketing_Plan_Requested"> <div class="row"> <div class="col-sm-6"> <div class="form-group"> <input name="contact6_fname" id="contact6_fname" placeholder="First Name" class="form-control" required="" type="text"> </div> </div> <div class="col-sm-6"> <div class="form-group"> <input name="contact6_lname" id="contact6_lname" placeholder="Last Name" class="form-control" required="" type="text"> </div> </div> <div class="col-sm-6"> <div class="form-group"> <input name="contact6_email" id="contact6_email" placeholder="Email Address" class="form-control" required="" type="email"> </div> </div> <div class="col-sm-6"> <div class="form-group"> <input name="contact6_phone" id="contact6_phone" placeholder="Phone Number" class="form-control" required="" type="tel"> </div> </div> <div class="col-sm-6"> <div class="form-group"> <input name="contact6_address" id="contact6_address" placeholder="Address" class="form-control" required="" type="text"> </div> </div> <div class="col-sm-6"> <div class="form-group"> <input name="contact6_city" id="contact6_city" placeholder="City" class="form-control" required="" type="text"> </div> </div> <div class="col-sm-6"> <div class="form-group"> <input name="contact6_state" id="contact6_state" placeholder="State" class="form-control" required="" type="text"> </div> </div> <div class="col-sm-6"> <div class="form-group"> <input name="contact6_zip" id="contact6_zip" placeholder="ZIP" class="form-control" required="" type="text"> </div> </div> <div class="col-sm-12"> <div class="form-group"> <select name="When are you selling" id="contact6_whenareyouselling" class="form-control" placeholder="When are you planning to sell?"> <option value="" disabled="" selected="">When are you planning to sell?</option> <option value="now">Now</option> <option value="0-6 months">0-6 months</option> <option value="6+ months">6+ months</option> </select> </div> </div> </div> <button class="btn btn-primary" type="submit" id="cf-submit" name="submit" data-selector="a.btn, button.btn, button" style="outline: none; cursor: inherit;">Send</button> </form> </div> </div> </div> </div></body> </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.