﻿Type.registerNamespace("Utils");
Utils.BBCodeParser = function(element)
{
    Utils.BBCodeParser.initializeBase(this, [element]);
    this._text = null;
}

Utils.BBCodeParser.prototype = 
{
    get_text:function()
    {
        return this._text;
    },
    
    set_text:function(value)
    {
        this._text = value;
        var html = this._parseBBCodeToHTML();
        this._renderHTML(html);
    },

    _parseBBCodeToHTML:function()
    {
        var txt = this.get_text();
       
			txt = txt.replace(/</g,'&lt;');
			txt = txt.replace(/>/g,'&gt;');
			txt = txt.replace(/\r\n/g, '%lb%');
			txt = txt.replace(/[\r\n]/g,'%lb%');

			var find = [/\[b\](.*?)\[\/b\]/gi,
			        	   /\[i\](.*?)\[\/i\]/gi,
			        	   /\[u\](.*?)\[\/u\]/gi,
			        	   /\[align=(.*?)](.*?)\[\/align\]/gi,
			        	   /\[size=(.*?)](.*?)\[\/size\]/gi,
			        	   /\[TABBLOCK=(.*?)](.*?)\[\/TABBLOCK]/gi,
			        	   /\[color=(.*?)](.*?)\[\/color\]/gi,
			        	   /\[url(?:\=?)(.*?)\](.*?)\[\/url\]/gi,
			        	   /\[img(.*?)\](.*?)\[\/img\]/gi,
			        	   /\[TAB](.*?)/gi,
			        	   /\[list(.*?)\](.*?)\[\*\](.*?)(?:%lb%|\s)*(\[\*\].*?\[\/list\]|\[\/list\])/i,
			        	   /(?:%lb%|\s)*\[list\](?:%lb%|\s)*(.*?)(?:%lb%|\s)*\[\/list\](?:%lb%|\s)*/gi,
			        	   /(?:%lb%|\s)*\[list=(\d)\](?:%lb%|\s)*(.*?)(?:%lb%|\s)*\[\/list\](?:%lb%|\s)*/gi,
			        	   /(?:%lb%){3,}/g
			        	   ];
			var replace = ['<b>$1<\/b>',
			           	   '<i>$1<\/i>',
			           	   '<u>$1<\/u>',
			           	   '<div style="text-align:$1;width:100%">$2</div>',
			           	   '<span style="font-size:$1%;">$2</span>',
			           	   '<div style="margin-left:$1px;">$2</div>',
			           	   '<span style="color:$1;">$2</span>',
			           	   '<a href="$1">$2</a>',
			           	   '<img $1 src="$2" />',
			           	   '&nbsp;&nbsp;&nbsp;&nbsp;$1',
			           	   '[list$1]$2<li>$3</li>$4',
			           	   '<ul>$1</ul>',
			           	   '<ol start=$1>$2</ol>',
			           	   '%lb%%lb%'
			           	   ];

			for(var i in find)
			{
				txt = txt.replace(find[i],replace[i]);
				if(i == 8) while(txt.match(find[i],replace[i])) txt = txt.replace(find[i],replace[i]); // fix [*] so that they only work inside [/list]
			}
			
			txt = txt.replace(/%lb%/g,'<br />');
			return txt;
    },

    _renderHTML:function(html)
    {
        this.get_element().innerHTML = html;
    },

    initialize:function()
    {
        Utils.BBCodeParser.callBaseMethod(this, 'initialize');
    },
    dispose: function()
    {
        Utils.BBCodeParser.callBaseMethod(this, 'dispose');
    }
}

Utils.BBCodeParser.registerClass('Utils.BBCodeParser', Sys.UI.Control);
if (typeof(Sys) !== 'undefined') Sys.Application.notifyScriptLoaded();
