"},"displayProperties":{},"localEdits":{"items":{}},"variants":{}}}]},{"collection":"sections","props":{"collection":"sections","id":3},"children":[]},{"collection":"sections","props":{"collection":"sections","id":4},"children":[]},{"collection":"sections","props":{"collection":"sections","id":5},"children":[{"collection":"features","type":"Common/OnAir","props":{"collection":"features","type":"Common/OnAir","id":"0fpih9jPu7wCsi","contentConfig":{"contentService":"","contentConfigValues":{},"inherit":true},"customFields":{},"displayProperties":{},"localEdits":{},"variants":{}}},{"collection":"features","type":"Common/CallUsTrafficWeatherCombined","props":{"collection":"features","type":"Common/CallUsTrafficWeatherCombined","id":"0fyssakPu7wCJ3","contentConfig":{"contentService":"","contentConfigValues":{},"inherit":true},"customFields":{},"displayProperties":{},"localEdits":{},"variants":{}}},{"collection":"features","type":"Common/ArcAd","props":{"collection":"features","type":"Common/ArcAd","id":"0fTyb8lPu7wCeP","contentConfig":{"contentService":"","contentConfigValues":{},"inherit":true},"customFields":{"adType":"300x250|300x600rp01","spacingBottomTablet":"none","debug":false,"spacingBottomMobile":"none","lazyLoad":false,"spacingBottomDesktop":"none","display":"all"},"displayProperties":{},"localEdits":{"items":{}},"variants":{}}}]},{"collection":"sections","props":{"collection":"sections","id":6},"children":[{"collection":"chains","type":"@wpmedia/single-chain-block/single-chain","props":{"collection":"chains","type":"@wpmedia/single-chain-block/single-chain","id":"0fBWxqoPu7wC35","customFields":{},"displayProperties":{}},"children":[{"collection":"features","type":"@wpmedia/htmlbox-block/htmlbox","props":{"collection":"features","type":"@wpmedia/htmlbox-block/htmlbox","id":"f0fRGmAp04241MA-6-0-0","contentConfig":{"contentService":"","contentConfigValues":{},"inherit":true},"customFields":{"HTML":"
\n\t\t\t\n\t\t\t\t \n \t\t\t \n\t\t \t \n\t\t\t\t\t \n\t\t\t\t\t\n\t\t\t\t\t \n\t\t\t\t\t\n\t\t\t\t\t \n\t\t\t\t | \n\t\t\t \n \t\t\n\t\t\t\t \n\t\t\t\t\t \n\t\t\t\t \n\t\t\t | \n\t\t\t \n \t\t
"},"displayProperties":{},"localEdits":{},"variants":{}}},{"collection":"features","type":"Common/ArcAd","props":{"collection":"features","type":"Common/ArcAd","id":"0fOledBY8vAE01XX-6-0-1","contentConfig":{"contentService":"","contentConfigValues":{},"inherit":true},"customFields":{"adType":"300x250","spacingBottomTablet":"none","debug":false,"spacingBottomMobile":"none","lazyLoad":false,"spacingBottomDesktop":"none","display":"all"},"displayProperties":{},"localEdits":{"items":{}},"variants":{}}},{"collection":"features","type":"Common/Newsletter","props":{"collection":"features","type":"Common/Newsletter","id":"f0fadNjEQdkoKr-6-0-2","contentConfig":{"contentService":"","contentConfigValues":{},"inherit":true},"customFields":{"headerTitle":"Hot 105"},"displayProperties":{},"localEdits":{},"variants":{}}},{"collection":"features","type":"Common/Header","props":{"collection":"features","type":"Common/Header","id":"0fjbCBnlewyO0w-6-0-3","contentConfig":{"contentService":"","contentConfigValues":{},"inherit":true},"customFields":{"text":"HOT News","size":"Small"},"displayProperties":{},"localEdits":{},"variants":{}}},{"collection":"features","type":"@wpmedia/top-table-list-block/top-table-list","props":{"collection":"features","type":"@wpmedia/top-table-list-block/top-table-list","id":"f0fy3Iwa60gm2vH-6-0-4","contentConfig":{"contentService":"","contentConfigValues":{},"inherit":true},"customFields":{"showDateXL":true,"showHeadlineSM":true,"showDescriptionXL":true,"showDescriptionMD":false,"listContentConfig":{"contentService":"collection-feed","contentConfigValues":{"id":"JSSNLVN7KVGGFBYINSU2MD2QWQ","size":5}},"showImageXL":true,"showDateMD":false,"showHeadlineXL":true,"showBylineXL":true,"showBylineLG":true,"showDateLG":true,"small":0,"showHeadlineMD":true,"showBylineMD":false,"showImageSM":true,"showHeadlineLG":true,"showDescriptionLG":true,"showOverlineLG":true,"showOverlineXL":true,"showImageMD":true,"showImageLG":true,"pbInternal_cloneId":"f0fy3Iwa60gm2vH","medium":5,"imageRatioMD":"16:9","showBottomBorderMD":true},"displayProperties":{},"localEdits":{},"variants":{}}}]},{"collection":"features","type":"Common/ArcAd","props":{"collection":"features","type":"Common/ArcAd","id":"0fQXoqpPu7wCDe","contentConfig":{"contentService":"","contentConfigValues":{},"inherit":true},"customFields":{"adType":"300x250","spacingBottomTablet":"none","debug":false,"spacingBottomMobile":"none","lazyLoad":false,"spacingBottomDesktop":"none","display":"all"},"displayProperties":{},"localEdits":{"items":{}},"variants":{}}},{"collection":"features","type":"Common/ArcAd","props":{"collection":"features","type":"Common/ArcAd","id":"0f6tjpqPu7wCWs","contentConfig":{"contentService":"","contentConfigValues":{},"inherit":true},"customFields":{"adType":"300x250rp03","spacingBottomTablet":"none","debug":false,"spacingBottomMobile":"none","lazyLoad":false,"spacingBottomDesktop":"none","display":"all"},"displayProperties":{},"localEdits":{"items":{}},"variants":{}}}]},{"collection":"sections","props":{"collection":"sections","id":7},"children":[{"collection":"features","type":"@wpmedia/htmlbox-block/htmlbox","props":{"collection":"features","type":"@wpmedia/htmlbox-block/htmlbox","id":"0fHn6DrPu7wCCW","contentConfig":{"contentService":"","contentConfigValues":{},"inherit":true},"customFields":{"HTML":"\n\n\t\t
\n
\n
\n
newsletter
\n
Sign up below to be added to our mailing list for the latest news updates, access to exclusive contests, and more!
\n
\n
\n
\n \n \n Sign Up\n \n
\n
\n
\n
\n
mobile apps
\n
\n
Everything you love about hot105.com and more! Tap on any of the buttons below to download our app.
\n
\n
\n
\n \n \n \n \n \n
\n \n \n \n \n \n
\n
\n
\n
\n
amazon alexa
\n
Enable our Skill today to listen live at home on your Alexa Devices!
\n
\n
\n
\n \n \n \n \n \n
\n
\n\t\t
"},"displayProperties":{},"localEdits":{"items":{}},"variants":{}}},{"collection":"features","type":"Common/ArcAd","props":{"collection":"features","type":"Common/ArcAd","id":"0fz5yzsPu7wC7K","contentConfig":{"contentService":"","contentConfigValues":{},"inherit":true},"customFields":{"adType":"1x1px","spacingBottomTablet":"none","debug":false,"spacingBottomMobile":"none","lazyLoad":false,"spacingBottomDesktop":"none","display":"all"},"displayProperties":{},"localEdits":{"items":{}},"variants":{}}},{"collection":"features","type":"Common/ArcAd","props":{"collection":"features","type":"Common/ArcAd","id":"0fhKuwtPu7wCxt","contentConfig":{"contentService":"","contentConfigValues":{},"inherit":true},"customFields":{"adType":"970x90|970x250|728x90|320x50hp02","spacingBottomTablet":"none","debug":false,"spacingBottomMobile":"none","lazyLoad":false,"spacingBottomDesktop":"none","display":"all"},"displayProperties":{},"localEdits":{"items":{}},"variants":{}}}]},{"collection":"sections","props":{"collection":"sections","id":8},"children":[{"collection":"features","type":"@wpmedia/footer-block/footer","props":{"collection":"features","type":"@wpmedia/footer-block/footer","id":"0fiG2IuPu7wCos","contentConfig":{"contentService":"","contentConfigValues":{},"inherit":true},"customFields":{"navigationConfig":{"contentService":"site-service-hierarchy","contentConfigValues":{"hierarchy":"footer-nav-bar"}}},"displayProperties":{},"localEdits":{"items":{}},"variants":{}}},{"collection":"features","type":"@wpmedia/htmlbox-block/htmlbox","props":{"collection":"features","type":"@wpmedia/htmlbox-block/htmlbox","id":"0fm9xFvPu7wCdp","contentConfig":{"contentService":"","contentConfigValues":{},"inherit":true},"customFields":{"HTML":"
\n
\n
\n
© Cox Media Group. All Rights Reserved. By using this website, you accept the terms of our Visitor Agreement and Privacy Policy, and understand your options regarding Ad Choices. Learn about careers at Cox Media Group.
\n
\n
\n \n Portions of Content Provided by Rovi Corporation. © Rovi Corporation\n
\n
\n
","id":"rovi-footer"},"displayProperties":{},"localEdits":{},"variants":{}}}]}]};Fusion.spa=true;Fusion.spaEnabled=true;
Audio Temporarily Unavailable
You may be offline. Please check your connection and try again using the Retry button.
'; epArtistSong.innerHTML = artistAndSong; const epLearnMore = document.getElementById('ep-learnMore'); if (this.getCMGPPDetails('linkUrl')) { epLearnMore.setAttribute('href', this.getCMGPPDetails('linkUrl')); epLearnMore.classList.remove('hidden'); epLearnMore.onclick = function () { // send analytics data (onClick on react did not send, this does: do not move) self.args.dataLayerFn(self.args.analyticsEvent, { element: 'persistent', elementSubTitle: 'biography' }); }; } else { epLearnMore.setAttribute('href', this.getCMGPPDetails('linkUrl')); epLearnMore.classList.add('hidden'); } epTwitterShare.setAttribute('href', 'https://twitter.com/intent/tweet?text=' + encodeURIComponent(self.getShareText()) + '&url=' + self.args.stationURL + '/stream'); epBuyNow.setAttribute('href', this.getCMGPPDetails('buyLink')); if (this.getCMGPPDetails('buyLink')) epBuyNow.classList.remove('hidden');else epBuyNow.classList.add('hidden'); // Header Player const headerTitle = document.getElementById('headerSongTitle'); if (headerTitle) { if (headerTitle.innerHTML !== this.getCMGPPDetails('title')) headerTitle.innerHTML = this.getCMGPPDetails('title'); if (headerTitle.tagName === 'A') { if (this.getCMGPPDetails('linkUrl')) headerTitle.setAttribute('href', this.getCMGPPDetails('linkUrl'));else headerTitle.removeAttribute('href'); } } const headerArtist = document.getElementById('headerSongArtist'); if (headerArtist) { if (headerArtist.innerHTML !== this.getCMGPPDetails('artist')) headerArtist.innerHTML = this.getCMGPPDetails('artist'); if (headerArtist.tagName === 'A') { if (this.getCMGPPDetails('linkUrl')) headerArtist.setAttribute('href', this.getCMGPPDetails('linkUrl'));else headerArtist.removeAttribute('href'); } } }, headerPPButton: function () { const self = this; const headerButton = document.getElementById('header-play-button'); const toggleEventFn = function () { const persistentPlayerButton = headerButton.classList.contains('persistent-player-controls'); const playButton = headerButton.classList.contains('ui-icon-play'); const retryButton = headerButton.classList.contains('ui-icon-retry'); if (self.args.playerFallback) { window.open('https://player.streamguys.com/cmg/' + self.args.stationID + '/sgplayer/player.php', 'playerpopup', 'width=974,height=450,location=0,menubar=0,resizable=0,scrollbars=0,status=0,toolbar=0'); } else { window.fireEvent('TogglePlayer'); } // send analytics for play-interaction if (playButton || retryButton) { self.args.dataLayerFn(self.args.analyticsEvent, { element: persistentPlayerButton ? 'persistent' : 'header', elementSubTitle: playButton ? 'play' : 'retry' }); } }; headerButton.addEventListener('click', toggleEventFn); }, setUpEventListeners: function () { const self = this; window.addEventListener('ExpandPlayer', function () { /* istanbul ignore next */ self.expandPlayer(); }); const closePlayer = document.getElementById('player-close'); if (closePlayer) { closePlayer.addEventListener('click', function () { /* istanbul ignore next */ self.collapsePlayer(true, true); }); } const toggle = document.getElementById('playerToggle'); if (toggle) { toggle.addEventListener('click', function () { /* istanbul ignore next */ self.toggleExpand(true); }); } // toggle event for mobile only const ppDetails = document.getElementById('ppDetails'); if (ppDetails) { document.getElementById('ppDetails').addEventListener('click', function () { /* istanbul ignore next */ if (document.getElementById('playerToggle').offsetParent === null) { self.toggleExpand(true); } }); } const epLearnMore = document.getElementById('ep-learnMore'); /* istanbul ignore next */ epLearnMore.addEventListener('click', function () { self.collapsePlayer(); }); // toggle voting icons const toggleVotingIcons = document.querySelectorAll('.pp-toggle-voting'); for (let i = 0; i < toggleVotingIcons.length; ++i) { const toggleVotingIcon = toggleVotingIcons[i]; if (toggleVotingIcon) toggleVotingIcon.addEventListener('click', function (e) { self.toggleVote(e); }); } // toggle play/pause listener const togglePlayerButtons = document.querySelectorAll('.pp-toggle-play-pause'); for (let i = 0; i < togglePlayerButtons.length; ++i) { const togglePlayerButton = togglePlayerButtons[i]; if (togglePlayerButton) togglePlayerButton.addEventListener('click', function () { const persistentPlayerButton = togglePlayerButton.classList.contains('persistent-player-controls'); const playButton = togglePlayerButton.querySelectorAll('.ui-icon-play').length > 0 || togglePlayerButton.classList.contains('ui-icon-play'); const retryButton = togglePlayerButton.querySelectorAll('.ui-icon-retry').length > 0 || togglePlayerButton.classList.contains('ui-icon-retry'); if (self.args.playerFallback) { window.open('https://player.streamguys.com/cmg/' + self.args.stationID + '/sgplayer/player.php', 'playerpopup', 'width=974,height=450,location=0,menubar=0,resizable=0,scrollbars=0,status=0,toolbar=0'); } else { window.fireEvent('TogglePlayer'); } // send analytics for play-interaction if (playButton || retryButton) { self.args.dataLayerFn(self.args.analyticsEvent, { element: persistentPlayerButton ? 'persistent' : 'header', elementSubTitle: playButton ? 'play' : 'retry' }); } }); } ; // buy now listener window.addEventListener('BuyNow', function (event) { if (!historyId || historyId !== event.detail.id || !event.detail.linkUrl) return; self.setCMGPPDetails('buyLink', event.detail.linkUrl); self.updatePlayerInfo(); }); // lsp listener (music sites) let historyId; window.addEventListener('LSP', function (event) { const playerVoting = document.getElementById('player-voting'); const playerVotingExpanded = document.getElementById('player-voting_expanded'); const latest = event.detail.data.length && event.detail.data[0]; if (!latest) return; const newId = latest.isSong ? latest.id : null; if (historyId !== newId) self.setCMGPPDetails('buyLink', ''); if (latest.isSong) { let thumbnailUrl = self.args.stationLogoSmall; if (latest.artists.length && latest.artists[0].metadata && latest.artists[0].metadata.thumbnailUrl) { thumbnailUrl = latest.artists[0].metadata.thumbnailUrl; } let epImageUrl = latest.artists.length && latest.artists[0].metadata && latest.artists[0].metadata.mediumImageUrl ? latest.artists[0].metadata.mediumImageUrl : self.args.stationLogo; const fetchTivoImageBinary = (variable, url) => { function arrayBufferToBase64(buffer) { let binary = ''; const bytes = new Uint8Array(buffer); const len = bytes.byteLength; for (let i = 0; i < len; i += 1) { binary += String.fromCharCode(bytes[i]); } return window.btoa(binary); } const headers = new Headers({ 'x-tmm-keyid': 'TAC1003', 'x-tmm-apikey': event.detail.TIVO_API_KEY }); const options = { method: 'GET', headers: headers, mode: 'cors' }; const promise = fetch(url, options).then(response => { const buffer = response.arrayBuffer(); return buffer; }).then(buffer => { const b64encoded = arrayBufferToBase64(buffer); const data = `data:image/jpeg;base64, ${b64encoded}`; self.setCMGPPDetails(variable, data); }); return promise; }; if (thumbnailUrl !== self.args.stationLogoSmall && epImageUrl !== self.args.stationLogo && !thumbnailUrl.includes('cps-static') && !!event.detail.TIVO_API_KEY) { const thumbnailPromise = fetchTivoImageBinary('thumbnailUrl', thumbnailUrl); const epImagePromise = fetchTivoImageBinary('largeImageUrl', epImageUrl); Promise.any([thumbnailPromise, epImagePromise]); } else { self.setCMGPPDetails('thumbnailUrl', thumbnailUrl); self.setCMGPPDetails('largeImageUrl', epImageUrl); } // song info is injected by StreamGuys const sgTitle = document.getElementById('songTitle'); const sgArtist = document.getElementById('songArtist'); const sgAlbum = document.getElementById('songAlbum'); let albumTitle = ''; if (sgAlbum) { const titleMatch = sgTitle && sgTitle.innerHTML.toLowerCase() === latest.title.toLowerCase(); const artistMatch = sgArtist && sgArtist.innerHTML.toLowerCase() === latest.artist.toLowerCase(); if (titleMatch && artistMatch) { // use the streamguys provided album if the title and artist match albumTitle = sgAlbum.innerHTML; } else if (historyId === newId) { // don't change the currently displayed album name if lsp has not updated albumTitle = self.getCMGPPDetails('albumTitle'); } } self.setCMGPPDetails('albumTitle', albumTitle); self.setCMGPPDetails('largeImageAlt', latest.artists.length && latest.artists[0].metadata && latest.artists[0].metadata.mediumImageUrl ? latest.artist : self.args.stationTitle); self.setCMGPPDetails('artist', latest.artist); self.setCMGPPDetails('title', latest.title); if (latest.artists[0]) { self.setCMGPPDetails('linkUrl', '/lsp/artist/bio/' + latest.artists[0].slug + '/'); } else { self.setCMGPPDetails('linkUrl', ''); } playerVoting.classList.remove('hidden'); playerVotingExpanded.classList.remove('hidden'); } else { self.setCMGPPDetails('thumbnailUrl', self.args.stationLogoSmall); self.setCMGPPDetails('largeImageUrl', self.args.stationLogo); self.setCMGPPDetails('largeImageAlt', self.args.stationTitle); self.setCMGPPDetails('artist', self.args.stationStatement); self.setCMGPPDetails('title', self.args.stationTitle); self.setCMGPPDetails('albumTitle', ''); self.setCMGPPDetails('linkUrl', ''); playerVoting.classList.add('hidden'); playerVotingExpanded.classList.add('hidden'); } // fire the event after we've already done all of our processing to avoid data mutation side-effects const detail = { type: 'LSP', data: event.detail }; window.fireEvent(self.args.type, detail); historyId = newId; self.updatePlayerInfo(); }); // scheduler listener (newstalk) window.addEventListener('Scheduler', function (event) { const data = {}; if (event.detail.current) { const current = event.detail.current; data.thumbnailUrl = self.args.stationLogoSmall; if (current.images && current.images.square) { data.thumbnailUrl = current.images.square; } if (current.images && current.images.lowres) { data.largeImageUrl = current.images.lowres; data.largeImageAlt = current.title; } else { data.largeImageUrl = self.args.stationLogo; data.largeImageAlt = self.args.stationTitle; } data.artist = current.showtime; data.title = current.title; data.linkUrl = current.url; } else { data.thumbnailUrl = self.args.stationLogoSmall; data.largeImageUrl = self.args.stationLogo; data.largeImageAlt = self.args.stationTitle; data.artist = self.args.stationStatement; data.title = self.args.stationTitle; data.linkUrl = ''; } // exceptions if (self.args.stationURL === 'https://www.theboneonline.com') { data.linkUrl = '/bonetv'; } // send the normalized data to other components const detail = { type: 'Scheduler', data: { image: data.largeImageUrl, imageAlt: data.largeImageAlt, title: data.title, time: data.artist, url: data.linkUrl, original: event.detail } }; window.fireEvent(self.args.type, detail); // only update the persistent player info if this is not a music site if (!self.args.isMusicSite) { Object.keys(data).forEach(function (key) { self.setCMGPPDetails(key, data[key]); }); self.updatePlayerInfo(); } }); // modal button listeners const modal = document.getElementById('player-retry-modal'); if (modal) { const closeModal = document.getElementById('closeModal'); if (closeModal) closeModal.addEventListener('click', function () { modal.classList.add('hidden'); document.body.classList.remove('locked'); }); const retryButton = document.getElementById('retryPlay'); if (retryButton) retryButton.addEventListener('click', function () { self.args.dataLayerFn(self.args.analyticsEvent, { element: 'retry modal', elementSubTitle: 'retry' }); modal.classList.add('hidden'); document.body.classList.remove('locked'); window.fireEvent('TogglePlayer'); }); } ; // adjust persistent player volume const volumeButton = document.getElementById("volumeButton"); if (volumeButton) { volumeButton.oninput = function () { const playerControls = document.getElementById('playerControls'); const playerControlsStyle = getComputedStyle(playerControls); const backgroundColor = self.args.isMusicSite ? 'white' : playerControlsStyle.backgroundColor; this.style.background = 'linear-gradient(to right, ' + backgroundColor + ' 0%, ' + backgroundColor + ' ' + this.value + '%, #afafaf ' + this.value + '%, #afafaf 100%)'; const newVolume = event.target.value / 100; _sgplayer.setVol(_sgplayer.audioElement, newVolume); }; } }, init: function (type, isMusicSite, stationTitle, stationStatement, stationLogoSmall, stationLogo, stationURL, facebookAppID, playerFallback, stationID, analyticsEvent, dataLayerFn) { this.player = document.getElementById('persistent-player'); if (!this.player) return null; this.data.thumbnailUrl = stationLogoSmall; this.data.largeImageUrl = stationLogo; this.data.largeImageAlt = stationTitle; this.args = { type, isMusicSite, stationTitle, stationStatement, stationLogoSmall, stationLogo, stationURL, facebookAppID, playerFallback, stationID, analyticsEvent, dataLayerFn }; this.setUpFacebookShare(facebookAppID); this.setUpEventListeners(); return; } };});