﻿ /// <reference path="js/json2.js" />
  
//=========================================================================================================================================================================================================		

/// GLOBAL VARIABLES

var frmCastUP = document.getElementById("CastUpFrame");
var smallPlayerPosition = null;

var currentMovieUrl = "";
var currentMovieUrlRaw = "";
var lastSelectedMovie = 0;

//=========================================================================================================================================================================================================		
  
/// Handles all incoming messages from the CastUP player.
/// The message object parameter has three properties: command, name and value. 
/// Analyze the message contents and execute appropriate commands.
function cuMessageHandler(message)
{	

    var coreMessage = "";
    var customMessage = "";
	var dtNow = new Date();
	var sDate = "<b>Last message received:</b> " + getShortDateString(dtNow);;
	
	coreMessage = sDate + "<br>" 
        + "message.command: " + message.command + "<br>" 
        + "message.name: " + message.name + "<br>" 
        + "message.type: " + message.type  + "<br>" 
        + "message.value: " + getMessageBodyHTML(message);		      
	
	switch(message.name)
	{
		case "cuPlayer.onResize":
			var size = message.getObject();
			resizeCastupFrame(size.width, size.height);
			customMessage = "The castup player is resized to " + size.width + "/" + size.height; 
			break;    

		case "cuPlayer.volume":                  
			setVolumeListValue(message.value);
			customMessage = "The castup player volume is " + message.value; 
			break;

		case "cuPlayer.muteState":                  
			setVolumeListValue(message.value);
			customMessage = "The castup player mute state is '" + message.value + "'"; 
			break;  

		case "cuPlayer.clipDetails":
			//debugger;
			customMessage = "The castup player is now playing clip '" + message.value + "'";
			var clipName = getMovieUrl(message);
			currentMovieUrlRaw = clipName;
			currentMovieUrl = cleanMovieName(clipName);
			break;  

		case "cuPlayer.onClipChange":
			var clipName = getMovieUrl(message);
			currentMovieUrlRaw = clipName;
			currentMovieUrl = cleanMovieName(clipName);
			customMessage = "New clip playing: '" + clipName + "'";
			
			if (clipName != 'CastUP: LivePL01' && frames["PannelFrame"].location.href.toLowerCase().indexOf('pannellivenew.aspx') >= 0)
				SelectMovieByPlayerEvent(clipName)
			break;   

		case "cuPlayer.onClipStop":
		
			//if (frames["PannelFrame"].location.href.indexOf('PannelLiveNew.aspx') < 0)
			if (!isLive && currentMovieUrlRaw.indexOf('CastUP: ') >= 0 && currentMovieUrlRaw != 'CastUP: LivePL01')
				ShowOptionsDiv();
			customMessage = 'Clip Stop';
			break;

		case "cuPlayer.onClipEnd":
			customMessage = 'Clip End';
			if (!isLive && currentMovieUrlRaw.indexOf('CastUP: ') >= 0)
				ShowOptionsDiv();
			break;

		default:
			customMessage = "";
	}

	highlightElement("divPlayerMessage", "yellow", 1000);
	document.getElementById("divPlayerMessage").innerHTML = coreMessage;
	appendMessageToList(customMessage, dtNow);
}

function cleanMovieName(clipName)
{
	clipName = clipName.replace("CastUP: ", "");
	return clipName;
}

function getMovieUrl(message)
{
	
	var clip = message.getObject();
	var clipName = clip.altRef;
	if (clipName == "") clipName = clip.title;
	return clipName;
}

function playAgain()
{ 
	HideOptionsDiv();
	ShowMovie(currentMovieUrl,'',null,null,null);
}
	
function trim(stringToTrim)
{
	return stringToTrim.replace(/^\s+|\s+$/g, "");
}

function SelectMovieByPlayerEvent(clipName)
{
	//debugger;
	if (clipName.indexOf('CastUP:') >= 0)
	{
		clipName = clipName.replace('CastUP:','');
		clipName = trim(clipName);
	}
	
	var pannel = frames["PannelFrame"].document.getElementById("TopDiv");
	var c = pannel.childNodes.length;
	pannel.filters[0].Apply();                   

	for (var i = lastSelectedMovie; i < c; i++)
	{
		if (pannel.childNodes[i].getAttribute("clipName") == clipName)
		{
			pannel.childNodes[i].className = "PannelImageSelected";
			PannelFrame.scroll((i-2) * 83,0);
			lastSelectedMovie = i;
			break;
		}
		else
			pannel.childNodes[i].className = "PannelImage";
    }
    pannel.filters[0].Play();
}

function getMessageBodyHTML(message)
{   
	if (message.type != "object") return message.value;

	var retVal = "";   
	var messageObject = message.getObject();

	var property = "";
	for (property in messageObject)
	{
		if (typeof messageObject[property] == "function")
			continue; 
		retVal += property +  "='" + messageObject[property] + "', ";
	}

	return retVal;
}
				
//=========================================================================================================================================================================================================		

function highlightElement(elementName, bgcolor, duration)
{
	setBackgroundColor(elementName,bgcolor);
	window.setTimeout('setBackgroundColor("' + elementName + '","lightyellow")', duration);
}

function setBackgroundColor(elementName, bgcolor)
{	
	var element = document.getElementById(elementName)
	element.style.backgroundColor = bgcolor;
}
	
