/* 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 bl = 0;
var el = null;
function get_pos(d){
  if( d ) el = d;
  var ret = 0;
  if( bl == 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( bl == 2 ){
	start_length = d.selectionStart;
	end_length = d.value.length - d.selectionEnd;
	sel_length = d.selectionEnd-start_length;
  } else if( bl == 3 ){
	var ln = new String(d.value);
	start_length = ln.length;
	end_length = start_length;
	sel_length = 0;
  }
}
function atach_focus(ln){
  if( bl == 1 ){
	var e = el.createTextRange();
	var tx = el.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();
  } else if( bl == 2 ){
	el.setSelectionRange(ln, ln);
  } else if( bl == 3 ){
//
  }
  el.focus();
}

function enclose(s, e){
  if( !el) return;
  var itext = el.value;

  if( bl == 4 ){
	el.value = itext + s + e;
  } else if( bl ){
	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);
	el.value = click_s + s + click_m + e + click_e;
  }

  atach_focus(s.length+e.length+start_length+sel_length);
}

function convert(s, e){
  if( !el ) return;
  if( (bl != 1) && (bl != 2) ){
	 el.focus();
	 return;
  }
  var itext = el.value;

  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);
  var cnv = click_m.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
  el.value = click_s + cnv + click_e;

  atach_focus(start_length+cnv.length);
}

function fstins(af){
  if( !el ) return;
  if( (bl != 1) && (bl != 2) ){
	 el.focus();
	 return;
  }
  var itext = el.value;
  var flag = false;

  if( start_length ){
	if( itext.substr(start_length-1,1) == "\n" ){
	  start_length--;
	}
  }
  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);
  var cnv = click_m.replace(/\n/g, "\n"+af);
  if( start_length == 0 ){
	 flag=true;
  }
  if( flag ){
	cnv=af + cnv;
  }

  el.value=click_s + cnv + click_e;

  atach_focus(start_length+cnv.length);
}

// ボタンの追加例
// 文字サイズや色をpx単位で変更
//<input type="button" name="spanbtn" value="span"
// onclick="enclose(\'<span style=&quot;font-size:\' + spansize.options[spansize.selectedIndex].value + \'px;color:\' + document.getElementById(\'spancol\').value+\'&quot;>\', \'</span>\');return false;">
//<select id="spansize" name="spansize"><option value="10">10px</option><option value="11">11px</option><option value="12">12px</option>
// <option value="13">13px</option><option value="14">14px</option><option value="15">15px</option><option value="16">16px</option>
// <option value="17">17px</option><option value="18">18px</option></select>
// 行頭に # を挿入
// <input type="button" name="fins" value="行頭に # を挿入" onclick="fstins(\'# \');return false;">
// 画像ボタン
// <img src="./icon/w_hare2.gif" onclick="enclose(\'<img src=&quot;./icon/w_hare2.gif&quot;>\',\'\');return false;">
