<!-- start *** ROLLOVER.js *** -->
var steps=5, cycleTime = 200, cyclePeriod = cycleTime/steps, fadeInProgress = false, growImgName,  
	stepIndex = 0, stretchTimer;
var newSrc = "", newHeight, newWidth, newVert, newHor, newAlt, shadowBase, element2Fade, fadeTimer;
var pmax = 400, wmax = 750, maxDim;
var rollOverArr=new Array();

<!--
// copyright 1999 Idocs, Inc. http://www.idocs.com/tags/
// Distribute this script freely, but please keep this 
// notice with the code.

function setrollover(OverImgSrc,pageImageName)
{
if (! document.images){
	alert("document.images does not exust!");
	return;
	}
if (pageImageName == null)
    pageImageName = document.images[document.images.length-1].name;
rollOverArr[pageImageName]=new Object;
rollOverArr[pageImageName].overImg = new Image;
rollOverArr[pageImageName].overImg.src=OverImgSrc;
}

function rollover(image)
{
if (! document.images)return;
//	alert ("Over: "+image.name);
if (! rollOverArr[image.name])return;
if (! rollOverArr[image.name].outImg)
    {
    rollOverArr[image.name].outImg = new Image;
    rollOverArr[image.name].outImg.src = image.src;
    }
image.src=rollOverArr[image.name].overImg.src;
image.style.cursor="pointer";
}

function rollout(image)
{
//alert ("Out: " + image.name);
if (! document.images)return;
if (! rollOverArr[image.name])return;
image.src=rollOverArr[image.name].outImg.src;
image.style.cursor="default";
}

function clearSearch (myform) {
if (myform.value == myform.defaultValue) myform.value = ""; else { if (myform.value =="") myform.value = myform.defaultValue;}
}

function fade() {
	var opacity, shadow;
	if (fadeTimer) clearTimeout(fadeTimer);
	if (element2Fade != null) {
		opacity = (stepIndex >= steps) ? .999 : stepIndex/steps;
		// Safari 1.2, newer Firefox and Mozilla, CSS3
		element2Fade.style.opacity = opacity;
		// Safari<1.2, Konqueror
		element2Fade.style.KHTMLOpacity = opacity;
		// Older Mozilla and Firefox
		element2Fade.style.MozOpacity = opacity;
		// IE/Win
		element2Fade.style.filter = "alpha(opacity="+(100*opacity)+")";
	} else {stepIndex = 0;}
	if (stepIndex-- > 0) {	// continue fading element
		fadeTimer = setTimeout("fade()",cyclePeriod);
	} else {
		fadeInProgress = false;
		switchImageParams();
	}	// replacing image
}

function fadeElement (elID) {
// alert("fading el: "+elID);
	element2Fade = document.getElementById(elID);
	fadeInProgress = true;
//	stepIndex = steps;
	fade();
}

function reveal() {
	var opacity, shadow;
	if (fadeTimer) clearTimeout(fadeTimer);
//	alert("revealing: \""+element2Fade.id+"\"");
	if (element2Fade != null) {
		opacity = (stepIndex >= steps) ? .999 : stepIndex/steps;
		// IE/Win <=5.5
		element2Fade.style.filter = 'alpha(opacity='+(100*opacity)+')';
		// Safari 1.2, newer Firefox and Mozilla, CSS3
		element2Fade.style.opacity = opacity;
		// Safari<1.2, Konqueror
		element2Fade.style.KHTMLOpacity = opacity;
		// Older Mozilla and Firefox
		element2Fade.style.MozOpacity = opacity;
	} else {stepIndex = steps;}
	if (stepIndex++ < steps) {	// continue revealing element
		fadeTimer = setTimeout("reveal()",cyclePeriod);
	} else {
		switchImageParams();
	}	// replacing image
}

function revealElement (elID) {
//	alert("revealing el: "+elID);
	element2Fade = document.getElementById(elID);
	fadeInProgress = false;
//	stepIndex = 0;
	reveal();
}

