// ==UserScript==
// @name           tinyurltooltip
// @namespace      d.hatena.ne.jp/ono_matope/
// @include        *
// Version 2
// ==/UserScript==


if (typeof(window.TinyURLTooltip) == 'undefined') {
	window.TinyURLTooltip = {};
	TinyURLTooltipStack=[];
	window.TinyURLTooltip.addFilter = function(f) {
		TinyURLTooltipStack.push(f);
    }
}
( function(){
	var hashLength=0;
	var scanComplete=false;
	var i=4;
	function addFilter(){
		if (window.AutoPagerize && window.AutoPagerize.addFilter) {
			window.AutoPagerize.addFilter(scanLinks);
		}else if (i-- > 0) {
			setTimeout(addFilter, 1000);
		}
	}
	var scanLinks=function(){
		var links=document.getElementsByTagName("a");
		scanComplete=false;
		for (var i=0;i<links.length;i++){
			var href=links[i].getAttribute('href');
			if(href && href.match(/^http:\/\/tinyurl\.com\/[0-9a-zA-Z]+/)){
				hashLength++;
				var linkText=links[i].textContent;
				GM_xmlhttpRequest({
					method:"get",
					url:"http://remysharp.com/tinyurlapi?url="+href,
					link:links[i],
					onload:function(responseDetails){
						var url=responseDetails.responseText.match(/\"(.*)?\"/)[1];
						this.link.setAttribute("title",url);
						this.link.setAttribute("href",url);
						this.link.innerHTML=url.substr(0,23)+"...";
						hashLength--;
						if(hashLength==0&&scanComplete){
							for(var i=0;i<TinyURLTooltipStack.length;i++){
								TinyURLTooltipStack[i]();
							}
						}
					}
				});
			}
		}
		scanComplete=true;
	}
	
	scanLinks();
	addFilter();
}) ();