	/* Used http://www.kryogenix.org/code/browser/nicetitle/ as a reference
	 * for the basis of this - thanks Stuart!
	 */

	var XHTMLNS = "http://www.w3.org/1999/xhtml";
	var currentInfo = null;
	var mainImage;
	
	addEvent(window, "load", attachInfo);
	
	// makeInfoBox {{{
	function makeInfoBox(info)
	{
		info = parseInt(info);
		var term = 			imageInfo[info][0][0];
		var width = 		imageInfo[info][0][1];
		var height = 		imageInfo[info][0][2];
		var url = 			imageInfo[info][0][3];
		var contexturl = 	imageInfo[info][0][4];
		
		var div = document.createElementNS(XHTMLNS, "div");
		div.className = "info";
		div.id = "info";

		currentInfo = div;
		
		/*
			Search term: term
			Size: 100x100
			View full size image
			View original page
		*/
		
		var text = document.createTextNode("Search term: " + term);
		div.appendChild(text);

		var br = document.createElementNS(XHTMLNS, "br");
		div.appendChild(br);

		var text = document.createTextNode("Size: " + width + "x" + height);
		div.appendChild(text);

		var br = document.createElementNS(XHTMLNS, "br");
		div.appendChild(br);

		var linkOriginal = document.createElementNS(XHTMLNS, "a");
		linkOriginal.href = url;
		linkOriginal.target = "_blank";
		
		var text = document.createTextNode("View full size image");
		linkOriginal.appendChild(text);

		div.appendChild(linkOriginal);
		
		var br = document.createElementNS(XHTMLNS, "br");
		div.appendChild(br);

		var linkContext = document.createElementNS(XHTMLNS, "a");
		linkContext.href = contexturl;
		linkContext.target = "_blank";
		
		var text = document.createTextNode("View original page");
		linkContext.appendChild(text);

		div.appendChild(linkContext);
		
		return div;
	}
	// }}}

	// showInfo {{{
	function showInfo(e)
	{	
		if(currentInfo != null)
			hideInfo();

		if(infoEnabled != true)
			return;
		
		if(window.event && window.event.srcElement)
			area = window.event.srcElement
		else
			if(e && e.target)
				area = e.target
		
		if(!area)
			return;

		if(area.nodeType == 3)
			area = getParent(area, "AREA");

		if(!area)
			return;
		
		var info = area.getAttribute("info");
		
		var div = makeInfoBox(info);

		//position the new div somewhere suitable
		var coords = area.getAttribute("coords").split(',');

		//left, top, right, bottom
		div.style.left = (parseInt(findPosX(mainImage)) + parseInt(coords[0])) + "px";
		div.style.top = (parseInt(findPosY(mainImage)) + parseInt(coords[1])) + "px";
		
		if(coords[2] - coords[0] < 120)
			div.style.width = "120px";
		else
			div.style.width = (coords[2] - coords[0]) + "px";

		//div.style.height = (coords[3] - coords[1]) + "px";

		//and finally, add the div to the document as a child of the body tag. bam.
		document.getElementsByTagName("body")[0].appendChild(div);
	}
	// }}}
	
	// hideInfo {{{
	function hideInfo(x)
	{
		if(currentInfo != null)
		{
			document.getElementsByTagName("body")[0].removeChild(currentInfo);
			currentInfo = null;
		}
	}
	// }}}
	
	// addEvent {{{
	// Add an eventListener to browsers that can do it somehow.
	// Originally by the amazing Scott Andrew.
	function addEvent(obj, evType, fn)
	{
		if(obj.addEventListener)
		{
			obj.addEventListener(evType, fn, true);
			return true;
		}
		else if(obj.attachEvent)
		{
			var r = obj.attachEvent("on"+evType, fn);
			return r;
		} 
		else 
			return false;
	}
	// }}}
	
	// attachInfo {{{
	function attachInfo()
	{
		if(currentInfo)
			hideInfo();
		
		// find the main image and store it somewhere.
		var images = document.getElementsByTagName("img");
		for(var i = 0; i < images.length; i++)
			if(images[i].id.toLowerCase() == "mainimage")
			{
				mainImage = images[i];
				break;
			}

		if(!document.createElement || !document.getElementsByTagName)
			return;
		// add namespace methods to HTML DOM; this makes the script work in both
		// HTML and XML contexts.
		
		if(!document.createElementNS)
		{
			document.createElementNS = function(ns,elt)
			{
	      	return document.createElement(elt);
			}
		}
		
		
		var areas = document.getElementsByTagName("area");
		
		for(var i = 0; i < areas.length; i++)
		{
			var area = areas[i];
			if(area.id.toLowerCase() == "default")
				addEvent(area, 'mouseover', hideInfo);
			else
				if(area.getAttribute("shape").toLowerCase() == "rect")
					if(area.title)
					{
						area.setAttribute("info", area.title);
						area.removeAttribute("title");
						addEvent(area, 'mouseover', showInfo);
					}
		}
	
	}
	// }}}

	// findPosX {{{
	function findPosX(obj)
	{
		var curleft = 0;
		if (obj.offsetParent)
		{
			while (obj.offsetParent)
			{
				curleft += obj.offsetLeft
				obj = obj.offsetParent;
			}
		}
		else if (obj.x)
			curleft += obj.x;
		return curleft;
	}
	// }}}
	
	// findPosY {{{
	function findPosY(obj)
	{
		var curtop = 0;
		if (obj.offsetParent)
		{
			while (obj.offsetParent)
			{
				curtop += obj.offsetTop
				obj = obj.offsetParent;
			}
		}
		else if (obj.y)
			curtop += obj.y;
		return curtop;
	}
	// }}}
