{"version":3,"file":"apartment.min.js","names":["ils","PreferredMoveInType","constructor","item","Object","assign","this","showcase","FormType","ViewType","ProgressStep","stepName","parentForms","order","isComplete","StepName","ko","observable","IsComplete","ParentForms","Order","ForceHide","ForceShow","IsVisible","formType","showRoommates","hasRoommates","RoommatesQuestion","some","pf","Roommates","StepTiming","PageTiming","subscribe","newVal","LeadFormStepManager","_a","_b","setFormState","StartTrackingForNewStep","activeIndex","ActiveViews","findIndex","val","idx","steps","BackStepVisible","SubmitButtonText","length","ApplyNow","NameInfo","MainText","CommunityName","GetMoreInfo","Pretext","CheckAvailability","ScheduleTour","TourDate","ContactInfo","ActiveView","FloorPlans","Comments","JustMe","HasRoommates","NeedRoommate","ShowRoommates","ShowRoommatesOption","ProgressSteps","observableArray","HasRoommateQuestionError","HasStartedForm","isActiveSorting","progressSteps","value","push","step","sort","l","r","forEach","ShowApplicationLinkButton","pureComputed","ActiveStep","arrayChangeVal","filter","find","NextStep","i","BackStep","IconHtml","html","getMoreInfoIcons","scheduleTourIcons","checkAvailabilityIcons","applyNowIcons","defaultIcons","join","activeStepIndex","allSteps","NavigateToNextStep","viewModel","ReadyToSubmit","NavigateBackOneStep","dx","FormClass","NavigateTo","progressStep","TurnOnStepTimeTracking","isFormActive","stopTracking","activeStep","startTracking","isCurrentlyTracking","isSiteLive","console","log","name","timeDuration","SendFormCompletionMetrics","submitHasBeenClicked","gaSendStepFormCompletion","ContactStepErrors","ProspectFormData","PrimaryGuest","GuestCardInfo","ContactTypeID","MoveInMonth","MoveInDay","SelectedFloorPlans","SubmitHasBeenClicked","RemovedRoommates","DateOfVisit","StepManager","PrimaryGuestErrors","validation","group","RoommatesErrors","deep","live","HasErrors","computed","IsFormValid","showAllMessages","hasErrors","AddRoommate","nextOrder","removedRoommate","pop","RoommateOrder","newRoommate","Roommate","GuestInfo","RequireEmailOrPhone","RemoveRoommate","RoommateLocalId","removed","remove","rm","Email","Phone","OnNext","isStepValid","EnableGuestValidation","guestNameErrors","GuestName","guestNameValid","validateObservable","allRoommates","indexesToRemove","OnBack","NavigateStepTo","FloorPlanInfo","ImageUrl","Image","toLowerCase","indexOf","imageDomain","ImageSrc","NumberBedroomsText","NumberBedrooms","NumberBedroomsLongText","Pricing","Price","AddCommas","PriceByUnit","PriceChangeExtra","PriceChange","Math","abs","toFixed","Specials","Details","specialsSplit","split","HasDetails","HasMorePhotos","$","FloorPlanID","HasMoreVirtualTours","HasMorePhotoText","InitialFloorPlanCarouselImage","iLSHelpers","Helpers","FirstName","LastName","MoveInDate","RenterCommentsAndQuestions","cdpSessionId","MissingEmailAndPhone","emailAddress","phoneNumber","rules","required","validator","extend","message","maxLength","onlyIf","email","phoneiLS","trim","fullNameiLS","newValue","nameSplit","namesLength","first","map","index","array","toTitleCase","last","formatPhone","data","event","currentTarget","keyCode","formattedPhone","allowExtensions","includeParenthesis","allowInternational","formatGuestName","formattedName","toJsObject","self","NaN","parseInt","toString","getRandomInt","RoommateTitle","CloseRoommate","ProspectForm","itemName","startTime","endTime","Date","timeSpent","loadApartmentMapScripts","callback","googleDynamicMapsIsLoading","googleMapsScript","document","createElement","infoBoxScript","setAttribute","googleMapsKey","onload","body","appendChild","mapCenter","google","maps","LatLng","googleMapsLat","googleMapsLong","googleMapsApiLoaded","googleDynamicMapsLoaded","infoBoxLoaded","loadApartmentStaticMapScripts","ApartmentMaps","trackedAdViews","trackedImpressions","primaryGuest","floorPlanLoaded","activeTabHash","sessionRoommates","communityUrl","globalThis","currentURL","currentTiming","windowInactiveTime","pageTimings","isAutoScrolling","readMoreClicked","originalMoveInDate","init","insertMessages","messageTemplate","errorElementClass","errorsAsTitle","parseInputAttributes","messagesOnModified","decorateElementOnModified","decorateInputElement","parsedRoommates","ToggleSelectedFloorPlan","floorPlanID","inArray","utils","arrayFilter","BindPriceSlider","sliderElement","values","FloorPlanPrices","value1","priceMin","value2","priceMax","slider","range","min","max","create","ui","append","addClass","UnstackSliderLabels","priceSliderUpdateFilter","slide","handle","stop","FixHeightsAfterImagesLoaded","element","imagesLoaded","always","SetDynamicElements","parent","TrackTimeForNewTab","tabName","previousTiming","arrayFirst","SendTimings","hasRoles","trackTimingEvent","communityName","communityId","abTestOverview","setTabFromScrollPosition","targetHref","each","window","scrollTop","offset","top","id","attr","toggleClass","text","ActiveTabText","tabClickData","trackCDPTabClickEvent","BindBedroomSlider","googleStaticNeighborhoodMapLoaded","initializeStaticNeighborhoodMap","neighborhoodAdTypeID","TrackAdView","googleStaticCommunityMapLoaded","initializeStaticMap","clickData","clickTypeId","ClickType","FacebookFeed","TrackClickData","LocalNews","impressionID","ajax","type","url","baseUrl","JSON","stringify","contentType","dataType","amenityAdTypeID","takeActionOnTab","navigateToCheckAvailability","switchTabs","e","target","href","hasAttribute","tagName","match","parentElement","parentHref","getAttribute","hrefHashId","documentElement","animate","breakpoint","querySelectorAll","el","classList","PhotoIframeClick","targetElem","listElem","closest","hasClass","is","photoModal","modalExtra","modalNav","galleryInfo","gallery","prop","hasVirtualTour","SetModalBodyContent","toggle","galleryIndex","totalInGallery","replace","navigatePhotoModal","hide","modal","on","show","goToVirtualTour","galleryName","nextIndex","totalItems","modalBody","displayElement","vtUrl","Track3DxVirtualTourViewedEvent","FloorPlanBedrooms","bedroomMin","bedroomMax","FormatBedroomText","bedroomSliderUpdateFilter","minValue","maxValue","PriceMin","PriceMax","BedroomMin","BedroomMax","unstackTimeout","setTimeout","handleText","rightHandleLabel","removeClass","leftHandleLabel","css","leftHandleEnd","left","outerWidth","clearTimeout","numBeds","roommates","roommate","communityTitle","SubmittedContactTypes","HoursOpen","GetInfoButtonsVisible","IsApplyNowVisible","isApplyNowVisible","ApplyNowUrl","applyNowUrl","contactMenuHtml","getMoreInfoHtml","NeighborhoodMapContents","DirectionsMapContents","ClickedFeaturedCallToAction","PreferredMoveInTypes","PreferredMoveIn","ContactTitle","askQuestionText","tmpPrices","prices","a","b","floor","ceil","bedrooms","FiltersInUse","FilteredFloorPlans","fetch","showcaseItemID","method","then","response","content","catch","error","warn","checkAvailabilityClick","SubmitContactForm","json","MoveInTypes","customDateOption","opt","Name","startsWith","customDate","Id","Description","querySelector","moment","add","format","now","currentYear","year","nextYear","moveIn","isAfter","SubmitApplyNowForm","processTimeout","returnVal","stickyHeight","outerHeight","height","dateOfVisit","payloadData","firstName","lastName","phone","moveInDate","preferredMoveIn","comments","contactTypeID","floorPlanIDs","needsRoommate","jsonData","selectedFloorPlanNames","floorPlanId","floorPlan","fpx","headers","submitContactFormResponse","trackingData","aptsforConstants","getContactFormTypeFromId","unitType","unitTypes","Student","Conventional","numberOfRoommates","floorPlans","TrackContactSubmit","TrackShowcasePayPerClick","ppcActionType","TrackABConversion","abOverviewName","TrackABView","abTestVersion","ToggleContactMenuABTest","testCase","number","numberStr","substring","askQuestionMobile","contactTypeId","isFeaturedCallToAction","gaTrackFeaturedCallToAction","timeout","checkAvailability","currentFloorPlan","addEventListener","OnResize","style","width","offsetWidth","getElementsByClassName","activeElement","contains","src","applyBindings","success","tempFloorPlans","d","sourcePlan","VirtualTourUrl","VirtualTourMedia","URL","tempPlan","tooltip","googleOptimizeIsLoaded","timeInactive","setMilliseconds","getMilliseconds","off","blur","trackCommunityViewEvent","affix","bottom","link","contactMenu","contactOptions","click","margin","mapLink","directionAValue","directionAPlaceHolder","directionBValue","directionBPlaceHolder","residenceAddress","sAddr","dAddr","alert","Directions","directionsUrl","keyLeadData","keyLeadType","keyLeadTypes","directionsRequested","additionalData","trackKeyLead","open","GetDirections","date","dateValue","preventDefault","key","community","parentNode","trackCDPClickEvent","ScheduleTourNearbyCommunities","clickType","getClickTypeNameFromId","relatedData","textContent","iframeModal","iframe","loggedIn","floorPlanTimeout","positionTimeout","location","scheduleTour","variable","vars","search","pair","getQueryVariable","scheduleTourTimeout"],"sources":["apartment.js"],"mappings":"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","sourcesContent":["var ils;\n(function (ils) {\n class PreferredMoveInType {\n constructor(item) {\n if (!item) {\n item = {};\n }\n // Copy the contents of the passed in item using the native javascript `Object.assign(dest, source)`\n Object.assign(this, item);\n }\n }\n ils.PreferredMoveInType = PreferredMoveInType;\n})(ils || (ils = {}));\n\nvar ils;\n(function (ils) {\n let showcase;\n (function (showcase) {\n let FormType;\n (function (FormType) {\n FormType[\"GetMoreInfo\"] = \"Get More Info\";\n FormType[\"CheckAvailability\"] = \"Check Availability\";\n FormType[\"ScheduleTour\"] = \"Schedule a Tour\";\n FormType[\"ApplyNow\"] = \"Apply Now\";\n })(FormType = showcase.FormType || (showcase.FormType = {}));\n let ViewType;\n (function (ViewType) {\n ViewType[\"NameInfo\"] = \"Name Info\";\n ViewType[\"ContactInfo\"] = \"Contact Info\";\n ViewType[\"TourDate\"] = \"Tour Date\";\n ViewType[\"FloorPlans\"] = \"Floor Plans\";\n ViewType[\"RoommatesQuestion\"] = \"Roommates Question\";\n ViewType[\"Roommates\"] = \"List of Roommates\";\n ViewType[\"Comments\"] = \"Move-in Date and Comments\";\n })(ViewType = showcase.ViewType || (showcase.ViewType = {}));\n })(showcase = ils.showcase || (ils.showcase = {}));\n class ProgressStep {\n constructor(stepName, parentForms, order, isComplete) {\n this.StepName = ko.observable(stepName);\n this.IsComplete = ko.observable(isComplete);\n this.ParentForms = parentForms;\n this.Order = ko.observable(order);\n this.ForceHide = ko.observable(false);\n this.ForceShow = ko.observable(false);\n this.IsVisible = (formType, showRoommates, hasRoommates) => {\n if (this.ForceShow()) {\n return true;\n }\n if (this.ForceHide()) {\n return false;\n }\n if (this.StepName() === showcase.ViewType.RoommatesQuestion) {\n return showRoommates && this.ParentForms.some(pf => pf === formType);\n }\n if (this.StepName() === showcase.ViewType.Roommates) {\n return showRoommates && hasRoommates && this.ParentForms.some(pf => pf === formType);\n }\n return this.ParentForms.some(pf => pf === formType);\n };\n this.StepTiming = new ils.PageTiming(stepName);\n this.ForceHide.subscribe((newVal) => {\n if (newVal === true) {\n this.ForceShow(false);\n }\n }, this);\n this.ForceShow.subscribe((newVal) => {\n if (newVal === true) {\n this.ForceHide(false);\n }\n }, this);\n }\n }\n ils.ProgressStep = ProgressStep;\n class LeadFormStepManager {\n constructor(item = {}) {\n var _a, _b;\n ////////////////////////////////////////////////////////////////////////////////////////////////////////\n // This is basically our state machine to manage the state on each step. The way we navigate the form\n // depends on the type of form we're in (i.e. 'Get More Info, 'Schedule a Tour', 'Check Availability', or\n // 'Apply Now').\n // This means we have to set the 'Next' and 'Back' buttons based on the type of form we're in and the \n // responses of the user to some of those answers (i.e. 'Do you have roommates?').\n ///////////////////////////////////////////////////////////////////////////////////////////////////////\n this.setFormState = (newVal) => {\n if (!newVal) {\n return;\n }\n this.StartTrackingForNewStep(newVal);\n let activeIndex = this.ActiveViews().findIndex((val, idx, steps) => { return val.StepName() === newVal; });\n this.BackStepVisible(activeIndex > 0);\n this.SubmitButtonText(activeIndex === this.ActiveViews().length - 1\n ? this.FormType() === showcase.FormType.ApplyNow\n ? \"Continue to Application\"\n : \"Submit\"\n : \"Next\");\n switch (newVal) {\n case showcase.ViewType.NameInfo:\n this.MainText(`${this.CommunityName()}`);\n if (this.FormType() == showcase.FormType.GetMoreInfo) {\n this.Pretext(\"Let's introduce you to\");\n }\n else if (this.FormType() == showcase.FormType.CheckAvailability) {\n this.Pretext(\"Let's check availability at\");\n }\n else if (this.FormType() == showcase.FormType.ScheduleTour) {\n this.Pretext(\"Let's schedule your tour at\");\n }\n else if (this.FormType() === showcase.FormType.ApplyNow) {\n this.Pretext(\"Get started on your application for\");\n }\n break;\n case showcase.ViewType.TourDate:\n this.Pretext(\"Tour Request\");\n this.MainText(\"What date and time works best for you?\");\n break;\n case showcase.ViewType.ContactInfo:\n this.Pretext(this.ActiveView());\n this.MainText(\"How can they reach out?\");\n break;\n case showcase.ViewType.RoommatesQuestion:\n this.Pretext(`${this.CommunityName()} is a \"by the room\" student community`);\n this.MainText(\"Have you thought about roommates?\");\n break;\n case showcase.ViewType.Roommates:\n this.Pretext(`${this.CommunityName()} is a \"by the room\" student community`);\n this.MainText(\"Who are your roommates?\");\n break;\n case showcase.ViewType.FloorPlans:\n this.Pretext(this.ActiveView());\n this.MainText(\"Which floor plan(s) interest you?\");\n break;\n case showcase.ViewType.Comments:\n this.Pretext(this.ActiveView());\n this.MainText(\"Anything we can pass along to the team?\");\n break;\n default:\n break;\n }\n };\n this.ActiveView = !item.ActiveView ? ko.observable(showcase.ViewType.NameInfo) : ko.observable(item.ActiveView);\n this.FormType = !item.FormType ? ko.observable(showcase.FormType.GetMoreInfo) : ko.observable(item.FormType);\n this.SubmitButtonText = ko.observable(\"Next\");\n this.BackStepVisible = ko.observable(false);\n this.JustMe = !item.JustMe ? ko.observable(false) : ko.observable(item.JustMe);\n this.HasRoommates = !item.HasRoommates ? ko.observable(false) : ko.observable(item.HasRoommates);\n this.NeedRoommate = !item.NeedRoommate ? ko.observable(false) : ko.observable(item.NeedRoommate);\n this.ShowRoommates = !item.ShowRoommatesOption ? ko.observable(false) : ko.observable(item.ShowRoommatesOption);\n this.Pretext = ko.observable(\"Let's introduce you to\");\n this.MainText = ko.observable(`${((_a = item.CommunityName) !== null && _a !== void 0 ? _a : \"\")}`);\n this.CommunityName = ko.observable((_b = item.CommunityName) !== null && _b !== void 0 ? _b : \"\");\n this.ProgressSteps = ko.observableArray([]);\n this.HasRoommateQuestionError = ko.observable(false);\n this.HasStartedForm = ko.observable(false);\n let isActiveSorting = false;\n ////////////////////////////////////////////////////////////////////////////////////////////////////////\n // This is setting up all the possible steps we can take in the form. This is part of how we manage\n // state as well as what actions to take on a step. The Order() value of each step is two more than \n // the previous one so that we have the ability to easily change the order of the steps inside an A/B\n // test using Google Optimize via running some Javascript when the A/B test loads.\n ////////////////////////////////////////////////////////////////////////////////////////////////////////\n const progressSteps = [];\n for (let val in showcase.ViewType) {\n let parentForms = [];\n let value = showcase.ViewType[val];\n if (value == showcase.ViewType.NameInfo) {\n parentForms.push(showcase.FormType.GetMoreInfo);\n parentForms.push(showcase.FormType.ScheduleTour);\n parentForms.push(showcase.FormType.CheckAvailability);\n parentForms.push(showcase.FormType.ApplyNow);\n progressSteps.push(new ProgressStep(value, parentForms, 1, true));\n continue;\n }\n if (value == showcase.ViewType.TourDate) {\n parentForms.push(showcase.FormType.ScheduleTour);\n progressSteps.push(new ProgressStep(value, parentForms, 3, false));\n continue;\n }\n if (value == showcase.ViewType.ContactInfo) {\n parentForms.push(showcase.FormType.GetMoreInfo);\n parentForms.push(showcase.FormType.ScheduleTour);\n parentForms.push(showcase.FormType.CheckAvailability);\n parentForms.push(showcase.FormType.ApplyNow);\n progressSteps.push(new ProgressStep(value, parentForms, 5, false));\n continue;\n }\n // Combining the Roommates steps to not overwhelm the user with the progress bar\n if (value === showcase.ViewType.RoommatesQuestion || value === showcase.ViewType.Roommates) {\n if (this.ShowRoommates()) {\n parentForms.push(showcase.FormType.GetMoreInfo);\n parentForms.push(showcase.FormType.ScheduleTour);\n parentForms.push(showcase.FormType.CheckAvailability);\n let step = new ProgressStep(value, parentForms, value === showcase.ViewType.RoommatesQuestion ? 7 : 8, false);\n step.ForceHide(value === showcase.ViewType.Roommates);\n progressSteps.push(step);\n }\n continue;\n }\n if (value == showcase.ViewType.FloorPlans) {\n parentForms.push(showcase.FormType.ScheduleTour);\n parentForms.push(showcase.FormType.CheckAvailability);\n progressSteps.push(new ProgressStep(value, parentForms, 10, false));\n continue;\n }\n if (value == showcase.ViewType.Comments) {\n parentForms.push(showcase.FormType.GetMoreInfo);\n parentForms.push(showcase.FormType.ScheduleTour);\n parentForms.push(showcase.FormType.CheckAvailability);\n progressSteps.push(new ProgressStep(value, parentForms, 12, false));\n continue;\n }\n }\n this.ProgressSteps.push(...progressSteps.sort((l, r) => { return l.Order() < r.Order() ? -1 : 1; }));\n // Subscribe to the Order() property of each step so that if it's changed we re-sort the overall ProgressSteps array\n this.ProgressSteps().forEach((val, idx, steps) => {\n val.Order.subscribe((newVal) => {\n if (isActiveSorting) {\n return;\n }\n isActiveSorting = true;\n this.ProgressSteps.sort((l, r) => {\n return l.Order() < r.Order() ? -1 : 1;\n });\n this.ProgressSteps().forEach((val, idx, steps) => {\n if (idx === 0) {\n val.Order(idx + 1);\n return;\n }\n val.Order(steps[idx - 1].Order() + 2);\n });\n isActiveSorting = false;\n });\n });\n this.ShowApplicationLinkButton = ko.pureComputed(() => {\n return this.ActiveStep().StepName() === showcase.ViewType.ContactInfo && this.FormType() === showcase.FormType.ApplyNow;\n });\n this.ProgressSteps.subscribe((arrayChangeVal) => {\n this.ActiveView(this.ActiveViews()[0].StepName());\n this.ProgressSteps().forEach((val, idx, steps) => {\n val.IsComplete(val.StepName() === this.ActiveViews()[0].StepName());\n }, this);\n }, this, \"arrayChange\");\n this.ActiveViews = ko.pureComputed(() => {\n return this.ProgressSteps().filter((val, idx, steps) => {\n return val.IsVisible(this.FormType(), this.ShowRoommates(), this.HasRoommates());\n }).sort((l, r) => { return l.Order() < r.Order() ? -1 : 1; });\n }, this);\n this.ActiveStep = ko.pureComputed(() => {\n return this.ProgressSteps().find((val, idx, steps) => {\n return val.StepName() == this.ActiveView();\n });\n }, this);\n this.NextStep = ko.pureComputed(() => {\n for (let i = 0; i < this.ActiveViews().length; i++) {\n let val = this.ActiveViews()[i];\n if (!val || !val.IsVisible(this.FormType(), this.ShowRoommates(), this.HasRoommates())) {\n continue;\n }\n if (val.Order() > this.ActiveStep().Order()) {\n return val.StepName();\n }\n }\n return this.ActiveView();\n }, this);\n this.BackStep = ko.pureComputed(() => {\n for (let i = this.ActiveViews().length - 1; i >= 0; i--) {\n let val = this.ActiveViews()[i];\n if (!val || !val.IsVisible(this.FormType(), this.ShowRoommates(), this.HasRoommates())) {\n continue;\n }\n if (val.Order() < this.ActiveStep().Order()) {\n return val.StepName();\n }\n }\n return this.ActiveView();\n }, this);\n this.IconHtml = ko.pureComputed(() => {\n let html = [];\n switch (this.FormType()) {\n case showcase.FormType.GetMoreInfo:\n const getMoreInfoIcons = [\n ``\n ];\n html.push(...getMoreInfoIcons);\n break;\n case showcase.FormType.ScheduleTour:\n const scheduleTourIcons = [\n ``,\n ` `,\n ``\n ];\n html.push(...scheduleTourIcons);\n break;\n case showcase.FormType.CheckAvailability:\n const checkAvailabilityIcons = [\n ``,\n ` `,\n ``\n ];\n html.push(...checkAvailabilityIcons);\n break;\n case showcase.FormType.ApplyNow:\n const applyNowIcons = [\n ``\n ];\n html.push(...applyNowIcons);\n break;\n default:\n const defaultIcons = [\n ``\n ];\n html.push(...defaultIcons);\n break;\n }\n return html.join('');\n }, this);\n this.ActiveView.subscribe((newVal) => {\n this.setFormState(newVal);\n });\n this.FormType.subscribe((newVal) => {\n if (this.ActiveView() == this.ActiveViews()[0].StepName()) {\n this.setFormState(this.ActiveViews()[0].StepName());\n }\n else {\n this.ActiveView(this.ActiveViews()[0].StepName());\n }\n const activeStepIndex = this.ProgressSteps().findIndex((val, idx, allSteps) => {\n return val.StepName() == this.ActiveView();\n });\n this.ProgressSteps().forEach((val, idx, allSteps) => {\n if (activeStepIndex < 0) {\n val.IsComplete(false);\n return;\n }\n if (val.Order() > allSteps[activeStepIndex].Order()) {\n val.IsComplete(false);\n }\n else {\n val.IsComplete(true);\n }\n });\n });\n this.NavigateToNextStep = () => {\n this.ProgressSteps().forEach((val, idx, steps) => {\n if (val.StepName() === this.NextStep()) {\n val.IsComplete(true);\n }\n }, this);\n if (this.SubmitButtonText() === \"Submit\" || this.SubmitButtonText() === \"Continue to Application\") {\n // Submit the form\n ils.viewModel.ReadyToSubmit(true);\n return;\n }\n this.ActiveView(this.NextStep());\n };\n this.NavigateBackOneStep = () => {\n this.ProgressSteps().forEach((val, dx, steps) => {\n if (val.StepName() === this.ActiveView()) {\n val.IsComplete(false);\n }\n });\n this.ActiveView(this.BackStep());\n };\n this.FormClass = ko.pureComputed(() => {\n switch (this.ActiveView()) {\n case showcase.ViewType.NameInfo:\n return \"c-guest-card-element__form c-guest-card-element__form--name\";\n case showcase.ViewType.TourDate:\n return \"c-guest-card-element__form c-guest-card-element__form--tour\";\n case showcase.ViewType.ContactInfo:\n return \"c-guest-card-element__form c-guest-card-element__form--contact\";\n case showcase.ViewType.Comments:\n return \"c-guest-card-element__form c-guest-card-element__form--comments\";\n case showcase.ViewType.Roommates:\n case showcase.ViewType.RoommatesQuestion:\n return \"c-guest-card-element__form c-guest-card-element__form--roommates\";\n default:\n return \"c-guest-card-element__form\";\n }\n });\n this.NavigateTo = (progressStep) => {\n for (let val in showcase.ViewType) {\n let value = showcase.ViewType[val];\n if (value == progressStep.StepName()) {\n this.ActiveView(value);\n return;\n }\n }\n };\n this.TurnOnStepTimeTracking = (isFormActive) => {\n const activeIndex = this.ProgressSteps().findIndex((val, idx, steps) => {\n return val.StepName() === this.ActiveView();\n });\n if (activeIndex < 0) {\n this.ProgressSteps().forEach((val, idx, steps) => {\n val.StepTiming.stopTracking();\n });\n return;\n }\n let activeStep = this.ProgressSteps()[activeIndex];\n if (!isFormActive) {\n activeStep.StepTiming.stopTracking();\n }\n else {\n activeStep.StepTiming.startTracking();\n }\n };\n this.StartTrackingForNewStep = (stepName) => {\n this.ProgressSteps().forEach((val, idx, steps) => {\n if (val.StepTiming.isCurrentlyTracking()) {\n val.StepTiming.stopTracking();\n if (!ils.isSiteLive) {\n console.log(`Current total time tracked for ${val.StepTiming.name} so far is ${val.StepTiming.timeDuration}.`);\n }\n }\n });\n const activeIndex = this.ProgressSteps().findIndex((val, idx, steps) => {\n return val.StepName() === stepName;\n });\n if (activeIndex < 0) {\n return;\n }\n let activeStep = this.ProgressSteps()[activeIndex];\n activeStep.StepTiming.startTracking();\n };\n this.SendFormCompletionMetrics = (submitHasBeenClicked) => {\n gaSendStepFormCompletion(submitHasBeenClicked, this.HasStartedForm(), this.FormType(), this.ActiveView());\n };\n this.ContactStepErrors = null;\n }\n }\n ils.LeadFormStepManager = LeadFormStepManager;\n})(ils || (ils = {}));\n\nvar ils;\n(function (ils) {\n class ProspectFormData {\n constructor(item = {}) {\n this.PrimaryGuest = !item.PrimaryGuest ? new ils.GuestCardInfo() : item.PrimaryGuest;\n this.Roommates = !item.Roommates ? ko.observableArray([]) : ko.observableArray(item.Roommates);\n this.ContactTypeID = !item.ContactTypeID ? ko.observable(1) : ko.observable(item.ContactTypeID);\n this.MoveInMonth = !item.MoveInMonth ? ko.observable() : ko.observable(item.MoveInMonth);\n this.MoveInDay = !item.MoveInDay ? ko.observable() : ko.observable(item.MoveInDay);\n this.SelectedFloorPlans = !item.SelectedFloorPlans ? ko.observableArray([]) : ko.observableArray(item.SelectedFloorPlans);\n this.SubmitHasBeenClicked = ko.observable(false);\n this.RemovedRoommates = ko.observableArray([]);\n this.DateOfVisit = ko.observable(null);\n this.StepManager = new ils.LeadFormStepManager({\n CommunityName: item.CommunityName,\n JustMe: item.JustMe,\n HasRoommates: item.HasRoommates,\n NeedRoommate: item.NeedRoommate,\n ShowRoommatesOption: item.ShowRoommatesOption,\n FormType: !item.ContactTypeID\n ? ils.showcase.FormType.GetMoreInfo\n : item.ContactTypeID == 1\n ? ils.showcase.FormType.GetMoreInfo\n : item.ContactTypeID == 2\n ? ils.showcase.FormType.ScheduleTour\n : item.ContactTypeID == 3\n ? ils.showcase.FormType.CheckAvailability\n : ils.showcase.FormType.GetMoreInfo\n });\n this.PrimaryGuestErrors = ko.validation.group(this.PrimaryGuest);\n this.RoommatesErrors = ko.validation.group(this.Roommates, {\n deep: true,\n live: true\n });\n this.HasErrors = ko.computed(() => {\n return this.PrimaryGuestErrors().length > 0 && this.SubmitHasBeenClicked();\n });\n this.IsFormValid = () => {\n this.PrimaryGuestErrors.showAllMessages();\n let hasErrors = this.HasErrors();\n if (this.StepManager.HasRoommates()) {\n this.RoommatesErrors.showAllMessages();\n hasErrors = hasErrors || (this.RoommatesErrors().length > 0 && this.SubmitHasBeenClicked());\n }\n return !hasErrors;\n };\n this.StepManager.HasRoommates.subscribe((newVal) => {\n if (!newVal) {\n return;\n }\n if (newVal === true) {\n this.StepManager.HasRoommateQuestionError(false);\n this.StepManager.JustMe(false);\n }\n if (this.Roommates().length < 1) {\n this.AddRoommate();\n }\n });\n this.StepManager.NeedRoommate.subscribe((newVal) => {\n if (newVal === true) {\n this.StepManager.HasRoommateQuestionError(false);\n this.StepManager.JustMe(false);\n }\n });\n this.StepManager.JustMe.subscribe((newVal) => {\n if (newVal === true) {\n this.StepManager.HasRoommateQuestionError(false);\n this.StepManager.HasRoommates(false);\n this.StepManager.NeedRoommate(false);\n }\n });\n this.AddRoommate = () => {\n var nextOrder = this.Roommates().length + 1;\n if (this.RemovedRoommates().length > 0) {\n var removedRoommate = this.RemovedRoommates.pop();\n removedRoommate.RoommateOrder(nextOrder);\n this.Roommates.push(removedRoommate);\n return;\n }\n const newRoommate = new ils.Roommate({\n GuestInfo: new ils.GuestCardInfo({ RequireEmailOrPhone: false }),\n RoommateOrder: nextOrder\n });\n this.Roommates.push(newRoommate);\n };\n this.RemoveRoommate = (RoommateLocalId) => {\n const removedItems = this.Roommates.remove((rm) => {\n return rm.RoommateLocalId() == RoommateLocalId;\n });\n const removed = removedItems[0];\n this.RemovedRoommates.push(removed);\n if (this.Roommates().length < 1) {\n this.StepManager.HasRoommates(false);\n return;\n }\n for (var i = 0; i < this.Roommates().length; i++) {\n this.Roommates()[i].RoommateOrder(i + 1);\n }\n };\n this.ContactTypeID.subscribe((newVal) => {\n const formType = !newVal\n ? ils.showcase.FormType.GetMoreInfo\n : newVal == 1\n ? ils.showcase.FormType.GetMoreInfo\n : newVal == 2\n ? ils.showcase.FormType.ScheduleTour\n : newVal == 3\n ? ils.showcase.FormType.CheckAvailability\n : newVal === 5\n ? ils.showcase.FormType.ApplyNow\n : ils.showcase.FormType.GetMoreInfo;\n this.StepManager.FormType(formType);\n });\n this.StepManager.ContactStepErrors = ko.validation.group([this.PrimaryGuest.Email, this.PrimaryGuest.Phone]);\n this.OnNext = () => {\n let isStepValid = false;\n switch (this.StepManager.ActiveView()) {\n case ils.showcase.ViewType.NameInfo:\n this.StepManager.HasStartedForm(true);\n this.PrimaryGuest.EnableGuestValidation(true);\n let guestNameErrors = ko.validation.group(this.PrimaryGuest.GuestName);\n const guestNameValid = ko.validation.validateObservable(this.PrimaryGuest.GuestName);\n guestNameErrors.showAllMessages();\n isStepValid = guestNameValid;\n this.PrimaryGuest.EnableGuestValidation(!isStepValid);\n break;\n case ils.showcase.ViewType.TourDate:\n isStepValid = true;\n break;\n case ils.showcase.ViewType.ContactInfo:\n this.PrimaryGuest.EnableGuestValidation(true);\n this.StepManager.ContactStepErrors.showAllMessages();\n const isValid = this.StepManager.ContactStepErrors().length < 1;\n isStepValid = isValid;\n this.PrimaryGuest.EnableGuestValidation(!isStepValid);\n break;\n case ils.showcase.ViewType.RoommatesQuestion:\n if (!this.StepManager.JustMe() && !this.StepManager.HasRoommates() && !this.StepManager.NeedRoommate()) {\n // Show the error message\n this.StepManager.HasRoommateQuestionError(true);\n isStepValid = false;\n }\n else {\n this.StepManager.HasRoommateQuestionError(false);\n isStepValid = true;\n if (this.StepManager.HasRoommates()) {\n this.StepManager.ProgressSteps().forEach((val, idx, steps) => {\n if (val.StepName() === ils.showcase.ViewType.Roommates) {\n val.ForceShow(true);\n }\n });\n this.Roommates().forEach((val, idx, allRoommates) => {\n val.GuestInfo.EnableGuestValidation(false);\n });\n }\n else {\n this.StepManager.ProgressSteps().forEach((val, idx, steps) => {\n if (val.StepName() === ils.showcase.ViewType.Roommates) {\n val.ForceHide(true);\n }\n });\n }\n }\n break;\n case ils.showcase.ViewType.Roommates:\n let indexesToRemove = [];\n for (let i = this.Roommates().length - 1; i > -1; i--) {\n let val = this.Roommates()[i];\n // We don't validate against completely blank roommates so we will remove them from the list of roommates\n if (!val.GuestInfo.GuestName() && !val.GuestInfo.Email() && !val.GuestInfo.Phone()) {\n indexesToRemove.push(i);\n this.Roommates.remove(val);\n continue;\n }\n // otherwise we go ahead and enable the validation on the roommate entered\n val.GuestInfo.EnableGuestValidation(true);\n }\n if (this.Roommates().length < 1) {\n this.StepManager.HasRoommates(false);\n this.StepManager.JustMe(true);\n isStepValid = true;\n this.StepManager.ProgressSteps().forEach((val, idx, steps) => {\n if (val.StepName() === ils.showcase.ViewType.Roommates) {\n val.ForceHide(true);\n }\n });\n break;\n }\n this.RoommatesErrors.showAllMessages();\n isStepValid = this.RoommatesErrors().length < 1;\n break;\n default:\n isStepValid = true;\n break;\n }\n if (isStepValid) {\n this.StepManager.NavigateToNextStep();\n }\n };\n this.OnBack = () => {\n switch (this.StepManager.ActiveView()) {\n case ils.showcase.ViewType.ContactInfo:\n this.PrimaryGuest.EnableGuestValidation(false);\n break;\n case ils.showcase.ViewType.Roommates:\n this.Roommates().forEach((val, idx, allRoommates) => {\n val.GuestInfo.EnableGuestValidation(false);\n });\n break;\n default:\n break;\n }\n this.StepManager.NavigateBackOneStep();\n };\n this.NavigateStepTo = (progressStep) => {\n if (!progressStep.IsComplete()) {\n return;\n }\n this.StepManager.NavigateTo(progressStep);\n const activeStepIndex = this.StepManager.ProgressSteps().findIndex((val, idx, allSteps) => {\n return val.StepName() == this.StepManager.ActiveView();\n });\n this.StepManager.ProgressSteps().forEach((val, idx, allSteps) => {\n if (activeStepIndex < 0) {\n val.IsComplete(false);\n return;\n }\n if (val.Order() > allSteps[activeStepIndex].Order()) {\n val.IsComplete(false);\n }\n });\n };\n }\n }\n ils.ProspectFormData = ProspectFormData;\n})(ils || (ils = {}));\n\nvar ils;\n(function (ils) {\n class FloorPlanInfo {\n constructor(item) {\n if (!item) {\n item = {};\n }\n // Copy the contents of the passed in item using the native javascript `Object.assign(dest, source)`\n Object.assign(this, item);\n // Set the remaining values based on more detailed logic\n this.ImageUrl = this.Image && this.Image != '' ? (this.Image && this.Image.toLowerCase().indexOf('http') == -1 ? imageDomain + \"uploads/floorplans/\" : \"\") + this.Image : 'missing.jpg';\n this.ImageSrc = (this.ImageUrl && this.ImageUrl.toLowerCase().indexOf('http') == -1 ? (this.ImageUrl + \"?preset=floorplan&404=floorplan\") : imageDomain + \"external-resizer.aspx?width=220&height=245&scale=both&404=floorplan&filename=\" + this.ImageUrl);\n this.NumberBedroomsText = this.NumberBedrooms > 0 ? this.NumberBedrooms + \"-bedroom\" : \"Studio\";\n this.NumberBedroomsLongText = this.NumberBedrooms > 0 ? this.NumberBedrooms + \" Bedroom\" + (this.NumberBedrooms > 1 ? \"s\" : \"\") : \"Studio\";\n this.Pricing = this.Price == 0 ? \"Please call for details\" : ils.AddCommas(this.Price) + ' per ' + (this.PriceByUnit ? 'Month' : 'Room');\n this.PriceChangeExtra = this.PriceChange == 0 ? \"\" : \"The price of this floor plan has gone \" + (this.PriceChange > 0 ? \"up \" : \"down \") + Math.abs(this.PriceChange * 100).toFixed(0) + \"% in the last week. Call today and ask how you can lock in the current rate.\";\n this.Specials = item.Specials;\n this.Details = ko.computed(() => {\n if (this.Specials) {\n var specialsSplit = this.Specials.split('\\n');\n if (specialsSplit.length > 1 && specialsSplit[0].length < 1 && specialsSplit[1].length > 0) {\n return specialsSplit[1].split('\\n');\n }\n return this.Specials.split('\\n');\n }\n return [];\n });\n this.HasDetails = ko.computed(() => {\n return this.Details().length > 0;\n });\n this.HasMorePhotos = ko.computed(() => {\n return $(`.media-items [data-additional-galleries*=${this.FloorPlanID}]`).length > 0;\n });\n this.HasMoreVirtualTours = ko.computed(() => {\n return $(`.media-items [data-floorplan-virtual-tour*=${this.FloorPlanID}]`).length > 0;\n });\n this.HasMorePhotoText = ko.computed(() => {\n return !this.HasMorePhotos() && !this.HasMoreVirtualTours()\n ? \"\"\n : this.HasMoreVirtualTours()\n ? ` 3Dx Virtual Tour`\n //? ` 3Dx Virtual Tour`\n : ` More Photos`;\n });\n this.InitialFloorPlanCarouselImage = ko.computed(() => {\n return this.ImageUrl;\n // The code below works but the VirtualTourUrl is used as an image when the overlay is launched which\n // won't work since it's a URL to an iFrame.\n //return this.HasMoreVirtualTours() && this.VirtualTourUrl\n // ? this.VirtualTourUrl\n // : this.ImageUrl;\n });\n }\n }\n ils.FloorPlanInfo = FloorPlanInfo;\n})(ils || (ils = {}));\n\nvar ils;\n(function (ils) {\n var iLSHelpers = Helpers;\n class GuestCardInfo {\n constructor(item) {\n if (!item) {\n item = {};\n }\n this.FirstName = (typeof (item.FirstName) == \"undefined\" ? ko.observable(null) : ko.observable(item.FirstName));\n this.LastName = (typeof (item.LastName) == \"undefined\" ? ko.observable(null) : ko.observable(item.LastName));\n this.Email = (typeof (item.Email) == \"undefined\" ? ko.observable(null) : ko.observable(item.Email));\n this.Phone = (typeof (item.Phone) == \"undefined\" ? ko.observable(null) : ko.observable(item.Phone));\n this.MoveInDate = typeof (item.MoveInDate) == \"undefined\" ? ko.observable(null) : ko.observable(item.MoveInDate);\n this.RenterCommentsAndQuestions = typeof (item.RenterCommentsAndQuestions) == \"undefined\" ? ko.observable(null) : ko.observable(item.RenterCommentsAndQuestions);\n this.GuestName = !this.FirstName() && !this.LastName() ? ko.observable(null) : ko.observable(`${this.FirstName()} ${this.LastName()}`);\n this.EnableGuestValidation = ko.observable(false);\n this.RequireEmailOrPhone = typeof (item.RequireEmailOrPhone) == \"undefined\" ? ko.observable(true) : ko.observable(item.RequireEmailOrPhone);\n this.cdpSessionId = ils.cdpSessionId;\n this.MissingEmailAndPhone = () => {\n const emailAddress = this.Email();\n const phoneNumber = this.Phone();\n const isMissingPhoneAndEmail = !ko.validation.rules.required.validator(emailAddress, true) && !ko.validation.rules.required.validator(phoneNumber, true);\n return isMissingPhoneAndEmail;\n };\n // Setup Validation\n this.FirstName.extend({\n required: {\n message: \"First Name is Required\"\n },\n maxLength: 50\n });\n this.LastName.extend({\n required: {\n message: \"Last Name is Required\"\n },\n maxLength: 50\n });\n this.Email.extend({\n required: {\n message: \"Please enter an Email and/or Phone Number\",\n onlyIf: () => {\n return this.MissingEmailAndPhone() && this.RequireEmailOrPhone();\n }\n },\n email: {\n onlyIf: () => {\n return this.EnableGuestValidation();\n }\n },\n maxLength: 382\n });\n this.Phone.extend({\n required: {\n message: \"Please enter a Phone Number and/or Email\",\n onlyIf: () => {\n this.MissingEmailAndPhone() && this.RequireEmailOrPhone();\n }\n },\n phoneiLS: {\n onlyIf: () => {\n return this.EnableGuestValidation() && this.Phone() !== null && this.Phone().trim().length > 0;\n }\n }\n });\n this.RenterCommentsAndQuestions.extend({\n maxLength: 500\n });\n this.GuestName.extend({\n required: {\n message: \"Please enter a full name.\",\n onlyIf: () => {\n return !ils.viewModel\n ? false\n : true;\n }\n },\n fullNameiLS: {\n onlyIf: () => {\n return this.EnableGuestValidation();\n }\n }\n //validation: {\n // validator: (val: string) => {\n // if (!val) {\n // return false;\n // }\n // let valSplit = val.trim().split(' ');\n // return valSplit.length > 1;\n // },\n // message: \"Please enter a first and last name.\",\n // onlyIf: () => {\n // return this.EnableGuestValidation();\n // }\n //}\n });\n // Subscribe to the GuestName observable so we can split it out into first and last name\n this.GuestName.subscribe((newValue) => {\n if (!this.GuestName() || this.GuestName().length < 1) {\n return;\n }\n const nameSplit = this.GuestName().trim().split(' ');\n const namesLength = nameSplit.length;\n if (namesLength < 1) {\n return;\n }\n const first = namesLength > 1 ?\n nameSplit.map((val, index, array) => {\n if (index <= namesLength - 2)\n return val.trim().toTitleCase();\n }).join(' ')\n : nameSplit[0].length > 0\n ? nameSplit[0].trim().toTitleCase()\n : \"\";\n const last = namesLength > 1 ? nameSplit[namesLength - 1].trim().toTitleCase() : \"\";\n this.FirstName(first.trim());\n this.LastName(last.trim());\n });\n ////////////////////////////\n // General Purpose functions\n ///////////////////////////\n this.formatPhone = (data, event) => {\n const val = $(event.currentTarget).val();\n if (!val || event.keyCode == 8) {\n return;\n }\n const formattedPhone = iLSHelpers.formatPhone(val, { allowExtensions: false, includeParenthesis: true, allowInternational: false });\n $(event.currentTarget).val(formattedPhone);\n this.Phone(formattedPhone);\n };\n this.formatGuestName = (data, event) => {\n const val = $(event.currentTarget).val();\n if (!val || event.keyCode == 8) {\n return;\n }\n const formattedName = val.toTitleCase();\n $(event.currentTarget).val(formattedName);\n this.GuestName(formattedName);\n };\n this.toJsObject = () => {\n var self = this;\n const copy = {\n FirstName: self.FirstName(),\n LastName: self.LastName(),\n Phone: self.Phone(),\n Email: self.Email(),\n RenterCommentsAndQuestions: self.RenterCommentsAndQuestions(),\n MoveInDate: self.MoveInDate(),\n RequireEmailOrPhone: self.RequireEmailOrPhone()\n };\n return copy;\n };\n }\n }\n ils.GuestCardInfo = GuestCardInfo;\n class Roommate {\n constructor(item) {\n if (!item) {\n item = {};\n }\n this.RoommateLocalId = ko.observable(typeof (item.RoommateLocalId) == \"undefined\" || item.RoommateLocalId == null || parseInt(item.RoommateLocalId.toString()) === NaN ? Helpers.getRandomInt() : item.RoommateLocalId);\n this.RoommateOrder = ko.observable(typeof (item.RoommateOrder) == \"undefined\" || item.RoommateOrder == null || parseInt(item.RoommateOrder.toString()) === NaN ? 0 : item.RoommateOrder);\n this.GuestInfo = !item.GuestInfo ? new GuestCardInfo() : item.GuestInfo;\n this.RoommateTitle = ko.computed(() => {\n return `Roommate ${this.RoommateOrder()}`;\n });\n }\n CloseRoommate() {\n if (!ils.viewModel || !ils.viewModel.ProspectForm.RemoveRoommate) {\n return;\n }\n ils.viewModel.ProspectForm.RemoveRoommate(this.RoommateLocalId());\n }\n ;\n }\n ils.Roommate = Roommate;\n})(ils || (ils = {}));\n\nvar ils;\n(function (ils) {\n class PageTiming {\n constructor(itemName) {\n this.name = itemName;\n this.timeDuration = 0;\n this.startTime = null;\n this.endTime = null;\n this.startTracking = () => {\n this.startTime = new Date();\n };\n this.stopTracking = () => {\n this.endTime = new Date();\n var timeSpent = this.startTime == null || typeof (this.startTime) == 'undefined' ? 0 : this.endTime - this.startTime;\n var hourInMillis = 1000 * 60 * 60;\n if (timeSpent > 0 && timeSpent < hourInMillis)\n this.timeDuration += timeSpent;\n this.startTime = null;\n this.endTime = null;\n };\n this.isCurrentlyTracking = () => {\n return this.startTime != null && this.endTime == null;\n };\n }\n }\n ils.PageTiming = PageTiming;\n})(ils || (ils = {}));\n\nvar ils;\n(function (ils) {\n function loadApartmentMapScripts(callback) {\n if (ils.googleDynamicMapsIsLoading) {\n return;\n }\n ils.googleDynamicMapsIsLoading = true;\n let googleMapsScript = document.createElement('script');\n let infoBoxScript = document.createElement('script');\n googleMapsScript.setAttribute(\"src\", `https://maps.googleapis.com/maps/api/js?key=${ils.googleMapsKey}&libraries=geometry`);\n infoBoxScript.setAttribute(\"src\", \"/tft-js/fallback/infobox.js\");\n googleMapsScript.onload = () => {\n document.body.appendChild(infoBoxScript);\n ils.mapCenter = new google.maps.LatLng(ils.googleMapsLat, ils.googleMapsLong);\n ils.googleMapsApiLoaded = true;\n };\n infoBoxScript.onload = () => {\n if (callback) {\n callback();\n }\n ils.googleDynamicMapsIsLoading = false;\n ils.googleDynamicMapsLoaded = true;\n ils.infoBoxLoaded = true;\n };\n // It's possible that we have already loaded the google maps api. If so we skip loading it here and just load the info-box script\n if (!ils.googleMapsApiLoaded) {\n document.body.appendChild(googleMapsScript);\n }\n else if (!ils.infoBoxLoaded) {\n document.body.appendChild(infoBoxScript);\n }\n }\n ils.loadApartmentMapScripts = loadApartmentMapScripts;\n function loadApartmentStaticMapScripts(callback) {\n if (ils.googleMapsApiLoaded || ils.googleDynamicMapsIsLoading) {\n if (callback && !ils.googleDynamicMapsIsLoading) {\n callback();\n }\n return;\n }\n ils.googleDynamicMapsIsLoading = true;\n let googleMapsScript = document.createElement('script');\n googleMapsScript.setAttribute(\"src\", `https://maps.googleapis.com/maps/api/js?key=${ils.googleMapsKey}&libraries=geometry`);\n googleMapsScript.onload = () => {\n ils.mapCenter = new google.maps.LatLng(ils.googleMapsLat, ils.googleMapsLong);\n ils.googleMapsApiLoaded = true;\n if (callback) {\n callback();\n }\n ils.googleDynamicMapsIsLoading = false;\n };\n document.body.appendChild(googleMapsScript);\n }\n ils.loadApartmentStaticMapScripts = loadApartmentStaticMapScripts;\n})(ils || (ils = {}));\n\nvar ils;\n(function (ils) {\n var maps = ils.ApartmentMaps;\n ils.trackedAdViews = [];\n ils.trackedImpressions = [];\n ils.primaryGuest = ils.primaryGuest || {};\n ils.showRoommates = ils.showRoommates || false;\n ils.floorPlanLoaded = false;\n ils.activeTabHash = \"\";\n ils.isSiteLive = ils.isSiteLive || false;\n ils.hasRoommates = ils.hasRoommates || false;\n ils.sessionRoommates = !ils.sessionRoommates ? [] : ils.sessionRoommates;\n ils.communityUrl = globalThis.currentURL;\n var pageTimings = [];\n var currentTiming;\n var isAutoScrolling = false;\n var allFloorPlansLoaded = false;\n var readMoreClicked = false;\n var shoppingDiningIsLoaded = false;\n var windowInactiveTime;\n var originalMoveInDate = null;\n // KO Validation setup\n const koValidationSettings = {\n insertMessages: true,\n messageTemplate: \"customErrorTemplate\",\n errorElementClass: 'error',\n errorsAsTitle: true,\n parseInputAttributes: false,\n messagesOnModified: false,\n decorateElementOnModified: true,\n decorateInputElement: true\n };\n ko.validation.init(koValidationSettings);\n let parsedRoommates = [];\n if (ils.sessionRoommates.length > 0) {\n ils.sessionRoommates.forEach((val, idx, roommates) => {\n if (!val) {\n return;\n }\n let roommate = new ils.Roommate({\n GuestInfo: new ils.GuestCardInfo({\n Email: val.Email,\n Phone: val.Phone,\n FirstName: val.FirstName,\n LastName: val.LastName,\n RequireEmailOrPhone: false\n }),\n RoommateOrder: idx + 1\n });\n parsedRoommates.push(roommate);\n });\n ils.hasRoommates = true;\n }\n ils.viewModel = {\n FloorPlans: ko.observableArray([]),\n BedroomMin: ko.observable(window[\"bedroomMin\"]),\n BedroomMax: ko.observable(window[\"bedroomMax\"]),\n PriceMin: ko.observable(window[\"priceMin\"]),\n PriceMax: ko.observable(window[\"priceMax\"]),\n ProspectForm: new ils.ProspectFormData({ PrimaryGuest: new ils.GuestCardInfo(ils.primaryGuest), CommunityName: ils.communityTitle, ShowRoommatesOption: ils.showRoommates, HasRoommates: ils.hasRoommates && ils.showRoommates, Roommates: parsedRoommates }),\n SubmittedContactTypes: ko.observableArray([]),\n HoursOpen: ko.observableArray([]),\n GetInfoButtonsVisible: ko.observable(false),\n IsApplyNowVisible: ko.observable(ils.isApplyNowVisible),\n ApplyNowUrl: ko.observable(ils.applyNowUrl),\n contactMenuHtml: ko.observable(` Email`),\n getMoreInfoHtml: ko.observable(` Get More Information`),\n NeighborhoodMapContents: ko.observable(''),\n DirectionsMapContents: ko.observable(''),\n ActiveTabText: ko.observable(null),\n ReadyToSubmit: ko.observable(false),\n DateOfVisit: ko.observable(null),\n ClickedFeaturedCallToAction: ko.observable(null),\n PreferredMoveInTypes: ko.observableArray([]),\n PreferredMoveIn: ko.observable(null),\n MoveInDate: ko.observable(null)\n };\n ils.viewModel.ContactTitle = ko.computed(function () {\n return ils.viewModel.ProspectForm.ContactTypeID() == 1\n ? ils.askQuestionText\n : ils.viewModel.ProspectForm.ContactTypeID() == 2\n ? \"Schedule a Tour\"\n : ils.viewModel.ProspectForm.ContactTypeID() == 5\n ? \"Apply Online\"\n : \"Check Availability\";\n });\n ils.viewModel.FloorPlanPrices = ko.computed(function () {\n var tmpPrices = [];\n for (var i = 0; i < ils.viewModel.FloorPlans().length; i++) {\n if (ils.viewModel.FloorPlans()[i].Price > 0)\n tmpPrices.push(ils.viewModel.FloorPlans()[i].Price);\n }\n if (tmpPrices.length === 0) {\n return [100, 2000];\n }\n tmpPrices = tmpPrices.sort(function (a, b) {\n return a < b ? -1 : a > b ? 1 : 0;\n });\n var prices = [tmpPrices[0], tmpPrices[tmpPrices.length - 1]];\n prices[0] = Math.floor(prices[0] / 50) * 50;\n prices[1] = Math.ceil(prices[1] / 50) * 50;\n return prices;\n });\n ils.viewModel.FloorPlanBedrooms = ko.computed(function () {\n var bedrooms = [];\n for (var i = 0; i < ils.viewModel.FloorPlans().length; i++) {\n bedrooms.push(ils.viewModel.FloorPlans()[i].NumberBedrooms);\n }\n if (bedrooms.length === 0) {\n return [0, 5];\n }\n return bedrooms.sort();\n });\n ils.viewModel.FiltersInUse = ko.computed(function () {\n return ils.viewModel.BedroomMin() != ils.viewModel.FloorPlanBedrooms()[0] || ils.viewModel.BedroomMax() != ils.viewModel.FloorPlanBedrooms()[ils.viewModel.FloorPlanBedrooms().length - 1] || ils.viewModel.PriceMin() != ils.viewModel.FloorPlanPrices()[0] || ils.viewModel.PriceMax() != ils.viewModel.FloorPlanPrices()[ils.viewModel.FloorPlanPrices().length - 1];\n });\n ils.viewModel.FilteredFloorPlans = ko.computed(function () {\n return ko.utils.arrayFilter(ils.viewModel.FloorPlans(), function (item) {\n return (!ils.viewModel.BedroomMin() || item.NumberBedrooms >= ils.viewModel.BedroomMin()) && (!ils.viewModel.BedroomMax() || item.NumberBedrooms <= ils.viewModel.BedroomMax())\n && (!ils.viewModel.PriceMin() || item.Price >= ils.viewModel.PriceMin() || item.Price == 0) && (!ils.viewModel.PriceMax() || item.Price <= ils.viewModel.PriceMax());\n });\n });\n ils.viewModel.ScheduleTour = function () {\n navigateToScheduleTour();\n };\n ils.viewModel.ApplyNow = function () {\n navigateToApplyNow();\n };\n ils.viewModel.checkAvailabilityClick = function () {\n navigateToCheckAvailability();\n };\n ils.viewModel.ReadyToSubmit.subscribe((newVal) => {\n // We ignore the \"Apply Online\" contact type here because we have to handle that in a separate method\n // in order to forward the user onto the online application link\n if (!newVal || ils.viewModel.ProspectForm.ContactTypeID() === 5) {\n return;\n }\n //$(\".contact-submit\").click();\n ils.viewModel.SubmitContactForm();\n });\n ils.viewModel.ProspectForm.StepManager.ActiveView.subscribe((newVal) => {\n if (!newVal || newVal !== ils.showcase.ViewType.Comments) {\n return;\n }\n if (ils.viewModel.PreferredMoveInTypes().length > 1) {\n return;\n }\n // Add logic to set the move-in date based on what is selected\n fetch(\"/api/showcase/get-move-in-types\")\n .then(response => response.json())\n .then((data) => {\n data.MoveInTypes.forEach((item, index) => {\n ils.viewModel.PreferredMoveInTypes.push(item);\n });\n if (!ils.viewModel.ProspectForm.StepManager.ShowRoommates()) {\n const customDateOption = ils.viewModel.PreferredMoveInTypes().find((opt) => {\n return opt.Name.startsWith('Custom');\n });\n if (!(!customDateOption))\n ils.viewModel.PreferredMoveIn(customDateOption);\n }\n })\n .catch(error => {\n console.error(`An error occurred while getting the Preferred Move In Types: ${error}`);\n let customDate = new ils.PreferredMoveInType({ Name: 'Custom Date', Id: 4, Description: '' });\n ils.viewModel.PreferredMoveInTypes.push(customDate);\n ils.viewModel.PreferredMoveIn(customDate);\n });\n });\n ils.viewModel.PreferredMoveIn.subscribe((newVal) => {\n if (!ils.showRoommates) {\n return;\n }\n if (!originalMoveInDate) {\n originalMoveInDate = !(document.querySelector(\"#uxNewAvailabilityDate_uxDate\").value)\n ? moment().add(1, 'M').format(\"MM/DD/YYYY\")\n : document.querySelector(\"#uxNewAvailabilityDate_uxDate\").value;\n }\n if (!newVal) {\n ils.viewModel.MoveInDate(null);\n document.querySelector(\"#uxNewAvailabilityDate_uxDate\").value = \"\";\n return;\n }\n if (!newVal || newVal.Name.startsWith('Custom')) {\n ils.viewModel.MoveInDate(moment(originalMoveInDate).format(\"MM/DD/YYYY\"));\n document.querySelector(\"#uxNewAvailabilityDate_uxDate\").value = ils.viewModel.MoveInDate();\n return;\n }\n const now = moment();\n const currentYear = now.year();\n const nextYear = now.year() + 1;\n if (newVal.Name.startsWith('Fall')) {\n let moveIn = moment();\n if (newVal.Id < 100) {\n moveIn = now.isAfter(moment(`${currentYear}-08-15`))\n ? moment(`${nextYear}-08-15`)\n : moment(`${currentYear}-08-15`);\n }\n else {\n moveIn = now.isAfter(moment(`${currentYear}-08-15`))\n ? moment(`${nextYear + 1}-08-15`)\n : moment(`${nextYear}-08-15`);\n }\n ils.viewModel.MoveInDate(moveIn.format(\"MM/DD/YYYY\"));\n document.querySelector(\"#uxNewAvailabilityDate_uxDate\").value = ils.viewModel.MoveInDate();\n return;\n }\n if (newVal.Name.startsWith(\"Spring\")) {\n let moveIn = moment();\n if (newVal.Id < 100) {\n moveIn = moment(`${nextYear}-01-01`);\n }\n else {\n moveIn = moment(`${nextYear + 1}-01-01`);\n }\n ils.viewModel.MoveInDate(moveIn.format(\"MM/DD/YYYY\"));\n document.querySelector(\"#uxNewAvailabilityDate_uxDate\").value = ils.viewModel.MoveInDate();\n return;\n }\n if (newVal.Name.startsWith(\"Immediate\")) {\n let moveIn = moment().add(1, 'w');\n ils.viewModel.MoveInDate(moveIn.format(\"MM/DD/YYYY\"));\n document.querySelector(\"#uxNewAvailabilityDate_uxDate\").value = ils.viewModel.MoveInDate();\n return;\n }\n });\n ils.viewModel.SubmitApplyNowForm = function () {\n var processTimeout = setTimeout(function () {\n ils.viewModel.ProspectForm.OnNext();\n const result = ils.viewModel.SubmitContactForm();\n clearTimeout(processTimeout);\n }, 500);\n return true;\n };\n ils.viewModel.SubmitContactForm = function () {\n const returnVal = ils.viewModel.ProspectForm.ContactTypeID() === 5 && !(!ils.viewModel.ApplyNowUrl()) && ils.viewModel.IsApplyNowVisible();\n if (ils.viewModel.ProspectForm.SubmitHasBeenClicked() || !ils.viewModel.ReadyToSubmit())\n return returnVal;\n ils.viewModel.ProspectForm.SubmitHasBeenClicked(true);\n var stickyHeight = ($(\".header\").outerHeight(true) * ($(\".header\").hasClass(\"affix\") ? 1 : 2)) + $(\"#cdp-menu-collapse.in\").height();\n if (ils.viewModel.ProspectForm.IsFormValid()) {\n const dateOfVisit = `${$(\"#uxNewDateOfVisit_uxDate\").val()} ${$(\"#uxNewTimeOfVisit\").val()}`;\n ils.viewModel.DateOfVisit(dateOfVisit.trim());\n // If the user selected to schedule a tour but did not enter in a date and time, then we don't want to submit a tour, just a check availability or email\n if (ils.viewModel.ProspectForm.ContactTypeID() == 2 && (ils.viewModel.DateOfVisit() === null || ils.viewModel.DateOfVisit().length < 2)) {\n if (ils.viewModel.ProspectForm.SelectedFloorPlans().length > 0) {\n ils.viewModel.ProspectForm.ContactTypeID(3);\n }\n else {\n ils.viewModel.ProspectForm.ContactTypeID(1);\n }\n }\n // Extract the data from the form\n const payloadData = {\n firstName: ils.viewModel.ProspectForm.PrimaryGuest.FirstName(),\n lastName: ils.viewModel.ProspectForm.PrimaryGuest.LastName(),\n emailAddress: ils.viewModel.ProspectForm.PrimaryGuest.Email(),\n phone: ils.viewModel.ProspectForm.PrimaryGuest.Phone(),\n moveInDate: $(\"#uxNewAvailabilityDate_uxDate\").val(),\n preferredMoveIn: ils.viewModel.PreferredMoveIn(),\n comments: ils.viewModel.ProspectForm.StepManager.NeedRoommate()\n ? `${ils.viewModel.ProspectForm.PrimaryGuest.RenterCommentsAndQuestions()} This renter has indicated they need roommate matching.`\n : ils.viewModel.ProspectForm.PrimaryGuest.RenterCommentsAndQuestions(),\n showcaseItemID: ils.communityId,\n communityName: ils.communityName,\n contactTypeID: ils.viewModel.ProspectForm.ContactTypeID(),\n dateOfVisit: ils.viewModel.DateOfVisit(),\n floorPlanIDs: ils.viewModel.ProspectForm.SelectedFloorPlans(),\n hasRoommates: ils.viewModel.ProspectForm.StepManager.HasRoommates(),\n roommates: ils.viewModel.ProspectForm.StepManager.HasRoommates() ? ils.viewModel.ProspectForm.Roommates().map(r => r.GuestInfo.toJsObject()) : [],\n needsRoommate: ils.viewModel.ProspectForm.StepManager.NeedRoommate(),\n cdpSessionId: ils.cdpSessionId\n };\n var jsonData = JSON.stringify(payloadData);\n // extract the floor plan names so we can use them in statistics and analytics\n const selectedFloorPlanNames = ils.viewModel.ProspectForm.SelectedFloorPlans().map((floorPlanId) => {\n let floorPlan = ils.viewModel.FloorPlans().find(fpx => fpx.FloorPlanID === floorPlanId);\n return !floorPlan ? 'null' : floorPlan.Name;\n });\n // We have to use the \"mvc-api\" endpoint here (instead of Web API) because the code processing this POST relies on SessionState and\n // WebAPI does not have access to session state (easily). *sigh*\n var contactUrl = `/mvc-api/showcase/submit-contact-form`;\n fetch(contactUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json; charset=utf-8'\n },\n body: jsonData\n })\n .then(response => response.json())\n .then(data => {\n submitContactFormResponse(payloadData, selectedFloorPlanNames);\n })\n .catch(error => {\n submitContactFormResponse(payloadData, selectedFloorPlanNames);\n console.error('SubmitContactForm failed', error);\n });\n ils.viewModel.ReadyToSubmit(false);\n }\n else {\n ils.viewModel.ProspectForm.SubmitHasBeenClicked(false);\n ils.viewModel.ReadyToSubmit(false);\n }\n function submitContactFormResponse(payloadData, selectedFloorPlanNames) {\n $('html, body').animate({\n scrollTop: $(\"#ask-question\").offset().top - stickyHeight\n }, 100);\n ils.viewModel.SubmittedContactTypes.push(ils.viewModel.ProspectForm.ContactTypeID());\n const trackingData = {\n communityName: payloadData.communityName,\n communityId: payloadData.showcaseItemID,\n formType: ils.aptsforConstants.getContactFormTypeFromId(payloadData.contactTypeID),\n unitType: ils.showRoommates ? ils.aptsforConstants.unitTypes.Student : ils.aptsforConstants.unitTypes.Conventional,\n communityUrl: ils.communityUrl,\n numberOfRoommates: ils.showRoommates ? payloadData.roommates.length : 0,\n floorPlans: selectedFloorPlanNames ? selectedFloorPlanNames.join('; ').trim() : '',\n moveInDate: payloadData.moveInDate,\n needsRoommate: payloadData.needsRoommate,\n preferredMoveIn: payloadData.preferredMoveIn.Name,\n applyNowUrl: payloadData.contactTypeID === 5 ? ils.viewModel.ApplyNowUrl() : ''\n };\n TrackContactSubmit(trackingData);\n if (payloadData.contactTypeID === 5) {\n TrackShowcasePayPerClick(globalThis.ppcActionType.applyNowUrl, ils.communityId, ils.communityName, ils.communityUrl);\n }\n if (globalThis.abTestOverview != null)\n TrackABConversion(globalThis.abOverviewName, globalThis.abTestOverview ? \"main\" : \"alternate\", payloadData.communityName, payloadData.showcaseItemID);\n if (ils.viewModel.ProspectForm.ContactTypeID() == 2)\n TrackABView(\"ScheduleTourThanksView\", globalThis.abTestVersion, ils.communityId, payloadData.communityName);\n }\n return returnVal;\n };\n function getHoursOpen(dateOfVisit) {\n fetch(`${globalThis.baseUrl}mvc-api/showcase/get-available-tour-start-times?showcaseItemID=${globalThis.showcaseItemID}&dateOfVisit=${dateOfVisit}`, {\n method: 'GET'\n })\n .then(response => response.json())\n .then(data => {\n ils.viewModel.HoursOpen(data.d);\n })\n .catch(error => console.error(error));\n }\n function ToggleContactMenuABTest(testCase = \"a\") {\n if (testCase !== \"a\") {\n ils.viewModel.contactMenuHtml(` Next Steps`);\n ils.viewModel.getMoreInfoHtml(` Get More Information`);\n }\n else {\n ils.viewModel.contactMenuHtml(` Email`);\n ils.viewModel.getMoreInfoHtml(` Get More Information`);\n }\n }\n ils.ToggleContactMenuABTest = ToggleContactMenuABTest;\n function AddCommas(number) {\n let numberStr = number.toString();\n for (var i = 0; i < Math.floor((numberStr.length - (1 + i)) / 3); i++)\n numberStr = numberStr.substring(0, numberStr.length - (4 * i + 3)) + ',' + numberStr.substring(numberStr.length - (4 * i + 3));\n return numberStr;\n }\n ils.AddCommas = AddCommas;\n function ToggleSelectedFloorPlan(floorPlanID) {\n if ($.inArray(floorPlanID, ils.viewModel.ProspectForm.SelectedFloorPlans()) == -1)\n ils.viewModel.ProspectForm.SelectedFloorPlans.push(floorPlanID);\n else\n ils.viewModel.ProspectForm.SelectedFloorPlans(ko.utils.arrayFilter(ils.viewModel.ProspectForm.SelectedFloorPlans(), function (item) {\n return item != floorPlanID;\n }));\n }\n ils.ToggleSelectedFloorPlan = ToggleSelectedFloorPlan;\n function askQuestionMobile(contactTypeId, isFeaturedCallToAction = false) {\n if (!contactTypeId) {\n return;\n }\n ils.viewModel.ProspectForm.ContactTypeID(contactTypeId);\n switch (contactTypeId) {\n case 1:\n ils.viewModel.ActiveTabText(\"Get MoreInformation\"); // We have no space between 'More' and 'Information' to keep it consistent with how we originally set it up and align with historical data on Google Analytics\n // If we have a featured call to action and it's the first time being clicked then log this to google analytics\n if (isFeaturedCallToAction && !ils.viewModel.ClickedFeaturedCallToAction()) {\n ils.viewModel.ClickedFeaturedCallToAction(ils.viewModel.ActiveTabText());\n gaTrackFeaturedCallToAction(ils.viewModel.ClickedFeaturedCallToAction(), globalThis.showcaseItemID, ils.communityTitle);\n }\n break;\n case 2:\n ils.viewModel.ActiveTabText(\"Schedule a Tour\");\n // If we have a featured call to action and it's the first time being clicked then log this to google analytics\n if (isFeaturedCallToAction && !ils.viewModel.ClickedFeaturedCallToAction()) {\n ils.viewModel.ClickedFeaturedCallToAction(ils.viewModel.ActiveTabText());\n gaTrackFeaturedCallToAction(ils.viewModel.ClickedFeaturedCallToAction(), globalThis.showcaseItemID, ils.communityTitle);\n }\n break;\n case 3:\n ils.viewModel.ActiveTabText(\"Check Availability\");\n // If we have a featured call to action and it's the first time being clicked then log this to google analytics\n if (isFeaturedCallToAction && !ils.viewModel.ClickedFeaturedCallToAction()) {\n ils.viewModel.ClickedFeaturedCallToAction(ils.viewModel.ActiveTabText());\n gaTrackFeaturedCallToAction(ils.viewModel.ClickedFeaturedCallToAction(), globalThis.showcaseItemID, ils.communityTitle);\n }\n break;\n case 5:\n ils.viewModel.ActiveTabText(\"Apply Online\");\n // If we have a featured call to action and it's the first time being clicked then log this to google analytics\n if (isFeaturedCallToAction && !ils.viewModel.ClickedFeaturedCallToAction()) {\n ils.viewModel.ClickedFeaturedCallToAction(ils.viewModel.ActiveTabText());\n gaTrackFeaturedCallToAction(ils.viewModel.ClickedFeaturedCallToAction(), globalThis.showcaseItemID, ils.communityTitle);\n }\n break;\n default:\n ils.viewModel.ActiveTabText(\"Get MoreInformation\");\n // If we have a featured call to action and it's the first time being clicked then log this to google analytics\n if (isFeaturedCallToAction && !ils.viewModel.ClickedFeaturedCallToAction()) {\n ils.viewModel.ClickedFeaturedCallToAction(ils.viewModel.ActiveTabText());\n gaTrackFeaturedCallToAction(ils.viewModel.ClickedFeaturedCallToAction(), globalThis.showcaseItemID, ils.communityTitle);\n }\n break;\n }\n var timeout = setTimeout(function () {\n $(\"#contact-menu\").removeClass(\"in\");\n $(\"#contact-menu\").css(\"height\", \"20px\");\n clearTimeout(timeout);\n }, 250);\n }\n ils.askQuestionMobile = askQuestionMobile;\n function checkAvailability(currentFloorPlan, e) {\n if (!currentFloorPlan) {\n return;\n }\n navigateToCheckAvailability();\n //$('.cdp-menu a[href=\"#ask-question\"]').click();\n ToggleSelectedFloorPlan(currentFloorPlan.FloorPlanID);\n }\n ils.checkAvailability = checkAvailability;\n function BindPriceSlider() {\n var sliderElement = $(\"#uxPriceRangeSlider\");\n var values = ils.viewModel.FloorPlanPrices();\n var value1 = globalThis.priceMin && globalThis.priceMin > values[0] ? globalThis.priceMin : values[0];\n var value2 = globalThis.priceMax && globalThis.priceMax < values[values.length - 1] ? globalThis.priceMax : values[values.length - 1];\n sliderElement.slider({\n range: true,\n step: 50,\n min: values[0],\n max: values[values.length - 1],\n values: [value1, value2],\n create: function (event, ui) {\n if (sliderElement.find(\".handle-text\").length == 0)\n sliderElement.find(\".ui-slider-handle\").append('');\n sliderElement.find(\".ui-slider-handle:last\").addClass(\"reverse\");\n UnstackSliderLabels(sliderElement.find(\".ui-slider-handle:\" + (value2 == values[0] ? \"last\" : \"first\")), value1, value2);\n priceSliderUpdateFilter(sliderElement);\n },\n slide: function (event, ui) {\n var handle = $(ui.handle);\n handle.find(\".handle-text\").html(\"$\" + ui.value);\n UnstackSliderLabels(handle, ui.values[0], ui.values[1]);\n },\n stop: function (event, ui) {\n priceSliderUpdateFilter(sliderElement);\n }\n });\n sliderElement.find(\".handle-text:first\").html(\"$\" + value1);\n sliderElement.find(\".handle-text:last\").html(\"$\" + value2);\n }\n ils.BindPriceSlider = BindPriceSlider;\n function FixHeightsAfterImagesLoaded(element) {\n $(element).imagesLoaded().always(function () {\n globalThis.SetDynamicElements($(element).parent());\n });\n }\n function TrackTimeForNewTab(tabName) {\n if (currentTiming)\n currentTiming.stopTracking();\n var previousTiming = ko.utils.arrayFirst(pageTimings, function (item) {\n return item.name == tabName;\n });\n if (previousTiming)\n currentTiming = previousTiming;\n else\n currentTiming = new ils.PageTiming(tabName);\n currentTiming.startTracking();\n if (!previousTiming)\n pageTimings.push(currentTiming);\n }\n function SendTimings() {\n if (globalThis.hasRoles || !ils.isSiteLive)\n return;\n currentTiming.stopTracking();\n for (var i = 0; i < pageTimings.length; i++) {\n if (pageTimings[i].timeDuration > 0) {\n ils.trackTimingEvent(\"CDP Tab\", pageTimings[i].name, Math.min(pageTimings[i].timeDuration, 600000), ils.communityName, ils.communityId); //Don't allow for more than 10 minutes per tab (idle)\n if (globalThis.abTestOverview != null) {\n ils.trackTimingEvent(\"ABCDP Tab\" + (globalThis.abTestOverview ? \"main\" : \"alternate\"), pageTimings[i].name, Math.min(pageTimings[i].timeDuration, 600000), ils.communityName, ils.communityId); //Don't allow for more than 10 minutes per tab (idle)\n }\n }\n }\n for (let i = 0; i < ils.viewModel.ProspectForm.StepManager.ProgressSteps().length; i++) {\n let step = ils.viewModel.ProspectForm.StepManager.ProgressSteps()[i];\n step.StepTiming.stopTracking();\n if (!step || step.StepTiming.timeDuration <= 0) {\n continue;\n }\n let timeDuration = Math.min(step.StepTiming.timeDuration, 600000); // Max 10 minutes so we don't count idle time\n ils.trackTimingEvent(\"Form Step\", step.StepTiming.name, timeDuration, ils.communityName, ils.communityId);\n //ga('send', 'timing', 'Form Step', step.StepTiming.name, timeDuration);\n if (!ils.isSiteLive) {\n console.log(`Total time sent to Google Analytics for ${step.StepName} is ${timeDuration.toString()}`);\n }\n }\n }\n function scrollToActiveTab(hrefHashId) {\n isAutoScrolling = true;\n $([document.documentElement, document.body]).animate({\n scrollTop: $(hrefHashId).offset().top - 100\n }, 0, function () {\n isAutoScrolling = false;\n });\n }\n ;\n function getQueryVariable(variable) {\n var query = window.location.search.substring(1);\n var vars = query.split(\"&\");\n for (var i = 0; i < vars.length; i++) {\n var pair = vars[i].split(\"=\");\n if (pair[0] == variable) {\n return pair[1];\n }\n }\n return (false);\n }\n ;\n function setTabFromScrollPosition() {\n let targetHref = ils.activeTabHash;\n // This iterates through each tab section (the viewable area of the tab) and sets the tab to active or inactive. The last one we process here\n // is the one that will be the active tab\n $('.cdp-section').each(function () {\n if ($(window).scrollTop() >= ($(this).offset().top - 300)) {\n var id = $(this).attr('id');\n targetHref = $(\".nav li.cdp-tab a[href='#\" + id + \"']\").attr(\"href\");\n $(\".nav li.cdp-tab\").toggleClass(\"active\", false);\n $(\".nav li.cdp-tab a[href='#\" + id + \"']\").parent(\"li\").toggleClass(\"active\", true);\n }\n });\n // Take action on the tab we ended up on\n if (targetHref !== ils.activeTabHash) {\n takeActionOnTab(targetHref);\n ils.activeTabHash = targetHref;\n }\n }\n ;\n function navigateToCheckAvailability() {\n ils.viewModel.ActiveTabText(\"Check Availability\");\n ils.viewModel.ProspectForm.ContactTypeID(3);\n switchTabs(null, \"#ask-question\");\n }\n function navigateToScheduleTour() {\n ils.viewModel.ActiveTabText(\"Schedule a Tour\");\n ils.viewModel.ProspectForm.ContactTypeID(2);\n switchTabs(null, \"#ask-question\");\n // Make a call to the API to sync latest tour times\n fetch(`${globalThis.baseUrl}mvc-api/showcase/sync-available-tour-time-slots?showcaseItemID=${globalThis.showcaseItemID}`, {\n method: 'GET'\n })\n .then(response => response.text())\n .then(content => {\n console.log(content);\n })\n .catch(error => console.warn(error));\n }\n function navigateToApplyNow() {\n ils.viewModel.ActiveTabText(\"Apply Now\");\n ils.viewModel.ProspectForm.ContactTypeID(5);\n switchTabs(null, \"#ask-question\");\n }\n function takeActionOnTab(targetHref) {\n if (!targetHref) {\n return;\n }\n const text = !ils.viewModel.ActiveTabText() ? $(`.cdp-menu a[href='${targetHref}']`).text().trim() : ils.viewModel.ActiveTabText();\n const tabClickData = {\n communityId: ils.communityId,\n communityName: ils.communityName,\n tabName: text,\n communityUrl: ils.communityUrl\n };\n ils.trackCDPTabClickEvent(tabClickData);\n TrackTimeForNewTab(text);\n ils.viewModel.ProspectForm.StepManager.TurnOnStepTimeTracking(targetHref === \"#ask-question\");\n // We're resetting this to an null because this only gets set when the text does not match the tab (i.e. Get More Information vs Schedule a Tour)\n ils.viewModel.ActiveTabText(null);\n // Take action based on the tab we're on\n if (targetHref == \"#floorplans\") {\n if (!ils.floorPlanLoaded) {\n BindPriceSlider();\n BindBedroomSlider();\n ils.floorPlanLoaded = true;\n }\n }\n else if (targetHref == \"#neighborhood\") {\n if (!ils.googleStaticNeighborhoodMapLoaded) {\n maps.initializeStaticNeighborhoodMap();\n if ($.inArray(globalThis.neighborhoodAdTypeID, ils.trackedAdViews) == -1) {\n TrackAdView(globalThis.neighborhoodAdTypeID);\n ils.trackedAdViews.push(globalThis.neighborhoodAdTypeID);\n }\n }\n else {\n if ($.inArray(globalThis.neighborhoodAdTypeID, ils.trackedAdViews) == -1) {\n TrackAdView(globalThis.neighborhoodAdTypeID);\n ils.trackedAdViews.push(globalThis.neighborhoodAdTypeID);\n }\n }\n }\n else if (targetHref == \"#amenities\" && !hasRoles) {\n if (ils.trackedImpressions.length == 0) {\n $(\".attribute-list [data-impression]\").each(function () {\n var impressionID = $(this).data(\"impression\");\n ils.trackedImpressions.push(impressionID);\n });\n if (ils.trackedImpressions.length > 0)\n $.ajax({\n type: 'POST',\n url: globalThis.baseUrl + \"TftServices/Showcase/ShowcaseWebMethods.asmx/TrackAttributeListingImpression\",\n data: '{ showcaseAttributeValueID: ' + JSON.stringify(ils.trackedImpressions) + '}',\n contentType: 'application/json; charset=utf-8',\n dataType: 'json'\n });\n }\n if ($.inArray(globalThis.amenityAdTypeID, ils.trackedAdViews) == -1) {\n TrackAdView(globalThis.amenityAdTypeID);\n ils.trackedAdViews.push(globalThis.amenityAdTypeID);\n }\n }\n else if (targetHref == \"#hours-directions\") {\n if (!ils.googleStaticCommunityMapLoaded) {\n maps.initializeStaticMap();\n }\n }\n else if (targetHref == \"#facebook-feed\") {\n const clickData = {\n communityId: ils.communityId,\n communityName: ils.communityName,\n communityUrl: ils.communityUrl,\n clickTypeId: ClickType.FacebookFeed\n };\n TrackClickData(clickData);\n }\n else if (targetHref == \"#news\") {\n const clickData = {\n communityId: ils.communityId,\n communityName: ils.communityName,\n communityUrl: ils.communityUrl,\n clickTypeId: ClickType.LocalNews\n };\n TrackClickData(clickData);\n }\n }\n function switchTabs(e, target) {\n var _a;\n let targetHref = target !== null && target !== void 0 ? target : (_a = e.target) === null || _a === void 0 ? void 0 : _a.href;\n if (!targetHref) {\n let element = e.target;\n while (element && !element.hasAttribute('href') && !element.tagName.match(/body/i)) {\n element = element.parentElement;\n }\n const parentHref = element === null || element === void 0 ? void 0 : element.getAttribute('href');\n targetHref = parentHref !== null && parentHref !== void 0 ? parentHref : '#overview';\n }\n scrollToActiveTab(targetHref);\n if (globalThis.breakpoint() == \"mobile\")\n document.querySelectorAll('.cdp').forEach((el) => el.classList.remove('side-nav-open'));\n }\n function PhotoIframeClick(e) {\n const targetElem = $(e.target);\n let listElem = targetElem.closest('li');\n const isFloorPlan = listElem && listElem.hasClass(\"floorplan\");\n let element = targetElem;\n if (!targetElem.is('[href]'))\n element = targetElem.closest('[href]'); //catch bubbles\n const photoModal = $(\"#photo-modal\");\n const modalExtra = photoModal.find('.modal-extra');\n const modalNav = modalExtra.find('.modal-navigation');\n const galleryInfo = modalExtra.find(\".gallery-info\");\n const gallery = element.prop(\"rel\") != '';\n const hasVirtualTour = element.data('tour');\n if (isFloorPlan) {\n }\n SetModalBodyContent(element);\n modalNav.toggle(gallery);\n galleryInfo.toggle(gallery);\n if (gallery) {\n if (element.hasClass(\"clone\"))\n element = $(`[rel='${element.prop(\"rel\")}'][href='${element.attr(\"href\")}']:not(.clone)`);\n var galleryIndex = element.data(\"id\");\n var totalInGallery = $(`[rel='${element.prop(\"rel\")}']:not(.clone)`).length;\n if (element.prop(\"rel\").indexOf(\"floorplan\") == 0) {\n galleryIndex = 1;\n totalInGallery = $(\".media-items [data-additional-galleries*=\" + element.prop(\"rel\").replace(\"floorplan-\", \"\") + \"]\").length + 1;\n }\n photoModal.data(\"gallery-number\", galleryIndex);\n photoModal.data(\"gallery-name\", element.prop(\"rel\"));\n galleryInfo.find(\".current\").html(galleryIndex);\n galleryInfo.find(\".total\").html(totalInGallery.toString());\n if (hasVirtualTour) {\n navigatePhotoModal(e, true);\n }\n }\n parent.$(\"#iframe-modal > .modal-dialog > .modal-content > .modal-header > .close\").hide();\n photoModal.modal();\n photoModal.on('hide.bs.modal', function (e) {\n parent.$(\"#iframe-modal > .modal-dialog > .modal-content > .modal-header > .close\").show();\n });\n return false;\n }\n function navigatePhotoModal(e, goToVirtualTour = false) {\n var photoModal = $(\"#photo-modal\");\n var galleryInfo = photoModal.find(\".modal-extra .gallery-info\");\n var galleryName = photoModal.data(\"gallery-name\");\n var nextIndex = photoModal.data(\"gallery-number\");\n if ($(this).hasClass('prev'))\n nextIndex--;\n else\n nextIndex++;\n var totalItems = parseInt(galleryInfo.find(\".total\").text());\n if (nextIndex > totalItems)\n nextIndex = 1;\n else if (nextIndex <= 0)\n nextIndex = totalItems;\n galleryInfo.find(\".current\").html(nextIndex);\n photoModal.data(\"gallery-number\", nextIndex);\n var element = galleryName.indexOf(\"floorplan\") == -1\n ? $(\"a[rel='\" + galleryName + \"'][data-id='\" + nextIndex + \"']\") : nextIndex == 1 ? $(\"a[rel=\" + galleryName + \"]\")\n : goToVirtualTour\n ? $(`.media-items [data-floorplan-virtual-tour*=${galleryName.replace(\"floorplan-\", \"\")}]:eq(${nextIndex - 2})`)\n : $(`.media-items [data-additional-galleries*=${galleryName.replace(\"floorplan-\", \"\")}]:eq(${nextIndex - 2})`);\n SetModalBodyContent(element);\n }\n function SetModalBodyContent(element) {\n var photoModal = $(\"#photo-modal\");\n var modalBody = photoModal.find('.modal-body');\n var modalExtra = photoModal.find('.modal-extra');\n if (element.attr(\"href\") && element.attr(\"href\").indexOf('#') == 0) {\n modalBody.html($(element.attr(\"href\")).html());\n // This is how we track impressions on a 3Dx Virtual Tour. We can't track a click event on an iframe, so \n // this is the next best thing.\n const displayElement = $($(element.attr(\"href\")).html());\n if (displayElement.hasClass('virtual-tour-iframe')) {\n const vtUrl = displayElement.attr('src');\n Track3DxVirtualTourViewedEvent(vtUrl, ils.communityId, ils.communityName);\n }\n }\n else\n modalBody.html('\"'');\n modalExtra.find(\".title > span\").html(element.prop(\"title\"));\n }\n function BindBedroomSlider() {\n var sliderElement = $(\"#uxBedroomRangeSlider\");\n var values = ils.viewModel.FloorPlanBedrooms();\n var value1 = globalThis.bedroomMin && globalThis.bedroomMin > values[0] ? globalThis.bedroomMin : values[0];\n var value2 = globalThis.bedroomMax && globalThis.bedroomMax < values[values.length - 1] ? globalThis.bedroomMax : values[values.length - 1];\n sliderElement.slider({\n range: true,\n min: values[0],\n max: values[values.length - 1],\n values: [value1, value2],\n create: function (event, ui) {\n if (sliderElement.find(\".handle-text\").length == 0)\n sliderElement.find(\".ui-slider-handle\").append('');\n sliderElement.find(\".handle-text:first\").html(FormatBedroomText(value1));\n sliderElement.find(\".handle-text:last\").html(FormatBedroomText(value2));\n sliderElement.find(\".ui-slider-handle:last\").addClass(\"reverse\");\n UnstackSliderLabels(sliderElement.find(\".ui-slider-handle:\" + (value2 == values[0] ? \"last\" : \"first\")), value1, value2);\n bedroomSliderUpdateFilter(sliderElement);\n },\n slide: function (event, ui) {\n var handle = $(ui.handle);\n handle.find(\".handle-text\").html(FormatBedroomText(ui.value));\n UnstackSliderLabels(handle, ui.values[0], ui.values[1]);\n },\n stop: function (event, ui) {\n bedroomSliderUpdateFilter(sliderElement);\n }\n });\n }\n function priceSliderUpdateFilter(sliderElement) {\n var minValue = sliderElement.slider(\"values\", 0);\n var maxValue = sliderElement.slider(\"values\", 1);\n ils.viewModel.PriceMin(minValue);\n ils.viewModel.PriceMax(maxValue);\n }\n function bedroomSliderUpdateFilter(sliderElement) {\n var minValue = sliderElement.slider(\"values\", 0);\n var maxValue = sliderElement.slider(\"values\", 1);\n if (minValue == \"Studio\")\n minValue = 0;\n if (maxValue == \"Studio\")\n maxValue = 0;\n ils.viewModel.BedroomMin(minValue);\n ils.viewModel.BedroomMax(maxValue);\n }\n function UnstackSliderLabels(handle, value1, value2) {\n var unstackTimeout = setTimeout(function () {\n var handleText = handle.find(\".handle-text\");\n var rightHandleLabel = handle.parent().find(\".ui-slider-handle:last .handle-text\");\n if (value1 == value2) {\n handle.addClass(\"on-top\");\n handleText.html(\"Only\");\n }\n else {\n handle.removeClass(\"on-top\");\n }\n var leftHandleLabel = handle.parent().find(\".ui-slider-handle:first .handle-text\");\n leftHandleLabel.css(\"margin-left\", \"0px\");\n rightHandleLabel.css(\"margin-left\", \"0px\");\n var leftHandleEnd = leftHandleLabel.offset().left + leftHandleLabel.outerWidth(true);\n var rightHandleStart = rightHandleLabel.offset().left;\n var offset = rightHandleStart - leftHandleEnd;\n if (offset < 0) {\n if (handle.hasClass(\"reverse\"))\n rightHandleLabel.css(\"margin-left\", offset + \"px\");\n else\n leftHandleLabel.css(\"margin-left\", offset + \"px\");\n }\n clearTimeout(unstackTimeout);\n }, 5);\n }\n function FormatBedroomText(numBeds) {\n return numBeds == 0 ? \"Studio\" : numBeds + \"BR\";\n }\n document.addEventListener(\"DOMContentLoaded\", function () {\n ////////////////////////////\n // Setup analytics tracking for 3Dx Virtual Tours \n ////////////////////////////\n const virtualTourFrames = document.getElementsByClassName(\"virtual-tour-iframe\");\n if (virtualTourFrames.length > 0) {\n window.addEventListener('blur', () => {\n var isVirtualTour = document.activeElement.classList.contains('virtual-tour-iframe');\n if (isVirtualTour) {\n try {\n const activatedVirtualTour = document.activeElement;\n const src = activatedVirtualTour.src;\n console.log(\"Sending 'Explored' event for 3Dx Virtual Tours\");\n Track3DxVirtualTourViewedEvent(src, ils.communityId, ils.communityName);\n }\n catch (e) {\n console.error(e);\n }\n }\n });\n }\n // Time tracking for tabs\n TrackTimeForNewTab($(\".cdp-menu .active a\").text());\n ko.applyBindings(ils.viewModel);\n if ($(\"#floorplans\").length > 0)\n $.ajax({\n type: 'POST',\n url: globalThis.baseUrl + \"TftServices/Showcase/ShowcaseWebMethods.asmx/LoadFloorPlans\",\n data: `{ showcaseItemID: \"${globalThis.showcaseItemID}\"}`,\n contentType: 'application/json; charset=utf-8',\n dataType: 'json',\n success: function (data) {\n var tempFloorPlans = [];\n for (let i = 0; i < data.d.length; i++) {\n let sourcePlan = {};\n Object.assign(sourcePlan, data.d[i]);\n sourcePlan.VirtualTourUrl = data.d[i].VirtualTourMedia ? data.d[i].VirtualTourMedia.URL : null;\n let tempPlan = new ils.FloorPlanInfo(sourcePlan);\n tempFloorPlans.push(tempPlan);\n }\n ils.viewModel.FloorPlans(tempFloorPlans);\n $(\".floorplan .add-tooltip\").tooltip();\n //$('a[data-toggle=\"tab\"]').on('shown.bs.tab', function (e) {\n // switchTabs(e);\n //});\n $('[data-contact=\"check-availability\"]').on(\"click\", function (e) {\n $(e.target).attr(\"href\", \"#ask-question\");\n ils.viewModel.ActiveTabText(\"Check Availability\");\n ils.viewModel.ProspectForm.ContactTypeID(3);\n });\n allFloorPlansLoaded = true;\n FixHeightsAfterImagesLoaded($(\"#floorplans\"));\n BindPriceSlider();\n BindBedroomSlider();\n // This shows/hides elements that are being used for A/B tests on Google Optimize. The `.g-ab-test` is a custom class for targeting elements\n var timeout = setTimeout(function () {\n $('.g-ab-test').toggleClass(\"hide\", !globalThis.googleOptimizeIsLoaded);\n clearTimeout(timeout);\n }, 2000);\n }\n });\n window.addEventListener('focus', function () {\n var _a;\n if (!windowInactiveTime)\n return;\n try {\n const timeInactive = Math.abs((new Date() - windowInactiveTime));\n (_a = currentTiming.startTime) === null || _a === void 0 ? void 0 : _a.setMilliseconds(currentTiming.startTime.getMilliseconds() + timeInactive);\n }\n catch (error) {\n console.error(error);\n }\n });\n window.addEventListener('blur', function () {\n windowInactiveTime = new Date();\n });\n if (parent.$(\"#iframe-modal\").length > 0) {\n $(\"body\").addClass(\"in-modal\");\n parent.$(\"#iframe-modal\").off('hide.bs.modal').off('hidden.bs.modal').on('hide.bs.modal', function (e) {\n SendTimings();\n ils.viewModel.ProspectForm.StepManager.SendFormCompletionMetrics(ils.viewModel.ProspectForm.SubmitHasBeenClicked());\n }).on('hidden.bs.modal', function (e) {\n $(e.target).find(\".modal-body\").html(\"\");\n });\n parent.$(window).blur(function () {\n windowInactiveTime = new Date();\n });\n }\n else {\n window.addEventListener('beforeunload', function (event) {\n SendTimings();\n ils.viewModel.ProspectForm.StepManager.SendFormCompletionMetrics(ils.viewModel.ProspectForm.SubmitHasBeenClicked());\n });\n }\n if (!globalThis.hasRoles) {\n ils.trackCommunityViewEvent({ communityId: ils.communityId, communityName: ils.communityName, communityUrl: ils.communityUrl });\n }\n if (globalThis.abTestOverview != null) {\n TrackABView(`${globalThis.abOverviewName}View`, globalThis.abTestOverview ? \"main\" : \"alternate\", ils.communityId, ils.communityName);\n }\n $(\".header-action a.href-action\").on('click', function () {\n const text = $(this).text();\n // If they click the phone number in the upper right of the CDP\n if (text && text.startsWith('(')) {\n TrackClickData({ clickTypeId: 9, communityId: ils.communityId, communityName: ils.communityName, communityUrl: ils.communityUrl });\n }\n });\n function OnResize() {\n document.querySelector(\".header\").style.width = `${document.querySelector(\".body-content\").offsetWidth}px`;\n }\n window.addEventListener('resize', function () {\n OnResize();\n });\n OnResize();\n if ($(\".navigation .navbar\").length > 0) {\n $(\".header\").affix({\n offset: { top: Math.max($(\".navigation\").outerHeight(true), 1) }\n });\n $($(window).width() < 985 ? \"#cdp-menu-collapse\" : \".cdp-menu\").affix({\n offset: {\n top: Math.max($(\".navigation\").outerHeight(true), 1),\n bottom: function () {\n if ($(\"footer\").length > 0)\n return (this.bottom = $(\"footer\").outerHeight(true) + parseInt($(\".cdp\").css(\"padding-bottom\")));\n }\n }\n }).on(\"affix.bs.affix\", function () {\n if ($(window).scrollTop() == 0)\n return false;\n });\n }\n else {\n $(\".header,\" + ($(window).width() < 985 ? \"#cdp-menu-collapse\" : \".cdp-menu\")).addClass(\"affix\");\n $(\".body-content .tab-content\").css(\"padding-top\", $(\".header\").outerHeight() + 10);\n }\n if (globalThis.breakpoint() == \"mobile\") {\n $(\".header .navbar-toggle\").on('click', function () {\n $(\".cdp\").toggleClass(\"side-nav-open\");\n return false;\n });\n }\n const tabLinks = document.querySelectorAll('a[data-toggle=\"tab\"]');\n tabLinks.forEach(link => {\n link.addEventListener('click', (e) => {\n const targetElem = e.target;\n const target = targetElem.getAttribute(\"href\");\n switchTabs(e, target);\n });\n });\n const tabClickLinks = document.querySelectorAll('a[data-toggle=\"tab-click\"]');\n tabClickLinks.forEach(link => {\n link.addEventListener('click', (e) => {\n const targetElem = e.target;\n const target = targetElem.getAttribute(\"href\");\n switchTabs(e, target);\n ils.viewModel.ProspectForm.ContactTypeID(1);\n });\n });\n const contactMenu = document.querySelector(\"#contact-menu a\");\n if (contactMenu) {\n contactMenu.addEventListener('click', function () {\n const contactOptions = document.querySelectorAll(\".contact-options a\");\n if (contactOptions.length > 0) {\n contactOptions[0].click();\n }\n });\n }\n if (globalThis.breakpoint() == \"mobile\") {\n const cdpMenuLinks = document.querySelectorAll(\".header .cdp-menu a\");\n cdpMenuLinks.forEach(link => {\n link.addEventListener('click', () => {\n document.querySelector(\".navbar-toggle\").click();\n });\n });\n }\n $(\".media-items a[rel], .media-item\").on('click', PhotoIframeClick);\n $(document).on('click', '.floorplan .photo', PhotoIframeClick);\n $(\"#photo-modal .modal-navigation a\").on(\"click\", navigatePhotoModal);\n if ($(\".media-items ul li\").length <= 5 && globalThis.breakpoint() != \"mobile\") {\n $(\".media-items ul\").css({ margin: \"0 auto\", width: $(\".media-items ul li\").outerWidth(true) * $(\".media-items ul li\").length });\n }\n if (globalThis.breakpoint() == \"mobile\") {\n $(\".map-address\").each(function () {\n var mapLink = '\", \" \") + '\">' + $(this).html() + '';\n $(this).html(mapLink);\n });\n }\n $(\".resend\").on('click', function () {\n $(\".send-container\").show();\n $(\".send-complete\").hide();\n });\n $(\"#uxSwitchDirection\").on('click', function () {\n var directionAValue = $(\"#uxDirectionsAptAddress\").val();\n var directionAPlaceHolder = $(\"#uxDirectionsAptAddress\").attr(\"placeholder\");\n var directionBValue = $(\"#uxDirectionsBAddress\").val();\n var directionBPlaceHolder = $(\"#uxDirectionsBAddress\").attr(\"placeholder\");\n $(\"#uxDirectionsAptAddress\").val(directionBValue).attr(\"placeholder\", directionBPlaceHolder);\n $(\"#uxDirectionsBAddress\").val(directionAValue).attr(\"placeholder\", directionAPlaceHolder);\n return false;\n });\n $(\"#uxGetDirections\").on('click', function () {\n var directionAValue = $(\"#uxDirectionsAptAddress\").val();\n var directionBValue = $(\"#uxDirectionsBAddress\").val();\n if (directionAValue == globalThis.communityName) {\n directionAValue = globalThis.residenceAddress;\n }\n if (directionBValue == globalThis.communityName) {\n directionBValue = globalThis.residenceAddress;\n }\n GetDirections(directionAValue, directionBValue);\n return false;\n });\n function GetDirections(sAddr, dAddr) {\n sAddr = sAddr.replace(/ /g, \"+\");\n dAddr = dAddr.replace(/ /g, \"+\");\n if (sAddr == '' || dAddr == '') {\n alert('You must fill in your address to get directions.');\n return;\n }\n const clickData = {\n communityId: ils.communityId,\n communityName: ils.communityName,\n communityUrl: ils.communityUrl,\n clickTypeId: ClickType.Directions\n };\n TrackClickData(clickData);\n var directionsUrl = `http://maps.google.com/maps?f=d&source=s_d&saddr=${sAddr}&daddr=${dAddr}&hl=en`;\n const keyLeadData = {\n communityId: ils.communityId,\n communityName: ils.communityName,\n communityUrl: ils.communityUrl,\n keyLeadType: ils.aptsforConstants.keyLeadTypes.directionsRequested,\n additionalData: {\n directionsUrl: directionsUrl\n }\n };\n ils.trackKeyLead(keyLeadData);\n window.open(directionsUrl);\n }\n $(\".add-tooltip\").tooltip();\n if ($(\".contact-form ul.floorplans li\").length == 5 && globalThis.breakpoint() != \"mobile\") {\n $(\".contact-form ul.floorplans\").css({ margin: \"0 auto\", width: $(\".contact-form ul.floorplans li\").css(\"min-width\") });\n }\n $(\"#selectAllFloorplans,#newSelectAllFloorPlans\").on('click', function () {\n for (var i = 0; i < ils.viewModel.FloorPlans().length; i++) {\n if ($.inArray(ils.viewModel.FloorPlans()[i].FloorPlanID, ils.viewModel.ProspectForm.SelectedFloorPlans()) == -1)\n ils.viewModel.ProspectForm.SelectedFloorPlans.push(ils.viewModel.FloorPlans()[i].FloorPlanID);\n }\n });\n $(\"#uxNewDateOfVisit_datetimepicker\").on(\"dp.change\", function (e) {\n ils.viewModel.ProspectForm.DateOfVisit(e.date);\n let dateValue = `${$(\"#uxNewDateOfVisit_uxDate\").val()}`;\n if (!dateValue || dateValue === \"undefined\") {\n dateValue = \"\";\n }\n getHoursOpen(dateValue);\n });\n const shareLinks = document.querySelectorAll(\".share-links a[target='_blank']\");\n shareLinks.forEach(link => {\n link.addEventListener(\"click\", (event) => {\n event.preventDefault();\n window.open(link.getAttribute(\"href\"), link.getAttribute(\"title\"), 'width=640,height=300');\n });\n });\n const photoModal = document.querySelector(\"#photo-modal\");\n if (photoModal) {\n photoModal.addEventListener(\"keydown\", (e) => {\n var _a, _b;\n switch (e.key) {\n case \"ArrowLeft\":\n (_a = document.querySelector(\".modal-navigation .prev\")) === null || _a === void 0 ? void 0 : _a.click();\n break;\n case \"ArrowRight\":\n (_b = document.querySelector(\".modal-navigation .next\")) === null || _b === void 0 ? void 0 : _b.click();\n break;\n default:\n return;\n }\n e.preventDefault();\n });\n }\n if (!$(\"#neighborhood\").hasClass(\"all-blocks\")) {\n $(\"#neighborhood .on-the-left\").append($(\"#neighborhood .summary\"));\n }\n // Write a vanilla JS query for all elements containing the class 'other-communities' and loop through them to add the click event\n const otherCommunities = document.querySelectorAll(\".other-communities .community\");\n otherCommunities.forEach(community => {\n community.addEventListener(\"click\", (e) => {\n var _a;\n let element = e.target;\n while (element && !element.getAttribute('href')) {\n element = element.parentNode;\n }\n if (element && !hasRoles) {\n ils.trackCDPClickEvent({\n communityId: ils.communityId,\n communityName: ils.communityName,\n communityUrl: ils.communityUrl,\n clickTypeId: ClickType.ScheduleTourNearbyCommunities,\n clickType: getClickTypeNameFromId(ClickType.ScheduleTourNearbyCommunities),\n relatedData: (_a = element.querySelector(\".name\")) === null || _a === void 0 ? void 0 : _a.textContent\n });\n }\n const iframeModal = parent.document.querySelector(\"#iframe-modal\");\n if (iframeModal) {\n const iframe = iframeModal.querySelector(\"iframe\");\n if (iframe) {\n iframe.setAttribute(\"src\", element.getAttribute(\"href\") || \"\");\n e.preventDefault();\n }\n }\n });\n });\n $(\".reset-floorplans\").on('click', function () {\n ils.viewModel.BedroomMin(null);\n ils.viewModel.BedroomMax(null);\n ils.viewModel.PriceMin(null);\n ils.viewModel.PriceMax(null);\n var sliderElement = $(\"#uxPriceRangeSlider\");\n if (sliderElement.length > 0) {\n sliderElement.slider(\"values\", [sliderElement.slider(\"option\", \"min\"), sliderElement.slider(\"option\", \"max\")]);\n sliderElement.find(\".ui-slider-handle\").removeClass(\"on-top\");\n sliderElement.find(\".handle-text:first\").html(\"$\" + sliderElement.slider(\"option\", \"min\"));\n sliderElement.find(\".handle-text:last\").html(\"$\" + sliderElement.slider(\"option\", \"max\"));\n }\n priceSliderUpdateFilter(sliderElement);\n sliderElement = $(\"#uxBedroomRangeSlider\");\n if (sliderElement.length > 0) {\n sliderElement.slider(\"values\", [sliderElement.slider(\"option\", \"min\"), sliderElement.slider(\"option\", \"max\")]);\n sliderElement.find(\".ui-slider-handle\").removeClass(\"on-top\");\n sliderElement.find(\".handle-text:first\").html(FormatBedroomText(sliderElement.slider(\"option\", \"min\")));\n sliderElement.find(\".handle-text:last\").html(FormatBedroomText(sliderElement.slider(\"option\", \"max\")));\n }\n bedroomSliderUpdateFilter(sliderElement);\n FixHeightsAfterImagesLoaded($(\"#floorplans\"));\n return false;\n });\n $(\".read-more\").on('click', function () {\n if (!readMoreClicked) {\n ils.trackCDPClickEvent({\n communityId: ils.communityId,\n communityName: ils.communityName,\n communityUrl: ils.communityUrl,\n clickTypeId: ClickType.Details,\n clickType: \"Read More\"\n });\n //ga('send', 'event', 'CDPMoreInformation', 'click', globalThis.currentURL);\n }\n readMoreClicked = true;\n });\n $(\".favorite\").on('click', function () {\n if (!loggedIn) {\n parent.$(\"#uxExtraAction\").val(`Favorited:${globalThis.showcaseItemID}`);\n return;\n }\n $(this).toggleClass(\"on\");\n if ($(this).hasClass(\"on\"))\n $(\".trash\").removeClass(\"on\");\n $.ajax({\n type: 'POST',\n url: globalThis.baseUrl + \"TftServices/MyFolder/MyFolderWebMethods.asmx/ToggleFavorite\",\n data: `{ showcaseItemID: \"${globalThis.showcaseItemID}\", favorited: \"${$(this).hasClass(\"on\")}\"}`,\n contentType: 'application/json; charset=utf-8',\n dataType: 'json'\n });\n });\n $(\".trash\").on('click', function () {\n if (!loggedIn) {\n parent.$(\"#uxExtraAction\").val(`Trashed:${globalThis.showcaseItemID}`);\n return;\n }\n $(this).toggleClass(\"on\");\n if ($(this).hasClass(\"on\"))\n $(\".favorite\").removeClass(\"on\");\n $.ajax({\n type: 'POST',\n url: globalThis.baseUrl + \"TftServices/MyFolder/MyFolderWebMethods.asmx/ToggleTrash\",\n data: `{ showcaseItemID: \"${globalThis.showcaseItemID}\", trashed: \"${$(this).hasClass(\"on\")}\"}`,\n contentType: 'application/json; charset=utf-8',\n dataType: 'json'\n });\n });\n window.addEventListener('scroll', function (e) {\n if (isAutoScrolling === true) {\n return;\n }\n setTabFromScrollPosition();\n });\n //maps.initializeNeighborhoodMap();\n //maps.initializeMap();\n if (!ils.floorPlanLoaded) {\n var floorPlanTimeout = setTimeout(function () {\n BindPriceSlider();\n BindBedroomSlider();\n ils.floorPlanLoaded = true;\n FixHeightsAfterImagesLoaded($(\"#floorplans\"));\n clearTimeout(floorPlanTimeout);\n }, 1000);\n }\n setTabFromScrollPosition();\n var positionTimeout = setTimeout(function () {\n // Now check to see if we have a URL fragment pointing to a different \n var url = document.location.toString();\n var scheduleTour = getQueryVariable(\"scheduleTour\");\n if (url.match('#') && !scheduleTour) {\n $('.cdp-menu a[href=\"#' + url.split('#')[1] + '\"]').click();\n }\n else if (scheduleTour) {\n var scheduleTourTimeout = setTimeout(function () {\n $(\".schedule-tour\").click();\n clearTimeout(scheduleTourTimeout);\n }, 1000);\n }\n clearTimeout(positionTimeout);\n }, 500);\n ils.viewModel.GetInfoButtonsVisible(true);\n });\n})(ils || (ils = {}));\n"]}