function replace(string,text,by) {
    
    var strLength = string.length, txtLength = text.length;
    if ((strLength == 0) || (txtLength == 0)) return string;

    var i = string.indexOf(text);
    if ((!i) && (text != string.substring(0,txtLength))) return string;
    if (i == -1) return string;

    var newstr = string.substring(0,i) + by;

    if (i+txtLength < strLength)
        newstr += replace(string.substring(i+txtLength,strLength),text,by);

    return newstr;
}

function count_strings(string, word) {
	var substrings = string.split(word);
	return substrings.length - 1;
}

function preview(textarea_obj,css) {
	var txt = get_textarea(textarea_obj);
	var pop_win = window.open("", "win", "width=600,height=300");
	pop_win.document.open("text/html", "replace");
	pop_win.document.write("<HTML>");
	pop_win.document.write("<HEAD>");
	pop_win.document.write("<title>Preview</title>");
	pop_win.document.write("<link rel='stylesheet' type='text/css' href='"+css+"'>");
	pop_win.document.write("</HEAD>");
	pop_win.document.write("<BODY>");
	pop_win.document.write("<TABLE><TR><TD style='padding:10px;'>");
	//pop_win.document.write(replace(txt,"\n","<br>"));
	pop_win.document.write(txt);
	pop_win.document.write("</TD></TR></TABLE>");	
	pop_win.document.write("</BODY>");
	pop_win.document.write("</HTML>");
	pop_win.focus();
}

function get_selection() {
	if (document.getSelection) {
		var txt = document.getSelection();
	} else if (document.selection && document.selection.createRange) {
		var range = document.selection.createRange();
		var txt = range.text;
	} else {
		var txt = "Sorry, this is not supported with your browser.";
	}
	return(txt);
}

function get_textarea(textarea_obj) {
	return(textarea_obj.value);
}

function set_textarea(textarea_obj,txt) {
	textarea_obj.value = txt;
}

function append_textarea(textarea_obj,txt) {
	textarea_obj.value += txt;
}


function bold(textarea_obj) {
	var txt = get_selection();
	var existing_txt = get_textarea(textarea_obj);
	var string_count = count_strings(existing_txt,txt);
	
	if (txt == "" || string_count > 1) {
		append_textarea(textarea_obj,"<b></b>");
	} else if (txt != null) {
		//var new_txt = existing_txt.replace(txt,"<b>"+txt+"</b>");
		var new_txt = replace(existing_txt,txt,"<b>"+txt+"</b>");
		set_textarea(textarea_obj,new_txt);
	}
}

function underline(textarea_obj) {
	var txt = get_selection();
	var existing_txt = get_textarea(textarea_obj);
	var string_count = count_strings(existing_txt,txt);
	
	if (txt == "" || string_count > 1) {
		append_textarea(textarea_obj,"<u></u>");
	} else if (txt != null) {
		var new_txt = replace(existing_txt,txt,"<u>"+txt+"</u>");
		set_textarea(textarea_obj,new_txt);
	}
}

function italicize(textarea_obj) {
	var txt = get_selection();
	var existing_txt = get_textarea(textarea_obj);
	var string_count = count_strings(existing_txt,txt);
	
	if (txt == "" || string_count > 1) {
		append_textarea(textarea_obj,"<i></i>");
	} else if (txt != null) {
		var new_txt = replace(existing_txt,txt,"<i>"+txt+"</i>");
		set_textarea(textarea_obj,new_txt);
	}
}

function center(textarea_obj) {
	var txt = get_selection();
	var existing_txt = get_textarea(textarea_obj);
	var string_count = count_strings(existing_txt,txt);
	
	if (txt == "" || string_count > 1) {
		append_textarea(textarea_obj,"<div align='center'></div>");
	} else if (txt != null) {
		var new_txt = existing_txt.replace(txt,"<div align='center'>"+txt+"</div>");
		set_textarea(textarea_obj,new_txt);
	}
}

function right(textarea_obj) {
	var txt = get_selection();
	var existing_txt = get_textarea(textarea_obj);
	var string_count = count_strings(existing_txt,txt);
	
	if (txt == "" || string_count > 1) {
		append_textarea(textarea_obj,"<div align='right'></div>");
	} else if (txt != null) {
		var new_txt = existing_txt.replace(txt,"<div align='right'>"+txt+"</div>");
		set_textarea(textarea_obj,new_txt);
	}
}

