var selectedTextField;
var actElm;
var n;
var sel_length;
var end_length;
var start_length;

//----------------------------
// ブラウザ判定
//----------------------------
function _checkBrowser(){
	var uName = navigator.userAgent;
	//if (uName.indexOf("Safari") > -1) return "Safari";
	if (uName.indexOf("MSIE") > -1){
		return "MSIE";
	}
	return "Netscape";
}

//----------------------------------------------------------------------------------
// ページ内のすべてのTextField.clickにsetSelectedTextFieldイベント設定
//----------------------------------------------------------------------------------
function setSelectedTextField() {
	var browser = _checkBrowser();
	if (browser == 'MSIE'){
		//IE
		actElm = document.activeElement;
		var sel=document.selection.createRange();
		sel_length = sel.text.length;
		var r = actElm.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;
		selectedTextField = this;
	}else{
		//Mozilla
		selectedTextField = this;
	}
	
}

function _setFocusedElementInit(tag){
	var oElements = document.getElementsByTagName(tag);
	
	for(var i=0;i<oElements.length;i++){
		//<input>タグの場合、type="text"以外は無視
		if(tag == "input" && oElements.item(i).getAttribute("type",0) != "text"){
			continue;
		}
		
		eventObserve(oElements.item(i), 'mouseup', setSelectedTextField, false);
		eventObserve(oElements.item(i), 'keyup', setSelectedTextField, false);

	}
}

function setFocusedElement(){
	_setFocusedElementInit("textarea");
//	_setFocusedElementInit("input");
}

//window.loadにsetFocusedElementイベントハンドラを追加
//eventObserve(window, 'load', setFocusedElement, false);
eventObserve(window, 'load', setFocusedElement, false);

//-------------
// テキスト挿入
//-------------
function insertText(str){
	//str = escape(str);

	var target_text = selectedTextField;
	//alert("insertText()");
	//テキストフィールドが選択されていない場合は無視
	if(!target_text){
		return;
	}
	
	target_text.focus();
	
	var browser = _checkBrowser();
	if (browser == 'MSIE'){
		//IE
		var itext = actElm.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);

		if(click_m !== ''){
			actElm.value = click_s + str + click_e;
		}else{
			actElm.value = click_s + str + click_m + click_e;
		}
	}else{
		//Mozilla
		if(target_text.selectionStart || target_text.selectionStart == '0'){
			//文字列中にカーソルがある場合
			var start = target_text.selectionStart;
			var end = target_text.selectionEnd;
			target_text.value = target_text.value.substring(0,start) + str + target_text.value.substring(end,target_text.value.length);
			//target_text.focus();
		}else{
			//文字列中にカーソルがない場合
			target_text.value += str;
		}
	}
	return;
}

//---------------------------------------------------------------------
// イベント登録
//---------------------------------------------------------------------
function eventObserve(obj,e,func,bool){
	if (obj.addEventListener){
		obj.addEventListener(e, func, bool)
	}else if (obj.attachEvent){
		obj.attachEvent("on" + e, func)
	}

}
