PageSourceSearch

https://www.willemskwartiertilburg.nl/wp-content/plugins/yoreHouses/Assets/System/JS/mo_birdseye.js

js willemskwartiertilburg.nl collected 2026-10-06 21:25:00 UTC 90,325 bytes, 1,748 lines download raw bytes

1document.addEventListener('DOMContentLoaded', function () {
2  const setActiveMapOnLoad = (element) => {
3    const crmMapViewer = element.querySelector('.__crm-map-main-viewer');
4
5    if (!crmMapViewer.hasAttribute('data-active-map')) return;
6
7    const activeMap = crmMapViewer.getAttribute('data-active-map');
8    const polygons = document.querySelectorAll('._flatmap-overview-map polygon');
9    const floorplans = crmMapViewer.querySelectorAll('._floorplan-holder');
10    const activePolygon = crmMapViewer.querySelector(`._flatmap-overview-map polygon[data-propertymapid="${activeMap}"]`);
11    const activeFloorPlan = crmMapViewer.querySelector(`._floorplan-holder[data-mapid="${activeMap}"]`);
12
13    polygons.forEach((polygon) => {
14      polygon.classList.remove('highlight');
15    });
16
17    floorplans.forEach((floorplan) => {
18      floorplan.setAttribute('data-active', '0');
19    });
20
21    activePolygon.classList.add('highlight');
22    activeFloorPlan.setAttribute('data-active', '1');
23  };
24
25  // Temporary fix: set active map on load (to overrule the weird js )
26  setTimeout(() => {
27    document.querySelectorAll('.yoreflexi_yorecrm---vogelvlucht').forEach((element) => {
28      setActiveMapOnLoad(element);
29    });
30  }, 500);
31
32  document.querySelectorAll('polygon')?.forEach((e) => {
33    e?.addEventListener('mouseenter', () => {
34      e?.classList?.add('hovered');
35    });
36
37    e?.addEventListener('mouseleave', () => {
38      e?.classList?.remove('hovered');
39    });
40  });
41
42  if (typeof document.querySelectorAll('.__crm-results-row') !== 'undefined' && null !== document.querySelectorAll('.__crm-results-row')) {
43    let crmResultRow = document.querySelectorAll('.__crm-results-row');
44    for (crmrr of crmResultRow) {
45      crmrr.addEventListener('click', function (e) {
46        let button = e.target,
47          filterBar = button.closest('.vogelvlucht-filter-bar'),
48          filterIcon = filterBar.querySelector('.__crm-filter-toggle'),
49          section = button.closest('.flexsection');
50
51        triggerAevent(filterIcon, 'click'); /* To close the filters menu */
52        section.scrollIntoView({ behavior: 'smooth' }, true); /* To make sure the map is visible */
53      });
54    }
55  }
56
57  /* Advanced filters */
58  if (typeof document.querySelectorAll('.__crm-filter-toggle') !== 'undefined' && null !== document.querySelectorAll('.__crm-filter-toggle')) {
59    let advancedFilterTogglers = document.querySelectorAll('.__crm-filter-toggle');
60    for (aftc = 0; aftc < advancedFilterTogglers.length; aftc++) {
61      advancedFilterTogglers[aftc].addEventListener('click', function () {
62        let toggleButton = this;
63        let filters = toggleButton.parentNode.parentNode.querySelector('.__advanced-filters');
64        toggleButton.setAttribute('data-status', filters.getAttribute('data-status') == 'open' ? 'close' : 'open');
65
66        toggleButton
67          .closest('._crm-birdseyes')
68          .querySelector('.__crm-map-main')
69          .setAttribute('data-filters-opened', filters.getAttribute('data-status') == 'open' ? 'close' : 'open');
70
71        filters.setAttribute('data-status', filters.getAttribute('data-status') == 'open' ? 'close' : 'open');
72      });
73    }
74  }
75
76  /* Reset filters */
77  if (typeof document.querySelectorAll('.__crm-filter-reset') !== 'undefined' && null !== document.querySelectorAll('.__crm-filter-reset')) {
78    let resetFilterTogglers = document.querySelectorAll('.__crm-filter-reset');
79    for (rft of resetFilterTogglers) {
80      rft.addEventListener('click', function () {
81        let resetButton = this,
82          theSection = resetButton.closest('.flexsection'),
83          theFilters = resetButton.closest('.flexsection').querySelectorAll('.yrmslct-container'),
84          thePricerangeSlider = resetButton.closest('.flexsection').querySelector('.__crm-pricerange-slider');
85
86        /* Loop trough filter options & pricerangeslider and reset them accordingly */
87        for (slct of theFilters) {
88          let theSelect = slct.querySelector('select');
89
90          switch (true) {
91            /* Main filter */
92            case theSelect.classList.contains('_crm-filter-status') == true ? true : false:
93              triggerAevent(slct.querySelector('._item[value="ALL"]'), 'click');
94              break;
95
96            /* Advanced filter */
97            case theSelect.classList.contains('__crm-advanced-filter-livingsurfacearea') ? true : false:
98              triggerAevent(slct.querySelector('._item[value="default"]'), 'click');
99              break;
100
101            case theSelect.classList.contains('__crm-advanced-filter-lotarea') ? true : false:
102              triggerAevent(slct.querySelector('._item[value="default"]'), 'click');
103              break;
104
105            case theSelect.classList.contains('__crm-advanced-filter-rooms') ? true : false:
106              triggerAevent(slct.querySelector('._item[value="default"]'), 'click');
107              break;
108
109            case theSelect.classList.contains('__crm-advanced-filter-housetypes') ? true : false:
110              triggerAevent(slct.querySelector('._item[value="default"]'), 'click');
111              break;
112
113            case theSelect.classList.contains('__crm-advanced-filter-hometypes') ? true : false:
114              triggerAevent(slct.querySelector('._item[value="default"]'), 'click');
115              break;
116
117            case theSelect.classList.contains('__crm-advanced-filter-pricerange') ? true : false:
118              triggerAevent(slct.querySelector('._item[value="default"]'), 'click');
119              break;
120          }
121        }
122
123        /* Reset the pricerange slider by defaulting back to the default price */
124        if (typeof thePricerangeSlider !== 'undefined' && null !== thePricerangeSlider) {
125          let minResetPrice = thePricerangeSlider.parentNode.querySelector('.price-min').getAttribute('data-price-reset-to'),
126            maxResetPrice = thePricerangeSlider.parentNode.querySelector('.price-max').getAttribute('data-price-reset-to');
127
128          /* Reset the pricerange slider to the default values set by the system before filtering */
129          thePricerangeSlider.noUiSlider.set([minResetPrice, maxResetPrice]);
130
131          yoreFlexibleValidateFilters();
132        }
133      });
134    }
135  }
136
137  /* Pricerange slider */
138  if (typeof document.querySelectorAll('.__crm-pricerange-slider') !== 'undefined' && null !== document.querySelectorAll('.__crm-pricerange-slider')) {
139    let priceRanges = document.querySelectorAll('.__crm-pricerange-slider');
140    for (prc = 0; prc < priceRanges.length; prc++) {
141      /* NOUISLIDER */
142      let staticpriceSlider = priceRanges[prc];
143
144      let stepSize = parseInt(staticpriceSlider.parentNode.querySelector('#price-step-amount').value);
145      let saleType = staticpriceSlider.parentNode.querySelector('#price-type').value;
146      let stepMargeSize = Number(Number(stepSize) * 5); /* default start-end margin position for toggler */
147      let stepWidthSize = Number(Number(stepSize) * 10); /* Range margin */
148
149      if (saleType == 'RENT') {
150        /* Project in Rent marges */
151        stepMargeSize = 5;
152        stepWidthSize = 5;
153      }
154
155      let input0 = Number(Math.floor(Number(staticpriceSlider.parentNode.querySelector('#static-price-slider-min').value) / stepSize) * stepSize);
156      let input1 = Number(Math.ceil(Number(staticpriceSlider.parentNode.querySelector('#static-price-slider-max').value) / stepSize) * stepSize);
157
158      const inputs = [staticpriceSlider.parentNode.querySelector('#static-price-slider-min'), staticpriceSlider.parentNode.querySelector('#static-price-slider-max')];
159
160      const from = staticpriceSlider.parentNode.querySelector('#static-price-slider-min').value;
161      const to = staticpriceSlider.parentNode.querySelector('#static-price-slider-max').value;
162
163      let slider_worth = {
164        min: input0 > stepMargeSize ? input0 - stepMargeSize : input0,
165        max: input1 + stepMargeSize,
166      };
167
168      staticpriceSlider.parentNode.querySelector('#static-price-slider-min').value = slider_worth.min;
169      staticpriceSlider.parentNode.querySelector('#static-price-slider-max').value = slider_worth.max;
170
171      noUiSlider.create(staticpriceSlider, {
172        start: [slider_worth.min, slider_worth.max],
173        step: stepSize,
174        connect: true,
175        direction: 'ltr',
176        tooltips: false,
177        range: {
178          min: parseInt(parseInt(from) - stepWidthSize),
179          max: parseInt(parseInt(to) + stepWidthSize),
180        },
181        format: wNumb({
182          decimals: 0,
183          thousand: '.',
184        }),
185      });
186
187      /* Setup default values for ths slider */
188      if (typeof document.querySelectorAll('.__crm-filter-row[type-of-filter="pricerangeslider"]')) {
189        for (prsl of document.querySelectorAll('.__crm-filter-row[type-of-filter="pricerangeslider"]')) {
190          let min = prsl.querySelector('#static-price-slider-min'),
191            max = prsl.querySelector('#static-price-slider-max'),
192            section = prsl.closest('.flexsection'),
193            mapType = section.querySelector('.vogelvlucht-filter-bar').getAttribute('data-maptype');
194
195          if (mapType === 'propertymap') {
196            prsl.querySelector('#static-price-slider-min').setAttribute('data-price-reset-to', min.value.replace('.', ''));
197            prsl.querySelector('#static-price-slider-max').setAttribute('data-price-reset-to', max.value.replace('.', ''));
198          }
199        }
200      }
201
202      staticpriceSlider.noUiSlider.on('update', function (values, handle) {
203        inputs[handle].value = values[handle];
204        staticpriceSlider.parentNode.querySelector('.static-the-price-min').innerText = staticpriceSlider.parentNode.querySelector('.price-min').value;
205        staticpriceSlider.parentNode.querySelector('.static-the-price-max').innerText = staticpriceSlider.parentNode.querySelector('.price-max').value;
206
207        triggerAevent(staticpriceSlider.parentNode.querySelector('.static-the-price-min'), 'keyup');
208        // staticpriceSlider.parentNode.querySelector('.static-the-price-min').trigger('keyup');
209
210        /* Add site styling */
211        if (staticpriceSlider.parentNode.querySelector('.noUi-connect').classList.contains('uk-alert-secondary') === false) {
212          staticpriceSlider.parentNode.querySelector('.noUi-connect').classList.add('uk-alert-secondary');
213        }
214        if (staticpriceSlider.parentNode.querySelector('.noUi-handle').classList.contains('uk-border-secondary') === false) {
215          staticpriceSlider.parentNode.querySelector('.noUi-handle').classList.add('uk-border-secondary');
216        }
217      });
218
219      /* Pricerange slider script */
220      function setSliderHandle(e, i) {
221        var n = [null, null];
222        (n[e] = i), staticpriceSlider.noUiSlider.set(n);
223      }
224      inputs.forEach(function (e, i) {
225        e.addEventListener('change', function () {
226          setSliderHandle(i, this.value);
227        }),
228          e.addEventListener('keydown', function (e) {
229            var n,
230              l = staticpriceSlider.noUiSlider.get(),
231              r = Number(l[i]),
232              d = staticpriceSlider.noUiSlider.steps()[i];
233            switch (e.which) {
234              case 13:
235                setSliderHandle(i, this.value);
236                break;
237              case 38:
238                !1 === (n = d[1]) && (n = 1), null !== n && setSliderHandle(i, r + n);
239                break;
240              case 40:
241                !1 === (n = d[0]) && (n = 1), null !== n && setSliderHandle(i, r - n);
242            }
243          });
244      });
245    }
246  }
247
248  /* ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ */
249
250  /* create click listener for min-max price slider */
251  let yrmPrcBuilder = setInterval(function () {
252    if (typeof document.querySelectorAll('.__crm-pricerange-slider:not(.done)') !== 'undefined' && null !== document.querySelectorAll('.__crm-pricerange-slider:not(.done)')) {
253      let prsliders = document.querySelectorAll('.__crm-pricerange-slider:not(.done)');
254      for (prc2 = 0; prc2 < prsliders.length; prc2++) {
255        prsliders[prc2]?.classList.add('done');
256
257        let theMin = prsliders[prc2].parentNode.querySelector('.static-the-price-min');
258        let observer = new MutationObserver(yoreFlexibleValidateFilters);
259        observer.observe(theMin, { attributes: true, childList: true, subtree: true }); // Observe changes
260      }
261    }
262  }, 250);
263
264  /* ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ */
265
266  let yrmOMPolygonClick = setInterval(function () {
267    if (typeof document.querySelectorAll('.__crm-map-main-viewer:not(.actions-activated)') !== 'undefined' && null !== document.querySelectorAll('.__crm-map-main-viewer:not(.actions-activated)')) {
268      for (mpm of document.querySelectorAll('.__crm-map-main-viewer:not(.actions-activated)')) {
269        mpm.classList.add('actions-activated');
270
271        let mpmContainer = mpm.closest('.flexsection'),
272          mpmFilterbar = mpmContainer.querySelector('.vogelvlucht-filter-bar'),
273          mpmMapType = mpmFilterbar.getAttribute('data-maptype');
274
275        let mfm = false,
276          om = false;
277
278        /* Settings for propertymap setup */
279        if (mpmMapType === 'propertymap') {
280          mfm = mpm.querySelector('._propertymap-floorplan');
281        }
282
283        /* Settings for flatmap setup */
284        if (mpmMapType === 'floorplan') {
285          mfm = mpm.querySelector('._flatmap-floorplan');
286          om = mpm.querySelector('._flatmap-overview-map');
287        }
288
289        if (om !== false) {
290          /* Execute main om actions */
291          for (omp of om.querySelectorAll('polygon')) {
292            /* Click event for overviewmaps */
293            omp.addEventListener('click', function (e) {
294              if (e.target.getAttribute('data-active') === '1') {
295                let propertymapid = e.target.getAttribute('data-propertymapid'),
296                  mapid = e.target.closest('.__crm-map-main-viewer').getAttribute('data-mapid');
297                theFloorFilter = e.target.closest('.flexsection').querySelector('._crm-filter-floors[data-mapid="' + mapid + '"]');
298                triggerAevent(theFloorFilter.parentNode.querySelector('._item[value="' + propertymapid + '"]'), 'click');
299
300                /* Append legen to map */
301              }
302            });
303
304            omp.addEventListener('mousemove', function (e) {
305              /* Entered OMP polygon */
306              let element = e.target,
307                section = element.closest('.flexsection'),
308                plgnData = {
309                  p_id: birdseyeCheckIfFalse(element.getAttribute('id')),
310                  status: birdseyeCheckIfFalse(element.getAttribute('data-status')),
311                  housetypes: birdseyeCheckIfFalse(element.getAttribute('data-housetypes')),
312                  selltype: birdseyeCheckIfFalse(element.getAttribute('data-selltype')),
313                  colors: birdseyeCheckIfFalse(element.getAttribute('data-colors')),
314                  hometypes: birdseyeCheckIfFalse(element.getAttribute('data-hometypes')),
315                  rooms: birdseyeCheckIfFalse(element.getAttribute('data-rooms')),
316                  lotareas: birdseyeCheckIfFalse(element.getAttribute('data-lotareas')),
317                  livingareas: birdseyeCheckIfFalse(element.getAttribute('data-livingareas')),
318                  buildnumbers: birdseyeCheckIfFalse(element.getAttribute('data-buildnumbers')),
319                  price: birdseyeCheckIfFalse(element.getAttribute('data-price')),
320                  pricerange: birdseyeCheckIfFalse(element.getAttribute('data-pricerange')),
321                  x: parseInt(event.clientX) > parseInt(parseInt(window.innerWidth) / 2) ? 'right:' + (parseInt(window.innerWidth) - parseInt(event.clientX)) + 'px;' : 'left:' + (parseInt(event.clientX) + 20) + 'px;',
322                  y: parseInt(event.clientY) + 20,
323                  pageHalf: parseInt(window.innerWidth) / 2,
324                };
325              if (typeof document.querySelector('.__yrm-birdseye-popover') === 'undefined' || null === document.querySelector('.__yrm-birdseye-popover') || document.querySelector('.__yrm-birdseye-popover').length > 0) {
326                let popover = document.createElement('div');
327                popover.classList.add('__yrm-birdseye-popover');
328                popover.innerHTML =
329                  '<div class="loading">laden.. <svg class="loading-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><path d="M264 24C264 10.75 274.7 0 288 0C429.4 0 544 114.6 544 256C544 302.6 531.5 346.4 509.7 384C503.1 395.5 488.4 399.4 476.9 392.8C465.5 386.2 461.5 371.5 468.2 360C485.9 329.4 496 293.9 496 255.1C496 141.1 402.9 47.1 288 47.1C274.7 47.1 264 37.25 264 23.1V24z"/></svg></div>';
330                section.append(popover);
331              }
332
333              document.querySelector('.__yrm-birdseye-popover').setAttribute('style', plg
333nData.x + 'top:' + plgnData.y + 'px;');
334
335              birdseyeCreateNewMapPopover(element, plgnData, section);
336            });
337            omp.addEventListener('mouseleave', function (e) {
338              /* left OMP polygon */
339              if (typeof document.querySelector('.__yrm-birdseye-popover') !== 'undefined' && null !== document.querySelector('.__yrm-birdseye-popover')) {
340                document.querySelector('.__yrm-birdseye-popover').remove();
341              }
342            });
343          }
344        }
345
346        /* POLYGONS BY BUILDNUMBERS */
347        for (fm of mfm.querySelectorAll('._floorplan-holder')) {
348          for (fmp of fm.querySelectorAll('polygon')) {
349            /* Click event for floorplans */
350            fmp.addEventListener('click', function (e) {
351              const target = e.target.closest('.flexsection');
352              const rect = target.getBoundingClientRect();
353
354              // Mouse position
355              const x = event.clientX - rect.x;
356              const y = event.clientY - rect.y;
357
358              let plgn = e.target,
359                plgnData = {
360                  p_id: birdseyeCheckIfFalse(plgn.getAttribute('id')),
361                  status: birdseyeCheckIfFalse(plgn.getAttribute('data-status')),
362                  price: birdseyeCheckIfFalse(plgn.getAttribute('data-price')),
363                  pricerange: birdseyeCheckIfFalse(plgn.getAttribute('data-pricefrom')),
364                  housetype: birdseyeCheckIfFalse(plgn.getAttribute('data-housetype')),
365                  hometype: birdseyeCheckIfFalse(plgn.getAttribute('data-hometype')),
366                  room: birdseyeCheckIfFalse(plgn.getAttribute('data-room')),
367                  lotarea: birdseyeCheckIfFalse(plgn.getAttribute('data-lotarea')),
368                  livingarea: birdseyeCheckIfFalse(plgn.getAttribute('data-livingarea')),
369                  buildnumber: birdseyeCheckIfFalse(plgn.getAttribute('data-buildnumber')),
370                  x: x,
371                  y: y,
372                },
373                section = plgn.closest('.flexsection');
374              if (e.target.getAttribute('data-active') === '1') {
375                /* reset active & read + execute new active */
376                if (typeof section.querySelectorAll('.__crm-map-main-viewer') !== 'undefined' && null !== section.querySelectorAll('.__crm-map-main-viewer')) {
377                  for (viewer of section.querySelectorAll('.__crm-map-main-viewer')) {
378                    let floorplanContainer = false,
379                      plgns = false;
380                    if (mpmMapType === 'propertymap') {
381                      (floorplanContainer = viewer.querySelector('._propertymap-floorplan')), (plgns = floorplanContainer.querySelectorAll('polygon'));
382                    }
383                    if (mpmMapType === 'floorplan') {
384                      (floorplanContainer = viewer.querySelector('._flatmap-floorplan')), (plgns = floorplanContainer.querySelectorAll('polygon'));
385                    }
386                    for (pl of plgns) {
387                      if (pl.classList.contains('highlight') === true) {
388                        pl.classList.remove('highlight');
389                      }
390                    }
391                  }
392                }
393
394                plgn.classList.add('highlight');
395                birdseyeCreateNewMapPopup(plgn, plgnData, section);
396              }
397            });
398
399            /* Buildnumber hover */
400            fmp.addEventListener('mousemove', function (e) {
401              /* Entered OMP polygon */
402              let element = e.target,
403                section = element.closest('.flexsection'),
404                plgnData = {
405                  p_id: birdseyeCheckIfFalse(element.getAttribute('id')),
406                  status: birdseyeCheckIfFalse(element.getAttribute('data-status')),
407                  hometype: birdseyeCheckIfFalse(element.getAttribute('data-hometype')),
408                  room: birdseyeCheckIfFalse(element.getAttribute('data-room')),
409                  selltype: birdseyeCheckIfFalse(element.getAttribute('data-selltype')),
410                  lotarea: birdseyeCheckIfFalse(element.getAttribute('data-lotarea')),
411                  livingarea: birdseyeCheckIfFalse(element.getAttribute('data-livingarea')),
412                  buildnumber: birdseyeCheckIfFalse(element.getAttribute('data-buildnumber')),
413                  price: birdseyeCheckIfFalse(element.getAttribute('data-price')),
414                  pricefrom: birdseyeCheckIfFalse(element.getAttribute('data-pricefrom')),
415                  colors: birdseyeCheckIfFalse(element.getAttribute('data-colors')),
416                  type: birdseyeCheckIfFalse(element.getAttribute('data-type')),
417                  title: birdseyeCheckIfFalse(element.getAttribute('data-title')),
418                  x: parseInt(event.clientX) > parseInt(parseInt(window.innerWidth) / 2) ? 'right:' + (parseInt(window.innerWidth) - parseInt(event.clientX)) + 'px;' : 'left:' + (parseInt(event.clientX) + 20) + 'px;',
419                  y: parseInt(event.clientY) + 20,
420                  pageHalf: parseInt(window.innerWidth) / 2,
421                };
422              if (typeof document.querySelector('.__yrm-birdseye-popover') === 'undefined' || null === document.querySelector('.__yrm-birdseye-popover') || document.querySelector('.__yrm-birdseye-popover').length > 0) {
423                let popover = document.createElement('div');
424                popover.classList.add('__yrm-birdseye-popover');
425                popover.innerHTML =
426                  '<div class="loading">laden.. <svg class="loading-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><path d="M264 24C264 10.75 274.7 0 288 0C429.4 0 544 114.6 544 256C544 302.6 531.5 346.4 509.7 384C503.1 395.5 488.4 399.4 476.9 392.8C465.5 386.2 461.5 371.5 468.2 360C485.9 329.4 496 293.9 496 255.1C496 141.1 402.9 47.1 288 47.1C274.7 47.1 264 37.25 264 23.1V24z"/></svg></div>';
427                section.append(popover);
428              }
429
430              document.querySelector('.__yrm-birdseye-popover').classList.add('fmb');
431              document.querySelector('.__yrm-birdseye-popover').setAttribute('style', plg
431nData.x + 'top:' + plgnData.y + 'px;');
432
433              birdseyeCreateNewBuildPopover(element, plgnData, section);
434            });
435            fmp.addEventListener('mouseleave', function (e) {
436              if (typeof document.querySelector('.__yrm-birdseye-popover') !== 'undefined' && null !== document.querySelector('.__yrm-birdseye-popover')) {
437                document.querySelector('.__yrm-birdseye-popover').remove();
438              }
439            });
440          }
441        }
442      }
443    }
444  }, 250);
445
446  /* Create click listener for all selectfields to open & close the dropdowns */
447  setTimeout(function () {
448    if (typeof document.querySelector('.yrmslct-container') !== 'undefined' && null !== document.querySelector('.yrmslct-container')) {
449      let yrmslcts = document.querySelectorAll('.yrmslct-container');
450
451      for (yrmslct of yrmslcts) {
452        let yrmslct_span = yrmslct.querySelector('._select-placeholder');
453        let yrmslct_dd = yrmslct.querySelector('._dropdown');
454        let yrmslct_dd_items = yrmslct_dd.querySelectorAll('._item');
455
456        /* Check if dropdown has children. If so, listen to click behaviour based on the items */
457        if (typeof yrmslct_dd_items !== 'undefined' && null !== yrmslct_dd_items) {
458          for (ddItem of yrmslct_dd_items) {
459            ddItem.addEventListener('click', function () {
460              yoreFlexibleValidateFilters();
461            });
462          }
463        }
464      }
465    }
466
467    triggerAevent(document.querySelector('.__crm-filter-reset'), 'click');
468
469    yoreFlexibleValidateFilters();
470    checkBirdseyesForDynamicWidthSettings();
471  }, 350);
472
473  triggerAevent(document.querySelector('.__crm-filter-reset'), 'click');
474  yoreFlexibleValidateFilters();
475  checkBirdseyesForDynamicWidthSettings();
476
477  window.addEventListener('resize', checkBirdseyesForDynamicWidthSettings, true);
478
479  document.addEventListener('scroll', (event) => {
480    if (typeof document.querySelectorAll('.yoreflexi_yorecrm---vogelvlucht') !== 'undefined' && null !== document.querySelectorAll('.yoreflexi_yorecrm---vogelvlucht')) {
481      let flexibleScrollElement = document.querySelectorAll('.yoreflexi_yorecrm---vogelvlucht');
482      for (const section of flexibleScrollElement) {
483        let headerHeight = 80;
484        if (typeof document.getElementsByTagName('header') !== 'undefined' && null !== document.getElementsByTagName('header') && typeof document.getElementsByTagName('header').offsetHeight !== 'undefined' && !isNaN(document.getElementsByTagName('header').offsetHeight)) {
485          headerHeight = parseInt(document.getElementsByTagName('header').offsetHeight);
486        }
487
488        let filterBar = section.querySelector('.vogelvlucht-filter-bar'),
489          scrollHeight = parseInt(window.scrollY) + headerHeight,
490          sectionTop = parseInt(section.offsetTop),
491          sectionBottom = parseInt(sectionTop) + parseInt(section.offsetHeight);
492        topTrigger = sectionTop - window.innerHeight / 4;
493        bottomTrigger = sectionBottom - (window.innerHeight / 10) * 1;
494
495        if (topTrigger < 0) {
496          topTrigger = 0;
497        }
498
499        if (scrollHeight > topTrigger && scrollHeight < bottomTrigger) {
500          /* RESPONSIVE */
501          if (window.innerWidth > 1112) {
502            filterBar.setAttribute('data-visible', '1');
503            filterBar.style.top = headerHeight + 'px';
504            filterBar.style.bottom = 'initial';
505          }
506          if (window.innerWidth < 1113) {
507            filterBar.setAttribute('data-visible', '1');
508            filterBar.style.top = 'initial';
509            filterBar.style.bottom = '10px';
510          }
511        } else {
512          if (window.innerWidth > 1112) {
513            filterBar.setAttribute('data-visible', '0');
514            filterBar.style.top = '-30000vh';
515            filterBar.style.bottom = 'initial';
516          }
517          if (window.innerWidth < 1113) {
518            filterBar.setAttribute('data-visible', '0');
519            filterBar.style.top = 'initial';
520            filterBar.style.bottom = '-30000vh';
521          }
522        }
523      }
524    }
525  });
526});
527
528/* ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ */
529
530if (typeof calculateAspectratio === 'undefined') {
531  function calculateAspectratio(a, b) {
532    if (a > b) {
533      /* Aspect ratio ?/1 */
534      return { l: a / b, r: 1 };
535    }
536    if (a < b) {
537      /* Aspect ratio 1/? */
538      return { l: 1, r: b / a };
539    }
540    /* Aspect ratio 1/1 */
541    return { l: 1, r: 1 };
542  }
543}
544
545/* ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ */
546
547if (typeof checkBirdseyesForDynamicWidthSettings === 'undefined') {
548  function checkBirdseyesForDynamicWidthSettings() {
549    let baseHeight = 1000,
550      windowContainerWidth = parseInt(window.innerWidth),
551      type = false;
552
553    switch (true) {
554      case windowContainerWidth >= 1220 /* XL width settings */ &&
555      typeof document.querySelectorAll('._flatmap-overview-map.uk-width-xlarge-dynamic') !== 'undefined' &&
556      null !== document.querySelectorAll('._flatmap-overview-map.uk-width-xlarge-dynamic') &&
557      document.querySelectorAll('._flatmap-overview-map.uk-width-xlarge-dynamic').length > 0
558        ? true
559        : false:
560        type = 'xlarge';
561        break;
562      case windowContainerWidth >= 960 /* XL width settings */ &&
563      typeof document.querySelectorAll('._flatmap-overview-map.uk-width-large-dynamic') !== 'undefined' &&
564      null !== document.querySelectorAll('._flatmap-overview-map.uk-width-large-dynamic') &&
565      document.querySelectorAll('._flatmap-overview-map.uk-width-large-dynamic').length > 0
566        ? true
567        : false:
568        type = 'large';
569        break;
570      case windowContainerWidth >= 768 /* M width settings */ &&
571      typeof document.querySelectorAll('._flatmap-overview-map.uk-width-medium-dynamic') !== 'undefined' &&
572      null !== document.querySelectorAll('._flatmap-overview-map.uk-width-medium-dynamic') &&
573      document.querySelectorAll('._flatmap-overview-map.uk-width-medium-dynamic').length > 0
574        ? true
575        : false:
576        type = 'medium';
577        break;
578    }
579
580    if (type !== false) {
581      for (momSize of document.querySelectorAll('._flatmap-overview-map.uk-width-' + type + '-dynamic')) {
582        let mom = momSize,
583          mom_img = mom.querySelector('.birdseye-image-view'),
584          /* Get current set height of image */ mom_img_h = mom_img.height,
585          /* Get current set height of image */ mom_img_original_h = mom_img.height,
586          /* Height percentage after setting it from default to 1000 pixels */ mom_img_percentage_h = (100 / mom_img_original_h) * baseHeight,
587          /* Get current set width of image */ mom_img_w = mom_img.width,
588          /* Get current set width of image */ mom_img_original_w = mom_img.width,
589          /* Width based on 1000 pixels height combined with aspect-ratio */ mom_img_static_w = (mom_img_original_w / 100) * mom_img_percentage_h,
590          /* aspect-ratio */ mom_ar = calculateAspectratio(mom_img_w, mom_img_h),
591          fpm = mom.closest('.__crm-map-main-viewer').querySelector('._floorplan-holder[data-active="1"]');
592
593        if (null !== fpm) {
594          let fpm_img = fpm.querySelector('.birdseye-image-view'),
595            /* Get current set height of image */ fpm_img_h = fpm_img.height,
596            /* Get current set height of image */ fpm_img_original_h = fpm_img.height,
597            /* Height percentage after setting it from default to 1000 pixels */ fpm_img_percentage_h = (100 / fpm_img_original_h) * baseHeight,
598            /* Get current set width of image */ fpm_img_w = fpm_img.width,
599            /* Get current set width of image */ fpm_img_original_w = fpm_img.width,
600            /* Width based on 1000 pixels height combined with aspect-ratio */ fpm_img_static_w = (fpm_img_original_w / 100) * fpm_img_percentage_h,
601            /* aspect-ratio */ fpm_ar = calculateAspectratio(fpm_img_w, fpm_img_h),
602            /* Now calculate the wished width based on the container size */
603            combinedImageWidth = mom_img_static_w + fpm_img_static_w,
604            containerPercentageWidth = (100 / windowContainerWidth) * combinedImageWidth,
605            mom_final_pixel_width = (mom_img_static_w / containerPercentageWidth) * 100,
606            mom_final_percentage_width = (100 / windowContainerWidth) * mom_final_pixel_width,
607            fpm_final_pixel_width = (fpm_img_static_w / containerPercentageWidth) * 100;
608          fpm_final_percentage_width = (100 / windowContainerWidth) * fpm_final_pixel_width;
609
610          mom.setAttribute('style', 'aspect-ratio: ' + mom_ar.l + '/' + mom_ar.r + ';width:' + mom_final_percentage_width + '%;');
611          fpm.parentNode.setAttribute('style', 'aspect-ratio: ' + fpm_ar.l + '/' + fpm_ar.r + ';width:' + fpm_final_percentage_width + '%;');
612        }
613      }
614    } else {
615      /* Reset aspect ratio for other sizes */
616      for (fmom of document.querySelectorAll('._flatmap-overview-map')) {
617        let mom = fmom,
618          fpm = fmom.closest('.__crm-map-main-viewer').querySelector('._flatmap-floorplan');
619
620        mom.removeAttribute('style');
621        fpm.removeAttribute('style');
622      }
623    }
624  }
625}
626
627/* Initialize the maps. Check which map should be
628 ** activated first and then loop trough the maps
629 ** & floorplan and activate the correct one. */
630if (typeof yoreFlexibleValidateFilters === 'undefined') {
631  function yoreFlexibleValidateFilters() {
632    /* Loop trough elements and append settings per element */
633    if (typeof document.querySelectorAll('.yoreflexi_yorecrm---vogelvlucht') !== 'undefined' && null !== document.querySelectorAll('.yoreflexi_yorecrm---vogelvlucht')) {
634      let flexibleElement = document.querySelectorAll('.yoreflexi_yorecrm---vogelvlucht');
635      for (const section of flexibleElement) {
636        if (typeof document.getElementsByTagName('header') !== 'undefined' && null !== document.getElementsByTagName('header') && typeof document.getElementsByTagName('header').offsetHeight !== 'undefined' && !isNaN(document.getElementsByTagName('header').offsetHeight)) {
637          section.querySelector('.vogelvlucht-filter-bar').setAttribute('data-headerheight', parseInt(document.getElementsByTagName('header').offsetHeight));
638        } else {
639          section.querySelector('.vogelvlucht-filter-bar').setAttribute('data-headerheight', 80);
640        }
641
642        /* Loop trough select settings */
643        const filters = [];
644        if (typeof section.querySelectorAll('.yrmslct-container') !== 'undefined' && null !== section.querySelectorAll('.yrmslct-container')) {
645          let filterTriggerContainer = section.querySelectorAll('.yrmslct-container');
646
647          for (const selectContainer of filterTriggerContainer) {
648            let theContainer = selectContainer,
649              theSelect = theContainer.querySelector('select'),
650              theName = theSelect.getAttribute('name');
651            theValue = theSelect.value;
652            (theType = theSelect.classList), (sa1 = null), (sa2 = null), (sa3 = null), (sa4 = null), (sa5 = null);
653
654            if (theType.contains('_ycrm-elementalFilter') === true) {
655              switch (true) {
656                case theType.contains('_crm-filter-status') === true ? true : false:
657                case theType.contains('__crm-advanced-filter-status') === true ? true : false:
658                  theType = 'status';
659                  break;
660                case theType.contains('_crm-filter-maps') === true ? true : false:
661                  theType = 'flatmap';
662                  break;
663                case theType.contains('_crm-filter-floors') === true ? true : false:
664                  theType = 'floorplan';
665                  sa1 = theSelect.getAttribute('data-mapid');
666                  break;
667                case theType.contains('__crm-advanced-filter-livingsurfacearea') === true ? true : false:
668                  theType = 'livingarea';
669                  break;
670                case theType.contains('__crm-advanced-filter-lotarea') === true ? true : false:
671                  theType = 'lotarea';
672                  break;
673                case theType.contains('__crm-advanced-filter-rooms') === true ? true : false:
674                  theType = 'room';
675                  break;
676                case theType.contains('__crm-advanced-filter-housetypes') === true ? true : false:
677                  theType = 'housetype';
678                  break;
679                case theType.contains('__crm-advanced-filter-hometypes') === true ? true : false:
680                  theType = 'hometype';
681                  break;
682                case theType.contains('__crm-advanced-filter-pricerange') === true ? true : false:
683                  theType = 'pricerange';
684                  break;
685
686                default:
687                  theType = false;
688              }
689
690              if (theType !== false) {
691                filters.push({
692                  type: theType,
693                  classes: [].slice.call(theSelect.classList),
694                  key_value: theValue,
695                  specialAttribute1: sa1,
696                  specialAttribute2: sa2,
697                  specialAttribute3: sa3,
698                  specialAttribute4: sa4,
699                  specialAttribute5: sa5,
700                  text_value: theSelect.options[theSelect.selectedIndex].text,
701                  active: theContainer.classList.contains('uk-hidden') !== true && theContainer.classList.contains('hidden') !== true ? '1' : '0',
702                  name: theName,
703                });
704              }
705              if (theType === false) {
706                console.warn('A new filter type could not be validated.\n' + '\nDetails:' + '\n- value: ' + theValue + '\n- key: ' + theName + '\n- classes: ' + theSelect.getAttribute('class'));
707              }
708            }
709          }
710        }
711
712        /* PriceRangeSlider */
713        if (typeof section.querySelector('.__crm-pricerange-slider') !== 'undefined' && null !== section.querySelector('.__crm-pricerange-slider')) {
714          let priceRangeSlider = section.querySelector('.__crm-pricerange-slider'),
715            /* Slider steps */ priceOriginalSteps = parseInt(parseInt(priceRangeSlider.parentNode.querySelector('.step-amount').value) * 5),
716            /* Validated first min */ priceOriginalMn = priceRangeSlider.parentNode.querySelector('.price-min').getAttribute('data-price-original'),
717            /* Calculated first min with steps marge */ priceOriginalMin = parseInt(priceOriginalMn) - priceOriginalSteps,
718            /* Current min */ priceMin = priceRangeSlider.parentNode.querySelector('.price-min').value,
719            /* Validated first max */ priceOriginalMx = priceRangeSlider.parentNode.querySelector('.price-max').getAttribute('data-price-original'),
720            /* reset to min */ resetPriceMin = priceRangeSlider.parentNode.querySelector('.price-min').getAttribute('data-price-reset-to');
721
722          /* Calculated first max with steps marge */ (priceOriginalMax = parseInt(priceOriginalMx) + priceOriginalSteps),
723            /* Current max */ (priceMax = priceRangeSlider.parentNode.querySelector('.price-max').value),
724            /* reset to max */ (resetPriceMax = priceRangeSlider.parentNode.querySelector('.price-max').getAttribute('data-price-reset-to'));
725
726          filters.push({
727            type: 'price_min_max',
728            classes: [].slice.call(priceRangeSlider.classList),
729            key_value: { min: priceMin, max: priceMax },
730            specialAttribute1: priceOriginalMin,
731            specialAttribute2: priceOriginalMax,
732            specialAttribute3: resetPriceMin,
733            specialAttribute4: resetPriceMax,
734            text_value: {
735              min: priceRangeSlider.parentNode.querySelector('.price-min').value,
736              max: priceRangeSlider.parentNode.querySelector('.price-max').value,
737            },
738            active: '1',
739            name: 'priceRangeSlider',
740          });
741        }
742
743        if (filters.length > 0) {
744          /* Element has correct filters. Check which type
745           ** of map is activated and base below actions
746           ** on it */
747          let typeOfMap = section.querySelector('.vogelvlucht-filter-bar');
748          yoreflexibleExecuteFilters(filters, section.getAttribute('data-section-id'), typeOfMap.getAttribute('data-maptype'));
749        }
750      }
751    }
752  }
753}
754
755/* ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ */
756
757if (typeof hexToRgb === 'undefined') {
758  function hexToRgb(hex) {
759    var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
760    return result
761      ? {
762          r: parseInt(result[1], 16),
763          g: parseInt(result[2], 16),
764          b: parseInt(result[3], 16),
765        }
766      : null;
767  }
768}
769
770/* ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ */
771
772var beMoneyFormat = new Intl.NumberFormat('nl-NL', {
773  style: 'currency',
774  currency: 'EUR',
775  minimumFractionDigits: 0,
776});
777
778/* ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ */
779
780if (typeof triggerAevent === 'undefined') {
781  function triggerAevent(el, type) {
782    if ('createEvent' in document) {
783      // modern browsers, IE9+
784      var e = document.createEvent('HTMLEvents');
785      e.initEvent(type, false, true);
786      el.dispatchEvent(e);
787    } else {
788      // IE 8
789      var e = document.createEventObject();
790      e.eventType = type;
791      el.fireEvent('on' + e.eventType, e);
792    }
793  }
794}
795
796/* ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ */
797
798if (typeof birdseyeCheckIfFalse === 'undefined') {
799  function birdseyeCheckIfFalse(value) {
800    switch (true) {
801      case value === null ? true : false:
802      case value === false ? true : false:
803      case value === 0 ? true : false:
804      case value === '' ? true : false:
805      case value === ' ' ? true : false:
806      case value === '  ' ? true : false:
807      case value === '   ' ? true : false:
808      case typeof value === 'number' && parseInt(value) <= 0 ? true : false:
809        value = false;
810        break;
811    }
812
813    return value;
814  }
815}
816
817/* ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ */
818
819/* Activate on click */
820if (typeof birdseyeCreateNewMapPopup === 'undefined') {
821  function birdseyeCreateNewMapPopup(plgn, plgnData, section) {
822    if (typeof document.getElementById('birdseyeMapPopup') !== 'undefined' && null !== document.getElementById('birdseyeMapPopup')) {
823      document.getElementById('birdseyeMapPopup').remove();
824    }
825
826    if (typeof document.querySelector('.__yrm-birdseye-popover') !== 'undefined' && null !== document.querySelector('.__yrm-birdseye-popover')) {
827      document.querySelector('.__yrm-birdseye-popover').remove();
828    }
829
830    let thePrice = '',
831      thePopUpOverlay = document.createElement('div'),
832      thePopUp = document.createElement('div'),
833      hometype = document.createElement('span'),
834      price = document.createElement('div'),
835      mainImage = document.createElement('div'),
836      closeIcon = document.createElement('div'),
837      statusHeader = document.createElement('span'),
838      // buildnumberHeader = document.createElement('div'),
839      buildnumberName = document.createElement('div'),
840      housetypeURL = document.createElement('div'),
841      specsheet = document.createElement('div');
842
843    /* ~ # [DOWN] Start-of pop-up container # ~ */
844
845    thePopUp.classList.add('__yrm-birdseye-popup');
846    thePopUp.setAttribute('id', 'birdseyeMapPopup');
847    thePopUp.setAttribute('style', 'left:' + plgnData.x + 'px;top:' + plgnData.y + 'px;');
848
849    thePopUpOverlay.classList.add('__yrm-birdseye-popup-overlay', 'activated');
850    thePopUpOverlay.setAttribute('title', 'Sluiten');
851
852    /* ~ # [DOWN] Start-of main image # ~ */
853
854    mainImage.classList.add('_image-crm-buildnumber', 'uk-cover-background', 'uk-background-center-center');
855
856    if (typeof plgn.getAttribute('data-image') != 'undefined' && null !== plgn.getAttribute('data-image')) {
857      let imgurl = encodeURI(atob(plgn.getAttribute('data-image')));
858      mainImage.setAttribute('style', 'background-image: url(' + imgurl + ');');
859    }
860
861    if (typeof plgn.getAttribute('data-title') != 'undefined' && null !== plgn.getAttribute('data-title')) {
862      mainImage.classList.add('_image-crm-buildnumber--title');
863      mainImage.removeAttribute('style');
864    }
865
866    /* ~ # [DOWN] Start-of close icon # ~ */
867
868    closeIcon.classList.add('_close-crm-buildnumber-previewer');
869    closeIcon.innerHTML +=
870      '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="256" height="256" viewBox="0 0 256 256" xml:space="preserve"> <desc>Created with Fabric.js 1.7.22</desc> <defs> </defs> <g transform="translate(128 128) scale(0.72 0.72)" style=""> <g style="stroke: none; stroke-width: 0; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill: none; fill-rule: nonzero; opacity: 1;" transform="translate(-175.05 -175.05000000000004) scale(3.89 3.89)"> <path d="M 6 90 c -1.536 0 -3.071 -0.586 -4.243 -1.758 c -2.343 -2.343 -2.343 -6.142 0 -8.484 l 78 -78 c 2.342 -2.343 6.143 -2.343 8.484 0 c 2.344 2.343 2.344 6.142 0 8.485 l -78 78 C 9.071 89.414 7.536 90 6 90 z" style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill-rule: nonzero;
870 opacity: 1;" transform=" matrix(1 0 0 1 0 0) " stroke-linecap="round"></path> <path d="M 84 90 c -1.535 0 -3.071 -0.586 -4.242 -1.758 l -78 -78 c -2.343 -2.343 -2.343 -6.142 0 -8.485 c 2.343 -2.343 6.143 -2.343 8.485 0 l 78 78 c 2.344 2.343 2.344 6.142 0 8.484 C 87.071 89.414 85.535 90 84 90 z" style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill-rule: nonzero; opacity: 1;" transform=" matrix(1 0 0 1 0 0) " stroke-linecap="round"></path> </g> </g> </svg>';
871    closeIcon.innerHTML +=
872      '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="256" height="256" viewBox="0 0 256 256" xml:space="preserve"> <desc>Created with Fabric.js 1.7.22</desc> <defs> </defs> <g transform="translate(128 128) scale(0.72 0.72)" style=""> <g style="stroke: none; stroke-width: 0; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill: none; fill-rule: nonzero; opacity: 1;" transform="translate(-175.05 -175.05000000000004) scale(3.89 3.89)"> <path d="M 6 90 c -1.536 0 -3.071 -0.586 -4.243 -1.758 c -2.343 -2.343 -2.343 -6.142 0 -8.484 l 78 -78 c 2.342 -2.343 6.143 -2.343 8.484 0 c 2.344 2.343 2.344 6.142 0 8.485 l -78 78 C 9.071 89.414 7.536 90 6 90 z" style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill-rule: nonzero; opacity: 1;" transform=" matrix(1 0 0 1 0 0) " stroke-linecap="round"></path> <path d="M 84 90 c -1.535 0 -3.071 -0.586 -4.242 -1.758 l -78 -78 c -2.343 -2.343 -2.343 -6.142 0 -8.485 c 2.343 -2.343 6.143 -2.343 8.485 0 l 78 78 c 2.344 2.343 2.344 6.142 0 8.484 C 87.071 89.414 85.535 90 84 90 z" style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill-rule: nonzero; opacity: 1;" transform=" matrix(1 0 0 1 0 0) " stroke-linecap="round"></path> </g> </g> </svg>';
873
874    statusHeader.classList.add('_buildnumber-status', 'exclude-from-typo');
875    const statusHeaderSettings = {
876      name: '',
877      color: '#000000',
878      bg: plgn.getAttribute('fill'),
879    };
880    switch (plgn.getAttribute('data-status')) {
881      case 'PRESELLING':
882        statusHeaderSettings.name = plgn.getAttribute('data-selltype') == 1 ? 'Binnenkort in verhuur' : 'Binnenkort in verkoop';
883        statusHeaderSettings.color = '#004328';
884        break;
885      case 'SELLING':
886        statusHeaderSettings.name = plgn.getAttribute('data-selltype') == 1 ? 'Te huur' : 'Te koop';
887        statusHeaderSettings.color = '#004328';
888        break;
889      case 'OPTION':
890        statusHeaderSettings.name = plgn.getAttribute('data-selltype') == 1 ? 'Gereserveerd' : 'Onder optie';
891        statusHeaderSettings.color = '#FFFFFF';
892        break;
893      case 'SOLD':
894        statusHeaderSettings.name = plgn.getAttribute('data-selltype') == 1 ? 'Verhuurd' : 'Verkocht';
895        statusHeaderSettings.color = '#FFFFFF';
896        break;
897    }
898    statusHeader.setAttribute('style', 'background-color:' + statusHeaderSettings.bg + ';');
899    statusHeader.setAttribute('data-uk-tooltip', "{pos:'right'}");
900    statusHeader.setAttribute('title', statusHeaderSettings.name);
901    mainImage.append(closeIcon);
902    thePopUp.append(mainImage);
903
904    hometype.classList.add('_crm-hometype', 'exclude-from-typo');
905    let hometypeSpec = false;
906
907    if (typeof plgn.getAttribute('data-hometype') != 'undefined' && null !== plgn.getAttribute('data-hometype') && plgn.getAttribute('data-hometype') !== '') {
908      hometypeSpec = true;
909      price.classList.add('hasHometype');
910      buildnumberName.classList.add('hasHometype');
911      specsheet.classList.add('hasTopSheet');
912      hometype.innerHTML = plgn.getAttribute('data-hometype');
913    }
914
915    if (typeof plgn.getAttribute('data-housetype-name') != 'undefined' && null !== plgn.getAttribute('data-housetype-name') && plgn.getAttribute('data-housetype-name') !== '') {
916      hometypeSpec = true;
917      price.classList.add('hasHometype');
918      buildnumberName.classList.add('hasHometype');
919      specsheet.classList.add('hasTopSheet');
920      hometype.innerHTML += (hometype.innerHTML != '' ? ' - ' : '') + plgn.getAttribute('data-housetype-name');
921    }
922
923    buildnumberName.classList.add('_crm-buildnumber', 'exclude-from-typo');
924
925    if (null == plgn.getAttribute('data-title') || false == plgn.getAttribute('data-title') || plgn.getAttribute('data-title') == 'undefined') {
926      buildnumberName.innerHTML += 'Bouwnummer ' + plgn.getAttribute('data-buildnumber');
927    } else {
928      buildnumberName.innerHTML += plgn.getAttribute('data-title');
929
930      if (false != plgn.getAttribute('data-content') || !plgn.getAttribute('data-content')) {
931        buildnumberName.innerHTML += `<div class="_crm-content">${plgn.getAttribute('data-content')}</div>`;
932      }
933    }
934
935    buildnumberName.append(statusHeader);
936    hometype.classList.add('hasBuildnumber');
937    price.classList.add('hasBuildnumber');
938    price.classList.add('_crm-price');
939
940    if (typeof plgn.getAttribute('data-pricefrom') !== 'undefined' && null !== plgn.getAttribute('data-pricefrom')) {
941      let thePriceData = JSON.parse(atob(plgn.getAttribute('data-pricefrom')));
942      thePrice = thePriceData.origin;
943    }
944
945    if (typeof plgn.getAttribute('data-price') !== 'undefined' && null !== plgn.getAttribute('data-price') && plgn.getAttribute('data-price') != '') {
946      thePrice = beMoneyFormat.format(plgn.getAttribute('data-price'));
947    }
948
949    if (typeof plgn.getAttribute('data-title') !== 'undefined' && null !== plgn.getAttribute('data-title') && plgn.getAttribute('data-title') != '') {
950      thePrice = '';
951    }
952
953    if (thePrice != '') {
954      specsheet.classList.add('hasTopSheet');
955      buildnumberName.classList.add('hasPrice');
956      hometype.classList.add('hasPrice');
957      price.innerHTML = thePrice;
958    }
959
960    let sheetSpec = false,
961      sheetCount = 0,
962      oneSheetDown = false;
963    specsheet.classList.add('_crm-specsheet');
964    if (typeof plgn.getAttribute('data-lotarea') != 'undefined' && null !== plgn.getAttribute('data-lotarea') && plgn.getAttribute('data-lotarea') !== '') {
965      if (plgn.getAttribute('data-lotarea') > 0) {
966        sheetSpec = true;
967        let lotareaSpec = document.createElement('div');
968        lotareaSpec.classList.add('_lotarea');
969        lotareaSpec.innerHTML = '';
970
971        lotareaSpec.innerHTML +=
972          '<div class="specIcon"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none" class="injected-svg" data-src="/static/assets/area.e153bc0a.svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <path fill-rule="evenodd" clip-rule="evenodd" d="M0.166748 2.00008C0.166748 0.987559 0.987559 0.166748 2.00008 0.166748C2.83924 0.166748 3.54671 0.73054 3.76438 1.5H12.2356C12.4533 0.73054 13.1608 0.166748 13.9999 0.166748C15.0124 0.166748 15.8333 0.98756 15.8333 2.00008C15.8333 2.83924 15.2695 3.54671 14.5 3.76438V12.2356C15.2695 12.4533 15.8333 13.1608 15.8333 13.9999C15.8333 15.0124 15.0124 15.8333 13.9999 15.8333C13.1608 15.8333 12.4533 15.2695 12.2356 14.5H3.76438C3.54671 15.2695 2.83924 15.8333 2.00008 15.8333C0.98756 15.8333 0.166748 15.0124 0.166748 13.9999C0.166748 13.1608 0.73054 12.4533 1.5 12.2356V3.76438C0.73054 3.54671 0.166748 2.83924 0.166748 2.00008ZM2.5 12.2356V3.76443C3.11062 3.59175 3.59175 3.11062 3.76443 2.5H12.2356C12.4082 3.11062 12.8894 3.59175 13.5 3.76443V12.2356C12.8894 12.4082 12.4082 12.8894 12.2356 13.5H3.76443C3.59175 12.8894 3.11062 12.4082 2.5 12.2356ZM2.83325 13.9833C2.82439 13.5307 2.45476 13.1666 2.00008 13.1666C1.53984 13.1666 1.16675 13.5397 1.16675 13.9999C1.16675 14.4602 1.53984 14.8333 2.00008 14.8333C2.45476 14.8333 2.82439 14.4691 2.83325 14.0165V13.9833ZM13.9999 14.8333C13.5397 14.8333 13.1666 14.4602 13.1666 13.9999C13.1666 13.5397 13.5397 13.1666 13.9999 13.1666C14.4602 13.1666 14.8333 13.5397 14.8333 13.9999C14.8333 14.4602 14.4602 14.8333 13.9999 14.8333ZM13.9833 2.83325C13.5307 2.82439 13.1666 2.45476 13.1666 2.00008C13.1666 1.53984 13.5397 1.16675 13.9999 1.16675C14.4602 1.16675 14.8333 1.53984 14.8333 2.00008C14.8333 2.45476 14.4691 2.82439 14.0165 2.83325H13.9833ZM2.00008 1.16675C2.45476 1.16675 2.82439 1.53089 2.83325 1.98345V2.01671C2.8245 2.46374 2.46374 2.8245 2.01671 2.83325H1.98345C1.53089 2.82439 1.16675 2.45476 1.16675 2.00008C1.16675 1.53984 1.53984 1.16675 2.00008 1.16675Z" fill="#9FA9AD"></path> </svg></div>';
973
974        lotareaSpec.innerHTML += '<div class="specData"><div class="_key exclude-from-typo">Perceel</div><div class="_value exclude-from-typo">' + plgn.getAttribute('data-lotarea') + '&#13217;</div></div>';
975
976        specsheet.append(lotareaSpec);
977
978        sheetCount++;
979      }
980    }
981    if (typeof plgn.getAttribute('data-livingarea') != 'undefined' && null !== plgn.getAttribute('data-livingarea') && plgn.getAttribute('data-livingarea') !== '') {
982      if (plgn.getAttribute('data-livingarea') > 0) {
983        sheetSpec = true;
984        let livingSpec = document.createElement('div');
985        livingSpec.classList.add('_livingarea');
986        livingSpec.innerHTML = '';
987
988        livingSpec.innerHTML +=
989          '<div class="specIcon"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 48 48" fill="none" class="injected-svg" data-src="https://public-images.yorecrm.nl/hometypes/vrijstaand.svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <rect width="48" height="48" fill="white"></rect> <path d="M35.7814 44.0132H12.1659C9.31938 44.0132 7 41.6852 7 38.828V19.0926C7 17.5582 7.68527 16.0767 8.84496 15.0714L20.6527 5.23016C22.6031 3.58995 25.3969 3.58995 27.2946 5.23016L39.1023 15.1243C40.262 16.1296 40.9473 17.5582 40.9473 19.1455V38.828C41 41.6852 38.6806 44.0132 35.7814 44.0132ZM23.9736 6.12963C23.2884 6.12963 22.5504 6.39418 22.0233 6.87037L10.2155 16.7645C9.53023 17.3466 9.10853 18.1931 9.10853 19.0926V38.7751C9.10853 40.4683 10.4791 41.8439 12.1659 41.8439H35.7814C37.4682 41.8439 38.8388 40.4683 38.8388 38.7751V19.0926C38.8388 18.1931 38.4171 17.2936 37.7318 16.7116L25.9767 6.87037C25.3969 6.39418 24.7116 6.12963 23.9736 6.12963Z" fill="#333333"></path> <path fill-rule="evenodd" clip-rule="evenodd" d="M25.8374 6.31018L8.33741 21.3102L8.6628 21.6898L26.1628 6.68981L25.8374 6.31018ZM28.3355 7.81185L8.33548 25.3118L8.66473 25.6881L28.6647 8.18814L28.3355 7.81185ZM8.33637 29.3111L30.8364 9.81107L31.1638 10.1889L8.66384 29.6889L8.33637 29.3111ZM32.8352 11.8121L8.33521 33.3121L8.665 33.6879L33.165 12.1879L32.8352 11.8121ZM8.33597 37.3114L35.336 13.8114L35.6642 14.1886L8.66423 37.6886L8.33597 37.3114ZM37.8369 15.8106L8.83687 40.8106L9.16334 41.1893L38.1633 16.1893L37.8369 15.8106ZM11.8357 42.3116L39.3357 18.3116L39.6645 18.6884L12.1645 42.6884L11.8357 42.3116ZM39.3361 22.3113L16.3361 42.3113L16.6641 42.6886L39.6641 22.6886L39.3361 22.3113ZM20.8366 42.3109L39.3366 26.3109L39.6636 26.6891L21.1636 42.6891L20.8366 42.3109ZM39.334 30.3131L25.834 42.3131L26.1662 42.6868L39.6662 30.6868L39.334 30.3131ZM30.334 42.3131L39.334 34.3131L39.6662 34.6868L30.6662 42.6868L30.334 42.3131ZM40.393 36.9071L33.276 43.066L33.6031 43.4441L40.7201 37.2852L40.393 36.9071Z" fill="#333333"></path> </svg></div>';
990
991        livingSpec.innerHTML += '<div class="specData"><div class="_key exclude-from-typo">Woonopp.</div><div class="_value exclude-from-typo">' + plgn.getAttribute('data-livingarea') + '&#13217;</div></div>';
992
993        if (sheetCount > 0) {
994          oneSheetDown = true;
995          let livingAreaSeparator = document.createElement('div');
996          livingAreaSeparator.classList.add('_separator');
997          specsheet.append(livingAreaSeparator);
998        }
999        specsheet.append(livingSpec);
1000
1001        sheetCount++;
1002      }
1003    }
1004    if (typeof plgn.getAttribute('data-room') != 'undefined' && null !== plgn.getAttribute('data-room') && plgn.getAttribute('data-room') !== '') {
1005      if (plgn.getAttribute('data-room') > 0) {
1006        sheetSpec = true;
1007        let roomSpec = document.createElement('div');
1008        roomSpec.classList.add('_rooms');
1009        roomSpec.innerHTML = '';
1010
1011        roomSpec.innerHTML +=
1012          '<div class="specIcon"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewB
1012ox="0 0 16 16" fill="none" class="injected-svg" data-src="/static/assets/rooms.9438ffee.svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <g clip-path="url(#clip0-104)"> <path fill-rule="evenodd" clip-rule="evenodd" d="M2.5 0C2.40355 7.08273e-06 2.30768 0.0279028 2.22475 0.0825812C2.08444 0.175103 2 0.33193 2 0.500002V12.5C2 12.7 2.1192 12.8808 2.30304 12.9596L9.30304 15.9596C9.45752 16.0258 9.63493 16.0099 9.77525 15.9174C9.91556 15.8249 10 15.6681 10 15.5V3.5C10 3.29999 9.8808 3.11922 9.69696 3.04043L4.93596 1H13V12H11.5V13H13.5C13.7761 13 14 12.7761 14 12.5V0.5C14 0.223858 13.7761 0 13.5 0H2.50005C2.50004 0 2.50002 0 2.5 0ZM3 12.1703V1.25827L9 3.8297V14.7417L3 12.1703Z" fill="#9FA9AD"></path> </g> <defs> <clipPath id="clip0-104"> <rect width="16" height="16" fill="white"></rect> </clipPath> </defs> </svg></div>';
1013
1014        roomSpec.innerHTML += '<div class="specData"><div class="_key exclude-from-typo">Kamers</div><div class="_value exclude-from-typo">' + plgn.getAttribute('data-room') + '</div></div>';
1015
1016        if ((sheetCount > 0 && oneSheetDown == false) || sheetCount > 1) {
1017          oneSheetDown = true;
1018          let roomSpecSeparator = document.createElement('div');
1019          roomSpecSeparator.classList.add('_separator');
1020          specsheet.append(roomSpecSeparator);
1021        }
1022        specsheet.append(roomSpec);
1023
1024        sheetCount++;
1025      }
1026    }
1027
1028    let hturlSpec = false;
1029    housetypeURL.classList.add('_crm-housetype-link', 'exclude-from-typo');
1030    if (typeof plgn.getAttribute('data-url') != 'undefined' && null !== plgn.getAttribute('data-url') && plgn.getAttribute('data-url') !== '') {
1031      specsheet.classList.add('hasLink');
1032      let hturl = atob(plgn.getAttribute('data-url'));
1033      housetypeURL.innerHTML = '<a class="_button exclude-from-typo" href="' + hturl + '">Bekijk dit bouwnummer<i class="uk-icon-chevron-right"></i></a>';
1034      hturlSpec = true;
1035    }
1036
1037    if (typeof plgn.getAttribute('data-title') != 'undefined' && null !== plgn.getAttribute('data-title') && plgn.getAttribute('data-title') != '') {
1038      hturlSpec = false;
1039      thePrice = '';
1040    }
1041
1042    if (hometypeSpec !== false) {
1043      thePopUp.append(hometype);
1044    }
1045    thePopUp.append(buildnumberName);
1046    if (thePrice !== '') {
1047      thePopUp.append(price);
1048    }
1049    if (sheetSpec !== false) {
1050      thePopUp.append(specsheet);
1051    }
1052    if (hturlSpec !== false) {
1053      thePopUp.append(housetypeURL);
1054    }
1055
1056    section.append(thePopUp);
1057    section.append(thePopUpOverlay);
1058
1059    /* Fix side overflowing for popup */
1060    let CurrentLeft = thePopUp.offsetWidth + plgnData.x;
1061    let MaxLeft = window.innerWidth - thePopUp.offsetWidth - 5; /* 5 pix marge */
1062    if (CurrentLeft > MaxLeft) {
1063      thePopUp.setAttribute('style', 'left:' + MaxLeft + 'px;top:' + plgnData.y + 'px;');
1064    }
1065
1066    thePopUpOverlay.addEventListener('click', () => {
1067      thePopUp.remove();
1068      thePopUpOverlay.remove();
1069      document.querySelector('polygon.highlight').classList.remove('highlight');
1070    });
1071
1072    closeIcon.addEventListener('click', () => triggerAevent(thePopUpOverlay, 'click'));
1073  }
1074}
1075
1076/* ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ */
1077
1078/* Activate on hover */
1079if (typeof birdseyeCreateNewMapPopover === 'undefined') {
1080  function birdseyeCreateNewMapPopover(plgn, plgnData, section) {
1081    let replacementHTML = '<div class="placeholder">Bekijk plattegrond</div>';
1082
1083    if (typeof plgnData.status !== 'undefined' && null !== plgnData.status) {
1084      let floorStatus = JSON.parse(atob(plgnData.status));
1085      let floorColor = JSON.parse(atob(plgnData.colors));
1086
1087      replacementHTML = '<div class="statusholder">';
1088
1089      if (floorStatus.PRESELLING > 0) {
1090        replacementHTML += '<div class="status preselling">';
1091        replacementHTML += '<i title="' + (plgnData.selltype == 1 ? 'Binnenkort in verhuur' : 'Binnenkort in verkoop') + '" class="exclude-from-typo preselling" style="background-color:' + floorColor.PRESELLING + ';"></i>';
1092        replacementHTML += '<span class="exclude-from-typo">' + (plgnData.selltype == 1 ? 'Binnenkort' : floorStatus.PRESELLING) + '</span>';
1093        replacementHTML += '</div>';
1094      }
1095
1096      if (floorStatus.SELLING > 0 || floorStatus.PRESELLING === 0) {
1097        replacementHTML += '<div class="status selling">';
1098        replacementHTML += '<i title="' + (plgnData.selltype == 1 ? 'Te huur' : 'Te 
1098koop') + '" class="exclude-from-typo selling" style="background-color:' + floorColor.SELLING + ';"></i>';
1099        replacementHTML += '<span class="exclude-from-typo">' + (plgnData.selltype == 1 ? 'Te huur' : floorStatus.SELLING) + '</span>';
1100        replacementHTML += '</div>';
1101      }
1102
1103      replacementHTML += '<div class="status option">';
1104      replacementHTML += '<i title="' + (plgnData.selltype == 1 ? 'Gereserveerd' : 'Onder optie') + '" class="exclude-from-typo option" style="background-color:' + floorColor.OPTION + ';"></i>';
1105      replacementHTML += '<span class="exclude-from-typo">' + (plgnData.selltype == 1 ? 'Gereserveerd' : floorStatus.OPTION) + '</span>';
1106      replacementHTML += '</div>';
1107
1108      replacementHTML += '<div class="status sold">';
1109      replacementHTML += '<i title="' + (plgnData.selltype == 1 ? 'Verhuurd' : 'Verkocht') + '" class="exclude-from-typo sold" style="background-color:' + floorColor.SOLD + ';"></i>';
1110      replacementHTML += '<span class="exclude-from-typo">' + (plgnData.selltype == 1 ? 'Verhuurd' : floorStatus.SOLD) + '</span>';
1111      replacementHTML += '</div>';
1112
1113      replacementHTML += '</div>';
1114    }
1115
1116    let popup = document.querySelector('.__yrm-birdseye-popover');
1117    /* BIND AND FILL THIS POPOVER */
1118    popup.innerHTML = replacementHTML;
1119  }
1120}
1121
1122if (typeof birdseyeCreateNewBuildPopover === 'undefined') {
1123  function birdseyeCreateNewBuildPopover(plgn, plgnData, section) {
1124    let replacementHTML = '';
1125
1126    if (plgnData.type != false && plgnData.type !== 'undefined' && null !== plgnData.type) {
1127      replacementHTML += '<strong class="exclude-from-typo buildnumber">' + plgnData.title + '</strong>';
1128    } else if (plgnData.buildnumber !== 'undefined' && null !== plgnData.buildnumber) {
1129      replacementHTML += '<strong class="exclude-from-typo buildnumber">Bouwnummer ' + plgnData.buildnumber + '</strong>';
1130    }
1131
1132    if (plgnData.pricefrom !== false && plgnData.pricefrom !== null && plgnData.pricefrom != '' && (plgnData.price == false || plgnData.price < 1 || plgnData.price === null) && plgnData.status !== 'SOLD') {
1133      let priceFrom = JSON.parse(atob(plgnData.pricefrom));
1134
1135      if (priceFrom.origin !== null) {
1136        replacementHTML += '<span class="exclude-from-typo price">' + priceFrom.origin + '</span>';
1137      }
1138    }
1139    if (plgnData.price !== false && plgnData.price > 0 && plgnData.price !== null && plgnData.status !== 'SOLD' && beMoneyFormat.format(plgnData.price) !== null) {
1140      replacementHTML += '<span class="exclude-from-typo price">' + beMoneyFormat.format(plgnData.price) + '</span>';
1141    }
1142
1143    let statusName = '',
1144      statusColor = '',
1145      allStatusColors = JSON.parse(atob(plgnData.colors));
1146
1147    switch (plgnData.status) {
1148      case 'PRESELLING':
1149        statusName = plgnData.selltype == 1 ? 'Binnenkort in verhuur' : 'Binnenkort in verkoop';
1150        statusColor = allStatusColors.PRESELLING;
1151        break;
1152      case 'SELLING':
1153        statusName = plgnData.selltype == 1 ? 'Te huur' : 'Te koop';
1154        statusColor = allStatusColors.SELLING;
1155        break;
1156      case 'OPTION':
1157        statusName = plgnData.selltype == 1 ? 'Gereserveerd' : 'Onder optie';
1158        statusColor = allStatusColors.OPTION;
1159        break;
1160      case 'SOLD':
1161        statusName = plgnData.selltype == 1 ? 'Verhuurd' : 'Verkocht';
1162        statusColor = allStatusColors.SOLD;
1163        break;
1164    }
1165
1166    if (statusName !== '' && (plgnData.type == false || plgnData.type == 'undefined' || null == plgnData.type)) {
1167      replacementHTML += '<span class="exclude-from-typo status buildnumber-status"><i class="_status" style="--status-color:' + statusColor + ';">' + statusName + '</i></span>';
1168    }
1169
1170    if (replacementHTML === '') {
1171      replacementHTML = '<div class="placeholder">Bekijk bouwnummer</div>';
1172    }
1173
1174    let popup = document.querySelector('.__yrm-birdseye-popover');
1175    popup.innerHTML = replacementHTML;
1176  }
1177}
1178
1179/* ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ */
1180
1181if (typeof yoreflexibleExecuteFilters === 'undefined') {
1182  function yoreflexibleExecuteFilters(filters, section, typeOfMap) {
1183    let theSection = document.querySelector('.yoreflexi_yorecrm---vogelvlucht[data-section-id="' + section + '"]'),
1184      theFilters = theSection.querySelectorAll('.yrmslct-container'),
1185      theFilterIcon = theSection.querySelector('.__crm-filter-toggle'),
1186      thePolygons = theSection.querySelectorAll('polygon'),
1187      mapType = theSection.querySelector('.vogelvlucht-filter-bar').getAttribute('data-maptype'),
1188      theFloorplans = false,
1189      hasBeenFiltered = false;
1190
1191    if (mapType === 'propertymap') {
1192      theFloorplans = theSection.querySelectorAll('._propertymap-floorplan');
1193    }
1194    if (mapType === 'floorplan') {
1195      theFloorplans = theSection.querySelectorAll('._flatmap-floorplan');
1196    }
1197
1198    /* Setup finalize version for dropdowns by replacing placeholder text */
1199    if (typeof theFilters !== 'undefined' && null !== theFilters && theFilters.length > 0) {
1200      for (const filter of theFilters) {
1201        /* Replace span placeholders */
1202        filter.querySelector('._select-placeholder').innerHTML = filter.querySelector('._select-placeholder').innerHTML.replace('[%]', '');
1203        filter.querySelector('._select-placeholder').innerHTML = filter.querySelector('._select-placeholder').innerHTML.replace('[/%]', '');
1204        /* Replace span placeholders */
1205        if (typeof filter.querySelectorAll('._item') !== 'undefined' && null !== filter.querySelectorAll('._item')) {
1206          for (item of filter.querySelectorAll('._item')) {
1207            item.innerHTML = item.innerHTML.replace('[%]', '<sup>');
1208            item.innerHTML = item.innerHTML.replace('[/%]', '</sup>');
1209          }
1210        }
1211      }
1212    }
1213
1214    /* reset buildnumber/polygon state and startover with a fresh slate */
1215    for (polygon of thePolygons) {
1216      if (polygon.classList.contains('uk-hidden')) {
1217        polygon.classList.remove('uk-hidden');
1218      }
1219      if (polygon.classList.contains('active')) {
1220        polygon.classList.remove('active');
1221      }
1222      polygon.setAttribute('data-active', '1');
1223    }
1224
1225    /* Check per floorplan if it has buildnumbers.
1226     ** If no buildnumbers found, we will give the
1227     ** dropdown a striketrough and make it italic */
1228    for (const fp of theFloorplans) {
1229      if (typeof fp.querySelectorAll('._floorplan-overview-view') !== 'undefined' && null !== fp.querySelectorAll('._floorplan-overview-view')) {
1230        for (fpsvg of fp.querySelectorAll('._floorplan-overview-view')) {
1231          if (typeof fpsvg.querySelectorAll('polygon') === 'undefined' || null === fpsvg.querySelectorAll('polygon') || fpsvg.querySelectorAll('polygon').length < 1) {
1232            /* No polygons found */
1233            let mapid = fpsvg.closest('._floorplan-holder').getAttribute('data-mapid');
1234            propertymapid = fpsvg.closest('.__crm-map-main-viewer').getAttribute('data-mapid');
1235
1236            /* Give this map a striketrough in the dropdown */
1237            if (typeof fpsvg.closest('.flexsection').querySelector('._crm-filter-floors[data-mapid="' + propertymapid + '"]') !== 'undefined' && null !== fpsvg.closest('.flexsection').querySelector('._crm-filter-floors[data-mapid="' + propertymapid + '"]')) {
1238              let mapDropdown = fpsvg.closest('.flexsection').querySelector('._crm-filter-floors[data-mapid="' + propertymapid + '"]').parentNode;
1239
1240              mapDropdown.querySelector('option[value="' + mapid + '"]').setAttribute('disabled', 'disabled');
1241
1242              /* Give the dropdown li a 'striketrough' */
1243              let theSelectorContainer = document.createElement('sup');
1244              theSelectorContainer.classList = 'count _crm-floor-polygon-count';
1245              theSelectorContainer.innerText = ' (0)';
1246              if (null !== mapDropdown.querySelector('li[value="' + mapid + '"]')) {
1247                if (mapDropdown.querySelector('li[value="' + mapid + '"]').hasAttribute('data-status') === true) {
1248                  mapDropdown
1249                    .querySelector('li[value="' + mapid + '"]')
1250                    .querySelector('sup.count')
1251                    .remove();
1252                }
1253
1254                mapDropdown.querySelector('li[value="' + mapid + '"]').setAttribute('data-status', 'unavailable');
1255                mapDropdown.querySelector('li[value="' + mapid + '"]').setAttribute('title', 'Nog geen aanbod toegevoegd');
1256                mapDropdown.querySelector('li[value="' + mapid + '"]').append(theSelectorContainer);
1257              }
1258            }
1259          }
1260        }
1261      }
1262    }
1263
1264    let propertymapsElement = theSection.querySelectorAll('._crm-birdseyes');
1265
1266    for (pme of propertymapsElement) {
1267      let mapType = pme.closest('.flexsection').querySelector('.vogelvlucht-filter-bar').getAttribute('data-maptype');
1268      if (mapType === 'propertymap') {
1269        if (typeof pme.querySelectorAll('.__crm-map-main-viewer') !== 'undefined' && null !== pme.querySelectorAll('.__crm-map-main-viewer') && pme.querySelectorAll('.__crm-map-main-viewer').length > 0) {
1270          if (pme.querySelectorAll('.__crm-map-main-viewer').length < 2) {
1271            pme.querySelector('.__crm-map-main-viewer').setAttribute('data-active', '1');
1272            pme.querySelector('._floorplan-holder').setAttribute('data-active', '1');
1273          }
1274        }
1275      }
1276    }
1277
1278    for (const filter of filters) {
1279      switch (filter.type) {
1280        case 'flatmap':
1281          /* First show the correct 'floors' filter in the menu */
1282          let floorElements = theSection.querySelectorAll('._crm-filter-floors');
1283          for (floor of floorElements) {
1284            if (floor.getAttribute('data-mapid') !== filter.key_value) {
1285              // floor.classList.add('uk-hidden');
1286              floor.parentNode.classList.add('uk-hidden');
1287            } else {
1288              if (floor.parentNode.classList.contains('uk-hidden') === true) {
1289                floor.parentNode.classList.remove('uk-hidden');
1290              }
1291            }
1292          }
1293
1294          let flatmapElements = theSection.querySelectorAll('.__crm-map-main-viewer');
1295          for (fmc of flatmapElements) {
1296            fmc.setAttribute('data-active', fmc.getAttribute('data-mapid') !== filter.key_value && flatmapElements.length > 1 ? '0' : '1');
1297            if (mapType === 'propertymap') {
1298              fmc.querySelector('._floorplan-holder[data-mapid="' + fmc.getAttribute('data-mapid') + '"]').setAttribute('data-active', fmc.getAttribute('data-mapid') !== filter.key_value && flatmapElements.length > 1 ? '0' : '1');
1299            }
1300          }
1301          break;
1302        /* ~ - ~ FLATMAP FILTER & INITIALIZE ~ - ~ */
1303        /* ~ - ~ --------------------------- ~ - ~ */
1304
1305        /* ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ */
1306
1307        /* ~ - ~ ---------------- ~ - ~ */
1308        /* ~ - ~ FLOORPLAN FILTER ~ - ~ */
1309        case 'floorplan':
1310          let flatmapElement = theSection.querySelector('.__crm-map-main-viewer[data-mapid="' + filter.specialAttribute1 + '"]'),
1311            fpFlatmapElements = theSection.querySelectorAll('.__crm-map-main-viewer'),
1312            flatmap = flatmapElement.querySelector('._flatmap-overview-map');
1313          floorplan = false;
1314
1315          if (mapType === 'propertymap') {
1316            floorplan = flatmapElement.querySelector('._propertymap-floorplan');
1317          }
1318          if (mapType === 'floorplan') {
1319            floorplan = flatmapElement.querySelector('._flatmap-floorplan');
1320          }
1321
1322          for (fpc of floorplan.querySelectorAll('._floorplan-holder')) {
1323            fpc.setAttribute('data-active', fpc.getAttribute('data-mapid') !== filter.key_value ? '0' : '1');
1324          }
1325
1326          if (fpFlatmapElements.length > 1) {
1327            for (fpfle of fpFlatmapElements) {
1328              if (fpfle.getAttribute('data-mapid') === filter.specialAttribute1) {
1329                let overviewMapPolygons = fpfle.querySelector('._flatmap-overview-map');
1330                for (fmp of overviewMapPolygons.querySelectorAll('polygon')) {
1331                  if (fmp.getAttribute('data-propertymapid') != filter.key_value) {
1332                    if (fmp.classList.contains('highlight')) {
1333                      fmp.classList.remove('highlight');
1334                    }
1335                  } else {
1336                    fmp.classList.add('highlight');
1337                  }
1338                }
1339              }
1340            }
1341          }
1342
1343          if (fpFlatmapElements.length < 2) {
1344            flatmapElement.setAttribute('data-active', '1');
1345            for (fmp of flatmap.querySelectorAll('polygon')) {
1346              if (fmp.getAttribute('data-propertymapid') != filter.key_value) {
1347                if (fmp.classList.contains('highlight')) {
1348                  fmp.classList.remove('highlight');
1349                }
1350              } else {
1351                fmp.classList.add('highlight');
1352              }
1353            }
1354          }
1355          break;
1356        case 'status':
1357          let status_value = filter.key_value == 'ALL' ? 'default' : filter.key_value,
1358            statusMaps = theSection.querySelectorAll('.__crm-map-main-viewer');
1359
1360          /* Set value to add the 'reset' button */
1361          if (status_value != 'default') {
1362            hasBeenFiltered = true;
1363          }
1364
1365          for (om of statusMaps) {
1366            let overviewPolygons = om.querySelectorAll('._flatmap-overview-map polygon'),
1367              floorplanPolygons = false;
1368
1369            if (mapType === 'propertymap') {
1370              floorplanPolygons = om.querySelectorAll('._propertymap-floorplan polygon');
1371            }
1372            if (mapType === 'floorplan') {
1373              floorplanPolygons = om.querySelectorAll('._flatmap-floorplan polygon');
1374            }
1375
1376            for (op of overviewPolygons) {
1377              let statusData = JSON.parse(atob(op.getAttribute('data-status'))),
1378                proceedStatus = true;
1379
1380              switch (false) {
1381                case status_value == 'PRESELLING' && statusData.PRESELLING === 0 ? false : true:
1382                case status_value == 'SELLING' && statusData.SELLING === 0 ? false : true:
1383                case status_value == 'OPTION' && statusData.OPTION === 0 ? false : true:
1384                case status_value == 'SOLD' && statusData.SOLD === 0 ? false : true:
1385                  proceedStatus = false;
1386                  break;
1387              }
1388
1389              if (proceedStatus === false) {
1390                /* The filtered type has no match */
1391                op.setAttribute('data-active', '0');
1392              }
1393            }
1394            if (floorplanPolygons !== false) {
1395              for (fp of floorplanPolygons) {
1396                let statusData = fp.getAttribute('data-status'),
1397                  proceedStatus = true;
1398
1399                switch (false) {
1400                  case status_value == 'PRESELLING' && statusData != 'PRESELLING' ? false : true:
1401                  case status_value == 'SELLING' && statusData != 'SELLING' ? false : true:
1402                  case status_value == 'OPTION' && statusData != 'OPTION' ? false : true:
1403                  case status_value == 'SOLD' && statusData != 'SOLD' ? false : true:
1404                    proceedStatus = false;
1405                    break;
1406                }
1407
1408                if (proceedStatus === false) {
1409                  /* The filtered type has no match */
1410                  fp.setAttribute('data-active', '0');
1411                }
1412              }
1413            }
1414          }
1415          break;
1416        case 'livingarea':
1417          let li_value = filter.key_value == 'ALL' ? 'default' : filter.key_value,
1418            livingareaMaps = theSection.querySelectorAll('.__crm-map-main-viewer');
1419
1420          /* Set value to add the 'reset' button */
1421          if (li_value != 'default') {
1422            hasBeenFiltered = true;
1423          }
1424
1425          for (om of livingareaMaps) {
1426            let overviewPolygons = om.querySelectorAll('._flatmap-overview-map polygon'),
1427              floorplanPolygons = false;
1428
1429            if (mapType === 'propertymap') {
1430              floorplanPolygons = om.querySelectorAll('._propertymap-floorplan polygon');
1431            }
1432            if (mapType === 'floorplan') {
1433              floorplanPolygons = om.querySelectorAll('._flatmap-floorplan polygon');
1434            }
1435
1436            for (op of overviewPolygons) {
1437              let livingareaData = JSON.parse(atob(op.getAttribute('data-livingareas'))),
1438                proceedStatus = true;
1439              if (li_value != 'default' && parseInt(li_value) > parseInt(livingareaData.to)) {
1440                proceedStatus = false;
1441                op.setAttribute('data-active', '0');
1442              }
1443            }
1444            if (floorplanPolygons !== false) {
1445              for (fp of floorplanPolygons) {
1446                if (li_value != 'default' && parseInt(li_value) > parseInt(fp.getAttribute('data-livingarea'))) {
1447                  proceedStatus = false;
1448                  fp.setAttribute('data-active', '0');
1449                }
1450              }
1451            }
1452          }
1453          break;
1454        case 'lotarea':
1455          let lo_value = filter.key_value == 'ALL' ? 'default' : filter.key_value,
1456            lotareaMaps = theSection.querySelectorAll('.__crm-map-main-viewer');
1457
1458          /* Set value to add the 'reset' button */
1459          if (lo_value != 'default') {
1460            hasBeenFiltered = true;
1461          }
1462
1463          for (om of lotareaMaps) {
1464            let overviewPolygons = om.querySelectorAll('._flatmap-overview-map polygon'),
1465              floorplanPolygons = false;
1466
1467            if (mapType === 'propertymap') {
1468              floorplanPolygons = om.querySelectorAll('._propertymap-floorplan polygon');
1469            }
1470            if (mapType === 'floorplan') {
1471              floorplanPolygons = om.querySelectorAll('._flatmap-floorplan polygon');
1472            }
1473
1474            for (op of overviewPolygons) {
1475              let lotareaData = JSON.parse(atob(op.getAttribute('data-lotareas'))),
1476                proceedStatus = true;
1477              if (lo_value != 'default' && parseInt(lo_value) > parseInt(lotareaData.to)) {
1478                proceedStatus = false;
1479                op.setAttribute('data-active', '0');
1480              }
1481            }
1482            if (floorplanPolygons !== false) {
1483              for (fp of floorplanPolygons) {
1484                if (lo_value != 'default' && parseInt(lo_value) > parseInt(fp.getAttribute('data-lotarea'))) {
1485                  proceedStatus = false;
1486                  fp.setAttribute('data-active', '0');
1487                }
1488              }
1489            }
1490          }
1491          break;
1492        case 'room':
1493          let room_value = filter.key_value == 'ALL' ? 'default' : filter.key_value,
1494            roomsMaps = theSection.querySelectorAll('.__crm-map-main-viewer');
1495
1496          /* Set value to add the 'reset' button */
1497          if (room_value != 'default') {
1498            hasBeenFiltered = true;
1499          }
1500
1501          for (om of roomsMaps) {
1502            let overviewPolygons = om.querySelectorAll('._flatmap-overview-map polygon'),
1503              floorplanPolygons = false;
1504
1505            if (mapType === 'propertymap') {
1506              floorplanPolygons = om.querySelectorAll('._propertymap-floorplan polygon');
1507            }
1508            if (mapType === 'floorplan') {
1509              floorplanPolygons = om.querySelectorAll('._flatmap-floorplan polygon');
1510            }
1511
1512            for (op of overviewPolygons) {
1513              let roomsData = JSON.parse(atob(op.getAttribute('data-rooms'))),
1514                proceedStatus = true;
1515              if (room_value != 'default' && parseInt(room_value) > parseInt(roomsData.to)) {
1516                proceedStatus = false;
1517                op.setAttribute('data-active', '0');
1518              }
1519            }
1520            if (floorplanPolygons !== false) {
1521              for (fp of floorplanPolygons) {
1522                if (room_value != 'default' && parseInt(room_value) > parseInt(fp.getAttribute('data-room'))) {
1523                  proceedStatus = false;
1524                  fp.setAttribute('data-active', '0');
1525                }
1526              }
1527            }
1528          }
1529          break;
1530
1531        case 'housetype':
1532          let housetype_value = filter.key_value == 'ALL' ? 'default' : filter.key_value,
1533            housetypesMaps = theSection.querySelectorAll('.__crm-map-main-viewer');
1534
1535          /* Set value to add the 'reset' button */
1536          if (housetype_value != 'default') {
1537            hasBeenFiltered = true;
1538          }
1539
1540          for (om of housetypesMaps) {
1541            let overviewPolygons = om.querySelectorAll('._flatmap-overview-map polygon'),
1542              floorplanPolygons = false;
1543
1544            if (mapType === 'propertymap') {
1545              floorplanPolygons = om.querySelectorAll('._propertymap-floorplan polygon');
1546            }
1547            if (mapType === 'floorplan') {
1548              floorplanPolygons = om.querySelectorAll('._flatmap-floorplan polygon');
1549            }
1550
1551            for (op of overviewPolygons) {
1552              let housetypesData = JSON.parse(atob(op.getAttribute('data-housetypes'))),
1553                proceedStatus = true;
1554              if (housetype_value != 'default') {
1555                let htFound = false;
1556                for (ht of housetypesData) {
1557                  if (ht === housetype_value) {
1558                    htFound = true;
1559                  }
1560                }
1561                if (htFound === false) {
1562                  proceedStatus = false;
1563                  op.setAttribute('data-active', '0');
1564                }
1565              }
1566            }
1567            if (floorplanPolygons !== false) {
1568              for (fp of floorplanPolygons) {
1569                if (housetype_value != 'default' && housetype_value != fp.getAttribute('data-housetype')) {
1570                  proceedStatus = false;
1571                  fp.setAttribute('data-active', '0');
1572                }
1573              }
1574            }
1575          }
1576          break;
1577        case 'hometype':
1578          let hometype_value = filter.key_value == 'ALL' ? 'default' : filter.key_value,
1579            hometypesMaps = theSection.querySelectorAll('.__crm-map-main-viewer');
1580
1581          /* Set value to add the 'reset' button */
1582          if (hometype_value != 'default') {
1583            hasBeenFiltered = true;
1584          }
1585
1586          for (om of hometypesMaps) {
1587            let overviewPolygons = om.querySelectorAll('._flatmap-overview-map polygon'),
1588              floorplanPolygons = false;
1589
1590            if (mapType === 'propertymap') {
1591              floorplanPolygons = om.querySelectorAll('._propertymap-floorplan polygon');
1592            }
1593            if (mapType === 'floorplan') {
1594              floorplanPolygons = om.querySelectorAll('._flatmap-floorplan polygon');
1595            }
1596
1597            for (op of overviewPolygons) {
1598              let hometypesData = JSON.parse(atob(op.getAttribute('data-hometypes'))),
1599                proceedStatus = true;
1600              if (hometype_value != 'default') {
1601                let htFound = false;
1602                for (ht of hometypesData) {
1603                  if (ht === hometype_value) {
1604                    htFound = true;
1605                  }
1606                }
1607                if (htFound === false) {
1608                  proceedStatus = false;
1609                  op.setAttribute('data-active', '0');
1610                }
1611              }
1612            }
1613            if (floorplanPolygons !== false) {
1614              for (fp of floorplanPolygons) {
1615                if (hometype_value != 'default' && hometype_value != fp.getAttribute('data-hometype')) {
1616                  proceedStatus = false;
1617                  fp.setAttribute('data-active', '0');
1618                }
1619              }
1620            }
1621          }
1622          break;
1623        case 'pricerange':
1624          let pricerange_value = filter.key_value == 'ALL' ? 'default' : filter.key_value,
1625            pricerangesMaps = theSection.querySelectorAll('.__crm-map-main-viewer');
1626
1627          if (pricerange_value != 'default') {
1628            hasBeenFiltered = true;
1629          }
1630
1631          for (om of pricerangesMaps) {
1632            let overviewPolygons = om.querySelectorAll('._flatmap-overview-map polygon'),
1633              floorplanPolygons = false;
1634
1635            if (mapType === 'propertymap') {
1636              floorplanPolygons = om.querySelectorAll('._propertymap-floorplan polygon');
1637            }
1638            if (mapType === 'floorplan') {
1639              floorplanPolygons = om.querySelectorAll('._flatmap-floorplan polygon');
1640            }
1641
1642            for (op of overviewPolygons) {
1643              let priceRangeComponent = op.getAttribute('data-pricerange'),
1644                pricerangesData = priceRangeComponent != null && priceRangeComponent != '' ? JSON.parse(atob(priceRangeComponent)) : false,
1645                proceedStatus = true;
1646              if (pricerange_value != 'default' && pricerangesData !== false) {
1647                let prFound = false;
1648                if (pricerangesData.pr_start >= pricerange_value) {
1649                  prFound = true;
1650                }
1651                if (prFound === false) {
1652                  proceedStatus = false;
1653                  op.setAttribute('data-active', '0');
1654                }
1655              }
1656            }
1657            if (floorplanPolygons !== false) {
1658              for (fp of floorplanPolygons) {
1659                let priceRangeBNRComponent = fp.getAttribute('data-pricefrom'),
1660                  pricerangesData = priceRangeBNRComponent != null && priceRangeBNRComponent != '' ? JSON.parse(atob(priceRangeBNRComponent)) : false;
1661
1662                if (pricerange_value != 'default' && parseInt(pricerange_value) > parseInt(pricerangesData.pr_start) && pricerangesData.pr_start != '' && parseInt(pricerangesData.pr_start) > 0) {
1663                  proceedStatus = false;
1664                  fp.setAttribute('data-active', '0');
1665                }
1666              }
1667            }
1668          }
1669          break;
1670        case 'price_min_max':
1671          let pricerangeSlider_values = { min: filter.key_value.min, max: filter.key_value.max },
1672            pricerangeSliderMaps = theSection.querySelectorAll('.__crm-map-main-viewer');
1673          let minus = parseFloat(pricerangeSlider_values.min.replace(/\./g, ''));
1674          let maxus = parseFloat(pricerangeSlider_values.max.replace(/\./g, ''));
1675
1676          /* Set value to add the 'reset' button */
1677          if (minus != filter.specialAttribute3 || maxus != filter.specialAttribute4) {
1678            hasBeenFiltered = true;
1679          }
1680
1681          for (om of pricerangeSliderMaps) {
1682            let overviewPolygons = om.querySelectorAll('._flatmap-overview-map polygon'),
1683              floorplanPolygons = false;
1684
1685            if (mapType === 'propertymap') {
1686              floorplanPolygons = om.querySelectorAll('._propertymap-floorplan polygon');
1687            }
1688            if (mapType === 'floorplan') {
1689              floorplanPolygons = om.querySelectorAll('._flatmap-floorplan polygon');
1690            }
1691
1692            for (op of overviewPolygons) {
1693              let priceRangeSliderComponent = op.getAttribute('data-price'),
1694                pricerangeSlidersData = priceRangeSliderComponent != null && priceRangeSliderComponent != '' ? JSON.parse(atob(priceRangeSliderComponent)) : false,
1695                proceedStatus = true;
1696              if (pricerangeSlidersData !== false) {
1697                let priFound = false;
1698                for (op_p_price of pricerangeSlidersData) {
1699                  if (op_p_price >= minus && op_p_price <= maxus) {
1700                    priFound = true;
1701                  }
1702                }
1703                if (priFound === false) {
1704                  proceedStatus = false;
1705                  op.setAttribute('data-active', '0');
1706                }
1707              }
1708            }
1709            if (floorplanPolygons !== false) {
1710              for (fp of floorplanPolygons) {
1711                let priceBNRComponent = parseFloat(fp.getAttribute('data-price'));
1712                if (priceBNRComponent != '' && priceBNRComponent != null && priceBNRComponent > 0 && (priceBNRComponent < minus || priceBNRComponent > maxus)) {
1713                  proceedStatus = false;
1714                  fp.setAttribute('data-active', '0');
1715                }
1716              }
1717            }
1718          }
1719          break;
1720      }
1721    }
1722
1723    if (typeof theSection.querySelector('.__crm-preloader') !== 'undefined' && null !== theSection.querySelector('.__crm-preloader')) {
1724      theSection.querySelector('.__crm-preloader').remove();
1725    }
1726
1727    /* Trigger scroll once */
1728    triggerAevent(document, 'scroll');
1729
1730    if (typeof theFilterIcon !== 'undefined' && null !== theFilterIcon) {
1731      if (hasBeenFiltered === true) {
1732        theFilterIcon.classList.add('has-been-filtered');
1733        if (theFilterIcon.classList.contains('with-reset')) {
1734          theFilterIcon.parentNode.querySelector('.__crm-filter-reset').classList.add('has-been-filtered');
1735        }
1736      }
1737      if (hasBeenFiltered === false && theFilterIcon.classList.contains('has-been-filtered')) {
1738        theFilterIcon.classList.remove('has-been-filtered');
1739        if (theFilterIcon.classList.contains('with-reset')) {
1740          theFilterIcon.parentNode.querySelector('.__crm-filter-reset').classList.remove('has-been-filtered');
1741        }
1742      }
1743    }
1744
1745    /* Floorplan aspectratio calculator based on sizes */
1746    checkBirdseyesForDynamicWidthSettings();
1747  }
1748}

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.