/* $Id: shoutbox.js 371 2010-07-24 15:08:51Z Pr0g $ */

var sb_req = false;
var sb_div = null;
var sb_ul = null;
var sb_first_li = null;
var sb_last_li = null;
var sb_reload = null;
var sb_admin_active = false;
var sb_reload_time = 20;

function shoutbox_request() {
  if (sb_req.readyState == 4) {
    if (sb_req.status == 200) {
      var sb_x_doc = sb_req.responseXML;
      var sb_mode = sb_x_doc.getElementsByTagName('mode')[0].firstChild.data;
      if (sb_mode == 'error_login') {
        alert('Dein Login ist abgelaufen. Bitte lade die Seite neu und logge dich ggf. neu ein.');
        return;
      }
      var sb_x_shouts = sb_x_doc.getElementsByTagName('shouts')[0];
      var sb_count = sb_x_shouts.getAttribute('count');
      if (sb_count > 0) {
        for (var i = 0; i < sb_count; i++) {
          var sb_x_shout = sb_x_shouts.childNodes[i];
          var sb_dom_li = document.createElement('li');
          if (sb_x_shout.getAttribute('id') != null) {
            var sb_dom_id = document.createElement('b');
            sb_dom_id.appendChild(document.createTextNode(sb_x_shout.getAttribute('id')));
            sb_dom_id.className = 'shout_id';
            sb_dom_li.appendChild(sb_dom_id);
          }
          var sb_dom_div = document.createElement('div');
          var sb_dom_b = document.createElement('b');
          if (sb_x_shout.getAttribute('ui') == -1) {
            sb_dom_b.appendChild(document.createTextNode('gel&ouml;scht'));
          } else {
            var sb_dom_a = document.createElement('a');
            sb_dom_a.href = sb_plink.replace('%I%', sb_x_shout.getAttribute('ui'));
            sb_dom_a.appendChild(document.createTextNode(sb_x_shout.getAttribute('un')));
            sb_dom_b.appendChild(sb_dom_a);
          }
          sb_dom_div.appendChild(sb_dom_b);
          sb_dom_div.appendChild(document.createTextNode(', ' + sb_x_shout.getAttribute('d')));
          sb_dom_li.appendChild(sb_dom_div);
          var sb_shout_text = sb_x_shout.firstChild.data;
          var sb_url_id = 'url_' + (i + 1);
          var sb_url_spos = sb_shout_text.indexOf('[' + sb_url_id + ']');
          var sb_url_epos = sb_shout_text.indexOf('[/' + sb_url_id + ']');
          if (sb_url_spos == -1 || sb_url_epos == -1) {
            sb_dom_li.appendChild(document.createTextNode(sb_shout_text));
          } else {
            while (sb_shout_text.length > 0) {
              sb_url_spos = sb_shout_text.indexOf('[' + sb_url_id + ']');
              sb_url_epos = sb_shout_text.indexOf('[/' + sb_url_id + ']');
              if (sb_url_spos == -1 || sb_url_epos == -1) {
                sb_dom_li.appendChild(document.createTextNode(sb_shout_text));
                break;
              }
              sb_dom_li.appendChild(document.createTextNode(sb_shout_text.substring(0, sb_url_spos)));
              sb_dom_a = document.createElement('a');
              sb_dom_a.href = sb_shout_text.substring(sb_url_spos + sb_url_id.length + 2, sb_url_epos);
              sb_dom_a.title = sb_dom_a.href;
              sb_dom_a.target = '_blank';
              sb_dom_a.appendChild(document.createTextNode('Link'));
              sb_dom_li.appendChild(sb_dom_a);
              sb_shout_text = sb_shout_text.substr(sb_url_epos + sb_url_id.length + 3);
            }
          }
          if (sb_mode == 'old') {
            sb_ul.insertBefore(sb_dom_li, sb_last_li);
          } else {
            sb_ul.insertBefore(sb_dom_li, sb_first_li.nextSibling);
          }
        }
        if (sb_first == 0) {
          document.getElementById('sb_empty_text').style.display = 'none';
        }
        if (sb_mode == 'old') {
          sb_last = sb_x_shouts.getAttribute('last');
        } else {
          sb_first = sb_x_shouts.getAttribute('first');
        }
      }
      if (sb_mode == 'old') {
        document.getElementById('sb_loadold_wait').style.display = 'none';
        document.getElementById('sb_loadold_' + (sb_count == 10 ? 'link' : 'last')).style.display = 'inline';
      } else if (sb_mode == 'new') {
        document.getElementById('sb_loadnew_wait').style.display = 'none';
        document.getElementById('sb_loadnew_link').style.display = 'inline';
        if (sb_count == 0) {
          if (sb_reload_time < 120) {
            sb_reload_time += 30;
          }
        } else {
          sb_reload_time = 20;
        }
        sb_reload = window.setInterval('shoutbox_reload()', sb_reload_time * 1000);
      } else if (sb_mode == 'delete') {
        document.getElementById('sb_' + sb_x_doc.getElementsByTagName('delete')[0].firstChild.data).style.display = 'none';
      }
      if (sb_admin_active && sb_mode != 'delete') {
        shoutbox_admin();
      }
    }
  }
}

