function preloadImages() { 
	if(document.images) { 
		if(!document.preloads) {
			document.preloads = new Array();
		}
	}
	preload(document.childNodes);
}

function findSubElementWithID(called, within) {
	for(i = 0; i < within.childNodes.length; i++) {
		var element = within.childNodes[i];
		if(element.childNodes.length > 0) {
			var possible = findSubElementWithID(called, element);
			if(possible != null) { return possible; }
		}
		if(element.id == called) {
			return element;
		}
	}
	return null;
}

function addMessage(message) {
	document.getElementById('message').innerHTML = document.getElementById('message').innerHTML + message + "<br/>";
}
function preload(nodes) {
    var i;
	for(i = 0; i < nodes.length; i++) {
		var element = nodes[i];
		if(element.childNodes.length > 0) {
			preload(element.childNodes);
		}
		
		// Add any images we find
		var eclass = element.className;
		if(eclass && eclass.indexOf('labelledimage') != -1) {
			var subElement = findSubElementWithID("image", element);
			if(subElement != null) {
				var newName = rolloverNameFor(subElement.src);
				if(newName) {
					var currentEnd = document.preloads.length;
					document.preloads[currentEnd] = new Image; 
					document.preloads[currentEnd].src = newName;

					var label = findSubElementWithID("label", element);
					if(label) {
						label.style.visibility = "hidden";
					}
				}
			}
		}
	}
}

function MM_findObj(n, d) { 
	var p,i,x;  
	if(!d) 
		d=document; 

	if((p = n.indexOf("?"))> 0 && parent.frames.length) {
		d = parent.frames[n.substring(p + 1)].document; 
		n = n.substring(0, p);
	}
	if(!(x = d[n]) && d.all) 
		x=d.all[n]; 

	for(i = 0; !x && i < d.forms.length; i++) 
		x=d.forms[i][n];

	for(i=0;!x && d.layers && i < d.layers.length; i++) 
		x = MM_findObj(n,d.layers[i].document);

	if(!x && d.getElementById) 
		x=d.getElementById(n);

	return x;
}

function restoreImages() {
 	var i, x, a = document.savedimages; 
	for(i = 0; a && i < a.length && (x = a[i]) && x.oSrc; i++) {
		x.src = x.oSrc;

		// Turn off the label
		var parentElement = x.parentNode.parentNode.parentNode;
		var label = findSubElementWithID("label", parentElement);
		if(label) {
			label.style.visibility = "hidden";
		}
	}
}

function rolloverNameFor(imageName) {
	if(imageName == null) { return null; }
	var newName = imageName;
	var lastDot = newName.lastIndexOf('.');
	if(lastDot > 0) {
		extension = newName.substr(lastDot);
		newName = newName.substr(0, lastDot);
		newName += "Rollover" + extension;
	}
	return newName;
}

function swapImage(parentID, withImage) {
	document.savedimages = new Array; 

	var block = MM_findObj(parentID);
	// addMessage("Looking for block " + parentID);
	if(block != null) {
		// addMessage("Looking for image inside " + parentID);
		var image = findSubElementWithID("image", block);
		if(image != null) {
			document.savedimages[0] = image; // only remember one image
			image.oSrc = image.src;

			var newName = withImage;
			if(newName == null) { newName = rolloverNameFor(image.src); }
			if(newName) {
				image.src = newName;

				// addMessage("Changed src to " + withImage);

				var label = findSubElementWithID("label", block);
				if(label) {
					label.style.visibility = "visible";
				}
			}
		}
	}
}


