/*
AV Player Interface Functions
USF DC - 10/2009
*/

/* ########################################
	REMOTE PLAYLIST FUNCTIONS
######################################## */

var REMOTE_PLAYLISTS = {}; //object to hold information about each remote playlist

function addRemotePlaylist(playlist_url,container_id,player_id,xml_string) {
	var container_object = document.getElementById(container_id);
	var player_object = document.getElementById(player_id);
	if(container_object !== null && player_object !== null) {
		REMOTE_PLAYLISTS[playlist_url] = {
				"container" : container_object,
				"player"    : player_object,
				"xml"       : xml_string
			};
		REMOTE_PLAYLISTS[playlist_url].player.loadRemoteMediaJS(playlist_url);
	}
}

function updateRemotePlaylist(playlist_url,container_object,player_object,xml_string) {
	if(container_object !== null) {
		REMOTE_PLAYLISTS[playlist_url].container = container_object;
	}
	if(player_object !== null) {
		REMOTE_PLAYLISTS[playlist_url].player = player_object;
	}
	if(xml_string !== null) {
		REMOTE_PLAYLISTS[playlist_url].xml = xml_string;
	}
}

function writeRemotePlaylist(playlist_url) {
	if(REMOTE_PLAYLISTS[playlist_url].container !== null) {
		var cntnr = REMOTE_PLAYLISTS[playlist_url].container;
			cntnr.innerHTML = "";
		var xmlobj = createXMLDoc(REMOTE_PLAYLISTS[playlist_url].xml);
		var items = xmlobj.getElementsByTagName("item");
		
		if(items.length > 0) {
			var ul = document.createElement("UL");
				ul.setAttribute("class", "mediaplaylist");
				ul.setAttribute("className", "mediaplaylist");
			var li;
			var a;
			var em;
			var title;
			var url;
			var description;
			var credits_node;
			for(var i=0; i<items.length; i++) {
				title = 	items[i].getElementsByTagName("title")[0].firstChild.nodeValue;
				pubdate = 	Date.parse(items[i].getElementsByTagName("pubDate")[0].firstChild.nodeValue);
				url = 		items[i].getElementsByTagName("enclosure")[0].getAttribute("url");
				description_node = 	items[i].getElementsByTagName("description")[0];
				credits_node = 	items[i].getElementsByTagName("usf:credits")[0];
				li = document.createElement("LI");
				a = document.createElement("A");
					a.setAttribute("href","javascript: loadPlayerMedia('"+playlist_url+"','"+url+"');");
					a.setAttribute("class","mediatitle");
					a.setAttribute("className","mediatitle");
					a.appendChild(document.createTextNode(title));
				li.appendChild(a);
				if(description_node.hasChildNodes()) {
					dsc = document.createElement("SPAN");
						dsc.setAttribute("class","mediadescription");
						dsc.setAttribute("className","mediadescription");
						dsc.appendChild(document.createTextNode(description_node.firstChild.nodeValue));
					li.appendChild(dsc);
				}
				if(credits_node.hasChildNodes()) {
					crd = document.createElement("SPAN");
						crd.setAttribute("class","mediacredits");
						crd.setAttribute("className","mediacredits");
						crd.appendChild(document.createTextNode(credits_node.firstChild.nodeValue));
					li.appendChild(crd);
				}
				ul.appendChild(li);
			}
			cntnr.appendChild(ul);
		} else {
			cntnr.innerHTML = '<span class="emptyplaylist">Playlist does not contain any media files.</span>';
		}
	}
}

/* ########################################
	CONNECTION WITH FLASH PLAYER OBJECT
######################################## */

/* called by flash object when xml has been loaded successfully */
function receiveFlashPlaylistXML(playlist_url,xml_string) {
	updateRemotePlaylist(playlist_url,null,null,xml_string);
	writeRemotePlaylist(playlist_url);
}

/* loads a new playlist into the active player */
function loadPlayerMedia(playlist_url,media_url) {
	media_url = (typeof media_url == "undefined")?playlist_url:media_url;
	if(REMOTE_PLAYLISTS[playlist_url].player !== null) {
		REMOTE_PLAYLISTS[playlist_url].player.loadMediaJS(media_url);
	}
}

/* moves current video to previous item in playlist (repeats current video if not there is no previous video) */
function gotoPreviousPlayerMedia(player_id) {
	var player_object = document.getElementById(player_id);
	if(player_object !== null) {
		player_object.gotoPreviousMediaJS();
	}
}

/* moves current video to next item in playlist (repeats current video if not there is no next video) */
function gotoNextPlayerMedia(player_id) {
	var player_object = document.getElementById(player_id);
	if(player_object !== null) {
		player_object.gotoNextMediaJS();
	}
}

/* replays current video from its beginning */
function replayPlayerMedia(player_id) {
	var player_object = document.getElementById(player_id);
	if(player_object !== null) {
		player_object.replayMediaJS();
	}
}

/* ########################################
	UTILITY FUNCTIONS
######################################## */
function createXMLDoc(str_xml,content_type) {
	var xmlDoc = null;
	var parser;
	try { //Internet Explorer
		xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
		xmlDoc.async="false";
		xmlDoc.loadXML(str_xml);
	}
	catch(e) {
		try { //Firefox, Mozilla, Opera, etc.
			parser = new DOMParser();
			xmlDoc = parser.parseFromString(str_xml,"text/xml");
		}
		catch(e) {alert(e.message)}
	}
	return xmlDoc;
}
