{"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","undefined","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","title","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                            `<span class=\"ilsicon ilsicon-faq-bubble\"></span>`\n                        ];\n                        html.push(...getMoreInfoIcons);\n                        break;\n                    case showcase.FormType.ScheduleTour:\n                        const scheduleTourIcons = [\n                            `<span class=\"ilsicon-stack\">`,\n                            `   <span class=\"ilsicon ilsicon-calendar-p3 third\"></span><span class=\"ilsicon ilsicon-calendar brand-primary\"></span><span class=\"ilsicon ilsicon-calendar-p2 brand-secondary\"></span>`,\n                            `</span>`\n                        ];\n                        html.push(...scheduleTourIcons);\n                        break;\n                    case showcase.FormType.CheckAvailability:\n                        const checkAvailabilityIcons = [\n                            `<span class=\"ilsicon-stack\">`,\n                            `   <span class=\"ilsicon ilsicon-magnify-p3 third\"></span><span class=\"ilsicon ilsicon-magnify-p1 brand-primary\"></span><span class=\"ilsicon ilsicon-magnify-p2 brand-secondary\"></span>`,\n                            `</span>`\n                        ];\n                        html.push(...checkAvailabilityIcons);\n                        break;\n                    case showcase.FormType.ApplyNow:\n                        const applyNowIcons = [\n                            `<span class=\"ilsicon ilsicon-renters\"></span>`\n                        ];\n                        html.push(...applyNowIcons);\n                        break;\n                    default:\n                        const defaultIcons = [\n                            `<span class=\"ilsicon ilsicon-faq-bubble\"></span>`\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                        ? `<span class=\"glyphicon glyphicon-play-circle\"></span><span class=\"label-text\">&nbsp;3Dx Virtual Tour</span>`\n                        //? `<span class=\"ilsicon ilsicon-results\">&nbsp;3Dx Virtual Tour</span>`\n                        : `<span class=\"ilsicon ilsicon-results\"></span>&nbsp;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(`<span class=\"ilsicon ilsicon-mail\"></span>&nbsp;Email`),\n        getMoreInfoHtml: ko.observable(`<span class=\"ilsicon ilsicon-ask-bubbles\"></span>&nbsp;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 (\n            // Check BedroomMin\n            (ils.viewModel.BedroomMin() === null || ils.viewModel.BedroomMin() === undefined || item.NumberBedrooms >= ils.viewModel.BedroomMin()) &&\n                // Check BedroomMax\n                (ils.viewModel.BedroomMax() === null || ils.viewModel.BedroomMax() === undefined || item.NumberBedrooms <= ils.viewModel.BedroomMax()) &&\n                // Check PriceMin\n                (ils.viewModel.PriceMin() === null || ils.viewModel.PriceMin() === undefined || item.Price >= ils.viewModel.PriceMin() || item.Price == 0) &&\n                // Check PriceMax\n                (ils.viewModel.PriceMax() === null || ils.viewModel.PriceMax() === undefined || 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(`<span class=\"ilsicon ilsicon-ask-bubbles\"></span>&nbsp;Next Steps`);\n            ils.viewModel.getMoreInfoHtml(`<span class=\"ilsicon ilsicon-mail\"></span>&nbsp;Get More Information`);\n        }\n        else {\n            ils.viewModel.contactMenuHtml(`<span class=\"ilsicon ilsicon-mail\"></span>&nbsp;Email`);\n            ils.viewModel.getMoreInfoHtml(`<span class=\"ilsicon ilsicon-ask-bubbles\"></span>&nbsp;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('<span class=\"handle-text\"></span>');\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('<img alt=\"' + element.prop(\"title\") + '\" class=\"img-responsive\" src=\"' + element.prop(\"href\") + '\" />');\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('<span class=\"handle-text\"></span>');\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                    $(\".add-tooltip-with-info\").each(function () {\n                        $(this).tooltip({ html: true, title: $(this).html() });\n                        $(this).html('&nbsp;<i class=\"fa fa fa-info-circle\"></i>');\n                        $(this).removeClass(\"add-tooltip\").addClass(\"tooltip-added\");\n                    });\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 = '<a target=\"_blank\" href=\"http://maps.google.com/?q=' + $(this).text().replace(\"<br>\", \" \") + '\">' + $(this).html() + '</a>';\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"]}