var beansUrlParameter = function(sParam) { var sPageURL = window.location.search.substring(1), sURLVariables = sPageURL.split('&'), sParameterName, i; for (i = 0; i < sURLVariables.length; i++) { sParameterName = sURLVariables[i].split('='); if (sParameterName[0] === sParam) { return sParameterName[1] === undefined ? true : decodeURIComponent(sParameterName[1]); } } } var getBaseConfig = function(urlFromRequest) { return { address: '', useGroundElevation: false, elevation: 0, canonicalUrl: urlFromRequest }; } var convertUnitsArr2 = function(address, unitsArr, hideMarkers) { var convertedArr = []; for (var i = 0; i < unitsArr.length; i++) { var bedText = unitsArr[i].bed ? (unitsArr[i].bed + ' Bed') : 'Studio'; var td = new Date().toISOString().substring(0, 10); var as = (unitsArr[i].availability ? ('on ' + unitsArr[i].availability) : 'Now'); if (unitsArr[i].availability && unitsArr[i].availability <= td) { as = 'Now'; } var onPreviewData; if (unitsArr.floorplanImg) { onPreviewData = [ { value: bedText + ' / ' + unitsArr[i].bath + ' Bath / ' + (unitsArr[i].sqft ? unitsArr[i].sqft.toLocaleString() : '0') + ' sq. ft.' }, { value: 'img:' + unitsArr[i].floorplanImg }, { value: '$' + (unitsArr[i].rent ? unitsArr[i].rent.toLocaleString() : '0') + '/ mo' }, { value: 'Available ' + as } ]; } else { onPreviewData = [ { value: bedText + ' / ' + unitsArr[i].bath + ' Bath / ' + (unitsArr[i].sqft ? unitsArr[i].sqft.toLocaleString() : '0') + ' sq. ft.' }, { value: '$' + (unitsArr[i].rent ? unitsArr[i].rent.toLocaleString() : '0') + '/ mo' }, { value: 'Available ' + as } ]; } convertedArr.push({ address: address, unit: unitsArr[i].unit, options: { markers: { display: hideMarkers ? false : true }, poi: [ { name: "ALL", display: false }, { name: "CLUBHOUSE", display: true }, { name: "SWIMMINGPOOL", display: true }, { name: "OFFICE", display: true }, { name: "GYM", display: true }, { name: "MAILROOM", display: true }, { name: "LAUNDRY", display: true }, { name: "PLAYGROUND", display: true } ], onPreviewData: onPreviewData, onClickData: { name: unitsArr[i].unit ? unitsArr[i].unit.replaceAll('||', ' - ') : '', bed: unitsArr[i].bed, bath: unitsArr[i].bath, sqft: unitsArr[i].sqft, rent: unitsArr[i].rent, floorplanImg: unitsArr[i].floorplanImg, availability: unitsArr[i].availability, link: unitsArr[i].link ? unitsArr[i].link.replaceAll('&', '&') : '' } } }); } return convertedArr; } var convertUnitsArr = function(config, unitsArr, hideMarkers) { var addressAndUnitWithOptions; if (unitsArr.length === 0) { unitsArr.push({ unit: '' }); addressAndUnitWithOptions = convertUnitsArr2(config.address, unitsArr, hideMarkers); addressAndUnitWithOptions[0].isPlaceHolder = true; } else { unitsArr.sort((a, b) => { var aa = a.unit ? a.unit : ''; var bb = b.unit ? b.unit : ''; return aa.localeCompare(bb); }); addressAndUnitWithOptions = convertUnitsArr2(config.address, unitsArr, hideMarkers); } if (config.unitShapeConfig) { for (var i = 0; i < addressAndUnitWithOptions.length; i++) { addressAndUnitWithOptions[i].options.unitShape = config.unitShapeConfig(addressAndUnitWithOptions[i]); } } if (config.poi) { for (var i = 0; i < addressAndUnitWithOptions.length; i++) { for (var j = 0; j < config.poi.length; j++) { addressAndUnitWithOptions[i].options.poi.push(config.poi[j]); } } } return addressAndUnitWithOptions; } var commonImmersives = [ { url: "https://gis-server.beans.ai/arcgis/rest/services/Hosted/Immersive_Layers/FeatureServer/0", elevationInfo: { mode: "absolute-height", offset: 0.5, }, renderer: { type: "unique-value", field: "type", uniqueValueInfos: [ { value: "Apricot", symbol: { type: "web-style", name: "Prunus", styleName: "EsriRealisticTreesStyle" } }, { value: "Mountain Mahogany", symbol: { type: "web-style", name: "Cercocarpus", styleName: "EsriRealisticTreesStyle" } }, { value: "Rose", symbol: { type: "web-style", name: "Rosa", styleName: "EsriRealisticTreesStyle" } } ] }, isFeature: true }, { url: "https://gis-server.beans.ai/arcgis/rest/services/Hosted/Immersive_Layers/FeatureServer/1", elevationInfo: { mode: "absolute-height", offset: 0.5, }, renderer: { type: "unique-value", field: "type", uniqueValueInfos: [ { value: "Walkway", symbol: { type: "simple-line", width: 4, color: "#fcf5de" } }, { value: "Road", symbol: { type: "simple-line", width: 16, color: "#eeeeee" } } ] }, isFeature: true }, { url: "https://gis-server.beans.ai/arcgis/rest/services/Hosted/Immersive_Layers/FeatureServer/2", elevationInfo: { mode: "absolute-height", offset: 0.5, }, renderer: { type: "unique-value", field: "type", uniqueValueInfos: [ { value: "Lawn", symbol: { type: "simple-fill", outline: { width: 0 }, color: "#b2c388" } } ] }, isFeature: true }, { url: "https://gis-server.beans.ai/arcgis/rest/services/Hosted/Immersive_Layers/FeatureServer/2", elevationInfo: { mode: "absolute-height", offset: 1.0, }, renderer: { type: "unique-value", field: "type", uniqueValueInfos: [ { value: "Water", symbol: { type: "simple-fill", outline: { width: 0 }, color: "#a5c2d1" } } ] }, isFeature: true }, ]; var getDisplayOptions = function( config, unitShape_, // Default shape selectedUnitShape_, // Selected shape selectableUnitShape_, // Selectable shape hoverUnitShape_ ) { return { propertyAddress: config.address, offsetGroundElevation: config.elevation, useGroundElevation: config.useGroundElevation, showUnitList: true, showUnitShape: true, showDirections: false, showPath: false, camera: config.camera, mobileCamera: config.mobileCamera, renameAmenities: config.renameAmenities ? config.renameAmenities : null, shadowModeUnitShape: config.shadowModeUnitShape ? config.shadowModeUnitShape : { fillColor: '#ffffff', fillOpacity: 1.0, }, neighborModeUnitShape: config.neighborModeUnitShape ? config.neighborModeUnitShape : { fillColor: '#D8D7D4', fillOpacity: 1.0, }, unitShape: config.unitShape ? config.unitShape : { fillColor: '#DDE3E0', fillOpacity: 1.0, strokeWeight: 1.0, strokeOpacity: 0.5, strokeColor: '#000000', ...unitShape_ }, selectedUnitShape: config.selectedUnitShape ? config.selectedUnitShape : { fillColor: '#A6671D', fillOpacity: 1.0, strokeWeight: 1.0, strokeOpacity: 1.0, strokeColor: '#ffffff', ...selectedUnitShape_ }, selectableUnitShape: config.selectableUnitShape ? config.selectableUnitShape : { fillColor: '#24453E', fillOpacity: 1.0, strokeWeight: 1.0, strokeOpacity: 1.0, strokeColor: '#ffffff', ...selectableUnitShape_ }, satelliteModeUnitShape: config.satelliteModeUnitShape ? config.satelliteModeUnitShape : { fillColor: '#ffffff', fillOpacity: 1.0, }, neighborShape: config.neighborShape, immersiveModeUnitShape: config.immersiveModeUnitShape, poiShape: config.poiShape, hoverUnitShape: hoverUnitShape_ ? hoverUnitShape_ : null, // mobileUnitShape: { // fillColor: '#ffffff', // fillOpacity: 0.2, // strokeWeight: 0.5, // strokeOpacity: 0.2, // strokeColor: '#000000', // } }; } var BeansMiddleBurg = function() { }; function beansUrlParameter(sParam) { var sPageURL = window.location.search.substring(1), sURLVariables = sPageURL.split('&'), sParameterName, i; for (i = 0; i < sURLVariables.length; i++) { sParameterName = sURLVariables[i].split('='); if (sParameterName[0] === sParam) { return sParameterName[1] === undefined ? true : decodeURIComponent(sParameterName[1]); } } } BeansMiddleBurg.prototype.getConfigFromUrl = function(urlFromRequest) { var canonicalUrl = urlFromRequest ? urlFromRequest : window.location.hostname; if (beansUrlParameter('canonicalUrl')) { canonicalUrl = beansUrlParameter('canonicalUrl'); } var baseConfig = getBaseConfig(canonicalUrl); var config = {}; config["www.mosbycitrusridge.com"] = { address: "100 Orlando Breeze Cir, Davenport, FL", backgroundImage: { src: '/mapswidget/prettymaps/mosby.png', width: '1000px', height: '810px', position: { lat: 28.343095057340342, lng: -81.67568988402064, lat2: 28.341055057340342, lng2: -81.67273688402064 } }, initialPosition: { lat: 28.342055057340342, lng: -81.67427788402064, mobile: { lat: 28.342255057340342, lng: -81.67427788402064 } }, numbersConfig: { size: 8.5, convert: (str) => { if (!str) { return str; } return str; }, colorFn: (a, raw, whatIsItFor) => { return '#000000'; } }, filters: { bed: { name: 'Bedrooms', values: [ {type: 'all', name: 'Any'}, {type: 'range', value1: '0', value2: '2', name: '1BR'}, {type: 'range', value1: '2', value2: '3', name: '2BR'}, {type: 'min', value1: '3', name: '3BR+'} ] }, sqft: { name: 'Area', values: [ {type: 'all', name: 'Any'}, {type: 'range', value1: '0', value2: '500', name: '0-500'}, {type: 'range', value1: '500', value2: '1000', name: '500-1000'}, {type: 'min', value1: '1000', name: '1000+'} ] }, floorplan: { name: 'Floorplan', values: [ {type: 'all', name: 'Any'}, {type: 'string', value: 'A1', name: 'A1'}, {type: 'string', value: 'A2', name: 'A2'}, {type: 'string', value: 'B1', name: 'B1'}, {type: 'string', value: 'B2', name: 'B2'}, {type: 'string', value: 'B2m1', name: 'B2m1'}, {type: 'string', value: 'B3', name: 'B3'}, {type: 'string', value: 'C1', name: 'C1'}, ] } }, showAllBuildingShapes: true, buildingShape: { fillColor: '#836539', fillOpacity: 1.0, strokeWeight: 8.0, strokeColor: '#ffffff', strokeOpacity: 1.0 }, initialHeading: 0, zoom: 18.6, locationUrl: 'g5-cl-1nyvqvzwds-middleburg-real-estate-partners-middleburg-management-llc-multi-domain-orlando-fl', }; config["www.hamletatmidcity.com"] = { address: "1044 Old Monrovia NW Rd, Huntsville, AL", backgroundImage: { src: '/mapswidget/prettymaps/midcity.png', width: '3212px', height: '1368px', position: { lat: 34.749970670183726, // decrease to move down lng: -86.66500385818806, // decrease to move right lat2: 34.74317624303932, lng2: -86.66150942858271 } }, initialPosition: { lat: 34.74659478379334, lng: -86.66316346982872, mobile: { lat: 34.744928259789006, lng: -86.66306376549107 } }, numbersConfig: { size: 12, xOffset: 10, yOffset: -2, convert: (str) => { if (str.endsWith('-')) { str = str.substring(0, str.length - 1); } return str; }, colorFn: (a, raw, whatIsItFor) => { return '#000000'; } }, initialHeading: -90, locationUrl: 'g5-cl-1nscvnws06-middleburg-real-estate-partners-middleburg-management-llc-multi-domain-huntsville-al', }; config["www.hamletwildlight.com"] = { address: "305 Whitby Dr, Yulee, FL", backgroundImage: { src: '/mapswidget/prettymaps/wildlight.png', width: '6000px', height: '2763px', position: { lat: 30.63803861305308, lng: -81.64886497196759, lat2: 30.63540661305308, lng2: -81.642181971967591 } }, initialPosition: { lat: 30.63656661305308, lng: -81.64551197196759, mobile: { lat: 30.63656661305308, lng: -81.64551197196759 } }, unitTransformer: (bldg, unit) => { if (bldg && bldg.toLowerCase() === 'wes') { bldg = 'BA'; } else if (bldg && bldg.toLowerCase() === 'ba') { bldg = 'BN'; } else if (bldg && bldg.length > 2) { bldg = bldg.substring(0, 2); } if (!bldg) { return unit; } else { return bldg.toUpperCase() + unit; } }, numbersConfig: { size: 24, convert: (str) => { if (!str) { return str; } if (str.endsWith('-')) { str = str.substring(0, str.length - 1); } if (str.match(/^[A-Z][A-Z][0-9]+/)) str = str.replace(/[A-Za-z]+/, ''); return str; }, colorFn: (a, raw, whatIsItFor) => { return '#000000'; } }, initialHeading: 0, zoom: 18, locationUrl: 'g5-cl-1nyvqvzwdt-middleburg-real-estate-partners-middleburg-management-llc-multi-domain-yulee-fl', }; if (config[canonicalUrl]) { return {...baseConfig, ...config[canonicalUrl]}; } return baseConfig; } BeansMiddleBurg.prototype.checkAndGetData = function(addressFromRequest) { var so = this; if (beansUrlParameter('getData') === 'true' || window.location.hash === '#/getData') { } } BeansMiddleBurg.prototype.render = function(be1, urlFromRequest) { var so = this; var config = so.getConfigFromUrl(urlFromRequest); var address = config.address; var DONE = 4; // readyState 4 means the request is done. var OK = 200; // status 200 is a successful return. var xhr = new XMLHttpRequest(); // xhr.open('POST', 'https://inventory.g5marketingcloud.com/graphql'); xhr.open('GET', 'https://www.beans.ai/mapswidget/client/graphql.php?property_id=' + config.canonicalUrl + '&location=' + config.locationUrl + '&force=' + (beansUrlParameter('force') ? beansUrlParameter('force') : '')); xhr.onreadystatechange = function() { if (xhr.readyState !== DONE || xhr.status !== OK) { return; } json = JSON.parse(xhr.responseText); if (json.data && json.data.apartmentComplex && json.data.apartmentComplex.floorplans) { var floorplans = []; for (var i = 0; i < json.data.apartmentComplex.floorplans.length; i++) { floorplans.push(json.data.apartmentComplex.floorplans[i]); } var recurse = function(floorplans, unitsArr, callback) { if (floorplans.length === 0) { callback(unitsArr); return; } var xhrI = new XMLHttpRequest(); xhrI.open('GET', 'https://www.beans.ai/mapswidget/client/graphqlfp.php?property_id=' + config.canonicalUrl + '&location=' + config.locationUrl + '&floorplan_id=' + floorplans[0].id + '&force=' + (beansUrlParameter('force') ? beansUrlParameter('force') : '')); xhrI.onreadystatechange = function() { if (xhrI.readyState !== DONE || xhrI.status !== OK) { return; } var jsonI = JSON.parse(xhrI.responseText); if (jsonI.data && jsonI.data.units) { for (var i = 0; i < jsonI.data.units.length; i++) { var unitObj = jsonI.data.units[i]; var lnk = unitObj.callToActions && unitObj.callToActions.length ? unitObj.callToActions[0].url : ''; lnk = lnk.replace('{widget.moveInDate.YYYY-MM-DD}', unitObj.availabilityDate ? unitObj.availabilityDate : ''); var unit = unitObj.name; if (unitObj.building && unitObj.building !== 'N/A') { unit = unitObj.building + "-" + unit; } if (config.unitTransformer) { unit = config.unitTransformer(unitObj.building, unitObj.name); } if (lnk && lnk.trim().indexOf('http') !== 0 && lnk.trim().indexOf('/') !== 0) { lnk = 'https://' + config.canonicalUrl + '/' + lnk.trim(); } unitsArr.push({ unit: unit, bed: floorplans[0].beds, bath: floorplans[0].baths, floorplan: floorplans[0].name, sqft: Number(unitObj.sqftDisplay.replace(/[^0-9\.]/, '')), rent: unitObj.prices && unitObj.prices.length ? unitObj.prices[0].value : 0, availability: unitObj.availabilityDate ? unitObj.availabilityDate : '', link: lnk, floorplanImg: floorplans[0].imageUrl }); } } floorplans.splice(0, 1); recurse(floorplans, unitsArr, callback); }; xhrI.send(); }; recurse(floorplans, [], (unitsArr) => { var addressAndUnitWithOptions = convertUnitsArr(config, unitsArr, true); for (var i = 0; i < addressAndUnitWithOptions.length; i++) { addressAndUnitWithOptions[i].options.markers = { display: false }; addressAndUnitWithOptions[i].options.poi = [{ name: 'ALL', display: false }]; if (addressAndUnitWithOptions[i].options.onClickData.bed == 1) { addressAndUnitWithOptions[i].unitShape = { fillColor: '#b2e0dc' }; } if (addressAndUnitWithOptions[i].options.onClickData.bed == 2) { addressAndUnitWithOptions[i].unitShape = { fillColor: '#e0dcb2' }; } if (addressAndUnitWithOptions[i].options.onClickData.bed == 3) { addressAndUnitWithOptions[i].unitShape = { fillColor: '#dcb2e0' }; } } var displayOptions = getDisplayOptions( config, { fillColor: '#FFFFFF', fillOpacity: 1.0, strokeWeight: 1.0, strokeOpacity: 0.5, strokeColor: '#000000', }, // Default color { fillColor: '#CDA349', strokeWeight: 0.5, strokeColor: '#000000', }, // Selected color { fillColor: '#6DC4BC', strokeWeight: 0.5, strokeColor: '#000000', }, // Selectable color { fillColor: '#CDA349', strokeWeight: 0.5, strokeColor: '#000000', } // Hover color ); be1.render( "body-inner-1", "f69590bd0136485:6365656365353764663338313436343561643731", addressAndUnitWithOptions, { hideNavigateButton: true, hideMyLocationButton: true }, { beansMapType: 'BANVAS', mapStyle: '1ba83bf15ffbb851', initialMap: "STREET", hideFloorInPreview: true, hideRotateControl: true, hideZoomControl: true, hideSatelliteButton: true, hideScaleControl: true, inlineClickData: true, modernBeansCard: true, outsideButtons: true, showSeparateFacilitiesCard: false, showNumbers: true, numbersConfig: config.numbersConfig, filters: config.filters, showAllBuildingShapes: config.showAllBuildingShapes, buildingShape: config.buildingShape, backgroundImage: config.backgroundImage, initialHeading: config.initialHeading, initialPosition: config.initialPosition, initialZoom: config.initialZoom, minZoom: 17, ...displayOptions } ); }); } }; xhr.send(); }