
var Base64 = {
	_keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
	encode : function (input) {
		var output = "";
		var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
		var i = 0;
		input = Base64._utf8_encode(input);
		while (i < input.length) {
			chr1 = input.charCodeAt(i++);
			chr2 = input.charCodeAt(i++);
			chr3 = input.charCodeAt(i++);
			enc1 = chr1 >> 2;
			enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
			enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
			enc4 = chr3 & 63;
			if (isNaN(chr2)) {
				enc3 = enc4 = 64;
			} else if (isNaN(chr3)) {
				enc4 = 64;
			}
			output = output +
			this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) +
			this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4);
		}
		return output;
	},
	_utf8_encode : function (string) {
		string = string.replace(/\r\n/g,"\n");
		var utftext = "";
		for (var n = 0; n < string.length; n++) {
			var c = string.charCodeAt(n);
			if (c < 128) {
				utftext += String.fromCharCode(c);
			}
			else if((c > 127) && (c < 2048)) {
				utftext += String.fromCharCode((c >> 6) | 192);
				utftext += String.fromCharCode((c & 63) | 128);
			}
			else {
				utftext += String.fromCharCode((c >> 12) | 224);
				utftext += String.fromCharCode(((c >> 6) & 63) | 128);
				utftext += String.fromCharCode((c & 63) | 128);
			}
		}
		return utftext;
	}
}

function setCookie(c_name,value,exdays)
{
	var exdate=new Date();
	exdate.setDate(exdate.getDate() + exdays);
	var c_value=escape(value) + ((exdays==null) ? "" : "; expires="+exdate.toUTCString());
	document.cookie=c_name + "=" + c_value;
}

function getXMLHttpRequest() {
  var request = false;
  try {
    request = new XMLHttpRequest();
  } catch(err1) {
    try {
      request = new ActiveXObject('Msxml2.XMLHTTP');
    } catch(err2) {
      try {
        request = new ActiveXObject('Microsoft.XMLHTTP');
      } catch(err3) {
        request = false;
      }
    }
  }
  return request;
}

var cpage = getXMLHttpRequest();
var csend = getXMLHttpRequest();
var cusers = getXMLHttpRequest();
var cbox = document.getElementById("czat-box");
var cubox = document.getElementById("user-box");
var scr = document.getElementById("scroll");
var show = document.getElementById("show");
var last = '0';
var nick = document.getElementById("nick");
var text = document.getElementById("text");
var d=new Date();

function f_czat_ref() {
	if (cpage.readyState == 4) {
		if (cpage.status == 200) {
			var ix=cpage.responseText.indexOf("@#$");
			var num=cpage.responseText.slice(0,ix);
			var echo=cpage.responseText.slice(ix+3);
			if(num!='-1' && num!=''){
				last=num;
				cbox.innerHTML += echo;
				if(scr.checked){
					cbox.scrollTop = cbox.scrollHeight;
				}
			}
		}
		timeout = setTimeout("czat_ref()", 1500);
	}
}

function czat_ref(){
	if(show.checked){
		add = '&a=1&nick='+Base64.encode(nick.value.substr(0,30));
	} else {
		add = '&a=0';
	}
	cpage.open('GET', '?ajax=show&last='+last+add+'&'+d.getTime(), true);
	cpage.onreadystatechange = f_czat_ref;
	cpage.send(null);
	return false;
}



function f_czat_users() {
	if (cusers.readyState == 4) {
		if (cusers.status == 200) {
			cubox.innerHTML = cusers.responseText;
		}
		setTimeout("czat_users()", 5000);
	}
}

function czat_users(){
	cusers.open('GET', '?ajax=users&'+d.getTime(), true);
	cusers.onreadystatechange = f_czat_users;
	cusers.send(null);
	return false;
}



function f_czat_send() {
	if (csend.readyState == 4) {
		if (csend.status == 200) {
			clearTimeout(timeout);
			czat_ref();
		}
	}
}

function czat_send(){
	var snick = nick.value;
	var stext = text.value;
	if(snick=='' || snick.length>35){
		nick.className='error';
		return false;
	} else {
		nick.className='';
	}
	if(stext=='' || stext.length>300){
		text.className='error';
		return false;
	} else {
		text.className='';
	}
	
	var params = 'nick='+Base64.encode(snick)+'&text='+Base64.encode(stext);
	document.getElementById("text").value='';
	document.getElementById("text").focus();
	
	csend.open('POST', '?ajax=new', true);
	
	csend.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	csend.setRequestHeader("Content-length", params.length);
	csend.setRequestHeader("Connection", "close");
	
	csend.onreadystatechange = f_czat_send;
	csend.send(params);
	return false;
}


function czat_clear(){
	cbox.innerHTML='';
}

function czat_scr(){
	if(scr.checked){
		setCookie('scroll','true',300);
	} else{
		setCookie('scroll','false',300);
	}
}

function czat_show(){
	if(show.checked){
		setCookie('show','true',300);
	} else{
		setCookie('show','false',300);
	}
}

var timeout = setTimeout("czat_ref()", 0);
setTimeout("czat_users()", 0);
