baseDomain = "http://home.de.napster.com";
baseURL = "/";
currentContentType = "";
documentRoot = baseDomain + baseURL;
dojo.require("dojo.back");
navBind = "";
menuInitialized = false;
initialURL = "";
addedPops = new Array();
loaderThrobberHtml = "<div id='loaderThrobber'><div><img src='/images/includes/loader_arrow.gif' alt='Loading...' /></div></div>";
previousTarget = "";

	function console_log(s) {
		if (typeof(console) != "undefined") {
			return console.log(s);
		}
		else if (typeof(window.console) != "undefined") {
			return window.console.log(s);
		}
	}
	
	function getLocationHash() {
		if(dojo.isIE == 6) { // IE 6 doesn't pick up query strings on location.hash
			var locationPieces = new String(location).split("#");
			var hashId = "#";
			hashId += typeof(locationPieces[1]) != "undefined"?locationPieces[1]:"";
		} else {
			var hashId = location.hash;
		}
		return hashId;
	}


	function getChartData() {
		var dataForm = document.chart_data;
		var selectedSeason;
		// this is here in case there's only one season available
		if(!dataForm.seasons.length) {
			selectedSeason = dataForm.seasons.value;
		} else {
			for(i = 0; i < dataForm.seasons.length; i++) {
				if(dataForm.seasons[i].checked) {
					selectedSeason = dataForm.seasons[i].value;
				}
			}
		}
		navigate("http://home.de.napster.com/cgi-bin/searchXML?type_id=billboard&result_type=" + dataForm.result_type.value + "&select_by=chart&select_value=" + dataForm.chart_id.value + "&year=" + dataForm.year[dataForm.year.selectedIndex].value + "&seasoncode=" + selectedSeason + "&format=json");
	}
		
		fixedLinkFromURL = function (inURL,justURL,sideBar) {
			var outLink = "";
			if(typeof(justURL) == "undefined") { justURL = 0; }
			if(inURL === undefined || inURL == "") { inURL = "#"; }
			urlPieces = inURL.split(documentRoot, 2);
			//alert(urlPieces.toSource());
			if(!urlPieces[1]) { //we have a URL that doesn't have the documentRoot in it
				if(inURL.charAt(0) == "/") { //the URL points to documentRoot/
					inURL = baseDomain + inURL;
				} else {
					if(inURL.indexOf("://") >= 0) { //we have a URL on an external domain
						outLink = "<a href=\"";
						outLink += "javascript:var newWindow = window.open('" + inURL + "');\" ";
						outLink += "onclick=\"var newWindow = window.open('" + inURL + "'); return false;\" ";
						outLink += ">";
						return outLink;
					} else { //fall through, we have an absolute or relative URL
						inURL = documentRoot + inURL;
					}
				}
				if(justURL) { return urlPieces[0]; }
			} else {
				if(justURL) { return urlPieces[1]; }
			}
			if(inURL == documentRoot + "#") { inURL = ""; }
			outLink = "<a href=\"";
			// outLink += "javascript:navigate('" + inURL + "');\" ";
			/* outLink += "javascript:";
			sideBar?outLink += "sideBarNavigate('" + inURL + "', this);\" " : outLink += "navigate('" + inURL + "');\" "; */
			outLink += "javascript:;\" ";
			outLink += "onclick=\""
			sideBar?outLink += "sideBarNavigate('" + inURL + "', this); return false;\" " : outLink += "navigate('" + inURL + "'); return false;\" ";
			outLink += ">";
			return outLink;
		}
		
		fixLinks = function (elementID) {
			if(elementID) { 
				var links = elementID.getElementsByTagName("a");
			} else {
				var links = document.getElementsByTagName("a");
			}
			if(links.length) {
			    for(var i=0; i<links.length; i++) {
					var href = "";
					var targetDiv = "";
			        try { href = links[i].getAttribute("href"); } catch(e) { console.log("href error: " + e.message); }
					if((href == null) || (href.indexOf("#anchor") == 0)) { continue; } // If the a tag has no href or an in-page anchor link, skip it
					try { targetDiv = links[i].getAttribute("rel"); } catch(e) { }
					if(targetDiv) {
						if(targetDiv.indexOf("naps_") == 0) {
							switch(targetDiv.substr(5)) {
								case "current": targetDiv = nav.target; break
								default: targetDiv = targetDiv.substr(5);
							}
						} else {
							targetDiv = "";
						}
					}
					urlPieces = href.split(documentRoot, 2);
					if(!urlPieces[1]) { //we have a URL that doesn't have the documentRoot in it
						if(href.charAt(0) == "/") { //the URL points to documentRoot/
							href = baseDomain + href;
						} else {
							if(href.indexOf("://") >= 0) { //we have a URL on an external domain
								if(!links[i].getAttribute("onclick")) {
									links[i].setAttribute("onclick", "var newWindow = window.open('" + links[i].getAttribute("href") + "'); return false;");
								}
								//FIXME: line below causes js-error for external links
								//links[i].setAttribute("href", "javascript:var newWindow = window.open('" + links[i].getAttribute("href") + "'); return false;");
							} else { //fall through, we have an absolute or relative URL
								href = documentRoot + href;
							}
						}
					} else {
						if(urlPieces[1].indexOf("#anchor") == 0) { // IE appends the document root to relative URLs, even if they're not in the source
							continue;
						}
					}
					if(href.indexOf("CURRENTUID") >= 0) {
						href = href.replace("CURRENTUID",dojo.cookie('NUID'));
					}
					if(!links[i].getAttribute("onclick")) { //if our link doesn't already have an onclick (set above or in the html)
						if(href == documentRoot + "#") { href = ""; }
						var oc=links[i].onclick?links[i].onclick.toString():'';
						if(targetDiv) {
							if(targetDiv == "close") {
								var navString = "removeAddedPops(\"" + nav.target + "\");";
							} else {
								var navString = "navigate(\"" + href + "\", 0, \"" + targetDiv + "\");";
							}
						} else {
							var navString = "navigate(\"" + href + "\");";
						}
						if(oc) {
							if((oc.indexOf("s_lc(") > 1) && (links[i].onclick.length == 1)) {
								links[i].setAttribute("onclick", navString + " return false;");
								links[i].setAttribute("href", "javascript:" + navString);
							}
						} else {
							links[i].setAttribute("onclick", navString + " return false;");
							links[i].setAttribute("href", "javascript:" + navString);
						}
					}
			    }
			}
		}

		function fixMainContentArea() {
			// alert("in fixMainContentArea()");
			if(dojo.isIE) { // a proprietary solution to a proprietary issue with missing content				
				// alert("about to fix content");
				
				var elems = dojo.query(".zoomFix");
				
                for( i = 0; i < elems.length; i++ ){
					elems[i].style.zoom = ".99";
					elems[i].style.zoom = "1";
				}
			}
		}
		
		ApplicationState = function(bookmarkValue){
			this.changeUrl = bookmarkValue;
		}

		ApplicationState.prototype.back = function(){
			navigate(documentRoot + this.changeUrl);
		}

		ApplicationState.prototype.forward = function(){
			navigate(documentRoot + this.changeUrl);
		}
		
		function getHtmlNav(menuItems) {
			var menuHTML = "<ul>";
			for (var s = 0; s < menuItems.length; s++) {
				if(menuItems[s].type == "popup") {
					menuHTML += "<li";
					if(menuItems[s].expand) { menuHTML += " class=\"expanded\""; }
					menuHTML += "><a href=\"#\">" + menuItems[s].text + "</a>";
					menuHTML += getHtmlNav(menuItems[s].menuitem);
					menuHTML += "</li>";
				} else {
					var url = "";
					if(menuItems[s].home == 1) { initialURL = menuItems[s].url; }
					menuItems[s].url === undefined ? url = "#":url = menuItems[s].url;
					menuHTML += "<li>" + fixedLinkFromURL(url,0,1) + menuItems[s].text + "</a></li>";
				}
			}
			menuHTML += "</ul>";
			menuInitialized = true;
			return menuHTML;
		}
		
		function loadNav(navURL) {
			var bindDataArgs = {
				url:        navURL,
				//mimetype:   "text/plain",
				transport: "XMLHTTPTransport",
				//error:      function(type, errObj){ console.log("Data Bind Failed"); },
				error: function( error ) {
					var msg = "Error, in data:\n" + error.message;
					console.log("LoadNav BIND FAILED: " + msg);
				},
				load:      function(dataIn, ioRequest){
					jsonData = dojo.fromJson(dataIn);
					menuItems = jsonData.NAVIGATION.menuitem;
					var currNavItem = 3;
					for (var r = 0; r < menuItems.length; r++) {
						dojo.byId("sb" + currNavItem).innerHTML = menuItems[r].text; // for top-level nav items, set the tab title
						menuHTML = getHtmlNav(menuItems[r].menuitem);
						dojo.byId("bar" + currNavItem).innerHTML = menuHTML;
						ntreeCreate("bar" + currNavItem);
						currNavItem++;
					}
				}
			}
			var requestDataObj = dojo.xhrGet(bindDataArgs);
			
			// console.log(requestDataObj);
		}
		
		
		function _safeSendText(inText) {
			inText = inText.toString(); //convert our input text to a string
			var safeText = inText.replace(/'/g, "&rsquo;"); //escape all single quotes
			return safeText;
		}
		
		function getLinkAction(linkURL) {
			var linkActionReturn = "";
			// alert ("getLinkAction");
			if(linkURL.substr(0,9) == "MyLibrary") {
				linkURLpieces = linkURL.substr(9).split('/');
				if(linkURL == "MyLibrary") { linkURLpieces[1] = "MyLibrary"; }
				switch(linkURLpieces[1]) {
					case "": linkActionReturn = "libraryDisplay.displayRecentTracks('1')"; break
					case "MyLibrary": linkActionReturn = "libraryDisplay.displayRecentTracks('1')"; break
					case "RecentlyPlayed": linkActionReturn = "libraryDisplay.displayRecentTracks('1')"; break
					case "RecentlyAdded": linkActionReturn = "libraryDisplay.displayAddedTracks('1')"; break
					case "AllTracks": linkActionReturn = "libraryDisplay.displayAllTracks('1')"; break
					case "ArtistByGenre": linkActionReturn = "libraryDisplay.displayArtistTracks('" + linkURLpieces[2] + "','','','','genre','" + linkURLpieces[3] + "')"; break
					case "Artist": linkActionReturn = "libraryDisplay.displayArtistTracks('" + linkURLpieces[2] + "','')"; break
					case "Album": linkActionReturn = "libraryDisplay.displayAlbumTracks('" + linkURLpieces[2] + "','')"; break
					case "Playlist": linkActionReturn = "libraryDisplay.displayTracksFromPlaylist('" + linkURLpieces[2] + "','')"; break
					default: console.log(linkURLpieces[1]); console.log(linkURL); linkActionReturn = linkURL;
					
					// alert ("if linkURL");
				}
			} else {
				linkActionReturn = linkURL;
				// alert ("linkActionReturn");
			}
			return linkActionReturn;
			// alert ("return linkActionReturn");
		}
		
		function openInNewWindow(e) {
			var event;
			if (!e) event = window.event;
			else event = e;
			// Abort if a modifier key is pressed
			if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) {
				return true;
			}
			else {
				// Change "_blank" to something like "newWindow" to load all links in the same new window
				var newWindow = window.open(this.getAttribute('href'), '_blank');
				if (newWindow) {
					if (newWindow.focus) {
						newWindow.focus();
					}
					return false;
				}
				return true;
			}
		}
		
		function logOut() {
			if (dojo.isOpera) {
				top.location.href='http://sms.de.napster.com/ns/logout/?return_url=1';
			}
			initialized = false;
			displayLoadingMessage();
			collection.store.initialize(false, false, true);
			
			var logoutInterval = setInterval( function(){
				if(initialized) {
					clearInterval(logoutInterval);
					top.location.href='http://sms.de.napster.com/ns/logout/?return_url=1';
				}
			}, 500);
		}
		
		function displayLoadingMessage() {
			dojo.byId("breadcrumb_bar").innerHTML = "";
			dojo.byId("content_head").innerHTML = "";
			dojo.byId("content_head").style.display = "none";
			dojo.byId("content_footer").innerHTML = "";
			// dojo.byId("content_footer").style.display = "none";
			displayBodyLoadingMessage();
		}
		
		function displayBodyLoadingMessage() {
			//console.log("cb set 1");
			dojo.byId("content_body").innerHTML = loaderThrobberHtml;
			//innerSwap(dojo.byId("content_body"), loaderThrobberHtml);
		}
		
		function displaySignInPrompt() {
			if (dojo.cookie('SL') == 'VIS') {
				showVisitorPop();
			} else {
				alert("You must be logged in to use this feature.");
			}
		}
		
		function _evalInternalScript(code) {
			if(code && code != "") {
				try {
					eval(code);
				} catch(err) {
					console.log(err.message);
				}
			}
		}
		
		function _evalExternalScript(url) {
			if(url && url != "") {
				var bindArgs = {
					url:        url,
					//mimetype:   "text/plain",
					transport: "XMLHTTPTransport",
					error: function( error ) {
						var msg = "Error, in data:\n" + error.message;
						console.log("_evalExternalScript BIND FAILED: " + msg);
					},
					load: function(dataIn, ioRequest){
						try {
							eval(dataIn);
						} catch(e_e) {
							console.error(e_e.message);
						}
					}
				};
				// dispatch the request
				var requestObj = dojo.xhrGet(bindArgs);
			}
		}
		
		function loadBodyMessage(url) {
			if(url && url != "") {
				var bindArgs = {
					url:        url,
					//mimetype:   "text/plain",
					transport: "XMLHTTPTransport",
					error: function( error ) {
						var msg = "Error, in data:\n" + error.message;
						console.log("loadBodyMessage BIND FAILED: " + msg);
					},
					load: function(dataIn, ioRequest){
						try {
							//console.log("cb set 2");
							dojo.byId("content_body").innerHTML = dataIn;
							//innerSwap(dojo.byId("content_body"), dataIn);
						} catch(e_e) {
							console.log(e_e.message);
						}
					}
				};
				// dispatch the request
				var requestObj = dojo.xhrGet(bindArgs);
			}
		}
		
		function loadContent(url, target) {
			dojo.byId(target).innerHTML = "";
			dojo.byId(target).style.display = "block";
			if(url && url != "") {
				var bindArgs = {
					url:        url,
					//mimetype:   "text/plain",
					transport: "XMLHTTPTransport",
					error: function( error ) {
						var msg = "Error, in data:\n" + error.message;
						console.log("loadContent BIND FAILED: " + msg);
					},
					load: function(dataIn, ioRequest){
						try {
							dojo.byId(target).innerHTML = dataIn;
						} catch(e_e) {
							console.log(e_e.message);
						}
						initalizePageHeight();
					}
				};
				// dispatch the request
				var requestObj = dojo.xhrGet(bindArgs);
			}
		}
		
		function sideBarNavigate(url, menuItemRef) {
			navigate(url, 0);
			gStickyToggle(menuItemRef);
		}
		
		nav = {
			initialize: function(url, isInitial, target, postAction, force) { // initialize variables, set up URLs
				currentPage = 0;
				console.log("in nav.initialize for " + url + "postAction is: " + postAction);
				this.urlPieces = new Array,
				this.buildUrl = "";
				this.dataUrl = "";
				this.serverSort = false;
				this.fullResultsUrl = "";
				this.linkAction = "";
				this.postAction = "";
				/*
				if(typeof(postAction) == "undefined") {
					this.postAction = "";
				} else {
					this.postAction = postAction;
				}*/
				this.errorMessage = "There was an error with the page you requested.";
				this.successfulLoad = false;
				this.postponeSC = false;
				this.continueURL = "";
				
				if(typeof(target) == "undefined") {
					this.target = "fullPage";
				} else {
					this.target = target;
				}
				
				if(typeof(postAction) != "undefined") {
					if(postAction == "reposition") {
						this.postAction = "repositionDiv(nav.target, xClickPos, yClickPos, 50)";
						// this.postAction = "repositionDiv(nav.target, Math.floor(ciWidth/2 - document.getElementById(nav.target).offsetWidth/2), Math.floor(ciHeight/2 - document.getElementById(nav.target).offsetHeight/2))";
					} 
                    else if (postAction == "center") {
                        this.postAction = "repositionDiv(nav.target, Math.floor(ciWidth/2 - document.getElementById(nav.target).offsetWidth/2), Math.floor(ciHeight/2 - document.getElementById(nav.target).offsetHeight/2))";
                    }
                    else {
						this.postAction = postAction;
					}
				}
				
				this.pageData = new Object();
				
				if(url == documentRoot && typeof(isInitial) == "undefined" && typeof(this.appState) == "undefined") {
					url += "de/ns/logout/";
					top.location.href = url;
					return false;
				}
				//console_log("in navigate(" + url + ")");
				
				if(url=="" && force) {
					url = "http://home.de.napster.com/ns/home/";
				}
				
				if(!url) return false;
				
				if(url.search("%2F") >= 0) {
					url = url.replace(/%2F/g, "/");
				}
					// alert("url: " + url);
				
				if(url.indexOf("cgi-bin/searchXML") >= 0 && (url.indexOf("type=artist") >= 0 || url.indexOf("type=album") >= 0 || url.indexOf("type=track") >= 0) || url.indexOf("type=all") >= 0){
					if(url.indexOf("count=") == -1){
						url = url + "&count=10&index=0";
					}
				}
				
				if((dojo.isIE == 6) && (url.indexOf("cgi-bin/featuresXML") >= 0 && (url.indexOf("type_id=newrelease") >= 0))){
					this.continueURL = url;
					this.gateUrl = documentRoot + "info/feature_blocked.html";
					if(!force) { url = this.gateUrl; };
				}
				if (gStickylink != "" || gStickylink == null) { dojo.removeClass(gStickylink, "stickylink"); }
				this.urlPieces = url.split(documentRoot, 2);
				currentSort = new Array();
				
				if(this.urlPieces[0] == "") {
					if(this.urlPieces[1].indexOf("MyLibrary") >= 0) {
						this.buildUrl = "";
						this.linkAction = getLinkAction(this.urlPieces[1]) ? getLinkAction(this.urlPieces[1]) : "";
					} else {
						if((this.urlPieces[1] == "de/ns/home/?genre_id=0") || (this.urlPieces[1] == "de/ns/home/")) {
							this.urlPieces[1] = "de/ns/home/?genre_id=00";
						}
						this.buildUrl = documentRoot + this.urlPieces[1];
						if(this.target == "fullPage") { displayLoadingMessage(); hideInPagePopups(); }
					}
				} else {
					if(url.indexOf("MyLibrary") >= 0) {
						this.buildUrl = "";
						this.linkAction = getLinkAction(url) ? getLinkAction(url) : "";
					} else {
						this.buildUrl = "/de/ns/home/?genre_id=00";
						if(this.target == "fullPage") { displayLoadingMessage(); hideInPagePopups(); }
					}
				}
				
				this.buildUrlInitial = this.buildUrl;
				
				if(this.target != "fullPage") {
					var innerLoaderThrobberHtml = "<div id=\"innerLoader\">" + loaderThrobberHtml + "</div>";
					try {
						dojo.byId(this.target).innerHTML = innerLoaderThrobberHtml;
						//console_log("try innerLoaderThrobberHtml");
					} catch(e) {
						body = document.getElementsByTagName("body");
						var newdiv = document.createElement('div');
						newdiv.setAttribute('id', this.target);
						newdiv.innerHTML = innerLoaderThrobberHtml;
						body[0].appendChild(newdiv);
						//console_log("catch innerLoaderThrobberHtml");
					}
					// alert("!");
					if (this.target == "trackPurchase") {
						dojo.byId("innerLoader").style.position = "absolute";
					}
					// if(previousTarget == "fullPage" || previousTarget == "") { repositionDiv(this.target, xClickPos, yClickPos); }
					previousTarget = this.target;
					//console_log("pre-repositionDiv xPos: " + xPos + " yPos: " + yPos);
					if (this.target == "trackPurchase") {
						repositionDiv("innerLoader", xPos, yPos);
					}
					// repositionDiv("innerLoader", Math.floor(ciWidth/2 - document.getElementById("innerLoader").offsetWidth/2), Math.floor(ciHeight/2 - document.getElementById("innerLoader").offsetHeight/2));
				}
				
				return true;
			},
			
			appendUrlParams: function() { // Add user type and preferences to the URL
				var COUNTRYCODEvalue = "";
				var LFMvalue = "";
				var EXPLICITvalue = "";
				var ampVal = "&";
				COUNTRYCODEvalue = dojo.cookie('COUNTRYCODE');
				EXPLICITvalue = dojo.cookie('EXPLICIT');
				switch (dojo.cookie('SL')) {
					case 'NTG': LFMvalue = 'N'; break;
					case 'SUB': LFMvalue = 'N'; break;
					case 'VIS': LFMvalue = 'Y'; break;
					case 'LFM': LFMvalue = 'Y'; break;
					default: var navAttempt = encodeURIComponent(documentRoot + getLocationHash()); top.location.href = "http://sms.de.napster.com/ns/login/?return_url=" + navAttempt;
				}
				if( COUNTRYCODEvalue != null && COUNTRYCODEvalue != '' ){
					if(this.buildUrl != "" && ((this.buildUrl.lastIndexOf("/") != (this.buildUrl.length - 1))) && (this.buildUrl.indexOf("?") >= 0)) {
						if(!(this.buildUrl.indexOf(ampVal + "LFM=" + LFMvalue) >= 0) && !(this.buildUrl.indexOf("&LFM=" + LFMvalue) >= 0)) {
							this.buildUrl = this.buildUrl + ampVal + "LFM=" + LFMvalue;
						}
						if(!(this.buildUrl.indexOf(ampVal + "COUNTRYCODE=" + COUNTRYCODEvalue) >= 0) && !(this.buildUrl.indexOf("&COUNTRYCODE=" + COUNTRYCODEvalue) >= 0)) {
							this.buildUrl = this.buildUrl + ampVal + "COUNTRYCODE=" + COUNTRYCODEvalue;
						}
						if(!(this.buildUrl.indexOf(ampVal + "EXPLICIT=" + EXPLICITvalue) >= 0) && !(this.buildUrl.indexOf("&EXPLICIT=" + EXPLICITvalue) >= 0)) {
							this.buildUrl = this.buildUrl + ampVal + "EXPLICIT=" + EXPLICITvalue;
						}
					}
				} else {
					// top.location.href='http://sms.de.napster.com/ns/logout/';
				}
			},
			
			pageData: new Object(),
			
			processHtmlPieces: function() {
				if(this.target == "fullPage") {
					importStylesElement = dojo.byId("importStyles");
					if(importStylesElement) {
						document.body.removeChild(importStylesElement);
					}
					dojo.byId("loader").innerHTML = this.pageData.htmlData;
					fixLinks(dojo.byId("loader"));
					
					if (document.getElementById("importStyles")) {
						this.pageData.style_block = document.getElementById("importStyles");
					}
					else {
						// What's this? Well, webkit doesn't allow 'style' elements in the body. So...
						// you don't get it for free by simply overwriting the 'loader' div with htmlData.
						// We have to parse it out of htmlData and copy it for later use.
						var doc = (new DOMParser()).parseFromString(this.pageData.htmlData, "text/xml");
						this.pageData.style_block = doc.getElementById("importStyles")?doc.getElementById("importStyles").cloneNode(true):"";
					}
					this.pageData.breadcrumb_bar = document.getElementById("breadCrumb").innerHTML?document.getElementById("breadCrumb").innerHTML:"";
					this.pageData.content_head = document.getElementById("head").innerHTML?document.getElementById("head").innerHTML:"";
					this.pageData.content_body = document.getElementById("main").innerHTML?document.getElementById("main").innerHTML:"";
					this.pageData.content_footer = document.getElementById("footer").innerHTML?document.getElementById("footer").innerHTML:"";
					try {
						this.pageData.embeddedScriptURL = document.getElementById("embeddedExternalScript").getAttribute("src")?document.getElementById("embeddedExternalScript").getAttribute("src"):"";
					} catch(e_es) {
						this.pageData.embeddedScriptURL = "";
					}
					
					try {
						this.pageData.embeddedScriptString = document.getElementById("embeddedInternalScript").innerHTML?document.getElementById("embeddedInternalScript").innerHTML:"";
					} catch(e_es) {
						this.pageData.embeddedScriptString = "";
					}
				} else {
					dojo.byId("loader").innerHTML = this.pageData.htmlData;
					fixLinks(dojo.byId("loader"));
					if (document.getElementById("importStyles")) {
						this.pageData.style_block = document.getElementById("importStyles");
					}
					else {
						// What's this? Well, webkit doesn't allow 'style' elements in the body. So...
						// you don't get it for free by simply overwriting the 'loader' div with htmlData.
						// We have to parse it out of htmlData and copy it for later use.
						var doc = (new DOMParser()).parseFromString(this.pageData.htmlData, "text/xml");
						this.pageData.style_block = doc.getElementById("importStyles")?doc.getElementById("importStyles").cloneNode(true):"";
					}
					this.pageData.content_body = document.getElementById("main").innerHTML?document.getElementById("main").innerHTML:"";
					try {
						this.pageData.embeddedScriptURL = document.getElementById("embeddedExternalScript").getAttribute("src")?document.getElementById("embeddedExternalScript").getAttribute("src"):"";
					} catch(e_es) {
						this.pageData.embeddedScriptURL = "";
					}
					
					try {
						this.pageData.embeddedScriptString = document.getElementById("embeddedInternalScript").innerHTML?document.getElementById("embeddedInternalScript").innerHTML:"";
					} catch(e_es) {
						this.pageData.embeddedScriptString = "";
					}
				}
			},
			
			setHtml: function() {
				if(this.target == "fullPage") {
					if (this.pageData.style_block) { // this appears to work across firefox, IE and WebKit
						try {
							if (dojo.byId("importedStyles")) {
								document.getElementsByTagName("head")[0].removeChild(dojo.byId("importedStyles"));
							}
							this.pageData.style_block.setAttribute('id', 'importedStyles');
							document.getElementsByTagName("head")[0].appendChild(this.pageData.style_block);
							nav.successfulLoad = true;
						} catch(e) {
							console_log(e.message);
						}
					}
					try {
						dojo.byId("breadcrumb_bar").innerHTML = this.pageData.breadcrumb_bar;
						dojo.byId("content_head").innerHTML = this.pageData.content_head;
						embeddedScriptURL = this.pageData.embeddedScriptURL;
						embeddedScriptString = this.pageData.embeddedScriptString;
						if(dojo.byId("content_head") != null && dojo.byId("content_head").innerHTML != "") {
							dojo.byId("content_head").style.display = "block";
						} else {
							dojo.byId("content_head").style.display = "none";
						}
						if(dojo.byId("footer") == null) {
							dojo.byId("content_footer").innerHTML = "";
							dojo.byId("content_footer").style.display = "none";
						} else {
							dojo.byId("content_footer").innerHTML = this.pageData.content_footer;
							dojo.byId("content_footer").style.display = "block";
						}
						if(dojo.byId("main") == null) {
							//console.log("cb set 3");
							dojo.byId("content_body").innerHTML = "";
							//innerSwap(dojo.byId("content_body"), "");
						} else {
							//console.log("cb set 4");
							dojo.byId("content_body").innerHTML = this.pageData.content_body;
							// innerSwap(dojo.byId("content_body"), this.pageData.content_body, nav.buildUrl);
						}
						try {
							_evalExternalScript(embeddedScriptURL);
							_evalInternalScript(embeddedScriptString);
						} catch(e) {
							console.error(e.message);
						}
					} catch(e) {
						// alert("e_a: " + e.message);
					}
				} else { // We're loading a partial content piece
					/* dojo.byId(this.target).style.position = "auto";
					dojo.byId(this.target).style.left = "auto";
					dojo.byId(this.target).style.top = "auto"; */
					try { // this appears to work across firefox, IE and WebKit
						if (dojo.byId(this.target + "Styles")) {
							document.getElementsByTagName("head")[0].removeChild(dojo.byId(this.target + "Styles"));
						}
						this.pageData.style_block.setAttribute('id', this.target + "Styles");
						document.getElementsByTagName("head")[0].appendChild(this.pageData.style_block);
					} catch(e) {
						console_log(e.message);
					}
					try {
						dojo.byId(this.target).innerHTML = this.pageData.content_body;
					} catch(e) {
						body = document.getElementsByTagName("body");
						var newdiv = document.createElement('div');
						newdiv.setAttribute('id', this.target);
						newdiv.innerHTML = this.pageData.content_body;
						body[0].appendChild(newdiv);
					}
					
					try {
						embeddedScriptURL = this.pageData.embeddedScriptURL;
						_evalExternalScript(embeddedScriptURL);
					} catch(e) {
					}
					
					try {
						embeddedScriptString = this.pageData.embeddedScriptString;
						_evalInternalScript(embeddedScriptString);
					} catch(e) {
					}
					
					addedPops.addUnique(this.target);
					dojo.byId(this.target).style.display = "block";
					// repositionDiv(this.target, xClickPos, yClickPos);
					this.successfulLoad = true;
				}
					
				dojo.byId("loader").innerHTML = ""; // clean up our loader div
			},
			
			processHtml: function(htmlData) {
				try {
					this.pageData.htmlData = htmlData;
				} catch(e1) { /* alert("e1: " + e1.message); */ }
				try {
					this.processHtmlPieces();
				} catch(e2) { /* alert("e2: " + e2.message); */ }
				try {
					this.setHtml();
				} catch(e3) { /* alert("e3: " + e3.message); */ }
			},
			
			processJsonContent: function() {
				displayBodyLoadingMessage();
				jsonDataReturn = (this.pageData.jsonData.result)?this.pageData.jsonData.result:this.pageData.jsonData.CONTENT;
				if(jsonDataReturn == "" && this.pageData.jsonData.BROWSE_RESULT.type == "newrelease") {
					//console.log("cb set 5");
					dojo.byId("content_body").innerHTML = "";
					//innerSwap(dojo.byId("content_body"), "");
				} else {
					try {
						if(typeof(this.pageData.jsonData.search_pass) != "undefined") {
							if(this.pageData.jsonData.total_results == 0) { loadBodyMessage("/info/fragments/no_search_results.html"); }
							libraryDisplay.displaySearchMessage(this.pageData.jsonData.type,this.pageData.jsonData.search_pass,this.pageData.jsonData.total_results);
						}
					} catch(e) {  }
					if(typeof(jsonDataReturn[0].type) != "undefined") {
						if(typeof(this.pageData.jsonData.contentType == "undefined") || (this.pageData.jsonData.contentType == "") || (this.pageData.jsonData.contentType == "content_name")){ this.pageData.jsonData.contentType = jsonDataReturn[0].type; }
						if(this.pageData.jsonData.contentType == "billboard") { this.pageData.jsonData.contentType += jsonDataReturn[0].type; }
					}
					if(typeof(this.pageData.jsonData.BROWSE_RESULT) != "undefined") {
						if(typeof(this.pageData.jsonData.contentType == "undefined") || (this.pageData.jsonData.contentType == "") || (this.pageData.jsonData.contentType == "content_name")){
							this.pageData.jsonData.contentType = this.pageData.jsonData.BROWSE_RESULT.type?this.pageData.jsonData.BROWSE_RESULT.type:jsonDataReturn[0].type;
						}
						if(this.pageData.jsonData.contentType == "billboard") {
							this.pageData.jsonData.contentType += this.pageData.jsonData.BROWSE_RESULT.type?this.pageData.jsonData.BROWSE_RESULT.type:jsonDataReturn[0].type;
						}
					}
					if(typeof(this.pageData.jsonData.NUM_PAGES) != "undefined") { 
						if(this.pageData.jsonData.NUM_PAGES > 1) {
							this.serverSort = true;
						}
					}
					this.pageData.jsonData.contentType = this.pageData.jsonData.contentType?this.pageData.jsonData.contentType:"playlists";
					displayList(this.pageData.jsonData.contentType, jsonDataReturn);
					try {
						if(this.postponeSC) {
							runSCPageLoad(nav.urlPieces[1]);
						}
					} catch(sc_e) {}
				}
			},
			
			processJson: function(jsonData) {
				displayBodyLoadingMessage();
				this.pageData.jsonData = dojo.fromJson(jsonData);
				
				try { if(this.pageData.jsonData.BROWSE_RESULT.content_name) { this.pageData.jsonData.contentType = this.pageData.jsonData.BROWSE_RESULT.content_name.toLowerCase(); } } catch(err) { }
				try { if(this.pageData.jsonData.BROWSE_RESULT.type) { this.pageData.jsonData.contentType = this.pageData.jsonData.BROWSE_RESULT.type.toLowerCase(); } } catch(err) { }
				try { if(this.pageData.jsonData.DATA_URL) { this.dataUrl = this.pageData.jsonData.DATA_URL; } } catch(err) { }
				try { if(this.pageData.jsonData.BROWSE_RESULT.member_id) { filter_value = this.pageData.jsonData.BROWSE_RESULT.member_id } } catch(err) { }
				if((this.dataUrl == "") || (this.pageData.jsonData.HTML_OUTPUT != "" && this.pageData.jsonData.CONTENT != "")){
					if(this.pageData.jsonData.HTML_OUTPUT) {
						this.processHtml(this.pageData.jsonData.HTML_OUTPUT);
					}
					nav.processJsonContent();
				} else {
					this.postponeSC = true;
					var bindDataArgs = {
						url:        nav.dataUrl,
						parentUrl:	nav.buildUrl,
						//mimetype:   "text/plain",
						transport: "XMLHTTPTransport",
						/*error:      function(type, errObj){
							console.log("Data Bind Failed for json url: " + nav.dataUrl);
							nav.successfulLoad = false;
							libraryDisplay.displayEmptyPage(nav.dataUrl);
						},*/
						error: function( error ) {
							var msg = "Error, in data:\n" + error.message;
							console.log("sub processJson BIND FAILED(" + nav.dataUrl + "): " + msg);
						},
						load: function(dataIn, ioRequest){
							if(this.parentUrl == nav.buildUrl) { // Make sure the URL attached to our JSON request matches our current URL.
								var contentTypeTemp = nav.pageData.jsonData.contentType; // Need to persist the existing contentType
								nav.pageData.jsonData = dojo.fromJson(dataIn);
								nav.pageData.jsonData.contentType = contentTypeTemp; // Add the previous contentType to the new jsonData
								nav.processJsonContent();
							}
						}
					}
					if(nav.pageData.jsonData.HTML_OUTPUT) {
						nav.processHtml(this.pageData.jsonData.HTML_OUTPUT);
					}
					displayBodyLoadingMessage();
					var requestDataObj = dojo.xhrGet(bindDataArgs);
				}
			},
			
			load: function(dataIn, ioRequest){// Handle the ajax return
				//console.log("nav.load top nav.postAction: " + nav.postAction);
			
				//displayUMessage("", 1);
				if((this.buildUrl.indexOf("cgi-bin") >= 0) || (this.buildUrl.indexOf("search-cgi") >= 0)) { // we have a JSON page
					this.jsonPage = true;
					this.processJson(dataIn);
				} else if (nav.target == "onboard_body_sub") {
					//alert("blah snap");
					this.jsonPage = false;
					this.processHtml(dataIn);
				} else {
					this.jsonPage = false;
					this.processHtml(dataIn);
				}
				
				if(nav.successfulLoad && nav.target == "fullPage") {
					dojo.back.addToHistory(new ApplicationState(nav.urlPieces[1]));
				} else {
					if(nav.successfulLoad) {
						// console.log("PRE nav.postAction: " + nav.postAction);
						eval(nav.postAction);
					}
				}
				initDrag();
				//update site catalyst
				try {
					if (!(this.postponeSC)) {
						runSCPageLoad(nav.urlPieces[1]);
					}
					/* if(this.target == "fullPage") {
						runSCPageLoad();
					} else {
						runSCPageLoad(nav.buildUrl);
					} */
				} catch(sc_e) {
					//alert(sc_e.message);
				}
				initalizePageHeight();
			},
			
			reload: function(){ // Handle instances where user type changes (ie - when purchasing a track in visitor mode)
				// alert("nav - " + nav.buildUrl + " this - " + this.buildUrl)
				locationHash = getLocationHash();
				top.location.href = "http://sms.de.napster.com/ns/login/?return_url=" + encodeURIComponent(documentRoot + "#" + locationHash.substring(1));
			}
		}
		
		function navigate(url, isInitial, target, postAction, force) {
			// alert("navigate");
			if(!nav.initialize(url, isInitial, target, postAction, force)) { return; }
			nav.appendUrlParams();
			if(nav.buildUrl != "/blank.html" || "") { /*console.log(url); */ }
			if(nav.buildUrl && nav.buildUrl != "") {
				// turn on the visitor mode undercarriage
				setUndercarriage(nav.buildUrl);
				var bindArgs = {
					url:        nav.buildUrl,
					//mimetype:   "text/plain",
					//method:		"GET",
					//transport: "XMLHTTPTransport",
					error:      function(errObj){
						// handle error here
						//console.log("Bind Failed");
						
						dojo.byId("content_body").innerHTML = errorMessage;
						//innerSwap(dojo.byId("content_body"), errorMessage);
						//console.log("navigate bind error: " + errObj);
						var outln = "";
						for(var i in errObj) {
							//console.log(i);
							outln += i + ' is ' + errObj[i] + "\n";
							var splitIt = errObj[i].split(": ");
							if (splitIt.length > 0) {
								var bob = (splitIt[1]);
								//console.log(splitIt);
								try{ 
									var junk = eval(bob);
								} catch(e) { /* console.log(e.description); */ }
							}
						}
					},
					load:	function(dataIn, ioRequest){
						nav.load(dataIn, ioRequest);
					}
				};
				
				// dispatch the request
				var requestObj = dojo.xhrGet(bindArgs);
			} else {
				historyUrl = nav.urlPieces[0] ? nav.urlPieces[0] : nav.urlPieces[1];
				if( dojo.cookie('USERNAME') != null && dojo.cookie('USERNAME') != "" ) {
					if(nav.urlPieces[1] != "MyLibrary/AllTracks") { // We don't want to blow away the current page if they cancel the all tracks view
						displayLoadingMessage();
					}
					
					
					// alert ("eval nav.linkAction = " + nav.linkAction);
					eval(nav.linkAction);
					
					
					initalizePageHeight();
					//update site catalyst
					try {
						runSCPageLoad(historyUrl);
					} catch(sc_e) {
						//alert("SC Message: " + sc_e.message);
					}
				} else {
					displaySignInPrompt();
				}
			}
			document.title = "Napster"; // Fix for IE7 appending anchor link to page title
		}
		
		function refreshContent() {
			activeDisplay = "";
			//alert ("refresh");
			navigate(documentRoot + window.location.hash.substring(1)); //refresh our current view by navigating to the page we were on
		}
		
		function displayList(contentTypeIn, jsonDataReturnIn, filterValue) {
			// dojo.debug("in displayList(" + contentTypeIn + "," + jsonDataReturnIn.toSource() + ")");
			// dojo.debug("in displayList(" + contentTypeIn + ")");
			if(nav.buildUrl.indexOf("&count=10&index=0") >= 0 && nav.pageData.jsonData.total_results > 10){
				nav.fullResultsUrl = nav.buildUrl.replace("&count=10&index=0","&count=500&index=0");
			}			
			currentContentType = contentTypeIn;
			switch(contentTypeIn.toLowerCase()) {
				case "album": libraryDisplay.displayAlbums(jsonDataReturnIn); break
				case "topalbums": libraryDisplay.displayAlbums(jsonDataReturnIn); break
				case "billboard_album": libraryDisplay.displayAlbums(jsonDataReturnIn); break
				case "artistalbum": libraryDisplay.displayAlbums(jsonDataReturnIn); break
				case "recommends": libraryDisplay.displayAlbums(jsonDataReturnIn); break
				case "recommends_album": libraryDisplay.displayAlbums(jsonDataReturnIn); break
				case "staffpick": libraryDisplay.displayAlbums(jsonDataReturnIn); break
				case "newrelease": if(jsonDataReturnIn.num_results == 0) {  } libraryDisplay.displayAlbums(jsonDataReturnIn); break
				case "newadditions": libraryDisplay.displayAlbums(jsonDataReturnIn); break
				case "track": libraryDisplay.displayTracks(jsonDataReturnIn, "track"); break
				case "toptracks": libraryDisplay.displayTracks(jsonDataReturnIn, "track"); break
				case "billboard_track": libraryDisplay.displayTracks(jsonDataReturnIn, "billboardtrack"); break
				case "albumtracks": libraryDisplay.displayTracks(jsonDataReturnIn, "albumtracks"); break
				case "albumtracks_track": libraryDisplay.displayTracks(jsonDataReturnIn, "albumtracks"); break
				case "artist": libraryDisplay.displayArtists(jsonDataReturnIn); break
				case "artistbyletter": libraryDisplay.displayArtists(jsonDataReturnIn); break
				case "topartists": libraryDisplay.displayArtists(jsonDataReturnIn); break
				case "radio": libraryDisplay.displayRadio(jsonDataReturnIn); break
				case "stations": libraryDisplay.displayRadio(jsonDataReturnIn); break
				case "playlist": libraryDisplay.displayPlaylistTracks(jsonDataReturnIn, 0); break
				case "playlists": libraryDisplay.displayPlaylist(jsonDataReturnIn); break
				case "allplaylist": libraryDisplay.displayPlaylist(jsonDataReturnIn); break
				case "video": libraryDisplay.displayVideos(jsonDataReturnIn); break
				case "artistvideos": libraryDisplay.displayVideos(jsonDataReturnIn); break
				case "videosbyletter": libraryDisplay.displayVideos(jsonDataReturnIn); break
				case "user": libraryDisplay.displayUsers(jsonDataReturnIn); break
				case "memberartists": libraryDisplay.displayMemberArtists(jsonDataReturnIn,filterValue); break
				case "memberplaylists": libraryDisplay.displayMemberPlaylists(jsonDataReturnIn,filterValue); break
				
				case "libraryartisttracks": libraryDisplay.updatePagination(jsonDataReturnIn); libraryDisplay.displayPageOfTracks("1"); break
				case "libraryaddedtracks": libraryDisplay.displayAddedTracks('1',jsonDataReturnIn); break
				case "libraryrecenttracks": libraryDisplay.displayRecentTracks('1',jsonDataReturnIn); break
				case "libraryalltracks": libraryDisplay.displayAllTracks('1',jsonDataReturnIn); break
				case "libraryplaylisttracks": libraryDisplay.displayPlaylistTracks(jsonDataReturnIn,1); break
				
				default: libraryDisplay.displayTracks(jsonDataReturnIn, contentTypeIn); break
			}
		}
		
		function removeAddedPops(closeTarget) {
			if(typeof(closeTarget) == "undefined") { closeTarget = ""; }
			for (var i = 0; i < addedPops.length; i++) {
				elemId = addedPops.shift();
				if(closeTarget) {
					if(closeTarget != elemId) {
						addedPops.addUnique(elemId);
						continue
					}
				}
				try {
					elemToRemove = dojo.byId(elemId);
					document.body.removeChild(elemToRemove);
				} catch(e){ }
				try {
					elemToRemove = dojo.byId(elemId + "Styles");
					document.body.removeChild(elemToRemove);
				} catch(e){ }
		    }
			
			previousTarget = "";
		}
		
		function hideInPagePopups() {
			hideAlbumArtPop();
			hidePlaylistPop();
			ripRenPlaylistPop();
			removeAddedPops();
		}
		
		var napsDLMsite = {
			isWin: (navigator.appVersion.toLowerCase().indexOf("win") != -1) ? true : false, 
			isDotNet: 0,
			isDLMua: 0,
			dlmStatusType: new Array("installed", "notsure", "available", "unavailable"), 
			dlmStatus: "unavailable",
			//FIXME: do I need this/how do I deal with it?
			fileLoc: "napster:http://sms.de.napster.com/cgi-bin/generateDLMTransaction",
			
			_searchUserAgentVersion: function(searchstring) {
				searchstring = new String(searchstring);
				var ua = navigator.userAgent;
				var initlength = searchstring.length
				searchstring = searchstring + " [0-9\.]*";
				var sdn = new RegExp(searchstring,"g");
				var mArh = [];
				mArh = (ua.match(sdn)) ? ua.match(sdn) : mArh;
				var hrx = new String(mArh.pop());
				var version = (hrx) ? parseFloat(hrx.substr(initlength).substr(0,4)) : 0; 
				return version;
			},
			
			init: function() {
				napsDLMsite.isDotNet = napsDLMsite._searchUserAgentVersion(".NET CLR");
				napsDLMsite.isDLMua = napsDLMsite._searchUserAgentVersion(".NAP");
				
				napsDLMsite._getDLMStatus();
			},
			
			_getDLMStatus: function() {
				napsDLMsite.dlmStatus = napsDLMsite.dlmStatusType[3];
				if (napsDLMsite.isWin) {
					napsDLMsite.dlmStatus = napsDLMsite.dlmStatusType[2];
					if (dojo.isIE) {
						if (napsDLMsite.isDLMua) {
							napsDLMsite.dlmStatus = napsDLMsite.dlmStatusType[0];
						} else {
							var SDAT = getCookieHash('SDAT');
							if (SDAT['DLM'] == "1") {
								napsDLMsite.dlmStatus = napsDLMsite.dlmStatusType[0];
							} else {
								try {
									var ax = new ActiveXObject('Napster.DownloadManager');
									napsDLMsite.dlmStatus = napsDLMsite.dlmStatusType[0];
								} catch (e) {}
							}
						}
					} else if (navigator.mimeTypes && navigator.mimeTypes.length) {
						if(dojo.isMozilla) {
							var mimeType = navigator.mimeTypes.namedItem('application/x-napster');
							if (mimeType) {napsDLMsite.dlmStatus = napsDLMsite.dlmStatusType[0];}
						} else {
							napsDLMsite.dlmStatus = napsDLMsite.dlmStatusType[1];
						}
					} else {
						napsDLMsite.dlmStatus = napsDLMsite.dlmStatusType[1];
					}
				} else {
					napsDLMsite.dlmStatus = napsDLMsite.dlmStatusType[3];
				}
			},
			
			logSCDLMClick: function() {
				$SCEG('DLM Download', '');
			}
		}
		
		function inlineBuyMP3() {//duplicated in client_navigation.js
			var buyUrl = "http://home.de.napster.com/ns/purchase/clear/inpage/purchase_verify.html?buy=1";
			napsDLMsite.init();
			switch (napsDLMsite.dlmStatus) {
				case "installed":
					buyUrl += "&has_dlm=1";
					break;
				case "notsure":
					buyUrl += "&get_dlm=1";
					break;
				case "available":
					buyUrl += "&get_dlm=1";
					break;
				case "unavailable":
				default:
			}
			navigate(buyUrl, 0, "trackPurchase");
		}
		
		function inlineDLMLaunch(track_id) {
			var currentFileLoc = napsDLMsite.fileLoc + "?user_id=" + dojo.cookie("NUID") + "&tracks=" + track_id + "&country=" + dojo.cookie("COUNTRYCODE");
			window.location = currentFileLoc;
		}
		
		function inlineDownloadTrack(selfnode, download_url, track_id) {//adding a function for DLM single track downloads
			if((typeof(selfnode) == "undefined") || (typeof(download_url) == "undefined") || (typeof(track_id) == "undefined")) { return };
			
			
			//FIXME: replace this with main object above
			var napsDLMsiteold = {
				isWin: (navigator.appVersion.toLowerCase().indexOf("win") != -1) ? true : false, 
				isDLM: false,
				fileLoc: "napster:http://sms.de.napster.com/cgi-bin/generateDLMTransaction?user_id=" + dojo.cookie("NUID") + "&tracks=" + track_id + "&country=" + dojo.cookie("COUNTRYCODE"),
				init: function() {
					if (napsDLMsiteold.isWin) {
						//lets look for .NAP, our custom agent - to use later
						var ua = navigator.userAgent;
						var dlm_str = /\.NAP [0-9\.]*/g;
						var nArh = [];
						nArh = (ua.match(dlm_str)) ? ua.match(dlm_str) : nArh;
						hrx = new String(nArh.pop());
						var isDLMua = (hrx) ? parseFloat(hrx.substr(4).substr(0,4)) : 0; //get major.minor only
						
						if (dojo.isIE) {//now try ActiveX for IE
							if (isDLMua) {//is our custom agent there?
								napsDLMsiteold.isDLM = true;
							} else {
								var SDAT = getCookieHash('SDAT');
								if (SDAT['DLM'] == "1") {
									napsDLMsiteold.isDLM = true;
								} else {
									try {
										var ax = new ActiveXObject('Napster.DownloadManager');
										napsDLMsiteold.isDLM = true;
									} catch (e) {}
								}
							}
						} else if (navigator.mimeTypes && navigator.mimeTypes.length) {//now check for mimeTypes - non-IE browsers
							if(dojo.isMozilla) {//only mozilla will read "outside" the array
								var mimeType = navigator.mimeTypes.namedItem('application/x-napster');
								if (mimeType) {napsDLMsiteold.isDLM = true;}
							} 
						}
					}
				}
			}
			
			napsDLMsiteold.init();
			if(selfnode.innerHTML.indexOf('Download Now') != -1) {
				 selfnode.innerHTML = '<span class=\'btn\'><span>Downloaded</span></span>';
				 window.location = (napsDLMsiteold.isDLM) ? napsDLMsiteold.fileLoc : download_url;
			}
			
			//original inline code
			//if(this.innerHTML.indexOf('Download Now') != -1) { this.innerHTML = '<span class=\'btn\'><span>Downloaded</span></span>'; window.location = '[+ $data->{download_url} +]'; } return false;
			
		}
		
		dojo.addOnLoad( fixLinks );
		dojo.addOnLoad(function(){
			//wait until we have an initialized library before doing anything
			var objInterval = setInterval( function(){
				if(initialized && menuInitialized){
					clearInterval( objInterval );
					//See if there is a bookmark hash on the page URL.
					var bookmarkId = getLocationHash();
					if(bookmarkId && bookmarkId != "#ns/home/?genre_id=00" && bookmarkId != "#ns/home/?genre_id=0" && bookmarkId != "#"){
						bookmarkId = bookmarkId.substring(1, bookmarkId.length);
					} else {
						if(initialURL != "") {
							bookmarkId = fixedLinkFromURL(initialURL, 1);
						} else {
							bookmarkId = "ns/home/?genre_id=00";
						}
					}

					//If we have a bookmark, load that as the initial state.
					if(bookmarkId){
						buildUrl = documentRoot + bookmarkId;
						// alert("have a bookmark");
						//dojo.back.setInitialState("Initial State:" + bookmarkId);
						var appState = new ApplicationState(bookmarkId);
						// dojo.back.setInitialState(appState);
						dojo.back.setInitialState(appState);
						navigate(buildUrl, true);
					}else{
						// var appState = new ApplicationState("This is the initial state (page first loaded, no dojo.io.bind() calls yet)", "output", "dataOutput");
						// appState.showStateData();
						// dojo.back.setInitialState(appState);
						buildUrl = documentRoot + bookmarkId;
						dojo.undo.browser.setInitialState("Initial State: blank");
						var appState = new ApplicationState(documentRoot + "blank.html");
						navigate(documentRoot + "blank.html", true);
						dojo.back.setInitialState(appState);
					}
				}
			}, 50 );
		});

		function Buy(strIds, intType, isAFS, clickSource) { //NOTE: this function has been mirrored in player.js so we can always launch from the player
			//NOTE: this function has also been duplicated on free.napster.com - in global.js
			//console_log("buy");
			/* //mattnote: visitor mode check and popup
			if (dojo.cookie('SL') == 'VIS') {
				showVisitorPop();
				return;
			} */
			
			var opCode;
			var type = parseInt(intType);
			var purchaseString = "ids=" + strIds + "&type=";
	
			if(typeof(clickSource) != "undefined" && clickSource == "listView") {
				if((typeof(nav.jsonPage) != "undefined") && nav.jsonPage) {
					if((typeof(nav.pageData.jsonData) != "undefined") && nav.pageData.jsonData) {
						clickSource = "list_view_" + nav.pageData.jsonData.contentType;
					}
				} else {
					clickSource = "list_view_" + currentContentType;
				}
			}
			
			switch(type) {
				case 0:
					strIds = new String(strIds);
					//if(strIds == "0" || strIds.indexOf(",") > 0) {
						if(strIds == "0") {
							var itemArray = getAllListReturnTracks();
							if(itemArray) {
								strIds = itemArray.join(",");
								purchaseString = "ids=" + strIds + "&type=";
							}
						}
					/*} else { // Launch in-page purchase prompt
						//do you have the dlm
					
						purchaseString = "http://home.napster.com/ns/purchase/clear/inpage/?ids=" + strIds + "&type=track";
						console.log(purchaseString);
						if(clickSource) { purchaseString += ("&clickSource=" + clickSource); }
						navigate(purchaseString, 0, "trackPurchase", "reposition");
						return;
					}*/
					// opCode = 'op=download_tracks&perm=y&ids=' + strIds;
					purchaseString += "track";
					break;
				case 1:
					// opCode = 'op=download_album&perm=y&ids=' + strIds;
					purchaseString += "album";
					if (isAFS != null && typeof(isAFS) != 'undefined') {
						// opCode += '&afs=' + (isAFS ? 1 : 0);
						purchaseString += "&afs=" + (isAFS ? 1 : 0);
					}
					break;
				case 2:
					// opCode = 'op=add_to&type_id=playlist&perm=y&ids=' + strIds;
					//purchaseString += "playlist";
					// ids need to change - prepend "MIX_"
					purchaseString = "ids=MIX_" + strIds + "&type=admin_playlist";
					break;
				case 3:
					purchaseString += "playlist";
					break;
				case 7:
					// opCode = 'op=download_work&perm=y&ids=' + strIds;
					purchaseString += "work";
					break;
				default:
					return;
			}
			if(purchaseString) {
				if(clickSource) { purchaseString += ("&clickSource=" + clickSource); }
				// var purchasePop = window.open("http://home.de.napster.com/ns/purchase/clear/?" + purchaseString,"purchaseWin", "width=810,height=500,menubar=no,location=yes,resizable=yes,scrollbars=yes,status=yes");
				var purchasePop = window.open("https://sms.napster.com/DE/de/ns/purchase/clear/?" + purchaseString,"purchaseWin", "width=810,height=500,menubar=no,location=yes,resizable=yes,scrollbars=yes,status=yes");
				purchasePop.focus();
				//var success = $OC( opCode, dojo.cookie('LID'), 'window.open(\'http://sms.napster.com/ns/install/?referral_id=NCOM&opcode=' + escape(opCode.substring(3)) + '\',\'install\')');
				//var success = $OC( opCode, dojo.cookie('LID'), 'window.open(\'http://home.napster.com/ns/purchase/?referral_id=NCOM&opcode=' + escape(opCode.substring(3)) + '\',\'install\')')
				
			}
		}
	

	function setUndercarriage(loc) {
		var slCookie = dojo.cookie('SL');
		if(slCookie == 'VIS') {
			if(dojo.byId('vmode_undercarriage').style.display = 'none') {
				// if we're not on the marketing page, turn it on
				if(loc.indexOf('marketing/visitor.html') < 0) {
					dojo.byId('vmode_undercarriage').style.display = 'block';
				}
			}
			else {
				// it's on already so turn it off if we're on the marketing page
				if(loc.indexOf('marketing/visitor.html') > -1) {
					dojo.byId('vmode_undercarriage').style.display = 'none';
				}
			}
		}
	}
	
	function innerSwap(node, msg, loc) {
		node.innerHTML = msg;
		if(dojo.cookie('SL') != 'VIS') {
			var sstring = '?genre_id=0';//'ns/home/index.html?genre_id=0';
			if(loc.indexOf(sstring) > 0) {
				var ncl= loc.indexOf(sstring) + sstring.length;
				var nchar = loc.substr(ncl, 1);
				if (nchar.search(/[1-9]/) < 0) {
					onboard.init();
				}
			}
		}
	}

	
	Array.prototype.addUnique = function (elem) {
		for (var i = 0, len = this.length; i < len; i++) {
			if (this[i] == elem) { return; }
	    }
		this.push(elem);
	  }



