dojo.require("dojo.io.cookie");

// define LFM for display functions
var isLFM = '';
// value calculated in initializePage function on index.html


var allTracks = "";
var allArtists = "";
var allPlaylists = "";
var allGenres = "";
var addedTracks = new Array();
var artistTracks = "";
var currentPlaylistTracks = "";
var data = "";
var tracksPerPage = 100;
activeDisplay = "";
var activeDisplayType = "";
var currentSort = new Array();
var activePlaylist = "";
var currentPlaylist = "";
var currentPage = 0;
var totalPages = 0;
var recentTracks = new Array();
var currentArtist = "";
var currentPlaylistID = "";
var currentPlaylistName = "";
var genreMap = ["Unknown", "Alternative", "Blues", "Children's Music", "Christian/Gospel", "Classical", "Comedy &amp; Spoken Word", "Country", "Electronica", "Easy Listening", "Americana", "Hip-Hop/Rap", "Twelve", "Jazz", "Latin", "New Age", "Pop", "R&amp;B", "Eighteen", "Rock", "Soundtrack", "Twenty-One", "World/Reggae"];
// Here is the (commented out) English version , German below
// var itemMap = ["track", "album", "playlist", "playlist", "artist", "radio", "", "work"];
// var mp3Map = ["MP3", "Album (MP3s)", "Playlist (MP3s)", "Playlist (MP3s)", "artist", "radio", "", "work"];
// var wmaMap = ["WMA", "Album (wmas)", "Playlist (wmas)", "Playlist (wmas)", "artist", "radio", "", "work"];

var itemMap = ["titel", "album", "playlist", "playlist", "artist", "radio", "", "work"];
var mp3Map = ["Titel", "Album", "Playlist", "Playlist", "artist", "radio", "", "work"];
var wmaMap = ["WMA", "Album (wmas)", "Playlist (wmas)", "Playlist (wmas)", "artist", "radio", "", "work"];
var explicitPlaylist = false;

function dumpArtistAlbums(aid,genre) {
	var arr = collection.store.getArtistAlbums(aid,genre)
	var url = "";
	if(typeof(genre) != "undefined") {
		url = 'http://home.de.napster.com/MyLibrary/ArtistByGenre/' + aid + '/' + genre;
	} else {
		url = 'http://home.de.napster.com/MyLibrary/Artist/' + aid;
	}
	var returnText = '<li><a onclick="sideBarNavigate(\'' + url + '\', this); return false;" href="javascript:;">All Tracks</a></li>';
	for(var item in arr) {
		var value = arr[item];
		if(typeof(value) == 'string') { //Make sure we don't have an array,
			url = 'http://home.de.napster.com/MyLibrary/Album/' + item.substring(1);
			returnText += '<li><a href="javascript:;" onclick="sideBarNavigate(\'' + url + '\', this); return false;" title="' + value + '">' + value + '</a></li>';
		}
	}
	return returnText;
}

function dump(arr,level) {
	var dumped_text = "";
	if(!level) level = 0;
	
	if(level > 0) { dumped_text += "<ul>"; }
	if(typeof(arr) == 'object') { //Array/Hashes/Objects
		if(level == 1) { // Get the artist names so we can sort
			var sortArr = new Array();
			var artistArr = new Array();
			var sendArr = new Array();
			for(var item in arr) {
				if(item != "toSource") {
					artistName = collection.store.getArtistName(item.substring(1));
					artistArr[artistName] = item;
					sortArr.push(artistName);
				}
			}
			sortArr.sort();
			for(var sortItem in sortArr) {
				if(sortItem != "toSource") {
					artistName = sortArr[sortItem];
					artistID = artistArr[artistName];
					// dojo.debug("sortItem: " + sortItem + " artistName: " + artistName);
					// sendArr[artistName] = arr[artistID]
					if(typeof(artistID != 'undefined')) { sendArr[artistID] = artistName }
				}
			}
			arr = sendArr;
			sortArr = new Array();
		}
		for(var item in arr) {
			var value = arr[item];
			if(typeof(value) != 'function') {
				if(typeof(value) == 'object') { //If it is an array,
					switch(level){
						case 0: dumped_text += "<li><a href='#' id='gid_" + item + "'>" + genreMap[item] + "</a>"; break;
						case 1: dumped_text += "<li><a href='#'>" + item + "</a>"; break;
						default: dumped_text += item; break;
					}
					dumped_text += dump(value,level+1);
					dumped_text += "</li>";
				} else {
					/* if(typeof(value) == 'string') {
						if((item != "toSource") && (value != "")) { // These checks are necessary to prevent IE from writing out our toSource function as an artist. */
							dumped_text += '<li><a href="#">' + value + '</a><ul id="aid_' + item.substring(1) + '"></ul></li>';
						/* }
					} */
				}
			}
		}
	}
	if(level > 0) { dumped_text += "</ul>"; }
	return dumped_text;
} 

function createVisitorLibNav() {
	//
	dojo.byId("libraryArtists").parentNode.className = 'arrow_r';
	dojo.byId("libraryArtists").parentNode.innerHTML = '<a href="javascript:;" onclick="showVisitorPop(); return false;">View By Artists</a>';
	dojo.byId("libraryPlaylists").parentNode.className = 'arrow_r';
	dojo.byId("libraryPlaylists").parentNode.innerHTML = '<a href="javascript:;" onclick="showVisitorPop(); return false;">Meine Playlists</a>';
}

