// 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 defaultDelay = 15000; //the number in mills before checking the xml for changes

var idTag = "now-playing-text";
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(idTag).innerHTML = naText;
	  	}
	  	
	  	setTimeout('getNowPlaying(' + service + ', ' + delay + ')', delay);
	} catch(err) {
		document.getElementById(idTag).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 artist = null;
	var title = null;
	
	var txt = "";
	
	try {
	
		if(window.ActiveXObject) {
			artist = xmlDoc.getElementsByTagName("trackList")[0].getElementsByTagName("track")[0].getElementsByTagName("creator")[0].childNodes[0].nodeValue;
			title = xmlDoc.getElementsByTagName("trackList")[0].getElementsByTagName("track")[0].getElementsByTagName("title")[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")[0].childNodes[3].firstChild.data;
			} catch(err) {}
			try {
				title = xmlDoc.getElementsByTagName("trackList")[0].getElementsByTagName("track")[0].childNodes[1].firstChild.data;
			} catch(err) {}
		}
		if (artist != null && title != null) {
			txt = artist + " - " + title;
		}
	} 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 composer = null;
	var title = null;
	var orchEnsemble = null;
	var soloist_one = null;
	
	var txt = "";
	
	try {
		if(window.ActiveXObject) {
				composer = xmlDoc.getElementsByTagName("trackList")[0].getElementsByTagName("track")[0].getElementsByTagName("composer")[0].childNodes[0].nodeValue;
				title = xmlDoc.getElementsByTagName("trackList")[0].getElementsByTagName("track")[0].getElementsByTagName("title")[0].childNodes[0].nodeValue;
				orchEnsemble = xmlDoc.getElementsByTagName("trackList")[0].getElementsByTagName("track")[0].getElementsByTagName("orch-encemble")[0].childNodes[0].nodeValue;
				soloist_one = xmlDoc.getElementsByTagName("trackList")[0].getElementsByTagName("track")[0].getElementsByTagName("soloist-1")[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")[0].childNodes[1].firstChild.data;
			} catch(err) {}
			try {
				title = xmlDoc.getElementsByTagName("trackList")[0].getElementsByTagName("track")[0].childNodes[3].firstChild.data;
			} catch(err) {}
			try {
				orchEnsemble = xmlDoc.getElementsByTagName("trackList")[0].getElementsByTagName("track")[0].childNodes[7].firstChild.data;
			} catch(err) {}
			try {
				soloist_one = xmlDoc.getElementsByTagName("trackList")[0].getElementsByTagName("track")[0].childNodes[9].firstChild.data;
			} catch(err) {}
		}
		
		if (composer != null && title != null) {
			txt = composer + "<br/>" + title + "<br/>";
			
			if (orchEnsemble != null && orchEnsemble != "") {
				txt += orchEnsemble + "<br/>";
			}
			else 
				if (soloist_one != null && soloist_one != "") {
					txt += soloist_one + "<br/>";
				}
		} else {
			return naText;
		}
	} 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(idTag).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(idTag).innerHTML = nowPlayingText;
			}
		} else { 
	  		document.getElementById(idTag).innerHTML = naText;
	  	}
	}
}