/************** PINT Rollover code v.91 **************

by James Brock
copyright PINT Inc. 2002


This rollover code is supposed to be 
	1. flexible, to accomodate all possible rollover activity
	2. compatible, should work on anything better than IE4, Netscape 4
	3. easy, so that all the rollover information can be inserted into the img tag in a simple way
	4. robust, so that errors, typos, bad DOM support make it degrade gracefully

*/

/************ Dependancies:

PINTInitCleanup.js

*/

/***************** Usage Example:


function init()
{
PINT_RORolloverInit('img1', 'img1', 'img1on.png');
PINT_RORolloverInit('img2', 'img2', 'img2on.png', 'img1', 'img1on.png');
};

function cleanup()
{};

<head>
<script src="\script\PINTRolloverDEBUG.js" language="JavaScript" type="text/javascript"></script>
<script src="\script\PINTInitCleanup.js" language="JavaScript" type="text/javascript"></script>
</head>

<!-- rolling over img1 turns img1 on, rolling over img2 turns img1 and img2 on. -->

<img name="img1" src="img1off.png">
<img name="img2" src="img2off.png">

**************************/


/*************** PRIVATE DATA STRUCTURES ****************/

var PINT_ROcapableFlag = true;			// assume this browser is rollover capable, unless it proves otherwise.
var PINT_ROtriggers = new Array();
var PINT_ROtargets = new Array();
var PINT_ROtargetRollovers = new Array();
if ((typeof PINT_ROtriggers) != 'object') PINT_ROcapableFlag = false;


/************** PUBLIC METHODS **********************/


/*	PINT_RORolloverInit()
	Initializes an html entity for image rollover triggering. This function should only be called after the body of the document has finished loading.
	Arguments: (there must be an odd number of arguments)
		1. the name attribute of the entity (usually an <a> or an <img>) which triggers the rollover
		2. the name attribute of the <img> which will be changed
		3. the source url that the image named by arg 2 will rollover to
		4. same as 2...
		5. same as 3...
		...
	Returns: true on success, false on failure
*/
function PINT_RORolloverInit()
{
	if (!(PINT_ROcapableFlag)) return false;			// if the browser is not rollover capable, fail
	if (!(document.images)) return PINT_ROcapableFlag = false;
	if (PINT_RORolloverInit.arguments.length < 1 ) return true;		//if no arguments
	if ((PINT_RORolloverInit.arguments.length % 2) != 1) return false;	//must be odd number of arguments

	var trigger = document[PINT_RORolloverInit.arguments[0]];  // the element that triggers the rollover    

	if (!(PINT_ROtriggers[trigger.name])) PINT_ROtriggers[trigger.name] = new Array(); // init the target array
	
	var i, target;

	for (i=1;i<PINT_RORolloverInit.arguments.length;i+=2) // for each arg, 
	{
		target = document[PINT_RORolloverInit.arguments[i]];
		targetrollover = PINT_RORolloverInit.arguments[i+1];

		if (!(target.src)) return false;		// if target is not an image

		PINT_ROtargets[target.name] = target.src;     // load up the target rollover sources
		PINT_ROtargetRollovers[targetrollover] = new Image();
		PINT_ROtargetRollovers[targetrollover].src = targetrollover; // cache rollover images in associative array
		PINT_ROtriggers[trigger.name][target.name] = PINT_ROtargetRollovers[targetrollover]; // reference to the cached image
	}
		
	trigger.onmouseover = PINT_RORollover;		//handlers will never be called before the rollover initializes
	trigger.onmouseout = PINT_RORollout;

	return true;
}



/********* PRIVATE METHODS ************/

function PINT_RORollover(e)
{
	if (!PINT_ROcapableFlag) return false;

	var eventsource = ((e && e.target) || (window && window.event && window.event.srcElement));	//figure out where the events come in on this browser
	if (!eventsource) return (PINT_ROcapableFlag = false); // if there's no events, can't do rollovers

	for (target in PINT_ROtriggers[eventsource.name]) //for this trigger, rollover each of it's targets
	{
		document[target].src = PINT_ROtriggers[eventsource.name][target].src;
	}
}

function PINT_RORollout(e)
{
	if (!PINT_ROcapableFlag) return false;

	var eventsource = ((e && e.target) || (window && window.event && window.event.srcElement));	//figure out where the events come in on this browser
	if (!eventsource) return (PINT_ROcapableFlag = false); // if there's no events, can't do rollovers

	for (target in PINT_ROtriggers[eventsource.name]) //for this trigger, reset the src for each of it's targets
	{
		document[target].src = PINT_ROtargets[target];
	}
}	


