{"version":3,"sources":["libs/fastdom.js","pwa/component/buildershowcaseredesign/marqueeGalleryHandler.js","nhs/views/BuilderShowcaseRedesign/Sections/builderShowcaseHelper.js","pwa/component/buildershowcaseredesign/marqueeFilmstripHandler.js","pwa/component/buildershowcaseredesign/marqueeArrowsHandler.js","../../default/js/videoPlayers/brightcove/brightcove.js","libs/vimeo/vimeoPlayer.js","../../default/js/videoPlayers/vimeo/vimeo.js","../../default/js/videoPlayers/youtube/youtube.js","pwa/component/buildershowcaseredesign/builderShowcaseVideoHandler.js","pwa/component/buildershowcaseredesign/marqueeFirstElementInitializer.js","pwa/component/buildershowcaseredesign/builderShowcaseIframeHandler.js","pwa/component/buildershowcaseredesign/marqueeTabsHandler.js","libs/domHelper.js","libs/ajaxHelper.js","pwa/component/buildershowcaseredesign/reviewsParameters.js","pwa/component/buildershowcaseredesign/reviewsHandler.js","modules/sectionLazyLoad.js","nhs/views/BuilderShowcaseRedesign/Sections/builderShowcaseGalleryDownloader.js","pwa/component/buildershowcaseredesign/nearbySectionHandler.js","../../default/js/modules/arrowHandler.js","nhs/views/BuilderShowcaseRedesign/Sections/askQuestionLoader.js","nhs/views/BuilderShowcaseRedesign/Sections/builderShowcaseSectionsUtils.js","nhs/views/BuilderShowcaseRedesign/Sections/builderShowcaseSectionsUtilsDesktop.js","../../../../../../../../../../module-insertRequire.js"],"names":["win","raf","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","msRequestAnimationFrame","cb","setTimeout","FastDom","this","reads","writes","bind","scheduleFlush","fastdom","scheduled","flush","error","runTasks","e","length","catch","remove","array","item","index","indexOf","splice","prototype","constructor","tasks","task","shift","measure","fn","ctx","push","mutate","clear","extend","props","Error","child","Object","create","target","source","key","hasOwnProperty","mixin","initialize","exports","define","window","builderShowcaseObserver","[object Object]","configObject","config","init","data","document","querySelector","galleryCollections","collections","JSON","parse","innerHTML","i","Category","toLowerCase","setData","commit","picture","mainViewer","appendChild","activeImage","MainImageSources","isLiteGalleryModal","createElement","forEach","sourceItem","srcset","Srcset","type","ImageType","img","src","MainPictureImage","ImageUrl","alt","Caption","onerror","event","parent","parentElement","querySelectorAll","removeChild","NoPhoto","displayNewImage","setUpTextValueInDomElement","domObjects","text","innerText","degreeToRadius","degree","Math","PI","changeStyleWithFastDom","element","classList","removeAttribute","performStyleChange","getImageType","url","address","split","setUpPlanDescription","info","container","PlanName","selectedItem","planName","planAmenties","Amenities","planNameElements","planAmmenitiesElements","builderName","builderLink","reviewsStars","reviewsScoreText","reviewsInformation","join","replace","jsonResponse","BrandName","href","BuilderLink","hasBuilderReviews","ratingValue","averageRating","style","locationsContainer","locations","locationsLink","planLibraryContainer","planLibraryStateTemplate","planLibraryMarketTemplate","planLibraryCommunityTemplate","IsManufactured","PlanLibraryHomes","setAttribute","stateListItem","content","cloneNode","state","State","StateName","j","Markets","market","marketListItem","Market","Name","k","Communities","comm","communityListItem","anchorTag","Community","CommunityUrl","MetroAreasCount","LocationsLink","setBodyModalInformation","calculateHaversineFormula","latitude","longitude","destinationLatitude","destinationLongitude","distanceLatitude","distanceLongitude","a","sin","cos","atan2","sqrt","onMapUpdatedSuccess","html","infowindow","setContent","open","mapInstance","marker","setCursor","require","mapCardCtaHandler","setMapInstance","mapItem","cardsHtmlContainer","opacity","loadCss","value","getCollectionItem","imageId","collectionCategory","getGalleryCollection","getState","Items","find","x","Id","applyActiveStyles","selectedThumbnail","activeThumbSelector","elements","cleanActiveElements","add","getMapUrl","siteRoot","location","origin","showcaseHelper","setEvents","saveFirstImageIntoState","handleInitialScroll","addEventListener","activeImageToUse","handleFilmstripScroll","image","getStateActiveImage","componentName","firstImage","collection","dataset","imageCategory","id","imageObject","setActiveItem","eventOnImageSelected","notifyChange","closest","setMainImage","filmstripItems","onImageSelected","firstActiveImage","scroller","closestListItem","currentImageIndex","Array","call","children","scrollIntoView","behavior","block","inline","parseInt","imageSequence","activeSequence","activeCollectionCount","sequence","topic","activeItem","playOnLoaded","imageSelected","pictures","filmsStripElements","from","activeItemId","activeElement","filter","activeElementIndex","getNextSequence","handleNavigationControls","action","eventOnThumbSelected","filmstripButton","navigationButtons","button","navigateToImage","global","triggerOnDemandTracker","eventInformation","body","dispatchEvent","CustomEvent","detail","triggerEvents","eventParameters","googleAnalyticsEventAction","googleAnalytics4EventName","events","googleAnalytics4Event","eventType","eventName","params","video_type","click_target","googleAnalyticsEvent","eventCategory","eventAction","eventLabel","NewHomeSource","videoPlayers","brightcove","playerInformation","account","player","defaultEvents","onEnded","onPlaying","onPaused","bcPlayer","eventsHandler","loadVideo","video","catalog","load","onTimeUpdate","currentTime","Number","duration","percentViewed","floor","ev","isEventViewed","playingHandler","eventData","videoId","on","onReady","play","createVideo","videojs","keys","bc","loadBrightcoveScript","brightcoveCallback","tag","getElementsByTagName","script","async","protocol","onload","parentNode","insertBefore","Player","getElementById","assign","createContainer","videoElement","width","height","setVideo","getVideo","dispose","pause","t","module","amd","Vimeo","substr","toUpperCase","HTMLElement","n","isNaN","parseFloat","isFinite","r","test","arguments","o","TypeError","T","get","set","u","s","l","delete","f","_","reduce","getAttribute","h","Promise","encodeURIComponent","XDomainRequest","XMLHttpRequest","status","responseText","send","d","firstChild","v","p","contentWindow","postMessage","method","navigator","userAgent","stringify","y","message","name","reject","c","resolve","m","g","toString","w","b","self","E","_keys","_values","_itp","objectOnly","has","next","done","entries","defineProperty","WeakMap","Map","values","Set","WeakSet","Symbol","iterator","drain","then","chain","success","failure","msg","promise","triggered","def","apply","__NPO__","setImmediate","writable","configurable","enumerable","M","jQuery","console","warn","nodeName","attachEvent","_originalElement","ready","callMethod","time","language","kind","slice","className","paddingBottom","bottom","vimeo","onLoaded","createPlayer","options","destroy","loadVimeoScript","vimeoPlayerCallback","youtube","loadYoutubeApiScript","YT","onYouTubeIframeAPIReady","playVideo","onPlayerStateChange","cueVideoById","onStateChange","pauseVideo","playerToUse","playerName","VideoType","playingVideo","undefined","pauseOtherPlayingVideo","marqueecontainer","findPlayer","handler","playVideoOnLoaded","containerDiv","prepend","VideoId","getCollection","subCollection","initializeFirstElement","configuration","activeCategory","HolderCollectionName","marqueeGallery","embedCode","replaceableStrings","&","lt;","gt;","#39;","quot;","char","replaceSpecialCharactersFromEmbedCode","Url","tourContainer","iframe","iframeSource","getEmbededCodeSource","EmbedCode","marqueeTabsHandler","tabSection","tabs","getCategory","buttonComponent","loadMapResources","removeEventListener","applyStyles","elementToEdit","active","scrollToActiveCategory","mediaType","elementToScrollTo","stateActiveElement","videoContainer","scrollTo","left","offsetLeft","top","handleTabClick","marqueeComponent","category","component","switchMarqueeView","update","selectedItemCategoryName","selectedCategoryName","categoryToSelect","applyActiveStylesToCategory","loctationsTab","click","subscribe","getPassiveOptions","passive","opts","callback","detachEvent","Element","removeEventFromElement","addEventToElement","Document","hasParent","hasClass","contains","onClassListChange","Event","bubbles","addClass","removeClass","insertAfter","nodeToInsert","nextSibling","hide","display","show","isVisible","getComputedStyle","visibility","NodeList","DOMTokenList","Node","replaceWith","currentElement","currentNode","createTextNode","replaceChild","factory","AjaxHelper","root","requestsQueue","partnerElement","getElementsByClassName","browserAcceptTypes","partnerUrl","executeCallbacks","req","succeded","always","failed","queueIndex","HTMLFieldSetElement","serialize","field","notSerializableTypes","len","disabled","includes","selected","checked","objectToQueryString","objectToConvert","baseQueryString","keyValuePair","substring","getAcceptTypes","localStorage","getItem","getRequest","contentType","parametersToSend","optionalCallbacks","xhr","onreadystatechange","readyState","succededStatus","setRequestHeader","err","postRequest","abort","requestHeaders","noJsonStringify","request","requestToAbort","requestForQueue","response","getAbsolutePathRequest","siteUrl","convertToQueryString","domHelper","reviewsParameters","BrandId","PageSize","StateAbbreviation","MarketName","IsMarketSearch","ReviewSortBy","PageNumber","MarketId","ReviewStar","BuilderToSearch","SearchType","isReviewsPage","getReviewsDefaultParameters","ajaxHelper","routes","lazyLoad","sortByList","reviewsSection","lastMarketIdShowed","ReviewsHandler","initLazyLoad","reviewsSkeleton","showContent","skeleton","reviewsCards","filterArea","offsetTop","getReviews","searchParams","getRatingsAndReviewsSection","updateContent","SetCommonParameters","localSearchParams","brandName","ReviewSearchParams","filterType","sortBy","searchParameters","selectedIndex","onReviewsSectionLoaded","onSortByChanged","onStarFilterChanged","PaginationChanged","PageSizeChanged","proposedMarket","brandId","marketName","marketId","stateName","stateAbbreviation","StateAbbr","isMarketSearch","onMarketChanged","SectionLazyLoad","rootMarginObserver","IntersectionObserver","observer","entry","isIntersecting","intersectionRatio","hostname","fetch","preventLazyLoadSectionDefaultBehavior","responseFragment","createRange","createContextualFragment","lazyLoadSection","unobserve","rootMargin","lazyLoadSections","observe","nearbySection","nearbySectionHandler","community","Modules","ArrowHandler","getProposedMarketId","getBuilderShowCaseNearbySection","getNearbySection","callButton","phone","previousElementSibling","focus","displayPhone","textContent","showMoreText","gaEventLabel","showLessText","showLessManufacturedResults","showMoreManufacturedResults","attachManufacturedShowMoreHandler","eventTrigger","parameters","arrowRight","arrowLeft","firstCollection","lastCollection","scrollElement","move","limitRight","limitLeft","arrowsReference","arrowReferenceSelector","collectionsReference","collectionsReferenceSelector","bindedCalculateMoveCallback","bindedCalculateMove","bindedOnChangeCallback","onChange","getLimits","observeVisibility","calculateMove","showArrows","getBoundingClientRect","right","changeLimits","moveArrow","scrollBy","scrolledCarousel","loadAskQuestionHandlerModule","moduleName","askQuestionHandler","openModal","MarqueeGalleryHandler","MarqueeFilmstripHandler","MarqueeArrowsHandler","VideoHandler","marqueeFirstElementInitializer","IframeHandler","nearbyContainer","SectionUtils","videoHandler","iframeHandler","marqueeHandler","marqueeFilmstrip","loadDrivingDirectionsModule","drivingDirectionsHandler","openDirectionsOnMap","preventDefault","basicLearnMoreButton","initBasicLearnMoreComponent"],"mappings":"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","file":"../buildershowcasesectionsutilsdesktop-14d09bd28c.js","sourceRoot":"..","sourcesContent":["!(function (win) {\r\n\r\n /**\r\n * FastDom\r\n *\r\n * Eliminates layout thrashing\r\n * by batching DOM read/write\r\n * interactions.\r\n *\r\n * @author Wilson Page \r\n * @author Kornel Lesinski \r\n */\r\n\r\n \"use strict\";\r\n\r\n /**\r\n * Normalized rAF\r\n *\r\n * @type {Function}\r\n */\r\n var raf = win.requestAnimationFrame\r\n || win.webkitRequestAnimationFrame\r\n || win.mozRequestAnimationFrame\r\n || win.msRequestAnimationFrame\r\n || function (cb) { return setTimeout(cb, 16); };\r\n\r\n /**\r\n * Initialize a `FastDom`.\r\n *\r\n * @constructor\r\n */\r\n function FastDom() {\r\n var self = this;\r\n self.reads = [];\r\n self.writes = [];\r\n self.raf = raf.bind(win); // test hook\r\n }\r\n\r\n FastDom.prototype = {\r\n constructor: FastDom,\r\n\r\n /**\r\n * We run this inside a try catch\r\n * so that if any jobs error, we\r\n * are able to recover and continue\r\n * to flush the batch until it's empty.\r\n *\r\n * @param {Array} tasks\r\n */\r\n runTasks: function (tasks) {\r\n var task; while (task = tasks.shift()) task();\r\n },\r\n\r\n /**\r\n * Adds a job to the read batch and\r\n * schedules a new frame if need be.\r\n *\r\n * @param {Function} fn\r\n * @param {Object} ctx the context to be bound to `fn` (optional).\r\n * @public\r\n */\r\n measure: function (fn, ctx) {\r\n var task = !ctx ? fn : fn.bind(ctx);\r\n this.reads.push(task);\r\n scheduleFlush(this);\r\n return task;\r\n },\r\n\r\n /**\r\n * Adds a job to the\r\n * write batch and schedules\r\n * a new frame if need be.\r\n *\r\n * @param {Function} fn\r\n * @param {Object} ctx the context to be bound to `fn` (optional).\r\n * @public\r\n */\r\n mutate: function (fn, ctx) {\r\n var task = !ctx ? fn : fn.bind(ctx);\r\n this.writes.push(task);\r\n scheduleFlush(this);\r\n return task;\r\n },\r\n\r\n /**\r\n * Clears a scheduled 'read' or 'write' task.\r\n *\r\n * @param {Object} task\r\n * @return {Boolean} success\r\n * @public\r\n */\r\n clear: function (task) {\r\n return remove(this.reads, task) || remove(this.writes, task);\r\n },\r\n\r\n /**\r\n * Extend this FastDom with some\r\n * custom functionality.\r\n *\r\n * Because fastdom must *always* be a\r\n * singleton, we're actually extending\r\n * the fastdom instance. This means tasks\r\n * scheduled by an extension still enter\r\n * fastdom's global task queue.\r\n *\r\n * The 'super' instance can be accessed\r\n * from `this.fastdom`.\r\n *\r\n * @example\r\n *\r\n * var myFastdom = fastdom.extend({\r\n * initialize: function() {\r\n * // runs on creation\r\n * },\r\n *\r\n * // override a method\r\n * measure: function(fn) {\r\n * // do extra stuff ...\r\n *\r\n * // then call the original\r\n * return this.fastdom.measure(fn);\r\n * },\r\n *\r\n * ...\r\n * });\r\n *\r\n * @param {Object} props properties to mixin\r\n * @return {FastDom}\r\n */\r\n extend: function (props) {\r\n if (typeof props != 'object') throw new Error('expected object');\r\n\r\n var child = Object.create(this);\r\n mixin(child, props);\r\n child.fastdom = this;\r\n\r\n // run optional creation hook\r\n if (child.initialize) child.initialize();\r\n\r\n return child;\r\n },\r\n\r\n // override this with a function\r\n // to prevent Errors in console\r\n // when tasks throw\r\n catch: null\r\n };\r\n\r\n /**\r\n * Schedules a new read/write\r\n * batch if one isn't pending.\r\n *\r\n * @private\r\n */\r\n function scheduleFlush(fastdom) {\r\n if (!fastdom.scheduled) {\r\n fastdom.scheduled = true;\r\n fastdom.raf(flush.bind(null, fastdom));\r\n }\r\n }\r\n\r\n /**\r\n * Runs queued `read` and `write` tasks.\r\n *\r\n * Errors are caught and thrown by default.\r\n * If a `.catch` function has been defined\r\n * it is called instead.\r\n *\r\n * @private\r\n */\r\n function flush(fastdom) {\r\n var writes = fastdom.writes;\r\n var reads = fastdom.reads;\r\n var error;\r\n\r\n try {\r\n fastdom.runTasks(reads);\r\n fastdom.runTasks(writes);\r\n } catch (e) { error = e; }\r\n\r\n fastdom.scheduled = false;\r\n\r\n // If the batch errored we may still have tasks queued\r\n if (reads.length || writes.length) {\r\n scheduleFlush(fastdom);\r\n }\r\n\r\n if (error) {\r\n if (fastdom.catch) {\r\n fastdom.catch(error);\r\n } else {\r\n throw error;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Remove an item from an Array.\r\n *\r\n * @param {Array} array\r\n * @param {*} item\r\n * @return {Boolean}\r\n */\r\n function remove(array, item) {\r\n var index = array.indexOf(item);\r\n return !!~index && !!array.splice(index, 1);\r\n }\r\n\r\n /**\r\n * Mixin own properties of source\r\n * object into the target.\r\n *\r\n * @param {Object} target\r\n * @param {Object} source\r\n */\r\n function mixin(target, source) {\r\n for (var key in source) {\r\n if (source.hasOwnProperty(key)) target[key] = source[key];\r\n }\r\n }\r\n\r\n // There should never be more than\r\n // one instance of `FastDom` in an app\r\n var exports = win.fastdom = (win.fastdom || new FastDom()); // jshint ignore:line\r\n\r\n // Expose to CJS & AMD\r\n if ((typeof define) == 'function') define('fastdom',[],function () { return exports; });\r\n})(typeof window !== 'undefined' ? window : this);\n","/* eslint-disable class-methods-use-this */\r\ndefine(\r\n 'marqueeGalleryHandler',[\r\n 'builderShowcaseObserver',\r\n 'fastdom'\r\n ],\r\n (\r\n builderShowcaseObserver,\r\n fastdom\r\n ) => {\r\n 'use strict';\r\n\r\n class GalleryHandler {\r\n constructor(configObject) {\r\n this.config = configObject;\r\n this.init();\r\n }\r\n\r\n /**\r\n * Initialize the marquee gallery\r\n * Gets the collection data from the script, and set it in the State.\r\n */\r\n init() {\r\n const data = document.querySelector('[data-marquee-gallery-collections]');\r\n\r\n if (!data) {\r\n return;\r\n }\r\n\r\n const galleryCollections = { };\r\n const collections = JSON.parse(data.innerHTML);\r\n for (let i = 0; i < collections.length; i += 1) {\r\n const collectionName = `${collections[i].Category.toLowerCase()}Collection`;\r\n galleryCollections[collectionName] = collections[i];\r\n }\r\n\r\n builderShowcaseObserver.setData({ galleryCollections });\r\n builderShowcaseObserver.commit();\r\n }\r\n\r\n /**\r\n * Replaces marquee main picture img with the active picture image.\r\n * @param {object} picture Picture Html Object\r\n */\r\n displayNewImage(picture) {\r\n fastdom.mutate(() => {\r\n this.config.mainViewer.innerHTML = '';\r\n this.config.mainViewer.appendChild(picture);\r\n });\r\n }\r\n\r\n /**\r\n * Method subscribed to OnImageSelected event,\r\n * this will receive the active image object as input to build and replace the marquee main image.\r\n * @param {object} data active image object\r\n */\r\n update(data) {\r\n const activeImage = data;\r\n\r\n if (!activeImage || (activeImage.MainImageSources.length === 0 && !activeImage.isLiteGalleryModal)) {\r\n return;\r\n }\r\n\r\n const picture = document.createElement('picture');\r\n const sources = activeImage.MainImageSources || [];\r\n\r\n sources.forEach((sourceItem) => {\r\n const source = document.createElement('source');\r\n source.srcset = sourceItem.Srcset;\r\n source.type = sourceItem.ImageType;\r\n picture.appendChild(source);\r\n });\r\n const img = document.createElement('img');\r\n img.src = activeImage.MainPictureImage.ImageUrl;\r\n img.alt = activeImage.Caption;\r\n img.onerror = function (event) {\r\n const target = event.target;\r\n const parent = target.parentElement;\r\n const imgSources = parent.querySelectorAll('source');\r\n\r\n imgSources.forEach((source) => {\r\n parent.removeChild(source);\r\n });\r\n\r\n target.onerror = null;\r\n img.src = activeImage.MainPictureImage.NoPhoto;\r\n };\r\n\r\n picture.appendChild(img);\r\n this.displayNewImage(picture);\r\n }\r\n }\r\n\r\n return GalleryHandler;\r\n }\r\n);\r\n\n","define(\r\n 'builderShowcaseHelper',[\r\n 'builderShowcaseObserver',\r\n 'fastdom',\r\n ],\r\n (\r\n builderShowcaseObserver,\r\n fastdom,\r\n ) => {\r\n 'use strict';\r\n\r\n /**\r\n * @private\r\n * setUpTextValueInDomElement: assign a text value to a dom element innerText prop\r\n */\r\n function setUpTextValueInDomElement(domObjects, text) {\r\n for (let i = 0; i < domObjects.length; i += 1) {\r\n domObjects[i].innerText = text; // eslint-disable-line no-param-reassign\r\n }\r\n }\r\n\r\n /**\r\n * @private\r\n * setBodyModalInformation: sets the modal body content, it could be a version for brands where\r\n * all of their plans are part of a plan library, or another version where this statement is false.\r\n * Check BDXNHS-7903 for information about version 1\r\n * Check BDXNHS-8058 for information about version 2\r\n */\r\n function setBodyModalInformation(info, container) {\r\n const locationsContainer = container.querySelector('[data-component=\"locations-container\"]');\r\n const locations = container.querySelector('[data-component=\"locations-text\"]');\r\n const locationsLink = container.querySelector('[data-component=\"locations-link\"]');\r\n const planLibraryContainer = container.querySelector('[data-component=\"plan-library-container\"]');\r\n const planLibraryStateTemplate = document.querySelector('[data-plan-library-state]');\r\n const planLibraryMarketTemplate = document.querySelector('[data-plan-library-market]');\r\n const planLibraryCommunityTemplate = document.querySelector('[data-plan-library-community]');\r\n\r\n if (info.jsonResponse.IsManufactured) {\r\n return;\r\n }\r\n\r\n if (info.jsonResponse.PlanLibraryHomes && info.jsonResponse.PlanLibraryHomes.length > 0) {\r\n planLibraryContainer.removeAttribute('hidden');\r\n locationsContainer.setAttribute('hidden', '');\r\n\r\n for (let i = 0; i < info.jsonResponse.PlanLibraryHomes.length; i += 1) {\r\n const stateListItem = planLibraryStateTemplate.content.cloneNode(true);\r\n const state = info.jsonResponse.PlanLibraryHomes[i];\r\n stateListItem.querySelector('[data-role-state]').innerHTML = state.State.StateName;\r\n\r\n for (let j = 0; j < info.jsonResponse.PlanLibraryHomes[i].Markets.length; j += 1) {\r\n const market = info.jsonResponse.PlanLibraryHomes[i].Markets[j];\r\n const marketListItem = planLibraryMarketTemplate.content.cloneNode(true);\r\n marketListItem.querySelector('[data-role-market]').innerHTML = market.Market.Name;\r\n\r\n for (let k = 0; k < info.jsonResponse.PlanLibraryHomes[i].Markets[j].Communities.length; k += 1) {\r\n const comm = info.jsonResponse.PlanLibraryHomes[i].Markets[j].Communities[k];\r\n const communityListItem = planLibraryCommunityTemplate.content.cloneNode(true);\r\n const anchorTag = communityListItem.querySelector('a');\r\n anchorTag.innerHTML = comm.Community.Name;\r\n anchorTag.href = comm.CommunityUrl;\r\n marketListItem.querySelector('[data-role-comm-list]').appendChild(communityListItem);\r\n }\r\n\r\n stateListItem.querySelector('[data-role-market-list]').appendChild(marketListItem);\r\n }\r\n\r\n planLibraryContainer.querySelector('ul').appendChild(stateListItem);\r\n }\r\n\r\n return;\r\n }\r\n\r\n if (locations) {\r\n locationsContainer.removeAttribute('hidden');\r\n locations.innerText = locations.innerText.replace('[BUILDERNAME]', info.jsonResponse.BrandName);\r\n locations.innerText = locations.innerText.replace('[METROCOUNT]', info.jsonResponse.MetroAreasCount);\r\n locationsLink.href = info.jsonResponse.LocationsLink;\r\n }\r\n }\r\n\r\n /**\r\n * @private\r\n * setUpPlanDescription: creates the text to be hold by the description section.\r\n */\r\n function setUpPlanDescription(info, container) {\r\n if (!info || (!info.PlanName && (!info.selectedItem || !info.selectedItem.PlanName))) {\r\n return;\r\n }\r\n\r\n const planName = info.PlanName || info.selectedItem.PlanName;\r\n const planAmenties = info.Amenities || info.selectedItem.Amenities;\r\n const planNameElements = container.querySelectorAll('[data-component=\"plan-name\"]');\r\n const planAmmenitiesElements = container.querySelectorAll('[data-component=\"plan-ammenities\"]');\r\n const builderName = container.querySelector('[data-component=\"builder-name\"]');\r\n const builderLink = container.querySelector('[data-component=\"builder-link\"]');\r\n const reviewsStars = container.querySelector('[data-component=\"reviews-starSummary\"]');\r\n const reviewsScoreText = container.querySelector('[data-component=\"reviews-scoreText\"]');\r\n const reviewsInformation = container.querySelector('[data-component=\"reviews-information\"]');\r\n\r\n if (!planName) {\r\n setUpTextValueInDomElement(planNameElements, '');\r\n setUpTextValueInDomElement(planAmmenitiesElements, '');\r\n return;\r\n }\r\n\r\n setUpTextValueInDomElement(planNameElements, planName);\r\n setUpTextValueInDomElement(planAmmenitiesElements, planAmenties.join(';').replace(/;/g, ' | '));\r\n\r\n if (!info.jsonResponse) {\r\n return;\r\n }\r\n\r\n if (builderName) {\r\n builderName.innerText = builderName.innerText.replace('[BUILDERNAME]', info.jsonResponse.BrandName);\r\n }\r\n\r\n if (builderLink) {\r\n builderLink.href = info.data.BuilderLink;\r\n }\r\n\r\n if (info.data.hasBuilderReviews && reviewsStars && reviewsScoreText) {\r\n const ratingValue = info.data.averageRating;\r\n reviewsStars.style = `--rating:${ratingValue}`;\r\n reviewsInformation.removeAttribute('hidden');\r\n }\r\n\r\n setBodyModalInformation(info, container);\r\n }\r\n\r\n /**\r\n * @private\r\n * Gets the image type for the source\r\n */\r\n function getImageType(url) {\r\n const sections = url.split(',');\r\n const source = sections[0].split(' ');\r\n const address = source[0];\r\n let type = 'image/';\r\n\r\n if (address.indexOf('webp') > 0) {\r\n type += 'webp';\r\n } else if (address.indexOf('avif') > 0) {\r\n type += 'avif';\r\n } else {\r\n type += 'jpeg';\r\n }\r\n\r\n return type;\r\n }\r\n\r\n /**\r\n * @private\r\n * degreeToRadius: converts degrees to radius\r\n *\r\n */\r\n function degreeToRadius(degree) {\r\n return degree * (Math.PI / 180);\r\n }\r\n\r\n /**\r\n * @private\r\n * calculateHaversineFormula: determines the great-circle distance between two points\r\n * on a sphere given their longitudes and latitudes. For more:\r\n * https://es.wikipedia.org/wiki/F%C3%B3rmula_del_semiverseno\r\n *\r\n */\r\n function calculateHaversineFormula(latitude, longitude, destinationLatitude, destinationLongitude) {\r\n const earthRadius = 6371; // Radius of the earth in km\r\n const distanceLatitude = degreeToRadius(destinationLatitude - latitude);\r\n const distanceLongitude = degreeToRadius(destinationLongitude - longitude);\r\n const a =\r\n Math.sin(distanceLatitude / 2) * Math.sin(distanceLatitude / 2) +\r\n Math.cos(degreeToRadius(latitude)) * Math.cos(degreeToRadius(destinationLatitude)) *\r\n Math.sin(distanceLongitude / 2) * Math.sin(distanceLongitude / 2);\r\n const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\r\n return earthRadius * c; // Distance in km\r\n }\r\n\r\n function onMapUpdatedSuccess(html, config) {\r\n const configObject = config;\r\n\r\n if (!document.querySelector('[data-ismobiledevice=\"true\"]')) {\r\n configObject.infowindow.setContent(html);\r\n configObject.infowindow.open(configObject.mapInstance, configObject.marker);\r\n configObject.marker.setCursor('pointer');\r\n require(['mapCardCtaHandler'], (mapCardCtaHandler) => {\r\n mapCardCtaHandler.setMapInstance(configObject.mapItem);\r\n });\r\n\r\n return;\r\n }\r\n\r\n configObject.cardsHtmlContainer.innerHTML = html;\r\n configObject.cardsHtmlContainer.style.opacity = '1';\r\n configObject.cardsHtmlContainer.removeAttribute('hidden');\r\n require(\r\n ['loadCss'],\r\n (loadCss) => {\r\n const cardCssInput = document.querySelector('#card-css');\r\n loadCss(cardCssInput.value);\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Gets from the state marquee gallary collection item.\r\n * the item object that is going to be active.\r\n * @param {string} imageId selected image Id from thumbnail/filmstrip.\r\n * @returns MarqueeGalleryItem object\r\n */\r\n function getCollectionItem(imageId, collectionCategory, getGalleryCollection) {\r\n const state = builderShowcaseObserver.getState();\r\n const galleryCollection = getGalleryCollection(state, collectionCategory);\r\n const items = galleryCollection.Items;\r\n const item = items.find((x) => +x.Id === +imageId);\r\n\r\n return item;\r\n }\r\n\r\n /**\r\n * changeStyleWithFastDom: applies style changes to a given element withing a fastdom frame\r\n */\r\n function changeStyleWithFastDom(element) {\r\n element.parentElement.classList.remove('figure--active');\r\n element.removeAttribute('data-active');\r\n }\r\n\r\n /**\r\n * performStyleChange: calls a named function for changing styles using fast dom\r\n */\r\n function performStyleChange(element) {\r\n fastdom.mutate(changeStyleWithFastDom.bind(null, element));\r\n }\r\n\r\n /**\r\n * Removes the classes and attributes set to the last active image\r\n */\r\n function cleanActiveElements(activeThumbSelector) {\r\n const elements = document.querySelectorAll(activeThumbSelector);\r\n if (elements) {\r\n elements.forEach(performStyleChange);\r\n }\r\n }\r\n\r\n /**\r\n * Sets classes and attributes to a given picture.\r\n * @param {object} selectedThumbnail Picture HTML object\r\n */\r\n function applyActiveStyles(selectedThumbnail, activeThumbSelector) {\r\n cleanActiveElements(activeThumbSelector);\r\n\r\n fastdom.mutate(() => {\r\n selectedThumbnail.parentElement.classList.add('figure--active');\r\n selectedThumbnail.setAttribute('data-active', true);\r\n });\r\n }\r\n\r\n /**\r\n * @private\r\n * getMapUrl: gets url to hit the server in ajax requests related to map functionality.\r\n * Basically, it checks if we are querying from a private label to add the private\r\n * label to the url structure.\r\n *\r\n * @returns the url that should be requested for map related actions like getting\r\n * a single pin or a set of them.\r\n */\r\n function getMapUrl(url) {\r\n const siteRoot = document.querySelector('#nhs_siteRootLogger');\r\n return `${window.location.origin}${siteRoot.value}${url}`;\r\n }\r\n\r\n return {\r\n getImageType,\r\n setUpPlanDescription,\r\n calculateHaversineFormula,\r\n onMapUpdatedSuccess,\r\n getCollectionItem,\r\n applyActiveStyles,\r\n getMapUrl,\r\n };\r\n }\r\n);\r\n\n","/* eslint-disable class-methods-use-this */\r\ndefine(\r\n 'marqueeFilmstripHandler',[\r\n 'builderShowcaseObserver',\r\n 'fastdom',\r\n 'builderShowcaseHelper'\r\n ],\r\n (\r\n builderShowcaseObserver,\r\n fastdom,\r\n showcaseHelper,\r\n ) => {\r\n 'use strict';\r\n\r\n class FilmStrip {\r\n constructor(configObject) {\r\n this.config = configObject;\r\n this.setEvents();\r\n this.saveFirstImageIntoState();\r\n this.handleInitialScroll();\r\n\r\n window.addEventListener('orientationchange', () => {\r\n const activeSelector = '[data-filmstrip-slide] [data-active=\"true\"]';\r\n const activeImageToUse = this.config.mainViewer.parentElement.querySelector(activeSelector);\r\n setTimeout(() => {\r\n this.handleFilmstripScroll(activeImageToUse);\r\n }, 500);\r\n });\r\n }\r\n\r\n /**\r\n * Sets in the buildershowcase state the active image/item.\r\n * We could have several filmstrips, so the way of letting know the state which active image belongs\r\n * to a filmstrip is by saving the active image as an object attribute whom index is the component the\r\n * active image will belong to. For example, if we want to save an active image for the marquee, then\r\n * we are going to do «activeImage[\"marqueeComponent\"]=image» and the string \"marqueeComponent\" it's being read\r\n * from the config object: «this.config.componentName». Than way, we could have several active images, and\r\n * we can support N filmstrips at the same page.\r\n * @param {object} image MarqueeGalleryItem\r\n */\r\n setActiveItem(image) {\r\n let activeImage = this.getStateActiveImage();\r\n\r\n if (!activeImage) {\r\n activeImage = {};\r\n }\r\n\r\n activeImage[this.config.componentName] = image;\r\n\r\n builderShowcaseObserver.setData({ activeImage });\r\n builderShowcaseObserver.commit();\r\n }\r\n\r\n /**\r\n * @private\r\n * Used to save the first image into BSP state\r\n */\r\n saveFirstImageIntoState() {\r\n const firstImage = document.querySelector(this.config.activeThumbSelector);\r\n if (!firstImage) {\r\n return;\r\n }\r\n\r\n const collection = firstImage.dataset.imageCategory;\r\n if (firstImage) {\r\n const id = firstImage.dataset.imageId;\r\n const imageObject = showcaseHelper.getCollectionItem(id, collection, this.config.getGalleryCollection);\r\n\r\n this.setActiveItem(imageObject);\r\n }\r\n }\r\n\r\n /**\r\n * Notifies imageSelected subscribers that a new image has been selected.\r\n * @param {Object} activeImage MarqueeGalleryItem object\r\n */\r\n notifyChange(activeImage) {\r\n this.config.eventOnImageSelected(activeImage);\r\n }\r\n\r\n /**\r\n * Event triggered when a new image in the filmstrip has been selected.\r\n * Identifies the image selected object.\r\n * Apply the styles/attributes changes.\r\n * Updated and notifies the buildershowcase state.\r\n * @param {*} event event triggered\r\n */\r\n setMainImage(selectedThumbnail) {\r\n const collection = selectedThumbnail.dataset.imageCategory;\r\n const imageId = selectedThumbnail.dataset.imageId;\r\n const activeImage = showcaseHelper.getCollectionItem(imageId, collection, this.config.getGalleryCollection);\r\n showcaseHelper.applyActiveStyles(selectedThumbnail, this.config.activeThumbSelector);\r\n this.setActiveItem(activeImage);\r\n this.notifyChange(activeImage);\r\n }\r\n\r\n /**\r\n * Function executed when the image selected event is triggered.\r\n * @param {*} event The event.\r\n */\r\n onImageSelected(event) {\r\n const selectedThumbnail = event.target.closest('LI').querySelector('PICTURE');\r\n this.setMainImage(selectedThumbnail);\r\n }\r\n\r\n /**\r\n * Attaches clicks events to every picture in the filmstrip.\r\n */\r\n setEvents() {\r\n if (this.config.filmstripItems) {\r\n this.config.filmstripItems.forEach((item) => {\r\n item.addEventListener('click', this.onImageSelected.bind(this));\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Used to get the current active image.\r\n * @returns The active image.\r\n */\r\n getStateActiveImage() {\r\n const state = builderShowcaseObserver.getState();\r\n const activeImage = state.data.activeImage;\r\n return activeImage;\r\n }\r\n\r\n /**\r\n * Used to get the number of items inside the current collection.\r\n * @param {string} collectionCategory The collection name.\r\n * @returns The number of items inside the current collection.\r\n */\r\n getCollectionCount(collectionCategory) {\r\n const state = builderShowcaseObserver.getState();\r\n const galleryCollection = this.config.getGalleryCollection(state, collectionCategory);\r\n return galleryCollection.Items.length;\r\n }\r\n\r\n /**\r\n * @private\r\n * attachControlEvents: attaches the next / prev arrows functionality.\r\n */\r\n handleFilmstripScroll(activeImage) {\r\n const activeImageToUse = activeImage || this.config.firstActiveImage;\r\n\r\n if (!activeImageToUse) {\r\n return;\r\n }\r\n\r\n const scroller = activeImageToUse.closest('ul');\r\n const closestListItem = activeImageToUse.closest('li');\r\n const currentImageIndex = Array.prototype.indexOf.call(scroller.children, closestListItem);\r\n const currentImage = scroller.children[currentImageIndex];\r\n currentImage.scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'start' });\r\n }\r\n\r\n /**\r\n * @private\r\n * handleInitialScroll: decides if we need to scroll the filmstrip on init\r\n */\r\n handleInitialScroll() {\r\n const activeImageToUse = this.config.firstActiveImage;\r\n\r\n if (!activeImageToUse) {\r\n return;\r\n }\r\n\r\n const imageSequence = parseInt(activeImageToUse.dataset.imageSequence, 10);\r\n\r\n if (imageSequence > 4) {\r\n this.handleFilmstripScroll(activeImageToUse);\r\n }\r\n }\r\n\r\n /**\r\n * Used to get the next item's index\r\n * @param {string} data wheter to move to the next or previous image\r\n * @param {int} activeSequence the current's image sequence\r\n * @param {*} activeCollectionCount the number of items in the current collection\r\n * @returns the next item's index\r\n */\r\n getNextSequence(data, activeSequence, activeCollectionCount) {\r\n let sequence = activeSequence;\r\n\r\n switch (data) {\r\n case 'next':\r\n sequence += 1;\r\n break;\r\n case 'previous':\r\n sequence -= 1;\r\n break;\r\n default:\r\n sequence = activeSequence;\r\n }\r\n\r\n if (sequence < 0) {\r\n return activeCollectionCount - 1;\r\n }\r\n\r\n if (sequence >= activeCollectionCount) {\r\n return 0;\r\n }\r\n\r\n return sequence;\r\n }\r\n\r\n /**\r\n * Used to update the page when the event is triggered\r\n * @param {string} data wheter to move to the next, or previous image\r\n * @param {string} topic to work once fired the event\r\n */\r\n update(data, topic) {\r\n if (topic === 'onGalleryClosed') {\r\n const activeItem = this.getStateActiveImage()[this.config.componentName];\r\n activeItem.playOnLoaded = false;\r\n builderShowcaseObserver.imageSelected(activeItem);\r\n return;\r\n }\r\n\r\n const activeItem = this.getStateActiveImage();\r\n const pictures = this.config.mainViewer.parentElement.querySelectorAll('[data-filmstrip-slide] picture');\r\n const filmsStripElements = Array.from(pictures);\r\n\r\n const activeItemId = activeItem[this.config.componentName].Id;\r\n const activeElement = filmsStripElements.filter((x) => +x.dataset.imageId === activeItemId)[0];\r\n const activeElementIndex = filmsStripElements.indexOf(activeElement);\r\n const nextIndex = this.getNextSequence(data, activeElementIndex, filmsStripElements.length);\r\n const selectedItem = filmsStripElements[nextIndex];\r\n\r\n this.setMainImage(selectedItem);\r\n this.handleFilmstripScroll(selectedItem);\r\n }\r\n }\r\n\r\n return FilmStrip;\r\n }\r\n);\r\n\n","/* eslint-disable class-methods-use-this */\r\ndefine(\r\n 'marqueeArrowsHandler',[\r\n ],\r\n () => {\r\n 'use strict';\r\n\r\n class ArrowHandler {\r\n constructor(configObject) {\r\n this.config = configObject;\r\n this.handleNavigationControls();\r\n }\r\n\r\n /**\r\n * Notifies imageSelected subscribers that a new image has been selected.\r\n * @param {Object} activeImage MarqueeGalleryItem object\r\n */\r\n notifyChange(action) {\r\n this.config.eventOnThumbSelected(action);\r\n }\r\n\r\n navigateToImage(event) {\r\n const action = event.target.dataset.filmstripButton;\r\n this.notifyChange(action);\r\n }\r\n\r\n handleNavigationControls() {\r\n this.config.navigationButtons.forEach((button) => {\r\n button.addEventListener('click', this.navigateToImage.bind(this));\r\n });\r\n }\r\n }\r\n\r\n return ArrowHandler;\r\n }\r\n);\r\n\n","(function brightcovePlayer(global) {\r\n 'use strict';\r\n\r\n global.NewHomeSource = global.NewHomeSource || {};\r\n global.NewHomeSource.videoPlayers = global.NewHomeSource.videoPlayers || {};\r\n global.NewHomeSource.videoPlayers.brightcove = global.NewHomeSource.videoPlayers.brightcove || {};\r\n\r\n /**\r\n * @private\r\n * triggerOnDemandTracker: dispatch the event trackOnDemandEvent\r\n *\r\n * @param {Object} eventInformation object with the event information to be triggered.\r\n */\r\n function triggerOnDemandTracker(eventInformation) {\r\n document.body.dispatchEvent(new CustomEvent('trackOnDemandEvent', {\r\n detail: {\r\n data: eventInformation\r\n }\r\n }));\r\n }\r\n\r\n /**\r\n * triggerEvents: triggers the events with the parameter values.\r\n * @param {Object} eventParameters object parameter values that will be used on the events.\r\n */\r\n function triggerEvents(eventParameters) {\r\n const { googleAnalyticsEventAction, googleAnalytics4EventName } = eventParameters;\r\n const events = [];\r\n if (googleAnalytics4EventName) {\r\n const googleAnalytics4Event = {\r\n eventType: 'GA4Event',\r\n eventName: googleAnalytics4EventName,\r\n params: {\r\n video_type: 'Brightcove',\r\n click_target: 'Video event'\r\n }\r\n };\r\n events.push(googleAnalytics4Event);\r\n }\r\n\r\n if (googleAnalyticsEventAction) {\r\n const googleAnalyticsEvent = {\r\n event: 'GAEvent',\r\n eventType: 'GAEvent',\r\n eventCategory: 'Video',\r\n eventAction: googleAnalyticsEventAction,\r\n eventLabel: 'Brightcove',\r\n };\r\n events.push(googleAnalyticsEvent);\r\n }\r\n\r\n events.forEach(triggerOnDemandTracker);\r\n }\r\n\r\n const brightcoveDomain = '//players.brightcove.net/';\r\n const scriptFile = '_default/index.min.js';\r\n const playerInformation = {\r\n account: '689254969001',\r\n player: 'HkxkXn9mf',\r\n };\r\n const videoId = 'video-id';\r\n const defaultEvents = {\r\n onEnded: function onEnded() {\r\n const eventParameters = {\r\n googleAnalyticsEventAction: 'Completed',\r\n googleAnalytics4EventName: 'video_completed'\r\n };\r\n triggerEvents(eventParameters);\r\n },\r\n onPlaying: function onPlaying() { },\r\n onPaused: function onPaused() {\r\n const eventParameters = {\r\n googleAnalyticsEventAction: 'Pause',\r\n googleAnalytics4EventName: 'video_pause'\r\n };\r\n triggerEvents(eventParameters);\r\n },\r\n };\r\n\r\n let bcPlayer;\r\n let eventsHandler;\r\n let player;\r\n\r\n /**\r\n * @private\r\n * brightcoveFilepath: returns the path where the JavaScript for the requested player can be found.\r\n */\r\n function brightcoveFilepath() {\r\n return global.document.location.protocol +\r\n brightcoveDomain +\r\n playerInformation.account +\r\n '/' +\r\n playerInformation.player +\r\n scriptFile;\r\n }\r\n\r\n /**\r\n * @private\r\n * loadVideo: loads a new video into the Brightcove Player.\r\n *\r\n * @param {object} error with the error information.\r\n * @param {string} video that is going to be loaded.\r\n */\r\n function loadVideo(error, video) {\r\n bcPlayer.catalog.load(video);\r\n }\r\n\r\n /**\r\n * @private\r\n * setAttribute: sets the value as an attribute according to the playerInformation.\r\n * @param {string} value property that is going to be set in the DOM.\r\n */\r\n function setAttribute(value) {\r\n player.setAttribute('data-' + value, playerInformation[value]);\r\n }\r\n\r\n /**\r\n * @private\r\n * updateVideo: looks for the given video id from the player information, and loads it.\r\n */\r\n function updateVideo() {\r\n bcPlayer.catalog.getVideo(playerInformation[videoId], loadVideo);\r\n }\r\n\r\n /**\r\n * @private\r\n * onTimeUpdate: Executed each second the video is reproduced.\r\n */\r\n\r\n function onTimeUpdate() {\r\n const currentTime = Number(this.currentTime());\r\n const duration = Number(this.duration());\r\n const percentViewed = Math.floor((currentTime / duration) * 100);\r\n const ev = this.isEventViewed;\r\n // eslint-disable-next-line default-case\r\n switch (true) {\r\n case (!ev['75'] && percentViewed === 75): {\r\n const eventParameters = {\r\n googleAnalyticsEventAction: '75% Watched',\r\n googleAnalytics4EventName: 'video_75%'\r\n };\r\n triggerEvents(eventParameters);\r\n ev['75'] = true;\r\n break;\r\n }\r\n case (!ev['50'] && percentViewed === 50): {\r\n const eventParameters = {\r\n googleAnalyticsEventAction: '50% Watched',\r\n googleAnalytics4EventName: 'video_50%'\r\n };\r\n triggerEvents(eventParameters);\r\n ev['50'] = true;\r\n break;\r\n }\r\n case (!ev['25'] && percentViewed === 25): {\r\n const eventParameters = {\r\n googleAnalyticsEventAction: '25% Watched',\r\n googleAnalytics4EventName: 'video_25%'\r\n };\r\n triggerEvents(eventParameters);\r\n ev['25'] = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * @private\r\n * onPlaying: triggers the onPlaying event handler.\r\n */\r\n function playingHandler(data) {\r\n const eventData = data;\r\n eventData.videoId = playerInformation[videoId];\r\n eventsHandler.onPlaying(eventData);\r\n\r\n const eventParameters = {\r\n googleAnalyticsEventAction: 'Play',\r\n };\r\n triggerEvents(eventParameters);\r\n\r\n bcPlayer.isEventViewed = {};\r\n bcPlayer.on('timeupdate', onTimeUpdate);\r\n }\r\n\r\n function onReady() {\r\n if (eventsHandler.playOnLoaded) {\r\n bcPlayer.play();\r\n }\r\n }\r\n\r\n /**\r\n * @private\r\n * createVideo: loads the requested video on the player.\r\n */\r\n function createVideo() {\r\n if (typeof videojs !== 'function') {\r\n return;\r\n }\r\n\r\n Object.keys(playerInformation).forEach(setAttribute);\r\n bcPlayer = global.bc(player);\r\n bcPlayer.on('ended', eventsHandler.onEnded);\r\n bcPlayer.on('play', playingHandler);\r\n bcPlayer.on('pause', eventsHandler.onPaused);\r\n bcPlayer.on('ready', onReady);\r\n }\r\n\r\n /**\r\n * @private\r\n * loadBrightcoveScript: loads the Brightcove JavaScript needed for the player.\r\n */\r\n function loadBrightcoveScript() {\r\n if (typeof global.videojs === 'function') {\r\n createVideo();\r\n return;\r\n }\r\n\r\n if (global.define) {\r\n require(\r\n ['bc'],\r\n (brightcoveCallback) => {\r\n global.bc = brightcoveCallback;\r\n createVideo();\r\n }\r\n );\r\n\r\n return;\r\n }\r\n\r\n const tag = document.getElementsByTagName('meta')[0];\r\n const script = document.createElement('script');\r\n\r\n script.async = true;\r\n script.src = brightcoveFilepath();\r\n script.type = 'text/javascript';\r\n script.onload = createVideo;\r\n tag.parentNode.insertBefore(script, tag);\r\n }\r\n\r\n /**\r\n * @constructs BrightcovePlayer\r\n *\r\n * @param {HTMLVideoElement} video element where the brightcove player is going to be created.\r\n * @param {string} source id of the video to be displayed.\r\n * @param {object} config with the extra information needed by the player.\r\n */\r\n function Player(video, source, config) {\r\n player = global.document.getElementById(video);\r\n playerInformation[videoId] = source;\r\n eventsHandler = Object.assign({ }, defaultEvents, config);\r\n loadBrightcoveScript();\r\n }\r\n\r\n /**\r\n * @public\r\n * createContainer: creates an HTML element needed by the Brightcove JavaScript to create the player.\r\n */\r\n Player.createContainer = function createContainer() {\r\n const videoElement = document.createElement('video');\r\n videoElement.id = 'videoContainer';\r\n videoElement.style.width = '100%';\r\n videoElement.style.height = '100%';\r\n videoElement.innerHTML = '';\r\n videoElement.classList = 'video-js BrightcoveExperience BrightcoveExperienceID_4160 bc-player-HkxkXn9mf_default';\r\n videoElement.setAttribute('data-embed', 'default');\r\n videoElement.setAttribute('data-application-id', 'true');\r\n videoElement.setAttribute('controls', 'true');\r\n\r\n return videoElement;\r\n };\r\n\r\n /**\r\n * @public\r\n * setVideo: changes the source of the video to the given value.\r\n *\r\n * @param {HTMLVideoElement} video element where the YouTube player is going to be created.\r\n * @param {string} source new video ID.\r\n */\r\n Player.setVideo = function setVideo(video, source) {\r\n if (source) {\r\n player = global.document.getElementById(video);\r\n playerInformation[videoId] = source;\r\n }\r\n\r\n if (!bcPlayer) {\r\n loadBrightcoveScript();\r\n return;\r\n }\r\n\r\n updateVideo();\r\n };\r\n\r\n /**\r\n * @public\r\n * dispose: destroy the video reference for brightcove.\r\n *\r\n */\r\n Player.dispose = function dispose() {\r\n try {\r\n if (bcPlayer) {\r\n bcPlayer.dispose();\r\n }\r\n // eslint-disable-next-line no-empty\r\n } catch (error) {\r\n\r\n }\r\n };\r\n\r\n /**\r\n * @public\r\n * pause: pauses the brightcove video.\r\n *\r\n */\r\n Player.pause = function pause() {\r\n try {\r\n if (player) {\r\n player.pause();\r\n }\r\n // eslint-disable-next-line no-empty\r\n } catch (error) {\r\n\r\n }\r\n };\r\n\r\n /**\r\n * @public\r\n * play: plays the brightcove video.\r\n *\r\n */\r\n Player.play = function play() {\r\n try {\r\n if (player) {\r\n player.play();\r\n }\r\n // eslint-disable-next-line no-empty\r\n } catch (error) {\r\n\r\n }\r\n };\r\n\r\n global.NewHomeSource.videoPlayers.brightcove.Player = Player;\r\n}(window));\r\n\ndefine(\"brightcoveVideoPlayer\", function(){});\n\n","/*! @vimeo/player v2.5.0 | (c) 2018 Vimeo | MIT License | https://github.com/vimeo/player.js */\r\n!function (e, t) { \"object\" == typeof exports && \"undefined\" != typeof module ? module.exports = t() : \"function\" == typeof define && define.amd ? define('vimeoPlayer',t) : (e.Vimeo = e.Vimeo || {}, e.Vimeo.Player = t()) }(this, function () { \"use strict\"; function e(e, t) { return 0 === e.indexOf(t.toLowerCase()) ? e : \"\" + t.toLowerCase() + e.substr(0, 1).toUpperCase() + e.substr(1) } function t(e) { return e instanceof window.HTMLElement } function n(e) { return !isNaN(parseFloat(e)) && isFinite(e) && Math.floor(e) == e } function r(e) { return /^(https?:)?\\/\\/((player|www).)?vimeo.com(?=$|\\/)/.test(e) } function i() { var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, t = e.id, i = e.url, o = t || i; if (!o) throw new Error(\"An id or url must be passed, either in an options object or as a data-vimeo-id or data-vimeo-url attribute.\"); if (n(o)) return \"https://vimeo.com/\" + o; if (r(o)) return o.replace(\"http:\", \"https:\"); if (t) throw new TypeError(\"“\" + t + \"” is not a valid video id.\"); throw new TypeError(\"“\" + o + \"” is not a vimeo.com url.\") } function o(e, t) { return t = { exports: {} }, e(t, t.exports), t.exports } function a(e, t, n) { var r = T.get(e.element) || {}; t in r || (r[t] = []), r[t].push(n), T.set(e.element, r) } function u(e, t) { return (T.get(e.element) || {})[t] || [] } function s(e, t, n) { var r = T.get(e.element) || {}; if (!r[t]) return !0; if (!n) return r[t] = [], T.set(e.element, r), !0; var i = r[t].indexOf(n); return -1 !== i && r[t].splice(i, 1), T.set(e.element, r), r[t] && 0 === r[t].length } function c(e, t) { var n = u(e, t); if (n.length < 1) return !1; var r = n.shift(); return s(e, t, r), r } function l(e, t) { var n = T.get(e); T.set(t, n), T.delete(e) } function f(e) { var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}; return _.reduce(function (t, n) { var r = e.getAttribute(\"data-vimeo-\" + n); return (r || \"\" === r) && (t[n] = \"\" === r ? 1 : r), t }, t) } function h(e) { var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}; return new Promise(function (n, i) { if (!r(e)) throw new TypeError(\"“\" + e + \"” is not a vimeo.com url.\"); var o = \"https://vimeo.com/api/oembed.json?url=\" + encodeURIComponent(e); for (var a in t) t.hasOwnProperty(a) && (o += \"&\" + a + \"=\" + encodeURIComponent(t[a])); var u = \"XDomainRequest\" in window ? new XDomainRequest : new XMLHttpRequest; u.open(\"GET\", o, !0), u.onload = function () { if (404 === u.status) return void i(new Error(\"“\" + e + \"” was not found.\")); if (403 === u.status) return void i(new Error(\"“\" + e + \"” is not embeddable.\")); try { var t = JSON.parse(u.responseText); n(t) } catch (e) { i(e) } }, u.onerror = function () { var e = u.status ? \" (\" + u.status + \")\" : \"\"; i(new Error(\"There was an error fetching the embed code from Vimeo\" + e + \".\")) }, u.send() }) } function d(e, t) { var n = e.html; if (!t) throw new TypeError(\"An element must be provided\"); if (null !== t.getAttribute(\"data-vimeo-initialized\")) return t.querySelector(\"iframe\"); var r = document.createElement(\"div\"); return r.innerHTML = n, t.appendChild(r.firstChild), t.setAttribute(\"data-vimeo-initialized\", \"true\"), t.querySelector(\"iframe\") } function v(e) { return \"string\" == typeof e && (e = JSON.parse(e)), e } function p(e, t, n) { if (e.element.contentWindow && e.element.contentWindow.postMessage) { var r = { method: t }; void 0 !== n && (r.value = n); var i = parseFloat(navigator.userAgent.toLowerCase().replace(/^.*msie (\\d+).*$/, \"$1\")); i >= 8 && i < 10 && (r = JSON.stringify(r)), e.element.contentWindow.postMessage(r, e.origin) } } function y(e, t) { t = v(t); var n = [], r = void 0; if (t.event) { if (\"error\" === t.event) { u(e, t.data.method).forEach(function (n) { var r = new Error(t.data.message); r.name = t.data.name, n.reject(r), s(e, t.data.method, n) }) } n = u(e, \"event:\" + t.event), r = t.data } else if (t.method) { var i = c(e, t.method); i && (n.push(i), r = t.value) } n.forEach(function (t) { try { if (\"function\" == typeof t) return void t.call(e, r); t.resolve(r) } catch (e) { } }) } function m(e, t) { if (!(e instanceof t)) throw new TypeError(\"Cannot call a class as a function\") } var g = \"undefined\" != typeof global && \"[object global]\" === {}.toString.call(global), w = void 0 !== Array.prototype.indexOf, b = \"undefined\" != typeof window && void 0 !== window.postMessage; if (!(g || w && b)) throw new Error(\"Sorry, the Vimeo Player API is not available in this browser.\"); var k = \"undefined\" != typeof window ? window : \"undefined\" != typeof global ? global : \"undefined\" != typeof self ? self : {}, E = (o(function (e, t) { !function (e) { function t(e, t) { function r(e) { if (!this || this.constructor !== r) return new r(e); this._keys = [], this._values = [], this._itp = [], this.objectOnly = t, e && n.call(this, e) } return t || w(e, \"size\", { get: y }), e.constructor = r, r.prototype = e, r } function n(e) { this.add ? e.forEach(this.add, this) : e.forEach(function (e) { this.set(e[0], e[1]) }, this) } function r(e) { return this.has(e) && (this._keys.splice(g, 1), this._values.splice(g, 1), this._itp.forEach(function (e) { g < e[0] && e[0]-- })), -1 < g } function i(e) { return this.has(e) ? this._values[g] : void 0 } function o(e, t) { if (this.objectOnly && t !== Object(t)) throw new TypeError(\"Invalid value used as weak collection key\"); if (t != t || 0 === t) for (g = e.length; g-- && !b(e[g], t);); else g = e.indexOf(t); return -1 < g } function a(e) { return o.call(this, this._values, e) } function u(e) { return o.call(this, this._keys, e) } function s(e, t) { return this.has(e) ? this._values[g] = t : this._values[this._keys.push(e) - 1] = t, this } function c(e) { return this.has(e) || this._values.push(e), this } function l() { (this._keys || 0).length = this._values.length = 0 } function f() { return p(this._itp, this._keys) } function h() { return p(this._itp, this._values) } function d() { return p(this._itp, this._keys, this._values) } function v() { return p(this._itp, this._values, this._values) } function p(e, t, n) { var r = [0], i = !1; return e.push(r), { next: function () { var o, a = r[0]; return !i && a < t.length ? (o = n ? [t[a], n[a]] : t[a], r[0]++) : (i = !0, e.splice(e.indexOf(r), 1)), { done: i, value: o } } } } function y() { return this._values.length } function m(e, t) { for (var n = this.entries(); ;) { var r = n.next(); if (r.done) break; e.call(t, r.value[1], r.value[0], this) } } var g, w = Object.defineProperty, b = function (e, t) { return e === t || e !== e && t !== t }; \"undefined\" == typeof WeakMap && (e.WeakMap = t({ delete: r, clear: l, get: i, has: u, set: s }, !0)), \"undefined\" != typeof Map && \"function\" == typeof (new Map).values && (new Map).values().next || (e.Map = t({ delete: r, has: u, get: i, set: s, keys: f, values: h, entries: d, forEach: m, clear: l })), \"undefined\" != typeof Set && \"function\" == typeof (new Set).values && (new Set).values().next || (e.Set = t({ has: a, add: c, delete: r, clear: l, keys: h, values: h, entries: v, forEach: m })), \"undefined\" == typeof WeakSet && (e.WeakSet = t({ delete: r, add: c, clear: l, has: a }, !0)) }(void 0 !== k ? k : window) }), o(function (e) { var t = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (e) { return typeof e } : function (e) { return e && \"function\" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? \"symbol\" : typeof e }; !function (t, n, r) { n[t] = n[t] || r(), e.exports && (e.exports = n[t]) }(\"Promise\", k, function () { function e(e, t) { d.add(e, t), h || (h = p(d.drain)) } function n(e) { var n, r = void 0 === e ? \"undefined\" : t(e); return null == e || \"object\" != r && \"function\" != r || (n = e.then), \"function\" == typeof n && n } function r() { for (var e = 0; e < this.chain.length; e++) i(this, 1 === this.state ? this.chain[e].success : this.chain[e].failure, this.chain[e]); this.chain.length = 0 } function i(e, t, r) { var i, o; try { !1 === t ? r.reject(e.msg) : (i = !0 === t ? e.msg : t.call(void 0, e.msg), i === r.promise ? r.reject(TypeError(\"Promise-chain cycle\")) : (o = n(i)) ? o.call(i, r.resolve, r.reject) : r.resolve(i)) } catch (e) { r.reject(e) } } function o(t) { var i, u = this; if (!u.triggered) { u.triggered = !0, u.def && (u = u.def); try { (i = n(t)) ? e(function () { var e = new s(u); try { i.call(t, function () { o.apply(e, arguments) }, function () { a.apply(e, arguments) }) } catch (t) { a.call(e, t) } }) : (u.msg = t, u.state = 1, u.chain.length > 0 && e(r, u)) } catch (e) { a.call(new s(u), e) } } } function a(t) { var n = this; n.triggered || (n.triggered = !0, n.def && (n = n.def), n.msg = t, n.state = 2, n.chain.length > 0 && e(r, n)) } function u(e, t, n, r) { for (var i = 0; i < t.length; i++) !function (i) { e.resolve(t[i]).then(function (e) { n(i, e) }, r) }(i) } function s(e) { this.def = e, this.triggered = !1 } function c(e) { this.promise = e, this.state = 0, this.triggered = !1, this.chain = [], this.msg = void 0 } function l(t) { if (\"function\" != typeof t) throw TypeError(\"Not a function\"); if (0 !== this.__NPO__) throw TypeError(\"Not a promise\"); this.__NPO__ = 1; var n = new c(this); this.then = function (t, i) { var o = { success: \"function\" != typeof t || t, failure: \"function\" == typeof i && i }; return o.promise = new this.constructor(function (e, t) { if (\"function\" != typeof e || \"function\" != typeof t) throw TypeError(\"Not a function\"); o.resolve = e, o.reject = t }), n.chain.push(o), 0 !== n.state && e(r, n), o.promise }, this.catch = function (e) { return this.then(void 0, e) }; try { t.call(void 0, function (e) { o.call(n, e) }, function (e) { a.call(n, e) }) } catch (e) { a.call(n, e) } } var f, h, d, v = Object.prototype.toString, p = \"undefined\" != typeof setImmediate ? function (e) { return setImmediate(e) } : setTimeout; try { Object.defineProperty({}, \"x\", {}), f = function (e, t, n, r) { return Object.defineProperty(e, t, { value: n, writable: !0, configurable: !1 !== r }) } } catch (e) { f = function (e, t, n) { return e[t] = n, e } } d = function () { function e(e, t) { this.fn = e, this.self = t, this.next = void 0 } var t, n, r; return { add: function (i, o) { r = new e(i, o), n ? n.next = r : t = r, n = r, r = void 0 }, drain: function () { var e = t; for (t = n = h = void 0; e;) e.fn.call(e.self), e = e.next } } }(); var y = f({}, \"constructor\", l, !1); return l.prototype = y, f(y, \"__NPO__\", 0, !1), f(l, \"resolve\", function (e) { var n = this; return e && \"object\" == (void 0 === e ? \"undefined\" : t(e)) && 1 === e.__NPO__ ? e : new n(function (t, n) { if (\"function\" != typeof t || \"function\" != typeof n) throw TypeError(\"Not a function\"); t(e) }) }), f(l, \"reject\", function (e) { return new this(function (t, n) { if (\"function\" != typeof t || \"function\" != typeof n) throw TypeError(\"Not a function\"); n(e) }) }), f(l, \"all\", function (e) { var t = this; return \"[object Array]\" != v.call(e) ? t.reject(TypeError(\"Not an array\")) : 0 === e.length ? t.resolve([]) : new t(function (n, r) { if (\"function\" != typeof n || \"function\" != typeof r) throw TypeError(\"Not a function\"); var i = e.length, o = Array(i), a = 0; u(t, e, function (e, t) { o[e] = t, ++a === i && n(o) }, r) }) }), f(l, \"race\", function (e) { var t = this; return \"[object Array]\" != v.call(e) ? t.reject(TypeError(\"Not an array\")) : new t(function (n, r) { if (\"function\" != typeof n || \"function\" != typeof r) throw TypeError(\"Not a function\"); u(t, e, function (e, t) { n(t) }, r) }) }), l }) })), T = new WeakMap, _ = [\"autopause\", \"autoplay\", \"background\", \"byline\", \"color\", \"height\", \"id\", \"loop\", \"maxheight\", \"maxwidth\", \"muted\", \"playsinline\", \"portrait\", \"responsive\", \"speed\", \"title\", \"transparent\", \"url\", \"width\"], j = function () { function e(e, t) { for (var n = 0; n < t.length; n++) { var r = t[n]; r.enumerable = r.enumerable || !1, r.configurable = !0, \"value\" in r && (r.writable = !0), Object.defineProperty(e, r.key, r) } } return function (t, n, r) { return n && e(t.prototype, n), r && e(t, r), t } }(), M = new WeakMap, x = new WeakMap, Player = function () { function Player(e) { var n = this, o = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}; if (m(this, Player), window.jQuery && Object.entries(window.jQuery).length > 1 && e instanceof jQuery && (e.length > 1 && window.console && console.warn && console.warn(\"A jQuery object with multiple elements was passed, using the first element.\"), e = e[0]), \"undefined\" != typeof document && \"string\" == typeof e && (e = document.getElementById(e)), !t(e)) throw new TypeError(\"You must pass either a valid element or a valid id.\"); if (\"IFRAME\" !== e.nodeName) { var a = e.querySelector(\"iframe\"); a && (e = a) } if (\"IFRAME\" === e.nodeName && !r(e.getAttribute(\"src\") || \"\")) throw new Error(\"The player element passed isn’t a Vimeo embed.\"); if (M.has(e)) return M.get(e); this.element = e, this.origin = \"*\"; var u = new E(function (t, a) { var u = function (e) { if (r(e.origin) && n.element.contentWindow === e.source) { \"*\" === n.origin && (n.origin = e.origin); var i = v(e.data), o = \"event\" in i && \"ready\" === i.event, a = \"method\" in i && \"ping\" === i.method; if (o || a) return n.element.setAttribute(\"data-ready\", \"true\"), void t(); y(n, i) } }; if (window.addEventListener ? window.addEventListener(\"message\", u, !1) : window.attachEvent && window.attachEvent(\"onmessage\", u), \"IFRAME\" !== n.element.nodeName) { var s = f(e, o); h(i(s), s).then(function (t) { var r = d(t, e); return n.element = r, n._originalElement = e, l(e, r), M.set(n.element, n), t }).catch(function (e) { return a(e) }) } }); return x.set(this, u), M.set(this.element, this), \"IFRAME\" === this.element.nodeName && p(this, \"ping\"), this } return j(Player, [{ key: \"callMethod\", value: function (e) { var t = this, n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}; return new E(function (r, i) { return t.ready().then(function () { a(t, e, { resolve: r, reject: i }), p(t, e, n) }).catch(function (e) { i(e) }) }) } }, { key: \"get\", value: function (t) { var n = this; return new E(function (r, i) { return t = e(t, \"get\"), n.ready().then(function () { a(n, t, { resolve: r, reject: i }), p(n, t) }) }) } }, { key: \"set\", value: function (t, n) { var r = this; return E.resolve(n).then(function (n) { if (t = e(t, \"set\"), void 0 === n || null === n) throw new TypeError(\"There must be a value to set.\"); return r.ready().then(function () { return new E(function (e, i) { a(r, t, { resolve: e, reject: i }), p(r, t, n) }) }) }) } }, { key: \"on\", value: function (e, t) { if (!e) throw new TypeError(\"You must pass an event name.\"); if (!t) throw new TypeError(\"You must pass a callback function.\"); if (\"function\" != typeof t) throw new TypeError(\"The callback must be a function.\"); 0 === u(this, \"event:\" + e).length && this.callMethod(\"addEventListener\", e).catch(function () { }), a(this, \"event:\" + e, t) } }, { key: \"off\", value: function (e, t) { if (!e) throw new TypeError(\"You must pass an event name.\"); if (t && \"function\" != typeof t) throw new TypeError(\"The callback must be a function.\"); s(this, \"event:\" + e, t) && this.callMethod(\"removeEventListener\", e).catch(function (e) { }) } }, { key: \"loadVideo\", value: function (e) { return this.callMethod(\"loadVideo\", e) } }, { key: \"ready\", value: function () { var e = x.get(this) || new E(function (e, t) { t(\"Unknown player. Probably unloaded.\") }); return E.resolve(e) } }, { key: \"addCuePoint\", value: function (e) { var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}; return this.callMethod(\"addCuePoint\", { time: e, data: t }) } }, { key: \"removeCuePoint\", value: function (e) { return this.callMethod(\"removeCuePoint\", e) } }, { key: \"enableTextTrack\", value: function (e, t) { if (!e) throw new TypeError(\"You must pass a language.\"); return this.callMethod(\"enableTextTrack\", { language: e, kind: t }) } }, { key: \"disableTextTrack\", value: function () { return this.callMethod(\"disableTextTrack\") } }, { key: \"pause\", value: function () { return this.callMethod(\"pause\") } }, { key: \"play\", value: function () { return this.callMethod(\"play\") } }, { key: \"unload\", value: function () { return this.callMethod(\"unload\") } }, { key: \"destroy\", value: function () { var e = this; return new E(function (t) { x.delete(e), M.delete(e.element), e._originalElement && (M.delete(e._originalElement), e._originalElement.removeAttribute(\"data-vimeo-initialized\")), e.element && \"IFRAME\" === e.element.nodeName && e.element.remove(), t() }) } }, { key: \"getAutopause\", value: function () { return this.get(\"autopause\") } }, { key: \"setAutopause\", value: function (e) { return this.set(\"autopause\", e) } }, { key: \"getColor\", value: function () { return this.get(\"color\") } }, { key: \"setColor\", value: function (e) { return this.set(\"color\", e) } }, { key: \"getCuePoints\", value: function () { return this.get(\"cuePoints\") } }, { key: \"getCurrentTime\", value: function () { return this.get(\"currentTime\") } }, { key: \"setCurrentTime\", value: function (e) { return this.set(\"currentTime\", e) } }, { key: \"getDuration\", value: function () { return this.get(\"duration\") } }, { key: \"getEnded\", value: function () { return this.get(\"ended\") } }, { key: \"getLoop\", value: function () { return this.get(\"loop\") } }, { key: \"setLoop\", value: function (e) { return this.set(\"loop\", e) } }, { key: \"getPaused\", value: function () { return this.get(\"paused\") } }, { key: \"getPlaybackRate\", value: function () { return this.get(\"playbackRate\") } }, { key: \"setPlaybackRate\", value: function (e) { return this.set(\"playbackRate\", e) } }, { key: \"getTextTracks\", value: function () { return this.get(\"textTracks\") } }, { key: \"getVideoEmbedCode\", value: function () { return this.get(\"videoEmbedCode\") } }, { key: \"getVideoId\", value: function () { return this.get(\"videoId\") } }, { key: \"getVideoTitle\", value: function () { return this.get(\"videoTitle\") } }, { key: \"getVideoWidth\", value: function () { return this.get(\"videoWidth\") } }, { key: \"getVideoHeight\", value: function () { return this.get(\"videoHeight\") } }, { key: \"getVideoUrl\", value: function () { return this.get(\"videoUrl\") } }, { key: \"getVolume\", value: function () { return this.get(\"volume\") } }, { key: \"setVolume\", value: function (e) { return this.set(\"volume\", e) } }]), Player }(); return g || (function () { var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : document, t = [].slice.call(e.querySelectorAll(\"[data-vimeo-id], [data-vimeo-url]\")), n = function (e) { \"console\" in window && console.error && console.error(\"There was an error creating an embed: \" + e) }; t.forEach(function (e) { try { if (null !== e.getAttribute(\"data-vimeo-defer\")) return; var t = f(e); h(i(t), t).then(function (t) { return d(t, e) }).catch(n) } catch (e) { n(e) } }) }(), function () { var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : document, t = function (t) { if (r(t.origin) && t.data && \"spacechange\" === t.data.event) for (var n = e.querySelectorAll(\"iframe\"), i = 0; i < n.length; i++) if (n[i].contentWindow === t.source) { var o = n[i].parentElement; o && -1 !== o.className.indexOf(\"vimeo-space\") && (o.style.paddingBottom = t.data.data[0].bottom + \"px\"); break } }; window.addEventListener ? window.addEventListener(\"message\", t, !1) : window.attachEvent && window.attachEvent(\"onmessage\", t) }()), Player });\n","(function vimeoPlayer(global) {\r\n 'use strict';\r\n\r\n global.NewHomeSource = global.NewHomeSource || {};\r\n global.NewHomeSource.videoPlayers = global.NewHomeSource.videoPlayers || {};\r\n global.NewHomeSource.videoPlayers.vimeo = global.NewHomeSource.videoPlayers.vimeo || {};\r\n\r\n const vimeoApi = '//player.vimeo.com/api/player.js';\r\n const playerInformation = { };\r\n const videoId = 'video-id';\r\n const elementId = 'element-id';\r\n const defaultEvents = {\r\n onEnded: function onEnded() { },\r\n onPlaying: function onPlaying() { },\r\n onPaused: function onPaused() { },\r\n onLoaded: function onLoaded() { },\r\n };\r\n\r\n let eventsHandler;\r\n let player;\r\n\r\n /**\r\n * @private\r\n * apiFilepath: returns the path where the JavaScript for the requested player can be found.\r\n */\r\n function apiFilepath() {\r\n return global.document.location.protocol + vimeoApi;\r\n }\r\n\r\n /**\r\n * @private\r\n * onPlaying: triggers the onPlaying event handler.\r\n */\r\n function playingHandler(data) {\r\n const eventData = data;\r\n eventData.videoId = playerInformation[videoId];\r\n eventsHandler.onPlaying(eventData);\r\n }\r\n\r\n function onReady() {\r\n if (eventsHandler.playOnLoaded) {\r\n player.play();\r\n }\r\n }\r\n\r\n /**\r\n * @private\r\n * createPlayer: creates a new Vimeo Player in the given element ID.\r\n */\r\n function createPlayer() {\r\n const options = {\r\n id: playerInformation[videoId],\r\n };\r\n\r\n if (player) {\r\n player.destroy();\r\n }\r\n\r\n player = new global.Vimeo.Player(playerInformation[elementId], options);\r\n player.on('playing', playingHandler);\r\n player.on('pause', eventsHandler.onPaused);\r\n player.on('ended', eventsHandler.onEnded);\r\n player.on('loaded', onReady);\r\n }\r\n\r\n /**\r\n * @private\r\n * updateVideo: loads the new video-id into the Vimeo player.\r\n */\r\n function updateVideo() {\r\n if (!player) {\r\n createPlayer();\r\n }\r\n\r\n player.loadVideo(playerInformation[videoId]);\r\n }\r\n\r\n /**\r\n * @private\r\n * loadVimeoScript: loads the Vimeo JavaScript needed for the player.\r\n */\r\n function loadVimeoScript() {\r\n if (typeof global.Vimeo === 'object') {\r\n createPlayer();\r\n return;\r\n }\r\n\r\n if (global.define) {\r\n require(\r\n ['vimeoPlayer'],\r\n (vimeoPlayerCallback) => {\r\n global.Vimeo = {};\r\n global.Vimeo.Player = vimeoPlayerCallback;\r\n createPlayer();\r\n }\r\n );\r\n\r\n return;\r\n }\r\n\r\n const tag = document.getElementsByTagName('meta')[0];\r\n const script = document.createElement('script');\r\n\r\n script.async = true;\r\n script.type = 'text/javascript';\r\n script.src = apiFilepath();\r\n script.onload = createPlayer;\r\n tag.parentNode.insertBefore(script, tag);\r\n }\r\n\r\n /**\r\n * @constructs VimeoPlayer\r\n *\r\n * @param {HTMLVideoElement} video element where the Vimeo player is going to be created.\r\n * @param {string} source id of the video to be displayed.\r\n * @param {object} config with the extra information needed by the player.\r\n */\r\n function Player(video, source, config) {\r\n playerInformation[videoId] = source;\r\n playerInformation[elementId] = video;\r\n eventsHandler = Object.assign({ }, defaultEvents, config);\r\n loadVimeoScript();\r\n }\r\n\r\n /**\r\n * @public\r\n * createContainer: creates an HTML element needed by the Vimeo JavaScript to create the player.\r\n *\r\n * @param {number} width of the video.\r\n * @param {number} height of the video.\r\n */\r\n Player.createContainer = function createContainer(width, height) {\r\n const videoElement = document.createElement('div');\r\n videoElement.setAttribute('data-vimeo-width', width);\r\n videoElement.setAttribute('data-vimeo-height', height);\r\n videoElement.setAttribute('responsive', 'true');\r\n videoElement.id = 'videoContainer';\r\n videoElement.style.width = '100%';\r\n videoElement.style.height = '100%';\r\n videoElement.innerHTML = '';\r\n return videoElement;\r\n };\r\n\r\n /**\r\n * @public\r\n * setVideo: changes the source of the video to the given value.\r\n *\r\n * @param {HTMLVideoElement} video element where the YouTube player is going to be created.\r\n * @param {string} source new video ID.\r\n */\r\n Player.setVideo = function setVideo(video, source) {\r\n if (source) {\r\n playerInformation[videoId] = source;\r\n playerInformation[elementId] = video;\r\n }\r\n\r\n if (!player) {\r\n loadVimeoScript();\r\n return;\r\n }\r\n\r\n updateVideo();\r\n };\r\n\r\n /**\r\n * @public\r\n * dispose: destroy the video reference for vimeo.\r\n *\r\n */\r\n Player.dispose = function dispose() {\r\n try {\r\n if (player) {\r\n player.destroy();\r\n }\r\n // eslint-disable-next-line no-empty\r\n } catch (error) {\r\n\r\n }\r\n };\r\n\r\n /**\r\n * @public\r\n * pause: pauses the vimeo video.\r\n *\r\n */\r\n Player.pause = function pause() {\r\n try {\r\n if (player) {\r\n player.pause();\r\n }\r\n // eslint-disable-next-line no-empty\r\n } catch (error) {\r\n\r\n }\r\n };\r\n\r\n /**\r\n * @public\r\n * play: plays the vimeo video.\r\n *\r\n */\r\n Player.play = function play() {\r\n try {\r\n if (player) {\r\n player.play();\r\n }\r\n // eslint-disable-next-line no-empty\r\n } catch (error) {\r\n\r\n }\r\n };\r\n\r\n global.NewHomeSource.videoPlayers.vimeo.Player = Player;\r\n}(window));\r\n\ndefine(\"vimeoVideoPlayer\", function(){});\n\n","(function youtubePlayer(global) {\r\n 'use strict';\r\n\r\n global.NewHomeSource = global.NewHomeSource || {};\r\n global.NewHomeSource.videoPlayers = global.NewHomeSource.videoPlayers || {};\r\n global.NewHomeSource.videoPlayers.youtube = global.NewHomeSource.videoPlayers.youtube || {};\r\n\r\n const youtubeAPI = '//www.youtube.com/iframe_api';\r\n const playerInformation = {};\r\n const videoId = 'video-id';\r\n const elementId = 'element-id';\r\n const defaultEvents = {\r\n onEnded: function onEnded() { },\r\n onPlaying: function onPlaying() { },\r\n onPaused: function onPaused() { },\r\n onLoaded: function onLoaded() { },\r\n };\r\n\r\n let eventsHandler;\r\n let player;\r\n\r\n /**\r\n * @private\r\n * apiFilepath: returns the path where the JavaScript for the requested player can be found.\r\n */\r\n function apiFilepath() {\r\n return global.document.location.protocol + youtubeAPI;\r\n }\r\n\r\n /**\r\n * @private\r\n * loadYoutubeApiScript: loads the Youtube IFrame API needed for the player.\r\n */\r\n function loadYoutubeApiScript() {\r\n if (typeof global.YT === 'object') {\r\n global.onYouTubeIframeAPIReady();\r\n return;\r\n }\r\n\r\n const tag = document.getElementsByTagName('meta')[0];\r\n const script = document.createElement('script');\r\n\r\n script.type = 'text/javascript';\r\n script.async = true;\r\n script.src = apiFilepath();\r\n tag.parentNode.insertBefore(script, tag);\r\n }\r\n\r\n /**\r\n * @private\r\n * onPlaying: triggers the onPlaying event handler.\r\n */\r\n function playingHandler(data) {\r\n const eventData = data;\r\n eventData.videoId = playerInformation[videoId];\r\n eventsHandler.onPlaying(eventData);\r\n }\r\n\r\n function onReady(event) {\r\n if (eventsHandler.playOnLoaded) {\r\n event.target.playVideo();\r\n }\r\n }\r\n\r\n function onPlayerStateChange(event) {\r\n switch (event.data) {\r\n case 0:\r\n // Ended.\r\n eventsHandler.onEnded(event);\r\n break;\r\n case 1:\r\n // Playing.\r\n playingHandler(event);\r\n break;\r\n case 2:\r\n // Paused.\r\n eventsHandler.onPaused(event);\r\n break;\r\n default:\r\n }\r\n }\r\n\r\n /**\r\n * @private\r\n * updateVideo: sets a new video in the YouTube player.\r\n */\r\n function updateVideo() {\r\n player.cueVideoById(playerInformation[videoId]);\r\n }\r\n\r\n /**\r\n * @constructs YoutubePlayer\r\n *\r\n * @param {HTMLVideoElement} video element where the YouTube player is going to be created.\r\n * @param {string} source id of the video to be displayed.\r\n * @param {object} config with the extra information needed by the player.\r\n */\r\n function Player(video, source, config) {\r\n playerInformation[videoId] = source;\r\n playerInformation[elementId] = video;\r\n eventsHandler = Object.assign({ }, defaultEvents, config);\r\n loadYoutubeApiScript();\r\n }\r\n\r\n /**\r\n * @public\r\n * createContainer: creates an HTML element needed by the Youtube JavaScript to create the player.\r\n */\r\n Player.createContainer = function createContainer() {\r\n const videoElement = document.createElement('div');\r\n videoElement.id = 'videoContainer';\r\n videoElement.style.width = '100%';\r\n videoElement.style.height = '100%';\r\n videoElement.innerHTML = '';\r\n return videoElement;\r\n };\r\n\r\n /**\r\n * @public\r\n * setVideo: changes the source of the video to the given value.\r\n *\r\n * @param {HTMLVideoElement} video element where the YouTube player is going to be created.\r\n * @param {string} source new video ID.\r\n */\r\n Player.setVideo = function setVideo(video, source) {\r\n if (source) {\r\n playerInformation[videoId] = source;\r\n playerInformation[elementId] = video;\r\n }\r\n\r\n if (!player) {\r\n loadYoutubeApiScript();\r\n return;\r\n }\r\n\r\n updateVideo();\r\n };\r\n\r\n /**\r\n * @public\r\n * onYouTubeIframeAPIReady: function invoked by the Youtube IFrame API once all the resources have been loaded.\r\n */\r\n global.onYouTubeIframeAPIReady = function onYouTubeIframeAPIReady() {\r\n if (typeof global.YT !== 'object') {\r\n return;\r\n }\r\n\r\n player = new global.YT.Player(playerInformation[elementId], {\r\n videoId: playerInformation[videoId],\r\n events: {\r\n onStateChange: onPlayerStateChange,\r\n onReady,\r\n },\r\n });\r\n };\r\n\r\n /**\r\n * @public\r\n * dispose: destroy the video reference for youtube.\r\n *\r\n */\r\n Player.dispose = function dispose() {\r\n try {\r\n if (player) {\r\n player.destroy();\r\n }\r\n // eslint-disable-next-line no-empty\r\n } catch (error) {\r\n\r\n }\r\n };\r\n\r\n /**\r\n * @public\r\n * pause: pauses the youtube video.\r\n *\r\n */\r\n Player.pause = function pause() {\r\n try {\r\n if (player) {\r\n player.pauseVideo();\r\n }\r\n // eslint-disable-next-line no-empty\r\n } catch (error) {\r\n\r\n }\r\n };\r\n\r\n /**\r\n * @public\r\n * play: plays the youtube video.\r\n *\r\n */\r\n Player.play = function play() {\r\n try {\r\n if (player) {\r\n player.playVideo();\r\n }\r\n // eslint-disable-next-line no-empty\r\n } catch (error) {\r\n\r\n }\r\n };\r\n\r\n global.NewHomeSource.videoPlayers.youtube.Player = Player;\r\n}(window));\r\n\ndefine(\"youtubeVideoPlayer\", function(){});\n\n","/* eslint-disable class-methods-use-this */\r\ndefine(\r\n 'builderShowcaseVideoHandler',[\r\n 'builderShowcaseObserver',\r\n 'brightcoveVideoPlayer',\r\n 'vimeoVideoPlayer',\r\n 'youtubeVideoPlayer'\r\n ],\r\n (\r\n builderShowcaseObserver\r\n ) => {\r\n 'use strict';\r\n\r\n class VideoHandler {\r\n constructor(configObject) {\r\n this.config = configObject;\r\n this.videoElement = null;\r\n this.playerToUse = null;\r\n this.videoPlayers = {\r\n brightcove: window.NewHomeSource.videoPlayers.brightcove.Player,\r\n vimeo: window.NewHomeSource.videoPlayers.vimeo.Player,\r\n youtube: window.NewHomeSource.videoPlayers.youtube.Player,\r\n };\r\n }\r\n\r\n /**\r\n * @private\r\n * findPlayer: selects the player to use from [youtube, vimeo, brightcove]\r\n */\r\n findPlayer(data) {\r\n const playerName = data.VideoType.toLowerCase();\r\n return this.videoPlayers[playerName];\r\n }\r\n\r\n /**\r\n * @private\r\n * pauseOtherPlayingVideo: pauses any video playing in the background so the user\r\n * does not have to manually pause it before opening a new one.\r\n */\r\n pauseOtherPlayingVideo() {\r\n const state = builderShowcaseObserver.getState();\r\n const playingVideo = state.data.playingVideo;\r\n if (!playingVideo) {\r\n return;\r\n }\r\n\r\n playingVideo.pause();\r\n }\r\n\r\n /**\r\n * @private\r\n * playVideoOnLoaded: return true if the video needs to be auto played, false otherwise.\r\n */\r\n playVideoOnLoaded(data) {\r\n if (data.playOnLoaded !== undefined) {\r\n return data.playOnLoaded;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Method subscribed to OnImageSelected event,\r\n * this will receive the active image object as input to build and replace the marquee main image.\r\n * @param {object} data active image object\r\n */\r\n update(data) {\r\n this.pauseOtherPlayingVideo();\r\n this.config.mainViewer.innerHTML = '';\r\n const marqueecontainer = this.config.mainViewer.closest('[data-marquee-component=\"gallery\"]');\r\n\r\n if (this.playerToUse) {\r\n this.playerToUse.dispose();\r\n }\r\n\r\n if (!data || !data.VideoType) {\r\n if (marqueecontainer) {\r\n marqueecontainer.classList.remove('gallery--video');\r\n }\r\n\r\n return;\r\n }\r\n\r\n this.playerToUse = this.findPlayer(data);\r\n const handler = {\r\n playOnLoaded: this.playVideoOnLoaded(data),\r\n };\r\n\r\n this.videoElement = this.playerToUse.createContainer(100, 100);\r\n const containerDiv = document.createElement('DIV');\r\n containerDiv.className = 'gallery-box__video';\r\n containerDiv.id = 'nhs_VideoContainer';\r\n containerDiv.appendChild(this.videoElement);\r\n this.config.mainViewer.prepend(containerDiv);\r\n this.videoElement.id = `${this.config.componentName}-${data.VideoId}`;\r\n this.playerToUse(this.videoElement.id, data.VideoId, handler);\r\n\r\n builderShowcaseObserver.setData({ playingVideo: Object.assign({}, this.playerToUse) });\r\n builderShowcaseObserver.commit();\r\n\r\n if (marqueecontainer) {\r\n marqueecontainer.classList.add('gallery--video');\r\n }\r\n }\r\n }\r\n\r\n return VideoHandler;\r\n }\r\n);\r\n\n","define(\r\n 'marqueeFirstElementInitializer',[\r\n 'builderShowcaseObserver',\r\n 'builderShowcaseHelper',\r\n ],\r\n (\r\n builderShowcaseObserver,\r\n showcaseHelper,\r\n ) => {\r\n 'use strict';\r\n\r\n /**\r\n * @private\r\n * getCollection: gets the collection of the selected image.\r\n */\r\n function getCollection(state, subCollection) {\r\n const data = state.data.galleryCollections;\r\n const parameter = `${subCollection.toLowerCase()}Collection`;\r\n return data[parameter];\r\n }\r\n\r\n /**\r\n * @private\r\n * initializeFirstElement: activates the first filmstrip element. Particulary util\r\n * when the first element is a video and the video handlers need to be executed.\r\n */\r\n function initializeFirstElement(configuration) {\r\n if (!configuration.filmstripItems || configuration.filmstripItems.length === 0) {\r\n return;\r\n }\r\n\r\n const imageId = configuration.filmstripItems[0].querySelector('picture').dataset.imageId;\r\n const activeCategory = configuration.filmstripItems[0].querySelector('picture').dataset.imageCategory;\r\n const activeElement = showcaseHelper.getCollectionItem(imageId, activeCategory, getCollection);\r\n const autoInitMediaElements = ['Videos', 'Tours'];\r\n\r\n if (autoInitMediaElements.indexOf(activeElement.HolderCollectionName) === -1) {\r\n return;\r\n }\r\n\r\n const activeImage = {};\r\n activeImage.marqueeGallery = activeElement;\r\n builderShowcaseObserver.setData({ activeImage });\r\n builderShowcaseObserver.commit();\r\n builderShowcaseObserver.imageSelected(activeElement);\r\n configuration.filmstripItems[0].querySelector('PICTURE').setAttribute('data-active', true);\r\n }\r\n\r\n return {\r\n initializeFirstElement,\r\n };\r\n }\r\n);\r\n\n","/*\r\n * This module will be ready to be notified whenever a element is selected in the marquee/galleryModal\r\n * and display the virtual tour if the selected element correspond to virtual tours.\r\n */\r\n/* eslint-disable class-methods-use-this */\r\ndefine(\r\n 'builderShowcaseIframeHandler',[\r\n ],\r\n () => {\r\n 'use strict';\r\n\r\n class IframeHandler {\r\n constructor(configObject) {\r\n this.config = configObject;\r\n }\r\n\r\n /**\r\n * @private\r\n * replaceSpecialCharactersFromEmbedCode: replaces ASCII codes of a string, in concrete: <, >, '.\r\n * @param {string} embedCode is the string where we want to replace special characters from.\r\n */\r\n replaceSpecialCharactersFromEmbedCode(embedCode) {\r\n if (!embedCode) {\r\n return '';\r\n }\r\n\r\n const replaceableStrings = {\r\n '&': '',\r\n 'lt;': '<',\r\n 'gt;': '>',\r\n '#39;': '\\'',\r\n 'quot;': '\\'',\r\n };\r\n\r\n const getReplaceableValue = function getReplaceableValue(char) {\r\n return replaceableStrings[char] || '';\r\n };\r\n\r\n return embedCode.replace(/&|lt;|gt;|#39;|quot;/g, getReplaceableValue);\r\n }\r\n\r\n /**\r\n * @private\r\n * getEmbededCodeSource: return the embed code src.\r\n * @param {string} embedCode is the embedCode we need to return as an element.\r\n */\r\n getEmbededCodeSource(embedCode) {\r\n if (!embedCode) {\r\n return undefined;\r\n }\r\n\r\n const embedCodeWithoutAsciiCharacters = this.replaceSpecialCharactersFromEmbedCode(embedCode);\r\n return embedCodeWithoutAsciiCharacters.replace(/.*src='(.*?)'.*/g, '$1');\r\n }\r\n\r\n /**\r\n * Method subscribed to OnImageSelected event,\r\n * this will receive the active image object as input to build and replace the marquee main image.\r\n * @param {object} data active image object\r\n */\r\n update(data) {\r\n if (!data || !data.Url) {\r\n const tourContainer = this.config.mainViewer.querySelector('#nhs_TourContainer');\r\n if (tourContainer) {\r\n tourContainer.parentElement.removeChild(tourContainer);\r\n }\r\n return;\r\n }\r\n\r\n const containerDiv = document.createElement('DIV');\r\n const iframe = document.createElement('IFRAME');\r\n iframe.setAttribute('sandbox', 'allow-same-origin allow-scripts allow-forms');\r\n\r\n let iframeSource = this.getEmbededCodeSource(data.EmbedCode);\r\n if (!iframeSource) {\r\n iframeSource = data.Url;\r\n }\r\n\r\n iframe.src = iframeSource;\r\n containerDiv.className = 'gallery-box__tour';\r\n containerDiv.id = 'nhs_TourContainer';\r\n containerDiv.appendChild(iframe);\r\n this.config.mainViewer.prepend(containerDiv);\r\n }\r\n }\r\n\r\n return IframeHandler;\r\n }\r\n);\r\n\n","define(\r\n 'marqueeTabsHandler',[\r\n 'builderShowcaseObserver',\r\n 'builderShowcaseHelper',\r\n ],\r\n (\r\n builderShowcaseObserver,\r\n showcaseHelper,\r\n ) => {\r\n 'use strict';\r\n\r\n function marqueeTabsHandler() {\r\n }\r\n\r\n const tabSection = document.querySelector('[data-toggle-container]');\r\n\r\n const tabs = {\r\n map: 'map',\r\n gallery: 'gallery',\r\n video: 'video',\r\n tours: '3dTours'\r\n };\r\n\r\n /**\r\n * Method to retrieve the tab category from the event target.\r\n * @param {object} target event target\r\n */\r\n function getCategory(target) {\r\n return target.dataset ? target.dataset.buttonComponent : null;\r\n }\r\n\r\n /**\r\n * Method to require the the mapBuilderShowCase.js when the users clicks on locations/map tab.\r\n * @param {any} event\r\n */\r\n function loadMapResources(event) {\r\n const category = getCategory(event.target);\r\n if (category === tabs.map) {\r\n require(['mapBuilderShowcase']);\r\n tabSection.removeEventListener('click', loadMapResources);\r\n }\r\n }\r\n\r\n /**\r\n * Removes the classes and attributes set to the last active item\r\n */\r\n function cleanActiveElements() {\r\n const elements = document.querySelectorAll('[data-toggle-container] button');\r\n if (elements) {\r\n elements.forEach((element) => {\r\n const elementToEdit = element;\r\n elementToEdit.classList.remove('btn--active');\r\n elementToEdit.dataset.active = false;\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Apply styles to the active item and remove the old active ones.\r\n */\r\n function applyStyles(target) {\r\n const element = target;\r\n cleanActiveElements();\r\n element.classList.add('btn--active');\r\n element.dataset.active = true;\r\n }\r\n\r\n /**\r\n * Switches the view component on the marquee based on user action.\r\n * @param {} event\r\n */\r\n function switchMarqueeView(event) {\r\n const marqueeComponent = document.querySelectorAll('[data-marquee-component]');\r\n const category = getCategory(event.target);\r\n if (category) {\r\n marqueeComponent.forEach((component) => {\r\n component.setAttribute('hidden', true);\r\n if (component.dataset.marqueeComponent === category) {\r\n component.removeAttribute('hidden');\r\n }\r\n });\r\n }\r\n\r\n applyStyles(event.target);\r\n }\r\n\r\n /**\r\n * @private\r\n * getCollection: gets the collection of the selected image.\r\n */\r\n function getCollection(state, subCollection) {\r\n const data = state.data.galleryCollections;\r\n const parameter = `${subCollection.toLowerCase()}Collection`;\r\n return data[parameter];\r\n }\r\n\r\n /**\r\n * Private,\r\n * applyActiveStylesToCategory: applies the active styles to a category\r\n * from the marquee media options\r\n * @param {Object} data with the information from the active media element\r\n */\r\n function applyActiveStylesToCategory(data) {\r\n const activeCategory = document.querySelector('[data-button-component].btn--active');\r\n const selectedItemCategoryName = activeCategory.dataset.mediaType;\r\n const selectedCategoryName = data.HolderCollectionName;\r\n\r\n if (selectedItemCategoryName !== selectedCategoryName) {\r\n const categoryToSelect =\r\n document.querySelector(`[data-button-component][data-media-type=\"${selectedCategoryName}\"`);\r\n activeCategory.classList.remove('btn--active');\r\n categoryToSelect.classList.add('btn--active');\r\n }\r\n }\r\n\r\n /**\r\n * Private,\r\n * scrollToActiveCategory: moves the filmstrip to a given category\r\n * @param {event} event with the information collected with the click\r\n */\r\n function scrollToActiveCategory(event) {\r\n const activeCategory = event.target.dataset.mediaType;\r\n const scroller = document.querySelector('[data-component=\"marquee-filmstrip\"]');\r\n const elementToScrollTo = document.querySelector(`li[data-media-type=\"${activeCategory}\"]`);\r\n const stateActiveElement = builderShowcaseObserver.getState();\r\n\r\n if (!stateActiveElement.data.activeImage) {\r\n return;\r\n }\r\n\r\n if (stateActiveElement.data.activeImage.marqueeGallery.HolderCollectionName === activeCategory) {\r\n builderShowcaseObserver.imageSelected(stateActiveElement.data.activeImage.marqueeGallery);\r\n return;\r\n }\r\n\r\n if (!elementToScrollTo) {\r\n const videoContainer = document.getElementById('nhs_VideoContainer');\r\n if (videoContainer) {\r\n videoContainer.parentNode.removeChild(videoContainer);\r\n }\r\n\r\n return;\r\n }\r\n\r\n const imageId = elementToScrollTo.querySelector('picture').dataset.imageId;\r\n const activeElement = showcaseHelper.getCollectionItem(imageId, activeCategory, getCollection);\r\n const activeImage = {};\r\n\r\n scroller.scrollTo({ left: elementToScrollTo.offsetLeft, top: 0, behavior: 'smooth' });\r\n showcaseHelper.applyActiveStyles(elementToScrollTo.querySelector('PICTURE'), '[data-filmstrip-image]');\r\n activeImage.marqueeGallery = activeElement;\r\n builderShowcaseObserver.setData({ activeImage });\r\n builderShowcaseObserver.commit();\r\n builderShowcaseObserver.imageSelected(activeElement);\r\n }\r\n\r\n /**\r\n * Private,\r\n * handleTabClick: listens to the click\r\n * @param {event} event with the information collected with the click\r\n */\r\n function handleTabClick(event) {\r\n if (!getCategory(event.target)) {\r\n return;\r\n }\r\n loadMapResources(event);\r\n switchMarqueeView(event);\r\n requestAnimationFrame(scrollToActiveCategory.bind(null, event));\r\n }\r\n\r\n /**\r\n * This method will create the events for the tabs component.\r\n */\r\n function handleTabChange() {\r\n if (tabSection) {\r\n tabSection.addEventListener('click', handleTabClick);\r\n }\r\n }\r\n\r\n marqueeTabsHandler.update = function loadLocationsTab(data, topic) {\r\n if (topic === 'onBeforeMapResultsLoaded') {\r\n const loctationsTab = document.querySelector('[data-button-component=\"map\"]');\r\n\r\n if (!loctationsTab || loctationsTab.dataset.active === 'true') {\r\n return;\r\n }\r\n\r\n loctationsTab.click();\r\n return;\r\n }\r\n\r\n if (topic === 'onImageSelected') {\r\n applyActiveStylesToCategory(data);\r\n }\r\n };\r\n\r\n handleTabChange();\r\n builderShowcaseObserver.subscribe('onBeforeMapResultsLoaded', marqueeTabsHandler);\r\n builderShowcaseObserver.subscribe('onImageSelected', marqueeTabsHandler);\r\n }\r\n);\r\n\n","define('domHelper',[], function () {\r\n var getPassiveOptions = function (passive) {\r\n var opts = new Object();\r\n opts.passive = !!passive;\r\n return opts;\r\n };\r\n\r\n /**\r\n * \r\n * Attaches a event to the DOM Element.\r\n * \r\n * @private \r\n * @param {string} event name that will be attached to the Element.\r\n * @param {function} callback JavaScript function to execute when the event is triggered.\r\n */\r\n function attachEvent(eventName, callback, passive) {\r\n var opts = getPassiveOptions(passive);\r\n\r\n if (document.addEventListener) {\r\n this.addEventListener(eventName, callback, opts);\r\n } else if (document.attachEvent) {\r\n this.attachEvent(eventName, callback, opts);\r\n }\r\n };\r\n\r\n /**\r\n * \r\n * Attaches a event to the DOM Element.\r\n * \r\n * @private \r\n * @param {string} event name that will be attached to the Element.\r\n * @param {function} callback JavaScript function to execute when the event is triggered.\r\n */\r\n function detachEvent(eventName, callback, passive) {\r\n var opts = getPassiveOptions(passive);\r\n\r\n if (document.removeEventListener) {\r\n this.removeEventListener(eventName, callback, opts);\r\n } else if (document.detachEvent) {\r\n this.detachEvent(eventName, callback, opts);\r\n }\r\n };\r\n\r\n Element.prototype.removeEventFromElement = detachEvent;\r\n Element.prototype.addEventToElement = attachEvent;\r\n\r\n Document.prototype.addEventToElement = attachEvent;\r\n Document.prototype.removeEventFromElement = detachEvent;\r\n\r\n /**\r\n * \r\n * Checks if an Element has a Parent with the given ID.\r\n * \r\n * @private \r\n * @param {string} id that will be searched in the parent nodes.\r\n */\r\n Element.prototype.hasParent = function (id) {\r\n if (this.id === id) {\r\n return true;\r\n }\r\n\r\n return this.parentNode && this.parentNode !== document.body && this.parentNode.hasParent(id);\r\n }\r\n\r\n /**\r\n * \r\n * Checks if an Element has a class associated.\r\n * \r\n * @private \r\n * @param {string} className that will be searched in the element.\r\n */\r\n Element.prototype.hasClass = function (className) {\r\n if (!this.classList) {\r\n return false;\r\n }\r\n\r\n return this.classList.contains(className);\r\n }\r\n\r\n if ((typeof window.CustomEvent === \"function\")) {\r\n var onClassListChange = new Event(\"onClassListChange\",\r\n {\r\n bubbles: true\r\n });\r\n\r\n\r\n Element.prototype.addClass = function (className) {\r\n if (this.hasClass(className)) {\r\n return true;\r\n }\r\n this.classList.add(className);\r\n this.dispatchEvent(onClassListChange);\r\n return this;\r\n }\r\n }\r\n\r\n Element.prototype.removeClass = function (className) {\r\n if (!this.hasClass(className)) {\r\n return true;\r\n }\r\n\r\n this.classList.remove(className);\r\n this.dispatchEvent(onClassListChange);\r\n return this;\r\n }\r\n\r\n Element.prototype.insertAfter = function (nodeToInsert) {\r\n this.parentNode.insertBefore(nodeToInsert, this.nextSibling);\r\n }\r\n /**\r\n * \r\n * Hides and element from the DOM.\r\n * \r\n * @private \r\n */\r\n Element.prototype.hide = function () {\r\n this.style.display = \"none\";\r\n return this;\r\n }\r\n\r\n /**\r\n * \r\n * Displays and element from the DOM.\r\n * \r\n * @private \r\n */\r\n Element.prototype.show = function () {\r\n this.style.display = \"block\";\r\n return this;\r\n }\r\n\r\n /**\r\n * \r\n * Checks if an Element is visible.\r\n * \r\n * @private \r\n */\r\n Element.prototype.isVisible = function () {\r\n var style = window.getComputedStyle(this);\r\n\r\n return ((style.display !== \"none\") && (style.visibility !== \"hidden\")) ? true : false;\r\n };\r\n\r\n // Start of ticket BDR-17\r\n // NodeList.forEach Pollyfill\r\n if (!NodeList.prototype.forEach || !DOMTokenList.prototype.forEach) {\r\n var propertyName = \"forEach\";\r\n var forEach = function (callback) {\r\n if (typeof callback !== \"function\") {\r\n throw new TypeError(typeof callback + \" is not a function\");\r\n }\r\n var enumerable = this;\r\n var index = 0;\r\n for (index; index < enumerable.length; index++) {\r\n if (callback(enumerable[index], index, enumerable) === false) {\r\n break;\r\n }\r\n }\r\n };\r\n if (!NodeList.prototype.forEach) {\r\n Object.defineProperty(NodeList.prototype, propertyName, {\r\n enumerable: false,\r\n configurable: false,\r\n writable: false,\r\n value: forEach\r\n });\r\n }\r\n if (!DOMTokenList.prototype.forEach) {\r\n Object.defineProperty(DOMTokenList.prototype, propertyName, {\r\n enumerable: false,\r\n configurable: false,\r\n writable: false,\r\n value: forEach\r\n });\r\n }\r\n }\r\n\r\n if (!Node.prototype.replaceWith || !Element.prototype.replaceWith) {\r\n var replaceWith = function () {\r\n var currentElement = this;\r\n var parent = currentElement.parentNode;\r\n if (!parent) {\r\n return false;\r\n }\r\n //Remove myself if parameters are empty\r\n var length = arguments.length;\r\n if (!length) {\r\n return parent.removeChild(currentElement);\r\n }\r\n var index = 0;\r\n var currentNode;\r\n for (index; index < length; index++) {\r\n currentNode = arguments[index];\r\n if (typeof currentNode !== 'object') {\r\n currentNode = document.createTextNode(currentNode);\r\n } else if (currentNode.parentNode) {\r\n currentNode.parentNode.removeChild(currentNode);\r\n }\r\n if (index === length - 1) {\r\n parent.replaceChild(currentNode, currentElement);\r\n } else {\r\n parent.insertBefore(currentNode, currentElement);\r\n }\r\n }\r\n };\r\n if (!Element.prototype.replaceWith) {\r\n Object.defineProperty(Element.prototype, 'replaceWith', {\r\n enumerable: false,\r\n configurable: false,\r\n writable: false,\r\n value: replaceWith\r\n });\r\n }\r\n if (!Node.prototype.replaceWith) {\r\n Object.defineProperty(Node.prototype, 'replaceWith', {\r\n enumerable: false,\r\n configurable: false,\r\n writable: false,\r\n value: replaceWith\r\n });\r\n }\r\n }\r\n //End of ticket BDR-17 \r\n});\n","(function(global, factory) {\r\n \"use strict\";\r\n if (\"function\" === typeof define && define.amd) {\r\n // If AMD is supported and the global object (window) in case any JS module is expecting\r\n // the AjaxHelper to exists on the window object.\r\n define('ajaxHelper',[],\r\n function() {\r\n return (global.AjaxHelper = factory(global));\r\n });\r\n } else if (\"object\" === typeof exports) {\r\n // If supports for Common JS is available export the module\r\n // and pass is value to the global (window) object in case non Common JS code \r\n // is expected to work with this AjaxHelper.\r\n module.exports = (global.AjaxHelper = factory(global));\r\n } else {\r\n // If not support for AMD or Common JS is available register the module in the global scope.\r\n global.AjaxHelper = factory(global);\r\n }\r\n})(\"undefined\" !== typeof window ? window : {}, function(root) {\r\n\r\n var requestsQueue = [];\r\n var partnerElement = document.getElementsByClassName(\"brand-logo\");\r\n var siteRoot = document.getElementById(\"nhs_siteRoot\");\r\n let browserAcceptTypes = null;\r\n var partnerUrl;\r\n if (partnerElement && partnerElement.length > 0) {\r\n partnerUrl = partnerElement[0].href;\r\n partnerUrl = partnerUrl.replace(\"http:\", window.location.protocol);\r\n } else {\r\n partnerUrl = \"\";\r\n }\r\n\r\n if (siteRoot) {\r\n siteRoot = siteRoot.value;\r\n } else {\r\n siteRoot = \"\";\r\n }\r\n\r\n var executeCallbacks = function(req, options, succeded, data) {\r\n if (typeof options === \"undefined\" || options === null) {\r\n options = {};\r\n }\r\n\r\n // Always\r\n if (typeof options.always === \"function\") {\r\n options.always(data);\r\n }\r\n // Success\r\n if (succeded && typeof options.success === \"function\") {\r\n options.success(data);\r\n } else if (typeof options.failed === \"function\") { // Failed\r\n options.failed(data);\r\n }\r\n\r\n var queueIndex = requestsQueue.indexOf(req);\r\n if (queueIndex > -1) {\r\n requestsQueue.splice(queueIndex, 1);\r\n }\r\n\r\n };\r\n var getRequest = function(url, contentType, parametersToSend, optionalCallbacks) {\r\n var xhr = new XMLHttpRequest();\r\n var req = {\r\n url: url,\r\n type: \"GET\",\r\n xhr: xhr\r\n };\r\n requestsQueue.push(req);\r\n\r\n xhr.open(\"GET\", url, true);\r\n xhr.onreadystatechange = function() {\r\n if (xhr.readyState !== 4) {\r\n return;\r\n }\r\n\r\n var succededStatus = xhr.status === 200;\r\n executeCallbacks(req, optionalCallbacks, succededStatus, xhr.responseText);\r\n };\r\n xhr.setRequestHeader(\"Content-type\", contentType);\r\n xhr.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\r\n xhr.setRequestHeader(\"Accept\", getAcceptTypes());\r\n\r\n\r\n try {\r\n xhr.send(parametersToSend);\r\n } catch (err) {\r\n executeCallbacks(req, optionalCallbacks, false, err);\r\n }\r\n\r\n\r\n };\r\n\r\n var postRequest = function(url, options) {\r\n var xhr = new XMLHttpRequest();\r\n if (options.abort) {\r\n for (var i = 0; i < requestsQueue.length; i += 1) {\r\n if (requestsQueue[i].url === url) {\r\n requestsQueue[i].xhr.abort();\r\n requestsQueue.splice(i, 1);\r\n }\r\n }\r\n }\r\n\r\n var req = {\r\n url: url,\r\n type: \"POST\",\r\n xhr: xhr\r\n };\r\n\r\n requestsQueue.push(req);\r\n\r\n if (typeof options === \"object\") {\r\n\r\n xhr.open(\"POST\", url, options.async ? options.async : true);\r\n xhr.setRequestHeader(\"Accept\", getAcceptTypes());\r\n\r\n if (options.success || options.always || options.failed) {\r\n xhr.onreadystatechange = function() {\r\n if (xhr.readyState !== 4) {\r\n return;\r\n }\r\n\r\n var succededStatus = xhr.status === 200;\r\n executeCallbacks(req, options, succededStatus, xhr.responseText);\r\n };\r\n }\r\n var formatJson = true;\r\n if (options.requestHeaders && options.requestHeaders.length > 0) {\r\n for (var i = 0; i < options.requestHeaders.length; i += 1) {\r\n xhr.setRequestHeader(options.requestHeaders[i].name, options.requestHeaders[i].value);\r\n }\r\n }\r\n\r\n if (options.data) {\r\n var data = null;\r\n \r\n if (options.noJsonStringify) {\r\n data = options.data;\r\n } else {\r\n data = JSON.stringify(options.data);\r\n }\r\n \r\n\r\n try {\r\n xhr.send(data);\r\n } catch (err) {\r\n executeCallbacks(req, options, false, err);\r\n }\r\n\r\n } else {\r\n try {\r\n xhr.send();\r\n } catch (err) {\r\n executeCallbacks(req, options, false, err);\r\n }\r\n }\r\n }\r\n\r\n };\r\n\r\n\r\n var request = function(options) {\r\n // Basic validation\r\n if (!options ||\r\n typeof options !== \"object\" ||\r\n !options.url ||\r\n typeof options.url !== \"string\" ||\r\n !options.type ||\r\n typeof options.type !== \"string\") {\r\n throw new Error(\"Invalid request options\");\r\n }\r\n var xhr = new XMLHttpRequest();\r\n if (options.abort) {\r\n var requestToAbort = requestsQueue.find(function(r) {\r\n return r.url === options.url;\r\n });\r\n\r\n if (requestToAbort) {\r\n requestToAbort.xhr.abort();\r\n requestsQueue.splice(requestToAbort.indexOf(requestToAbort, 1));\r\n }\r\n }\r\n\r\n var requestForQueue = {\r\n url: options.url,\r\n type: options.type,\r\n xhr: xhr\r\n };\r\n\r\n requestsQueue.push(requestForQueue);\r\n\r\n xhr.open(options.type.toUpperCase(), options.url, true);\r\n\r\n\r\n if (typeof options.success === \"function\" ||\r\n typeof options.failed === \"function\" ||\r\n typeof options.always === \"function\") {\r\n xhr.onreadystatechange = function() {\r\n if (xhr.readyState !== 4) return;\r\n\r\n requestsQueue.splice(requestsQueue.indexOf(requestForQueue), 1);\r\n\r\n var response;\r\n\r\n try {\r\n response = JSON.parse(xhr.responseText);\r\n } catch (e) {\r\n response = xhr.responseText;\r\n }\r\n\r\n if (xhr.status === 200 && typeof options.success === \"function\") {\r\n options.success(response);\r\n } else if (typeof options.failed === \"function\") {\r\n options.failed(response);\r\n }\r\n if (typeof options.always === \"function\") {\r\n options.always(response);\r\n }\r\n };\r\n }\r\n\r\n if (options.type.toUpperCase() !== \"GET\" && options.data && typeof options.data === \"object\") {\r\n xhr.setRequestHeader(\"Content-type\", \"application/json\");\r\n }\r\n\r\n xhr.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\r\n xhr.setRequestHeader(\"Accept\", getAcceptTypes());\r\n\r\n xhr.send(options.data && typeof options.data === \"object\"\r\n ? JSON.stringify(options.data)\r\n : options.data\r\n ? options.data\r\n : void (0));\r\n\r\n return xhr;\r\n };\r\n\r\n HTMLFieldSetElement.prototype.serialize = function() {\r\n var notSerializableTypes = [\"file\", \"reset\", \"submit\", \"button\"];\r\n var field, l, s = [];\r\n\r\n if (typeof this === \"object\" && this.nodeName === \"FIELDSET\") {\r\n var len = this.elements.length;\r\n\r\n for (var i = 0; i < len; i += 1) {\r\n field = this.elements[i];\r\n\r\n if (!field.name || field.disabled || notSerializableTypes.includes(field.type)) {\r\n continue;\r\n }\r\n if (field.type === \"select-multiple\") {\r\n l = this.elements[i].options.length;\r\n\r\n for (var j = 0; j < l; j += 1) {\r\n if (field.options[j].selected) {\r\n s[s.length] =\r\n encodeURIComponent(field.name) + \"=\" + encodeURIComponent(field.options[j].value);\r\n }\r\n }\r\n } else if ((field.type !== \"checkbox\" && field.type !== \"radio\") || field.checked) {\r\n s[s.length] = encodeURIComponent(field.name) +\r\n \"=\" +\r\n encodeURIComponent(field.value || field.checked);\r\n }\r\n }\r\n }\r\n return s.join(\"&\").replace(/%20/g, \"+\");\r\n };\r\n\r\n var getAbsolutePathRequest = function(url) {\r\n var siteUrl = siteRoot.slice(0, -1);\r\n if (siteUrl && url.indexOf(siteUrl) >= 0 && url.indexOf(partnerUrl) < 0) {\r\n url = url.replace(siteUrl, partnerUrl);\r\n } else if (url.indexOf(partnerUrl) < 0) {\r\n url = partnerUrl + url;\r\n }\r\n return url;\r\n };\r\n\r\n /**\r\n * Will return the Javascript Object as query string (e.g ?property1=value1&property2=value2)\r\n * @param {any} objectToConvert a Javascript Object that will follow the format of query string for each property.\r\n */\r\n var objectToQueryString = function (objectToConvert, baseQueryString) {\r\n var keyValuePair = Object.entries(objectToConvert);\r\n if (keyValuePair && keyValuePair.length > 0) {\r\n for (var i = 0; i < keyValuePair.length; i++) {\r\n if (typeof keyValuePair[i][1] !== \"undefined\") {\r\n baseQueryString += encodeURIComponent(keyValuePair[i][0]) + \"=\" + encodeURIComponent(keyValuePair[i][1]) + \"&\";\r\n }\r\n }\r\n }\r\n baseQueryString = baseQueryString.substring(0, baseQueryString.length - 1);\r\n return baseQueryString;\r\n }\r\n\r\n /**\r\n * Will return a string based on the object passed. It begins with ? as query string.\r\n * @param {any} objectToConvert a Javascript Object that will follow the format of query string for each property.\r\n */\r\n var convertToQueryString = function(objectToConvert)\r\n {\r\n var queryString = \"?\";\r\n if (objectToConvert) {\r\n if (!Object.entries) {\r\n //Including the polyfills from NHS.\r\n require([\"domHelper\"], function(domHelper) {\r\n return objectToQueryString(objectToConvert, queryString);\r\n });\r\n } else {\r\n return objectToQueryString(objectToConvert, queryString);\r\n }\r\n }\r\n return objectToConvert;\r\n }\r\n\r\n /**\r\n * @private\r\n * getAcceptTypes: get the accept types header for Ajax request.\r\n * \r\n * @returns {@String} with the mime types supported.\r\n */\r\n function getAcceptTypes() {\r\n if(browserAcceptTypes) {\r\n return browserAcceptTypes;\r\n }\r\n\r\n browserAcceptTypes = localStorage.getItem('browserAcceptTypes');\r\n\r\n return browserAcceptTypes || '*/*';\r\n }\r\n\r\n return {\r\n getRequest: getRequest,\r\n postRequest: postRequest,\r\n request: request,\r\n getAbsolutePathRequest: getAbsolutePathRequest,\r\n convertToQueryString: convertToQueryString\r\n };\r\n });\n","define('reviewsParameters',[], () => {\r\n 'use strict';\r\n\r\n const reviewsParameters = {\r\n BrandId: 0,\r\n PageSize: 1,\r\n StateName: '',\r\n StateAbbreviation: '',\r\n MarketName: '',\r\n IsMarketSearch: false,\r\n ReviewSortBy: 2, // HighestToLowest\r\n PageNumber: 1,\r\n MarketId: null,\r\n ReviewStar: null,\r\n BuilderToSearch: '',\r\n SearchType: '',\r\n isReviewsPage: false\r\n };\r\n\r\n /**\r\n * Builds the default Ratings Search Params.\r\n * @returns Ratings Search Params Object.\r\n */\r\n function getReviewsDefaultParameters() {\r\n return reviewsParameters;\r\n }\r\n\r\n return {\r\n getReviewsDefaultParameters\r\n };\r\n});\r\n\n","define(\r\n 'reviewsHandler',[\r\n 'builderShowcaseObserver',\r\n 'ajaxHelper',\r\n 'routes',\r\n 'fastdom',\r\n 'reviewsParameters',\r\n 'lazyLoad',\r\n ],\r\n (builderShowcaseObserver, ajaxHelper, routes, fastdom, reviewsParameters, lazyLoad) => {\r\n 'use strict';\r\n\r\n const sortByList = document.querySelector('[data-component=\"sort-by-list\"]');\r\n const reviewsSection = document.querySelector('[data-reviewsSection-container]');\r\n let lastMarketIdShowed = 0;\r\n\r\n /**\r\n * ReviewsHandler Constructor.\r\n */\r\n function ReviewsHandler() {\r\n }\r\n\r\n /**\r\n * calls lazy load init module\r\n * */\r\n function initLazyLoad() {\r\n if (lazyLoad) {\r\n lazyLoad.init();\r\n }\r\n }\r\n\r\n /**\r\n * @private\r\n * reviewsSkeleton: Display or removes the skeleton.\r\n * @param {object} showContent flag to display or hide.\r\n */\r\n function reviewsSkeleton(showContent) {\r\n const skeleton = document.getElementById('nhs_reviewsSkeleton');\r\n const reviewsCards = document.getElementById('nhs_reviewsCards');\r\n const filterArea = document.getElementById('FilterArea');\r\n\r\n if (skeleton) {\r\n if (showContent) {\r\n window.scrollTo({ top: filterArea ? filterArea.offsetTop : 200 });\r\n skeleton.style.display = 'block';\r\n reviewsCards.style.display = 'none';\r\n } else {\r\n skeleton.style.display = 'none';\r\n reviewsCards.style.display = 'block';\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * @private\r\n * updateContent: sets the upcoming reviews section in the DOM.\r\n * @param {object} html Reviews section.\r\n */\r\n function updateContent(html, callback) {\r\n if (!reviewsSection) {\r\n return;\r\n }\r\n\r\n fastdom.mutate(() => {\r\n reviewsSection.innerHTML = html;\r\n if (typeof callback === 'function') {\r\n callback();\r\n }\r\n });\r\n\r\n fastdom.mutate(() => {\r\n initLazyLoad();\r\n });\r\n }\r\n\r\n /**\r\n * @private\r\n * getReviews: retrieves from api the reviews content.\r\n * @param {object} searchParams ratings&reviews api search params.\r\n */\r\n function getReviews(searchParams, callback) {\r\n const url = routes.getRatingsAndReviewsSection;\r\n\r\n ajaxHelper.postRequest(\r\n url,\r\n {\r\n data: searchParams,\r\n async: true,\r\n abort: true,\r\n requestHeaders: [\r\n {\r\n name: 'Content-Type',\r\n value: 'application/json'\r\n }\r\n ],\r\n success: (response) => {\r\n updateContent(response, callback);\r\n reviewsSkeleton(false);\r\n }\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * @private\r\n * getReviews: retrieves from api the reviews content.\r\n * @param {object} searchParams ratings&reviews api search params.\r\n * @param {object} data new parameters.\r\n */\r\n function SetCommonParameters(searchParams, data) {\r\n const localSearchParams = searchParams;\r\n localSearchParams.BrandId = data.data.BrandId;\r\n localSearchParams.BuilderToSearch = data.data.brandName;\r\n localSearchParams.ReviewStar = data.data.ReviewSearchParams.ReviewStar;\r\n localSearchParams.ReviewSortBy = data.data.ReviewSearchParams.ReviewSortBy;\r\n localSearchParams.isReviewsPage = true;\r\n localSearchParams.PageSize = data.data.ReviewSearchParams.PageSize;\r\n localSearchParams.PageNumber = data.data.ReviewSearchParams.PageNumber;\r\n if (data.data.ReviewSearchParams.IsMarketSearch) {\r\n localSearchParams.MarketName = data.data.ReviewSearchParams.MarketName;\r\n localSearchParams.StateName = data.data.ReviewSearchParams.StateName;\r\n localSearchParams.MarketId = data.data.ReviewSearchParams.MarketId;\r\n localSearchParams.IsMarketSearch = data.data.ReviewSearchParams.IsMarketSearch;\r\n localSearchParams.StateAbbreviation = data.data.ReviewSearchParams.StateAbbreviation;\r\n }\r\n return localSearchParams;\r\n }\r\n\r\n /**\r\n * @private\r\n * onMarketChanged: Gets reviews based on the market update and update the reviews section.\r\n * @param {object} data buildershowcase state.\r\n */\r\n function onMarketChanged(data) {\r\n const proposedMarket = data.proposedMarket || {};\r\n\r\n if (proposedMarket.Id === lastMarketIdShowed) {\r\n return;\r\n }\r\n\r\n lastMarketIdShowed = proposedMarket.Id;\r\n\r\n const brandId = data.data.BrandId;\r\n const brandName = data.data.BrandName || '';\r\n const marketName = proposedMarket.Name || '';\r\n const marketId = +proposedMarket.Id || 0;\r\n const stateName = proposedMarket.StateName || '';\r\n const stateAbbreviation = proposedMarket.StateAbbr || '';\r\n const isMarketSearch = marketId && marketId > 0;\r\n const searchParams = reviewsParameters.getReviewsDefaultParameters();\r\n searchParams.BrandId = brandId;\r\n searchParams.StateName = stateName;\r\n searchParams.StateAbbreviation = stateAbbreviation;\r\n searchParams.MarketName = marketName;\r\n searchParams.MarketId = marketId;\r\n searchParams.IsMarketSearch = isMarketSearch;\r\n searchParams.BuilderToSearch = brandName;\r\n searchParams.PageSize = 2;\r\n\r\n /** TODO: show skeleton */\r\n getReviews(searchParams);\r\n /** TODO: hide skeleton */\r\n }\r\n\r\n /**\r\n * @private\r\n * onSortByChanged: Gets reviews based on the sort by.\r\n * @param {object} data buildershowcase state.\r\n */\r\n function onSortByChanged(data) {\r\n let sortBy = data.searchParameters.ReviewSortBy;\r\n\r\n if (!sortBy) {\r\n sortBy = sortByList[sortByList.selectedIndex];\r\n }\r\n\r\n let searchParams = reviewsParameters.getReviewsDefaultParameters();\r\n searchParams = SetCommonParameters(searchParams, data);\r\n searchParams.ReviewSortBy = sortBy;\r\n searchParams.PageNumber = 1;\r\n searchParams.isReviewsPage = true;\r\n reviewsSkeleton(true);\r\n getReviews(searchParams, () => {\r\n builderShowcaseObserver.onReviewsSectionLoaded(data);\r\n });\r\n }\r\n\r\n /**\r\n * @private\r\n * onSortByChanged: Gets reviews based on the star filter.\r\n * @param {object} data buildershowcase state.\r\n */\r\n function onStarFilterChanged(data) {\r\n let searchParams = reviewsParameters.getReviewsDefaultParameters();\r\n searchParams = SetCommonParameters(searchParams, data);\r\n searchParams.isReviewsPage = true;\r\n searchParams.PageNumber = 1;\r\n reviewsSkeleton(true);\r\n getReviews(searchParams, () => {\r\n builderShowcaseObserver.onReviewsSectionLoaded(data);\r\n });\r\n }\r\n\r\n /**\r\n * @private\r\n * onSortByChanged: Gets reviews based on the star filter.\r\n * @param {object} data buildershowcase state.\r\n */\r\n function PaginationChanged(data) {\r\n let searchParams = reviewsParameters.getReviewsDefaultParameters();\r\n searchParams = SetCommonParameters(searchParams, data);\r\n searchParams.isReviewsPage = true;\r\n reviewsSkeleton(true);\r\n getReviews(searchParams, () => {\r\n builderShowcaseObserver.onReviewsSectionLoaded(data);\r\n });\r\n }\r\n\r\n /**\r\n * @private\r\n * onSortByChanged: Gets reviews based on pageSize.\r\n * @param {object} data buildershowcase state.\r\n */\r\n function PageSizeChanged(data) {\r\n let searchParams = reviewsParameters.getReviewsDefaultParameters();\r\n searchParams = SetCommonParameters(searchParams, data);\r\n searchParams.isReviewsPage = true;\r\n searchParams.PageNumber = 1;\r\n reviewsSkeleton(true);\r\n getReviews(searchParams, () => {\r\n builderShowcaseObserver.onReviewsSectionLoaded(data);\r\n });\r\n }\r\n\r\n /**\r\n * @public\r\n * update: function for receiving notifications about state changes.\r\n * @param {object} data buildershowcase state.\r\n */\r\n ReviewsHandler.update = function updateReviewsSection(data) {\r\n switch (data.filterType) {\r\n case 'sortBy':\r\n onSortByChanged(data);\r\n break;\r\n case 'starFilter':\r\n onStarFilterChanged(data);\r\n break;\r\n case 'pagination':\r\n PaginationChanged(data);\r\n break;\r\n case 'pageSize':\r\n PageSizeChanged(data);\r\n break;\r\n default:\r\n onMarketChanged(data);\r\n }\r\n };\r\n\r\n builderShowcaseObserver.subscribe('onBeforeMapResultsLoaded', ReviewsHandler);\r\n builderShowcaseObserver.subscribe('OnSortByChanged', ReviewsHandler);\r\n builderShowcaseObserver.subscribe('OnPageSizeChanged', ReviewsHandler);\r\n builderShowcaseObserver.subscribe('OnStarFilterChanged', ReviewsHandler);\r\n builderShowcaseObserver.subscribe('PaginationChanged', ReviewsHandler);\r\n\r\n initLazyLoad();\r\n }\r\n);\r\n\n","(function (global, factory) {\r\n 'use strict';\r\n\r\n if (typeof define === 'function' && define.amd) {\r\n // If AMD is supported and the global object (window) in case any JS module is expecting\r\n // the SectionLazyLoad to exists on the window object.\r\n define('sectionLazyLoad',[], () => {\r\n global.SectionLazyLoad = factory(global);\r\n });\r\n } else if (typeof exports === 'object') {\r\n // If supports for Common JS is available export the module\r\n // and pass is value to the global (window) object in case non Common JS code\r\n // is expected to work with this SectionLazyLoad Module.\r\n global.SectionLazyLoad = factory(global);\r\n module.exports = global.SectionLazyLoad;\r\n } else {\r\n // If not support for AMD or Common JS is available register the module in the global scope.\r\n global.SectionLazyLoad = factory(global);\r\n }\r\n}(typeof window !== 'undefined' ? window : {}, (root) => {\r\n 'use strict';\r\n\r\n // Lazy Loading\r\n function lazyLoadSection(entry) {\r\n if (entry.getAttribute('data-url')) {\r\n const url = root.location.protocol + '//' + root.location.hostname + entry.getAttribute('data-url');\r\n\r\n fetch(url).then((response) => {\r\n response.text().then((data) => {\r\n // Now the dispatched event contains the raw data that the url returns\r\n const event = new CustomEvent('sectionLazyLoaded', {\r\n detail: {\r\n data,\r\n }\r\n });\r\n\r\n // Add the data-prevent-lazy-load-section-default-behavior=\"true\" attribute to prevent the script.\r\n // from appending the data to the DOM this should only be used if you don't need the response.\r\n // added to the target element.\r\n if (!entry.dataset.preventLazyLoadSectionDefaultBehavior) {\r\n const responseFragment = document.createRange().createContextualFragment(data);\r\n entry.appendChild(responseFragment);\r\n }\r\n\r\n entry.dispatchEvent(event);\r\n });\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Callback function used with the intersection observer.\r\n * @param {*} entries\r\n * @param {*} observer\r\n */\r\n function callback(entries, observer) {\r\n entries.forEach((entry) => {\r\n if (entry.isIntersecting && entry.intersectionRatio > 0) {\r\n lazyLoadSection(entry.target);\r\n observer.unobserve(entry.target);\r\n }\r\n });\r\n }\r\n\r\n const options = {\r\n root: null,\r\n rootMargin: '100px 0px'\r\n };\r\n\r\n const rootMarginObserver = new IntersectionObserver(callback, options);\r\n\r\n /**\r\n * Function used to get all the lazyloaded sections on initial load\r\n */\r\n function initLazyLoad() {\r\n const lazyLoadSections = document.querySelectorAll(\"[data-component='lazyLoad']\");\r\n\r\n // lazy load the sections\r\n for (let i = 0; i < lazyLoadSections.length; i += 1) {\r\n rootMarginObserver.observe(lazyLoadSections[i]);\r\n }\r\n }\r\n\r\n /**\r\n * Used to observe a dynamically created element that doesn't exist\r\n * on initial load (or re-observe an already unobserved element)\r\n * @param {Element} target the element that will be observed\r\n */\r\n function observe(target) {\r\n rootMarginObserver.observe(target);\r\n }\r\n\r\n initLazyLoad();\r\n\r\n return {\r\n observe\r\n };\r\n}));\r\n\n","define('builderShowcaseGalleryDownloader',[], () => {\r\n 'use strict';\r\n\r\n const element = document.querySelector('[data-section-gallery]');\r\n\r\n /**\r\n * @private\r\n * Used to download the code required to handle the bsp gallery.\r\n */\r\n function init() {\r\n require(['builderShowcaseGalleryHandler']);\r\n }\r\n\r\n if (element !== null) {\r\n element.addEventListener('sectionLazyLoaded', init);\r\n }\r\n});\r\n\n","/* eslint-disable no-unused-vars */\r\ndefine(\r\n 'nearbySectionHandler',[\r\n 'builderShowcaseObserver',\r\n 'ajaxHelper',\r\n 'routes',\r\n 'fastdom',\r\n 'lazyLoad'\r\n ],\r\n (builderShowcaseObserver, ajaxHelper, routes, fastdom, lazyLoad) => {\r\n 'use strict';\r\n\r\n const nearbySection = document.querySelector('[data-nearbySection-container]');\r\n let lastMarketIdShowed = 0;\r\n\r\n /**\r\n * nearby section Constructor.\r\n */\r\n function nearbySectionHandler() {\r\n }\r\n\r\n /**\r\n * calls lazy load init module\r\n * */\r\n function initLazyLoad() {\r\n if (lazyLoad) {\r\n lazyLoad.init();\r\n }\r\n }\r\n\r\n /**\r\n * @private\r\n * attaches arrows events to the comms cards when updated via ajax.\r\n */\r\n function attachArrowEvent() {\r\n const communityCards = document.querySelectorAll('[data-nearby-community]');\r\n\r\n communityCards.forEach((community) => {\r\n // eslint-disable-next-line no-new\r\n new window.NewHomeSource.Modules.ArrowHandler({\r\n container: community\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * @private\r\n * updateContent: sets the upcoming nearby section in the DOM.\r\n * @param {object} html nearby section.\r\n */\r\n function updateContent(html) {\r\n if (!nearbySection) {\r\n return;\r\n }\r\n\r\n if (!html) {\r\n // eslint-disable-next-line no-param-reassign\r\n html = '';\r\n }\r\n\r\n fastdom.mutate(() => {\r\n nearbySection.innerHTML = html;\r\n attachArrowEvent();\r\n });\r\n\r\n fastdom.mutate(() => {\r\n initLazyLoad();\r\n });\r\n }\r\n\r\n /**\r\n * @private\r\n * getNearbySection: retrieves from server the nearby section based on a given market.\r\n * @param {int} brandId brand id.\r\n * @param {int} marketId market id, 0 if is national search.\r\n */\r\n function getNearbySection(brandId, marketId) {\r\n const baseUrl = routes.getBuilderShowCaseNearbySection;\r\n const url = `${baseUrl}?brandId=${brandId}&marketId=${marketId}`;\r\n\r\n ajaxHelper.getRequest(\r\n url,\r\n 'application/json',\r\n null,\r\n {\r\n async: true,\r\n abort: true,\r\n success: (response) => {\r\n updateContent(response);\r\n }\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * @private\r\n * getProposedMarketId: Gets the Id of the proposed market if any.\r\n *\r\n * @returns an integer indicating the market Id out of the proposedMarket\r\n * argument sent when executing this function.\r\n */\r\n function getProposedMarketId(proposedMarket) {\r\n if (!proposedMarket) {\r\n return 0;\r\n }\r\n\r\n return +proposedMarket.Id || 0;\r\n }\r\n\r\n /**\r\n * @private\r\n * onMarketChanged: Gets nearby comms based on the market update and update the nearby section.\r\n */\r\n function onMarketChanged() {\r\n const state = builderShowcaseObserver.getState();\r\n const proposedMarket = state.data.proposedMarket || {};\r\n\r\n const brandId = state.data.BrandId;\r\n const marketId = getProposedMarketId(proposedMarket);\r\n\r\n if (marketId === lastMarketIdShowed) {\r\n return;\r\n }\r\n\r\n lastMarketIdShowed = marketId;\r\n getNearbySection(brandId, marketId);\r\n }\r\n\r\n /**\r\n * @public\r\n * update: function to display the phone for those cards withput call tracking.\r\n */\r\n function displayPhone(target) {\r\n const callButton = target;\r\n const phone = target.previousElementSibling;\r\n\r\n if (phone && 'communityPhone' in phone.dataset) {\r\n fastdom.mutate(() => {\r\n callButton.style.display = 'none';\r\n phone.style.display = 'block';\r\n phone.focus();\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * @public\r\n * update: function for handle different events from the section.\r\n * used as an event delegation\r\n */\r\n function handleSectionEvents(event) {\r\n const target = event.target;\r\n\r\n if ('displayPhone' in target.dataset) {\r\n displayPhone(target);\r\n }\r\n\r\n // add more events if needed.\r\n }\r\n\r\n /**\r\n * @public\r\n * update: function for receiving notifications about state changes.\r\n */\r\n nearbySectionHandler.update = function updateNearbySection() {\r\n onMarketChanged();\r\n };\r\n\r\n /**\r\n * Used to display more manufactured results\r\n */\r\n function showMoreManufacturedResults(event) {\r\n const target = event.target;\r\n\r\n const communityCards = document.querySelectorAll('[data-nearby-community]');\r\n\r\n communityCards.forEach((community) => {\r\n community.classList.remove('hidden');\r\n });\r\n\r\n target.dataset.open = true;\r\n target.textContent = target.dataset.showLessText;\r\n target.dataset.gaEventLabel = target.dataset.showMoreText;\r\n }\r\n\r\n /**\r\n * Used to display less manufactured results\r\n */\r\n function showLessManufacturedResults(event) {\r\n const target = event.target;\r\n target.removeAttribute('data-open');\r\n target.textContent = target.dataset.showMoreText;\r\n target.dataset.gaEventLabel = target.dataset.showLessText;\r\n let index = 0;\r\n\r\n const communityCards = document.querySelectorAll('[data-nearby-community]');\r\n\r\n communityCards.forEach((community) => {\r\n if (index >= 3) {\r\n community.classList.add('hidden');\r\n }\r\n index += 1;\r\n });\r\n }\r\n\r\n /**\r\n * @public\r\n * attachManufacturedShowMoreHandler: function to attach the event handler to the show more button.\r\n */\r\n function attachManufacturedShowMoreHandler() {\r\n const button = document.querySelector('[data-show-more-manufactured]');\r\n\r\n if (button) {\r\n button.addEventListener('click', (event) => {\r\n if (!button.dataset.open) {\r\n showMoreManufacturedResults(event);\r\n } else {\r\n showLessManufacturedResults(event);\r\n }\r\n });\r\n }\r\n }\r\n\r\n if (nearbySection) {\r\n nearbySection.addEventListener('click', handleSectionEvents);\r\n }\r\n\r\n builderShowcaseObserver.subscribe('onBeforeMapResultsLoaded', nearbySectionHandler);\r\n attachManufacturedShowMoreHandler();\r\n }\r\n);\r\n\n","/**\r\n * Module to move by the scroll using arrows.\r\n *\r\n * Need to add the following attributes:\r\n * data-scroll: to the element scrolled\r\n * data-arrow-right: to the arrow right button\r\n * data-arrow-left: to the arrow left button\r\n * data-move-arrow: to the arrows with the number of pixels to be move.\r\n * data-element-scrolled: all elements that are inside the container\r\n * need to have the property to get the first and last element in the collection.\r\n */\r\n(function arrowHandler(global) {\r\n 'use strict';\r\n\r\n global.NewHomeSource = global.NewHomeSource || {};\r\n global.NewHomeSource.Modules = global.NewHomeSource.Modules || {};\r\n const isTouchScreen = Object.prototype.hasOwnProperty.call(global, 'ontouchstart');\r\n const eventTrigger = isTouchScreen ? 'touchend' : 'click';\r\n\r\n class ArrowHandler {\r\n constructor(parameters) {\r\n if (!parameters.container) {\r\n return;\r\n }\r\n this.container = null;\r\n this.arrowRight = null;\r\n this.arrowLeft = null;\r\n this.firstCollection = null;\r\n this.lastCollection = null;\r\n this.scrollElement = null;\r\n this.move = 0;\r\n this.limitRight = 0;\r\n this.limitLeft = 0;\r\n this.arrowsReference =\r\n parameters.arrowReferenceSelector ? parameters.arrowReferenceSelector : '';\r\n this.collectionsReference =\r\n parameters.collectionsReferenceSelector ? parameters.collectionsReferenceSelector : '';\r\n this.container = parameters.container;\r\n this.arrowRight = this.container.querySelector(`${this.arrowsReference}[data-arrow-right]`);\r\n this.arrowLeft = this.container.querySelector(`${this.arrowsReference}[data-arrow-left]`);\r\n this.scrollElement = this.container.querySelector('[data-scroll]') || this.container;\r\n this.firstCollection =\r\n this.container.querySelector(`${this.collectionsReference}[data-element-scrolled]`);\r\n this.lastCollection =\r\n this.container.querySelector(`${this.collectionsReference}[data-element-scrolled]:last-child`);\r\n if (!this.arrowRight || !this.arrowLeft || !this.scrollElement) {\r\n return;\r\n }\r\n\r\n this.bindedCalculateMoveCallback = this.bindedCalculateMove.bind(this);\r\n this.bindedOnChangeCallback = this.onChange.bind(this);\r\n\r\n this.container.addEventListener(eventTrigger, this.bindedCalculateMoveCallback);\r\n this.container.addEventListener('recalculateLimits', this.bindedOnChangeCallback);\r\n global.addEventListener('orientationchange', this.bindedOnChangeCallback);\r\n this.getLimits();\r\n this.observeVisibility();\r\n }\r\n\r\n bindedCalculateMove(event) {\r\n requestAnimationFrame(this.calculateMove.bind(this, event));\r\n }\r\n\r\n /** Used to show the arrows after a container is set as visible after being hidden */\r\n observeVisibility() {\r\n const observer = new IntersectionObserver((entries) => {\r\n entries.forEach((entry) => {\r\n if (entry.isIntersecting) {\r\n this.showArrows();\r\n }\r\n });\r\n });\r\n\r\n observer.observe(this.container);\r\n }\r\n\r\n changeLimits() {\r\n this.limitLeft = Math.floor(this.container.getBoundingClientRect().left);\r\n this.limitRight = Math.floor(this.container.getBoundingClientRect().right);\r\n this.showArrows();\r\n }\r\n\r\n getLimits() {\r\n requestAnimationFrame(this.changeLimits.bind(this));\r\n }\r\n\r\n onChange() {\r\n requestAnimationFrame(this.getLimits.bind(this));\r\n }\r\n\r\n showArrows() {\r\n requestAnimationFrame(() => {\r\n if (Math.floor(this.firstCollection.getBoundingClientRect().left) < this.limitLeft) {\r\n this.arrowLeft.style.display = 'block';\r\n this.container.classList.add('tab-shadow--left');\r\n } else {\r\n this.arrowLeft.style.display = 'none';\r\n this.container.classList.remove('tab-shadow--left');\r\n }\r\n\r\n if (Math.floor(this.lastCollection.getBoundingClientRect().right) > this.limitRight) {\r\n this.arrowRight.style.display = 'block';\r\n this.container.classList.add('tab-shadow--right');\r\n } else {\r\n this.arrowRight.style.display = 'none';\r\n this.container.classList.remove('tab-shadow--right');\r\n }\r\n });\r\n }\r\n\r\n calculateMove(event) {\r\n this.limitLeft = Math.floor(this.container.getBoundingClientRect().left);\r\n this.limitRight = Math.floor(this.container.getBoundingClientRect().right);\r\n const element = event && event.target.closest(`${this.arrowsReference}[data-move-arrow]`);\r\n if (element) {\r\n this.move = +element.dataset.moveArrow;\r\n this.scrollElement.scrollBy(this.move, 0);\r\n const self = this;\r\n requestAnimationFrame(() => {\r\n self.showArrows(self);\r\n const scrolledCarousels = this.container.querySelectorAll('[data-scroll]');\r\n\r\n scrolledCarousels.forEach((scrolledCarousel) => {\r\n if (scrolledCarousel && scrolledCarousel.parentElement) {\r\n scrolledCarousel.parentElement.dispatchEvent(new Event('recalculateLimits'));\r\n }\r\n });\r\n });\r\n } else {\r\n requestAnimationFrame(() => {\r\n this.showArrows(this);\r\n });\r\n }\r\n }\r\n\r\n dispose() {\r\n this.container.removeEventListener(eventTrigger, this.bindedCalculateMoveCallback);\r\n this.container.removeEventListener('recalculateLimits', this.bindedOnChangeCallback);\r\n global.removeEventListener('orientationchange', this.bindedOnChangeCallback);\r\n }\r\n }\r\n\r\n global.NewHomeSource.Modules.ArrowHandler = ArrowHandler;\r\n}(window));\r\n\ndefine(\"arrowHandler\", function(){});\n\n","define('askQuestionLoader',[\r\n], () => {\r\n 'use strict';\r\n\r\n /**\r\n * Loads the ask question module.\r\n * @param {*} event Event object.\r\n */\r\n function loadAskQuestionHandlerModule(event) {\r\n const moduleName = document.querySelector('[data-ismobiledevice=\"true\"]')\r\n ? 'askQuestionMobileWrapper'\r\n : 'askQuestionDesktopWrapper';\r\n\r\n // since we're using event delegation for this event, only execute it if the target has a\r\n // data-askQuestionBtn attribute\r\n if (!event.target.closest('[data-askQuestionBtn]')) {\r\n return;\r\n }\r\n\r\n // remove the event listener so it doesn't fire again the load of the module\r\n // since the module adds another event listener and re-loading the module duplicates the event listener.\r\n document.removeEventListener('click', loadAskQuestionHandlerModule);\r\n\r\n require(\r\n [moduleName],\r\n (askQuestionHandler) => {\r\n askQuestionHandler.openModal(event);\r\n }\r\n );\r\n }\r\n\r\n document.addEventListener('click', loadAskQuestionHandlerModule);\r\n});\r\n\n","/*\r\n * Inits builder showcase utils for sections.\r\n */\r\ndefine('builderShowcaseSectionsUtils',[\r\n 'lazyLoad',\r\n 'marqueeGalleryHandler',\r\n 'marqueeFilmstripHandler',\r\n 'marqueeArrowsHandler',\r\n 'builderShowcaseObserver',\r\n 'builderShowcaseVideoHandler',\r\n 'marqueeFirstElementInitializer',\r\n 'builderShowcaseIframeHandler',\r\n 'marqueeTabsHandler',\r\n 'marqueeArrowsHandler',\r\n 'reviewsHandler',\r\n 'sectionLazyLoad',\r\n 'builderShowcaseGalleryDownloader',\r\n 'nearbySectionHandler',\r\n 'arrowHandler',\r\n 'askQuestionLoader',\r\n], (\r\n lazyLoad,\r\n MarqueeGalleryHandler,\r\n MarqueeFilmstripHandler,\r\n MarqueeArrowsHandler,\r\n builderShowcaseObserver,\r\n VideoHandler,\r\n marqueeFirstElementInitializer,\r\n IframeHandler,\r\n) => {\r\n 'use strict';\r\n\r\n const nearbyContainer = document.querySelector('[data-nearbySection-container]');\r\n\r\n lazyLoad.init();\r\n\r\n function SectionUtils() {\r\n\r\n }\r\n\r\n /**\r\n * @private\r\n * getCollection: gets the collection of the selected image.\r\n */\r\n function getCollection(state, subCollection) {\r\n const data = state.data.galleryCollections;\r\n const parameter = `${subCollection.toLowerCase()}Collection`;\r\n return data[parameter];\r\n }\r\n\r\n /**\r\n * @private\r\n * configObject: gets the config object to use in the filmstrip and main viewer.\r\n */\r\n const configObject = {\r\n filmstripItems: document.querySelectorAll('[data-filmstrip-figure]'),\r\n mainViewer: document.querySelector('[data-component=\"marquee-main-view\"]'),\r\n firstActiveImage: document.querySelector('[data-component=\"marquee-filmstrip\"] [data-filmstrip-image]'),\r\n getGalleryCollection: getCollection,\r\n eventOnImageSelected: builderShowcaseObserver.imageSelected,\r\n activeThumbSelector: '[data-filmstrip-image]',\r\n componentName: 'marqueeGallery',\r\n navigationButtons: document.querySelectorAll('[data-filmstrip-button]'),\r\n eventOnThumbSelected: builderShowcaseObserver.navigateToImage,\r\n };\r\n\r\n const videoHandler = new VideoHandler(configObject);\r\n const iframeHandler = new IframeHandler(configObject);\r\n const marqueeHandler = new MarqueeGalleryHandler(configObject);\r\n const marqueeFilmstrip = new MarqueeFilmstripHandler(configObject);\r\n (() => new MarqueeArrowsHandler(configObject))();\r\n\r\n SectionUtils.update = function update(data, topic) {\r\n if (topic === 'onImageSelected') {\r\n marqueeHandler.update(data);\r\n videoHandler.update(data);\r\n iframeHandler.update(data);\r\n }\r\n\r\n if (topic === 'onNavigateToImage') {\r\n marqueeFilmstrip.update(data);\r\n }\r\n\r\n if (topic === 'onGalleryClosed') {\r\n marqueeFilmstrip.update(data, 'onGalleryClosed');\r\n }\r\n };\r\n\r\n /**\r\n * @private\r\n * loads the drivingDirectionsHandler.js module if the users clicks on the getdriving directions button.\r\n */\r\n function loadDrivingDirectionsModule(event) {\r\n if ('communityDrivingDirections' in event.target.dataset) {\r\n nearbyContainer.removeEventListener('click', loadDrivingDirectionsModule);\r\n require(\r\n ['drivingDirectionsHandler'],\r\n (drivingDirectionsHandler) => {\r\n drivingDirectionsHandler.init();\r\n drivingDirectionsHandler.openDirectionsOnMap(event.target);\r\n }\r\n );\r\n event.preventDefault();\r\n }\r\n }\r\n\r\n function attachArrowEvent() {\r\n const communityCards = document.querySelectorAll('[data-nearby-community]');\r\n\r\n communityCards.forEach((community) => {\r\n (() => new window.NewHomeSource.Modules.ArrowHandler({\r\n container: community\r\n }))();\r\n });\r\n }\r\n\r\n if (nearbyContainer) {\r\n nearbyContainer.addEventListener('click', loadDrivingDirectionsModule);\r\n }\r\n\r\n builderShowcaseObserver.subscribe('onImageSelected', SectionUtils);\r\n builderShowcaseObserver.subscribe('onNavigateToImage', SectionUtils);\r\n builderShowcaseObserver.subscribe('onGalleryClosed', SectionUtils);\r\n\r\n marqueeFirstElementInitializer.initializeFirstElement(configObject);\r\n attachArrowEvent();\r\n});\r\n\n","define('builderShowcaseSectionsUtilsDesktop',[\r\n 'builderShowcaseSectionsUtils',\r\n], () => {\r\n 'use strict';\r\n\r\n const basicLearnMoreButton = document.querySelector('[data-basic-learn-more]');\r\n function initBasicLearnMoreComponent(event) {\r\n event.preventDefault();\r\n basicLearnMoreButton.removeEventListener('click', initBasicLearnMoreComponent);\r\n require(['basicFormHandler']);\r\n }\r\n\r\n if (basicLearnMoreButton) {\r\n basicLearnMoreButton.addEventListener('click', initBasicLearnMoreComponent);\r\n }\r\n});\r\n\n","\nrequire([\"\"]);\n"]}