function Selection(textareaElement) {
    this.element = textareaElement;
}

Selection.prototype.create = function() {
    if (document.selection != null && this.element.selectionStart == null) {
        return this._ieGetSelection();
    } else {
        return this._mozillaGetSelection();
    }
}

Selection.prototype._mozillaGetSelection = function() {
    return { 
        start: this.element.selectionStart, 
        end: this.element.selectionEnd 
    };
}

Selection.prototype._ieGetSelection = function() {
    this.element.focus();

    var range = document.selection.createRange();
    var bookmark = range.getBookmark();

    var contents = this.element.value;
    var originalContents = contents;
    var marker = this._createSelectionMarker();
    while(contents.indexOf(marker) != -1) {
        marker = this._createSelectionMarker();
    }

    var parent = range.parentElement();
    if (parent == null || parent.type != "textarea") {
        return { start: 0, end: 0 };
    }
    range.text = marker + range.text + marker;
    contents = this.element.value;

    var result = {};
    result.start = contents.indexOf(marker);
    contents = contents.replace(marker, "");
    result.end = contents.indexOf(marker);

    this.element.value = originalContents;
    range.moveToBookmark(bookmark);
    range.select();

    return result;
}

Selection.prototype._createSelectionMarker = function() {
    return "##SELECTION_MARKER_" + Math.random() + "##";
}

function rewrite_post(tag1,tag2)
{
        var selection = new Selection(document.getElementById("body"));
        var s = selection.create();
        str = document.getElementById('body').value;
        part1 = str.substring(0,s.start);
        part2 = str.substring(s.start,s.end);
        part3 = str.substring(s.end,str.length);
        document.getElementById('body').value =  part1+tag1+part2+tag2+part3;
        document.getElementById('body').focus();
}

function make_bold()
{
	rewrite_post('[b]','[/b]');
}

function make_inherit()
{
	rewrite_post('[i]','[/i]');
}

function make_underline()
{
	rewrite_post('[u]','[/u]');
}

function make_huge()
{
	rewrite_post('[h1]','[/h1]');
}

function make_large()
{
	rewrite_post('[h2]','[/h2]');
}

function make_center()
{
	rewrite_post('[c]','[/c]');
}

function make_color(color)
{
	rewrite_post('['+color+']','[/'+color+']');
}

function make_img()
{
	rewrite_post('[img]','[/img]');
}

function make_url()
{
	rewrite_post('[url]','[/url]');
}

function make_quote()
{
	rewrite_post('[quote]','[/quote]');
}

function make_code()
{
	rewrite_post('[code]','[/code]');
}

function make_smile(smile)
{
	rewrite_post('{'+smile+'}','');
}
