function Preload()
{
	this.init(arguments);
}



Preload.prototype = {
	images		: new Array(),
	path		: 'images/',
	names		: null,
	selected	: null,
	
	
	init : function(args)
	{
		var obj	= this;
		this.names = [];	// initialize array
		
		var arg = suffix = index = null;

		for (var i = 0, max = args.length; i < max; ++i) {
			arg 	= args[i];
			suffix	= 'gif';
			path	= this.path;
			index	= null;
			
			// extract path
			if ((index = arg.lastIndexOf('/')) != -1) {
				++index
				path 	= arg.substring(0, index);
				arg		= arg.substring(index)
			} 
			
			// extract suffix, otherwise use default of 'gif'
			if ((index = arg.indexOf('.')) != -1) {
				suffix 	= arg.substr(index + 1);
				arg		= arg.substring(0, index);
			}
			
			this.preload_image(path, arg, suffix);
		}
		
		addEvent(window, 'load', function() { obj.add_rollovers() } );
	},
	
	
	
	preload_image : function(path, name, suffix)
	{
		if (document.images) {
			this.names[this.names.length] = name;
			var on 					= name + '_on';
			var off					= name + '_off';
			this.images[on] 		= new Image();
			this.images[on].src 	= path + on + '.' + suffix;
			this.images[off]		= new Image();
			this.images[off].src	= path + off + '.' + suffix;
		}
	},
	
	
	
	add_rollover : function(name)
	{
		var obj		= this;
		var image 	= document.images[name];
		var a		= null;
		if (image && (a = image.parentNode) && a.tagName.toUpperCase() == 'A') {
			addEvent(a, 'mouseover', function() { obj.rollover(name, true) } );
			addEvent(a, 'mouseout', function() { obj.rollover(name, false) } );
		}
	},
	
	
	
	add_rollovers : function()
	{
		for (var i = 0, max = this.names.length; i < max; ++i) {
			this.add_rollover(this.names[i]);
		}
	},
	
	
	
	rollover: function(name, active)
	{
		if (name == this.selected) return;
		if (document.images && document.images[name]) {
			active? document[name].src = this.images[name + '_on'].src : document[name].src = this.images[name + '_off'].src;
		}
	}
};




function addEvent(obj, type, fn)
{
	var result = false;
	
	if (obj.addEventListener) {
		obj.addEventListener(type, fn, false);
		result = true;
	} else if (obj.attachEvent) {
		var r = obj.attachEvent('on' + type, fn);
		result = r;
	} else {
		if (obj == window && type == 'load') addLoadEvent(fn); else obj['on' + type] = fn;
	}

	EventCache.add(obj, type, fn, false);
	return result;
}



function addLoadEvent(fn)
{
	var oldOnload	= window.onload;
	if (typeof window.onload != 'function') {
		window.onload = fn;
	} else {
		window.onload = function() {
			oldOnload();
			fn();
		}
	}
}



