Edit in JSFiddle

/**
 PHP.js stuff
 */

 function get_html_translation_table(table, quote_style) {
  //  discuss at: http://phpjs.org/functions/get_html_translation_table/
  // original by: Philip Peterson
  //  revised by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
  // bugfixed by: noname
  // bugfixed by: Alex
  // bugfixed by: Marco
  // bugfixed by: madipta
  // bugfixed by: Brett Zamir (http://brett-zamir.me)
  // bugfixed by: T.Wild
  // improved by: KELAN
  // improved by: Brett Zamir (http://brett-zamir.me)
  //    input by: Frank Forte
  //    input by: Ratheous
  //        note: It has been decided that we're not going to add global
  //        note: dependencies to php.js, meaning the constants are not
  //        note: real constants, but strings instead. Integers are also supported if someone
  //        note: chooses to create the constants themselves.
  //   example 1: get_html_translation_table('HTML_SPECIALCHARS');
  //   returns 1: {'"': '&quot;', '&': '&amp;', '<': '&lt;', '>': '&gt;'}

  var entities = {},
    hash_map = {},
    decimal;
  var constMappingTable = {},
    constMappingQuoteStyle = {};
  var useTable = {},
    useQuoteStyle = {};

  // Translate arguments
  constMappingTable[0] = 'HTML_SPECIALCHARS';
  constMappingTable[1] = 'HTML_ENTITIES';
  constMappingQuoteStyle[0] = 'ENT_NOQUOTES';
  constMappingQuoteStyle[2] = 'ENT_COMPAT';
  constMappingQuoteStyle[3] = 'ENT_QUOTES';

  useTable = !isNaN(table) ? constMappingTable[table] : table ? table.toUpperCase() : 'HTML_SPECIALCHARS';
  useQuoteStyle = !isNaN(quote_style) ? constMappingQuoteStyle[quote_style] : quote_style ? quote_style.toUpperCase() :
    'ENT_COMPAT';

  if (useTable !== 'HTML_SPECIALCHARS' && useTable !== 'HTML_ENTITIES') {
    throw new Error('Table: ' + useTable + ' not supported');
    // return false;
  }

  entities['38'] = '&amp;';
  if (useTable === 'HTML_ENTITIES') {
    entities['160'] = '&nbsp;';
    entities['161'] = '&iexcl;';
    entities['162'] = '&cent;';
    entities['163'] = '&pound;';
    entities['164'] = '&curren;';
    entities['165'] = '&yen;';
    entities['166'] = '&brvbar;';
    entities['167'] = '&sect;';
    entities['168'] = '&uml;';
    entities['169'] = '&copy;';
    entities['170'] = '&ordf;';
    entities['171'] = '&laquo;';
    entities['172'] = '&not;';
    entities['173'] = '&shy;';
    entities['174'] = '&reg;';
    entities['175'] = '&macr;';
    entities['176'] = '&deg;';
    entities['177'] = '&plusmn;';
    entities['178'] = '&sup2;';
    entities['179'] = '&sup3;';
    entities['180'] = '&acute;';
    entities['181'] = '&micro;';
    entities['182'] = '&para;';
    entities['183'] = '&middot;';
    entities['184'] = '&cedil;';
    entities['185'] = '&sup1;';
    entities['186'] = '&ordm;';
    entities['187'] = '&raquo;';
    entities['188'] = '&frac14;';
    entities['189'] = '&frac12;';
    entities['190'] = '&frac34;';
    entities['191'] = '&iquest;';
    entities['192'] = '&Agrave;';
    entities['193'] = '&Aacute;';
    entities['194'] = '&Acirc;';
    entities['195'] = '&Atilde;';
    entities['196'] = '&Auml;';
    entities['197'] = '&Aring;';
    entities['198'] = '&AElig;';
    entities['199'] = '&Ccedil;';
    entities['200'] = '&Egrave;';
    entities['201'] = '&Eacute;';
    entities['202'] = '&Ecirc;';
    entities['203'] = '&Euml;';
    entities['204'] = '&Igrave;';
    entities['205'] = '&Iacute;';
    entities['206'] = '&Icirc;';
    entities['207'] = '&Iuml;';
    entities['208'] = '&ETH;';
    entities['209'] = '&Ntilde;';
    entities['210'] = '&Ograve;';
    entities['211'] = '&Oacute;';
    entities['212'] = '&Ocirc;';
    entities['213'] = '&Otilde;';
    entities['214'] = '&Ouml;';
    entities['215'] = '&times;';
    entities['216'] = '&Oslash;';
    entities['217'] = '&Ugrave;';
    entities['218'] = '&Uacute;';
    entities['219'] = '&Ucirc;';
    entities['220'] = '&Uuml;';
    entities['221'] = '&Yacute;';
    entities['222'] = '&THORN;';
    entities['223'] = '&szlig;';
    entities['224'] = '&agrave;';
    entities['225'] = '&aacute;';
    entities['226'] = '&acirc;';
    entities['227'] = '&atilde;';
    entities['228'] = '&auml;';
    entities['229'] = '&aring;';
    entities['230'] = '&aelig;';
    entities['231'] = '&ccedil;';
    entities['232'] = '&egrave;';
    entities['233'] = '&eacute;';
    entities['234'] = '&ecirc;';
    entities['235'] = '&euml;';
    entities['236'] = '&igrave;';
    entities['237'] = '&iacute;';
    entities['238'] = '&icirc;';
    entities['239'] = '&iuml;';
    entities['240'] = '&eth;';
    entities['241'] = '&ntilde;';
    entities['242'] = '&ograve;';
    entities['243'] = '&oacute;';
    entities['244'] = '&ocirc;';
    entities['245'] = '&otilde;';
    entities['246'] = '&ouml;';
    entities['247'] = '&divide;';
    entities['248'] = '&oslash;';
    entities['249'] = '&ugrave;';
    entities['250'] = '&uacute;';
    entities['251'] = '&ucirc;';
    entities['252'] = '&uuml;';
    entities['253'] = '&yacute;';
    entities['254'] = '&thorn;';
    entities['255'] = '&yuml;';
  }

  if (useQuoteStyle !== 'ENT_NOQUOTES') {
    entities['34'] = '&quot;';
  }
  if (useQuoteStyle === 'ENT_QUOTES') {
    entities['39'] = '&#39;';
  }
  entities['60'] = '&lt;';
  entities['62'] = '&gt;';

  // ascii decimals to real symbols
  for (decimal in entities) {
    if (entities.hasOwnProperty(decimal)) {
      hash_map[String.fromCharCode(decimal)] = entities[decimal];
    }
  }

  return hash_map;
}

