「Active」を含む日記 RSS

はてなキーワード: Activeとは

2008-03-13

2ちゃんねるでやっていないと恥ずかしいエロゲ

KeyCLANNAD

Aneken Staff and Vipper姉は一級建築士 -イケない構造設計-』

アリスソフト『しまいま。』

アージュ君が望む永遠

アージュマブラヴ

TYPE-MOONFate/stay night

TYPE-MOON月姫

CIRCUS NORTHERN『D.C.P.C.』

オーバーフローSchool Days

ネクストン『ONE -輝く季節へ-』

KeyKanon

KeyAir

LeafTo Heart

D.O.家族計画

きゃんでぃそふとつよきす

きゃんでぃそふと『姉、ちゃんとしようよっ!』

ねこねこソフトみずいろ

エルフ『臭作』

エルフ『鬼作』

アスキーカオスエンジェルズ』

NavelSHUFFLE!

オーガスト夜明け前より瑠璃色な

propeller『あやかしびと

TOPCAT果てしなく青い、この空の下で…。

Leaf『雫』

Leaf『痕』

colors魔法少女アイ

JAST『天使たちの午後』

FlyingShineCROSS†CHANNEL

アトリエかぐや『姉汁-白川三姉妹におまかせ-』

たっちー永遠となった留守番 -パパは帰らない-』

ぱれっともしも明日が晴れならば

戯画この青空に約束を―

ニトロプラス沙耶の唄

ういんどみる『はぴねす!』

菅野ひろゆきこの世の果てで恋を唄う少女YU-NO

アリスソフト戦国ランス

アリスソフト鬼畜王ランス

Keyリトルバスターズ!』

Leafうたわれるもの

スタジオメビウスSNOW

戯画『BALDR FORCE』

時計おたく☆まっしぐら

たまソフトLOST CHILD』

Leaf『フルアニ』

otherwiseSense Off -a sacred story in the wind-』

CIRCUS FETISH『すくみず -フェチ☆になるもんっ!-』

ブラックサイク『EXTRAVAGANZA -蟲愛でる少女-』

GROOVERグリーングリーン

戯画パルフェ -ショコラ second brew-』

Active『DISCIPLINE -The record of a Crusade-』

D.O.加奈 -いもうと-』

Littlewitch白詰草話 -Episode of the Clovers』

ねこねこソフト銀色

エルフ『下級生』

エルフ『同級生』

アリスソフト『妻しぼり』

silkys『姫騎士アンジェリカ

ivory『とらいあんぐるハート

otherwise未来にキスを -Kiss the Future-』

ソフトハウスキャラ巣作りドラゴン

ライアーソフトForest

ライアーソフト腐り姫 -euthanasia-』

ニトロプラス鬼哭街 -The Cyber Slayer-』

ニトロプラスPhantom -PHANTOM OF INFERNO-』

Selen燐月-リンゲツ-』

すたじおみりす月陽炎

エスクードふぃぎゅ@メイト

エウシュリー『幻燐の姫将軍

Key智代アフター -It's a Wonderful Life-』

あかべぇそふとつぅ車輪の国、向日葵の少女

ニトロプラス月光のカルネヴァーレ

ニトロプラス『斬魔大聖デモンベイン

ZyX『雷の戦士ライディ』

Purple software『秋色恋華

F & C『こなたよりかなたまで

Le ChocolatSWAN SONG

ニトロプラス吸血殲鬼ヴェドゴニア

LeafRoutes -ルーツ-』

ケロQ終ノ空

ザウス永遠のアセリア

130cm『彼女たちの流儀

たまソフト世界ノ全テ

CIRCUS最終試験くじら

F & C『水月

公爵『ジサツのための101の方法』

TerraLunarロケットの夏

AUGUST『月は東に日は西に-Operation Sanctuary-』

CIRCUS水夏-SUIKA-』

アリスソフト大悪司

Leafこみっくパーティー

キャラメルBOX処女はお姉さまに恋してる

Leaf天使のいない12月

アリスソフトアトラク=ナクア

TYPE-MOON歌月十夜

PULLTOPゆのはな

ねこねこソフト『朱 -Aka-』

light群青の空を越えて

アリスソフト大番長 Big Bang Age』

Surviveゆきうた

みなとそふと君が主で執事が俺で -They are My noble Masters-』

lightDear My Friend

minoriはるのあしおと

LittlewitchQuartett!

ニトロプラス『”Hello,world.”』

HERMIT『ままらぶ』

ねこねこソフトScarlett -スカーレット- 』

ぱじゃまソフトプリンセスうぃっちぃず

Marron秋桜の空に

ALcotClover Heart's 』

Cyc『夢幻廻廊』

HERMIT『世界でいちばんNGな恋』

http://anond.hatelabo.jp/20080313030006

ハーブ厨による嫌がらせの実例

リンクアドレス文字列の".jp"を".jip"に書き換える。

