
function RealTimeView(url, targetElement, refreshInterval)
{
	this.TargetElement = targetElement;
	this.RefreshInterval = refreshInterval;
	this.BusyIndicatorElement = null;

	var m_oSelf = this;
	var m_oXmlHttp = new XmlHttp(url);
	var m_sUrl = url;
	
	m_oXmlHttp.trace = false;
	m_oXmlHttp.critical = false;
	
	this.Start = function(immediate)
	{
		var bImmediate = typeof(immediate) == "undefined" ? true : immediate;
		
		if (this.TargetElement == null) {
			alert(Translate(MSG_CANNOT_START_REALTIMEVIEW) + "\nURL: " + m_sUrl);
			return;
		}
		if (bImmediate) {
			Refresh();
		} else {
			window.setTimeout(Refresh, this.RefreshInterval);
		}
	}
	
	m_oXmlHttp.onInit = function()
	{
		SetBusyStatus(true);
	}
	
	m_oXmlHttp.onError = function(status, statusText)
	{
		alert("Error (" + status + "): " + statusText);
	}
	
	m_oXmlHttp.onDone = function(response)
	{
		try
		{
			if (response != null) {
				m_oSelf.TargetElement.innerHTML = response;
			}
			SetBusyStatus(false);
		} 
		finally
		{
			window.setTimeout(Refresh, m_oSelf.RefreshInterval);
		}
	}
	
	var SetBusyStatus = function(busy)
	{
		if (m_oSelf.BusyIndicatorElement != null)
		{
			m_oSelf.BusyIndicatorElement.style.display = busy ? "" : "none";
		}
	}
	
	var Refresh = function()
	{
		m_oXmlHttp.send();
	}
	

}