/*
	Attach events in such a way that they can be explicitly detached when the
	document unloads.  Otherwise Internet Explorer leaks memory.
	
	Apart from that, it's cross-browser.
*/
var Events = new function()
{
	var clean = function(events)
	{
		for(var i = 0; i < events.length; i++)
		{
		  var event = events[i];
		  if(event.element.addEventListener) // Firefox, Netscape, Opera
		    event.element.removeEventListener(event.event, event.handler);
			else if(event.element.detachEvent) // IE
			  event.element.detachEvent('on' + event.event, event.handler);
			else
			  event.element['on' + event.event] = null;
		}
	}

	this.add = function(element, event, handler)
	{
	  var windowObject = element.parentWindow || element.window;
	  if(!windowObject.addedEvents)
	  {
			windowObject.addedEvents = new Array();
			this.add(windowObject, 'beforeunload', function(){clean(windowObject.addedEvents)});
		}
			
		windowObject.addedEvents.push({element:element, event:event, handler:handler});

	  if(element.addEventListener) // Firefox, Netscape, Opera
	    element.addEventListener(event, handler, false);
	  else if(element.attachEvent) // IE
	    element.attachEvent('on' + event, handler);
	  else
	    element['on' + event] = handler;
	}
	
	var onloadHandlers = new Array();
	
	this.onload = function(handler)
	{
		onloadHandlers.push(handler);
	}
	
	this.loaded = function()
	{
	  while(onloadHandlers[0])
	    try
	    {
	      onloadHandlers.shift()();
			}
			catch(e){status=e.description;}
	}
}



// The selected menu item didn't respond to window resize in Internet Explorer.
function fixMenu()
{
  var menu = document.getElementById('header');
	menu.style.position = 'static';
	menu.style.position = '';
}

if(window.attachEvent) Events.add(window, 'resize', fixMenu);

document.getElementsByClassName = function(className)
{
	function recurse(node, results, className)
	{
		for(var i = node.childNodes.length - 1; i > -1; i--)
		{
			if(node.childNodes[i].className == className)
			  results.push(node.childNodes[i]);

		  if(node.childNodes[i].firstChild)
		    recurse(node.childNodes[i], results, className);
		}
	}

	var results = new Array();
	recurse(document, results, className);
	return results;
}

// Image gallery
var Gallery = new function()
{
	var gallery;
	var pictures = new Array();
	var navigationButtons = new Array();
	var currentPicture;
	var slideshowTimeout;
	var TIMEOUT = 6000;
	
	this.initialise = function()
	{
	  gallery = document.getElementById('gallery');
	  var pictureLis = gallery.getElementsByTagName('li');
		var picturesLength = pictureLis.length;
		for(var i = 0; i < picturesLength; i++)
		  pictures.push(pictureLis[i]);
	  for(var i = pictureLis.length - 1; i > 0; i--)
	    pictureLis[i].style.display = 'none';
		currentPicture = 0;
		var ul = document.createElement('ul');
		gallery.insertBefore(ul, gallery.firstChild);
		ul.className = 'navigation';
		for(var i = 0; i < picturesLength; i++)
		{
		  var li = document.createElement('li');
			ul.appendChild(li);
			var a = document.createElement('a');
			li.appendChild(a);
			a.appendChild(document.createTextNode(i + 1));
			a.href = 'javascript:Gallery.showPicture(' + (i + 1) + ')';
			if(i == currentPicture)
			  li.className = 'selected';
			navigationButtons.push(li);
		}
		gallery.style.filter='progid:DXImageTransform.Microsoft.Fade(duration=2)';
		slideshowTimeout = setTimeout('Gallery.nextPicture()', TIMEOUT);
	}
	
	this.showPicture = function(picture)
	{
	  clearTimeout(slideshowTimeout);
    try
		{
		  if(gallery.filters)
				gallery.filters[0].Apply();
		}
		catch(e){}
	  pictures[currentPicture].style.display = 'none';
		navigationButtons[currentPicture].className = '';
		currentPicture = picture - 1;
		pictures[currentPicture].style.display = '';
		navigationButtons[currentPicture].className = 'selected';
	  try
		{
			if(gallery.filters)
				gallery.filters[0].Play();
		}
		catch(e){};
		slideshowTimeout = window.setTimeout('Gallery.nextPicture()', TIMEOUT);
	}
	
	this.nextPicture = function()
	{
		var nextPicture = currentPicture + 1;
		if(nextPicture == pictures.length)
		  nextPicture = 0;

		Gallery.showPicture(nextPicture + 1);
	}
}

function newWindows()
{
	var links = document.getElementsByTagName('a');
	var length = links.length;
	for(var i = 0; i < length; i++)
	{
		var href = links[i].getAttribute('href', 2);
		if(/^http/.test(href))
		{
			links[i].target = '_blank';
		}
	}
}

Events.onload(function(){Gallery.initialise();});
Events.onload(newWindows);
