/*******************************************************************************
**
**	rollover.js
**	Copyright 2004 Clough, Harbour & Associates LLP.  All Rights Reserved.
**
**	PURPOSE:
**		Image Rollover Script (DOM-compliant, with fallback for downlevel IE)
**
**	HISTORY:
**		2003.08.01 (PKC) - Initial Version.  
**		Tested with IE4, IE5, IE5.5, IE6, Mozilla Firebird 0.6.1
**
**		2004-02-10 (PKC) - Additional Testing.
**		Successfully tested with Mozilla Firebird 0.7, Mozilla Firefix 0.8.
**
*******************************************************************************/
 
/*
 *	Specify the id of the element holding all navigation images here.  This 
 *	script will assume that all images within this element are navigation images
 *	and have a rollover equivalent.
 */
var idOfRootElementToSearch = "nav";

/*
 *	Specify the regular expression and replacement string to use when deriving
 *	the "src" of the rollover image from the base image.
 */
var replaceExpr = /img\/nav/;
var replaceString = "img/nav/over";


// Declare recursive function to walk DOM tree looking for images
function getDescendantImages(node)
{
	var tempArray = [];

	if(document.hasChildNodes) // For W3C DOM-compliant browsers
	{
		if(node.hasChildNodes())
		{
			// Loop over all child nodes
			for(var i=0; i<node.childNodes.length; i++)
			{
				var thisNode = node.childNodes.item(i);
				
				// If current node is an image, add it to the array
				if(thisNode.nodeType == "1" && thisNode.nodeName.toLowerCase() == "img")
				{
					tempArray[tempArray.length] = thisNode;
					//alert(thisNode.getAttributeNode("src").value);
				}
				
				// Call getDescendantImages on all child nodes
				if(thisNode.hasChildNodes())
				{
					tempArray = tempArray.concat(getDescendantImages(thisNode));
				}
			}
		}
	}
	else if(document.body.children) // For downlevel IE browsers
	{
		if(node.children.length)
		{
			// Loop over all children
			for(var i=0; i<node.children.length; i++)
			{
				var thisChild = node.children[i];
				
				// If current child is an image, add it to the array
				if(thisChild.tagName.toLowerCase() == "img")
				{
					tempArray[tempArray.length] = thisChild;
				}
				
				// Call getDescendantImages on all child nodes
				if(thisChild.children.length)
				{
					tempArray = tempArray.concat(getDescendantImages(thisChild));
				}
			}
		}
	}
	return tempArray;
}

// On page load, build list of all rollover images
var navDiv;
if(document.getElementById) // For W3C DOM-compliant browsers
{
	navDiv = document.getElementById(idOfRootElementToSearch);
}
else if(document.all) // For downlevel IE browsers
{
	navDiv = document.all[idOfRootElementToSearch];
}
var rolloverImageNodes = getDescendantImages(navDiv);

// Get current page's URL
var thisURL;
if(document.URL)
{
	if(document.URL.lastIndexOf("/")+1==document.URL.length)
	{
		thisURL = document.URL + "index.cfm";
	}
	else
	{
		thisURL = document.URL;
	}
}
else if(window.location)
{
	thisURL = window.location;
}
//alert(thisURL);

