var preloadedImages = [];

function containsClass(el, className)
{
	var classes = el.className.split(' ');
	for (var i=0; i<classes.length; i++)
		if (classes[i]==className) return true;
	return false;
}

function getImage(el) { return (el.tagName.toUpperCase()=='IMG' || el.tagName.toUpperCase()=='INPUT') ? el : el.getElementsByTagName('img')[0]; }

var ROLLOVER_HOVER_PATTERN = /(.+)Hi(\..+)/;
var ROLLOVER_NORMAL_REPLACE = "$1$2";

var ROLLOVER_NORMAL_PATTERN = /(.+)(\..+)/;
var ROLLOVER_HOVER_REPLACE = "$1Hi$2";

function initialiseRolloverElements(tag)
{
	var els = document.getElementsByTagName(tag);
	
	for (var i=0; i<els.length; i++)
	{
		if (containsClass(els[i], 'rollover'))
		{
			var img = getImage(els[i]);
			if( img )
			{
				if (!ROLLOVER_HOVER_PATTERN.test(img.src))
				{
					var pri = new Image(); pri.src = img.src.replace(ROLLOVER_NORMAL_PATTERN, ROLLOVER_HOVER_REPLACE);
					
					preloadedImages.push(pri);
				
					attachRolloverElement(img);
				}
				}
		}
	}
}

function observeEvent(el,evnt,hnd,cpt) { if (el.attachEvent) el.attachEvent('on'+evnt,hnd); if (el.addEventListener) el.addEventListener(evnt,hnd,cpt); }
function stopObservingEvent(el,evnt,hnd,cpt) { if (el.detachEvent) el.detachEvent('on'+evnt,hnd); if (el.removeEventListener) el.removeEventListener(evnt,hnd,cpt); }

function attachRolloverElement(el)
{
	//el=getImage($(el));
	observeEvent(el, 'mouseover', imageRolloverHandler, true);
	observeEvent(el, 'focus', imageRolloverHandler, true);
	observeEvent(el, 'mouseout', imageRestoreHandler, true);
	observeEvent(el, 'blur', imageRestoreHandler, true);
}

function detachRolloverElement(el)
{
	//el=getImage($(el));
	stopObservingEvent(el, 'mouseover', imageRestoreHandler, true);
	stopObservingEvent(el, 'focus', imageRestoreHandler, true);
	stopObservingEvent(el, 'mouseout', imageRestoreHandler, true);
	stopObservingEvent(el, 'blur', imageRestoreHandler, true);
	
	restoreImage(el);
}

function rolloverInit()
{
	initialiseRolloverElements('a');
	initialiseRolloverElements('img');
	initialiseRolloverElements('input');
}

function rolloverImage(el) { var img = getImage(el); img.src = img.src.replace(ROLLOVER_NORMAL_PATTERN, ROLLOVER_HOVER_REPLACE); }
function restoreImage(el) { var img = getImage(el); img.src = img.src.replace(ROLLOVER_HOVER_PATTERN, ROLLOVER_NORMAL_REPLACE); }

function imageRolloverHandler() { 	rolloverImage( eventTarget(window.event||arguments[0]) ); }
function imageRestoreHandler() { restoreImage( eventTarget(window.event||arguments[0]) ); }

function eventTarget(evnt) { return evnt.srcElement || evnt.target; }

// Accessing 'className' kills netscape 6
if (!(/Netscape6/.test(window.navigator.userAgent)))
	observeEvent(window,'load', rolloverInit, true);