function shoutbox_reload() {
  window.clearInterval(sb_reload);
  document.getElementById('sb_loadnew_link').style.display = 'none';
  document.getElementById('sb_loadnew_wait').style.display = 'inline';
  sb_req.onreadystatechange = shoutbox_request;
  sb_req.open('GET', '/getshoutbox.php?g=' + sb_gid + '&first=' + sb_first, true);
  sb_req.send(null);
  return false;
}

function shoutbox_getnew() {
  window.clearInterval(sb_reload);
  return shoutbox_reload();
}

function shoutbox_getold() {
  document.getElementById('sb_loadold_link').style.display = 'none';
  document.getElementById('sb_loadold_wait').style.display = 'inline';
  sb_req.onreadystatechange = shoutbox_request;
  sb_req.open('GET', '/getshoutbox.php?g=' + sb_gid + '&last=' + sb_last, true);
  sb_req.send(null);
  return false;
}

function shoutbox_delete(obj, id) {
  if (confirm('Soll der Eintrag aus der Shoutbox entfernt werden?')) {
    obj.style.display = 'none';
    document.getElementById('sb_' + id).innerHTML += 'Bitte warten...';
    sb_req.onreadystatechange = shoutbox_request;
    sb_req.open('GET', '/getshoutbox.php?g=' + sb_gid + '&delete=' + id, true);
    sb_req.send(null);
  }
  return false;
}

function shoutbox_post() {
  window.clearInterval(sb_reload);
  var sb_text = document.getElementById('shoutbox_input');
  if (sb_text.value != '' && sb_text.value != 'Dein Text') {
    sb_req.onreadystatechange = shoutbox_request;
    sb_req.open('GET', '/getshoutbox.php?g=' + sb_gid + '&post=' + escape(sb_text.value) + '&first=' + sb_first, true);
    sb_req.send(null);
    sb_text.value = '';
  }
  return false;
}

function shoutbox_admin() {
  if (!sb_admin_active) {
    sb_admin_active = true;
    document.getElementById('sb_admin_link').style.display = 'none';
  }
  var li_count = sb_ul.childNodes.length;
  for (var i = 0; i < li_count; i++) {
    if (sb_ul.childNodes[i].firstChild.className == 'shout_id') {
      var li_id = sb_ul.childNodes[i].firstChild;
      sb_ul.childNodes[i].id = 'sb_' + li_id.innerHTML;
      var sb_dom_br = document.createElement('br');
      sb_ul.childNodes[i].appendChild(sb_dom_br);
      sb_dom_br = document.createElement('br');
      sb_ul.childNodes[i].appendChild(sb_dom_br);
      var sb_dom_a = document.createElement('a');
      sb_dom_a.href = '#';
      sb_dom_a.onclick = new Function('return shoutbox_delete(this, ' + li_id.innerHTML + ');');
      sb_dom_a.appendChild(document.createTextNode('Eintrag entfernen'));
      sb_ul.childNodes[i].appendChild(sb_dom_a);
      sb_ul.childNodes[i].removeChild(sb_ul.childNodes[i].firstChild);
    }
  }
  return false;
}

function init_shoutbox() {
  sb_div = document.getElementById('shoutbox_container');
  sb_ul = document.getElementById('shoutbox_list');
  sb_first_li = document.getElementById('shoutbox_newshouts');
  sb_last_li = document.getElementById('shoutbox_oldshouts');
  if (window.XMLHttpRequest) {
    sb_req = new XMLHttpRequest();
    if (sb_req.overrideMimeType) {
      sb_req.overrideMimeType('text/xml');
    }
  } else if (window.ActiveXObject) {
    try {
      sb_req = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      try {
        sb_req = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (e) {}
    }
  }
  if (sb_req) {
    sb_reload = window.setInterval('shoutbox_reload()', sb_reload_time * 1000);
  }
}
