function createRequestObject() {
	var xmlHttp = false;
	// Mozilla, Opera, Safari sowie Internet Explorer 7
	if (typeof XMLHttpRequest != 'undefined') {
		xmlHttp = new XMLHttpRequest();
	}
	if (!xmlHttp) {
		// Internet Explorer 6 und älter
		try {
			xmlHttp  = new ActiveXObject("Msxml2.XMLHTTP");
		} catch(e) {
			try {
				xmlHttp  = new ActiveXObject("Microsoft.XMLHTTP");
			} catch(e) {
				xmlHttp  = false;
			}
		}
	}
	return xmlHttp;
}

function popUp(url, width, height, windowname) {
	if(windowname == 'undefined') {
		windowname = '_blank';
	}
	properties = 'width='+width+',height='+height+',location=no,menubar=no,resizable=yes,scrollbars=yes,status=no,toolbar=no';
	window.open(url, windowname, properties);
}

function spopUp(url, width, height, windowname) {
	if(windowname == 'undefined') {
		windowname = '_blank';
	}
	properties = 'width='+width+',height='+height+',location=no,menubar=no,resizable=no,scrollbars=no,status=no,toolbar=no';
	window.open(url, windowname, properties);
}

function add() {
	chatLine = document.getElementById('chat_input');
	if(chatLine.value != '') {
		requestObj = syncRequest('action=send&message='+escape(chatLine.value));
		if(requestObj.responseText != '') {
			alert(requestObj.responseText);
		}
	}
	chatSend();
	chatLine.value = '';
}

function imalive() {
	syncRequest('action=send');
	querychatterlist();
}

function afkAndBack(button) {
	if(afk) {
		afk = false;
		message = '/back';
		button.value = 'AFK';
	} else {
		afk = true;
		message = '/afk';
		button.value = 'Back';
	}
	request('action=send&message='+message);
	chatSend();
}

function chatSend() {
	chatRequest.abort();
	chatRequest.open('GET', 'chatengine.php?action=receive&from='+lastLine);
	chatRequest.onreadystatechange = chat_handleResponse;
	chatRequest.send(null);
}

function chat_handleResponse() {
    if(chatRequest.readyState == 4){
		response = chatRequest.responseText.split('|');
		if(chatRequest.responseText != '' && response[1] != undefined) {
			chatwindow = document.getElementById('chat_main');
			lastLine = response[0];
			message = response[1];
			chatwindow.innerHTML = message + chatwindow.innerHTML;
		}
		if(response[0] == 'X') {
			alert(response[1]);
		}
	}
}


function querychatterlist() {
	chatterlist.abort();
	chatterlist.open('GET', 'chatengine.php?action=getchatterlist');
	chatterlist.onreadystatechange = chatterlist_handleResponse;
	chatterlist.send('');
}

function chatterlist_handleResponse() {
    if(chatterlist.readyState == 4){
		if(chatterlist.responseText != '') {
			chatterlist_box = document.getElementById('chat_chatterlist');
			chatterlist_box.innerHTML = chatterlist.responseText;
		}
	}
}

function syncRequest(getString) {
	req.abort();
	req.open('GET', 'chatengine.php?'+getString, false);
	req.send('');
	return req;
}

function request(getString, answerTo) {
	req.abort();
	req.open('GET', 'chatengine.php?'+getString);
	req.onreadystatechange = function() { req_handleResponse(answerTo); };
	req.send('');
}

function req_handleResponse(answerTo) {
    if(req.readyState == 4){
		if(req.responseText != '') {
			response = req.responseText.split('|');
			if(response[0] == '!') {
				/**
				 * Befehl ausführen.
				 */
				switch (response[1]) {
					case 'r':
						location.reload();
						break;
					case '/':
						location.href = '/';
						break;
				}
			} else if(response[0] == 'A') {
				/**
				 * Alert ausgeben.
				 */
				alert(response[1]);
			} else {
				answerElement = document.getElementById(answerTo);
				answerElement.innerHTML = response[1];
			}
		}
	}
}


function checkWebcambar() {
	webcamBar = document.getElementById('chat_webcambar');
	if(webcamBar.styles) {
		showWebcamBar = syncRequest('action=showwebcambar');
		if(showWebcamBar == 1) {
			webcamBar.styles.visibility = 'visible';
			webcamBar.styles.display = 'block';
		} else {
			webcamBar.styles.visibility = 'hidden';
			webcamBar.styles.display = 'none';
		}
	}
}

function refresh() {
	chatSend();
	querychatterlist();
	// checkWebcambar();
}

function login() {
	request('action=login');
	chatSend();
	querychatterlist();
	// checkWebcambar();
}

function logout() {
	request('action=logout');
}


/* Autostart Code: */
var chatRequest = createRequestObject();
var chatterlist = createRequestObject();
var req = createRequestObject();
var lastLine = -1;
var refresh_interval = window.setInterval('refresh()', 5000);
var afk = false;

/*
if(top!=self)
	top.location=self.location;
*/
