// Copyright (C) 2008 Jeroen van der Gun
// All rights reserved

if(window.XMLHttpRequest)
 chatForm(new XMLHttpRequest(), new XMLHttpRequest(), new XMLHttpRequest());
else if(window.ActiveXObject)
 chatForm(new ActiveXObject('Microsoft.XMLHTTP'), new ActiveXObject('Microsoft.XMLHTTP'), new ActiveXObject('Microsoft.XMLHTTP'));
else
{
 document.writeln('<h3>Fout</h3>');
 document.writeln('XMLHttpRequest wordt niet ondersteund door je browser.');
 document.writeln('Update je browser of installeer een nieuwe browser, zoals bijvoorbeeld Mozilla Firefox.');
}

function chatFocus()
{
 if(document.getElementById('inside').style.display == '')
 {
  chatIncoming = -1;
  document.title = chatTitle;
  if(chatBlinkTimeout != null)
   clearTimeout(chatBlinkTimeout);
 }
}
function chatScrollGet()
{
 return document.getElementById('chatout').scrollTop + document.getElementById('chatout').clientHeight >= document.getElementById('chatout').scrollHeight;
}
function chatScrollSet()
{
 if(document.getElementById('statusselect').selectedIndex != 2)
  document.getElementById('chatout').scrollTop = document.getElementById('chatout').scrollHeight;
}
window.chatRequestEvent = true;
document.onfocus = function()
{
 chatFocus();
}
document.onblur = function()
{
 chatIncoming = 0;
}
document.onresize = function()
{
 if(document.getElementById('inside').style.display == '')
  chatScrollSet();
}
window.onunload = function()
{
 if(document.getElementById('inside').style.display == '' && chatUp)
 {
  document.getElementById('wait').innerHTML = '<h3><img src="img/loading.gif" width="16" height="16" alt=""> Bezig met uitloggen...</h3><div>Bedankt voor je bezoek.</div>';
  document.getElementById('inside').style.display = 'none';
  document.getElementById('wait').style.display = '';
  clearTimeout(chatTimeout);
  chatRequestAbort();
  chatPost('exit.php', false);
  chatConnect.send('u=' + chatUser + '&s=' + chatSession);
 }
}
window.onbeforeunload = function()
{
 if(document.getElementById('inside').style.display == '')
  return 'Je wordt op deze manier uitgelogd op de Game Maker Chat.';
}

function chatForm(connect, connectSecondary, connectTertiary)
{
 document.getElementById('script').style.display = '';
 if(document.getElementById('user').type == 'hidden')
  document.getElementById('auto').focus();
 else
  document.getElementById('user').focus();
 document.getElementById('text').value = '';
 document.getElementById('reporttext').value = '';
 chatConnect = connect;
 chatConnectSecondary = connectSecondary;
 chatConnectTertiary = connectTertiary;
 soundManagerInit();
}

function chatBlink()
{
 if(chatIncoming > -1)
 {
  if(document.getElementById('statusselect').selectedIndex != 2 && !chatGaming && chatIncoming > 0)
  {
   if(document.title == chatTitle)
    document.title = chatIncoming + ' nieuw - ' + chatTime;
   else
    document.title = chatTitle;
   chatBlinkTimeout = setTimeout(chatBlink, 2000);
  }
  else
   document.title = chatTitle;
 }
}

function chatWelcomeDisplay(display)
{
 document.getElementById('welcome').getElementsByTagName('div')[0].style.display = display;
}

function chatSwap(off, on)
{
 chatWelcomeDisplay((off == 'login') ? 'none' : '');
 document.getElementById(off).style.display = 'none';
 document.getElementById(on).style.display = '';
 return false;
}

function chatAbort(reason)
{
 document.getElementById('wait').innerHTML = '';
 document.getElementById('forms').style.display = '';
 alert(reason);
}

function chatWait(what, email, auto)
{
 document.getElementById('forms').style.display = 'none';
 document.getElementById('wait').innerHTML = '<h3><img src="img/loading.gif" width="16" height="16" alt=""> Bezig met ' + what + '...</h3> Een ogenblik geduld alsjeblieft.';
 chatEmail = email;
 if(auto)
  return true;
 if(email == '')
 {
  chatAbort('Je hebt je e-mailadres niet ingevuld.');
  return false;
 }
 if(email.match(/^[\w\-\.]+@(?:[\w\-]+\.)+[\w\-]{2,4}$/))
  return true;
 chatAbort('Het ingevulde e-mailadres is ongeldig.');
 return false;
}

function chatPost(file, async)
{
 chatConnect.open('POST', file, async);
 chatConnect.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
}

function chatRequestAbort()
{
 chatRequestEvent = false;
 chatConnect.abort();
 chatRequestEvent = true;
}

function chatRequestReady()
{
 return chatConnect.readyState == 4 && chatRequestEvent;
}

function chatRequestOK()
{
 try
 {
  var OK = chatConnect.status == 200;
 }
 catch(e)
 {
  var OK = false;
 }
 return OK;
}

function chatRequestFail()
{
 document.getElementById('time').style.display = 'none';
 document.getElementById('lag').style.display = '';
 chatUp = false;
}

function chatPassword()
{
 var mail = prompt('Voer hieronder je e-mailadres in om een e-mail te ontvangen met instructies voor het instellen van een nieuw wachtwoord.', document.getElementById('user').value);
 if(mail != null)
 {
  if(chatWait('versturen van e-mail', mail))
  {
   chatPost('npw.php', true);
   chatConnect.onreadystatechange = function()
   {
    if(chatRequestReady())
     chatAbort((chatRequestOK()) ? ((chatConnect.responseText == '1') ? 'De e-mail met instructies voor het instellen van een nieuw wachtwoord is verstuurd. Kijk ook tussen je spam indien je de e-mail niet ontvangt.' : 'Je e-mailadres is verkeerd ingevuld of je account is geblokkeerd of nog niet geactiveerd.') : 'De server lijkt onbereikbaar of overbelast te zijn. Probeer het straks nog eens. (Of is er iets mis met jouw internetverbinding?)');
   }
   chatConnect.send('u=' + mail);
  }
 }
 return false;
}

function chatStatus()
{
 if(chatGaming)
  return null;
 var text = '';
 var count = 0;
 var users = [];
 var user;
 for(user in chatUsers)
  if(chatOnline[user] != null)
  {
   users[count] = chatUsers[user].toUpperCase() + chatUsers[user] + ':' + user.substr(1);
   count++;
  }
 if(count > 0)
 {
  users.sort();
  for(user in users)
  {
   var pos = users[user].lastIndexOf(':');
   var name = users[user].substring(pos / 2, pos);
   var who = users[user].substr(pos + 1);
   text += '<li onclick="chatInsertReceiver(' + who + ');" title="Klik om ' + ((who == chatUser) ? 'jouw profiel te bekijken."' : 'een privébericht naar deze gebruiker te sturen en/of het profiel van deze gebruiker te bekijken."') + '>';
   if(chatStatuses['u' + who] > 0)
   {
    text += '<img src="img/status' + chatStatuses['u' + who] + '.png" width="12" height="12" alt="[';
    switch(chatStatuses['u' + who])
    {
     case 1: text += 'bezet'; break;
     case 2: text += 'afwezig'; break;
     case 3: text += 'spelend';
    }
    text += ']" title="';
    switch(chatStatuses['u' + who])
    {
     case 1: text += 'Bezet'; break;
     case 2: text += 'Afwezig'; break;
     case 3: text += 'Spelend';
    }
    text += '"> ';
   }
   if(chatPowers['u' + who] > 1)
    name = '<em>' + name + '</em>';
   text += name;
   if(chatPollActive && 'u' + who in chatPollVotes && chatPollVotes['u' + who] !== null)
    text += (chatPollVotes['u' + who]) ? ' <small class="agree">eens</small>' : ' <small class="disagree">oneens</small>';
   text += '</li>';
  }
  text = '<ul>' + text + '</ul>';
 }
 document.getElementById('online').innerHTML = '<h4 onclick="chatInsertReceiver(0);" title="Klik om een bericht naar alle niet-bezette gebruikers te sturen.">Online gebruikers (' + count + ')</h4>' + text;
}