function switchImageParams(newS, newW, newH, newL, newT,sB, gIN, alt_text) {
// Either get no arguments, or get all
var myborder, newMax, clearGlobals = false, shadow;
	if (typeof newS == 'undefined' ) {	// no arguments passed so check the globals
		newS = newSrc;
		clearGlobals = true;
		if (newS.length > 0) { // globals are set, so use them
			newW = newWidth;
			newH = newHeight;
			newL = newHor;
			newT = newVert;
			sB = shadowBase;
			gIN = growImgName;
			alt_text = newAlt;
		}
	}
	// fill in common vars
	switch (sB.charAt(0)) {
		case 'w':
		case 'W':
			newMax = wmax;
			break;
		case 'p':
		case 'P':
		default:
			newMax = pmax;
			break;
	}
	myborder = 25;

	if (newS.length > 0) {
		var targetImg = document.getElementById(gIN);
		targetImg.src = newS;
		targetImg.style.left = newL+"px";
		targetImg.style.top = newT+"px";
		var newAspect = (newH >= newW) ? (newH/newMax) : (newW/newMax);
		targetImg.style.width = newW;
		targetImg.style.height = newH;
		targetImg.alt = alt_text;
		if (sB.length > 0) {	// reposition shadow elements, if necessary
			shadow = document.getElementById(sB+'ul');
			shadow.style.left = (newL - myborder) + "px";
			shadow.style.top = (newT - myborder) + "px";
			shadow = document.getElementById(sB+'ur');
			shadow.style.left = (newL + newW - newMax/2) + "px";
			shadow.style.top = (newT - myborder) + "px";
			shadow = document.getElementById(sB+'ll');
			shadow.style.left = (newL - myborder) + "px";
			shadow.style.top = (newT + newH -newMax/2) + "px";
			shadow = document.getElementById(sB+'lr');
			shadow.style.left = (newL + newW - (newMax/2)) + "px";
			shadow.style.top = (newT + newH - (newMax/2)) + "px";
		}
		if (clearGlobals) {
			newSrc = "";	// clear newSrc for next swap
			stepIndex = 0;	// ready to reveal
		}
//alert("ro:sIP:w: "+targetImg.style.width+" newH: "+targetImg.style.height+" newL: "+targetImg.style.left+" newT: "+targetImg.style.top+" gIN:"+gIN);
//alert("ro:sip: w:"+newW+" h:"+newH+" l:"+newL+" t:"+newT+" myborder:"+myborder+" nM:"+newMax+" p:"+pmax+" wM:"+wmax);
	}	//newSrc.length > 0
	// New image, if any, is 'reveale'ed with the onload function...
}

function swapImage (imgName, imgSrc, imgWidth, imgHeight, vertOffset, horOffset, sBase, alt_text) {
	// if new source is the same as the current, do nothing
	if (document.images[imgName].src.substring(document.images[imgName].src.length-imgSrc.length) == imgSrc) {
		return;
	}
	switchImageParams(imgSrc, imgWidth, imgHeight, horOffset, vertOffset, sBase, imgName, alt_text);
}

function fadeImage (imgName, imgSrc, imgWidth, imgHeight, vertOffset, horOffset, sBase, imgContainer, alt_text) {
	// if current source == newSrc, do nothing...
//	alert("fadeImage: src: "+imgSrc+" docSrc: "+document.images[imgName].src.substring(document.images[imgName].src.length-imgSrc.length));
	if (document.images[imgName].src.substring(document.images[imgName].src.length-imgSrc.length) == imgSrc) {
		// force an immediate full reveal, i.e., short-circuit any fading or revealing
		// currently in progress and make image appear
		element2Fade = document.getElementById(imgContainer);
		newSrc = "";
		stepIndex = steps;
		reveal();
		return;
	}
	newSrc = imgSrc;
	newWidth = Math.abs(imgWidth);  // allow a negative width value for triggering the fade bypass (see below)
	newHeight = imgHeight;
	newVert = vertOffset;
	newHor = horOffset;
	growImgName = imgName;
	shadowBase = sBase;
	newAlt = alt_text;
//	border = sBase.substr(1,2) * 1;		// force border value to be a number by multiplying by 1
//	alert("ro:sI:shadowBase: "+shadowBase+" border: "+border);
	switch (shadowBase.charAt(0)) {
		case 'w':
		case 'W':
			maxDim = wmax;
			break;
		case 'p':
		case 'P':
		default:
			maxDim = pmax;
			break;
	}
	if (!document.images[imgName]) {
		document.images[imgName] = new Object();
		document.images[imgName].style = new Object();
		document.images[imgName].id = imgName;
	}
	// if (no fading or revealing currently in progress) OR (we're in the process of revealing the image)...
	//		then force the reveal process to skip ahead and swap the image source
	// not sure this is still relevant....	
	if (!fadeTimer || (fadeTimer && !fadeInProgress)) stepIndex = steps;
	/* This is a special case/trick for revealing a new image automatically - if the imgWidth passed in is negative,
		then set the stepIndex so that the fade phase appears to be complete and we will only switch the image 
		params and then reveal the image... */
	if (imgWidth < 0) {
		stepIndex = 0;
		alert('fadeImage: spoofing fade...');
	}
	fadeElement(imgContainer);	//'drop the curtain' over the image...
}
//-->
<!-- end *** ROLLOVER.js *** -->
