/* VIR -- Vertical Image Rotator 
		2005-04-20 DRH	Initial (as ContentRotator.js)
		2005-04-26 DRH	Support multiple VIRs
*/

var aVIR = new Array;

// ----------------------------------------------------------------------

function getElementsByIdPrefix( elTag, sIdPrefix) {
	var aElements = document.all ? document.all : document.getElementsByTagName( elTag);
	var aMatched = new Array;
	var iMatched = 0;
	var sId;
	for ( var i = 0; i < aElements.length; i++) {
		sId = aElements[i].id;
		// Compare prefix, e.g., SPIRE_, if we're doing a prefix match, otherwise compare the whole id
		var bMatch = sId.substring( 0, sIdPrefix.length) == sIdPrefix;
		if (bMatch) {
			aMatched[iMatched++] = aElements[i];
		}
	}
	return aMatched;
}

// ----------------------------------------------------------------------

function buildVIR( virID, uMargin, msInterval, nReps) {

	this.virID = virID;
	this.uMargin = uMargin;
	this.msInterval = msInterval;
	this.el = null;
	this.aImages = getElementsByIdPrefix( 'IMG', virID + '_');
	if (this.aImages.length == 0) {
//		window.status = 'No images with an ID prefix of ="' + virID +'_"';
		return;
	}
	this.nReps = (nReps * this.aImages.length) + 2;
	this.yBottomMarker = xPageY('BottomMarker');
	this.uShowMax = 1;

/*
	var xBL = xPageX('BottomMarker');
	var xVIR = xPageX(virID);
	var yVIR = xPageY(virID);
	stuff('xBL = ' + xBL + ', yBL = ' + yBL + ',virID = ' + virID + ', xvirID = ' + xVIR + ', yvirID = ' + yVIR);
*/
}

// ----------------------------------------------------------------------

function startVIRs() {

	for (var iVIR = 0; iVIR < aVIR.length; iVIR++) {

		var vir = aVIR[iVIR];
		vir.el  = xGetElementById( vir.virID);

		var elX = xPageX( vir.virID);
		var elY = xPageY( vir.virID);
		var xMax = 0;
		var yMax = 0;
		var yTotal = 0;
		var xI;
		var yI;

		if (vir.tot) {																			// tot = TimeOut Timer
			clearTimeout( vir.tot);
			vir.tot = null;
		}
		for (var i = 0; i < vir.aImages.length; i++) {
			vir.aImages[i].style.top = elY;
			vir.aImages[i].style.left = elX             - 5  /*BOGUS -10 ?why are images so far right?*/;
			xI = parseInt(vir.aImages[i].width);
			yI = parseInt(vir.aImages[i].height);
			xMax = ( xI > xMax) ? xI : xMax;								// find maximum width of an image
			yMax = ( yI > yMax) ? yI : yMax;								// find maximum height of an image
			yTotal += (yI + vir.uMargin);										// compute total height
/*stuff('virID =' + vir.virID + ', elX = ' + elX + ', xMax = ' + xMax + ', xI = ' + xI );*/
		}
		var yBottom = elY + yMax;
		while (yBottom < vir.yBottomMarker) {
			yBottom += yMax;
			vir.uShowMax++;
		}
		yBottom = (yBottom - elY);
		yBottom = (yBottom > yTotal) ? yTotal : yBottom; 
		// Replace the target innerHTML with an appropriately sized DIV to 
		// ensure space for the absolutely positioned images to follow.
		var sDIV = '<DIV STYLE="height:' + yBottom + 'px; width:' + xMax + 'px;"></DIV>';
		vir.el.innerHTML = sDIV;
		spinImageArray( vir);
		rotateImages( vir);
	}
}

// ----------------------------------------------------------------------

function rotateImages( vir) {

	var firstTag = vir.aImages[0];
	var yTop = xPageY( vir.el);														// original top
	var yOffset = 0;

	clearTimeout( vir.tot);
	vir.tot = null;

	if (vir.nReps-- <= 0) return;

	for (var i = 0; i < vir.aImages.length; i++) {
		if (i == vir.aImages.length - 1) {													// last one?
			vir.aImages[i] = firstTag;
			vir.aImages[i].style.top = yTop + yOffset;								// original top + accumulated y offset
		} else {
			vir.aImages[i] = vir.aImages[i + 1];
			vir.aImages[i].style.top = yTop + yOffset;								// original top + accumulated y offset
			yOffset += parseInt(vir.aImages[i].height) + vir.uMargin;	// add the height of this image + some.
		}
		if (i < vir.uShowMax) {
			vir.aImages[i].style.visibility = "visible";
		} else {
			vir.aImages[i].style.visibility = "hidden";
		}
	}
	vir.tot = setTimeout( function() { rotateImages( vir); }, vir.msInterval);

/*
stuff( 'rotateImages: vir.el.id = ' + vir.el.id 
											+ ', vir.nReps = ' + vir.nReps
											+ ', vir.msInterval = ' + vir.msInterval
											+ ', vir.tot = ' + vir.tot);
*/
}

// ----------------------------------------------------------------------

function spinImageArray( vir) {

	var nSpins = Math.round(Math.random() * vir.aImages.length) + 1;
	for (var y = 0; y < nSpins; y++) {
		var firstOne = vir.aImages[0];
		for (var i = 0; i < vir.aImages.length; i++) {
			vir.aImages[i] = vir.aImages[i + 1];
		}
		vir.aImages[vir.aImages.length-1] = firstOne;
	}
}

// ----------------------------------------------------------------------

function clearVIRTimeouts() {

	for( var i = 0; i < aVIR.length; i++) {
		clearTimeout( aVIR[i].tot);
	}
}

// ----------------------------------------------------------------------

function CROPL( url) { // Content Rotator Off Page Link

	var winXY = new getWindowXY();
	var winX = Math.round(winXY[0] * 0.9); 
	var winY = Math.round(winXY[1] * 0.9); 

	var sParams = 'width=' + winX + 
								', height=' + winY +
								', menubar=yes, scrollbars=yes, toolbar=yes, resizable=yes';

	window.open( url, 'NJSKC', sParams);
}

// ----------------------------------------------------------------------

function stuff( it) {

	var tag = document.getElementById( 'stuff');
	if (it == '') tag.innerHTML = '';
	tag.innerHTML += it + '<BR>';
}