(function(){

var	w=window,d=w.document;

if (typeof Hatena=='undefined'||!Hatena.Star) return;

var	orgLoadEntries=Hatena.Star.EntryLoader.loadEntries;
if (Hatena.Star.EntryLoader.headerTagAndClassName) Hatena.Star.EntryLoader.headerTagAndClassName=null;

var	patIcon=new Image();
patIcon.border='0';
with (patIcon.style) {
	display='inline';
	verticalAlign='middle';
	margin='auto 2px auto 4px';
}
var	addButton=d.createElement('a');
addButton.href='http://b.hatena.ne.jp/add?mode=confirm&url=@';
addButton.target='_blank';
addButton.title='ブックマークに追加';
var	addIcon=patIcon.cloneNode(false);
addIcon.src='http://b.hatena.ne.jp/images/append.gif';
addButton.appendChild(addIcon);

var	hbLink=d.createElement('a');
hbLink.href='http://b.hatena.ne.jp/entry/#';
hbLink.target='_blank';
hbLink.title='ブックマークページへ';
with (hbLink.style) {
	display='inline';
}
var	counter=patIcon.cloneNode(false);
counter.src='http://b.hatena.ne.jp/entry/image/#';
hbLink.appendChild(counter);

var	patHBcontainer=d.createElement('span');
with (patHBcontainer.style) {
	display='inline';
	margin='0';
	padding='0';
}
patHBcontainer.appendChild(addButton);
patHBcontainer.appendChild(hbLink);

var	esharp=encodeURIComponent('#');

Hatena.Star.EntryLoader.loadEntries=function(){
	var	checkIDs=['_blogparts','_bookmark','_browserPlus'];
	var c=Hatena.Star.EntryLoader;
	var	entries=[];
	if (typeof orgLoadEntries=='function') entries=orgLoadEntries();
	
	for (var ci=0,leni=checkIDs.length; ci<leni; ci++) {
		var	mark=d.getElementById(checkIDs[ci]);
		while (mark) {
			if (mark.className=='entry') break;
			mark=mark.parentNode;
		}
		if (!mark) continue;
		var	h3=mark.getElementsByTagName('h3')[0];
		if (!h3) continue;
		var	baseLink=h3.getElementsByTagName('a')[0];
		if (!baseLink) continue;
		var	baseUri=baseLink.href;
		var	links=mark.getElementsByTagName('a');
		for (var cj=0,lenj=links.length; cj<lenj; cj++) {
			var	link=links[cj],hbContainer=null;
			if (link.href&&link.href.match(/(#_.+)$/)) {
				var	uri=baseUri+RegExp.$1,entryNode=link;
			}
			else if (link.id&&link.id.match(/^(_.+)$/)) {
				var	uri=baseUri+'#'+RegExp.$1,entryNode=link.nextSibling;
				while (entryNode) {
					if (entryNode.nodeType==1) {
						if (entryNode.tagName.toUpperCase()!='STRONG') entryNode=null;
						break;
					}
					entryNode=entryNode.nextSibling;
				}
				if (!entryNode) continue;
			}
			else if (link.href.match(/^http:\/\//)) {
				var	pNode=link.parentNode;
				if (pNode.tagName.toUpperCase()!='LI') continue;
				pNode=pNode.parentNode.parentNode;
				if (pNode.tagName.toUpperCase()!='LI') continue;
				if (!c.scrapeTitle(pNode).match(/^詳細/)) continue;
				link.target='_blank';
				var	uri=link.href,entryNode=link;
				hbContainer=patHBcontainer.cloneNode(true)
				var	uri1=uri.replace(/#/g,esharp);
				var	hbLinks=hbContainer.getElementsByTagName('a'),addButton=hbLinks[0],hbLink=hbLinks[1];
				addButton.href=addButton.href.replace(/@/,encodeURIComponent(uri));
				hbLink.href=hbLink.href.replace(/#/,uri1);
				var	counter=hbLink.getElementsByTagName('img')[0];
				counter.src=counter.src.replace(/#/,uri1);
			}
			else continue;
			
			var	pNode=entryNode.parentNode;
			var	cc=c.createCommentContainer();
			var	sc=c.createStarContainer();
			pNode.insertBefore(sc,entryNode.nextSibling);
			pNode.insertBefore(cc,sc);
			entries[entries.length]={
				uri					:	uri
			,	title				:	c.scrapeTitle(entryNode)
			,	star_container		:	sc
			,	comment_container	:	cc
			,	entryNode			:	entryNode
			,	_parentNode			:	pNode
			,	_hbContainer		:	hbContainer
			};
		}
	}
	for (var ci=0,leni=entries.length; ci<leni; ci++) {
		var	entry=entries[ci];
		if (!entry._hbContainer) continue;
		entry._parentNode.insertBefore(entry._hbContainer,entry.comment_container);
	}
	return entries;
};

})();

