// Now Playing v2 (for mpr006)

// 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.";

//storing the URL for a specific song for the current.  By default, it'll be the playlist. AK 6/18/09
var currentSongLink = "/radio/services/the_current/playlist/playlist.php";

// Functional Variables
var xmlhttp;

var multixmlhttp = new Array(4);

/**
 * 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;
        }
        
        multixmlhttp[service] = null;
        
        if (window.XMLHttpRequest) { // code for Mozilla, Safari, Opera, Netscape, any browser that does it right, etc.
            multixmlhttp[service] = new XMLHttpRequest();
        }
        else 
            if (window.ActiveXObject) { // code for IE (the weak link)
                multixmlhttp[service] = new ActiveXObject("Microsoft.XMLHTTP");
            }
        
        if (multixmlhttp[service] != null) {
            multixmlhttp[service].onreadystatechange = function(){
                setNowPlaying(service);
            };
            multixmlhttp[service].open("GET", fileName[service], true);
            multixmlhttp[service].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(service){
    var xmlDoc = multixmlhttp[service].responseXML.documentElement;
    
    var artist = null;
    var title = null;
	var songID = 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;
	}
	
	
	//Look for the song ID when artist and title are found.  AK 6/22/09
	if (txt != '') {
			
		if (window.ActiveXObject) {
			try {
				songID = xmlDoc.getElementsByTagName("trackList")[0].getElementsByTagName("track")[0].getElementsByTagName("song-id")[0].childNodes[0].nodeValue;
			} 
			catch (err) {
			}
		}
		else 
			if (window.XMLHttpRequest) {
				try {
					songID = xmlDoc.getElementsByTagName("trackList")[0].getElementsByTagName("track")[0].getElementsByTagName("song-id")[0].firstChild.data;
				} 
				catch (err) {
				}
			}
		if (songID != null && songID !='') {//changing the currentSongLink variable to a specific song page if the ID is there.  AK 6/18/09
			currentSongLink = "/radio/services/the_current/playlist/song_detail.php?song_id=" + songID;
		}
	}
	
    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(service){
    var xmlDoc = multixmlhttp[service].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 (multixmlhttp[service].readyState == 4) { // if xmlhttp shows "loaded"
        if (multixmlhttp[service].status == 200) { // if "OK"
            if (service == THE_CURRENT || service == WONDERGROUND || service == RADIOHEARTLAND) { //the current
                nowPlayingText = getNowPlayingTextForTheCurrent(service);
            }
            else 
                if (service == CLASSICAL || service == C24 || service == CSF) { //classical
                    nowPlayingText = getNowPlayingTextForClassical(service);
                }
            
            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;
                
                if (service == THE_CURRENT) {//AK 6/18/09 inserting the link for specific song if it's the Current
                    document.getElementById(tagIds[service]).href = currentSongLink;
                }
            }
        }
        else {
            document.getElementById(tagIds[service]).innerHTML = naText;
        }
    }
}
