var flowPlayerInstances = {};

function prepareFlowPlayerOptions(reportId, extraOptions, extraClipOptions, licenceKey)
{
	if(!extraOptions)
		extraOptions = {};

	if(!extraClipOptions)
		extraClipOptions = {};

	var clipOptions = {
		onLastSecond : function() {
			endFlowPlayerTracking(reportId, true);
		},
		onStart: function() {
			this.pause();
		// No seeking, at this time the video is not fully loaded
		// Seeking only reliably works on streaming.
		},
		onStop: function() {
			endFlowPlayerTracking(reportId);
		},
		onResume: function() {
			beginFlowPlayerTracking(reportId);
		},
		onPause: function() {
			endFlowPlayerTracking(reportId);
		},
		onSeek: function() {
			beginFlowPlayerTracking(reportId);
		},
		onBeforeSeek: function() {
			endFlowPlayerTracking(reportId);
		},
		onBeforeUnload: function() {
			endFlowPlayerTracking(reportId);
		}
	};

	Object.extend(clipOptions, extraClipOptions);

	var options = {
		clip : clipOptions
	};

  if (licenceKey)
    options.key = licenceKey;
  
	Object.extend(options, extraOptions);
	return options;
}

function createFlowplayer(reportId, targetElementId, extraOptions, extraClipOptions, licenceKey)
{
	var options = prepareFlowPlayerOptions(reportId, extraOptions, extraClipOptions, licenceKey);
	flowPlayerInstances[reportId] = flowplayer(targetElementId, aJsConfig.APPLICATION_URL + "flowplayer/flowplayer.unlimited-3.2.7.swf", options);

	Event.observe(window, 'beforeunload', function() {
		endFlowPlayerTracking(reportId);
	});
}
function createFlowplayerRtmp(reportId, targetElementId, extraOptions, extraClipOptions, licenceKey)
{
	var options = prepareFlowPlayerOptions(reportId, extraOptions, extraClipOptions, licenceKey);

	options.clip.autoPlay = true;
	options.clip.autoBuffering = true;
	options.clip.provider = "rtmp";
	options.clip.urlResolver = "cloudfront";
	if (!options.plugins)
		options.plugins = {};
	options.plugins.rtmp = {
				url: 'flowplayer.rtmp-3.2.3.swf',
				netConnectionUrl: aJsConfig.S3_STREAMED_CLOUD_URL
	}
	options.plugins.cloudfront = {
				url: 'flowplayer.cloudfrontsignedurl-1.0.swf'
	}

	flowPlayerInstances[reportId] = flowplayer(targetElementId, aJsConfig.APPLICATION_URL + "flowplayer/flowplayer.unlimited-3.2.7.swf", options);
	
	Event.observe(window, 'beforeunload', function() {
		endFlowPlayerTracking(reportId);
	});
}

function beginFlowPlayerTracking(reportId)
{
	flowPlayerInstances[reportId].lmsLastPosition = flowPlayerInstances[reportId].getTime();
}


function endFlowPlayerTracking(reportId, ended)
{
	if (!flowPlayerInstances[reportId])
		return;

	var currentTime = flowPlayerInstances[reportId].getTime();

	if (flowPlayerInstances[reportId].lmsLastPosition == currentTime
			|| flowPlayerInstances[reportId].lmsLastPosition == -1)
		return;

	var position = currentTime;

	if (ended)
		position = -1;

  var lastPos = 0;
  if (flowPlayerInstances[reportId].lmsLastPosition != undefined)
    lastPos = flowPlayerInstances[reportId].lmsLastPosition;

	updateVideoTimeAndStateSpent(reportId, currentTime - lastPos, position);

	flowPlayerInstances[reportId].lmsLastPosition = position;
}
