function insertWikiMarkup(element, openingMarkup, closingMarkup, innerTextOnNoSelection) 
{
	element.focus();
	if (element.setSelectionRange) 
	{
		var selectionStart = element.selectionStart;
		var selectionEnd = element.selectionEnd;
		var selectedText = element.value.substring(selectionStart, selectionEnd);
		
		if (selectedText=='')
		{
			selectedText = innerTextOnNoSelection;
		}
		
		element.value = element.value.substring(0, selectionStart) + openingMarkup + selectedText + closingMarkup + element.value.substring(selectionEnd, element.value.length);
		element.setSelectionRange((selectionStart+openingMarkup.length),(selectionStart+openingMarkup.length+selectedText.length));
	}
	else if (document.selection && document.selection.createRange) 
	{
		var range = document.selection.createRange();
		var stored_range = range.duplicate();
		stored_range.moveToElementText( element );
		stored_range.setEndPoint( 'EndToStart', range );
		var selectionStart = stored_range.text.length;
		var selectedText = range.text;
		
		if (selectedText=='') 
		{
			selectedText = innerTextOnNoSelection;
		}
		
		range.text = openingMarkup + selectedText + closingMarkup;
		range = element.createTextRange();
		range.collapse(true);
		range.moveStart('character',(selectionStart+openingMarkup.length));
		range.moveEnd('character',(selectedText.length));
		range.select();
	}
}

function insertBoldMarkup(element)
{
	insertWikiMarkup(element, "'''", "'''", "Bold Text");
}

function insertItalicizedMarkup(element)
{
	insertWikiMarkup(element, "''", "''", "Italicized Text");
}

function insertSubscriptMarkup(element)
{
	insertWikiMarkup(element, "[sub]", "[/sub]", "subscript");
}

function insertSuperscriptMarkup(element)
{
	insertWikiMarkup(element, "[sup]", "[/sup]", "superscript");
}

function insertHeader2Markup(element)
{
	insertWikiMarkup(element, "==", "==", "Level 2 Header");
}

function insertHeader3Markup(element)
{
	insertWikiMarkup(element, "===", "===", "Level 3 Header");
}

function insertHeader4Markup(element)
{
	insertWikiMarkup(element, "====", "====", "Level 4 Header");
}

function insertHorizontalLineMarkup(element)
{
	insertWikiMarkup(element, "", "----\n", "");
}

function insertTableMarkup(element)
{
	insertWikiMarkup(element, "\n{|\n|", "\n|}\n", "-\n! header 1\n! header 2\n! header 3\n|-\n| row 1, cell 1\n| row 1, cell 2\n| row 1, cell 3\n|-\n| row 2, cell 1\n| row 2, cell 2\n| row 2, cell 3");
}

function insertNoWikiMarkup(element)
{
    insertWikiMarkup(element, "[nowiki]", "[/nowiki]", "Insert non-formatted text here");
}

function insertHyperlinkMarkup(element)
{
	insertWikiMarkup(element, "[", "]", "http://www.example.com Link Text");
}

function insertEmbeddedImageWikiLinkMarkup(element, contentType)
{
    insertWikiMarkup(element, "[Embed: " + (contentType == null || contentType == "" ? "Content Type" : contentType) + "]{", "}", "Content Name| Caption");
}

function insertThumbnailImageWikiLinkMarkup(element, contentType)
{
    insertWikiMarkup(element, "[Thumbnail: " + (contentType == null || contentType == "" ? "Content Type" : contentType) + "]{", "}", "Content Name| Caption");
}

function insertWikiLinkMarkup(element, contentType)
{
    insertWikiMarkup(element, "[" + (contentType == null || contentType == "" ? "Content Type" : contentType) + "]{", "}", "Content Name| Link Text");
}

function showWikiPreview(text)
{
	var previewForm = document.createElement("form");
	previewForm.method = "post";
	previewForm.action = "wikiPreview.php";
	previewForm.target = "_blank";
	
	var textInput = document.createElement("input");
	textInput.setAttribute("name", "text");
	textInput.setAttribute("value", text);
	previewForm.appendChild(textInput);
	
	document.body.appendChild(previewForm);
	previewForm.submit();
	document.body.removeChild(previewForm);
}
