1<!DOCTYPE html> 2<html xmlns="//www.w3.org/1999/xhtml" xml:lang="en-gb" lang="en-gb" dir="ltr"> 3<head> 4<meta charset="utf-8"> 5 <meta name="rights" content="Durham Radio Inc."> 6 <meta name="og:site_name" content="KX105 New Country FM"> 7 <meta name="og:title" content="KX 105 New Country FM"> 8 <meta name="og:description" content="KX 105 New Country FM Canada's #1 station for country music. Includes updates on traffic, weather, local events, concerts, and the latest in country music."> 9 <meta name="og:url" content="https://kx105.fm/index.php"> 10 <meta name="og:type" content="website"> 11 <meta name="og:image" content="https://kx105.fm/images/logo/logo_kx105_sq1024_bg_.jpg"> 12 <meta name="description" content="KX 105 New Country FM Canada's #1 station for country music. Includes updates on traffic, weather, local events, concerts, and the latest in country music."> 13 <meta name="generator" content="Joomla! - Open Source Content Management"> 14 <title>KX 105 New Country FM</title> 15 <link href="/index.php?format=feed&type=rss" rel="alternate" type="application/rss+xml" title="KX 105 New Country FM"> 16 <link href="/index.php?format=feed&type=atom" rel="alternate" type="application/atom+xml" title="KX 105 New Country FM"> 17 <link href="/templates/template_kx105_2025/favicon.ico" rel="icon" type="image/vnd.microsoft.icon"> 18<link href="/media/plg_system_jmootips/css/jmootips.min.css?9580d37857f293f884f947f8369a5514" rel="stylesheet" /> 19 <link href="/media/vendor/bootstrap/css/bootstrap.min.css?5.3.2" rel="stylesheet" /> 20 <link href="/media/vendor/joomla-custom-elements/css/joomla-alert.min.css?0.2.0" rel="stylesheet" /> 21 <link href="/templates/template_kx105_2025/css/bootstrap.css" rel="stylesheet" /> 22 <link href="/templates/template_kx105_2025/css/template.css" rel="stylesheet" /> 23 <link href="/media/vendor/fontawesome-free/css/fontawesome.min.css" rel="stylesheet" /> 24 <link href="/media/system/css/joomla-fontawesome.min.css" rel="stylesheet" /> 25 <link href="https://kx105.fm/modules/mod_jt_contentslider/tmpl/assets/css/style.css" rel="stylesheet" /> 26 <link href="https://kx105.fm/modules/mod_jt_contentslider/tmpl/assets/css/lightbox.css" rel="stylesheet" /> 27 <link href="/plugins/content/jw_allvideos/jw_allvideos/tmpl/Responsive/css/template.css?v=7.0" rel="stylesheet" /> 28 <link href="/components/com_jevents/views/flat/assets/css/modstyle.css?v=3.6.93" rel="stylesheet" /> 29 <link href="/components/com_jevents/assets/css/jevcustom.css?v=3.6.93" rel="stylesheet" /> 30 <link href="https://kx105.fm/modules/mod_adrefresh/tmpl/style.css" rel="stylesheet" /> 31 <link href="https://kx105.fm/modules/mod_songhistory/tmpl/style.css" rel="stylesheet" /> 32 <link href="/modules/mod_djimageslider/themes/default/css/djimageslider.css" rel="stylesheet" /> 33 <link href="/modules/mod_dripods/assets/styles.css" rel="stylesheet" /> 34 <link href="https://kx105.fm/modules/mod_nowplaying/style.css" rel="stylesheet" /> 35 <link href="https://kx105.fm/modules/mod_onairnow/css/mod_onairnow.css" rel="stylesheet" /> 36 <style> 37 #mod-nowplaying-217 .artist { 38 font-size: 18px; 39 color: #ffffff; 40 } 41 #mod-nowplaying-217 .song-title_now { 42 font-size: 14px; 43 color: #f0f0f0; 44 } 45</style>
46<script src="/media/plg_system_jmootips/js/mootools-core.js?9580d37857f293f884f947f8369a5514"></script>
46 47
47<script src="/media/plg_system_jmootips/js/mootools-more-jmootips.js?9580d37857f293f884f947f8369a5514"></script>
47 48
48<script src="/media/plg_system_jmootips/js/jmootips.min.js?9580d37857f293f884f947f8369a5514"></script>
48 49
49<script src="/media/vendor/jquery/js/jquery.min.js?3.7.1"></script>
49 50
50<script src="/media/legacy/js/jquery-noconflict.min.js?647005fc12b79b3ca2bb30c059899d5994e3e34d"></script>
50 51
51<script type="application/json" class="joomla-script-options new">{"bootstrap.modal":{"#modal":{"keyboard":true,"focus":true}},"adRefreshModules":{"265":{"adUnitId":"div-gpt-ad-1745100565501-0","adSlotPath":"\/69289300\/CKQMARTICLE","adSizes":[[728,90],[468,60],[320,50]],"refreshInterval":"60"},"263":{"adUnitId":"div-gpt-ad-1745098367054-0","adSlotPath":"\/69289300\/CKQMBIGBOX","adSizes":[[300,250]],"refreshInterval":"60"},"262":{"adUnitId":"div-gpt-ad-1745097654384-0","adSlotPath":"\/69289300\/CKQMLEADER","adSizes":[[728,90],[320,50]],"refreshInterval":"60"}},"nowPlayingInstances":{"217":{"moduleId":217,"ajaxUrl":"https:\/\/kx105.fm\/?option=com_ajax&module=nowplaying&method=getNowPlaying&format=json&module_id=217","defaultImage":"https:\/\/kx105.fm\/modules\/mod_nowplaying\/media\/default-image.jpg","darkTheme":true,"commercialBreakText":"More music after this break..."}},"onAirNowInstances":{"218":{"moduleId":218,"ajaxUrl":"https:\/\/kx105.fm\/index.php?option=com_ajax&module=onairnow&method=getCurrentProgram&format=json&module_id=218"}},"joomla.jtext":{"ERROR":"Error","MESSAGE":"Message","NOTICE":"Notice","WARNING":"Warning","JCLOSE":"Close","JOK":"OK","JOPEN":"Open"},"system.paths":{"root":"","rootFull":"https:\/\/kx105.fm\/","base":"","baseFull":"https:\/\/kx105.fm\/"},"csrf.token":"bac6e275de1939ba0f68eed5f76ddb76","accessibility-options":{"labels":{"menuTitle":"Accessibility Options","increaseText":"Increase Text Size","decreaseText":"Decrease Text Size","increaseTextSpacing":"Increase Text Spacing","decreaseTextSpacing":"Decrease Text Spacing","invertColors":"Invert Colours","grayHues":"Grey Hues","underlineLinks":"Underline Links","bigCursor":"Big Cursor","readingGuide":"Reading Guide","textToSpeech":"Text to Speech","speechToText":"Speech to Text","resetTitle":"Reset","closeTitle":"Close"},"icon":{"position":{"left":{"size":"0","units":"px"}},"useEmojis":true},"hotkeys":{"enabled":true,"helpTitles":true},"textToSpeechLang":["en-GB"],"speechToTextLang":["en-GB"]}}</script>
51 52
52<script src="/media/system/js/core.min.js?37ffe4186289eba9c5df81bea44080aff77b9684"></script>
52 53
53<script src="/media/vendor/bootstrap/js/bootstrap-es5.min.js?5.3.2" nomodule defer></script>
53 54
54<script src="/media/system/js/messages-es5.min.js?c29829fd2432533d05b15b771f86c6637708bd9d" nomodule defer></script>
54 55
55<script src="/media/vendor/bootstrap/js/modal.min.js?5.3.2" type="module"></script>
55 56
56<script src="/media/system/js/messages.min.js?7f7aa28ac8e8d42145850e8b45b3bc82ff9a6411" type="module"></script>
56 57
57<script src="/media/vendor/accessibility/js/accessibility.min.js?3.0.17" defer></script>
57 58
58<script src="/media/vendor/jquery/js/jquery.min.js"></script>
58 59
59<script src="/media/legacy/js/jquery-noconflict.min.js"></script>
59 60
60<script src="https://kx105.fm//templates/template_kx105_2025/js/jui/bootstrap.min.js"></script>
60 61
61<script src="https://kx105.fm/templates/template_kx105_2025/js/totop.js"></script>
61 62
62<script src="https://kx105.fm/templates/template_kx105_2025/js/tt_animation.js"></script>
62 63
63<script src="https://kx105.fm/templates/template_kx105_2025/js/customjs.js"></script>
63 64
64<script src="https://kx105.fm/modules/mod_jt_contentslider/tmpl/assets/js/lightbox-plus-jquery.js"></script>
64 65
65<script src="https://kx105.fm/modules/mod_jt_contentslider/tmpl/assets/js/owl.carousel.js"></script>
65 66
66<script src="/plugins/content/jw_allvideos/jw_allvideos/includes/js/behaviour.js?v=7.0"></script>
66 67
67<script src="https://kx105.fm/modules/mod_adrefresh/script.js?v=1786837994"></script>
67 68
68<script src="/media/djextensions/jquery.easing-j4/jquery.easing.min.js"></script>
68 69
69<script src="/modules/mod_djimageslider/assets/js/slider.js?v=4.6.2"></script>
69 70
70<script src="/modules/mod_dripods/assets/script.js"></script>
70 71
71<script src="https://kx105.fm/modules/mod_nowplaying/script.js"></script>
71 72
72<script src="https://kx105.fm/modules/mod_onairnow/media/js/mod_onairnow.js"></script>
72 73
73<script src="/plugins/system/baformsratelimit/media/js/ratelimit.js"></script>
73 74
74<script></script>
74 75
75<script type="module">window.addEventListener("load", function() {new Accessibility(Joomla.getOptions("accessibility-options") || {});});</script>
75 76
76<script>function fetchMoreLatestEvents(modid, direction) 77{ 78 jQuery.ajax({ 79 type : 'POST', 80 dataType : 'json', 81 url : "https://kx105.fm/index.php?option=com_jevents&ttoption=com_jevents&typeaheadtask=gwejson&file=fetchlatestevents&path=module&folder=mod_jevents_latest&token=bac6e275de1939ba0f68eed5f76ddb76", 82 data : {'json':JSON.stringify({'modid':modid, 'direction':direction})}, 83 contentType: "application/x-www-form-urlencoded; charset=utf-8", 84 scriptCharset: "utf-8" 85 }) 86 .done(function( data ){ 87 jQuery("#mod_events_latest_"+modid+"_data").replaceWith(data.html); 88 try { 89 document.getElementById("mod_events_latest_"+modid+"_data").parentNode.scrollIntoView({block: "start", behavior: "smooth"}); 90 } 91 catch (e) { 92 } 93 }) 94 .fail(function(x) {
95 alert('fail '+x); 96 }); 97}</script>
97 98
98<script>window.baFormsRateLimitRules = {"101":{"max_entries":1,"hours_limit":1}};</script>
98 99
99<script>window.baFormsSiteRoot = "https:\/\/kx105.fm\/";</script>
99 100 <link href="http://feeds.feedburner.com/" rel="alternate" type="application/rss+xml" title="KXtras" /> 101 <link href="http://feeds.feedburner.com/" rel="alternate" type="application/rss+xml" title="KX Concerts" /> 102 <link href="http://feeds.feedburner.com/" rel="alternate" type="application/rss+xml" title="KX Country News" /> 103 <link href="/index.php/component/joomrss/kx-105-featured-events?Itemid=101" rel="alternate" type="application/rss+xml" title="KX105 Featured Events" /> 104 <link href="/index.php/component/joomrss/kx-105-live-on-location?Itemid=101" rel="alternate" type="application/rss+xml" title="KX105 Live on Location" /> 105 <link href="http://feeds.feedburner.com/" rel="alternate" type="text/html" title="KX 94.7 FM Interviews (audio)" /> 106 107<meta name="viewport" content="width=device-width, initial-scale=1"> 108<style type="text/css"> 109@media (min-width:1024px){header .ttr_title_style, header .ttr_title_style a, header .ttr_title_style a:link, header .ttr_title_style a:visited, header .ttr_title_style a:hover { 110font-size:30px; 111} 112.ttr_slogan_style { 113font-size:18px; 114} 115h1.ttr_block_heading, h2.ttr_block_heading, h3.ttr_block_heading, h4.ttr_block_heading, h5.ttr_block_heading, h6.ttr_block_heading, p.ttr_block_heading { 116font-size:18px; 117color: #4E4E4E;} 118h1.ttr_verticalmenu_heading, h2.ttr_verticalmenu_heading, h3.ttr_verticalmenu_heading, h4.ttr_verticalmenu_heading, h5.ttr_verticalmenu_heading, h6.ttr_verticalmenu_heading, p.ttr_verticalmenu_heading { 119font-size:16px; 120color: #333333;} 121footer#ttr_footer #ttr_copyright a:not(.btn),#ttr_copyright a { 122font-size:px; 123} 124#ttr_footer_designed_by_links span#ttr_footer_designed_by { 125font-size:px; 126} 127 footer#ttr_footer #ttr_footer_designed_by_links a:not(.btn) , footer#ttr_footer_designed_by_links a:link:not(.btn), footer#ttr_footer_designed_by_links a:visited:not(.btn), footer#ttr_footer_designed_by_links a:hover:not(.btn) { 128font-size:16px; 129color: #FFFFFF;} 130} 131} 132</style> 133<style type="text/css"></style><!--[if lte IE 8]> 134<link rel="stylesheet" href="/templates/template_kx105_2025/css/menuie.css" type="text/css"/> 135<link rel="stylesheet" href="/templates/template_kx105_2025/css/vmenuie.css" type="text/css"/> 136<![endif]--> 137<!--[if IE 7]> 138<style type="text/css" media="screen"> 139#ttr_vmenu_items li.ttr_vmenu_items_parent {display:inline;} 140</style> 141<![endif]--> 142<!--[if lt IE 9]> 143$doc->addScript($template_path.'/js/html5shiv.js'); 144$doc->addScript($template_path.'/js/respond.js'); 145<![endif]--> 146</head> 147<body> 148<div class="totopshow"> 149<a href="#" class="back-to-top"><img alt="Back to Top" src="https://kx105.fm/templates/template_kx105_2025/images/gototop.png"/></a> 150</div> 151<div class="margin_collapsetop"></div> 152<div class="ttr_banner_header"> 153</div> 154<div class="margin_collapsetop"></div> 155<header id="ttr_header"> 156<div class="margin_collapsetop"></div> 157<div id="ttr_header_inner"> 158<div class="ttr_header_element_alignment container g-0"> 159<div class="ttr_images_container"> 160</div> 161</div> 162<div class="ttr_images_container"> 163<div class="ttr_headershape01"> 164<div class="html_content"><p style="margin:9px 0px 5px 0px;text-align:Center; display:block; line-height:1.08em;"><a href="/" target="_self" class="tt_link" target="_self"><span style="font-family:'Trebuchet MS';font-size:0.9em;color:rgba(255,255,255,1);">KX 105</span><span style="font-family:'Trebuchet MS';font-size:0.9em;color:rgba(255,255,255,1);"> </span><span style="font-family:'Trebuchet MS';font-size:0.9em;color:rgba(255,255,255,1);">New Country FM</span></a></p></div> 165</div> 166<div class="ttr_headershape02"> 167<div class="html_content"><p style="margin:9px 0px 5px 0px;text-align:Center; display:block; line-height:1.08em;color:rgba(51,51,51,1);"><a href="https://www.powerofradio.ca/index.php/stations/" target="_blank" class="tt_link" href="https://www.powerofradio.ca/index.php/stations/" target="_blank"><span style="font-family:'Trebuchet MS';font-size:0.9em;color:rgba(255,255,255,1);">Advertise With Us!</span></a></p></div> 168</div> 169<div class="ttr_header_logo "> 170</div> 171</div> 172</div> 173</header> 174<div class="ttr_banner_header"> 175<div class="ttr_banner_header_inner_below_widget_container"> 176<div class="ttr_banner_header_inner_below0 container row g-0"> 177<div class="cell1 col-xxl-2 col-xl-2 col-lg-6 col-md-6 col-sm-6 col-xs-1 col-1" style="background-color:transparent;"> 178 179</div> 180<div class="cell2 col-xxl-8 col-xl-8 col-lg-12 col-md-12 col-sm-12 col-xs-10 col-10"> 181<div> 182<div class="headerbelowcolumn2"> 183<div class="ttr_block_parent"><div class="margin_collapsetop"></div><div class="ttr_block"><div class="margin_collapsetop"></div><div class="ttr_block_without_header"></div><div class="ttr_block_content"> 184<div class="ad-container" 185 data-adrefresh-module-id="262" 186 data-ad-unit-id="div-gpt-ad-1745097654384-0" 187 data-ad-slot-path="/69289300/CKQMLEADER" 188 data-refresh-interval="60"> 189 <div id="div-gpt-ad-1745097654384-0" style="min-height: 90px;"></div> 190</div></div></div><div class="margin_collapsetop"></div></div> 191</div> 192</div> 193</div> 194<div class=" visible-lg-block d-lg-block visible-md-block d-md-block visible-sm-block d-sm-block" style="clear:both;width:0;"></div> 195<div class="cell3 col-xxl-2 col-xl-2 col-lg-6 col-md-6 col-sm-6 col-xs-1 col-1" style="background-color:transparent;"> 196 197</div> 198<div class="d-xxl-block d-xl-block visible-xs-block d-block" style="clear:both;width:0;"></div> 199<div class=" d-xxl-block d-xl-block visible-lg-block d-lg-block visible-md-block d-md-block visible-sm-block d-sm-block visible-xs-block d-block" style="clear:both;"></div> 200</div> 201</div> 202<div style="clear: both;"></div> 203</div> 204<div class="ttr_banner_menu"> 205<div class="ttr_banner_menu_inner_above_widget_container"> 206<div class="ttr_banner_menu_inner_above0 container row g-0"> 207<div class="cell1 col-xxl-6 col-xl-6 col-lg-6 col-md-6 col-sm-6 col-xs-12 col-12"> 208<div> 209<div class="menuabovecolumn1"> 210<div class="ttr_block_parent"><div class="margin_collapsetop"></div><div class="ttr_blockhidemobl"><div class="margin_collapsetop"></div><div class="ttr_block_without_header"></div><div class="ttr_block_content"> 211<div id="mod-custom124" class="mod-custom custom"> 212 <p> </p> 213<p><img src="/images/logo/logo_kx105_600_shadow.png" alt="logo 885thelake web420" width="493" height="220" style="margin: 10px auto; display: block;" /></p></div> 214</div></div><div class="margin_collapsetop"></div></div><div class="ttr_block_parent"><div class="margin_collapsetop"></div><div class="ttr_blockhidemobl"><div class="margin_collapsetop"></div><div class="ttr_block_without_header"></div><div class="ttr_block_content"> 215<div id="mod-custom169" class="mod-custom custom"> 216 <div class="socialblock"> 217<p style="text-align: center;"><a href="https://www.facebook.com/profile.php?id=61579895882583" target="_blank" rel="noopener"><img src="/images/icons/icon_facebook.png" alt="icon facebook" width="45" height="45" class="social-link" style="margin: 10px;" /></a> <a href="https://www.instagram.com/kx105fm/" target="_blank" rel="noopener"><img src="/images/icons/icon_instagram.png" alt="icon instagram" width="45" height="45" class="social-link" style="margin: 10px;" /></a> <!-- <img src="/images/icons/icon_youtube.png" alt="icon youtube" width="45" height="45" class="social-link" style="margin: 10px;" /> --> <a href="https://x.com/KX105FM" target="_blank" rel="noopener"><img src="/images/icons/icon_twitter.png" alt="icon twitter" width="45" height="45" class="social-link" style="margin: 10px;" /></a> <!-- <img src="/images/icons/icon_tiktok.png" alt="icon tiktok" width="45" height="45" class="social-link" style="margin: 10px;" /> --></p> 218</div> 219<p> </p> 220<style> 221 .social-link { 222 width: 50px !important; 223 height: 50px !important; 224 transition: transform 0.2s !important; 225 } 226 227 .social-link:hover { 228 transform: scale(1.1) !important; 229 } 230</style></div> 231</div></div><div class="margin_collapsetop"></div></div><div class="ttr_block_parent"><div class="margin_collapsetop"></div><div class="ttr_blockhidemobl"><div class="margin_collapsetop"></div><div class="ttr_block_without_header"></div><div class="ttr_block_content"> 232<div id="mod-custom147" class="mod-custom custom"> 233 <div id="mc_embed_shell"> 234<style type="text/css"> 235 #subbox { 236 display: block; 237 width: 400px !important; 238 margin-left: auto !important; 239 margin-right: auto !important; 240 } 241 242 #mc_embed_signup { 243 background: Transparent; 244 false; 245 clear: left; 246 font: 14px Helvetica, Arial, sans-serif; 247 width: 100%;
248 color: #fff; 249 text-shadow: 2px 2px rgba(0, 0, 0, 0.8); 250 } 251 </style> 252<div id="mc_embed_signup"><form action="https://kx105.us13.list-manage.com/subscribe/post?u=bf187c0367808baa11a7eeb02&id=329a128803&f_id=0035f1edf0" method="post" name="mc-embedded-subscribe-form" target="_blank" id="mc-embedded-subscribe-form" class="validate"> 253<div id="mc_embed_signup_scroll"> 254<h4 style="color: #ffffff;">Sign up for weekly KXtras!</h4> 255<div class="indicates-required"><span class="asterisk">*</span> indicates required</div> 256<div class="mc-field-group"><label for="mce-EMAIL">Email Address <span class="asterisk">*</span></label> <input name="EMAIL" required="" type="email" value="" id="mce-EMAIL" class="required email" /></div> 257<div id="mce-responses" class="clear"> 258<div id="mce-error-response" class="response" style="display: none;"> </div> 259<div id="mce-success-response" class="response" style="display: none;"> </div> 260</div> 261<div style="position: absolute; left: -5000px;" aria-hidden="true"><input name="b_bf187c0367808baa11a7eeb02_329a128803" type="text" value="" tabindex="-1" /></div> 262<div class="clear" style="max-width: 360px!important;"><input name="subscribe" type="submit" value="Subscribe" id="mc-embedded-subscribe" class="button" /></div> 263</div> 264</form></div>
265<script type="text/javascript"> 266 (function($) { 267 window.fnames = new Array(); 268 window.ftypes = new Array(); 269 fnames[0] = 'EMAIL'; 270 ftypes[0] = 'email'; 271 fnames[1] = 'FNAME'; 272 ftypes[1] = 'text'; 273 fnames[2] = 'LNAME'; 274 ftypes[2] = 'text'; 275 fnames[3] = 'PHONE'; 276 ftypes[3] = 'phone'; 277 fnames[4] = 'ADDY'; 278 ftypes[4] = 'address'; 279 fnames[5] = 'BDAY'; 280 ftypes[5] = 'birthday'; 281 }(jQuery)); 282 283 </script>
283 284</div> 285<p> </p> 286<p> </p></div> 287</div></div><div class="margin_collapsetop"></div></div> 288</div> 289</div> 290</div> 291<div class="cell2 col-xxl-6 col-xl-6 col-lg-6 col-md-6 col-sm-6 col-xs-12 col-12"> 292<div> 293<div class="menuabovecolumn2"> 294<div class="ttr_block_parent"><div class="margin_collapsetop"></div><div class="ttr_blockhidedesk"><div class="margin_collapsetop"></div><div class="ttr_block_without_header"></div><div class="ttr_block_content"> 295<div id="mod-custom283" class="mod-custom custom"> 296 <p> </p> 297<p><img src="/images/logo/logo_kx105_600_shadow.png" alt="logo 885thelake web420" width="493" height="220" style="margin: 10px auto; display: block;" /></p></div> 298</div></div><div class="margin_collapsetop"></div></div><div class="ttr_block_parent"><div class="margin_collapsetop"></div><div class="ttr_block"><div class="margin_collapsetop"></div><div class="ttr_block_without_header"></div><div class="ttr_block_content"> 299<div id="mod-custom130" class="mod-custom custom"> 300 <p> </p> 301<p><a href="/index.php/listen-live" target="_blank" rel="noopener" class="llbutton" title="Listen Live to KX105"></a></p> 302<p> </p> 303<p style="text-align: center;"><a href="https://www.amazon.ca/dp/B0F7LFWGTC/" target="_blank" rel="noopener"><img src="/images/icons/icon_alexaamazon.png" alt="icon alexaamazon" width="50" height="50" class="social-link" /></a> <a href="https://radioplayer.ca/app/" target="_blank" rel="noopener"><img src="/images/icons/icon_radioplayercanada.png" alt="icon radioplayercanada" width="50" height="50" class="social-link" /></a> <a href="https://tunein.com/radio/KX-105-1051-s342919/" target="_blank" rel="noopener"><img src="/images/icons/icon_tune-in.png" alt="icon tune in" width="50" height="50" class="social-link" /></a> <a href="https://apps.apple.com/us/app/kx105-fm/id6745154646" target="_blank" rel="noopener"><img src="/images/icons/icon_apple-appstore.png" alt="icon apple appstore" width="50" height="50" class="social-link" /></a> <a href="https://play.google.com/store/apps/details?id=fm.kx105.app" target="_blank" rel="noopener"><img src="/images/icons/icon_android.png" alt="icon android" width="50" height="50" class="social-link" /></a></p> 304<style> 305 .social-link { 306 border-radius: 15px; 307 } 308</style></div> 309</div></div><div class="margin_collapsetop"></div></div><div class="moduletable "> 310 311<div id="mod-nowplaying-217" class="mod-nowplaying dark-theme" data-module-id="217"> 312 <div class="player"> 313 <div class="now-playing"> 314 <div data-role="details"> 315 <div class="album-art" data-role="albumart"> 316 <!-- Image loaded dynamically via JS --> 317 </div> 318 <div class="track-info"> 319 <span class="artist" data-role="artist"></span> 320 <span class="song-title_now" data-role="title"></span> 321 </div> 322 </div> 323 <div class="buy-links"> 324 <a class="buy-link" data-role="itunes-link" href="#" target="_blank" rel="noopener noreferrer" style="display: none;"> 325 <img src="https://kx105.fm/modules/mod_nowplaying/media/itunes.png" alt="Buy on iTunes" /> 326 </a> 327 <a class="buy-link" data-role="amazon-link" href="#" target="_blank" rel="noopener noreferrer" style="display: none;"> 328 <img src="https://kx105.fm/modules/mod_nowplaying/media/amazonmusic-icon.png" alt="Buy on Amazon Music" /> 329 </a> 330 <a class="buy-link" data-role="youtube-link" href="#" target="_blank" rel="noopener noreferrer" style="display: none;"> 331 <img src="https://kx105.fm/modules/mod_nowplaying/media/icon_youtube.png" alt="Listen on YouTube Music" /> 332 </a> 333 <a class="buy-link" data-role="spotify-link" href="#" target="_blank" rel="noopener noreferrer" style="display: none;"> 334 <img src="https://kx105.fm/modules/mod_nowplaying/media/spotify-icon.png" alt="Listen on Spotify" /> 335 </a> 336 </div> 337 </div> 338 </div> 339</div> 340</div> 341<div class="moduletable jockrot"> 342 <div class="mod-onairnow" data-module-id="218"> 343 <div id="onairnow-container-218" data-role="onairnow-container"><div class='onairclass'> 344 <img class='ver_img' src='https://kx105.fm/images/jock-rotator/evenings.jpg' alt='On-Air' width='120' height='120'/> 345 <div class='text-container'>
346 <span style='color:#ffffff;'>01-Oct | Thursday </span> 347 <span style='color:#ffffff;'>18:00 - 22:59</span> 348 <span style='color:#ffffff;'><b>KX105 Evenings</b> </span><br /><br /> 349 <span style='color:#ffffff;'>with Matty Buller</span> 350 </div> 351 </div></div> 352</div> 353</div> 354 355</div> 356</div> 357</div> 358<div class="d-xxl-block d-xl-block visible-lg-block d-lg-block visible-md-block d-md-block visible-sm-block d-sm-block visible-xs-block d-block" style="clear:both;width:0;"></div> 359<div class=" d-xxl-block d-xl-block visible-lg-block d-lg-block visible-md-block d-md-block visible-sm-block d-sm-block visible-xs-block d-block" style="clear:both;"></div> 360</div> 361</div> 362<div style="clear: both;"></div> 363</div> 364<div class="margin_collapsetop"></div> 365<div id="ttr_menu"> 366<div class="margin_collapsetop"></div> 367<nav class="navbar-default navbar-expand-md navbar"> 368<div id="ttr_menu_inner_in"> 369<div class="ttr_menu_element_alignment container g-0"> 370</div> 371<div id="navigationmenu"> 372<div class="navbar-header"> 373<button id="nav-expander" data-bs-target="#nav_menu" data-bs-toggle="collapse" class="navbar-toggle" type="button"> 374<span class="ttr_menu_toggle_button"> 375<span class="sr-only"> 376</span> 377<span class="icon-bar navbar-toggler-icon"> 378</span> 379<span class="icon-bar navbar-toggler-icon"> 380</span> 381<span class="icon-bar navbar-toggler-icon"> 382</span> 383</span> 384<span class="ttr_menu_button_text"> 385Menu 386</span> 387</button> 388</div> 389<div id="nav_menu" class="menu-center collapse navbar-collapse nav-menu"> 390<ul class="ttr_menu_items nav navbar-nav nav-center "> 391<li class="ttr_menu_items_parent active dropdown"><a class="ttr_menu_items_parent_link_active " href="/index.php" ><span class="menuchildicon"></span>Home</a><hr class="horiz_separator" /></li><li class="ttr_menu_items_parent dropdown"><a class="ttr_menu_items_parent_link " href="/index.php/kx105-kxtras" ><span class="menuchildicon"></span>KXtras</a><hr class="horiz_separator" /></li><li class="ttr_menu_items_parent dropdown"><a class="ttr_menu_items_parent_link " href="/index.php/kx105-concerts" ><span class="menuchildicon"></span>Concerts</a><hr class="horiz_separator" /></li><li class="ttr_menu_items_parent dropdown"><span 392 class="ttr_menu_items_parent_link_arrow separator " >Featured</span> 393<hr class="horiz_separator" /><ul role="menu" class="child dropdown-menu"><li ><a href="/index.php/featured/featured-events" ><span class="menuchildicon"></span>Featured Events</a><hr class="separator" /></li><li ><a href="/index.php/featured/kx-kids" ><span class="menuchildicon"></span>KX Kids</a><hr class="separator" /></li></ul></li><li class="ttr_menu_items_parent dropdown"><span 394 class="ttr_menu_items_parent_link_arrow separator " >Community</span> 395<hr class="horiz_separator" /><ul role="menu" class="child dropdown-menu"><li ><a href="/index.php/community/where-well-be" ><span class="menuchildicon"></span>Where We'll Be</a><hr class="separator" /></li><li ><a href="/index.php/community/kx105-events" ><span class="menuchildicon"></span>Community Calendar</a><hr class="separator" /></li><li ><a href="/index.php/community/in-your-community" ><span class="menuchildicon"></span>In Your Community</a><hr class="separator" /></li><li ><a href="https://www.onthelocks.ca/" target="_blank" ><span class="menuchildicon"></span>Add Your Events!</a><hr class="separator" /></li></ul></li><li class="ttr_menu_items_parent dropdown"><span 396 class="ttr_menu_items_parent_link_arrow separator " >On-Demand</span> 397<hr class="horiz_separator" /><ul role="menu" class="child dropdown-menu"><li ><a href="/index.php/on-demand/kx105-podcasts" ><span class="menuchildicon"></span>KX 105 Audio On Demand</a><hr class="separator" /></li><li ><a href="/index.php/on-demand/kx105-videos" ><span class="menuchildicon"></span>KX 105 Video On Demand</a><hr class="separator" /></li></ul></li><li class="ttr_menu_items_parent dropdown"><a class="ttr_menu_items_parent_link_arrow dropdown-toggle " href="/index.php/on-air" data-bs-toggle="dropdown" ><span class="menuchildicon"></span>On-Air</a><hr class="horiz_separator" /><ul role="menu" class="child dropdown-menu"><li ><a href="/index.php/on-air/ways-to-listen" ><span class="menuchildicon"></span>Ways To Listen</a><hr class="separator" /></li></ul></li><li class="ttr_menu_items_parent dropdown"><a class="ttr_menu_items_parent_link " href="/index.php/search" ><span class="menuchildicon"></span>Search</a><hr class="horiz_separator" /></li><li class="ttr_menu_items_parent dropdown"><a class="ttr_menu_items_parent_link " href="/index.php/storm-desk" ><span class="menuchildicon"></span>Storm Desk</a><hr class="horiz_separator" /></li><li class="ttr_menu_items_parent dropdown"><a class="ttr_menu_items_parent_link " href="/index.php/contact-kx105" ><span class="menuchildicon"></span>Contact Us</a><hr class="horiz_separator" /></li></ul> 398<div style="clear: both;"></div> 399 400</div> 401</div> 402<div class="ttr_images_container"> 403<div class="ttr_menu_logo"> 404</div> 405</div> 406</div> 407</nav> 408</div> 409<div class="ttr_banner_menu"> 410</div> 411<div class="margin_collapsetop"></div> 412<div id="ttr_page" class="container g-0"> 413<div id="ttr_content_and_sidebar_container">
414<div id="ttr_content" class="zero_column" style="width:100%"> 415<div id="ttr_content_margin"> 416<div class="margin_collapsetop"></div> 417<div class="ttr_topcolumn_widget_container"> 418<div class="contenttopcolumn0"> 419<div class="cell1 col-xxl-1 col-xl-1 col-lg-6 col-md-6 col-sm-6 col-xs-12 col-12" style="background-color:transparent;"> 420 421</div> 422<div class=" visible-xs-block d-block" style="clear:both;width:0;"></div> 423<div class="cell2 col-xxl-5 col-xl-5 col-lg-12 col-md-12 col-sm-12 col-xs-12 col-12"> 424<div> 425<div class="topcolumn2"> 426<div class="ttr_block_parent"><div class="margin_collapsetop"></div><div class="ttr_blockslider-hp"><div class="margin_collapsetop"></div><div class="ttr_block_without_header"></div><div class="ttr_block_content"> 427 428<div style="border: 0px !important;"> 429 <div id="djslider-loader110" class="djslider-loader djslider-loader-default" data-animation='{"auto":"1","looponce":"0","transition":"easeInOutElastic","css3transition":"ease-in-out","duration":1000,"delay":4000}' data-djslider='{"id":110,"slider_type":"0","slide_size":600,"visible_slides":"1","direction":"left","show_buttons":"1","show_arrows":"1","preload":"800","css3":"1"}' tabindex="0"> 430 <div id="djslider110" class="djslider djslider-default" style="height: 377px; width: 600px; max-width: 600px !important;"> 431 <div id="slider-container110" class="slider-container" > 432 <ul id="slider110" class="djslider-in"> 433 <li style="margin: 0 0px 0px 0 !important; height: 377px; width: 600px;"> 434 <a href="/index.php/kx105-kxtras/riley-green-at-rbc-amphitheatre" target="_self"> 435 <img class="dj-image" src="/images/contests/kx105_rileygreen_ft_oct2026%20.jpg#joomlaImage://local-images/contests/kx105_rileygreen_ft_oct2026%20.jpg?width=600&height=377" alt="Riley Green - Oct 2" style="width: auto; height: 100%;"/> 436 </a> 437 438 </li> 439 <li style="margin: 0 0px 0px 0 !important; height: 377px; width: 600px;"> 440 <a href="/index.php/kx105-concerts/kx105-presents-gord-bamford-the-venue-peterborough" target="_self"> 441 <img class="dj-image" src="/images/concerts/gordbamfordconcertoctober2026.jpg#joomlaImage://local-images/concerts/gordbamfordconcertoctober2026.jpg?width=600&height=377" alt="Bamford presents - Oct 10 " style="width: auto; height: 100%;"/> 442 </a> 443 444 </li> 445 <li style="margin: 0 0px 0px 0 !important; height: 377px; width: 600px;"> 446 <a href="/index.php/kx105-kxtras/great-canadian-entertainment-shorelines-casino-mega-giveaway" target="_self"> 447 <img class="dj-image" src="/images/contests/kx105_shorelines_mega_oct2026%20.jpg#joomlaImage://local-images/contests/kx105_shorelines_mega_oct2026%20.jpg?width=600&height=377" alt="Shorelines Casino - Oct 16 " style="width: auto; height: 100%;"/> 448 </a> 449 450 </li> 451 <li style="margin: 0 0px 0px 0 !important; height: 377px; width: 600px;"> 452 <a href="/index.php/kx10
4525-kxtras/pizza-huts-pizza-party-at-work" target="_self"> 453 <img class="dj-image" src="/images/contests/pizza-party-105.jpg#joomlaImage://local-images/contests/pizza-party-105.jpg?width=477&height=300" alt="Pizza Hut Pizza Party at Work!" style="width: auto; height: 100%;"/> 454 </a> 455 456 </li> 457 <li style="margin: 0 0px 0px 0 !important; height: 377px; width: 600px;"> 458 <a href="/index.php/kx105-kxtras/kx-105-bag-o-games" target="_self"> 459 <img class="dj-image" src="/images/contests/kxtra_bag-o-games_may2025.jpg#joomlaImage://local-images/contests/kxtra_bag-o-games_may2025.jpg?width=600&height=377" alt="KX105 Bag O' Games" style="width: auto; height: 100%;"/> 460 </a> 461 462 </li> 463 <li style="margin: 0 0px 0px 0 !important; height: 377px; width: 600px;"> 464 <a href="/index.php/kx105-kxtras/the-birthday-line" target="_self"> 465 <img class="dj-image" src="/images/contests/kxtra_kx-birthday-line.jpg#joomlaImage://local-images/contests/kxtra_kx-birthday-line.jpg?width=600&height=377" alt="The Birthday Line" style="width: auto; height: 100%;"/> 466 </a> 467 468 </li> 469 <li style="margin: 0 0px 0px 0 !important; height: 377px; width: 600px;"> 470 <a href="/index.php/kx105-kxtras/kx-105-winsticker-wednesday" target="_self"> 471 <img class="dj-image" src="/images/contests/kxtra_winsticker-wednesdays_kx105.png#joomlaImage://local-images/contests/kxtra_winsticker-wednesdays_kx105.png?width=477&height=300" alt="Winsticker Wednesdays" style="width: auto; height: 100%;"/> 472 </a> 473 474 </li> 475 <li style="margin: 0 0px 0px 0 !important; height: 377px; width: 600px;"> 476 <a href="https://app.kx105.fm/overview/application/device/check/app_id/1" target="_blank"> 477 <img class="dj-image" src="/images/rotator/KX105-Getourapp.jpg#joomlaImage://local-images/rotator/KX105-Getourapp.jpg?width=600&height=377" alt="Get the mobile app!" style="width: auto; height: 100%;"/> 478 </a> 479 480 </li> 481 <li style="margin: 0 0px 0px 0 !important; height: 377px; width: 600px;"> 482 <a href="/index.php/ways-to-listen" target="_self"> 483 <img class="dj-image" src="/images/banners/ways-to-listen.jpg#joomlaImage://local-images/banners/ways-to-listen.jpg?width=477&height=300" alt="Ways To Listen" style="width: auto; height: 100%;"/> 484 </a> 485 486 </li> 487 </ul> 488 </div> 489 <div id="navigation110" class="navigation-container" style="top: 10.610079575597%; margin: 0 1.6666666666667%;"> 490 <img id="prev110" class="prev-button showOnHover" src="/modules/mod_djimageslider/themes/default/images/prev.png" alt="Previous" tabindex="0" /> 491 <img id="next110" class="next-button showOnHover" src="/modules/mod_djimageslider/themes/default/images/next.png" alt="Next" tabindex="0" /> 492 <img id="play110" class="play-button showOnHover" src="/modules/mod_djimageslider/themes/default/images/play.png" alt="Play" tabindex="0" />
493 <img id="pause110" class="pause-button showOnHover" src="/modules/mod_djimageslider/themes/default/images/pause.png" alt="Pause" tabindex="0" /> 494 </div> 495 </div> 496 </div> 497</div> 498<div class="djslider-end" style="clear: both" tabindex="0"></div></div></div><div class="margin_collapsetop"></div></div><div class="ttr_block_parent"><div class="margin_collapsetop"></div><div class="ttr_block"><div class="margin_collapsetop"></div><div class="ttr_block_header"><h3 class="ttr_block_heading">Featured Audio from KX105 FM <!-- START: Snippets --><span class="seeallfont"><a href="/index.php/on-demand/kx105-podcasts">view all...</a></span><!-- END: Snippets --></h3></div><div class="ttr_block_content"><div class="mod-dripods flat-style" style="color: #001f3f; text-align: center;"> 499 <div class="station-info"> 500 <img src="/" alt="" class="station-logo"/> 501 <h2></h2> 502 </div> 503 <div class="episodes"> 504 <div class="episode"> 505 <img src="https://streamb-podcasts.s3.amazonaws.com/streamb-podcasts/artwork/durhamradio/9ebbc48b-749c-491b-a5eb-72b25f5231ef/a2a74cf4-56bc-42c0-a39c-f2137d258b68/1788394481-39802-cowboy-up-tour-square-poster-ptbo.jpg" alt="Elyse Saunders Interview" class="episode-artwork"/> 506 <h3>Elyse Saunders Interview</h3> 507 <audio controls class="episode-audio"> 508 <source src="https://podcasts.streamb.live/streamb-podcasts/audio/durhamradio/9ebbc48b-749c-491b-a5eb-72b25f5231ef/a2a74cf4-56bc-42c0-a39c-f2137d258b68/1788394473-42015-elyse-saunders-interview.mp3?awCollectionId=MDsbXes8&awEpisodeId=UExrzYlA" type="audio/mpeg"> 509 </audio> 510 <p>Elyse Saunders was born and raised in Peterborough, and has spent years building a career that now stretches from her hometown roots to Nashville. 511A multi-time CMAOntario Award winner, Saunders has earned millions of streams, charted at Canadian country radio and developed a reputation as both a strong live performer and accomplished songwriter. Her music blends modern country production with the storytelling and energy of the genreâs â90s influences, while songs like âNever Have I Ever,â âMending Heart,â âHeartbreak Rodeoâ and âCowboy Upâ have helped introduce her to a growing audience in Canada and beyond. 512Her latest chapter includes a move to Nashville, new music and her Cowboy Up Tour, which brings her back home to the Venue in Peterborough on October 9th. 513In this interview, Matty Buller talks with Elyse about her journey from playing local stages as a teenager to building a full-time career in country music, life and songwriting in Nashville, the story behind âCowboy Up,â and whatâs next.</p> 514 </div> 515 </div> 516</div></div></div><div class="margin_collapsetop"></div></div> 517</div> 518</div> 519</div> 520<div class=" visible-lg-block d-lg-block visible-md-block d-md-block visible-sm-block d-sm-block visible-xs-block d-block" style="clear:both;width:0;"></div> 521<div class="cell3 col-xxl-5 col-xl-5 col-lg-12 col-md-12 col-sm-12 col-xs-12 col-12"> 522<div> 523<div class="topcolumn3"> 524<div class="ttr_block_parent"><div class="margin_collapsetop"></div><div class="ttr_block"><div class="margin_collapsetop"></div><div class="ttr_block_without_header"></div><div class="ttr_block_content"> 525<div class="ad-container" 526 data-adrefresh-module-id="263" 527 data-ad-unit-id="div-gpt-ad-1745098367054-0" 528 data-ad-slot-path="/69289300/CKQMBIGBOX" 529 data-refresh-interval="60"> 530 <div id="div-gpt-ad-1745098367054-0" style="min-height: 90px;"></div> 531</div></div></div><div class="margin_collapsetop"></div></div><div class="ttr_block_parent"><div class="margin_collapsetop"></div><div class="ttr_block"><div class="margin_collapsetop"></div><div class="ttr_block_header"><h3 class="ttr_block_heading">Recently Played Songs <!-- START: Snippets --><span class="seeallfont"><a href="/index.php/listen-live" target="_blank" rel="noopener">
531view all...</a></span><!-- END: Snippets --></h3></div><div class="ttr_block_content">
532<script type="text/javascript"> 533 (function() { 534 function refreshSongs214() { 535 const songList = document.getElementById('song-list-214'); 536 const spinner = document.getElementById('loading-spinner-214'); 537 538 if (!songList || !spinner) { 539 return; 540 } 541 542 spinner.style.display = 'block'; 543 544 fetch("https:\/\/kx105.fm\/index.php?option=com_ajax&module=songhistory&format=raw&method=getSongs&module_id=214&song_count=5", { cache: 'no-store' }) 545 .then(response => { 546 if (!response.ok) { 547 throw new Error('Network response was not ok'); 548 } 549 return response.text(); 550 }) 551 .then(data => { 552 spinner.style.display = 'none'; 553 songList.innerHTML = data; 554 }) 555 .catch(error => { 556 console.error('Error fetching song list:', error); 557 spinner.style.display = 'none'; 558 }); 559 } 560 561 window['refreshSongs214'] = refreshSongs214; 562 })(); 563</script>
563 564 565<div id="mod_songhistory_214" class="mod_songhistory light"> 566 <div class="refresh-link-container"> 567 <a href="javascript:void(0);" onclick="window.refreshSongs214 && window.refreshSongs214()" class="refresh-link">Refresh Song List</a> 568 </div> 569 <div id="loading-spinner-214" class="loading-spinner"> 570 <img src="/images/logo/circle-logo_kx105.png#joomlaImage://local-images/logo/circle-logo_kx105.png?width=512&height=512" alt="Loading..."/> 571 </div> 572 <div id="song-list-214"> 573 574<div class="song-item"> 575 <img src="//albumart.leanplayer.com/th/75/the-zac-brown-band-chicken-fried.jpg" alt="CHICKEN FRIED" class="album-art_songs" onerror="this.onerror=null;this.src='https://kx105.fm/modules/mod_songhistory/media/default-image.jpg';"/> 576 <div class="song-details-wrapper"> 577 <div class="song-info"> 578 <strong class="song-artist">THE ZAC BROWN BAND</strong><br> 579 <span class="song-title">CHICKEN FRIED</span><br> 580 <small class="song-timestamp">7:41 PM</small> 581 </div> 582 <div class="purchase-buttons"> 583 <a href="https://music.apple.com/ca/album/chicken-fried/1585172564?i=1585172570&uo=4&partnerId=11&at=1010lp6o" class="purchase-link" target="_blank" rel="noopener noreferrer"> 584 <img src="https://kx105.fm/modules/mod_songhistory/media/itunes-icon.png" alt="iTunes" class="button-image"/> 585 </a> 586 <a href="https://open.spotify.com/search/THE%20ZAC%20BROWN%20BAND%20CHICKEN%20FRIED" class="purchase-link" target="_blank" rel="noopener noreferrer"> 587 <img src="https://kx105.fm/modules/mod_songhistory/media/spotify-icon.png" alt="Spotify" class="button-image"/> 588 </a> 589 <a href="https://music.amazon.com/search/THE%20ZAC%20BROWN%20BAND%20CHICKEN%20FRIED" class="purchase-link" target="_blank" rel="noopener noreferrer"> 590 <img src="https://kx105.fm/modules/mod_songhistory/media/amazonmusic-icon.png" alt="Amazon" class="button-image"/> 591 </a> 592 <a href="https://music.youtube.com/search?q=THE%20ZAC%20BROWN%20BAND%20CHICKEN%20FRIED" class="purchase-link" target="_blank" rel="noopener noreferrer"> 593 <img src="https://kx105.fm/modules/mod_songhistory/media/icon_youtube.png" alt="YouTube Music" class="button-image"/> 594 </a> 595 </div> 596 </div> 597</div> 598<div class="song-item"> 599 <img src="//albumart.leanplayer.com/ko/75/koe-wetzel-and-jessie-murph-high-road.jpg" alt="HIGH ROAD" class="album-art_songs" onerror="this.onerror=null;this.src='https://kx105.fm/modules/mod_songhistory/media/default-image.jpg';"/> 600 <div class="song-details-wrapper"> 601 <div class="song-info"> 602 <strong class="song-artist">KOE WETZEL AND JESSIE MURPH</strong><br> 603 <span class="song-title">HIGH ROAD</span><br> 604 <small class="song-timestamp">7:28 PM</small> 605 </div> 606 <div class="purchase-buttons"> 607 <a href="https://music.apple.com/ca/album/high-road/1766787416?i=1766787478&uo=4&partnerId=11&at=1010lp6o" class="purchase-link" target="_blank" rel="noopener noreferrer"> 608 <img src="https://kx105.fm/modules/mod_songhistory/media/itunes-icon.png" alt="iTunes" class="button-image"/> 609 </a> 610 <a href="https://open.spotify.com/search/KOE%20WETZEL%20AND%20JESSIE%20MURPH%20HIGH%20ROAD" class="purchase-link" target="_blank" rel="noopener noreferrer"> 611 <img src="https://kx105.fm/modules/mod_songhistory/media/spotify-icon.png" alt="Spotify" class="button-image"/> 612 </a> 613 <a href="https://music.amazon.com/search/KOE%20WETZEL%20AND%20JESSIE%20MURPH%20HIGH%20ROAD" class="purchase-link" target="_blank" rel="noopener noreferrer"> 614 <img src="https://kx105.fm/modules/mod_songhistory/media/amazonmusic-icon.png" alt="Amazon" class="button-image"/> 615 </a> 616 <a href="https://music.youtube.com/search?q=KOE%20WETZEL%20AND%20JESSIE%20MURPH%20HIGH%20ROAD" class="purchase-link" target="_blank" rel="noopener noreferrer"> 617 <img src="https://kx105.fm/modules/mod_songhistory/media/icon_youtube.png" alt="YouTube Music" class="button-image"/> 618 </a> 619 </div> 620 </div> 621</div> 622<div class="song-item"> 623 <img src="//albumart.leanplayer.com/ty/75/tyler-joe-miller-shoulda-known-better.jpg" alt="SHOULDA KNOWN BETTER" class="album-art_songs" onerror="this.onerror=null;this.src='https://kx105.fm/modules/mod_songhistory/media/default-image.jpg';"/> 624 <div class="song-details-wrapper"> 625 <div class="song-info"> 626 <strong class="song-artist">TYLER JOE MILLER</strong><br>
627 <span class="song-title">SHOULDA KNOWN BETTER</span><br> 628 <small class="song-timestamp">7:12 PM</small> 629 </div> 630 <div class="purchase-buttons"> 631 <a href="https://music.apple.com/ca/album/shoulda-known-better/1716621165?i=1716621166&uo=4&partnerId=11&at=1010lp6o" class="purchase-link" target="_blank" rel="noopener noreferrer"> 632 <img src="https://kx105.fm/modules/mod_songhistory/media/itunes-icon.png" alt="iTunes" class="button-image"/> 633 </a> 634 <a href="https://open.spotify.com/search/TYLER%20JOE%20MILLER%20SHOULDA%20KNOWN%20BETTER" class="purchase-link" target="_blank" rel="noopener noreferrer"> 635 <img src="https://kx105.fm/modules/mod_songhistory/media/spotify-icon.png" alt="Spotify" class="button-image"/> 636 </a> 637 <a href="https://music.amazon.com/search/TYLER%20JOE%20MILLER%20SHOULDA%20KNOWN%20BETTER" class="purchase-link" target="_blank" rel="noopener noreferrer"> 638 <img src="https://kx105.fm/modules/mod_songhistory/media/amazonmusic-icon.png" alt="Amazon" class="button-image"/> 639 </a> 640 <a href="https://music.youtube.com/search?q=TYLER%20JOE%20MILLER%20SHOULDA%20KNOWN%20BETTER" class="purchase-link" target="_blank" rel="noopener noreferrer"> 641 <img src="https://kx105.fm/modules/mod_songhistory/media/icon_youtube.png" alt="YouTube Music" class="button-image"/> 642 </a> 643 </div> 644 </div> 645</div> 646<div class="song-item"> 647 <img src="//albumart.leanplayer.com/mo/75/morgan-wallen-been-by-now.jpg" alt="BEEN BY NOW" class="album-art_songs" onerror="this.onerror=null;this.src='https://kx105.fm/modules/mod_songhistory/media/default-image.jpg';"/> 648 <div class="song-details-wrapper"> 649 <div class="song-info"> 650 <strong class="song-artist">MORGAN WALLEN</strong><br> 651 <span class="song-title">BEEN BY NOW</span><br> 652 <small class="song-timestamp">7:08 PM</small> 653 </div> 654 <div class="purchase-buttons"> 655 <a href="https://music.apple.com/ca/album/been-by-now/6792676858?i=6792676860&uo=4&partnerId=11&at=1010lp6o" class="purchase-link" target="_blank" rel="noopener noreferrer"> 656 <img src="https://kx105.fm/modules/mod_songhistory/media/itunes-icon.png" alt="iTunes" class="button-image"/> 657 </a> 658 <a href="https://open.spotify.com/search/MORGAN%20WALLEN%20BEEN%20BY%20NOW" class="purchase-link" target="_blank" rel="noopener noreferrer"> 659 <img src="https://kx105.fm/modules/mod_songhistory/media/spotify-icon.png" alt="Spotify" class="button-image"/> 660 </a> 661 <a href="https://music.amazon.com/search/MORGAN%20WALLEN%20BEEN%20BY%20NOW" class="purchase-link" target="_blank" rel="noopener noreferrer"> 662 <img src="https://kx105.fm/modules/mod_songhistory/media/amazonmusic-icon.png" alt="Amazon" class="button-image"/> 663 </a> 664 <a href="https://music.youtube.com/search?q=MORGAN%20WALLEN%20BEEN%20BY%20NOW" class="purchase-link" target="_blank" rel="noopener noreferrer"> 665 <img src="https://kx105.fm/modules/mod_songhistory/media/icon_youtube.png" alt="YouTube Music" class="button-image"/> 666 </a> 667 </div> 668 </div> 669</div> 670<div class="song-item"> 671 <img src="//albumart.leanplayer.com/ol/75/old-dominion-making-good-time.jpg" alt="MAKING GOOD TIME" class="album-art_songs" onerror="this.onerror=null;this.src='https://kx105.fm/modules/mod_songhistory/media/default-image.jpg';"/> 672 <div class="song-details-wrapper"> 673 <div class="song-info"> 674 <strong class="song-artist">OLD DOMINION</strong><br>
675 <span class="song-title">MAKING GOOD TIME</span><br> 676 <small class="song-timestamp">6:40 PM</small> 677 </div> 678 <div class="purchase-buttons"> 679 <a href="https://music.apple.com/ca/album/making-good-time/1792083693?i=1792083694&uo=4&partnerId=11&at=1010lp6o" class="purchase-link" target="_blank" rel="noopener noreferrer"> 680 <img src="https://kx105.fm/modules/mod_songhistory/media/itunes-icon.png" alt="iTunes" class="button-image"/> 681 </a> 682 <a href="https://open.spotify.com/search/OLD%20DOMINION%20MAKING%20GOOD%20TIME" class="purchase-link" target="_blank" rel="noopener noreferrer"> 683 <img src="https://kx105.fm/modules/mod_songhistory/media/spotify-icon.png" alt="Spotify" class="button-image"/> 684 </a> 685 <a href="https://music.amazon.com/search/OLD%20DOMINION%20MAKING%20GOOD%20TIME" class="purchase-link" target="_blank" rel="noopener noreferrer"> 686 <img src="https://kx105.fm/modules/mod_songhistory/media/amazonmusic-icon.png" alt="Amazon" class="button-image"/> 687 </a> 688 <a href="https://music.youtube.com/search?q=OLD%20DOMINION%20MAKING%20GOOD%20TIME" class="purchase-link" target="_blank" rel="noopener noreferrer"> 689 <img src="https://kx105.fm/modules/mod_songhistory/media/icon_youtube.png" alt="YouTube Music" class="button-image"/> 690 </a> 691 </div> 692 </div> 693</div> </div> 694</div></div></div><div class="margin_collapsetop"></div></div> 695</div> 696</div> 697</div> 698<div class=" visible-lg-block d-lg-block visible-md-block d-md-block visible-sm-block d-sm-block visible-xs-block d-block" style="clear:both;width:0;"></div> 699<div class="cell4 col-xxl-1 col-xl-1 col-lg-6 col-md-6 col-sm-6 col-xs-12 col-12" style="background-color:transparent;"> 700 701</div> 702<div class="d-xxl-block d-xl-block visible-xs-block d-block" style="clear:both;width:0;"></div> 703<div class=" d-xxl-block d-xl-block visible-lg-block d-lg-block visible-md-block d-md-block visible-sm-block d-sm-block visible-xs-block d-block" style="clear:both;"></div> 704</div> 705</div> 706<div style="clear: both;"></div> 707<div class="ttr_topcolumn_widget_container"> 708<div class="contenttopcolumn3"> 709<div class="cell13 col-xxl-1 col-xl-1 col-lg-6 col-md-6 col-sm-6 col-xs-12 col-12" style="background-color:transparent;"> 710 711</div> 712<div class=" visible-xs-block d-block" style="clear:both;width:0;"></div> 713<div class="cell14 col-xxl-5 col-xl-5 col-lg-12 col-md-12 col-sm-12 col-xs-12 col-12"> 714<div> 715<div class="topcolumn14"> 716<div class="ttr_block_parent"><div class="margin_collapsetop"></div><div class="ttr_block"><div class="margin_collapsetop"></div><div class="ttr_block_header"><h3 class="ttr_block_heading">Where We'll Be <!-- START: Snippets --><span class="seeallfont"><a href="/index.php/community/where-well-be">view all...</a></span><!-- END: Snippets --></h3></div><div class="ttr_block_content"><div class="jtcs_item_wrapper jt-cs" style="padding:10px 10px 10px 10px;"> 717<div class="jtcs255 positioncenter owl-carousel owl-theme slides_container" 718 role="region" 719 aria-label="MOD_JTCS_CAROUSEL_LABEL" 720 aria-live="polite"> 721<div class="slide" 722 style="padding:10px 10px 10px 10px ;margin:0px 0px 0px 0px " 723 data-slide-index="0" 724 role="group" 725 aria-roledescription="slide" 726 aria-label="MOD_JTCS_SLIDE_LABEL"> 727 <div class="jt-inner"> 728 <div class="jt-imagecover" style="float:none;margin-bottom:15px"> 729 <a class="link-image" title="KX105 Delivers Your Donations to Kawartha Food Share" href="/index.php/community/where-well-be/kx105-delivers-your-donations-to-kawartha-food-share" aria-label="MOD_JTCS_VIEW_ARTICLE"><img class="jtcs-image" src="https://kx105.fm//cache/mod_jt_contentslider/d490d7b4576290fa60eb31b5fc917ad1_1489.jpg" width="600" alt="KX105 Delivers Your Donations to Kawartha Food Share" /></a> 730 </div> 731 732 733 734 735 <div class="jt-introtext"> 736 The KX105 events cruiser always accepts donations of non-perishablefood items and will deliver them to Kawartha Food Share on your behalf. 737You can also make a monetary donation at www.kawarthafoodshare.com 738Their buying power can double o... </div> 739 740 <div></div> 741 <div style="clear:both"></div> 742 </div> 743</div> 744<div class="slide" 745 style="padding:10px 10px 10px 10px ;margin:0px 0px 0px 0px "
746 data-slide-index="1" 747 role="group" 748 aria-roledescription="slide" 749 aria-label="MOD_JTCS_SLIDE_LABEL"> 750 <div class="jt-inner"> 751 <div class="jt-imagecover" style="float:none;margin-bottom:15px"> 752 <a class="link-image" title="KX Video Dance Party" href="/index.php/community/where-well-be/kx-video-dance-party" aria-label="MOD_JTCS_VIEW_ARTICLE"><img class="jtcs-image" src="https://kx105.fm//cache/mod_jt_contentslider/d490d7b4576290fa60eb31b5fc917ad1_1312.jpg" width="600" alt="KX Video Dance Party" /></a> 753 </div> 754 755 756 757 758 <div class="jt-introtext"> 759 Want a KX105 Video Dance Party? 760 </div> 761 762 <div></div> 763 <div style="clear:both"></div> 764 </div> 765</div> 766<div class="slide" 767 style="padding:10px 10px 10px 10px ;margin:0px 0px 0px 0px " 768 data-slide-index="2" 769 role="group" 770 aria-roledescription="slide" 771 aria-label="MOD_JTCS_SLIDE_LABEL"> 772 <div class="jt-inner"> 773 <div class="jt-imagecover" style="float:none;margin-bottom:15px"> 774 <a class="link-image" title="You can have KX 105 at YOUR Location!" href="/index.php/community/where-well-be/you-can-have-kx-105-at-your-location" aria-label="MOD_JTCS_VIEW_ARTICLE"><img class="jtcs-image" src="https://kx105.fm//cache/mod_jt_contentslider/d490d7b4576290fa60eb31b5fc917ad1_212.png" alt="You can have KX 105 at YOUR Location!" width="600"/></a> 775 </div> 776 777 778 779 780 <div class="jt-introtext"> 781 782 783 784 785Give your next event a boost, and advertise with KX 105 FM. 786 787 788Learn more about our Live on Location Package. 789 790 </div> 791 792 <div></div> 793 <div style="clear:both"></div> 794 </div> 795</div> 796</div> 797</div> 798<style type="text/css"> 799/* Existing styles */ 800.jtcs255.owl-carousel .owl-nav{justify-content:flex-start} 801.jtcs255.positiontop.owl-carousel .owl-nav{width:100%;position:absolute;top:-40px; bottom:auto;justify-content:flex-start;gap:0 10px;} 802.jtcs255.positioncenter.owl-carousel .owl-nav{width:100%;position:absolute;top:50%; bottom:auto;transform:translateY(-50%);justify-content:space-between; z-index:1; height:0px;} 803.jtcs255.positionbottom.owl-carousel .owl-nav{width:100%;position:absolute;top:auto; bottom:-40px;justify-content:flex-start;gap:0 10px;} 804.jtcs255 .owl-dots {position: relative;bottom:-15px;} 805.jtcs255.owl-carousel .owl-nav.disabled{ display:none} 806.jtcs255.owl-carousel .jt-introtext{ text-align:center} 807/* ADA Compliance: Screen reader only text */ 808.sr-only {position: absolute;width: 1px;height: 1px;padding: 0;margin: -1px;overflow: hidden;clip: rect(0, 0, 0, 0);white-space: nowrap;border-width: 0;} 809/* ADA Compliance: Focus visible styles - only show on keyboard navigation, not mouse clicks */ 810.jtcs255 a:focus-visible, 811.jtcs255 button:focus-visible, 812.jtcs255 .owl-nav button:focus-visible, 813.jtcs255 .owl-dot:focus-visible {outline: 3px solid #4A90E2;outline-offset: 2px;box-shadow: 0 0 0 3px rgba(74, 144, 226, 0.3);} 814/* Remove default focus outline for mouse users */ 815.jtcs255 a:focus:not(:focus-visible), 816.jtcs255 button:focus:not(:focus-visible), 817.jtcs255 .owl-nav button:focus:not(:focus-visible), 818.jtcs255 .owl-dot:focus:not(:focus-visible) {outline: none;box-shadow: none;} 819/* Fallback for browsers without :focus-visible support */ 820.jtcs255 a.keyboard-focus, 821.jtcs255 button.keyboard-focus, 822.jtcs255 .owl-nav button.keyboard-focus, 823.jtcs255 .owl-dot.keyboard-focus {outline: 3px solid #4A90E2 !important;outline-offset: 2px;box-shadow: 0 0 0 3px rgba(74, 144, 226, 0.3) !important;} 824/* ADA Compliance: Ensure focused slide content is visible */ 825.jtcs255 .slide:focus-within {scroll-margin: 20px;} 826/* ADA Compliance: Better button visibility and sizing for touch targets */ 827.jtcs255 .owl-nav button {min-width: 44px;min-height: 44px;display: flex;align-items: center;justify-content: center;} 828.jtcs255 .owl-dot {min-width: 44px;min-height: 44px;} 829/* ADA Compliance: Ensure keyboard focus visibility in carousel navigation */ 830.jtcs255 .owl-nav button:focus-visible {background-color: rgba(74, 144, 226, 0.2) !important;} 831/* ADA Compliance: Show nav buttons whenever keyboard focus is anyw
831here inside 832 the carousel ? Owl hides them with opacity:0 by default until hover, 833 so keyboard users would never see them without this rule. */ 834.jtcs255:focus-within .owl-nav button, 835.jtcs255.keyboard-focused .owl-nav button {opacity: 1 !important;visibility: visible !important;} 836</style>
837<script defer type="text/javascript"> 838jQuery(document).ready(function() { 839 // Focus-visible polyfill: Track if user is using keyboard 840 var isUsingKeyboard = false; 841 842 jQuery(document).on('mousedown', function() { 843 isUsingKeyboard = false; 844 }); 845 846 jQuery(document).on('keydown', function(e) { 847 // Tab, Shift, arrows, Enter, Space indicate keyboard usage 848 if (e.key === 'Tab' || e.key === 'Enter' || e.key === ' ' || 849 e.key === 'ArrowLeft' || e.key === 'ArrowRight' || 850 e.key === 'ArrowUp' || e.key === 'ArrowDown') { 851 isUsingKeyboard = true; 852 } 853 }); 854 855 // Add/remove keyboard-user class for browsers without :focus-visible support 856 jQuery(document).on('focus', '.jtcs255 a, .jtcs255 button, .jtcs255 .owl-nav button, .jtcs255 .owl-dot', function() { 857 if (isUsingKeyboard) { 858 jQuery(this).addClass('keyboard-focus'); 859 } else { 860 jQuery(this).removeClass('keyboard-focus'); 861 } 862 }); 863 864 jQuery(document).on('blur', '.jtcs255 a, .jtcs255 button, .jtcs255 .owl-nav button, .jtcs255 .owl-dot', function() { 865 jQuery(this).removeClass('keyboard-focus'); 866 }); 867 868 var el = jQuery('.jtcs255.owl-carousel'); 869 var carousel; 870 var carouselOptions = { 871 margin: 20, 872 stagePadding: 0, 873 center: true, 874 loop: true, 875 nav: true, 876 navText:["<i class='fas fa-angle-left'></i>","<i class='fas fa-angle-right'></i>"], 877 dots: true, 878 rtl: false, 879 slideBy: '1', 880 autoplay:true, 881 autoplaySpeed:300, 882 smartSpeed:300, 883 autoplayTimeout:4000, 884 autoplayHoverPause:true, 885 mouseDrag: true, 886 touchDrag: true, 887 navSpeed:600, 888 dotsSpeed:600, 889 responsive: { 890 0: { 891 autoplay:true, 892 autoplaySpeed:300, 893 smartSpeed:300, 894 autoplayTimeout:4000, 895 items: 1, 896 rows: 1 }, 897 768: { 898 autoplay:true, 899 autoplaySpeed:300, 900 smartSpeed:300, 901 autoplayTimeout:4000, 902 items: 1, 903 rows:1 }, 904 991: { 905 autoplay:true, 906 autoplaySpeed:300, 907 smartSpeed:300, 908 autoplayTimeout:4000, 909 items:1, 910 rows:1 } 911 }, 912 // ADA Compliance callbacks 913onInitialized: function(event) { 914 addAccessibilityAttributes(); 915 updateOffscreenTabindex(); 916 }, 917 onChanged: function(event) { 918 addAccessibilityAttributes(); 919 updateOffscreenTabindex(); 920 }, 921 onTranslated: function(event) { 922 addAccessibilityAttributes(); 923 updateOffscreenTabindex(); 924 } 925 }; 926 927 // ADA Compliance: Add proper ARIA labels to nav buttons and dots 928 function addAccessibilityAttributes() { 929 var carousel = jQuery('.jtcs255'); 930 var prevBtn = carousel.find('.owl-prev'); 931 var nextBtn = carousel.find('.owl-next'); 932 var dots = carousel.find('.owl-dot'); 933 934 if (prevBtn.length) { 935 prevBtn.attr({ 936 'aria-label': 'MOD_JTCS_PREVIOUS_SLIDE', 937 'role': 'button', 938 'tabindex': '0' 939 }); 940 // Owl adds class="disabled" (not the HTML disabled attribute) at boundaries 941 // ? keep it focusable so Tab reaches it; aria-disabled conveys the state 942 if (prevBtn.hasClass('disabled')) { 943 prevBtn.attr('aria-disabled', 'true'); 944 } else { 945 prevBtn.removeAttr('aria-disabled'); 946 } 947 } 948 949 if (nextBtn.length) { 950 nextBtn.attr({ 951 'aria-label': 'MOD_JTCS_NEXT_SLIDE', 952 'role': 'button', 953 'tabindex': '0' 954 }); 955 if (nextBtn.hasClass('disabled')) { 956 nextBtn.attr('aria-disabled', 'true'); 957 } else { 958 nextBtn.removeAttr('aria-disabled'); 959 } 960 } 961 962 dots.each(function(index) { 963 jQuery(this).attr({ 964 'aria-label': 'MOD_JTCS_GO_TO_SLIDE ' + (index + 1), 965 'role': 'button', 966 'tabindex': '0' 967 }); 968 }); 969 970 // Mark the first visible active slide 971 var activeSlide = carousel.find('.owl-item.active .slide'); 972 carousel.find('.slide').removeAttr('aria-current'); 973 if (activeSlide.length) { 974 activeSlide.first().attr('aria-current', 'true'); 975 } 976 977 // Hide icons from screen readers 978 carousel.find('i[class*="fa"]').attr('aria-hidden', 'true'); 979 } 980 981 // ADA FIX: Remove focusable items from off-screen / cloned slides so Tab 982 // only visits links in the currently visible page, preventing misalignment 983 // and eliminating the extra keystrokes needed to escape the carousel. 984 function updateOffscreenTabindex() {
985 var carousel = jQuery('.jtcs255'); 986 987 // Make everything inside non-active or cloned items unfocusable. 988 // NOTE: .owl-nav and .owl-dots sit outside .owl-item so they are 989 // never touched here ? their tabindex is managed by addAccessibilityAttributes(). 990 carousel.find('.owl-item').each(function() { 991 var item = jQuery(this); 992 var isVisible = item.hasClass('active') && !item.hasClass('cloned'); 993 var focusables = item.find('a, button, input, select, textarea, [tabindex]'); 994 if (isVisible) { 995 // Restore focusability for visible slides 996 focusables.each(function() { 997 var el = jQuery(this); 998 var saved = el.data('saved-tabindex'); 999 if (saved !== undefined) { 1000 if (saved === '0') { 1001 el.removeAttr('tabindex'); 1002 } else { 1003 el.attr('tabindex', saved); 1004 } 1005 el.removeData('saved-tabindex'); 1006 } else if (el.attr('tabindex') === '-1') { 1007 el.removeAttr('tabindex'); 1008 } 1009 }); 1010 } else { 1011 // Remove from tab order for off-screen / cloned items 1012 focusables.each(function() { 1013 var el = jQuery(this); 1014 if (el.attr('tabindex') !== '-1') { 1015 el.data('saved-tabindex', el.attr('tabindex') || '0'); 1016 el.attr('tabindex', '-1'); 1017 } 1018 }); 1019 } 1020 }); 1021 } 1022 1023 // ADA FIX: Keyboard arrow navigation on the carousel region itself, 1024 // without calling owlInstance.to() on focus (which caused misalignment). 1025 var carouselEl = jQuery('.jtcs255'); 1026 carouselEl.on('keydown', function(e) { 1027 var owlInstance = jQuery(this).data('owl.carousel'); 1028 if (!owlInstance) return; 1029 if (e.key === 'ArrowLeft') { e.preventDefault(); owlInstance.prev(); } 1030 if (e.key === 'ArrowRight') { e.preventDefault(); owlInstance.next(); } 1031 }); 1032 1033 // Enter/Space on nav buttons and dots 1034 carouselEl.on('keydown', '.owl-prev, .owl-next, .owl-dot', function(e) { 1035 if (e.key === 'Enter' || e.key === ' ') { 1036 e.preventDefault(); 1037 jQuery(this).trigger('click'); 1038 } 1039 }); 1040 1041 // ADA: Show nav buttons and pause autoplay when keyboard focus enters carousel 1042 carouselEl.on('focusin', function() { 1043 var owlInstance = jQuery(this).data('owl.carousel'); 1044 if (owlInstance) owlInstance.trigger('stop.owl.autoplay'); 1045 // Fallback for browsers with limited :focus-within support 1046 jQuery(this).addClass('keyboard-focused'); 1047 }); 1048 1049 // ADA: Hide nav buttons again when focus leaves the carousel entirely 1050 carouselEl.on('focusout', function() { 1051 var self = this; 1052 // Use setTimeout so the class isn't removed before the next element receives focus 1053 setTimeout(function() { 1054 if (!jQuery(self).find(':focus').length) { 1055 jQuery(self).removeClass('keyboard-focused'); 1056 } 1057 }, 100); 1058 }); 1059 1060 var viewport = function() { 1061 var width; 1062 if (carouselOptions.responsiveBaseElement && carouselOptions.responsiveBaseElement !== window) { 1063 width = jQuery(carouselOptions.responsiveBaseElement).width(); 1064 } else if (window.innerWidth) { 1065 width = window.innerWidth; 1066 } else if (document.documentElement && document.documentElement.clientWidth) { 1067 width = document.documentElement.clientWidth; 1068 } else { 1069 console.warn('Can not detect viewport width.'); 1070 } 1071 return width; 1072 }; 1073 1074 var severalRows = false; 1075 var orderedBreakpoints = []; 1076 for (var breakpoint in carouselOptions.responsive) { 1077 if (carouselOptions.responsive[breakpoint].rows > 1) { 1078 severalRows = true; 1079 } 1080 orderedBreakpoints.push(parseInt(breakpoint)); 1081 } 1082 1083 if (severalRows) { 1084 orderedBreakpoints.sort(function (a, b) { 1085 return b - a; 1086 }); 1087 var slides = el.find('[data-slide-index]'); 1088 var slidesNb = slides.length; 1089 if (slidesNb > 0) { 1090 var rowsNb; 1091 var previousRowsNb = undefined; 1092 var colsNb; 1093 var previousColsNb = undefined; 1094 1095 var updateRowsColsNb = function () { 1096 var width = viewport(); 1097 for (var i = 0; i < orderedBreakpoints.length; i++) { 1098 var breakpoint = orderedBreakpoints[i]; 1099 if (width >= breakpoint || i == (orderedBreakpoints.length - 1)) { 1100 var breakpointSettings = carouselOptions.responsive['' + breakpoint]; 1101 rowsNb = breakpointSettings.rows; 1102 colsNb = breakpointSettings.items; 1103 break; 1104 } 1105 } 1106 }; 1107 1108 var updateCarousel = function () {
1109 updateRowsColsNb(); 1110 1111 if (rowsNb != previousRowsNb || colsNb != previousColsNb) { 1112 var reInit = false; 1113 if (carousel) { 1114 carousel.trigger('destroy.owl.carousel'); 1115 carousel = undefined; 1116 slides = el.find('[data-slide-index]').detach().appendTo(el); 1117 el.find('.fake-col-wrapper').remove(); 1118 reInit = true; 1119 } 1120 1121 var perPage = rowsNb * colsNb; 1122 var pageIndex = Math.floor(slidesNb / perPage); 1123 var fakeColsNb = pageIndex * colsNb + (slidesNb >= (pageIndex * perPage + colsNb) ? colsNb : (slidesNb % colsNb)); 1124 1125 var count = 0; 1126 for (var i = 0; i < fakeColsNb; i++) { 1127 var fakeCol = jQuery('<div class="fake-col-wrapper"></div>').appendTo(el); 1128 for (var j = 0; j < rowsNb; j++) { 1129 var index = Math.floor(count / perPage) * perPage + (i % colsNb) + j * colsNb; 1130 if (index < slidesNb) { 1131 slides.filter('[data-slide-index=' + index + ']').detach().appendTo(fakeCol); 1132 } 1133 count++; 1134 } 1135 } 1136 1137 previousRowsNb = rowsNb; 1138 previousColsNb = colsNb; 1139 1140 if (reInit) { 1141 carousel = el.owlCarousel(carouselOptions); 1142 } 1143 } 1144 }; 1145 1146 jQuery(window).on('resize', updateCarousel); 1147 updateCarousel(); 1148 } 1149 } 1150 1151 carousel = el.owlCarousel(carouselOptions); 1152}); 1153 1154if (typeof lightbox !== 'undefined') { 1155 lightbox.option({ 1156 fadeDuration:300, 1157 fitImagesInViewport:false, 1158 imageFadeDuration: 300, 1159 positionFromTop: 150, 1160 resizeDuration: 150 }); 1161} 1162</script>
1162</div></div><div class="margin_collapsetop"></div></div> 1163</div> 1164</div> 1165</div> 1166<div class=" visible-lg-block d-lg-block visible-md-block d-md-block visible-sm-block d-sm-block visible-xs-block d-block" style="clear:both;width:0;"></div> 1167<div class="cell15 col-xxl-5 col-xl-5 col-lg-12 col-md-12 col-sm-12 col-xs-12 col-12"> 1168<div> 1169<div class="topcolumn15"> 1170<div class="ttr_block_parent"><div class="margin_collapsetop"></div><div class="ttr_block"><div class="margin_collapsetop"></div><div class="ttr_block_header"><h3 class="ttr_block_heading">Featured Events <!-- START: Snippets --><span class="seeallfont"><a href="/index.php/featured/featured-events">view all...</a></span><!-- END: Snippets --></h3></div><div class="ttr_block_content"><div class="jtcs_item_wrapper jt-cs" style="padding:10px 10px 10px 10px;"> 1171<div class="jtcs256 positioncenter owl-carousel owl-theme slides_container" 1172 role="region" 1173 aria-label="MOD_JTCS_CAROUSEL_LABEL" 1174 aria-live="polite"> 1175<div class="slide" 1176 style="padding:10px 10px 10px 10px ;margin:0px 0px 0px 0px " 1177 data-slide-index="0" 1178 role="group" 1179 aria-roledescription="slide" 1180 aria-label="MOD_JTCS_SLIDE_LABEL"> 1181 <div class="jt-inner"> 1182 <div class="jt-imagecover" style="float:none;margin-bottom:15px"> 1183 <a class="link-image" title="See your upcoming event right here!" href="/index.php/featured/featured-events/slap-your-upcoming-event-right-here" aria-label="MOD_JTCS_VIEW_ARTICLE"><img class="jtcs-image" src="https://kx105.fm//cache/mod_jt_contentslider/d490d7b4576290fa60eb31b5fc917ad1_187.png" alt="See your upcoming event right here!" width="600"/></a> 1184 </div> 1185 1186 1187 1188 1189 <div class="jt-introtext"> 1190 1191 1192 1193 1194Give your next event a boost, and advertise with KX 105 FM. 1195 1196 1197Learn more about our Featured Event Package. 1198 1199 </div> 1200 1201 <div></div> 1202 <div style="clear:both"></div> 1203 </div> 1204</div> 1205</div> 1206</div> 1207<style type="text/css"> 1208/* Existing styles */ 1209.jtcs256.owl-carousel .owl-nav{justify-content:flex-start} 1210.jtcs256.positiontop.owl-carousel .owl-nav{width:100%;position:absolute;top:-40px; bottom:auto;justify-content:flex-start;gap:0 10px;} 1211.jtcs256.positioncenter.owl-carousel .owl-nav{width:100%;position:absolute;top:50%; bottom:auto;transform:translateY(-50%);justify-content:space-between; z-index:1; height:0px;} 1212.jtcs256.positionbottom.owl-carousel .owl-nav{width:100%;position:absolute;top:auto; bottom:-40px;justify-content:flex-start;gap:0 10px;} 1213.jtcs256 .owl-dots {position: relative;bottom:-15px;} 1214.jtcs256.owl-carousel .owl-nav.disabled{ display:none} 1215.jtcs256.owl-carousel .jt-introtext{ text-align:center} 1216/* ADA Compliance: Screen reader only text */ 1217.sr-only {position: absolute;width: 1px;height: 1px;padding: 0;margin: -1px;overflow: hidden;clip: rect(0, 0, 0, 0);white-space: nowrap;border-width: 0;} 1218/* ADA Compliance: Focus visible styles - only show on keyboard navigation, not mouse clicks */ 1219.jtcs256 a:focus-visible, 1220.jtcs256 button:focus-visible, 1221.jtcs256 .owl-nav button:focus-visible, 1222.jtcs256 .owl-dot:focus-visible {outline: 3px solid #4A90E2;outline-offset: 2px;box-shadow: 0 0 0 3px rgba(74, 144, 226, 0.3);} 1223/* Remove default focus outline for mouse users */ 1224.jtcs256 a:focus:not(:focus-visible), 1225.jtcs256 button:focus:not(:focus-visible), 1226.jtcs256 .owl-nav button:focus:not(:focus-visible), 1227.jtcs256 .owl-dot:focus:not(:focus-visible) {outline: none;box-shadow: none;} 1228/* Fallback for browsers without :focus-visible support */ 1229.jtcs256 a.keyboard-focus, 1230.jtcs256 button.keyboard-focus, 1231.jtcs256 .owl-nav button.keyboard-focus, 1232.jtcs256 .owl-dot.keyboard-focus {outline: 3px solid #4A90E2 !important;outline-offset: 2px;box-shadow: 0 0 0 3px rgba(74, 144, 226, 0.3) !important;} 1233/* ADA Compliance: Ensure focused slide content is visible */ 1234.jtcs256 .slide:focus-within {scroll-margin: 20px;} 1235/* ADA Compliance: Better button visibility and sizing for touch targets */ 1236.jtcs256 .owl-nav button {min-width: 44px;min-height: 44px;display: flex;align-items: center;justify-content: center;} 1237.jtcs256 .owl-dot {min-width: 44px;min-height: 44px;} 1238/* ADA Compliance: Ensure keyboard focus visibility in carousel navigation */ 1239.jtcs256 .owl-nav button:focus-visible {background-color: rgba(74, 144, 226, 0.2) !important;} 1240/* ADA Compliance: Show nav buttons whenever keyboard focus is anyw
1240here inside 1241 the carousel ? Owl hides them with opacity:0 by default until hover, 1242 so keyboard users would never see them without this rule. */ 1243.jtcs256:focus-within .owl-nav button, 1244.jtcs256.keyboard-focused .owl-nav button {opacity: 1 !important;visibility: visible !important;} 1245</style>
1246<script defer type="text/javascript"> 1247jQuery(document).ready(function() { 1248 // Focus-visible polyfill: Track if user is using keyboard 1249 var isUsingKeyboard = false; 1250 1251 jQuery(document).on('mousedown', function() { 1252 isUsingKeyboard = false; 1253 }); 1254 1255 jQuery(document).on('keydown', function(e) { 1256 // Tab, Shift, arrows, Enter, Space indicate keyboard usage 1257 if (e.key === 'Tab' || e.key === 'Enter' || e.key === ' ' || 1258 e.key === 'ArrowLeft' || e.key === 'ArrowRight' || 1259 e.key === 'ArrowUp' || e.key === 'ArrowDown') { 1260 isUsingKeyboard = true; 1261 } 1262 }); 1263 1264 // Add/remove keyboard-user class for browsers without :focus-visible support 1265 jQuery(document).on('focus', '.jtcs256 a, .jtcs256 button, .jtcs256 .owl-nav button, .jtcs256 .owl-dot', function() { 1266 if (isUsingKeyboard) { 1267 jQuery(this).addClass('keyboard-focus'); 1268 } else { 1269 jQuery(this).removeClass('keyboard-focus'); 1270 } 1271 }); 1272 1273 jQuery(document).on('blur', '.jtcs256 a, .jtcs256 button, .jtcs256 .owl-nav button, .jtcs256 .owl-dot', function() { 1274 jQuery(this).removeClass('keyboard-focus'); 1275 }); 1276 1277 var el = jQuery('.jtcs256.owl-carousel'); 1278 var carousel; 1279 var carouselOptions = { 1280 margin: 20, 1281 stagePadding: 0, 1282 center: true, 1283 loop: true, 1284 nav: true, 1285 navText:["<i class='fas fa-angle-left'></i>","<i class='fas fa-angle-right'></i>"], 1286 dots: true, 1287 rtl: false, 1288 slideBy: '1', 1289 autoplay:true, 1290 autoplaySpeed:300, 1291 smartSpeed:300, 1292 autoplayTimeout:4000, 1293 autoplayHoverPause:true, 1294 mouseDrag: true, 1295 touchDrag: true, 1296 navSpeed:600, 1297 dotsSpeed:600, 1298 responsive: { 1299 0: { 1300 autoplay:true, 1301 autoplaySpeed:300, 1302 smartSpeed:300, 1303 autoplayTimeout:4000, 1304 items: 1, 1305 rows: 1 }, 1306 768: { 1307 autoplay:true, 1308 autoplaySpeed:300, 1309 smartSpeed:300, 1310 autoplayTimeout:4000, 1311 items: 1, 1312 rows:1 }, 1313 991: { 1314 autoplay:true, 1315 autoplaySpeed:300, 1316 smartSpeed:300, 1317 autoplayTimeout:4000, 1318 items:1, 1319 rows:1 } 1320 }, 1321 // ADA Compliance callbacks 1322onInitialized: function(event) { 1323 addAccessibilityAttributes(); 1324 updateOffscreenTabindex(); 1325 }, 1326 onChanged: function(event) { 1327 addAccessibilityAttributes(); 1328 updateOffscreenTabindex(); 1329 }, 1330 onTranslated: function(event) { 1331 addAccessibilityAttributes(); 1332 updateOffscreenTabindex(); 1333 } 1334 }; 1335 1336 // ADA Compliance: Add proper ARIA labels to nav buttons and dots 1337 function addAccessibilityAttributes() { 1338 var carousel = jQuery('.jtcs256'); 1339 var prevBtn = carousel.find('.owl-prev'); 1340 var nextBtn = carousel.find('.owl-next'); 1341 var dots = carousel.find('.owl-dot'); 1342 1343 if (prevBtn.length) { 1344 prevBtn.attr({ 1345 'aria-label': 'MOD_JTCS_PREVIOUS_SLIDE', 1346 'role': 'button', 1347 'tabindex': '0' 1348 }); 1349 // Owl adds class="disabled" (not the HTML disabled attribute) at boundaries 1350 // ? keep it focusable so Tab reaches it; aria-disabled conveys the state 1351 if (prevBtn.hasClass('disabled')) { 1352 prevBtn.attr('aria-disabled', 'true'); 1353 } else { 1354 prevBtn.removeAttr('aria-disabled'); 1355 } 1356 } 1357 1358 if (nextBtn.length) { 1359 nextBtn.attr({ 1360 'aria-label': 'MOD_JTCS_NEXT_SLIDE', 1361 'role': 'button', 1362 'tabindex': '0' 1363 }); 1364 if (nextBtn.hasClass('disabled')) { 1365 nextBtn.attr('aria-disabled', 'true'); 1366 } else { 1367 nextBtn.removeAttr('aria-disabled'); 1368 } 1369 } 1370 1371 dots.each(function(index) { 1372 jQuery(this).attr({ 1373 'aria-label': 'MOD_JTCS_GO_TO_SLIDE ' + (index + 1), 1374 'role': 'button', 1375 'tabindex': '0' 1376 }); 1377 }); 1378 1379 // Mark the first visible active slide 1380 var activeSlide = carousel.find('.owl-item.active .slide'); 1381 carousel.find('.slide').removeAttr('aria-current'); 1382 if (activeSlide.length) { 1383 activeSlide.first().attr('aria-current', 'true'); 1384 } 1385 1386 // Hide icons from screen readers 1387 carousel.find('i[class*="fa"]').attr('aria-hidden', 'true'); 1388 } 1389 1390 // ADA FIX: Remove focusable items from off-screen / cloned slides so Tab 1391 // only visits links in the currently visible page, preventing misalignment 1392 // and eliminating the extra keystrokes needed to escape the carousel. 1393 function updateOffscreenTabindex() {
1394 var carousel = jQuery('.jtcs256'); 1395 1396 // Make everything inside non-active or cloned items unfocusable. 1397 // NOTE: .owl-nav and .owl-dots sit outside .owl-item so they are 1398 // never touched here ? their tabindex is managed by addAccessibilityAttributes(). 1399 carousel.find('.owl-item').each(function() { 1400 var item = jQuery(this); 1401 var isVisible = item.hasClass('active') && !item.hasClass('cloned'); 1402 var focusables = item.find('a, button, input, select, textarea, [tabindex]'); 1403 if (isVisible) { 1404 // Restore focusability for visible slides 1405 focusables.each(function() { 1406 var el = jQuery(this); 1407 var saved = el.data('saved-tabindex'); 1408 if (saved !== undefined) { 1409 if (saved === '0') { 1410 el.removeAttr('tabindex'); 1411 } else { 1412 el.attr('tabindex', saved); 1413 } 1414 el.removeData('saved-tabindex'); 1415 } else if (el.attr('tabindex') === '-1') { 1416 el.removeAttr('tabindex'); 1417 } 1418 }); 1419 } else { 1420 // Remove from tab order for off-screen / cloned items 1421 focusables.each(function() { 1422 var el = jQuery(this); 1423 if (el.attr('tabindex') !== '-1') { 1424 el.data('saved-tabindex', el.attr('tabindex') || '0'); 1425 el.attr('tabindex', '-1'); 1426 } 1427 }); 1428 } 1429 }); 1430 } 1431 1432 // ADA FIX: Keyboard arrow navigation on the carousel region itself, 1433 // without calling owlInstance.to() on focus (which caused misalignment). 1434 var carouselEl = jQuery('.jtcs256'); 1435 carouselEl.on('keydown', function(e) { 1436 var owlInstance = jQuery(this).data('owl.carousel'); 1437 if (!owlInstance) return; 1438 if (e.key === 'ArrowLeft') { e.preventDefault(); owlInstance.prev(); } 1439 if (e.key === 'ArrowRight') { e.preventDefault(); owlInstance.next(); } 1440 }); 1441 1442 // Enter/Space on nav buttons and dots 1443 carouselEl.on('keydown', '.owl-prev, .owl-next, .owl-dot', function(e) { 1444 if (e.key === 'Enter' || e.key === ' ') { 1445 e.preventDefault(); 1446 jQuery(this).trigger('click'); 1447 } 1448 }); 1449 1450 // ADA: Show nav buttons and pause autoplay when keyboard focus enters carousel 1451 carouselEl.on('focusin', function() { 1452 var owlInstance = jQuery(this).data('owl.carousel'); 1453 if (owlInstance) owlInstance.trigger('stop.owl.autoplay'); 1454 // Fallback for browsers with limited :focus-within support 1455 jQuery(this).addClass('keyboard-focused'); 1456 }); 1457 1458 // ADA: Hide nav buttons again when focus leaves the carousel entirely 1459 carouselEl.on('focusout', function() { 1460 var self = this; 1461 // Use setTimeout so the class isn't removed before the next element receives focus 1462 setTimeout(function() { 1463 if (!jQuery(self).find(':focus').length) { 1464 jQuery(self).removeClass('keyboard-focused'); 1465 } 1466 }, 100); 1467 }); 1468 1469 var viewport = function() { 1470 var width; 1471 if (carouselOptions.responsiveBaseElement && carouselOptions.responsiveBaseElement !== window) { 1472 width = jQuery(carouselOptions.responsiveBaseElement).width(); 1473 } else if (window.innerWidth) { 1474 width = window.innerWidth; 1475 } else if (document.documentElement && document.documentElement.clientWidth) { 1476 width = document.documentElement.clientWidth; 1477 } else { 1478 console.warn('Can not detect viewport width.'); 1479 } 1480 return width; 1481 }; 1482 1483 var severalRows = false; 1484 var orderedBreakpoints = []; 1485 for (var breakpoint in carouselOptions.responsive) { 1486 if (carouselOptions.responsive[breakpoint].rows > 1) { 1487 severalRows = true; 1488 } 1489 orderedBreakpoints.push(parseInt(breakpoint)); 1490 } 1491 1492 if (severalRows) { 1493 orderedBreakpoints.sort(function (a, b) { 1494 return b - a; 1495 }); 1496 var slides = el.find('[data-slide-index]'); 1497 var slidesNb = slides.length; 1498 if (slidesNb > 0) { 1499 var rowsNb; 1500 var previousRowsNb = undefined; 1501 var colsNb; 1502 var previousColsNb = undefined; 1503 1504 var updateRowsColsNb = function () { 1505 var width = viewport(); 1506 for (var i = 0; i < orderedBreakpoints.length; i++) { 1507 var breakpoint = orderedBreakpoints[i]; 1508 if (width >= breakpoint || i == (orderedBreakpoints.length - 1)) { 1509 var breakpointSettings = carouselOptions.responsive['' + breakpoint]; 1510 rowsNb = breakpointSettings.rows; 1511 colsNb = breakpointSettings.items; 1512 break; 1513 } 1514 } 1515 }; 1516 1517 var updateCarousel = function () {
1518 updateRowsColsNb(); 1519 1520 if (rowsNb != previousRowsNb || colsNb != previousColsNb) { 1521 var reInit = false; 1522 if (carousel) { 1523 carousel.trigger('destroy.owl.carousel'); 1524 carousel = undefined; 1525 slides = el.find('[data-slide-index]').detach().appendTo(el); 1526 el.find('.fake-col-wrapper').remove(); 1527 reInit = true; 1528 } 1529 1530 var perPage = rowsNb * colsNb; 1531 var pageIndex = Math.floor(slidesNb / perPage); 1532 var fakeColsNb = pageIndex * colsNb + (slidesNb >= (pageIndex * perPage + colsNb) ? colsNb : (slidesNb % colsNb)); 1533 1534 var count = 0; 1535 for (var i = 0; i < fakeColsNb; i++) { 1536 var fakeCol = jQuery('<div class="fake-col-wrapper"></div>').appendTo(el); 1537 for (var j = 0; j < rowsNb; j++) { 1538 var index = Math.floor(count / perPage) * perPage + (i % colsNb) + j * colsNb; 1539 if (index < slidesNb) { 1540 slides.filter('[data-slide-index=' + index + ']').detach().appendTo(fakeCol); 1541 } 1542 count++; 1543 } 1544 } 1545 1546 previousRowsNb = rowsNb; 1547 previousColsNb = colsNb; 1548 1549 if (reInit) { 1550 carousel = el.owlCarousel(carouselOptions); 1551 } 1552 } 1553 }; 1554 1555 jQuery(window).on('resize', updateCarousel); 1556 updateCarousel(); 1557 } 1558 } 1559 1560 carousel = el.owlCarousel(carouselOptions); 1561}); 1562 1563if (typeof lightbox !== 'undefined') { 1564 lightbox.option({ 1565 fadeDuration:300, 1566 fitImagesInViewport:false, 1567 imageFadeDuration: 300, 1568 positionFromTop: 150, 1569 resizeDuration: 150 }); 1570} 1571</script>
1571</div></div><div class="margin_collapsetop"></div></div> 1572</div> 1573</div> 1574</div> 1575<div class=" visible-lg-block d-lg-block visible-md-block d-md-block visible-sm-block d-sm-block visible-xs-block d-block" style="clear:both;width:0;"></div> 1576<div class="cell16 col-xxl-1 col-xl-1 col-lg-6 col-md-6 col-sm-6 col-xs-12 col-12" style="background-color:transparent;"> 1577 1578</div> 1579<div class="d-xxl-block d-xl-block visible-xs-block d-block" style="clear:both;width:0;"></div> 1580<div class="cell17 col-xxl-12 col-xl-12 col-lg-6 col-md-6 col-sm-6 col-xs-12 col-12" style="background-color:transparent;"> 1581 1582</div> 1583<div class="d-xxl-block d-xl-block visible-xs-block d-block" style="clear:both;width:0;"></div> 1584<div class=" d-xxl-block d-xl-block visible-lg-block d-lg-block visible-md-block d-md-block visible-sm-block d-sm-block visible-xs-block d-block" style="clear:both;"></div> 1585</div> 1586</div> 1587<div style="clear: both;"></div> 1588<div id="system-message-container" aria-live="polite"></div> 1589 1590<div class="blog-featured" itemscope itemtype="https://schema.org/Blog"> 1591<div class="row g-0"> 1592</div> 1593</div> 1594<div class="ttr_bottomcolumn_widget_container"> 1595<div class="contentbottomcolumn0"> 1596<div class="cell1 col-xxl-1 col-xl-1 col-lg-6 col-md-6 col-sm-6 col-xs-12 col-12" style="background-color:transparent;"> 1597 1598</div> 1599<div class=" visible-xs-block d-block" style="clear:both;width:0;"></div> 1600<div class="cell2 col-xxl-10 col-xl-10 col-lg-12 col-md-12 col-sm-12 col-xs-12 col-12"> 1601<div> 1602<div class="bottomcolumn2"> 1603<div class="ttr_block_parent"><div class="margin_collapsetop"></div><div class="ttr_block"><div class="margin_collapsetop"></div><div class="ttr_block_without_header"></div><div class="ttr_block_content"> 1604<div class="ad-container" 1605 data-adrefresh-module-id="265" 1606 data-ad-unit-id="div-gpt-ad-1745100565501-0" 1607 data-ad-slot-path="/69289300/CKQMARTICLE" 1608 data-refresh-interval="60"> 1609 <div id="div-gpt-ad-1745100565501-0" style="min-height: 90px;"></div> 1610</div></div></div><div class="margin_collapsetop"></div></div> 1611</div> 1612</div> 1613</div> 1614<div class=" visible-lg-block d-lg-block visible-md-block d-md-block visible-sm-block d-sm-block visible-xs-block d-block" style="clear:both;width:0;"></div> 1615<div class="cell3 col-xxl-1 col-xl-1 col-lg-6 col-md-6 col-sm-6 col-xs-12 col-12" style="background-color:transparent;"> 1616 1617</div> 1618<div class="d-xxl-block d-xl-block visible-xs-block d-block" style="clear:both;width:0;"></div> 1619<div class="cell4 col-xxl-12 col-xl-12 col-lg-6 col-md-6 col-sm-6 col-xs-12 col-12" style="background-color:transparent;"> 1620 1621</div> 1622<div class="d-xxl-block d-xl-block visible-xs-block d-block" style="clear:both;width:0;"></div> 1623<div class=" d-xxl-block d-xl-block visible-lg-block d-lg-block visible-md-block d-md-block visible-sm-block d-sm-block visible-xs-block d-block" style="clear:both;"></div> 1624</div> 1625</div> 1626<div style="clear: both;"></div> 1627<div class="ttr_bottomcolumn_widget_container"> 1628<div class="contentbottomcolumn1"> 1629<div class="cell5 col-xxl-1 col-xl-1 col-lg-6 col-md-6 col-sm-6 col-xs-12 col-12" style="background-color:transparent;"> 1630 1631</div> 1632<div class=" visible-xs-block d-block" style="clear:both;width:0;"></div> 1633<div class="cell6 col-xxl-5 col-xl-5 col-lg-12 col-md-12 col-sm-12 col-xs-12 col-12"> 1634<div> 1635<div class="bottomcolumn6"> 1636<div class="ttr_block_parent"><div class="margin_collapsetop"></div><div class="ttr_block scwidget"><div class="margin_collapsetop"></div><div class="ttr_block_header"><h3 class="ttr_block_heading">Upcoming Concerts <!-- START: Snippets --><span class="seeallfont"><a href="/index.php/kx105-concerts">view all...</a></span><!-- END: Snippets --></h3></div><div class="ttr_block_content"><div class="mod-articlesnews newsflash"> 1637 <div class="mod-articlesnews__item" itemscope itemtype="https://schema.org/Article"> 1638 <h4 class="newsflash-title"> 1639 <a href="/index.php/kx105-concerts/lyle-lovett-and-his-small-large-band"> 1640 Lyle Lovett and his Small Large Band </a> 1641 </h4> 1642 1643 <figure class="newsflash-image"> 1644 <img src="/images/concerts/concert_lylelovett_october2026.jpg" alt="" width="600" height="377" loading="lazy"> </figure> 1645 1646 1647 1648 1649 1650 1651<p class="readmore">
1652 <a class="btn btn-default" href="/index.php/kx105-concerts/lyle-lovett-and-his-small-large-band" itemprop="url" aria-label="Read more … Lyle Lovett and his Small Large Band"> 1653 <span class="icon-chevron-right" aria-hidden="true"></span> 1654 Read more … </a> 1655 </p> 1656 </div> 1657 <div class="mod-articlesnews__item" itemscope itemtype="https://schema.org/Article"> 1658 <h4 class="newsflash-title"> 1659 <a href="/index.php/kx105-concerts/the-cowboy-up-tour-feat-peterboroughs-elyse-saunders"> 1660 The COWBOY UP Tour feat. Peterborough's Elyse Saunders </a> 1661 </h4> 1662 1663 <figure class="newsflash-image"> 1664 <img src="/images/concerts/concert_cowboyup_oct26.jpg" alt="" width="600" height="377" loading="lazy"> </figure> 1665 1666 1667 1668 1669 1670 1671<p class="readmore"> 1672 <a class="btn btn-default" href="/index.php/kx105-concerts/the-cowboy-up-tour-feat-peterboroughs-elyse-saunders" itemprop="url" aria-label="Read more … The COWBOY UP Tour feat. Peterborough's Elyse Saunders"> 1673 <span class="icon-chevron-right" aria-hidden="true"></span> 1674 Read more … </a> 1675 </p> 1676 </div> 1677 <div class="mod-articlesnews__item" itemscope itemtype="https://schema.org/Article"> 1678 <h4 class="newsflash-title"> 1679 <a href="/index.php/kx105-concerts/kx105-presents-gord-bamford-the-venue-peterborough"> 1680 KX105 Presents - Gord Bamford @ The Venue Peterborough </a> 1681 </h4> 1682 1683 <figure class="newsflash-image"> 1684 <img src="/images/concerts/gordbamfordconcertoctober2026.jpg" alt="" width="600" height="377" loading="lazy"> </figure> 1685 1686 1687 1688 1689 1690 1691<p class="readmore"> 1692 <a class="btn btn-default" href="/index.php/kx105-concerts/kx105-presents-gord-bamford-the-venue-peterborough" itemprop="url" aria-label="Read more … KX105 Presents - Gord Bamford @ The Venue Peterborough"> 1693 <span class="icon-chevron-right" aria-hidden="true"></span> 1694 Read more … </a> 1695 </p> 1696 </div> 1697 <div class="mod-articlesnews__item" itemscope itemtype="https://schema.org/Article"> 1698 <h4 class="newsflash-title"> 1699 <a href="/index.php/kx105-concerts/owen-riegling-pickering-casino-resort"> 1700 Owen Riegling @ Pickering Casino Resort </a> 1701 </h4> 1702 1703 <figure class="newsflash-image"> 1704 <img src="/images/concerts/concert_owenriegling_november2026.jpg" alt="" width="600" height="377" loading="lazy"> </figure> 1705 1706 1707 1708 1709 1710 1711<p class="readmore"> 1712 <a class="btn btn-default" href="/index.php/kx105-concerts/owen-riegling-pickering-casino-resort" itemprop="url" aria-label="Read more … Owen Riegling @ Pickering Casino Resort"> 1713 <span class="icon-chevron-right" aria-hidden="true"></span> 1714 Read more … </a> 1715 </p> 1716 </div> 1717 <div class="mod-articlesnews__item" itemscope itemtype="https://schema.org/Article"> 1718 <h4 class="newsflash-title"> 1719 <a href="/index.php/kx105-concerts/lee-brice"> 1720 Lee Brice </a> 1721 </h4> 1722 1723 <figure class="newsflash-image"> 1724 <img src="/images/concerts/concert_rama_lee_brice_nov2026.jpg" alt="" width="600" height="377" loading="lazy"> </figure> 1725 1726 1727 1728 1729 1730 1731<p class="readmore"> 1732 <a class="btn btn-default" href="/index.php/kx105-concerts/lee-brice" itemprop="url" aria-label="Read more … Lee Brice"> 1733 <span class="icon-chevron-right" aria-hidden="true"></span> 1734 Read more … </a> 1735 </p> 1736 </div> 1737 <div class="mod-articlesnews__item" itemscope itemtype="https://schema.org/Article"> 1738 <h4 class="newsflash-title"> 1739 <a href="/index.php/kx105-concerts/dean-brody-and-the-reklaws-hometown-heroes-tour-pmc"> 1740 Dean Brody and The Reklaws - Hometown Heroes Tour - PMC </a> 1741 </h4> 1742 1743 <figure class="newsflash-image"> 1744 <img src="/images/concerts/KX105%20concert%20DEAN%20BRODY%20NOV%202026.png" alt="" width="600" height="377" loading="lazy"> </figure> 1745 1746 1747 1748 1749 1750 1751<p class="readmore">
1752 <a class="btn btn-default" href="/index.php/kx105-concerts/dean-brody-and-the-reklaws-hometown-heroes-tour-pmc" itemprop="url" aria-label="Read more … Dean Brody and The Reklaws - Hometown Heroes Tour - PMC"> 1753 <span class="icon-chevron-right" aria-hidden="true"></span> 1754 Read more … </a> 1755 </p> 1756 </div> 1757 <div class="mod-articlesnews__item" itemscope itemtype="https://schema.org/Article"> 1758 <h4 class="newsflash-title"> 1759 <a href="/index.php/kx105-concerts/kx105-present-tebey-with-special-guest-josh-stumpf"> 1760 KX105 Present Tebey with special guest Josh Stumpf </a> 1761 </h4> 1762 1763 <figure class="newsflash-image"> 1764 <img src="/images/concerts/kx105_presents_tebey_feb27.png" alt="" width="600" height="377" loading="lazy"> </figure> 1765 1766 1767 1768 1769 1770 1771<p class="readmore"> 1772 <a class="btn btn-default" href="/index.php/kx105-concerts/kx105-present-tebey-with-special-guest-josh-stumpf" itemprop="url" aria-label="Read more … KX105 Present Tebey with special guest Josh Stumpf "> 1773 <span class="icon-chevron-right" aria-hidden="true"></span> 1774 Read more … </a> 1775 </p> 1776 </div> 1777 </div> 1778</div></div><div class="margin_collapsetop"></div></div><div class="ttr_block_parent"><div class="margin_collapsetop"></div><div class="ttr_block"><div class="margin_collapsetop"></div><div class="ttr_block_without_header"></div><div class="ttr_block_content"> 1779<div id="mod-custom292" class="mod-custom custom"> 1780 <p style="text-align: center;"><a href="http://www.cmaontario.ca/" target="_blank" rel="noopener"><img src="https://www.kx96.fm/images/tiles/tile_cma-ontario_2024.jpg" alt="tile rock mornings" width="500" height="200" style="margin: 0px; border: 1px solid #cecaca;" /></a></p> 1781<p> </p></div> 1782</div></div><div class="margin_collapsetop"></div></div> 1783</div> 1784</div> 1785</div> 1786<div class=" visible-lg-block d-lg-block visible-md-block d-md-block visible-sm-block d-sm-block visible-xs-block d-block" style="clear:both;width:0;"></div> 1787<div class="cell7 col-xxl-5 col-xl-5 col-lg-12 col-md-12 col-sm-12 col-xs-12 col-12"> 1788<div> 1789<div class="bottomcolumn7"> 1790<div class="ttr_block_parent"><div class="margin_collapsetop"></div><div class="ttr_block"><div class="margin_collapsetop"></div><div class="ttr_block_header"><h3 class="ttr_block_heading">In Your Community <!-- START: Snippets --><span class="seeallfont"><a href="/index.php/community/in-your-community">view all...</a></span><!-- END: Snippets --></h3></div><div class="ttr_block_content"><div class="jtcs_item_wrapper jt-cs" style="padding:10px 10px 10px 10px;"> 1791<div class="jtcs288 positioncenter owl-carousel owl-theme slides_container" 1792 role="region" 1793 aria-label="MOD_JTCS_CAROUSEL_LABEL" 1794 aria-live="polite"> 1795<div class="slide" 1796 style="padding:10px 10px 10px 10px ;margin:0px 0px 0px 0px " 1797 data-slide-index="0" 1798 role="group" 1799 aria-roledescription="slide" 1800 aria-label="MOD_JTCS_SLIDE_LABEL"> 1801 <div class="jt-inner"> 1802 <div class="jt-imagecover" style="float:none;margin-bottom:15px"> 1803 <a class="link-image" title="Pet of The Week - Grogu" href="/index.php/community/in-your-community/pet-of-the-week-grogu" aria-label="MOD_JTCS_VIEW_ARTICLE"><img class="jtcs-image" src="https://kx105.fm//cache/mod_jt_contentslider/d490d7b4576290fa60eb31b5fc917ad1_1565.jpg" width="600" alt="Pet of The Week - Grogu" /></a> 1804 </div> 1805 1806 1807 1808 1809 <div class="jt-introtext"> 1810 Meet the KX105 Pet of the Week with the Peterborough Humane Society 1811 </div> 1812 1813 <div></div> 1814 <div style="clear:both"></div> 1815 </div> 1816</div> 1817</div> 1818</div> 1819<style type="text/css"> 1820/* Existing styles */ 1821.jtcs288.owl-carousel .owl-nav{justify-content:flex-start} 1822.jtcs288.positiontop.owl-carousel .owl-nav{width:100%;position:absolute;top:-40px; bottom:auto;justify-content:flex-start;gap:0 10px;} 1823.jtcs288.positioncenter.owl-carousel .owl-nav{width:100%;position:absolute;top:50%; bottom:auto;transform:translateY(-50%);justify-content:space-between; z-index:1; height:0px;} 1824.jtcs288.positionbottom.owl-carousel .owl-nav{width:100%;position:absolute;top:auto; bottom:-40px;justify-content:flex-start;gap:0 10px;} 1825.jtcs288 .owl-dots {position: relative;bottom:-15px;} 1826.jtcs288.owl-carousel .owl-nav.disabled{ display:none} 1827.jtcs288.owl-carousel .jt-introtext{ text-align:center} 1828/* ADA Compliance: Screen reader only text */ 1829.sr-only {position: absolute;width: 1px;height: 1px;padding: 0;margin: -1px;overflow: hidden;clip: rect(0, 0, 0, 0);white-space: nowrap;border-width: 0;} 1830/* ADA Compliance: Focus visible styles - only show on keyboard navigation, not mouse clicks */ 1831.jtcs288 a:focus-visible, 1832.jtcs288 button:focus-visible, 1833.jtcs288 .owl-nav button:focus-visible, 1834.jtcs288 .owl-dot:focus-visible {outline: 3px solid #4A90E2;outline-offset: 2px;box-shadow: 0 0 0 3px rgba(74, 144, 226, 0.3);} 1835/* Remove default focus outline for mouse users */ 1836.jtcs288 a:focus:not(:focus-visible), 1837.jtcs288 button:focus:not(:focus-visible), 1838.jtcs288 .owl-nav button:focus:not(:focus-visible), 1839.jtcs288 .owl-dot:focus:not(:focus-visible) {outline: none;box-shadow: none;} 1840/* Fallback for browsers without :focus-visible support */ 1841.jtcs288 a.keyboard-focus, 1842.jtcs288 button.keyboard-focus, 1843.jtcs288 .owl-nav button.keyboard-focus, 1844.jtcs288 .owl-dot.keyboard-focus {outline: 3px solid #4A90E2 !important;outline-offset: 2px;box-shadow: 0 0 0 3px rgba(74, 144, 226, 0.3) !important;} 1845/* ADA Compliance: Ensure focused slide content is visible */ 1846.jtcs288 .slide:focus-within {scroll-margin: 20px;} 1847/* ADA Compliance: Better button visibility and sizing for touch targets */ 1848.jtcs288 .owl-nav button {min-width: 44px;min-height: 44px;display: flex;align-items: center;justify-content: center;} 1849.jtcs288 .owl-dot {min-width: 44px;min-height: 44px;} 1850/* ADA Compliance: Ensure keyboard focus visibility in carousel navigation */ 1851.jtcs288 .owl-nav button:focus-visible {background-color: rgba(74, 144, 226, 0.2) !important;} 1852/* ADA Compliance: Show nav buttons whenever keyboard focus is anyw
1852here inside 1853 the carousel ? Owl hides them with opacity:0 by default until hover, 1854 so keyboard users would never see them without this rule. */ 1855.jtcs288:focus-within .owl-nav button, 1856.jtcs288.keyboard-focused .owl-nav button {opacity: 1 !important;visibility: visible !important;} 1857</style>
1858<script defer type="text/javascript"> 1859jQuery(document).ready(function() { 1860 // Focus-visible polyfill: Track if user is using keyboard 1861 var isUsingKeyboard = false; 1862 1863 jQuery(document).on('mousedown', function() { 1864 isUsingKeyboard = false; 1865 }); 1866 1867 jQuery(document).on('keydown', function(e) { 1868 // Tab, Shift, arrows, Enter, Space indicate keyboard usage 1869 if (e.key === 'Tab' || e.key === 'Enter' || e.key === ' ' || 1870 e.key === 'ArrowLeft' || e.key === 'ArrowRight' || 1871 e.key === 'ArrowUp' || e.key === 'ArrowDown') { 1872 isUsingKeyboard = true; 1873 } 1874 }); 1875 1876 // Add/remove keyboard-user class for browsers without :focus-visible support 1877 jQuery(document).on('focus', '.jtcs288 a, .jtcs288 button, .jtcs288 .owl-nav button, .jtcs288 .owl-dot', function() { 1878 if (isUsingKeyboard) { 1879 jQuery(this).addClass('keyboard-focus'); 1880 } else { 1881 jQuery(this).removeClass('keyboard-focus'); 1882 } 1883 }); 1884 1885 jQuery(document).on('blur', '.jtcs288 a, .jtcs288 button, .jtcs288 .owl-nav button, .jtcs288 .owl-dot', function() { 1886 jQuery(this).removeClass('keyboard-focus'); 1887 }); 1888 1889 var el = jQuery('.jtcs288.owl-carousel'); 1890 var carousel; 1891 var carouselOptions = { 1892 margin: 20, 1893 stagePadding: 0, 1894 center: true, 1895 loop: true, 1896 nav: true, 1897 navText:["<i class='fas fa-angle-left'></i>","<i class='fas fa-angle-right'></i>"], 1898 dots: true, 1899 rtl: false, 1900 slideBy: '1', 1901 autoplay:true, 1902 autoplaySpeed:300, 1903 smartSpeed:300, 1904 autoplayTimeout:4000, 1905 autoplayHoverPause:true, 1906 mouseDrag: true, 1907 touchDrag: true, 1908 navSpeed:600, 1909 dotsSpeed:600, 1910 responsive: { 1911 0: { 1912 autoplay:true, 1913 autoplaySpeed:300, 1914 smartSpeed:300, 1915 autoplayTimeout:4000, 1916 items: 1, 1917 rows: 1 }, 1918 768: { 1919 autoplay:true, 1920 autoplaySpeed:300, 1921 smartSpeed:300, 1922 autoplayTimeout:4000, 1923 items: 1, 1924 rows:1 }, 1925 991: { 1926 autoplay:true, 1927 autoplaySpeed:300, 1928 smartSpeed:300, 1929 autoplayTimeout:4000, 1930 items:1, 1931 rows:1 } 1932 }, 1933 // ADA Compliance callbacks 1934onInitialized: function(event) { 1935 addAccessibilityAttributes(); 1936 updateOffscreenTabindex(); 1937 }, 1938 onChanged: function(event) { 1939 addAccessibilityAttributes(); 1940 updateOffscreenTabindex(); 1941 }, 1942 onTranslated: function(event) { 1943 addAccessibilityAttributes(); 1944 updateOffscreenTabindex(); 1945 } 1946 }; 1947 1948 // ADA Compliance: Add proper ARIA labels to nav buttons and dots 1949 function addAccessibilityAttributes() { 1950 var carousel = jQuery('.jtcs288'); 1951 var prevBtn = carousel.find('.owl-prev'); 1952 var nextBtn = carousel.find('.owl-next'); 1953 var dots = carousel.find('.owl-dot'); 1954 1955 if (prevBtn.length) { 1956 prevBtn.attr({ 1957 'aria-label': 'MOD_JTCS_PREVIOUS_SLIDE', 1958 'role': 'button', 1959 'tabindex': '0' 1960 }); 1961 // Owl adds class="disabled" (not the HTML disabled attribute) at boundaries 1962 // ? keep it focusable so Tab reaches it; aria-disabled conveys the state 1963 if (prevBtn.hasClass('disabled')) { 1964 prevBtn.attr('aria-disabled', 'true'); 1965 } else { 1966 prevBtn.removeAttr('aria-disabled'); 1967 } 1968 } 1969 1970 if (nextBtn.length) { 1971 nextBtn.attr({ 1972 'aria-label': 'MOD_JTCS_NEXT_SLIDE', 1973 'role': 'button', 1974 'tabindex': '0' 1975 }); 1976 if (nextBtn.hasClass('disabled')) { 1977 nextBtn.attr('aria-disabled', 'true'); 1978 } else { 1979 nextBtn.removeAttr('aria-disabled'); 1980 } 1981 } 1982 1983 dots.each(function(index) { 1984 jQuery(this).attr({ 1985 'aria-label': 'MOD_JTCS_GO_TO_SLIDE ' + (index + 1), 1986 'role': 'button', 1987 'tabindex': '0' 1988 }); 1989 }); 1990 1991 // Mark the first visible active slide 1992 var activeSlide = carousel.find('.owl-item.active .slide'); 1993 carousel.find('.slide').removeAttr('aria-current'); 1994 if (activeSlide.length) { 1995 activeSlide.first().attr('aria-current', 'true'); 1996 } 1997 1998 // Hide icons from screen readers 1999 carousel.find('i[class*="fa"]').attr('aria-hidden', 'true'); 2000 } 2001 2002 // ADA FIX: Remove focusable items from off-screen / cloned slides so Tab 2003 // only visits links in the currently visible page, preventing misalignment 2004 // and eliminating the extra keystrokes needed to escape the carousel. 2005 function updateOffscreenTabindex() {
2006 var carousel = jQuery('.jtcs288'); 2007 2008 // Make everything inside non-active or cloned items unfocusable. 2009 // NOTE: .owl-nav and .owl-dots sit outside .owl-item so they are 2010 // never touched here ? their tabindex is managed by addAccessibilityAttributes(). 2011 carousel.find('.owl-item').each(function() { 2012 var item = jQuery(this); 2013 var isVisible = item.hasClass('active') && !item.hasClass('cloned'); 2014 var focusables = item.find('a, button, input, select, textarea, [tabindex]'); 2015 if (isVisible) { 2016 // Restore focusability for visible slides 2017 focusables.each(function() { 2018 var el = jQuery(this); 2019 var saved = el.data('saved-tabindex'); 2020 if (saved !== undefined) { 2021 if (saved === '0') { 2022 el.removeAttr('tabindex'); 2023 } else { 2024 el.attr('tabindex', saved); 2025 } 2026 el.removeData('saved-tabindex'); 2027 } else if (el.attr('tabindex') === '-1') { 2028 el.removeAttr('tabindex'); 2029 } 2030 }); 2031 } else { 2032 // Remove from tab order for off-screen / cloned items 2033 focusables.each(function() { 2034 var el = jQuery(this); 2035 if (el.attr('tabindex') !== '-1') { 2036 el.data('saved-tabindex', el.attr('tabindex') || '0'); 2037 el.attr('tabindex', '-1'); 2038 } 2039 }); 2040 } 2041 }); 2042 } 2043 2044 // ADA FIX: Keyboard arrow navigation on the carousel region itself, 2045 // without calling owlInstance.to() on focus (which caused misalignment). 2046 var carouselEl = jQuery('.jtcs288'); 2047 carouselEl.on('keydown', function(e) { 2048 var owlInstance = jQuery(this).data('owl.carousel'); 2049 if (!owlInstance) return; 2050 if (e.key === 'ArrowLeft') { e.preventDefault(); owlInstance.prev(); } 2051 if (e.key === 'ArrowRight') { e.preventDefault(); owlInstance.next(); } 2052 }); 2053 2054 // Enter/Space on nav buttons and dots 2055 carouselEl.on('keydown', '.owl-prev, .owl-next, .owl-dot', function(e) { 2056 if (e.key === 'Enter' || e.key === ' ') { 2057 e.preventDefault(); 2058 jQuery(this).trigger('click'); 2059 } 2060 }); 2061 2062 // ADA: Show nav buttons and pause autoplay when keyboard focus enters carousel 2063 carouselEl.on('focusin', function() { 2064 var owlInstance = jQuery(this).data('owl.carousel'); 2065 if (owlInstance) owlInstance.trigger('stop.owl.autoplay'); 2066 // Fallback for browsers with limited :focus-within support 2067 jQuery(this).addClass('keyboard-focused'); 2068 }); 2069 2070 // ADA: Hide nav buttons again when focus leaves the carousel entirely 2071 carouselEl.on('focusout', function() { 2072 var self = this; 2073 // Use setTimeout so the class isn't removed before the next element receives focus 2074 setTimeout(function() { 2075 if (!jQuery(self).find(':focus').length) { 2076 jQuery(self).removeClass('keyboard-focused'); 2077 } 2078 }, 100); 2079 }); 2080 2081 var viewport = function() { 2082 var width; 2083 if (carouselOptions.responsiveBaseElement && carouselOptions.responsiveBaseElement !== window) { 2084 width = jQuery(carouselOptions.responsiveBaseElement).width(); 2085 } else if (window.innerWidth) { 2086 width = window.innerWidth; 2087 } else if (document.documentElement && document.documentElement.clientWidth) { 2088 width = document.documentElement.clientWidth; 2089 } else { 2090 console.warn('Can not detect viewport width.'); 2091 } 2092 return width; 2093 }; 2094 2095 var severalRows = false; 2096 var orderedBreakpoints = []; 2097 for (var breakpoint in carouselOptions.responsive) { 2098 if (carouselOptions.responsive[breakpoint].rows > 1) { 2099 severalRows = true; 2100 } 2101 orderedBreakpoints.push(parseInt(breakpoint)); 2102 } 2103 2104 if (severalRows) { 2105 orderedBreakpoints.sort(function (a, b) { 2106 return b - a; 2107 }); 2108 var slides = el.find('[data-slide-index]'); 2109 var slidesNb = slides.length; 2110 if (slidesNb > 0) { 2111 var rowsNb; 2112 var previousRowsNb = undefined; 2113 var colsNb; 2114 var previousColsNb = undefined; 2115 2116 var updateRowsColsNb = function () { 2117 var width = viewport(); 2118 for (var i = 0; i < orderedBreakpoints.length; i++) { 2119 var breakpoint = orderedBreakpoints[i]; 2120 if (width >= breakpoint || i == (orderedBreakpoints.length - 1)) { 2121 var breakpointSettings = carouselOptions.responsive['' + breakpoint]; 2122 rowsNb = breakpointSettings.rows; 2123 colsNb = breakpointSettings.items; 2124 break; 2125 } 2126 } 2127 }; 2128 2129 var updateCarousel = function () {
2130 updateRowsColsNb(); 2131 2132 if (rowsNb != previousRowsNb || colsNb != previousColsNb) { 2133 var reInit = false; 2134 if (carousel) { 2135 carousel.trigger('destroy.owl.carousel'); 2136 carousel = undefined; 2137 slides = el.find('[data-slide-index]').detach().appendTo(el); 2138 el.find('.fake-col-wrapper').remove(); 2139 reInit = true; 2140 } 2141 2142 var perPage = rowsNb * colsNb; 2143 var pageIndex = Math.floor(slidesNb / perPage); 2144 var fakeColsNb = pageIndex * colsNb + (slidesNb >= (pageIndex * perPage + colsNb) ? colsNb : (slidesNb % colsNb)); 2145 2146 var count = 0; 2147 for (var i = 0; i < fakeColsNb; i++) { 2148 var fakeCol = jQuery('<div class="fake-col-wrapper"></div>').appendTo(el); 2149 for (var j = 0; j < rowsNb; j++) { 2150 var index = Math.floor(count / perPage) * perPage + (i % colsNb) + j * colsNb; 2151 if (index < slidesNb) { 2152 slides.filter('[data-slide-index=' + index + ']').detach().appendTo(fakeCol); 2153 } 2154 count++; 2155 } 2156 } 2157 2158 previousRowsNb = rowsNb; 2159 previousColsNb = colsNb; 2160 2161 if (reInit) { 2162 carousel = el.owlCarousel(carouselOptions); 2163 } 2164 } 2165 }; 2166 2167 jQuery(window).on('resize', updateCarousel); 2168 updateCarousel(); 2169 } 2170 } 2171 2172 carousel = el.owlCarousel(carouselOptions); 2173}); 2174 2175if (typeof lightbox !== 'undefined') { 2176 lightbox.option({ 2177 fadeDuration:300, 2178 fitImagesInViewport:false, 2179 imageFadeDuration: 300, 2180 positionFromTop: 150, 2181 resizeDuration: 150 }); 2182} 2183</script>
2183</div></div><div class="margin_collapsetop"></div></div><div class="ttr_block_parent"><div class="margin_collapsetop"></div><div class="ttr_block scwidget"><div class="margin_collapsetop"></div><div class="ttr_block_header"><h3 class="ttr_block_heading">Latest Video <!-- START: Snippets --><span class="seeallfont"><a href="/index.php/on-demand/kx105-videos">view all...</a></span><!-- END: Snippets --></h3></div><div class="ttr_block_content"><div class="mod-articlesnews newsflash"> 2184 <div class="mod-articlesnews__item" itemscope itemtype="https://schema.org/Article"> 2185 <h4 class="newsflash-title"> 2186 <a href="/index.php/on-demand/kx105-videos/kxcountry-clubhouse-warren-zeiders"> 2187 KXCountry Clubhouse: Warren Zeiders </a> 2188 </h4> 2189 2190 2191 2192 2193 <p style="text-align: center;"> 2194 2195<!-- JoomlaWorks "AllVideos" Plugin (v7.0) starts here --> 2196 2197<div class="avPlayerWrapper avVideo"> 2198 <div class="avPlayerContainer"> 2199 <div id="AVPlayerID_0_c12137a1dc13c20e24dd82c567b05622" class="avPlayerBlock"> 2200 <iframe src="https://www.youtube.com/embed/44fe64ZCPfs?rel=0&fs=1&wmode=transparent" width="720" height="480" allow="autoplay; fullscreen; encrypted-media" allowfullscreen="true" frameborder="0" scrolling="no" title="JoomlaWorks AllVideos Player"></iframe> </div> 2201 </div> 2202</div> 2203 2204<!-- JoomlaWorks "AllVideos" Plugin (v7.0) ends here --> 2205 2206</p> 2207 2208 2209 2210<p class="readmore"> 2211 <a class="btn btn-default" href="/index.php/on-demand/kx105-videos/kxcountry-clubhouse-warren-zeiders" itemprop="url" aria-label="Read more … KXCountry Clubhouse: Warren Zeiders"> 2212 <span class="icon-chevron-right" aria-hidden="true"></span> 2213 Read more … </a> 2214 </p> 2215 </div> 2216 </div> 2217</div></div><div class="margin_collapsetop"></div></div><div class="ttr_block_parent"><div class="margin_collapsetop"></div><div class="ttr_block comevent"><div class="margin_collapsetop"></div><div class="ttr_block_header"><h3 class="ttr_block_heading">Upcoming Events <!-- START: Snippets --><span class="seeallfont"><a href="/index.php/community/kx105-events">view all...</a></span><!-- END: Snippets --></h3></div><div class="ttr_block_content"><table class="mod_events_latest_table jevbootstrap" width="100%" border="0" cellspacing="0" cellpadding="0" align="center"><tr><td class="mod_events_latest_first" style="border-color:#ccc"><span class="mod_events_latest_date">Thu Oct 01 @ 8:00AM</span> - <span class="mod_events_latest_date">02:00PM</span><br/><span class="mod_events_latest_content"><a href="/index.php/community/kx105-events/eventdetail/25076/-/st-thomas-aquinas-catholic-secondary-school-25th-anniversary-celebration?filter_reset=1" target="_top" >St. Thomas Aquinas Catholic Secondary School 25th Anniversary Celebration</a></span></td></tr> 2218<tr><td class="mod_events_latest" style="border-color:#ccc"><span class="mod_events_latest_date">Fri Oct 02 @ 8:00AM</span> - <span class="mod_events_latest_date">02:00PM</span><br/><span class="mod_events_latest_content"><a href="/index.php/community/kx105-events/eventdetail/25076/-/st-thomas-aquinas-catholic-secondary-school-25th-anniversary-celebration?filter_reset=1" target="_top" >St. Thomas Aquinas Catholic Secondary School 25th Anniversary Celebration</a></span></td></tr> 2219<tr><td class="mod_events_latest" style="border-color:#ccc"><span class="mod_events_latest_date">Sat Oct 03 @ 8:00AM</span> - <span class="mod_events_latest_date">02:00PM</span><br/><span class="mod_events_latest_content"><a href="/index.php/community/kx105-events/eventdetail/25076/-/st-thomas-aquinas-catholic-secondary-school-25th-anniversary-celebration?filter_reset=1" target="_top" >St. Thomas Aquinas Catholic Secondary School 25th Anniversary Celebration</a></span></td></tr> 2220<tr><td class="mod_events_latest" style="border-color:#ccc"><span class="mod_events_latest_date">Sat Oct 03 @ 8:00AM</span> - <span class="mod_events_latest_date">02:00PM</span><br/><span class="mod_events_latest_content"><a href="/index.php/community/kx105-events/eventdetail/25078/-/cambridge-st-united-fall-rummage-sale?filter_reset=1" target="_top" >Cambridge St United Fall Rummage Sale</a></span></td></tr> 2221<tr><td class="mod_events_latest" style="border-color:#ccc"><span class="mod_events_latest_date">Sat Oct 03 @ 9:00AM</span> - <span class="mod_events_latest_date">01:00PM</span><br/><span class="mod_events_latest_content">
2221<a href="/index.php/community/kx105-events/eventdetail/25071/-/wellness-fair?filter_reset=1" target="_top" >Wellness Fair</a></span></td></tr> 2222<tr><td class="mod_events_latest" style="border-color:#ccc"><span class="mod_events_latest_date">Sat Oct 03 @ 7:00PM</span> - <span class="mod_events_latest_date"></span><br/><span class="mod_events_latest_content"><a href="/index.php/community/kx105-events/eventdetail/25057/-/al-lerman-concert-for-habitat-for-humanity?filter_reset=1" target="_top" >Al Lerman Concert for Habitat for Humanity</a></span></td></tr> 2223<tr><td class="mod_events_latest" style="border-color:#ccc"><span class="mod_events_latest_date">Sat Oct 03 @ 7:00PM</span> - <span class="mod_events_latest_date">11:59PM</span><br/><span class="mod_events_latest_content"><a href="/index.php/community/kx105-events/eventdetail/25074/-/omemee-legion-dance-with-gunslingers?filter_reset=1" target="_top" >Omemee Legion Dance - with Gunslingers!</a></span></td></tr> 2224<tr><td class="mod_events_latest" style="border-color:#ccc"><span class="mod_events_latest_date">Sun Oct 04 @ 8:00AM</span> - <span class="mod_events_latest_date">02:00PM</span><br/><span class="mod_events_latest_content"><a href="/index.php/community/kx105-events/eventdetail/25076/-/st-thomas-aquinas-catholic-secondary-school-25th-anniversary-celebration?filter_reset=1" target="_top" >St. Thomas Aquinas Catholic Secondary School 25th Anniversary Celebration</a></span></td></tr> 2225<tr><td class="mod_events_latest" style="border-color:#ccc"><span class="mod_events_latest_date">Sun Oct 04 @10:00AM</span> - <span class="mod_events_latest_date">03:00PM</span><br/><span class="mod_events_latest_content"><a href="/index.php/community/kx105-events/eventdetail/25079/-/make-it-handmade-peterborough-crafters-event?filter_reset=1" target="_top" >Make It Handmade Peterborough Crafters Event</a></span></td></tr> 2226<tr><td class="mod_events_latest" style="border-color:#ccc"><span class="mod_events_latest_date">Mon Oct 05 @ 8:00AM</span> - <span class="mod_events_latest_date">02:00PM</span><br/><span class="mod_events_latest_content"><a href="/index.php/community/kx105-events/eventdetail/25076/-/st-thomas-aquinas-catholic-secondary-school-25th-anniversary-celebration?filter_reset=1" target="_top" >St. Thomas Aquinas Catholic Secondary School 25th Anniversary Celebration</a></span></td></tr> 2227<tr><td class="mod_events_latest" style="border-color:#ccc"><span class="mod_events_latest_date">Mon Oct 05 @ 6:00PM</span> - <span class="mod_events_latest_date">09:00PM</span><br/><span class="mod_events_latest_content"><a href="/index.php/community/kx105-events/eventdetail/24941/-/square-dancing-otonabee-squares?filter_reset=1" target="_top" >Square Dancing - Otonabee Squares</a></span></td></tr> 2228<tr><td class="mod_events_latest" style="border-color:#ccc"><span class="mod_events_latest_date">Tue Oct 06 @ 8:00AM</span> - <span class="mod_events_latest_date">02:00PM</span><br/><span class="mod_events_latest_content"><a href="/index.php/community/kx105-events/eventdetail/25076/-/st-thomas-aquinas-catholic-secondary-school-25th-anniversary-celebration?filter_reset=1" target="_top" >St. Thomas Aquinas Catholic Secondary School 25th Anniversary Celebration</a></span></td></tr> 2229<tr><td class="mod_events_latest" style="border-color:#ccc"><span class="mod_events_latest_date">Tue Oct 06 @ 8:00AM</span> - <span class="mod_events_latest_date">05:00PM</span><br/><span class="mod_events_latest_content"><a href="/index.php/community/kx105-events/eventdetail/14710/-/ptbo-lions-club-cans-bottle-drive?filter_reset=1" target="_top" >PTBO Lions Club Cans & Bottle Drive</a></span></td></tr> 2230<tr><td class="mod_events_latest" style="border-color:#ccc"><span class="mod_events_latest_date">Wed Oct 07 @ 8:00AM</span> - <span class="mod_events_latest_date">02:00PM</span><br/><span class="mod_events_latest_content"><a href="/index.php/community/kx105-events/eventdetail/25076/-/st-thomas-aquinas-catholic-secondary-school-25th-anniversary-celebration?filter_reset=1" target="_top" >St. Thomas Aquinas Catholic Secondary School 25th Anniversary Celebration</a></span></td></tr> 2231<tr><td class="mod_events_latest" style="border-color:#ccc"><span class="mod_events_latest_date">Wed Oct 07 @ 8:00AM</span> - <span class="mod_events_latest_date"></span><br/><span class="mod_events_latest_content">
2231<a href="/index.php/community/kx105-events/eventdetail/14812/-/globus-theatre-presents-a-womans-love-list?filter_reset=1" target="_top" >Globus Theatre presents A Womanâs Love List</a></span></td></tr> 2232<tr><td class="mod_events_latest" style="border-color:#ccc"><span class="mod_events_latest_date">Wed Oct 07 @ 2:00PM</span> - <span class="mod_events_latest_date">02:30PM</span><br/><span class="mod_events_latest_content"><a href="/index.php/community/kx105-events/eventdetail/24987/-/catch-the-ace-lakefield-village-lions?filter_reset=1" target="_top" >Catch the Ace - Lakefield Village Lions</a></span></td></tr> 2233<tr><td class="mod_events_latest" style="border-color:#ccc"><span class="mod_events_latest_date">Thu Oct 08 @ 8:00AM</span> - <span class="mod_events_latest_date">02:00PM</span><br/><span class="mod_events_latest_content"><a href="/index.php/community/kx105-events/eventdetail/25076/-/st-thomas-aquinas-catholic-secondary-school-25th-anniversary-celebration?filter_reset=1" target="_top" >St. Thomas Aquinas Catholic Secondary School 25th Anniversary Celebration</a></span></td></tr> 2234<tr><td class="mod_events_latest" style="border-color:#ccc"><span class="mod_events_latest_date">Thu Oct 08 @10:00AM</span> - <span class="mod_events_latest_date">03:00PM</span><br/><span class="mod_events_latest_content"><a href="/index.php/community/kx105-events/eventdetail/14882/-/lindsay-thursday-farmers-market?filter_reset=1" target="_top" >Lindsay Thursday Farmers' Market</a></span></td></tr> 2235</table> 2236</div></div><div class="margin_collapsetop"></div></div> 2237</div> 2238</div> 2239</div> 2240<div class=" visible-lg-block d-lg-block visible-md-block d-md-block visible-sm-block d-sm-block visible-xs-block d-block" style="clear:both;width:0;"></div> 2241<div class="cell8 col-xxl-1 col-xl-1 col-lg-6 col-md-6 col-sm-6 col-xs-12 col-12" style="background-color:transparent;"> 2242 2243</div> 2244<div class="d-xxl-block d-xl-block visible-xs-block d-block" style="clear:both;width:0;"></div> 2245<div class=" d-xxl-block d-xl-block visible-lg-block d-lg-block visible-md-block d-md-block visible-sm-block d-sm-block visible-xs-block d-block" style="clear:both;"></div> 2246</div> 2247</div> 2248<div style="clear: both;"></div> 2249<div class="margin_collapsetop"></div> 2250</div> 2251</div> 2252<div style="clear:both;"></div> 2253</div><!--content_and_sidebar_container--> 2254</div> <!--ttr_page--> 2255<div class="footer-widget-area"> 2256<div class="footer-widget-area_inner"> 2257<div class="ttr_footer-widget-area_inner_above_widget_container"> 2258<div class="ttr_footer-widget-area_inner_above1 container row g-0"> 2259<div class="cell5 col-xxl-1 col-xl-1 col-lg-6 col-md-6 col-sm-6 col-xs-12 col-12" style="background-color:transparent;"> 2260 2261</div> 2262<div class=" visible-xs-block d-block" style="clear:both;width:0;"></div> 2263<div class="cell6 col-xxl-10 col-xl-10 col-lg-12 col-md-12 col-sm-12 col-xs-12 col-12"> 2264<div> 2265<div class="footerabovecolumn6"> 2266<div class="ttr_block_parent"><div class="margin_collapsetop"></div><div class="ttr_block"><div class="margin_collapsetop"></div><div class="ttr_block_without_header"></div><div class="ttr_block_content"> 2267<div id="mod-custom285" class="mod-custom custom"> 2268 <a href="https://forecast7.com/en/44d31n78d32/peterborough/" class="weatherwidget-io" data-label_1="PETERBOROUGH" data-label_2="WEATHER" data-theme="weather_one">PETERBOROUGH WEATHER</a>
2269<script> 2270!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src='https://weatherwidget.io/js/widget.min.js';fjs.parentNode.insertBefore(js,fjs);}}(document,'script','weatherwidget-io-js'); 2271</script>
2271</div> 2272</div></div><div class="margin_collapsetop"></div></div> 2273</div> 2274</div> 2275</div> 2276<div class=" visible-lg-block d-lg-block visible-md-block d-md-block visible-sm-block d-sm-block visible-xs-block d-block" style="clear:both;width:0;"></div> 2277<div class="cell7 col-xxl-1 col-xl-1 col-lg-6 col-md-6 col-sm-6 col-xs-12 col-12" style="background-color:transparent;"> 2278 2279</div> 2280<div class="d-xxl-block d-xl-block visible-xs-block d-block" style="clear:both;width:0;"></div> 2281<div class=" d-xxl-block d-xl-block visible-lg-block d-lg-block visible-md-block d-md-block visible-sm-block d-sm-block visible-xs-block d-block" style="clear:both;"></div> 2282</div> 2283</div> 2284<div style="clear: both;"></div> 2285</div> 2286</div> 2287<div class="margin_collapsetop"></div> 2288<footer id="ttr_footer"> 2289<div class="margin_collapsetop"></div> 2290 <div id="ttr_footer_inner"> 2291<div id="ttr_footer_top_for_widgets"> 2292<div class="ttr_footer_top_for_widgets_inner"> 2293<div class="footer-widget-area_fixed row g-0"> 2294<div style="margin:0 auto;"></div> 2295<div id="first" class="widget-area col-xxl-4 col-xl-4 col-lg-4 col-md-4 col-sm-4 col-xs-12 col-12"> 2296<div class="ttr_block_parent"><div class="margin_collapsetop"></div><div class="ttr_block"><div class="margin_collapsetop"></div><div class="ttr_block_without_header"></div><div class="ttr_block_content"> 2297<div id="mod-custom139" class="mod-custom custom"> 2298 <p> </p> 2299<p> </p> 2300<p style="padding-left: 30px;"><a href="/index.php/privacy-policy" target="_blank">Privacy Policy<br /><br /></a></p> 2301<p style="padding-left: 30px;"><a href="/index.php/rules-and-regulations" target="_blank">Rules & Regulations<br /><br /></a></p> 2302<p style="padding-left: 30px;"><a href="/index.php/on-air" target="_blank" rel="noopener">On-Air with KX 105<br /><br /></a></p> 2303<p style="padding-left: 30px;"><a href="/index.php/kx105-concerts" target="_blank">Concerts<br /><br /></a></p> 2304<p style="padding-left: 30px;"><a href="/index.php/subscribe" target="_blank">Subscribe<br /><br /></a></p> 2305<p style="padding-left: 30px;"><a href="https://www.onthelocks.ca/" target="_blank" rel="noopener">Events Login<br /><br /></a></p> 2306<p style="padding-left: 30px;"><a href="/index.php/contact-kx105" target="_blank">Contact Us<br /><br /></a></p> 2307<p style="padding-left: 30px;"><a href="https://www.powerofradio.ca/index.php/issue-reporting" target="_blank" rel="noopener">Report A Streaming Issue<br /><br /></a></p> 2308<p> </p> 2309<p> </p></div> 2310</div></div><div class="margin_collapsetop"></div></div> 2311</div> 2312<div class="visible-xs d-block" style="clear:both;width:0px;"></div> 2313<div id="second" class="widget-area col-xxl-4 col-xl-4 col-lg-4 col-md-4 col-sm-4 col-xs-12 col-12"> 2314 2315</div> 2316<div class="visible-xs d-block" style="clear:both;width:0px;"></div> 2317<div id="third" class="widget-area col-xxl-4 col-xl-4 col-lg-4 col-md-4 col-sm-4 col-xs-12 col-12"> 2318<div class="ttr_block_parent"><div class="margin_collapsetop"></div><div class="ttr_block"><div class="margin_collapsetop"></div><div class="ttr_block_without_header"></div><div class="ttr_block_content"> 2319<div id="mod-custom138" class="mod-custom custom"> 2320 <p style="text-align: right;"><span style="color: #ffffff; font-size: 10pt;"><strong>Copyright 2026 | KX105.fm <br /></strong></span></p> 2321<p style="text-align: right;"><a href="https://www.kx105.fm" target="_blank" rel="noopener">www.kx105.fm</a> </p> 2322<p> </p> 2323<p style="text-align: right;"><a href="https://www.powerofradio.ca" target="_blank" rel="noopener">Advertise With Us</a> </p> 2324<p style="text-align: right;"> </p> 2325<p style="text-align: right;"> <a href="https://www.powerofradio.ca/index.php/accessibility" target="_blank" rel="noopener"> Accessibility</a> </p> 2326<p> </p> 2327<p style="text-align: right;"><img src="/images/logo/logo_kx105_600.png" alt="logo the rock cropped white" width="282" height="126" style="margin: 10px;" /></p> 2328<p> </p> 2329<p style="text-align: right;"><a href="https://www.facebook.com/profile.php?id=61579895882583" target="_blank" rel="noopener"><img src="/images/icons/icon_facebook.png" alt="icon facebook" width="45" height="45" class="social-link" style="margin: 10px;" /></a> <a href="https://www.instagram.com/kx105fm/" target="_blank" rel="noopener"><img src="/images/icons/icon_instagram.png" alt="icon instagram" width="45" height="45" class="social-link" style="margin: 10px;" /></a> <a href="https://x.com/KX105FM" target="_blank" rel="noopener"><img src="/images/icons/icon_twitter.png" alt="icon twitter" width="45" height="45" class="social-link" style="margin: 10px;" /></a> </p></div> 2330</div></div><div class="margin_collapsetop"></div></div><div class="ttr_block_parent"><div class="margin_collapsetop"></div><div class="ttr_block"><div class="margin_collapsetop"></div><div class="ttr_block_without_header"></div><div class="ttr_block_content"> 2331<div id="mod-custom140" class="mod-custom custom"> 2332 <!--google ads code-->
2333<script src="https://securepubads.g.doubleclick.net/tag/js/gpt.js" async="async"></script>
vendor: 2 bytes, line 2333
2333
2334<script id="mcjs">!function(c,h,i,m,p){m=c.createElement(h),p=c.getElementsByTagName(h)[0],m.async=1,m.src=i,p.parentNode.insertBefore(m,p)}(document,"script","https://chimpstatic.com/mcjs-connected/js/users/bf187c0367808baa11a7eeb02/ec557251d70bedc0e736fc25d.js");</script>
2334 2335<!-- Google tag (gtag.js) -->
vendor: 59 bytes, lines 2335-2336
2335 2336<script src="https://www.googletagmanager.com/gtag/js?id=
2336G-MW3YQYKX69
vendor: 25 bytes, line 2336
2336" async="async"></script>
2336</div> 2337</div></div><div class="margin_collapsetop"></div></div> 2338</div> 2339<div class="visible-lg visible-md visible-sm visible-xs d-xxl-block d-xl-block d-lg-block d-md-block d-sm-block d-block" style="clear:both;width:0px;"></div> 2340</div> 2341</div> 2342</div> 2343<div class="ttr_footer_bottom_footer"> 2344<div class="ttr_footer_bottom_footer_inner"> 2345<div class="ttr_footer_element_alignment container g-0"> 2346<div class="ttr_images_container"> 2347</div> 2348</div> 2349<div class="ttr_images_container"> 2350</div> 2351<div id="ttr_footer_designed_by_links"> 2352<a href="https://www.zap-media.ca" target="_blank" > 2353Designed by ZAP Media 2354</a> 2355</div> 2356</div> 2357</div> 2358</div> 2359</footer> 2360<div class="margin_collapsetop"></div> 2361<div class="footer-widget-area"> 2362<div class="footer-widget-area_inner"> 2363</div> 2364</div> 2365
2366<script> 2367(function(c,d){"JUri"in d||(d.JUri="https://kx105.fm/");c.addEventListener("click",function(a){var b=a.target?a.target.closest('[class*="ba-click-lightbox-form-"], [href*="ba-click-lightbox-form-"]'):null;if(b){a.preventDefault();if("pending"==b.clicked)return!1;b.clicked="pending";"formsAppClk"in window?formsAppClk.click(b):(a=document.createElement("script"),a.src=JUri+"components/com_baforms/assets/js/click-trigger.js",a.onload=function(){formsAppClk.click(b)}, 2368c.head.append(a))}})})(document,window); 2369</script>
2369 2370</body> 2371</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.