
function selStartEnd(area) {
    var range = document.selection.createRange();
    var range_all = document.body.createTextRange();
    range_all.moveToElementText(area);
    for (sel_start = 0; range_all.compareEndPoints('StartToStart', range) < 0; sel_start ++)
    {
        range_all.moveStart('character', 1);
    }
    for (sel_end = area.value.length; range_all.compareEndPoints('EndToEnd', range) > 0; sel_end --)
    {
        range_all.moveEnd('character', -1);
    }
	for (n = 0; n < area.value.length; n++) {
		if (area.value.charAt(n) == "\r") {
			sel_end--;
		}
	}

    var arr = new Array();
    arr[0] = sel_start;
    arr[1] = sel_end;
    return arr;
}

function InsertText(areaname, insText)
{
	area = document.getElementById(areaname);
	var text_range = area.createTextRange();
	if (text_range)
	{
		area.focus(area.caretPos);
		area.caretPos = document.selection.createRange().duplicate();
		var arr = selStartEnd(area);
		var sel_start = arr[0];
		var sel_end = arr[1];
		var sel_start_mapped = sel_start; // mapIndex(area.value, markup.value, sel_start, 0);
		var sel_end_mapped = sel_end; //mapIndex(area.value, markup.value, sel_end, 1);
		if (sel_end_mapped < sel_start_mapped) sel_end_mapped = sel_start_mapped;
     
		var left_area = Substring(area.value, 0, sel_start);
		var right_area = sel_end == area.value.length ?
			"" : Substring(area.value, sel_end);
        area.value = left_area + insText + right_area;

        text_range = area.createTextRange();
        text_range.move('character', sel_start);
        text_range.select();
	}
	else 
	{
		area.value += insText;
	}
}

function InsertText2(areaname, insText1, insText2)
{
	area = document.getElementById(areaname);
	var text_range = area.createTextRange();
	if (text_range)
	{
		area.focus(area.caretPos);
		area.caretPos = document.selection.createRange().duplicate();
		var arr = selStartEnd(area);
		var sel_start = arr[0];
		var sel_end = arr[1];
     
		var left_area = Substring(area.value, 0, sel_start);
		var middle_area = Substring(area.value, sel_start, sel_end - sel_start);
		var right_area = sel_end == area.value.length ?
			"" : Substring(area.value, sel_end);
//		alert("sel_start=" + sel_start + " sel_end=" + sel_end + "\n" +
//			"'" + left_area + "'\n'" + middle_area + "'\n'" + right_area + "'");
        area.value = left_area + insText1 + middle_area + insText2 + right_area;

        text_range = area.createTextRange();
        text_range.move('character', sel_start + insText1.length);
        text_range.select();
	}
	else 
	{
		area.value += insText;
	}
}

function Substring(text, start, size) {
	var sub = "";
	var dbg = "";

	if (start >= text.length) start = text.length - 1;
	if (size == undefined) size = text.length - start;

	var index = 0;
	for (n = 0; n < text.length; n++) 
	{
		var chr = text.charAt(n);
		if (chr == "\r") 
			continue;
		if (index >= start && index < start + size) {
			sub += chr;
			dbg += "'" + chr + "', ";
		}
		index++;
	}
	return sub;
}

function TagText(areaname, tag, closeTag)
{
    var theForm = document.forms["forum_add_form"];
    var area = theForm[areaname];
    
	//area = document.getElementById(areaname);
	var text_range = area.createTextRange();
	if (text_range)
	{
		area.focus(area.caretPos);
		area.caretPos = document.selection.createRange().duplicate();
		if (area.caretPos.text.length > 0)
		{
		    var text = area.caretPos.text; 
			//area.caretPos.text = tag + area.caretPos.text + closeTag;
		    var arr = selStartEnd(area);
		    var sel_start = arr[0];
		    var sel_end = arr[1];
		    var sel_start_mapped = sel_start; //mapIndex(area.value, markup.value, sel_start, 0);
		    var sel_end_mapped = sel_end; //mapIndex(area.value, markup.value, sel_end, 1);
			if (sel_end_mapped < sel_start_mapped) sel_end_mapped = sel_start_mapped;
//		    alert(
//		        "Start: " + sel_start + 
//		        ", End: " + sel_end + 
//		        ", Start(mapped): " + sel_start_mapped + 
//		        ", End(mapped): " + sel_end_mapped +
//		        ", Area.Length: " + area.value.length +
//		        ", Markup.Length: " + markup.value.length
//		    );
			var left = Substring(area.value, 0, sel_start_mapped);
			var right = sel_end_mapped == area.value.length ?
				"" : Substring(area.value, sel_end_mapped);
//			alert("[" + left + "]\n[" + right + "]");
            area.value = left + tag + text + closeTag + right;		
			return;
		}
	}
	//alert("You need to select fragment in text area!");
	area.value += tag + closeTag;
}

function TagText2(areaname, tag, closeTag)
{
	var area = document.getElementById(areaname);

	var arr = selStartEnd(area);
	var sel_start = arr[0];
	var sel_end = arr[1];
	alert(sel_start + ", " + sel_end);
	
	var left = Substring(area.value, 0, sel_start );
	var right = Substring(area.value, sel_end );
	var text = Substring(area.value, sel_start, sel_end-sel_start )
    area.value = left + tag + text + closeTag + right;
}

