Element.addMethods(
{
	getInnerText : function(element)
	{
		element = $(element);
		return element.innerText && !window.opera ? element.innerText : element.innerHTML.stripScripts().unescapeHTML().replace(/[\n\r\s]+/g, ' ');
	},

	getAbsolutePosition : function(element)
	{
		var curleft = curtop = 0;

		if(element.offsetParent)
		{
			do
			{
				curleft += element.offsetLeft;
				curtop += element.offsetTop;
			}
			while(element = element.offsetParent);
		}

		return [curleft, curtop];
	}
});

document.observe('dom:loaded', function()
{
	$$('a[rel=external]').each(function(o)
	{
		o.target = '_blank';
	});
	
	$$('a[href^=#]').each(function(o)
	{
		href = o.href.substring(o.href.indexOf('#') + 1);		
		
		if($(href))
		{
			o.observe('click', function(e)
			{
				Event.stop(e);
				o = e.element();
				
				if(o.tagName.toLowerCase() != 'a')
				{
					o = o.up('a');
				}
				
				bob = o.href.substring(o.href.indexOf('#') + 1);
				
				renderEngine.addRenderable(new SmoothScroller($(bob), 0.5));
								
			});
			
		}
	});
	
});

function buildHash(keyMethod, valueMethod, source)
{
	var rtn = $H();

	source.each(function(item)
	{
		rtn.set(keyMethod(item), valueMethod(item));
	});

	return $H(rtn);
}