function htmlentities(string, quote_style, charset, double_encode) {
  // discuss at: http://phpjs.org/functions/htmlentities/
  // original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
  // revised by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
  // revised by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
  // improved by: nobbler
  // improved by: Jack
  // improved by: Rafał Kukawski (http://blog.kukawski.pl)
  // improved by: Dj (http://phpjs.org/functions/htmlentities:425#comment_134018)
  // bugfixed by: Onno Marsman
  // bugfixed by: Brett Zamir (http://brett-zamir.me)
  // input by: Ratheous
  // depends on: get_html_translation_table
  // note: function is compatible with PHP 5.2 and older
  // example 1: htmlentities('Kevin & van Zonneveld');
  // returns 1: 'Kevin &amp; van Zonneveld'
  // example 2: htmlentities("foo'bar","ENT_QUOTES");
  // returns 2: 'foo&#039;bar'
  var hash_map = this.get_html_translation_table('HTML_ENTITIES', quote_style),
      symbol = '';

  string = string == null ? '' : string + '';

  if (!hash_map) {
    return false;
  }

  if (quote_style && quote_style === 'ENT_QUOTES') {
    hash_map["'"] = '&#039;';
  }

  double_encode = double_encode == null || !!double_encode;

  var regex = new RegExp("&(?:#\\d+|#x[\\da-f]+|[a-zA-Z][\\da-z]*);|[" +
                Object.keys(hash_map)
                  .join("")
                  // replace regexp special chars
                  .replace(/([()[\]{}\-.*+?^$|\/\\])/g, "\\$1")
                + "]",
              "g");

  return string.replace(regex, function (ent) {
    if (ent.length > 1) {
      return double_encode ? hash_map["&"] + ent.substr(1) : ent;
    }

    return hash_map[ent];
  });
}

