var currentPage = "";
var pageTransitionSpeed = 250;
var urlUpdateTimeout;
var initialized = false;
var initialLoad = true;
var initialPage = "";
var curTab = undefined;
var curTab = undefined;
var suppress = false;
var isPlaying = false;
var soundObject = undefined;
var soundObject = undefined;
var songLoadedPercent = 0;
var songDuration = 0;
var controlTemplate = '<div id="control-template"><div class="controls"><div class="statusbar"><div class="loading"></div><div class="position"></div></div></div>';
var isOldIE = IsOldIE();
var windowResizeTimeout;
var hasWebdings;
var latestTweetData;
var playerIndex = 0;
var bgdPlayerData;
var trackHashMap = new Hash();
var isPaused = false;
var ajaxUrlCleanRegex = new RegExp("[^A-z0-9_-\d/~\.+]", "g");
var playSingle = false;
var curPlaying;
var numBackgroundPlays = -1;

// If this is a load from a bookmark, or an email link, or etc., redirect to a non-AJAX-y URL.
if (window.location.hash.indexOf("#") > -1 && initialLoad) {
	suppress = true;
    var actualPage = window.location.hash.replace("#/", "");
    window.location = actualPage;
}

var sPath = window.location.pathname;
curPage = sPath.substring(sPath.lastIndexOf('/') + 1);

initialPage = curPage;

var soundReady = false;
if (typeof soundManager != "undefined") {
    soundManager.url = 'swf';
    soundManager.flashVersion = 9;
    soundManager.debugMode = false;
}

$(function() {
	font.setup();
	var date = new Date();
	var ticks = date.getTime(); // cachebusting.
	$.ajax({
		url: "player.txt?h=" + ticks,
		success: function(msg) {
	        bgdPlayerData = eval('(' + msg + ')');
	        // We do a lot of file-based lookups, so let's make a hashmap.
	        var i = null;  
			for (i = 0; bgdPlayerData.songs.length > i; i += 1)  
			{
				trackHashMap.setItem(bgdPlayerData.songs[i].f, bgdPlayerData.songs[i]);
				if(bgdPlayerData.songs[i].p == "true")
					numBackgroundPlays++;
			}
			SetUpPlayer();
			SetUpTrackList();
	  	}
	});

	hasWebdings = font.isInstalled("Webdings");
	RetrieveLatestTweets(1);
	SetUpPage();
	
	if(initialLoad)
	{
	//$("div.faosModal").fadeIn(100, function() {});
	//setTimeout(DoFaOS, 1000);
	/*$(".faosLink, .faosClose").live("click", function() {
		$("#modal").fadeOut(150);
	});*/
	}
});

function DoFaOS()
{
	// And, our FaOS Splash Page!
	$("#faosGrid").animate({'height':'90%'}, "slow", function() {
		$(this).animate({'width':$(this).height()}, "slow", function() {
			BeginFaOSAnim();
		});
	});
}

function BeginFaOSAnim()
{
	$("#faosGrid td").width($("#faosGrid").width() / 4).height($("#faosGrid").height() / 4);
	LoadAndPulse($("td#benediction"));
}

function LoadAndPulse(item)
{
	$("<img>").attr("src", "albums/faos/" + $(item).attr("img")).css({"opacity":"0.0","width":"100%","height":"100%"}).load(function() {
		$(this).animate({"opacity":"1.0"}, 120, function() {
			$(this).animate({"opacity":"0.0"}, 60, function() {
				if($(item).attr("next") != undefined)
					LoadAndPulse($("#faosGrid td")[$(item).attr("next") - 1]);
				else
					setTimeout(ShowAll, 200);
			});
		});
	}).appendTo($(item));
}

