Send Funeral Flowers | Sympathy | Legacy                       dataLayer = []; dataLayer.push({ 'ViewportDimension': $(window.top).innerWidth() + 'x' + $(window.top).innerHeight() }); $(document).ready(function () { $(document).on("click", "[data-ga-evt-cat]", function () { var cat = $(this).attr("data-ga-evt-cat"); var action = $(this).attr("data-ga-evt-action"); var label = $(this).attr("data-ga-evt-label"); var value = $(this).attr("data-ga-evt-value") || ""; var noninteraction = $(this).attr("data-ga-evt-noninteraction") == "true" ? true : false; var event = noninteraction ? 'GAEventNI' : 'GAEvent'; dataLayer.push({ 'event': event, 'eventCategory': cat, 'eventAction': action, 'eventLabel': label, 'eventValue': value }); }); $(document).on("click", "a:not([data-ga-evt-cat])", function () { dataLayer.push({ 'event': 'GAEvent', 'eventCategory': '', 'eventAction': 'click', 'eventLabel': '', 'eventValue': '' }); }); }); var isIFrame = false; try { isIFrame = (window.self !== window.top); } catch (err) { isIFrame = true; } if (isIFrame && typeof dataLayer !== "undefined") { dataLayer.push({ 'event': 'gtm.Iframe' }); } $('iframe').load(function() { $("iframe").contents().find("body").addClass("modal-if-body"); });   dataLayer.push({ "AnalyticPageCategory": "product_gallery"}); dataLayer.push({ "Affiliate": "Legacy"}); dataLayer.push({ "PersonID": "0"}); dataLayer.push({ "FHID": "1"}); dataLayer.push({ "CHID": "1"}); dataLayer.push({ "NoticeType": ""}); dataLayer.push({ "PaymentCode": ""}); dataLayer.push({ "Vendor": "FTD"}); dataLayer.push({ "ServiceDetails-Count": "After7Days"}); dataLayer.push({ "ServiceDetails-DeliveryReady": "NotDeliveryReady"});      (function(w, d, s, l, i) { w[l] = w[l] || []; w[l].push({ 'gtm.start': new Date().getTime(), event: 'gtm.js' }); var f = d.getElementsByTagName(s)[0], j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : ''; j.async = true; j.src = '//web.archive.org./web/20161219161912/https://www.googletagmanager.com/gtm.js?id=' + i + dl; f.parentNode.insertBefore(j, f); })(window, document, 'script', 'dataLayer', 'GTM-TDQHZW');     function FireGAEvent(category, action, label, value, noninteraction) { value = value || 0; noninteraction = noninteraction || false; var event = { 'event' : noninteraction ? 'GAEventNI' : 'GAEvent', 'eventCategory' : category, 'eventAction' : action, 'eventLabel': label, 'eventValue': value }; dataLayer.push(event); } function FireGAVirtualPageView(url) { url = url || document.location.href.toLowerCase(); url = url.replace(/^(?:\/\/|[^\/]+)*/, ''); dataLayer.push({ 'event': 'analyticsVPV', 'vpvName': url }); }                 Toggle Navigation      SYMPATHY FLOWERSat Legacy.com                Funeral Flowers 

Funeral flowers are accepted at the provided funeral home address. All sympathy arrangements are locally arranged and delivered by a preferred florist to ensure your message of compassion is delivered with care. 

       Our Sympathy  Send Flowers in Remembrance Sympathy bouquets for the home or service. Arranged by local florists and same day delivery available.               Buy Now       The FTD® Eternal Affection™ Arrangement     Pricing from: $49.99  

           Buy Now       The FTD® Faithful Blessings™ Bouquet - VASE INCLUDED     Pricing from: $64.99  

           Buy Now       The FTD® Pastel Peace™ Basket     Pricing from: $59.99  

           Buy Now       The FTD® Comfort Planter     Pricing from: $49.99  

           Buy Now       The FTD® Cherished Friend™ Bouquet     Pricing from: $59.99  

           Buy Now       The FTD® Eternal Friendship™ Remembrance Bouquet     Pricing from: $59.99  

        Order by Phone  855-329-5806 CODE 80889          Buy Now       The FTD® Exquisite Tribute™ Standing Spray     Pricing from: $159.99  

           Buy Now       The FTD® Beautiful Spirit™ Arrangement     Pricing from: $99.99  

           Buy Now       The FTD® Living Spirit™ Dishgarden     Pricing from: $66.99  

            Buy Now       The FTD® Farewell Too Soon™ Bouquet     Pricing from: $69.99  

           Buy Now       The FTD® Loving Light™ Dishgarden     Pricing from: $69.99  

           Buy Now       The FTD® Cherished Farewell™ Arrangement     Pricing from: $129.99  

        Order by Phone  855-329-5806 CODE 80889          Buy Now       The FTD® Morning Stars™ Arrangement     Pricing from: $159.99  

           Buy Now       The FTD® Treasured Tribute™ Wreath     Pricing from: $179.99  

           Buy Now       The FTD® Soldier Salute™ Standing Spray     Pricing from: $99.99  

           Buy Now       The FTD® Lovely Tribute™ Bouquet     Pricing from: $99.99  

           Buy Now       The FTD® Gentle Blossoms™ Basket     Pricing from: $119.99  

           Buy Now       The FTD® Treasured Memories™ Standing Spray     Pricing from: $179.99  

        Order by Phone  855-329-5806 CODE 80889          Buy Now       The FTD® Sleep in Peace™ Wreath     Pricing from: $179.99  

           Buy Now       The FTD White Orchid Planter     Pricing from: $99.99  

           Buy Now       The Spathiphyllum Plant by FTD® - BASKET INLCUDED     Pricing from: $64.99  

            Buy Now       The FTD® Loyal Heart™ Bouquet     Pricing from: $79.99  

           Buy Now       The FTD® Always & Forever™ Bouquet     Pricing from: $69.99  

           Buy Now       The FTD® Greater Glory™ Basket     Pricing from: $109.99  

        Order by Phone  855-329-5806 CODE 80889           Buy Now       The FTD® Peaceful Passage™ Arrangement     Pricing from: $99.99  

           Buy Now       The FTD® Heartfelt Condolences™ Arrangement     Pricing from: $79.99  

           Buy Now       The FTD® Whispering Love™ Arrangement     Pricing from: $59.99  

           Buy Now       The FTD® Warm Embrace™ Arrangement     Pricing from: $119.99  

           Buy Now       The Thinking of You™ Bouquet by FTD® - CUT GLASS VASE INCLUDED     Pricing from: $54.99  

          In Progress

     var productGalleryView; $(function () { productGalleryView = new Site.Sympathy.View.Block.ProductGallery(); });     SYMPATHY FLOWERS Local Florist delivery in partnership with FTD        SYMPATHY FLOWERS Local Florist delivery in partnership with FTD     Sympathy Flowers 

