var req;
var g_lastLine = "[Entered room.]";
var g_nick = "";
var g_delay = 5000;
var g_fingerprint = "";
var g_chair_max = 9;
var g_avatar_max = 37;
var g_bubble_max = 9;
var g_avatar_choice = 0;
var g_baseUrl = "/chat/process.php5?";
var g_updateTimeout = -1;
var g_assertTimeout = -1;
var g_room_tag = "";
function init(room_tag)
{
g_room_tag = room_tag;
if (g_room_tag != '')
{
showLayer("loginscreen");
}
}
function debug(s)
{
var elm = document.getElementById("debug");
if (elm)
{
elm.innerHTML = "Debug: " + s;
}
}
function debugUrl(s)
{
var elm = document.getElementById("debug");
if (elm)
{
elm.innerHTML = "Debug: " + s + "";
}
}
function showLayer(s)
{
var elm = document.getElementById(s);
if (elm)
{
elm.style.display = "block";
}
}
function hideLayer(s)
{
var elm = document.getElementById(s);
if (elm)
{
elm.style.display = "none";
}
}
function changeAvatar()
{
var elm = document.getElementById("avatarSelection");
g_avatar_choice = elm.value;
elm = document.getElementById("avatarchoice");
elm.src = "/chat/avatar/" + g_avatar_choice + ".gif";
}
/*
function showNextAvatar()
{
if (++g_avatar_choice > g_avatar_max)
{
g_avatar_choice = 1;
}
var elm = document.getElementById("avatarchoice");
elm.src = "/chat/avatar/" + g_avatar_choice + ".gif";
}
function showLastAvatar()
{
if (--g_avatar_choice < 1)
{
g_avatar_choice = g_avatar_max;
}
var elm = document.getElementById("avatarchoice");
elm.src = "/chat/avatar/" + g_avatar_choice + ".gif";
}
*/
function tryExit()
{
clearTimeout(g_updateTimeout);
g_lastLine = "[Entered room.]";
hideLayer("chatform");
var url = g_baseUrl + "nick=" + escape(g_nick) + "&fingerprint=" + escape(g_fingerprint) + "&mode=exit&room_tag=" + escape(g_room_tag) + getCachePrevent();
debugUrl(url);
g_fingerprint = "";
if (window.XMLHttpRequest) {
req = new XMLHttpRequest();
}
else if (window.ActiveXObject) {
req = new ActiveXObject("Microsoft.XMLHTTP");
}
req.onreadystatechange = processExit;
req.open("GET", url, true);
req.send(null);
}
function tryEnter()
{
if (g_avatar_choice >= 1)
{
var nick = "";
var nick_elm = document.getElementById("nickchoice");
nick = nick_elm.value;
g_nick = nick;
var url = g_baseUrl + "nick=" + escape(nick) + "&avatar=" + g_avatar_choice + "&mode=enter&room_tag=" + escape(g_room_tag) + getCachePrevent();
hideLayer("loginscreen");
debugUrl(url);
if (window.XMLHttpRequest) {
req = new XMLHttpRequest();
}
else if (window.ActiveXObject) {
req = new ActiveXObject("Microsoft.XMLHTTP");
}
req.onreadystatechange = processEnter;
req.open("GET", url, true);
req.send(null);
}
else
{
alert("Please choose an avatar first.");
}
}
function processEnter()
{
if (req.readyState == 4)
{
if (req.status == 200)
{
isSuccess = false;
var d = req.responseXML.getElementsByTagName("status");
if (d.length > 0)
{
for (var n = 0; n < d.length; n++)
{
if ( d[n].getAttribute("success") == 1 )
{
isSuccess = true;
g_fingerprint = d[n].firstChild.data;
// alert("You entered the chat bar.");
showLayer("chatform");
}
else
{
alert(d[n].firstChild.data);
}
}
}
if (isSuccess)
{
setTimeout( "updateChat()", 100 );
}
else
{
setTimeout( "showLayer('loginscreen')", 100 );
}
}
else
{
alert("Can't retrieve XML: " + req.statusText);
}
}
}
function processExit()
{
if (req.readyState == 4)
{
if (req.status == 200)
{
isSuccess = false;
var d = req.responseXML.getElementsByTagName("status");
if (d.length > 0)
{
for (var n = 0; n < d.length; n++)
{
if ( d[n].getAttribute("success") == 1 )
{
emptyChat();
// alert(d[n].firstChild.data);
}
}
}
setTimeout( "showLayer('loginscreen')", 100 );
}
else
{
alert("Can't retrieve XML: " + req.statusText);
}
}
}
function ucfirst(s)
{
return s.substr(0, 1).toUpperCase() + s.substr(1, s.length);
}
function emptyChat()
{
var elm;
for (i = 1; i <= g_chair_max; i++)
{
elm = document.getElementById("avatar" + i);
elm.src = "/chat/avatar/0.gif";
elm = document.getElementById("nick" + i);
elm.innerHTML = "";
}
for (i = 1; i <= g_bubble_max; i++)
{
elm = document.getElementById("bubble" + i);
elm.firstChild.data = "";
elm.style.display = "none";
}
document.title = ucfirst(g_room_tag) + " Chat at Google Blogoscoped";
}
function saidSomething()
{
if (g_lastLine == "")
{
var elm = document.getElementById("chatinput");
g_lastLine = elm.value;
if (g_lastLine != "")
{
clearTimeout(g_updateTimeout);
g_updateTimeout = -1;
elm.value = "";
updateChat();
}
}
return false;
}
function checkKeyLogin(e)
{
var returnKey = 13;
var characterCode = -1;
if(e && e.which)
{
e = e;
characterCode = e.which;
}
else
{
e = event;
characterCode = e.keyCode;
}
if(characterCode == returnKey)
{
tryEnter();
}
return false;
}
function checkKey(e)
{
var returnKey = 13;
var characterCode = -1;
if(e && e.which)
{
e = e;
characterCode = e.which;
}
else
{
e = event;
characterCode = e.keyCode;
}
if(characterCode == returnKey)
{
saidSomething();
}
return false;
}
function getCachePrevent()
{
return "&rand=" + escape( Math.round( Math.random() * 10000 ) );
}
function updateChat()
{
var url = g_baseUrl + "mode=update&nick=" + escape(g_nick) + "&line=" + escape(g_lastLine) + "&fingerprint=" + escape(g_fingerprint) + "&room_tag=" + escape(g_room_tag) + getCachePrevent();
debugUrl(url);
if (window.XMLHttpRequest) {
req = new XMLHttpRequest();
}
else if (window.ActiveXObject) {
req = new ActiveXObject("Microsoft.XMLHTTP");
}
req.onreadystatechange = processChat;
req.open("GET", url, true);
req.send(null);
}
function autolink(s)
{
var regURL = new RegExp("(http|https|ftp)://([-/.a-zA-Z0-9_~#%$?&=:200-377()]+)", "gi");
s = s.replace(regURL, "$1://$2");
return s;
}
function doReplace(s, a, b)
{
var regex = new RegExp(a, "g");
s = s.replace(regex, b);
return s;
}
function toXml(s)
{
s = doReplace(s, "&", "&");
s = doReplace(s, "<", "<");
s = doReplace(s, ">", ">");
return s;
}
function processChat()
{
if (req.readyState == 4)
{
if (req.status == 200)
{
var d = req.responseXML.getElementsByTagName("chatline");
if (d.length > 0)
{
for (var n = 0; n < d.length; n++)
{
var pos = d[n].getAttribute("position");
var bubbleN = d[n].getAttribute("bubble");
var bubble = document.getElementById("bubble" + bubbleN);
if (bubble)
{
if (pos == 0)
{
if (bubble.style.display != "none")
{
bubble.style.display = "none";
}
}
else
{
var said = d[n].firstChild.data;
said = toXml(said);
if (said == "[Entered room.]")
{
said = "" + said + "";
}
if (said.length < 35)
{
said = "
" + said;
}
said = autolink(said);
var saidOldHtml = doReplace(said, "
", "
");
var p_x = getPosX(pos) + "px";
if (bubble.style.left != p_x)
{
bubble.style.left = p_x;
}
if (bubble.innerHTML != said && bubble.innerHTML != saidOldHtml)
{
bubble.innerHTML = said;
}
if (bubble.style.display != "block")
{
bubble.style.display = "block";
}
}
}
}
}
d = req.responseXML.getElementsByTagName("chair");
var visitorCount = 0;
if (d.length > 0)
{
for (var n = 0; n < d.length; n++)
{
var pos = d[n].getAttribute("position");
var avatar = document.getElementById("avatar" + pos);
var sAvatar = "/chat/avatar/" + d[n].getAttribute("avatar") + ".gif";
if ( avatar.src.indexOf(sAvatar) == -1 ) {
avatar.src = sAvatar;
}
var nick = document.getElementById("nick" + pos);
var sNick = d[n].getAttribute("nick");
if (sNick != "")
{
visitorCount++;
}
if (nick.innerHTML != sNick)
{
nick.innerHTML = sNick;
}
}
}
document.title = ucfirst(g_room_tag) + " Chat With " + (visitorCount - 1);
g_lastLine = "";
g_updateTimeout = setTimeout("updateChat()", g_delay);
d = req.responseXML.getElementsByTagName("order");
if (d.length > 0)
{
for (var n = 0; n < d.length; n++)
{
switch ( d[n].getAttribute("action") )
{
case "exit":
clearTimeout(g_updateTimeout);
hideLayer("chatform");
emptyChat();
showLayer("loginscreen");
break;
}
}
}
}
}
}
function getPosX(pos)
{
var x = 0;
switch (pos + "")
{
case "1": x = -32; break;
case "2": x = 62; break;
case "3": x = 152; break;
case "4": x = 252; break;
case "5": x = 349; break;
case "6": x = 450; break;
case "7": x = 542; break;
case "8": x = 645; break;
case "9": x = 745; break;
}
return x;
}