function nl2br(str, is_xhtml) {
  //  discuss at: http://phpjs.org/functions/nl2br/
  // original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
  // improved by: Philip Peterson
  // improved by: Onno Marsman
  // improved by: Atli Þór
  // improved by: Brett Zamir (http://brett-zamir.me)
  // improved by: Maximusya
  // bugfixed by: Onno Marsman
  // bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
  //    input by: Brett Zamir (http://brett-zamir.me)
  //   example 1: nl2br('Kevin\nvan\nZonneveld');
  //   returns 1: 'Kevin<br />\nvan<br />\nZonneveld'
  //   example 2: nl2br("\nOne\nTwo\n\nThree\n", false);
  //   returns 2: '<br>\nOne<br>\nTwo<br>\n<br>\nThree<br>\n'
  //   example 3: nl2br("\nOne\nTwo\n\nThree\n", true);
  //   returns 3: '<br />\nOne<br />\nTwo<br />\n<br />\nThree<br />\n'

  var breakTag = (is_xhtml || typeof is_xhtml === 'undefined') ? '<br ' + '/>' : '<br>'; // Adjust comment to avoid issue on phpjs.org display

  return (str + '')
    .replace(/([^>\r\n]?)(\r\n|\n\r|\r|\n)/g, '$1' + breakTag + '$2');
}

// -------------- END OF PHP.JS STUFF ----------------- //

var func = {
	data: {
		form: function($, res, src, reaction) { // "jquery", 'data/result', 'data/source', 'helpers/reactions'
			return function (id, otherObjs) {
				var ret = {
					form: $('#' + id),
					source: src(id),
					result: res(id),
					'reactions': new reaction('#' + id)
				};
				if (otherObjs) {
					for (var x in otherObjs) {
						ret[x] = otherObjs[x];
					}
				}
				return ret;
			}
		},
		result: function($) {
			return function (id) {
				return $('#' +  id + ' [name=result]');
			}
		},
		source: function($) {
			return function (id) {
				return $('#' +  id + ' [name=source], #' +  id + ' [name="source[]"]');
			}
		}
	},
	helpers: {
		loading: function ($) {
			return function (parent_id) {
				var parent = $('#' + parent_id);
				var progress = $('<div><div><span class="glyphicon glyphicon-refresh refresh-animate" data-role="animation"></span> <span data-role="msg">Apdorojama...</span></div></div>');
				progress.hide();
				progress.msg = function (msg) {
					$('[data-role="msg"]', progress).html(msg);
				};
				progress.start = function (msg) {
					if (msg) {
						progress.msg(msg);
					}
					progress.show();
					parent.hide();			
				};
				progress.stop = function () {
					parent.show();
					progress.hide();
				};
				parent.after(progress);
				return progress;
			};
		},
		reactions: function ($) {
			return function (owner) {
				var obj = $(owner);
				this.error = function (error) {
					if (!error.split) {
						return;
					}
					var prefix = 'error' + error.split('-').map(function(txt){
						return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
					}).join('');
					switch(obj.data(prefix + 'Action')) {
						case 'alert':
							alert(obj.data(prefix + 'Msg'));
						break;
						case 'show':
							$(obj.data(prefix + 'Target')).show();
						break;
					}
				};
			};
		}
	}
};

// main

