/*
| -------------------------------------------------------
| Progressbar - Version 2.0
| Author: Brian Gosselin of http://scriptasylum.com
| -------------------------------------------------------
| Adapted by Feng Wu, http://come.to/feng, feng@ustc.edu
| 11/6/01 5:00PM
| -------------------------------------------------------
*/

// browser version info
var NS4 = (navigator.appName.indexOf("Netscape") >= 0
		&& parseFloat(navigator.appVersion) >= 4
		&& parseFloat(navigator.appVersion) < 5) ? true : false;
var NS6 = (parseFloat(navigator.appVersion) >= 5
		&& navigator.appName.indexOf("Netscape") >=0 )? true: false;
var IE4 = (document.all) ? true : false;

// note: var vImgsToLoad is from the page that uses this script
var nImages = vImgsToLoad.length;	// its size
var vImgsLoading = new Array();		// images in loading
var nImgLoaded = 0;

var tLoad = 20;	// ms

var colorLoaded   = '#8888FF';	// color: progress bar
var colorUnloaded = '#FFFFFF';	// color: background of unloaded area
var colorBorder   = '#6666FF';	// color: border
var nBarHeight = 20;			// height: progress bar (in pixels)
var nBarWidth  = 350;			// width : progress bar
var nBlockWidth = nBarWidth / nImages;	// width: every block

var barFrame, barRunner;
var bBarLoaded = false;
var vLoadTimes = new Array();


// html codes to be shown
var vHtml = (NS4) ? '<layer name=barFrame bgcolor=' + colorBorder + ' visibility=hide>' : '<div id=barFrame style="position:absolute; visibility:hidden; background-color:' + colorBorder + '">';

vHtml += '<table cellpadding=0 cellspacing=1 border=0><tr><td align=center valign=center width=' + nBarWidth + ' height=' + nBarHeight + '>';

if (NS4) vHtml += '<ilayer width=100% height=100%><layer bgcolor=' + colorUnloaded + ' top=0 left=0 width=100% height=100%>';

// a few common variables
var vHtml1 = '<table cellpadding=0 cellspacing=0 border=0><tr><td align=center valign=center bgcolor='
var vHtml2 = ' width=' + nBarWidth + ' height=' + nBarHeight + '><font face=arial color='
var vHtml3 = ' size=1>Loading images...</font></td></tr></table>';

// before loaded
vHtml += vHtml1 + colorUnloaded + vHtml2 + colorLoaded + vHtml3;

if (NS4) vHtml += '</layer>';

// being loaded
vHtml += (NS4) ?
	'<layer name=barRunner bgcolor=' + colorLoaded + ' top=0 left=0 width=100% height=' + nBarHeight + '>'
	:
	'<div id=barRunner style="position:absolute; top:1px; left:1px; width:' + nBarWidth + 'px; height:' + nBarHeight + 'px; background-color:' + colorLoaded + '; z-index:100">';

// after loaded
vHtml += vHtml1 + colorLoaded + vHtml2 + colorUnloaded + vHtml3;

vHtml += (NS4) ? '</layer></ilayer>' : '</div>';
vHtml += '</td></tr></table>';
vHtml += (NS4) ? '</layer>' : '</div>';

document.write(vHtml);

// load
function loadBar()
{
	if (NS4)
	{
		barFrame  = document.barFrame;
		barRunner = document.barFrame.document.layers[0].document.barRunner;
	}
	else if (NS6)
	{
		barFrame  = document.getElementById('barFrame');
		barRunner = document.getElementById('barRunner');
	}
	else if (IE4)
	{
		barFrame  = document.all.barFrame;
		barRunner = document.all.barRunner;
	}

	updateLayer(barRunner, 0, 0, nBarHeight, 0);

	window.onresize = resizeBar;
	resizeBar();

	for (n = 0; n < nImages; n++)
	{
		vImgsLoading[n] = new Image();
		vImgsLoading[n].src = vImgsToLoad[n];
		vLoadTimes[n] = 0;	// initialize the array
		setTimeout('checkProgress(' + n + ')', n * tLoad);	// check them one after another
	}
}

// resize
function resizeBar()
{
	if ( !bBarLoaded )
	{
		var nTempX = (IE4) ? document.body.clientWidth  : window.innerWidth;
		var nTempY = (IE4) ? document.body.clientHeight : window.innerHeight;

		var nXPos  = (nTempX - nBarWidth) / 2;
		var nYPos  = nTempY / 2;

		if (NS4)
		{
			barFrame.moveTo(nXPos, nYPos);

			barFrame.visibility = "show";
		}
		else if (IE4 || NS6)
		{
			barFrame.style.left = nXPos + 'px';
			barFrame.style.top  = nYPos + 'px';

			barFrame.style.visibility = "visible";
		}
	}
}

// check for every image
function checkProgress(index)
{
	if (vImgsLoading[index].complete)	// good
	{
		updateBar();
	}
	else if (vLoadTimes[index] < 2)	// not successful
	{
		vLoadTimes[index] ++;		// increse count
		setTimeout('checkProgress(' + index + ')', tLoad);	// schedule again
	}
	else	// too many failures already
	{
//		alert("Error: image not successfully loaded.");
		updateBar();	// then go on
	}
}

// update
function updateBar()
{
	nImgLoaded ++;

	updateLayer(barRunner, 0, 0, nBarHeight, nImgLoaded * nBlockWidth);

	// hide bar when finished
	if ( nImgLoaded >= nImages )
	{
		setTimeout('hideBar()', 500);
		bBarLoaded = true;
	}
}

// hide when finish
function hideBar()
{
	(NS4)? barFrame.visibility = "hide" : barFrame.style.visibility = "hidden";
}

// update layer
function updateLayer(layer, ct, cl, cb, cr)
{
	if (NS4)
	{
		layer.clip.top    = ct;
		layer.clip.left   = cl;
		layer.clip.bottom = cb;
		layer.clip.right  = cr;
	}
	else if (IE4 || NS6)
		layer.style.clip = 'rect(' + ct + ' ' + cr + ' ' + cb + ' ' + cl + ')';
}

window.onload = loadBar;