// ==UserScript==
// @name           HatebuPercentage
// @namespace      http://www.kmonos.net/
// @author         k.inaba
// @include        http://b.hatena.ne.jp/*
// @description    Modify the link text to a 'Hatena-Bookmark' entry page and show how many of the users have left comments on the entry
// ==/UserScript==

// Released under the NYSL license
//  http://www.kmonos.net/nysl/


(function () {

function addInfo(a) {
	var url = a.getAttribute("href").split('\/entry\/')[1];
	url = 'http://b.hatena.ne.jp/entry/json/?url=' + encodeURIComponent(url) + '&callback=hbPercent';
	GM_xmlhttpRequest({
		method: "GET",
		url: url,
		onload: function(details) {
			var parts = eval(details.responseText);
			if(parts[0]!='undefined'){
				a.innerHTML += parts[0];
				a.parentNode.parentNode.innerHTML += parts[1];
			}
		}
	})

/*
	url = 'http://b.hatena.ne.jp/' + url;
	GM_xmlhttpRequest({
		method: "GET",
		   url: url,
		onload: function(details) {

			var withComment = 0;

			var d = details.responseText;
			while (m = d.match(/<li[^<]*<span class="timestamp">([^<]*)<\/span> *<a href="[^"]*"><img [^>]*><\/a> *<a href="[^"]*">([^<]*)<\/a> ((<span.*?<\/span>)*) <span class="comment">([^<]*)<\/span><\/li>/)) {
				d = RegExp.rightContext;
				var date = m[1];
				var id = m[2];
				var tags = m[3];
				var msg = m[5];
				if(msg)withComment++;
			}

			var temp = a.innerHTML.match(/(\d+) users$/);
			var total = temp[1];
			var num = Math.log(total) * 4;
			var pc = Math.floor(withComment / total * 100);
			var wanwan = Math.floor(withComment / total * num);
			//var cinnamon = '<img src="' + cinnamon_gif + '" width="' + wanwan * 10 + '">';
			var cinnamon = add_cinnamon(wanwan);
			a.innerHTML += ' / ' +  pc + '%';
			a.parentNode.parentNode.innerHTML +=  cinnamon;
	}})
*/

}

function hbPercent(data){
	if(!data)return false;
	var withComment = 0;
	var item = data.bookmarks;
	var l = item.length;
	for(var i=0; i<l; i++){
		if(item[i].comment!='')withComment++;
	}
	var total = data.count;
	var num = Math.log(total) * 4;
	var pc = Math.floor(withComment / total * 100);
	var wanwan = Math.floor(withComment / total * num);
	//var cinnamon = '<img src="' + cinnamon_gif + '" width="' + wanwan * 10 + '">';
	var cinnamon = add_cinnamon(wanwan);
	return [' / ' +  pc + '%', cinnamon];
}

var re1 = /^(http:\/\/b\.hatena\.ne\.jp)?\/entry\/http/;
var re2 = /users$/;

cinnamon_gif = 'data:image/gif;base64,'+
    'R0lGODlhEgANAMQAAAAAANKkSJhyN////0VERUguE72NL9i8b3tRI2ZmZu3hj3JeScukWPKmwqR0'+
    'I/fHaX5+f5lmM3pYJfnUiwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEH'+
    'AAMALAAAAAASAA0AAAVo4GAUQ2me6OA85IgiBWk6A7nKMHObBnDENZhDp2OVAI/B4+EoEIerwEMw'+
    'ACiRgQCiKA1IBhIApLR8BCLdgVQGaJOXaYnEeGxY3wMFgaCUHdt+eiUEfiYLEwsFLHwpJwkLX3SN'+
    'KISFKSEAOw==';
    
var as = document.getElementsByTagName("a");
for(var i=0; i<as.length; ++i){
	if( isHBMLink(as[i])){
		//var users = as[i].innerHTML.match(/(\d+) users$/);
		//if(users[1] > 50)
		addInfo(as[i]);
		//break;
	}
}

function add_cinnamon(num){
	var temp = '';
	var cinnamon = '<img src="' + cinnamon_gif + '">';
	while(num>0){
		temp += cinnamon;
		num--;
	}
	return temp;
}

function isHBMLink(a) {
	return re1.test(a.href) && re2.test(a.innerHTML);
}

function log(obj){
	return unsafeWindow.console.log(obj);
}

})();
