if (!("XBS" in window))
{
  XBS = {};
}

if (!("Bookmarklet" in window.XBS))
{
  XBS.Bookmarklet = {};
}

window.XBS.Bookmarklet.Go1978 = function ()
{
  this.filters = [];
}

window.XBS.Bookmarklet.Go1978.prototype.filter = function (element, recursive)
{
  for (var i = 0, iLast = this.filters.length; i < iLast; i++)
  {
    var f = this.filters[i];
    
    f.apply(element);
    
    if (recursive)
    {
      for (var j = 0, jLast = element.childNodes.length; j < jLast; j++)
      {
        var child = element.childNodes[j];
        this.filter(child, recursive);
      }
    }
  }
}

window.XBS.Bookmarklet.Go1978.prototype.apply = function (container)
{
  this.filter(container, true);
}


window.XBS.Bookmarklet.Go1978.RegExpFilter = function ()
{
	this.dictionaries = [
	{
		"pattern": "20[0-9][0-9]",
		"option": "gm",
		"getReplaceWord":function(){return "1978";}
	},
	{
		"pattern": "19[0-9][0-9]",
		"option": "gm",
		"getReplaceWord":function(){return "1978";}
	},
	{
		"pattern": "SNSサイト|インターネット|Webサイト|Webブラウザ|Webアプリケーション|ソーシャルブックマーク",
		"option": "gm",
		"getReplaceWord":function(){return "同人誌";}
	},
	{
		"pattern": "SNS|ＳＮＳ|ネット|サイト|Web|ブラウザ|ソフト|アプリケーション|ツール",
		"option": "gm",
		"getReplaceWord":function(){return "同人誌";}
	},
	{
		"pattern": "サービス",
		"option": "gm",
		"getReplaceWord":function(){return "出版社";}
	},
	{
		"pattern": "ブログ",
		"option": "gm",
		"getReplaceWord":function(){return "ポエム集";}
	},
	{
		"pattern": "ブロガー|クリエイター",
		"option": "gm",
		"getReplaceWord":function(){return "ポエム好きな人";}
	},
	{
		"pattern": "インストール",
		"option": "gm",
		"getReplaceWord":function(){return "購読";}
	},
	{
		"pattern": "ダウンロード",
		"option": "gm",
		"getReplaceWord":function(){return "立ち読み";}
	},
	{
		"pattern": "アップロード",
		"option": "gm",
		"getReplaceWord":function(){return "投稿";}
	},
	{
		"pattern": "アップ",
		"option": "gm",
		"getReplaceWord":function(){return "投稿";}
	},
	{
		"pattern": "携帯電話",
		"option": "gm",
		"getReplaceWord":function(){return "テレパシー";}
	},
	{
		"pattern": "携帯|ケータイ",
		"option": "gm",
		"getReplaceWord":function(){return "テレパシー";}
	},
	{
		"pattern": "メールアドレス",
		"option": "gm",
		"getReplaceWord":function(){return "手紙の宛先";}
	},
	{
		"pattern": "メール",
		"option": "gm",
		"getReplaceWord":function(){return "手紙";}
	},
	{
		"pattern": "メッセンジャー",
		"option": "gm",
		"getReplaceWord":function(){return "伝書バト";}
	},
	{
		"pattern": "ユーザー",
		"option": "gm",
		"getReplaceWord":function(){return "同人";}
	},
	{
		"pattern": "ページビュー",
		"option": "gm",
		"getReplaceWord":function(){return "雑誌の売り上げ";}
	},
	{
		"pattern": "トップページ",
		"option": "gm",
		"getReplaceWord":function(){return "表紙";}
	},
	{
		"pattern": "シリコンバレー",
		"option": "gm",
		"getReplaceWord":function(){
var area = ["高円寺","東中野","吉祥寺","中野","新宿","中央線沿線"];
return area[Math.floor(Math.random() * area.length)];
}
	},
	{
		"pattern": "MP3|ＭＰ３|CD|ＣＤ",
		"option": "gm",
		"getReplaceWord":function(){return "レコード";}
	},
	{
		"pattern": "iPod|iPhone",
		"option": "gm",
		"getReplaceWord":function(){return "フォークギター";}
	},
	{
		"pattern": "Flash",
		"option": "gm",
		"getReplaceWord":function(){return "紙芝居";}
	},
	{
		"pattern": "コンピューター",
		"option": "gm",
		"getReplaceWord":function(){return "マイコン";}
	},
	{
		"pattern": "コンピュータ",
		"option": "gm",
		"getReplaceWord":function(){return "マイコン";}
	},
	{
		"pattern": "URL",
		"option": "gm",
		"getReplaceWord":function(){return "住所";}
	},
	{
		"pattern": "ゲーム",
		"option": "gm",
		"getReplaceWord":function(){return "フォークダンス";}
	},
	{
		"pattern": "サーバー",
		"option": "gm",
		"getReplaceWord":function(){return "魔法の箱";}
	},
	{
		"pattern": "サーバ",
		"option": "gm",
		"getReplaceWord":function(){return "魔法の箱";}
	},
	{
		"pattern": "ベンチャー",
		"option": "gm",
		"getReplaceWord":function(){return "同人サークル";}
	},
	{
		"pattern": "データベース",
		"option": "gm",
		"getReplaceWord":function(){return "図書館";}
	},
	{
		"pattern": "マルウェア|ウィルス|ワーム",
		"option": "gm",
		"getReplaceWord":function(){return "落書き";}
	},
	{
		"pattern": "PC|ＰＣ",
		"option": "gm",
		"getReplaceWord":function(){return "ギターケース";}
	},
	{
		"pattern": "[。]",
		"option": "m",
		"getReplaceWord":function(){return window.XBS.Bookmarklet.Go1978.GetInsertWord();}
	},
    ];
  

  this.regexpCache = [];
}

