function	initUpdateKeywordHandler() {
	var	w=window,d=w.document;
	
	var	setEventHandler=(function(){
		if (w.addEventListener) {
			return function(obj,evt,handler){
				if (evt=='load'&&obj==w) {
					try {d.addEventListener("DOMContentLoaded",handler,false)} catch(e){obj.addEventListener(evt,handler,false)}
				}
				else {
					if (evt=='mousewheel'&&w.navigator.userAgent.match(/Firefox/i)) evt='DOMMouseScroll';
					obj.addEventListener(evt,handler,true);
				}
			};
		}
		else if (w.attachEvent) {
			return function(obj,evt,handler){obj.attachEvent('on'+evt,handler)};
		}
		else {
			return function(obj,evt,handler){var org=obj['on'+evt];obj['on'+evt]=function(){if(typeof org=='function')org();handler()}};
		}
	})();	//	end of setEventHandler()
	
	function	getSelectedText() {
		var	w=window,d=w.document,keyword='';
		if(w.getSelection) {
			keyword+=(w.getSelection()||'');
		}
		else if (d.getSelection) {
			keyword=d.getSelection();
		}
		else if (d.selection) {
			keyword=d.selection.createRange().text;
		}
		return keyword;
	}
	
	var	inp=d.getElementById('asin-input');
	var	updateKeyword=true;
	setEventHandler(inp,'focus',function(e){
		updateKeyword=false;
//		inp.select()
	});
	setEventHandler(inp,'blur',function(e){
		updateKeyword=true;
	});
	setInterval(function(){
		if (!updateKeyword) return;
		var	keyword=getSelectedText();
		if (keyword!=''&&inp.value!=keyword) {
			inp.value=keyword;
		}
	},300);
	
	inp.blur();
}

(function(){
	var w=window,d=w.document;
	if (!Hatena||!Hatena.Star) return;
	var getScrollHeight=function(){
		return Math.max(d.documentElement.scrollHeight,d.body.scrollHeight);
	};
	var	oldContainer=null;
	var checkInterval=500;
	var	loadEntries=null;
	
	var	getContainer=function(){
		var footer=d.getElementById('review-footer');
		var	container=footer.previousSibling;
		while (container) {
			if (container.nodeType==1&&container.className.match(/customer-review-container/)) break;
			container=container.previousSibling;
		}
		return container;
	};
	var	checkContainer=function(){
		for (;;) {
			var	curContainer=getContainer();
			if (oldContainer==curContainer) break;
			oldContainer=curContainer;
			if (oldContainer.className.match(/star-checked/)) {
				break;
			}
			if (!Hatena.Star.EntryLoader.loadEntries) {
				// for 'hspatch.js'
				Hatena.Star.EntryLoader.loadEntries=loadEntries;
			}
			new Hatena.Star.EntryLoader();
			break;
		}
		if (checkInterval) setTimeout(checkContainer,checkInterval);
	}
	Hatena.Star.EntryLoader.loadEntries=loadEntries=function(node){
		var entryLoader=Hatena.Star.EntryLoader;
		var entry;
		entries=[];
		
		var container=d.getElementById('caption');
		var link=container.getElementsByTagName('a')[0];
		if (link&&!link.className.match(/star-checked/)) {
			link.className+=' star-checked';
			var pNode=Ten.DOM.getElementsByTagAndClassName('span','bookmark',container)[0];
			if (pNode) {
				var cc=entryLoader.createCommentContainer();
				pNode.appendChild(cc);
				var sc=entryLoader.createStarContainer();
				pNode.appendChild(sc);
				entry=new Hatena.Star.Entry({
					uri					:	link.href
				,	title				:	link.title
				,	star_container		:	sc
				,	comment_container	:	cc
				,	entryNode			:	link
				});
				entries[entries.length]=entry;
			}
		}
		var container=d.getElementsByTagName('h1')[0];
		var link=container.getElementsByTagName('a')[1];
		if (link&&!link.className.match(/star-checked/)) {
			link.className+=' star-checked';
			var pNode=container;
			if (pNode) {
				var cc=entryLoader.createCommentContainer();
				pNode.appendChild(cc);
				var sc=entryLoader.createStarContainer();
				pNode.appendChild(sc);
				entry=new Hatena.Star.Entry({
					uri					:	link.href
				,	title				:	entryLoader.scrapeTitle(container)
				,	star_container		:	sc
				,	comment_container	:	cc
				,	entryNode			:	link
				});
				entries[entries.length]=entry;
			}
		}
		var	container=getContainer();
		if (!container||container.className.match(/star-checked/)) return entries;
		container.className+=' star-checked';
		var titles=Ten.DOM.getElementsByTagAndClassName('span','title',container);
		var cnt=0;
		for (var ci=0,len=titles.length; ci<len; ci++) {
			var title=titles[ci];
			var link=title.getElementsByTagName('a')[0];
			if (!link||link.className.match(/star-checked/)) continue;
			cnt++
			link.className+=' star-checked'
			var pNode=link.parentNode;
			var cc=entryLoader.createCommentContainer();
			pNode.appendChild(cc);
			var sc=entryLoader.createStarContainer();
			pNode.appendChild(sc);
			entry=new Hatena.Star.Entry({
				uri					:	link.href
			,   title				:	entryLoader.scrapeTitle(link)
			,   star_container		:	sc
			,   comment_container	:	cc
			,   entryNode			:	link
			});
			entries[entries.length]=entry;
		}
		if (!oldContainer) {
			if (d.addEventListener) {
				checkInterval=0;
				d.addEventListener("DOMNodeInserted",checkContainer,false);
			}
			else {
				checkContainer();
			}
		}
		return entries;
	}
})();
