(function ($) { var id = '#jquery_jplayer', wrapper, songs, oggs, matches, playItem = 0, playlist = [], oggFiles = 0, playTime, totalTime, bNext, bPrev, bPlay, bPause, nowPlaying, doOgg = false, AUTOPLAY = false; function playlistInit() { if (AUTOPLAY) { playlistChange(playItem); } else { playlistConfig(playItem); } } function playlistConfig(index) { var track = playlist[index], meta; meta = ['“', track.song, '”', '' !== track.album ? (' from ' + track.album + ' ') : '', 'by ', track.artist].join(''); nowPlaying.html(meta); playItem = index; if (doOgg) { $(id).jPlayer('setFile', '', playlist[playItem].source); } else { $(id).jPlayer('setFile', playlist[playItem].source, ''); } } function playlistChange(index) { playlistConfig(index); $(id).jPlayer('play'); } function playlistNext() { var index = (playItem + 1 < playlist.length) ? playItem + 1 : 0; playlistChange(index); } function playlistPrev() { var index = (playItem - 1 >= 0) ? playItem - 1 : playlist.length - 1; playlistChange(index); } function doProgress(loadPercent, playedPercentRelative, playedPercentAbsolute, playedTime, tTime) { playTime.text($.jPlayer.convertTime(playedTime)); totalTime.text($.jPlayer.convertTime(tTime)); } function doComplete() { playlistNext(); } function doPrev() { playlistPrev(); $(this).blur(); return false; } function doNext() { playlistNext(); $(this).blur(); return false; } function maybe_decode(file) { var fileName, path, parts = []; if (file.indexOf('.mp3') === -1 || file.indexOf('.ogg') === -1) { if (file.indexOf('/') > -1) { parts = file.split('/'); fileName = Base64.decode(parts[parts.length - 1]); parts.pop(); parts.push(fileName); file = parts.join('/'); } else { file = Base64.decode(file); } } if (file.indexOf('http://') === -1) { file = 'http://' + window.location.host + decodeURIComponent(file); } return file; } function playsMP3() { var a = document.createElement('audio'); return !!(a.canPlayType && a.canPlayType('audio/mpeg;').replace(/no/, '')); } function playsOgg() { var a = document.createElement('audio'); return !!(a.canPlayType && a.canPlayType('audio/ogg; codecs="vorbis"').replace(/no/, '')); } $(document).ready(function () { wrapper = $('.audio-playlist'); songs = wrapper.find('.haudio'); oggs = wrapper.find('a[type="audio/ogg"]'); matches = songs.length === oggs.length; doOgg = matches && playsOgg(); nowPlaying = $('#now-playing'); songs.each(function () { var elem = $(this), audioFile, mp3, ogg; ogg = elem.find('a[type="audio/ogg"]'); mp3 = elem.find('a[type="audio/mpeg"]'); if (playsMP3()) { audioFile = mp3.attr('href'); } else if (doOgg) { audioFile = ogg.attr('href'); } if (!audioFile) { audioFile = mp3.attr('href'); } playlist.push({ song : elem.find('.fn').eq(0).text(), album: elem.find('.album').text(), artist: elem.find('.org').text(), source: maybe_decode(audioFile) }); elem.click(function () { playlistChange(songs.index(this)); }); }); // Local copy of jQuery selectors, for performance playTime = $("#jplayer_play_time"); totalTime = $("#jplayer_total_time"); bNext = $('#jplayer_next'); bPrev = $('#jplayer_previous'); bPlay = $('#jplayer_play'); bPause = $('#jplayer_pause'); $(id) .jPlayer({ swfPath: 'http://' + window.location.host + '/wp-content/plugins/audio/js/', preload: 'none', ready: function () { playlistInit(); }, errorAlerts: true, warningAlerts: true, // Safari 5 breaks, hopefully will fix in future release nativeSupport: !((Object.hasOwnProperty.call(navigator, 'vendor') && navigator.vendor.indexOf('Apple') > -1) && navigator.appVersion.indexOf('5.') > -1 && navigator.appVersion.indexOf('iPhone') === -1 ), oggSupport: doOgg }) .jPlayer('onProgressChange', doProgress) .jPlayer('onSoundComplete', doComplete); bPrev.click(doPrev); bNext.click(doNext); window.doOgg = doOgg; }); }(jQuery))