
var audioInterfaces = [];

$(document).ready(function() {

	function createProgressChangeHandler(track)
	{
		function handler(loadPercent, playedPercentRelative, playedPercentAbsolute, playedTime, totalTime)
		{
			if (playedTime == 0) return;
			var playedSeconds = Math.round(playedTime/1000);
			var playedMinutes = Math.floor(playedSeconds/60);
			playedSeconds = Math.round(playedSeconds%60);
			if (playedSeconds >= 10) {
				playedSecondsText = "" + playedSeconds;
			} else {
				playedSecondsText = "0" + playedSeconds;
			}
			var playedTimeText = "" + playedMinutes + ":" + playedSecondsText;
			track.find(".time").text(playedTimeText);
			track.find(".play, .pause").css("left", "" + playedPercentAbsolute + "%");
		}
		return handler;
	}

	function createSoundCompleteHandler(track)
	{
		function handler()
		{
			track.find(".player").removeClass("playing");
			track.find(".play, .pause").css("left", "0");
			track.find(".play-bar").css("width", "0");
			track.find(".time").text("");
		}
		return handler;
	}

	function createPlayHandler(track)
	{
		function handler(event)
		{
			event.preventDefault();
			for (var i=0, audioInterface; audioInterface = audioInterfaces[i]; ++i) {
				if (track.find(".audio-interface")[0] == audioInterface[0]) continue;
				audioInterface.stop();
				var player = audioInterface.parent(".player");
				player.removeClass("playing");
				player.find(".play, .pause").css("left", "0");
				player.find(".play-bar").css("width", "0");
				player.find(".time").text("");
			}
			track.find(".player").removeClass("paused");
			track.find(".player").addClass("playing");
			return false;
		}
		return handler;
	}

	function createPauseHandler(track)
	{
		function handler(event)
		{
			event.preventDefault();
			track.find(".player").removeClass("playing");
			track.find(".player").addClass("paused");
			return false;
		}
		return handler;
	}

	function createReadyHandler(track, url)
	{
		function handler()
		{
			$(this).setFile(url);
		}
		return handler;
	}

	$(".tracks > li").each(function() {

		var track = $(this);

		var download = track.find("a.download");
		var downloadURL = download.attr("href");
		if (download.length == 0) return;

		var idPrefix = track.attr("id") + "-";
		var player = $("\
			<div class='player'>\
				<div id='" + idPrefix + "audio-interface' class='audio-interface'></div>\
				<div class='time'></div>\
				<div class='progress'>\
					<div class='buffer-bar' id='" + idPrefix + "buffer-bar'>\
						<div class='play-bar' id='" + idPrefix + "play-bar'></div>\
					</div>\
				</div>\
				<ul class='controls'>\
					<li class='play' id='" + idPrefix + "play'>play</li>\
					<li class='pause' id='" + idPrefix + "pause'>pause</li>\
				</ul>\
			</div>");
		track.find("a.download").replaceWith(player);

		var audioInterface = player.find(".audio-interface");
		audioInterfaces.push(audioInterface);
		audioInterface.jPlayer({
			"swfPath": "/flash",
			"ready": createReadyHandler(track, downloadURL)
		});

		audioInterface
			.jPlayerId("play", idPrefix + "play")
			.jPlayerId("pause", idPrefix + "pause")
			.jPlayerId("loadBar", idPrefix + "buffer-bar")
			.jPlayerId("playBar", idPrefix + "play-bar")
			.onProgressChange(createProgressChangeHandler(track))
			.onSoundComplete(createSoundCompleteHandler(track));
			track.find(".play").click(createPlayHandler(track));
			track.find(".pause").click(createPauseHandler(track));
	});
});
