// Now Playing v2 (for mpr006)
// Variation: now_playing_detail.js - shows multiple songs, with more detail

// Change: Now uses different element IDs for each service

// Broswer Variables for Compatability
var browserType=navigator.appName;
var browserVersion=parseFloat(navigator.appVersion);
var browserUserAgent=navigator.userAgent;

// Default Variables
var THE_CURRENT = "1";
var CLASSICAL = "2";
var C24 = "3";
var WONDERGROUND = "4";
var CSF = "5";
var NIS = "6";
var RADIOHEARTLAND = "7";

var fileName = new Array(4);
	//fileName[serviceId] = "service's xml file"
	fileName[THE_CURRENT] = "/radio/services/the_current/songs_played/playlist_data.php"; //theCurrent
	fileName[CLASSICAL] = "/radio/services/cms/pieces_played/playlist_data.php"; //classical
	fileName[C24] = "/radio/services/classical_24/playlist_data.php"; // c24
	fileName[WONDERGROUND] = "/radio/services/wonderground/playlist_data.php"; //wonderground
	
	// kludge to get around XMLHTTPRequest unable to grab files from different domains.
	// if this is a re-occurring pattern, bring now playing js into publicradio domain.
	fileName[CSF] = "/radio/schedule/playlist_data.php"; //classical south florida
	
	fileName[RADIOHEARTLAND] = "/radio/services/radio_heartland/playlist_data.php"; //radio heartland

var tagIds = new Array(4);
	//fileName[serviceId] = "service's xml file"
	tagIds[THE_CURRENT] = "now-playing-text-the-current";
	tagIds[CLASSICAL] = "now-playing-text-classical-mpr";
	tagIds[C24] = "now-playing-text-classical-24";
	tagIds[WONDERGROUND] = "now-playing-text-wonderground";
	tagIds[CSF] = "now-playing-text-classical-south-florida";
	tagIds[RADIOHEARTLAND] = "now-playing-text-radio-heartland";

var defaultDelay = 15000; //the number in mills before checking the xml for changes

var naText = "Now Playing Not Available";
var broswerSupportText = "Your browser does not support XMLHTTP.";

// Functional Variables
var xmlhttp;

/**
 * Creates XMLHTTPRequest for proper XML file. 
 * When XML file loaded, tries to set the text on the page via #setNowPlaying()
 */
function getNowPlaying(service, delay) {
	try {
		
		if(delay == null) {
			delay = defaultDelay;
		}
		
		xmlhttp = null;
		
		if(window.XMLHttpRequest) { // code for Mozilla, Safari, Opera, Netscape, any browser that does it right, etc.
			xmlhttp=new XMLHttpRequest();
	  	} else if(window.ActiveXObject) { // code for IE (the weak link)
	  		xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
	  	}
	  	
		if(xmlhttp!=null) {
	  		xmlhttp.onreadystatechange=function() { setNowPlaying(service); };
	  		xmlhttp.open("GET",fileName[service],true);
	  		xmlhttp.send(null);
	  	} else {
	  		document.getElementById(tagIds[service]).innerHTML = naText;
	  	}
	  	
	  	setTimeout('getNowPlaying(' + service + ', ' + delay + ')', delay);
	} catch(err) {
		document.getElementById(tagIds[service]).innerHTML = naText;
	}
}

/**
 * Reads the XML file and parses it for the proper text for The Current service.
 * 
 * NOTE: Safari on Mac has some wierd XML parsing issues.
 */
