code_tables = new Array();
t = 0;

unhcode = new Array();
i = 0;
unhcode[i] = new Object();
unhcode[i]['expr'] = /(\r\n|\n\r|\n|\r)/;
unhcode[i]['repl'] = function (data) {
  return "<br>";
}
unhcode[i]['simple'] = 1;
unhcode[i]['normal'] = 1;
unhcode[i]['advanced'] = 1;

i++;
unhcode[i] = new Object();
unhcode[i]['expr'] = /!code(\((.*?)\)){0,1}:(.*?)\/code!(<br>){0,1}/;
unhcode[i]['repl'] = function (data) {
  if (data[1])
    return_var = '<div class=headline_code>' + data[2] + '</div>';
  else
    return_var = ''
  table = '<table class=code border=0 cellspacing=0 cellpadding=0>';
  td_line = '';
  lines = data[3].split('<br>');
  for (j = 0; j < lines.length; j++)
    td_line = td_line + (j+1) + '<br>';
  lwidth = '';
  if (lines.length > 10) {
    lines_str = ''+lines.length;
    lwidth = ' style="width: ' + (8 + (lines_str.length * 7)) + 'px"';
  }
  table = table + '<tr><td class=line' + lwidth + '>' + td_line + '</td><td><div style="width: 100%; overflow: auto"><nobr>' + data[3].split(' ').join('&nbsp;') + '</nobr></div></td></tr></table>';
  code_tables[++t] = table;
  return return_var + '!!!ct' + t + '!!!';
}
unhcode[i]['normal'] = 1;
unhcode[i]['advanced'] = 1;

i++;
unhcode[i] = new Object();
unhcode[i]['expr'] = /  /;
unhcode[i]['repl'] = function (data) {
  return '&nbsp; ';
}
unhcode[i]['simple'] = 1;
unhcode[i]['normal'] = 1;
unhcode[i]['advanced'] = 1;

i++;
unhcode[i] = new Object();
unhcode[i]['expr'] = /!b:(.*?)\/b!/i;
unhcode[i]['repl'] = function (data) {
  return '<b>' + data[1] + '</b>';
}
unhcode[i]['normal'] = 1;
unhcode[i]['advanced'] = 1;

i++;
unhcode[i] = new Object();
unhcode[i]['expr'] = /!i:(.*?)\/i!/i;
unhcode[i]['repl'] = function (data) {
  return '<i>' + data[1] + '</i>';
}
unhcode[i]['normal'] = 1;
unhcode[i]['advanced'] = 1;

i++;
unhcode[i] = new Object();
unhcode[i]['expr'] = /!u:(.*?)\/u!/i;
unhcode[i]['repl'] = function (data) {
  return '<u>' + data[1] + '</u>';
}
unhcode[i]['normal'] = 1;
unhcode[i]['advanced'] = 1;

i++;
unhcode[i] = new Object();
unhcode[i]['expr'] = /!c:(.*?)\/c!(<br>){0,1}/i;
unhcode[i]['repl'] = function (data) {
  return '<center>' + data[1] + '</center>';
}
unhcode[i]['normal'] = 1;
unhcode[i]['advanced'] = 1;

i++;
unhcode[i] = new Object();
unhcode[i]['expr'] = /!t:(.*?)\/t!(<br>){0,1}/i;
unhcode[i]['repl'] = function (data) {
  return '<h2>' + data[1] + '</h2>';
}
unhcode[i]['normal'] = 1;
unhcode[i]['advanced'] = 1;

i++;
unhcode[i] = new Object();
unhcode[i]['expr'] = /!quote(\((.*?)\)){0,1}:(.*?)\/quote!(<br>){0,1}/i;
unhcode[i]['repl'] = function (data) {
  if (data[1])
    return_var = '<div class=headline_quote>' + data[2] + '</div>';
  else
    return_var = '';
  return return_var + '<div class=quote>' + data[3] + '<div style="clear: both"></div></div>';
}
unhcode[i]['normal'] = 1;
unhcode[i]['advanced'] = 1;

i++;
unhcode[i] = new Object();
unhcode[i]['expr'] = /!hw:(.*?)\/hw!/i;
unhcode[i]['repl'] = function (data) {
  return '<span class=high>' + data[1] + '</span>';
}
unhcode[i]['normal'] = 1;
unhcode[i]['advanced'] = 1;

i++;
unhcode[i] = new Object();
unhcode[i]['expr'] = /!hp:(.*?)\/hp!(<br>){0,1}/i;
unhcode[i]['repl'] = function (data) {
  return '<div class=high>' + data[1] + '<div style="clear: both"></div></div>';
}
unhcode[i]['normal'] = 1;
unhcode[i]['advanced'] = 1;

