PageSourceSearch

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

html thebergaminigroup.com collected 2026-09-30 10:08:25 UTC 167,551 bytes, 2,459 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> 
1<script type="application/ld+json">{"@context":"https:\/\/schema.org","@type":"LocalBusiness","name":"The Bergamini Group | Keller Williams Arizona Realty | PLACE","url":"https:\/\/www.thebergaminigroup.com","image":"https:\/\/cdn1.brivityidx.com\/assets\/images\/agent-photos\/1\/3\/8\/13838992\/Bergamini_New_Combo.png","telephone":"+19282274899","address":{"@type":"PostalAddress","streetAddress":"3767 Karicio Lane","addressLocality":"Prescott","addressRegion":"AZ","postalCode":"86303","addressCountry":"US"},"sameAs":["https:\/\/www.facebook.com\/prescottazrealty","https:\/\/www.instagram.com\/thebergaminigroup\/"]}</script>
1 <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/106226/favicon.ico" 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.thebergaminigroup.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.css" rel="stylesheet"><link href="https://cdn1.brivityidx.com/assets/css/style-premium.css" rel="stylesheet"><link href="https://cdn1.brivityidx.com/assets/css/style-footers.min.css" rel="stylesheet"><link href="https://cdn1.brivityidx.com/idx-sites/2/2/0/22064/site_custom.css?v=1789579267" rel="stylesheet">
204<script type="text/javascript" src="https://cdn1.brivityidx.com/idx-sites/2/2/0/22064/global_js_variables.js?v=1789579267"></script>
204<link rel="stylesheet" href="https://use.typekit.net/mao5ffc.css"> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0,user-scalable=0"/> <meta name="p:domain_verify" content="b4e6cdeec8de4432dab132326e345827"/> 
204<script>
vendor: 395 bytes, lines 204-210
204
205!function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?
206n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;
207n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;
208t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,
209document,'script','https://connect.facebook.net/en_US/fbevents.js');
210fbq('init', "
210985247084993829
vendor: 30 bytes, lines 210-211
210");
211fbq('track', 'PageView');
212var propDetailsPixelOnReady = function(){
213  let propDetFpst = new FbRealEstatePixelTracker({"eventType": "ViewContent", "content_ids": [""]});
214  propDetFpst.fireEvent();
215};
216if (document.readyState === "complete" || (document.readyState !== "loading" && !document.documentElement.doScroll)) {
217  propDetailsPixelOnReady();
218} else {
219  document.addEventListener("DOMContentLoaded", propDetailsPixelOnReady);
220}
221
222console.log('facebook pixel PageView tracking...');
223</script>
223 <noscript><img height="1" width="1" style="display:none" src="https://www.facebook.com/tr?id=985247084993829&ev=PageView&noscript=1"></noscript> 
223<script>
vendor: 327 bytes, lines 223-227
223(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
224new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
225j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
226'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
227})(window,document,'script','dataLayer','
227GTM-5PHKR95S
vendor: 3 bytes, line 227
227');
227</script>
vendor: 64 bytes, line 227
227 <script async src="https://www.googletagmanager.com/gtag/js?id=
227AW-1005314267
vendor: 13 bytes, lines 227-228
227">
228</script> 
228<script>
229  
vendor: 134 bytes, lines 229-233
229window.dataLayer = window.dataLayer || [];
230  function gtag(){dataLayer.push(arguments);}
231  gtag('js', new Date());
232
233  gtag('config', '
233AW-1005314267
vendor: 4 bytes, line 233
233');
234</script>
234<meta property="og:url" content="https://www.thebergaminigroup.com/myportal/collections"> <meta property="og:image" content="http://images.brivityidx.com/assets/images/uploads/106226/Bergamini_New_Thumbnail.jpg"> <meta property="og:image:secure_url" content="https://images.brivityidx.com/assets/images/uploads/106226/Bergamini_New_Thumbnail.jpg"> <meta property="og:description" content=""> <meta property="og:title" content="MyPortal | Collections"> </head> <body>
vendor: 68 bytes, line 234
234 <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
234GTM-5PHKR95S
vendor: 83 bytes, line 234
234" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> 
234<script>
235                  window.fbAsyncInit = function() {
236                    FB.init({
237                      appId      : '1',
238                      cookie     : true,
239                      xfbml      : true,
240                      version    : 'v17.0'
241                    });
242                    FB.AppEvents.logPageView();
243                  };
244
245                  setTimeout(() => {(function(d, s, id){
246                     var js, fjs = d.getElementsByTagName(s)[0];
247                     if (d.getElementById(id)) {return;}
248                     js = d.createElement(s); js.id = id;
249                     js.defer = true;
250                     js.xfbml = false;
251                     js.src = "//connect.facebook.net/en_US/sdk.js";
252                     fjs.parentNode.insertBefore(js, fjs);
253                   }(document, 'script', 'facebook-jssdk'))}, 5000);
254                </script>
254<meta property="fb:app_id" content="1"><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>
254<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"><div class="place-hiring-modal modal fade magic-modal" id="sell-modal" tabindex="-1" role="dialog" aria-labelledby="sell-modal" style="display: none;"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-body" style="text-align: center;"> <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;">We're Hiring!</h4> <p class="" data-selector="p" style="outline: none; cursor: inherit;">Join one of the fastest growing real estate teams in the US and Canada. Fill out the form below and we will contact you with more info.</p> <form class="form-contact" id="form-contact4" _lpchecked="1"> <input type="hidden" name="lead_type" value="recruit"> <input type="hidden" name="tags" value="Hiring Submission"> <div class="row"> <div class="col-sm-6"> <div class="form-group"> <input name="contact4_fullname" id="contact4_fullname" placeholder="Full Name" class="form-control" required="" type="text" autocomplete="off" style='background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAkCAYAAADo6zjiAAAAAXNSR0IArs4c6QAAAbNJREFUWAntV8FqwkAQnaymUkpChB7tKSfxWCie/Yb+gbdeCqGf0YsQ+hU95QNyDoWCF/HkqdeiIaEUqyZ1ArvodrOHxanQOiCzO28y781skKwFW3scPV1/febP69XqarNeNTB2KGs07U3Ttt/Ozp3bh/u7V7muheQf6ftLUWyYDB5yz1ijuPAub2QRDDunJsdGkAO55KYYjl0OUu1VXOzQZ64Tr+IiPXedGI79bQHdbheCIAD0dUY6gV6vB67rAvo6IxVgWVbFy71KBKkAFaEc2xPQarXA931ot9tyHphiPwpJgSbfe54Hw+EQHMfZ/msVEEURjMfjCjbFeG2dFxPo9/sVOSYzxmAwGIjnTDFRQLMQAjQ5pJAQkCQJ5HlekeERxHEsiE0xUUCzEO9AmqYQhiF0Oh2Yz+ewWCzEY6aYKKBZCAGYs1wuYTabKdNNMWWxnaA4gp3Yry5JBZRlWTXDvaozUgGTyQSyLAP0dbb3DtQlmcan0yngT2ekE9ARc+z4AvC7nauh9iouhpcGamJeX8XF8MaClwaeROWRA7nk+tUnyzGvZrKg0/40gdME/t8EvgG0/NOS6v9NHQAAAABJRU5ErkJggg=="); background-repeat: no-repeat; background-attachment: scroll; background-size: 16px 18px; background-position: 98% 50%;'> </div> <div id="honeypot-div"> <input name="age_required" id="age_required" value="" type="text" style="display: none;"> </div> </div> <div class="col-sm-6"> <div class="form-group"> <input name="contact4_email" id="contact4_email" placeholder="Email Address" class="form-control" required="" type="email"> </div> </div> <div class="col-sm-6"> <div class="form-group"> <input name="contact4_phone" id="contact4_phone" placeholder="Phone Number" class="form-control phone_mask" type="tel"> </div> </div> <div class="col-sm-6"> <div class="form-group"> <input name="contact4_position" id="contact4_position" placeholder="Job Position" class="form-control contact_position" required="" type="text"> </div> </div> <div class="col-sm-6"> <div class="form-group dropdown-wrapper"> <select id="contact4_license" name="contact4_license" required="" class="form-control dropdown" type="text"> <option value="I don’t have a real estate license">I don’t have a real estate license</option> <option value="I have started real estate license coursework">I have started real estate license coursework</option> <option value="I am currently licensed to practice real estate">I am currently licensed to practice real estate</option> </select> </div> </div> <div class="col-sm-6"> <div class="form-group"> <input name="contact4_availability_date" id="contact4_availability_date" placeholder="Availability Date" class="form-control contact_date" type="text"> </div> </div> <div class="col-sm-6"> <div class="form-group"> <textarea name="contact4_resume" id="contact4_resume" class="form-control" rows="3" placeholder="Resumé Link (Dropbox/Google Drive)"></textarea> </div> </div> <div class="col-sm-6"> <div class="form-group"> <textarea name="contact4_message" id="contact4_message" class="form-control" rows="3" placeholder="Your Message" required=""></textarea> </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> <div class="modal fade magic-modal" id="getmarketingplan" tabindex="-1" role="dialog" aria-labelledby="getmarketingplan" style="display: none;"> <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" 
254class="form-control" required="" type="text"> </div> </div> <div class="col-sm-12"> <div class="form-group"> <select name="contact6_whenareyouselling" 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="1">Now</option> <option value="2">0-6 months</option> <option value="3">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> <header id="premium-navigation" data-selector="#premium-navigation" style="outline: none; cursor: inherit;"> <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: none; 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: none; cursor: inherit;"> <img class="img-responsive site_custom_logo" src="https://cdn1.brivityidx.com/assets/images/agent-photos/1/3/8/13838992/Bergamini_New_Combo.png" alt="Logo" style="outline: none; cursor: inherit;" data-selector="img"></a> </div> <div class="collapse navbar-collapse"> <ul class="nav navbar-nav navbar-right" style="outline: none; cursor: inherit;"> <li class="nav-item" data-selector="li" style="outline: none; cursor: inherit;"> <a class="nav-link-color" href="/search" style="outline: none; cursor: inherit;">SEARCH LISTINGS</a> </li> <li class="nav-item" data-selector="li" style="outline: none; cursor: inherit;"> <a class="nav-link-color" href="/homevalue" style="outline: none; cursor: inherit;">Home Value</a> </li> <li class="nav-item dropdown" data-selector="li" style="outline: none; cursor: inherit;"> <a class="dropdown-toggle sec-nav-link-color" data-toggle="dropdown" data-hover="dropdown" data-delay="0" data-close-others="false" href="/top_areas" aria-expanded="false">Areas We Serve<i class="fa fa-angle-down" data-selector=".fa" style="outline: none; cursor: inherit;"></i></a> <ul class="dropdown-menu"> <li class="sec-nav-drop-color" data-selector="li" style="outline: none; cursor: inherit;"> <a class="sec-nav-drop-link-color" href="/search?multi_search=Prescott,%20AZ&amp;multi_cat=CityState&amp;propertyType=Condo/Townhome%7CMulti-Family%7CResidential&amp;status=1#?q_limit=200&amp;mlsId=21%7C250%7C248%7C245&amp;price=10000:&amp;multi_search=Prescott,%20AZ&amp;multi_cat=CityState&amp;propertyType=Condo/Townhome%7CMulti-Family%7CResidential&amp;status=1&amp;q_sort=createdAt-&amp;q_offset=0"> PRESCOTT AREA</a> </li> <li class="sec-nav-drop-color" data-selector="li" style="outline: none; cursor: inherit;"> <a class="sec-nav-drop-link-color" href="/search?multi_search=Sedona,%20AZ&amp;multi_cat=CityState&amp;propertyType=Condo/Townhome%7CMulti-Family%7CResidential&amp;status=1#?q_limit=200&amp;mlsId=21%7C250%7C248%7C245&amp;price=10000:&amp;multi_search=Sedona,%20AZ&amp;multi_cat=CityState&amp;propertyType=Condo/Townhome%7CMulti-Family%7CResidential&amp;status=1&amp;q_sort=createdAt-&amp;q_offset=0"> SEDONA/VERDE VALLEY</a> </li> <li class="sec-nav-drop-color" data-selector="li" style="outline: none; cursor: inherit;"> <a class="sec-nav-drop-link-color" href="/search?multi_search=Flagstaff,%20AZ&amp;multi_cat=CityState&amp;propertyType=Condo/Townhome%7CMulti-Family%7CResidential&amp;status=1#?q_limit=200&amp;mlsId=21%7C250%7C248%7C245&amp;price=10000:&amp;multi_search=Flagstaff,%20AZ&amp;multi_cat=CityState&amp;propertyType=Condo/Townhome%7CMulti-Family%7CResidential&amp;status=1&amp;q_sort=createdAt-&amp;q_offset=0"> FLAGSTAFF AREA</a> </li> <li class="sec-nav-drop-color" data-selector="li" style="outline: none; cursor: inherit;"> <a class="sec-nav-drop-link-color" href="/search?multi_search=Phoenix,%20AZ&amp;multi_cat=CityState&amp;propertyType=Condo/Townhome%7CMulti-Family%7CResidential&amp;status=1#?q_limit=200&amp;
254mlsId=21%7C250%7C248%7C245&amp;price=10000:&amp;multi_search=Phoenix,%20AZ&amp;multi_cat=CityState&amp;propertyType=Condo/Townhome%7CMulti-Family%7CResidential&amp;status=1&amp;q_sort=createdAt-&amp;q_offset=0"> PHOENIX METRO</a> </li> <li class="sec-nav-drop-color" data-selector="li" style="outline: none; cursor: inherit;"> <a class="sec-nav-drop-link-color" href="/search?multi_search=Yuma,%20AZ&amp;multi_cat=CountyState&amp;propertyType=Condo/Townhome%7CMulti-Family%7CResidential%7CVacant%20Land&amp;status=1#?q_limit=200&amp;mlsId=21%7C250%7C248%7C245%7C647&amp;price=10000:&amp;multi_search=Yuma,%20AZ&amp;multi_cat=CountyState&amp;propertyType=Condo/Townhome%7CMulti-Family%7CResidential%7CVacant%20Land&amp;status=1&amp;q_sort=createdAt-&amp;q_offset=0"> YUMA COUNTY</a> </li> </ul> </li> <li class="nav-item" data-selector="li" style="outline: none; cursor: inherit;"> <a class="nav-link-color" href="/buying" style="outline: none; cursor: inherit;">BUY</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" href="/selling">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="/sell">SELL</a></li><li class="sec-nav-drop-color"><a class="sec-nav-drop-link-color" href="/cashoffer">CASH OFFER</a></li></ul></li> <li class="nav-item" data-selector="li" style="outline: none; cursor: inherit;"> <a class="nav-link-color" href="/financing" style="outline: none; cursor: inherit;">FINANCE</a> </li> <li data-selector="li" style="outline: none; cursor: inherit;"> <a class="menu-toggle nav-link-color" style="outline: none; cursor: inherit;"> <span>MENU</span> <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> </a> </li> <li class="nav-item" data-selector="li" style="outline: none; cursor: inherit;"> <a id="top-nav-marketing-plan" data-toggle="modal" data-target="#sell-modal" class="nav-link-color" style="outline: none; cursor: inherit;">WE'RE HIRING</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">SEARCH LISTINGS</a></li><li class="nav-item"><a class="sec-nav-link-color" href="/buying">BUYING</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">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="/sell">SELL</a></li><li class="sec-nav-drop-color"><a class="sec-nav-drop-link-color" href="/cashoffer">CASH OFFER</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">Areas We Serve<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?multi_search=Prescott,%20AZ&amp;multi_cat=CityState&amp;propertyType=Condo/Townhome|Multi-Family|Residential&amp;status=1&amp;mlsId=21|250|248|245&amp;price=10000:&amp;q_sort=createdAt-&amp;q_offset=0">PRESCOTT AREA</a></li><li class="sec-nav-drop-color">
254<a class="sec-nav-drop-link-color" href="/search?multi_search=Sedona,%20AZ&amp;multi_cat=CityState&amp;propertyType=Condo/Townhome|Multi-Family|Residential&amp;status=1&amp;mlsId=21|250|248|245&amp;price=10000:&amp;q_sort=createdAt-&amp;q_offset=0">SEDONA/VERDE VALLEY</a></li><li class="sec-nav-drop-color"><a class="sec-nav-drop-link-color" href="/search?multi_search=Flagstaff,%20AZ&amp;multi_cat=CityState&amp;propertyType=Condo/Townhome|Multi-Family|Residential&amp;status=1&amp;mlsId=21|250|248|245&amp;price=10000:&amp;q_sort=createdAt-&amp;q_offset=0">FLAGSTAFF AREA</a></li><li class="sec-nav-drop-color"><a class="sec-nav-drop-link-color" href="/search?multi_search=Phoenix,%20AZ&amp;multi_cat=CityState&amp;propertyType=Condo/Townhome|Multi-Family|Residential&amp;status=1&amp;mlsId=21|250|248|245&amp;price=10000:&amp;q_sort=createdAt-&amp;q_offset=0">PHOENIX METRO</a></li><li class="sec-nav-drop-color"><a class="sec-nav-drop-link-color" href="/search?multi_search=Yuma,%20AZ&amp;multi_cat=CityState&amp;propertyType=Condo/Townhome|Multi-Family|Residential&amp;status=1&amp;mlsId=21|250|248|245&amp;price=10000:&amp;q_sort=createdAt-&amp;q_offset=0">YUMA COUNTY</a></li></ul><li class="nav-item"><a class="sec-nav-link-color" href="/financing">FINANCING</a></li><li class="nav-item"><a class="sec-nav-link-color" href="/homevalue">Home Value</a></li><li class="nav-item"><a class="sec-nav-link-color" href="/realestateagent/search">MEET THE TEAM</a></li><li class="nav-item"><a class="sec-nav-link-color" href="/reviews">REVIEWS</a></li><li class="nav-item"><a class="sec-nav-link-color" href="/careers">CAREERS</a></li><li class="nav-item"><a class="sec-nav-link-color" href="https://www.place.com/">ABOUT PLACE</a></li><li class="nav-item"><a class="sec-nav-link-color" href="/connect">CONNECT</a></li><li class="nav-item"><a class="sec-nav-link-color" href="/featured-properties">Featured Properties</a></li><li class="nav-item"><a class="sec-nav-link-color" href="/developer-homes">Developer Homes</a></li><li class="nav-item"><a class="sec-nav-link-color" href="/blog">blog</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" 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" 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" 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/Bergamini_New_Combo.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> 
255       
256    .center-modal {
257        display:flex;
258        justify-content: center;
259        align-items:center;
260        position:fixed;
261        background-color:rgba(0,0,0,0.4);
262        left:0;
263        top:0;
264        right:0; 
265        bottom:0;
266        z-index: 300;
267    }
268
269    .page-width-parent{
270        max-width: 1280px;
271        margin: 0 auto;
272    }
273
274
275    .property-list-map-view {
276        display:flex;
277        flex-wrap:wrap;
278        gap:16px;
279    }
280    .property-list-map-view-parent {
281        background-color: #F9F9F9;
282        padding:16px;
283        height:710px;
284        overflow:scroll;
285    }
286
287    .property-list-list-view {
288        display:flex;
289        flex-wrap:wrap;
290        gap:24px
291    }
292
293    .property-container {
294        
295        gap:24px;
296    }
297
298    .property-map-container {
299        flex:1;
300        height:710px;
301    }
302
303    .property-pagination {
304        margin-top: 26px;
305    }
306
307    .collection-saved-listings {
308        margin-bottom: 26px;
309        font-size:16px;
310        color:black;
311    }
312
313    .collection-description {
314        padding: 20px 0 18px 8px;
315    }
316
317    .my-feed-parent {
318        margin-top:32px;
319        padding-top:32px; 
320        border-top: solid 1px #C4C4C4;
321    }
322
323    .collection-description-text {
324        font-size:16px;
325        margin:0;
326        color:black;
327    }
328
329    #collections {
330        display:flex;
331        flex-wrap:wrap;
332        gap:40px 24px;
333    }
334
335    #collection-pagination{
336        margin-top: 55px
337    }
338
339    #add-listing-btn{
340        margin-bottom: 20px
341    }
342
343    @media only screen and (min-width: 1280px) {
344        .collection-page {
345            padding:48px 48px 48px 120px;
346        }
347        .my-feed-parent {
348            width:90vw;
349            max-width: 100%;
350            overflow: hidden;
351        }
352        .property-list-map-view-parent {
353            width:500px;
354        }
355        .property-container {
356                display:flex;
357        }
358    }
359
360    @media only screen and (max-width:1280px) {
361        .collection-page {
362            padding:60px 16px 16px 16px;
363        }
364        .my-feed-parent {
365            width: unset;
366        }
367        .property-container {
368                display:flex;
369                flex-direction: column-reverse;
370        }
371        .property-list-map-view {
372            flex-wrap:nowrap;
373            overflow:scroll;
374            height:280px;
375        }
376        .property-list-map-view-parent {
377            height:unset;
378            padding:0px;
379            background-color: #FFFFFF
380        }
381        .property-map-container {
382            flex:none;
383            height:446px;
384        }
385    }
386
387    @media only screen and (max-width:768px) {
388        #collections {
389            justify-content: center;
390        }
391        .property-map-container {
392            width: calc(100% + 32px);
393            margin-left: -16px;
394        }
395        .property-list-map-view {
396            height:250px;
397        }
398    }
399
400</style> 
400<script>
401    window.addEventListener("load", () => {
402    const key = localStorage.getItem('authorization');
403     
404        if( !key) {
405            $("#sign-up-modal").modal('show');
406
407            $("#sign-up-modal").on("hidden.bs.modal", function () {
408                location.reload();
409            });
410        }
411        else{
412
413            let myPortalPage = document.getElementById('myportal-page');
414            myPortalPage.style.display = "block";
415
416            window.location.hash = ""
417
418            function isGuid(value) {    
419                var regex = /[a-f0-9]{8}(?:-[a-f0-9]{4}){3}-[a-f0-9]{12}/i;
420                var match = regex.exec(value);
421                return match != null;
422            }
423
424            let lastUrlItem = window.location.href.substring(window.location.href.lastIndexOf('/') + 1)
425            let showCollectionByUUID = false
426
427            if (isGuid(lastUrlItem)) {
428              showCollectionByUUID = true
429            } 
430
431          
432            class logger extends Collections.BaseLogger {
433                log(e) {
434                    console.log(e);
435                }
436            }
437
438
439            class Pubsub {
440                static events = {};
441                constructor() {
442                    //this.events = {};
443                }
444
445                static subscription (eventName, func) {
446                    return {
447                        subscribe: () => {
448                            if (this.events[eventName]) {
449                                this.events[eventName].push(func);
450                            } else {
451                                this.events[eventName] = [func];
452                            }
453                        },
454                        unsubscribe: () => {
455                            if(this.events[eventName]){
456                                this.events[eventName] = this.events[eventName].filter((subscriber) => subscriber !== func);
457                            }
458                        }
459                    }
460                } 
461
462                static publish(eventName, ...args) {
463                    const funcs = this.events[eventName];
464                    if (Array.isArray(funcs)) {
465                        funcs.forEach((func) => {
466                            func.apply(null, args);
467                        });
468                    }
469                }
470            }
471
472            class CollectionCard  {
473                constructor(collection, count){
474                    
475                    this.element = document.createElement(`place-collectioncard`);
476                    this.collection = collection
477                    let _this = this;
478                    let menuOpen = false;
479                    var images = [];
480                
481                    for (let i = 0; i < collection?.propertiesImages?.length; i++) {
482                        images.push(collection.propertiesImages[i].mainPhoto);
483                    }
484                
485                    this.element.setAttribute("appearance", "regular");
486                    this.element.setAttribute("image", images);
487                    this.element.setAttribute("num_properties", collection?.totalListings ?? 0)
488                    this.element.setAttribute("title", collection.collectionName);
489                    this.element.setAttribute("description", collection.collectionDescription ? collection.collectionDescription : collection.description ? collection.description : "");
490                    this.element.setAttribute("creator", "");
491                    this.element.setAttribute("disable_dropdown", "false");
492                    this.element.setAttribute("style", "height: 254px");
493                    this.element.setAttribute('z_index', count);
494                    this.element.setAttribute("show_menu", "false");
495                    this.element.setAttribute("id", collection.collectionUUID);
496                    this.element.setAttribute("container_styles", "w-[300px]");
497
498                    const collectionUUID = collection.collectionUUID;
499
500                    this.element.addEventListener(`on_menu_item_pressed`, (e) => {
501                        let menuItem = e.detail
502                        Pubsub.publish('collection_card_menu_item_pressed', {collection,menuItem});
503                    });
504
505                    this.element.addEventListener('on_search_pressed', (e) => {
506                        if (e.target.tagName != "svg" && e.target.tagName != "path") {
507                            window.open('../../search.php', '_blank');
508                            e.stopPropagation();
509                        }
510                    });
511                    
512                    this.element.addEventListener(`click`, (e) => {
513                        if (e.target.tagName != "svg" && e.target.tagName != "path" && !menuOpen) {
514                             Pubsub.publish('collection_card_pressed', {collection:_this.collection,e});
515                            e.stopPropagation();
516                        }
517                    });
518
519                    this.element.addEventListener(`on_menu_open`, (e) => {  
520                        if (this.element.getAttribute("title") === "Favorites") {
521                            this.element.setAttribute("disable_menu", "true");
522                        }
523
524                        menuOpen = e.detail;
525                        this.element.setAttribute("show_menu", menuOpen);
526                    });
527                }
528            }
529
530            class CollectionSection  {
531
532              
533                collectionSection = document.getElementById('collection-section')
534                collections = document.getElementById('collections')
535
536                addCollectionCard = (collection, count) => {
537                    const collectionCard = new CollectionCard(collection, count);
538
539
540                   
541                
542                   this.collections.append(collectionCard.element);
543                
544                } 
545
546                show = () => {
547                    this.collectionSection.style.display = 'block'
548                }
549
550                hide = () => {
551                    this.collectionSection.style.display = 'none'
552                }
553            }
554
555            class PropertyCard {
556                constructor(collectionUUID,property){
557                    
558                    let _this = this;
559                    this.element = document.createElement(`place-propertycard`);
560                    let menuOpen = false;
561                    this.property = property;
562 
563                    this.element.setAttribute("id", property.blossorId)
564                    this.element.setAttribute("display_menu", "true");
565                    this.element.setAttribute("show_menu", "false");
566                    this.element.setAttribute("items", '[{"icon":"share-2","text":"Share Property"},{"icon":"layers","text":"Copy to Collection"},{"icon":"trash","text":"Remove from Collection"}]');
567                    
568                    this.element.setAttribute('appearance','small')
569                    this.element.setAttribute('layout_width', '300')
570                    this.element.setAttribute('display_tag', 'true')
571                    this.element.setAttribute('display_favorite', 'true')
572                    this.element.setAttribute('mls',`{
573                        "status":"${property.statusText}", 
574                        "favorite":"true", 
575                        "image":[{"uri":"${property?.photos[0]?.url}"}], 
576                        "price":"${property?.price}",
577                        "address":"${property?.address?.street}",
578                        "state":"${property?.address?.state}", 
579                        "city":"${property?.address?.city}", 
580                        "postalCode":"${property?.address?.zip}", 
581                        "beds":"${property?.bedrooms}", 
582                        "baths":"${property?.totalBaths}",
583                        "sqft":"${property?.sqFeet}"
584                    }`)
585                    this.element.setAttribute('on_hover', 'true')
586
587                    this.element.addEventListener('mouseenter', (e) => {
588                        Pubsub.publish('property_card_mouseenter', property);
589                    })
590
591                    this.element.addEventListener('mouseleave', (e) => {
592                        Pubsub.publish('property_card_mouseleave', property);
593                    })
594
595                    this.element.addEventListener(`on_menu_item_pressed`, (e) => {
596                        let menuItem = e.detail
597                        let propertyCollectionUUID = property.propertyCollectionUUID
598                        let url = this.getPropertyUrl(this.property);
599                        property.searchUrl = url;
600                        Pubsub.publish('property_card_menu_item_pressed', {property,collectionUUID,propertyCollectionUUID,menuItem, url});
601                    });
602
603                    this.element.addEventListener(`on_menu_open`, (e) => {    
604                        menuOpen = e.detail;
605                       this.element.setAttribute("show_menu", menuOpen);
606                    });
607
608                    this.element.addEventListener('click', (e) => {
609                        if (e.target.tagName != "svg" && e.target.tagName != "path" && !menuOpen) {
610                            let state = _this.property.address.state;
611                            let city = _this.slugify(_this.property.address.city);
612                            let zip = _this.property.address.zip
613                            let address = _this.slugify(_this.property.address.street);
614                            let blossorId = _this.property.blossorId;
615                            let url = this.getPropertyUrl(property);
616                            window.open(`../../${url}`, '_blank');
617                        }        
618                    });
619
620                    this.element.addEventListener('on_favorite_press', (e) => {
621                        let propertyCollectionUUID = property.propertyCollectionUUID;
622                        Pubsub.publish('delete_property_modal_pressed', {collectionUUID, propertyCollectionUUID});
623                    });
624
625                }
626
627                getPropertyUrl = (property) => {
628                    let state = property.address.state;
629                    let city = this.slugify(property.address.city);
630                    let zip = property.address.zip
631                    let address = this.slugify(property.address.street);
632                    let blossorId = property.blossorId;
633                    return `homes-for-sale/${state}/${city}/${zip}/${address}/bid-${blossorId}`;
634                }
635
636                slugify(text) {
637                     // replace non letter or digits by -
638                    text = text.replace(/[^\pL\d]+~u/g, '_');
639                    // transliterate
640                    text = text.normalize('NFKD').replace(/[\u0300-\u036F]/g,'')
641                    // remove unwanted characters
642                    text = text.replace(/[^_\w]+/g, '_');
643                    // trim
644                    text = text.trim();
645                    // remove duplicate -
646                    text = text.replace(/_+/g, '-');
647                    // lowercase
648                    text = text.toLowerCase();
649                    if (!text) {
650                        return 'n-a';
651                    }
652                    return text
653                }
654            }
655
656            let dateNow = new Date();
657            dateNow.setDate(dateNow.getDate()-7);
658            dateNow.setHours(dateNow.getHours());
659            dateNow.setMinutes(dateNow.getMinutes());
660            dateNow.setSeconds(dateNow.getSeconds());
661            const sevenDaysAgo = dateNow.getTime();
662
663            class PropertySection   {
664                propertySection = document.getElementById('property-section')
665                listIcon = document.getElementById('property-list-icon')
666                mapIcon = document.getElementById('property-map-icon')
667                propertyHeader = document.getElementById('property-header')
668                propertyList = document.getElementById("property-list")
669                propertyListParent = document.getElementById("property-list-parent")
670                propertyMap = document.getElementById('property-map')
671                selectedView = 'map'
672
673                collectionProperties = []
674
675                properties = []
676            
677
678                constructor() {
679                    this.listIcon.addEventListener('click', () => {
680                        this.setView('list')
681                    })
682
683                    this.mapIcon.addEventListener('click', () => {
684                        this.setView('map')
685                    })
686                }
687
688                show = (collectionUUID, collectionProperties) => {
689                    this.propertySection.style.display = 'block'
690                    this.collectionProperties = collectionProperties
691                    this.collectionUUID = collectionUUID
692                    
693                    this.propertyList.innerHTML = ''
694                    count = 100;
695                     
696                    this.collectionProperties?.data?.properties?.forEach((property) => {
697                         count--
698                        this.addPropertyCard(property,collectionUUID, count)
699                    });
700                }
701
702                hide = () => {
703                    this.propertySection.style.display = 'none'
704                }
705
706                setPropertyCardWidth = () => {
707                    let width;
708                    let imageHeight;
709                    let windowWidth = window.innerWidth
710                    if(this.selectedView == 'map') {
711                        if(windowWidth > 1279) {
712                            width = `220`;
713                            imageHeight = `154`;
714                        } else if(windowWidth > 768) {
715                            width = `325`;
716                            imageHeight = `184`;
717                        } else{
718                            width = `244`;
719                            imageHeight = `154`;                            
720                        }
721                    } 
722                    else {
723                        if(windowWidth > 1440 ){
724                            width = `300`;
725                            imageHeight = `184`;
726                        }
727                        else if(windowWidth > 1279) {
728                            width = `260`;
729                            imageHeight = `152`;
730                        } else if(windowWidth > 768) {
731                            width = `218`;
732                            imageHeight = `152`;
733                        } else{
734                            width = `288`;
735                            imageHeight = `184`;
736                        }
737                    }
738
739                    let propertyCards = document.querySelectorAll('place-propertycard')
740                    propertyCards.forEach((propertyCard) => {
741                        propertyCard.setAttribute('layout_width', width)
742                        propertyCard.setAttribute('image_height', imageHeight)                    
743                    })
744                }
745
746                setView = (view) => {
747                    this.selectedView = view
748                    if (view == 'list') {
749                        this.listIcon.setAttribute('stroke', 'black')
750                        this.mapIcon.setAttribute('stroke', 'gray')
751
752                        this.propertyMap.style.display = 'none'
753                        this.propertyList.classList.add('property-list-list-view')
754                        this.propertyList.classList.remove('property-list-map-view')
755                        this.propertyListParent.classList.remove('property-list-map-view-parent')
756
757                        Pubsub.publish('property_section_show_list_view', this.collectionProperties?.data?.properties);
758                    } else {
759                        this.listIcon.setAttribute('stroke', 'gray')
760                        this.mapIcon.setAttribute('stroke', 'black')
761
762                        this.propertyMap.style.display = 'block'
763                        this.propertyList.classList.remove('property-list-list-view')
764                        this.propertyList.classList.add('property-list-map-view')
765                        this.propertyListParent.classList.add('property-list-map-view-parent')
766
767                        Pubsub.publish('property_section_show_map_view', this.collectionProperties?.data?.properties);
768                    }
769
770                    this.setPropertyCardWidth();
771                }
772
773                scrollIntoView = (id) => {
774                    let propertyCard = document.getElementById(id);
775                    propertyCard.scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'start' })
776                }
777
778                addPropertyCard = (property, collectionUUID, count) => {
779                    
780                    var propertyCardWrapperElement = document.createElement(`div`)
781                    propertyCardWrapperElement.setAttribute('style', `z-index:${count}`)
782                     propertyCardWrapperElement.setAttribute('class', 'property-card-wrapper')
783                     propertyCardWrapperElement.setAttribute("id", property.propertyCollectionUUID);
784                     
785                    const propertyCard = new PropertyCard(collectionUUID,property);
786                    var propertyCardElement = propertyCard.element;
787                
788                    propertyCardWrapperElement.append(propertyCardElement)
789                    
790                    this.propertyList.append(propertyCardWrapperElement)
791                
792                }
793                
794            }
795
796
797            class PageSubHeader{
798                constructor() {
799                    
800                    this.element = document.querySelector('place-pagesubheader')
801
802                    this.element.addEventListener('button_on_press', (e) => {
803                        Pubsub.publish('create_new_collection_pressed', e)
804                    })
805
806                    this.element.addEventListener('top_header_on_press', (e) => {
807                        Pubsub.publish('top_header_back_pressed', e)
808                    })
809
810                     this.element.addEventListener('on_menu_item_pressed', (e) => {
811                        Pubsub.publish('top_header_menu_item_pressed', e.detail)
812                    })
813
814                    this.element.addEventListener('secondary_button_on_press', (e) => {
815                        window.open('../../search.php', '_blank')
816                    })
817                }
818
819                setTitle(title) {
820                    this.element.setAttribute('title', title)
821                }
822
823                setTopHeaderTitle(title){
824                    this.element.setAttribute('top_header_title', title)
825                }
826
827                showTopHeader(){
828                    this.element.setAttribute('show_top_header', true)
829                }
830
831                hideTopHeader(){
832                    this.element.setAttribute('show_top_header', false)
833                }
834
835                showPrimaryButton() {
836                    this.element.setAttribute('show_button', true)
837                }
838
839                hidePrimaryButton() {
840                    this.element.setAttribute('show_button', false)
841                }
842
843                showSecondaryButton(){
844                    this.element.setAttribute('show_secondary_button', true)
845                }
846
847                hideSecondaryButton(){
848                    this.element.setAttribute('show_secondary_button', false)
849                }
850
851                showMenuButton() {
852                    this.element.setAttribute('show_menu_button', true)
853                }
854
855                hideMenuButton() {
856                    this.element.setAttribute('show_menu_button', false)
857                }
858            }
859
860            class CollectionModal  {
861                
862                constructor() {
863                    
864                    let _this = this;
865                    this.element = document.querySelector('place-collectionpopup');
866                    this.collectionUUID = 0;
867
868                    this.element.addEventListener("on_close_press", (e) => {
869                        _this.hide();
870                    });
871
872                    this.element.addEventListener("on_save_press", (e) => {
873                        this.showError(false);
874                        e.detail.collectionUUID = this.collectionUUID
875                         e.detail.type = this.isEditingCollection ? 'edit' : 'save'
876                        Pubsub.publish('on_new_collection_saved', e.detail);
877                    });
878                    
879                }
880
881                setName(name) {
882                    this.element.setAttribute('name_value', name)
883                }
884
885                setDescription(description) {
886                    this.element.setAttribute('description_value', description ? description : "")
887                }
888
889                showError(error) {
890                    this.element.setAttribute('show_error', error)
891                }
892
893                 show(collectionUUID, isEditingCollection) {
894                    this.isEditingCollection = isEditingCollection;
895                    if(collectionUUID){
896                        this.collectionUUID = collectionUUID;
897                    }
898                    this.element.setAttribute('style', 'display:flex')
899                }
900
901                hide() {
902                    this.element.setAttribute('style', 'display:none');
903
904                    this.showError(false)
905
906                    // terrible hack.. only way i could get it to respond to prop changes
907                    // to clear the input fields after closing the modal
908                    this.setName('none')
909                    this.setDescription('none')
910                    setTimeout(() => {
911                        this.setName('')
912                        this.setDescription('')
913                    }, 100);
914                }
915            }
916
917            class CollectionCreatedModal  {
918                constructor() {
919                    
920                   
921                    this.collection = ""
922                    this.element = document.getElementById('collection-created-modal');
923                    let _this = this;
924
925                    this.element.addEventListener("on_primary_press", (e) => {
926                        this.hide();
927                        window.location.href = '../../search.php'
928                    });
929
930                    this.element.addEventListener("on_tertiary_press", (e) => {
931                        _this.hide();
932                        Pubsub.publish('collection_created_modal_view_collection_pressed', _this.collection);
933                    });
934
935                    this.element.addEventListener("on_close_press", (e) => {
936                        _this.hide();
937                    });
938
939                    this.element.setAttribute("stacked_buttons", true)
940                    this.element.setAttribute("primary_button_text", "Search Listings")
941                    this.element.setAttribute("tertiary_button_text", "View Collection")
942                }
943
944                show(collection) {
945                    if(collection){
946                        this.collection = collection;
947                    }
948                    this.element.setAttribute('style', 'display:flex')
949                }
950
951                hide() {
952                    this.element.setAttribute('style', 'display:none');
953                }
954            }
955
956            class EditCollectionModal  {
957                constructor() {
958                    
959                   
960                    this.collection = ""
961                    this.element = document.getElementById('edit-collection-modal');
962                    let _this = this;
963
964                    this.element.addEventListener("on_primary_press", (e) => {
965                        _this.hide();
966                        
967                    });
968
969                    
970
971                    this.element.addEventListener("on_close_press", (e) => {
972                        _this.hide();
973                    });
974                }
975
976                show() {
977                    
978                    this.element.setAttribute('style', 'display:flex')
979                }
980
981                hide() {
982                    this.element.setAttribute('style', 'display:none');
983                }
984            }
985
986            class DeleteCollectionModal {
987                constructor() {
988                   
989                   
990                    this.collection = ""
991                    this.element = document.getElementById('delete-collection-modal');
992                    let _this = this;
993
994                    this.element.addEventListener("on_primary_press", (e) => {
995                        _this.hide();
996                        Pubsub.publish('delete_collection_modal_delete_pressed', _this.collection);
997                    });
998
999                    this.element.addEventListener("on_tertiary_press", (e) => {
1000                        this.hide();
1001                    });
1002
1003                    this.element.addEventListener("on_close_press", (e) => {
1004                        _this.hide();
1005                    });
1006                }
1007
1008                show(collection) {
1009                    if(collection){
1010                        this.collection = collection;
1011                    }
1012                    this.element.setAttribute('style', 'display:flex')
1013                }
1014
1015                hide() {
1016                    this.element.setAttribute('style', 'display:none');
1017                }
1018            }
1019
1020             class ShareSavedPropertyModal {
1021                constructor() {
1022                    let _this = this;
1023                    this.savedProperty = {}
1024                    this.element = document.getElementById('share-saved-property-modal');
1025
1026                    this.element.addEventListener("on_primary_press", (e) => {
1027
1028                       
1029
1030                        navigator.clipboard.writeText(this.link)
1031                        _this.hide();
1032                         Pubsub.publish('share_saved_property_modal_share_pressed');
1033                        
1034                    });
1035
1036                    this.element.addEventListener("on_close_press", (e) => {
1037                        _this.hide();
1038                    });
1039                }
1040
1041                show = (savedProperty) => {
1042                
1043                    
1044                    this.savedProperty = savedProperty;
1045                    
1046                    this.link = document.location.origin + "/" +  this.savedProperty.searchUrl
1047                    this.element.setAttribute('share_link_text', this.link)
1048                    this.element.setAttribute('style', 'display:flex')
1049                }
1050
1051                hide = () => {
1052                    this.element.setAttribute('style', 'display:none');
1053                }
1054            }
1055
1056            class DeletePropertyModal  {
1057                constructor() {
1058                    
1059                   
1060                    this.collectionUUID = ""
1061                    this.propertyCollectionUUID = ""
1062                    this.element = document.getElementById('delete-property-modal');
1063                    let _this = this;
1064
1065                    this.element.addEventListener("on_primary_press", (e) => {
1066                        _this.hide();
1067                        Pubsub.publish('delete_property_modal_delete_pressed', {"collectionUUID":_this.collectionUUID, "propertyCollectionUUID":_this.propertyCollectionUUID});
1068                    });
1069
1070                    this.element.addEventListener("on_tertiary_press", (e) => {
1071                        this.hide();
1072                    });
1073
1074                    this.element.addEventListener("on_close_press", (e) => {
1075                        _this.hide();
1076                    });
1077                }
1078
1079                show(collectionUUID, propertyCollectionUUID) {
1080                    if(collectionUUID){
1081                        this.collectionUUID = collectionUUID;
1082                    }
1083                    if(propertyCollectionUUID){
1084                        this.propertyCollectionUUID = propertyCollectionUUID;
1085                    }
1086                    this.element.setAttribute('style', 'display:flex')
1087                }
1088
1089                hide() {
1090                    this.element.setAttribute('style', 'display:none');
1091                }
1092            }
1093
1094            class CopyPropertyToCollectionModal {
1095                constructor(){
1096                     
1097                    this.element = document.querySelector('place-copycollectionmodal');
1098                    this.collections = [];
1099                    this.property = {}
1100                    this.isVisible = false;
1101
1102                   
1103
1104                    this.element.addEventListener('close_button', (e) => {
1105                        this.hide();
1106                    });
1107
1108                    this.element.addEventListener('cancel_button', (e) => {
1109                        this.hide();
1110                    });
1111
1112                    this.element.addEventListener('on_save', (e) => {
1113                        Pubsub.publish('copy_property_to_collection_modal_save_pressed', {'collectionUUID':e.detail, 'property':this.property});
1114                    });
1115
1116                    this.element.addEventListener('set_selected_collection', (e) => {
1117                        console.log('set_selected_collection', e)
1118                    });
1119
1120                    this.element.addEventListener('on_link_press', (e) => {
1121                        Pubsub.publish('show_new_collection_modal');
1122                    });
1123
1124                }
1125
1126                getCollectionData(){
1127                    return JSON.parse(this.element.getAttribute("collections"));
1128                }
1129
1130                setCollectionData(collections){
1131                    this.element.setAttribute('collections', JSON.stringify(collections))
1132                }
1133
1134                getCollectionList(collections, currentCollectionName) {
1135                    let collectionList = [];
1136                    collections.forEach(collection => {
1137                        if (currentCollectionName && (collection.collectionName == currentCollectionName)) return;
1138                        collectionList.push({
1139                            collection_title: collection.collectionName,
1140                            id: collection.collectionUUID,
1141                            propertiesImages: collection?.propertiesImages?.length > 0 ? collection?.propertiesImages : [],
1142                        })
1143                    });
1144                    this.setCollectionData(collectionList);
1145
1146                }
1147
1148                setIsAddingToCollection(isAddingToCollection){
1149                    this.element.setAttribute('is_add_to_collection', isAddingToCollection);
1150                }
1151
1152                show(property) {
1153                          
1154                    if(property){
1155                        this.property = property;
1156                    }
1157
1158                    this.isVisible = true;
1159
1160                    let mls = {
1161                        status: property?.status || property?.standardStatus || "",
1162                        image: this.getPropertyImageUrl(property),
1163                        price: property?.price || "0",
1164                        address: ( typeof property?.address === "string") ? property?.address : (property?.address?.street || property?.streetAddress || ""),
1165                        state: property?.state || property?.address?.state || "",
1166                        city: property?.city || property?.address?.city || "",
1167                        postal_code: property?.postal_code || property?.address?.zip || "",
1168                        beds: property?.beds || property?.bedrooms || 0,
1169                        baths: property?.baths || property?.fullBaths || property?.bathsTotalDecimal || 0,
1170                        sqft: property?.sqft || property?.squareFeet || property?.sqFeet || 0,
1171                        creator: property?.creator || "",
1172                    }
1173
1174                    this.element.setAttribute('mls', JSON.stringify(mls))
1175                    this.element.setAttribute('image_url',mls?.image || "")
1176                    this.element.setAttribute('style', 'display:flex')
1177                }
1178
1179                getPropertyImageUrl(property){
1180                   // property?.image[0]?.uri || property?.photos[0]?.url || "",
1181
1182                    if(property.image && property.image.length > 0){
1183                       return property.image[0].uri
1184                    } else if (property.photos && property.photos.length > 0){
1185                       return property.photos[0].url
1186                    } else {
1187                        return ""
1188                    }
1189                }
1190
1191                hide() {
1192                    this.isVisible = false;
1193                    this.element.setAttribute('style', 'display:none');
1194                }
1195            }
1196
1197            class CollectionPaging {
1198                constructor(collectionsPerPage){
1199                   
1200                    
1201                    this.element = document.getElementById('collection-pagination');
1202                    this.collectionsPerPage = collectionsPerPage;
1203
1204                    this.element.addEventListener('page_changed', (e) => {
1205                       Pubsub.publish('collection_page_changed', e.detail);
1206                    });
1207                }
1208
1209                setPageCount(pageCount){
1210                    this.element.setAttribute('page_count', pageCount);
1211                }
1212
1213                show() {
1214                    this.element.setAttribute('style', 'display:flex')
1215                }
1216
1217                hide() {
1218                    this.element.setAttribute('style', 'display:none')
1219                }
1220            }
1221
1222            class PropertyPaging  {
1223                constructor(propertiesPerPage){
1224                    
1225                    
1226                    this.element = document.getElementById('property-pagination');
1227                    this.propertiesPerPage = propertiesPerPage;
1228
1229                    this.element.addEventListener('page_changed', (e) => {
1230                        Pubsub.publish('property_page_changed', e.detail);
1231                    });
1232                }
1233
1234                setPageCount(pageCount){
1235                    this.element.setAttribute('page_count', pageCount);
1236                }
1237
1238                setCurrentPage(currentPage){
1239                    this.element.setAttribute('current_page', currentPage);
1240                }
1241
1242                show() {
1243                    this.element.setAttribute('style', 'display:flex')
1244                }
1245
1246                hide() {
1247                    this.element.setAttribute('style', 'display:none')
1248                }
1249            }
1250
1251            class NewCollectionBlock {
1252                constructor(){
1253                    
1254                    this.element = document.getElementById('new-collection-block');
1255
1256                    this.element.addEventListener('on_main_press', (e) => {
1257                        Pubsub.publish('new_collection_block_create_collection_pressed', e.detail);
1258                    });
1259                }
1260                show(collectionUUID, propertyCollectionUUID) {
1261                    this.element.setAttribute('style', 'display:flex')
1262                }
1263
1264                hide() {
1265                    this.element.setAttribute('style', 'display:none');
1266                }
1267            }
1268
1269            class AddListingsBlock {
1270                constructor() {
1271                   
1272                    this.element = document.getElementById('add-listings-block');
1273
1274                    this.element.addEventListener('on_main_press', (e) => {
1275                        window.open('../../search.php', '_blank')
1276                    });
1277
1278                   this.element.addEventListener("on_tertiary_press", (e) => {
1279                         
1280                    });
1281                }
1282
1283                show() {
1284                    this.element.setAttribute('style', 'display:flex')
1285                }
1286
1287                hide() {
1288                    this.element.setAttribute('style', 'display:none');
1289                }
1290            }
1291
1292            class MyFeed {
1293                constructor(blueroofMiddlewareApi, collectionsService) {
1294                    this.blueroofMiddlewareApi = blueroofMiddlewareApi;
1295                    this.collectionsService = collectionsService;
1296                    this.element = document.querySelector('place-myfeedblock');
1297
1298                    this.element.addEventListener('on_menu_open', (e) => {
1299                        this.element.setAttribute('show_menu', e.detail.e);
1300                        this.element.setAttribute('show_menu_index', e.detail.index);
1301                    });
1302
1303                    this.element.addEventListener('on_view_all_pressed', (e) => {
1304                        window.open('../../search.php', '_blank');
1305                    });
1306
1307                    this.element.addEventListener('on_add_collection', (e) => {
1308                        
1309                        let property = e.detail;
1310                        Pubsub.publish('my_feed_add_collection_pressed', {property});
1311
1312                    });
1313
1314                    this.element.addEventListener('on_share_pressed', (e) => {
1315                    
1316                        let property = e.detail
1317                    
1318                        let url = this.getPropertyUrl(property);
1319                        property.searchUrl = url;
1320                        
1321                        Pubsub.publish('my_feed_share_pressed', {property});
1322                    });
1323
1324                    this.element.addEventListener('on_favorite_pressed', (e) => {
1325                        let property = e.detail.property;
1326                        let isAddingFavorite = e.detail.isAddingFavorite;
1327
1328                        if(isAddingFavorite){
1329                            Pubsub.publish('my_feed_on_favorite_pressed', {property});
1330                        }
1331                        else{
1332                            Pubsub.publish('my_feed_on_unfavorite_pressed', {property});
1333                        }
1334                    });
1335
1336                    this.element.addEventListener('on_property_pressed', (e) => {
1337                        let property = e.detail
1338                    
1339                        let url = this.getPropertyUrl(property);
1340                        property.searchUrl = url;
1341                        window.open('../../' + url, '_blank');
1342                    });
1343                
1344
1345                    this.blueroofMiddlewareApi.getMyFeed().then((data) => {
1346
1347                        let myFeedBlossorIds = data.map(property => property.blossorId);
1348                        
1349
1350                        this.collectionsService.checkIfInCollection(myFeedBlossorIds).then((propertiesInCollections) => {
1351
1352                            let feed = []
1353                            data.forEach((item) => {
1354                            feed.push({
1355                                image: [
1356                                    {
1357                                        title: "",
1358                                        id: 0,
1359                                        uri: item?.photos[0].url,
1360                                    },
1361                                    ],
1362                                    price: item?.price,
1363                                    favorite: propertiesInCollections?.data[item?.blossorId] != null || false,
1364                                    address: item?.streetAddress,
1365                                    city: item?.city,
1366                                    state: item?.state,
1367                                    postal_code: item?.postalCode,
1368                                    beds: item?.bedrooms,
1369                                    status: item?.standardStatus,
1370                                    baths: item?.bathsTotalDecimal,
1371                                    sqft: item?.squareFeet,
1372                                    creator: "",
1373                                    mls_price_history: item?.history[item.history.length-1]?.price,
1374                                    blossorId: item?.blossorId,
1375                                    open_house : item?.openhouses?.length > 0 ? true : false,
1376                                    open_house_date : item?.openhouses[0]?.startDate,
1377                                    open_house_end_time : item?.openhouses[0]?.endDate,
1378                                    property_created_at : item?.listDate,
1379                                    lastStatusChangeDate : item?.lastStatusChangeDate,
1380                                })
1381                            })
1382
1383                            if(feed && feed?.length > 0){
1384                                this.show();
1385                                this.element.setAttribute('mls_data', JSON.stringify(feed));
1386                            }
1387                        });
1388                    });
1389                    
1390                }
1391
1392                getPropertyUrl = (property) => {
1393                    let state = property.state;
1394                    let city = this.slugify(property.city);
1395                    let zip = property.postal_code
1396                    let address = this.slugify(property.address);
1397                    let blossorId = property.blossorId;
1398                    return `homes-for-sale/${state}/${city}/${zip}/${address}/bid-${blossorId}`;
1399                }
1400
1401                slugify(text) {
1402                    // replace non letter or digits by -
1403                    text = text.replace(/[^\pL\d]+~u/g, '_');
1404                    // transliterate
1405                    text = text.normalize('NFKD').replace(/[\u0300-\u036F]/g,'')
1406                    // remove unwanted characters
1407                    text = text.replace(/[^_\w]+/g, '_');
1408                    // trim
1409                    text = text.trim();
1410                    // remove duplicate -
1411                    text = text.replace(/_+/g, '-');
1412                    // lowercase
1413                    text = text.toLowerCase();
1414                    if (!text) {
1415                        return 'n-a';
1416                    }
1417                    return text
1418                }
1419
1420                getMlsData = () => {
1421                    return JSON.parse(this.element.getAttribute('mls_data'));
1422                }
1423
1424                setMlsData = (data) => {
1425                    this.element.setAttribute('mls_data', JSON.stringify(data));
1426                }
1427
1428                show() {
1429                    this.element.setAttribute('style', 'display:flex')
1430                }
1431
1432                hide() {
1433                    this.element.setAttribute('style', 'display:none')
1434                }
1435            }
1436
1437            class BlueroofMiddlewareApi {
1438                constructor() {
1439                    this.baseUrl = "https://brivity-home-middleware.production.brivity.com";
1440                    this.apiKey = localStorage.getItem('authorization');
1441                }
1442
1443                getMyFeed = async () => {
1444                     const response = await fetch(`${this.baseUrl}/listings/voltron`, {
1445                        method: 'POST',
1446                        headers: {
1447                            'Content-Type': 'application/json',
1448                            'Authorization': `${this.apiKey}`
1449                        },
1450                        body: JSON.stringify([])
1451                    });
1452
1453                    const data = await response.json();
1454                    return data;
1455                }
1456                
1457                getLeadBasicInfo = async () => {
1458                    const response = await fetch(`${this.baseUrl}/blueroofleads/basicinfo`, {
1459                        method: 'GET',
1460                        headers: {
1461                            'Content-Type': 'application/json',
1462                            'Authorization': `${this.apiKey}`
1463                        },
1464                       
1465                    });
1466
1467                    const data = await response.json();
1468                    return data;
1469                }
1470
1471                getAgentProfile = async (brivityUserId) => {
1472                    const response = await fetch(`${this.baseUrl}/blueroofagents/profile`, {
1473                        method: 'POST',
1474                        headers: {
1475                            'Content-Type': 'application/json',
1476                            'Authorization': `${this.apiKey}`
1477                        },
1478                        body: `{"brivityUserId": ${brivityUserId}}`
1479                       
1480                    });
1481
1482                    const data = await response.json();
1483                    return data;
1484                }
1485
1486            }
1487
1488            class Map {
1489                constructor(){
1490                    this.element = document.querySelector('place-map');
1491                    this.properties = [];
1492
1493                    this.element.addEventListener('on_marker_clicked', (e) => {
1494                        Pubsub.publish('map_marker_clicked', e.detail.id)
1495                    });
1496                }
1497
1498                setMarkers = (properties) => {
1499                    let markers = [];
1500                    let color = 'black'
1501
1502                    let dateNow = new Date();
1503                    dateNow.setDate(dateNow.getDate()-7);
1504                    dateNow.setHours(dateNow.getHours());
1505                    dateNow.setMinutes(dateNow.getMinutes());
1506                    dateNow.setSeconds(dateNow.getSeconds());
1507                    const sevenDaysAgo = dateNow.getTime();
1508
1509                    this.properties = properties;
1510                    properties?.forEach(property => {
1511
1512                        if(property.statusText == 'Active'){
1513                            color = '#1FA6E8'
1514                        }else if(property.statusText == 'Pending'){
1515                            color = '#FFC82C'
1516                        }else if(property.statusText == 'Sold'){
1517                            color = '#FF7343'
1518                        }
1519
1520                        let listDate = new Date(property.listDate);
1521
1522
1523                        if(listDate.getTime() > sevenDaysAgo){
1524                            color = '#24D0BC'
1525                        }
1526
1527                        markers.push({
1528                            id: `${property.blossorId}`,
1529                            location: property.location,
1530                            price: property.price,
1531                            color : color
1532                        })
1533                    });
1534
1535                    this.element.setAttribute('markers', JSON.stringify(markers));
1536                }
1537
1538                setSelectedMarker = (property) => {
1539                    let markerIndex = this.properties.findIndex((p) => p.blossorId == property.blossorId)
1540                    if(markerIndex > -1){
1541                        this.element.setAttribute('selected_property_index', markerIndex);
1542                    }
1543                }
1544
1545                clearSelectedMarker = () => {
1546                    this.element.setAttribute('selected_property_index', -1);
1547                }
1548
1549            }
1550
1551            class SavedListings {
1552                constructor(){
1553                    this.element = document.getElementById('collection-saved-listings');
1554                }
1555
1556                setCount(count) {
1557                    this.element.innerText = `Saved Listings (${count})`;
1558                }
1559
1560                hide() {
1561                    this.element.style.display = `none`;
1562                }
1563                show() {
1564                    this.element.style.display = `block`;
1565                }
1566            }
1567        
1568            class AddListingBtn {
1569                constructor(){
1570                    this.element = document.getElementById('add-listing-btn');
1571                    this.element.setAttribute('button_style', JSON.stringify({paddingLeft: '0px'}));
1572                    this.element.addEventListener('on_press', (e) => {
1573                        window.open('../../search.php', '_blank')
1574                    })
1575                }
1576
1577                hide() {
1578                    this.element.style.display = `none`;
1579                }
1580                show() {
1581                    this.element.style.display = `block`;
1582                }
1583            }
1584
1585            class Page {
1586                constructor(blueroofMiddlewareApi) {
1587                    this.selectedCollection = {};
1588                    this.inPropertyView = false;
1589                    this.lead = {}
1590                    this.agent = {}
1591                    this.isInMapView = false;
1592                    this.isInListView = true;
1593
1594                    this.authorizationData = JSON.parse(atob(blueroofMiddlewareApi.apiKey.split('.')[1]));
1595                    this.is_blueroof_person = this.authorizationData?.is_blueroof_person;
1596
1597                   
1598                }
1599
1600                setSelectedCollection(collection) {
1601                    this.selectedCollection = collection;
1602                }
1603
1604                setInPropertyView(inPropertyView) {
1605                    this.inPropertyView = inPropertyView;
1606                }
1607            }
1608
1609
1610            class messagingEmitter extends Messaging.BaseEmitter {
1611                
1612                newMessage(message) {
1613                   Pubsub.publish('messaging_emitter_new_message', message);
1614                }
1615            }
1616
1617            
1618
1619            (async () => {
1620
1621                const blueroofMiddlewareApi = new BlueroofMiddlewareApi();
1622                const page = new Page(blueroofMiddlewareApi);
1623
1624                let url = 'https://messaging.brivity.com'
1625                const messaging = new Messaging.Service(url, blueroofMiddlewareApi.apiKey, new messagingEmitter());
1626
1627                let lead =  await blueroofMiddlewareApi.getLeadBasicInfo();
1628                let agent = await blueroofMiddlewareApi.getAgentProfile(lead.data?.brivity_agent_id);
1629
1630                page.lead = lead.data;
1631                page.agent = agent.data;
1632
1633                const collectionsService = new Collections.Service(window?.globalSiteVariables?.options?.apis?.collections?.url ?? '',blueroofMiddlewareApi.apiKey, "sitebuilder", new logger());
1634
1635
1636                const menu = new Menu(page?.is_blueroof_person || false, page?.agent, blueroofMiddlewareApi.baseUrl, blueroofMiddlewareApi.apiKey);
1637                const collectionSection = new CollectionSection()
1638                const propertySection = new PropertySection()
1639                const collectionModal = new CollectionModal();
1640                const collectionCreatedModal = new CollectionCreatedModal();
1641                const deleteCollectionModal = new DeleteCollectionModal();
1642                const editCollectionModal = new EditCollectionModal();
1643                const shareSavedPropertyModal = new ShareSavedPropertyModal();
1644                const deletePropertyModal = new DeletePropertyModal();
1645                const copyPropertyToCollectionModal = new CopyPropertyToCollectionModal();
1646                const pageSubHeader = new PageSubHeader();
1647                const collectionPaging = new CollectionPaging(8)
1648                const propertyPaging = new PropertyPaging(8)
1649                const newCollectionBlock = new NewCollectionBlock();
1650                const addListingsBlock = new AddListingsBlock();
1651                const myFeed = new MyFeed(blueroofMiddlewareApi, collectionsService);
1652                const map = new Map();
1653                const savedListings = new SavedListings();
1654                const addListingBtn = new AddListingBtn();
1655
1656                collectionPaging.hide();
1657                propertySection.hide();
1658
1659                let collections = [];
1660                let extraCollections = 0;
1661                let createCopyCollection = false;
1662              
1663                if(!showCollectionByUUID){
1664                    const collectionDescription = document.getElementById("collectionDescription");
1665
1666                    collectionsService.getCollections(0, collectionPaging.collectionsPerPage).then((e) => {
1667
1668                        extraCollections = e?.data?.totalCollections
1669
1670                        if(e.data.TotalPages > 1) {
1671                            collectionPaging.show()
1672                            collectionPaging.setPageCount(e.data.TotalPages);
1673                        } else {
1674                            collectionPaging.setPageCount(1);
1675                        }
1676                        
1677
1678                        if(e?.data?.Items){
1679                            collections = e.data.Items;
1680                            count = 100;
1681                            e.data.Items.forEach((collection) => {
1682                            count--
1683                            
1684                                collectionSection.addCollectionCard(collection, count)
1685                            });
1686                        }
1687
1688                        copyPropertyToCollectionModal.getCollectionList(collections)
1689                        
1690                        if(collections.length == 0){
1691                            newCollectionBlock.show();
1692                        }
1693
1694                    }).catch((e) => {
1695                        if(collections.length == 0){
1696                            newCollectionBlock.show();
1697                        }
1698                    });
1699                }
1700                else{
1701                    collectionsService.getCollections(0, collectionPaging.collectionsPerPage).then((e) => {
1702                        
1703                        if(e?.data?.Items){
1704                            collections = e.data.Items;
1705                        }
1706                         
1707                    });
1708                }    
1709
1710                Pubsub.subscription('property_card_mouseenter', (property) => {
1711
1712                    document.querySelectorAll('place-propertycard').forEach((propertyCard) => {
1713                        propertyCard.setAttribute('show_border', false);
1714                    })
1715                    
1716                    if(page.isInMapView){
1717                        map.setSelectedMarker(property)
1718                    }
1719                }).subscribe();
1720
1721                Pubsub.subscription('property_card_mouseleave', () => {
1722                    if(page.isInMapView){
1723                        map.clearSelectedMarker()
1724                    }
1725                }).subscribe();
1726
1727                Pubsub.subscription('messaging_emitter_new_message', (message) => {
1728                    toast.show('New message from ' + message.createdByAlias)
1729                }).subscribe();
1730
1731                Pubsub.subscription('property_section_show_map_view', (properties) => {
1732                    map.setMarkers(properties);
1733                    page.isInMapView = true;
1734                    page.isInListView = false;
1735
1736                    document.querySelectorAll('place-propertycard').forEach((propertyCard) => {
1737                        propertyCard.setAttribute('show_border_on_hover', true);
1738                    })
1739                }).subscribe();
1740
1741                Pubsub.subscription('property_section_show_list_view', (properties) => {
1742                    page.isInMapView = false;
1743                    page.isInListView = true;
1744
1745                    document.querySelectorAll('place-propertycard').forEach((propertyCard) => {
1746                        propertyCard.setAttribute('show_border_on_hover', false);
1747                    })
1748                    
1749                }).subscribe();
1750
1751                Pubsub.subscription('property_page_changed', (page) => {
1752                    collectionsService.getCollectionProperties(propertySection.collectionUUID, page, propertyPaging.propertiesPerPage).then((collectionProperties) => {
1753                        map.setMarkers(collectionProperties?.data?.properties);
1754                        savedListings.setCount(collectionProperties?.data?.totalListings || 0);
1755                        propertySection.show(propertySection.collectionUUID,collectionProperties)
1756                        propertySection.setPropertyCardWidth();
1757                        propertyPaging.setCurrentPage(page);
1758                    });
1759                }).subscribe();
1760
1761                Pubsub.subscription("top_header_menu_item_pressed", (menuItemPressed) => {
1762                            
1763                    if(menuItemPressed == 'Edit Collection'){
1764                        collectionModal.setName(page.selectedCollection.collectionName);
1765                        collectionModal.setDescription(page.selectedCollection.collectionDescription);
1766                        collectionModal.show(page.selectedCollection.collectionUUID, true);
1767                    }
1768                    else if(menuItemPressed == 'Delete Collection'){
1769                        deleteCollectionModal.show(page.selectedCollection);
1770                    }
1771                }).subscribe();
1772
1773                Pubsub.subscription('new_collection_block_create_collection_pressed', (e) => {
1774                    collectionModal.show(0, false);
1775                }).subscribe();
1776
1777                Pubsub.subscription('collection_card_pressed', (e) => {
1778                
1779                    window.location.hash = e.collection.collectionUUID;
1780
1781                    page.setSelectedCollection(e.collection);
1782
1783                    collectionsService.getCollectionProperties(e.collection.collectionUUID,1, propertyPaging.propertiesPerPage).then((collectionProperties) => {
1784
1785                    
1786                        savedListings.setCount(collectionProperties?.data?.totalListings || 0);
1787                        propertyPaging.setPageCount(collectionProperties.data.totalPages);
1788                        
1789                    
1790                        if(collectionProperties?.data?.properties == null){
1791                            addListingsBlock.show();
1792                        }
1793                        propertySection.show(e.collection.collectionUUID,collectionProperties)
1794                        propertySection.setPropertyCardWidth();
1795
1796                        if(collectionProperties.data.totalPages > 1){
1797                            propertyPaging.show();
1798                        }
1799                        
1800                    });
1801                    
1802                
1803                    collectionSection.hide();
1804                 
1805                    let collectionList = [];
1806
1807                    collections.forEach(collection => {
1808                        if (collection.collectionName == e.collection.collectionName) return;
1809
1810                        collectionList.push({
1811                            collection_title: collection.collectionName,
1812                            id: collection.collectionUUID,
1813                            propertiesImages: collection?.propertiesImages?.length > 0 ? collection?.propertiesImages : [],
1814                        })
1815                    });
1816
1817                    copyPropertyToCollectionModal.getCollectionList(collections, e.collection.collectionName);
1818
1819                    pageSubHeader.showTopHeader();
1820                    pageSubHeader.setTopHeaderTitle("Collections");
1821                    pageSubHeader.setTitle(e.collection.collectionName);
1822                    pageSubHeader.hidePrimaryButton();
1823                    pageSubHeader.showMenuButton();
1824
1825                    if(window.innerWidth > 768 ){
1826                        pageSubHeader.showSecondaryButton();
1827                    } 
1828
1829                    page.setInPropertyView(true)
1830
1831                    propertyPaging.setCurrentPage(1);
1832                    propertySection.setView('list')
1833                    
1834
1835                    const collectionDescription = document.getElementById('collection-description')
1836                    collectionDescription.style.display="flex"
1837                    collectionDescription.children[0].innerText = e?.collection.collectionDescription || ""
1838                }).subscribe();
1839
1840                Pubsub.subscription('collection_card_menu_item_pressed', (e) => {
1841                    if (e.menuItem == "Delete Collection") {
1842
1843                        deleteCollectionModal.show(e.collection);
1844                        
1845                    } else {
1846
1847
1848                        collectionModal.setName(e.collection.collectionName);
1849                        collectionModal.setDescription(e.collection.collectionDescription);
1850                        collectionModal.show(e.collection.collectionUUID, true);
1851                    }
1852                }).subscribe();
1853
1854                Pubsub.subscription('property_card_menu_item_pressed', (e) => {
1855                    if(e.menuItem == 'Remove from Collection') {
1856                        deletePropertyModal.show(e.collectionUUID, e.propertyCollectionUUID);
1857                    }
1858                    else if(e.menuItem == 'Copy to Collection') {
1859                        copyPropertyToCollectionModal.show(e.property);
1860                    }
1861                    else if(e.menuItem == 'Share Property') {
1862                        
1863                        shareSavedPropertyModal.show(e.property);
1864                    }
1865                }).subscribe();
1866
1867                Pubsub.subscription('delete_property_modal_pressed', (e) => {
1868                    deletePropertyModal.show(e.collectionUUID, e.propertyCollectionUUID);
1869                }).subscribe();
1870
1871                Pubsub.subscription('show_new_collection_modal', (e) => {
1872                    collectionModal.show();
1873                    copyPropertyToCollectionModal.hide();
1874                    createCopyCollection = true;
1875                }).subscribe();
1876
1877                Pubsub.subscription('top_header_back_pressed', () => {
1878                    window.location.hash = '';
1879                    pageSubHeader.hideTopHeader();
1880                    page.selectedCollection = {};
1881                    pageSubHeader.setTitle("COLLECTIONS");
1882                    pageSubHeader.showPrimaryButton();
1883                    pageSubHeader.hideSecondaryButton();
1884                    pageSubHeader.hideMenuButton();
1885
1886                    page.setInPropertyView(false)
1887
1888                    collectionSection.show();
1889                    propertySection.hide()
1890
1891                    propertyPaging.setCurrentPage(1);
1892
1893                    copyPropertyToCollectionModal.getCollectionList(collections)
1894                
1895                    const collectionDescription = document.getElementById('collection-description')
1896                    collectionDescription.style.display="none"
1897                    collectionDescription.children[0].innerText = "";
1898                    addListingsBlock.hide();
1899                }).subscribe()
1900
1901                Pubsub.subscription('create_new_collection_pressed', (e) => {
1902                    collectionModal.show(0, false);
1903                }).subscribe();
1904
1905                Pubsub.subscription('on_new_collection_saved', (e) => {         
1906                    if(e.type == 'save'){
1907                         
1908                        let people = [{ personUUID: page.lead.brivity_uuid, role: "lead" }];
1909                        let properties = [""];
1910                        collectionsService.createCollection(e.name, e.description,  page.lead.brivity_uuid, people, properties).then((e) => {
1911                            
1912                            collections.unshift(e.data);
1913
1914                            extraCollections++
1915                             if(collections.length > 8) {
1916                                 collections.pop();
1917                                 collectionPaging.show()
1918                                 collectionPaging.setPageCount(Math.ceil(extraCollections / 8));
1919                            }
1920
1921                            count = 100;
1922                            collectionSection.collections.innerHTML = "";
1923                            collections.forEach((collection) => {
1924                                count--
1925                                collectionSection.addCollectionCard(collection, count)
1926                            });
1927
1928                            let collectionsList =  copyPropertyToCollectionModal.getCollectionData();
1929                            let newCollection = {
1930                                collection_title: e.data.collectionName,
1931                                id: e.data.collectionUUID,
1932                                propertiesImages: [],
1933                            }
1934                            collectionsList.unshift(newCollection);
1935                            copyPropertyToCollectionModal.setCollectionData(collectionsList);
1936
1937                           if(!copyPropertyToCollectionModal.isVisible){
1938                            if (createCopyCollection) {
1939                                copyPropertyToCollectionModal.isVisible = true;
1940                                copyPropertyToCollectionModal.element.setAttribute('style', 'display:flex');
1941                                createCopyCollection = false;
1942                            } else {
1943                                collectionCreatedModal.show(e.data);
1944                            }
1945                           }
1946
1947                            collectionModal.hide();
1948                            
1949                            newCollectionBlock.hide();
1950                        }).catch((e) => {
1951                            collectionModal.showError(true)
1952                        });
1953                    }
1954                    else{
1955                        collectionsService.updateCollection(e.collectionUUID, e.name, e.description).then((collection) => {
1956                            let element = document.getElementById(e.collectionUUID);
1957                            element.setAttribute('title', e.name);
1958                            element.setAttribute('description', e.description);
1959                            if(Object.keys(page.selectedCollection).length !== 0){
1960                                pageSubHeader.setTitle(e.name);
1961                            }
1962                            const collectionDescription = document.getElementById('collection-description')
1963                            collectionDescription.children[0].innerText = e.description;
1964                            let updatedCollection = collections.findIndex((c) => c.collectionUUID == e.collectionUUID)
1965                            if(updatedCollection != -1){
1966                                collections[updatedCollection].collectionName = e.name;
1967                                collections[updatedCollection].collectionDescription = e.description;
1968                            }
1969                            collectionModal.hide();
1970                            editCollectionModal.show();
1971                        });
1972                    }
1973                }).subscribe();
1974
1975                Pubsub.subscription('collection_created_modal_view_collection_pressed', (collection) => {
1976                    Pubsub.publish('collection_card_pressed', {"collection": collection})
1977                }).subscribe();
1978
1979                Pubsub.subscription('delete_collection_modal_delete_pressed', (collection) => {
1980                    collectionsService.deleteCollection(collection.collectionUUID).then((e) => {
1981                        document.getElementById(collection.collectionUUID).remove();
1982                        toast.show('Collection was Deleted')
1983
1984                        extraCollections--
1985                        
1986                        if(extraCollections.length < 9) {
1987                            collectionPaging.hide()
1988                        }else{
1989                            collectionPaging.setPageCount(Math.ceil(extraCollections / 8));
1990                        }
1991
1992                        if(page.inPropertyView){
1993                            Pubsub.publish('top_header_back_pressed');
1994                        }
1995                    });
1996                }).subscribe();
1997
1998                Pubsub.subscription('delete_property_modal_delete_pressed', (e) => {
1999                    const currentPage = $("#property-pagination").find("#info-parent").filter(
2000                        function() {
2001                            return $(this).css("color") === "rgb(196, 196, 196)"
2002                        }
2003                    ).text();
2004
2005                    const propertiesPerPage = 8;
2006                    const numOfProperties = $("#property-list .property-card-wrapper").length;
2007                    const setPage = numOfProperties === 1 ? currentPage - 1 : currentPage; 
2008
2009                    collectionsService.removePropertyFromCollection(e.collectionUUID, e.propertyCollectionUUID)
2010                        .then(() => {
2011                            toast.show('Property removed from collection');
2012                            
2013                            return collectionsService.getCollectionProperties(e.collectionUUID, setPage, propertiesPerPage);
2014                        })
2015                        .then((collectionProperties) => {
2016                            const totalListingsCount = collectionProperties?.data?.totalListings;
2017                            const properties = collectionProperties?.data?.properties;
2018                            const totalPages = collectionProperties?.data?.totalPages;
2019                            const currentCollection = $(`#${e.collectionUUID}`);
2020
2021                            currentCollection.attr("num_properties", totalListingsCount);
2022                            
2023                            map.setMarkers(properties);
2024                            savedListings.setCount(totalListingsCount || 0);
2025                            propertySection.show(propertySection.collectionUUID, collectionProperties);
2026                            propertySection.setPropertyCardWidth();
2027
2028                            propertyPaging.setCurrentPage(setPage);
2029                            propertyPaging.setPageCount(totalPages);
2030
2031                            if (totalListingsCount <= 8) {
2032                                propertyPaging.hide();
2033                            }
2034                        })
2035                        .catch(error => {
2036                            console.error("Error in collection operations:", error);
2037                        });
2038                }).subscribe();
2039
2040                Pubsub.subscription('copy_property_to_collection_modal_save_pressed', (e) => {
2041
2042                    let collectionUUID = e.collectionUUID;
2043                    let blossorId = e.property.blossorId;
2044                    collectionsService.addPropertyToCollection(collectionUUID, [blossorId]).then(() => {
2045
2046                      
2047                        let data =  copyPropertyToCollectionModal.getCollectionData();
2048                        let myFeedData = myFeed.getMlsData();
2049                         
2050                        collectionsService.getCollectionProperties(collectionUUID,1,1).then((e) => {
2051                        
2052                              // update photos in add property to collection modal
2053                            let collectionIndex =  data.findIndex((x) => x.id == collectionUUID);
2054                            let collection = data[collectionIndex];
2055                            let photo = e?.data?.properties[0]?.photos[0]?.url;
2056                        
2057                            collection.propertiesImages = [];
2058                            if(e?.data?.properties?.length > 0){
2059                                collection.propertiesImages.push({mainPhoto: photo});
2060                            }
2061                            
2062                            data[collectionIndex] = collection;
2063                            
2064                            copyPropertyToCollectionModal.setCollectionData(data);
2065
2066
2067                            // update collection card if in collection view
2068                            pageCollectionIndex = collections.findIndex((x) => x.collectionUUID == collectionUUID)
2069
2070                            if(pageCollectionIndex > -1){
2071                                
2072                                let collectionCard = document.getElementById(collectionUUID);
2073                                let numProperties = parseInt(collectionCard.getAttribute('num_properties'));
2074                                numProperties++;
2075                                collectionCard.setAttribute('num_properties', numProperties);
2076
2077                                let images = collectionCard.getAttribute('image');
2078                                if(images){
2079                                    images += "," + photo;
2080                                }
2081                                else{
2082                                    images = photo;
2083                                }
2084                               
2085                                collectionCard.setAttribute('image', images);
2086                            }
2087
2088                            //update my feed to set property heart as favorited
2089                            let myFeedPropertyIndex = myFeedData.findIndex((x) => x.blossorId == blossorId);
2090                            if(myFeedPropertyIndex > -1){
2091                                myFeedData[myFeedPropertyIndex].favorite = true;
2092                                myFeed.setMlsData(myFeedData);
2093                            }
2094
2095                        })
2096
2097                        copyPropertyToCollectionModal.hide();
2098                        toast.show('Property added to collection')
2099                        
2100                    }).catch((e) => {
2101                        toast.show('Error adding property to collection', true)
2102                    });
2103                }).subscribe();
2104
2105                Pubsub.subscription('collection_page_changed', (e) => {
2106                    collectionsService.getCollections(e, collectionPaging.collectionsPerPage).then((e) => {
2107                        if(e?.data?.Items){
2108                            collections = e.data.Items;
2109
2110                            collectionSection.collections.innerHTML = "";
2111                            count = 100;
2112                            e.data.Items.forEach((collection) => {
2113                            count--
2114                            
2115                                collectionSection.addCollectionCard(collection, count)
2116                            });
2117                        }
2118                    });
2119                }).subscribe();
2120
2121                Pubsub.subscription('share_saved_property_modal_share_pressed', (e) => {
2122                    toast.show('Link Copied!')
2123                }).subscribe();
2124
2125                Pubsub.subscription('my_feed_share_pressed', (e) => {
2126                    shareSavedPropertyModal.show(e.property);
2127                }).subscribe();
2128
2129                Pubsub.subscription('my_feed_add_collection_pressed', (e) => {
2130                    copyPropertyToCollectionModal.setIsAddingToCollection(true);
2131                    copyPropertyToCollectionModal.show(e.property);
2132                }).subscribe();
2133
2134                Pubsub.subscription('map_marker_clicked', (id) => {
2135                    propertySection.scrollIntoView(id);
2136
2137                    document.querySelectorAll('place-propertycard').forEach((propertyCard) => {
2138                        if(propertyCard.id == id) {
2139                            propertyCard.setAttribute('show_border', true)
2140                        }
2141                        else {
2142                            propertyCard.setAttribute('show_border', false)
2143                        } 
2144                    })
2145                }).subscribe();
2146
2147                Pubsub.subscription('my_feed_on_favorite_pressed', (e) => {
2148                    copyPropertyToCollectionModal.setIsAddingToCollection(true);
2149                    copyPropertyToCollectionModal.show(e.property);
2150                }).subscribe();
2151
2152                Pubsub.subscription('my_feed_on_unfavorite_pressed', (e) => {
2153                    let blossorId = e.property.blossorId;
2154                    let myFeedData = myFeed.getMlsData();
2155                    collectionsService.checkIfInCollection([blossorId]).then((propertiesInCollections) => {
2156                        if(propertiesInCollections.data[blossorId]){
2157                            propertiesInCollections.data[blossorId].forEac
2157h((collection) => {
2158                                collectionsService.removePropertyFromCollection(collection.collectionUUID, collection.propertyUUID).then(() => {
2159                                    
2160                                    let data =  copyPropertyToCollectionModal.getCollectionData();
2161                                    let collectionUUID = collection.collectionUUID;
2162                                    collectionsService.getCollectionProperties(collectionUUID,1,1).then((e) => {
2163                                    
2164                                         // update photos in add property to collection modal
2165                                        let collectionIndex =  data.findIndex((x) => x.id == collectionUUID);
2166                                        let collection = data[collectionIndex];
2167                                        let photo = e?.data?.properties?.length > 0 ? e?.data?.properties[0]?.photos[0]?.url : '';
2168                                    
2169                                        collection.propertiesImages = [];
2170                                        if(e?.data?.properties?.length > 0){
2171                                            collection.propertiesImages.push({mainPhoto: photo});
2172                                        }
2173                                        
2174                                        data[collectionIndex] = collection;
2175                                        
2176                                        copyPropertyToCollectionModal.setCollectionData(data);
2177
2178
2179                                         // update collection card if in collection view
2180                                        pageCollectionIndex = collections.findIndex((x) => x.collectionUUID == collectionUUID)
2181
2182                                        if(pageCollectionIndex > -1){
2183                                            
2184                                            let collectionCard = document.getElementById(collectionUUID);
2185                                            let numProperties = parseInt(collectionCard.getAttribute('num_properties'));
2186                                            numProperties--;
2187                                            collectionCard.setAttribute('num_properties', numProperties);
2188
2189                                            let images = collectionCard.getAttribute('image');
2190                                            let newImages = images.split(',').filter((x) => x == photo).join(',');
2191                                            collectionCard.setAttribute('image', newImages);
2192                                        }
2193
2194                                        //update my feed to set property heart as not favorited
2195                                        let myFeedPropertyIndex = myFeedData.findIndex((x) => x.blossorId == blossorId);
2196                                        if(myFeedPropertyIndex > -1){
2197                                            myFeedData[myFeedPropertyIndex].favorite = false;
2198                                            myFeed.setMlsData(myFeedData);
2199                                        }
2200                                    })
2201                                    toast.show('Property removed from collection');
2202                                }).catch((e) => {
2203                                    toast.show('Error removing from collection', true);
2204                                });
2205                            });
2206                        }
2207                    });
2208                }).subscribe();
2209
2210                let modalBackdrop = document.getElementsByClassName('center-modal');
2211                for(let i = 0; i < modalBackdrop.length; i++){
2212                    modalBackdrop[i].addEventListener('click', (e) => {
2213                        if(e.target == modalBackdrop[i]){
2214                            modalBackdrop[i].style.display = 'none';
2215                        }
2216                    });
2217                }
2218
2219                window.addEventListener( "hashchange", function( event ) {
2220                    if(window.location.hash == ''){
2221                        Pubsub.publish("top_header_back_pressed");
2222                    }
2223                });
2224
2225
2226                document.addEventListener("click", (e) => {
2227
2228                    const elements = document.querySelectorAll("[show_menu]");
2229                    elements.forEach((el) => {
2230                        el.setAttribute("show_menu", "false");
2231                    });
2232
2233                    document.getElementById("c2dfac72-6233-4e8d-b0d2-f44e4240ebb4")?.setAttribute("show_menu", "false");
2234                });
2235                if(window.innerWidth < 768 ){
2236                     savedListings.hide();
2237                     pageSubHeader.hideSecondaryButton();
2238                } else{
2239                    addListingBtn.hide();
2240                }
2241            })();
2242        }
2243    })
2244
2245</script>
2245 <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 id="footer-9n" data-selector="footer"> <div class="container"> <div class="row"> <div class="col-md-2"> <div class="render-menu hot-nav animated fadeInUp wow animated animated animated animated animated animated animated animated animated animated animated animated animated animated animated animated animated animated animated animated animated animated animated animated animated animated animated" style="visibility: visible; animation-name: fadeInUp;"> <ul class=""> <li class="nav-item" data-selector="li"> <a href="/index">Home</a> </li> <li class="nav-item" data-selector="li"> <a href="/search">Listings</a> </li> <li class="nav-item" data-selector="li"> <a href="/buying">Buying</a> </li> <li class="nav-item" data-selector="li"> <a class="white" href="/selling">Selling</a> </li> <li class="nav-item" data-selector="li"> <a href="/financing">Financing</a> </li> <li class="nav-item" data-selector="li"> <a href="/homevalue">Home Value</a> </li> <li class="nav-item" data-selector="li"> <a href="/realestateagent/search">Who We Are</a> </li> <li class="nav-item" data-selector="li"> <a href="/connect">Connect</a> </li> </ul> </div> </div>
2245 <div class="col-md-7 col-md-offset-1 animated fadeInUp wow animated animated animated animated animated animated animated animated animated animated animated animated animated animated animated animated animated animated animated animated animated animated animated animated animated animated animated" animation-delay="0.1s" style="visibility: visible; animation-name: fadeInUp;"> <h3 class="white" id="text-3" style="font-size: 23pt; color: rgb(255, 255, 255) !important;" data-selector="h1, h2, h3, h4, h5, h6">Let's talk real estate.</h3> <form id="form-contact1" action="" class="form-contact"> <input type="hidden" name="tags" value="footer_signup"> <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,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAfBJREFUWAntVk1OwkAUZkoDKza4Utm61iP0AqyIDXahN2BjwiHYGU+gizap4QDuegWN7lyCbMSlCQjU7yO0TOlAi6GwgJc0fT/fzPfmzet0crmD7HsFBAvQbrcrw+Gw5fu+AfOYvgylJ4TwCoVCs1ardYTruqfj8fgV5OUMSVVT93VdP9dAzpVvm5wJHZFbg2LQ2pEYOlZ/oiDvwNcsFoseY4PBwMCrhaeCJyKWZU37KOJcYdi27QdhcuuBIb073BvTNL8ln4NeeR6NRi/wxZKQcGurQs5oNhqLshzVTMBewW/LMU3TTNlO0ieTiStjYhUIyi6DAp0xbEdgTt+LE0aCKQw24U4llsCs4ZRJrYopB6RwqnpA1YQ5NGFZ1YQ41Z5S8IQQdP5laEBRJcD4Vj5DEsW2gE6s6g3d/YP/g+BDnT7GNi2qCjTwGd6riBzHaaCEd3Js01vwCPIbmWBRx1nwAN/1ov+/drgFWIlfKpVukyYihtgkXNp4mABK+1GtVr+SBhJDbBIubVw+Cd/TDgKO2DPiN3YUo6y/nDCNEIsqTKH1en2tcwA9FKEItyDi3aIh8Gl1sRrVnSDzNFDJT1bAy5xpOYGn5fP5JuL95ZjMIn1ya7j5dPGfv0A5eAnpZUY3n5jXcoec5J67D9q+VuAPM47D3XaSeL4AAAAASUVORK5CYII="); background-repeat: no-repeat; background-attachment: scroll; background-size: 16px 18px; background-position: 98% 50%; cursor: auto;' fdprocessedid="fgi4eb"> </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="" fdprocessedid="p33zer"> </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="" fdprocessedid="co9vlp"> </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="" fdprocessedid="h70r34"> </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: 5px !important; -webkit-appearance: none; -webkit-border-radius: 0px;" fdprocessedid="7urkj"> <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="form-consent"> <label for="contact_consent" style="font-size: 1.5rem;"> <input type="checkbox" id="contact_consent" name="contact_consent"> I agree to be contacted by <strong>Brad Bergamini PLLC</strong> via call, email, and text for real estate services. To opt out, you can reply <strong>"STOP"</strong> at any time or reply <strong>"HELP"</strong> for assistance. You can also click the unsubscribe link in the emails. Message and data rates may apply. Message frequency may vary. <a href="https://www.thebergaminigroup.com/privacy_policy" target="_blank" rel="noopener noreferrer"> Privacy Policy </a>(Optional) </label> </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-footer" data-selector="a.btn, button.btn, button" fdprocessedid="w8wsmt">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 animated fadeInUp wow animated animated animated animated animated animated animated animated animated animated animated animated animated animated animated animated animated animated animated animated animated animated animated animated animated animated animated" id="logo-group" animation-delay="0.2s" style="visibility: visible; animation-name: fadeInUp;"> <img data-selector="img" style="border-style: none; margin-bottom: 10px; display: block; margin-left: auto; margin-right: auto;" class="ftr-logo margin-bottom-40" src="https://images.brivityidx.com/assets/images/uploads/106226/Bergamini_New_Logo.png" alt="Keller Williams Logo"> <img class="ftr-logo" src="https://images.brivityidx.com/assets/images/uploads/4595/powered-by-place-logo-white.png" alt="Powered by PLACE Logo" data-selector="img" style="border-style: none; margin-bottom: 10px; display: block; margin-left: auto; margin-right: auto;"> <div class="text-left" id="text-1" style="outline: medium none; cursor: inherit;"> <ul style="list-style-type: none;"> <br> <li data-selector="li"> <span class="agent_address_dynamic dynamic_loading dynamic_loading dynamic_loading dynamic_loading"></span> <br><span class="agent_city_dynamic dynamic_loading dynamic_loading dynamic_loading dynamic_loading"></span>, <span class="agent_state_dynamic dynamic_loading dynamic_loading dynamic_loading dynamic_loading"></span> <span class="agent_zip_dynamic dynamic_loading dynamic_loading dynamic_loading dynamic_loading"></span> </li> <li data-selector="li"> <a class="agent_phone_" href="tel:9282374400" src="tel:">(928) 237-4400</a> </li> </ul> </div> </div> </div> <div class="row ftr-anchor animated fadeInUp wow animated animated animated animated animated animated animated animated animated animated animated animated animated animated animated animated animated animated animated animated animated animated animated animated animated animated animated" style="visibility: visible; animation-name: fadeInUp;"> <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>The Bergamini Group | Keller Williams Arizona Realty | <a href="https://www.place.com/" target="_blank">PLACE</a></strong></p> <p style="margin: 10px 0px;" 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;" data-selector="img">   Each office is independently owned and operated. </p> </div> <div class="col-sm-6 anchor-col no-padding"> <ul class="list-inline social"> <li data-selector="li"> <a class="agent_facebook_dynamic dynamic_loading dynamic_loading dynamic_loading dynamic_loading" href="https://www.facebook.com/prescottazrealty" target="_blank"> <svg alt="Facebook Icon" viewbox="0 0 24 24" width="24" height="24" stroke="currentColor" stroke-width="0" fill="currentColor" stroke-linecap="round" stroke-linejoin="round" class="css-i6dzq1"> <path d="M18 2h-3a5 5 0 0 0-5 5v3H7v4h3v8h4v-8h3l1-4h-4V7a1 1 0 0 1 1-1h3z"></path> </svg></a> </li> <li data-selector="li"> <a class="agent_twitter_dynamic dynamic_loading dynamic_loading dynamic_loading dynamic_loading" href="https://twitter.com/" target="_blank"> <svg alt="Twitter Icon" viewbox="0 0 24 24" width="24" height="24" stroke="currentColor" stroke-width="0" fill="currentColor" stroke-linecap="round" stroke-linejoin="round" class="css-i6dzq1"> <path d="M23 3a10.9 10.9 0 0 1-3.14 1.53 4.48 4.48 0 0 0-7.86 3v1A10.66 10.66 0 0 1 3 4s-4 9 5 13a11.64 11.64 0 0 1-7 2c9 5 20 0 20-11.5a4.5 4.5 0 0 0-.08-.83A7.72 7.72 0 0 0 23 3z"> </path> </svg></a> </li> <li data-selector="li"> <a class="agent_linkedin_dynamic dynamic_loading dynamic_loading dynamic_loading dynamic_loading" href="https://www.linkedin.com/" target="_blank"> <svg alt="LinkedIn Icon" viewbox="0 0 24 24" width="24" height="24" stroke="currentColor" stroke-width="0" fill="currentColor" stroke-linecap="round" stroke-linejoin="round" class="css-i6dzq1"> <path d="M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2 2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6z"> </path> <rect x="2" y="9" width="4" height="12"></rect> <circle cx="4" cy="4" r="2"></circle> </svg></a> </li> <li data-selector="li"> <a class="agent_instagram_dynamic dynamic_loading dynamic_loading dynamic_loading dynamic_loading" href="https://www.instagram.com/thebergaminigroup/" target="_blank"> <svg alt="Instagram Icon" viewbox="0 0 24 24" width="24" height="24" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round" class="css-i6dzq1"> <rect x="2" y="2" width="20" height="20" rx="5" ry="5"></rect> <path d="M16 11.37A4 4 0 1 1 12.63 8 4 4 0 0 1 16 11.37z"></path> <line x1="17.5" y1="6.5" x2="17.5" y2="6.5"></line> </svg></a> </li> <li data-selector="li"> <a class="agent_youtube_dynamic dynamic_loading dynamic_loading dynamic_loading dynamic_loading" href="https://www.youtube.com/c/TheBergaminiGroupPrescott" target="_blank"> <svg alt="YouTube Icon" viewbox="0 0 24 24" width="24" height="24" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round" class="css-i6dzq1"> <path d="M22.54 6.42a2.78 2.78 0 0 0-1.94-2C18.88 4 12 4 12 4s-6.88 0-8.6.46a2.78 2.78 0 0 0-1.94 2A29 29 0 0 0 1 11.75a29 29 0 0 0 .46 5.33A2.78 2.78 0 0 0 3.4 19c1.72.46 8.6.46 8.6.46s6.88 0 8.6-.46a2.78 2.78 0 0 0 1.94-2 29 29 0 0 0 .46-5.25 29 29 0 0 0-.46-5.33z"> </path> <polygon points="9.75 15.02 15.5 11.75 9.75 8.48 9.75 15.02"></polygon> </svg></a> </li> <li data-selector="li"> <a class="agent_pinterest_dynamic dynamic_loading dynamic_loading dynamic_loading dynamic_loading" href="https://www.pinterest.com/" target="_blank"> <svg alt="Pinterest Icon" width="24" height="24" viewbox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"> <path fill-rule="evenodd" clip-rule="evenodd" d="M3 12C3 7.02944 7.02944 3 12 3C16.9706 3 21 7.02944 21 12C21 16.9706 16.9706 21 12 21C7.02944 21 3 16.9706 3 12ZM12 1C5.92487 1 1 5.92487 1 12C1 18.0751 5.92487 23 12 23C18.0751 23 23 18.0751 23 12C23 5.92487 18.0751 1 12 1ZM12.5494 5.07703C15.8009 5.07703 17.941 7.39568 17.941 9.88451C17.941 13.1764 16.0835 15.6358 13.3465 15.6369C12.4262 15.6369 11.5613 15.147 11.2652 14.5905C11.2652 14.5905 10.7711 16.524 10.666 16.8971C10.4896 17.5278 10.1493 18.1574 9.83274 18.656C9.38281 19.2234 8.86387 18.8023 8.80169 18.2851C8.78133 17.7089 8.80393 17.027 8.95206 16.4061C9.11487 15.7253 10.0476 11.8332 10.0476 11.8332C10.0476 11.8332 9.77511 11.2975 9.77511 10.5054C9.77511 9.26149 10.5066 8.33296 11.4178 8.33296C12.1922 8.33296 12.5664 8.90687 12.5664 9.5932C12.5664 10.0824 12.3646 10.7265 12.1521 11.4045C12.0313 11.7897 11.9072 12.1859 11.8146 12.5709C11.6009 13.4612 12.2668 14.1868 13.1588 14.1868C14.7733 14.1868 15.8597 12.1453 15.8597 9.72519C15.8597 7.88663 14.6025 6.50966 12.3154 6.50966C9.73212 6.50966 8.12222 8.40819 8.12222 10.5282C8.12222 11.2593 8.34042 11.7743 8.68412 12.1748C8.84124 12.3592 8.86387 12.4323 8.8062 12.6429C8.78317 12.7299 8.74315 12.8868 8.70577 13.0333C8.67708 13.1457 8.64994 13.2521 8.63324 13.3161C8.57671 13.5278 8.40146 13.6042 8.207 13.5256C7.01656 13.0477 6.46259 11.7634 6.46259 10.3199C6.46259 7.93578 8.50209 5.07703 12.5494 5.07703Z" fill="currentColor"></path> </svg></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;}">
2246<!-- chatbot v1 -->
2247<!-- Chatbot drawer container -->
2248<div class="chatbot-drawer-container loading">
2249    <div class="chatbot-content-wrapper">
2250        <div class="chatbot-outside-content">
2251            <div class="chatbot-bubble-message-container cb-hide">
2252                <img src="https://cdn.brivity.com/images/people/59833329/1366199b834fc395da0fc2942e902c4c3182f1e5-original.jpg?1728929253" class="chatbot-agent-img" alt="Agent profile image in chat bubble"/>
2253                <div id="call-to-action" class="bubble-message"></div>
2254                <button type="button" class="chatbox-bubble-close" data-dismiss="modal" aria-label="Close">
2255                    <span aria-hidden="true">&times;</span>
2256                </button>
2257            </div>
2258            <button id="chatbot-open-btn" class="chatbot-open-btn bg-prmry" aria-label="Chatbot Open Button">
2259                <svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
2260                    <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"/>
2261                </svg>
2262            </button>
2263        </div>
2264        <div class="chatbot-drawer">
2265            <div class="chatbot-header bg-prmry">
2266                <div class="chatbot-agent-info">
2267                    <img src="https://cdn.brivity.com/images/people/59833329/1366199b834fc395da0fc2942e902c4c3182f1e5-original.jpg?1728929253" class="chatbot-agent-img" alt="Agent profile image in chat header"/>
2268                    <div class="chatbot-agent">
2269                        <h3 class="chatbot-agent-name">Jen Bergamini</h3>
2270                        <h4><span class="chatbot-agent-title">Director of Ops</span> | <span class="chatbot-agent-company">The Bergamini Group | Keller Williams Arizona Realty | PLACE</span></h4>
2271                    </div>
2272                    <a id="chatbot-agent-phone" style="display: none;">(928) 227-4899</a>
2273                </div>
2274                <button id="close-chatbot-drawer" type="button" class="chatbox-modal-close" data-dismiss="modal" aria-label="Close">
2275                    <span aria-hidden="true">&times;</span>
2276                </button>
2277            </div>
2278            <div class="chatbot-body">
2279                <div class="chatbot-message-container">
2280                    <img src="https://cdn.brivity.com/images/people/59833329/1366199b834fc395da0fc2942e902c4c3182f1e5-original.jpg?1728929253" class="chatbot-agent-img" alt="Agent profile image in message"/>
2281                    <h4 id="initial_message" class="chatbot-chat-messages not-loaded"></h4>
2282                    <div class="chatbot-chat-messages loading">
2283                        <span class="typing-indicator">
2284                            <span></span>
2285                            <span></span>
2286                            <span></span>
2287                        </span>
2288                    </div>
2289                </div>
2290                <form id="chatbotForm" class="chatbot-form">
2291                    <input type="name" id="chatbot_fullname" class="chatbox-form-control no-native-focus" placeholder="Full Name"
2292                        pattern="^[A-Za-z'\- ]+ [A-Za-z'\- ]+$"
2293                        required />
2294                    <input type="tel" id="chatbot_phone" class="chatbox-form-control no-native-focus" placeholder="Phone" required />
2295                    <input type="email" id="chatbot_email" class="chatbox-form-control no-native-focus" placeholder="Email"
2296                        pattern="^[^@\s]+@[^@\s]+\.[^@\s]+$"
2297                        required />
2298                    <textarea id="chatbot_message" class="chatbox-form-control chatbot-message" rows="5" name="notes" placeholder="Any Comments or Questions"></textarea>
2299                    <div class="chatbot-consent-container">
2300                        <div class="chatbot-toggle">
2301                                                            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 
2301communications 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>.
2302                            </div>
2303                    </div>
2304                    <input type="hidden" id="chatbot_tags">
2305                                    </form>
2306            </div>
2307            <div class="chatbot-footer">
2308                <button type="submit" form="chatbotForm" class="chatbot-send bg-prmry chatbot-btn-disabled" data-dismiss="modal" aria-label="Close" disabled>
2309                    Send 
2310                    <span aria-hidden="true"> 
2311                        <svg class="chatbot-btn-icon" width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
2312                            <g clip-path="url(#clip0_2435_997)">
2313                                <path d="M14.6667 1.33331L7.33337 8.66665" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
2314                                <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"/>
2315                            </g>
2316                            <defs>
2317                                <clipPath id="clip0_2435_997">
2318                                    <rect width="16" height="16" fill="white"/>
2319                                </clipPath>
2320                            </defs>
2321                        </svg>
2322                    </span>
2323                </button>
2324            </div>
2325        </div>
2326    </div>
2327</div> <style>
2328                                .signup-consent-checkbox-section {
2329                                    display: none;
2330                                    flex-direction:column;
2331                                    align-items:flex-start;
2332                                    padding: 6px 0;
2333                                }
2334
2335                                .signup-consent-checkbox-section .checkbox {
2336                                    display:flex; 
2337                                    align-items:flex-start; 
2338                                    justify-content:center; 
2339                                    gap:8px; 
2340                                    padding:0 !important;
2341                                }
2342
2343                                .signup-consent-checkbox-section .checkbox input {
2344                                    position:unset;
2345                                    margin:2px 0 0 0 !important;
2346                                }
2347
2348                                .signup-consent-checkbox-section .checkbox span {
2349                                    color: #666666;
2350                                    font-size: 14px;
2351                                    font-weight: 400;
2352                                    line-height:16px;
2353                                }
2354
2355                                .signup-verbage {
2356                                    text-align:center;
2357                                    font-size:10px;
2358                                    line-height:16px;
2359                                }
2360
2361                                .signup-verbage span {
2362                                   color: #8C8C8C; 
2363                                   font-weight:600; 
2364                                }
2365
2366                                .signup-verbage a {
2367                                    color:#5386E4 !important;
2368                                    font-weight:400;
2369                                }
2370
2371                                .signup-verbage .twilio-enabled-verbage {
2372                                    display:none;
2373                                }
2374
2375                                
2376                                
2377                            </style> <div id="modal-mount" data-modal-bundle="https://cdn1.brivityidx.com/assets/modals/v1/all.html?ck=1789512948"></div>
2377 <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> 
2377<script>
2378            document.addEventListener("DOMContentLoaded", () => {
2379                class Toast {
2380                    constructor() {
2381                        this.element = document.querySelector('place-generictoast');
2382                    }
2383
2384                    show(message, error = false, link) {
2385                        var dispatch = function () {
2386                            window.dispatchEvent(
2387                                new CustomEvent("ShowToast", {
2388                                    detail: {
2389                                        text: message,
2390                                        error: error,
2391                                        link: link,
2392                                    },
2393                                })
2394                            );
2395                        };
2396                        if (window.sitebuilderPlaceComponents && window.sitebuilderPlaceComponents.ensureLoaded) {
2397                            window.sitebuilderPlaceComponents
2398                                .ensureLoaded('place-generictoast')
2399                                .then(dispatch)
2400                                .catch(function (err) {
2401                                    console.warn('toast.show fallback (web-components unavailable):', message, err);
2402                                });
2403                        } else {
2404                            dispatch();
2405                        }
2406                    }
2407                }
2408
2409                window.toast = new Toast();
2410            });
2411        </script>
2411 
2411<script src="https://cdn.jsdelivr.net/npm/@turf/[email protected]/turf.min.js"></script>
2411 
2411<script src="https://maps.googleapis.com/maps/api/js?libraries=geocoding,places,marker,drawing&key=AIzaSyAjpuNg6WGCMV5rzoJcIP2QmMTVto6hYmc&map_ids=85c127b7bf0255d9"></script>
2411 
2411<script src="https://cdn1.brivityidx.com/assets/js/build.min.js?ck="></script>
2411 
2411<script src="https://cdn1.brivityidx.com/assets/js/top_bar_v2.min.js?ck="></script>
2411 
2411<script src="https://cdn1.brivityidx.com/assets/js/global_js.min.js?ck=1789512947"></script>
2411 
2411<script>deferScript("https://cdn1.brivityidx.com/assets/js/global_js_defer.min.js?ck=1789512947", 5000);</script>
2411 
2411<script>
2412            function shouldLoadChatbotImmediately() {
2413                const settingsEl = document.getElementById('hchatbot_settings');
2414                if (!settingsEl) return false;
2415
2416                const version = Number(settingsEl.dataset.chatbotVersion);
2417                let isInitialized = false;
2418
2419                try {
2420                    const session = JSON.parse(sessionStorage.getItem('cbSession') || '{}');
2421                    isInitialized = session.chatbotInitialized === true;
2422                } catch (e) {}
2423
2424                return version > 1 && isInitialized;
2425            }
2426        </script>
2426 
2426<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>
2426 
2426<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>
2426 
2426<script type="text/javascript" src="https://cdn1.brivityidx.com/assets/js/jquery.geocomplete.min.js"></script>
2426<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery.bootstrapvalidator/0.5.3/js/bootstrapValidator.min.js"></script>
2426<script type="text/javascript" src="https://cdn1.brivityidx.com/assets/js/menu2.js"></script>
2426<script type="text/javascript" src="https://cdn1.brivityidx.com/assets/js/member_area_components.js"></script>
2426<script type="text/javascript" src="https://cdn1.brivityidx.com/assets/js/update_agent_info.min.js"></script>
2426 
2426<script src="https://mobile-component-services-library.s3.amazonaws.com/collections_service.min.js?ck=1"></script>
2426 
2426<script src="https://mobile-component-services-library.s3.amazonaws.com/messaging_service.min.js?ck=1"></script>
2426 
2426<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")}}
2427$(window).resize(changePlaceholder).trigger('resize')})</script>
2427 
2427<script>$(document).ready(function(){$("ul.seo-anchor-links li:nth-of-type(4) a").attr("href","/search")})</script>
2427 
2427<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>
2427 
2427<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>
2427 
2427<script>$("#slide-out-nav > div.render-menu > ul").append('<li class="nav-item"><a style="color:#fff!important; border-radius:5px; max-width:250px; margin:0 auto;" id="top-nav-marketing-plan" class="nav-link-color" data-toggle="modal" data-target="#getmarketingplan">Get Marketing Plan</a></li>')</script>
2427 
2427<script>$("#contact1_availability_date").click(function(){$(this).prop('type','date')})</script>
2427 
2427<script>$(document).ready(function(){if($('#slide-out-nav .render-menu ul li a:contains("ABOUT PLACE")')){$('#slide-out-nav .render-menu ul li a:contains("ABOUT PLACE")').attr('target','_blank')}})</script>
2427 
2427<script>$("a.pb-vendor").attr({"target":"_blank"})</script>
2427 
2427<script>$('#seo-anchor a.pb-vendor').html('<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 822.81 228.05"><defs><style>.cls-1{fill:#5f605f;}.cls-2{fill:#f3714f;}.cls-3{fill:#5bc5c4;}.cls-4{fill:#fdfeff;}.cls-5{fill:#376e7b;}</style></defs><path class="cls-1" d="M373.61,341.21A61.3,61.3,0,0,1,386,342.42a30,30,0,0,1,10.42,4.14,22,22,0,0,1,7.21,7.71,23.86,23.86,0,0,1,2.71,11.92A24.26,24.26,0,0,1,405,374a23.82,23.82,0,0,1-3.64,6.85,23.38,23.38,0,0,1-5.57,5.21,20.81,20.81,0,0,1-7.21,3v.29q9.86,1.29,15.7,8.07t5.85,16.77a40.79,40.79,0,0,1-.42,5.49,27,27,0,0,1-1.72,6.28,26.28,26.28,0,0,1-3.71,6.36,22,22,0,0,1-6.49,5.49,39.23,39.23,0,0,1-10,3.86,58.63,58.63,0,0,1-14.21,1.49H330.5V341.21Zm0,44.67a33.93,33.93,0,0,0,10.14-1.35,21.17,21.17,0,0,0,7.13-3.71,15.28,15.28,0,0,0,4.29-5.5,16,16,0,0,0,1.42-6.71q0-19.12-23-19.13h-33.4v36.4Zm0,49a54.59,54.59,0,0,0,10.28-.93,23.53,23.53,0,0,0,8.56-3.36,17.09,17.09,0,0,0,5.86-6.49,21.75,21.75,0,0,0,2.14-10.21q0-9.84-6.92-14.77t-19.92-4.93h-33.4v40.69Z" transform="translate(-9.57 -307.21)"/><path class="cls-1" d="M466.68,341.21a44.11,44.11,0,0,1,11.92,1.57,28.7,28.7,0,0,1,9.85,4.78,23,23,0,0,1,6.71,8.28,26.74,26.74,0,0,1,2.5,11.92,28.63,28.63,0,0,1-5,16.84q-5,7.14-14.85,9.13V394a22.8,22.8,0,0,1,8.28,2.64,16.71,16.71,0,0,1,5.36,4.93,20.35,20.35,0,0,1,3,6.92,50.57,50.57,0,0,1,1.22,8.49c.09,1.72.19,3.81.28,6.28s.29,5,.57,7.5a46.45,46.45,0,0,0,1.36,7.13,13.54,13.54,0,0,0,2.5,5.21H489.66a12.34,12.34,0,0,1-1.35-3.49,31,31,0,0,1-.72-4.29c-.14-1.47-.26-2.92-.35-4.35s-.2-2.66-.29-3.71q-.29-5.43-.93-10.78a29.53,29.53,0,0,0-2.71-9.56,16.84,16.84,0,0,0-6-6.78q-3.93-2.57-10.78-2.29H429.71v45.25H420V341.21ZM466,389.6a26.16,26.16,0,0,0,8.42-1.36,20.84,20.84,0,0,0,7-3.93,19.3,19.3,0,0,0,4.79-6.21,18.85,18.85,0,0,0,1.78-8.35q0-9.42-5.43-14.84T466,349.48H429.71V389.6Z" transform="translate(-9.57 -307.21)"/><path class="cls-1" d="M522.78,341.21V443.12h-9.71V341.21Z" transform="translate(-9.57 -307.21)"/><path class="cls-1" d="M546,341.21l33.12,91.21h.29l32.83-91.21h10.27L584.73,443.12H573.45L535.77,341.21Z" transform="translate(-9.57 -307.21)"/><path class="cls-1" d="M642,341.21V443.12h-9.71V341.21Z" transform="translate(-9.57 -307.21)"/><path class="cls-1" d="M735.89,341.21v8.27H700.35v93.64h-9.71V349.48h-35.4v-8.27Z" transform="translate(-9.57 -307.21)"/><path class="cls-1" d="M742.45,341.21h11.42l33.55,51.67,33.4-51.67h11.56l-40.25,60v42h-9.71v-42Z" transform="translate(-9.57 -307.21)"/><path class="cls-2" d="M350.67,470q7,0,10.54,3.57t3.57,10q0,6.45-3.57,10.06t-10.54,3.54H336.62V516H330.5V470Zm-2.06,22q5.22.07,7.64-2.12a8.1,8.1,0,0,0,2.41-6.32,8,8,0,0,0-2.41-6.28q-2.42-2.16-7.64-2.16h-12V492Z" transform="translate(-9.57 -307.21)"/><path class="cls-2" d="M380,470v40.85h24.35V516H373.87V470Z" transform="translate(-9.57 -307.21)"/><path class="cls-2" d="M430.57,470l18,46h-6.76l-5-13.85H417.3L412.14,516h-6.25l17.91-46Zm4.25,27-7.67-21.46H427L419.23,497Z" transform="translate(-9.57 -307.21)"/><path class="cls-2" d="M443.84,475.16V470h36.79v5.15H465.3V516h-6.12V475.16Z" transform="translate(-9.57 -307.21)"/><path class="cls-2" d="M517.55,470v5.15h-24.1v14.63h21.14v5.15H493.45V516h-6.12V470Z" transform="translate(-9.57 -307.21)"/><path class="cls-2" d="M524.73,484a22.84,22.84,0,0,1,4.16-7.7,20.2,20.2,0,0,1,6.89-5.35,24,24,0,0,1,19.2,0,20.23,20.23,0,0,1,6.9,5.35A22.84,22.84,0,0,1,566,484a30.36,30.36,0,0,1,0,18.1,22.84,22.84,0,0,1-4.16,7.7,19.91,19.91,0,0,1-6.9,5.32,24.49,24.49,0,0,1-19.2,0,19.88,19.88,0,0,1-6.89-5.32,22.84,22.84,0,0,1-4.16-7.7,30.36,30.36,0,0,1,0-18.1Zm5.64,15.91a18.51,18.51,0,0,0,2.84,6.09,14.38,14.38,0,0,0,5,4.35,16.69,16.69,0,0,0,14.43,0,14.38,14.38,0,0,0,5-4.35,18.51,18.51,0,0,0,2.84-6.09,26.59,26.59,0,0,0,0-13.72,18.51,18.51,0,0,0-2.84-6.09,14.59,14.59,0,0,0-5-4.35,16.69,16.69,0,0,0-14.43,0,14.59,14.59,0,0,0-5,4.35,18.51,18.51,0,0,0-2.84,6.09,26.59,26.59,0,0,0,0,13.72Z" transform="translate(-9.57 -307.21)"/><path class="cls-2" d="M598.16,470q6.57,0,10.27,3.22a11.1,11.1,0,0,1,3.71,8.83,14,14,0,0,1-1.9,7.34,9.77,9.77,0,0,1-6.09,4.32v.13a8.26,8.26,0,0,1,3.25,1.29,7.08,7.08,0,0,1,2,2.16,9.92,9.92,0,0,1,1.1,2.8,31.32,31.32,0,0,1,.54,3.22c.09,1.12.15,2.26.19,3.41a31.69,31.69,0,0,0,.33,3.42,20.93,20.93,0,0,0,.74,3.19,7.68,7.68,0,0,0,1.45,2.67h-6.83a3.8,3.8,0,0,1-.87-1.93,19.54,19.54,0,0,1-.29-2.74c0-1-.09-2.09-.13-3.25a21.57,21.57,0,0,0-.39-3.42c-.17-1.11-.38-2.18-.64-3.19a7.56,7.56,0,0,0-1.23-2.64,5.9,5.9,0,0,0-2.19-1.8,8.12,8.12,0,0,0-3.61-.68H582.63V516h-6.12V470Zm1.28,20.88a9,9,0,0,0,3.39-1.26,7,7,0,0,0,2.32-2.51A8.48,8.48,0,0,0,606,483a8.27,8.27,0,0,0-1.94-5.67q-1.94-2.19-6.25-2.19h-15.2v16h12.76A25.08,25.08,0,0,0,599.44,490.89Z" transform="translate(-9.57 -307.21)"/><path class="cls-2" d="M630.76,470l14.5,38.66L659.82,470h8.37v46H662.4V477.74h-.13L647.9,516h-5.22l-14.37-38.27h-.13V516h-5.8V470Z" transform="translate(-9.57 -307.21)"/><polygon class="cls-3" points="185.03 208.82 83.95 193.78 52.82 228.05 53.17 188.88 0 179.09 0 40.92 185.38 31.83 185.03 208.82"/><polygon class="cls-2" points="77.3 0 87.09 99.69 142.71 34.28 198.67 99.69 184.33 100.04 184.68 165.44 215.81 159.15 241.69 195.53 242.74 153.2 267.93 146.91 277.02 28.33 77.3 0"/><polygon class="cls-4" points="198.67 99.69 142.71 34.28 87.09 99.69 86.74 100.04 87.09 100.04 101.78 100.04 101.78 181.88 101.78 182.58 184.68 165.79 184.68 165.44 184.33 100.04 198.67 99.69"/><polygon class="cls-5" points="81.15 37.08 142.71 34.28 86.74 99.69 81.15 37.08"/></svg>')</script>
2427 
2427<script>$("a.pb-vendor").attr("href","https://brivity.com/")</script>
2427 
2427<script>$(document).ready(function(){$('#sign-up-modal.modal #signupForm').append('<input type="hidden" name="tags" value="registration_signup">')})</script>
2427 
2427<script>(function(w,i,d,g,e,t){w.WidgetTrackerObject=g;(w[g]=w[g]||function(){(w[g].q=w[g].q||[]).push(arguments)}),(w[g].ds=1*new Date());(e="script"),(t=d.createElement(e)),(e=d.getElementsByTagName(e)[0]);t.async=1;t.src=i;e.parentNode.insertBefore(t,e)})(window,"https://widgetbe.com/agent",document,"widgetTracker");window.widgetTracker("create","WT-XTNLZHLW");window.widgetTracker("send","pageview")</script>
2427 
2427<script type="text/javascript">
2428              /* <![CDATA[ */
2429              goog_snippet_vars = function() {
2430                var w = window;
2431                w.google_conversion_id = G-KGN2P8TW5Y;
2432                w.google_conversion_label = "5078166533";
2433                w.google_remarketing_only = false;
2434              }
2435              // DO NOT CHANGE THE CODE BELOW.
2436              goog_report_conversion = function(url) {
2437                goog_snippet_vars();
2438                window.google_conversion_format = "3";
2439                var opt = new Object();
2440                opt.onload_callback = function() {
2441                if (typeof(url) != 'undefined') {
2442                  window.location = url;
2443                }
2444              }
2445              var conv_handler = window['google_trackConversion'];
2446              if (typeof(conv_handler) == 'function') {
2447                conv_handler(opt);
2448              }
2449            }
2450            /* ]]> */
2451            </script>
2451 
2451<script type="text/javascript" src="//www.googleadservices.com/pagead/conversion_async.js">
2452            </script>
2452 
2452<script type="text/javascript">
2453            /* <![CDATA[ */
2454            var google_conversion_id = G-KGN2P8TW5Y;
2455            var google_custom_params = window.google_tag_params;
2456            var google_remarketing_only = true;
2457            /* ]]> */
2458            </script>
2458 
2458<script type="text/javascript" src="//www.googleadservices.com/pagead/conversion.js">
2459            </script>
2459 <noscript> <div style="display:inline;"> <img height="1" width="1" style="border-style:none;" alt="" src="//googleads.g.doubleclick.net/pagead/viewthroughconversion/G-KGN2P8TW5Y/?guid=ON&amp;script=0"> </div> </noscript></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.