window.XBS.Bookmarklet.Go1978.GetInsertWord = function ()
{
	if (Math.random() < 0.5){
		return "。";
	}

	if (Math.random() < 0.33){

		var name = [
"「熱中時代」",
"「大追跡」",
"「青春ド真中!」",
"「ムー一族」",
"「わたしは海」",
"「ゆうひが丘の総理大臣」",
"「ザ・ベストテン」",
"大河ドラマ「黄金の日日」",
"1月1日から始まった「ペリーヌ物語」 ",
"2月12日から始まった「すばらしい世界旅行 恐竜王国の興亡」",
"3月6日から始まった「魔女っ子チックル」",
"3月14日から始まった「宇宙海賊キャプテンハーロック」",
"4月1日から始まった「闘将ダイモス」",
"4月2日から始まった「SF西遊記スタージンガー」",
"4月4日から始まった「未来少年コナン」",
"4月10日から始まった「一球さん」",
"5月6日から始まった「まんがはじめて物語」",
"5月19日から始まった「野球狂の詩」",
"6月3日から始まった「無敵鋼人ダイターン3」と「はいからさんが通る」",
"7月4日から始まった「星の王子さま プチ・プランス」",
"7月27日から始まった「宇宙魔神ダイケンゴー」",
"9月14日から始まった「銀河鉄道999」",
"10月1日から始まった「科学忍者隊ガッチャマンII」",
"10月6日から始まった「まんがこども文庫」",
"10月8日から始まった「宝島」",
"10月14日から始まった「宇宙戦艦ヤマト2」と「新エースをねらえ！」",
"10月24日から始まった「ピンクレディー物語 栄光の天使たち」",
"11月7日から始まった「キャプテンフューチャー」",
"「スター・ウォーズ」",
"「未知との遭遇」",
"「００７／私を愛したスパイ」",
"「サタデー・ナイト・フィーバー」",
"「死亡遊戯」",
"「ミスター・グッドバーを探して」",
"「ジュリア」",
"「愛と喝采の日々」",
"「結婚しない女」",
"「グッバイ・ガール」",
"「家族の肖像」",
"「野性の証明」",
"「宇宙戦艦ヤマト・愛の戦士たち」",
"「柳生一族の陰謀」",
"「男はつらいよ・寅次郎わが道をゆく／他」",
"「トラック野郎・男一匹桃次郎／他」",
"「さらば宇宙戦艦ヤマトキタキツネ物語」",
"「女王蜂」",
"「火の鳥」",
"「愛の亡霊」",
"「曾根崎心中」",
"「サード」",
"「事件」",
"「帰らざる日々」"
];

		var preword = [
"",
"そういえば",
"関係ないですが",
"そういえば",
"あ、",
"ところで",
];

		var postword = [
"面白いですよね。",
"見ました？",
"すごく面白いですよ。",
"見逃せませんね。",
"最高ですよ。"
];

		return "。" + preword[Math.floor(Math.random() * preword.length)] + name[Math.floor(Math.random() * name.length)] + postword[Math.floor(Math.random() * postword.length)];


	}else if (Math.random() < 0.5){

		var name = [
"「UFO（ピンク・レディー」）」",
"「サウスポー（ピンク・レディー）」",
"「モンスター（ピンク・レディー）」",
"「透明人間（ピンク・レディー）」",
"「君のひとみは10000ボルト（堀内孝雄）」",
"「わかれうた（中島みゆき）」",
"「宿無し（世良公則&ツイスト）」",
"「銃爪（世良公則&ツイスト）」",
"「微笑がえし（キャンディーズ）」",
"「勝手にシンドバッド（サザンオールスターズ）」",
"「気分しだいで責めないで（サザンオールスターズ）」",
"「時間よ止まれ（矢沢永吉）」",
"「プレイバックPart2（山口百恵）」",
"「いい日旅立ち（山口百恵）」",
"「ジョニーの子守唄（アリス）」",
"「Mr.サマータイム（サーカス）」",
"「かもめが翔んだ日（渡辺真知子）」",
"「飛んでイスタンブール（庄野真代）」",
"「東京ららばい（中原理恵）」",
"「キャンディー（原田真二）」",
"「この空を飛べたら（加藤登紀子）」",
"「うぬぼれワルツ（木の実ナナ）」",
"「季節の中で（松山千春）」",
"「カナダからの手紙（平尾昌晃＆畑中葉子）」",
"「ガンダーラ（ゴダイゴ）」",
"「ブルースカイブルー（西城秀樹）」",
"「林檎殺人事件（郷ひろみ＆樹木希林）」",
"「サムライ（沢田研二）」",
"「ダーリング（沢田研二）」",
"「たそがれマイラブ（大橋純子）」",
"「みずいろの雨（八神純子）」",
"「夏のお嬢さん（榊原郁恵）」",
"「狼なんか怖くない（石野真子）」",
"「わたしの首領（ドン）（石野真子）」",
"「春の予感‐I've been mellow‐（南沙織）」",
"「夢想花（円広志）」",
"「時代遅れの恋人たち（中村雅俊）」",
"「与作（北島三郎）」",
"「HERO（ヒーローになる時、それは今）（甲斐バンド）」",
];

		var preword = [
"",
"関係ないけど",
"そうそう、",
"あ、",
"ところで"
];

		var postword = [
"聞きました？",
"買いました？",
"、かなり名曲ですよね。",
"、思わずレコード買ってしまいました。",
"売れてるみたいですね。",
"喫茶店で流れてました。いい曲ですね。",
"思わず口ずさんでしまいました。",
];

		return "。" + preword[Math.floor(Math.random() * preword.length)] + name[Math.floor(Math.random() * name.length)] + postword[Math.floor(Math.random() * postword.length)];


	}else{

		var name = [
"フィーバー。",
"君のひとみは 10000ボルト。",
"ＮＥＶＥＲ　ＧＩＶＥ　ＵＰ！",
"あんたの負け。",
"あんたの勝ち。",
"男はタフでなければ生きていけない。",
"あんたが主役。",
"不確実性の時代。",
"な～んちゃって。",
"バカにしないでよ。",
"やってられないわ。",
"逆転。",
"アーウー。",
"全方位外交。",
"いい日旅立ち。",
"クロスオーバー。",
"映画は原作をしのげる。",
"原因不明。",
"田中軍団。",
"しらこけ。",
"ワン・パターン。",
"共通一次。",
"足切り。",
"窓際族。",
"翔んでいる。",
"記憶にございません。",
]

		return "。" + name[Math.floor(Math.random() * name.length)];
	}
}

  
window.XBS.Bookmarklet.Go1978.RegExpFilter.prototype.isAcceptElement = function (element)
{
  var isAccept;
  
  switch (element.nodeName.toLowerCase())
  {
    case 'style':
    case 'script':
    case 'frame':
    case 'code':
      isAccept = false;
      break;
    
    default:
      isAccept = true;
  }
  
  return isAccept;
}




window.XBS.Bookmarklet.Go1978.RegExpFilter.prototype.apply = function (element)
{

  if ("parentNode" in element && element.parentNode != null)
  {
    if (!this.isAcceptElement(element.parentNode))
    {
      return;
    }
  }

  
  if (element.nodeName.toLowerCase() != "#text")
  {
    return;
  }
  
  var nodeValue = element.nodeValue;
  
  for (var i = 0, iLast = this.dictionaries.length; i < iLast; i++)
  {
    var dictionary =  this.dictionaries[i];
    
    if (!(i in this.regexpCache))
    {
      this.regexpCache[i] = new RegExp(dictionary.pattern, dictionary.option);
    }
    
    var regexp = this.regexpCache[i];
    nodeValue = nodeValue.replace(regexp, dictionary.getReplaceWord());
  }
  
  element.nodeValue = nodeValue;
}



var go1978 = new XBS.Bookmarklet.Go1978();

go1978.filters = [
    new XBS.Bookmarklet.Go1978.RegExpFilter()
  ];

go1978.apply(window.document);


