function insertAtCursor (textarea, before, after)
{
	if (! after)
	{
		after = before;
		before = '';
	}
	
	if (document.selection) // IE
	{
		textarea.focus();
		var sel = document.selection.createRange();
		sel.text = before + sel.text + after;
		
		var offset = ((before.length == 0) ? 0 : after.length);
		
		sel.moveStart('character', sel.text.length - offset);
		sel.moveEnd('character', -offset);
		sel.select();
	}
	else if (textarea.selectionStart || textarea.selectionStart == '0')
	{
		var startPos = textarea.selectionStart;
		var endPos = textarea.selectionEnd;
		
		var beforeText = textarea.value.substring(0, startPos);
		var selectedText = textarea.value.substring(startPos, endPos);
		var afterText = textarea.value.substring(endPos);
		
		textarea.value = beforeText + before + selectedText + after + afterText;
		
		endPos += ((before.length == 0) ? after.length : before.length);
		
		textarea.focus();
		textarea.selectionStart = endPos;
		textarea.selectionEnd = endPos;
	}
	else
	{
		textarea.value += before + after;
	}
}

function insertTag (tag, arg)
{
	var textarea = document.getElementById('textarea');
	
	if (arg)
	{
		var before = '[' + tag + '=' + arg + ']';
	}
	else
	{
		var before = '[' + tag + ']';
	}
	
	var after = '[/' + tag + ']';
	
	insertAtCursor(textarea, before, after);
}

function insertColor (select)
{
	var color = select.options[select.selectedIndex].value;
	
	select.selectedIndex = 0;

	insertTag('color', color);
}

function insertLink ()
{
	var url = prompt('URL:', '');
	
	if (url)
	{
		var internalLink = url.match(/^https?:\/\/([^\/]+\.)?stpixels\.com\//);
		
		insertTag((internalLink ? 'Link' : 'link'), url);
	}
}

function insertQuote ()
{
	var author = prompt('Author of quote:', '');
	
	if (author)
	{
		insertTag('quote', 'Posted by ' + author);
	}
	else if (author == '')
	{
		insertTag('quote');
	}
}

function insertTable ()
{
	var textarea = document.getElementById('textarea');
	
	var rows = parseInt(prompt('How many rows?', ''));
	var cols = parseInt(prompt('How many columns?', ''));
	
	if ((rows > 0) && (cols > 0))
	{
		var code = "\n[table]\n";
		
		for (var i = 0; i < rows; i++)
		{
			code += "  [row]\n";
			
			for (var j = 0; j < cols; j++)
			{
				code += "    [cell][/cell]\n";
			}
			
			code += "  [/row]\n";
		}
		
		code += "[/table]\n";
		
		insertAtCursor(textarea, code);
	}
}

function insertImage (select)
{
	var textarea = document.getElementById('textarea');
	
	var size = select.options[select.selectedIndex].value;
	
	select.selectedIndex = 0;
	
	var image = prompt('Image address:', '');
	
	if (! image) { return; }
	
	var selText = '';
	
	if (document.selection) // IE
	{
		selText = document.selection.createRange().text;
	}
	else if (textarea.selectionStart || textarea.selectionStart == '0')
	{
		var startPos = textarea.selectionStart;
		var endPos = textarea.selectionEnd;
		
		selText = textarea.value.substring(startPos, endPos);
	}
	
	var alt = prompt('Description:', selText);
	
	var floating = prompt("Floating?\n(Right-aligned; text wraps around)\nY/N", 'Y');
	
	if (! floating)
	{
		floating = true;
	}
	else
	{
		floating = (! floating.match(/^n/i));
	}
	
	var tag = (floating ? 'img' : 'Img');
	
	var code = '[' + tag + (alt ? '=' + alt : '') + ']' + size + image + '[/' + tag + ']';
	
	insertAtCursor(textarea, code);
}

function insertResource ()
{
	var textarea = document.getElementById('textarea');
	
	var resource = prompt('Resource name:', '');
	
	if (! resource) { return; }
	
	var type = prompt('Resource type:', '');
	
	if (! type) { return; }
	
	var file = resource + '.' + type;
	
	var selText = '';
	
	if (document.selection) // IE
	{
		selText = document.selection.createRange().text;
	}
	else if (textarea.selectionStart || textarea.selectionStart == '0')
	{
		var startPos = textarea.selectionStart;
		var endPos = textarea.selectionEnd;
		
		selText = textarea.value.substring(startPos, endPos);
	}
	
	var alt = prompt('Description:', selText);
	
	var code = '[resource' + (alt ? '=' + alt : '') + ']' + file + '[/resource]';
	
	insertAtCursor(textarea, code);
}

function insertSmiley (select)
{
	var textarea = document.getElementById('textarea');
	
	var smiley = select.options[select.selectedIndex].value;
	
	select.selectedIndex = 0;
	
	insertAtCursor(textarea, ':' + smiley + ':');
}
