function ft_count_chars($text)
{
	$text = $text.strip();

	// filter bold marks
	$text = $text.replace(/\[b\]/gi , '');
	$text = $text.replace(/\[\/b\]/gi , '');

	// filter italic marks
	$text = $text.replace(/\[i\]/gi , '');
	$text = $text.replace(/\[\/i\]/gi , '');

	// filter strikethrough marks
	$text = $text.replace(/\[s\]/gi , '');
	$text = $text.replace(/\[\/s\]/gi , '');

	// filter underline marks
	$text = $text.replace(/\[u\]/gi , '');
	$text = $text.replace(/\[\/u\]/gi , '');

	return $text.length;
}


function ft_format_link($target_id , $type)
{
	if (!$type)
	{
		var $type = 'url';
	}

	if ($type == 'email')
	{
		var $link		= p(lang_text('provide_email'));
		var $begin_tag	= '[email=' + $link + ']';
		var $end_tag	= '[/email]';
	}
	else if($type == 'url')
	{
		var $link		= p(lang_text('provide_url'));
		var $begin_tag	= '[url=' + $link + ']';
		var $end_tag	= '[/url]';
	}

	ft_format_text($target_id , $begin_tag , $end_tag);
}


function ft_format_text($target_id , $begin_tag , $end_tag)
{
	var $target	= $($target_id);

	if ($is_opera || $is_nav || $my_agent <= 0)
	{
		var $start_pos	= $target.selectionStart;
		var $end_pos	= $target.selectionEnd;
		var $range		= $end_pos - $start_pos;
		var $end_char	= $target.value.charAt($end_pos - 1);

		if ($range != 0 && $target.value.substring($start_pos , $end_pos).strip() != '')
		{
			$target.value = $target.value.substring(0 , $start_pos)
				+ $begin_tag
				+ $target.value.substring($start_pos , $end_pos).strip()
				+ $end_tag
				+ (($end_char == ' ') ? ' ' : '')
				+ $target.value.substring($end_pos , $target.value.length);

			$target.value = $target.value.strip();
			$target.focus();
		}
	}
	else
	{
		ft_insert_code($target , $begin_tag , $end_tag);

		$target.focus();
	}
}


function ft_get_selection()
{
	if (window.getSelection)
	{
		var $item = window.getSelection();
	}
	else if (document.getSelection)
	{
		var $item = document.getSelection();
	}
	else if (document.selection)
	{
		var $item = document.selection.createRange().text;
	}
	else
	{
		var $item = '';
	}

	return $item;
}


function ft_insert_code($target , $begin_tag, $end_tag)
{
	var $arr_text = ft_manage_cursor($target);

	ft_move_caret($target);

	if ($arr_text[1].strip().length != 0)
	{
		var $end_char	= $arr_text[1].charAt($arr_text[1].length - 1);

		$target.value = $arr_text[0]
			+ $begin_tag
			+ $arr_text[1].strip()
			+ $end_tag
			+ (($end_char == ' ') ? ' ' : '')
			+ $arr_text[2];
	}
}


function ft_manage_cursor($target)
{
	$arr_text = new Array();

	$target.focus();

	$arr_text[1] = ft_get_selection();

	if (!$is_opera || $is_nav || $my_agent <= 0)
	{
		var $selection	= document.selection;
		var $range		= $selection.createRange();

		$range.colapse;

		var $selection_before = $range.duplicate();
		var $selection_after  = $range.duplicate();

		$range.moveToElementText($target);
		$selection_before.setEndPoint('StartToStart' , $range);

		var $text_start			= $selection_before.text;
		var $text_start_length	= $text_start.length;

		$selection_after.setEndPoint('EndToEnd' , $range);

		var $text_end			= $selection_after.text;
		var $text_end_length	= $text_end.length;
		var $text_length		= $arr_text[1].length;

		if ($text_length > 0)
		{
			$arr_text[0] = $text_start.substring(0 , $text_start_length - $text_length);
			$arr_text[2] = $text_end.substring($text_length , $text_end_length);
		}
		else
		{
			$arr_text[0] = $text_start;
			$arr_text[2] = $text_end;
		}

		$target.focus();
	}

	return $arr_text;
}


function ft_move_caret($target)
{
	if ($target.createTextRange)
	{
		var $range = $target.createTextRange();

		$range.collapse();
		$range.select();
	}
}