

var ProgressBar_percentIncrement = 93;
var ProgressBar_dummyWidth = 0.09;
var ProgressBar_slowdownFactor = 0.75;
var ProgressBar_dummyAuthorized = false;
var ProgressBar_StartDate;
var objProgressBarButton = document.getElementById("ProgressBarButton");
var objProgressBarHeader = document.getElementById("ProgressBarHeader");
var objProgressBarStatus = document.getElementById("ProgressBarStatus");
var objProgressBarContainer = document.getElementById("ProgressBarContainer");
var objProgressBarLevel = document.getElementById("ProgressBarLevel");
var objProgressBarWindow = document.getElementById("ProgressBar");


function NxProgressBar_Update(controlID,fractionComplete,status)
{
	var objProgressBar = document.getElementById(controlID);
	if (objProgressBar == null) return
	ProgressBar_dummyAuthorized = false;
	if (status != null) objProgressBar.all["NxProgressBar_Status"].innerHTML = status;	
	var objBar = objProgressBar.all["ProgressBarLevel"];
	var intWidth = parseInt(fractionComplete * (objBar.parentElement.offsetWidth - 6))
	objBar.style.width = intWidth;
}

function NxProgressBar_Hide(controlID)
{
	if (controlID == null)
	{
		controlID = event.srcElement.parentElement.id;
	}
	var objRemove = document.getElementById(controlID);
	ProgressBar_dummyAuthorized = false;
	if (objRemove == null) return;
	objRemove.removeNode(true);
}

function NxProgressBar_Show(controlID, header, status, targetObj, movingBar, estimatedDelay, showOKButton, okButtonFunction, showCancelButton, cancelButtonFunction)
{
	var progressBarWidth = 200;
	var progressBarHeight = 80;
	
	if (controlID == null) controlID = "NxProgressBar1";
	if (movingBar == null) movingBar = false;
	if (estimatedDelay == null) estimatedDelay = 15;
	
	if (document.getElementById(controlID) != null) document.getElementById(controlID).removeNode(true);
	
	var oldBar = document.getElementById("NxProgressBar");
	var newProgressBar = oldBar.cloneNode(true);


	newProgressBar.EstimatedDelay = estimatedDelay;
	newProgressBar.id = controlID;
	if (header != null) newProgressBar.all["NxProgressBar_Header"].value = header;
	if (status != null) newProgressBar.all["NxProgressBar_Status"].innerHTML = status;
	
	var leftPos, topPos;
	
	if (targetObj != null)
	{
		if (NxUtils_IsHidden(targetObj))
		{
			newProgressBar.removeNode();
			return;
		}
		leftPos = NxUtils_GetPageOffsetLeft(targetObj) + ((targetObj.offsetWidth - progressBarWidth) / 2);
		topPos = NxUtils_GetPageOffsetTop(targetObj) + ((targetObj.offsetHeight - progressBarHeight) / 2);
	}
	else
	{
		leftPos = (document.body.offsetWidth - progressBarWidth) / 2;
		topPos = (document.body.offsetHeight - progressBarHeight) / 2;
	}

	newProgressBar.style.zIndex = "99";
	newProgressBar.style.left = leftPos;
	newProgressBar.style.top = topPos;
	newProgressBar.style.display = "";
	document.body.insertAdjacentElement("BeforeEnd",newProgressBar);

	//return
	if (movingBar)
	{
		ProgressBar_dummyAuthorized = true;
		ProgressBar_dummyWidth = 0.09;
		ProgressBar_percentIncrement = 93;
		document.getElementById(controlID).StartTime = (new Date()).valueOf();
		MoveDummyProgressBar(controlID);
	}
	else
	{
		ProgressBar_dummyAuthorized = false;
	}	
}

function MoveDummyProgressBar(controlID)
{
	
	ProgressBar_percentIncrement = ProgressBar_percentIncrement * ProgressBar_slowdownFactor;
	ProgressBar_dummyWidth += ProgressBar_dummyWidth * (ProgressBar_percentIncrement/100)

	var objProgressBar = document.getElementById(controlID);
	if (objProgressBar == null) return;

	var t1 = objProgressBar.StartTime
	var t2 = (new Date()).valueOf();
	var t = eval(t2 - t1)/1000;

	var ed	= eval(objProgressBar.EstimatedDelay);
	
	var estDelayPoint = 9; //The Progress bar will be at 9/10 at the estimated delay point in time
	var x = 1 - (ed/((t * estDelayPoint) + ed)); //This parabolic function will never reach 1.

	var objBar = objProgressBar.all["ProgressBarLevel"];
	var intWidth = parseInt(x * (objBar.parentElement.offsetWidth - 6))
	
	if(ProgressBar_dummyAuthorized)
	{
		try
		{
			objBar.style.width = intWidth;
			self.setTimeout("MoveDummyProgressBar('" + controlID + "')",200)
		}
		catch(e){objProgressBar.removeNode();}
	}
}

function NxProgressBar_AddButton(controlID,buttonID,buttonText,functionToCall,buttonWidth)
{
	var DEFAULT_BUTTON_WIDTH = "";
	var DEFAULT_BUTTON_MARGIN = "6px 2px 0px 2px";
	
	var objProgressBar = document.getElementById(controlID);
	if (objProgressBar == null) return;
	
	var objButtons = objProgressBar.all["NxProgressBar_Buttons"];

	objButtons.style.display = "";
	
	var objNewButton = document.createElement("<INPUT TYPE=BUTTON>");
	objNewButton.id = buttonID;
	objNewButton.style.width = (buttonWidth == null ? DEFAULT_BUTTON_WIDTH : buttonWidth);
	objNewButton.style.margin = DEFAULT_BUTTON_MARGIN;
	objNewButton.value = buttonText;
	objNewButton.className = "NxButton";
	objNewButton.attachEvent("onclick",new Function(functionToCall));
	objButtons.appendChild(objNewButton);
}


function NxProgressBar_RemoveButton(controlID,buttonID)
{
	var objProgressBar = document.getElementById(controlID);
	if (objProgressBar == null) return;
	
	var objRemove = objProgressBar.all[buttonID];
	if (objRemove != null) objRemove.removeNode();
	
	var objButtons = objProgressBar.all["NxProgressBar_Buttons"];
	if (objButtons.children.length == 0) objButtons.style.display = "none";
}