Sympathy Flowers can help you express your condolences and support the bereaved. Offering your sympathy directly to those who grieve is a traditional way to add warmth to the service.  Help celebrate the life of a lost loved one by sending funeral flowers arranged and delivered by a local florist. 

             © Copyright 1999-2016 Legacy.com All Rights Reserved  Terms of Use Privacy Policy Order Tracking / FAQs Search obituaries nationwide     

Order same day flowers, plants, and gifts. Delivery by an FTD® Florist is available in most areas of the U.S. and Canada on orders placed as late as 2 p.m.* in the recipient's time zone Monday through Friday (earlier times may apply to some areas). Saturday and Sunday deliveries are available in some areas for orders placed by 1 p.m.* in the recipient's time zone. *Saturday, Sunday and holiday cutoff times may vary.

      var regSourceModal = ''; $(document).on("click", "[data-target='#searchModal']", function () { // tab should be name, location, or geo var tab = $(this).data('defaulttab'); $('.' + tab).trigger('click'); regSourceModal = $(this).data('reglnchplcemnt'); }); $.fn.scrollView = function () { return this.each(function () { $('html, body').animate({ scrollTop: $(this).offset().top }, 400); }); } var model; var searchModalDebug = false; $(document).ready(function () { if (searchModalDebug) $('#debugdiv').show(); model = SearchModal(); }); function SearchModal() { var deliveryLocationsApiBaseUrl = 'http://web.archive.org./web/20161219161912/https://www.legacy.com/api/v1/deliveryLocations/'; var pagePersonId = ''; var pageAffiliateSiteName = 'Legacy'; var pathname = document.location.pathname.toLowerCase().replace("/en-us","").replace("/en-ca",""); var isStorePage = pathname.startsWith("/store/"); var isGalleryPage = pathname.startsWith("/funeral-flowers/funeral-home/") || pathname.startsWith("/funeral-flowers/local/") || pathname.startsWith("/funeral-flowers/name/") || pathname.startsWith("/funeral-flowers/house-of-worship/") || pathname.includes("/sympathy/"); var shouldClearStateOnClose = isStorePage || isGalleryPage; // cache these for performance in scroll event handler var modalTitle = $('.modal-title'); var snapContainer = $('.snap-container'); // #region Constants // defaults var apiPageSize = 10; var apiDefaultSearchDays = 4; var apiDefaultSearchDaysExpanded = 7; var minCharsForSearch = 2; var delayAfterTypingBeforeSearch = 400; // string constants var apiNameName = 'name'; var apiNameLocation = 'location'; var apiNameGeo = 'geo'; var gaName = {}; gaName[apiNameName] = 'Person'; gaName[apiNameLocation] = 'Place'; gaName[apiNameGeo] = 'CityZip'; placeholderName = 'Search by Person (ex. "Carmen Amador")'; placeholderLocation = 'Search by Place (ex. "Temple Beth Israel")'; placeholderGeo = 'City or Postal Code (ex. "Joliet" or "60435")'; var apiResultTypeObit = 'obit'; var apiResultTypeDeliveryLocation = 'deliveryLocation'; var apiResultSubTypeObit = 'obit'; var apiResultSubTypeFuneralHome = 'funeralhome'; var apiResultSubTypeChurch = 'church'; var apiResultTypeObitFriendlyName = 'Obituaries'; var apiResultTypeDeliveryLocationFriendlyName = 'Funeral Homes and Houses of Worship'; var filterTypeNameStateCity = 'personStateCity'; var filterTypeLocationStateCity = 'locationStateCity'; var filterTypeResultType = 'type'; var gaFilterTypeName = {}; gaFilterTypeName[filterTypeNameStateCity] = 'StateCity_Person'; gaFilterTypeName[filterTypeLocationStateCity] = 'StateCity_Place'; gaFilterTypeName[filterTypeResultType] = 'Type'; var dataLayerKeyAnalyticPageCategory = 'AnalyticPageCategory'; var analyticPageCategorySearchModal = 'search_delivery_address'; // #endregion // #region Tab section // tab sections which represent search api types var Section = function (name, apiName, placeholder, supportedFilterTypes, selected) { var self = this; this.name = name; this.apiName = apiName; this.placeholder = placeholder; this.supportedFilterTypes = supportedFilterTypes; this.isSelected = ko.computed(function () { return this === selected(); }, this); this.searchTextInstant = ko.observable(""); this.searchText = ko.computed(function() { return self.searchTextInstant();}).extend({ throttle: delayAfterTypingBeforeSearch }); this.searchTextTypingComplete = ko.computed(function() { return self.searchTextInstant();}).extend({ throttle: delayAfterTypingBeforeSearch * 3 }); // fire SearchByText event when typing stops for 1.2 seconds this.searchTextTypingComplete.subscribe(function (val) { if (val.length >= 2) { FireGAEvent.apply(this, GetGARegSearchByTextListEvent()); } }, this); this.typingFinished = ko.computed(function() { var finishedTyping = self.searchText().length >= 2 && (self.searchTextTypingComplete() == self.searchText()); return finishedTyping; }, this); } // #endregion // #region KO extensions ko.subscribable.fn.subscribeChanged = function (callback) { var oldValue; this.subscribe(function (_oldValue) { oldValue = _oldValue; }, this, 'beforeChange'); this.subscribe(function (newValue) { callback(newValue, oldValue); }); }; ko.bindingHandlers.highlightText = { update: function (element, valueAccessor, allBindings, vwModel, bindingContext) { var options = valueAccessor(); var value = allBindings().text; var css = ko.utils.unwrapObservable(options.css); var condition = ko.utils.unwrapObservable(options.condition); if (condition !== undefined && condition == false) { return; } var search = ""; if (bindingContext.$root.resultSearchCriteria().search !== undefined) { search = bindingContext.$root.resultSearchCriteria().search; } else { return; } var terms = search.split(/\s+/); terms.sort(function (a, b) { return b.length - a.length; // ASC -> a - b; DESC -> b - a }); var pipeDelimitedTerms = '\\b' + terms.join('|\\b'); // word boundary to only highlight terms at the beginning of each word if (element != null && value != null && pipeDelimitedTerms != '\\b') { element.innerHTML = value.replace(new RegExp("(" + pipeDelimitedTerms + ")", 'gi'), "$1"); } } }; // #endregion var SearchViewModel = function() { var self = this; // #region Observable initialization self.selectedSection = ko.observable(); self.resultsSummary = ko.observable(); self.filtering = ko.observable(false); self.hasSearched = ko.observable(false); self.pagePersonId = pagePersonId; self.resultSearchCriteria = ko.observable({}); self.resultFilterOptions = ko.observable(null); self.pendingRequest = ko.observable(false); self.selectedNameStateCity = ko.observable({}); self.availableNameStateCities = ko.observableArray([]); self.selectedResultType = ko.observable(null); self.resultTypeFilter = ko.observable(); self.personIdFilter = ko.observable(); self.lastSearchApiMethod = ko.observable("a"); self.lastSearchUrl = ko.observable("b"); self.filters = ko.observable({}); self.resultItems = ko.observableArray([]); self.type = ko.observable(false); // #endregion // #region Sections self.sections = ko.observableArray([new Section('Place', apiNameLocation, placeholderLocation, [filterTypeLocationStateCity], self.selectedSection), new Section('City or Postal Code', apiNameGeo, placeholderGeo, [filterTypeResultType], self.selectedSection)]); if (!pagePersonId) { self.sections().unshift(new Section('Person', apiNameName, placeholderName, [filterTypeNameStateCity], self.selectedSection)); } //initialize to the first section self.defaultSection = ko.observable(); self.selectedSection(self.sections()[0]); self.isNameSearch = ko.computed(function() { return self.selectedSection().apiName == apiNameName; }, this); self.isLocationSearch = ko.computed(function() { return self.selectedSection().apiName == apiNameLocation; }, this); self.isGeoSearch = ko.computed(function() { return self.selectedSection().apiName == apiNameGeo; }, this); // #endregion // #region Filter select lists self.availableNameStateCitiesCalc = ko.computed(function () { var lastSearchWasNameType = self.resultSearchCriteria().searchType == 'name'; var searchCompleted = !self.pendingRequest(); var filterOptionsStateCitiesExists = self.resultFilterOptions() != null && self.resultFilterOptions().statesCities.length > 0; if (lastSearchWasNameType && searchCompleted && filterOptionsStateCitiesExists) { if ( !Equals(self.availableNameStateCities(), self.resultFilterOptions().statesCities)) { self.availableNameStateCities(self.resultFilterOptions().statesCities); } } return self.availableNameStateCities(); }, this); self.nameStateCityFilter = ko.observable(); self.selectedLocationStateCity = ko.observable({}); self.availableLocationStateCities = ko.observableArray([]); self.availableLocationStateCitiesCalc = ko.computed(function() { var lastSearchWasLocationType = self.resultSearchCriteria().searchType == 'location'; var searchCompleted = !self.pendingRequest(); var filterOptionsStateCitiesExists = self.resultFilterOptions() != null && self.resultFilterOptions().statesCities.length > 0; if (lastSearchWasLocationType && searchCompleted && filterOptionsStateCitiesExists) { if (!Equals(self.availableLocationStateCities(), self.resultFilterOptions().statesCities)) { self.availableLocationStateCities(self.resultFilterOptions().statesCities); } } }, this); self.locationStateCityFilter = ko.observable(); self.availableResultTypes = ko.observable(null); self.availableResultTypesCalc = ko.computed(function() { var lastSearchWasGeoType = self.resultSearchCriteria().searchType == 'geo'; var searchCompleted = !self.pendingRequest(); var filterOptionsResultTypesExists = self.resultFilterOptions() != null && self.resultFilterOptions().resultTypes.length > 0; if (lastSearchWasGeoType && searchCompleted && filterOptionsResultTypesExists) { var newResultTypes = ko.utils.arrayMap(self.resultFilterOptions().resultTypes, function(item) { var resultTypeName = apiResultTypeDeliveryLocationFriendlyName; if (item.toLowerCase() == apiResultTypeObit.toLowerCase()) { resultTypeName = apiResultTypeObitFriendlyName; } return { value: item, name: resultTypeName }; }); if ( !Equals(self.availableResultTypes(), newResultTypes) ) { self.availableResultTypes(newResultTypes); } } return self.availableResultTypes(); }, this); // #endregion // #region Hidden Filters var resultTypeDeliveryLocationFilter = { type: apiResultTypeDeliveryLocation, criteria: { type: apiResultTypeDeliveryLocation }, toString: function() { return 'Type: ' + apiResultTypeDeliveryLocation; } }; // filters not seen by user but applied transparently based on page context like personid in url, etc self.hiddenFilters = ko.computed(function() { if (pagePersonId) { return [resultTypeDeliveryLocationFilter]; } return []; }, this); // #endregion // #region Search Urls self.currentSearchText = ko.computed(function() { return self.selectedSection().searchText(); }); self.searchUrl = ko.computed(function() { if (self.currentSearchText().length < minCharsForSearch) { self.resultItems([]); self.resultsSummary(null); return ""; } var url = GetSearchUrl(self.currentSearchText(), self.selectedSection().apiName); return url; }, this); self.searchUrlWithPaging = ko.computed(function() { var pagingParams = GetPagingParams(apiPageSize, self.resultItems().length); return self.searchUrl() + pagingParams; }, this); // #endregion // #region Filtering self.applyFilters = function() { var filters = self.filters(); var selectedNameStateCity = self.selectedNameStateCity(); if (!self.selectedNameStateCity()) { delete filters[filterTypeNameStateCity]; } else if (self.selectedSection().supportedFilterTypes.indexOf(filterTypeNameStateCity) > -1) { var nameStateCityFilter = { type: filterTypeNameStateCity, criteria: selectedNameStateCity, toString: function() { return selectedNameStateCity.city + ', ' + selectedNameStateCity.state; } }; filters[filterTypeNameStateCity] = nameStateCityFilter; } var selectedLocationStateCity = self.selectedLocationStateCity(); if (!self.selectedLocationStateCity()) { delete filters[filterTypeLocationStateCity]; } else if (self.selectedSection().supportedFilterTypes.indexOf(filterTypeLocationStateCity) > -1) { var locationStateCityFilter = { type: filterTypeLocationStateCity, criteria: selectedLocationStateCity, toString: function() { return selectedLocationStateCity.city + ', ' + selectedLocationStateCity.state; } }; filters[filterTypeLocationStateCity] = locationStateCityFilter; } var selectedResultType = self.selectedResultType(); if (!self.selectedResultType()) { delete filters[filterTypeResultType]; } else if (self.selectedSection().supportedFilterTypes.indexOf(filterTypeResultType) > -1) { var resultTypeFilter = { type: filterTypeResultType, criteria: { type: selectedResultType.value }, toString: function() { return 'Type: ' + selectedResultType.name; } }; filters[filterTypeResultType] = resultTypeFilter; } self.filters(filters); self.filtering(false); $('.results-list')[0].scrollTop = 0; } self.cancelFilters = function() { // don't alter existing self.filters FireGAEvent.apply(this, GetGARegFilteredListEvent('Cancel')); self.filtering(false); } self.startFiltering = function() { self.filtering(true); } self.clearFilters = function() { $(document).one('searchComplete', function() { FireGAEvent.apply(this, GetGARegFilteredListEvent('Clear')); }); // remove filters self.filters({}); // reset filter list selections self.selectedNameStateCity(null); self.selectedLocationStateCity(null); self.selectedResultType(null); } self.GetApplicableFilters = function() { var supportedFilterTypes = self.selectedSection().supportedFilterTypes; var allFilters = self.filters(); var applicableFilters = []; for (var filterType in allFilters) { if (allFilters.hasOwnProperty(filterType) && supportedFilterTypes.indexOf(filterType) > -1) { applicableFilters.push(allFilters[filterType]); } } return applicableFilters; } self.GetFirstApplicableGAFilterType = function() { var supportedFilterTypes = self.selectedSection().supportedFilterTypes; var allFilters = self.filters(); for (var filterType in allFilters) { if (allFilters.hasOwnProperty(filterType) && supportedFilterTypes.indexOf(filterType) > -1) { return gaFilterTypeName[filterType]; } } return null; } self.enableFilterButton = ko.computed(function() { var hasMultipleFilterOptions = (self.isNameSearch() && self.availableNameStateCities() != null && self.availableNameStateCities().length > 1) || (self.isLocationSearch() && self.availableLocationStateCities() != null && self.availableLocationStateCities().length > 1) || (self.isGeoSearch() && self.availableResultTypes() != null && self.availableResultTypes().length > 1); var isGeoSearchWithPerson = self.isGeoSearch() && pagePersonId; var enableFilterButton = hasMultipleFilterOptions && !isGeoSearchWithPerson; return enableFilterButton; }, this); self.GetCombinedApplicableFilterCriteriaString = function () { var filtersString = ""; var applicableFilters = self.GetApplicableFilters(); for (var i = 0; i < applicableFilters.length; i++) { filtersString += ' ' + applicableFilters[i].toString(); } return filtersString; } // #endregion // #region Events self.AddressSelected = function(index, result) { var i = index(); FireResultSelectedOrClosedEvents(result, i); ClearPersonNameIfPrevPickWasPerson(); var shouldRedirectOnAddressSelected = isStorePage || isGalleryPage; if (shouldRedirectOnAddressSelected) { var availabilityUrl = '/api/registrytracking/' + regSourceModal + '/' + result.subtype + '/' + result.id; InProgress(); $.ajax({ url: availabilityUrl, type: 'GET', dataType: 'json', success: function (data) { RedirectToSympathy(result); }, error: function(data) { RedirectToSympathy(result); } }); } else { PopulateShippingAdress(result); PopulateTrackingFields(result); } // fire event for address picked? $('#searchModal').modal('hide'); $('#SearchAddressButton').scrollView(); } self.clearState = function() { self.ClearType(); self.clearFilters(); self.filtering(false); self.resultItems([]); self.resultsSummary(null); self.hasSearched(false); self.selectedNameStateCity({}); self.availableNameStateCities([]); self.selectedResultType(null); self.lastSearchApiMethod("a"); self.lastSearchUrl("b"); self.filters({}); for (var i = 0; i < self.sections().length; i++) { var section = self.sections()[i]; section.searchTextInstant(""); } } self.scrolled = function(data, event) { self.getResultsOnScroll(data, event); self.toggleHeaderOnScroll(data, event); } self.toggleHeaderOnScroll = function(data, event) { if ($('.results-list').position().top < 0) { ShowSnapContainer(); } else { ShowModalTitle(); } } // trigger a search to get the next page when scrolling to the bottom self.getResultsOnScroll = function(data, event) { if (self.resultItems().length == 0 || self.resultsSummary().totalCount <= self.resultItems().length) { return; } var elem = event.target; if (elem.scrollTop > (elem.scrollHeight - elem.offsetHeight - 200)) { GetResultItems(true); } } self.BlurOnEnter = function(data, event) { if (event.which == 13) { $(event.target).blur(); } } self.ScrollModalBodyToTop = function() { $('.modal-body').animate({scrollTop: 0}, 200, 'linear'); } self.CloseClicked = function() { if (!self.hasSearched()) { FireGAEvent.apply(this, GetGARegSearchByTextListEvent(true)); } if (self.filtering()) { FireGAEvent.apply(this, GetGARegFilteredListEvent('CloseX')); } FireResultSelectedOrClosedEvents({}, -1, true); if (shouldClearStateOnClose) { self.clearState(); } } self.scrolled = function(data, event) { self.getResultsOnScroll(data, event); self.toggleHeaderOnScroll(data, event); } self.toggleHeaderOnScroll = function(data, event) { if ($('.results-list').position().top < 0) { ShowSnapContainer(); } else { ShowModalTitle(); } } // trigger a search to get the next page when scrolling to the bottom self.getResultsOnScroll = function(data, event) { if (self.resultItems().length == 0 || self.resultsSummary().totalCount <= self.resultItems().length) { return; } var elem = event.target; if (elem.scrollTop > (elem.scrollHeight - elem.offsetHeight - 200)) { GetResultItems(true); } } // #endregion // #region Helpers self.FormatPubDate = function(pubDate) { if (!pubDate) { return ''; } return pubDate.replace(/^(\d\d\d\d)\-(\d\d)\-(\d\d)T.+$/, "$2/$3/$1"); } self.GetSecureImgUrl = function(imgUrl) { var secureUrl = imgUrl.replace(/http:\/\/web.archive.org.\/web\/20161219161912\/http:\/\/ak\-(\w\w\w?)cache\.legacy\.net/, 'https://$1cache.legacy.com'); return secureUrl; } self.SetType = function(apiName) { var selectedSection = ko.utils.arrayFirst(self.sections(), function(section) { if (section.apiName == apiName) { return section; } }); if (selectedSection != null) { self.selectedSection(selectedSection); self.type(true); } } self.ClearType = function() { self.type(false); } // #endregion } var viewModel = new SearchViewModel(); ko.applyBindings(viewModel); // #region Misc Helpers function ShowSnapContainer() { modalTitle.hide(400, function() { snapContainer.fadeIn(); }); } function ShowModalTitle() { snapContainer.hide(400, function() { modalTitle.fadeIn(); }); } function ClearResults() { viewModel.resultItems([]); viewModel.resultsSummary(null); } // #endregion // #region Populate Checkout Form functions // this must be done before we set the new RegistryLocationPickedType function ClearPersonNameIfPrevPickWasPerson() { if ($('#RegistryLocationPickedType').val() == apiResultTypeObit) { $('#tbShippingFiirstNaame').val(''); $('#tbShippingLaastNaame') .val(''); } } function RedirectToSympathy(result) { var url = '#'; var urlSafeName = GetDashedString(result.name); if (result.subtype === apiResultSubTypeObit) { url = '/funeral-flowers/name/'+result.firstName + '-' + result.lastName +'-flowers/p'+result.id+'/'; } else if (result.subtype === apiResultSubTypeFuneralHome) { url = '/funeral-flowers/funeral-home/'+urlSafeName+'-funeral-home/fh'+result.id+'/'; } else if (result.subtype === apiResultSubTypeChurch) { url = '/funeral-flowers/ns/sympathy/ch'+result.id+'/'; url = '/funeral-flowers/house-of-worship/'+urlSafeName+'/ch'+result.id+'/'; } if (isStorePage) { url += '?rs=01'; } if (isGalleryPage) { url += '?rs=02'; } document.location.href = url; } function GetDashedString(source) { var dashed = source.toLowerCase().replace(/[^a-z\- ]/g, ''); dashed = dashed.replace(/\s+/g, '-'); return dashed; } function PopulateShippingAdress(result) { var address = result.address; var prevCountry = $('#ShippingC0untryDropDownList').val(); if (address.country == 'Canada' && prevCountry != 'CA') { $('#ShippingC0untryDropDownList').val('CA'); $('#ShippingC0untryDropDownList').trigger('change'); } else if (address.country == 'United States' && prevCountry != 'US') { $('#ShippingC0untryDropDownList').val('US'); $('#ShippingC0untryDropDownList').trigger('change'); } if (result.firstName != '' || result.lastName != '') { $('#tbShippingFiirstNaame').val($.trim(result.firstName)); $('#tbShippingLaastNaame') .val($.trim(result.lastName)); } $('#tbShippingCoompany') .val($.trim(address.name)); $('#tbShippingAddreess1') .val($.trim(address.address)); $('#tbShippingAddreess2') .val($.trim(address.address2)); $('#tbShippingCiity') .val($.trim(address.city)); $('#ShippingPoostalCodeTextBox') .val($.trim(address.postal)); $('#ShippingPoostalCodeTextBox').trigger("input"); $('#tbShippingPhooneNumber').val($.trim(address.phone)); FillInStateWhenReady(0, $.trim(address.stateCode)); } function FillInStateWhenReady(count, stateCode) { var maxCount = 20; while (count < maxCount && StatesPopulating) { setInterval(function() { FillInStateWhenReady(count + 1, stateCode); }, 200); } $('#ShippingSt4teDropDownList').val(stateCode); $('#hShippingSt').val(stateCode); } function PopulateTrackingFields(result) { result.id = result.id || 0; $('#RegistryLocationPickedId') .val(result.id); $('#RegistryLocationPickedType') .val(result.subtype); } // #endregion // #region Search API urls function GetFirstPageSearchUrl() { var pagingParams = GetPagingParams(apiPageSize, 0); return viewModel.searchUrl() + pagingParams; } function GetPagingParams(limit, offset) { var limitParam = 'limit=' + limit; var offsetParam = 'offset=' + offset; return '&' + offsetParam + '&' + limitParam; } function GetSearchUrl(currentSearchText, apiName) { var base = deliveryLocationsApiBaseUrl; var daysParams = 'days='+apiDefaultSearchDays+'&expandedDays='+apiDefaultSearchDaysExpanded; var filterParams = GetFilterParams(); var searchParam = 'search=' + currentSearchText; var paramsArray = [searchParam, daysParams, filterParams]; var params = paramsArray.join('&'); var url = base + apiName + '?' + params; return url; } function GetCombinedApplicableFilterCriteria() { var combinedCriteria = {}; var hidden = viewModel.hiddenFilters(); var applicableFilters = viewModel.GetApplicableFilters().concat(hidden); for (var i = 0; i < applicableFilters.length; i++) { MergeProperties(combinedCriteria, applicableFilters[i].criteria); } return combinedCriteria; } function GetFilterParams() { var combinedCriteria = GetCombinedApplicableFilterCriteria(); var filterParams = $.param(combinedCriteria); return filterParams; } // #endregion // #region KO Subscriptions viewModel.searchUrl.subscribeChanged(function (newUrl, oldUrl) { if (newUrl == '') { viewModel.lastSearchUrl(''); } else if (newUrl != oldUrl) { GetResultItems(); } }); viewModel.selectedSection.subscribeChanged(function(newSection, oldSection) { if (newSection != oldSection) { ClearResults(); } }); // #endregion // #region Function GetResultItems function GetResultItems(scrollMode) { scrollMode = scrollMode || false; var searchUrlWithPaging = scrollMode ? viewModel.searchUrlWithPaging() : GetFirstPageSearchUrl(); // eliminate duplicate searches because of multiple change events like keydown + blur if ((scrollMode && viewModel.pendingRequest())) { return; } if (!scrollMode && (viewModel.lastSearchUrl() == viewModel.searchUrl())) { return; } viewModel.pendingRequest(true); if (viewModel.selectedSection().apiName != viewModel.lastSearchApiMethod()) { ClearResults(); } viewModel.lastSearchApiMethod(viewModel.selectedSection().apiName); viewModel.lastSearchUrl(viewModel.searchUrl()); var ran = getRandomInt(1, 9999); $.ajax({ url: searchUrlWithPaging, dataType: 'jsonp', jsonpCallback: 'api' + ran }).done(function(data) { if (data == null) { return; } viewModel.resultFilterOptions(data.filters); viewModel.resultSearchCriteria(data.searchCriteria); if (!scrollMode && data.results.length == 0) { ClearResults(); return; } if (viewModel.searchUrl() != viewModel.lastSearchUrl()) { ClearResults(); } var newResults = []; ko.utils.arrayForEach(data.results, function (result) { newResults.push(result); }); if (!scrollMode) { ClearResults(); } viewModel.resultItems(viewModel.resultItems().concat(newResults)); viewModel.resultsSummary(data.summary); if (!scrollMode && viewModel.GetApplicableFilters().length > 0) { FireGAEvent.apply(this, GetGARegFilteredListEvent()); } viewModel.hasSearched(true); }).fail(function(error) { }).always(function () { viewModel.pendingRequest(false); $(document).trigger('searchComplete'); }); } // #endregion // #region Events and Analytics var oldAnalyticPageCategory; $(document).on('shown.bs.modal', function(e) { setTimeout(function() { SearchModalOpened(); }, 250); }); function SearchModalOpened() { SetAnalyticPageCategoryInDataLayer(); var vpvUrl = '/funeral-flowers/' + pageAffiliateSiteName +'/searchdeliveryaddress'; FireGAVirtualPageView(vpvUrl); } function GetAnalyticPageCategoryObjectFromDataLayer() { return ko.utils.arrayFirst(dataLayer, function(item) { return item.hasOwnProperty(dataLayerKeyAnalyticPageCategory); }); } function SetAnalyticPageCategoryInDataLayer() { var pageCatObject = GetAnalyticPageCategoryObjectFromDataLayer(); oldAnalyticPageCategory = pageCatObject; var newPageCatObject = {}; newPageCatObject[dataLayerKeyAnalyticPageCategory] = analyticPageCategorySearchModal; dataLayer.push(newPageCatObject); } function RestorePreviousAnalyticPageCategoryInDataLayer() { dataLayer.push(oldAnalyticPageCategory); } function FireResultSelectedOrClosedEvents(result, index, closeButtonClicked) { FireGAEvent.apply(this, GetGARegSelectResultTypeEvent(result, index, closeButtonClicked)); FireGAEvent.apply(this, GetGARegSelectResultDataEvent(result, index, closeButtonClicked)); RestorePreviousAnalyticPageCategoryInDataLayer(); } function GetGARegSearchByTextListEvent(closeButtonClicked) { var cat = 'Ecom Search Results From Typing'; var actionSuffix = gaName[viewModel.selectedSection().apiName]; var noninteraction = false; if (closeButtonClicked) { actionSuffix = 'CloseX'; noninteraction = true; } var action = 'PreQual_' + actionSuffix; var value = viewModel.resultsSummary() == null ? 0 : viewModel.resultsSummary().totalCount; var label = value + "_FromTypingResults"; var event = [cat, action, label, value, noninteraction]; return event; } function GetGARegFilteredListEvent(actionSuffix) { var cat = 'Ecom Search Results From Filtering'; actionSuffix = actionSuffix || viewModel.GetFirstApplicableGAFilterType(); var action = 'Filter_' + actionSuffix; var value = viewModel.resultsSummary() == null ? 0 : viewModel.resultsSummary().totalCount; var label = value + "_FromFilteringResults"; if (actionSuffix == 'CloseX') { value = 0; label = "undefined_FromFilteringResults"; } var event = [cat, action, label, value]; return event; } function GetGARegSelectResultTypeEvent(result, index, closeButtonClicked) { var cat = 'Ecom Search Results Type Selection'; var actionSuffix = gaName[viewModel.selectedSection().apiName]; var action = 'Tab_' + actionSuffix; var label = "No Selection"; if (!closeButtonClicked) { var labelNum = index + 1; var labelPrefix = "SelectedResult_"; label = labelPrefix + labelNum; } var value = viewModel.resultsSummary() == null ? 0 : viewModel.resultsSummary().totalCount; var event = [cat, action, label, value]; return event; } function GetGARegSelectResultDataEvent(result, index, closeButtonClicked) { var cat = 'Ecom Search Results Data Selection'; var action = "No Selection"; var label = "No Selection"; var value = 0; if (!closeButtonClicked) { label = result.subtype + "_" + result.id; action = result.subtype; value = 1; } var event = [cat, action, label, value]; return event; } // #endregion // #region Utility functions function getRandomInt(min, max) { return Math.floor(Math.random() * (max - min + 1)) + min; } function Equals(obj1, obj2) { var objectsAreEqual = JSON.stringify(obj1) == JSON.stringify(obj2); return objectsAreEqual; } // merges obj2 properties into obj1, overwriting attributes if pre-existing function MergeProperties(obj1, obj2) { for (var attrname in obj2) { obj1[attrname] = obj2[attrname]; } } // #endregion return viewModel; }         × Search For a Delivery Address       TOP         Search for Funeral Home or Church Example: Holy Trinity Church

       Search by Person Example: John Doe

       Search by City or Postal Code Example: North Havenbrook, MT

                   back   Clear Filters Filter Results                   

  Arrangements under the care of:          

          Select Address       No results found. Please try another search or click to close and manually enter a delivery address.         Filter by City    Filter by City     Filter by Result Type        Cancel Apply Filter        if (typeof String.prototype.startsWith != 'function') { String.prototype.startsWith = function (str){ return this.slice(0, str.length) === str; }; } if (!String.prototype.includes) { String.prototype.includes = function() {'use strict'; return String.prototype.indexOf.apply(this, arguments) !== -1; }; }        $(window).load(function() { dataLayer.push({"event": "EnhancedEcommerceEvent","ecommerce": {"impressions":[{"brand":"FTD","category":"Sympathy Flowers","id":"ftd-S7-4450","list":"Gallery","name":"The FTD Eternal Affection Arrangement","position":"1","price":"49.99","variant":"ftd-S7-4450_A"},{"brand":"FTD","category":"Sympathy Flowers","id":"ftd-FBBX","list":"Gallery","name":"The FTD Faithful Blessings Bouquet - VASE INCLUDED","position":"2","price":"64.99","variant":"ftd-FBBS"},{"brand":"FTD","category":"Sympathy Flowers","id":"ftd-S29-4503","list":"Gallery","name":"The FTD Pastel Peace Basket","position":"3","price":"59.99","variant":"ftd-S29-4503_A"},{"brand":"FTD","category":"Sympathy Flowers","id":"ftd-CPP-sm","list":"Gallery","name":"The FTD Comfort Planter","position":"4","price":"49.99","variant":"ftd-CPP"},{"brand":"FTD","category":"Sympathy Flowers","id":"ftd-S3-4440","list":"Gallery","name":"The FTD Cherished Friend Bouquet","position":"5","price":"59.99","variant":"ftd-S3-4440_A"}]}});dataLayer.push({"event": "EnhancedEcommerceEvent","ecommerce": {"impressions":[{"brand":"FTD","category":"Sympathy Flowers","id":"ftd-S9-4979","list":"Gallery","name":"The FTD Eternal Friendship Remembrance Bouquet","position":"6","price":"59.99","variant":"ftd-S9-4979S"},{"brand":"FTD","category":"Sympathy Flowers","id":"ftd-S6-4447","list":"Gallery","name":"The FTD Exquisite Tribute Standing Spray","position":"7","price":"159.99","variant":"ftd-S6-4447S"},{"brand":"FTD","category":"Sympathy Flowers","id":"ftd-S22-4485","list":"Gallery","name":"The FTD Beautiful Spirit Arrangement","position":"8","price":"99.99","variant":"ftd-S22-4485S"},{"brand":"FTD","category":"Sympathy Flowers","id":"ftd-S25-4493-sm","list":"Gallery","name":"The FTD Living Spirit Dishgarden","position":"9","price":"66.99","variant":"ftd-S25-4493"},{"brand":"FTD","category":"Sympathy Flowers","id":"ftd-S37-4523","list":"Gallery","name":"The FTD Farewell Too Soon Bouquet","position":"10","price":"69.99","variant":"ftd-S37-4523_A"}]}});dataLayer.push({"event": "EnhancedEcommerceEvent","ecommerce": {"impressions":[{"brand":"FTD","category":"Sympathy Flowers","id":"ftd-C27-4527-sm","list":"Gallery","name":"The FTD Loving Light Dishgarden","position":"11","price":"69.99","variant":"ftd-C27-4527"},{"brand":"FTD","category":"Sympathy Flowers","id":"ftd-S45-4544","list":"Gallery","name":"The FTD Cherished Farewell Arrangement","position":"12","price":"129.99","variant":"ftd-S45-4544S"},{"brand":"FTD","category":"Sympathy Flowers","id":"ftd-S2-4438","list":"Gallery","name":"The FTD Morning Stars Arrangement","position":"13","price":"159.99","variant":"ftd-S2-4438_A"},{"brand":"FTD","category":"Sympathy Flowers","id":"ftd-S3-4442-sm","list":"Gallery","name":"The FTD Treasured Tribute Wreath","position":"14","price":"179.99","variant":"ftd-S3-4442"},{"brand":"FTD","category":"Sympathy Flowers","id":"ftd-XX-4435-sm","list":"Gallery","name":"The FTD Soldier Salute Standing Spray","position":"15","price":"99.99","variant":"ftd-XX-4435"}]}});dataLayer.push({"event": "EnhancedEcommerceEvent","ecommerce": {"impressions":[{"brand":"FTD","category":"Sympathy Flowers","id":"ftd-S20-4482","list":"Gallery","name":"The FTD Lovely Tribute Bouquet","position":"16","price":"99.99","variant":"ftd-S20-4482_A"},{"brand":"FTD","category":"Sympathy Flowers","id":"ftd-C26-4524-sm","list":"Gallery","name":"The FTD Gentle Blossoms Basket","position":"17","price":"119.99","variant":"ftd-C26-4524"},{"brand":"FTD","category":"Sympathy Flowers","id":"ftd-S14-4467","list":"Gallery","name":"The FTD Treasured Memories Standing Spray","position":"18","price":"179.99","variant":"ftd-S14-4467_A"},{"brand":"FTD","category":"Sympathy Flowers","id":"ftd-S29-4502-sm","list":"Gallery","name":"The FTD Sleep in Peace Wreath","position":"19","price":"179.99","variant":"ftd-S29-4502"},{"brand":"FTD","category":"Sympathy Flowers","id":"ftd-S6-4986S-sm","list":"Gallery","name":"The FTD White Orchid Planter","position":"20","price":"99.99","variant":"ftd-S6-4986S"}]}});dataLayer.push({"event": "EnhancedEcommerceEvent","ecommerce": {"impressions":[{"brand":"FTD","category":"Sympathy Flowers","id":"ftd-C28-4893-sm","list":"Gallery","name":"The Spathiphyllum Plant by FTD - BASKET INLCUDED","position":"21","price":"64.99","variant":"ftd-C28-4893"},{"brand":"FTD","category":"Sympathy Flowers","id":"ftd-S43-5028","list":"Gallery","name":"The FTD Loyal Heart Bouquet","position":"22","price":"79.99","variant":"ftd-S43-5028S"},{"brand":"FTD","category":"Sympathy Flowers","id":"ftd-S18-4990","list":"Gallery","name":"The FTD Always Bouquet","position":"23","price":"69.99","variant":"ftd-S18-4990S"},{"brand":"FTD","category":"Sympathy Flowers","id":"ftd-S43-5027","list":"Gallery","name":"The FTD Greater Glory Basket","position":"24","price":"109.99","variant":"ftd-S43-5027S"},{"brand":"FTD","category":"Sympathy Flowers","id":"ftd-S3-4975","list":"Gallery","name":"The FTD Peaceful Passage Arrangement","position":"25","price":"99.99","variant":"ftd-S3-4975S"}]}});dataLayer.push({"event": "EnhancedEcommerceEvent","ecommerce": {"impressions":[{"brand":"FTD","category":"Sympathy Flowers","id":"ftd-S9-4980","list":"Gallery","name":"The FTD Heartfelt Condolences Arrangement","position":"26","price":"79.99","variant":"ftd-S9-4980S"},{"brand":"FTD","category":"Sympathy Flowers","id":"ftd-S17-4989","list":"Gallery","name":"The FTD Whispering Love Arrangement","position":"27","price":"59.99","variant":"ftd-S17-4989S"},{"brand":"FTD","category":"Sympathy Flowers","id":"ftd-S31-5009","list":"Gallery","name":"The FTD Warm Embrace Arrangement","position":"28","price":"119.99","variant":"ftd-S31-5009S"},{"brand":"FTD","category":"Sympathy Flowers","id":"ftd-TOYX","list":"Gallery","name":"The Thinking of You Bouquet by FTD - CUT GLASS VASE INCLUDED","position":"29","price":"54.99","variant":"ftd-TOYS"}]}});});