function getCursor(input){
	var result = {start: 0, end: 0};
	if (input.setSelectionRange){
		result.start= input.selectionStart;
		result.end = input.selectionEnd;
	} else if (!document.selection) {
		return false;
	} else if (document.selection && document.selection.createRange) {
		var range = document.selection.createRange();
		var stored_range = range.duplicate();
		stored_range.moveToElementText(input);
		stored_range.setEndPoint('EndToEnd', range);
		result.start = stored_range.text.length - range.text.length;
		result.end = result.start + range.text.length;
	}
	return result;
}

function setCursor(txtarea, start, end){
	if(txtarea.createTextRange) {
		var range = txtarea.createTextRange();
		range.move("character", start);
		range.select();
	} else if(txtarea.selectionStart) {
		txtarea.setSelectionRange(start, end);
	}
}

function insert_login(text, obj){
	var txtarea = get_editor_target(obj);
	txtarea.focus();

	var scrtop = txtarea.scrollTop;

	var cursorPos = getCursor(txtarea);
	var txt_pre = txtarea.value.substring(0, cursorPos.start);
	var txt_aft = txtarea.value.substring(cursorPos.start);

	var nuCursorPos = cursorPos.start + text.length;
	txtarea.value = txt_pre + text + txt_aft;
	setCursor(txtarea,nuCursorPos,nuCursorPos);

	if (scrtop) txtarea.scrollTop=scrtop;
}

function insert_tag(startTag, endTag, obj){
  var txtarea = get_editor_target(obj);
	txtarea.focus();

	var scrtop = txtarea.scrollTop;

	var cursorPos = getCursor(txtarea);
	var txt_pre = txtarea.value.substring(0, cursorPos.start);
	var txt_sel = txtarea.value.substring(cursorPos.start, cursorPos.end);
	var txt_aft = txtarea.value.substring(cursorPos.end);

	if (cursorPos.start == cursorPos.end){
		var nuCursorPos = cursorPos.start + startTag.length;
	}else{
		var nuCursorPos=String(txt_pre + startTag + txt_sel + endTag).length;
	}
	txtarea.value = txt_pre + startTag + txt_sel + endTag + txt_aft;
	setCursor(txtarea,nuCursorPos,nuCursorPos);

	if (scrtop) txtarea.scrollTop=scrtop;
}

function insert_text(tagName, obj){
	if (tagName == 'moderator') {
		var startTag = '<span class="moderator">';
		var endTag = '</span>';
	} else {
		var startTag = '<' + tagName + '>';
		var endTag = '</' + tagName + '>';
	}
	insert_tag(startTag, endTag, obj);	
	return false;
}

function insert_image(obj){
	var src = prompt('Введите адрес картинки', 'http://');
	if(src){
		insert_tag('<img src="' + src + '" alt="image">', '', obj);
	}
}

function insert_link(obj){
	var href = prompt('Введите адрес гиперссылки', 'http://');
	if(href){
		insert_tag('<a href="' + href + '">', '</a>', obj);
	}
}

function insert_quote(obj){
	var href = prompt('Введите адрес источника цитаты (необязательно)', 'http://');
	if(href && href != 'http://'){
		insert_tag('<quote href="' + href + '">', '</quote>', obj);
	}else{
	  insert_tag('<quote>','</quote>', obj);
	}
}

function get_editor_target(obj){
  if(obj == undefined || obj == ''){
    var txtarea = document.getElementById("conversation_message_text") || document.getElementById("comment_comment") || document.getElementById("post_body") || document.getElementById("profile_info") || document.getElementById("question_answer");
  }else{
    if(obj[0]){
      var txtarea = obj[0];
    }else{
      var txtarea = obj;
    }
  }
  return txtarea;
}