if (typeof(byId) == "undefined") {
	window.byId = function(eltId) {
		return document.getElementById(eltId);
	}
}

var MediaPlayer = {

	FlashMovieId: "objFlashMediaResource",

	FlashExpressInstallPath: "",

	FlashMoviePath: "",

	PlayerVolumePct: new Array(),

	Command: function(ctrlId, commandName, params) {

		var flashPlayerId = ctrlId + "_" + MediaPlayer.FlashMovieId;
		var flashPlayer = byId(flashPlayerId);
		var result = null;

		if (flashPlayer) {
			result = eval("byId('" + flashPlayerId + "')." + commandName + "(" + (params ? params : "") + ");");
		}

		return result;

	},


	// Converts the time format from hh:mm:ss to mm:ss
	ConvertTimeFormat: function(timeStr) {

		var result = timeStr;
		var fmtRe = new RegExp("(\\d+):(\\d+):(\\d+)", "gi");
		var itms = fmtRe.exec(timeStr);

		if ((itms != null) && (itms.length > 0)) {
			result = eval("(" + itms[1] + " * 60) + " + itms[2]) + ":" + itms[3];
		}

		return result;

	},


	Init: function(ctrlId) {

		var volumePct = MediaPlayer.Command(ctrlId, "getVolumePercent");

		if (!volumePct) {
			volumePct = "50";
		}

		MediaPlayer.PositionUpdateCallback(ctrlId, "0");
		MediaPlayer.VolumeUpdateCallback(ctrlId, volumePct);

	},


	Seek: function(ctrlId, evt) {

		var srcElt = (evt.srcElement ? evt.srcElement : evt.originalTarget);
		var evtOffsetX = (evt.offsetX ? evt.offsetX : (evt.layerX - evt.originalTarget.offsetLeft));

		// We want to be sure we'll be taking the size of the total.
		while ((srcElt != null) && (srcElt.id != (ctrlId + "_lblProgressTotal"))) {
			srcElt = srcElt.parentNode;
		}

		if (srcElt != null) {
			MediaPlayer.Command(ctrlId, "setPositionPercent", Math.round(100 * evtOffsetX / srcElt.offsetWidth));
		}

	},


	SetVolume: function(ctrlId, evt) {

		var srcElt = (evt.srcElement ? evt.srcElement : evt.target);
		var evtOffsetX = (evt.offsetX ? evt.offsetX : (evt.layerX - evt.originalTarget.offsetLeft));
		var pct = 0;

		// We want to be sure we'll be taking the size of the total.
		while ((srcElt != null) && (srcElt.id != (ctrlId + "_lblVolumeTotal"))) {
			srcElt = srcElt.parentNode;
		}

		pct = Math.round(100 * evtOffsetX / srcElt.offsetWidth);

		MediaPlayer.Command(ctrlId, "setVolumePercent", pct);
		MediaPlayer.VolumeUpdateCallback(ctrlId, pct);

	},


	// Changes the volume by an amount (as opposed to "to an amount").
	SetVolumeDiffPct: function(ctrlId, pctDiff) {

		var volumePnl = byId(ctrlId + "_lblVolume");
		var currentVol = 0;

		if (MediaPlayer.PlayerVolumePct[ctrlId]) {
			currentVol = MediaPlayer.PlayerVolumePct[ctrlId];
		}

		try {
			// Set the volume
			MediaPlayer.SetVolumePct(ctrlId, Math.min(100, Math.max(0, currentVol + pctDiff)));
		} catch (e) {}

	},


	SetVolumePct: function(ctrlId, pct) {
		// Set the volume
		MediaPlayer.Command(ctrlId, "setVolumePercent", pct);
		MediaPlayer.VolumeUpdateCallback(ctrlId, pct);
	},


	ShowFile: function(ctrlId, varName, varValue, startPaused) {

		if (ctrlId != "") {

			var flashvars = {};
			var params = {};
			var attributes = {};
			var slideShowWrapper = byId(ctrlId + "_pnlSlideShowContainer");
			var slideShowActualContainerId = ctrlId + "_pnlSlideShow";
			var lstElt = byId(ctrlId + "_gvMediaResources");
			var height = "225";

			// alert([flashVarKey, fileFlashVars.replace(flashVarKey + "=", "")]);
			eval("flashvars." + varName + " = \"" + varValue + "\"");
			flashvars.positionUpdateCallback = "MediaPlayer.PositionUpdateCallback";
			flashvars.flashInitCallback = "MediaPlayer.Init";
			flashvars.playerId = ctrlId;
			// flashvars.debugMode = true;
			params.allowFullScreen = true;

			if (typeof(startPaused) != 'undefined') {
				flashvars.pausedVideo = "true";
			}

			attributes.id = ctrlId + "_" + MediaPlayer.FlashMovieId;

			if (varName.toLowerCase() == "audiofile") {
				height = "0";
				slideShowWrapper.style.height = "";
			}

			slideShowWrapper.style.display = "";
			slideShowWrapper.innerHTML = "<div id=\"" + slideShowActualContainerId + "\"></div>";
			swfobject.embedSWF(MediaPlayer.FlashMoviePath, slideShowActualContainerId, "300", height, "9.0.0", MediaPlayer.FlashExpressInstallPath, flashvars, params, attributes);
			//slideShowWrapper.scrollIntoView();

			// Should we show the audio and video controls or the slideshow ones?
			if (varName.toLowerCase() == "xmlfile") {
				byId(ctrlId + "_lblAudioVideoControls").style.display = "none";
				byId(ctrlId + "_pnlSlideShowControls").style.display = "";
				byId(ctrlId + "_lblVolume").style.display = "none";
				byId(ctrlId + "_lblProgressTotal").style.display = "none";
				byId(ctrlId + "_lblTime").style.display = "none";
			} else {
				byId(ctrlId + "_lblAudioVideoControls").style.display = "";
				byId(ctrlId + "_pnlSlideShowControls").style.display = "none";
				byId(ctrlId + "_lblVolume").style.display = "";
				byId(ctrlId + "_lblProgressTotal").style.display = "";
				byId(ctrlId + "_lblTime").style.display = "";
			}

			byId(ctrlId + "_pnlControls").style.display = "";

			if (lstElt != null) {

				for (var i = 0; i < lstElt.rows.length; i++) {

					// Un-select all the rows.
					lstElt.rows[i].className = lstElt.rows[i].className.replace(/\bselected\b/gi, "");

					if ((lstElt.rows[i].onclick + "").indexOf(varValue) >= 0) {
						lstElt.rows[i].className += " selected";
					}

				}

			}

		}

	},


	PositionUpdateCallback: function(ctrlId, pct) {
		var flashPlayerId = ctrlId + "_" + MediaPlayer.FlashMovieId;
		var flashPlayer = byId(flashPlayerId);
		var div = byId(ctrlId + "_lblProgressIndicator");
		div.style.width = Math.round(pct * 100) / 100 + "%";
		byId(ctrlId + "_lblTime").innerHTML = MediaPlayer.ConvertTimeFormat(flashPlayer.getProgress()) + " - " + MediaPlayer.ConvertTimeFormat(flashPlayer.getTotal());
	},


	VolumeUpdateCallback: function(ctrlId, pct) {

		var volumePnl = byId(ctrlId + "_lblVolume");
		var links = volumePnl.getElementsByTagName("a");

		// Set the volume
		MediaPlayer.PlayerVolumePct[ctrlId] = pct;
		// volumePnl.volumePct = pct;

		// Update the links
		for (var i = 1; i < (links.length - 1); i++) {
			links[i].className = links[i].className.replace("highlighted", "");
			if ((100 * (i / (links.length - 2))) <= pct) {
				links[i].className += " highlighted";
			}
		}

	}

};