function hyperlink(textarea_obj) {
	var txt = get_selection();
	var existing_txt = get_textarea(textarea_obj);
	var string_count = count_strings(existing_txt,txt);
	
	if (txt == "" || string_count > 1) {
		append_textarea(textarea_obj,"<a href='http://'></a>");
	} else if (txt != null) {
		var new_txt = existing_txt.replace(txt,"<a href='"+txt+"'>"+txt+"</a>");
		set_textarea(textarea_obj,new_txt);
	}
}

function mailto(textarea_obj) {
	var txt = get_selection();
	var existing_txt = get_textarea(textarea_obj);
	var string_count = count_strings(existing_txt,txt);
	
	if (txt == "" || string_count > 1) {
		append_textarea(textarea_obj,"<a href='mailto:'></a>");
	} else if (txt != null) {
		var new_txt = existing_txt.replace(txt,"<a href='mailto:"+txt+"'>"+txt+"</a>");
		set_textarea(textarea_obj,new_txt);
	}
}

function paragraph(textarea_obj) {
	var txt = get_selection();
	var existing_txt = get_textarea(textarea_obj);
	var string_count = count_strings(existing_txt,txt);
	
	if (txt == "" || string_count > 1) {
		append_textarea(textarea_obj,"<p></p>");
	} else if (txt != null) {
		var new_txt = existing_txt.replace(txt,"<p>"+txt+"</p>");
		set_textarea(textarea_obj,new_txt);
	}
}

function linebreak(textarea_obj) {
	var txt = get_selection();
	var existing_txt = get_textarea(textarea_obj);
	var string_count = count_strings(existing_txt,txt);
	
	if (txt == "" || string_count > 1) {
		//append_textarea(textarea_obj,"<br>");
		append_textarea(textarea_obj,"\n");
	} else if (txt != null) {
		//var new_txt = existing_txt.replace(txt,"<br>"+txt+"");
		var new_txt = existing_txt.replace(txt,"\n"+txt+"");
		set_textarea(textarea_obj,new_txt);
	}
	textarea_obj.focus( );
	textarea_obj.select( );
}

function code(textarea_obj) {
	var txt = get_selection();
	var existing_txt = get_textarea(textarea_obj);
	var string_count = count_strings(existing_txt,txt);
	
	if (txt == "" || string_count > 1) {
		append_textarea(textarea_obj,"<code></code>");
	} else if (txt != null) {
		var new_txt = existing_txt.replace(txt,"<code>"+txt+"</code>");
		set_textarea(textarea_obj,new_txt);
	}
}

function list(textarea_obj) {
	var txt = get_selection();
	var existing_txt = get_textarea(textarea_obj);
	var string_count = count_strings(existing_txt,txt);
	
	if (txt == "" || string_count > 1) {
		append_textarea(textarea_obj,"<ul><li>item1</ul>");
	} else if (txt != null) {
		var new_txt = existing_txt.replace(txt,"<ul><li>"+txt+"</ul>");
		set_textarea(textarea_obj,new_txt);
	}
}

function table(textarea_obj) {
	var txt = get_selection();
	var existing_txt = get_textarea(textarea_obj);
	var string_count = count_strings(existing_txt,txt);
	
	if (txt == "" || string_count > 1) {
		append_textarea(textarea_obj,"<table><tr><td></td></tr></table>");
	} else if (txt != null) {
		var new_txt = existing_txt.replace(txt,"<table><tr><td>"+txt+"</td></tr></table>");
		set_textarea(textarea_obj,new_txt);
	}
}

function image(textarea_obj) {
	var txt = get_selection();
	var existing_txt = get_textarea(textarea_obj);
	var string_count = count_strings(existing_txt,txt);
	
	if (txt == "" || string_count > 1) {
		append_textarea(textarea_obj,"<img src=''>");
	} else if (txt != null) {
		var new_txt = existing_txt.replace(txt,"<img src='"+txt+"'>"+txt+"");
		set_textarea(textarea_obj,new_txt);
	}
}

function quote(textarea_obj) {
	var txt = get_selection();
	var existing_txt = get_textarea(textarea_obj);
	var string_count = count_strings(existing_txt,txt);
	
	if (txt == "" || string_count > 1) {
		append_textarea(textarea_obj,"&quot;&quot;");
	} else if (txt != null) {
		var new_txt = existing_txt.replace(txt,"&quot;"+txt+"&quot;");
		set_textarea(textarea_obj,new_txt);
	}
}