function ShowAll()
{
	$("#faosGrid td img").animate({'opacity':'1.0'}, 3000);
	$("#bottomtitle p").fadeIn(3000);
	setTimeout(ShowCover, 5000);
}
function ShowCover() 
{
	var wh = $("#faosGrid").width();
	var t = $("#faosGrid").offset().top;
	$("<img id='faosCoverFade'>").attr("src", "albums/faos/cover_600.jpg").css({"position":"absolute","top":t + "px", "left":"50%", "margin-left": "-" + (wh/2) + "px","opacity":"0.0","width":wh, "height":wh}).load(function() {
		$("#faosGrid").fadeOut(1000);
		$(this).animate({"opacity":"1.0"}, 1000, function() {
		 TagLinks();
		});
	}).appendTo("#modal");
}

function TagLinks()
{
	var oneEm = $("<span id='oneem'>g</span>").appendTo("body").height();
	var w = $("#faosCoverFade").width();
	var h = $("#faosCoverFade").height() * 1;
	var t = $("#faosCoverFade").offset().top * 1;
	$("#faosLinks").width((w - (oneEm * 3)) + "px").css({"margin-left": "-" + (w / 2) + "px","top": (h - ($("#faosLinks").height()) - (oneEm * 2)) + "px"}).fadeIn("fast");
	$("span#oneem").remove();
}
$(".footerLink").live("click", function(e) {
    initialLoad = false;
    if(e.which == 1)
    {
		$.address.value($(this).attr('href'));
		e.stopPropagation();
		e.preventDefault();
	}
});

$("section ul.filterArticles li['id']").live("click", function(e) {
	initialLoad = false;
    if(e.which == 1 && !$(this).hasClass("active"))
    {
    	var btn = $(this);
    	$(btn).addClass("active").siblings(".active").removeClass("active");
    	var theseArticles = $(btn).parents("section").find("article:not(.static)");
    	$(theseArticles).sortElements(function(a, b){
  		  return $(a).attr("class") > $(b).attr("class") ? 1 : -1;
		}).show();

    	// Apply filters. Is this "all"?
	    if($(btn).attr("id") != "all")
        	$(theseArticles).not("." + $(btn).attr("id")).hide();
    		
    	HandleArticleFlow('music', 3);
    }
});

$("section ul.filterColumns li['id']").live("click", function(e) {
	initialLoad = false;
    if(e.which == 1 && !$(this).hasClass("active"))
    {
    	var btn = $(this);
    	$(btn).addClass("active").siblings(".active").removeClass("active");
    	var theseColumns = $(btn).parents("section").find("div.filteredColumn");
		$(theseColumns).each(function() {
	    	var theseArticles = $(this).find("article:not(.static)");
	    	$(theseArticles).sortElements(function(a, b){
	  		  return $(a).children("h3").text() > $(b).children("h3").text() ? 1 : -1;
			}).slideDown(200);
	
	    	// Apply filters. Is this "all"?
		    if($(btn).attr("id") != "all")
	    		$(theseArticles).not("." + $(btn).attr("id")).slideUp(200);
	    });
    }
});


$(".ajaxButton").live("click",function(e) {
	initialLoad = false;
	if(e.which == 1)
    {
    	if($(this).attr('href').indexOf("http://") > -1)
    		return true;
		$.address.value($(this).attr('href'));
		e.stopPropagation();
		e.preventDefault();
	}
});

