﻿var ExternalTransferController = function()
{
	var UNDEF = "undefined",
		_TransferWindows = new Object();
	
	function GetFlashUI()
	{
		return swfobject.getObjectById("FlashUI");
	}
	
	function OpenTransferWindow(assetID, url)
	{
		CloseTransferWindow(assetID);
		
		_TransferWindows[GetWindowName(assetID)] = window.open(url, GetWindowName(assetID),'left=20,top=20,width=500,height=110,resizable=0,scrollbars=0,location=0,toolbar=0,menubar=0,status=0');
	}
	
	function CloseTransferWindow(assetID)
	{
		var transferWindow = GetTransferWindow(assetID);
		
		if(typeof transferWindow == UNDEF)
			return;
		
		delete _TransferWindows[GetWindowName(assetID)];
		
		transferWindow.close();
	}
	
	function GetTransferWindow(assetID)
	{
		return _TransferWindows[GetWindowName(assetID)];
	}
	
	function GetWindowName(assetID)
	{
		return 'ExternalTransferAssetID' + assetID;
	}
	
	return {
		
		OpenWindow: function(assetID, url)
		{
			OpenTransferWindow(assetID, url);
		},
		
		StartTransfer: function(assetID)
		{
			var transferWindow = GetTransferWindow(assetID);
			
			if(typeof transferWindow == UNDEF)
				return;
			
			transferWindow.ExternalTransfer.StartTransfer();
		},
		
		CancelTransfer: function(assetID)
		{
			CloseTransferWindow(assetID);
		},
		
		TransferStarted: function(assetID, filename, filesize)
		{
			GetFlashUI().ExternalTransferStarted(assetID, filename, filesize);
		},
		
		TransferUpdateProgress: function(assetID, bytesSent)
		{
			GetFlashUI().ExternalTransferUpdateProgress(assetID, bytesSent);
		},
		
		TransferCompleted: function(assetID)
		{
			CloseTransferWindow(assetID);
			GetFlashUI().ExternalTransferCompleted(assetID);
		},
		
		TransferCanceled: function(assetID)
		{
			CloseTransferWindow(assetID);
			GetFlashUI().ExternalTransferCanceled(assetID);
		},
		
		TransferFailed: function(assetID, message, stackTrace)
		{
			CloseTransferWindow(assetID);
			GetFlashUI().ExternalTransferFailed(assetID, message, stackTrace);
		}
	};
}();