編集者:xxxoxxx 
編集内容:3c3 
-+ハーブマイスターセンター[http://www.herb-meister.jp]のこと。
++ハーブマイスターセンター[http://www.herb-meister.jip]のこと。

リンクアドレスを書き換えた上で、表示を偽装する。

編集者herb-meister 
編集内容:3c3 
-http://www.kenko.com/product/seibun/sei_834001_D.html より引用。
+[http://www.herb-meister.com:title=http://www.kenko.com/product/seibun/sei_834001_D.html] より引用

ブックマークの要約文を改竄する。

** 編集者:xxxoxxx
** 編集内容:
-><blockquote cite="http://d.hatena.ne.jp/osito/20080304/p1" title="キーワード荒らし逆ギレ? - 「愛」も「萌え」も定義は広い。">
+><blockquote cite="http://d.hatena.ne.jp/osito/20080304/p1" title="キーワード荒らしの天才id:ositoです。よろしく">

http://anond.hatelabo.jp/20080311082458

から

http://anond.hatelabo.jp/20080311081417

(計55件)

http://anond.hatelabo.jp/20080307004725

から

http://anond.hatelabo.jp/20080307004753

(計29件)

http://anond.hatelabo.jp/20080306001533

から

http://anond.hatelabo.jp/20080306002034

(計15件)

など

キーワードハーブマイスター」の編集合戦が続く中、第三者が中立的視点から両論併記してくれたのに、早速偏った見方からの内容に改竄。

増田ハーブスパム投稿をしてた連中は「会社(有限会社Active Office)とはまったく無関係で何者かの仕業」という事を、xxxoxxxは知っているらしい。不思議だね。

ktuo2002、globpointの主張は「事実は確認できない」とか言って門前払いしてるくせにね。

編集者:xxxoxxx 
編集内容:5c5 7c7 10c10 
-同名のショップがいくつかあるが、リンクされているのは西新宿有限会社Active Officeが運営している店舗である。
+同名のショップがいくつかあるが、リンクされているのは西新宿有限会社Active Officeが運営している店舗であるが会社とはまったく無関係で何者かの仕業。
-はてな匿名ダイアリーにおいて、興味を持って関連情報をまとめる者が出現したほか、id:ktuo2002氏、id:globpoint氏が継続して動向を追っており、はてなグループにおいてWatch活動を行っている。リンク先になっているネットショップが宣伝書き込みを行っている、リンク先によるスパム行為である、という前提に立った活動である。
+はてな匿名ダイアリーにおいて、興味を持って関連情報をまとめる者が出現したほか、id:ktuo2002氏、id:globpoint氏が継続して動向を追っており、はてなグループにおいてWatch活動(ストーカー)を行っている。リンク先になっているネットショップが宣伝書き込みを行っている、リンク先によるスパム行為である、という前提に立った活動であるが、この会社スパムをしてる事実は確認できない。
-一方、id:saki-ha氏、id:xxxoxxx氏、id:ktuo2002-globpoint氏はそれらの行為は行き過ぎであるとして「ハーブマイスターストーカー」と名付け、ハーブマイスターは「ストーカーにあっているネットショップである」という意味へとキーワードを修正する活動を行っている。はてな匿名ダイアリーへの書き込み自体もネットストーカーによるいやがらせであり、ショップによる宣伝書き込みではないという前提に立って活動している。
+一方、id:saki-ha氏、id:xxxoxxx氏、id:ktuo2002-globpoint氏はそれらの行為は行き過ぎであるとして「ハーブマイスターストーカー」と名付け、ハーブマイスターは「ストーカーにあっているネットショップである」という意味へとキーワードを修正する活動を行っている。はてな匿名ダイアリーへの書き込み自体もネットストーカーによるいやがらせであり、ショップによる宣伝書き込みではないとい。

2008-03-10

ハーブマイスター

売業者 有限会社Active Office

Webショップ店舗ハーブマイスター HERB MEISTER

運営統括責任者 笹岡 裕

所在地 〒160-00232

東京都新宿区西新宿6-16-13

連絡先  TEL : 03-6666-6260 / FAX : 03-6666-0176

http://herb-meister.com/

http://herb-meister.com/concept.html

http://herb-meister.com/herb.html

http://herb-meister.com/kinds_of_herb.html

http://herb-meister.com/tea.html

     

     

    ハーブの効能

    ハーブの効能をご案内します。

       

       


      会社名  有限会社Active office

      ユウゲンガイシャアクティブ オフィス

      http://www.activeoffice.co.jp/

      所在地  〒160-0023

      東京都新宿区西新宿6-16-13

      連絡先  TEL : 03-6666-6260 / FAX : 03-6666-0176

      代表取締役  笹岡 裕

      業務内容 Yahoo!登録代行      http://www.activeoffice.co.jp/yahoo/index.html  

           リスティング広告管理    http://www.activeoffice.co.jp/listing/index.html

           新規ホームページ制作    http://www.activeoffice.co.jp/new/index.html

           ホームページリニューアル  http://www.activeoffice.co.jp/renewal/index.html

           SEO           http://www.activeoffice.co.jp/seo/seo_sem.html

                         http://www.activeoffice.co.jp/company.html

      有限会社ActiveOffice

      有限会社Active Office

      会社名  有限会社Active Office

      ユウゲンガイシャアクティブ オフィス

      http://www.activeoffice.co.jp/

      所在地  〒160-0023

      東京都新宿区西新宿6-16-13

      連絡先  TEL : 03-6666-6260 / FAX : 03-6666-0176

      代表取締役  笹岡 裕

      業務内容 Yahoo!登録代行      http://www.activeoffice.co.jp/yahoo/index.html  

           リスティング広告管理    http://www.activeoffice.co.jp/listing/index.html

           新規ホームページ制作    http://www.activeoffice.co.jp/new/index.html

           ホームページリニューアル  http://www.activeoffice.co.jp/renewal/index.html

           SEO           http://www.activeoffice.co.jp/seo/seo_sem.html

                         http://www.activeoffice.co.jp/company.html

      売業者 有限会社Active Office

      Webショップ店舗ハーブマイスター HERB MEISTER

      運営統括責任者 笹岡 裕

      所在地 〒160-00232

      東京都新宿区西新宿6-16-13

      連絡先  TEL : 03-6666-6260 / FAX : 03-6666-0176

      http://herb-meister.com/

      2008-01-10

      http://anond.hatelabo.jp/20080104113811

      ハーブマイスター関連日記

      はてな

      herb-meisterherb-meisterの日記

      hiroshi-ichijyoハーブ日記

      herb-meister-1ハーブマイスターの日記

      goo

      健康日記

      Google

      ハーブ

      livedoor

      健康日記 - livedoor Blog(ブログ)

      excite

      健康日記

      seesaa

      ハーブティーについて:エンドウマメ日記

      ゴルフ練習場

      東京都板橋区のゴルフ練習場

      神奈川県逗子市のゴルフ練習場

      ドクターハーブ

      ハーブ専門店ドクターハーブ

      ハーブとハーブティーの専門店ドクターハーブ

      制作

      ホームページ制作会社|(東京都新宿区)-WEBサイト作成のActive Office SEO/SEMやリスティング広告も

      相互リンク

      ホームページ制作/リスティング広告/SEOのアクティブオフィス 相互リンク集【ハーブ】

      弁護士 浜田卓二郎 相互リンク 

      Mebit RMT 相互リンク 

      たおるず 相互リンク 健康・ダイエット

      みんなでつなごう相互リンクの輪〜通信販売〜

      相互リンク募集中!ページビューランキングでアクセスアップ! 健康・ダイエット

      株式会社クレヨン 相互リンク 

      ロビンフット 相互リンク 

      相互リンク|キャッシング比較 

      相互リンク募集中 ハウスクリーニング(掃除代行)のおそうじ専科 

      SEO対策サプリRSS - 受信箱

      Link Station » 美容 » iximq

      2008-01-04

      検索スパム研究

      google:ハーブマイスター

      2008/1/3 検索結果10,100 件

      ハーブマイスターセンターPR2

      販売業者 有限会社ハーブマイスターセンター

      運営統括責任者大島永子、NPO法人日本ハーブ振興協会認定資格プロフェッショナルアドバイザー・オブ・ハーブ」(PAH)保持

      住所 東京都港区麻布十番2-8-17

      通販店舗販売、講師派遣イベント支援その他

      ハーブ専門のお店 ハーブとハーブティーのハーブマイスターPR3

      販売業者 有限会社Active Office

      Webショップ店舗ハーブマイスター HERB MEISTER

      運営統括責任者 笹岡 裕

      所在地 東京都新宿区西新宿6-16-13

      WEB制作会社通販部門らしい。成功報酬SEOActive Office相互リンクページには、ペット用品関連の検索リンクが大量にある。よくわからん。カテゴリ別ページはハーブマイスター以外リンクなし。

      ハーブマイスターセンター - 楽天ブログ(Blog)PR1

      ハーブマイスターセンターの公式ブログ

      ハーブマイスターとは - はてなダイアリーPR-

      はてなキーワードd:keyword:ハーブマイスター編集合戦d:id:hiroshi-ichijyo,d:id:ktuo2002,d:id:globpoint,d:id:herb-meister

      【楽天市場】感じるハーブ:楽天ブックス

      (財)日本特産農産物協会認定ハーブマイスター外山たらの著書

      NAMAAN - ハーブマイスター

      ブログ検索エンジンNAMAANによる検索結果。

      http://d.hatena.ne.jp/hiroshi-ichijyo/キーワード羅列ダイアリーばかりが並びます。

      「ハーブマイスター」に関連した写真、動画、ブログ、2chスレッド - はてなRSS

      はてなRSSキーワードハーブマイスター

      http://d.hatena.ne.jp/hiroshi-ichijyo/キーワード羅列ダイアリーばかりが並びます。

      ハーブマイスター大島永子 - ハーブマイスターセンター

      ハーブマイスターセンターサイト内ページ

      ハーブマイスターセンター - カラメル

      ショッピングポータルCalamel内のハーブマイスターのページ

      企業検索サービスhotfrog内の検索結果

      ハーブマイスターセンター麻布本店 - iタウンページ

      iタウンページ内、ハーブマイスター麻布本店の店舗情報

      ハーブマイスターセンター麻布本店 - クチコミ - 麻布十番 - Yahoo!グルメ

      Yahoo!グルメ[麻布][カフェ]で登録された店舗情報

      ハーブマイスターセンターのHPリニューアルオープン!! - ハーブマイスターセンター - 楽天ブログ(Blog)

      ハーブマイスターセンター公式ブログ内のページ

      Vida en Barcelona // Mistress Of Spices ☆ハーブマイスター

      個人ブログでのスペイン映画感想

      健康日記

      gooブログRSSフィード

      ハーブ関連キーワードと「ハーブハーブティー専門店 ハーブマイスター」の繰り返し

      ハーブティー(herb tea)のお店 ハーブマイスター Herb Meister

      ハーブマイスター移転前の残骸か?ドクターハーブというショップもある(あった?)らしい。

      ホルモンビューティーダイエット 100g - ハーブマイスターセンター

      ハーブマイスターセンターサイト内ページ

      ハーブマイスターセンター

      ハーブマイスターセンター公式ブログRSSフィード

      はてなRSSキーワードアイブライト

      ハーブマイスターセンター麻布本店 - 地図 - 麻布十番 - Yahoo!グルメ

      Yahoo!グルメ[麻布][カフェ]で登録された店舗情報

      Yahoo!オークション検索結果(該当なし)

      健康日記 ハーブティー

      中身ははてなd:id:herb-meisterと一緒。ハーブマイスターへの誘導リンクの羅列だけの日記の繰り返し

      現在該当なし

      マイスタープロフィール

      島根県地域興しマイスターの紹介。ただし現在の島根県公式ページ内リストにはのっていない。詳細は不明。

      ハーブ: ハーブ

      健康日記と同じ。Googleブログでのハーブマイスター誘導ページ。

      ハーブについて

      個人日記ハーブに関するトピックリンク

      日本ハーブ振興協会 | ショップ

      NPO法人日本ハーブ振興協会サイト内のハーブマイスターセンターショップ紹介

      健康日記 - livedoor Blog(ブログ)

      livedoorblog内のハーブマイスター誘導ページ

      【 東京都の花屋 】ハーブマイスターセンター麻布本店 東京都港区麻布十番2丁目8−17 (NSK)

      西日本総合企画による花屋検索サイト内登録情報

      ハーブマイスターセンター公式ブログ携帯電話

      闘う!?北海道フードマイスターの日々☆ mameがデビューします!

      個人日記。ただし検索にヒットしたのはハーブマイスターからのトラックバック

      トラックバック元も個人日記

      ブログ検索エンジンNAMAANによる検索結果。

      http://d.hatena.ne.jp/hiroshi-ichijyo/キーワード羅列ダイアリーが並びます。

      無脳詩人 djack

      トラックバックを受け取ると、その元記事を使った詩を作る人口無能ハーブマイスターTBを送ったらしい。

      ハーブの情報については、ポノピープル

      LOHASING/ロハシングによるLOHASブロガーのためのポータルサイト PONO People(ポノピープル)内での検索結果。ハーブマイスターセンター公式サイトリンク

      サービス案内 - SOUK

      コンサルティング業務の有限会社スーク登録スペシャリストとしての、ハーブマイスターセンター大島永子の紹介。

      ホームページ制作/リスティング広告/SEOのアクティブオフィス 相互リンク集【ハーブ】

      activeofficeサイト相互リンクページ、自社webショップであるハーブマイスターへのリンク

      健康日記 : ハーブ

      エキサイトブログ内のハーブマイスター誘導ページ

      ハーブは天才!?はが爽やか!

      ブログ検索?

      ハーブティーについて:エンドウマメ日記

      seesaaブログハーブマイスター誘導ページ

      健康日記 - livedoor Blog(ブログ)

      livedoorブログハーブマイスター誘導ページ

      キーワードでつながるクチコミ追跡サイト [ブログサンロクマル]検索結果

      ハーブマイスターで検索すれば誘導ページが多数ヒットする。

      http://d.hatena.ne.jp/d-sm/は何者?ハーブマイスター関係サイト一覧がサイドバーに並んでいる。

      Yahoo!+Googleの検索結果

      【コラム】たらおじさんの野菜・ハーブ作り入門 (1) 専門家が伝授するプランターで作る失敗しない栽培術 | ライフ | マイコミジャーナル

      日本特産農産物協会認定ハーブマイスター外山たらのコラム

      疲れたのでここまで

      2007-09-23

      増田の親スレッドのみ表示するproxomitronフィルタつくったよ!!

      http://wakkaya.com/sukkirishimasuda.jpg

      こんなふうにスッキリスレのみ表示できるよ!

      既出だったらごめん><

      [Patterns]
      Name = "masuda"
      Active = TRUE
      Bounds = "<div class="section">*</div>"
      Limit = 32767
      Match = "<div class="section">*>anond*</div>"
      
      
      [Patterns]
      Name = "masuda"
      Active = TRUE
      Bounds = "<div class="section">*</div>"
      Limit = 32767
      Match = "<div class="section">*>http://anond*</div>"
      




      設定方法は

      http://aoix.hp.infoseek.co.jp/proxomitron.html

      が分かりやすくておすすめだよ!

      2007-07-19

      /* Ten */
      if (typeof(Ten) == 'undefined') {
          Ten = {};
      }
      Ten.NAME = 'Ten';
      Ten.VERSION = 0.06;
      
      /* Ten.Class */
      Ten.Class = function(klass, prototype) {
          if (klass && klass.initialize) {
      	var c = klass.initialize;
          } else if(klass && klass.base) {
              var c = function() { return klass.base[0].apply(this, arguments) };
          } else {
      	var c = function() {};
          }
          c.prototype = prototype || {};
          c.prototype.constructor = c;
          Ten.Class.inherit(c, klass);
          if (klass && klass.base) {
              for (var i = 0;  i < klass.base.length; i++) {
      	    var parent = klass.base[i];
                  if (i == 0) {
                      c.SUPER = parent;
                      c.prototype.SUPER = parent.prototype;
                  }
                  Ten.Class.inherit(c, parent);
                  Ten.Class.inherit(c.prototype, parent.prototype);
              }
          }
          return c;
      }
      Ten.Class.inherit = function(child,parent) {
          for (var prop in parent) {
              if (typeof(child[prop]) != 'undefined' || prop == 'initialize') continue;
              child[prop] = parent[prop];
          }
      }
      
      /*
      // Basic Ten Classes
      **/
      
      /* Ten.JSONP */
      Ten.JSONP = new Ten.Class({
          initialize: function(uri,obj,method) {
              if (Ten.JSONP.Callbacks.length) {
                  setTimeout(function() {new Ten.JSONP(uri,obj,method)}, 500);
                  return;
              }
              var del = uri.match(/\?/) ? '&' : '?';
              uri += del + 'callback=Ten.JSONP.callback';
              if (!uri.match(/timestamp=/)) {
                  uri += '&' + encodeURI(new Date());
              }
              if (obj && method) Ten.JSONP.addCallback(obj,method);
              this.script = document.createElement('script');
              this.script.src = uri;
              this.script.type = 'text/javascript';
              document.getElementsByTagName('head')[0].appendChild(this.script);
          },
          addCallback: function(obj,method) {
              Ten.JSONP.Callbacks.push({object: obj, method: method});
          },
          callback: function(args) {
              // alert('callback called');
              var cbs = Ten.JSONP.Callbacks;
              for (var i = 0; i < cbs.length; i++) {
                  var cb = cbs[i];
                  cb.object[cb.method].call(cb.object, args);
              }
              Ten.JSONP.Callbacks = [];
          },
          MaxBytes: 8000,
          Callbacks: []
      });
      
      /* Ten.XHR */
      Ten.XHR = new Ten.Class({
          initialize: function(uri,opts,obj,method) {
              if (!uri) return;
              this.request = Ten.XHR.getXMLHttpRequest();
              this.callback = {object: obj, method: method};
              var xhr = this;
              var prc = this.processReqChange;
              this.request.onreadystatechange = function() {
                  prc.apply(xhr, arguments);
              }
              var method = opts.method || 'GET';
              this.request.open(method, uri, true);
              if (method == 'POST') {
                  this.request.setRequestHeader('Content-Type',
                                                'application/x-www-form-urlencoded');
              }
              var data = opts.data ? Ten.XHR.makePostData(opts.data) : null;
              this.request.send(data);
          },
          getXMLHttpRequest: function() {
              var xhr;
              var tryThese = [
                  function () { return new XMLHttpRequest(); },
                  function () { return new ActiveXObject('Msxml2.XMLHTTP'); },
                  function () { return new ActiveXObject('Microsoft.XMLHTTP'); },
                  function () { return new ActiveXObject('Msxml2.XMLHTTP.4.0'); },
              ];
              for (var i = 0; i < tryThese.length; i++) {
                  var func = tryThese[i];
                  try {
                      xhr = func;
                      return func();
                  } catch (e) {
                      //alert(e);
                  }
              }
              return xhr;
          },
          makePostData: function(data) {
              var pairs = [];
              var regexp = /%20/g;
              for (var k in data) {
                  var v = data[k].toString();
                  var pair = encodeURIComponent(k).replace(regexp,'+') + '=' +
                      encodeURIComponent(v).replace(regexp,'+');
                  pairs.push(pair);
              }
              return pairs.join('&');
          }
      },{
          processReqChange: function() {
              var req = this.request;
              if (req.readyState == 4) {
                  if (req.status == 200) {
                      var cb = this.callback;
                      cb.object[cb.method].call(cb.object, req);
                  } else {
                      alert("There was a problem retrieving the XML data:\n" +
                            req.statusText);
                  }
              }
          }
      });
      
      /* Ten.Observer */
      Ten.Observer = new Ten.Class({
          initialize: function(element,event,obj,method) {
              var func = obj;
              if (typeof(method) == 'string') {
                  func = obj[method];
              }
              this.element = element;
              this.event = event;
              this.listener = function(event) {
                  return func.call(obj, new Ten.Event(event || window.event));
              }
              if (this.element.addEventListener) {
                  if (this.event.match(/^on(.+)$/)) {
                      this.event = RegExp.$1;
                  }
                  this.element.addEventListener(this.event, this.listener, false);
              } else if (this.element.attachEvent) {
                  this.element.attachEvent(this.event, this.listener);
              }
          }
      },{
          stop: function() {
              if (this.element.removeEventListener) {
                  this.element.removeEventListener(this.event,this.listener,false);
              } else if (this.element.detachEvent) {
                  this.element.detachEvent(this.event,this.listener);
              }
          }
      });
      
      /* Ten.Event */
      Ten.Event = new Ten.Class({
          initialize: function(event) {
              this.event = event;
          },
          keyMap: {
              8:"backspace", 9:"tab", 13:"enter", 19:"pause", 27:"escape", 32:"space",
              33:"pageup", 34:"pagedown", 35:"end", 36:"home", 37:"left", 38:"up",
              39:"right", 40:"down", 44:"printscreen", 45:"insert", 46:"delete",
              112:"f1", 113:"f2", 114:"f3", 115:"f4", 116:"f5", 117:"f6", 118:"f7",
              119:"f8", 120:"f9", 121:"f10", 122:"f11", 123:"f12",
              144:"numlock", 145:"scrolllock"
          }
      },{
          mousePosition: function() {
              if (!this.event.clientX) return;
              return Ten.Geometry.getMousePosition(this.event);
          },
          isKey: function(name) {
              var ecode = this.event.keyCode;
              if (!ecode) return;
              var ename = Ten.Event.keyMap[ecode];
              if (!ename) return;
              return (ename == name);
          },
          targetIsFormElements: function() {
              var target = this.event.target;
              if (!target) return;
              var T = (target.tagName || '').toUpperCase();
              return (T == 'INPUT' || T == 'SELECT' || T == 'OPTION' ||
                      T == 'BUTTON' || T == 'TEXTAREA');
          },
          stop: function() {
              var e = this.event;
              if (e.stopPropagation) {
                  e.stopPropagation();
                  e.preventDefault();
              } else {
                  e.cancelBubble = true;
                  e.returnValue = false;
              }
          }
      });
      
      /* Ten.DOM */
      Ten.DOM = new Ten.Class({
          getElementsByTagAndClassName: function(tagName, className, parent) {
              if (typeof(parent) == 'undefined') {
                  parent = document;
              }
              var children = parent.getElementsByTagName(tagName);
              if (className) { 
                  var elements = [];
                  for (var i = 0; i < children.length; i++) {
                      var child = children[i];
                      var cls = child.className;
                      if (!cls) {
                          continue;
                      }
                      var classNames = cls.split(' ');
                      for (var j = 0; j < classNames.length; j++) {
                          if (classNames[j] == className) {
                              elements.push(child);
                              break;
                          }
                      }
                  }
                  return elements;
              } else {
                  return children;
              }
          },
          removeEmptyTextNodes: function(element) {
              var nodes = element.childNodes;
              for (var i = 0; i < nodes.length; i++) {
                  var node = nodes[i];
                  if (node.nodeType == 3 && !/\S/.test(node.nodeValue)) {
                      node.parentNode.removeChild(node);
                  }
              }
          },
          nextElement: function(elem) {
              do {
                  elem = elem.nextSibling;
              } while (elem && elem.nodeType != 1);
              return elem;
          },
          prevElement: function(elem) {
              do {
                  elem = elem.previousSibling;
              } while (elem && elem.nodeType != 1);
              return elem;
          },
          scrapeText: function(node) {
              var rval = [];
              (function (node) {
                  var cn = node.childNodes;
                  if (cn) {
                      for (var i = 0; i < cn.length; i++) {
                          arguments.callee.call(this, cn[i]);
                      }
                  }
                  var nodeValue = node.nodeValue;
                  if (typeof(nodeValue) == 'string') {
                      rval.push(nodeValue);
                  }
              })(node);
              return rval.join('');
          },
          onLoadFunctions: [],
          loaded: false,
          timer: null,
          addEventListener: function(event,func) {
              if (event != 'load') return;
              Ten.DOM.onLoadFunctions.push(func);
              Ten.DOM.checkLoaded();
          },
          checkLoaded: function() {
              var c = Ten.DOM;
              if (c.loaded) return true;
              if (document && document.getElementsByTagName &&
                  document.getElementById && document.body) {
                  if (c.timer) {
                      clearInterval(c.timer);
                      c.timer = null;
                  }
                  for (var i = 0; i < c.onLoadFunctions.length; i++) {
                          c.onLoadFunctions[i]();
                  }
                  c.onLoadFunctions = [];
                  c.loaded = true;
              } else {
                  c.timer = setInterval(c.checkLoaded, 13);
              }
          }
      });
      
      /* Ten.Style */
      Ten.Style = new Ten.Class({
          applyStyle: function(elem, style) {
              for (prop in style) {
                  elem.style[prop] = style[prop];
              }
          }
      });
      
      /* Ten.Geometry */
      Ten.Geometry = new Ten.Class({
          initialize: function() {
              if (Ten.Geometry._initialized) return;
              var func = Ten.Geometry._functions;
              var de = document.documentElement;
              if (window.innerWidth) {
                  func.getWindowWidth = function() { return window.innerWidth; }
                  func.getWindowHeight = function() { return window.innerHeight; }
                  func.getXScroll = function() { return window.pageXOffset; }
                  func.getYScroll = function() { return window.pageYOffset; }
              } else if (de && de.clientWidth) {
                  func.getWindowWidth = function() { return de.clientWidth; }
                  func.getWindowHeight = function() { return de.clientHeight; }
                  func.getXScroll = function() { return de.scrollLeft; }
                  func.getYScroll = function() { return de.scrollTop; }
              } else if (document.body.clientWidth) {
                  func.getWindowWidth = function() { return document.body.clientWidth; }
                  func.getWindowHeight = function() { return document.body.clientHeight; }
                  func.getXScroll = function() { return document.body.scrollLeft; }
                  func.getYScroll = function() { return document.body.scrollTop; }
              }
              Ten.Geometry._initialized = true;
          },
          _initialized: false,
          _functions: {},
          getScroll: function() {
              if (!Ten.Geometry._initialized) new Ten.Geometry;
              return {
                  x: Ten.Geometry._functions.getXScroll(),
                  y: Ten.Geometry._functions.getYScroll()
              };
          },
          getMousePosition: function(pos) {
              // pos should have clientX, clientY same as mouse event
              if ((navigator.userAgent.indexOf('Safari') > -1) &&
                  (navigator.userAgent.indexOf('Version/') < 0)) {
                  return {
                      x: pos.clientX,
                      y: pos.clientY
                  };
              } else {
                  var scroll = Ten.Geometry.getScroll();
                  return {
                      x: pos.clientX + scroll.x,
                      y: pos.clientY + scroll.y
                  };
              }
          },
          getElementPosition: function(e) {
              return {
                  x: e.offsetLeft,
                  y: e.offsetTop
              };
          },
          getWindowSize: function() {
              if (!Ten.Geometry._initialized) new Ten.Geometry;
              return {
                  w: Ten.Geometry._functions.getWindowWidth(),
                  h: Ten.Geometry._functions.getWindowHeight()
              };
          }
      });
      
      /* Ten.Position */
      Ten.Position = new Ten.Class({
          initialize: function(x,y) {
              this.x = x;
              this.y = y;
          },
          subtract: function(a,b) {
              return new Ten.Position(a.x - b.x, a.y - b.y);
          }
      });
      
      /*
      // require Ten.js
      **/
      
      /* Ten.SubWindow */
      Ten.SubWindow = new Ten.Class({
          initialize: function() {
              var c = this.constructor;
              if (c.singleton && c._cache) {
                  return c._cache;
              }
              var div = document.createElement('div');
              Ten.Style.applyStyle(div, Ten.SubWindow._baseStyle);
              Ten.Style.applyStyle(div, c.style);
              this.window = div;
              this.addContainerAndCloseButton();
              document.body.appendChild(div);
              if (c.draggable) {
                  this._draggable = new Ten.Draggable(div, this.handle);
              }
              if (c.singleton) c._cache = this;
              return this;
          },
          _baseStyle: {
              color: '#000',
              position: 'absolute',
              display: 'none',
              zIndex: 2,
              left: 0,
              top: 0,
              backgroundColor: '#fff',
              border: '1px solid #bbb'
          },
          style: {
              padding: '2px',
              textAlign: 'center',
              borderRadius: '6px',
              MozBorderRadius: '6px',
              width: '100px',
              height: '100px'
          },
          handleStyle: {
              position: 'absolute',
              top: '0px',
              left: '0px',
              backgroundColor: '#f3f3f3',
              borderBottom: '1px solid #bbb',
              width: '100%',
              height: '30px'
          },
          containerStyle: {
              margin: '32px 0 0 0',
              padding: '0 10px'
          },
          // closeButton: 'close.gif',
          closeButton: 'http://s.hatena.com/images/close.gif',
          closeButtonStyle: {
              position: 'absolute',
              top: '8px',
              right: '10px',
              cursor: 'pointer'
          },
          _baseScreenStyle: {
              position: 'absolute',
              top: '0px',
              left: '0px',
              display: 'none',
              zIndex: 1,
              overflow: 'hidden',
              width: '100%',
              height: '100%'
          },
          screenStyle: {},
          showScreen: true,
          singleton: true,
          draggable: true,
          _cache: null
      },{
          screen: null,
          windowObserver: null,
          visible: false,
          addContainerAndCloseButton: function() {
              var win = this.window;
              var c = this.constructor;
              var div = document.createElement('div');
              win.appendChild(div);
              Ten.Style.applyStyle(div, c.containerStyle);
              this.container = div;
              if (c.handleStyle) {
                  var handle = document.createElement('div');
                  Ten.Style.applyStyle(handle, c.handleStyle);
                  win.appendChild(handle);
                  this.handle = handle;
              }
              if (c.closeButton) {
      	    var btn = document.createElement('img');
                  btn.src = c.closeButton;
                  btn.alt = 'close';
                  Ten.Style.applyStyle(btn, c.closeButtonStyle);
                  win.appendChild(btn);
                  new Ten.Observer(btn, 'onclick', this, 'hide');
                  this.closeButton = btn;
              }
              if (c.showScreen) {
                  var screen = document.createElement('div');
                  Ten.Style.applyStyle(screen, Ten.SubWindow._baseScreenStyle);
                  Ten.Style.applyStyle(screen, c.screenStyle);
                  document.body.appendChild(screen);
                  this.screen = screen;
                  new Ten.Observer(screen, 'onclick', this, 'hide');
              }
          },
          show: function(pos) {
              pos = (pos.x && pos.y) ? pos : {x:0, y:0};
              with (this.window.style) {
                  display = 'block';
                  left = pos.x + 'px';
                  top = pos.y + 'px';
              }
              if (this.screen) {
                  with (this.screen.style) {
                      display = 'block';
                      left = Ten.Geometry.getScroll().x + 'px';
                      top = Ten.Geometry.getScroll().y + 'px';
                  }
              }
              this.windowObserver = new Ten.Observer(document.body, 'onkeypress', this, 'handleEscape');
              this.visible = true;
          },
          handleEscape: function(e) {
              if (!e.isKey('escape')) return;
              this.hide();
          },
          hide: function() {
              if (this._draggable) this._draggable.endDrag();
              this.window.style.display = 'none';
              if (this.screen) this.screen.style.display = 'none';
              if (this.windowObserver) this.windowObserver.stop();
              this.visible = false;
          }
      });
      
      /* Ten.Draggable */
      Ten.Draggable = new Ten.Class({
          initialize: function(element,handle) {
              this.element = element;
              this.handle = handle || element;
              this.startObserver = new Ten.Observer(this.handle, 'onmousedown', this, 'startDrag');
              this.handlers = [];
          }
      },{
          startDrag: function(e) {
              if (e.targetIsFormElements()) return;
              this.delta = Ten.Position.subtract(
                  e.mousePosition(),
                  Ten.Geometry.getElementPosition(this.element)
              );
              this.handlers = [
                  new Ten.Observer(document, 'onmousemove', this, 'drag'),
                  new Ten.Observer(document, 'onmouseup', this, 'endDrag'),
                  new Ten.Observer(this.element, 'onlosecapture', this, 'endDrag')
              ];
              e.stop();
          },
          drag: function(e) {
              var pos = Ten.Position.subtract(e.mousePosition(), this.delta);
              Ten.Style.applyStyle(this.element, {
                  left: pos.x + 'px',
                  top: pos.y + 'px'
              });
              e.stop();
          },
          endDrag: function(e) {
              for (var i = 0; i < this.handlers.length; i++) {
                  this.handlers[i].stop();
              }
              if(e) e.stop();
          }
      });
      
      /* Hatena */
      if (typeof(Hatena) == 'undefined') {
          Hatena = {};
      }
      
      /* Hatena.User */
      Hatena.User = new Ten.Class({
          initialize: function(name) {
              this.name = name;
          },
          getProfileIcon: function(name) {
              if (!name) name = 'user';
              var pre = name.match(/^[\w-]{2}/)[0];
              var img = document.createElement('img');
              img.src = 'http://www.hatena.ne.jp/users/' + pre + '/' + name + '/profile_s.gif';
              img.alt = name;
              img.setAttribute('class', 'profile-icon');
              img.setAttribute('width','16px');
              img.setAttribute('height','16px');
              with (img.style) {
                  margin = '0 3px';
                  border = 'none';
                  verticalAlign = 'middle';
              }
              return img;
          }
      }, {
          profileIcon: function() {
              return Hatena.User.getProfileIcon(this.name);
          }
      });
      
      /* Hatena.Star */
      if (typeof(Hatena.Star) == 'undefined') {
          Hatena.Star = {};
      }
      
      /*
      // Hatena.Star.* classes //
      **/
      if (window.location && window.location.host.match(/hatena\.com/)) {
          Hatena.Star.BaseURL = 'http://s.hatena.com/';
      } else {
          Hatena.Star.BaseURL = 'http://s.hatena.ne.jp/';
      }
      Hatena.Star.Token = null;
      
      /* Hatena.Star.User */
      Hatena.Star.User = new Ten.Class({
          base: [Hatena.User],
          initialize: function(name) {
              if (Hatena.Star.User._cache[name]) {
                  return Hatena.Star.User._cache[name];
              } else {
                  this.name = name;
                  Hatena.Star.User._cache[name] = this;
                  return this;
              }
          },
          _cache: {}
      },{
          userPage: function() {
              return Hatena.Star.BaseURL + this.name + '/';
          }
      });
      
      /* Hatena.Star.Entry */
      Hatena.Star.Entry = new Ten.Class({
          initialize: function(e) {
              this.entry = e;
              this.uri = e.uri;
              this.title = e.title;
              this.star_container = e.star_container;
              this.comment_container = e.comment_container;
              this.stars = [];
              this.comments = [];
          },
          maxStarCount: 11
      },{
          flushStars: function() {
              this.stars = [];
              this.star_container.innerHTML = '';
          },
          bindStarEntry: function(se) {
              this.starEntry = se;
              for (var i = 0; i < se.stars.length; i++) {
                  if (typeof(se.stars[i]) == 'number') {
                      this.stars.push(new Hatena.Star.InnerCount(se.stars[i],this));
                  } else {
                      this.stars.push(new Hatena.Star.Star(se.stars[i]));
                  }
              }
              if (se.comments && !this.comments.length) {
                  for (var i = 0; i < se.comments.length; i++) {
                      this.comments.push(new Hatena.Star.Comment(se.comments[i]));
                  }
              }
              this.can_comment = se.can_comment;
          },
          setCanComment: function(v) {
              this.can_comment = v;
          },
          showButtons: function() {
              this.addAddButton();
              this.addCommentButton();
          },
          addAddButton: function() {
              if (this.star_container) {
                  this.addButton = new Hatena.Star.AddButton(this);
                  this.star_container.appendChild(this.addButton);
              }
          },
          addCommentButton: function() {
              if (this.comment_container) {
                  this.commentButton = new Hatena.Star.CommentButton(this);
                  this.comment_container.appendChild(this.commentButton.img);
              }
          },
          showStars: function() {
              var klass = this.constructor;
              // if (this.stars.length > klass.maxStarCount) {
              //     var ic = new Hatena.Star.InnerCount(this.stars.slice(1,this.stars.length));
              //     this.star_container.appendChild(this.stars[0]);
              //     this.star_container.appendChild(ic);
              //     this.star_container.appendChild(this.stars[this.stars.length - 1]);
              // } else {
              for (var i = 0; i < this.stars.length; i++) {
                  this.star_container.appendChild(this.stars[i]);
              }
          },
          showCommentButton: function() {
              if (this.can_comment) {
                  this.commentButton.show();
                  if (this.comments.length) this.commentButton.activate();
              } else {
                  // this.commentButton.hide();
              }
          },
          addStar: function(star) {
              this.stars.push(star);
              this.star_container.appendChild(star);
          },
          addComment: function(com) {
              if (!this.comments) this.comments = [];
              if (this.comments.length == 0) {
                  this.commentButton.activate();
              }
              this.comments.push(com);
          },
          showCommentCount: function() {
              this.comment_container.innerHTML += this.comments.length;
          }
      });
      
      /* Hatena.Star.Button */
      Hatena.Star.Button = new Ten.Class({
          createButton: function(args) {
              var img = document.createElement('img');
              img.src = args.src;
              img.alt = img.title = args.alt;
              with (img.style) {
      	    cursor = 'pointer';
      	    margin = '0 3px';
                  padding = '0';
                  border = 'none';
                  verticalAlign = 'middle';
              }
              return img;
          }
      });
      
      /* Hatena.Star.AddButton */
      Hatena.Star.AddButton = new Ten.Class({
          base: ['Hatena.Star.Button'],
          initialize: function(entry) {
              this.entry = entry;
              this.lastPosition = null;
              var img = Hatena.Star.Button.createButton({
                  src: Hatena.Star.AddButton.ImgSrc,
                  alt: 'Add Star'
              });
              this.observer = new Ten.Observer(img,'onclick',this,'addStar');
              this.img = img;
              return img;
          },
          ImgSrc: Hatena.Star.BaseURL + 'images/add.gif'
      },{
          addStar: function(e) {
              this.lastPosition = e.mousePosition();
              var uri = Hatena.Star.BaseURL + 'star.add.json?uri=' + encodeURIComponent(this.entry.uri) +
                  '&title=' + encodeURIComponent(this.entry.title);
              if (Hatena.Star.Token) {
                  uri += '&token=' + Hatena.Star.Token;
              }
              new Ten.JSONP(uri, this, 'receiveResult');
          },
          receiveResult: function(args) {
              var name = args ? args.name : null;
              if (name) {
                  this.entry.addStar(new Hatena.Star.Star({name: name}));
                  //alert('Succeeded in Adding Star ' + args);
              } else if (args.errors) {
                  var pos = this.lastPosition;
                  pos.x -= 10;
                  pos.y += 25;
                  var scroll = Ten.Geometry.getScroll();
                  var scr = new Hatena.Star.AlertScreen();
                  var alert = args.errors[0];
                  scr.showAlert(alert, pos);
              }
          }
      });
      
      /* Hatena.Star.CommentButton */
      Hatena.Star.CommentButton = new Ten.Class({
          base: ['Hatena.Star.Button'],
          initialize: function(entry) {
              this.entry = entry;
              this.lastPosition = null;
              var img = Hatena.Star.Button.createButton({
                  src: Hatena.Star.CommentButton.ImgSrc,
                  alt: 'Comments'
              });
              img.style.display = 'none';
              this.observer = new Ten.Observer(img,'onclick',this,'showComments');
              this.img = img;
          },
          ImgSrc: Hatena.Star.BaseURL + 'images/comment.gif',
          ImgSrcActive: Hatena.Star.BaseURL + 'images/comment_active.gif'
      },{
          showComments: function(e) {
              if (!this.screen) this.screen = new Hatena.Star.CommentScreen();
              this.screen.bindEntry(this.entry);
              var pos = e.mousePosition();
              pos.y += 25;
              this.screen.showComments(this.entry, pos);
          },
          hide: function() {
              this.img.style.display = 'none';
          },
          show: function() {
              this.img.style.display = 'inline';
          },
          activate: function() {
              this.show();
              this.img.src = Hatena.Star.CommentButton.ImgSrcActive;
          }
      });
      
      /* Hatena.Star.Star */
      Hatena.Star.Star = new Ten.Class({
          initialize: function(args) {
              if (args.img) {
                  this.img = args.img;
                  this.name = this.img.getAttribute('alt');
              } else {
                  this.name = args.name;
                  var img = document.createElement('img');
                  img.src = Hatena.Star.Star.ImgSrc;
                  img.alt = this.name;
                  with (img.style) {
                      padding = '0';
                      border = 'none';
                  }
                  this.img = img;
              }
      	new Ten.Observer(this.img,'onmouseover',this,'showName');
      	new Ten.Observer(this.img,'onmouseout',this,'hideName');
      	if (this.name) {
                  this.user = new Hatena.Star.User(this.name);
                  this.img.style.cursor = 'pointer';
                  new Ten.Observer(this.img,'onclick',this,'goToUserPage');
              }
              if (args.count && args.count > 1) {
                  var c = document.createElement('span');
                  c.setAttribute('class', 'hatena-star-inner-count');
                  Ten.Style.applyStyle(c, Hatena.Star.InnerCount.style);
                  c.innerHTML = args.count;
                  var s = document.createElement('span');
                  s.appendChild(img);
                  s.appendChild(c);
                  return s;
              } else {
                  return this.img;
              }
          },
          ImgSrc: Hatena.Star.BaseURL + 'images/star.gif'
      },{
          showName: function(e) {
              if (!this.screen) this.screen = new Hatena.Star.NameScreen();
              var pos = e.mousePosition();
              pos.x += 10;
              pos.y += 25;
              this.screen.showName(this.name, pos);
          },
          hideName: function() {
              if (!this.screen) return;
              this.screen.hide();
          },
          goToUserPage: function() {
              window.location = this.user.userPage();
          }
      });
      
      /* Hatena.Star.InnerCount */
      Hatena.Star.InnerCount = new Ten.Class({
          initialize: function(count, e) {
              this.count = count;
              this.entry = e;
              var c = document.createElement('span');
              c.setAttribute('class', 'hatena-star-inner-count');
              Ten.Style.applyStyle(c, Hatena.Star.InnerCount.style);
              c.style.cursor = 'pointer';
              c.innerHTML = count;
              new Ten.Observer(c,'onclick',this,'showInnerStars');
              this.container = c;
              return c;
          },
          style: {
              color: '#f4b128',
              fontWeight: 'bold',
              fontSize: '80%',
              fontFamily: '"arial", sans-serif',
              margin: '0 2px'
          }
      },{
          showInnerStars: function() {
              var url = Hatena.Star.BaseURL + 'entry.json?uri=' +
              encodeURIComponent(this.entry.uri);
              new Ten.JSONP(url, this, 'receiveStarEntry');
          },
          receiveStarEntry: function(res) {
              var se = res.entries[0];
              var e = this.entry;
              if (encodeURIComponent(se.uri) != encodeURIComponent(e.uri)) return;
              e.flushStars();
              e.bindStarEntry(se);
              e.addAddButton();
              e.showStars();
          }
      });
      
      /* Hatena.Star.Comment */
      Hatena.Star.Comment = new Ten.Class({
          initialize: function(args) {
              this.name = args.name;
              this.body = args.body;
          }
      },{
          asElement: function() {
              var div = document.createElement('div');
              with (div.style) {
                  margin = '0px 0';
                  padding = '5px 0';
                  borderBottom = '1px solid #ddd';
              }
              var ico = Hatena.User.getProfileIcon(this.name);
              div.appendChild(ico);
              var span = document.createElement('span');
              with(span.style) {
                  fontSize = '90%';
              }
              span.innerHTML = this.body;
              div.appendChild(span);
              return div;
          }
      });
      
      /* Hatena.Star.NameScreen */
      Hatena.Star.NameScreen = new Ten.Class({
          base: [Ten.SubWindow],
          style: {
              padding: '2px',
              textAlign: 'center'
          },
          containerStyle: {
              margin: 0,
              padding: 0
          },
          handleStyle: null,
          showScreen: false,
          closeButton: null,
          draggable: false
      },{
          showName: function(name, pos) {
              this.container.innerHTML = '';
              this.container.appendChild(Hatena.User.getProfileIcon(name));
              this.container.appendChild(document.createTextNode(name));
              this.show(pos);
          }
      });
      
      /* Hatena.Star.AlertScreen */
      Hatena.Star.AlertScreen = new Ten.Class({
          base: [Ten.SubWindow],
          style: {
              padding: '2px',
              textAlign: 'center',
              borderRadius: '6px',
              MozBorderRadius: '6px',
              width: '240px',
              height: '120px'
          },
          handleStyle: {
              position: 'absolute',
              top: '0px',
              left: '0px',
              backgroundColor: '#f3f3f3',
              borderBottom: '1px solid #bbb',
              width: '100%',
              height: '30px',
              borderRadius: '6px 6px 0 0',
              MozBorderRadius: '6px 6px 0 0'
          }
      },{
          showAlert: function(msg, pos) {
              this.container.innerHTML = msg;
              var win = Ten.Geometry.getWindowSize();
              var scr = Ten.Geometry.getScroll();
              var w = parseInt(this.constructor.style.width) + 20;
              if (pos.x + w > scr.x + win.w) pos.x = win.w + scr.x - w;
              this.show(pos);
          }
      });
      
      /* Hatena.Star.CommentScreen */
      Hatena.Star.CommentScreen = new Ten.Class({
          base: [Ten.SubWindow],
          initialize: function() {
              var self = this.constructor.SUPER.call(this);
              if (!self.commentsContainer) self.addCommentsContainer();
              return self;
          },
          style: {
              width: '280px',
              height: '280px',
              overflowY: 'auto',
              padding: '2px',
              textAlign: 'center',
              borderRadius: '6px',
              MozBorderRadius: '6px'
          },
          handleStyle: {
              position: 'absolute',
              top: '0px',
              left: '0px',
              backgroundColor: '#f3f3f3',
              borderBottom: '1px solid #bbb',
              width: '100%',
              height: '30px',
              borderRadius: '6px 6px 0 0',
              MozBorderRadius: '6px 6px 0 0'
          },
          containerStyle: {
              margin: '32px 0 0 0',
              textAlign: 'left',
              padding: '0 10px'
          },
          getLoadImage: function() {
              var img = document.createElement('img');
              img.src = Hatena.Star.BaseURL + 'images/load.gif';
              img.setAttribute('alt', 'Loading');
              with (img.style) {
                  verticalAlign = 'middle';
                  margin = '0 2px';
              }
              return img;
          }
      },{
          addCommentsContainer: function() {
              var div = document.createElement('div');
              with (div.style) {
                  marginTop = '-3px';
              }
              this.container.appendChild(div);
              this.commentsContainer = div;
          },
          showComments: function(e, pos) {
              var comments = e.comments;
              if (!comments) comments = [];
              this.commentsContainer.innerHTML = '';
              for (var i=0; i<comments.length; i++) {
                  this.commentsContainer.appendChild(comments[i].asElement());
              }
              if (e.starEntry && !e.can_comment) {
                  this.hideCommentForm();
              } else {
                  this.addCommentForm();
              }
              var win = Ten.Geometry.getWindowSize();
              var scr = Ten.Geometry.getScroll();
              var w = parseInt(this.constructor.style.width) + 20;
              if (pos.x + w > scr.x + win.w) pos.x = win.w + scr.x - w;
              this.show(pos);
          },
          bindEntry: function(e) {
              this.entry = e;
          },
          sendComment: function(e) {
              if (!e.isKey('enter')) return;
              var body = this.commentInput.value;
              if (!body) return;
              this.commentInput.disabled = 'true';
              this.showLoadImage();
              var url = Hatena.Star.BaseURL + 'comment.add.json?body=' + encodeURIComponent(body) +
                  '&uri=' + encodeURIComponent(this.entry.uri) +
                  '&title=' + encodeURIComponent(this.entry.title);
              new Ten.JSONP(url, this, 'receiveResult');
          },
          receiveResult: function(args) {
              if (!args.name || !args.body) return;
              this.commentInput.value = ''; 
              this.commentInput.disabled = '';
              this.hideLoadImage();
              var com = new Hatena.Star.Comment(args);
              this.entry.addComment(com);
              this.commentsContainer.appendChild(com.asElement());
          },
          showLoadImage: function() {
              if (!this.loadImage) return; 
              this.loadImage.style.display = 'inline';
          },
          hideLoadImage: function() {
              if (!this.loadImage) return; 
              this.loadImage.style.display = 'none';
          },
          hideCommentForm: function() {
              if (!this.commentForm) return;
              this.commentForm.style.display = 'none';
          },
          addCommentForm: function() {
              if (this.commentForm) {
                  this.commentForm.style.display = 'block';
                  return;
              }
              var form = document.createElement('div');
              this.container.appendChild(form);
              this.commentForm = form;
              with (form.style) {
                  margin = '0px 0';
                  padding = '5px 0';
                  // borderTop = '1px solid #ddd';
              }
              //if (Hatena.Visitor) {
              //    form.appendChild(Hatena.Visitor.profileIcon());
              //} else {
              //    form.appendChild(Hatena.User.getProfileIcon());
              //}
              var input = document.createElement('input');
              input.type = 'text';
              with (input.style) {
                  width = '215px';
      	    border = '1px solid #bbb';
                  padding = '3px';
              }
              form.appendChild(input);
              this.commentInput = input;
              var img = this.constructor.getLoadImage();
              this.loadImage = img;
              this.hideLoadImage();
              form.appendChild(img);
              new Ten.Observer(input,'onkeypress',this,'sendComment');
          }
      });
      
      /* Hatena.Star.EntryLoader */
      Hatena.Star.EntryLoader = new Ten.Class({
          initialize: function() {
              var entries = Hatena.Star.EntryLoader.loadEntries();
              this.entries = [];
              for (var i = 0; i < entries.length; i++) {
                  var e = new Hatena.Star.Entry(entries[i]);
                  e.showButtons();
                  this.entries.push(e);
              }
              this.getStarEntries();
          },
          createStarContainer: function() {
              var sc = document.createElement('span');
              sc.setAttribute('class', 'hatena-star-star-container');
              sc.style.marginLeft = '1px';
              return sc;
          },
          createCommentContainer: function() {
              var cc = document.createElement('span');
              cc.setAttribute('class', 'hatena-star-comment-container');
              cc.style.marginLeft = '1px';
              return cc;
          },
          scrapeTitle: function(node) {
              var rval = [];
              (function (node) {
                  if (node.tagName == 'SPAN' &&
                      (node.className == 'sanchor' ||
                       node.className == 'timestamp')) {
                           return;
                  } else if (node.nodeType == 3 && !/\S/.test(node.nodeValue)) {
                      return;
                  }
                  var cn = node.childNodes;
                  if (cn) {
                      for (var i = 0; i < cn.length; i++) {
                          arguments.callee.call(this, cn[i]);
                      }
                  }
                  var nodeValue = node.nodeValue;
                  if (typeof(nodeValue) == 'string') {
                      rval.push(nodeValue);
                  }
              })(node);
              return rval.join('');
          },
          headerTagAndClassName: ['h3',null],
          getHeaders: function() {
              var t = Hatena.Star.EntryLoader.headerTagAndClassName;
              return Ten.DOM.getElementsByTagAndClassName(t[0],t[1],document);
          },
          loadEntries: function() {
              var entries = [];
              //var headers = document.getElementsByTagName('h3');
              var c = Hatena.Star.EntryLoader;
              var headers = c.getHeaders();
              for (var i = 0; i < headers.length; i++) {
                  var header = headers[i];
                  var a = header.getElementsByTagName('a')[0];
                  if (!a) continue;
                  var uri = a.href;
                  var title = '';
                  // Ten.DOM.removeEmptyTextNodes(header);
                  var cns = header.childNodes;
                  title = c.scrapeTitle(header);
                  var cc = c.createCommentContainer();
                  header.appendChild(cc);
                  var sc = c.createStarContainer();
                  header.appendChild(sc);
                  entries.push({
                      uri: uri,
                      title: title,
                      star_container: sc,
                      comment_container: cc
                  });
              }
              return entries;
          }
      },{
          getStarEntries: function() {
              var url = Hatena.Star.BaseURL + 'entries.json?';
              for (var i = 0; i < this.entries.length; i++) {
                  if (url.length > Ten.JSONP.MaxBytes) {
                      new Ten.JSONP(url, this, 'receiveStarEntries');
                      url = Hatena.Star.BaseURL + 'entries.json?';
                  }
                  url += 'uri=' + encodeURIComponent(this.entries[i].uri) + '&';
              }
              new Ten.JSONP(url, this, 'receiveStarEntries');
          },
          receiveStarEntries: function(res) {
              var entries = res.entries;
              if (!entries) entries = [];
              for (var i = 0; i < this.entries.length; i++) {
                  var e = this.entries[i];
                  for (var j = 0; j < entries.length; j++) {
                      var se = entries[j];
                      if (!se.uri) continue;
                      if (encodeURIComponent(se.uri) == encodeURIComponent(e.uri)) {
                          e.bindStarEntry(se);
                          entries.splice(j,1);
                          break;
                      }
                  }
                  if (typeof(e.can_comment) == 'undefined') {
                      e.setCanComment(res.can_comment);
                  }
                  e.showStars();
                  e.showCommentButton();
              }
          }
      });
      
      /* Hatena.Star.WindowObserver */
      Hatena.Star.WindowObserver = new Ten.Class({
          initialize: funct
      
      
        

      2007-07-11

      はてなスターソースコードの最後に更新履歴が載ってた

      2007-07-11 v1.2 Release version

      2007-05-30 v1.1 Added fold stars feature

      2007-03-29 v1.0 Changed screens using Ten.SubWindow, you can d&d!

      2007-03-28 v0.9 Changed Hatena.* classes to Ten v0.05.

      2007-03-25 v0.8 Fixed Safari popup problem

      2007-03-22 v0.7 Added active state to comment buttons

      2007-03-21 v0.6 Added Comment function

      2007-03-05 v0.5 Changed uri to Ridge-based paths.

      2007-01-24 v0.4 Added Hatena.Diary.Entry class,

      Changed Hatena.Star.Entry methods using class method

      Added author parameters.

      2007-01-23 v0.3 Added Hatena.Star.User class, added Hatena.js, Hatena.Star.js compatibility

      2007-01-06 v0.2 Changed name spaces. Using Hatena.*, Hatena.Star.*

      2007-01-05 v0.1 Initial version

      4月前に大体出来てたって事かな

      ログイン ユーザー登録
      ようこそ ゲスト さん