function chatTimeDisplay(message)
{
 var time = message[3].substr(6, 1).replace('0', '') + message[3].substr(7, 4);
 if(time != chatTime)
 {
  chatTime = time;
  return ' om ' + time;
 }
 return '';
}

function chatDate(info)
{
 switch(info.substr(0, 2))
 {
  case '01': var month = 'januari'; break;
  case '02': var month = 'februari'; break;
  case '03': var month = 'maart'; break;
  case '04': var month = 'april'; break;
  case '05': var month = 'mei'; break;
  case '06': var month = 'juni'; break;
  case '07': var month = 'juli'; break;
  case '08': var month = 'augustus'; break;
  case '09': var month = 'september'; break;
  case '10': var month = 'oktober'; break;
  case '11': var month = 'november'; break;
  case '12': var month = 'december';
 }
 document.getElementById('time').innerHTML = 'Laatste gebeurtenis: ' + info.substr(3, 1).replace('0', '') + info.substr(4, 1) + ' ' + month + ' om' + info.substr(5, 2).replace('0', '') + info.substr(7, 4) + '.';
}

function chatAccess(error)
{
 if(chatRequestReady())
 {
  if(chatRequestOK())
  {
   var login = eval('[' + chatConnect.responseText + ']');
   chatLast = login[0];
   switch(chatLast)
   {
    case -1:
     chatAbort(error);
     break;
    case -2:
     chatWelcomeDisplay('none');
     document.getElementById('main').innerHTML = '<h3>Account aangemaakt</h3><div>Je account is geregistreerd, maar moet nog worden geactiveerd. Een e-mail met activatie-instructies is verstuurd. Kijk ook tussen je spam indien je de e-mail niet ontvangt.</div>';
     break;
    default:
     chatCurrentTip = '';
     chatTip('r');
     chatUser = login[1];
     chatPower = login[2];
     chatHash = login[3];
     chatProfileHide = login[5];
     chatProfileReal = login[6];
     chatProfileAge = login[7];
     chatProfileGender = login[8];
     chatProfileLocation = login[9];
     chatProfileSite = login[10];
     chatSession = login[11];
     chatMemberlist(0);
     chatSetSounds(document.cookie.indexOf('s=1') == -1);
     chatUp = true;
     chatTitle = document.title;
     chatIncoming = -1;
     chatBlinkTimeout = null;
     chatTime = '';
     document.getElementById('statusselect').selectedIndex = 0;
     document.getElementById('iall').checked = true;
     document.getElementById('games').getElementsByTagName('i')[0].innerHTML = '&eacute;&eacute;n gebruiker';
     chatUploadInit();
     chatEmoticons = [[':)', /(?::|=)-?\)/g], [';)', /;-?\)/g], [':S', /(?::|=)-?s/gi], [':P', /(?::|=)-?p/gi], ['XD', /\b(?:X|x)-?D/g], [':"(', /(?::|=)(?:&quot;_|'')-?\(/g], [':\'(', /(?::|=)\'-?\(/g], [':*', /\(K\)|(?::|=)-?\*/gi], [':X', /(?::|=)-?x/gi], [':(', /(?::|=)-?\(/g], ['B)', /\(H\)|\(h\)|(?:B|8)-?\)/g], [':/', /(?::|=)-?(?:\/|&#92;_)/g], [':O', /(?::|=)-?(?:o)/gi], [':D', /(?::|=)-?D/g], [':@', /(?::|=)-?@/g], ['(A)', /\(A\)/gi], [':$', /(?::|=)-?\$/g], ['8|', /(?:8|B)-?\|/g], ['(L)', /\(L\)/gi], [':|', /(?::|=)-?\|/g], ['(6)', /\(6\)/g]];
     var insert = '';
     for(var i = 0; i < chatEmoticons.length; i++)
     {
      var name = chatEmoticons[i][0].replace(/"/g, '&quot;');
      insert += '<img src="emoticons/' + i + '.gif" onclick="chatInsertEmoticon(' + i + ');" alt="' + name + '" title="' + name + '"> ';
     }
     document.getElementById('emoticons').innerHTML += insert;
     chatSelectedGame = -1;
     chatGaming = false;
     chatInviting = false;
     chatGames = [['games.jessedegger.nl', '/mijnenveger', 'Mijnenveger', 305, 250], ['zeeslag.infomijn.nl', '', 'Zeeslag', 360, 190], ['badgaan.nl', '/4op1rij', 'Vier op een rij', 300, 200], ['games.jessedegger.nl', '/galgje', 'Galgje', 355, 190], ['games.jessedegger.nl', '/mastermind', 'Mastermind', 360, 190], ['games.blijbol.nl', '/gmchat/boterkaaseieren', 'Boter, kaas en eieren', 250, 180], ['games.jessedegger.nl', '/sps', 'Steen, papier, schaar', 360, 190]];
     insert = '<table cellspacing="0" cellpadding="0"><tr><th width="200">Spel</th><th>Aanbieder</th></tr>';
     for(i = 0; i < chatGames.length; i++)
      insert += '<tr><td><label for="g' + i + '"><input type="radio" name="game" id="g' + i + '" onclick="chatGamePick(' + i + ');"> ' + chatGames[i][2] + '</label></td><td valign="bottom"><small><a href="http://' + chatGames[i][0] + '" target="_blank">' + chatGames[i][0] + '</a></small></td></tr>';
     document.getElementById('gameslist').innerHTML = insert;
     document.getElementById('activity').innerHTML += '<img src="grph.php" alt="Activiteitsgrafiek">';
     document.getElementById('userbar').innerHTML += '<img src="userbar/' + chatUser + '.gif" alt=""><br><br><h5>BBCode (forums)</h5><input value="[url=http://gmchat.nl][img]http://gmchat.nl/userbar/' + chatUser + '.gif[/img][/url]" size="55" readonly="readonly" onclick="this.focus(); this.select();"><br><br><h5>HTML (websites)</h5><input value="&lt;a href=&quot;http://gmchat.nl&quot; target=&quot;_blank&quot; hreflang=&quot;nl&quot;&gt;&lt;img src=&quot;http://gmchat.nl/userbar/' + chatUser + '.gif&quot; width=&quot;355&quot; height=&quot;30&quot; alt=&quot;Klik hier om de Game Maker Chat te bezoeken.&quot; /&gt;&lt;/a&gt;" size="55" readonly="readonly" onclick="this.focus(); this.select();">';
     if(document.getElementById('remember').checked)
      chatCookieSet();
     else
      chatCookieClear();
     document.getElementById('myname').innerHTML = login[4];
     chatDate(login[12]);
     document.getElementById('latest').innerHTML = login[13];
     chatTalker = 0;
     chatReceiver = 0;
     chatUsers = [];
     chatStatuses = [];
     chatStatuses['u0'] = 0;
     chatPowers = [];
     chatOnline = [];
     chatPollIndex = 0;
     chatPollRunning = false;
     chatPollActive = false;
     for(var i = 14; i < login.length; i++)
     {
      chatUsers['u' + login[i][0]] = login[i][1];
      chatStatuses['u' + login[i][0]] = login[i][4];
      chatPowers['u' + login[i][0]] = login[i][2];
      if(login[i][3] > 0)
       chatOnline['u' + login[i][0]] = setTimeout('chatForget(' + login[i][0] + ');', login[i][3] * 1000);
     }
     chatStatus();
     chatDelta = 4000;
     chatRefreshNext = false;
     chatTimeout = setTimeout(chatReceive, 4000);
     chatRefreshTimeout = setTimeout('chatRefreshNext = true;', 80000);
     if(chatOptionSounds)
      soundManager.play('login');
     chatWelcomeDisplay('none');
     document.getElementById('wait').style.display = 'none';
     document.getElementById('inside').style.display = '';
     chatEnable();
   }
  }
  else
   chatAbort('De server lijkt onbereikbaar of overbelast te zijn. Probeer het straks nog eens. (Of is er iets mis met jouw internetverbinding?)');
 }
}

function chatEscape(text)
{
 return escape(text).replace(/\+/g, '%2B');
}

function chatLogin(auto)
{
 if(chatWait('inloggen', document.getElementById('user').value, auto))
 {
  if(!auto && document.getElementById('pass').value == '')
   chatAbort('Je hebt je wachtwoord niet ingevuld.');
  else
  {
   chatPost('log.php?r=0', true);
   chatConnect.onreadystatechange = function()
   {
    chatAccess((auto) ? 'Het op jouw computer opgeslagen wachtwoord is niet meer geldig of je account is geblokkeerd.' : 'Je e-mailadres of wachtwoord is verkeerd ingevuld of je account is geblokkeerd of nog niet geactiveerd.');
   }
   chatConnect.send((auto) ? '' : 'u=' + chatEscape(document.getElementById('user').value) + '&p=' + chatEscape(document.getElementById('pass').value));
  }
 }
 return false;
}

function chatRegister()
{
 if(chatWait('registreren', document.getElementById('usernew').value, false))
 {
  if(document.getElementById('passone').value == '')
   chatAbort('Je hebt geen wachtwoord ingevuld.');
  else if(document.getElementById('passtwo').value == '')
   chatAbort('Je hebt je wachtwoord niet herhaald.');
  else if(document.getElementById('passone').value == document.getElementById('passtwo').value)
  {
   if(document.getElementById('name').value.length < 2)
    chatAbort('Je hebt geen schermnaam ingevuld.');
   else if(document.getElementById('name').value.match(/^[\w\- _\.]{2,20}$/))
   {
    chatPost('log.php?r=1', true);
    chatConnect.onreadystatechange = function()
    {
     chatAccess('Dit e-mailadres of deze schermnaam wordt al gebruikt door een andere account.');
    }
    chatConnect.send('u=' + chatEscape(document.getElementById('usernew').value) + '&h=' + ((document.getElementById('hide').checked) ? '1' : '0') + '&p=' + chatEscape(document.getElementById('passone').value) + '&n=' + chatEscape(document.getElementById('name').value));
   }
   else
    chatAbort('Je schermnaam bevat verboden tekens. Alleen letters, cijfers, spaties, verbindingsstreepjes, underscores en punten zijn toegestaan.');
  }
  else
   chatAbort('Je hebt twee verschillende wachtwoorden ingevoerd.');
 }
 return false;
}

function chatCookiePostfix()
{
 var now = new Date();
 now.setYear(now.getFullYear() + 2);
 return ';expires=' + now.toGMTString();
}

function chatCookieSet()
{
 var exp = chatCookiePostfix();
 document.cookie = 'u=' + escape(document.getElementById('user').value) + exp;
 document.cookie = 'h=' + chatHash + exp;
}

function chatCookieClear()
{
 document.cookie = 'u=;expires=Mon, 01 Jan 1990 00:00:00 GMT';
 document.cookie = 'h=;expires=Mon, 01 Jan 1990 00:00:00 GMT';
}

function chatSetSounds(setting)
{
 chatOptionSounds = setting;
 document.getElementById('soundon').style.display = (setting) ? '' : 'none';
 document.getElementById('soundoff').style.display = (setting) ? 'none' : '';
 if(setting)
  document.cookie = 's=;expires=Mon, 01 Jan 1990 00:00:00 GMT';
 else
  document.cookie = 's=1' + chatCookiePostfix();
}

function chatProfile()
{
 chatConnectSecondary.open('POST', 'user.php', true);
 chatConnectSecondary.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
 chatConnectSecondary.onreadystatechange = function()
 {
  if(chatConnectSecondary.readyState == 4 && chatBlockVisible(1))
   document.getElementById('content').innerHTML = chatConnectSecondary.responseText;
 }
}

function chatProfileLoad(who)
{
 if(!chatGaming && (chatConnectSecondary.readyState == 0 || chatConnectSecondary.readyState == 4))
 {
  document.getElementById('content').innerHTML = 'Bezig met laden...';
  document.getElementById('profilename').innerHTML = chatUsers['u' + who];
  chatBlockSwitch(1);
  chatProfile();
  chatConnectSecondary.send('u=' + chatUser + '&s=' + chatSession + '&p=' + who);
 }
}

function chatProfileNew(who, name)
{
 chatUsers['u' + who] = name;
 chatProfileLoad(who);
}

function chatProfileSave()
{
 if(document.getElementById('psite').value == '' || document.getElementById('psite').value.match(/^(?:[\w-]+\.)+[\w-]+(?::\d+)?(?:\/(?:[\w-:\\%,\.\+]+\/)*(?:[\w-:\\,%\.\+]+)?)?$/))
 {
  document.getElementById('profile').style.display = 'none';
  document.getElementById('content').innerHTML = 'Bezig met opslaan...';
  document.getElementById('profilename').innerHTML = chatUsers['u' + chatUser];
  chatBlockSwitch(1);
  chatProfileReal = document.getElementById('preal').value;
  chatProfileAge = document.getElementById('page').value.replace(/\D/g, '');
  chatProfileGender = document.getElementById('pgender').selectedIndex;
  chatProfileLocation = document.getElementById('plocation').value;
  chatProfileHide = !document.getElementById('pshow').checked;
  chatProfileSite = document.getElementById('psite').value;
  chatConnectSecondary.abort();
  chatProfile();
  chatConnectSecondary.send('u=' + chatUser + '&s=' + chatSession + '&r=' + chatEscape(chatProfileReal) + '&a=' + chatProfileAge + '&g=' + chatProfileGender + '&l=' + chatEscape(chatProfileLocation) + '&h=' + ((chatProfileHide) ? '1' : '0') + '&w=' + chatProfileSite);
 }
 else
  alert('Dit is geen geldig websiteadres.');
}

function chatToggleMenu(menu)
{
 if(document.getElementById(menu).style.display == 'none')
 {
  var windows = document.getElementsByTagName('div');
  for(var i = 0; i < windows.length; i++)
   if(windows[i].className == 'window')
    windows[i].style.display = 'none';
  switch(menu)
  {
   case 'profile':
    document.getElementById('preal').value = chatProfileReal;
    document.getElementById('page').value = (chatProfileAge == 0) ? '' : chatProfileAge;
    document.getElementById('pgender').selectedIndex = chatProfileGender;
    document.getElementById('plocation').value = chatProfileLocation;
    document.getElementById('pmail').value = chatEmail;
    document.getElementById('pshow').checked = !chatProfileHide;
    document.getElementById('psite').value = chatProfileSite;
  }
  document.getElementById(menu).style.display = '';
 }
 else
  document.getElementById(menu).style.display = 'none';
}

function chatInsertReceiver(who)
{
 if(who > 0)
  chatProfileLoad(who);
 if(!document.getElementById('text').disabled && who != chatUser)
 {
  if(who > 0 && chatOnline['u' + who] == null)
  {
   if(chatPower <= 1)
    alert(chatUsers['u' + who] + ' is op dit moment offline.');
  }
  else
  {
   var text = document.getElementById('text').value;
   if(text.substr(0, 1) == '@')
   {
    var pos = text.indexOf(':');
    if(pos == -1)
     text = '';
    else
    {
     text = text.substr(pos + 1);
     while(text.substr(0, 1) == ' ')
      text = text.substr(1);
    }
   }
   document.getElementById('text').value = ((who == 0) ? '' : '@ ' + chatUsers['u' + who] + ': ') + text;
   document.getElementById('text').focus();
  }
 }
}

function chatInsertEmoticon(emo)
{
 if(!document.getElementById('text').disabled)
 {
  document.getElementById('emoticons').style.display = 'none';
  document.getElementById('text').value += ' ' + chatEmoticons[emo][0];
  document.getElementById('text').focus();
 }
}

function chatChangeStatus(select, status)
{
 select.style.backgroundImage = select.getElementsByTagName('option')[status].style.backgroundImage;
 if(status == 1)
 {
  var append = document.createElement('div');
  append.innerHTML = '<div class="info"><i>Je status is ingesteld op Bezet. Vanaf nu worden uitsluitend privéberichten weergegeven.</i></div>';
  document.getElementById('messages').appendChild(append);
  chatScrollSet();
  chatTalker = 0;
  chatReceiver = 0;
 }
 else if(chatStatuses['u' + chatUser] == 1)
 {
  var append = document.createElement('div');
  append.innerHTML = '<div class="info"><i>Je status Bezet is opgeheven. Vanaf nu worden alle berichten weer weergegeven.</i></div>';
  document.getElementById('messages').appendChild(append);
  chatScrollSet();
  chatTalker = 0;
  chatReceiver = 0;
 }
 if(status == 2)
 {
  document.getElementById('soundon').style.visibility = 'hidden';
  document.getElementById('soundoff').style.visibility = 'hidden';
 }
 else if(chatStatuses['u' + chatUser] == 2)
 {
  document.getElementById('soundon').style.visibility = '';
  document.getElementById('soundoff').style.visibility = '';
 }
 clearTimeout(chatTimeout);
 chatRequestAbort();
 clearTimeout(chatRefreshTimeout);
 chatRefreshNext = true;
 chatReceive();
}

function chatChangeStatusInternal(status)
{
 document.getElementById('statusselect').selectedIndex = status;
 chatChangeStatus(document.getElementById('statusselect'), status);
}

function chatBeActive()
{
 if(document.getElementById('statusselect').selectedIndex == 1)
 {
  if(confirm('Om je bericht naar iedereen te verzenden, moet je je status Bezet opheffen.'))
   chatChangeStatusInternal(0);
  else
   return false;
 }
 return true;
}

function chatDisable()
{
 document.getElementById('submit').focus();
 document.getElementById('submit').disabled = true;
 document.getElementById('text').disabled = true;
}

function chatEnable()
{
 document.getElementById('text').disabled = false;
 document.getElementById('submit').disabled = false;
 document.getElementById('text').focus();
 chatFocus();
}

function chatForget(user)
{
 chatOnline['u' + user] = null;
 if(user == chatUser)
 {
  chatRequestAbort();
  clearTimeout(chatTimeout);
  chatUp = false;
  chatFocus();
  document.getElementById('wait').innerHTML = '<h3>De verbinding is verbroken</h3><div>Je bent je verbinding met de chat kwijtgeraakt. Je moet opnieuw inloggen om verder te kunnen chatten; dit kun je doen door hieronder te klikken.<ul><li><a href=".">Ik wil nu opnieuw inloggen.</a></li></div>';
  document.getElementById('inside').style.display = 'none';
  document.getElementById('wait').style.display = '';
 }
 else
 {
  if(chatGaming)
  {
   if(user == chatGameOpponent)
   {
    alert('Je tegenstander is zijn/haar verbinding met de chat om onbekende reden verloren. Het spel wordt afgesloten.');
    chatGameQuit();
   }
  }
  else
   chatStatus();
 }
}

function chatTimeoutSet()
{
 chatTimeout = setTimeout(chatReceive, (1 + (chatIncoming > -1) / 2) * chatDelta);
}

function chatAdd()
{
 if(document.getElementById('wait').style.display == '')
  return null;
 //alert('Debug: leesprocedure gestart');
 chatUp = true;
 document.getElementById('lag').style.display = 'none';
 var activity = '';
 if(chatConnect.responseText != '')
 {
  var response = eval('[' + chatConnect.responseText + ']]');
  if(response.length == 1)
   if(response[0].length == 3)
   {
    document.getElementById('wait').innerHTML = '<h3>Je bent geblokkeerd</h3><div>Moderator ' + chatUsers['u' + response[0][0]] + ' heeft je zojuist om de volgende reden de toegang tot de chat ontzegd:<br><br><i>' + response[0][2] + '</i><br><br>' + ((response[0][1] == 0) ? 'De duur van deze blokkering is nog niet bepaald en krijg je later te horen als de blokkering niet permanent is' : 'De blokkering duurt ' + ((response[0][1] < 0) ? ((response[0][1] == -1) ? '24 uur' : -response[0][1] + ' dagen') : response[0][1] + ' minuten')) + '.<br><br>Je ontvangt een kopie van dit bericht per e-mail. Voor vragen over de blokkering kun je e-mailen naar ' + webmasterEmailAddress + '</div>';
    document.getElementById('inside').style.display = 'none';
    document.getElementById('wait').style.display = '';
    return null;
   }
  var status = false;
  var scroll = chatScrollGet();
  var blink = false;
  var newHTML = '';
  for(var i = 0; i < response.length; i++)
   if(response[i][0] > chatLast)
   {
    chatLast = response[i][0];
    if(response[i][1] > 0)
     if(chatStatuses['u' + response[i][1]] != response[i][4])
     {
      chatStatuses['u' + response[i][1]] = response[i][4];
      status = true;
     }
    switch(response[i].length)
    {
     case 6:
      if(response[i][1] == 0)
      {
       if(chatOptionSounds && document.getElementById('statusselect').selectedIndex != 2)
        soundManager.play('news');
       newHTML += '<div class="info">' + response[i][5] + '</div>';
       document.getElementById('latest').innerHTML = response[i][5];
       chatTalker = 0;
       chatReceiver = 0;
      }
      else if(typeof response[i][5] == 'boolean')
      {
       if(chatPollRunning && 'u' + response[i][1] in chatPollVotes)
       {
        chatPollVotes['u' + response[i][1]] = response[i][5];
        status = true;
        if(chatBlockVisible(3))
         document.getElementById('content').innerHTML = chatPollResults();
       }
      }
      else if(response[i][5] == '')
      {
       if(chatOnline['u' + response[i][1]] != null)
       {
        if(response[i][1] == chatUser)
        {
         clearTimeout(chatRefreshTimeout);
         chatRefreshNext = true;
         chatReceive();
         return null;
        }
        newHTML += '<div class="info"><span onclick="chatInsertReceiver(' + response[i][1] + ');">' + chatUsers['u' + response[i][1]] + '</span> heeft de chat' + chatTimeDisplay(response[i]) + ' verlaten.</div>';
        chatTalker = 0;
        if(chatReceiver > 0)
         chatReceiver = -1;
        status = true;
        clearTimeout(chatOnline['u' + response[i][1]]);
        chatOnline['u' + response[i][1]] = null;
        if(chatGaming)
         if(user == chatGameOpponent)
         {
          alert('Je tegenstander is uitgelogd. Het spel wordt afgesloten.');
          chatGameQuit();
         }
       }
       continue;
      }
      else if(response[i][5] == '/poll' && chatPowers['u' + response[i][1]] > 1 && response[i][2] == 0)
      {
       if(chatPollRunning)
       {
        chatPollRunning = false;
        chatPollActive = false;
        if(chatBlockVisible(3))
         chatTipRestore();
        status = true;
        newHTML += '<div class="info"><span onclick="chatInsertReceiver(' + response[i][1] + ');">' + chatUsers['u' + response[i][1]] + '</span> heeft' + chatTimeDisplay(response[i]) + ' de peiling gesloten. De uitslag is:' + chatPollResults() + '</div>';
        chatTalker = 0;
        if(chatReceiver > 0)
         chatReceiver = -1;
       }
      }
      else
      {
       var isPoll = response[i][5].substr(0, 6) == '/poll ' && chatPowers['u' + response[i][1]] > 1 && response[i][2] == 0;
       if(chatOptionSounds && document.getElementById('statusselect').selectedIndex != 2 && (response[i][2] == 0 || response[i][1] == chatUser || response[i][2] == chatUser))
        soundManager.play((isPoll) ? 'poll' : ((response[i][2] == 0) ? 'message' : 'private'));
       if(isPoll)
       {
        if(chatPollActive)
        {
         chatPollActive = false;
         status = true;
         if(chatBlockVisible(3))
          chatTipRestore();
        }
        chatPollRunning = true;
        chatPollIndex++;
        chatPollVotes = [];
        var user;
        for(user in chatUsers)
         if(chatOnline[user] != null)
          chatPollVotes[user] = null;
        response[i][5] = response[i][5].substr(6);
        newHTML += '<div class="info"><span onclick="chatInsertReceiver(' + response[i][1] + ');">' + chatUsers['u' + response[i][1]] + '</span> opent' + chatTimeDisplay(response[i]) + ' een peiling met de volgende stelling:';
        chatTalker = 0;
        if(chatReceiver > 0)
         chatReceiver = -1;
       }
       else
       {
        if(chatTalker != response[i][1] || chatReceiver != response[i][2])
        {
         newHTML += '<small><span onclick="chatInsertReceiver(' + response[i][1] + ');">' + chatUsers['u' + response[i][1]] + '</span> zegt' + chatTimeDisplay(response[i]);
         if(chatReceiver != response[i][2] || chatReceiver != 0)
         {
          if(response[i][2] == 0)
           newHTML += ' in het openbaar';
          else
          {
           if(chatReceiver == 0)
            newHTML += ' persoonlijk';
           newHTML += ' tegen <span onclick="chatInsertReceiver(' + response[i][2] + ');">' + chatUsers['u' + response[i][2]] + '</span>';
          }
         }
         newHTML += ':</small>';
        }
        chatTalker = response[i][1];
        chatReceiver = response[i][2];
       }
       if(response[i][5].substr(0, 6) == '/code ')
       {
        response[i][5] = response[i][5].substr(6);
        var emoticonsEnabled = false;
       }
       else
       {
        if(response[i][5].substr(0, 7) == '/alert ' && chatPowers['u' + response[i][1]] > 1)
         response[i][5] = '<strong><em>' + response[i][5].substr(7) + '</em></strong>';
        else if(response[i][5].substr(0, 4) == '/me ')
         response[i][5] = chatUsers['u' + response[i][1]] + ' ' + response[i][5].substr(4);
        var emoticonsEnabled = true;
       }
       var sep = String.fromCharCode(10);
       var pieces = response[i][5].replace(/(?:(?:http|https|ftp):\/\/|www\.)(?:[\w-]+\.)+[\w-]+(?::\d+)?(?:\/(?:[\w-:\(\)\\%,\.\+]+\/)*(?:[\w-:\(\)\\,%\.\+]+)?(?:\?[\w-:\(\)\\/,%\.\+]+(?:=[\w-:\\/,%\.\+]*)?(?:(?:&amp)?;[\w-:\\/,%\.\+]+(?:=[\w-:\\/,%\.\+]*)?)*)?)?(?:\#[\w-:\\/,%\.\+]+)?/gi, sep + '<a href="$&" target="_blank">$&</a>' + sep).replace(/<a href="www\./gi, '<a href="http://www.').replace(/[\w\._%-]+@[\w\.-]+\.[a-z]{2,4}/gi, sep + '<a href="mailto:$&" target="_blank">$&</a>' + sep).split(sep);
       var text = (response[i][2] == 0 && !isPoll) ? '<p>' : '<p><i>';
       for(var j = 0; j < pieces.length; j++)
       {
        if(emoticonsEnabled && pieces[j].substring(0, 1) != '<')
        {
         pieces[j] = pieces[j].replace(/&([#x0-9A-Za-z]+?);/g, '&$1;_');
         for(var k = 0; k < chatEmoticons.length; k++)
          pieces[j] = pieces[j].replace(chatEmoticons[k][1], '<img src="emoticons/' + k + '.gif" alt="$&" title="$&">');
         pieces[j] = pieces[j].replace(/&([#x0-9A-Za-z]+?);_/g, '&$1;');
        }
        text += pieces[j];
       }
       if(isPoll)
       {
        text += '</i></p>';
        chatPollQuestion = text;
       }
       newHTML += text + ((isPoll) ? '<label onclick="chatPollVote(this, ' + chatPollIndex + ', 1);"><input type="radio" name="poll' + chatPollIndex + '"> Eens</label><br><label onclick="chatPollVote(this, ' + chatPollIndex + ', 0);"><input type="radio" name="poll' + chatPollIndex + '"> Oneens</label></div>' : ((response[i][2] == 0) ? '</p>' : '</i></p>'));
      }
      if(chatIncoming > -1)
      {
       chatIncoming++;
       if(chatIncoming == 1)
        blink = true;
      }
      activity = response[i][3];
      if(response[i][1] == chatUser)
       scroll = true;
      break;
     case 7:
      if(response[i][5] == '')
      {
       if(chatGaming)
        if(chatGameOpponent == response[i][1])
        {
         alert('Je tegenstander heeft het spel afgesloten.');
         chatGameQuit();
        }
       newHTML += '<div class="info"><span onclick="chatInsertReceiver(' + response[i][1] + ');">' + chatUsers['u' + response[i][1]] + '</span> heeft het spel ' + chatGames[response[i][6]][2] + ' tegen <span onclick="chatInsertReceiver(' + response[i][2] + ');">' + chatUsers['u' + response[i][2]] + '</span>' + chatTimeDisplay(response[i]) + ' be&euml;indigd.</div>';
       chatTalker = 0;
       if(chatReceiver > 0)
        chatReceiver = -1;
      }
      else
      {
       if(chatOnline['u' + response[i][1]] == null)
       {
        if(chatOptionSounds && document.getElementById('statusselect').selectedIndex != 2)
         soundManager.play('login');
        newHTML += '<div class="info"><span onclick="chatInsertReceiver(' + response[i][1] + ');">' + response[i][5] + '</span> is zojuist' + chatTimeDisplay(response[i]) + ' ingelogd.</div>';
        chatTalker = 0;
        if(chatReceiver > 0)
         chatReceiver = -1;
        status = true;
        if(chatIncoming > -1)
        {
         chatIncoming++;
         if(chatIncoming == 1)
          blink = true;
        }
        activity = response[i][3];
       }
       chatUsers['u' + response[i][1]] = response[i][5];
       chatPowers['u' + response[i][1]] = response[i][6];
      }
      break;
     case 8:
      if(chatOptionSounds && document.getElementById('statusselect').selectedIndex != 2 && (response[i][2] == 0 || response[i][1] == chatUser || response[i][2] == chatUser))
       soundManager.play('file');
      if(response[i][5] == '')
      {
       if(response[i][7] > 0)
       {
        newHTML += '<div class="info"><span onclick="chatInsertReceiver(' + response[i][1] + ');">' + chatUsers['u' + response[i][1]] + '</span> daagt' + chatTimeDisplay(response[i]) + ' ' + ((response[i][2] == 0) ? 'de eerste die reageert' : '<span onclick="chatInsertReceiver(' + response[i][2] + ');">' + chatUsers['u' + response[i][2]] + '</span>') + ' uit voor het spel ' + chatGames[response[i][6]][2] + '.';
        if(response[i][1] != chatUser && (response[i][2] == 0 || response[i][2] == chatUser))
         newHTML += '<br><input type="button" value="Accepteren" onclick="chatGameJoin(this, ' + response[i][2] + ', ' + response[i][7] + ', ' + response[i][1] + ', ' + response[i][6] + ');">';
        newHTML += '</div>';
       }
       else
       {
        if(response[i][7] == -chatUser)
         chatGamePlay(response[i][6], 1, response[i][1], chatGameKey);
        newHTML += '<div class="info"><span onclick="chatInsertReceiver(' + response[i][1] + ');">' + chatUsers['u' + response[i][1]] + '</span> heeft de uitnodiging van <span onclick="chatInsertReceiver(' + (-response[i][7]) + ');">' + chatUsers['u' + (-response[i][7])] + '</span> voor ' + chatGames[response[i][6]][2] + chatTimeDisplay(response[i]) + ' geaccepteerd.</div>';
       }
      }
      else
      {
       newHTML += '<div class="info"><span onclick="chatInsertReceiver(' + response[i][1] + ');">' + chatUsers['u' + response[i][1]] + '</span> ' + ((response[i][2] == 0) ? 'publiceert' : 'stuurt') + chatTimeDisplay(response[i]) + ' het bestand <a href="http://www.easy-upload.nl/index.php/file/' + response[i][5] + '" target="_blank">' + response[i][6] + '</a> (';
       if(response[i][7] >= 1000000)
       {
        var size = Math.round(response[i][7] / 10485.76) + '';
        newHTML += size.substr(0, size.length - 2) + ',' + size.substr(size.length - 2, 2) + ' MB)';
       }
       else if(response[i][7] >= 1000)
       {
        var size = Math.round(response[i][7] / 10.24) + '';
        newHTML += size.substr(0, size.length - 2) + ',' + size.substr(size.length - 2, 2) + ' kB)';
       }
       else
        newHTML += response[i][7] + ' bytes)';
       if(response[i][2] > 0)
        newHTML += ' naar <span onclick="chatInsertReceiver(' + response[i][2] + ');">' + chatUsers['u' + response[i][2]] + '</span>';
       newHTML += '.</div>';
      }
      chatTalker = 0;
      if(chatReceiver > 0)
       chatReceiver = -1;
      if(chatIncoming > -1)
      {
       chatIncoming++;
       if(chatIncoming == 1)
        blink = true;
      }
      activity = response[i][3];
    }
    if(response[i][1] > 0)
    {
     if(chatOnline['u' + response[i][1]] == null)
      status = true;
     else
      clearTimeout(chatOnline['u' + response[i][1]]);
     chatOnline['u' + response[i][1]] = setTimeout('chatForget(' + response[i][1] + ');', 180000);
    }
   }
  if(activity != '')
  {
   chatDate(activity);
   chatDelta = 3500;
  }
  if(newHTML != '')
  {
   var append = document.createElement('div');
   append.innerHTML = newHTML;
   document.getElementById('messages').appendChild(append);
  }
  if(status)
   chatStatus();
  document.getElementById('time').style.display = '';
  if(scroll)
   chatScrollSet();
  if(blink)
   chatBlink();
 }
 if(activity == '')
  chatDelta = Math.min(Math.floor(chatDelta * 1.1), 15000);
 if(document.getElementById('submit').disabled)
  chatEnable();
 chatTimeoutSet();
}

function chatReceive()
{
 clearTimeout(chatTimeout);
 //alert('Debug: ontvangstprocedure gestart');
 chatPost('im.php?l=' + chatLast, true);
 chatConnect.onreadystatechange = function()
 {
  if(chatRequestReady())
  {
   clearTimeout(chatAbortTimeout);
   if(chatRequestOK() && chatConnect.responseText != '')
   {
    chatAdd();
    if(chatRefreshNext)
    {
     chatRefreshNext = false;
     chatRefreshTimeout = setTimeout('chatRefreshNext = true;', 80000);
    }
   }
   else
   {
    if(chatUp)
    {
     chatDisable();
     chatRequestFail();
    }
    chatTimeout = setTimeout(chatReceive, 1000);
   }
  }
 }
 chatConnect.send('u=' + chatUser + '&' + ((chatRefreshNext) ? 'a' : 's') + '=' + chatSession + '&c=' + ((chatGaming) ? 3 : document.getElementById('statusselect').selectedIndex) + '&p=' + chatPower);
 chatAbortTimeout = setTimeout('chatRequestAbort(); chatRequestFail(); chatReceive();', 6000);
}

function chatSend()
{
 if(document.getElementById('text').value == '')
 {
  alert('Je hebt geen bericht ingevoerd.');
  document.getElementById('text').focus();
  chatFocus();
  return false;
 }
 var receiver = 0;
 if(document.getElementById('text').value.substr(0, 1) == '@')
 {
  if(!document.getElementById('text').value.match(/^@ ?[\w\- _\.]{2,20}:/))
  {
   alert('De syntax van je privébericht is ongeldig, gebruik achtereenvolgens een apenstaartje, de naam van de ontvanger, een dubbele punt en de tekst die je wilt verzenden, of klik de ontvanger aan in de lijst van online gebruikers.');
   document.getElementById('text').focus();
   chatFocus();
   return false;
  }
  var pos = document.getElementById('text').value.indexOf(':');
  var name = document.getElementById('text').value.substring(1, pos);
  while(name.substr(0, 1) == ' ')
   name = name.substr(1);
  var user;
  for(user in chatUsers)
   if(chatUsers[user].toLowerCase() == name.toLowerCase())
   {
    receiver = user.substr(1);
    break;
   }
  if(receiver == chatUser)
  {
   alert('Om met jezelf te praten, heb je deze chat niet nodig.');
   document.getElementById('text').focus();
   chatFocus();
   return false;
  }
  if(receiver == 0 || chatOnline['u' + receiver] == null)
  {
   alert(name + ' is op dit moment offline of deze schermnaam is niet geregistreerd.');
   document.getElementById('text').focus();
   chatFocus();
   return false;
  }  
  var message = document.getElementById('text').value.substr(pos + 1);
 }
 else
 {
  if(!chatBeActive())
  {
   document.getElementById('text').focus();
   chatFocus();
   return false;
  }
  var message = document.getElementById('text').value;
 }
 if(message == 'brb' && document.getElementById('statusselect').selectedIndex == 0)
  if(confirm('Wil je je status wijzigen in Afwezig? (Je kunt je status altijd wijzigen met de optie onder de onlinegebruikerslijst.)'))
   chatChangeStatusInternal(2);
 clearTimeout(chatTimeout);
 //alert('Debug: zendprocedure gestart');
 chatRequestAbort();
 chatDisable();
 chatPost('im.php?l=' + chatLast, true);
 chatConnect.onreadystatechange = function()
 {
  if(chatConnect.readyState >= 3 && chatRequestEvent)
   if(chatRequestOK())
   {
    document.getElementById('text').value = (receiver == 0) ? '' : '@ ' + chatUsers['u' + receiver] + ': ';
    clearTimeout(chatRefreshTimeout);
    chatRefreshNext = false;
    chatRefreshTimeout = setTimeout('chatRefreshNext = true;', 80000);
   }
  if(chatRequestReady())
  {
   clearTimeout(chatAbortTimeout);
   if(chatRequestOK() && chatConnect.responseText != '')
    chatAdd();
   else
   {
    chatRequestFail();
    chatReceive();
   }
  }
 }
 chatConnect.send('u=' + chatUser + '&s=' + chatSession + '&c=' + ((chatGaming) ? 3 : document.getElementById('statusselect').selectedIndex) + '&p=' + chatPower + '&r=' + receiver + '&t=' + chatEscape(message));
 chatAbortTimeout = setTimeout('chatRequestAbort(); chatRequestFail(); chatReceive();', 8000);
 return false;
}

function chatKick(who)
{
 if(chatPower > 1)
 {
  var length = prompt('Vul in hoelang ' + chatUsers['u' + who] + ' moet worden verbannen. Een positief getal betekent een hoeveelheid minuten, een negatief getal betekent een hoeveelheid dagen. Je kunt alleen gehele getallen invullen. Vul 0 in voor een permanente ban of een ban van nader te bepalen lengte.', '0');
  if(length != null && length != '')
  {
   var ip = confirm('Moeten de IP-adressen ook geblokkeerd worden?');
   var reason = prompt('Vul een reden voor de blokkering in die ' + chatUsers['u' + who] + ' te zien krijgt. Als je dit leeglaat, krijgt de ontvanger geen e-mail hierover. Leeglaten is sterk af te raden bij het blokkeren van online gebruikers.', '');
   if(reason != null)
   {
    clearTimeout(chatTimeout);
    chatRequestAbort();
    chatDisable();
    chatPost('ban.php', true);
    chatConnect.onreadystatechange = function()
    {
     if(chatRequestReady())
     {
      chatTimeoutSet();
      chatEnable();
     }
    }
    chatConnect.send('u=' + chatUser + '&s=' + chatSession + '&b=' + who + '&l=' + length + '&i=' + ((ip) ? '1' : '0') + '&w=' + chatEscape(reason));
   }
  }
 }
}

function chatClear()
{
 chatTalker = 0;
 chatReceiver = 0;
 document.getElementById('messages').innerHTML = '';
}

function chatSelectReceiver(window, one)
{
 if(document.getElementById(one).checked)
 {
  var text = '<select><option></option>';
  var count = 0;
  var users = [];
  var user;
  for(user in chatUsers)
   if(chatOnline[user] != null)
   {
    users[count] = chatUsers[user].toUpperCase() + chatUsers[user] + ':' + user.substr(1);
    count++;
   }
  users.sort();
  for(user in users)
  {
   var pos = users[user].lastIndexOf(':');
   var who = users[user].substr(pos + 1);
   if(who != chatUser)
   {
    var name = users[user].substring(pos / 2, pos);
    text += '<option value="' + who + '">' + name + '</option>';
   }
  }
  text += '</select>';
 }
 else
  var text = '&eacute;&eacute;n gebruiker';
 document.getElementById(window).getElementsByTagName('i')[0].innerHTML = text;
}

function chatUploadInit()
{
 document.getElementById('all').checked = true;
 document.getElementById('filetransfer').getElementsByTagName('i')[0].innerHTML = '&eacute;&eacute;n gebruiker';
 document.getElementById('zip').checked = false;
 chatUploadFile = 1;
 chatUploadCreate(0);
 chatUploadFiles = [false, false, false, false, false, false, false, false, false, false];
}

function chatUploadReset()
{
 document.getElementById('filetransfer').style.display = 'none';
 var table = document.getElementById('filelist').getElementsByTagName('table')[0];
 for(var j = table.rows.length - 2; j >= 0; j--)
  table.deleteRow(j);
 document.getElementById('upload').innerHTML = '';
 document.getElementById('zipblock').style.visibility = 'hidden';
 document.getElementById('zipname').value = '';
 chatUploadInit();
 document.getElementById('uploading').style.display = 'none';
 document.getElementById('filetransfer').getElementsByTagName('form')[0].style.display = '';
}

function chatUploadCreate(oldfile)
{
 var append = document.createElement('input');
 append.setAttribute('name', 'file' + chatUploadFile);
 append.setAttribute('type', 'file');
 append.setAttribute('size', 18);
 append.setAttribute('id', 'file' + chatUploadFile);
 if(append.addEventListener)
  append.addEventListener('change', chatUploadNew, false);
 else if(append.attachEvent)
  append.attachEvent('onchange', chatUploadNew);
 if(oldfile > 0)
  document.getElementById('file' + oldfile).style.display = 'none';
 document.getElementById('upload').appendChild(append);
}

function chatUploadNew()
{
 var table = document.getElementById('filelist').getElementsByTagName('table')[0];
 var row = table.insertRow(0);
 row.setAttribute('id', 'list' + chatUploadFile);
 var name = document.getElementById('file' + chatUploadFile).value;
 var pos = name.lastIndexOf('/');
 if(pos == -1)
  pos = name.lastIndexOf('\\');
 if(pos > -1)
  name = name.substr(pos + 1);
 row.insertCell(0).appendChild(document.createTextNode(name));
 var cell = row.insertCell(1);
 cell.setAttribute('width', 25);
 cell.innerHTML = '<img src="img/del.gif" onclick="chatUploadDelete(' + chatUploadFile + ');" alt="Verwijderen" title="Dit bestand uit deze lijst verwijderen">';
 if(table.rows.length > 2)
 {
  document.getElementById('zip').checked = true;
  document.getElementById('zipblock').style.visibility = '';
 }
 else if(document.getElementById('zipname').value == '')
 {
  var pos = name.lastIndexOf('.');
  if(pos > 0)
   name = name.substr(0, pos);
  document.getElementById('zipname').value = name;
 }
 var oldfile = chatUploadFile;
 do
 {
  if(chatUploadFile == 10)
   chatUploadFile = 1;
  else
   chatUploadFile++;
 }
 while(chatUploadFiles[chatUploadFile - 1]);
 if(oldfile == chatUploadFile)
  document.getElementById('file' + oldfile).style.visibility = 'hidden';
 else
  chatUploadCreate(oldfile);
 chatUploadFiles[oldfile - 1] = true;
}

function chatUploadDelete(file)
{
 var table = document.getElementById('filelist').getElementsByTagName('table')[0];
 for(var i = 0; i < table.rows.length - 1; i++)
  if(table.rows[i].id == 'list' + file)
  {
   table.deleteRow(i);
   break;
  }
 document.getElementById('upload').removeChild(document.getElementById('file' + file));
 if(chatUploadFiles[chatUploadFile - 1])
 {
  var oldfile = chatUploadFile;
  chatUploadFile = file;
  chatUploadCreate(oldfile);
 }
 if(table.rows.length == 1 && !document.getElementById('zip').checked)
  document.getElementById('zipname').value = '';
 chatUploadFiles[file - 1] = false;
}

function chatUploadZip()
{
 if(document.getElementById('filelist').getElementsByTagName('table')[0].rows.length > 2)
 {
  document.getElementById('zip').checked = true;
  alert('Je kunt deze optie niet uitschakelen als je meer dan één bestand tegelijk verzendt.');
 }
 else
 {
  document.getElementById('zipblock').style.visibility = (document.getElementById('zip').checked) ? '' : 'hidden';
  if(document.getElementById('zip').checked)
  {
   document.getElementById('zipname').focus();
   document.getElementById('zipname').select();
  }
 }
}

function chatUploadSubmit()
{
 if(document.getElementById('filelist').getElementsByTagName('table')[0].rows.length == 1)
 {
  alert('Je hebt geen bestanden geselecteerd.');
  return false;
 }
 if(document.getElementById('one').checked)
 {
  var select = document.getElementById('filetransfer').getElementsByTagName('select')[0];
  if(select.selectedIndex == 0)
  {
   alert('Je hebt niet aangegeven wie de bestanden moet ontvangen.');
   return false;
  }
 }
 else if(!chatBeActive())
  return false;
 if(document.getElementById('zip').checked && document.getElementById('zipname').value == '')
 {
  alert('Je hebt geen naam voor het zipbestand ingevoerd.');
  document.getElementById('zipname').focus();
  return false;
 }
 document.getElementById('filetransfer').getElementsByTagName('form')[0].style.display = 'none';
 document.getElementById('uploading').style.display = '';
 document.getElementById('uploadidentity').value = 'http://gmchat.blijbol.nl/eu.php?f=%s&n=%s&b=%d';
 return true;
}

function chatGamePlay(game, self, opponent, key)
{
 chatSelectedGame = game;
 chatGameOpponent = opponent;
 chatGaming = true;
 document.getElementById('games').style.display = 'none';
 document.getElementById('content').innerHTML = 'Bezig met laden...';
 document.getElementById('gamename').innerHTML = chatGames[game][2];
 document.getElementById('gamecredit').innerHTML = 'van <a href="http://' + chatGames[game][0] + '" target="_blank">' + chatGames[game][0] + '</a>&nbsp;';
 chatBlockSwitch(2);
 document.getElementById('inside').className = 'gaming';
 chatChangeStatusInternal(0);
 chatScrollSet();
 document.getElementById('online').innerHTML = '<span><img src="img/close.png" onclick="chatGameStop();" alt="&times;" title="Sluiten">&nbsp;</span><br><iframe src="http://' + chatGames[game][0] + chatGames[game][1] + '/join.php?n' + self + '=' + escape(chatUsers['u' + chatUser]) + '&amp;n' + (3 - self) + '=' + escape(chatUsers['u' + opponent]) + '&amp;s=' + self + '&amp;i=' + key + '" width="' + chatGames[game][3] + '" height="' + chatGames[game][4] + '" frameborder="0"></iframe>';
 chatConnectSecondary.abort();
 chatConnectSecondary.open('GET', 'gh.php?g=' + game, true);
 chatConnectSecondary.onreadystatechange = function()
 {
  if(chatConnectSecondary.readyState == 4 && chatBlockVisible(2))
   document.getElementById('content').innerHTML = chatConnectSecondary.responseText;
 }
 chatConnectSecondary.send(null);
}

function chatGameRestore()
{
 chatInviting = false;
 document.getElementById('pending').style.display = 'none';
 document.getElementById('games').getElementsByTagName('form')[0].style.display = '';
}

function chatGameQuit()
{
 document.getElementById('inside').className = '';
 chatGaming = false;
 chatGameRestore();
 chatStatus();
 chatTipRestore();
}

function chatGameStop()
{
 document.getElementById('online').innerHTML = '<img src="img/loading.gif" width="16" height="16" alt=""> Bezig met be&euml;indigen van het spel...';
 chatConnectSecondary.abort();
 chatConnectSecondary.open('POST', 'gs.php', true);
 chatConnectSecondary.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
 chatConnectSecondary.onreadystatechange = function()
 {
  if(chatConnectSecondary.readyState == 4 && chatGaming)
  {
   chatGameQuit();
   clearTimeout(chatTimeout);
   chatRequestAbort();
   chatReceive();
  }
 }
 chatConnectSecondary.send('u=' + chatUser + '&s=' + chatSession + '&g=' + chatSelectedGame + '&o=' + chatGameOpponent);
}

function chatGamePick(game)
{
 document.getElementById('games').getElementsByTagName('form')[0].action = 'http://' + chatGames[game][0] + chatGames[game][1] + '/create.php';
 chatSelectedGame = game;
}

function chatGameSubmit()
{
 var games = document.getElementById('games');
 if(chatSelectedGame == -1)
 {
  alert('Je hebt niet gekozen welk spel je wilt spelen.');
  return false;
 }
 if(document.getElementById('ione').checked)
 {
  if(games.getElementsByTagName('select')[0].selectedIndex == 0)
  {
   alert('Je hebt niet aangegeven met wie je het spel wilt spelen.');
   return false;
  }
 }
 else if(!chatBeActive())
  return false;
 games.style.display = 'none';
 document.getElementById('gamekill').disabled = true;
 games.getElementsByTagName('form')[0].style.display = 'none';
 document.getElementById('pending').style.display = '';
 chatInviting = true;
 chatGameOfflineTimeout = setTimeout('alert(\'De aanbieder van dit spel lijkt offline te zijn. Probeer het later nog eens of speel een spel van een andere aanbieder.\'); chatGameRestore();', 8000);
 return true;
}

function chatGameJoin(button, receiver, identifier, sender, game)
{
 if(chatGaming)
  alert('Je kunt maar één spel tegelijk spelen.');
 else if(chatInviting && sender != chatUser)
  alert('Je kunt geen uitnodigingen van anderen accepteren als je zelf een uitnodiging hebt verstuurd. Je kunt je eigen uitnodiging intrekken door terug te gaan naar het spelselectiescherm.');
 else if(chatOnline['u' + sender] == null)
  alert('Deze tegenstander is niet meer online.');
 else
 {
  button.disabled = true;
  chatConnectTertiary.abort();
  chatConnectTertiary.open('POST', 'gj.php', true);
  chatConnectTertiary.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
  chatConnectTertiary.onreadystatechange = function()
  {
   if(chatConnectTertiary.readyState == 4)
   {
    if(sender == chatUser)
    {
     document.getElementById('games').style.display = 'none';
     chatGameRestore();
    }
    else
    {
     if(chatConnectTertiary.responseText.substr(0, 1) == '1')
      chatGamePlay(game, 2, sender, chatConnectTertiary.responseText.substr(1));
     else
      alert('Helaas, je bent te laat om nog mee te kunnen doen aan dit spel. Misschien wil iemand anders een spel met je spelen?');
     chatReceive();
    }
   }
  }
  chatConnectTertiary.send('u=' + chatUser + '&s=' + chatSession + '&r=' + receiver + '&i=' + identifier + '&f=' + sender + '&g=' + game);
 }
}

function chatMemberlist(select)
{
 document.getElementById('members').innerHTML = 'Bezig met laden...';
 chatConnectTertiary.open('POST', 'ml.php', true);
 chatConnectTertiary.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
 chatConnectTertiary.onreadystatechange = function()
 {
  if(chatConnectTertiary.readyState == 4)
   document.getElementById('members').innerHTML = chatConnectTertiary.responseText;
 }
 chatConnectTertiary.send('u=' + chatUser + '&s=' + chatSession + '&o=' + select);
}

function chatBlockVisible(i)
{
 return document.getElementById('block').getElementsByTagName('h4')[i].style.display == '';
}

function chatBlockSwitch(i)
{
 var block = document.getElementById('block');
 var spans = block.getElementsByTagName('span');
 var heads = block.getElementsByTagName('h4');
 for(var j = 0; j < 4; j++)
 {
  spans[j].style.display = (j == i) ? '' : 'none';
  heads[j].style.display = (j == i) ? '' : 'none';
 }
}

function chatTip(pos)
{
 if(chatConnectSecondary.readyState == 0 || chatConnectSecondary.readyState == 4)
 {
  document.getElementById('content').innerHTML = 'Bezig met laden...';
  chatConnectSecondary.open('GET', 'tip.php?t=' + (chatCurrentTip + pos), true);
  chatConnectSecondary.onreadystatechange = function()
  {
   if(chatConnectSecondary.readyState == 4 && chatBlockVisible(0))
    if(chatConnectSecondary.responseText != '')
    {
     var data = eval('[' + chatConnectSecondary.responseText + '"]');
     chatCurrentTip = data[0];
     document.getElementById('content').innerHTML = data[1];
    }
  }
  chatConnectSecondary.send(null);
 }
}

function chatTipRestore()
{
 if(chatPollActive)
 {
  chatBlockSwitch(3);
  document.getElementById('content').innerHTML = chatPollResults();
 }
 else
 {
  chatBlockSwitch(0);
  chatCurrentTip = '';
  chatTip('r');
 }
}

function chatReport()
{
 if(document.getElementById('reporttext').value == '')
  alert('Je hebt geen melding ingevoerd.');
 else
 {
  document.getElementById('reporttext').disabled = true;
  document.getElementById('reportsubmit').disabled = true;
  chatConnectTertiary.abort();
  chatConnectTertiary.open('POST', 'sos.php', true);
  chatConnectTertiary.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
  chatConnectTertiary.onreadystatechange = function()
  {
   if(chatConnectTertiary.readyState == 4)
   {
    if(chatConnectTertiary.responseText == '1')
    {
     alert('Je melding is succesvol verzonden. Een moderator zal je melding bekijken en de zaak verder afhandelen.');
     document.getElementById('report').style.display = 'none';
     document.getElementById('reporttext').value = '';
    }
    else
     alert('Er is een probleem opgetreden. Je melding is niet verzonden.');
    document.getElementById('reporttext').disabled = false;
    document.getElementById('reportsubmit').disabled = false;
   }
  }
  chatConnectTertiary.send('u=' + chatUser + '&s=' + chatSession + '&l=' + chatLast + '&r=' + chatEscape(document.getElementById('reporttext').value));
 }
 return false;
}

function chatPollResults()
{
 var count = 0;
 var agreed = 0;
 var disagreed = 0;
 var user;
 for(user in chatPollVotes)
 {
  count++;
  if(chatPollVotes[user] === true)
   agreed++;
  else if(chatPollVotes[user] === false)
   disagreed++;
 }
 return chatPollQuestion + ((agreed + disagreed == 0) ? '' : '<span style="float: left; background-color: #0BB; width: ' + (10 * agreed / count) + 'em; height: 1em;"></span> &nbsp;' + Math.round(100 * agreed / (agreed + disagreed)) + '% eens<br><span style="float: left; clear: left; background-color: #B0B; width: ' + (10 * disagreed / count) + 'em; height: 1em;"></span> &nbsp;' + Math.round(100 * disagreed / (agreed + disagreed)) + '% oneens<br>') + '<small style="clear: left;">(' + (agreed + disagreed) + ' van ' + count + ' gestemd)</small>';
}

function chatPollVote(label, index, vote)
{
 if(!label.getElementsByTagName('input')[0].disabled)
 {
  label.parentNode.getElementsByTagName('input')[0].disabled = true;
  label.parentNode.getElementsByTagName('input')[1].disabled = true;
  if(!chatPollRunning || index < chatPollIndex)
  {
   label.getElementsByTagName('input')[0].checked = false;
   alert('Helaas, je bent te laat om nog mee te kunnen doen aan deze peiling.');
  }
  else
  {
   label.getElementsByTagName('input')[0].checked = true;
   chatPollActive = true;
   if(!chatGaming)
   {
    chatBlockSwitch(3);
    document.getElementById('content').innerHTML = chatPollResults();
   }
   chatConnectTertiary.abort();
   chatConnectTertiary.open('POST', 'pv.php', true);
   chatConnectTertiary.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
   chatConnectTertiary.onreadystatechange = function()
   {
    if(chatConnectTertiary.readyState == 4)
     chatReceive();
   }
   chatConnectTertiary.send('u=' + chatUser + '&s=' + chatSession + '&c=' + ((chatGaming) ? 3 : document.getElementById('statusselect').selectedIndex) + '&v=' + vote);
  }
 }
}