// Globals
//////////

var sCurrentTrack = "";

// Preloads
var oStopIcon = $("<img />").attr("src", "./images/stop.png");
var oPlayIcon = $("<img />").attr("src", "./images/play.png");
var oProgressIcon = $("<img />").attr("src", "./images/progress.gif");

// Functions
////////////

function onDocLoaded()
{
	// Get jPlayer jQuery node
	var playerNode = $("#jplayer");

	// Setup jPlayer
	playerNode.jPlayer({
		swfPath: "/js",
		warningAlerts: true,
		oggSupport: true,
		volume: 100,
		ready: setuptracklistInterface
	});

	// Set finished callback
	playerNode.jPlayer( "onSoundComplete", onTrackComplete );
}

function setuptracklistInterface()
{
	$("#tracklist tr").each( function()
	{
		// Get track handle
		var sTrack = $(this).attr("id");

		// Setup click action
		$(this).bind( "click", function() { onTrackClick(sTrack); }	);

		// Setup hover actions
		$(this).bind( "mouseenter", function() { onMouseOver(sTrack); } );
		$(this).bind( "mouseleave", function() { onMouseOff(sTrack); } );

		// Add blank image tags
		var image = new Image();
		$(this).find(".trackControl").append(image).find("img").hide();
		image = new Image();
		$(this).find(".trackName").append(image).find("img").hide();
	});
}

function onTrackClick( sTrack )
{
	// Unstyle current track
	if ( sCurrentTrack != "" )
	{
		hideProgressIcon( sCurrentTrack );
	}

	// Stop playback if this is the current track
	if ( sCurrentTrack == sTrack )
	{
		// Stop playback
		stopTrack( sCurrentTrack );

		// Icons
		hideProgressIcon( sCurrentTrack );
		showPlayIcon( sCurrentTrack );

		// clear current track
		sCurrentTrack = "";
	}
	else
	{
		// Set new current track
		sCurrentTrack = sTrack;

		// Show icons
		showStopIcon( sCurrentTrack );
		showProgressIcon( sCurrentTrack );

		// Play new track
		playTrack( sCurrentTrack );
	}
}

function onTrackComplete()
{
	// Hide progress icon
	hideProgressIcon( sCurrentTrack );

	// Show correct control icon
	if ( $("#tracklist tr#" + sCurrentTrack + " td.trackName").hasClass("trackStyle_hover") )
	{
		showPlayIcon( sCurrentTrack );
	}

	// clear current track
	sCurrentTrack = "";
}

function onMouseOver( sTrack )
{
	$("#tracklist tr#" + sTrack + " td.trackName").addClass( "trackStyle_hover" );

	if ( sCurrentTrack == sTrack )
	{
		showStopIcon( sTrack );
	}
	else
	{
		showPlayIcon( sTrack );
	}
}

function onMouseOff( sTrack )
{
	$("#tracklist tr#" + sTrack + " td.trackName").removeClass( "trackStyle_hover" );
	hideControlIcon( sTrack );
}

function showStopIcon( sTrack )
{
	$("#tracklist tr#" + sTrack + " td.trackControl img").attr( "src", oStopIcon.attr("src") ).show();
}

function showPlayIcon( sTrack )
{
	$("#tracklist tr#" + sTrack + " td.trackControl img").attr( "src", oPlayIcon.attr("src") ).show();
}

function hideControlIcon( sTrack )
{
	$("#tracklist tr#" + sTrack + " td.trackControl img").hide();
}

function showProgressIcon( sTrack )
{
	$("#tracklist tr#" + sTrack + " td.trackName img").attr( "src", oProgressIcon.attr("src") ).show();
}

function hideProgressIcon( sTrack )
{
	$("#tracklist tr#" + sTrack + " td.trackName img").hide();
}

function playTrack( sTrack )
{
	$("#jplayer").jPlayer(
		"setFile",
		"/stream/radiantcity/mp3/" + sTrack + ".mp3",
		"/stream/radiantcity/ogg/" + sTrack + ".ogg"
	);
	
	$("#jplayer").jPlayer("play");
}

function stopTrack( sTrack )
{
	$("#jplayer").jPlayer("stop");
}

// Set load callback
$(document).bind( "ready", onDocLoaded );