function getNowPlayingTextForTheCurrent() {
	var xmlDoc = xmlhttp.responseXML.documentElement;
	
	var txt = "";
	
	try {
	
		txt = txt + '<ul>';

		for (i=0; i<5; i++) {
			var artist = null;
			var title = null;
			var song_id = null;
			var amazon_url = null;

			if(window.ActiveXObject) {
				artist = xmlDoc.getElementsByTagName("trackList")[0].getElementsByTagName("track")[i].getElementsByTagName("creator")[0].childNodes[0].nodeValue;
				title = xmlDoc.getElementsByTagName("trackList")[0].getElementsByTagName("track")[i].getElementsByTagName("title")[0].childNodes[0].nodeValue;
				song_id  = xmlDoc.getElementsByTagName("trackList")[0].getElementsByTagName("track")[i].getElementsByTagName("song-id")[0].childNodes[0].nodeValue;
				play_time = xmlDoc.getElementsByTagName("trackList")[0].getElementsByTagName("track")[i].getElementsByTagName("play-time")[0].childNodes[0].nodeValue;
			} else if(window.XMLHttpRequest) {
				// Safari apparently throws an exception instead of assigning the variable to "undefined" (like every other browser).
				// So I must catch each and then do nothing as they are defaulted earlier.
				try {
					artist = xmlDoc.getElementsByTagName("trackList")[0].getElementsByTagName("track")[i].childNodes[3].firstChild.data;
				} catch(err) {}
				try {
					title = xmlDoc.getElementsByTagName("trackList")[0].getElementsByTagName("track")[i].childNodes[1].firstChild.data;
				} catch(err) {}
				try {
					song_id = xmlDoc.getElementsByTagName("trackList")[0].getElementsByTagName("track")[i].getElementsByTagName("song-id")[0].firstChild.data;
				} catch(err) {}
				try {
					play_time = xmlDoc.getElementsByTagName("trackList")[0].getElementsByTagName("track")[i].getElementsByTagName("play-time")[0].firstChild.data;
				} catch(err) {}
			}

			if (artist != null && title != null) {

				amazon_url = "http://www.amazon.com/gp/search?ie=UTF8&amp;keywords=" +
					encodeURIComponent(artist) + 
					"&amp;tag=current-20&amp;index=music-artist&amp;linkCode=ur2&amp;camp=1789&amp;creative=9325";

				txt = txt + '<li><span class="selection">';
				if (song_id != null && song_id != '') {
					txt = txt + '<a href="/radio/services/the_current/playlist/song_detail.php?song_id=' + song_id + '">';
				}
				txt = txt + title;
				if (song_id != null && song_id != '') {
					txt = txt + '</a>';
				}

				if (play_time != null && play_time != '') {
					txt = txt + '<span class="selection-timestamp">' + play_time + '</span>';
				}
				txt = txt + '</span>';
				txt = txt + artist;
				txt = txt + "<br />\n";
				txt = txt + '<a href="' + amazon_url + '" class="redarrow">Buy Now</a><br />';
				txt = txt + "</li>\n";
			}
		}
		txt = txt + '</ul>';
	} catch(err) {
		return naText;
	}
	return txt;
}

/**
 * Reads the XML file and parses it for the proper text for Classical service.
 * 
 * NOTE: Safari on Mac has some wierd XML parsing issues.
 */
