/**
*  @author Boris Searles (protofunc.com)
*  modded by Paul Ford (pauleford@gmail.com)
*/

// NOW USING JQUERY!

//alert(navigator.appName + ' || ' + navigator.appVersion);
var browser = (navigator.appName == 'Microsoft Internet Explorer') ? 'ie' : 'moz';
if ( navigator.appVersion.indexOf('Safari') != -1 ) var safari = true;
else var safari = false;

var container = new Object(); // parent div for all media
var xml = globalxml; // set in media switcher template
var entries = new Array(); // will contain playlist stuff
var next = 0; // next playlist entry
//--- video stuff ---//
var wrapper = new Object();
var status = null;
var ostate = null;
var pstate = null;
var vidReady = false;
var vidPlaying = false;
var monInt = null; // global var for setInterval
var displayInt = false;
var disptime = 3500;

//--- debug stuff ---//
var mon; // monitor div

// set up XML and HTML based on browser
if (browser == 'ie')
{
	//alert('ie');
	// set up xml loader
	var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
	xmlDoc.onreadystatechange = function ()
	{
		if (xmlDoc.readyState == 4) parseXml();
	};
	
	// define media player details
	var embed  = '<object id="embed" width="460" height="352"';
		embed += '	classid="CLSID:22d6f312-b0f6-11d0-94ab-0080c74c7e95">';
		embed += '	<param name="src" value="" />';
		embed += '	<param name="AutoStart" value="false" />';
		embed += '	<!--[if IE] -->';
		embed += '	<EMBED name="embed" width="460" height="352"';
		embed += '		src=""';
		embed += '		type="application/x-mplayer2" autostart="false"';
		embed += '		pluginspage="http://microsoft.com/windows/mediaplayer/en/download/" />';
		embed += '	<!--[endif]-->';
		embed += '</object>';
}
else
{
	// set up xml loader
	
	// for safari
	if (safari) {
		//alert('safari');
    var xmlDoc = new XMLHttpRequest();
    xmlDoc.onreadystatechange = processReqChange;
    xmlDoc.open("GET", xml, true);
    xmlDoc.send(null);
		//alert('xml setup');
  } else {
		var xmlDoc = document.implementation.createDocument("", "", null);
		xmlDoc.onload = parseXml;
	}
	
	// define media player details
	var embed  = '<object id="embed" type="video/x-ms-wmv" width="460" height="352" >';
		embed += '	<param name="url" value="" />';
		embed += '	<param name="autostart" value="false" />';
		embed += '	<p>Error - the plugin has not loaded</p>';
		embed += '</object>';
}

xmlDoc.async = "false";

function processReqChange() {
    // only if req shows "loaded"
    if (xmlDoc.readyState == 4) {
        // only if "OK"
        if (xmlDoc.status == 200) {
            parseXml();
         } else {
            alert("There was a problem retrieving the XML data:\n" + xmlDoc.statusText);
         }
    }
}

// the following object will assign all the playlist entries data
function entry(type, src, thelink, linktext) {
	this['type'] = type;
	this['src'] = src;
	this['thelink'] = thelink;
	this['linktext'] = linktext;
}

function msInit() {
	// this is run by IE and FF
	// Safari does not use this method
	xmlDoc.load(xml);
}

function parseXml() {
	//alert('parsing xml');
	/*  <xml>
	 *  <playlist>
	 *  <entry type="type of file">
	 *     <src>location of file</src>
	 *     <link>link if applicable</link>
	 *     <linktext>link text</linktext>	 
	 * </entry>
	 * </playlist>
	 */
	
	if (safari) {
		var rootNode = xmlDoc.responseXML.getElementsByTagName("playlist"); //alert(rootNode);
		cleanWhitespace(rootNode[0]); // for browsers that count white space as nodes
		var nodes = rootNode[0].getElementsByTagName('entry'); //alert(nodes);
	} else {
		var rootNode = xmlDoc.documentElement;
		cleanWhitespace(rootNode); // for browsers that count white space as nodes
		var nodes = rootNode.childNodes; //alert(nodes); 
	}
	
	if (nodes.length > 0) {
		for (var i = 0; i < nodes.length; i++) {
			var type = nodes[i].getAttribute('type'); //alert(type);
			var src = nodes[i].childNodes[0].childNodes[0].nodeValue; //alert(src);
			var thelink = nodes[i].childNodes[1].childNodes[0].nodeValue; //alert(thelink);
			var linktext = nodes[i].childNodes[2].childNodes[0].nodeValue; //alert(linktext);
			entries[i] = new entry(type, src, thelink, linktext);
			//alert(entries[i].type);
		}
    
		// and away we go!    
		playlistPlay();
	}
}

