/**
 * @author sigr0005
 * June 2, 2009
 */

function EmbeddedFlashPlayer_onStateChange(event) {
	if(embeddedFlashPlayers) {
		var player = embeddedFlashPlayers.get(document.getElementById(event.id));
		if(player) { player.state = event.newstate; player.invokeEvent(event.newstate); }
	}
	if(typeof pageTracker !== "undefined") pageTracker._trackEvent("Embedded Flash Player Object (Longtail)", event.newstate, event.id);
}

/**
 * This function is referenced for every time a model state changes for the flash player (swf) player.
 */
var EmbeddedFlashPlayers	= function() {
	var players		= [];
	
	// Shared player variables:
	//var playerVars	= [];
	
	var Player		= function(player) {
		// Exposed only to this function's parent object :)
		this.player	= player;
		this.state	= "IDLE";
		this.events	= {PLAYING: [], STOP: [], IDLE: []};
	};
	Player.prototype.addEventListener	= function(event, callback) { if(this.events[event]) this.events[event].push(callback);	};
	Player.prototype.invokeEvent		= function(event) {
		if(typeof this.events[event] !== "undefined") for(var i=0; i<this.events[event].length; i++) this.events[event][i].call(this);
	};
	Player.prototype.play				= function() { this.player.sendEvent("PLAY"); };
	Player.prototype.pause				= function() { this.player.sendEvent("STOP"); };
	Player.prototype.stop				= function() { if(this.state === "PLAYING") this.play(); };
	
	/**
	 * Add an embedded object player to the player list.
	 * @param {Object} player The DOM element that the player belongs to.
	 * @param {Object} options <i>Option</i> Additional options to pass along including <code>onStop</code> and
	 *  <code>onPlay</code>
	 */
	this.add				= function(player, options) {
		for(var i=0; i<players.length; i++) if(players[i].player === player) return;
		
		players.push(new Player(player));
		player.addModelListener("STATE", "EmbeddedFlashPlayer_onStateChange");
	};
	
	/**
	 * Get the player details.
	 * @param {Object} playerId The DOM id of the player.
	 * @return {Object} The player option object and the player id.
	 */
	this.get				= function(player) {
		for(var i=0; i<players.length; i++) if(players[i].player === player) return players[i];
	};
};
var embeddedFlashPlayers	= new EmbeddedFlashPlayers();

/**
 * This is the function that is called each time a flash (swf) player becomes available.
 * @param {Object} player The embedded flash object to add to the list of players.
 */
function playerReady(player) {
	var p = document.getElementById(player.id);
	embeddedFlashPlayers.add(p);
	if(p.onload) p.onload.call(embeddedFlashPlayers.get(p));
}