var libraryDisplay = {
    initialize: function(refresh_playlists) {
		// empty out any existing data
		if(typeof(refresh_playlists) == "undefined") { refresh_playlists = true; }
		allArtists = '';
		allGenres = '';
		allTracks = '';
		if(refresh_playlists) { allPlaylists = ''; }
    	// dojo.debug("libraryDisplay.initialize running");
		// var t = new Date();
		// dojo.debug("entering libraryDisplay initialize - " + t);
		// this.writeAllGenres();
		// t = new Date();
		// dojo.debug("finished libraryDisplay initialize writeAllGenres() - " + t);
        this.writeAllArtists();
		// t = new Date();
		// dojo.debug("finished libraryDisplay initialize writeAllArtists() - " + t);
        if(refresh_playlists) { this.writeAllPlaylists(); }
		// t = new Date();
		// dojo.debug("finished libraryDisplay initialize writeAllPlaylists() - " + t);
		ntreeCreate("bar2");
		// t = new Date();
		// dojo.debug("exiting libraryDisplay initialize - " + t);
        // rp.store.getRecentTracks(tracksPerPage,"libraryDisplay.displayRecentTracks(1,data)","libraryDisplay.appendTracks(data,\"recentTracks\")","libraryDisplay.updatePagination(\"recentTracks\",\"displayRecentTracks\")");
    },
	
	dateStringFromUTC: function(inUTCTime) {
		dateObj = new Date(inUTCTime * 1000);
		returnString = (dateObj.getMonth() + 1) + "/" + dateObj.getDate() + "/" + dateObj.getFullYear();
		return returnString;
	},

    writeAllArtists: function() {
		// dojo.debug("in writeAllArtists");
         if(allArtists.length < 1) { 
			//dojo.debug("in writeAllArtists - length was " + allArtists.length);
            allArtists = collection.store.getArtists();	
            var out = "";
			var r = 0;
            // for (var r = 0; r < allArtists.length; r++) {
				// setTimeout("", 2);
				// out += '<li><a href="#" title="' + allArtists[r]['n'] + '" onClick="libraryDisplay.displayArtistTracks(\'' + allArtists[r]['id'] + '\',\'' + allArtists[r]['n'] + '\')\; return false;">' + allArtists[r]['n'] + '</a></li>';
				// out += '<li><a href="#" title="' + allArtists[r]['n'] + '" onClick="libraryDisplay.displayArtistTracks(\'' + allArtists[r]['id'] + '\',\'\')\; return false;">' + allArtists[r]['n'] + '</a></li>';
				
				dojo.byId("libraryArtists").innerHTML = "<ul><li><span class='loadingMessage'>loading...</span></li></ul>";
				var artistsInterval = setInterval( function(){
					if(r < allArtists.length) {
						out += '<li><a href="#">' + allArtists[r]['n'] + '</a>';
						out += '<ul id="aid_' + allArtists[r]['id'] + '"></ul></li>'; // Blank UL (with aid_artistID) stubbed, we get albums on demand
						r++;
					} else {
						dojo.byId("libraryArtists").innerHTML = out;
						ntreeCreate("bar2");
						clearInterval(artistsInterval);
					}
				}, 1);
				/* out += '<li><a href="#">' + allArtists[r]['n'] + '</a>';
				out += '<ul id="aid_' + allArtists[r]['id'] + '"></ul></li>'; // Blank UL (with aid_artistID) stubbed, we get albums on demand */
            // }
            //dojo.debug("library_display - out is: " + out);
            // dojo.byId("libraryArtists").innerHTML = out;
            // dojo.byId("artistOutput").style.display = !dojo.byId("artistOutput").style.display ? "none" : dojo.byId("artistOutput").style.display;
        }
    },
	
	writeAllGenres: function() {
		//dojo.debug('in writeAllGenres');
		if(allGenres.length < 1) { 
			//dojo.debug("in writeAllGenres loop - length was " + allGenres.length);
			collection.store.getGenreAlbums();
			/*allAlbums = collection.store.getGenreAlbums();
			artistsOut = dump(allAlbums);
			dojo.byId("libraryGenres").innerHTML = artistsOut;
			downList(dojo.byId("libraryGenres")); */
        }
	},

    displayAllArtists: function() {
		if(dojo.byId("artistOutput").innerHTML != "") {
	            dojo.byId("artistsExpandedImg").style.visibility == "visible" ? dojo.byId("artistsExpandedImg").style.visibility = "hidden" : dojo.byId("artistsExpandedImg").style.visibility = "visible";
	            dojo.byId("artistOutput").style.display == "none" ? dojo.byId("artistOutput").style.display = "block" : dojo.byId("artistOutput").style.display= "none";
		}
    },
	
    _appendActivePlaylist: function(pname, pid) {
        var selectElement = dojo.byId("activePlaylist");
        var optionElement = document.createElement("option");
        optionElement.text = pname;
            optionElement.value = 'p' + pid;

            try {
                    selectElement.add(optionElement, null); // standards compliant; doesn't work in IE
            } catch(ex) {
                    selectElement.add(optionElement); // IE only
            }
    },

    writeAllPlaylists: function() {
        if(allPlaylists.length < 1) {
            allPlaylists = collection.store.getPlaylists();
            var libraryOut = "";
			var popupOut = "";
			// popupContainerClick
			/* out += '<div class="playlistNameDisplay"><a href="#" onClick="setTimeout(\'showAddPlaylistPop()\', 50); return false;"><strong>(+) Create New Playlist</strong></a></div>';
			dojo.byId("activePlaylist").innerHTML = '<option value="">Please select a playlist</option>';
			dojo.byId("activePlaylist").innerHTML += '<option value="">------------------------</option>'; */
			
			libraryOut += '<li id="playlist0" class="dropLibrary"><a href="javascript:;" onclick="showNewPlaylistPop(); return false;">(+)Neue Playlist erstellen</a></li>';
			libraryOut += '<li><a href="javascript:;" onclick="sideBarNavigate(\'http://home.de.napster.com/MyLibrary/RecentlyPlayed\', this); return false;">Zuletzt gehörte Titel</a></li>';
			libraryOut += '<li><a href="javascript:;" onclick="sideBarNavigate(\'http://home.de.napster.com/MyLibrary/RecentlyAdded\', this); return false;">Zuletzt hinzugefügt</a></li>';
            for (var r = 0; r < allPlaylists.length; r++) {
				var playlistName = new String(allPlaylists[r]['n']);
				playlistName = html_escape(playlistName);
				// setTimeout("", 2);
                // out += '<li id="playlist' + allPlaylists[r]['id'] +'" class="dropLibrary"><a href="#" title="' + allPlaylists[r]['n'] + '" onClick="libraryDisplay.displayPlaylistTracks(\'' + allPlaylists[r]['id'] + '\',\'' + this._safeSendText(allPlaylists[r]['n']) + '\')\; return false;">' + allPlaylists[r]['n'] + '</a></li>';
				libraryOut += '<li id="playlist' + allPlaylists[r]['id'] +'" class="dropLibrary"><a href="javascript:;" onclick="sideBarNavigate(\'http://home.de.napster.com/MyLibrary/Playlist/' + allPlaylists[r]['id'] + '\', this); return false;">' + playlistName + '</a></li>';
				// popupOut += '<li id="playlist' + allPlaylists[r]['id'] +'" class="dropLibrary"><a href="#" onclick="libraryDisplay.addTrackToPlaylist(eval(contentIdToAdd), \'\', ' + allPlaylists[r]['id'] + '); hidePlaylistPop(); return false;">' + allPlaylists[r]['n'] + '</a></li>';
				popupOut += '<li id="playlist' + allPlaylists[r]['id'] +'"><a href="javascript:;" title="' + playlistName + '" onclick="libraryDisplay.addContentToPlaylist(eval(contentIdToAdd), eval(contentTypeToAdd), ' + allPlaylists[r]['id'] + '); hidePlaylistPop(); return false;">' + playlistName + '</a></li>';
				// this._appendActivePlaylist(allPlaylists[r]['n'], allPlaylists[r]['id']);
            }
            dojo.byId("libraryPlaylists").innerHTML = libraryOut;
			dojo.byId("addDialogPlaylists").innerHTML = popupOut;
            // dojo.byId("playlistOutput").style.display = !dojo.byId("playlistOutput").style.display ? "none" : dojo.byId("playlistOutput").style.display;
        }
		makePlaylistsDroppable();
		if( PlayerObjectReference != null ){
			PlayerObjectReference.parsePlaylistSet(1);
		}
    },

    displayAllPlaylists: function() {
		if(dojo.byId("playlistOutput").innerHTML != "") {
			dojo.byId("playlistsExpandedImg").style.visibility == "visible" ? dojo.byId("playlistsExpandedImg").style.visibility = "hidden" : dojo.byId("playlistsExpandedImg").style.visibility = "visible";
			dojo.byId("playlistOutput").style.display == "none" ? dojo.byId("playlistOutput").style.display = "block" : dojo.byId("playlistOutput").style.display= "none";
		}
    },
    
    getPlayerPlaylists: function() {
		//alert("writePlayerPlaylists start!");
		if(allPlaylists.length < 1) {
            allPlaylists = collection.store.getPlaylists();	
        }
        return allPlaylists;
        
	},
	
	_showLibraryActions: function() {
		displayBodyLoadingMessage();
		/* dojo.byId("libraryActions").style.visibility = "visible";
		dojo.byId("addAll").style.visibility = "visible";
		dojo.byId("playlistActions").style.visibility = "hidden";
		dojo.byId("playlistSelectArea").style.visibility = "visible";
		dojo.byId("playlistDataHeader").style.display = "none";
		dojo.byId("libraryDataHeader").style.display = "block";
		dojo.byId("dataHeaderOrder").style.visibility = "hidden"; */
	},
	
	_showPlaylistActions: function() {
		displayBodyLoadingMessage();
		
		dojo.byId("content_footer").style.display = "block";
        dojo.byId("content_footer").innerHTML = "<img src=\"/images/includes/pagination_loading.gif\" alt=\"\" \/>";
		var pageStr = "";
		var pageStrPre = '<div id="playlistActions">';
		pageStrPre += '<a href="#" onclick="collection.store.updateCurrentPlaylist(1); return false;"><button class="btn_short"><span>Playlist aktualisieren</span></button></a>';
		pageStrPre += '<a href="#" onclick="collection.store.removePlaylistTracks(); return false;"><button class="btn_short"><span>Entferne Auswahl</span></button></a>';
		var pageStrPost = '</div>';
		pageStr = pageStrPre + pageStr + pageStrPost;
		dojo.byId("content_footer").innerHTML = pageStr;
		
		/* dojo.byId("libraryActions").style.visibility = "hidden";
		dojo.byId("addAll").style.visibility = "hidden";
		dojo.byId("playlistActions").style.visibility = "visible";
		dojo.byId("playlistSelectArea").style.visibility = "hidden";
		dojo.byId("libraryDataHeader").style.display = "none";
		dojo.byId("playlistDataHeader").style.display = "block";
		dojo.byId("dataHeaderOrder").style.visibility = "visible"; */
	},
	
	_showPlaylistHeader: function(pid,pname) {
		dojo.byId("content_head").style.display = "block";
		var headStr = "";
		pname = new String(pname);
		/*
		headStr += '<div class="playlistHead"><div id="autoMix">';
		headStr += '<div>More like this playlist:</div>';
		headStr += '<a class="link_automix" title="Automix" onclick="Play(\'' + pid + '\', \'3\', \'1\'); return false;" href="#">Automix</a>';
		headStr += '<span class="endcap" /></div>';
		headStr += '<span>';
		headStr += '<a href="#" onclick="Play(' + pid + ', 3); return false;" title="Abspielen" class="link_play">Play</a>';
		headStr += '</span>';
		headStr += '<h2 class="noCaps">' + html_escape(pname) + '</h2>';
		headStr += '<a href="#" title="Delete Playlist" onclick="libraryDisplay.confirmDelete(\'' + pid + '\',\'2\'); return false;">(x) Delete Playlist</a></div>';
		*/
		headStr += '<div id="playList">';
		headStr += '<div>';
		headStr += '<h2 onclick="renPlaylistPop(); return false;">' + html_escape(pname) + '</h2>';
		headStr += '<span>';
		headStr += '<a class="link_play" href="#" onclick="Play(' + pid + ', 3); return false;" title="Abspielen">Play</a>';
		headStr += '<a class="link_add" href="#" onclick="AddActions(this, ' + pid + ', 3); return false;" title="Hinzufügen">Add</a>';
		headStr += '<a class="link_share" href="#" onclick="Share(' + pid + ', 3); return false;" title="Weiterempfehlen">Share</a>';
		//headStr += '<span>(EXPLICIT)</span>';
		headStr += '<span id="explicitHead"></span>';
		headStr += '<a class="link_delete" href="#" onclick="libraryDisplay.confirmDelete(\'' + pid + '\',\'2\'); return false;" title="Playlist löschen">Playlist löschen</a>';

		headStr += '</span>';
		headStr += '</div>';
		headStr += '</div>';
		
		dojo.byId("content_head").innerHTML = headStr;
	},
	
	confirmDelete: function(id, type, deletelistReturnItems) {
		var confirmed;
		var confirmationMessage = "";
		type = parseInt(type); 
		switch(type) {
			case 0:		confirmationMessage = "Möchtest du die ausgewählten Titel wirklich löschen? Dies wird die Titel aus deiner Playlist und deinem Archiv löschen"; break;
			case 2: 	confirmationMessage = "Mochtest du diese Playlist wirklich löschen? Damit entfernst du keine Titel aus deinem Archiv"; break;
 			default:	confirmationMessage = "Are you sure you want to delete the selected items? (Message " + type + ")"; break;
		}
		confirmed = confirm(confirmationMessage);
		if(confirmed) {
			if(deletelistReturnItems) {
				collection.store.deleteListReturnItems();
				collection.store.deleteItem(id, type);
			} else {
				collection.store.deleteItem(id, type);
			}
		}
	},

    displayRecentTracks: function(offset,data) {
		currentContentType = "libraryRecentTracks";
		breadcrumb = '<p>';
			breadcrumb += '<a href="#" onClick="navigate(\'' + documentRoot + 'ns/home/?genre_id=0\');" class="f homeIcon">Napster Startseite</a> &gt; <a href="#MyLibrary" onClick="navigate(\'' + documentRoot + 'MyLibrary\');" class="f">Mein Archiv</a> &gt; Meine Playlists - Zuletzt gehörte Titel';
		breadcrumb += '</p>';
		breadcrumb += '<a href="#" onclick="helpPop(); return false;" id="link_help" title="Hilfe">Help</a>';
		dojo.byId("breadcrumb_bar").innerHTML = breadcrumb;
		// dojo.byId("content_head").innerHTML = "";
		// loadContent("http://home.de.napster.com/info/fragments/last_played.html", "content_head");
		// dojo.byId("actionContainerTitle").className = "title";
		this._showLibraryActions();
		// displayBodyLoadingMessage();
        //if(recentTracks.length < 1 && !data) {
        if(!data) {
            rp.get.getRecentTracks(tracksPerPage,"libraryDisplay.displayRecentTracks(1,data)","libraryDisplay.appendTracks(data,\"recentTracks\")","libraryDisplay.updatePagination(\"recentTracks\",\"libraryRecentTracks\")");
            return;
        } else {
            /* if(activeDisplay != "recentTracks") { 
				activeDisplay = "recentTracks";
				this.updatePagination("recentTracks");
			} */
            if(data) {
				activeDisplay = data;
                recentTracks = data;
				this.updatePagination(recentTracks);
                this.displayPage(offset,data);
            } else {
                data = recentTracks;
				activeDisplay = data;
				this.updatePagination(recentTracks);
                this.displayPage(offset);
            }
        }
    },

    displayAllTracks: function(offset,data,checkSize) {
		if(typeof(checkSize) == "undefined") { checkSize = true; }
		if(checkSize) {
			if((tableData.TRACKS.length > 750 && dojo.render.html.ie60) || tableData.TRACKS.length > 1500) {
				continueAnyway = confirm("Large Napster library detected\n\nDue to the large number of tracks in your library, using this feature may result in slow browser response. Are you sure you want to use this feature?");
				if(!continueAnyway) {
					return;
				}
			}
			displayLoadingMessage();
		}
		//dojo.debug("displayAllTracks(" + offset + "," + data + ")");
		currentContentType = "libraryAllTracks";
		breadcrumb = '<p>';
			breadcrumb += '<a href="#" onClick="navigate(\'' + documentRoot + 'ns/home/?genre_id=0\');" class="f homeIcon">Napster Startseite</a> &gt; <a href="#MyLibrary" onClick="navigate(\'' + documentRoot + 'MyLibrary\');" class="f">Mein Archiv</a> &gt; All Tracks';
		breadcrumb += '</p>';
		breadcrumb += '<a href="#" onclick="helpPop(); return false;" id="link_help" title="Hilfe">Help</a>';
		dojo.byId("breadcrumb_bar").innerHTML = breadcrumb;
		dojo.byId("content_head").innerHTML = "";
		// dojo.byId("actionContainerTitle").className = "title";
		this._showLibraryActions();
		if(allTracks.length < 1 && !data && data != 0) {
			// dojo.debug("about to getAllTracks");
            collection.store.getAllTracks(tracksPerPage,"libraryDisplay.displayAllTracks(1,data,false)","libraryDisplay.appendTracks(data,\"allTracks\")","libraryDisplay.updatePagination(allTracks,\"displayAllTracks\")");
            return;
        } else {
            /* if(activeDisplay != "allTracks") { 
				activeDisplay = "allTracks";
				this.updatePagination("allTracks");
			} */
			if(typeof(data) == "string" && tableData.TRACKS.length > 0) {
				collection.store.getAllTracks(tracksPerPage,"libraryDisplay.displayAllTracks(1,data)","libraryDisplay.appendTracks(data,\"allTracks\")","libraryDisplay.updatePagination(allTracks,\"displayAllTracks\")");
				return;
			} else {
				try {
					data == ""; // this is to catch an IE issue
				} catch(ieErr) {
					collection.store.getAllTracks(tracksPerPage,"libraryDisplay.displayAllTracks(1,data)","libraryDisplay.appendTracks(data,\"allTracks\")","libraryDisplay.updatePagination(allTracks,\"displayAllTracks\")");
					return;
				}
				if(data != 0 && tableData.TRACKS.length > 0) {
					if(typeof(data) != "undefined") {
						if(typeof(data[0]) == "undefined") { // make sure we have results in the data we pass in
							collection.store.getAllTracks(tracksPerPage,"libraryDisplay.displayAllTracks(1,data)","libraryDisplay.appendTracks(data,\"allTracks\")","libraryDisplay.updatePagination(allTracks,\"displayAllTracks\")");
							return;
						}
					}
					try {
						data.join(",");
					} catch(e) {
			            collection.store.getAllTracks(tracksPerPage,"libraryDisplay.displayAllTracks(1,data)","libraryDisplay.appendTracks(data,\"allTracks\")","libraryDisplay.updatePagination(allTracks,\"displayAllTracks\")");
			            return;
					}
					activeDisplay = data;
					allTracks = data;
					this.displayPage(offset,data);
				} else {
					data = allTracks;
					activeDisplay = data;
					if(data && tableData.TRACKS.length > 0) {
						this.displayPage(offset,data);
					} else {
						this.displayEmptyPage("MyLibrary/AllTracks");
					}
				}
			}
        }
    },

    displayAddedTracks: function(offset,data) {
		currentContentType = "libraryAddedTracks";
		// currentPage = offset;
		breadcrumb = '<p>';
			breadcrumb += '<a href="#" onClick="navigate(\'' + documentRoot + 'ns/home/?genre_id=0\');" class="f homeIcon">Napster Startseite</a> &gt; <a href="#MyLibrary" onClick="navigate(\'' + documentRoot + 'MyLibrary\');" class="f">Mein Archiv</a> &gt; Meine Playlists - Zuletzt hinzugefügt';
		breadcrumb += '</p>';
		breadcrumb += '<a href="#" onclick="helpPop(); return false;" id="link_help" title="Hilfe">Help</a>';
		dojo.byId("breadcrumb_bar").innerHTML = breadcrumb;
		// dojo.byId("content_head").innerHTML = "";
		// loadContent("http://home.de.napster.com/info/fragments/last_added.html", "content_head");
		// dojo.byId("actionContainerTitle").className = "title";
		this._showLibraryActions();
        if(typeof(addedTracks) != "undefined" && !data) {
           collection.store.getAddedTracks(tracksPerPage,"libraryDisplay.displayAddedTracks(1,data)","libraryDisplay.appendTracks(data,\"addedTracks\")","libraryDisplay.updatePagination(addedTracks,\"libraryAddedTracks\")");
        } else {
            /* if(activeDisplay != "addedTracks") { 
                activeDisplay = "addedTracks";
                this.updatePagination("addedTracks");
			} */
            if(data) {
				activeDisplay = data;
                addedTracks = data;
                this.displayPage(offset,data);
            }
            else {
                data = addedTracks;
				activeDisplay = data;
                this.displayPage(offset);
            }
        }
    },

    displayArtistTracks: function(aid,aname,sort_type,key,filter_type,filter_key) {
		currentContentType = "libraryArtistTracks";
		this._initalizeContentPanes();
        artistTracks = collection.store.getArtistTracks(aid,sort_type,key,'',filter_type,filter_key);
		activeDisplay = artistTracks;
		if(!aname) {
			aname = collection.store.getArtistName(aid);
		}
		if(aname != "") {
			breadcrumb = '<p>';
				breadcrumb += '<a href="#" onClick="navigate(\'' + documentRoot + 'ns/home/?genre_id=0\');" class="f homeIcon">Napster Startseite</a> &gt; <a href="#MyLibrary" onClick="navigate(\'' + documentRoot + 'MyLibrary\');" class="f">Mein Archiv</a> &gt;';
				if(filter_type == "genre") {
					breadcrumb += ' View by Genre - ' + genreMap[filter_key] + ' - ' + aname;
				} else {
					breadcrumb += 'Artists - ' + aname;
				}
			breadcrumb += '</p>';
			breadcrumb += '<a href="#" onclick="helpPop(); return false;" id="link_help" title="Hilfe">Help</a>';
			dojo.byId("breadcrumb_bar").innerHTML = breadcrumb;
			this._showLibraryActions();
	        this.updatePagination(artistTracks);
	        this.displayPageOfTracks("1");
	        currentArtist = aid;
		} else {
			this.displayEmptyPage();
		}
    },

    displayAlbumTracks: function(aid,aname,sort_type,key) {
		this._initalizeContentPanes();
        albumTracks = collection.store.getAlbumTracks(aid,sort_type,key);
		if(albumTracks[0]) {
			// dojo.debug(albumTracks.toSource());
			breadcrumb = '<p>';
				breadcrumb += '<a href="#" onClick="navigate(\'' + documentRoot + 'ns/home/?genre_id=0\');" class="f homeIcon">Napster Startseite</a> &gt; <a href="#MyLibrary" onClick="navigate(\'' + documentRoot + 'MyLibrary\');" class="f">Mein Archiv</a> &gt; Albums - ' + albumTracks[0]['album_name'];
			breadcrumb += '</p>';
			breadcrumb += '<a href="#" onclick="helpPop(); return false;" id="link_help" title="Hilfe">Help</a>';
			dojo.byId("breadcrumb_bar").innerHTML = breadcrumb;
			this._showLibraryActions();
	        this.updatePagination(albumTracks);
	        this.displayPageOfTracks("1");
	        currentArtist = aid;
		} else {
			this.displayEmptyPage();
		}
    },

    displayTracksFromPlaylist: function(pid,pname) {
		this._initalizeContentPanes();
		if(pname == "") {
			pname = new String(collection.store.getPlaylistName(pid));
		}
		currentPlaylistID = pid;
		currentPlaylistName = pname;
        currentPlaylistTracks = collection.store.getPlaylistTracks(pid);
		//dojo.byId("breadcrumb_bar").innerHTML = pname;
		breadcrumb = '<p>';
			breadcrumb += '<a href="#" onClick="navigate(\'' + documentRoot + 'ns/home/?genre_id=0\');" class="f homeIcon">Napster Startseite</a> &gt; <a href="#MyLibrary" onClick="navigate(\'' + documentRoot + 'MyLibrary\');" class="f">Mein Archiv</a> &gt; Playlists - ' + html_escape(pname);
		breadcrumb += '</p>';
		breadcrumb += '<a href="#" onclick="helpPop(); return false;" id="link_help" title="Hilfe">Help</a>';
		dojo.byId("breadcrumb_bar").innerHTML = breadcrumb;
		// dojo.byId("content_head").innerHTML = "";
		this._showPlaylistHeader(pid,pname);
		// dojo.byId("actionContainerTitle").className = "editableTitle";
		this._showPlaylistActions();
        // this.updatePagination("currentPlaylistTracks");
        this.displayPlaylistTracks(currentPlaylistTracks, 1);
		currentPlaylist = pid;
        //activePlaylist = pid;
    },
	
	displayActivePlaylist: function() {
		var selectElement = dojo.byId("activePlaylist");
		var activePlaylistId = selectElement.options[selectElement.selectedIndex].value;
		activePlaylistId = activePlaylistId.slice(1);
		var activePlaylistName = selectElement.options[selectElement.selectedIndex].text;
		if(activePlaylistId) {
			this.displayTracksFromPlaylist(activePlaylistId, activePlaylistName);
		} else {
			setTimeout("showSelectPlaylistPop()", 50);
		}
	},

    displayPageOfTracks: function(offset,staticVar,data) {
        if(staticVar && data) {
            var update = eval(staticVar);
            update = data;
            this.displayPage(offset,data);
        }
        else {
            this.displayPage(offset);
        }
    },

    displayPage: function(offset,data) {
		// if(!initialized) { alert("timeout"); setTimeout("libraryDisplay.displayPage(offset,data)", 500); return; }
		displayBodyLoadingMessage();
		currentPage = offset;
		// dojo.debug("in displayPage: " + offset);
		if(data) { totalPages = Math.ceil(data.length / tracksPerPage); this.updatePagination(); }
		var newPage = offset;
		if((dojo.byId("paginationPrevious")) && (dojo.byId("paginationNext"))) {
			//reset active class on all page numbers
			var paginationContainer = document.getElementById ('pagination');
			if (paginationContainer) {
			  var anchors = paginationContainer.getElementsByTagName ('a');
			  if (anchors) {
				for (var i = 0; i < anchors.length; ++i) {
					if(anchors[i].className == "active") anchors[i].className = "";
				}
			  }
			}
			
			if(newPage == 1) {
				dojo.byId("paginationPrevious").className = "previous";
			} else {
				dojo.byId("paginationPrevious").className = "previous active";
			}
			
			if(newPage == totalPages){
				dojo.byId("paginationNext").className = "next";
			} else {
				dojo.byId("paginationNext").className = "next active";
			}
			
			newPageId = "page" + newPage;
			
			dojo.byId(newPageId).className = "active";
		}
		
        var offsetIdx = (offset - 1) * tracksPerPage;
        // if we get data passed in, then that's the array to use (we're trickling in)
        // otherwise, use what's been set to active
		var dispData = "";
        if(typeof(data) == "undefined") { dispData = activeDisplay; } else { dispData = data; }
		// dojo.debug("dispData: " + dispData.toSource());
		// dispData = data ? data : activeDisplay;
        // use either tracksPerPage or length of dispData array
		// this.updatePagination(dispData,currentContentType);
		// dojo.debug("!!! - " + typeof(dispData));
		if(dispData) {
			var loopCount = ((offsetIdx + tracksPerPage) > dispData.length ? dispData.length : (offsetIdx + tracksPerPage));
			var outData = dispData.slice(offsetIdx,loopCount);
			this.displayLibraryTracks(outData);
			makeDroppable();
			makeDraggable();
		} else {
			this.displayEmptyPage();
		}
    },
	
	displayEmptyPage: function(dataURL) {
		var linkURL = "";
		
		if(!dataURL) {
			setTimeout('libraryDisplay.displayEmptyPage("noURL")', 100);
		} else {
			if(dataURL == "noURL") {
				linkURL = window.location.hash.substring(1);
				// dojo.debug("displayEmptyPage('noURL') - " + linkURL);
			} else {
				// dojo.debug("displayEmptyPage("+ dataURL +")");
				linkURL = dataURL;
			}
		}
		var out = "";
		if(linkURL.substr(0,9) == "MyLibrary") {
			var linkURLpieces = linkURL.substr(9).split('/');
			if(linkURL == "MyLibrary") { linkURLpieces[1] = "MyLibrary"; }
			switch(linkURLpieces[1]) {
				case "AllTracks":		navigate("http://home.de.napster.com/info/all_tracks.html", 0); break;
				case "RecentlyAdded":	navigate("http://home.de.napster.com/info/recently_added.html", 0); break;
				case "RecentlyPlayed":	navigate("http://home.de.napster.com/info/recently_played.html", 0); break;
				case "Playlist":		navigate("http://home.de.napster.com/info/empty_playlist.html", 0); break;
				case "Artist":			navigate("http://home.de.napster.com/MyLibrary", 0); break;
				case "ArtistByGenre":	navigate("http://home.de.napster.com/MyLibrary", 0); break;
				default:
					out = "Information for this page is no longer available. Go to <a href=\"#\" onclick=\"navigate('http://home.de.napster.com/ns/home/?genre_id=00'); return false;\">Napster Startseite</a>.";
					dojo.debug("NEED COLD START TEXT FOR: " + linkURLpieces[1]);
					break
			}
		} else {
			out += "<div class=\"emptyPage\"><div>";
			if(dataURL) {
				if(dataURL.indexOf("type_id=videosbyletter") != -1) { out += "We're sorry, no music videos are currently available. Please try another letter."; }
				if(dataURL.indexOf("type_id=artistbyletter") != -1) { out += "We're sorry, no artists are currently available. Please try another letter."; }
			} else {
				out += "Information for this page is no longer available. Go to <a href=\"#\" onclick=\"navigate('http://home.de.napster.com/ns/home/?genre_id=00'); return false;\">Napster Startseite</a>.";
			}
			out += "</div></div>";
			dojo.byId("content_body").innerHTML = out;
			dojo.byId("content_body").scrollTop = 0;
		}
		
		dojo.byId("content_body").innerHTML = out;
		dojo.byId("content_body").scrollTop = 0;
	},

    displayNextPage: function() {
		if (currentPage < totalPages) {
			currentPage++;
			this.displayPage(currentPage);
		} else {
			// dojo.debug("currentPage: " + currentPage + " totalPages: " + totalPages);
		}
    },

    displayPreviousPage: function() {
		if (currentPage > 1) {
			currentPage--;
			this.displayPage(currentPage);
		} else {
			// dojo.debug("currentPage: " + currentPage);
		}
	},

    appendTracks: function(data,dataArr) {
		if(typeof(data[0]) != "undefined") { // make sure we have results in the data we pass in
			var appendStr = dataArr + "=" +  dataArr +  ".concat(data)";
			eval(appendStr);
			this.updatePagination(dataArr,currentContentType,0);
		}
    },
	
	_safeSendText: function(inText) {
		var inText = inText.toString(); //convert our input text to a string
		var safeText = inText.replace(/'/g, "\\\'"); //escape all single quotes
		return safeText;
	},
	
	_safeSendHTMLText: function(inText) {
		var inText = inText.toString(); //convert our input text to a string
		var safeText = inText.replace(/'/g, "&#39;"); //escape all single quotes
		return safeText;
	},
	
	_initalizeContentPanes: function() {
		dojo.byId("content_head").innerHTML = "";
        this._displayLoading;
		dojo.byId("content_footer").innerHTML = "";
	},
	
	displayPlaylistTracks: function(tdata, libraryData) {
		if(libraryData) { currentContentType = "libraryPlaylistTracks"; }
		// dojo.debug("In displayPlaylistTracks - libraryData: " + libraryData);
		this._displayTracks(tdata, libraryData, "playlistTracks");
    },
	
	_displayPlaylistTracksOLD: function(tdata) {  // PROBABLY SAFE DELETE ME - Playlist track lists are generally the same as other track lists
        var out = "";
		out += '<div>';
			out += '<table cellspacing="0" id="listReturn">';
				out += '<thead>';
					out += '<tr>';
						out += '<th class="selectedCol">&nbsp;</th>';
						out += '<th class="actionCol">Action</th>';
						out += '<th class="trackCol" colspan="2">Track</th>';
						out += '<th class="artistCol">Artist</th>';
						out += '<th class="albumCol">Album/Source</th>';
						out += '<th class="timeCol">Time</th>';
					out += '</tr>';
				out += '</thead>';
			out += '<tbody>';
        for (var t = 0; t < tdata.length; t++) {
			// setTimeout("", 2);
            out += '<tr id="t' + tdata[t].track_id + '" class="dragLibrary'; out += (t % 2) ? "" : " oddRow"; out += '">';
				out += '<td><input type="checkbox" name="selected" value="t' + tdata[t].track_id + '" /></td>';
				out += '<td>';
					out += '<span>';
						out += '<a href="#" onclick="Play(' + tdata[t].track_id + '); return false;" title="Abspielen" class="link_play">Play</a>';
					out += '</span>';
				out += '</td>';
				out += '<td><a href="http://home.de.napster.com/cgi-bin/searchXML?type_id=albumtracks&amp;result_type=track&amp;select_by=album&amp;select_value=' + tdata[t].album_id + '&amp;format=json" title="' + tdata[t].track_name + '" onClick="">' + tdata[t].track_name + '</a></td>';
				/* out += '<td><a href="http://sms.napster.com/ns/view/artist/?id=' + tdata[t].artist_id + '" title="' + tdata[t].artist_name + '"><strong>' + tdata[t].artist_name + '</strong></a></td>'; */
				// NOTE: we don't want to link to aritst_id 10462505 (a.k.a. Various Artists)
				out += tdata[t].artist_id != 10462505 ? '<td><a href="#" onClick=\'navigate("http://home.de.napster.com/ns/view/artist/?artist_id=' + tdata[t].artist_id + '"); return false;\' title="' + tdata[t].artist_name + '"><strong>' + tdata[t].artist_name + '</strong></a></td>' :
					'<td><strong>' + tdata[t].artist_name + '</strong></td>';
				/* out += '<td><a href="http://www.napster.de/view/album/index.html?id=' + tdata[t].album_id + '" title="' + tdata[t].album_name + '"><em>' + tdata[t].album_name + '</em></a></td>'; */
				out += '<td><a href="#" onClick=\'navigate("http://home.de.napster.com/cgi-bin/searchXML?type_id=albumtracks&amp;result_type=track&amp;select_by=album&amp;select_value=' + tdata[t].album_id + '&amp;format=json"); return false;\' title="' + tdata[t].album_name + '"><em>' + tdata[t].album_name + '</em></a></td>';
				out += '<td>' + tdata[t].duration + '</td>';
				
				/* out += '<div class="trackWrapper">';
					out += '<div>';
						out += '<div class="trackListTrack"><a href="http://www.napster.de/view/album/index.html?id=' + tdata[t].album_id + '" title="' + tdata[t].track_name + '" onClick="">"' + tdata[t].track_name + '"</a></div>';
						out += '<div class="trackListArtist"><a href="http://www.napster.de/view/artist/index.html?id=' + tdata[t].artist_id + '" title="' + tdata[t].artist_name + '">' + tdata[t].artist_name + '</a></div>';
						out += '<div class="trackListAlbum"><a href="http://www.napster.de/view/album/index.html?id=' + tdata[t].album_id + '" title="' + tdata[t].album_name + '">' + tdata[t].album_name + '</a></div>';
						out += '<div class="trackListDuration">' + tdata[t].duration + '</div>';
					out += '</div>';
					out += '<div>';
						out += '<div class="rightLinks">';
							out += '<a href="#" onClick="removeTrack(\'orderBox' + (t + 1) + '\'); return false;" title="Remove \'\'' + tdata[t].track_name + '\'\' from Playlist">(x) Remove from Playlist</a>';
						out += '</div>'
					out += '</div>';
				out += '</div>';
			out += '</div>'; */
			out += '</tr>';
        }
		out += '</table>';
		out += '</div>';
        dojo.byId("content_body").innerHTML = out;
		makeDraggable();
		dojo.byId("content_body").scrollTop = 0;
		
		activeDisplay = tdata;
	},
	
	displayLibraryTracks: function(tdata) {
		// dojo.debug("In displayLibraryTracks");
		this._displayTracks(tdata, 1, "tracks");
	},
	
	displayTracks: function(tdata, listType) {
		// dojo.debug("In displayTracks");
		this._displayTracks(tdata, 0, listType);
	},
	
	selectAllListReturn: function(checked) {
		var inputs = dojo.byId("listReturn").getElementsByTagName("input");
		if(checked) {
			if(inputs.length) {
			    for(var i=0; i<inputs.length; i++) {
					if(inputs[i].getAttribute("type") == "checkbox") {
						inputs[i].checked = true;
					}
				}
			}
		} else {
			if(inputs.length) {
			    for(var i=0; i<inputs.length; i++) {
					if(inputs[i].getAttribute("type") == "checkbox") {
						inputs[i].checked = false;
					}
				}
			}
		}
	},
	
	_getRightsObj: function(itemObj, itemType, returnJSON) {
		if(typeof(itemType) == "undefined") {
			switch(itemObj.type) {
				case "track":	itemType = 0;
			}
		}
		var rightsObj = {};
		switch(itemType) {
			case 0:	rightsObj.can_download = (typeof(itemObj.can_download) != "undefined")?itemObj.can_download:itemObj.downloadable;
					(rightsObj.can_download && rightsObj.can_download != "N")?rightsObj.can_download=1:rightsObj.can_download=0;
					rightsObj.can_stream = (typeof(itemObj.can_stream) != "undefined")?itemObj.can_stream:itemObj.streamable;
					(rightsObj.can_stream && rightsObj.can_stream != "N")?rightsObj.can_stream=1:rightsObj.can_stream=0;
					rightsObj.afs = (typeof(itemObj.afs) != "undefined")?itemObj.afs:itemObj.album_for_sale;
					(rightsObj.afs && rightsObj.afs != "N")?rightsObj.afs=1:rightsObj.afs=0;
					rightsObj.can_purchase = (typeof(itemObj.can_purchase) != "undefined")?itemObj.can_purchase:0;
					(rightsObj.can_purchase && rightsObj.can_purchase != "N")?rightsObj.can_purchase=1:rightsObj.can_purchase=0;
					rightsObj.album_id = (typeof(itemObj.album_id) == "undefined")?"0":itemObj.album_id; // We need the album_id if afs and !can_purchase
					rightsObj.can_burn = (typeof(itemObj.can_burn) != "undefined")?itemObj.can_burn:itemObj.burnable;
					(rightsObj.can_burn && rightsObj.can_burn != "N")?rightsObj.can_burn=1:rightsObj.can_burn=0;
					break
			case 1:	rightsObj.afs = (typeof(itemObj.afs) != "undefined")?itemObj.afs:itemObj.album_for_sale;
					(rightsObj.afs && rightsObj.afs != "N")?rightsObj.afs=1:rightsObj.afs=0;
					break
		}
		if(returnJSON) {
			return rightsObj;
		} else {
			var rightsObjTxt = runToSource(rightsObj);
			rightsObjTxt.replace(/\"/g, "'");
			return rightsObjTxt;
		}
	},
	
	_displayTrack: function(ttrack, tval, libraryList, listType) {
		// if(tval == 1) { dojo.debug("In _displayTrack - tval: " + tval + " libraryList: " + libraryList + " listType: " + listType); }
		var playlistList = false;
		var checkBox = true;
		switch(listType) {
			case "playlistTracks":
				playlistList = true;
				break
		}
		var out = "";
		if(playlistList && typeof(ttrack.artist_id) == "undefined") {
			out += '<tr id="t' + ttrack.track_id + '"';
			out += (tval % 2) ? "" : ' class="oddRow" '; out += '>';
			out += '<td colspan="2">&nbsp;</td>';
			out += '<td>' + tval + '</td>';
			out += '<td colspan="5" class="externalTrack">';
			out += 'Imported Track - This personal track resides on another PC';
			out += '</td>';
			out += '</tr>';
		} else {
			out += '<tr id="t' + ttrack.track_id;
			switch(libraryList) {
				// case 0: out += '" class="drag'; break
				case 0: out += '" class="dragBoth'; break
				case 1: out += '" class="dragLibrary'; break
			}
			out += (tval % 2) ? "" : " oddRow"; out += '">';
				if(libraryList) { out += '<td><input type="checkbox" name="selected" value="t' + ttrack.track_id + '" /></td>'; }
				out += '<td>';
					out += '<span class="btnContainer">';
						out += '<a href="#" onclick="Play(' + ttrack.track_id + ', 0); return false;" title="Abspielen" class=';
						var streamable = false;
						if(typeof(ttrack.streamable) != "undefined") {
							((ttrack.streamable && ttrack.streamable != "N") || libraryList)?streamable=true:streamable=false;
						} else {
							streamable = true;
						}
						streamable?out += '"link_play">Play</a>':out += '"link_play_clip">Play</a>';
						if (dojo.io.cookie.get('LFM') == 'Y' || dojo.io.cookie.get('SL') == 'LFM' || dojo.io.cookie.get('SL') == 'VIS') {
							ttrackRights = this._getRightsObj(ttrack, 0, 1);
							if(ttrackRights.can_purchase || libraryList) {
								out += '<a href="#" title="Kaufen" class="link_buy" onclick="Buy(\'' + ttrack.track_id + '\', \'0\'); return false;">Buy</a>';
							} else {
								if(ttrack.afs == 'Y') {
									out += '<a href="#" title="Album Kaufen" class="link_buy" onclick="Buy(\'' + ttrack.album_id + '\', \'1\'); return false;">Buy</a>';
								} else {
									out += '<a href="#" title="Unavailable" class="link_buy_disabled" onclick="Buy(\'' + ttrack.track_id + '\', \'0\'); return false;">Unavailable</a>';
								}
							}
						} else {
							switch(libraryList) {
								case 0:	out += '<a href="#"  title="Menü &#132;Optionen öffnen&#147;" class="link_add" onclick="AddActions(this,' + ttrack.track_id + ', 0, \'' + this._getRightsObj(ttrack, 0, 0).replace(/\"/g, "\\'") + '\'); return false;">Open options menu</a>'; break
								case 1: out += '<a href="#"  title="Menü &#132;Optionen öffnen&#147;" class="link_add" onclick="AddActions(this,' + ttrack.track_id + ', 0, \'' + this._getRightsObj(ttrack, 0, 0).replace(/\"/g, "\\'") + '\', 1); return false;">Open options menu</a>'; break
								// case 0:	streamable?out += '<a href="#" title="Add" class="link_add" onclick="AddActions(this,' + ttrack.track_id + ', 0, \'' + this._getRightsObj(ttrack, 0, 0) + '\'); return false;">Add</a>' :out += '<a href="#"  title="Menü &#132;Optionen öffnen&#147;" class="link_add" onclick="AddActions(this,' + ttrack.track_id + ', 0, \'' + this._getRightsObj(ttrack, 0, 0) + '\'); return false;">Open options menu</a>'; break
								// case 1:	streamable?out += '<a href="#" title="Add" class="link_add" onclick="AddActions(this,' + ttrack.track_id + ', 0, \'' + this._getRightsObj(ttrack, 0, 0) + '\', 1); return false;">Add</a>' :out += '<a href="#"  title="Menü &#132;Optionen öffnen&#147;" class="link_add" onclick="AddActions(this,' + ttrack.track_id + ', 0, \'' + this._getRightsObj(ttrack, 0, 0) + '\', 1); return false;">Open options menu</a>'; break
							}
						}
					out += '</span>';
				out += '</td>';
				if(playlistList) {
					out += '<td>' + tval + '</td>';
				} else {
					if(listType == "billboardtrack") { out += '<td>' + ttrack.peak_position + '</td>'; }
					else {
						if(listType == "albumtracks") {
							out += '<td>'; // This is broken into multiple lines because IE6 fails at life
							out += (typeof(ttrack.trackNumber) != "undefined")?ttrack.trackNumber:ttrack.track_number;
							out += '</td>';
						} 
					}
				}
				var trackName = (typeof(ttrack.track_name) != "undefined")?ttrack.track_name:ttrack.track;
				if(ttrack.explicit && ttrack.explicit != "N") { out += '<td>'; } else { out += '<td colspan="2">'; }
				// out += '<a href="#" onclick="Play(' + ttrack.track_id + ', 0); return false;" title="Play \'' + trackName + '\'">' + trackName + '</a></td>';
				out += '<span class="noWrap">' + trackName + '</span></td>';
				if(ttrack.explicit && ttrack.explicit != "N") { out += '<td class="explicit"><a href="#" onclick="genericPop(\'http://home.de.napster.com/info/info_explicit_lyrics.html\', 450, 320); return false;">(EXPLICIT)</a></td>'; if(playlistList) { explicitPlaylist = true; } }
				// <a href="#" onClick=\'navigate("http://home.de.napster.com/ns/view/album/?album_id=' + tdata[t].album_id + '"); return false;\' title="' + trackName + '">' + trackName + '</a></td>';
				// NOTE: we don't want to link to aritst_id 10462505 (a.k.a. Various Artists)
				out += ttrack.artist_id != 10462505 ? '<td><a href="#" onClick=\'navigate("http://home.de.napster.com/ns/view/artist/?artist_id=' + ttrack.artist_id + '"); return false;\' title="' + ttrack.artist_name + '"><strong>' + ttrack.artist_name + '</strong></a></td>' :
					'<td><strong>' + ttrack.artist_name + '</strong></td>';
				var albumName = (typeof(ttrack.album_name) != "undefined")?ttrack.album_name:ttrack.album;
				if(listType != "albumtracks") { out += '<td><a href="#" onClick=\'navigate("http://home.de.napster.com/cgi-bin/searchXML?type_id=albumtracks&amp;result_type=track&amp;select_by=album&amp;select_value=' + ttrack.album_id + '&amp;format=json"); return false;\' title="' + albumName + '"><em>' + albumName + '</em></a></td>'; }
				if(listType == "billboardtrack") {
					out += '<td>' + ttrack.duration + '</td><td>' + ttrack.peak_date + '</td>';
				} else {
					out += '<td>' + ttrack.duration + '</td>';
				}
		}
		return out;
	},

	//_displayTracks: function(tdata, listType, playlistList) {
	_displayTracks: function(tdata, libraryList, listType) {
		var self = this;
		// dojo.debug("In _displayTracks - tdata: " + tdata + " libraryList: " + libraryList + " listType: " + listType);
		if(typeof(listType) == "undefined") { listType = 0; }
		var playlistList = false;
		switch(listType) {
			case "playlistlist":	playlistList = true; break
			case "playlistTracks":	playlistList = true; break
		}
	    var out = "";
        if(tdata == '0' || tdata == "") { // if we don't have data
			if(typeof(dataURL) == "undefined" || dataURL == '') { //and don't have a JSON dataURL
				var newLocation = "";
				if(libraryList) {
					newLocation = fixedLinkFromURL(historyUrl,1);
				}
				dojo.byId("content_head").style.display = "none";
	            this.displayEmptyPage(newLocation);
			}
        } else {
			out += '<div>';
				out += '<table cellspacing="0" id="listReturn">';
					out += '<thead>';
						out += '<tr>';
							switch(libraryList) {
								case 1: out += '<th class="selectedCol"><input type="checkbox" name="selected" value="all" id="selectAll" onclick="libraryDisplay.selectAllListReturn(this.checked);" /></th>'; break
							}
							out += '<th class="actionCol">Nutzung</th>';
							if(listType == "albumtracks" || playlistList) {
								out += '<th class="trackNumCol">No.</td>';
							} else {
								if(listType == "billboardtrack") {
									out += '<th class="trackNumCol" onClick="libraryDisplay.sortActive(\'peak_position\'); return false;"><a href="#" title="Peak Position">Peak Pos.</th><th class="trackCol" colspan="2"><a href="#" onClick="libraryDisplay.sortActive(\'track_name\'); return false;">Titel</a></td>';
								}
							}
							if(listType != "billboardtrack") { out += '<th class="trackCol" colspan="2"><a href="#" onClick="libraryDisplay.sortActive(\'track_name\'); return false;">Titel</a></th>'; }
							out += '<th class="artistCol"><a href="#" onClick="libraryDisplay.sortActive(\'artist_name\'); return false;">K&uuml;nstler</a></th>';
							if(listType != "albumtracks") { out += '<th class="albumCol"><a href="#" onClick="libraryDisplay.sortActive(\'album\'); return false;">Album/Quelle</a></th>'; }
							if(listType == "billboardtrack") {
								out += '<th>L&auml;nge</th><th>Peak Date</th>';
							} else {
								out += '<th class="timeCol">L&auml;nge</th>';
							}
						out += '</tr>';
					out += '</thead>';
				out += '<tbody';
				if(playlistList) { out += ' id="listReturnBody"'; }
				out += '>';
				// dojo.byId("content_body").innerHTML = out;
			var t = 0;
			var tracksInterval = setInterval( function(){
				if(t < tdata.length) {
					try {
						out += self._displayTrack(tdata[t], (t + 1), libraryList, listType);
					} catch(e) {
						dojo.debug(e.message);
					}
					t++;
				} else {
					clearInterval(tracksInterval);
					if(nav.fullResultsUrl != "") {
						out += '<tr class="'; out += (t++ % 2) ? "" : " oddRow"; out += '">';
							out += '<td colspan="6" class="viewMore"><a href="#" onclick="navigate(nav.fullResultsUrl); return false">View more results for "'; out += dojo.byId("uuunq").value; out += '"</a></td>';
						out += '</tr>';
					}
					out += '</tbody>';
					out += '</table>';
					out += '</div>';
			        dojo.byId("content_body").innerHTML = out;
					makeDraggable();
					dojo.byId("content_body").scrollTop = 0;
					if(explicitPlaylist) {
						var expHead = document.getElementById('explicitHead');
						if(expHead) { expHead.innerHTML = "(EXPLICIT)"; }
						explicitPlaylist = false;
					}
					if(libraryList) {
						appState = new ApplicationState(historyUrl);
						dojo.undo.browser.addToHistory(appState);
						if(playlistList) {
							activeDisplay = tdata;
						}
					} else {
						activeDisplay = tdata;
					}
				}
			}, 1);
	        /* for (var t = 0; t < tdata.length; t++) {
				// setTimeout(, 2);
				try {
					out += this._displayTrack(tdata[t], (t + 1), libraryList, listType)
				} catch(e) {
					dojo.debug(e.message);
				}
	        }
			out += '</tbody>';
			out += '</table>';
			out += '</div>';
	        dojo.byId("content_body").innerHTML = out;
			makeDraggable();
			dojo.byId("content_body").scrollTop = 0;
			if(explicitPlaylist) {
				var expHead = document.getElementById('explicitHead');
				if(expHead) { expHead.innerHTML = "(EXPLICIT)"; }
				explicitPlaylist = false;
			}
			if(libraryList) {
				appState = new ApplicationState(historyUrl);
				dojo.undo.browser.addToHistory(appState);
			} */
        }
		
		// activeDisplay = tdata;
    },

    displayAlbums: function(tdata) {
		this._displayAlbums(tdata, 1);
	},

    _displayAlbums: function(tdata, listType) {
		var self = this;
		var out = "";
        if(tdata == '0' || tdata == "") {
			if(dataURL != "") {
				out = "you have no tracks in this view";
				
				dojo.byId("content_body").innerHTML = out;
				makeDraggable();
				dojo.byId("content_body").scrollTop = 0;
				activeDisplay = tdata;
			}
        }
        else {
			out += '<div>';
				out += '<table cellspacing="0" id="listReturn" class="albums">';
					out += '<thead>';
						out += '<tr>';
							switch(listType) {
								case 2: out += '<th class="selectedCol">&nbsp;</th>'; break
							}
							out += '<th class="actionCol">Nutzung</th>';
							out += '<th class="imageCol">Image</th>';
							out += '<th class="albumCol" colspan="2"><a href="#" onClick="libraryDisplay.sortActive(\'album\'); return false;">Album/Quelle</a></th>';
							out += '<th class="artistCol"><a href="#" onClick="libraryDisplay.sortActive(\'artist_name\'); return false;">K&uuml;nstler</a></th>';
							out += '<th class="dateCol"><a href="#" onClick="libraryDisplay.sortActive(\'release_date\'); return false;">Veröffentlicungsdatum</a></th>';
						out += '</tr>';
					out += '</thead>';
				out += '<tbody>';
				
	        // for (var t = 0; t < tdata.length; t++) {
			var t = 0;
			var albumsInterval = setInterval( function(){
				if(t < tdata.length) {
		            out += '<tr id="a' + tdata[t].album_id + '" class="drag'; out += (t % 2) ? "" : " oddRow"; out += '">';
						switch(listType) {
							case 2: out += '<td><input type="checkbox" name="selected" value="a' + tdata[t].album_id + '" /></td>'; break
						}
						out += '<td>';
							out += '<span class="btnContainer">';
								out += '<a href="#" onclick="Play(' + tdata[t].album_id + ', 1); return false;" title="Abspielen" class="' + ( isLFM ? 'link_play_clip': 'link_play') + '">Play</a>';
								if(isLFM) {
									out += '<a href="#" onclick="Buy(' + tdata[t].album_id + ', \'1\'); return false;" title="Album Kaufen" class="link_buy">Buy Album (MP3s)</a>';
								} else {
									out += '<a href="#" onclick="AddActions(this,' + tdata[t].album_id + ', 1); return false;" title="Hinzufügen" class="link_add">Add</a>';
								}
							out += '</span>';
						out += '</td>';
						var album = typeof(tdata[t].album) != "undefined"?tdata[t].album:tdata[t].album_name;
						// dojo.debug(tdata[t].album_name);
						tdata[t].image_url = tdata[t].image_url?tdata[t].image_url:'http://home.de.napster.com/images/player/bg_default_album_art.gif';
						tdata[t].sm_image_url = tdata[t].sm_image_url?tdata[t].sm_image_url:'http://home.de.napster.com/images/includes/default_album_art_50.gif';
						out += '<td><a href="#" class="albumImage" onClick=\'navigate("http://home.de.napster.com/cgi-bin/searchXML?type_id=albumtracks&amp;result_type=track&amp;select_by=album&amp;select_value=' + tdata[t].album_id + '&amp;format=json"); return false;\' onMouseover=\'showAlbumArtPop("' + tdata[t].image_url + '");\' onMouseout=\'hideAlbumArtPop();\'title="' + album + '"><img src="' + tdata[t].sm_image_url + '" alt="" /></a></td>';
						if(tdata[t].explicit && tdata[t].explicit != "N") { out += '<td>'; } else { out += '<td colspan="2">'; }
						out += '<a href="#" onClick=\'navigate("http://home.de.napster.com/cgi-bin/searchXML?type_id=albumtracks&amp;result_type=track&amp;select_by=album&amp;select_value=' + tdata[t].album_id + '&amp;format=json"); return false;\' title="' + album + '"><em>' + album + '</em></a></td>';
						if(tdata[t].explicit && tdata[t].explicit != "N") { out += '<td class="explicit"><a href="#" onclick="genericPop(\'http://home.de.napster.com/info/info_explicit_lyrics.html\', 450, 320); return false;">(EXPLICIT)</a></td>'; }
						// NOTE: we don't want to link to aritst_id 10462505 (a.k.a. Various Artists)
						out += tdata[t].artist_id != 10462505 ? '<td><a href="#" onClick=\'navigate("http://home.de.napster.com/ns/view/artist/?artist_id=' + tdata[t].artist_id + '"); return false;\' title="' + tdata[t].artist_name + '"><strong>' + tdata[t].artist_name + '</strong></a></td>' :
							'<td><strong>' + tdata[t].artist_name + '</strong></td>';
						out += '<td>' + (tdata[t].release_date != null ? self.dateStringFromUTC(tdata[t].release_date) : tdata[t].release_year) + '</td>';
					out += '</tr>';
					t++;
				} else {
					clearInterval(albumsInterval);
					
					if(nav.fullResultsUrl != "") {
						out += '<tr class="'; out += (t++ % 2) ? "" : " oddRow"; out += '">';
							out += '<td colspan="6" class="viewMore"><a href="#" onclick="navigate(nav.fullResultsUrl); return false">View more results for "'; out += dojo.byId("uuunq").value; out += '"</a></td>';
						out += '</tr>';
					}
					out += '</tbody>';
					out += '</table>';
					out += '</div>';
				
			        dojo.byId("content_body").innerHTML = out;
					makeDraggable();
					dojo.byId("content_body").scrollTop = 0;
					activeDisplay = tdata;
				}
	        }, 1);
        }
    },
	
	displayArtists: function(tdata) {
		this._displayArtists(tdata);
	},
	
	displayMemberArtists: function(tdata, userID) {
		this._displayArtists(tdata, userID);
	},
	
	displayUsers: function(tdata) {
		var out = "";
        if(tdata == '0' || tdata == "") {
            out = "There were no results";
        }
        else {
		out += '<div>';
			out += '<table cellspacing="0" id="listReturn" class="users">';
				out += '<thead>';
					out += '<tr>';
						out += '<th class="userCol">User Name</th>';
					out += '</tr>';
				out += '</thead>';
			out += '<tbody>';
        for (var t = 0; t < tdata.length; t++) {
            out += '<tr class="'; out += (t % 2) ? "" : " oddRow"; out += '">';
				out += '<td><a href="#" onclick="navigate(\'http://home.de.napster.com/cgi-bin/memberXML?result_type=artist&type=memberArtists&filter_value=' + tdata[t].user_id + '&format=json\'); return false;"  title="' + tdata[t].user_name + '">' + tdata[t].user_name + '</a></td>';
			out += '</tr>';
        }
		out += '</tbody>';
		out += '</table>';
		out += '</div>';
        }
        dojo.byId("content_body").innerHTML = out;
		makeDraggable();
		dojo.byId("content_body").scrollTop = 0;
		
		activeDisplay = tdata;
	},
	
	_displayArtists: function(tdata, userID) {
		var out = "";
		if(typeof(userID) == "undefined") { userID = ""; }
        if(tdata == '0' || tdata == "") {
			if(dataURL != "") {
				out = "you have no artists in this view";
			}
        }
        else {
		out += '<div>';
			out += '<table cellspacing="0" id="listReturn" class="artists">';
				out += '<thead>';
					out += '<tr>';
						out += '<th class="artistCol">K&uuml;nstler</th>';
						out += '<th class="topTracksCol">Top Titel abspielen</th>';
					out += '</tr>';
				out += '</thead>';
			out += '<tbody>';
        for (var t = 0; t < tdata.length; t++) {
            out += '<tr class="'; out += (t % 2) ? "" : " oddRow"; out += '">';
				// NOTE: we don't want to link to aritst_id 10462505 (a.k.a. Various Artists)
				userID ? navURL = "http://home.de.napster.com/cgi-bin/memberXML?result_type=track&amp;type=track&amp;type_id=memberbrowse&amp;filter_value=" + userID + "&amp;select_by=artist&amp;select_value=" + tdata[t].artist_id + "&amp;format=json" :
					navURL = "http://home.de.napster.com/ns/view/artist/?artist_id=" + tdata[t].artist_id;
				out += tdata[t].artist_id != 10462505 ? '<td><a href="#" onClick=\'navigate("' + navURL + '"); return false;\' title="' + tdata[t].artist_name + '"><strong>' + tdata[t].artist_name + '</strong></a></td><td><a href="#" onclick="PlayTopTracks(' + tdata[t].artist_id + '); return false;" title="Titel von ' + tdata[t].artist_name + ' abspielen" class="link_play">Top Titel von ' + tdata[t].artist_name + ' abspielen</a>&nbsp;Top&nbsp;Titel&nbsp;abspielen</td>' :
					'<td><strong>' + tdata[t].artist_name + '</strong></td><td></td>';
			out += '</tr>';
        }
		if(nav.fullResultsUrl != "") {
			out += '<tr class="'; out += (t++ % 2) ? "" : " oddRow"; out += '">';
				out += '<td colspan="2" class="viewMore"><a href="#" onclick="navigate(nav.fullResultsUrl); return false">View more results for "'; out += dojo.byId("uuunq").value; out += '"</a></td>';
			out += '</tr>';
		}
		out += '</tbody>';
		out += '</table>';
		out += '</div>';
        }
        dojo.byId("content_body").innerHTML = out;
		makeDraggable();
		dojo.byId("content_body").scrollTop = 0;
		
		activeDisplay = tdata;
    },
	
	displayRadio: function(tdata) {
		this._displayRadio(tdata, 1);
	},

    _displayRadio: function(tdata, listType) {
		var out = "";
        if(tdata == '0' || tdata == "") {
            out = "you have no tracks in this view";
        }
        else {
		out += '<div>';
			out += '<table cellspacing="0" id="listReturn" class="radio">';
				out += '<thead>';
					out += '<tr>';
						out += '<th class="actionCol">Nutzung</th>';
						out += '<th class="imageCol">Radio Station</th>';
						// out += '<th class="radioCol"><a href="#" onClick="libraryDisplay.sortActive(\'artist_name\'); return false;">Station</a></th>';
						out += '<th class="descriptionCol">Beschreibung</th>';
					out += '</tr>';
				out += '</thead>';
			out += '<tbody>';
        for (var t = 0; t < tdata.length; t++) {
            out += '<tr id="r' + tdata[t].station_id + '" class="'; out += (t % 2) ? "" : "oddRow"; out += '">';
				out += '<td>';
					out += '<span>';
						out += '<a href="#" onclick="Play(' + tdata[t].station_id + ', \'5\'); return false;" title="Abspielen" class=' + ( isLFM ? '"link_play_clip">Play</a>': '"link_play">Play</a>');
					out += '</span>';
				out += '</td>';
				out += '<td><a href="#" class="radioImage" onclick="Play(' + tdata[t].station_id + ', \'5\'); return false;"><img src="' + tdata[t].image_url + '" alt="' + tdata[t].station_name + '" title="' + tdata[t].station_name + '" /></a></td>';
				// out += '<td><a href="#" onClick=\'navigate("http://home.de.napster.com/?station_id=' + tdata[t].station_id + '"); return false;\' title="' + tdata[t].station_name + '">' + tdata[t].station_name + '</a></td>';
				out += '<td>' + tdata[t].station_desc + '</td>';
			out += '</tr>';
        }
		out += '</tbody>';
		out += '</table>';
		out += '</div>';
        }
        dojo.byId("content_body").innerHTML = out;
		makeDraggable();
		dojo.byId("content_body").scrollTop = 0;
		
		activeDisplay = tdata;
    },

    displayPlaylist: function(tdata) {
		// dojo.debug("In displayPlaylist");
		this._displayPlaylist(tdata, 1);
	},

    _displayPlaylist: function(tdata, listType) {
		var out = "";
        if(tdata == '0' || tdata == "") {
            out = "you have no tracks in this view";
        }
        else {
		out += '<div>';
			out += '<table cellspacing="0" id="listReturn" class="playlists">';
				out += '<thead>';
					out += '<tr>';
						out += '<th class="actionCol">Nutzung</th>';
						out += '<th class="playlistCol">Playlist</th>';
						out += '<th class="descriptionCol">Beschreibung</th>';
					out += '</tr>';
				out += '</thead>';
			out += '<tbody>';
       // for (var t = 0; t < tdata.length; t++) {
			var t=0;
			if(tdata) {
				var playlistInterval = setInterval( function(){
					if(t < tdata.length) {
			            out += '<tr id="r' + tdata[t].playlist_id + '" class="drag'; out += (t % 2) ? "" : " oddRow"; out += '">';
							out += '<td>';
								out += '<span class="btnContainer">';
									out += '<a href="#" onclick="Play(' + tdata[t].playlist_id + ', \'2\'); return false;" title="Abspielen" class=' + ( isLFM ? '"link_play_clip">Play</a>': '"link_play">Play</a>');  
									if(isLFM) {
										out += '<a href="#" onclick="Buy(' + tdata[t].playlist_id + ', \'2\', {}); return false;" title="Kaufen" class="link_buy">Buy</a>';
									}
									else {
										out += '<a href="#" onclick="AddActions(this,' + tdata[t].playlist_id + ', \'2\', {}); return false;" title="Hinzufügen" class="link_add">Add</a>';
									}
								out += '</span>';
							out += '</td>';
							out += '<td><a href="#" onClick=\'navigate("http://home.de.napster.com/cgi-bin/playlistXML?type_id=playlist&result_type=track&select_by=playlist&select_value=MIX_' + tdata[t].playlist_id + '&format=json"); return false;\' title="' + tdata[t].playlist_name + '">' + tdata[t].playlist_name + '</a></td>';
							out += '<td>' + tdata[t].playlist_desc + '</td>';
						out += '</tr>';
						t++;
					} else {
						clearInterval(playlistInterval);
						out += '</tbody>';
						out += '</table>';
						out += '</div>';
				        dojo.byId("content_body").innerHTML = out;
						makeDraggable();
						dojo.byId("content_body").scrollTop = 0;
						
						activeDisplay = tdata;
					}
		        }, 1);
			} else {
				this.displayEmptyPage();
			}
        }
    },

    displayMemberPlaylists: function(tdata, memberID) {
		this._displayMemberPlaylists(tdata, memberID);
	},

    _displayMemberPlaylists: function(tdata, memberID) {
		var out = "";
        if(tdata == '0' || tdata == "") {
            out = "you have no tracks in this view";
        }
        else {
		out += '<div>';
			out += '<table cellspacing="0" id="listReturn" class="playlists">';
				out += '<thead>';
					out += '<tr>';
						out += '<th class="actionCol">Nutzung</th>';
						out += '<th class="playlistCol">Playlist</th>';
					out += '</tr>';
				out += '</thead>';
			out += '<tbody>';
        for (var t = 0; t < tdata.length; t++) {
            out += '<tr id="r' + tdata[t].playlist_id + '" class="drag'; out += (t % 2) ? "" : " oddRow"; out += '">';
				out += '<td>';
					out += '<span class="btnContainer">';
						out += '<a href="#" onclick="Play(' + tdata[t].playlist_id + ', \'6\'); return false;" title="Abspielen" class="link_play">Play</a>';
						out += '<a href="#" onclick="AddActions(this,' + tdata[t].playlist_id + ', \'6\'); return false;" title="Hinzufügen" class="link_add">Add</a>';
					out += '</span>';
				out += '</td>';
				
				out += '<td><a href="#" onClick=\'navigate("http://home.de.napster.com/cgi-bin/memberXML?result_type=track&amp;type=playlist&amp;type_id=memberbrowse&amp;filter_value=' + memberID + '&amp;select_by=playlist&amp;select_value=' + tdata[t].playlist_id + '&amp;playlist_name=' + html_escape(tdata[t].name) + '&amp;format=json"); return false;\' title="' + html_escape(tdata[t].name) + '">' + html_escape(tdata[t].name) + '</a></td>';
			out += '</tr>';
        }
		out += '</tbody>';
		out += '</table>';
		out += '</div>';
        }
        dojo.byId("content_body").innerHTML = out;
		makeDraggable();
		dojo.byId("content_body").scrollTop = 0;
		
		activeDisplay = tdata;
    },

    displayVideos: function(tdata) {
		this._displayVideos(tdata);
	},

    _displayVideos: function(tdata) {
		var out = "";
        if(tdata == '0' || tdata == "") {
			this.displayEmptyPage();
        } else {
			out += '<div>';
				out += '<table cellspacing="0" id="listReturn" class="albums">';
					out += '<thead>';
						out += '<tr>';
							out += '<th class="actionCol">Nutzung</th>';
							out += '<th class="imageCol"><a href="#" onClick="libraryDisplay.sortActive(\'track\'); return false;">Titel</a></th>';
							out += '<th class="radioCol"><a href="#" onClick="libraryDisplay.sortActive(\'artist_name\'); return false;">K&uuml;nstler</a></th>';
						out += '</tr>';
					out += '</thead>';
				out += '<tbody>';
	        // for (var t = 0; t < tdata.length; t++) {
			var t = 0;
			
			var videosInterval = setInterval( function(){
				if(t < tdata.length) {
		            out += '<tr class="'; out += (t % 2) ? "" : "oddRow"; out += '">';
						out += '<td>';
							out += '<span>';
								out += '<a href="#" onclick="videoplayerPop(\''+ tdata[t].video_id + '\'); return false;" title="Abspielen" class="link_play">Play</a>';
							out += '</span>';
						out += '</td>';
						out += '<td style="vertical-align: middle;"><a href="#" class="videoImage" onClick="videoplayerPop(\'' + tdata[t].video_id + '\'); return false;"><img src="' + tdata[t].image_url + '" alt="' + tdata[t].station_name + '" title="' + tdata[t].track + '" /></a> <a href="#" onClick="videoplayerPop(\'' + tdata[t].video_id + '\'); return false;">' + tdata[t].track + '</a></td>';
						// NOTE: we don't want to link to aritst_id 10462505 (a.k.a. Various Artists)
						out += tdata[t].artist_id != 10462505 ? '<td><a href="#" onClick=\'navigate("http://home.de.napster.com/ns/view/artist/?artist_id=' + tdata[t].artist_id + '"); return false;\' title="' + tdata[t].artist_name + '"><strong>' + tdata[t].artist_name + '</strong></a></td>' :
							'<td><strong>' + tdata[t].artist_name + '</strong></td>';
					out += '</tr>';
					t++;
				} else {
					out += '</tbody>';
					out += '</table>';
					out += '</div>';
					clearInterval(videosInterval);
			        dojo.byId("content_body").innerHTML = out;
					makeDraggable();
					dojo.byId("content_body").scrollTop = 0;
					
					activeDisplay = tdata;
				}
			}, 1);
        }
    },
	
	displaySearchMessage: function(search_type,search_pass,total_results) {
		var universalMessage = "";
		// var searchString = document.getElementById("hsearch").getElementsByTagName("form")[0].elements[0].value;
		var searchString = document.getElementById("searchHeader").getElementsByTagName("h2")[0].getElementsByTagName("span")[0].innerHTML;
		var German_Search = "";
		switch (search_type) {
			case "all": German_Search = "Alle" ; break
			case "artist":	German_Search = "Künstler"; break
			case "album":	German_Search = "Album"; break
			case "track":	German_Search = "Titel"; break
		}

		if(total_results) {
			numMatches = total_results < 500?total_results:"500";
			if(search_pass == "exact" || search_pass == "undefined") {
				// 5 of 6 Album matches for example
				universalMessage = (nav.pageData.jsonData.num_results == numMatches ? numMatches : nav.pageData.jsonData.num_results + " von " + numMatches) + " Suchergebnisse für " + German_Search;
			} else {
				// aprox matches
				universalMessage = (nav.pageData.jsonData.num_results == numMatches ? numMatches : nav.pageData.jsonData.num_results + " von " + numMatches) + " ähnliche Suchergebnisse.";

			}
		} else {
			// universalMessage = "No " + search_type + " results.";
			universalMessage = "Kein Suchergebnis für " + German_Search;
		}
		displayUMessageBig(universalMessage, 2);
	},

    sortActive: function(key) {
		dojo.debug("about to sort activeData: " + runToSource(activeDisplay));
        if(!activeDisplay) { return; }
		if((eval(activeDisplay) != 0)) {
			var sortedData;
			if(currentSort[key] == 1) {
				currentSort[key] = 0;
				sortedData = collection.store.sortDisplay(eval(activeDisplay),'desc',key);
			} else {
				currentSort[key] = 1;
				sortedData = collection.store.sortDisplay(eval(activeDisplay),'asc',key);
			}
			// activeDisplay = sortedData.toSource();
			activeDisplay = eval(sortedData);
			// displayList("track", activeDisplay);
			// dojo.debug(eval(activeDisplay).toSource());
			// this.displayTracks(activeDisplay, 0);
			displayList(currentContentType, activeDisplay);
			// this.displayPageOfTracks(1);
		} else {
			alert("Nothing to Sort!");
		}
    },

    updatePagination: function(arr,dispMethod,completeList) {
		// dojo.debug("in updatePagination(" + arr + "," + dispMethod + "," + completeList + ")");
		// if(!initialized) { alert("timeout"); setTimeout("libraryDisplay.updatePagination(arr,dispMethod,completeList)", 500); return; }
		var pageDataArr = "";
		if(typeof(arr) == "undefined") {
			pageDataArr = activeDisplay;
		} else {
			try {
				pageDataArr = eval(arr);
			} catch(e) {
				return;
			}
		}
		// dojo.debug("pageDataArr - " + pageDataArr);
		if(typeof(dispMethod) == "undefined") { dispMethod = currentContentType; }
		if(typeof(completeList) == "undefined") { completeList = 1; }
		// dojo.debug("pageDataArr: " + pageDataArr.toSource());
        pageNo = 1;
		totalPages = 0;
		dojo.byId("content_footer").style.display = "block";
        dojo.byId("content_footer").innerHTML = "<img src=\"/images/includes/pagination_loading.gif\" alt=\"\" \/>";
		var pageStr = "";
		var pageStrPre = '<div id="footerActionContainer">';
		pageStrPre += '<div class="buttonContainer">';
		pageStrPre += '<a href="#" onclick="collection.store.addListReturnItemsToPlaylist(); return false;"><button class="btn_short"><span>Zum Playlist hinzufügen</span></button></a>';
		pageStrPre += '<a href="#" onclick="collection.store.playListReturnItems(); return false;"><button class="btn_short"><span>Titel weiterempfehlen</span></button></a>';
		if(dispMethod != "libraryRecentTracks" && dispMethod != "libraryAddedTracks") { pageStrPre += '<a href="#" onclick="libraryDisplay.confirmDelete(0,0,1); return false;"><button class="btn_short"><span>Titel löschen</span></button></a>'; }
		pageStrPre += '</div>';
		pageStrPre += '<div id="pagination">';
		pageStrPre += '<a href="#" onClick="libraryDisplay.displayPreviousPage(); return false;" id="paginationPrevious" class="';
		if(currentPage > 1) { className = "previous active"; } else { className = "previous"; }
		pageStrPre += className + '">&lt;Prev</a>';
		var className = "";
		try { pageDataArrLength = pageDataArr.length } catch(e) { return; }
		if(pageDataArrLength) {
	        while((pageNo * tracksPerPage) <= pageDataArrLength) {	
				totalPages = pageNo;
				if(pageNo == currentPage) {
					// dojo.debug("ACTIVE - pageNo: " + pageNo + " currentPage: " + currentPage);
					var className = "active";
				} else {
					var className = "";
					// dojo.debug("NOT ACTIVE - pageNo: " + pageNo + " currentPage: " + currentPage);
				}
	            pageStr += '<a href="#" id="page' + pageNo +'" class="' + className + '" onClick="libraryDisplay.displayPage(\'' + pageNo + '\')\; return false;">' + pageNo + '</a>';
	            pageNo++;
	        }
		}
        if (pageDataArr.length % tracksPerPage) {
			if(pageNo == currentPage) {
				className = "active";
			} else {
				className = "";
			}
            // we've got some left over, add one more page
			totalPages = pageNo;
            pageStr += '<a href="#" id="page' + pageNo +'" class="' + className + '" onClick="libraryDisplay.displayPage(\'' + pageNo + '\')\; return false;">' + pageNo + '</a>';
        }
		if(totalPages == 1) {
			className = "next";
		} else {
			className = "next active";
		}
		
		var pageStrPost = '<a href="#" onClick="libraryDisplay.displayNextPage(); return false;" id="paginationNext" class="' + className + '">Next&gt;</a></div></div>';
		if(!completeList) { pageStrPost += "<img src=\"/images/includes/pagination_loading.gif\" alt=\"\" \/>"; }
		if(pageStr == "") {
			dojo.byId("content_footer").innerHTML = '<img src="/images/includes/pagination_loading.gif"  class="loaderImg" alt="loading..." \/> <span class="loadingText">Loading...</span>';
		} else {
			// currentPage = 1;
			if(totalPages > 1) {
				pageStr = pageStrPre + pageStr + pageStrPost;
				// alert(pageStr);
				dojo.byId("content_footer").innerHTML = pageStr;
				// dojo.byId("page1").className = "active";
			} else {
				dojo.byId("content_footer").innerHTML = pageStrPre;
			}
		}
		
		initalizePageHeight();
        activeDisplay = pageDataArr;
    },

    addNewPlaylist: function() {
        collection.store.createPlaylist(dojo.byId("addPL").value);
    },
	
    updateActivePlaylist: function(pid) {
        activePlaylist = pid;
    },
	
	addContentToPlaylist: function(cid, ctype, pid) {
		var strIds = new String( cid );
		ctype = ctype - 0;
		var itemIDs = strIds.split(",");
		switch (ctype) {
			case 0:
				if(itemIDs.length > 1) {
					this.addTracksToPlaylist(itemIDs, pid);
				} else {
					this.addTrackToPlaylist(cid, "", pid);
				};
				break
			case 1:	this.addAlbumToPlaylist(cid, pid); break
			case 2:	this.addPlaylistToPlaylist(cid, pid); break
			case 3: this.addTracksToPlaylist(collection.store.getPlaylistData(cid)[0].tracks, pid); break
			case 6:	this.addMemberPlaylistToPlaylist(cid, pid); break
		}
		dojo.byId('popupListContainer').style.display = "block";
	},
	
	addContentToNewPlaylist: function(cid, ctype, pname) {
		if(ctype == "") { ctype = 0; }
		// dojo.debug("in addContentToNewPlaylist(" + cid + "," + ctype + "," + pname + ")");
		collection.store.createPlaylist(pname, cid, ctype);
		dojo.byId('addPL').value = "";
		//MATTNOTE: are we keeping this
		//var universalMessage = "Created new playlist '" + this._safeSendHTMLText(pname) + "'.";
		// var universalMessage = "New playlist added to your Library";
		// var universalMessage = "Neue Playlist wurde zum Archiv hinzugefügt.";
		var universalMessage = "Neue Playlist wurde zum Archiv hinzugefügt.";
		displayUMessage(universalMessage, 1);
	},
	
	addTracksToPlaylist: function(tidArr, pid) {
		collection.store.addTracksToPlaylist(pid,tidArr);
		if(typeof(tidArr) == "object") { tidArr = tidArr.toString(); }
		//var universalMessage = "Added " + tidArr.split(",").length + " tracks to the selected playlist.";
		// var universalMessage = "Tracks added to playlist.";
		var universalMessage = "Titel wurden zur Playlist hinzugefügt";
		displayUMessage(universalMessage, 1);
	},



    addTrackToPlaylist: function(tid, tname, pid) {
        collection.store.addTracksToPlaylist(pid,tid);
//		var universalMessage = "Track added to playlist.";
		var universalMessage = "Titel wurde zur Playlist hinzugefügt";
		displayUMessage(universalMessage, 1);
    },

    addAlbumToPlaylist: function(tid, pid) {
        collection.store.addContentToPlaylist(pid,1,tid);
		// var universalMessage = "Album added to playlist.";
		var universalMessage = "Album wurde zur Playlist hinzugefügt";
		displayUMessage(universalMessage, 1);
    },

    addPlaylistToPlaylist: function(tid, pid) {
        collection.store.addContentToPlaylist(pid,2,tid);
		// var universalMessage = "Playlist added to playlist.";
		var universalMessage = "Album wurde zur Playlist hinzugefügt";
		displayUMessage(universalMessage, 1);
    },

    addMemberPlaylistToPlaylist: function(tid, pid) {
        collection.store.addContentToPlaylist(pid,6,tid);
		// var universalMessage = "Playlist added to playlist.";
		var universalMessage = "Playlist wurde zur Playlist hinzugefügt";
		displayUMessage(universalMessage, 1);
    },
    
    addWorkToPlaylist: function(tid, pid) {
        collection.store.addContentToPlaylist(pid,7,tid);
		// var universalMessage = "Work added to playlist.";
		var universalMessage = "Album wurden zur Playlist hinzugefügt";
		displayUMessage(universalMessage, 1);
    }
};