function playlistPlay() { //alert('play');
	// remove link and replace
	var linkdiv = document.getElementById('media_link');
	if ( document.getElementById('thelink') )
	{
    var thelink = document.getElementById('thelink');
    thelink.parentNode.removeChild(thelink);
	}
	
  // now just set the href instead of creating the anchor tag
	if (entries[next]['linktext'] != 'none' && entries[next]['thelink'] != 'none') 
	{
    var anchor = $('a#media_link');
		anchor.attr('href', entries[next]['thelink']); //alert('bp2');
		//anchor.id = 'thelink'; //alert('bp3');
		//var atext = document.createTextNode(entries[next]['linktext']); //alert('bp4');
		//anchor.appendChild(atext); //alert('bp5');
		//linkdiv.appendChild(anchor); //alert('bp6');
	}

	// show media
	switch (entries[next]['type']) {
		case 'swf':
		case 'avi':
		case 'mpg':
		case 'mpeg':
		case 'mp4':
			vidReady = false;
			vidPlaying = false;
			showVideo(next);
			break;
		case 'swf':
			showFlash(next);
			break;
		case 'jpg':
		case 'gif':
		case 'png':
			showImg(next);
			break;
		default:
			playlistAdv();
	}
}

function playlistAdv() {
	next++;
	if (next == entries.length) next = 0;
	playlistPlay();
}

// embeds player in page
// sets up the wrapper object for player control
// loads the video, and starts the monitoring function
function showVideo(next) { //alert('show meh');
	container = document.getElementById('media_container');

	var moviebox = document.createElement('div');
	moviebox.id = 'moviebox'; //alert(moviebox);
	
	container.appendChild(moviebox);
	document.getElementById('moviebox').innerHTML = embed; //embed.id = 'embed'
	
	var player = document.getElementById('embed'); //alert('embed: ' + embed);
	
	if (window.attachEvent)
	{//alert('attach');
		player.attachEvent("playStateChange",getPlayState); //alert('attachEvent');
		player.attachEvent("openStateChange",getOState); //alert('bp2'); 
	}
	else if (window.addEventListener)
	{
		// Safari and FF
		player.addEventListener("PlayStateChange",getPlayState,false); //alert('addEventListener');
		player.addEventListener("OpenStateChange",getOState,false); //alert('bp3'); 
	}
	
	wrapper = new pfWMP(player); //alert(wrapper);// wrapped for video control
	wrapper.loadURL(entries[next]['src']);
	//alert(player.URL);
	//player.controls.play();
	monInt = window.setInterval("monitorVideo()", 500);
	//alert(wrapper.movie.controls);
}

function getPlayState(evt) {
	status = wrapper.getStatus();
	//var para = document.createElement('p');
	//var state = document.createTextNode(status.num);
	//para.appendChild(state);
	//var mon = document.getElementById('mon');
	//mon.appendChild(para);
	var time = wrapper.getTime();
	var dur = wrapper.getDuration();
	//if (time && dur && time == dur) donePlaying(); 
}

function getOState(evt) {
	ostate = wrapper.getOpenState();
	//mon = document.getElementById('mon');
	//mon.innerHTML += 'openstate: ' + ostate + '<br>';
}

