// スクリプトの著作権は放棄します
// 2004/04/07 Mozillaも ちょっとだけ研究開始

var MX=0,MY=0;
var now=new Date(),now2;
var shiori=new Array();
var D=document,DA=false,DB=D.body,S="style";
var DG=false;
var DGI=null,DGT=null;
var PP=null;

var pxTop = '';
var pxLeft= '';
var oton='';

 // スクリプトエラーを出さない
if(!(location+"").match("file://"))onerror=function(){return true;}

 if(D.all){
	DA=D.all;
	DGI = new Function("return document.all[arguments[0]]");
	DGT = new Function("return document.all.tags(arguments[0])");

	pxTop  = 'pixelTop';
	pxLeft = 'pixelLeft';

	oton = 'parentElement';

	if(D.getElementById)
		DG = D.getElementById;

 }else 
 if(D.getElementById){
	DG = D.getElementById;
	DGI = new Function("return document.getElementById(arguments[0])");
	DGT = new Function("return document.getElementsByTagName(arguments[0])");

	pxTop  = 'top';
	pxLeft = 'left';
	
	oton = 'parentNode';
 }




var defaultMaxSquare=50; // モザイクの粗さ
var maxSquare=50;
var imgFilter="progid:DXImageTransform.Microsoft.Matrix(filtertype='bilinear',sizingMethod='auto expand',enabled='false') progid:DXImageTransform.Microsoft.Pixelate(maxsquare=50)";

var fontSize=100;

var popupSrc='';
var popupNum=0;

var MEMOcheck='';
var MEMOcheck2='';

var keyBuffer='';
var inputMethod=0;


var threadstart=0;// dat2htmlで途中表示時のレス番号合わせ
var ffind=D.URL.replace(/^.*\/([a-z0-9\-]+_[a-z0-9\-]+\/\d+\/\d+\.html)/i,"$1");
var DAT2HTMLPATH='/cgi-bin/dat2html/';
var H2Dlink=(location+"").match(".cgi")?
	'<a href="javascript:if(!DGI(\'updatePoint\'))DB.scrollTop=DB.scrollHeight;else location.hash=\'#updatepoint\';void(\'\');" onmouseover="textPopup(\'<b>■#新規キャッシュ</b><br>datの更新があった地点までジャンプします\');">#UP^</a>': 
	'<a href="/cgi-bin/html2dat/html2dat.cgi?'+ffind+'" onmouseover="textPopup(\'<b>■HTML2DAT</b><br>HTMLからDATに変換して表示します(試験中)<br>一行目はヘッダになります\');">DAT</a>';


//============================================================================

 function opn(u){window.open(u);} //

 // 連立方程式でStringのバイト数を得る (IE3〜6 NN2〜4.x Mozilla 1.6〜)
 function strLength(v){var c=escape(v),l='length',Z=v[l]+c[l],X=escape(c)[l];
  return (Z*2-X)/3;
 } //

 function getSelectionString(){
	var ret="";
	if(window.getSelection)ret = getSelection().toString();
	else if(DA)ret =D.selection.createRange().htmlText;
	return ret;
 } //

 function getEventSrcElement(e){
	if(DA) return event.srcElement;
	else   return e.target;
 } //

 function imenuCutter(str){
	if(str.match("javascript:"))return str;
	var imenu=new Array("http://ime.nu/","http://www.pinktower.com/","http://ime.st/");
	for(var i=0;i<imenu.length;i++){
		while(str.match(imenu[i]))str=str.replace(imenu[i],"http://");}
	return str;
 } //

 var clPointer=0;
 function newColors(){
	c = Array("yellow","red","lime","aqua","blue","fuchsia","orange");
	return c[ clPointer++ % c.length];
 } //

 function textpopup(t){
	textPopup(t);
 }
//============================================================================


