Fox Sports 640 South Florida


Fox Sports 640 South Florida <![CDATA[ // — Start Hubbard Google Ads window.googletag = window.googletag || {cmd: []}; googletag.cmd.push(function() { var hbi_ad_map_horizontal_full = googletag.sizeMapping().addSize([992, 0], [[970,90],[728,90]]).addSize([768, 0], [728, 90]).addSize([0, 0], [[320,50],[300,50]]).build(); var hbi_ad_map_horizontal_full_large = googletag.sizeMapping().addSize([992, 0], [[970,250],[970,90],[728,90]]).addSize([768, 0], [728, 90]).addSize([0, 0], [[320,50],[300,50]]).build(); var hbi_ad_map_horizontal_content = googletag.sizeMapping().addSize([768, 0], [728, 90]).addSize([0, 0], [[320,50],[300,50]]).build(); var hbi_ad_map_sidebar = googletag.sizeMapping().addSize([0, 0], [[300,600],[300,250]]).build(); var hbi_ad_above_content = googletag.defineSlot('/21814866378/WMENAM_site/above_content', [970, 90], 'hbi_ad_above_content').defineSizeMapping(hbi_ad_map_horizontal_full).addService(googletag.pubads()); var hbi_ad_sidebar_1 = googletag.defineSlot('/21814866378/WMENAM_site/sidebar_1', [300, 250], 'hbi_ad_sidebar_1').defineSizeMapping(hbi_ad_map_sidebar).addService(googletag.pubads()); var hbi_ad_sidebar_2 = googletag.defineSlot('/21814866378/WMENAM_site/sidebar_2', [300, 250], 'hbi_ad_sidebar_2').defineSizeMapping(hbi_ad_map_sidebar).addService(googletag.pubads()); var hbi_ad_between_content_sections = googletag.defineSlot('/21814866378/WMENAM_site/between_content_sections', [970, 90], 'hbi_ad_between_content_sections').defineSizeMapping(hbi_ad_map_horizontal_full_large).addService(googletag.pubads()); var hbi_ad_below_content = googletag.defineSlot('/21814866378/WMENAM_site/below_content', [970, 90], 'hbi_ad_below_content').defineSizeMapping(hbi_ad_map_horizontal_full).addService(googletag.pubads()); var hbi_ad_background = googletag.defineOutOfPageSlot('/21814866378/WMENAM_site/background', 'hbi_ad_background').addService(googletag.pubads()); googletag.pubads().enableLazyLoad({ fetchMarginPercent: 500, // Fetch slots within 5 viewports. renderMarginPercent: 200, // Render slots within 2 viewports. mobileScaling: 2.0 // Double the above values on mobile. }); googletag.pubads().setTargeting(“is_front”, “true”); googletag.pubads().setTargeting(“is_home”, “true”); googletag.pubads().setTargeting(“is_archive”, “false”); googletag.pubads().setTargeting(“is_article”, “false”); googletag.pubads().setTargeting(“is_gallery”, “false”); googletag.pubads().setTargeting(“is_show”, “false”); googletag.pubads().setTargeting(“is_podcast”, “false”); googletag.pubads().setTargeting(“is_podcast_episode”, “false”); googletag.pubads().setTargeting(“is_page”, “false”); googletag.pubads().setTargeting(“is_search”, “false”); googletag.pubads().setTargeting(“is_author”, “false”); googletag.pubads().setTargeting(“slug”, “false”); googletag.pubads().setTargeting(“post_id”, “”); googletag.pubads().setTargeting(“post_type”, “post”); googletag.pubads().setTargeting(“category”, “”); googletag.pubads().setTargeting(“tag”, “”); googletag.pubads().setTargeting(“author”, “”); googletag.pubads().setTargeting(“has_parent”, “”); googletag.pubads().setTargeting(“url_path”, “”); googletag.pubads().collapseEmptyDivs(true); googletag.pubads().enableSingleRequest(); googletag.enableServices(); /* * Look for window resize and refresh ads * – This will refresh ADs when going from one Ad Map Size to another / var hbiResizeID; var hbiPrevWindowWidth = hbiGetWindowWidth(); var hbiAdRefreshRanges = [[0,576],[576,768],[768,992],[992,10000000]]; window.onload = hbiGetWindowWidth(); window.addEventListener('resize', function(event){ clearTimeout(hbiResizeID); hbiResizeID = setTimeout(hbiResizeAd, 500); }); function hbiResizeAd(){ var currentWindowWidth = hbiGetWindowWidth(); // Compare current width with previous width, to see if there is a new AD Mapping range if(hbiGetRangeIndex(hbiPrevWindowWidth) == hbiGetRangeIndex(currentWindowWidth)) { return; } hbiPrevWindowWidth = currentWindowWidth; googletag.pubads().refresh(); } function hbiGetWindowWidth(){ return window.innerWidth; } function hbiGetRangeIndex(value) { for (let i = 0; i < hbiAdRefreshRanges.length; i++) { var range = hbiAdRefreshRanges[i]; if(range[0] <= value && value ‘; this.div = document.querySelectorAll(this.divSelector)[0]; this.div.appendChild(html); if(this.div.getElementsByClassName(‘app-badge-google’).length > 0 && browser && browser.name && browser.name == ‘ios’) { this.div.getElementsByClassName(‘app-badge-google’)[0].classList.add(‘hide’); } jQuery(‘.play-button’).first().clone().appendTo(‘.play-button-mobile’); document.body.classList.add(‘has-livebar’); document.body.classList.add(‘livebar-‘+this.station_type); } // set height this.setHeight = function() { // TODO variable height var innerDocContentHeight = 80; this.div.style.height = innerDocContentHeight + “px”; } this.removeUrlProtocol = function(url) { var newstr = url.replace(‘http://’, ‘//’); return newstr; }; // subscribe events this.subscribeEvents = function() { var _this = this; for (var i in this.configChannels) { var channelName = this.configChannels[i]; var channel = this.pusher.subscribe(channelName); for (var j in this.events) { var eventName = this.events[j]; channel.bind(eventName, function(data) { _this.pusherEvent(channelName, eventName, data); }); } _this.channels.push(channel); } }; // process real time cue event from Pusher.com this.pusherEvent = function(channelName, eventName, pusherData) { this.processTrackOrEvent(pusherData); }; this.latestEpisode = function() { var episode = this.latest_episode; var data = { type: ‘podcast’, artist: ”, // episode.podcast_title, trackName: this.truncate(episode.post_title, 71), art: episode.post_thumbnail, url: episode.url } this.processTrackOrEvent(data); } // grabs the latest track from the api this.ajaxLatestTrack = function() { var endpoint = this.endpoint + ‘/hll_widget_livebar_cues.php’; var data = { ‘limit’: ‘1’ }; var _this = this; var httpRequest = new XMLHttpRequest(); httpRequest.open(‘POST’, endpoint); httpRequest.setRequestHeader(“Content-type”, “application/json”); httpRequest.send(JSON.stringify(data)); httpRequest.onreadystatechange = function () { if (httpRequest.readyState == 4 && httpRequest.status == 200) { var json = JSON.parse(httpRequest.responseText); _this.processTrackOrEvent(json.data.response[0]); } } }; // grabs the latest event from the api this.ajaxLatestEvent = function() { var endpoint = this.endpoint + ‘/hll_widget_livebar_events.php’; var data = { ‘limit’: ‘3’ }; var _this = this; var httpRequest = new XMLHttpRequest(); httpRequest.open(‘POST’, endpoint); httpRequest.setRequestHeader(“Content-type”, “application/json”); httpRequest.send(JSON.stringify(data)); httpRequest.onreadystatechange = function () { if (httpRequest.readyState == 4 && httpRequest.status == 200) { var json = JSON.parse(httpRequest.responseText); _this.processTrackOrEvent(json.data.response[0]); } } }; // grabs the latest podcast episode from the wp-json api this.ajaxLatestEpisode = function() { var endpoint = ‘/wp-json/hbi/v1/liveplayer/latestepisode’; var _this = this; var httpRequest = new XMLHttpRequest(); httpRequest.open(‘GET’, endpoint); httpRequest.setRequestHeader(“Content-type”, “application/json”); httpRequest.send(); httpRequest.onreadystatechange = function () { if (httpRequest.readyState == 4 && httpRequest.status == 200) { var episode = JSON.parse(httpRequest.responseText); var data = { type: ‘podcast’, artist: ”, // episode.podcast_title, trackName: _this.truncate(episode.post_title, 71), art: episode.post_thumbnail, url: episode.url } _this.processTrackOrEvent(data); } } }; // process the track or event data and update the HTML this.processTrackOrEvent = function(d) { // debug: print data to console // window.console.log(‘processTrackOrEvent’,d); // workaround: ignore spots for now var type = d.type; if (type !== ‘podcast’ && type !== ‘song’ && type !== ‘show’ && type !== ‘special-event’ && type !== ‘guest’ && type !== ‘other’) { return; } if(type == ‘song’) { var trackId = d.data.musicbrainz_recording; var artist = d.data.artist || ”; var trackName = d.data.description || ”; var art = this.removeUrlProtocol(d.data.art_url || “https://www.foxsports640.com/wp-content/plugins/hbi-player-widgets//assets/img/track.png”); art = art + ‘?ver=3’; } else if(type == ‘podcast’) { var artist = d.artist || ”; var trackName = d.trackName || ”; var art = this.removeUrlProtocol(d.art || “https://www.foxsports640.com/wp-content/plugins/hbi-player-widgets//assets/img/track.png”); this.setEpisodeTimer(); } else { var trackId = d.id; var timeRange = function() { let start_date = moment(d.start_date); let end_date = moment(d.end_date); let default_format = ‘h:mma’; let start_day_format = (default_format); let end_day_format = (default_format); // If start and end dates both fall in AM or PM, make it brief // Example: 10:00-11:00am vs 10:00am-11:00am if(start_date.format(‘a’) === end_date.format(‘a’)) { start_day_format = ‘h:mm’; } // Remove minutes if 00 if(start_date.minutes() == 0) { start_day_format = ‘h’; } if(end_date.minutes() == 0) { end_day_format = ‘ha’; } return start_date.format(start_day_format) + “-” + end_date.format(end_day_format); }; var artist = timeRange(); var trackName = d.name || ”; var art = this.removeUrlProtocol(d.photo || “https://www.foxsports640.com/wp-content/plugins/hbi-player-widgets//assets/img/event.png”); // Start timer this.setEventTimer(); } // This block retrieves art work as a blob so we can render it in the DOM // … and additionally process its color swatches in a canvas context via Vibrant.js // … with only ONE network request. // https://stackoverflow.com/questions/23013871/how-to-parse-into-base64-string-the-binary-image-from-response // https://stackoverflow.com/questions/33902299/using-jquery-ajax-to-download-a-binary-file fetchBlob(art, function(arrayBuffer) { var blob = new Blob([arrayBuffer], {type: “image/jpeg”}); var url = URL.createObjectURL(blob); // Set artwork in DOM document.getElementsByClassName(‘album-art-img’)[0].src=url; document.getElementsByClassName(‘album-art-img’)[0].classList.remove(‘d-none’); document.getElementsByClassName(‘live-player-background’)[0].src=url; // Use live player button color if set in Customizer if(window.livePlayerButtonColor) { // set color of large and compact play buttons with customizer color Array.from(document.getElementsByClassName(‘play-circle-outline-path’)).forEach(function(element) { element.style.fill = window.livePlayerButtonColor; // display play button if hidden (avoids color flash on load) document.getElementById(‘play-button-column’).classList.remove(‘invisible’); }); return; } // If live player button color is not manually set, automatically get album art color from vibrant.js var img = document.getElementsByClassName(‘album-art-img’)[0]; img.addEventListener(‘load’, function() { var vibrant = new Vibrant(img); var swatches = vibrant.swatches(); var swatch = swatches[‘LightVibrant’] || swatches[‘Vibrant’] || swatches[‘Muted’] || swatches[‘DarkMuted’]; // trap edge case where Vibrant.js doesn’t return a swatch if(swatch !== undefined) { // get hex from swatch library var hex = swatch.getHex(); // set color of large and compact play buttons Array.from(document.getElementsByClassName(‘play-circle-outline-path’)).forEach(function(element) { element.style.fill = hex; }); } // display play button if hidden (avoids color flash on load) document.getElementById(‘play-button-column’).classList.remove(‘invisible’); }); }); this.div.getElementsByClassName(‘onair-artist’)[0].innerHTML = artist; this.div.getElementsByClassName(‘onair-track’)[0].innerHTML = trackName; // link to episode if live player is in podcast mode if(type == ‘podcast’) { jQuery(‘.play-button a, #circles, .album-art a, .track a’).attr(‘href’,d.url).removeAttr(‘target’); jQuery(‘.onair-artist’).hide(); } // Skip TextFit step for podcast episodes if(this.station_type == ‘podcast’) { return; } // Dynamically size long track titles – https://github.com/STRML/textFit // var textFitOptions = { // alignVert: false, // if true, textFit will align vertically using css tables // alignHoriz: false, // if true, textFit will set text-align: center // multiLine: false, // if true, textFit will not set white-space: no-wrap // detectMultiLine: false, // disable to turn off automatic multi-line sensing // minFontSize: 11, // in px // maxFontSize: 40, // in px // reProcess: true, // if true, textFit will re-process already-fit nodes. Set to ‘false’ for better performance // widthOnly: false, // if true, textFit will fit text to element width, regardless of text height // alignVertWithFlexbox: false, // if true, textFit will use flexbox for vertical alignment // } if (textFit !== “undefined”) { textFit(this.div.getElementsByClassName(‘onair-track’)[0], { alignVert: false, // if true, textFit will align vertically using css tables alignHoriz: false, // if true, textFit will set text-align: center multiLine: false, // if true, textFit will not set white-space: no-wrap detectMultiLine: false, // disable to turn off automatic multi-line sensing minFontSize: 13, // in px maxFontSize: 31, // in px reProcess: true, // if true, textFit will re-process already-fit nodes. Set to ‘false’ for better performance widthOnly: false, // if true, textFit will fit text to element width, regardless of text height alignVertWithFlexbox: true, // if true, textFit will use flexbox for vertical alignment }); textFit(this.div.getElementsByClassName(‘onair-artist’)[0], { alignVert: false, // if true, textFit will align vertically using css tables alignHoriz: false, // if true, textFit will set text-align: center multiLine: false, // if true, textFit will not set white-space: no-wrap detectMultiLine: false, // disable to turn off automatic multi-line sensing minFontSize: 11, // in px maxFontSize: 30, // in px reProcess: true, // if true, textFit will re-process already-fit nodes. Set to ‘false’ for better performance widthOnly: false, // if true, textFit will fit text to element width, regardless of text height alignVertWithFlexbox: true, // if true, textFit will use flexbox for vertical alignment }); } } // Set timer for event refresh this.setEventTimer = function() { var _this = this; setTimeout(function(){ _this.ajaxLatestEvent(); }, this.eventRefreshTime); }; // Set timer for episode refresh this.setEpisodeTimer = function() { var _this = this; setTimeout(function(){ _this.ajaxLatestEpisode(); }, this.eventRefreshTime); }; // https://stackoverflow.com/questions/1199352/smart-way-to-truncate-long-strings this.truncate = function(str, n){ return (str.length > n) ? str.substr(0, n-1) + ‘…’ : str; }; // https://stackoverflow.com/questions/23013871/how-to-parse-into-base64-string-the-binary-image-from-response function fetchBlob(uri, callback) { var xhr = new XMLHttpRequest(); xhr.open(‘GET’, uri, true); xhr.responseType = ‘arraybuffer’; xhr.onload = function(e) { if (this.status == 200) { var blob = this.response; if (callback) { callback(blob); } } }; xhr.send(); }; } // Set and intialize var hllLiveBarWidget = new hllLiveBarWidgetObject(‘player-widget-livebar’); hllLiveBarWidget.init();

‘; this.div = document.querySelectorAll(this.divSelector)[0]; this.div.appendChild(html); }; this.removeUrlProtocol = function(url) { var newstr = url.replace(‘http://’, ‘//’); return newstr; }; // subscribe events this.subscribeEvents = function() { var _this = this; for (var i in this.configChannels) { var channelName = this.configChannels[i]; var channel = this.pusher.subscribe(channelName); for (var j in this.events) { var eventName = this.events[j]; channel.bind(eventName, function(data) { _this.pusherEvent(channelName, eventName, data); }); } _this.channels.push(channel); } }; // process real time cue event from Pusher.com this.pusherEvent = function(channelName, eventName, pusherData) { this.processTrack(pusherData); }; // grabs the latest track from the api this.ajaxLatestTrack = function() { var endpoint = this.endpoint + ‘/hll_widget_nowplaying_cues.php’; var data = { ‘limit’: ‘1’ }; var _this = this; var httpRequest = new XMLHttpRequest(); httpRequest.open(‘POST’, endpoint); httpRequest.setRequestHeader(“Content-type”, “application/json”); httpRequest.send(JSON.stringify(data)); httpRequest.onreadystatechange = function () { if (httpRequest.readyState == 4 && httpRequest.status == 200) { var json = JSON.parse(httpRequest.responseText); _this.processTrack(json.data.response[0]); } } }; // process the track data and update the HTML this.processTrack = function(d) { var trackId = d.data.musicbrainz_recording; var type = d.type; var artist = d.data.artist || ”; var trackName = d.data.description || ”; var art = this.removeUrlProtocol(d.data.art_url || “https://www.foxsports640.com/wp-content/plugins/hbi-player-widgets//assets/img/track.png”); art = art + ‘?ver=2’; // workaround: ignore spots for now if (type !== ‘song’) { return; } this.div.querySelectorAll(‘.artist .details’)[0].innerHTML = artist; this.div.querySelectorAll(‘.track .details’)[0].innerHTML = trackName; this.div.getElementsByClassName(‘album-art-img’)[0].src = art; }; // grabs the latest track from the api this.ajaxLatestEvents = function() { var endpoint = this.endpoint + ‘/hll_widget_livebar_events.php’; var data = { limit: 1 }; var _this = this; var httpRequest = new XMLHttpRequest(); httpRequest.open(‘POST’, endpoint); httpRequest.setRequestHeader(“Content-type”, “application/json”); httpRequest.send(JSON.stringify(data)); httpRequest.onreadystatechange = function () { if (httpRequest.readyState == 4 && httpRequest.status == 200) { var json = JSON.parse(httpRequest.responseText); _this.processEvent(json.data.response[0]); } } }; // process the track data and update the HTML this.processEvent = function(element) { var obj = {}; obj.eventId = element.id; obj.title = element.name || ”; obj.photo = element.photo || “https://www.foxsports640.com/wp-content/plugins/hbi-player-widgets//assets/img/event.png”; obj.formatStartTime = moment(element.start_date).format(‘h:mma’); obj.startTime = element.start_date; obj.endTime = element.end_date; obj.timeRange = function() { let start_date = moment(element.start_date); let end_date = moment(element.end_date); let default_format = ‘h:mma’; let start_day_format = (default_format); let end_day_format = (default_format); // If start and end dates both fall in AM or PM, make it brief // Example: 10:00-11:00am vs 10:00am-11:00am if(start_date.format(‘a’) === end_date.format(‘a’)) { start_day_format = ‘h:mm’; } // Remove minutes if 00 if(start_date.minutes() == 0) { start_day_format = ‘h’; } if(end_date.minutes() == 0) { end_day_format = ‘ha’; } return start_date.format(start_day_format) + “-” + end_date.format(end_day_format); }; this.div.querySelectorAll(‘.artist .details’)[0].innerHTML = obj.timeRange(); this.div.querySelectorAll(‘.track .details’)[0].innerHTML = obj.title; this.div.getElementsByClassName(‘album-art-img’)[0].src = obj.photo; // Start timer this.setEventTimer(); }; // Set timer for event refresh this.setEventTimer = function() { var _this = this; setTimeout(function(){ _this.ajaxLatestEvents(); }, this.eventRefreshTime); }; // grabs the latest rewards this.ajaxLatestRewards = function() { var endpoint = this.endpoint + ‘/hll_widget_nowplaying_rewards.php’; var data = {}; var _this = this; var httpRequest = new XMLHttpRequest(); httpRequest.open(‘POST’, endpoint); httpRequest.setRequestHeader(“Content-type”, “application/json”); httpRequest.send(JSON.stringify(data)); httpRequest.onreadystatechange = function () { if (httpRequest.readyState == 4 && httpRequest.status == 200) { var json = JSON.parse(httpRequest.responseText); _this.processRewards(json.data); } } }; // process the event reward and update the HTML this.processRewards = function(d) { var _this = this; // remove ones that shouldn’t be shown var d = d.filter(function(x) { if(x.in_widgets === true) { return true; } return false; }); // randomly sort the array of rewards var d = d.sort(function(a, b){return 0.5 – Math.random()}); // then sort featured rewards to the top d.sort(function(x) { return x.featured === false; }); var i = 0; for(i in d) { if(i > 1) { break; } // reward properties var rewardObject = d[i]; var id = rewardObject.id; var title = rewardObject.title; var image = this.removeUrlProtocol(rewardObject.photo); var type = rewardObject.type; var hours = Math.floor(rewardObject.hours / 3600); var hoursLabel = hours == 1 ? ‘hour’ : ‘hours’; if(type == ‘geolocation’) { type = ‘app’; } // element var rewardElement = this.div.getElementsByClassName(‘reward-‘+i)[0]; rewardElement.getElementsByClassName(‘img’)[0].getElementsByTagName(‘img’)[0].src = image; rewardElement.getElementsByClassName(‘content’)[0].getElementsByClassName(‘details’)[0].innerHTML = title; if(hours > 0) { rewardElement.getElementsByClassName(‘content’)[0].getElementsByClassName(‘info’)[0].getElementsByClassName(‘time’)[0].innerHTML = hours + ‘ ‘ + hoursLabel; } rewardElement.getElementsByClassName(‘reward-featured-url’)[0].setAttribute(‘href’,”https://live.foxsports640.com/listen/rewards/” + id + “/?utm_source=station-website&utm_medium=widget&utm_campaign=now-playing”); // reward type badge var typeBadge = rewardElement.getElementsByClassName(‘content’)[0].getElementsByClassName(‘info’)[0].getElementsByClassName(‘type-badge’)[0]; var typeBadgeclassListAsArray = new Array(typeBadge.classList.length); for (var j = 0, len = typeBadge.classList.length; j 0) { var rewardsWrapper = this.div.getElementsByClassName(‘rewards-wrapper’)[0]; rewardsWrapper.classList.remove(“hide”); } // Start timer this.setRewardsTimer(); }; // Set timer for rewards refresh this.setRewardsTimer = function() { var _this = this; setTimeout(function(){ _this.ajaxLatestRewards(); }, this.rewardsRefreshTime); }; // grabs the latest user listening data this.ajaxLatestListeners = function() { var endpoint = this.endpoint + ‘/hll_widget_nowplaying_listeners.php’; var data = { ‘limit’: this.listenerCount }; var _this = this; var httpRequest = new XMLHttpRequest(); httpRequest.open(‘POST’, endpoint); httpRequest.setRequestHeader(“Content-type”, “application/json”); httpRequest.send(JSON.stringify(data)); httpRequest.onreadystatechange = function () { if (httpRequest.readyState == 4 && httpRequest.status == 200) { var json = JSON.parse(httpRequest.responseText); _this.processListeners(json.data[0]); } } }; // process the track data and update the HTML this.processListeners = function(d) { // Main element var sections = this.div.getElementsByClassName(‘types-sections’)[0]; // Loop through each type for(x in d) { var type = x; var typeData = d[x]; var typeElement = sections.getElementsByClassName(‘type-section ‘ + type)[0]; if(!typeElement) { continue; } // Loop through each listener only a certain number of times var listenerElements = []; var i = 0; for(i in typeData) { if(i > this.listenerCount – 1) { break; } // Listener data var listener = typeData[i]; var firstName = listener.first_name; var lastName = listener.last_name; var displayName = (lastName) ? firstName + ‘ ‘ + lastName.charAt(0) + ‘.’ : firstName; var photo = this.removeUrlProtocol(listener.photo || “https://www.foxsports640.com/wp-content/plugins/hbi-player-widgets//assets/img/user.png”); var hours = Math.floor(listener.total_duration / 3600); var minutes = Math.floor(listener.total_duration / 60 % 60); // Create listener element var element = document.createElement(‘div’); element.setAttribute(‘class’,’listener’); var imgDiv = document.createElement(‘div’); imgDiv.setAttribute(‘class’, ‘img’); var img = document.createElement(‘img’); img.setAttribute(‘src’, photo); imgDiv.appendChild(img) element.appendChild(imgDiv); var content = document.createElement(‘div’); content.setAttribute(‘class’, ‘content’); var name = document.createElement(‘div’); name.setAttribute(‘class’, ‘name’); name.innerHTML = displayName; content.appendChild(name); var info = document.createElement(‘div’); info.setAttribute(‘class’, ‘info’); var hoursElement = document.createElement(‘span’); hoursElement.setAttribute(‘class’, ‘hours time’); hoursElement.style.color = “”; hoursElement.innerHTML = hours; var minutesElement = document.createElement(‘span’); minutesElement.setAttribute(‘class’, ‘minutes time’); minutesElement.style.color = “”; minutesElement.innerHTML = minutes; var hoursLabel = document.createElement(‘strong’); hoursLabel.innerHTML = ‘Hrs’; var minutesLabel = document.createElement(‘strong’); minutesLabel.innerHTML = ‘Mins’; info.appendChild(hoursElement); info.appendChild(hoursLabel); info.appendChild(minutesElement); info.appendChild(minutesLabel); content.appendChild(info); element.appendChild(content); // Add element to array listenerElements.push(element); i++; } // Remove current listener elements and add new ones while (typeElement.hasChildNodes()) { typeElement.removeChild(typeElement.lastChild); } listenerElements.forEach(function(element) { typeElement.appendChild(element); }); } // If listeners available, show wrapper if(d) { var listenersWrapper = this.div.getElementsByClassName(‘listeners-wrapper’)[0]; listenersWrapper.classList.remove(“hide”); } // Start timer this.setListenerTimer(); }; // Set timer for listener refresh this.setListenerTimer = function() { var _this = this; setTimeout(function(){ _this.ajaxLatestListeners(); }, this.listenerRefreshTime); }; this.createListenerEventListener = function() { var _this = this; this.hllforEach(this.div.querySelectorAll(“.types-menu .type”), function(index, element){ element.addEventListener(‘click’, function(event) { event.preventDefault(); _this.changeListenerTypeSection(event.target); }); }); }; this.changeListenerTypeSection = function(element) { var listenerSection = this.div.getElementsByClassName(‘listeners-wrapper’)[0]; var targetType = element.getAttribute(‘data-type-target’); var menuItem = listenerSection.querySelectorAll(‘[data-type-target=”‘ + targetType + ‘”]’)[0]; var typeSection = listenerSection.querySelectorAll(‘.type-section.’+targetType)[0]; if(menuItem && typeSection) { var active = listenerSection.querySelectorAll(“.active”); for( var x=0; x

  • Survey
  • Carrabba's - May 640x400
  • <![CDATA[ / */ ]]><![CDATA[ var renderInvisibleReCaptcha = function() { for (var i = 0; i

    This is a great Story, Can I read more.

    kayakandcanoe
    Truly a paddler's paradise, Florida has diverse ecosystems and pristine waters that nature lovers can really appreciate. You can spot abundant wildlife in the lush landscapes as you float through miles of pristine beauty in one of Florida's most picturesque places to go kayaking.
    http://kayakandcanoe.floridaboating.com