(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))