/**
 * hatena
 */
var Hatena=Hatena||{};
(function(q){var e=q.Bookmark=q.Bookmark||{};if(!e.BookmarkButton){e.origin="http://b.hatena.ne.jp";e.apiOrigin="http://api.b.hatena.ne.jp";e.staticOrigin="http://b.st-hatena.com";if(/\.hatena\.ne\.jp:3000$/.test(location.host))e.origin=e.apiOrigin=e.staticOrigin="http://local.hatena.ne.jp:3000";var l=e.ButtonUtils={},h=l.extend=function(a,b){for(var c in b)a[c]=b[c];return a},n=l.createElement=function(a,b){var c=document.createElement(a),d;for(d in b)c[d]=b[d];for(d=2;d<arguments.length;d++){var f=arguments[d];
f.nodeType||(f=document.createTextNode(f));c.appendChild(f)}return c},s=l.getLocation=function(){var a=location.href;if(a.length<document.URL.length)a=document.URL;return a},j=l.View={root:null,clientLeft:0,clientTop:0,init:function(){this.root=(document.compatMode||"")==="CSS1Compat"?document.documentElement:document.body;this.clientLeft=this.root.clientLeft||0;this.clientTop=this.root.clientTop||0},getElementRect:function(a){this.root||this.init();this.getElementRect=a.getBoundingClientRect?this.getElementRectByRect:
this.getElementRectByOffset;return this.getElementRect(a)},getElementRectByRect:function(a){a=a.getBoundingClientRect();var b=this.getScroll();return{x:a.left+b.x-this.clientLeft,y:a.top+b.y-this.clientTop,width:a.width||a.right-a.left,height:a.height||a.bottom-a.top}},getElementRectByOffset:function(a){for(var b=0,c=0,d=a,f;f=d.offsetParent;d=f){b+=d.offsetLeft;c+=d.offsetTop}return{x:b,y:c,width:a.offsetWidth,height:a.offsetHeight}},getWindowSize:function(){this.root||this.init();return{width:this.root.clientWidth,
height:this.root.clientHeight}},getDocumentSize:function(){this.root||this.init();return{width:this.root.scrollWidth,height:this.root.scrollHeight}},getScroll:function(){this.root||this.init();this.getScroll=typeof window.pageXOffset==="number"?this.getScrollByPage:this.getScrollByRoot;return this.getScroll()},getScrollByPage:function(){return{x:window.pageXOffset,y:window.pageYOffset}},getScrollByRoot:function(){return{x:this.root.scrollLeft,y:this.root.scrollTop}}},r=l.Dispatchable={addEventListener:function(a,
b){for(var c=this.getListeners(a),d=0;d<c.length;d++)if(c[d]===b)return;c.push(b)},removeEventListener:function(a,b){for(var c=this.getListeners(a),d=0;d<c.length;d++)if(c[d]===b){c.splice(d,1);break}},dispatchEvent:function(a,b){for(var c=new r.Event(a,b),d=this.getListeners(a),f=0;f<d.length;f++)d[f].call(this,c);return!c.defaultPrevented},getListeners:function(a){if(!this.hasOwnProperty("_listenersMap"))this._listenersMap={};return this._listenersMap[a]||(this._listenersMap[a]=[])}};r.Event=function(a,
b){this.type=a;this.data=b;this.defaultPrevented=false};h(r.Event.prototype,{preventDefault:function(){this.defaultPrevented=true}});var k=l.Observer=function(a,b,c,d){this.target=a;this.type=b;this.listener=c;if(d)this.listener=typeof d==="string"?function(){return c[d].apply(c,arguments)}:function(){return c.apply(d,arguments)};if(!a.addEventListener&&a.attachEvent){var f=this.listener;this.listener=function(i){return f.call(a,k.WrappedEvent.create(i))};this.start=this.startAttach;this.stop=this.stopAttach}this.start()};
h(k.prototype,{start:function(){this.target.addEventListener(this.type,this.listener,false)},stop:function(){this.target.removeEventListener(this.type,this.listener,false)},startAttach:function(){this.target.attachEvent("on"+this.type,this.listener)},stopAttach:function(){this.target.detachEvent("on"+this.type,this.listener)}});k.WrappedEvent={create:function(a){var b=document.createEventObject(a);b._event=a;b.target=a.srcElement;var c=j.getScroll();b.pageX=a.clientX+c.x-j.clientLeft;b.pageY=a.clientY+
c.y-j.clientTop;b.stopPropagation=this.stopPropagation;b.preventDefault=this.preventDefault;return b},stopPropagation:function(){this._event.cancelBubble=true},preventDefault:function(){this._event.returnValue=false}};var o=l.JSON=window.JSON||{_tokenRE:/[{}\[\],:]|-?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?\b|\"(?:[^\u0000-\u001f\"\\]|\\(?:[\"\\\/bfnrt]|u[0-9A-Fa-f]{4}))*\"|\b(?:true|false|null)\b|\s+/g,_escapeChar:function(a){return"\\u"+(65536+a.charCodeAt(0)).toString(16).substring(1)},parse:function(a){a=
String(a);if(a.replace(o._tokenRE,"")!=="")throw Error("Invalid JSON sytax");return eval("("+a+")")},stringify:function(a){switch(typeof a){case "string":return'"'+a.replace(/[\u0000-\u001f\"\\\u2028\u2029]/g,o._escapeChar)+'"';case "number":case "boolean":return""+a;case "object":if(!a)break;var b=arguments.callee;switch(Object.prototype.toString.call(a).slice(8,-1)){case "String":case "Number":case "Boolean":return b(a.valueOf());case "Array":for(var c=[],d=0;d<a.length;d++)c.push(b(a));return"["+
c.join(",")+"]";case "Object":c=[];for(d in a)a.hasOwnProperty(d)&&c.push(b(d)+":"+b(a[d]));return"{"+c.join(",")+"}"}}return"null"}},g=l.WindowMessenger=function(a,b){this.win=a;this.origin=b.replace(/^(https?:\/\/[^\/?#]+)[\s\S]*/,"$1");this.observer=new k(window,"message",this,"messageHandler")};h(g,{keySeed:Math.random()*65536<<8,createForFrame:function(a,b){var c=a.contentWindow;c.name=(++this.keySeed).toString(36)+"|"+s();c.location.replace(b);return new this(c,b)}});h(g.prototype,r);h(g.prototype,
{send:function(a,b){if(typeof b==="undefined")b=null;this.win.postMessage("HBMessage@"+o.stringify({type:a,data:b}),this.origin)},messageHandler:function(a){if(!((a.origin||a.uri.replace(/^(https?:\/\/[^\/?#]+)[\s\S]*/,"$1"))!==this.origin||a.source!=this.win||!/^HBMessage@/.test(a.data))){a=o.parse(a.data.substring(10));this.dispatchEvent(a.type,a.data)}},destroy:function(){this.observer.stop()}});if(!window.postMessage){g=l.WindowMessenger=function(a,b,c){this.win=a;this.url=b.replace(/#[\s\S]*/,
"");this.key=c;g.instances[this.key]=this;g.timerId||g.init()};h(g,{instances:{},interval:20,timerId:0,createForFrame:function(a,b){var c=a.contentWindow,d=this.makeFNVHash(b+"|"+Math.random()).toString(36);c.name=d+"|"+s();c.location.replace(b);return new this(c,b,d)},makeFNVHash:function(a){for(var b=2166136261,c=0;c<a.length;c++)b=(b*16777619^a.charCodeAt(c))>>>0;return b},init:function(){this.lastFragment=location.hash;var a=this;this.timerId=window.setInterval(function(){a.observe()},this.interval)},
observe:function(){var a=location.hash;if(a!==this.lastFragment){var b=a.match(/^#HBMessage-(\w+)-([^\/]+)\/(.+)/);if(b){this.lastFragment=this.lastFragment||"#_";a=j.getScroll();location.replace(this.lastFragment);window.scrollTo(a.x,a.y);if(a=this.instances[b[1]]){var c=decodeURIComponent(b[2]);b=o.parse(decodeURIComponent(b[3]));a.dispatchEvent(c,b)}}else this.lastFragment=a}}});h(g.prototype,r);h(g.prototype,{send:function(a,b){if(typeof b==="undefined")b=null;var c=this.url+"#HBMessage-"+this.key+
"-"+encodeURIComponent(a)+"/"+encodeURIComponent(o.stringify(b));try{this.win.location.replace(c)}catch(d){this.win.location.href=c}},destroy:function(){delete g.instances[this.key]}})}e.BookmarkButton=function(a){this.url=e.BookmarkButton.extractURL(a.href)||e.BookmarkButton.getCurrentURL();this.link=a;this.mode=e.BookmarkButton.isTouchBrowser?"goto-touch":this.link.getAttribute("data-hatena-bookmark-mode");this.setup()};h(e.BookmarkButton,{interval:428,timerId:0,setup:function(){if(!this.timerId){var a=
this;this.timerId=window.setInterval(function(){a.tryCreate()},this.interval);this.tryCreate()}},lastLinkCount:0,tryCreate:function(){var a=document.getElementsByTagName("a"),b=a.length;if(b!==this.lastLinkCount){for(var c=[],d=/(?:^|\s)hatena-bookmark-button(?:\s|$)/,f=0;f<b;f++)d.test(a[f].className)&&!a[f].getAttribute("data-hatena-bookmark-initialized")&&c.push(a[f]);for(f=0;f<c.length;f++)new e.BookmarkButton(c[f]);this.lastLinkCount=a.length}},extractURL:function(a){if(!a)return null;a=a.match(/^http:\/\/b\.hatena\.ne\.jp\/entry\/(?:add\/)?(.+)/);
if(!a)return null;a=a[1];var b=a.match(/^(?:https?(?:(:)|(%3A))|(s\/))?/);if(b[2])try{return decodeURIComponent(a)}catch(c){return unescape(a)}b[1]||(a=b[3]?"https://"+a.substring(2):"http://"+a);return a.replace(/%23/g,"#")},getCurrentURL:function(){var a=s(),b=this.getCanonicalURL();if(b){var c=a.indexOf("#");if(c>=0&&b.indexOf("#")<0)b+=a.substring(c);a=b}return a},getCanonicalURL:function(){for(var a=document.getElementsByTagName("link"),b=0;b<a.length;b++)if(!(a[b].rel.toLowerCase()!=="canonical"||
!a[b].href)){var c=document.createElement("a");c.href=a[b].href;return c.cloneNode(false).href}return null},isTouchBrowser:/\b(?:iPhone|iPod);| Android /.test(navigator.userAgent)});h(e.BookmarkButton.prototype,{setup:function(){var a=this.link.getAttribute("data-hatena-bookmark-layout");if(a==="simple"){this.link.setAttribute("data-hatena-bookmark-initialized","1");this.observer=new k(this.link,"click",this,"clickHandler");this.button=this.link;a=this.link.getElementsByTagName("img");this.anchor=
a.length===1?a[0]:this.link;a=Math.floor(new Date/1E3);a-=a%900;this.image=new Image;this.image.src=e.apiOrigin+"/entry/button/?url="+encodeURIComponent(this.url)+"&layout=simple&format=image&_ts="+a}else{var b=a==="vertical"?50:20;this.frame=n("iframe",{className:"hatena-bookmark-button-frame",title:this.link.title,frameBorder:0,scrolling:"no",allowTransparency:true,width:50,height:b});this.frame.style.cssText="width: 50px; height: "+b+"px;";this.link.parentNode.replaceChild(this.frame,this.link);
b=e.apiOrigin+"/entry/button/?url="+encodeURIComponent(this.url);if(a&&a!=="standard")b+="&layout="+encodeURIComponent(a);if(this.mode==="popup")b+="&mode="+encodeURIComponent(this.mode);this.messenger=g.createForFrame(this.frame,b);this.observer=new k(this.messenger,"click",this,"clickHandler");this.anchor=this.button=this.frame}},getTitle:function(){var a=this.link.getAttribute("data-hatena-bookmark-title");if(!a)if(a=this.link.getAttribute("data-hatena-bookmark-escaped-title"))try{a=decodeURIComponent(a)}catch(b){}if(!a&&
this.url.replace(/#.*/,"")===s().replace(/#.*/,""))a=document.title;return a},togglePanel:function(){if(!this.panel)this.panel=new e.BookmarkPanel(this.url,this.getTitle());if(this.panel.isShown)this.panel.hide();else{this.panel.show(this.anchor,this.link.getAttribute("data-hatena-bookmark-position"));if(this.url.indexOf("http://b.hatena.ne.jp/articles/")===0&&q.Bookmark.Tracker&&q.Bookmark.Tracker.firstTracker)try{q.Bookmark.Tracker.firstTracker._trackEvent("bbutton","head-newtype",this.url)}catch(a){}}},
gotoTouchBookmarklet:function(){var a=e.origin+"/bookmarklet.touch?url="+encodeURIComponent(this.url),b=this.getTitle();if(b)a+="&btitle="+encodeURIComponent(b);location.href=a},clickHandler:function(a){if(!((a.which||a.button||0)>1)){a.stopPropagation&&a.stopPropagation();a.preventDefault&&a.preventDefault();switch(this.mode){case "popup":e.BookmarkPanel.openPopup(this.url,this.getTitle());break;case "goto-touch":this.gotoTouchBookmarklet();break;default:this.togglePanel()}}},destroy:function(){this.observer&&
this.observer.stop();this.messenger&&this.messenger.destroy();this.panel&&this.panel.destroy();this.button&&this.button.parentNode&&this.button.parentNode.removeChild(this.button)}});e.BookmarkPanel=function(a,b){this.url=a;this.title=b||"";this.isShown=false;this.width=365;this.height=160;this.fixedTo="top";this.hiddenFlashes=[];this.clickObserver=new k(document,"click",this,"clickHandler");this.clickObserver.stop();this.observers=[this.clickObserver];this.setup()};h(e.BookmarkPanel,{currentPanel:null,
makePanelURL:function(a,b){var c=e.origin+"/entry/panel/?url="+encodeURIComponent(a);if(b)c+="&btitle="+encodeURIComponent(b);return c},openPopup:function(a,b){var c=this.makePanelURL(a,b);window.open(c,"hatena_bookmark_panel_popup","width=365,height=220,menubar=no,toolbar=no,resizable=yes")},hasCommonStyle:false,setupCommonStyle:function(){if(!this.hasCommonStyle){this.hasCommonStyle=true;try{var a=document.createElement("style");a.type="text/css";a.appendChild(document.createTextNode(".hatena-bookmark-bookmark-panel, .hatena-bookmark-bookmark-panel * {margin: 0; padding: 0; border: none; position: static; float: none; width: auto; height: auto; line-height: 1; vertical-align: baseline; color: #222; background: none; font-style: normal; font-weight:normal; font-size: medium; text-indent: 0; text-align: left; text-decoration: none; letter-spacing: normal; word-spacing: normal; white-space: normal;}"));
document.getElementsByTagName("head")[0].appendChild(a)}catch(b){document.createStyleSheet().cssText=".hatena-bookmark-bookmark-panel, .hatena-bookmark-bookmark-panel * {margin: 0; padding: 0; border: none; position: static; float: none; width: auto; height: auto; line-height: 1; vertical-align: baseline; color: #222; background: none; font-style: normal; font-weight:normal; font-size: medium; text-indent: 0; text-align: left; text-decoration: none; letter-spacing: normal; word-spacing: normal; white-space: normal;}"}}},
needsRebase:null,getBasePosition:function(){if(this.needsRebase===null){var a=window.getComputedStyle?getComputedStyle(document.body,null):document.body.currentStyle;this.needsRebase=!!a&&a.position!=="static"}return this.needsRebase?j.getElementRect(document.body):{x:0,y:0}}});h(e.BookmarkPanel.prototype,{setup:function(){var a=(this.title?"\u300e"+this.title+"\u300f":"\u3053\u306e\u30a8\u30f3\u30c8\u30ea\u30fc")+"\u3092\u306f\u3066\u306a\u30d6\u30c3\u30af\u30de\u30fc\u30af\u306b\u8ffd\u52a0";this.panel=
n("div",{className:"hatena-bookmark-bookmark-panel"},this.loading=n("div",null,n("span",null,"Now Loading...")),this.content=n("div",null,this.frame=n("iframe",{title:a,scrolling:"no",frameBorder:0,allowTransparency:true})));this.setupStyle();document.body.appendChild(this.panel);a=e.BookmarkPanel.makePanelURL(this.url,this.title);this.messenger=g.createForFrame(this.frame,a);this.observers.push(new k(this.frame,"load",this,"showContent"),new k(this.messenger,"ready",this,"showContent"),new k(this.messenger,
"resize",this,"resizeMessageHandler"))},setupStyle:function(){e.BookmarkPanel.setupCommonStyle();var a="width: "+this.width+"px; height: "+this.height+"px;";this.panel.style.cssText="position: absolute; z-index: 10002; display: none; "+a;this.loading.style.cssText="background-color: #fff; border: 3px solid #2c6ebd; -moz-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; text-align: center; width: "+(this.width-6)+"px; height: "+(this.height-6)+"px;";this.loading.firstChild.style.cssText=
'background: url("'+e.staticOrigin+'/images/loading.gif") left center no-repeat; padding-left: 23px; font-size: 0.85em; position: relative; top: '+(this.height/2-10)+"px;";this.content.style.cssText="display: none;";this.frame.style.cssText="display: block; "+a},show:function(a,b){if(!this.isShown){e.BookmarkPanel.currentPanel&&e.BookmarkPanel.currentPanel.hide();a&&this.anchorTo(a,b);this.panel.style.display="";this.isShown=true;this.clickObserver.start();this.hideFlashes();e.BookmarkPanel.currentPanel=
this;this.loading||this.messenger.send("notifysize")}},hideFlashes:function(){for(var a=[],b=document.getElementsByTagName("embed"),c=0,d;d=b[c];c++)d.type==="application/x-shockwave-flash"&&a.push(d);b=document.getElementsByTagName("object");for(c=0;d=b[c];c++)if(d.type==="application/x-shockwave-flash"||(d.classid||"").toLowerCase()==="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000")a.push(d);if(a.length){c=j.getElementRect(this.panel);b=c.x;d=c.y;var f=c.x+c.width,i=c.y+Math.max(c.height,300);c=0;
for(var m;m=a[c];c++){var p=j.getElementRect(m);if(!(p.x+p.width<b||f<p.x||p.y+p.height<d||i<p.y)){m.style.visibility="hidden";this.hiddenFlashes.push(m)}}}},showContent:function(){if(this.loading){this.panel.removeChild(this.loading);this.loading=null;this.content.style.display=""}},hide:function(){if(this.isShown){this.panel.style.display="none";this.isShown=false;this.clickObserver.stop();for(var a=0,b;b=this.hiddenFlashes[a];a++)b.style.visibility="";this.hiddenFlashes=[];e.BookmarkPanel.currentPanel=
null}},resize:function(a,b){if(a>0){this.panel.style.width=a+"px";this.frame.style.width=a+"px";this.width=a}if(b>0){if(this.fixedTo==="bottom")this.panel.style.top=parseFloat(this.panel.style.top)+this.height-b+"px";this.panel.style.height=b+"px";this.frame.style.height=b+"px";this.height=b}},anchorTo:function(a,b){var c=j.getElementRect(a),d=b&&b.indexOf("left")>=0,f=b&&b.indexOf("top")>=0;if(!b){f=j.getWindowSize();var i=j.getScroll();d=i.x+f.width-c.x<this.width&&c.x+c.width-i.x>=this.width;var m=
Math.max(this.height,300);f=i.y+f.height-(c.y+c.height)<m&&c.y-i.y>=m}d=d?c.x+c.width-this.width:c.x;c=f?c.y-this.height-2:c.y+c.height+2;i=e.BookmarkPanel.getBasePosition();this.panel.style.left=Math.max(d,2)-i.x+"px";this.panel.style.top=Math.max(c,2)-i.y+"px";this.fixedTo=f?"bottom":"top"},clickHandler:function(a){for(a=a.target;a;a=a.parentNode)if(a===this.panel)return;this.hide()},resizeMessageHandler:function(a){this.resize(a.data.width||-1,a.data.height||-1)},destroy:function(){this.hide();
for(var a=0,b;b=this.observers[a];a++)b.stop();this.messenger.destroy();this.panel.parentNode&&this.panel.parentNode.removeChild(this.panel)}})}})(Hatena);Hatena.Bookmark.BookmarkButton.setup();

