var STATS_OPCODE_PLAY		= "PLAY_";
var STATS_OPCODE_STOP		= "STOP_";
var STATS_OPCODE_PAUSE		= "PAUSE";
var STATS_OPCODE_MUTE		= "MUTE_";
var STATS_OPCODE_UNMUTE		= "UNMUT";
var STATS_OPCODE_FF		= "FSTFW";
var STATS_OPCODE_REW		= "REWND";
var STATS_OPCODE_VOLUME		= "VOLUM";
var STATS_OPCODE_FULLSCREEN	= "FLSCR";
var STATS_OPCODE_SEEK		= "SEEK_";
var STATS_OPCODE_CHANGE_SPEED	= "CHSPD";
var STATS_OPCODE_HELP		= "HELP_";

var gStats_UnmutePending	= false;
var gStats_MutePending		= false;
var gStats_ClipMediaID		= "-";
var gStats_ClipDuration		= 0;
var gStats_onPlayerStateChange	= onPlayerStateChange;
var gStats_lastVolumeChange	= new Date(2000,0,1);
var gStats_prevMuteState	= false;
var gStats_prevOpCode		= "";

try
{
	gStats_onPlayerStateChange = onPlayerStateChange; 		// Save reference to onPlayerStateChange() function
	onPlayerStateChange = stats_onPlayerStateChange;		// Replace onPlayerStateChange() function with our own code
}
catch(e)
{
}

function stats_onPlayerStateChange(pNewState, pOldState)
{
	stats_update_player_vars();

	gStats_onPlayerStateChange(pNewState, pOldState);
}

function stats_update_player_vars()
{
	try
	{
		var clipMediaID = player.player_GetASXParameterValue("CastUP_Content_ClipMediaID");
		var clipDuration = Math.floor(player.player_GetClipDuration());

		if (clipDuration > 0)
		{
			gStats_ClipDuration = clipDuration;
		}
		
		if (clipMediaID != null)
		{
			if (clipMediaID != "")
			{
				gStats_ClipMediaID = clipMediaID;
			}
		}
	}
	catch(e)
	{
	}
}

function stats_log_op(pOpCode)
{
	stats_update_player_vars();

	try
	{
		if (gStatisticsEnabled)
		{
			var currentMuteState	= player.player_GetVolumeMute();
			var currentPlayerState	= player.player_GetState();

			switch(pOpCode)
			{
				case STATS_OPCODE_MUTE:
					if (currentMuteState) return;
					if (gStats_prevMuteState && gStats_prevOpCode == STATS_OPCODE_VOLUME) return;
					if (gStats_prevOpCode == STATS_OPCODE_MUTE) return;
					gStats_UnmutePending 	= false;
					gStats_MutePending	= true;
					break;

				case STATS_OPCODE_UNMUTE:
					if (!currentMuteState) return;
					if (!gStats_prevMuteState && gStats_prevOpCode == STATS_OPCODE_VOLUME) return;
					if (gStats_prevOpCode == STATS_OPCODE_UNMUTE) return;
					gStats_UnmutePending 	= true;
					gStats_MutePending	= false;
					break;
				
				case STATS_OPCODE_VOLUME:
					var nowD = new Date();
					var delta = nowD.valueOf() - gStats_lastVolumeChange.valueOf();
					
					delta = Math.floor(delta / 1000);

					gStats_lastVolumeChange = nowD;
					
					if (delta < 2) return;
					
					break;
			}

			if (	pOpCode != STATS_OPCODE_MUTE &&
				pOpCode != STATS_OPCODE_UNMUTE)
			{
				stats_log_op_bg(pOpCode);
			}

			if (currentPlayerState != player.PLAYER_STOPPED)
			{
				if (gStats_MutePending)
				{
					stats_log_op_bg(STATS_OPCODE_MUTE);

					gStats_MutePending = false;
				}

				if (gStats_UnmutePending)
				{
					stats_log_op_bg(STATS_OPCODE_UNMUTE);

					gStats_UnmutePending = false;
				}
			}
			
			gStats_prevMuteState = currentMuteState;
			gStats_prevOpCode = String(pOpCode).valueOf();
		}
	}
	catch(e)
	{
	}
}

function stats_log_op_bg(pOpCode)
{
	var opCode = String(pOpCode).valueOf();
	
	while (opCode.length < 5)
		opCode += "_";
		
	var clipPosition	= Math.floor(player.player_GetClipCurrentPosition());
	var clipDuration	= gStats_ClipDuration;
	var clipMediaID		= gStats_ClipMediaID;
	
	var qs = "op=" + escape(opCode) + "&cid=" + escape(gClientID) + "&ClipMediaID=" + escape(clipMediaID) + "&position=" + escape(clipPosition) + "&duration=" + clipDuration;
	var url = "stats_log_op.asp?" + qs;

	setTimeout("stats_http_get_bg(\"" + url + "\");", 1);	
}

function stats_http_get_bg(pURL)
{
	var httpResponse = stats_http_get(pURL);
	
	// alert(httpResponse);
}

function stats_lz(pNum, pMinLen)
{
	var str = String(pNum).valueOf();
	
	while (str.length < pMinLen)
		str = "0" + str;
	
	return str;
}

function stats_http_get(pURL)
{
	try
	{
		var objHttp = new ActiveXObject("MSXML2.XMLHTTP");
		objHttp.open("GET", pURL, false);
		objHttp.send();

		return String(objHttp.responseText).valueOf();
	}
	catch(e)
	{
		return null;
	}
}
