// время прохождения первой половины прогрессбара, в секундах
var PB_FirstHalfSeconds = 50;

// время прохождения второй половины прогрессбара, в секундах
var PB_SecondHalfSeconds = 60;
// это, по идее, трогать не желательно
var PB_ProgressBarHeight = 0;
var PB_ProgressBarHeightDelta = 1;
var PB_StopShowing = false;
var PB_tmpProgressBarValue = 0;
var PB_ProgressBarValueStep = 1;
var PB_SpeedUp = 1;
var PB_ForcedStop = false;

// в начале надо вызывать вот это
function PB_StartShow()
{
	PB_StopShowing = false;
	PB_ProgressBarShow();
	PB_tmpProgressBarAnimate();
}

// в конце надо вызывать вот это
function PB_EndShow()
{
	PB_StopShowing = true;
	PB_ProgressBarToEnd();
}

// а это запустится в случае, если прогрессбар не остановили до того, как он сам дошёл до конца
function PB_DrawTimeoutMessage()
{
	_("PB_TMP_Timeout").style.display = "block";
	_("OCTASC_WS_Query").disabled = false;
}

// мягкое появление прогрессбара. вызывать отдельно не надо
function PB_ProgressBarShow()
{
	if(PB_StopShowing)
		return true;
	
	PB_SpeedUp = 1;
	PB_ProgressBarValueStep = 1;
	PB_ForcedStop = false;

	PB_ProgressBarHandler = _("PB_ProgressBarHandlerID");
	
	if(PB_ProgressBarHeight < 20)
	{
		PB_ProgressBarHandler.style.display = 'block';
		PB_ProgressBarHeight += PB_ProgressBarHeightDelta;
		PB_ProgressBarHandler.style.height = PB_ProgressBarHeight + 'px';
		setTimeout("PB_ProgressBarShow()", 3);
	}
}

// мягкое удаление прогрессбара. вызывать отдельно не надо
function PB_ProgressBarHide()
{
	PB_StopShowing = true;
	PB_ProgressBarHandler = _("PB_ProgressBarHandlerID");
	if(PB_ProgressBarHeight > 1)
	{
		PB_ProgressBarHeight -= PB_ProgressBarHeightDelta;
		PB_ProgressBarHandler.style.height = PB_ProgressBarHeight + 'px';
		setTimeout("PB_ProgressBarHide()", 3);
	}
	else
	{
		_("PB_ProgressBarTableHandlerID").style.display = "none";
		PB_ProgressBarHandler.style.display = 'none';
	}
}

// принудительное окончание работы прогрессбара. вызывать отдельно не надо
function PB_ProgressBarToEnd()
{
	PB_ForcedStop = true;
	PB_SpeedUp = 0.1;
	PB_ProgressBarValueStep = 100;
	PB_tmpProgressBarAnimate();
}

// обновление прогрессбара. вызывать отдельно не надо
function PB_ProgressBarUpdate(PB_CurrentProgressPercents)
{
	PB_ProgressBar = _("PB_ProgressBarID");
	PB_ProgressBar.style.width = (PB_CurrentProgressPercents * 3) + 'px';
	if(PB_CurrentProgressPercents >= 100)
	{
		PB_ProgressBarHide();
		if(!PB_ForcedStop)
			PB_DrawTimeoutMessage();
	}
}

// собственно анимация прогрессбара. вызывать отдельно не надо
function PB_tmpProgressBarAnimate()
{
	PB_tmpProgressBarValue += PB_ProgressBarValueStep;
	PB_ProgressBarUpdate(PB_tmpProgressBarValue);
	if(PB_tmpProgressBarValue < 100)
	{
		if(PB_tmpProgressBarValue < 50)
			setTimeout("PB_tmpProgressBarAnimate()", ((PB_FirstHalfSeconds * 1000) / 50) * PB_SpeedUp);
		else
			setTimeout("PB_tmpProgressBarAnimate()", ((PB_SecondHalfSeconds * 1000) / 50) * PB_SpeedUp);
	}
	else
	{
		PB_tmpProgressBarValue = 0;
	}
}
