var docLoaded = false;
var isHero = false;
var playerQueue = new Array();
var playersArr = new Array();
var popOutVars;
var pmp = new Object();
var animateIntId;
var animateDivId;
var animateDivFrameNum;
pmp.embedPlayer = embedPlayer;

$(document).ready(function(){
	processPlayerQueue();
});

function processPlayerQueue() {
	for(var i = 0; i < playerQueue.length; i++) {
		var queueObj = playerQueue.pop();
		createPlayer(queueObj.divId, queueObj.media, queueObj.mediaURL, queueObj.propsObj);
		i--;
	}
   docLoaded = true;
}

function embedPlayer(divId, media, mediaURL, propsObj) {
	if(!docLoaded) {
		playerQueue.push({divId:divId, media:media, mediaURL:mediaURL, propsObj:propsObj});
	} else {
		createPlayer(divId, media, mediaURL, propsObj);
	}
}

function createPlayer(divId, media, mediaURL, propsObj) {
	//Create the flash containing div, need to check their flash version first.
	if(swfobject.hasFlashPlayerVersion("9.0.0")) {
		if(!propsObj) var propsObj = {};
		var flashDivId = divId + "_flashDiv";
		$("#" + divId).html("<div id=\"" + flashDivId + "\" style=\"height:100%; width:100%\"></div>");
		
		//Do the swf object stuff
		var flashvars = {};
		flashvars.media = media;
		flashvars.mediaURL = mediaURL;
		flashvars.pageURL = propsObj.pageURL == undefined ? location.href : propsObj.pageURL;
		flashvars.stageWidth = $("#" + divId).css("width").split("px")[0];
		flashvars.stageHeight = $("#" + divId).css("height").split("px")[0];
		flashvars.outerDivId = divId;
		flashvars.innerDivId = flashDivId;
		flashvars.flashId = divId + "_flash";
		flashvars.cornerRadius = media == "MiniVideo" ? 4 : 10;
		if(top.opener != undefined) {
			flashvars.displayPopOutButton = false;
			flashvars.displayShareButton = false;
			flashvars.displaySaveButton = false;
			flashvars.displayEmailButton = false;
		} else {
			flashvars.displayPopOutButton = true;
			//flashvars.displayEmailButton = false; //Temp fix for email button not working
		}
		
		for(prop in propsObj) {
			if(flashvars[prop] == undefined) flashvars[prop] = propsObj[prop];
		}
		
		var params = {};
		params.wmode = "transparent";
		params.allowfullscreen = "true";
		params.allowscale = "true";
		params.allowscriptaccess = "always";
		var attributes = {};
		attributes.id = divId + "_flash";
		swfobject.embedSWF(site_root + "PMP/PMP.swf", flashDivId, "100%", "100%", "9.0.0", false, flashvars, params, attributes);
		playersArr.push({flashvars:flashvars, params:params, attributes:attributes});
	}
}

function openHeroDiv(divId) {
	animateDivId = divId;
	animateDivFrameNum = 0;
	clearInterval(animateIntId)
	animateIntId = setInterval(openHeroDivAnimate, 50);
}

function closeHeroDiv(divId) {
	animateDivId = divId;
	animateDivFrameNum = 0;
	clearInterval(animateIntId)
	animateIntId = setInterval(closeHeroDivAnimate, 50);
}

function openHeroDivAnimate() {
	var divHeight = easeOut(animateDivFrameNum, 210, 200, 20);
	$("#" + animateDivId).css("height", divHeight + "px");
	$("#" + animateDivId + "_flash").css("height", divHeight); //Need this for IE6 & Safari
	if(divHeight == 410) clearInterval(animateIntId);	
	animateDivFrameNum++;
}

function closeHeroDivAnimate() {
	var divHeight = easeOut(animateDivFrameNum, 410, -200, 20);
	$("#" + animateDivId).css("height", divHeight + "px");
	$("#" + animateDivId + "_flash").css("height", divHeight); //Need this for IE6 & Safari
	if(divHeight == 210) clearInterval(animateIntId);	
	animateDivFrameNum++;
}

function easeOut (t, b, c, d) {
	return c * Math.sin(t/d * (Math.PI/2)) + b;
}

function openPopoutPlayer(flashId) {
	for(var i = 0; i < playersArr.length; i++) {
		if(playersArr[i].flashvars.flashId == flashId) {
			popOutVars = playersArr[i];
			if(popOutVars.flashvars.media == "HeroVideo") {
				popOutVars.flashvars.stageHeight = 410;
				popOutVars.flashvars.media = "Video";
			}
			window.open(site_root + "../PMP/default.aspx", "PMP_PopOut", "status=0,toolbar=0,location=0,menubar=0,resizable=0,scrollbars=0,width=730,height=410");
		}
	}
}



// -------------------------------------------------------------------------------------------------------------------------------------------------


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) {
alert('play button clicked');
	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();
});


