var preloadedImages = new Array();

var imageNames = new Object();

var selectionNames = new Object();
var selectedImages = new Object();
var selectionPreserveRollover = new Object();
var rolloverAsSelected = new Object();

function preloadImage(img, name) {
	var nextImg = preloadedImages.length;
	preloadedImages[nextImg] = new Image();
	preloadedImages[nextImg].src = img;
	if (name != null) imageNames[name] = img;
}

function translateSourceURL(url, translate) {
	var append = "";
	
	if (translate == "rollover") {
		append = "_r";
	} else if (translate == "selected") {
		append = "_s";
	} else {
		alert("Invalid 'translate' variable");
		1 / 0;
	}
		
	var lastPeriod = url.lastIndexOf(".");
	if (lastPeriod == -1) {
		return url + append;
	} else {
		return url.substring(0, lastPeriod) + append + url.substring(lastPeriod);
	}	
}

function preloadRollover(img, name) {
	if (name == null) name = img;
	preloadImage(img, name);
	preloadImage(translateSourceURL(img, "rollover"));
}

function preloadSelected(img, name) {
	if (name == null) name = img;
	preloadImage(img, name);
	preloadImage(translateSourceURL(img, "selected"));
}

function preloadSelectRollover(img, name) {
	if (name == null) name = img;
	preloadImage(img, name);
	preloadImage(translateSourceURL(img, "rollover"));
	preloadImage(translateSourceURL(img, "selected"));
}

function defineSelection(name) {
	for (var i = 1; i < arguments.length; i++) {
		selectionNames[arguments[i]] = name;
	}
	selectionPreserveRollover[name] = false;
}

function setSelectionPreserveRollover(name, preserve) {
	selectionPreserveRollover[name] = preserve;
}

function setRolloverAsSelected(name, value) {
	rolloverAsSelected[name] = value;
}	

function select(selectedImage) {
	var selectionGroup = selectionNames[selectedImage];
	if (selectionGroup == null) {
		alert("Cannot locate selection group for \"" + selectedImage + "\".");
		return;
	}
	
	clearSelection(selectionGroup);
	
	var imgSource = imageNames[selectedImage];
	var img = locateImage(selectedImage);
	
	if (rolloverAsSelected[selectionGroup]) {
		img.src = translateSourceURL(imgSource, "rollover");
	} else {	
		img.src = translateSourceURL(imgSource, "selected");
	}
	
	selectedImages[selectionGroup] = selectedImage;
}

function clearSelection(selectionGroup) {
	if (selectionGroup == null) {
		alert("Cannot clear unspecified selection group.");
		return;
	}

	for (imageName in selectionNames) {
		if (selectionNames[imageName] == selectionGroup) {
			var imgSource = imageNames[imageName];
			var img = locateImage(imageName);
			img.src = imgSource;
		}
	}
}

function locateImage(imageName) {
	var img = document.images[imageName];

	if (img == null && document.layers) {
		//Check in all layers, if Netscape 4.x
		var i;
		for (i = 0; i < document.layers.length; i++) {
			img = document.layers[i].document.images[imageName];
			if (img != null) break;
		}
	}
	
	return img;
}
				
function rollover(name, over) {
	var foundImage = false;
	
	if (name == null) {
		alert("Cannot rollover with an unspecified name.");
		return;
	}
	var imgSource = imageNames[name];
	
	if (imgSource == null) {
		//alert("Unable to locate image source \"" + name + "\" for rollover.");
		return;
	}
	
	//Check if it's part of a selection group
	var selectionGroup = selectionNames[name];
	if (!foundImage && selectionGroup != null) {
		if (selectedImages[selectionGroup] == name) {
			if (!over || !selectionPreserveRollover[selectionGroup]) {
				if (rolloverAsSelected[selectionGroup]) {
					imgSource = translateSourceURL(imgSource, "rollover");
				} else {	
					imgSource = translateSourceURL(imgSource, "selected");
				}	
				foundImage = true;
			}	
		}	
	}
	
	if (over && !foundImage) {
		imgSource = translateSourceURL(imgSource, "rollover");
		foundImage = true;
	}	
	
	var img = locateImage(name);
	 
	if (img == null) {
		//alert("Unable to locate image \"" + name + "\" for rollover.");
		return;
	}
	
	img.src = imgSource;
}