function monitorVideo() {
	mon = document.getElementById('mon');
	//mon.innerHTML += 'openstate: ' + ostate;
	// for IE and FF2, a function in the document gets the open state
	// on state change. FF3 doesn't recognize that function, so check
	// the ostate here and get it if necessary
	if (!ostate) ostate = wrapper.getOpenState();
	
	var time = wrapper.getTime();
	//mon.innerHTML += '<br>time: ' + time;
	
	if (!vidReady && ostate == 6) {vidReady = true; mon.innerHTML += '<br>ready';}
	if (vidReady && !vidPlaying)
	{
		wrapper.playVideo();
		//mon.innerHTML += '<br>'movie.movie.src;
		if (time > 0) {vidPlaying = true;}
	} 
	if (vidPlaying && time == 0) donePlaying();
}

function donePlaying() 
{
	window.clearInterval(monInt);
	vidReady = false;
	vidPlaying = false;
	//if (entries[next]['type'] != 'video') {
	var vid = document.getElementById('moviebox');
	vid.parentNode.removeChild(vid);
	//mediabox.parentNode.removeChild(mediabox);
	//mediabox.removeChild(document.getElementById('mymovie'));
	//}
	playlistAdv();	
}

function showImg(next) {
	container = document.getElementById('media_container');
	
	var imgbox = document.createElement('div');
	imgbox.id = 'imgbox';
	
	var imgtag = document.createElement('img');
	imgtag.setAttribute('src', entries[next]['src']);
	
	if (entries[next]['thelink'] != '' && entries[next]['thelink'] != 'none') {
		// add the link!
		var anchortag = document.createElement('a');
		anchortag.id = 'anchor';
		anchortag.href = entries[next]['thelink'];
    anchortag.target = '_blank';
		
		// add it
		anchortag.appendChild(imgtag);
		imgbox.appendChild(anchortag);		
	} else {
		// otherwise just add the image
		imgbox.appendChild(imgtag);
	}
	
	container.appendChild(imgbox);
  
  //alert(displayInt);
  if (!displayInt)
  {
    displayInt = setTimeout("removeImg()", disptime); //alert('int set');
  }
}

function removeImg() {
  displayInt = false;
	container = document.getElementById('media_container');
	var imgbox = document.getElementById('imgbox');
	container.removeChild(imgbox);
	playlistAdv();
}

function showFlash(next) {
	container = document.getElementById('media_container');

	var moviebox = document.createElement('div');
	moviebox.id = 'moviebox';   
	
	container.appendChild(moviebox);
	document.getElementById('moviebox').innerHTML = createFlash(); // fembed.id = 'fembed'
  
  var fembed = document.getElementById('fembed');
   
	setTimeout("removeFlash()", 10000);
}

function createFlash() {
	var fembed  = '<OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"';
		fembed += 'codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"';
		fembed += 'id="fembed" width="460" height="352">';
		fembed += '<PARAM NAME=movie VALUE="'+entries[next]['src']+'">';
		fembed += '<PARAM NAME=quality VALUE=high>';
		fembed += '<PARAM NAME=bgcolor VALUE=#FFFFFF>';
		fembed += '	<EMBED src="'+entries[next]['src']+'" width="460" height="352"';
		fembed += '	quality=high';
		fembed += '	bgcolor=#FFFFFF';
		fembed += '	NAME="fembed" TYPE="application/x-shockwave-flash"';
		fembed += 'PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer"></EMBED></OBJECT>';
		
	return fembed;
}

function removeFlash() {
	var vid = document.getElementById('moviebox')
	vid.parentNode.removeChild(vid);
	playlistAdv();
}

cleanWhitespace = function(node) {
	var notWhitespace = /\S/;
	for (var i=0; i < node.childNodes.length; i++) {
		var childNode = node.childNodes[i];
		if ((childNode.nodeType == 3) && (!notWhitespace.test(childNode.nodeValue))) {
			// that is, if it's a whitespace text node
			node.removeChild(node.childNodes[i]);
			i--;
		}
		if (childNode.nodeType == 1) {
			// elements can have text child nodes of their own
			cleanWhitespace(childNode);
		}
	}
}

function followLink()
{
  if (entries[next]['thelink'] != '' && entries[next]['thelink'] != 'none')
  {
    window.location.href = entries[next]['thelink'];
  }
}

function handMe()
{
  if (entries[next]['thelink'] != '' && entries[next]['thelink'] != 'none')
  {
    container.style.cursor = 'pointer';
  }
}

//window.onload = init;
