// Copyright Jeroen van der Gun
// Alle rechten voorbehouden

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)
{
// soundManager.useHTML5Audio = true;
 soundManager.useMovieStar = false;
 soundManager.audioFormats.mp3.required = false;
 soundManager.audioFormats.mp4.required = false;
 soundManager.onready(function()
 {
  chatSounds = [];
  var sounds = ['login', 'message', 'private', 'file', 'news', 'poll'];
  var sound;
  for(sound in sounds)
   chatSounds[sounds[sound]] = soundManager.createSound({'id': sounds[sound], 'url': 'sounds/' + sounds[sound] + ((soundManager.canPlayURL('sounds/' + sounds[sound] + '.wav')) ? '.wav' : '.mp3'), 'autoLoad': true, 'stream': false});
 });
 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;
}

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], [':))', /(?::|=)-?\)\)/g], [':((', /(?::|=)-?\(\(/g], ['#/', /#-?(?:\/|\()/g], ['):', /\)-?(?::|=)/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 = [['sandbak.nl', ':9001', 'Pong', 300, 160], ['games.jessedegger.nl', '/mijnenveger', 'Mijnenveger', 305, 250], ['zeeslag.infomijn.nl', '', 'Zeeslag', 360, 190], ['games.jessedegger.nl', '/4o1r', 'Vier op een rij', 355, 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)
      try{chatSounds['login'].play();}catch(e){}
     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 chatCredit(who, link)
{
 if(document.getElementById('inside').style.display == '')
 {
  chatProfileNew(who, link.innerHTML);
  return false;
 }
 return true;
}

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>' + ((chatPowers['u' + response[0][0]] > 2) ? 'Moderator' : 'Assistent-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')) + ((chatPowers['u' + response[0][0]] == 2) ? '; een moderator kan dit eventueel nog verlengen' : '') + '.<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)
        try{chatSounds['news'].play();}catch(e){}
       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))
        try{chatSounds[(isPoll) ? 'poll' : ((response[i][2] == 0) ? 'message' : 'private')].play();}catch(e){}
       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)
         try{chatSounds['login'].play();}catch(e){}
        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))
       try{chatSounds['file'].play();}catch(e){}
      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
      {
       var url = 'download/?f=' + response[i][7] + '&amp;u=' + chatUser + '&amp;s=' + chatSession;
       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 volgende bestand';
       if(response[i][2] > 0)
        newHTML += ' naar <span onclick="chatInsertReceiver(' + response[i][2] + ');">' + chatUsers['u' + response[i][2]] + '</span>';
       newHTML += ':<br><a href="' + url + '" title="Bestand ' + ((response[i][5] == 'attachment') ? 'opslaan' : 'openen') + '" target="_blank">' + response[i][6] + '</a><br>';
       switch(response[i][5])
       {
        case 'img': newHTML += '<img src="' + url + '" alt="">'; break;
        case 'audio': newHTML += '<audio src="' + url + '" controls preload="auto"></audio>'; break;
        case 'video': newHTML += '<video src="' + url + '" controls preload="auto"></video>';
       }
       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 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('filetransfer').getElementsByTagName('input')[0].value = '';
 document.getElementById('all').checked = true;
 document.getElementById('filetransfer').getElementsByTagName('i')[0].innerHTML = '&eacute;&eacute;n gebruiker';
}

function chatUploadReset()
{
 document.getElementById('filetransfer').style.display = 'none';
 chatUploadInit();
 document.getElementById('uploading').style.display = 'none';
 document.getElementById('filetransfer').getElementsByTagName('form')[0].style.display = '';
}

function chatUploadSubmit()
{
 if(document.getElementById('filetransfer').getElementsByTagName('input')[0].value == '')
 {
  alert('Je hebt geen bestanden geselecteerd.');
  return false;
 }
 var receiver = 0;
 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;
  }
  receiver = select.options[select.selectedIndex].value;
 }
 else if(!chatBeActive())
  return false;
 document.getElementById('filetransfer').getElementsByTagName('form')[0].style.display = 'none';
 document.getElementById('uploading').style.display = '';
 document.getElementById('uploadUser').value = chatUser;
 document.getElementById('uploadSession').value = chatSession;
 document.getElementById('uploadReceiver').value = receiver;
 document.getElementById('uploadName').value = chatUsers['u' + chatUser];
 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);
  }
 }
}
