function updateThumbnailIfNeeded( idOfResource, numberOfTries ) {
	var toBeChecked = new Array();
	var idToImageRef = new Array();
	var correspondingImage = getThumbnailImageElement();
	
	if ( correspondingImage != null ) {
		toBeChecked.push( idOfResource );
		idToImageRef[idOfResource] = correspondingImage;

		updateThumbnails( toBeChecked, numberOfTries, idToImageRef );
	}
}

function updateTinyThumbnailsIfNeeded( numberOfTries ) {
	updateFirstTinyThumbnailList( numberOfTries );
	updateSecondTinyThumbnailList( numberOfTries );
}

function updateFirstTinyThumbnailList( numberOfTries ) {
	var unsortedList = document.getElementById( 'tinyThumbnailList1' );
	var images = unsortedList.getElementsByTagName('img');
	checkThumbnails( images, numberOfTries );
}

function updateSecondTinyThumbnailList( numberOfTries ) {
	var unsortedList = document.getElementById( 'tinyThumbnailList2' );
	var images = unsortedList.getElementsByTagName('img');
	checkThumbnails( images, numberOfTries );
}

function checkThumbnails( arrayOfImages, numberOfTries ) {
	var toBeChecked = new Array();
	var idToImageRef = new Array();
	for ( var i = 0; i < arrayOfImages.length; i++ ) {
		var current = arrayOfImages[i];
		var sourceAttribute = current.src;
		if ( sourceAttribute.indexOf( "resourceThumbnailSmall?" ) >= 0 ) {
			var matchArray = sourceAttribute.match( /contentID=(\S+)/ );
			if ( matchArray != null ) {
				var idToUse = matchArray[1];
				toBeChecked.push( idToUse );
				idToImageRef[idToUse] = current;
			}
		}
	}
	updateThumbnails( toBeChecked, numberOfTries, idToImageRef );
}

function updateThumbnails( toBeChecked, numberOfTries, idToImageRef ) {
	if ( toBeChecked.length > 0 ) {
		var jsonArray = Object.toJSON( toBeChecked );
		new Ajax.Request("/AloeView/ajax/thumbnailCheck", {
			method: 'get',
			parameters: {
	            resourceIdList: jsonArray,
	            x: new Date().getTime()
			},
			onSuccess: function( transport ) {
				var response = transport.responseText;
				var jsonArray = response.evalJSON();
				evaluateArrayOfResourceIds( jsonArray, numberOfTries, idToImageRef );
			},
			onFailure: function( transport ) {
				// do nothing
			}
		});
	}
}

function evaluateArrayOfResourceIds( resourceIds, numberOfTries, idToImageRef ) {

	var nextIds = new Array();
	for ( var i = 0; i < resourceIds.length; i++ ) {
		var current = resourceIds[i];
		var currentState = current.state;
		var resourceId = current.resourceId;
		//alert( currentState + " -> " + resourceId );

		if ( currentState == "generationInProgress" ) {
			// thumbnail is currently being generated: try again later
			nextIds.push( resourceId );
		}
		else {
			if ( numberOfTries == 1 ) {
				// nothing to do: thumbnail exists or not
			}
			else {
				var imageElement = idToImageRef[resourceId];
				// thumbnail was being generated and is now ready: try to reload image
				if ( imageElement != null ) {
					//alert( "Will update image " + imageElement.src );
					imageElement.src = imageElement.src + '&amp;dummy=' + new Date().getTime();
				}
				else {  // this should not happen, but we ignore it (who knows)
					//alert( "Could not find image for resource " + resourceId );
				}
			}
		}
	}
	
	//alert( "Length is " + nextIds.length + ", number of tries is " + numberOfTries + "." );
	if ( nextIds.length > 0 && numberOfTries < 30 ) {
		//alert( "Function updateThumbnails is to be called again in 3 seconds");
		window.setTimeout( function() {updateThumbnails( nextIds, numberOfTries+1, idToImageRef);}, 3*1000 );
	}
}

function getThumbnailImageElement() {
	var toReturn = null;
	var referenceNode = document.getElementById('thumbnail');
	if ( referenceNode != null ) {
		var imageChildren = referenceNode.getElementsByTagName('img');
		if ( imageChildren.length > 0 ) {
			toReturn = imageChildren[0];
		}
	}	
	return( toReturn );
}
