var _musicPlayer;
var _mediaPlayer;

function playerReady(thePlayer) {
	// alert("Player initialized: " + thePlayer.id);
	if (_musicPlayer.id == thePlayer.id && !_musicPlayer.player) {
		_musicPlayer.player = document.getElementById(thePlayer.id);
		_musicPlayer.setupListeners();
		_musicPlayer.setupPlayer();
	} else if (_mediaPlayer.id == thePlayer.id && !_mediaPlayer.player) {
		_mediaPlayer.player = document.getElementById(thePlayer.id);
	}
}

function detectPlugin() {
    var daPlugins = detectPlugin.arguments;
    var pluginFound = false;
    if (navigator.plugins)
		if (navigator.plugins.length > 0) {
		var pluginsArrayLength = navigator.plugins.length;
		for (pluginsArrayCounter=0; pluginsArrayCounter < pluginsArrayLength; pluginsArrayCounter++ ) {
			var numFound = 0;
			for(namesCounter=0; namesCounter < daPlugins.length; namesCounter++) {
				if( (navigator.plugins[pluginsArrayCounter].name.indexOf(daPlugins[namesCounter]) >= 0) || 
					(navigator.plugins[pluginsArrayCounter].description.indexOf(daPlugins[namesCounter]) >= 0) ) {
					numFound++;
				}   
			}
			if (numFound == daPlugins.length) {
				pluginFound = true;
				break;
			}
		}
	} else if (window.ActiveXObject) {
		for (x = 2; x <= 10; x++) {
			try {
				var oFlash = eval("new ActiveXObject('ShockwaveFlash.ShockwaveFlash." + x + "');");
				if (oFlash) {
					pluginFound = true;
				}
			} catch(e) { /* ignore */ }
		}
	}
	return pluginFound;
}

function detectFlashPlugin() {
    pluginFound = detectPlugin('Shockwave Flash');
    return pluginFound;
}

var _flashPluginEnabled = detectFlashPlugin();

function createFlashPlayer(containerId, id, file, width, height, repeat) {
	var w = new String(width?width:0);
	var h = new String(height?height:0);
	var s1 = new SWFObject("player.swf", id, w, h, "8", "#000");
	s1.addParam("allowfullscreen", "true");
	s1.addParam("allowscriptaccess", "always");
	s1.addParam("flashvars", "controlbar=over&file=" + file + "&autostart=true&repeat=" + (repeat?"always":"list"));
	s1.write(containerId);
	return document.getElementById(id);
}

function initMusicPlayer(containerId, id, file) {
	try {
		createFlashPlayer(containerId, id, file, 0, 0, true);
		_musicPlayer = new PlayerControl("_musicPlayer", id);
		buildPlayList = function(xmlResponse) {
			var xmlNodes = xmlResponse.getElementsByTagName("playlist")[0].getElementsByTagName("track");
			for(var i = 0; i < xmlNodes.length; i++) {
				_musicPlayer.addTrack(getElementText(xmlNodes[i], "name", 0), getElementText(xmlNodes[i], "url", 0));
			}
		};
		ajax.sendRequest("playlist.php", "", "XML", buildPlayList);
		if (_flashPluginEnabled == false)
			_musicPlayer.showDownloadFalshPluginMessage();
	} catch(e) {
		alert(e.message);
	}
}

function initMediaPlayer(containerId, id, file, width, height) {
	try {
		createFlashPlayer(containerId, id, file, width, height, false);
		_mediaPlayer = new PlayerControl("_mediaPlayer", id);
		if (_flashPluginEnabled == false)
			_mediaPlayer.showDownloadFalshPluginMessage();
	} catch(e) {
		alert(e.message);
	}
}


////////////////////////////////
// Track class

Track = function(name, url) {
	this.url = url;
	this.name = name;
};

////////////////////////////////	
//PlayerControl class
	
PlayerControl = function(name, id) {
	this.name = name;
	this.id = id;
	this.player = null;
	this.trackList = new Array();
	this.current = 0;
	_flashPluginEnabled = true;
}

PlayerControl.prototype.onPlayerStateChanged = function(event) {
	showStatus(event.newstate);
	setTimeout("hideStatus()", 500);
}

PlayerControl.prototype.onPlayerTimeChanged = function(event) {
	this.showPlayTime(event.position, event.duration);
}