// Preload images
var rolloverImageObjects = [];
for(var i=0; i<rolloverImageNodes.length; i++)
{
	var thisSrc;
	if(rolloverImageNodes[i].getAttributeNode) // For W3C DOM-compliant browsers
	{
		thisSrc = rolloverImageNodes[i].getAttributeNode("src").value
	}
	else if(rolloverImageNodes[i].src) // For downlevel IE browsers
	{
		thisSrc = rolloverImageNodes[i].src;
	}
	rolloverImageObjects[i] = [];
	rolloverImageObjects[i].off = new Image();
	rolloverImageObjects[i].off.src = thisSrc;
	rolloverImageObjects[i].on = new Image();
	rolloverImageObjects[i].on.src = thisSrc.replace(replaceExpr,replaceString);
	if((rolloverImageNodes[i].parentNode)&&(rolloverImageNodes[i].parentNode.getAttributeNode)) // For W3C DOM-compliant browsers
	{
		rolloverImageObjects[i].href = rolloverImageNodes[i].parentNode.getAttributeNode("href").value;
	}
	else if((rolloverImageNodes[i].parentElement)&&(rolloverImageNodes[i].parentElement.href)) // For downlevel IE browsers
	{
		rolloverImageObjects[i].href = rolloverImageNodes[i].parentElement.href;
	}
	
	//alert(rolloverImageNodes[i].href);
	// Set image for current page to "on" state
	if(thisURL.indexOf(rolloverImageObjects[i].href)>-1)
	{
		if(rolloverImageNodes[i].setAttribute) // For W3C DOM-compliant browsers
		{
			rolloverImageNodes[i].setAttribute("src",rolloverImageObjects[i].on.src,0);
		}
		else if(rolloverImageNodes[i].src) // For downlevel IE browsers
		{
			rolloverImageNodes[i].src = rolloverImageObjects[i].on.src
		}
	}
}

// Loop over all rollover images
for(var i=0; i<rolloverImageNodes.length; i++)
{
	var thisNode = rolloverImageNodes[i];
	
	// Set mouseover function for this image
	thisNode.onmouseover = function()
	{
		// Loop over all rollover images
		for(var j=0; j<rolloverImageNodes.length; j++)
		{
			var thatNode = rolloverImageNodes[j];
			var thisSrc;
			var thatSrc;
			if(this.getAttributeNode) // For W3C DOM-compliant browsers
			{
				thisSrc = this.getAttributeNode("src").value;
				thatSrc = thatNode.getAttributeNode("src").value;
			}
			else if(this.src) // For downlevel IE browsers
			{
				thisSrc = this.src;
				thatSrc = thatNode.src;
			}
			
			// For rollover image and image for current page, swap to "on" state
			if((thisSrc == thatSrc)||(thisURL.indexOf(rolloverImageObjects[j].href)>-1))
			{
				if(thatNode.setAttribute) // For W3C DOM-compliant browsers
				{
					thatNode.setAttribute("src",rolloverImageObjects[j].on.src,0);
				}
				else if(thatNode.src) // For downlevel IE browsers
				{
					thatNode.src = rolloverImageObjects[j].on.src;
				}
			}
			// For all other images, swap to "off" state
			else
			{
			}
		}
	}

	// Set mouseout function for this image
	thisNode.onmouseout = function()
	{
		// Loop over all rollover images
		for(var j=0; j<rolloverImageNodes.length; j++)
		{
			var thatNode = rolloverImageNodes[j];
			var thisSrc;
			var thatSrc;
			if(this.getAttributeNode) // For W3C DOM-compliant browsers
			{
				thisSrc = this.getAttributeNode("src").value;
				thatSrc = thatNode.getAttributeNode("src").value;
			}
			else if(this.src) // For downlevel IE browsers
			{
				thisSrc = this.src;
				thatSrc = thatNode.src;
			}
			
			// For image for current page, swap to "on" state
			if(thisURL.indexOf(rolloverImageObjects[j].href)>-1)
			{
				if(thatNode.setAttribute) // For W3C DOM-compliant browsers
				{
					thatNode.setAttribute("src",rolloverImageObjects[j].on.src,0);
				}
				else if(thatNode.src) // For downlevel IE browsers
				{
					thatNode.src = rolloverImageObjects[j].on.src;
				}
			}
			// For all other images, swap to "off" state
			else
			{
				if(thatNode.setAttribute) // For W3C DOM-compliant browsers
				{
					thatNode.setAttribute("src",rolloverImageObjects[j].off.src,0);
				}
				else if(thatNode.src) // For downlevel IE browsers
				{
					thatNode.src = rolloverImageObjects[j].off.src;
				}
			}
		}
	}
}

