function playerReady(obj)
{
	var player = __getVideoPlayer(obj['id']);
	addPlayerEvents(player);
}

function __getVideoPlayer(id)
{
	return document.getElementById('player' + id);
}

var __playerInfo = { };
function __getPlayerInfo(id)
{
	if(typeof(__playerInfo[id]) == 'undefined')
		__playerInfo[id] = { };
	return __playerInfo[id];
}

function addPlayerEvents(player)
{
	player.addModelListener("STATE","playerEvent_onModelState");

	//player.addControllerListener("PLAYLIST","playerEvent_onNewPlaylist");
	player.addControllerListener("ITEM","playerEvent_onNewPlaylistItem");
	//player.addControllerListener("MUTE","playerEvent_onMute");
	//player.addControllerListener("PLAY","playerEvent_onPlay");
	//player.addControllerListener("SEEK","playerEvent_onSeek");
	player.addControllerListener("STOP","playerEvent_onStop");
}

function releasePlayerEvents(player)
{
	player.removeModelListener("STATE","playerEvent_onModelState");

	//player.removeControllerListener("PLAYLIST","playerEvent_onNewPlaylist");
	player.removeControllerListener("ITEM","playerEvent_onNewPlaylistItem");
	//player.removeControllerListener("MUTE","playerEvent_onMute");
	//player.removeControllerListener("PLAY","playerEvent_onPlay");
	//player.removeControllerListener("SEEK","playerEvent_onSeek");
	player.removeControllerListener("STOP","playerEvent_onStop");
}

function playerEvent_onModelState(obj) {
	switch(obj.newstate)
	{
		case "IDLE":
		case "BUFFERING":
		case "PLAYING":
		case "PAUSED":
			break;
		case "COMPLETED":
			var pi = __getPlayerInfo(obj['id']);
			playerEvent_stopTimer(pi);
			playerTrackAction(document.URL, pi, 'Completed');
			break;
	}
}

/*
function playerEvent_onNewPlaylist(obj) {
	alert('PLAYLIST: '+obj.playlist.length+' (items)');
}
*/
function playerEvent_onNewPlaylistItem(obj) {
	var player = __getVideoPlayer(obj['id']);
	var playlist = player.getPlaylist();
	var item = playlist[obj.index];
	
	var pi = __getPlayerInfo(obj['id']);
	pi.file = item.file;
	pi.type = item.type;
	
	playerEvent_startTimer(pi);
	playerTrackAction(document.URL, pi, 'Started');
}


function playerEvent_startTimer(pi) {
	if(typeof(pi.totalWatched) == 'undefined' || pi.totalWatched == null)
		pi.totalWatched = 0;
	pi.started = new Date();
}

function playerEvent_stopTimer(pi) {
	var current = new Date();
	pi.totalWatched += Math.ceil((current.getTime()-pi.started.getTime())/1000);
	pi.started = null;
}

function playerEvent_onMute(obj) {
	var pi = __getPlayerInfo(obj['id']);
	playerTrackAction(document.URL, pi, 'Mute');
}

function playerEvent_onPlay(obj) {
	var pi = __getPlayerInfo(obj['id']);
	if(obj.state)
		playerEvent_startTimer(pi);
	else
		playerEvent_stopTimer(pi);
		
	playerTrackAction(document.URL, pi, obj.state ? 'Play' : 'Pause');
}

function playerEvent_onSeek(obj) {
	var pi = __getPlayerInfo(obj['id']);
	playerTrackAction(document.URL, pi, 'Seek(' + (obj.position == 0 ? 'start' : obj.position + ' secs') + ')');
}

function playerEvent_onStop(obj) {
	var pi = __getPlayerInfo(obj['id']);
	playerEvent_stopTimer(pi);
	playerTrackAction(document.URL, pi, 'Stop');	
	
	pi.file = null;
	pi.type = null;
	pi.totalWatched = null;
}

function playerEvent_onPageUnload() {
	var pi;
	for(var key in __playerInfo)
	{
		pi = __playerInfo[key];
		if(pi.file) {
			playerEvent_stopTimer(pi);
			playerTrackAction(document.URL, pi, 'Exit');
		}
	}
}

function removeUrlDomain(url)
{
	return url.replace(/^http(s)?:\/\/[^\/]+/, '');
	//return url.substr(url.indexOf("/thinking/"));
}

function getFileName(file)
{
	return file.substr(file.lastIndexOf("/") + 1);
}

function playerTrackAction(url, pi, action) {

	var file = pi.file;
	var type = pi.type;
	var partUrl = removeUrlDomain(url);
	//var trackUrl = '/' + type + partUrl + escape(getFileName(file)) + '?action=' + action + '&watched=' + pi.totalWatched + ' secs';
	var trackUrl = '/' + type + partUrl + escape(getFileName(file)) + '?action=' + action;
	pageTracker._trackPageview(trackUrl);
}

$(window).unload(function() {
	playerEvent_onPageUnload();
});


