function stylishRDFa ()
{
	var $attrs = new Array('typeof', 'rel', 'rev', 'property', 'datatype');

	function clone ($obj)
	{
		if($obj == null || typeof($obj) != 'object')
			return $obj;
		var $rv = new $obj.constructor();
		for(var $k in $obj)
			$rv[$k] = clone($obj[$k]);
		return $rv;
	}

	function processElement ( $element , $dictionary )
	{
		// Get a copy of the prefix dictionary
		var $localdict = clone($dictionary);

		// Add locally defined prefixes to it
		for (var $i = 0; $element.attributes[$i]; $i++)
		{
			var $a = $element.attributes[$i];
			if ('xmlns:' == $a.name.substr(0, 6))
				$localdict[ $a.name.substr(6) ] = $a.value;
		}

		// Process our favourite attributes
		for (var $i = 0; $attrs[$i]; $i++)
		{
			if ($element.getAttribute($attrs[$i]))
			{
				var $expanded = '';
				
				var $tokens = $element.getAttribute($attrs[$i]).split(/\s+/);
				for (var $j = 0; $tokens[$j]; $j++)
				{
					var $bits = $tokens[$j].split(/:/);
					if ($bits.length == 2 && $localdict[$bits[0]])
					{
						$expanded = $expanded + $localdict[$bits[0]] + $bits[1] + ' ';
					}
				}
				
				if ($expanded.length > 0)
				{
					$element.setAttribute('uri-' + $attrs[$i], $expanded);
				}
			}
		}

		// Recursively process child elements
		for (var $i = 0; $element.childNodes[$i]; $i++)
		{
			if ($element.childNodes[$i].nodeType == Node.ELEMENT_NODE)
				processElement($element.childNodes[$i], $localdict);
		}
	}
	
	processElement(document.documentElement, {});
}

function stylishRDFa_addEvent ($obj, $evType, $fn)
{ 
	if ($obj.addEventListener)
	{ 
		$obj.addEventListener($evType, $fn, false); 
		return true; 
	}
	
	if ($obj.attachEvent)
		return $obj.attachEvent('on'+$evType, $fn); 

	return false;
}

stylishRDFa_addEvent(window, 'load', stylishRDFa);

