// Surrounds the selected text with text1 and text2.
// Used for BBCode
function surroundText(text1, text2, textarea)
{
	// Can a text range be created?
	if (typeof(textarea.caretPos) != "undefined" && textarea.createTextRange)
	{
		var caretPos = textarea.caretPos;
		temp_length = caretPos.text.length;

		caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? text1 + caretPos.text + text2 + ' ' : text1 + caretPos.text + text2;

		if (temp_length == 0)
		{
			caretPos.moveStart("character", -text2.length);
			caretPos.moveEnd("character", -text2.length);
			caretPos.select();
		}
		else
		{
			textarea.focus(caretPos);
		}
	}
	// Mozilla text range wrap.
	else if (typeof(textarea.selectionStart) != "undefined")
	{
		var begin = textarea.value.substr(0, textarea.selectionStart);
		var selection = textarea.value.substr(textarea.selectionStart, textarea.selectionEnd - textarea.selectionStart);
		var end = textarea.value.substr(textarea.selectionEnd);
		var newCursorPos = textarea.selectionStart;
		var scrollPos = textarea.scrollTop;

		textarea.value = begin + text1 + selection + text2 + end;

		if (textarea.setSelectionRange)
		{
			if (selection.length == 0)
				textarea.setSelectionRange(newCursorPos + text1.length, newCursorPos + text1.length);
			else
				textarea.setSelectionRange(newCursorPos, newCursorPos + text1.length + selection.length + text2.length);
			textarea.focus();
		}
		textarea.scrollTop = scrollPos;
	}
	// Just put them on the end, then.
	else
	{
		textarea.value += text1 + text2;
		textarea.focus(textarea.value.length - 1);
	}
}

function storeCaret( evt )
{
	var event		= events.EventListener.getEvent(evt);
	var objTextArea	= event.element;
	
	
	if (typeof(objTextArea.createTextRange) != "undefined")
	{
		objTextArea.caretPos = document.selection.createRange().duplicate();
	}
}

var window_onLoad = function( evt )
{
	// Attach events to all the triggers
	var objTriggers		= tools.DOM.getElementsByClassName( "bbcode_button" );
	for( var i=0; i < objTriggers.length; i++)
	{
		events.EventListener.add( objTriggers[i], "click", bbcode_onClick );

		var aryRel		= objTriggers[i].getAttribute( "rel" ).split( " " );
		var strRel		= aryRel[ 0 ];
		var objTextarea	= tools.DOM.getElementById( aryRel[ 1 ] );

		events.EventListener.add( objTextarea, "select", storeCaret);
	}
};

var bbcode_onClick = function( evt )
{
	var event		= events.EventListener.getEvent(evt);
	var element		= event.element;

	var aryRel		= element.getAttribute( "rel" ).split( " " );
	var strRel		= aryRel[ 0 ];
	var objTextarea	= tools.DOM.getElementById( aryRel[ 1 ] );
	
	switch( strRel )
	{
		case "b":
		{
			surroundText( "[b]", "[/b]", objTextarea );
			break;
		}
		case "i":
		{
			surroundText( "[i]", "[/i]", objTextarea );
			break;
		}
		case "u":
		{
			surroundText( "[u]", "[/u]", objTextarea );
			break;
		}
		case "url":
		{
			surroundText( "[url=http://]", "[/url]", objTextarea );
			break;
		}
		case "quote":
		{
			surroundText( "[quote]", "[/quote]", objTextarea );
			break;
		}
		case "sup":
		{
			surroundText( "[sup]", "[/sup]", objTextarea );
			break;
		}
		case "sub":
		{
			surroundText( "[sub]", "[/sub]", objTextarea );
			break;
		}
		case "del":
		{
			surroundText( "[del]", "[/del]", objTextarea );
			break;
		}
		case "list":
		{
			surroundText( "[list]\n\t[li]", "[/li]\n\t[li][/li]\n[/list]", objTextarea );
			break;
		}
		case "hr":
		{
			surroundText( "[hr]", "", objTextarea );
			break;
		}
		case "h1":
		{
			surroundText( "[h1]", "[/h1]", objTextarea );
			break;
		}
		case "h2":
		{
			surroundText( "[h2]", "[/h2]", objTextarea );
			break;
		}
		case "h3":
		{
			surroundText( "[h3]", "[/h3]", objTextarea );
			break;
		}
		case "h4":
		{
			surroundText( "[h4]", "[/h4]", objTextarea );
			break;
		}
		case "h5":
		{
			surroundText( "[h5]", "[/h5]", objTextarea );
			break;
		}
		case "h6":
		{
			surroundText( "[h6]", "[/h6]", objTextarea );
			break;
		}
		case "left":
		{
			surroundText( "[left]", "[/left]", objTextarea );
			break;
		}
		case "center":
		{
			surroundText( "[center]", "[/center]", objTextarea );
			break;
		}
		case "right":
		{
			surroundText( "[right]", "[/right]", objTextarea );
			break;
		}
		case "justify":
		{
			surroundText( "[justify]", "[/justify]", objTextarea );
			break;
		}
	}
};

events.EventListener.add( window, "load", window_onLoad );