// Handler for the jQuery address plugin
$.address.change(function(event) {
    var l = "";
    if (event.pathNames.length == 0)
        l = initialPage;
    else {
        l = event.path.replace(/^#/, '').replace('/', '');
    }

    var t = $.address.hash();
    if (curPage == initialPage && initialLoad && l == "") {
        return;
    }
    l = (l == "") ? initialPage : l;
	if(jQuery.trim(l) == "")
	{
		l = "index.html";
	}	
	if(l == "index.html")
		curTab = undefined;

    if (curPage != l) {
    	var needAdjustColumns = $(".three-column").length == 0;
    	// override
    	needAdjustColumns = false;
    	pageScrollTop();
		$("#loader").fadeIn(100, function() {
	        pageNum = 0;
	        curPage = l;
	        var d = new Date();
	        var t = d.getTime();
	        $("#loadContainer").load(l + "?hb=" + t + " #ajaxLoad", function() {
	        	LogAnalytics(l);
	        	CheckSoundStatus();
	        	// Page-specific content hooks.
				var thisPage = $("#ajaxLoad").attr("class");
				document.title = $("#ajaxLoad").attr("alt");
				switch(thisPage)
				{
					case "newsPage":
						HandleTweetData();
						if(needAdjustColumns)
						{
							$("#news").removeClass("columnize").removeClass("three-column");
							$("#news article").hide();
							$("#news").addClass("columnize").addClass("three-column", 150, function() {
								$("#news article").fadeIn(200);	
							});
						}
						break;
				}

				if(curPage.indexOf("index") > -1)
				{
	
	        	}
	        	
        		$("a.active").removeClass("active");
				$(curTab).find("a").addClass("active");
				if($("#ajaxLoad:not(:visible)")) {
					$("#ajaxLoad").fadeIn(100, function() {
						SetUpPage();
					});
				}
				else
					SetUpPage();

		       	$("#loader").fadeOut(300);
	        });
        });
    }
});

soundManager.onready(function() {
    CheckSoundStatus();
});

function CheckSoundStatus() {
    if (typeof soundManager != "undefined") {
        if (soundManager.supported()) { // Hooray! SM2 loaded.
            soundReady = true;
        } else { // BOO
			$("#topPlayer").addClass("flashError").html("<h6><strong>You must have Flash enabled to play tracks on Luquado.com</strong>. Please disable any Flash blockers and try again.</h6>").slideDown("fast");
			$("head").append("<style type=\"text/css\" charset=\"utf-8\">.playerButton{ display: none !important;}");
            soundReady = false;
        }
    }
}
$(window).resize(function() {
	clearTimeout(windowResizeTimeout);
	windowResizeTimeout = setTimeout(HandleSize, 100);
});

function HandleSize() {
	if($(window).width() < 1280)
	{
		$("section#music .photoTiles li p").css({"text-align":"center","padding-left":"8%","padding-right":"8%","width":"292%"});
		$("section#music .photoTiles li.t1 p, section#music .photoTiles li.t2 p, section#music .photoTiles li.t3 p").css({"padding-top":"124%", "height":"72%"});
		$("section#music .photoTiles li.t4 p, section#music .photoTiles li.t5 p, section#music .photoTiles li.t6 p").css({"padding-top":"32%", "height":"170%"});
		$("section#music .photoTiles li p cite").hide();
	}
	else
	{
		$("section#music .photoTiles li p").removeAttr("style").css({"background":"transparent"});
		$("section#music .photoTiles li p cite").show();
	}
}
function SetUpPage()
{	
	$(".column:first:not(.start-two):not(.start-three)").css("border-left","none");
	$(".column:last").css("border-right","none");
	$("section ul.filters").show();
	$("a.thumb").lightBox({fixedNavigation:true});
	
	// A little bit of help for album hover flashes, if users have JS enabled & not IE...
	if (!isOldIE) {
		HandleSize();
		
		$("section#music .photoTiles li a").hover(function() {
			$(this).parents("li").siblings("li").stop().animate({"opacity":"0.05"}, 150);
		}, function() { 
			$(this).parents("li").siblings("li").stop().animate({"opacity":"1.0"}, 150); //css("opacity","1.0");
		});
		
	} else {
		// Give the poor saps something.
		$("section#music .photoTiles li a").each(function() { 
			$(this).attr("title", $(this).parents("li").find("p span").text());
		});
	}
	
	if($(window).height() < 690 && $(window).width() < 1850) {
		$(".toggleCol ul").hide();
		$(".toggleCol").css("border","none").addClass("toggled").hover(function() {
			$(this).find("ul").slideDown(150); 
		}, function() {
			$(this).find("ul").slideUp(150); 
		});
	}

	// Page-specific content hooks.
	var thisPage = $("#ajaxLoad").attr("class");
	switch(thisPage)
	{
		case "newsPage":
			HandleTweetData();
			HandleArticleFlow('news', 3);
			break;
		case "musicPage":
			HandleArticleFlow('music', 3);
			break;
		case "downloadPage":
			break;
		case "homePage":
			//PopulateTopNews();
			break;
	}
	
	$(".player img").load(function() {
		$(this).animate({"opacity":"1.0"},150);
	});
	if(bgdPlayerData != undefined)	
	{
		SetUpPlayer();
		SetUpTrackList();
	}
}

$(".more").live("click", function() {
	$(this).parents("h3").next(".photoTiles").find("li.hidden").slideDown();
});

$.support.transition = (function(){ 
    var thisBody = document.body || document.documentElement,
    thisStyle = thisBody.style,
    support = thisStyle.WebkitTransition !== undefined || thisStyle.MozTransition !== undefined || thisStyle.OTransition !== undefined || thisStyle.transition !== undefined;
    
    return support; 
})();

function IsOldIE() { return ($.browser.msie && ($.browser.version == "6.0" || $.browser.version == "7.0") ); }

function HandleTweetData()
{
	if(latestTweetData != undefined)
	{
		$("article.headline h2, article.headline h1").fadeOut(100, function() {
			$("article.headline h1").html("Latest from <a href=\"http://twitter.com/Luquado\">@Luquado</a>: <strong>" + latestTweetData[0].text + "</strong> posted " + dateReference(latestTweetData[0].created_at)).fadeIn(100);
		});
	}		
}

function HandleArticleFlow(id, num)
{
	var articles = $("#" + id + " article:visible");
	var invisiDiv  = $("#" + id + " article:not(:visible)"); 
	$("#" + id + " article").remove();
	var a = 0;
	var div;
	for(var i = 0; i <= articles.length; i++)
	{
		a++;
		if((a > num && div != undefined) || i == articles.length)
		{
			$(div).append("<span class=\"clearer\"></span>");
			$("#" + id).append(div);
			div = undefined;
			a = 1;
		}
		if(div == undefined)
			div = $("<div></div>");
		
		$(div).append(articles[i]);
	}
	$("#" + id).append(invisiDiv);

}
// Returns a JSON object from Twitter with the latest X tweets by me.
function RetrieveLatestTweets(count){
	// Page-specific content hooks.
	var thisPage = $("#ajaxLoad").attr("class");
	if(latestTweetData == undefined)
	{
	    var url = "http://api.twitter.com/1/statuses/user_timeline.json?screen_name=Luquado&trim_user=1&count=" + count + "&callback=?";
		$.getJSON(url, function(data){
			latestTweetData = eval(data);
			if(thisPage == "newsPage")
				HandleTweetData();
		});
	}
}

function PopulateTopNews()
{
	// Load the news from allnews.html
	var news;
	var d = new Date();
    var t = d.getTime();
	$.get("allnews.html?hb=" + t + " #news", function(data) {
		news = $(data).find("#news article");
		$("#news").append(news[0]).append(news[1]);
		$("#news .lastPost").removeClass("lastPost").last().addClass("lastPost");
	});
	

}
$(".downloadLink a").live("click", function(e) {
	e.stopPropagation();
	e.preventDefault();
	var url = $(this).attr("href");
	// Log it.
	LogAnalyticsRedirect(url, true);
});
$("#skip").live("click", function(e) {
	$(this).hide();
	e.stopPropagation();
	e.preventDefault();
	HandleNext();
});
$("#prev").live("click", function(e) {
	$(this).hide();
	e.stopPropagation();
	e.preventDefault();
	HandlePrev();
});

$(".playPause:not(.pause,.stop,.tracklistPlayer,.albumPlayer)").live("click", function() {
	if(soundReady) {
		$(".stop").hide().removeClass("stop").show();
		$(".pause").hide().removeClass("pause").show();		
		if(!isPaused)
			playSingle = false;
		isPaused = false;
		$("#topPlayer .playPause").hide();
		if(isPlaying) {
			soundManager.resumeAll();
			$("#topPlayer .playPause").addClass("pause").show();
		}
		else
		{
			$("#topPlayer").slideDown("fast");
			PlayTrack(null, bgdPlayerData.songs[playerIndex].f);
	    }
	}	
});
$(".playPause.albumPlayer:not(.pause,.stop)").live("click", function() {
	if(soundReady) {
		$(".stop").hide().removeClass("stop").show();
		$(".pause").hide().removeClass("pause").show();		
		playSingle = true;
		isPaused = false;
		var btn = $(this);
		$(btn).hide();
		// Find this song.
		var s;
		var f = $(this).attr("alt");
		// NEW: Look up the track by hash map.
		playFile = trackHashMap.items[f];
		playerIndex = playFile.i;
		PlayTrack(btn, playFile.f);
	}	

});
$(".playPause.tracklistPlayer:not(.pause,.stop)").live("click", function() {
	if(soundReady) {
		$(".stop").hide().removeClass("stop").show();
		$(".pause").hide().removeClass("pause").show();		
		playSingle = false;
		isPaused = false;
		var btn = $(this);
		$(btn).hide();
		// Find this song.
		var s;
		var f = $(this).attr("alt");
		playFile = trackHashMap.getItem(f);
		playerIndex = playFile.i;
		PlayTrack(btn, bgdPlayerData.songs[playerIndex].f);
	}	

});
$(".playPause.pause").live("click", function() {
	soundManager.pauseAll();
	isPaused = true;
	$(".pause").hide().removeClass("pause").show();
});
$(".playPause.stop").live("click", function() {
	$(".stop").hide().removeClass("stop").show();
	HandleStop();
});
function HandleStop() {
	soundManager.stopAll();
	isPlaying = false;
	SetUpPlayer();
	if(soundObject != undefined)
		soundObject.destruct();
	$("#statusBar").fadeOut("fast", function() {
		$(this).css("width", "0%").show();
	});
	$(".playPause.pause").removeClass("pause");
	$(".playPause.stop").removeClass("stop");
}

function HandleNext()
{
	if(!playSingle)
	{		
		// Now to find the next "player" track.
		while(playerIndex <= bgdPlayerData.songs.length)
		{
			playerIndex++;
			if(playerIndex == bgdPlayerData.songs.length)
			{
				playerIndex = 0;
				break;
			}	
			if(bgdPlayerData.songs[playerIndex].p == "true")
				break;		
		}
		SetUpPlayer();
		if(isPlaying)
		{
			$("#statusBar").fadeOut("fast", function() {
				$(this).css("width", "0%").show();
				PlayTrack($("#topPlayer .playPause"), bgdPlayerData.songs[playerIndex].f);
			});
		}
		if(isPaused)
			isPlaying = false;
		$("#skip").show();
	}
	else
	{
		// Find the next song on the album.
		if(curPlaying != undefined)
		{
			var thisPlay = $(".albumPlayer[alt='" + curPlaying + "']");
			var nextPlay = $(thisPlay).parents("article").next().find(".albumPlayer");
			if(nextPlay.length > 0)
			{
				$("#statusBar").fadeOut("fast", function() {
					$(this).css("width", "0%").show();
					var s;
					var f = $(nextPlay).attr("alt");
					for(var i = 0; i< bgdPlayerData.songs.length; i++)
					{
						if(bgdPlayerData.songs[i].f == f)
						{
							playerIndex = i;
							break;
						}
					}
					PlayTrack(nextPlay, bgdPlayerData.songs[playerIndex].f);
				});
				
			}
			else
				HandleStop();
			if(isPaused)
				isPlaying = false;
			$("#skip").show();
		}
	}
}
function HandlePrev()
{
	if(!playSingle)
	{
		playerIndex--;
		if(playerIndex < 0)
			playerIndex = bgdPlayerData.songs.length -1;
		SetUpPlayer();
		if(isPlaying)
		{
			$("#statusBar").fadeOut("fast", function() {
				$(this).css("width", "0%").show();
				PlayTrack($("#topPlayer .playPause"), bgdPlayerData.songs[playerIndex].f);
			});
		}
		if(isPaused)
			isPlaying = false;
		$("#prev").show();
	}
	else
	{
		// Find the next song on the album.
		if(curPlaying != undefined)
		{
			var thisPlay = $(".albumPlayer[alt='" + curPlaying + "']");
			var nextPlay = $(thisPlay).parents("article").prev().find(".albumPlayer");
			if(nextPlay.length > 0)
			{
				$("#statusBar").fadeOut("fast", function() {
					$(this).css("width", "0%").show();
					var s;
					var f = $(nextPlay).attr("alt");
					for(var i = 0; i< bgdPlayerData.songs.length; i++)
					{
						if(bgdPlayerData.songs[i].f == f)
						{
							playerIndex = i;
							break;
						}
					}
					PlayTrack(nextPlay, bgdPlayerData.songs[playerIndex].f);
				});
				
			}
			else
				HandleStop();
			if(isPaused)
				isPlaying = false;
			$("#prev").show();
		}
	}
}
function PlayTrack(btn, file) {
	var date = new Date();
	var ticks = date.getTime(); // cachebusting.
	LogAnalytics("audio/" + file);
	if(soundObject != undefined)
		soundObject.destruct();

	SetUpPlayer();
	curPlaying = file;
	soundObject = soundManager.createSound({
	    id: 'playerSound' + ticks,
	    url: "audio/" + file,
	    volume: 75,
	    onplay: function() {
	    	isPlaying = true;
	    	if(btn != null)
	    		if(playSingle)
					$(btn).addClass("stop").show();
				else
					$(btn).addClass("pause").show();
			$("#topPlayer .playPause").addClass("pause").show();
	    },
	    whileloading: function() {
	    	// get the total amount loaded.
		    songLoadedPercent = (bytesLoaded / bytesTotal);
		    songDuration = duration;
		    // position & duration may be relative!
		    var realSongDuration = 0;
		    if (songLoadedPercent == 1)
		    {
		        realSongDuration = songDuration;
		    }
		    else
		        realSongDuration = songDuration / songLoadedPercent;
		
		    var realPositionPercent = (this.position / realSongDuration) * 100;
	    	$("#statusBar").css("width", realPositionPercent + "%");

	    },
	    whileplaying: function() {
	    	// position & duration may be relative!
		    var realSongDuration = 0;
		    if (songLoadedPercent == 1)
		        realSongDuration = songDuration;
		    else
		        realSongDuration = songDuration / songLoadedPercent;
		
		    var realPositionPercent = (this.position / realSongDuration) * 100;
	    	$("#statusBar").css("width", realPositionPercent + "%");
	    },
	    onfinish: function() {
	    	if(!playSingle)
		    	HandleNext();
		    else
		    	HandleStop();
		},
	    onload: function() {
	    	songLoadedPercent = 1;
		    songDuration = this.duration;
		    this.play();
	    }
	});
	
	if(!isPaused)
		soundObject.load();
}

function SetUpTrackList()
{
	if($("#listenColumn").length > 0)
	{
		var col = $("#listenColumn");
		var songs = jQuery.extend(true, {}, bgdPlayerData); // deep copy this object so we can work with it independently.
		songs = songs.songs.sort(function(el1,el2) { return el1.t.replace("the","") > el2.t.replace("the","") ? 1 : -1; } );
		for(var i = 0; i<songs.length; i++)
		{
			if(songs[i].p != "true")
				continue;
			
			var albumArt = "";
			if(eval("bgdPlayerData.albums.a" + songs[i].a) != undefined)
			{
				var albumUrl = eval("bgdPlayerData.albums.a" + songs[i].a + ".u");
				albumArt = eval("bgdPlayerData.albums.a" + songs[i].a + ".c");
				var albumTitle = eval("bgdPlayerData.albums.a" + songs[i].a + ".t");
				var albumAdd = eval("bgdPlayerData.albums.a" + songs[i].a + ".d");
			}
			if(albumArt == "")
				albumArt = "default.png";
			albumArt = "albums/" + albumArt;

			var art = $("<article></article>");
			$(art).append("<img src=\"" + albumArt + "\" class=\"tracklistArt\" />");
			$(art).append("<h3>" + songs[i].t + "</h3>");
			$(art).attr("class", songs[i].c);
			$(art).append("<p class=\"tags\"><em>" + songs[i].c + "</em></p>");
			var albumInfo;
			if(albumUrl != "")
				albumInfo = $("<p>From the album <a href='" + albumUrl + "' class='ajaxButton' target='_blank'>" + albumTitle + "</a></p>");
			else
				albumInfo = $("<p>From the album <strong>" + albumTitle + "</strong></p>");				
				
			if(albumAdd != "")
				$(albumInfo).html($(albumInfo).html() + albumAdd);
			
			$(art).append(albumInfo);
			$(art).append("<div class=\"playPause playerButton tracklistPlayer\" alt=\"" + songs[i].f + "\">Play<span></span></div>");
			$(col).append(art);
		}
	}
}
function SetUpPlayer()
{
	$(".stop").removeClass("stop");
	var t = GetPlayerField("songTitle");
	$("h3.songTitle").text(t);
	if(isPlaying)
		$("#topPlayer h3.songTitle").text("Now Playing: " + t);
	var albumUrl = GetPlayerField("albumUrl");
	var albumArt = GetPlayerField("albumArt");
	if(albumUrl != "")
	{		
		$(".player h5 em strong").hide();	
		$(".player h5 em a").text(GetPlayerField("albumTitle")).attr("href",albumUrl).attr("target","_blank").show();
	}
	else
	{
		$(".player h5 em a").hide();			
		$(".player h5 em strong").text(GetPlayerField("albumTitle")).show();
	}
	
	$(".player h5 span").text(GetPlayerField("albumAdditional"));
	
	if(albumArt == "")
		albumArt = "default.png";
	
	albumArt = "albums/" + albumArt;
	
	$(".player img").each(function() {
		if($(this).attr("src") != albumArt)
		{
			$(this).animate({"opacity":"0.0"}, 100, function() {
				$(this).attr("src",albumArt);
			});
		}
	});

	// Get the player's songs.
	var date = new Date();
	var ticks = date.getTime(); // cachebusting.

	if(isPlaying)
	{
		$("#topPlayer.playPause:not(.pause)").addClass("pause");
		$("#player .playPause").hide();
	}
	else
		$("#player .playPause").show();
}

function GetPlayerField(field)
{
	switch(field)
	{
		case "songTitle":
			return bgdPlayerData.songs[playerIndex].t;
			break;
		case "albumTitle":
			return eval("bgdPlayerData.albums.a" + bgdPlayerData.songs[playerIndex].a + ".t");
			break;
		case "albumUrl":
			return eval("bgdPlayerData.albums.a" + bgdPlayerData.songs[playerIndex].a + ".u");
			break;
		case "albumAdditional":
			return eval("bgdPlayerData.albums.a" + bgdPlayerData.songs[playerIndex].a + ".d");
			break;
		case "albumArt":
			return eval("bgdPlayerData.albums.a" + bgdPlayerData.songs[playerIndex].a + ".c");
			break;
	}
}
function LogAnalyticsRedirect(url, redirect) {
    var pageTracker = _gat._getTracker("UA-668538-3");
    if (pageTracker) {
        pageTracker._trackPageview("/" + CleanUrl(url));
        if(redirect)
			window.location.href = url;
    }
}

function LogAnalytics(url) {
    var pageTracker = _gat._getTracker("UA-668538-3");
    if (pageTracker) {
        pageTracker._trackPageview("/" + CleanUrl(url));
    }
}
function CleanUrl(str) {
    return str.replace(ajaxUrlCleanRegex, "-").toLowerCase();
}