PlayerControl.prototype.onPlayerError = function(event) {
	showStatus("Media player error: " + event.message);
}

PlayerControl.prototype.onPlayerItemChanged = function(event) {
	this.showTrackName(this.player.getPlaylist()[event.index].title);
}

PlayerControl.prototype.resetPlaylist = function() {
	try {
		var trackNum = this.trackList.length;
		var lst = new Array();
		for(var i=0; i < trackNum; i++) {
			var track = this.trackList[i];
			lst[i] = {type:"sound", file:track.url, title:track.name};
		}
		this.player.sendEvent("LOAD", lst);
		this.setTrack(this.current);
	} catch(e) {
		showStatus(e.message);
	}
}	

PlayerControl.prototype.setupListeners = function() {
	if (this.player) {
		this.player.addModelListener("STATE", this.name + ".onPlayerStateChanged");
		this.player.addModelListener("TIME", this.name + ".onPlayerTimeChanged");
		this.player.addModelListener("ERROR", this.name + ".onPlayerError");
		this.player.addControllerListener("ITEM", this.name + ".onPlayerItemChanged");
	} else {
		setTimeout(this.name + ".setupListeners()", 100);
	}
}
	
PlayerControl.prototype.setupPlayer = function() {
	if (this.player) {
		try {
			this.resetPlaylist();
			if (this.player.getConfig().autostart) {
				this.play();
			}
		} catch(e) {
			showStatus(e.message);
		}
	} else {
		setTimeout(this.name + ".setupPlayer()", 100);
	}
}
	
PlayerControl.prototype.setTrack = function(num) {
	if (_flashPluginEnabled != true) return;
	if (num < 0 || num >= this.trackList.length)
		return;
	this.current = num;
	this.player.sendEvent("ITEM", num);
}
	
PlayerControl.prototype.playTrack = function(name, url) {
	if (_flashPluginEnabled != true) return;
	this.current = this.addTrack(name, url);
	this.resetPlaylist();
	this.play();
}

PlayerControl.prototype.playFile = function(title, url) {
	if (_flashPluginEnabled != true) return;
	if (this.player) {
		var track = {title:title, file:url};
		this.player.sendEvent("LOAD", track);
		this.play();
	} else {
		setTimeout(this.name + ".playFile('" + title + "','" + url + "')", 100);
	}
}
	
PlayerControl.prototype.addTrack = function(name, url) {
	var idx = this.trackList.length;
	this.trackList[idx] = new Track(name, url);
	return idx;
}
	
PlayerControl.prototype.play = function() {
	if (_flashPluginEnabled != true) return;
	this.player.sendEvent("PLAY", "true");
}
	
PlayerControl.prototype.stop = function() {
	if (_flashPluginEnabled != true) return;
	this.player.sendEvent("STOP", "true");
}
	
PlayerControl.prototype.pause = function() {
	if (_flashPluginEnabled != true) return;
	this.player.sendEvent("PLAY", "false");
}
	
PlayerControl.prototype.next = function() {
	if (_flashPluginEnabled != true) return;
	this.current++;
	if (this.current >= this.trackList.length) 
		this.current = 0;
	this.setTrack(this.current);
}
	
PlayerControl.prototype.previous = function() {
	if (_flashPluginEnabled != true) return;
	this.current--;
	if (this.current < 0) 
		this.current = this.trackList.length-1;
	this.setTrack(this.current);
}
	
PlayerControl.prototype.showDownloadFlashPluginMessage = function() {
	document.getElementById("TrackName").innerHTML = "<a href='http://www.adobe.com/go/getflashplayer'>Get the Flash Player</a>";
}
	
PlayerControl.prototype.showTrackName = function(title) {
	if (_flashPluginEnabled == true) {
		document.getElementById("TrackName").innerHTML = title;
		document.getElementById("TrackName").title = title;
	} else {
		this.showDownloadFlashPluginMessage();
	}
}

PlayerControl.prototype.showPlayTime = function(position, duration) {
	try {
		if (_flashPluginEnabled != true) {
			document.getElementById("PlayTime").innerHTML = "";
			return;
		}
		var min = Math.floor(position / 60);
		var sec = Math.round(position % 60);
		
		document.getElementById("PlayTime").innerHTML = ((min>9)?"":"0")+min+":"+((sec>9)?"":"0")+sec;
	} catch(e) {
		showStatus(e);
	}
}
