window.addOnload = function(func)
{
	var event = 'load';

	if (this.addEventListener)
	{
		this.addEventListener(event, func, true);
		
		return true;
	}
	else if (this.attachEvent)
	{
		return this.attachEvent('on' + event, func);
	}
	
	return false;
};

document.getElementsByClassName = function(className, tagName)
{
	var elementsByClassName = [];
	
	if (this.getElementsByTagName)
	{
		var elements = (tagName) ? this.getElementsByTagName(tagName) : this.all || this.getElementsByTagName('*');
		var nrOfElements = elements.length;
		
		for (var i = 0; i < nrOfElements; i++)
		{
			var element = elements[i];
			var elementClassName = element.className;
			var elementHasClassName = false;
			
			if (className == elementClassName)
			{
				elementHasClassName = true;
			}
			else if (elementClassName.indexOf(' ') != -1)
			{
				var elementClassNames = elementClassName.split(' ');
				var nrOfClassNames = elementClassNames.length;
				
				for (var k = 0; k < nrOfClassNames; k++)
				{
					if (className == elementClassNames[k])
					{
						elementHasClassName = true;
						break;
					}
				}
			}
			
			if (elementHasClassName)
			{
				elementsByClassName.push(element);
			}
		}
	}
	
	return (elementsByClassName.length) ? elementsByClassName : null;
};

if (!Array.prototype.push)
{
	Array.prototype.push = function()
	{
		var nrOfArguments = arguments.length;
		
		for (var i = 0; i < nrOfArguments; i++)
		{
			this[this.length] = arguments[i];
		}
		
		return this.length;
	};
}

if (document.getElementById && document.getElementsByTagName)
{
	document.write('<style type="text/css">.swapContent { display: none; }</style>');
}

var activeItem = null;

var initController = function()
{
	if (document.getElementById && document.getElementsByTagName)
	{
		var controllers = document.getElementsByClassName('controller') || document.getElementsByClassName('imageLinks');
		var i = controllers.length;
		
		while (i--)
		{
			var controller = new Controller(controllers[i]);
		}
		
		if (controller)
		{
			controller.items[controller.items.length - 1].links[0].onclick();
		}
	}
};
window.addOnload(initController);

var Controller = function(container)
{
	this.container = container;
	this.items = [];
	
	var img = this.container.getElementsByTagName('img')[0];
	this.img = (img && img.className == 'swapImg') ? img : null;
	
	if (this.img)
	{
		this.swapSrc = this.img.src;
	}
	
	var lis = this.container.getElementsByTagName('li');
	var i = lis.length;
	
	while (i--)
	{
		this.items[this.items.length] = new Item(this, lis[i]);
	}
};

var Item = function(controller, container)
{
	this.controller = controller;
	this.container = container;
	this.links = [];
	
	var as = this.container.getElementsByTagName('a');
	var i = (as.length < 2) ? as.length : 2;
	
	while (i--)
	{
		var a = as[i];
		
		a._obj = this;
		this.links.push(a);
		a.onmouseover = this._hilite;
		a.onmouseout = this._clear;
		a.onclick = this._swap;
	}
	
	if (a)
	{
		var hash = a.href.split('#');
		var id = hash[hash.length - 1];
		
		this.content = document.getElementById(id);
		this.img = document.getElementById(id + 'Img');
		
		if (this.img)
		{
			this.outSrc = this.img.src;
			this.overSrc = this.outSrc.replace(/(\.(gif|jpg))/, '_over' + '$1');
			
			var overImg = new Image();
			overImg.src = this.outSrc;
		}
		
		if (this.controller.img)
		{
			this.swapSrc = this.controller.img.src.replace(/(\/)[a-z]+(\.(gif|jpg))/, '$1' + id + '$2');
			
			var swapImg = new Image();
			swapImg.src = this.swapSrc;
		}
	}
};
Item.prototype._hilite = function()
{
	var links = this._obj.links;
	var i = links.length;
	
	while (i--)
	{
		links[i].className = 'over';
	}
	
	this._obj._hiliteImg();
};
Item.prototype._clear = function()
{
	if (this._obj != activeItem)
	{
		var links = this._obj.links;
		var i = links.length;
		
		while (i--)
		{
			links[i].className = '';
		}
		
		this._obj._clearImg();
	}
};
Item.prototype._swap = function()
{
	if (activeItem)
	{
		var oldItem = activeItem;
		activeItem = null;
		
		oldItem.content.style.display = 'none';
		
		var links = oldItem.links;
		var i = links.length;
		
		while (i--)
		{
			oldItem.links[i].className = '';
			oldItem.links[i].onmouseout();
		}
	}
	
	this._obj._hiliteImg();
	
	var links = this._obj.links;
	var i = links.length;
	
	while (i--)
	{
		links[i].className = 'active';
		links[i].onmouseover();
	}
	
	this._obj.content.style.display = 'block';
	this._obj.controller.swapSrc = this._obj.swapSrc;
	
	activeItem = this._obj;
	
	return false;
};
Item.prototype._hiliteImg = function()
{
	if (this.img)
	{
		this.img.src = this.overSrc;
	}
	
	if (this.controller.img)
	{
		this.controller.img.src = this.swapSrc;
	}
};
Item.prototype._clearImg = function()
{
	if (this.img)
	{
		this.img.src = this.outSrc;
	}
	
	if (this.controller.img)
	{
		this.controller.img.src = this.controller.swapSrc;
	}
};
