//-------------------------------------

var UPDATE_TIME_MS			= 500; // 0.5 second
var UPDATE_PING_LIMIT_MS	= 100; // 0.1 second

var WIDTH_PX				= 250;
var HEIGHT_PX				= 20;

var NUM_RANDOM_URL_CHARS	= 7;

//-------------------------------------

var m_DBGKey;
var m_ProgURL;
var m_PrevTime = -1;

//-------------------------------------

function StartProgressBar(_ProgURL,_Key)
{
	try
	{
		$(function() {$('#scroll-panel').jScrollPane();});
	}
	catch (err)
	{
	}

	DBG.Print("ProgURL = " + _ProgURL);
	DBG.Print("Key = " + _Key);
	
	grayOut(true,{'opacity':'60','zindex':'50'});
	
	m_DBGKey = _Key;

	m_ProgURL = _ProgURL + "?Key=" + _Key;

	var Elements = document.getElementsByTagName("*");
	for (var i = 0; i < Elements.length; i++)
	{
		var ControlID = Elements[i].getAttribute("ID");
		if (ControlID != null)
		{
			var Control = Elements[i];

			if (ControlID == "ProgressBar")
			{	
				Control.style.display = "block";	
			}
			else if (ControlID == "ProgressBarSlider")
			{
				Control.style.width = WIDTH_PX + 'px';
				Control.style.height = HEIGHT_PX + 'px';
			}
			else if (ControlID == "ProgressBarSliderButton")
			{
				Control.style.height = (HEIGHT_PX - 1) + 'px';
			}
		}
	}

	SendProgressRequest(m_ProgURL);
}

//-------------------------------------

function SendProgressRequest(_URL)
{
	var URL = _URL + GetRandomCharString(NUM_RANDOM_URL_CHARS);
	DBG.Print("Request from : " + URL);

	if (window.XMLHttpRequest)
	{
		SendXMLHttpRequest(URL);
	}
	else if (window.ActiveXObject)
	{
		SendActiveXRequest(URL);
	}
}

//-------------------------------------

function GetRandomCharString(NumChars)
{
	var sASCII = "&Rand=";

	var NUM_CHARS_IN_ALPHABET = 26;
	var ASCII_a_OFFSET = 97;

	for (var i = 0;i < NumChars;i++)
	{
		sASCII += String.fromCharCode(Math.floor(Math.random() * NUM_CHARS_IN_ALPHABET) + ASCII_a_OFFSET);
	}
	return (sASCII);
}

//-------------------------------------

function SendXMLHttpRequest(_URL)
{
	var Req = new XMLHttpRequest();
	if (Req != null)
	{
		Req.onreadystatechange = function()
		{
			if (Req.readyState == 4)
			{
				if (Req.status == 200)
				{
					GetProgressResponse(Req.responseText);
				}
				else
				{
					//DBG.Print("Req.statusText = " + Req.statusText);
				}
			}
		}

		Req.open("GET", _URL, true);
		Req.send(null);

		var CurrentDateTime = new Date();
		m_PrevTime = CurrentDateTime.getTime();

		//DBG.Print("XMLHttp SetProgressRequest : Index : " + m_DBGKey);
	}
}

//-------------------------------------

function SendActiveXRequest(_URL)
{
	var Req = new ActiveXObject("Microsoft.XMLHTTP");
	if (Req != null)
	{
		Req.onreadystatechange = function()
		{
			if (Req.readyState == 4)
			{
				if (Req.status == 200)
				{
					GetProgressResponse(Req.responseText);
				}
				else
				{
					//DBG.Print("Req.statusText = " + Req.statusText);
				}
			}
		}

		Req.open("GET", _URL, true);
		Req.send();
		
		var CurrentDateTime = new Date();
		m_PrevTime = CurrentDateTime.getTime();

		//DBG.Print("ActiveX SetProgressRequest : Index : " + m_DBGKey);
	}
}

//-------------------------------------

function GetProgressResponse(ResponseText)
{
	try
	{
		$(function() {$('#scroll-panel').jScrollPane();});
	}
	catch (err)
	{
	}

	DBG.Print("GetProgressResponse : Index : " + m_DBGKey + ": Response : " + ResponseText);

	var ID = ResponseText.charAt(0);
	var Data = ResponseText.slice(1);

	var PixelWidthPcnt = 100;
	if (ID == 'v')
	{
		PixelWidthPcnt = parseInt(Data);
		if (PixelWidthPcnt < 0)
		{
			PixelWidthPcnt = 0;
		}
	}

	var Elements = document.getElementsByTagName("*");
	for (var i = 0; i < Elements.length; i++)
	{
		if (Elements[i].getAttribute("ID") == "ProgressBarSliderButton")
		{
			Elements[i].style.width = ((WIDTH_PX * PixelWidthPcnt) / 100).toString() + 'px';
			break;
		}
	}

	if (ID == 'v')
	{
		var UpdateTime = UPDATE_TIME_MS;

		var CurrentDateTime = new Date();
		var PingTime = (CurrentDateTime.getTime() - m_PrevTime);
		if (PingTime >= UPDATE_PING_LIMIT_MS)
		{
			UpdateTime += (PingTime * 2);
		}

		//DBG.Print('UpdateTime = ' + UpdateTime);

		//DBG.Print('Response = ' + PixelWidthPcnt + '%');
		setTimeout("SendProgressRequest(m_ProgURL)",UpdateTime);
	}
	else
	{
		DBG.Print('Response = ' + ResponseText);
		if (ID == 'r')
		{
			window.location = Data;
		}
		else if (ID == 'd')
		{
			// Used as a counter to allow .pdf to be downloaded.
			// Set to 2 because IE may require 2nd pass for download confirmation.
			// And this still works otherwise, 'cos 2nd call is away from download page.
			window.name = "2"; 
			
			window.location = Data;
		}
	}
}

//-------------------------------------
//-------------------------------------

function grayOut(vis, options) 
{
	options = options || {}; 
	var zindex = options.zindex || 50;
	var opacity = options.opacity || 70;
	var opaque = (opacity / 100);
	var bgcolor = options.bgcolor || '#000000';
	var dark=document.getElementById('BlackOut');

	if (!dark) 
	{
		var tbody = document.getElementsByTagName("body")[0];
		var tnode = document.createElement('div');           
		tnode.style.position='absolute';                 
		tnode.style.top='0px';                           
		tnode.style.left='0px';                         
		tnode.style.overflow='hidden';                           
		tnode.style.display='none'; 
		tnode.style.zIndex = 999;                     
		tnode.id='BlackOut';
		tbody.appendChild(tnode);
		dark=document.getElementById('BlackOut');
	}

	if (vis) 
	{
		var pageWidth='100%';
		var pageHeight='100%';

		if ( document.body && ( document.body.scrollWidth || document.body.scrollHeight ) ) 
		{
			pageWidth = document.body.scrollWidth+'px';
			pageHeight = document.body.scrollHeight+'px';
		} 
		else if ( document.body.offsetWidth ) 
		{
			pageWidth = document.body.offsetWidth+'px';
			pageHeight = document.body.offsetHeight+'px';
		} 

		dark.style.opacity=opaque;                      
		dark.style.MozOpacity=opaque;                   
		dark.style.filter='alpha(opacity='+opacity+')'; 
		dark.style.zIndex= 999;        
		dark.style.backgroundColor=bgcolor;  
		dark.style.width= pageWidth;
		dark.style.height= pageHeight;
		dark.style.display='block';                          
	} 
	else 
	{
		dark.style.display='none';
	}
}