var main = function($, jForm, loading) { // "jquery", "data/form", "helpers/loading"

	var obj = jForm('tool'),
		loader = loading('tool'),
		replace = [
			[
				/\[code\](.*?)\[\/code\]/igm,
				"<pre>\$1</pre>"
			],
			[
				/\[li\](.*?)\[\/li\]/igm,
				"<div><b>*</b> \$1</div>"
			],
			[
				/\[b\](.*?)\[\/b\]/igm,
				"<b>\$1</b>"
			],
			[
				/\[i\](.*?)\[\/i\]/igm,
				"<i>\$1</i>"
			],
			[
				 /\[u\](.*?)\[\/u\]/igm,
				"<u>\$1</u>"
			],
			[
				/\[s\](.*?)\[\/s\]/igm,
				"<span style=\"text-decoration: line-through;\">\$1</span>"
			],
			[
				/\[c\](.*?)\[\/c\]/igm,
				"<cite>\$1</cite>"
			],
			[
				/\[tt\](.*?)\[\/tt\]/igm,
				"<span style=\"font-family:monospace;\">\$1</span>"
			],
			[
				/\[ttext\](.*?)\[\/ttext\]/igm,
				"<span style=\"font-family:monospace;\">\$1</span>"
			],
			[
				/\[color=(.*)\](.*?)\[\/color\]/igm,
				"<span style=\"color: \$1\">\$2</span>"
			],
			[
				/\[colour=(.*?)\](.*)\[\/colour\]/igm,
				"<span style=\"color: \$1\">\$2</span>"
			],
			[
				/\[size=(.*?)\](.*?)\[\/size\]/igm,
				"<span style=\"font-size: \$1;\">\$2</span>"
			],
			[
				/\[img\](.*?)\[\/img\]/igm,
				"<img src=\"\$1\" alt=\"\" title=\"\" />"
			],
			[
				/\[img=(.*)\](.*?)\[\/img\]/igm,
				"<img src=\"\$1\" alt=\"\$2\" title=\"\$2\" />"
			],
			[
				/\[img (.*?)\](.*?)\[\/img\]/igm,
				"<img src=\"\$1\" alt=\"\$2\" title=\"\$2\" />"
			],
			[
				/\[url=(.*)\](.*?)\[\/url\]/igm,
				"<a href=\"\$1\">\$2</a>"
			],
			[
				/\[url (.*?)\](.*?)\[\/url\]/igm,
				"<a href=\"\$1\">\$2</a>"
			],
			[
				/\[url\](.*?)\[\/url\]/igm,
				"<a href=\"\$1\">\$1</a>"
			],
			[
				/\[quote\](.*?)\[\/quote\]/igm,
				"<blockquote>\$1</blockquote>"
			],
			[
				/""(.*?)""/igm,
				"\"\$1\""
			]
		];

	obj.form.submit(function(e) {
		e.preventDefault();
		loader.start();

		var ret = nl2br(obj.source.val());
		for(var i = 0; i < replace.length; i++) {
			ret = ret.replace(replace[i][0], replace[i][1]);	
		}

		obj.result.val(ret);

		loader.stop();
	});
	obj.result.click(function () {
		obj.result.select();
	});
};

main($, func.data.form($, func.data.result($), func.data.source($), func.helpers.reactions($)), func.helpers.loading($));
<div class="container" id="post-52"> 
											<h3><a href="#" rel="bookmark" title="Permanent Link to Kodo konvertavimas: BBCode į HTML">Kodo konvertavimas: BBCode į HTML</a></h3>
						<!--meta-->
					
					 
						<div class="full-post-content"><p>Jei dėl kažkokių priežasčių prireikė konvertuoti BBCode į HTML, šis įrankis turėtų praversti – tereikia parašyti BBCode kalba aprašytą tekstą ir paspausti&nbsp;<strong>Konvertuoti</strong> mygtuką.</p>
<form id="tool" action="javascript://" method="post">
<fieldset>
<legend>Šaltinis</legend>
<p><textarea id="source" required="true" cols="80" name="source" rows="20"></textarea><br /><button type="submit" class="btn btn-primary">Konvertuoti</button></p></fieldset>
<fieldset>
<legend>Rezultatas</legend>
<p><textarea cols="80" name="result" readonly="readonly" rows="20"></textarea></p></fieldset>
</form><div style="display: none;"><div><span class="glyphicon glyphicon-refresh refresh-animate" data-role="animation"></span> <span data-role="msg">Apdorojama...</span></div></div>
</div>
				
					
			

				</div>