/**
 CLEditor BBCode Plugin v1.0.0
 http://premiumsoftware.net/cleditor
 requires CLEditor v1.3.0 or later
 Copyright 2010, Chris Landowski, Premium Software, LLC
 Dual licensed under the MIT or GPL Version 2 licenses.

 (c) 2015-2019 unix-world.org
 v.20191214
*/

// ==ClosureCompiler==
// @compilation_level SIMPLE_OPTIMIZATIONS
// @output_file_name jquery.cleditor.bbcode.min.js
// ==/ClosureCompiler==

/*

  The CLEditor useCSS optional parameter should be set to false for this plugin
  to function properly.

  Supported HTML and BBCode Tags:

  Bold              <b>Hello</b>
					[b]Hello[/b]
  Italics           <i>Hello</i>
					[i]Hello[/i]
  Underlined        <u>Hello</u>
					[u]Hello[/u]
  Strikethrough     <strike>Hello</strike>
					[s]Hello[/s]
  Unordered Lists   <ul><li>Red</li><li>Blue</li><li>Green</li></ul>
					[list][*]Red[/*][*]Green[/*][*]Blue[/*][/list]
  Ordered Lists     <ol><li>Red</li><li>Blue</li><li>Green</li></ol>
					[list=1][*]Red[/*][*]Green[/*][*]Blue[/*][/list]
  Images            <img src="http://premiumsoftware.net/image.jpg">
					[img]http://premiumsoftware.net/image.jpg[/img]
  Links             <a href="http://premiumsoftware.net">Premium Software</a>
					[url=http://premiumsoftware.net]Premium Software[/url]

*/

(function($) {

  // BBCode only supports a small subset of HTML, so remove
  // any toolbar buttons that are not currently supported.
  $.cleditor.defaultOptions.controls =
	"bold italic underline strikethrough removeformat | bullets numbering | " +
	"undo redo | image link unlink | cut copy paste pastetext | print source";

  // Save the previously assigned callback handlers
  var oldAreaCallback = $.cleditor.defaultOptions.updateTextArea;
  var oldFrameCallback = $.cleditor.defaultOptions.updateFrame;

  // Wireup the updateTextArea callback handler
  $.cleditor.defaultOptions.updateTextArea = function(html) {

	// Fire the previously assigned callback handler
	if (oldAreaCallback)
	  html = oldAreaCallback(html);

	// Convert the HTML to BBCode
	return $.cleditor.convertHTMLtoBBCode(html);

  }

  // Wireup the updateFrame callback handler
  $.cleditor.defaultOptions.updateFrame = function(code) {

	// Fire the previously assigned callback handler
	if (oldFrameCallback)
	  code = oldFrameCallback(code);

	// Convert the BBCode to HTML
	return $.cleditor.convertBBCodeToHTML(code);

  }

  // Expose the convertHTMLtoBBCode method
  $.cleditor.convertHTMLtoBBCode = function(html) {

	$.each([
	  [/[\r|\n]/g, ""],
	  [/<br.*?>/gi, "\n"],
	  [/<b>(.*?)<\/b>/gi, "[b]$1[/b]"],
	  [/<strong>(.*?)<\/strong>/gi, "[b]$1[/b]"],
	  [/<i>(.*?)<\/i>/gi, "[i]$1[/i]"],
	  [/<em>(.*?)<\/em>/gi, "[i]$1[/i]"],
	  [/<u>(.*?)<\/u>/gi, "[u]$1[/u]"],
	  [/<ins>(.*?)<\/ins>/gi, "[u]$1[/u]"],
	  [/<strike>(.*?)<\/strike>/gi, "[s]$1[/s]"],
	  [/<del>(.*?)<\/del>/gi, "[s]$1[/s]"],
	  [/<a.*?href="(.*?)".*?>(.*?)<\/a>/gi, "[url=$1]$2[/url]"],
	  [/<img.*?src="(.*?)".*?>/gi, "[img]$1[/img]"],
	  [/<ul>/gi, "[list]"],
	  [/<\/ul>/gi, "[/list]"],
	  [/<ol>/gi, "[list=1]"],
	  [/<\/ol>/gi, "[/list]"],
	  [/<li>/gi, "[*]"],
	  [/<\/li>/gi, "[/*]"],
	  [/<.*?>(.*?)<\/.*?>/g, "$1"]
	  ], function(index, item) {
		html = html.replace(item[0], item[1]);
	  });

	return html;

  }

  // Expose the convertBBCodeToHTML method
  $.cleditor.convertBBCodeToHTML = function(code) {

	$.each([
	  [/\r/g, ""],
	  [/\n/g, "<br>"],
	  [/\[b\](.*?)\[\/b\]/gi, "<b>$1</b>"],
	  [/\[i\](.*?)\[\/i\]/gi, "<i>$1</i>"],
	  [/\[u\](.*?)\[\/u\]/gi, "<u>$1</u>"],
	  [/\[s\](.*?)\[\/s\]/gi, "<strike>$1</strike>"],
	  [/\[url=(.*?)\](.*?)\[\/url\]/gi, "<a href=\"$1\">$2</a>"],
	  [/\[img\](.*?)\[\/img\]/gi, "<img src=\"$1\">"],
	  [/\[list\](.*?)\[\/list\]/gi, "<ul>$1</ul>"],
	  [/\[list=1\](.*?)\[\/list\]/gi, "<ol>$1</ol>"],
	  [/\[list\]/gi, "<ul>"],
	  [/\[list=1\]/gi, "<ol>"],
	  [/\[\*\](.*?)\[\/\*\]/g, "<li>$1</li>"],
	  [/\[\*\]/g, "<li>"]
	  ], function(index, item) {
		code = code.replace(item[0], item[1]);
	  });

	return code;

  }

})(jQuery);