﻿/* Plays Mp3 tracks from playlist using jPlayer */

function Mp3(title, path, info, credits) {
	this.title = title;
	this.path = path;
	this.info = info;
	this.credits = credits;
}

$(document).ready(function() {
	$("#jplayer").show();

	var playItem = -1;
	var myPlayList = new Array();
	var jpPlayTime = $(".jp-interface #jplayer_play_time");
	var jpTotalTime = $(".jp-interface #jplayer_total_time");

	$.urlParam = function(name) {
		var results = new RegExp('[\\?&]' + name + '=([^&#]*)').exec(window.location.href);
		if (!results) { return 0; }
		return results[1] || 0;
	}

	$("#jquery_jplayer").jPlayer({
		ready: function() {
			createPlayList();
			playListInit(false); // Parameter is a boolean for autoplay.
		},
		oggSupport: false,
		swfPath: "/scripts/plugins"
	})
				.jPlayer("onProgressChange", function(loadPercent, playedPercentRelative, playedPercentAbsolute, playedTime, totalTime) {
					jpPlayTime.text($.jPlayer.convertTime(playedTime));
					jpTotalTime.text($.jPlayer.convertTime(totalTime));
				})
				.jPlayer("onSoundComplete", function() {
					playListNext();
				});

	$("#jplayer_previous").click(function() {
		playListPrev();
		$(this).blur();
		return false;
	});

	$("#jplayer_next").click(function() {
		playListNext();
		$(this).blur();
		return false;
	});

	$("#jplayer_play").click(function() {

		if (playItem == -1) {
			playListNext();
			$(this).blur();
			return false;
		}
		playListSetSelected(playItem);
	});

	$("#jplayer_pause").click(function() {
		var id = "t" + playItem;
		$("#playlist tr#" + id).removeClass('selected');
		$("#playlist tr#" + id).addClass('paused');
	});

	$("table#playlist td.surprise a#surprise-me").click(function() {
		playRandomTrack();
	});

	function createPlayList() {
		var c = 0;
		//$('#playlist tr.track').shuffle();

		$('#playlist tr.track').each(function() {
			$(this).attr('id', 't' + c);
			var track = $(this).find("td a.mp3");
			var title = track.html();
			var path = track.attr('href');
			var artistTd = $(this).find("td.artist");
			var artist = artistTd.html();
			var credits = artistTd.attr("title");
			track.attr('id', 'm' + c);

			track.click(function(event) {
				playListChange(track.attr('id').substring(1));
				event.preventDefault();
			});

			myPlayList.push(new Mp3(title, path, artist, credits));

			if (c % 2 == 0)
				$(this).addClass('alt');
			c++;
		});
	};

	function playListInit(autoplay) {

		var index = $.urlParam('play');
		if (index != '') {
			playListChange(index);
			return;
		}

		if (autoplay) {
			playListChange(playItem);
		} else {
			playListConfig(playItem);
		}
	}

	function playListConfig(index) {
		$("#jquery_jplayer").jPlayer("setFile", myPlayList[playItem].path);

		var list = "<li><b>" + myPlayList[playItem].title + "</b></li>";
		list += "<li>By " + myPlayList[playItem].info + "</li>";

		if (myPlayList[playItem].credits.length > 0) {
			var credits = myPlayList[playItem].credits.split("/");
			for (var c in credits) {
				list += "<li>" + credits[c] + "</li>";
			}
		}

		$(".jp-playlist-player #jplayer_playlist #jp_title").html(list);

		$('#jp_title').innerfade({
			animationtype: 'fade',
			speed: 750,
			timeout: 5000,
			containerheight: '20px'
		});
	}

	function playListChange(index) {
		playItem = index;
		playListConfig(playItem);
		playListSetSelected(playItem);

		$("#jquery_jplayer").jPlayer("play");
	}

	function playListSetSelected(index) {
		var id = "t" + index;
		$("#playlist tr").removeClass('selected');
		$("#playlist tr").removeClass('paused');
		$("#playlist tr#" + id).addClass('selected');
	}

	function playListNext() {
		if (myPlayList.length - 1 > playItem) {
			playItem++;
		}
		else playItem = 0;
		playListChange(playItem);
	}

	function playListPrev() {
		var index = (playItem - 1 >= 0) ? playItem - 1 : myPlayList.length - 1;
		playListChange(index);
	}

	function isPlaying() {
		return $("#jquery_jplayer").jPlayer("getData", "diag.isPlaying");
	}

	function playRandomTrack() {
		var rand = Math.floor(Math.random() * myPlayList.length);
		playListChange(rand);
	}
});
			
