
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;
}


function myeval(something)
{
	return something;
}

var is_shown = false;
var timer_id = null;

function zoom(t, e) {
	if (document.all) e = event;

	var src = t.src;
	var title = t.title;
	var newsrc = src.replace("t.", "i.");

	var outer_tooltip = document.getElementById('bubble_tooltip');
	var inner_tooltip = document.getElementById('bubble_tooltip_content');
	inner_tooltip.src = newsrc;
	inner_tooltip.title = title;
	var scrollTop = Math.max(document.body.scrollTop, document.documentElement.scrollTop);
	var scrollRight = screen.width - 20;
	outer_tooltip.style.cssText = "position:absolute; top:0px; left:0px; display:block; ";

	var w = inner_tooltip.width;
	var h = inner_tooltip.height;

	var leftPos = e.clientX - t.offsetWidth;
	if (leftPos < 0) leftPos = 0;

	var rightPos = leftPos + w;
	if (rightPos > scrollRight) { rightPos = scrollRight; leftPos = rightPos - w; }

	var right = scrollRight - w + e.clientX + t.offsetLeft;
	if (right > scrollRight) right = scrollRight;

	//var top = scrollTop + e.clientY - h + t.offsetHeight;
	var top1 = scrollTop + e.clientY - h;   //+ t.offsetHeight;
	var top = getRealPosition(t) - h;
	if (top < scrollTop) top = scrollTop;

	//outer_tooltip.style.top = top + 'px';
	//outer_tooltip.style.left = leftPos + 'px';
	outer_tooltip.style.cssText = "position:absolute; top:" + top + "px; left:" + leftPos + "px; width:auto; display:block;";

	if (timer_id != null) clearTimeout(timer_id);
	timer_id = setTimeout('unzoom()', 10000);
	is_shown = true;

}

function unzoom() {
	var outer_tooltip = document.getElementById('bubble_tooltip');
	var inner_tooltip = document.getElementById('bubble_tooltip_content');
	outer_tooltip.style.cssText = "position:absolute; top:0px; left:0px; display:none;";
	inner_tooltip.src = "";

	is_shown = false;
	if (timer_id != null) {
		clearTimeout(timer_id);
		timer_id = null;
	} 
}

function getRealPosition(t) {
	var pos = t.offsetTop;
	var tmp = t.offsetParent;
	while (tmp != null) {
		pos += tmp.offsetTop;
		tmp = tmp.offsetParent;
	}
	return pos;
}
