var news_lastid = 0;
var news_maxentries = 6;
var offsetDiff = 0;
var defaultHeight = 16;
var news_fadingOut = new Array();
var news_firstTime = true;
var ntc = "alt";

function requestNews() {
   if (typeof(news_small) == 'undefined') {
      if (document.getElementById('newsticker').parentNode.offsetWidth < 200)
         news_small = true;
      else
         news_small = false;
   }
	newsLogRequest = new vB_AJAX_Handler(true);
	newsLogRequest.onreadystatechange(showNews);
	if (typeof(news_small) != 'undefined' && news_small)
      newsLogRequest.send('vbnews.php', 'small=1&start=' + news_lastid);
	else
	   newsLogRequest.send('vbnews.php', 'start=' + news_lastid);
	setTimeout('requestNews()', 15000);
}

function getInnerText(xmlelement) {
 if (xmlelement.firstChild == null)
   return '';
 else
   return xmlelement.firstChild.data;
}

function showNews() {
	if (newsLogRequest) {
		if (newsLogRequest.handler.readyState == 4 && newsLogRequest.handler.status == 200 && newsLogRequest.handler.responseText) {
         getOffsetDiff();
         var tmpXML = newsLogRequest.handler.responseXML;
         var entriesXML = tmpXML.getElementsByTagName('NewLine');
         //
          var max = (entriesXML.length);
          var id = 0;

          for (i = 0; i < max; i++) {
            var entry = entriesXML[i];

            id = getInnerText(entry.getElementsByTagName('ID')[0]);
            var chattext = getInnerText(entry.getElementsByTagName('text')[0]);

            news_entry_add(id, chattext);

          }
          if (id != 0) news_lastid = parseInt(id) + 1;
          //
          news_firstTime = false;
		}
	}
}

  // removes an entry
  function news_entry_remove(id) {
    var e = document.getElementById(id);
    if (e == null) alert(id + ' nicht gefunden');
    for (var i = news_fadingOut.length - 1; i >= 0; --i) {
      if (news_fadingOut[i] == e) news_fadingOut.splice(i, 1);
    }
    e.parentNode.removeChild(e);
  }
  // end news_entry_remove()

  // adds an entry
  function news_entry_add(id, chattext) {
    var newentry = document.createElement('div');
    newentry.setAttribute('id', 'news_' + id);
    newentry.style.textAlign = 'left';
    //newentry.setAttribute('class', 'smallfont');
    if (id % 2 == 0) {
      newentry.className = ntc + '1 smallfont';
    } else {
      newentry.className = ntc + '2 smallfont';
    }
    newentry.style.overflow = 'hidden';
    newentry.style.width = '500px';
    if (news_firstTime)
      newentry.style.height = (defaultHeight - offsetDiff) + 'px';
    else
      newentry.style.height = '0px';

    //var myText = document.createTextNode(chattext);
    newentry.innerHTML = chattext;
    //newentry.appendChild(myText);
    //newentry.data = chattext + '<br />';


    var d = document.getElementById('newsticker');

    if (d == null) alert('d is null');

    d.appendChild(newentry);

    // remove all entries which are too much ;)
    if (d.getElementsByTagName('div').length > news_maxentries) {
      var e = d.getElementsByTagName('div');
      var found = false;
      for (var i = 0; i <= e.length; ++i) {
         found = false;
         for (var j = 0; j < news_fadingOut.length; ++j) if (news_fadingOut[j] == e[i])  {
            found = true;
            break;
         }
         if (!found) {
            news_fadingOut.push(e[i]);
            fadeNewsOut(e[i].id);
            break;
         }
      }
      if (found) news_entry_remove(e[0].id);
      /*
      if (d.getElementsByTagName('div').length > news_maxentries * 2) {
         var e = d.getElementsByTagName('div');
         for (var i = 0; i < news_maxentries; ++i) {
            if (e[i].offsetHeight < defaultHeight) news_entry_remove(e[i].id);
         }
      }
      */
    }
    if (!news_firstTime) setTimeout('fadeNewsIn("news_' + id + '")', 60);
  }
  // end news_entry_add()

  function fadeNewsIn(objname) {
    var e = document.getElementById(objname);
    if (e == null) return;
    for (var i = 0; i < news_fadingOut.length; ++i) {
      if (news_fadingOut[i] == e) return;
    }
    if (changeHeight(e, 1) < defaultHeight) setTimeout('fadeNewsIn("' + objname + '")', 60);
  }
  function fadeNewsOut(objname) {
    var e = document.getElementById(objname);
    if (e == null) return;
    if (changeHeight(e, -1) > -10)
      setTimeout('fadeNewsOut("' + objname + '")', 60);
    else
      news_entry_remove(objname);
  }

  function getOffsetDiff() {
    var e = document.getElementById('news_test');
    if (e == null) return;
    defaultHeight = e.offsetHeight;
    offsetDiff = e.offsetHeight;
    e.style.height = offsetDiff + 'px';
    offsetDiff = (e.offsetHeight - offsetDiff);
    e.parentNode.removeChild(e);
    var f = document.getElementById('newsticker');
    f.style.height = ((offsetDiff + defaultHeight) * news_maxentries) + 'px';
    var wurst = (f.parentNode.offsetWidth - 4);
    if (wurst > 510) wurst = 510;
    f.style.width = wurst + 'px';
  }

  function changeHeight(obj, val) {
    var nheight = obj.offsetHeight + val - offsetDiff;
    if (nheight < 0) nheight = 0;
    obj.style.height = nheight + 'px';
    if (nheight == 0) return -100;
    return obj.offsetHeight;
  }

