if (!embeddedMedia) var embeddedMedia = {};

embeddedMedia.Player = function(version) {

	this.so = new SWFObject("http://www.bbc.co.uk/emp/player.swf","bbc_emp_embed",this.height,this.width,version || "8","#000000");
	this.revision= "7276";
	this.so.addParam("wmode","default");
	this.so.addParam("quality","high");
	this.so.addParam("allowFullScreen","true");
	this.so.addParam("allowScriptAccess","always");
	this.so.addVariable("embedReferer",document.referrer);
	this.so.addVariable("embedPageUrl",location.href);
	// this.so.useExpressInstall('http://www.bbc.co.uk/emp/expressinstall.swf');
};

embeddedMedia.playerInstances = {};

embeddedMedia.Player.prototype = {

	write: function(guidanceFlag) {

		// if bbc guidance system installed, attach required hooks
		if (bbc.guidance) {
			var instance = embeddedMedia.playerInstances,
				guidance = bbc.guidance;

			if (!embeddedMedia.guidanceInstalled) {
				embeddedMedia.guidanceInstalled = true;
				guidance.callbacks.toggle = guidance.callbacks.pass = function(status,callbackId) { if (instance[callbackId]) instance[callbackId].write(status); };
			}
			
			instance[this.domId] = this;
			this.set("guidance",guidanceFlag || guidance.status());
		}

		var flashVersion = deconcept.SWFObjectUtil.getPlayerVersion(),
			swf = this.so.getAttribute("swf");

		this.so.setAttribute("id",this.so.getAttribute("id") + "_" + this.domId);

		if (flashVersion.major < 8) {
			swf = "7player.swf" ;
		} else if ((flashVersion.major == 9 && (flashVersion.minor > 0 || flashVersion.rev >= 115)) || (flashVersion.major > 9)) {
			swf = "9player.swf" ;
		} else {
			swf = "player.swf" ;
		}

		this.so.setAttribute("swf","http://www.bbc.co.uk/emp/" + swf + "?revision=" + this.revision);

		// Disable H264 for "/iplayer/bigscreen/" and EMP instances NOT served under "/emp/" or "/iplayer/"
		// Note the "bigscreen" test MUST come first since this path is a child of "/iplayer/"
		if (
			(/\/iplayer\/bigscreen\//.test(location.href)) ||
			(!(/\/(emp|iplayer)\//.test(location.href)))
		) {
			this.set("config_settings_suppressCodec","h264");
		}

		this.so.write(this.domId);
	},

	setWidth: function(value) { this.so.setAttribute("width",value); },

	setHeight: function(value) { this.so.setAttribute("height",value); },

	setPlaylist: function(value) { this.so.addVariable("playlist",value); },

	setConfig: function(value) { this.so.addVariable("config",value); },

	setDomId: function(value) { this.domId = value; this.so.addVariable("domId",value); },

	setRevision: function(value) { this.revision = value; },

	set: function(key,value) {

		if (key == "config_settings_language") {
			this.so.addVariable("config","http://www.bbc.co.uk/emp/translations/" + value + ".xml");
			return;
		}

		if (key == "config_settings_showDescriptionInPopout") {
			this.so.addVariable("config_settings_showFooter",value);
			return;
		}

		this.so.addVariable(key,value);
	}
};


embeddedMedia.console = function() {

	var popDetail = {};

	function popoutSimulcast(pid,colour) {

		createPopup(
			"/emp/simulcast/pop.shtml?epid=" + pid + (colour ? ("&colour=" + colour) : ""),
			"simulcastPop",429,512
		);
	}

	function popoutRadioInvoke(pid, locale) { createPopup(getRadioConsoleUrl(pid, locale),"radioPop",270,512); }

	function getRadioConsoleUrl(pid, locale) {
		var lookup = {
			"bbc_radio_one":						"radio1",
			"bbc_radio_two":						"radio2",
			"bbc_radio_three":						"radio3",
			"bbc_radio_fourfm":						"radio4fm",
			"bbc_radio_five_live":					"fivelive",
			"bbc_radio_five_live_sports_extra":		"5livesportsextra",
			"bbc_1xtra":							"1xtra",
			"bbc_6music":							"6music",
			"bbc_7":								"bbc7",
			"bbc_asian_network":					"asiannetwork",
			"bbc_radio_ulster":						"radioulster",
			"bbc_radio_foyle":						"radiofoyle",
			"bbc_radio_wales_fm":					"radiowales",
			"bbc_radio_scotland_fm":				"radioscotland",
			"bbc_world_service":					"worldservice"
		};
		var root = (locale && locale!="en") ? "/iplayer/" + locale : "/iplayer"; 
		return root + "/console/" + (pid);
	}

	function popout(params,height,width,mode) {

		height = height * 1;
		width = width * 1;

		popDetail = {
			params: params,
			mode: mode,
			height: height,
			width: width
		};

		createPopup("/emp/pop.html","videoPop" + mode,height + ((mode == "standard") ? 77 : 32),width);
	}

	function createPopup(url,name,height,width) {

		var win = window.open(
			url,name,
			"width=" + width + ",height=" + height + ",toolbar=no,resizable=no,scrollbars=no"
		);

		if (!win.opener) win.opener = window.self;
		if (win.focus) win.focus();
		return win;
	}

	return {
		popoutRadio: function(pid) { popoutRadioInvoke(pid); },
		popoutRadioInvoke: popoutRadioInvoke,
		popoutAudio: function(params,height,width) { popout(params,height,width,"audio"); },
		popoutVideo: function(params,height,width) { popout(params,height,width,"standard"); },
		popoutiPlayerVideo: function(params,height,width) { popout(params,"250","245","standard"); },
		popoutSimulcast: function(pid) { popoutSimulcast(pid); },
		popoutBlackSimulcast: function(pid) { popoutSimulcast(pid,"black"); },
		notifyParent: function(childWin) { if (childWin && childWin.updatePlayer) childWin.updatePlayer(popDetail); }
	};
}();


// alias for existing bbc.Emp() namespace
if (!bbc) var bbc = {};
bbc.Emp = embeddedMedia.Player;

