bbcode_bitfield = $bitfield;
			$this->bbcode_cache_init();
		}
	}
	function bbcode_second_pass(&$message, $bbcode_uid = '', $bbcode_bitfield = '')
	{
		if ($bbcode_uid)
		{
			$this->bbcode_uid = $bbcode_uid;
		}
		if ($bbcode_bitfield)
		{
			$this->bbcode_bitfield = $bbcode_bitfield;
		}
		elseif (!$this->bbcode_bitfield)
		{
			return $message;
		}
		if (empty($this->bbcode_cache))
		{
			$this->bbcode_cache_init();
		}
		$str = array('search' => array(), 'replace' => array());
		$preg = array('search' => array(), 'replace' => array());
		$bitlen = strlen(decbin($this->bbcode_bitfield));
		for ($bbcode_id = 0; $bbcode_id < $bitlen; ++$bbcode_id)
		{
			if ($this->bbcode_bitfield & pow(2, $bbcode_id))
			{
				foreach ($this->bbcode_cache[$bbcode_id] as $type => $array)
				{
					foreach ($array as $search => $replace)
					{
						${$type}['search'][] = str_replace('$uid', $this->bbcode_uid, $search);
						${$type}['replace'][] = $replace;
					}
				}
			}
		}
		if (count($str['search']))
		{
			$message = str_replace($str['search'], $str['replace'], $message);
		}
		if (count($preg['search']))
		{
			$message = preg_replace($preg['search'], $preg['replace'], $message);
		}
		return $message;
	}
	
	//
	// bbcode_cache_init()
	//
	// requires: $this->bbcode_bitfield
	// sets: $this->bbcode_cache with bbcode templates needed for bbcode_bitfield
	//
	function bbcode_cache_init()
	{
		$sql = '';
		$bbcode_ids = array();
		$bitlen = strlen(decbin($this->bbcode_bitfield));
		for ($bbcode_id = 0; $bbcode_id < $bitlen; ++$bbcode_id)
		{
			if (isset($this->bbcode_cache[$bbcode_id]) || !($this->bbcode_bitfield & pow(2, $bbcode_id)))
			{
				continue;
			}
			$bbcode_ids[] = $bbcode_id;
			// WARNING: hardcoded values. it assumes that bbcodes with bbcode_id > 11 are user-defined bbcodes
			if ($bbcode_id > 11)
			{
				$sql .= $bbcode_id . ',';
			}
		}
/*
		if ($sql)
		{
			global $db;
			$rowset = array();
			$sql = 'SELECT bbcode_id, second_pass_regexp, second_pass_replacement
				FROM ' . BBCODES_TABLE . '
				WHERE bbcode_id IN (' . substr($sql, 0, -1) . ')';
			$result = $db->sql_query($sql);
			while ($row = $db->sql_fetchrow($result))
			{
				$rowset[$row['bbcode_id']] = $row;
			}
			$db->sql_freeresult($result);
		}
*/
		foreach ($bbcode_ids as $bbcode_id)
		{
			switch ($bbcode_id)
			{
				case 0:
					$this->bbcode_cache[$bbcode_id] = array(
						'str' => array(
							'[quote:$uid]'			=>	$this->bbcode_tpl('quote_open'),
							'[/quote:$uid]'			=>	$this->bbcode_tpl('quote_close')
						),
						'preg' => array(
							'#\[quote="(.*?)":$uid\]#'	=>	$this->bbcode_tpl('quote_username_open')
						)
					);
				break;
				case 1:
					$this->bbcode_cache[$bbcode_id] = array(
						'str' => array(
							'[b:$uid]'				=>	'',
							'[/b:$uid]'				=>	''
						)
					);
				break;
				case 2:
					$this->bbcode_cache[$bbcode_id] = array(
						'str' => array(
							'[i:$uid]'				=>	'',
							'[/i:$uid]'				=>	''
						)
					);
				break;
				case 3:
					$this->bbcode_cache[$bbcode_id] = array(
						'preg' => array(
							'#\[url:$uid\](.*?)\[/url:$uid\]#s'		=>	'\1',
							'#\[url=(.*?):$uid\](.*?)\[/url:$uid\]#s'	=>	'\2'
						)
					);
				break;
				case 4:
					$this->bbcode_cache[$bbcode_id] = array(
						'preg' => array(
							'#\[img:$uid\](.*?)\[/img:$uid\]#s'		=>	''
						)
					);
				break;
				case 5:
					$this->bbcode_cache[$bbcode_id] = array(
						'preg' => array(
							'#\[size=(.*?):$uid\](.*?)\[/size:$uid\]#s'	=>	'\2'
						)
					);
				break;
				case 6:
					$this->bbcode_cache[$bbcode_id] = array(
						'preg' => array(
							'#\[color=(.*?):$uid\](.*?)\[/color:$uid\]#s'	=>	'\2'
						)
					);
				break;
				case 7:
					$this->bbcode_cache[$bbcode_id] = array(
						'str' => array(
							'[u:$uid]'				=>	'',
							'[/u:$uid]'				=>	''
						)
					);
				break;
				case 8:
					$this->bbcode_cache[$bbcode_id] = array(
						'preg' => array(
							'#\[code(?:=([a-z]+))?:$uid\](.*?)\[/code:$uid\]#ise'	=>	"\$this->bbcode_second_pass_code('\\1', '\\2')"
						)
					);
				break;
				case 9:
					$this->bbcode_cache[$bbcode_id] = array(
						'str' => array(
							'[list:$uid]'			=>	'