//=========================================================================================================================================================================================================		
		
function appendMessageToList(message, datetime)
{
	var divMessageList = document.getElementById("divCustomMessage");
	message = getShortDateString(datetime) + " - " + message;
	divMessageList.innerHTML = message + "<br>" +  divMessageList.innerHTML;
}

function getShortDateString(dt)
{
	var sTime =  dt.getDate() + "/" + dt.getMonth()+1 + "/" + dt.getFullYear() + " " + dt.getHours() + ":" + dt.getMinutes() + ":" + dt.getSeconds();
	return sTime;
}	
			
//=========================================================================================================================================================================================================	
	
function resizeCastupFrame(width, height)
{
	var divForm = document.getElementById("divHostContents");
	var frmCastUP = document.getElementById("CastUpFrame");

	if (!smallPlayerPosition)
	{
		smallPlayerPosition = new Position(frmCastUP.style.left, frmCastUP.style.top, frmCastUP.width, frmCastUP.height);
	}

	var isPlayerBig = (frmCastUP.width >  smallPlayerPosition.width);
	var resizePosition = null;
	var resizePosiitonType = "";

	if (isPlayerBig)
	{
		resizePosition = new Position(smallPlayerPosition.left, smallPlayerPosition.top,  smallPlayerPosition.width, smallPlayerPosition.height);
		resizePosiitonType = "static";
	}
	else
	{
		resizePosition = getElementPosition(divForm);
		resizePosiitonType = "absolute";
	}

	frmCastUP.style.position = resizePosiitonType;
	frmCastUP.style.left = resizePosition.left;
	frmCastUP.style.top = resizePosition.top;
	frmCastUP.width = resizePosition.width;
	frmCastUP.height = resizePosition.height;
}
		
//=========================================================================================================================================================================================================

///Class for an element position and size properties:
function Position(left, top, width, height) 
{
	this.left = left;
	this.top = top;	
	this.width = width;
	this.height = height;
}

//=========================================================================================================================================================================================================    
    
/// Get true element position relative to root element:
function getElementPosition(element) 
{
	var curleft = 0;
	var curtop  = 0;

	var position = new Position(curleft, curtop, element.style.width, element.style.height);

	if (element.offsetParent) 
	{
		curleft = element.offsetLeft;
		curtop = element.offsetTop;
		while (element = element.offsetParent)
		{
			curleft += element.offsetLeft;
			curtop += element.offsetTop;
		}
	}

	position.left = curleft;
	position.top = curtop;

	return position;
}
    
//=========================================================================================================================================================================================================
		
function setPlayerCdbDebug(on)
{
    var messageCommand = "SET";
    var messageName = "cuCrossDomainBridge.debug";
    var messageValue = on;
    
    sendMessageToCUPlayer(messageCommand, messageName, messageValue);
}

//=========================================================================================================================================================================================================

function setPlayerVolume()
{
	var volume = document.getElementById("lstVolume").options[document.getElementById("lstVolume").selectedIndex].text;
	var messageCommand = "SET";
	var messageName = "cuPlayer.volume";
	var messageValue = volume;

	sendMessageToCUPlayer(messageCommand, messageName, messageValue);
}
	
//=========================================================================================================================================================================================================

function setPlayerMuteState(state)
{
	var messageCommand = "SET";
	var messageName = "cuPlayer.muteState";
	var messageValue = state;

	sendMessageToCUPlayer(messageCommand, messageName, messageValue);
}
	
//=========================================================================================================================================================================================================

function setPlayerProperty(propertyName, propertyValue)
{
	var messageCommand = "SET";
	var messageName = "property." + propertyName;
	var messageValue = propertyValue;

	sendMessageToCUPlayer(messageCommand, messageName, messageValue);
}	

//=========================================================================================================================================================================================================
      
function getPlayerVolume()
{
	var volume = document.getElementById("lstVolume").options[document.getElementById("lstVolume").selectedIndex].text
	var messageCommand = "GET";
	var messageName = "cuPlayer.volume";
	var messageValue = volume;

	sendMessageToCUPlayer(messageCommand, messageName, messageValue);
}

//=========================================================================================================================================================================================================

function getPlayerClipName()
{
	var messageCommand = "GET";
	var messageName = "cuPlayer.clipDetails";
	var messageValue = "";

	sendMessageToCUPlayer(messageCommand, messageName, messageValue);
}

//=========================================================================================================================================================================================================

function sendMessageToCUPlayer(messageCommand, messageName, messageValue, messageType)
{
	var frmCastUP = document.getElementById("CastUpFrame");

	cuSendMessageToWindow(frmCastUP.contentWindow, frmCastUP.src, messageCommand, messageName, messageValue);
}    

//=========================================================================================================================================================================================================

function setVolumeListValue(playerVolume)
{
	var lstVolume = document.getElementById("lstVolume");
	var roundVolume = Math.round(playerVolume/10) * 10;

	for (var i = 0; i < lstVolume.options.length; i++)
	{
		lstVolume.options[i].selected = false;

		if (lstVolume.options[i].text == roundVolume)
		{
			lstVolume.options[i].selected = true;
		}
	}
}  

//=========================================================================================================================================================================================================
