// Embiggen URL v0.1
// Expands TinyURLs into their original 
// http://www.greg-hill.id.au  2007

// http://ghill.customer.netspace.net.au/embiggen
// This work is licensed under a Creative Commons Attribution-ShareAlike 2.1 Australia License.

if (typeof(Embiggen)=="undefined")
	Embiggen={};

if (Embiggen.runNow)
	embiggen(); 				// invoke script immediately

function embiggen(u)
{
// If a URL is supplied, embiggen that. 
// Otherwise, find all tinyURLs on the current page and unleash Dapper on them

tuRe=/([\w\.]*tinyurl.com\/)(\w+)/ig;
var links = document.links;

var k = [];
var m =[], v;

if (u)
{
	v=tuRe.exec(u);
	if (tuRe.test(u))
		k=v[2];
	else
	{
		alert("Cannot find tinyURL in "+u);
		return;
	}

launch(k);
return;
}

// pull out links, test for tinyURL in href and title
// if found, put them into the key array

for (var i=0; i<links.length; i++)
{  
	if (links[i].href.match(tuRe))
	{
		tuRe=/([\w\.]*tinyurl.com\/)(\w+)/ig;		// IE needs this redefined?
		m = tuRe.exec(links[i].href);
		k=k.concat(m[2]);
	}
  
	if (links[i].innerHTML.match(tuRe))
	{
		tuRe=/([\w\.]*tinyurl.com\/)(\w+)/ig;		// IE needs this redefined?
		m = tuRe.exec(links[i].innerHTML);
		k=k.concat(m[2]);
	}
}

k=k.sort();

if (k.length==0)
{
	alert("no tinyURLs found on this page");
	return;
}

// make key array unique
var j=[k[0]];
if (k.length>1)
	for (var i=1; i<k.length; i++)
		if (k[i]!=k[i-1])
			j=j.concat(k[i]);

launch(j);
}

function launch(k)
{
// go through key array and launch Dapper for each key

for (var i=0; i<k.length; i++)
{
var s=document.createElement("script");
s.type="text/javascript";
s.src="http://www.dapper.net/transform.php?dappName=ExpandTinyURL&transformer=JSON&extraArg_callbackFunctionWrapper=procURL&variableArg_0="+k[i];

document.getElementsByTagName("head")[0].appendChild(s);
}
return;
}

function procURL(obj)
{
// callback function for Dapper
// replaces each reference to the tinyURL with its expanded form

if (!obj.fields)
	return;

var tu=obj.fields.TinyURL[0].value;
var b, bu="";

if (!obj.fields.BigURL)
	return;

for (var i=0; i<obj.fields.BigURL.length; i++)
	bu+=obj.fields.BigURL[i].value;

bu=bu.replace(/^http:\/\//i,'');

var re = new RegExp(tu, "ig");

//b = document.body.innerHTML;
//
//document.body.innerHTML = b.replace(re, bu);

var links=document.links;
for (var i=0; i<links.length; i++)
{
	if (links[i].href.match(re))
		links[i].href="http://"+bu;

	links[i].innerHTML = links[i].innerHTML.replace(re, bu);
}

return;
}