if(DA){

  // メモ帳用変数
   if(!window.VALk) VAL=(location.pathname+'').replace(/\.html.*/g,'').replace(/[\\\/]/g,' ').replace(/^.* (2chlog|2ch) /ig,'');
  else {
	VAL=VALk;
	ffind=VALk.split(" ").join("/")+".html";
  	}
  VALdir=VAL;//.replace(/(.*?) .+/,'$1');
  VALdic="/PATH/"+VAL.replace(/^[0-9a-z\-]+_/i,'').replace(/[ ]/,'/');
  // メモ帳用変数---//



D.write(
	'<span id=menubar style="position:absolute;width:10%;font-size:90%;z-index:9000;top:0;left:expression(document.body.clientWidth-this.offsetWidth);border:1px solid;padding:0;background:menu;color:menutext;filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=0, StartColorStr=#ff666666, EndColorStr=#88ffffff)" class=menubar><nobr>'+
 '[ '+
	'<a href="#1" onmouseover="popup(this,1,1)">>>1</a>'+
	'<a href="#1" onmouseover="popup(this,1,3)">-3</a>'+
	'<a href="#1" onmouseover="popup(this,1,5)">-5</a>'+
 ']'+
 '['+
	'<a href="#1" onmouseover="popup(this,999,1100)">1000</a>'+
 ']'+
 '['+
	'<a href="javascript:wordSearch(0);" onmouseover="textPopup(\'<b>■ワード強調</b><br>単語や文字列を強調表示します。<br>特定の発言者のIDをトレースするときなどに便利です。(テキスト選択時ALT+1)\')">強調</a>'+
	'<a href="javascript:wordSearch(1);" onmouseover="textPopup(\'<b>■ワード強調(2)</b><br>単語や文字列の強調。<br>正規表現が使えます。(テキスト選択時ALT+2)\');">☆</a>|'+
	'<a href="javascript:wordSearchPopup(0);" onmouseover="textPopup(\'<b>■ワード抽出</b><br>指定した単語を含むレスを抽出します。(テキスト選択時ALT+3)\')">抽出</a>'+
	'<a href="javascript:wordSearchPopup(1);" onmouseover="textPopup(\'<b>■ワード抽出(2)</b><br>正規表現が使えます。(テキスト選択時ALT+4)\')">★</a>|'+
	'<a href="javascript:wordSearchPopup(1,\'\.(jpe?g|gif|tiff?|bmp|png|mng)\');" onmouseover="textPopup(\'<b>■画像抽出</b><br>画像へのリンクがあるレスを抽出します\')">□</a>|'+
	'<a href="javascript:imgLink()" onmouseover="textPopup(\'<b>■画像リンク展開</b><br>画像に対するリンクを、<br>IMGタグに変換して表示します。<br>画像リンクのたくさんあるスレッドで便利です。\');">IMG</a>|'+
	'<a href="javascript:mailtoLink()" onmouseover="textPopup(\'<b>■メール欄展開</b><br>メール欄にあるテキストを、見えるように表示します\');">MAIL</a>'+
 ']'+

 '['+
	'<a href="javascript:threadSearch();" onmouseover="textPopup(\'<b>■スレッドタイトル検索</b><br>スレッドのタイトルを検索します\');">タイトル</a>|'+
	'<a href="/cgi-bin/ffind/ffind.cgi?'+ffind+'" onmouseover="textPopup(\'<b>■移転スレッド捜索</b><br>サーバーが移転したときに残ったスレッドや、<br>2ch本家のスレッドや他の過去ログにリンクします\');">ログ捜索</a>|'+
	
	H2Dlink+
 ']'+

	'<select onchange="location.hash=this.value"><option value=1>>>1<option value=100>100<option value=200>200<option value=300>300<option value=400>400<option value=500>500<option value=600>600<option value=700>700<option value=800>800<option value=900>900<option value=1000>1000</select>'+

	'<span style="display:none">'+ // base hrefのバグ？対策
	'<a href="./index.html" id=back1></a>'+
	'<a href="../index.html" id=back2></a>'+
	'<a href="../../index.html" id=back3></a>'+
	'<a href="/" id=back4></a>'+
	'</span>'+

//===============


	'<a href="#1" onmouseover="textPopup(\'<b>▼戻る</b><br><a onmouseover=&quot;this.href=DA.back1.href;&quot;>＞ディレクトリ一覧へ</a><br><br><a onmouseover=&quot;this.href=DA.back2.href;&quot;>＞＞この板のログ一覧へ</a><br><br><a onmouseover=&quot;this.href=DA.back3.href;&quot;>＞＞＞にくちゃんねるトップへ</a><br><br><a onmouseover=&quot;this.href=DA.back4.href;&quot;>＞＞＞＞http://makimo.to/ へ</a><br>\');">▼戻る</a> <br>'+
 '['+
	'[<a href="javascript:show_mynote(1);" onmouseover="textPopup(\'メモを記憶するにはIE5.5以上が必要です(最大64KB)\')">メモ帳</a> '+
	' <a href="javascript:show_mynote(0);" onmouseover="textPopup(\'メモ帳を閉じます\')">▼</a> '+
	' <a href="javascript:add_mynote();show_mynote(1);" onmouseover="textPopup(\'選択範囲をメモ帳に追加します\')">■</a>'+
 ']'+
 '['+
	'<a href="javascript:DGI(\'stack\').innerHTML=\' \';doSave(1);focus();"  onmouseover="textPopup(\'ここをクリックすると消去します\')">しおり</a>:'+
	'<span id=stack style="behavior:url(#default#userdata);border:1px inset;font-size:90%;width:100;background:#e0e0e0;text-align:left;"></span>'+
 ']'+

	'</span>'+

//===============
	'<table cellspacing=0 cellpadding=0 id=notewin style="position:absolute;display:none;left:60%;width:40%;height:85%;table-layout:fixed;border:3px ridge;">'+
	'<tr><td height=100%><nobr>'+
	'<span id=notecell style="width:100%;height:100%;overflow:auto;">'+
	'<div id=notepad contentEditable=true style="behavior:url(#default#userdata);width:100%;height:100%;ime-mode:active;" onfocus="popc();resize_mynote(1)" onchange="updateCheck();"></div>'+
	'</span></nobr>'+

	'<tr><td style="background:menu;color:menutext;font-size:90%;"><nobr>'+
	'<button onclick="add_mynote()">▲選択範囲追加</button>'+
	'<button onclick="show_mynote(0)">窓消去</button> '+
	'<span id="status1" style="cursor:hand;border:1px inset;" onclick="loader.location.replace(\'/cgi-bin/dat2html/restore.htm\')"></span>'+
	'</nobr>'+

	'</table>'+

//===============
	// display:noneにするとうまく動かない
	'<iframe style="width:1;height:1;border:none;margin:none;position:absolute;top:0;left:0;" id="loader"></iframe>'+
	'<div id=fixedPopup style="position:absolute;top:0;left:0;width:100%;font-size:80%;"></div>'+
	'');
 D.onmousemove=msm;
 D.onmouseup=msu;
 D.onkeydown=kp;
 DB.onclick=msc;
 DB.onmousewheel=msw;
// DA.menubar[S].pixelLeft=DB.clientWidth-DA.menubar.offsetWidth;
 var PP=DA.popup;
 
 PP[S].fontSize='80%';
}
//=======================================//
else{
if(DG){


	PP = D.createElement('div');
	PP.setAttribute('style','position:absolute;background:url(/2ch/alpha60.png);border:1px solid ;visibility:hidden;margin:0px;font-size:80%;');
	DB.appendChild(PP);

	onkeydown=kp;
	DB.onmouseup  = msu;
	DB.onmousemove= msm;
 }
D.write(
	'<table style="position:fixed;top:0px;left:50%;width:50%;border:1px solid;background:url(/2ch/alpha60.png);z-index:100;word-break:break-all;" align="right" id="menubar" class="menubar"><tr>'+
	'<td style="font-size:80%;">'+
 '['+

	'<a href="#1" onmouseover="popup(this,1,1)">>1</a>'+
	'<a href="#3" onmouseover="popup(this,1,3)">-3</a>'+
	'<a href="#5" onmouseover="popup(this,1,5)">-5</a>'+
 ']'+

	'[<a href="#1000" onmouseover="popup(this,999,1100)">1000</a>]'+

 ' ['+

	'<a href="javascript:wordSearch(0);" onmouseover="textPopup(\'<b>■ワード強調</b><br>単語や文字列を強調表示します。<br>特定の発言者のIDをトレースするときなどに便利です。<br>(テキスト選択時ALT+1)\')">@@強調</a> '+
	'<a href="javascript:wordSearch(1);" onmouseover="textPopup(\'<b>■ワード強調(2)</b><br>単語や文字列の強調。<br>正規表現が使えます。<br>(テキスト選択時ALT+2)\');">☆</a>|'+
	'<a href="javascript:wordSearchPopup(0);" onmouseover="textPopup(\'<b>■ワード抽出</b><br>指定した単語を含むレスを抽出します。<br>(テキスト選択時ALT+3)\')">抽出</a> '+
	'<a href="javascript:wordSearchPopup(1);" onmouseover="textPopup(\'<b>■ワード抽出(2)</b><br>正規表現が使えます<br>(テキスト選択時ALT+4)\')">★</a>|'+
	'<a href="javascript:wordSearchPopup(1,\'\.(jpe?g|gif|tiff?|bmp|png|mng)\');" onmouseover="textPopup(\'<b>■画像抽出</b><br>画像へのリンクがあるレスを抽出します\')">□</a>|'+
	'<a href="javascript:imgLink()" onmouseover="textPopup(\'<b>■画像リンク展開</b><br>画像に対するリンクを、<br>IMGタグに変換して表示します。<br>画像リンクのたくさんあるスレッドで便利です。\');">IMG</a>|'+
	'<a href="javascript:mailtoLink()" onmouseover="textPopup(\'<b>■メール欄展開</b><br>メール欄のテキストを見えるようにします\');return false;">MAIL</a>'+
	
 '] '+


 ' ['+

	'<a href="/2ch/search.html" onmouseover="textPopup(\'スレッドタイトル検索\')">検索</a>|'+
	'<a href="/cgi-bin/ffind/ffind.cgi?'+ffind+'" onmouseover="textPopup(\'<b>■移転スレッド捜索</b><br>サーバーが移転したときに残ったスレッドや、<br>2ch本家のスレッドや他の過去ログにリンクします\');">ログ捜索</a>|'+
	H2Dlink+

 '] '+


 ' ['+
	'<span id="status1"></span>'+
	'<a href="./index.html" onmouseover="textPopup(\'ディレクトリ一覧へ戻る\')">DIR</a>|'+
	'<a href="../index.html" onmouseover="textPopup(\'この板のログ一覧へ戻る\')">BBS</a>|'+
	'<a href="../../index.html" onmouseover="textPopup(\'29chトップへ戻る\')">29ch</a>|'+
	'<a href="/index.html" onmouseover="textPopup(\'http://makimo.to/へ\')">TOP</a>'+
 '] '+

	'<span id="stack"></span>'+


	'<span style="font-family:\'ＭＳ Ｐゴシック\';font-size:80%;">'+
	'</span>'+
	'</font></td></tr></table>'+
	'<iframe style="width:1;height:1;border:none;margin:none;position:absolute;top:0;left:0;" id="loader" name="loader"></iframe>'+
	'<div id=fixedPopup style="position:absolute;top:0;left:0;width:100%;font-size:80%;"></div>'+
	''+
	''+
	'');

 if(navigator.userAgent.match("Gecko")){// Mozilla マッチング用リンク 
	var loc=(location+'').replace(/#.*$/,'');
	var tbl='<div style="position:fixed;left:-100px;font-size:1px;width:50px">';
   for(var i=1;i<=1000;i++)
	tbl+='<a href="' +loc+ '#'+ i +'" onfocus="popup(this,'+i+','+i+')">^' +i+ '^</a> ';

	tbl+='</div>';
	D.write(tbl);
 }
}

  // 履歴をソートした時に見やすい
  D.title="29ch - "+D.title;


if((location+'').indexOf('dat2html')<0)
	D.write('<a href="/cgi-bin/saku/d.cgi?Q='+location+'">削除依頼</a>');


function kp(e){ // キーボードイベント
 var k;
 var lk=keyBuffer;
 var srcElement;
 var tagName;
 var shiftKey=false;
 var altKey=false;
 var ctrlKey=false;
 if(DA){
	k=event.keyCode;
	srcElement=event.srcElement;
	tagName=event.srcElement.tagName;
	shiftKey= event.shiftKey;
	altKey  = event.altKey;
	ctrlKey = event.ctrlKey;
  if(event.y<0)return; // アドレスバーでもkeyイベントが発生してしまうDonutPの仮対策…
 }else{
	k=e.keyCode;
	srcElement=e.target;
	tagName=srcElement.nodeName;
	shiftKey= e.shiftKey;
	altKey  = e.altKey;
	ctrlKey = e.ctrlKey;

	 if( (k>10) && (k%48<5) ){
	 }else{ //数字キー以外
//		keyBuffer='';
	 }

	if((k==40 || k==38) && ctrlKey){
		ctrlKey=false;
		k+=1000;
	 }
 }
 
 if(tagName=="INPUT")return;
 if(tagName=="TEXTAREA")return;


 if( (k>10) && (k%48<10) ){ // 0-9またはテンキー数字
  if(getSelectionString()!= "" && altKey){
	var ev=new Array("","wordSearch(0)","wordSearch(1)","wordSearchPopup(0)","wordSearchPopup(1)","","","","","","");
	eval(ev[k%48]);
	return;
  }else{
  }
 }


  if(altKey || ctrlKey)return;// ブラウザのショートカットとのバッティング回避
  if(inputMethod==1){keyBuffer='';return;}


 status=keyBuffer+" [数字+ENTERで移動] : keycode=["+k+"]";
// D.title=keyBuffer+" [数字+ENTERで移動] : keycode=["+k+"]";


 switch(k){
	case 110: // .
	case 88: // x
	case 27: // esc
	case 178:// typeU リモコン ■
	 keyBuffer='';
	 status='';
	 popc();
	 return;
	break;

	case 222: // ^
	case 13: //Enter
	case 71: // G
	 if(!DA)return true;
	 if((keyBuffer+'').match(/^[0-9]+$/)){
	  location.hash=keyBuffer;
	  keyBuffer='';
	 }
	 return;
	break;
	
	
	case 85: // U
//	 location.href=DA.back1.href;
	 return;
	break;
	case 73: // I
//	 location.href=DA.back2.href;
	 return;
	break;
	case 79: // O
//	 location.href=DA.back3.href;
	 return;
	break;
	case 80: // P
//	 location.href="/";
	 return;
	break;


	case 77:// M
	case 179: // typeU リモコン ENTER
//	 if(!DA && !shiftKey)return true;
//	 if(! (location+'').match("dat2html.cgi"))return;
	 if(!DGI('updatePoint'))DB.scrollTop=DB.scrollHeight;
	  else
	 location.hash="updatepoint";
	return;
	break;

	case 66: //B
	 if(!DA)return true;
	  history.go(-1);
	  status=" ←Back   Next→";
	 return;
	break;
	case 78: //N
	 if(!DA)return true;
	  history.go(1);
	  status=" ←Back   Next→";
	 return;
	break;


	case 87:// W
	 if(!DA)return true;
	 wordSearch(0);
	 return;
	break;
	case 191:// /
	 if(!DA)return true;
	 wordSearch(1);
	 return;
	break;


 // vi的カーソル　ついでに横スクロールのピッチを大きく
	case 74: //J
	 if(!DA)return true;
	case 176: // typeU リモコン <<
	 DB.scrollTop+=DB.clientHeight*.4;
	 return;
	break;
	case 75: //K
	case 177: // typeU リモコン >>
	 if(!DA)return true;
	 DB.scrollTop-=DB.clientHeight*.4;
	 return;
	break;
	case 37: //←
	case 72: //H
	 if(!DA)return true;
	 DB.scrollLeft-=DB.clientWidth*.2;
	 return;
	break;
	case 39: //→
	case 76: //L
	 if(!DA)return true;
	 DB.scrollLeft+=DB.clientWidth*.2;
	 return;
	break;

 // フォントサイズ
	case 219: //[
	case 221: //]
	 if(!DA)return true;
	 fontSize-=(k-220)*10;
	 if(fontSize<10)fontSize=10;
	 DB[S].fontSize=fontSize+"%";
	 status="fontsize="+fontSize+"%";
	 return;
	break;

 // フィルタチェンジ
	case 29:// 無変換
	case 192:// @
	 if(!DA)return true;
	 if(DGI('pImage')){
	  var pi=DA.pImage;
	  var ft=pi.filters.item('DXImageTransform.Microsoft.Matrix').filterType;
	  ft=(ft=="bilinear")?"nearest":"bilinear";
	    pi.filters.item('DXImageTransform.Microsoft.Matrix').filterType=ft;
	    status="filtermode = "+ft;
	 }
	return;
	break;

 // 次のレス
	case 107:// +
	case 190:// >
	 if(!DA)return true;
	case 1040:// CTRL + 下 (Mozilla)
	 if(keyBuffer=='')keyBuffer=popupNum;
	 keyBuffer++;
	 if(keyBuffer<threadstart)keyBuffer=threadstart+1;
	break;

 // 前のレス
	case 109:// -
	case 188:// <
	 if(!DA)return true;
	case 1038:// CTRL + 上 (Mozilla)
	 if(keyBuffer=='')keyBuffer=popupNum;
	 keyBuffer--;
	 if(keyBuffer<threadstart)keyBuffer=1;
	break;

 }


 if( (k>10) && (k%48<10) ){ // 0-9またはテンキー数字
   keyBuffer+=""+(k%48);
 }


  if(keyBuffer!=''){
    if( (keyBuffer+'').match(/^[0-9]+$/)){
	if(keyBuffer<1)keyBuffer=1;
	if(keyBuffer>DGT("DT").length+threadstart)keyBuffer=DGT("DT").length+threadstart;

	if(k==46 || k==8){ // DEL BS
	 keyBuffer=parseInt(keyBuffer/10);
	 if(keyBuffer==0){
		keyBuffer='';
		status='';
		popc();
		return;
	 }
	}
    }
	if(lk!=keyBuffer){
		popup(DB,keyBuffer,keyBuffer*1+2);
		status=keyBuffer+" [数字+ENTERで移動] : keycode=["+k+"]";
	}
  }

} // end kp



function msc(){} //

function msm(e){ // マウス移動時に行う処理
 if(DA){
	var str = getSelectionString();
	var tag = getEventSrcElement(e);
	var dam = DGI('menubar');

  if( str=='' || inputMethod==0 ){// 文字列を選択していない or 非文字入力
   MX=event.x;MY=event.y;
  }

   if(tag.tagName=="A")hrefPopup(tag,event);
   else
   if(tag.tagName=="DT" && MX < DB.clientWidth * 0.1 )add_shiori(tag,event);

  // メニューバーの表示/非表示
  if(MY<dam.offsetHeight*2)dam[S].visibility="visible";
  else	dam[S].visibility="hidden";

 }else 
 if(DG){
		//	PP[S].visibility='visible';	PP.innerHTML=e.clientX+'  '+e.y;
	MX=e.clientX;
	MY=e.clientY;
	if(e.target.nodeName=="A")hrefPopup(e.target,e);
 }
} // end msm

function msu(e){// マウスボタンを放したときの処理
	var str = getSelectionString();
	var tag = getEventSrcElement(e);
	var dam = DGI('menubar');

	keyBuffer='';
//	MX=event.x;MY=event.y;
  if(str !='' && inputMethod==0 ){// 文字列を選択している and 非文字入力
	var strp=str.replace(/[^\d\-^０-９]/g,'');
	if(str.length<10 && strp.match(/[0-9０-９]+/)){
		strp=escape(strp).replace(/(%uFF1)/gi,""); // 全角数字を半角に
		strp*=1;
		popup(tag,strp,strp);
	}
  }

} // end msu

function msw(e){ // ホイールイベント
  var wd=event.wheelDelta;
  var se=event.srcElement;
  var sei=se.sourceIndex;
  var pp=PP;

  if(se==DA.pImage){
	if(se.filters.item('DXImageTransform.Microsoft.pixelate').enabled){
	 imgMozCon2(DA.pImage,wd);
	 return false;
	}else{
	 return true;
	}
  }else
  // ポップアップの上でホイールを動かした場合 (判別方法が強引)
  if(sei >= pp.sourceIndex && sei < DGI('menubar').sourceIndex && DGI('resPop')){ 
	popupNum-=wd/Math.abs(wd);
	 if(popupNum<1)popupNum=1;
	MX=pp[S][pxLeft]-30;
	MY=pp[S][pxTop]+pp.offsetHeight-DB.scrollTop;
	popup(pp,popupNum,popupNum+2);
	return false;
  }
 
  return true;
}// end msw






function hrefPopup(o,e){// 通常のリンクに対するポップアップ
  var v='',h,pp=PP,ps=pp[S],oldPopupSrc=popupSrc;

	o.href=imenuCutter(o.href);

 if(o.href.match(/^(http|ftp|file|mms|rtsp)/)&& !o.onmouseover){
  popupSrc=o;
  keyBuffer='';
	if((o.href+"").match(/\/100\/\d+\d\d\d\d\d\d\.html/)){
	 o.innerHTML=
	 o.href=(o.href+"").replace(/\/\d\d\d\/(\d+)(\d\d\d\d\d\d)\.html/,"/$1/$1$2.html");
	}
	h=o.href;
	v+='<span><a href="'+h+'" onmouseover="//" id="hrefPopuplink" style="position:absolute;">'+h+'</a><br>'+'';

	// 画像リンク
	if( h.match(/\.(jpe?g|gif|tiff?|bmp|png)$/i) && (h.id != "ilink") ){
		if(oldPopupSrc==popupSrc){pp_show();return;}

		o[S].lineHeight="300%";
		maxSquare=defaultMaxSquare;

		var zoomButton='';

		if(DA)
		if((self.loader.location+'').match(/zoom\.html/))self.loader.location.replace('about:blank');

		if(window.createPopup)zoomButton='<button onclick="self.loader.location.replace(\'/2ch/zoom.html#'+h+'\')" style="padding:0">全画面<br>ＺＯＯＭ</button>';
//!document.all && document.getElementById
		v=
		 '<span id=innerPopup>'+
		 '<span id=pImageFrame>'+
		 '<img src="'+h+'" onresize="imgResize(this);//setTimeout(\'imgResize(DA.pImage)\',2000);this.onresize=null;" onload="if(DG)imgResize(this);imgPopup(this);this.onload=null;" onmouseout="imgMozCon(this,1)" style="filter:'+imgFilter+';" onclick="imgMozCon(this,0);this.alt=\'\';this.onmouseout=null;" id=pImage onerror="popupSrc[S].textDecoration=\'line-through\';this.onresize=this.onerror=null;src=\'/cgi-bin/cache/cache.cgi?img=\'+this.src;this.alt=\'キャッシュより表示(試験中)\'" oldW=0>'+
			// '<img src="'+h+'" onresize="imgResize(this);//setTimeout(\'imgResize(DA.pImage)\',2000);this.onresize=null;" onload="if(DG)imgResize(this);imgPopup(this);this.onload=null;" onmouseout="imgMozCon(this,1)" style="filter:'+imgFilter+';" onclick="imgMozCon(this,0);this.alt=\'\';this.onmouseout=null;" id=pImage onerror="this.onresize=null;popupSrc[S].textDecoration=\'line-through\';imgMozCon(this,0);this.width=32;this.height=32;this[S].background=\'black\'" oldW=0>'+
		'<img src="/cgi-bin/imgcache/cache.cgi?'+h+'&THREADTMP='+location+'&DOCTITLE='+document.title+'" style="display:none;">'+

//		 '<img src="/cgi-bin/imgcache/cache.cgi?'+h+'&THREADTMP='+location+'" style="display:none;">'+
		 '</span>'+
		 '</span>'+
		 '<br>'+
//		 v+
		 '<nobr>'+
		 zoomButton+
		 '<button onclick="opn(\'/cgi-bin/cache/index.cgi?img=' + h + '\');">詳細<br>情報</button>'+
		 '<button onclick="href2img(popupSrc);">リンク<br>展開</button>'+
//		 '<button onclick="pp_fix();">リンク<br>展開</button>'+
		 '<button onclick="opn(\''+h+'\')">新規<br>ウィンドウ</button>'+
		 '<button onclick="opn(\'http://web.archive.org/web/*/'+h+'\')">Web<br>Archive</button>'+
		'<button onclick="opn(\'http://www.google.co.jp/search?q=cache:'+h+'\')">Google<br>キャッシュ</button>'+
		 '<button onclick="javascript:window.open(\'http://www.jah.ne.jp/~fild/cgi-bin/LBCC/lbcc.cgi?url='+h+'\')">ブラクラ<br>チェック</button>'+
		 '<button onclick="opn(\'view-source:'+h+'\')">リンク先<br>ソース</button>'+
		 '<button onclick="popc()" style="font-size:120%;color:red;"> × </button>'+
		 '</nobr>'+
		 '';


		 }
	else{ //普通のリンク
		o[S].lineHeight="150%";
		v+=
		'<nobr><button onclick="opn(\''+h+'\')" style="padding:3">新規<br>ウィンドウ</button>'+
		'<button onclick="opn(\'http://web.archive.org/web/*/'+h+'\')" style="padding:3">Web<br>Archive</button>'+
		'<button onclick="opn(\'http://www.google.co.jp/search?q=cache:'+h+'\')" style="padding:3">Google<br>キャッシュ</button>'+
		 '<button onclick="javascript:window.open(\'http://www.jah.ne.jp/~fild/cgi-bin/LBCC/lbcc.cgi?url='+h+'\')" style="padding:3">ブラクラ<br>チェック</button>'+
		 '<button onclick="javascript:window.open(\'view-source:'+h+'\')" style="padding:3">リンク先<br>ソース</button>'+
		 
		 '<button onclick="popc()" style="font-size:120%;color:red;"> × </button>'+
		 '</span></nobr>';
	}
 }
 else
 if(o.href.match(/^(http|ftp|file|mms|rtsp)/)){
	o.onmouseover();
	return;
 }
 else return;


  pp.innerHTML=v;
  ps[pxLeft] = DB.clientWidth*.4;
  ps[pxTop]  = MY+DB.scrollTop-pp.offsetHeight/2;
  pp_show();
} // end hrefPopup


function imgPopup(o){
  var v='',h,pp=PP,op=o.parentElement;
   var alttext="";

   if(!DA && DG)op=o;

  imgResize(o);

  if(o.oldW!=0){
	alttext+="(" +o.oldW+ "x" +o.oldH+ ")→(" +op.offsetWidth+"x"+op.offsetHeight+")";
  }else{
	alttext+="(" +op.offsetWidth+"x"+op.offsetHeight+")";
  }

    if(popupSrc)popupSrc[S].background='yellow';

  o.alt=o.src + "\n" +alttext+ "   " +o.fileSize+ " バイト "+
		"\nホイール上下でモザイク調整　　ダブルクリックで消去"+
		"";

//  pp[S].pixelLeft=DB.clientWidth-pp.offsetWidth;
 pp_show();
} // 

function imgResize(o){//画像プレビューのリサイズ
   var v='',h,pp=PP,ps=pp[S];

   var menubar=DGI('menubar');
   if(!o)return;
   if(DA && o.oldW!=0)return; //２度実行防止(IE)
   var ow=o.width,oh=o.height;

   // onresizeイベント直後にwidth heightプロパティが変わってなかったりする対策
   if(ow<40 && oh<40)return;

	var x=((DB.clientWidth-2)*.6)/ow;
	var y=(DB.clientHeight-menubar.offsetHeight-(pp.offsetHeight-oh))/oh;


   if( x < 1  || y < 1){
	 if(x>y)x=y;
	   o.oldW=ow;
	   o.oldH=oh;
	if(window.createPopup){ //IE5.5
	// width,heightを変えるよりもMatrixを使ったほうが綺麗
	 var Matrix='DXImageTransform.Microsoft.Matrix';
	 o.filters.item(Matrix).enabled=true;
	 o.filters.item(Matrix).M11=o.filters.item(Matrix).M22=x;
	}else{
	 var w = parseInt(ow * x);
	 var h = parseInt(oh * x);
	 o.width  = w;
	 o.height = h
	}
   }else
   if( x >2  && y > 2){ // 拡大は整数倍のみ
	 if(x>y)x=y;
	   o.oldW=ow;
	   o.oldH=oh;

	 x=parseInt(x);
	 var w = parseInt(ow * x);
	 var h = parseInt(oh * x);
	 o.width  = w;
	 o.height = h
   }
  if(DB.clientHeight-menubar.offsetHeight<=pp.offsetHeight)
    ps[pxTop]=DB.scrollTop+menubar.offsetHeight;
//  ps[pxLeft]=DB.clientWidth-pp.offsetWidth;
} //

function imgMozCon(o,m){// モザイクのオンオフ
	if(!DA)return;
	var Moz='DXImageTransform.Microsoft.pixelate';
	o.filters.item(Moz).enabled=(m==1 && maxSquare>1);
	o.filters.item(Moz).maxSquare=maxSquare;
} //

function imgMozCon2(o,d){// モザイクの粗さ
	if(!DA)return;
	var Moz='DXImageTransform.Microsoft.pixelate';
	var m=maxSquare;

   if(d>0)m=m/.9+1;else m*=.9;

  if(m<2){
	//maxSquare=1;
	o.filters.item(Moz).enabled=false;
  }else{
	maxSquare=m;
	if(maxSquare>50)maxSquare=50;
	o.filters.item(Moz).enabled=true;
	o.filters.item(Moz).maxSquare=parseInt(maxSquare);
  }
} //


function imgLink() {// 画像リンクの展開
	if(!DB.innerHTML)return;
    var links = D.links;

    for (var i = 0; i < links.length; i++) {
	links[i].href=imenuCutter(links[i].href);
        if (    links[i].href.match(/\.(jpe?g|gif|tiff?|bmp|png|mng)$/i)
            &&    links[i].className != "ilink" )
            href2img(links[i]);
    }
} //

function href2img(o){
	if(o.className == "ilink")return ;

    o.innerHTML = "■";
    o.setAttribute("class", "ilink");

    var image = D.createElement("img");
    image.setAttribute("alt", "1");
    image.setAttribute("src", o.href);
    image.setAttribute("style", "-moz-opacity:0.2");
    image.setAttribute("onerror", "reloadImage(this)");
    image.setAttribute("onabort", "reloadImage(this)");

    var onclick =
	     ' var hidden = 0.2; ' + 
	     ' this.style.MozOpacity = (this.style.MozOpacity == hidden) ? 1.0 : hidden';
    image.setAttribute("onclick", onclick);

    o.parentNode.insertBefore(image, o.nextSibling);
}
function reloadImage(o){
	var i=eval(o.alt);
	var src=o.src;
	o.alt=++i;
	if(i == 3)o.style.background='orange';
	if(i == 5)o.style.background='red';
	if(i < 10){
		o.src="/2ch/alpha60.png";// 一度別の画像を読み込ませる
		o.src=src;		//これで再読込してくれるかどうかは不明

//		o.outerHTML=o.outerHTML+''; // HTMLの再構成でreload。 組込用の技
	}
	else {
		o.style.background='gray';
		o.style.MozOpacity = 1.0;
		o.alt='読込失敗';
		o.width  = 200;
		o.height = 40;
		// o.src = '/2ch/err.gif';
	}
} //

function imgLink_old(){// 画像リンクの展開
 for(var i=D.links.length;i>=0;i--){
 var j=D.links[i]+"";
  j=imenuCutter(j);

  if( j.match(/\.(jpe?g|gif|tiff?|bmp|png|mng)$/i) && (i.id != "ilink") )
								href2img(D.links[i]);
 }
} //

function href2img_old(o){
	// timeout → onerror → outerhtmlの再構成 → 自動リロード(10回まで)
	o.outerHTML='<a href="'+o.href+'" id=ilink>■</a><br><span><img src="'+o.href+'" alt="1" onerror="this.onabort()" onabort="var i=eval(this.alt);this.alt=++i;if(i==5)this.style.background=\'orange\';if(i==5)this.style.background=\'red\';if(i < 10)this.outerHTML=this.outerHTML;else{this.style.background=\'black\';}" onmouseover="imgMozCon(this,0)" onmouseout="imgMozCon(this,1)" style="filter:'+imgFilter+'" ondblclick="imgMozCon(this,0);this.onmouseout=null"  onload="this.onload=null;"></span>';

} // 

function mailtoLink(){
 if(DA || DG){
	var L = D.links;
	for(var i = L.length; i > 0 ;)
		if(L[--i].href.match(/^mailto:/))
			L[i].innerHTML+="　　  ["+decodeURIComponent(L[i].href)+"]　";
 }
} //


function textPopup(t){// テキストのポップアップ　汎用
 if(DA || DG){
   var pp=PP;
   var ps=pp[S];

   var v='',h;
   v='<nobr>'+t+'</nobr>';
   popupSrc='';
	pp.innerHTML=v+"  ";

   ps[pxLeft] = MX+30;
	if(parseInt(ps[pxLeft])>DB.clientWidth*.7)ps[pxLeft]=DB.clientWidth*.7;
   ps[pxTop]  = MY-pp.clientHeight+DB.scrollTop;
   pp_show();
  }else
	status = t;
} //

function add_stack(n,t){// ツールバーのしおりに参照リンクを追加
	if(!DA)return;
	var das=DGI('stack');
	var dass;
	var dask;
	var dd=DGT('DD');

	var nn=n;n-=threadstart;
	var tt=t;t-=threadstart;
	if(n<1)n=1;
	if(n>dd.length)n=dd.length-1;
	if(t<n)t=n;
	if(t>dd.length)t=dd.length-1;

 if(n==t){
	dass='<a href="#'+n+'" onmouseover="popc();popup(this,'+nn+','+nn+')" >&gt;'+nn+'</a> ';
	dask="&gt;"+nn;
	}
 else{
	dass='<a href="#'+n+'" onmouseover="popc();popup(this,'+nn+','+tt+')" >&gt;'+nn+'-'+tt+'</a> ';
	dask="&gt;"+nn+'-'+tt;
 }
 // 重複チェック
 if(!das.innerHTML.match(dask))das.innerHTML+=dass;
} //


function show_mynote(v){ //メモ帳を表示
	var pp=PP,ps=pp[S];
	var nw=DGI('notewin');
	var nt=DGI('notepad');

	nw[S][pxTop]=DB.scrollTop+DGI('menubar').offsetHeight;
	nw[S].display=(v == 1)?"":"none";

//	if(v==1)nt.focus();

} //



function show_mynotestatus(){ // メモ帳変更時に情報を表示
	var pp=PP,ps=pp[S];
	var nw = DGI('notewin');
	var nt = DGI('notepad');
	var st1= DGI('status1');
	var memosize=strLength(nt.innerHTML+'');
	if(memosize>65536){
		//nt.innerHTML=nt.innerHTML.substring(memosize-65536);
		alert("メモ帳は64KBまでしか記憶できません");
	}else{
		st1.innerHTML="サイズ : " + memosize + " / 65536";
	}
} //

function resize_mynote(f){
	var nws=DGI('notewin')[S];
	var nts=DGI('notepad')[S];

	if(f==1){
	 nws.left="25%";
	 nws.width="75%";
	 nts.background="window";
	 nts.color="windowtext";
	 inputMethod=1;
	}else{
	 nws.left="60%";
	 nws.width="40%";
	 nts.background="none";
	 nts.color="#888888";
	 inputMethod=0;
	}
} //

function add_mynote(){// 選択テキストをメモ帳に追加
	var str = getSelectionString();
	var dan = DGI('notepad');
	var dac = DGI('notecell');
	var R="replace";

	var addStr=str.replace(/(<\/?dt>|<\/?dd>)/gi,'').replace(/[\x00-\x20]/gi,'').replace(/[ \t][ \t]+/gi,' ').replace(/[ 　\s]+<br>/gi,'<br>').replace(/^(<br>)+/gi,'').replace(/(<br>)+$/gi,'');

	dan.innerHTML=dan.innerHTML+"<hr>"+addStr;
	show_mynote(1);
	dac.scrollTop+=10000;

//	DGI('notepad').focus();
	updateCheck();
} //

function menubarScroll(){ // ブラウザスクロール時にメニューバーも動かす
	var dam = DGI('menubar');
	var nw  = DGI('notewin');
	var das = dam[S][pxTop];
	var nws = nw[S][pxTop];

	var sct = DB.scrollTop;
	var abs = Math.abs(sct-das);
	var abt = Math.abs(sct+dam.offsetHeight-nws);

	var flag=0;
	var nextTimeout=500;


	if(abs!=0){
	 if(abs>100)dam[S][pxTop]+=(sct-das)/1.5;
	 else
	 if(abs>3  )dam[S][pxTop]+=(sct-das)/2;
	 else	    dam[S][pxTop] = sct;

	 flag=1;
	}

	if( (abt!=0) && (nw[S].display !="none") ){
	 if(abt>100)nw[S][pxTop]+=(sct+dam.offsetHeight-nws)/2;
	 else
	 if(abt>3  )nw[S][pxTop]+=(sct+dam.offsetHeight-nws)/2.5;
	 else	    nw[S][pxTop] = sct+dam.offsetHeight;

	 flag=1;
	}

	if(flag==1)nextTimeout=50;
	setTimeout("menubarScroll()",nextTimeout);
	
	// Sleipnir対策?
//	 dam[S][pxLeft]=DB.clientWidth-dam.offsetWidth;

} //

function popup(o,n,t){// レスのポップアップ表示
 var dt;
 var dd;
 var pp;
 var ps;
 if(DA || DG){
  var v='';
  dt=DGT('DT'),
  dd=DGT('DD'),
  pp=PP;
  ps=pp[S];


  var nn=n;n-=threadstart;
  var tt=t;t-=threadstart;

  if(n<1)n=1;
  if(n>dd.length)n=dd.length;
  if(!t)t=n;
  if(t<n)t=n;
  if(t>dd.length)t=dd.length;

  popupNum=nn;
  if(o!=DB)keyBuffer='';



  if(n==t)
	v+='<a onclick="add_stack(' +nn+ ',' +nn+ ')" style="cursor:hand;" id="resPop">>>>>' +nn+ '</a>　';
  else
	v+='<a onclick="add_stack(' +nn+ ',' +tt+ ')" style="cursor:hand;" id="resPop">>>>>' +nn+ '-' +tt+ '</a>　';

 // Mozilla用
  var loctmp=(location+'').replace(/#.*/,""); // hash部分を除去
  v+=	'<a href="' + loctmp + '#' + nn + '" onmouseover="//">' + nn + '^^</a><br>';
	//^^はマッチングの確定用

  v+=	'<span id=innerPopup>';


 if(DA)status='マウスホイール操作で前後のレスを表示　ダブルクリックで消去します';

  for(var i=n-1;i<t;i++){
	if(i<0)i=0;if(!dt[i])break;
	v+="<nobr style=margin-left:20>"+dt[i].innerHTML+'</nobr>'+
		'<div style="margin-left:40">'+
		dd[i].innerHTML+
		'</div>'+
		'';
  }

  v+=	'</span>';

  v+=	'<span style="position:absolute;"><input type=button style="position:relative;" value=" ◆固定 " onclick="pp_fix();"></span>';

  popupSrc=o;
  ps[pxLeft]=MX+30;
	if(parseInt(ps[pxLeft])>DB.clientWidth*.8)ps[pxLeft]=DB.clientWidth*.8;
  ps[pxTop]=MY-pp.offsetHeight+DB.scrollTop;
	pp.innerHTML=v;
  pp_show();
 }
} //

function pp_show(){// ポップアップ用オブジェクトを表示する
  var pp=PP;
  var ps=pp[S];
  var menubar=DGI('menubar');


  ps.border="1px solid black";
   if(DA){
	ps.background="#ffffec";
	ps.filter="Alpha(opacity=80)";
   }else
   if(DG){
	ps.background="url(/2ch/alpha60.png)";
   }
  ps.wordBreak="break-all";
  ps.color="black";
  ps.visibility="visible";
  ps.zIndex=10000;


//	pp.innerHTML+="<br>" + ps[pxTop]+"<br>"+top+"/"+left;


	if(parseInt(ps[pxTop] ) + pp.offsetHeight >	DB.clientHeight + DB.scrollTop )
		ps[pxTop]  = DB.scrollTop  - pp.offsetHeight + DB.clientHeight;
	if(parseInt(ps[pxLeft]) + pp.offsetWidth  >	DB.clientWidth  + DB.scrollLeft)
		ps[pxLeft] = DB.scrollLeft - pp.offsetWidth  + DB.clientWidth;
//		ps[pxLeft] = DB.clientWidth-pp.offsetWidth;

	if(parseInt(ps[pxTop] ) < DB.scrollTop + menubar.offsetHeight)
		ps[pxTop]  = DB.scrollTop + menubar.offsetHeight;
	if(parseInt(ps[pxLeft]) < DB.scrollLeft)
		ps[pxLeft] = DB.scrollLeft;

	if(parseInt(ps[pxLeft]) < DB.clientWidth/10)ps[pxLeft]=DB.clientWidth/10;


  pp.ondblclick=popc;

  // 半透明関係
   pp.onmouseout=alpha_0;
   pp.onmousemove=pp.onmouseover=alpha_1;
   pp.onclick=alpha_c;

} //

function alpha_0(){var pp=PP;ps=pp[S];
	if(DA)ps.filter='Alpha(opacity=40)';
	else
	if(DG) ps.background="url(/2ch/alpha60.png)";
} //
function alpha_1(){var pp=PP;ps=pp[S];
	if(DA)ps.filter='';
	else
	if(DG) ps.background='#ffffec';
} //
function alpha_c(){var pp=PP;ps=pp[S];
	pp.onmouseover=pp.onmouseout=pp.onmousemove=ps.filter='';
	ps.background='#ffffec';
} //

function popc(e){
	//  if(DA && event.srcElement.tagName=="IMG")return;
	var pp=PP;
	var ps=pp[S];
	ps.visibility="hidden";
	ps.zIndex=-1;
	popupSrc='';
	pp.innerHTML='';
	keyBuffer='';
	status='';
	return true;
} //


var fixppCounter=0;
function pp_fix(){
//	if(!D.createElement)return;
	var pp=PP;
	var ps=pp[S];
	var ppi=DGI('innerPopup');
	var fpp=DGI('fixedPopup');
	var menubar=DGI('menubar');
	var x=parseInt(ps[pxLeft]);//x=MX;
	var y=parseInt(ps[pxTop]);//y=MY;
	var pf='';
	

	fixppCounter++;
	
	
	pf+='<div id="fixpp'+fixppCounter+'" style="position:absolute;border:1px solid;background:#ececff;color:black;z-index:10;visibility:hidden;overflow-x:auto;" ondblclick="this[S].display=\'none\';this.innerHTML=\'\'" onfocus="this[S].filter=\'\';this[S].zIndex+=100" onblur="this[S].zIndex-=99">';
	pf+=ppi.innerHTML;
	pf+='</div>';

	fpp.innerHTML+=pf;


	var pfp=DGI('fixpp'+fixppCounter);

	pfp[S].wordBreak="break-all";

	 if(pfp.offsetWidth>DB.clientWidth*.5){
		//pfp[S].overflowX='auto';
		pfp[S].width=DB.clientWidth*.5;
	 }
	 if(pfp.offsetHeight>DB.clientHeight-menubar.offsetHeight){
		if(DA){
		// pfp[S].overflowY='auto';
		// pfp[S].height=DB.clientHeight-menubar.offsetHeight;
		}
	 }

	pfp[S][pxLeft]=DB.clientWidth-pfp.offsetWidth;//x;
	pfp[S][pxTop]=y;


	popc();


		pfp[S].visibility="visible";

	return pfp;

/*	// IEだと作成後にposition:absoluteになってくれないので没
	var pf=D.createElement('div');
	pf.setAttribute('style','position:absolute;border:1px solid;background:#ffffec;top:'+y+';left:'+x);
	fpp.appendChild(pf);
*/
} //


function wordSearch(grep){// テキストを検索してマーキングする
	var str = getSelectionString();
	var thBody=DGT('DL')[0];

	var x=prompt("■キーワード検索■\n\n強調する単語を入力 \n(IEでは、マッチした箇所へALT+Sでジャンプします)", str );
	if(!x)return;

	var x2=(grep==1)? x : x.replace(/([\+\*\?\.\(\)\[\]\{\}\|\\])/g,"\\$1");
	var rg=new RegExp("("+x2+")",'gi');


	var r=escape(x);

	c="color:black;background:"+newColors();


	var iHTML=thBody.innerHTML;
	iHTML=iHTML.replace(rg,'<span accesskey=s style="'+c+'" contenteditable=true>$1</span>')
	while( iHTML.match(/(<[^>]+)<span.*?>/i) ) iHTML=iHTML.replace(/(<[^>]+)<span.*?>/ig,"$1");
	while( iHTML.match(/(<[^>]+)<\/span>/i  ) )iHTML=iHTML.replace(/(<[^>]+)<\/span>/ig,"$1");

	if(thBody.innerHTML == iHTML){
		alert(""+x+"を含むレスは見つかりませんでした。");
	}else{
	  thBody.innerHTML=iHTML;
	}

} //

function wordSearchPopup(grep,txt){// テキストを検索してマーキングしてポップアップ
 var dt;
 var dd;
 var pp;
 var ps;
 if(DA || DG){
  var v='';
  var menubar=DGI('menubar');
  dt=DGT('DT'),
  dd=DGT('DD'),
  
  pp=PP;
  ps=pp[S];
	var str = getSelectionString();
	str=str.replace(/<.+?>/gi,'');
	str=str.split(/\r\n/)[0];

	if(txt){
	  x=txt;
	}else{
	 var x=prompt("■キーワード抽出■\n\n検索する単語を入力", str );
	 if(!x)return;
	}

	var x2=(grep==1)? x : x.replace(/([\+\*\?\.\(\)\[\]\{\}\|\\])/g,"\\$1");
	var rg=new RegExp("("+x2+")",'gi');


	var v='<span id=innerPopup>';

	v+='<a href="#'+ x +'" onmouseover="//">[[' + x + ']</a><a name="'+ x +'"> </a>';
	v+='<a href="#" onclick="this.parentNode.ondblclick();return false;" onmouseover="//">閉じる</a><br>';

	var matchcnt=0;
	for(var i=0;i<dt.length;i++){
	 var txt=dt[i].innerHTML+" "+dd[i].innerHTML;
	 txt=txt.replace(/<.+?>/g,'');
		if( txt.match(rg) ){
			matchcnt++;
		 v+=""+dt[i].innerHTML.replace(rg,"<b>$1</b>")+''+
			'<div style="margin-left:10">'+
			dd[i].innerHTML.replace(rg,"<b>$1</b>")+
			'<a href="#" onmouseover="popup(this,' +(i+1)+ ',' +(i+1)+ ');">>>' +(i+1)+
			'</a>'+
			'</div>'+
			'';
		}
	}
	if(matchcnt==0){alert(""+ x+" を含むレスは見つかりませんでした。");return;}
	
	while(v.match(/(<[^>]+)<b>(.+?)<\/b>/i))v=
				v.replace(/(<[^>]+)<b>(.+?)<\/b>/ig,"$1$2");
	
	v+='</span>';

	popupSrc=DB;

	pp.innerHTML=v;
	ps[pxLeft]=DB.clientWidth-pp.offsetWidth;
		if(parseInt(ps[pxLeft])<DB.clientWidth*.5)ps[pxLeft]=DB.clientWidth*.5;
	ps[pxTop]=DB.scrollTop+menubar.offsetHeight;
	pp_show();

	var pfp=pp_fix();
	if(DA){	pfp[S].filter="";//pfp[S].filter="Alpha(opacity=80)"
	}
	else
		pfp[S].MozOpacity='0.8';
	
	pfp[S].visibility="visible";
	pfp[S].zIndex=1;

 }
} //

function add_shiori(o,e){ // 「ここまで読んだ」を表示する
  var v='',h,pp=PP;
  popupSrc=o;

 var t=o.sourceIndex;while(!DA[t].name && t>0)t--;
 var i=DA[t].name;//i=0;

  v='<a href="#'+i+'" onmouseover="//" onclick="add_stack('+i+','+i+')" >ここまで読んだ>>'+i+'</a>';
	pp.innerHTML=v;

  pp[S][pxLeft]=0;
  pp[S][pxTop]=MY-pp.clientHeight/2+DB.scrollTop;
  pp_show();
} //


function threadSearch(){
	var sdir=D.URL.replace(/^.*\/2ch\/[a-z0-9\-]+_([a-z0-9\-]+)\/.*/i,"$1");
	var str = getSelectionString();
	str=str.split(/\r\n/)[0];

	var x=prompt("スレッドタイトルに含まれる語を入力 ",str);
	if(!x)return;

	window.open("/cgi-bin/search/search.cgi?andor=and&dir="+sdir+"&q="+x);

} //



function updateCheck(){ // メモ帳の排他アクセス制御　　複雑
	var nt=DGI('notepad');
	var dac = DGI('notecell');
	var content,mynote;

  if(MEMOcheck != nt.innerHTML){
	 doSave(1);
	 show_mynotestatus();
  }
  else{
    nt.load("n"+VALdir);
    mynote = nt.getAttribute("mynote");
   if (mynote != null){

     if(mynote != MEMOcheck2){
	scrError(true);
	 nt.innerHTML=mynote; 
	 MEMOcheck=nt.innerHTML;
	 show_mynote(1);
	 dac.scrollTop+=10000;
	scrError(false);
	 show_mynotestatus();
     }
	 MEMOcheck2=mynote;
   }
  }

  setTimeout("updateCheck()",5000);

} //

function doSave(f){ // メモ帳・しおりの保存
	var st=DGI('stack');
	var nt=DGI('notepad');
	var content,mynote;

  if( (f==1) || (st.innerHTML != "")){
	 st.setAttribute("content", st.innerHTML);
	 st.save("s"+VAL);
  }

  if( (f==1) || (nt.innerHTML != "")){
	scrError(true);
	 nt.setAttribute("mynote", nt.innerHTML);
	 nt.save("n"+VALdir);

	  nt.load("n"+VALdir);
	  mynote = nt.getAttribute("mynote");
	 MEMOcheck=nt.innerHTML;
	 MEMOcheck2=mynote;

	scrError(false);
  }
} //

function doLoad(){ // メモ帳・しおりの読出し
	var st=DGI('stack');
	var nt=DGI('notepad');
	var dac = DGI('notecell');
	var content,mynote;

  st.load("s"+VAL);
  content = st.getAttribute("content");
  if (content != null) st.innerHTML=content; 

  nt.load("n"+VALdir);
  mynote = nt.getAttribute("mynote");
  if (mynote != null){
	scrError(true);
	nt.innerHTML=mynote; 
	MEMOcheck=nt.innerHTML;
	MEMOcheck2=mynote;
	show_mynote(1);
	dac.scrollTop+=10000;
	scrError(false);
  }else{

	// dat2htmlから過去ログへの引継ぎ　ややトリッキー
    if(	(DGT("DT").length > 800) &&
	(document.URL.match(/^http.+\.html/)) &&
	(content == null) && (mynote == null)
     ){
	setTimeout("loader.location.replace(DAT2HTMLPATH+'restore.html')",2000);
    }

  }

	 show_mynotestatus();

} //




function be(i){
	window.open("http://be.2ch.net/test/p.php?i="+i);
}


function init(){ // 初期化　　onloadで呼ばれる
	now2=new Date();
	if(DA){ //IE
//	 DGI('menubar')[S][pxLeft]=DB.clientWidth-DA.menubar.offsetWidth;
//	 setTimeout("menubarScroll()",50);
//	 setTimeout("updateCheck()",1000);

	 DB.onfocus=new Function("resize_mynote(0)");

	 if(window.createPopup){ / 