i++;
unhcode[i] = new Object();
unhcode[i]['expr'] = /!list(\(([a-z0-9\-]+?)(, (.*?)){0,1}\)){0,1}:(.*?)\/list!(<br>){0,1}/i;
unhcode[i]['repl'] = function (data) {
  if (data[3])
    return_var = '<div class=headline_list>' + data[4] + '</div>';
  else
    return_var = '';
  if (data[2])
    switch (data[2]) {
      case 'a':
        return_var = return_var + '<ol class=alpha_low>';
        break;
      case 'A':
        return_var = return_var + '<ol class=alpha_up>';
        break;
      case '1':
        return_var = return_var + '<ol class=numeric>';
        break;
      case 'I':
        return_var = return_var + '<ol class=roman>';
        break;
      default:
        return_var = return_var + '<ul class=' + data[2] + '>';
    }
  else
    return_var = return_var + "<ul>";
  return_var = return_var + '<li>' + data[5].split('<br>').join('</li><li>') + '</li>';
  switch (data[2]) {
    case 'a':
    case 'A':
    case '1':
    case 'I':
      return_var = return_var + '</ol>';
      break;
    default:
      return_var = return_var + '</ul>';
    }
  return return_var;
}
unhcode[i]['normal'] = 1;
unhcode[i]['advanced'] = 1;

i++;
unhcode[i] = new Object();
unhcode[i]['expr'] = /!img(\((left|right|center)\)){0,1}:(http:\/\/|htp:\/|http:\/|htp:\/\/){0,1}(.+?)\/img!/i;
unhcode[i]['repl'] = function (data) {
  style = 'class=unh ';
  if (data[2] == 'left')
    style = 'class=unh_left ';
  if (data[2] == 'right')
    style = 'class=unh_right ';
  if (data[2] == 'center')
    style = 'class=unh_center ';
  data[4] = data[4].split(' ', 2);
  data[5] = data[4][1];
  data[4] = data[4][0];
  src = (data[3] || data[4].substr(0, 4) == 'www.') ? 'http://' + data[4] : data[4];
  if (data[5])
    text = data[5];
  else
    text = data[4];
  return '<img src="' + src + '" title="' + text + '" alt="' + text + '" ' + style + 'border=0>';
}
unhcode[i]['normal'] = 1;
unhcode[i]['advanced'] = 1;

i++
unhcode[i] = new Object();
unhcode[i]['expr'] = /!url:(http:\/\/|htp:\/|http:\/|htp:\/\/){0,1}(.+?)\/url!/i;
unhcode[i]['repl'] = function (data) {
  target = ' class=extern target=_blank';
  data[2] = data[2].split(' ', 2);
  data[3] = data[2][1];
  data[2] = data[2][0];
  link = (data[1] || data[2].substr(0, 4) == 'www.') ? 'http://' + data[2] : data[2];
  if (data[3])
    text = data[3];
  else
    text = data[2];
  return '<a href="' + link + '"' + target + '>' + text + '</a>';
}
unhcode[i]['normal'] = 1;

i++
unhcode[i] = new Object();
unhcode[i]['expr'] = /!(e|pb){0,1}url:(http:\/\/|htp:\/|http:\/|htp:\/\/){0,1}(.+?)\/url!/i;
unhcode[i]['repl'] = function (data) {
  data[3] = data[3].split(' ', 2);
  data[4] = data[3][1];
  data[3] = data[3][0];
  target = '';
  if (data[1] == 'e')
    target = ' class=extern target=_blank';
  if (data[1] == 'pb')
    link = '/erst_danach_verfügbar';
  else
    link = (data[2] || data[3].substr( 0, 4) == 'www.') ? 'http://' + data[3] : data[3];
  if (data[4])
    text = data[4];
  else
    text = data[3];
  return '<a href="' + link + '"' + target + '>' + text + '</a>';
}
unhcode[i]['advanced'] = 1;

i++;
unhcode[i] = new Object();
unhcode[i]['expr'] = /!!!ct(\d+)!!!/i;
unhcode[i]['repl'] = function (data) {
  return code_tables[data[1]];
}
unhcode[i]['normal'] = 1;
unhcode[i]['advanced'] = 1;

function unhcode_exec(text, type) {
  var Ergebnis;
  text = htmlspecialchars(text);
  for (i = 0; i < unhcode.length; i++) {
    if (unhcode[i][type]) {
      while (Ergebnis = unhcode[i]['expr'].exec(text)) {
        text = text.split(Ergebnis[0]).join(unhcode[i]['repl'](Ergebnis));
      }
    }
  }
  return text;
}

function htmlspecialchars(text) {
  text = text.replace(/&/g, "&amp;");
  text = text.replace(/"/g, "&quot;");
  text = text.replace(/</g, "&lt;");
  text = text.replace(/>/g, "&gt;");
  return text;
}

