/* Script written by Mugi (mugi@wa2.so-net.ne.jp)          */
/*   2nd Edition by Raelian(2005/02/10)                    */
/*   http://painter.homeip.net/~raelian/tag/enclose.html   */

var sel_length, end_length=0, start_length=0;
var browser=0;
var scrollPos=0;
var eventObj=null;

function get_pos(d){
	if( d ) eventObj=d;
	var ret=0;
	if( browser==1 ) {
		var sel=document.selection.createRange();
		sel_length = sel.text.length;
		var r=d.createTextRange();
		var all=r.text.length;
		r.moveToPoint(sel.offsetLeft,sel.offsetTop);
		r.moveEnd("textedit");

		end_length=r.text.length;
		start_length=all-end_length;
		
	} else if( browser==2 ) {
		start_length=d.selectionStart;
		end_length=d.value.length - d.selectionEnd;
		sel_length=d.selectionEnd-start_length;
	}else if( browser==3 ){
		var ln=new String(d.value);
		start_length=ln.length;
		end_length=start_length;
		sel_length=0;
	}
}

function atach_focus(ln){
	if( browser == 1 ){
		var e=eventObj.createTextRange();
		var tx=eventObj.value.substr(0, ln);
		var pl=tx.split(/\n/);
		e.collapse(true);
		e.moveStart("character",ln-pl.length+1);
		e.text=e.text+"";
		e.collapse(false);
		e.select();
		eventObj.focus();
	} else if( browser == 2 ){
		eventObj.setSelectionRange(ln, ln);
		eventObj.focus();
		eventObj.scrollTop = scrollPos;
	} else if( browser == 3 ){

	}
	
}

function enclose(s, e){
	if( !eventObj) return;

	if( browser == 2 ){
		scrollPos = eventObj.scrollTop;
	}
		
	var itext=eventObj.value;

	if( browser == 4 ){
		eventObj.value = itext + s + e;
	} else if( browser ){
		var click_s=itext.substr(0, start_length);
		var click_m=itext.substr(start_length, sel_length);
		var click_e=itext.substr(start_length+sel_length, end_length);
		eventObj.value=click_s + s + click_m + e + click_e;
	}

	atach_focus(s.length + e.length + start_length + sel_length);
}

function insert(s){
	if( !eventObj) return;

	if( browser == 2 ){
		scrollPos = eventObj.scrollTop;
	}
	
	var itext=eventObj.value;

	if( browser == 4 ){
		eventObj.value = itext + s;
	} else if( browser ){
		var click_s=itext.substr(0, start_length);
		var click_m=itext.substr(start_length, sel_length);
		var click_e=itext.substr(start_length+sel_length, end_length);
		eventObj.value=click_s + s + click_m + click_e;
	}

	atach_focus(s.length + start_length + sel_length);
}

function insert_link(){
	if( !eventObj) return;
	
	if( browser == 2 ){
		scrollPos = eventObj.scrollTop;
	}
	
	var aname = prompt("リンク名を入力してください","");
	if(aname == null) return;
	
	var url = prompt("リンク先(ページ名, URL)を入力してください","");
	if(url == null) return;
	
	var s = "[[" + aname + ">" + url + "]]";
	
	var itext=eventObj.value;

	if( browser == 4 ){
		eventObj.value = itext + s;
	} else if( browser ){
		var click_s=itext.substr(0, start_length);
		var click_m=itext.substr(start_length, sel_length);
		var click_e=itext.substr(start_length+sel_length, end_length);
		eventObj.value=click_s + s + click_m + click_e;
	}

	atach_focus(s.length + start_length + sel_length);
}

function insert_tel(){
	if( !eventObj) return;
	
	if( browser == 2 ){
		scrollPos = eventObj.scrollTop;
	}
	
	var aname = prompt("電話番号を入力してください　（※ 「-（ハイフン）」は省いてください）","");
	if(aname == null) return;
	
	var s = "&tel(" + aname + ");";
	
	var itext=eventObj.value;

	if( browser == 4 ){
		eventObj.value = itext + s;
	} else if( browser ){
		var click_s=itext.substr(0, start_length);
		var click_m=itext.substr(start_length, sel_length);
		var click_e=itext.substr(start_length+sel_length, end_length);
		eventObj.value=click_s + s + click_m + click_e;
	}

	atach_focus(s.length + start_length + sel_length);
}

function insert_mail(){
	if( !eventObj) return;
	
	if( browser == 2 ){
		scrollPos = eventObj.scrollTop;
	}
	
	var mailaddr = prompt("メールアドレスを入力してください","");
	if(mailaddr == null) return;
	
	var subject = prompt("件名を入力してください","");

	var msg = prompt("本文を入力してください","");

	var dispstr = prompt("メールアドレスなど画面に表示する文字を入力してください","");
	if(dispstr == null) return;
	
	var s = "&mailto(" + mailaddr + "," + subject + "," + msg + "){" + dispstr + "};";
	
	var itext=eventObj.value;

	if( browser == 4 ){
		eventObj.value = itext + s;
	} else if( browser ){
		var click_s=itext.substr(0, start_length);
		var click_m=itext.substr(start_length, sel_length);
		var click_e=itext.substr(start_length+sel_length, end_length);
		eventObj.value=click_s + s + click_m + click_e;
	}

	atach_focus(s.length + start_length + sel_length);
}

function enclose_scroll(){
	if( !eventObj) return;
	
	if( browser == 2 ){
		scrollPos = eventObj.scrollTop;
	}
	
	var color = prompt("背景色を入力してください（ ex.  black yellow pink blue ・・・ ）","");
	if(color == null) return;
	
	var speed = prompt("スクロールスピードを入力してください（省略した場合は標準スピード(6)に設定します。）","");
     if (speed == null) speed = 6;

	var s = "&scroll(" + speed + "," + color + "){"
	var e = "};";
	
	var itext=eventObj.value;

	if( browser == 4 ){
		eventObj.value = itext + s + e;
	} else if( browser ){
		var click_s=itext.substr(0, start_length);
		var click_m=itext.substr(start_length, sel_length);
		var click_e=itext.substr(start_length+sel_length, end_length);
		eventObj.value=click_s + s + click_m + e + click_e;
	}

	atach_focus(s.length + e.length+start_length + sel_length);
}

function enclose_size(){
	if( !eventObj) return;
	
	if( browser == 2 ){
		scrollPos = eventObj.scrollTop;
	}
	
	var val = prompt("文字サイズを入力してください。(少し大きく:18px、小さく:12px)","");
	if(val == null) exit;
	
	var s = "&size(" + val + "){";
	var e = "};";
	
	var itext=eventObj.value;

	if( browser == 4 ){
		eventObj.value = itext + s + e;
	} else if( browser ){
		var click_s=itext.substr(0, start_length);
		var click_m=itext.substr(start_length, sel_length);
		var click_e=itext.substr(start_length+sel_length, end_length);
		eventObj.value=click_s + s + click_m + e + click_e;
	}

	atach_focus(s.length + e.length+start_length + sel_length);
}

