function insertFace(element, face) {
	var textarea = $(element);
	
	if(!textarea.setSelectionRange) {
		var selected = document.selection.createRange().text;
		if(selected.length <= 0) {
			textarea.value += face;
		} else document.selection.createRange().text = face;
	} else {
		var pretext = textarea.value.substring(0, textarea.selectionStart);
		var posttext = textarea.value.substring(textarea.selectionEnd, textarea.value.length);
		textarea.value = pretext+face+posttext;
	}
	textarea.focus();
}

function code(element, type) {
	var textarea = $(element);
	
	// the text before the selection
	var pretext = textarea.value.substring(0, textarea.selectionStart);
	// the selected text
	var codetext = textarea.value.substring(textarea.selectionStart, textarea.selectionEnd);
	// the text after the selection
	var posttext = textarea.value.substring(textarea.selectionEnd, textarea.value.length);
	// update the text field
	textarea.value = pretext+'[code]'+codetext+'[/code]'+posttext;
	
	textarea.focus();
}

function insertCodeAttr(element, tag, desc1, desc2, optAttr, endtag) {
	var textarea = $(element);
	
	var attribute = prompt(desc1, "");
	if(attribute == null) attribute = "";
	
	if(optAttr && attribute == "") var open = '['+tag+']';
	else  var open = '['+tag+'='+attribute+']';
	var close = '[/'+((endtag == undefined) ? tag : endtag)+']';
	
	if(!textarea.setSelectionRange) {
		var selected = document.selection.createRange().text;
		if(selected.length <= 0) {
			var codetext = prompt(desc2, "");
			if(codetext == null) {
				textarea.focus();
				return false;
			}
			textarea.value += open+codetext+close;
		} else document.selection.createRange().text = open+selected+close;
	} else {
		var pretext = textarea.value.substring(0, textarea.selectionStart);
		var codetext = open+textarea.value.substring(textarea.selectionStart, textarea.selectionEnd)+close;
		var posttext = textarea.value.substring(textarea.selectionEnd, textarea.value.length);
		if(codetext == open+close) {
			codetext = prompt(desc2, "");
			if(codetext == null) {
				textarea.focus();
				return false;
			}
			codetext = open+codetext+close;
		}
		textarea.value = pretext+codetext+posttext;
	}
	textarea.focus();
}

function insertCode(element, tag, desc, endtag) {
	var textarea = $(element);
	
	var open = '['+tag+']';
	var close = '[/'+((endtag == undefined) ? tag : endtag)+']';
	
	if(!textarea.setSelectionRange) {
		var selected = document.selection.createRange().text;
		if(selected.length <= 0) {
			var codetext = prompt(desc, "");
			if(codetext == null) {
				textarea.focus();
				return false;
			}
			textarea.value += open+codetext+close;
		} else document.selection.createRange().text = open+selected+close;
	} else {
		var pretext = textarea.value.substring(0, textarea.selectionStart);
		var codetext = open+textarea.value.substring(textarea.selectionStart, textarea.selectionEnd)+close;
		var posttext = textarea.value.substring(textarea.selectionEnd, textarea.value.length);
		if(codetext == open+close) {
			codetext = prompt(desc, "");
			if(codetext == null) {
				textarea.focus();
				return false;
			}
			codetext = open+codetext+close;
		}
		textarea.value = pretext+codetext+posttext;
	}
	textarea.focus();
}