function getNowPlayingTextForClassical() { 
	var xmlDoc = xmlhttp.responseXML.documentElement;
	
	var txt = "";

	txt = txt + '<ul>';
	
	try {

		for (i=0; i<2; i++) {
			var composer = null;
			var title = null;
			var orchEnsemble = null;
			var soloist_one = null;
			var label = null;
			var catalog_number = null;
			var conductor = null;
			var song_id = null;
			var arkiv_url = null;
			var play_time = null;
			
			if(window.ActiveXObject) {
					composer = xmlDoc.getElementsByTagName("trackList")[0].getElementsByTagName("track")[i].getElementsByTagName("composer")[0].childNodes[0].nodeValue;
					title = xmlDoc.getElementsByTagName("trackList")[0].getElementsByTagName("track")[i].getElementsByTagName("title")[0].childNodes[0].nodeValue;
					orchEnsemble = xmlDoc.getElementsByTagName("trackList")[0].getElementsByTagName("track")[i].getElementsByTagName("orch-encemble")[0].childNodes[0].nodeValue;
					soloist_one = xmlDoc.getElementsByTagName("trackList")[0].getElementsByTagName("track")[i].getElementsByTagName("soloist-1")[0].childNodes[0].nodeValue;
					label = xmlDoc.getElementsByTagName("trackList")[0].getElementsByTagName("track")[i].getElementsByTagName("record-co")[0].childNodes[0].nodeValue;
					catalog_number = xmlDoc.getElementsByTagName("trackList")[0].getElementsByTagName("track")[i].getElementsByTagName("record-id")[0].childNodes[0].nodeValue;
					conductor = xmlDoc.getElementsByTagName("trackList")[0].getElementsByTagName("track")[i].getElementsByTagName("conductor")[0].childNodes[0].nodeValue;
					song_id = xmlDoc.getElementsByTagName("trackList")[0].getElementsByTagName("track")[i].getElementsByTagName("song-id")[0].childNodes[0].nodeValue;
					play_time = xmlDoc.getElementsByTagName("trackList")[0].getElementsByTagName("track")[i].getElementsByTagName("play-time")[0].childNodes[0].nodeValue;
			} else if(window.XMLHttpRequest) {
				// Safari apparently throws an exception instead of assigning the variable to "undefined" (like every other browser).
				// So I must catch each and then do nothing as they are defaulted earlier.
				try {
					composer = xmlDoc.getElementsByTagName("trackList")[0].getElementsByTagName("track")[i].childNodes[1].firstChild.data;
				} catch(err) {}
				try {
					title = xmlDoc.getElementsByTagName("trackList")[0].getElementsByTagName("track")[i].childNodes[3].firstChild.data;
				} catch(err) {}
				try {
					orchEnsemble = xmlDoc.getElementsByTagName("trackList")[0].getElementsByTagName("track")[i].childNodes[7].firstChild.data;
				} catch(err) {}
				try {
					soloist_one = xmlDoc.getElementsByTagName("trackList")[0].getElementsByTagName("track")[i].childNodes[9].firstChild.data;
				} catch(err) {}
				try {
					label = xmlDoc.getElementsByTagName("trackList")[0].getElementsByTagName("track")[i].getElementsByTagName("record-co")[0].firstChild.data;
				} catch(err) {}
				try {
					catalog_number = xmlDoc.getElementsByTagName("trackList")[0].getElementsByTagName("track")[i].getElementsByTagName("record-id")[0].firstChild.data;
				} catch(err) {}
				try {
					conductor = xmlDoc.getElementsByTagName("trackList")[0].getElementsByTagName("track")[i].getElementsByTagName("conductor")[0].firstChild.data;
				} catch(err) {}
				try {
					song_id = xmlDoc.getElementsByTagName("trackList")[0].getElementsByTagName("track")[i].getElementsByTagName("song-id")[0].firstChild.data;
				} catch(err) {}
				try {
					play_time = xmlDoc.getElementsByTagName("trackList")[0].getElementsByTagName("track")[i].getElementsByTagName("play-time")[0].firstChild.data;
				} catch(err) {}
			}
			
			if (composer != null && title != null) {
				arkiv_url = "http://www.arkivmusic.com/classical/Playlist?source=CMS&ampdatabase=mpr";
				if (song_id != null && song_id != "") {
					arkiv_url += '&amp;song_id=' + encodeURIComponent(song_id);
				} 
				if (label != null && label != "") {
					arkiv_url += '&amp;label=' + encodeURIComponent(label);
				} 
				if (catalog_number != null && catalog_number != "") {
					arkiv_url += '&amp;catalog=' + encodeURIComponent(catalog_number);
				} 
				if (composer != null && composer != "") {
					arkiv_url += '&amp;composer=' + encodeURIComponent(composer);
				} 
				if (title != null && title != "") {
					arkiv_url += '&amp;work=' + encodeURIComponent(title);
				} 
			
				txt = txt + '<li><span class="selection">';
				txt += title;
				if (play_time != null && play_time != '') {
					txt += '<span class="selection-timestamp">' + play_time + '</span>';
				}
				txt += '</span>';
				txt += composer + "<br/>";
				if (orchEnsemble != null && orchEnsemble != "") {
					txt += orchEnsemble + "<br/>";
				} 
				if (conductor != null && conductor != "") {
					txt += conductor + ", conductor<br/>";
				} 
				if (soloist_one != null && soloist_one != "") {
					txt += soloist_one + "<br/>";
				}
				
				txt += '<a href="' + arkiv_url + '" class="greenarrow">Buy Now</a>';
				txt += '</li>';
			} else {
				return naText;
			}
		}
		txt = txt + '</ul>';
	} catch(err) {
		return naText;
	}
	
	return txt;
}

/**
 * This sets the text (<xyz id="now-playing-text"></xyz>) on the page.
 * If XML is not ready or status is unstable, it will display default message.
 * Otherwise, it will push the correct text.
 */
function setNowPlaying(service) { 
	if (xmlhttp.readyState==4) { // if xmlhttp shows "loaded"
		if (xmlhttp.status==200) { // if "OK"
			
			if(service == THE_CURRENT || service == WONDERGROUND || service == RADIOHEARTLAND) { //the current
				nowPlayingText = getNowPlayingTextForTheCurrent();
			} else if(service == CLASSICAL || service == C24 || service == CSF) { //classical
				nowPlayingText = getNowPlayingTextForClassical();
			}

			if(nowPlayingText != document.getElementById(tagIds[service]).innerHTML) {
				// Uncomment the next line if returning to an animated GIF
				//document.getElementById("now-playing-img").src = "/standard/images/mpr005/icon_note.gif";
				
				document.getElementById(tagIds[service]).innerHTML = nowPlayingText;
			}
		} else { 
	  		document.getElementById(tagIds[service]).innerHTML = naText;
	  	}
	}
}