var chatTimer, lagTimer, scrollTimer = null, getAllowed = true, putAllowed = true; microtime = 0, channelId = "489";//window.location.search.replace( /.*channel_id=(\d+).*/g, "$1") // create requests var getRequest = putRequest = null; function createGetRequest() { try { getRequest = new XMLHttpRequest(); } catch (trymicrosoft) { try { getRequest = new ActiveXObject( "Msxml2.XMLHTTP" ); } catch (othermicrosoft) { try{ getRequest = new ActiveXObject( "Microsoft.XMLHTTP" ); } catch (failed) { getRequest = false; } } } } function createPutRequest() { try { putRequest = new XMLHttpRequest(); } catch (trymicrosoft) { try { putRequest = new ActiveXObject( "Msxml2.XMLHTTP" ); } catch (othermicrosoft) { try{ putRequest = new ActiveXObject( "Microsoft.XMLHTTP" ); } catch (failed) { putRequest = false; } } } } function getMessages() { if (!getAllowed) { return; } getAllowed = false; // start lag timer / chat-reconnecter lagTimer = setTimeout( "getAllowed = true; getRequest = null; getMessages();", 10000 ); createGetRequest(); getRequest.open( "GET", "/index.php?task=chat&action=get_messages&channel_id=" + "489" + "µtime=" + microtime, true ); getRequest.onreadystatechange = showMessages; getRequest.send( null ); } function showMessages() { if (getRequest.readyState == 4) { if(getRequest.status == 200) { if (getRequest.responseText != "-1") { responseDataArray = eval( getRequest.responseText ); // check response consistency if (typeof responseDataArray == "undefined") { getAllowed = true; // reset lag timer clearTimeout( lagTimer ); getRequest = null; return; } // update microtime microtime = responseDataArray[0]; // draw user list $( "userList" ).innerHTML = responseDataArray[1].join( "" ); // update counter $( "userCounter" ).innerHTML = responseDataArray[1].length; if (responseDataArray[2].length) { // update chat window $( "chatWindow" ).innerHTML += responseDataArray[2]; // scroll it down on new messages chatScrollDown(); } getAllowed = true; // reset lag timer clearTimeout( lagTimer ); getRequest = null; } else { alert( "Channel does not anymore exist!" ); window.location = "/index.php"; } } } } function putMessage() { if (!putAllowed) { return; } putAllowed = false; createPutRequest(); parameters = "message=" + escape( encodeURIComponent( $( "chatMessage" ).value ) ); // disable input $( "chatMessage" ).blur(); $( "chatMessage" ).disabled = true; $( "chatButton" ).disabled = true; putRequest.open( "POST", "/index.php?task=chat&action=put_message&channel_id=" + "489", true ); putRequest.onreadystatechange = checkStatus; putRequest.setRequestHeader( "Content-type", "application/x-www-form-urlencoded" ); putRequest.setRequestHeader( "Content-length", parameters.length ); putRequest.setRequestHeader( "Connection", "close" ); putRequest.send( parameters ); } function checkStatus() { if (putRequest.readyState == 4) { if(putRequest.status == 200) { // empty and enable input $( "chatMessage" ).value = ""; $( "chatMessage" ).disabled = false; $( "chatMessage" ).focus(); // force get messages getMessages(); putAllowed = true; putRequest = null; } } } function chatScrollDown() { if (!scrollTimer) { scrollTimer = setInterval( "scrollDown()", 10 ); } } function scrollDown() { var chatWindow = $( "chatWindow" ); if (chatWindow.scrollTop < chatWindow.scrollHeight - chatWindow.offsetHeight + (isOpera) ? 10 : 0) { chatWindow.scrollTop += 10; } else { clearInterval( scrollTimer ); scrollTimer = null; } }