setTimeout('requestNews()', 80);
// ------------ IRC -------------------------
var irc_lastid = 0;
var set_maxentries = 10;
var irc_lastuser = 0;
var irc_firstrun = true;

function requestIRCLogs() {
   IRCLogRequest = new vB_AJAX_Handler(true);
   IRCLogRequest.onreadystatechange(showIRCLogs);
   IRCLogRequest.send('vbirclog.php', 'start=' + irc_lastid + '&lastuserid=' + irc_lastuser);
   setTimeout('requestIRCLogs()', 10101);
}

function getInnerText(xmlelement) {
   if (xmlelement.firstChild == null) return '';
   else return xmlelement.firstChild.data;
}

function showIRCLogs() {
   if (typeof IRCLogRequest == 'undefined' || IRCLogRequest == null) return;
   if (IRCLogRequest.handler.readyState == 4 && IRCLogRequest.handler.status == 200 && IRCLogRequest.handler.responseText) {
      var tmpXML = IRCLogRequest.handler.responseXML;
      var entriesXML = tmpXML.getElementsByTagName('NewLine');
      var max = (entriesXML.length);
      var id = 0;

      for (i = 0; i < max; i++) {
         var entry = entriesXML[i];
         id = getInnerText(entry.getElementsByTagName('ID')[0]);
         var chattext = getInnerText(entry.getElementsByTagName('text')[0]);
         var tmpu = parseInt(getInnerText(entry.getElementsByTagName('userid')[0]));
         if (tmpu != 0) irc_lastuser = tmpu;

         entry_add(id, chattext);
         chgd = true;

      }
      if (irc_firstrun) {
         irc_firstrun = false;
         ircAutoClean();
      }
      if (id != 0) {
         irc_lastid = parseInt(id) + 1;
         scrollDenDiv();
      }
   }
}

function entry_add(id, chattext) {
   var newentry = document.createElement('div');
   if (newentry == null) return;
   newentry.setAttribute('id', 'irc_tr_' + id);
   newentry.className = 'smallfont';

   newentry.innerHTML = chattext;
   newentry.style.borderBottom = '1px solid #aaa';


   var d = document.getElementById('vbIRCLog');

   if (d == null) return;

   d.appendChild(newentry);
}

function scrollDenDiv() {
   var d = document.getElementById('vbIRCLog');
   if (d == null) return;
   var orig = d.scrollTop;
   var y = orig + 4;
   d.scrollTop = y;
   if (d.scrollTop != orig) {
      setTimeout('scrollDenDiv()', 40);
   } else {
      ircAutoClean();
   }
}

function ircAutoClean() {
   var d = document.getElementById('vbIRCLog');
   if (d == null) return;
   while (d.getElementsByTagName('div').length > set_maxentries + 1) {
      var e = d.getElementsByTagName('div');
      e[0].parentNode.removeChild(e[0]);
   }
}
