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 BeansCalAmerican = function() { }; BeansCalAmerican.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.casamedliving.com"] = { camera: {tilt: 62.33199660253333, heading: 318.02633695840893, position: {x: -117.30939028698711, y: 34.050074246598975, z: 188.2393636982888}}, address: "1043 Santo Antonio Dr, Colton, CA", locationUrl: 'g5-cl-1o495t9og3-cal-american-corporation-colton-ca', }; config["www.foothillcourtyard.com"] = { address: "130 Foothill Dr, Vista, CA", locationUrl: 'g5-cl-1o48xfy76d-cal-american-corporation-vista-ca', }; config["www.rentalpineterrace.com"] = { camera: {tilt: 59.045329417624785, heading: 317.98126856043314, position: {x: -81.68874803579789, y: 30.005568297808843, z: 489.9495843304321}}, address: "1408 N Orange Ave, Green Cove Springs, FL", locationUrl: 'g5-cl-1o48xflc7m-cal-american-corporation-canoga-park-ca', }; config["www.rent-terraceoaks.com"] = { camera: {tilt: 54.76813357029738, heading: 56.689498737872256, position: {x: -117.47854902554398, y: 33.90420901049452, z: 130.03564623743296}}, address: "1925 E Washington St, Colton, CA", locationUrl: 'g5-cl-1o48xgucl8-cal-american-corporation-colton-ca', }; config["www.rent-sierragardens.com"] = { camera: {tilt: 54.768133570403926, heading: 56.689498737917724, position: {x: -117.47854902554398, y: 33.90420901049452, z: 130.03564623743296}}, address: "3915 La Sierra Ave, Riverside, CA", locationUrl: 'g5-cl-1o48xgjmsa-cal-american-corporation-riverside-ca', }; config["www.desertfountains-palmdesert.com"] = { camera: {tilt: 60.856678115225364, heading: 221.91309039401654, position: {x: -116.30417036894596, y: 33.74797907995759, z: 392.79418997932225}}, address: "42125 Idaho St, Palm Desert, CA", locationUrl: 'g5-cl-1o48xfrroz-cal-american-corporation-palm-desert-ca', }; config["www.rentslauson.com"] = { address: "4707 S Slauson Ave, Culver City, CA", locationUrl: 'g5-cl-1o48xgq29n-cal-american-corporation-culver-city-ca', }; config["www.lakewoodatlakemerced.com"] = { camera: {tilt: 61.943517081167705, heading: 243.75758891063964, position: {x: -122.49251493509061, y: 37.717821221683174, z: 226.169952374883}}, address: "511 John Muir Dr, San Francisco, CA", locationUrl: 'g5-cl-1o48xgd7aw-cal-american-corporation-san-francisco-ca', }; config["www.rent-villasonthegreen.com"] = { camera: {tilt: 56.3519931071847, heading: 309.2755746271892, position: {x: -116.31580947821705, y: 33.73260031751541, z: 180.14681072719395}}, address: "77120 California Dr, Palm Desert, CA", locationUrl: 'g5-cl-1o48xgwhr1-cal-american-corporation-palm-desert-ca', }; config["www.rent-goldenoaks.com"] = { camera: {tilt: 49.55229149253758, heading: 57.123673928194975, position: {x: -117.42018125316183, y: 33.94337132215364, z: 180.87636560108513}}, address: "7756 California Ave, Riverside, CA", locationUrl: 'g5-cl-1o48xg2hhy-cal-american-corporation-riverside-ca', }; config["www.rent-desertoasis.com"] = { camera: {tilt: 48.60305737923526, heading: 270.38305604489346, position: {x: -116.30314433855092, y: 33.757126579806744, z: 290.0337547361851}}, address: "77777 Country Club Dr, Palm Desert, CA", locationUrl: 'g5-cl-1o48xftwus-cal-american-corporation-palm-desert-ca', }; config["www.rentpeppertreeplace.com"] = { camera: {tilt: 52.70917563111171, heading: 287.65892313335723, position: {x: -117.45296584501793, y: 33.94692389165634, z: 334.35339305736125}}, address: "7911 Arlington Ave, Riverside, CA", locationUrl: 'g5-cl-1o48xgfcgp-cal-american-corporation-riverside-ca', }; config["www.rent-gramercy.com"] = { camera: {tilt: 57.585913222048596, heading: 271.50945093931114, position: {x: -117.12849212410187, y: 32.8036835998969, z: 240.07265748176724}}, address: "9054 Gramercy Dr, San Diego, CA", locationUrl: 'g5-cl-1o48xg6rtj-cal-american-corporation-san-diego-ca', }; if (config[canonicalUrl]) { return {...baseConfig, ...config[canonicalUrl]}; } return baseConfig; } BeansCalAmerican.prototype.checkAndGetData = function(addressFromRequest) { var so = this; if (beansUrlParameter('getData') === 'true' || window.location.hash === '#/getData') { } } BeansCalAmerican.prototype.render = function(be1, urlFromRequest, renderType) { var so = this; var config = so.getConfigFromUrl(urlFromRequest); var address = config.address; var renderFn = function(config, unitsArr) { var addressAndUnitWithOptions = convertUnitsArr(config, unitsArr, true); var displayOptions = getDisplayOptions( config, { fillColor: '#DDE3E0', fillOpacity: 0.25, strokeWeight: 0.5, strokeOpacity: 0.3, strokeColor: '#000000' }, // Default color { fillColor: '#A6671D', }, // Selected color { fillColor: '#24453E', } // Selectable color ); if (!renderType || renderType.toLowerCase() === '3d') { be1.render( "body-inner-1", "91fdc15d3d3a497:6436366366623438643134323464363339323962", addressAndUnitWithOptions, { hideNavigateButton: true, hideMyLocationButton: true }, { beansMapType: 'ESRI', initialMap: 'STREET', prettyLayer: config.prettyLayer ? config.prettyLayer : '', // "https://basemaps.arcgis.com/arcgis/rest/services/OpenStreetMap_v2/VectorTileServer" modernButtons: true, modernBeansCard: displayOptions.hideBeansCard ? false : true, outsideButtons: true, showCompass: true, showFullScreenMode: false, showNeighbors: false, showPOIButton: true, showSeparateFacilitiesCard: true, immersiveConfig: config.immersiveConfig, showImmersive: config.showImmersive, showImmersiveLight: config.showImmersiveLight, showImmersiveOnLoad: config.showImmersiveOnLoad, overrideBaseHeightFn: config.overrideBaseHeightFn, overrideHeight: config.overrideHeight ? config.overrideHeight : 0, overrideHeightFn: config.overrideHeightFn, renameAmenities: config.renameAmenities ? config.renameAmenities : null, poiShape: config.poiShape, initialTilt: 30, initialZ: 400, initialHeading: 270, initialPosition: { address: address }, show2DButton: true, event2D: () => { document.getElementById('body-inner-2').style.visibility = 'visible'; document.getElementById('body-inner-1').style.visibility = 'hidden'; }, ...displayOptions } ); } else { if (displayOptions.unitShape) { displayOptions.unitShape.fillOpacity = 1.0; } be1.render( "body-inner-2", "91fdc15d3d3a497:6436366366623438643134323464363339323962", addressAndUnitWithOptions, { hideNavigateButton: true, hideMyLocationButton: true }, { initialMap: "STREET", modernBeansCard: displayOptions.hideBeansCard ? false : true, hideFloorSelector: false, hideRotateControl: true, hideSatelliteButton: true, hideShadow: true, outsideButtons: true, modernButtons: true, showNeighbors: false, showPOIButton: false, showSeparateFacilitiesCard: true, showNumbers: true, numbersConfig: config.numbersConfig, showBuildingShape: config.showBuildingShape, backgroundImage: config.backgroundImage, show3DButton: true, event3D: () => { document.getElementById('body-inner-2').style.visibility = 'hidden'; document.getElementById('body-inner-1').style.visibility = 'visible'; }, unitsToExclude: config.unitsToExclude, ...displayOptions } ); } }; var json = { "operationName": "ApartmentComplex", "variables": { "locationUrn": config.locationUrl, "moveInDate": "", "unitsLimit": 100 }, "query": "query ApartmentComplex($floorplanId: Int, $beds: [Int!], $baths: [Float!], $sqft: Int, $startRate: Int, $endRate: Int, $floorplanGroupId: [Int!], $amenities: [Int!], $locationUrn: String!, $moveInDate: String!, $unitsLimit: Int, $dateFlexibility: Int) {\n apartmentComplex(locationUrn: $locationUrn) {\n id\n showUnits\n showNumberOfAvailableUnits\n showLeaseTerms\n showBestValue\n floorplanGroupDescription\n pricingDisclaimer\n hasAllowableMoveInDays\n hasApartmentSpecials\n hasFloorplanSpecials\n singularUnitLabel\n firstAvailableMoveInDate\n lastAvailableMoveInDate\n availabilityInDays\n brochurePdfLabel\n virtualTourLabel\n floorplans(id: $floorplanId, beds: $beds, baths: $baths, sqft: $sqft, startRate: $startRate, endRate: $endRate, floorplanGroupId: $floorplanGroupId, amenities: $amenities, moveInDate: $moveInDate, dateFlexibility: $dateFlexibility) {\n id\n altId\n externalIds\n name\n totalAvailableUnits\n unitsAvailableByFilters(moveInDate: $moveInDate, dateFlexibility: $dateFlexibility, amenities: $amenities, minPrice: $startRate, maxPrice: $endRate, limit: $unitsLimit)\n allowableMoveInDays\n beds\n baths\n sqft\n sqftDisplay\n rateDisplay\n startingRate\n endingRate\n imageUrl\n imageUrls\n locationCode\n virtualImageUrl\n depositDisplay\n floorplanGroupIds\n brochurePdf\n hasSpecials\n floorplanSpecials {\n id\n name\n __typename\n }\n floorplanAmenities {\n id\n name\n __typename\n }\n floorplanCta {\n name\n url\n actionType\n redirectUrl\n redirectUrlActionType\n ownerType\n vendorKey\n redirectVendorKey\n isExternal\n __typename\n }\n __typename\n }\n floorplanFilters {\n beds\n baths\n sqftMax\n sqftMin\n lastAvailableDate\n floorplanGroups {\n id\n description\n __typename\n }\n amenities {\n id\n name\n __typename\n }\n __typename\n }\n __typename\n }\n}\n" }; 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('GET', 'https://www.beans.ai/mapswidget/client/graphql.php?property_id=' + config.canonicalUrl + '&location=' + config.locationUrl + '&force=' + (beansUrlParameter('force') ? beansUrlParameter('force') : '')); xhr.setRequestHeader('Content-Type', 'application/json'); xhr.send(JSON.stringify(json)); xhr.onreadystatechange = function() { if (xhr.readyState !== DONE || xhr.status !== OK) { return; } var json; if (xhr.responseText) { json = JSON.parse(xhr.responseText); } else { json = {}; } 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 unitsArr = []; var proms = []; for (var i = 0; i < floorplans.length; i++) { var floorplan = floorplans[i]; proms.push(new Promise(function (resolve, reject) { var jsonI = { "operationName": "Units", "variables": { "locationUrn": config.locationUrl, "floorplanId": floorplan.id, "moveInDate": "", "limit": 100 }, "query": "query Units($floorplanId: Int!, $limit: Int, $moveInDate: String, $locationUrn: String, $altId: String, $amenities: [Int!], $id: Int, $dateFlexibility: Int, $minPrice: Float, $maxPrice: Float) {\n units(floorplanId: $floorplanId, limit: $limit, moveInDate: $moveInDate, locationUrn: $locationUrn, altId: $altId, amenities: $amenities, id: $id, dateFlexibility: $dateFlexibility, minPrice: $minPrice, maxPrice: $maxPrice) {\n id\n externalId\n parentExternalId\n name\n displayName\n building\n sqftDisplay\n availabilityDate\n specials {\n id\n name\n term\n amount\n __typename\n }\n lastAvailableMoveInDate\n prices {\n id\n priceType\n formattedPrice\n value\n __typename\n }\n amenities {\n id\n name\n __typename\n }\n callToActions {\n name\n url\n actionType\n redirectUrl\n redirectUrlActionType\n ownerType\n vendorKey\n redirectVendorKey\n isExternal\n __typename\n }\n __typename\n }\n}\n" } var xhrI = new XMLHttpRequest(); xhrI.open('GET', 'https://www.beans.ai/mapswidget/client/graphqlfp.php?property_id=' + config.canonicalUrl + '&location=' + config.locationUrl + '&floorplan_id=' + floorplan.id + '&force=' + (beansUrlParameter('force') ? beansUrlParameter('force') : '')); xhrI.setRequestHeader('Content-Type', 'application/json'); xhrI.send(JSON.stringify(jsonI)); xhrI.onreadystatechange = function(floorplan) { return function() { if (xhrI.readyState !== DONE || xhrI.status !== OK) { return; } var jsonI; if (xhrI.responseText) { jsonI = JSON.parse(xhrI.responseText); } else { jsonI = {}; } 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 : ''); unitsArr.push({ unit: unitObj.name, bed: floorplan.beds, bath: floorplan.baths, floorplan: floorplan.name, sqft: unitObj.sqftDisplay ? Number(unitObj.sqftDisplay.replace(/[^0-9\.]/, '')) : floorplan.sqft, rent: unitObj.prices && unitObj.prices.length ? unitObj.prices[0].value : 0, availability: unitObj.availabilityDate ? unitObj.availabilityDate : '', link: lnk, floorplanImg: floorplan.imageUrl }); } } resolve(); }; }(floorplan); })); } Promise.all(proms).then((values) => { renderFn(config, unitsArr); }); } else { renderFn(config, []); } }; } BeansCalAmerican.prototype.render2 = function(be1, urlFromRequest, renderType) { var so = this; var config = so.getConfigFromUrl(urlFromRequest); var address = config.address; var json = { "operationName": "ApartmentComplex", "variables": { "locationUrn": config.locationUrl, "moveInDate": "", "unitsLimit": 9 }, "query": "query ApartmentComplex($floorplanId: Int, $beds: [Int!], $baths: [Float!], $sqft: Int, $startRate: Int, $endRate: Int, $floorplanGroupId: [Int!], $amenities: [Int!], $locationUrn: String!, $moveInDate: String!, $unitsLimit: Int, $dateFlexibility: Int) {\n apartmentComplex(locationUrn: $locationUrn) {\n id\n showUnits\n showNumberOfAvailableUnits\n showLeaseTerms\n showBestValue\n floorplanGroupDescription\n pricingDisclaimer\n hasAllowableMoveInDays\n hasApartmentSpecials\n hasFloorplanSpecials\n singularUnitLabel\n firstAvailableMoveInDate\n lastAvailableMoveInDate\n availabilityInDays\n brochurePdfLabel\n virtualTourLabel\n floorplans(id: $floorplanId, beds: $beds, baths: $baths, sqft: $sqft, startRate: $startRate, endRate: $endRate, floorplanGroupId: $floorplanGroupId, amenities: $amenities, moveInDate: $moveInDate, dateFlexibility: $dateFlexibility) {\n id\n altId\n externalIds\n name\n totalAvailableUnits\n unitsAvailableByFilters(moveInDate: $moveInDate, dateFlexibility: $dateFlexibility, amenities: $amenities, minPrice: $startRate, maxPrice: $endRate, limit: $unitsLimit)\n allowableMoveInDays\n beds\n baths\n sqft\n sqftDisplay\n rateDisplay\n startingRate\n endingRate\n imageUrl\n imageUrls\n locationCode\n virtualImageUrl\n depositDisplay\n floorplanGroupIds\n brochurePdf\n hasSpecials\n floorplanSpecials {\n id\n name\n __typename\n }\n floorplanAmenities {\n id\n name\n __typename\n }\n floorplanCta {\n name\n url\n actionType\n redirectUrl\n redirectUrlActionType\n ownerType\n vendorKey\n redirectVendorKey\n isExternal\n __typename\n }\n __typename\n }\n floorplanFilters {\n beds\n baths\n sqftMax\n sqftMin\n lastAvailableDate\n floorplanGroups {\n id\n description\n __typename\n }\n amenities {\n id\n name\n __typename\n }\n __typename\n }\n __typename\n }\n}\n" }; 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.setRequestHeader('Content-Type', 'application/json'); xhr.send(JSON.stringify(json)); 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) { console.log(unitsArr); callback(unitsArr); return; } var jsonI = { "operationName": "Units", "variables": { "locationUrn": config.locationUrl, "floorplanId": floorplans[0].id, "moveInDate": "", "limit": 9 }, "query": "query Units($floorplanId: Int!, $limit: Int, $moveInDate: String, $locationUrn: String, $altId: String, $amenities: [Int!], $id: Int, $dateFlexibility: Int, $minPrice: Float, $maxPrice: Float) {\n units(floorplanId: $floorplanId, limit: $limit, moveInDate: $moveInDate, locationUrn: $locationUrn, altId: $altId, amenities: $amenities, id: $id, dateFlexibility: $dateFlexibility, minPrice: $minPrice, maxPrice: $maxPrice) {\n id\n externalId\n parentExternalId\n name\n displayName\n building\n sqftDisplay\n availabilityDate\n specials {\n id\n name\n term\n amount\n __typename\n }\n lastAvailableMoveInDate\n prices {\n id\n priceType\n formattedPrice\n value\n __typename\n }\n amenities {\n id\n name\n __typename\n }\n callToActions {\n name\n url\n actionType\n redirectUrl\n redirectUrlActionType\n ownerType\n vendorKey\n redirectVendorKey\n isExternal\n __typename\n }\n __typename\n }\n}\n" } var xhrI = new XMLHttpRequest(); xhrI.open('POST', 'https://inventory.g5marketingcloud.com/graphql'); xhrI.setRequestHeader('Content-Type', 'application/json'); xhrI.send(JSON.stringify(jsonI)); 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 : ''); unitsArr.push({ unit: unitObj.name, bed: floorplans[0].beds, bath: floorplans[0].baths, floorplan: floorplans[0].name, sqft: unitObj.sqftDisplay ? Number(unitObj.sqftDisplay.replace(/[^0-9\.]/, '')) : 0, 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); }; }; recurse(floorplans, [], (unitsArr) => { var addressAndUnitWithOptions = convertUnitsArr(config, unitsArr, true); var displayOptions = getDisplayOptions( config, { fillColor: '#DDE3E0', fillOpacity: 0.25, strokeWeight: 1.0, strokeOpacity: 0.5, strokeColor: '#000000' }, // Default color { fillColor: '#A6671D', }, // Selected color { fillColor: '#24453E', } // Selectable color ); if (!renderType || renderType.toLowerCase() === '3d') { be1.render( "body-inner-1", "91fdc15d3d3a497:6436366366623438643134323464363339323962", addressAndUnitWithOptions, { hideNavigateButton: true, hideMyLocationButton: true }, { beansMapType: 'ESRI', initialMap: 'STREET', prettyLayer: config.prettyLayer ? config.prettyLayer : '', // "https://basemaps.arcgis.com/arcgis/rest/services/OpenStreetMap_v2/VectorTileServer" modernButtons: true, modernBeansCard: displayOptions.hideBeansCard ? false : true, outsideButtons: true, showCompass: true, showFullScreenMode: false, showNeighbors: false, showPOIButton: true, showSeparateFacilitiesCard: true, immersiveConfig: config.immersiveConfig, showImmersive: config.showImmersive, showImmersiveLight: config.showImmersiveLight, showImmersiveOnLoad: config.showImmersiveOnLoad, overrideBaseHeightFn: config.overrideBaseHeightFn, overrideHeight: config.overrideHeight ? config.overrideHeight : 0, overrideHeightFn: config.overrideHeightFn, renameAmenities: config.renameAmenities ? config.renameAmenities : null, poiShape: config.poiShape, initialTilt: 30, initialZ: 400, initialHeading: 270, initialPosition: { address: address }, show2DButton: true, event2D: () => { document.getElementById('body-inner-2').style.visibility = 'visible'; document.getElementById('body-inner-1').style.visibility = 'hidden'; }, ...displayOptions } ); } else { if (displayOptions.unitShape) { displayOptions.unitShape.fillOpacity = 1.0; } be1.render( "body-inner-2", "91fdc15d3d3a497:6436366366623438643134323464363339323962", addressAndUnitWithOptions, { hideNavigateButton: true, hideMyLocationButton: true }, { initialMap: "STREET", modernBeansCard: displayOptions.hideBeansCard ? false : true, hideFloorSelector: false, hideRotateControl: true, hideSatelliteButton: true, hideShadow: true, outsideButtons: true, modernButtons: true, showNeighbors: false, showPOIButton: false, showSeparateFacilitiesCard: true, showNumbers: true, numbersConfig: config.numbersConfig, showBuildingShape: config.showBuildingShape, backgroundImage: config.backgroundImage, show3DButton: true, event3D: () => { document.getElementById('body-inner-2').style.visibility = 'hidden'; document.getElementById('body-inner-1').style.visibility = 'visible'; }, unitsToExclude: config.unitsToExclude, ...displayOptions } ); } }); } }; }