/* aleCZAT by Andrzej Aleksiejuk (c) 2009 czat.andrzej.info.pl */
var o = false, g = false, _userName = '', _userHash = '', _userType = 0, _userMenu = '', _room = '', _color = '#000', _users = [], _scheduling = [], _messages = {'.':[]}, _newMessages = {'.':0}, _opened = '.', _login = 1, _screen = 'login', _salt = 0, _blinkTimer = {'.':0}, _timer = 0, _sounds = 0, _ignore = [], _titleTimer = 0, isIE = navigator.userAgent.toLowerCase().indexOf('msie') != -1;
/* reset chat */
function resetChat() {
	clearTimeout(_timer);
	o.abort();
	g.abort();
	_userName = '';
	_userHash = '';
	_userType = 0;
	_users = [];
	_scheduling = [];
	_room = '';
	_userMenu = '';
	_messages = {'.':[]};
	_opened = '.';
	_newMessages = {'.':0};
	_blinkTimer = {'.':0};
	_login = _config['requirePassword'] ? 2 : 1;
	_screen = 'login';
	_ignore = [];
	play('i');
}
/* information */
function showMessage(message, caption, link) {
	stopAnime();
	document.title = 'aleCzat - wiadomość';
	document.getElementById('information_message').innerHTML = message;
	document.getElementById('login').style.display = 'none';
	document.getElementById('loading').style.display = 'none';
	document.getElementById('information').style.display = 'block';
	if (caption) {
		document.getElementById('message_button').value = caption;
		document.getElementById('message_button').onclick = link;
		document.getElementById('message_button').style.display = 'block';
		document.getElementById('message_button').focus();
	} else
		document.getElementById('message_button').style.display = 'none';
	centerBox('information_inner');
	document.getElementById('body').style.display = 'none';
	if (_config['disableForm']) {
		document.getElementById('message').disabled = true;
		document.getElementById('button').disabled = true;
	}
	return false;
}
function hideMessage() {
	document.title = 'aleCzat';
	document.getElementById('body').style.display = 'block';
	document.getElementById('login').style.display = 'none';
	document.getElementById('loading').style.display = 'none';
	document.getElementById('information').style.display = 'none';
	if (_screen == 'chat') {
		if (_config['disableForm']) {
			document.getElementById('message').disabled = false;
			document.getElementById('button').disabled = false;
		}
		document.getElementById('message').focus();
		centerBox('body_inner');
	}
}
/* loading */
function showLoading() {
	document.title = 'aleCzat - ładowanie';
	_screen = 'loading';
	if (_config['disableForm']) {
		document.getElementById('message').disabled = true;
		document.getElementById('button').disabled = true;
	}
	document.getElementById('body').style.display = 'none';
	document.getElementById('login').style.display = 'none';
	document.getElementById('loading').style.display = 'block';
	document.getElementById('information').style.display = 'none';
	centerBox('loading_inner');
}
/* init chat */
function init(room) {
	showLoading();
	if (window.XMLHttpRequest) {
		o = new XMLHttpRequest();
		g = new XMLHttpRequest();
	} else if (window.ActiveXObject) {
		try {
			o = new ActiveXObject('MSXML2.XMLHTTP');
			g = new ActiveXObject('MSXML2.XMLHTTP');
		} catch(e) {
			o = false;
			g = false;
			try {
				o = new ActiveXObject('Microsoft.XMLHTTP');
				g = new ActiveXObject('Microsoft.XMLHTTP');
			} catch(e) {
				o = false;
				g = false;
			}
		}
	}
	if (!o)
		return showMessage('Brak obsługi XMLHttpRequest. Aplikacja zostanie zamknięta.');
	var i, str, length;
	if (!_config['smileys'])
		document.getElementById('smileys_button').style.display = 'none';
	else {
		str = '';
		var smiley;
		for (i = 0, length = _smileys.length; i < length; i++) {
			smiley = _smileys[i].split('.');
			str += '<a href="javascript:insertText(\' <' + smiley[0] + '> \')"><img src="smileys/' + _smileys[i] + '" title="' + smiley[0] + '" alt="' + smiley[0] + '" /></a>\n';
		}
		document.getElementById('smileys').innerHTML = str;
	}
	_config['defaultRoom'] = room || _config['defaultRoom'];
	if (_config['selectRoom']) {
		str = '';
		for (i = 0, length = _rooms.length; i < length; i++)
			str += '<li><a href="javascript:selectLoginRoom(\'' + _rooms[i] + '\')">' + _rooms[i] + '</a></li>';
		document.getElementById('login_list_room').innerHTML = str;
		selectLoginRoom(_config['defaultRoom']);
	} else
		document.getElementById('select_room').style.display = 'none';
	document.getElementById('register_link').href = _config['registerLink'];
	document.getElementById('password_link').href = _config['passwordLink'];
	if (!_config['registerLink'])
		document.getElementById('register_link').style.display = 'none';
	if (!_config['passwordLink'])
		document.getElementById('password_link').style.display = 'none';
	document.getElementById('message').onkeydown = checkKey;
	_login = _config['requirePassword'] ? 2 : 1;
	if (!_config['loginUser'])
		document.getElementById('button_user').style.display = 'none';
	else if (_config['requirePassword'])
		document.getElementById('button_guest').style.display = 'none';
	//togglePanel('options', 'smileys');
	_color = _config['randomColor'] ? _config['colors'][Math.floor(Math.random() * _config['colors'].length)] : _config['defaultColor'];
	setColor(_color);
	if (isIE)
		_config['sounds'] = 0;
	if (!_config['sounds']) {
		document.getElementById('sounds').style.display = 'none';
		_sounds = 1;
	} else
		document.getElementById('mySounds').innerHTML = '<object class="playerpreview" id="myFlash" type="application/x-shockwave-flash" data="player_mp3_js.swf" width="1" height="1"><param name="movie" value="player_mp3_js.swf" /><param name="AllowScriptAccess" value="always" /><param name="FlashVars" value="listener=myListener&amp;interval=500&amp;enabled=true" /></object>';
	switchSounds();
	setFont(1);
	loginWindow();
}
/* Ajax connection */
function connect(url, post, func) {
	o.open('POST', url + '?' + _salt++);
	o.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	o.onreadystatechange = function () {
		if (o.readyState == 4) {
			if (o.status == 200)
				func();
			else if (o.status != 0) {
				resetChat();
				showMessage('Status: ' + o.status + '. Nie można pobrać danych. Aplikacja kończy działanie.');
			}
		}
	};
	o.send(post + '&u=' + _userName + '&e=' + _userHash);
}
/* login user */
function loginWindow() {
	document.title = 'aleCzat - logowanie';
	_screen = 'login';
	document.getElementById('login').style.display = 'block';
	document.getElementById('loading').style.display = 'none';
	document.getElementById('information').style.display = 'none';
	toggleLogin(_login);
	centerBox('login_inner');
	fuckIE();
}
function loginUser() {
	document.getElementById('login').style.display = 'none';
	showLoading();
	if (_login == 1) {
		var login = document.getElementById('guest_login').value;
		var room = document.getElementById('login_room').value;
		if (login == '')
			return showMessage('Nick jest wymagany', 'Wróć', loginWindow);
		if (!login.match(/^[a-zA-Z0-9_-]+$/))
			return showMessage('Nick musi się składać ze znaków alfanumerycznych i/lub myślnika oraz znaku podkreślenia.', 'Wróć', loginWindow);
		if (!login.match(/^[a-zA-Z0-9_-]{2,20}$/))
			return showMessage('Nick musi mieć minimum 2 znaki i maksimum 20 znaków.', 'Wróć', loginWindow);
		connect('log.php', 'login=' + login + '&room=' + room + '&color=' + _color.substr(1), newResponse);
	} else if (_login == 2) {
		var login = document.getElementById('user_login').value;
		var passwd = document.getElementById('user_password').value;
		var room = document.getElementById('login_room').value;
		if (login == '')
			return showMessage('Login jest wymagany', 'Wróć', loginWindow);
		if (!login.match(/^[a-zA-Z0-9_-]+$/))
			return showMessage('Login musi się składać ze znaków alfanumerycznych i/lub myślnika oraz znaku podkreślenia.', 'Wróć', loginWindow);
		if (!login.match(/^[a-zA-Z0-9_-]{2,20}$/))
			return showMessage('Login musi mieć minimum 2 znaki i maksimum 20 znaków.', 'Wróć', loginWindow);
		if (passwd == '')
			return showMessage('Hasło jest wymagane', 'Wróć', loginWindow);
		connect('log.php', 'login=' + login + '&passwd=' + encodeURI(passwd).replace('+', '%2B') + '&room=' + room + '&color=' + _color.substr(1), newResponse);
	}
}
/* reload page */
function reloadPage() {
	window.location = '.';
}
/* change room */
function openRoom(room) {
	toggleRoomList('', 1);
	if (room == _room) {
		openConversation('.');
		return;
	}
	showLoading();
	connect('rm.php', 'room=' + room, newResponse);
}
/* login and change room response */
function newResponse() {
	var r = eval('(' + o.responseText + ')');
	switch (r.code) {
		case 1:
			_userName = r.user;
			_userHash = r.e;
			_userType = r.type;
			_room = r.room;
			_users = r.users;
			_messages = r.messages;
			_opened = '.';
			_newMessages = {'.':0};
			updateUsers();
			openConversation('.');
			_screen = 'chat';
			hideMessage();
			document.title = 'aleCzat - pokój: ' + _room;
			fuckIE();
			_timer = setTimeout('getMessages();', _config['timeOut'] * 1000);
		return;
		case 2:
			resetChat();
			showMessage(r.message, 'OK', reloadPage);
		return;
	}
}
/* send message */
function sendMessage() {
	var text = document.getElementById('message').value;
	text = text.replace(/[\n\t]/g, ' ');
	text = text.replace(/[ ]+/, ' ');
	text = text.replace(/^\s/, '');
	text = text.replace(/\s$/, '');
	if (!text && document.getElementById('message').disabled == false) {
		document.getElementById('message').focus();
		return;
	}
	var url = '';
	if (text.substr(0, 1) == _config['specialChar']) {
		var arr = text.split(' ');
		switch (arr[0].substr(1)) {
			case _config['specialPermit']:
				if (_userType < 3)
					break;
				if (!_config['userPermit'])
					break;
				url = 'cmd=permit&user=' + arr[1];
			case _config['specialKick']:
				if (_userType < 2)
					break;
				if (!url)
					url = 'cmd=kick&user=' + arr[1];
			case _config['specialIgnore']:
				if (!url)
					url = 'cmd=ignore&user=' + arr[1];
				if (typeof arr[1] == 'undefined')
					return showMessage('Brak nazwy użytkownika', 'Wróć', hideMessage);
				var ok = false;
				for (var i = 0, length = _users.length; i < length; i++) {
					if (_users[i][0] == arr[1]) {
						ok = true;
						break;
					}
				}
				if (!ok)
					return showMessage('Użytkownik nie istnieje lub wyszedł', 'Wróć', hideMessage);
			break;
			case _config['specialBan']:
				if (_userType < 3)
					break;
				url = 'cmd=ban';
			case _config['specialMute']:
				if (_userType < 2)
					break;
				if (!url)
					url = 'cmd=mute';
				if (typeof arr[2] == 'undefined')
					return showMessage('Brak nazwy użytkownika lub czasu. Dozwolone formaty komendy:<br />' + arr[0] + ' 1' + _config['specialMins'] + ' ~użytkownik<br />' + arr[0] + ' 1' + _config['specialHours'] + ' ~użytkownik<br />' + arr[0] + ' 1' + _config['specialDays'] + ' ~użytkownik<br />Zmieniają odpowiedno długość trwania blokady na ilość minut, godzin lub dni.', 'Wróć', hideMessage);
				var time, user = false;
				if ((time = arr[1].match(new RegExp('^([0-9]+)' + _config['specialMins'] + '$', 'i'))) !== null) {
					time = time[1] * 60;
					user = arr[2];
				} else if ((time = arr[1].match(new RegExp('^([0-9]+)' + _config['specialHours'] + '$', 'i'))) !== null) {
					time = time[1] * 3600;
					user = arr[2];
				} else if ((time = arr[1].match(new RegExp('^([0-9]+)' + _config['specialDays'] + '$', 'i'))) !== null) {
					time = time[1] * 86400;
					user = arr[2];
				} else if ((time = arr[2].match(new RegExp('^([0-9]+)' + _config['specialMins'] + '$', 'i'))) !== null) {
					time = time[1] * 60;
					user = arr[1];
				} else if ((time = arr[2].match(new RegExp('^([0-9]+)' + _config['specialHours'] + '$', 'i'))) !== null) {
					time = time[1] * 3600;
					user = arr[1];
				} else if ((time = arr[2].match(new RegExp('^([0-9]+)' + _config['specialDays'] + '$', 'i'))) !== null) {
					time = time[1] * 86400;
					user = arr[1];
				} else if ((time = arr[2].match(new RegExp('^([0-9]+)$', 'i'))) !== null) {
					time = time[1] * 86400;
					user = arr[1];
				}
				if (!user)
					return showMessage('Nieprawidłowy format komendy. Dozwolone przykłady:<br />' + arr[0] + ' 1' + _config['specialMins'] + ' ~użytkownik<br />' + arr[0] + ' 1' + _config['specialHours'] + ' ~użytkownik<br />' + arr[0] + ' 1' + _config['specialDays'] + ' ~użytkownik<br />Zmieniają odpowiedno długość trwania blokady na ilość minut, godzin lub dni.', 'Wróć', hideMessage);
				if (time != 0) {
					var ok = false;
					for (var i = 0, length = _users.length; i < length; i++) {
						if (_users[i][0] == user) {
							ok = true;
							break;
						}
					}
					if (!ok)
						return showMessage('Użytkownik nie istnieje lub wyszedł', 'Wróć', hideMessage);
				}
				url += '&user=' + user + '&time=' + time;
			break;
			case _config['specialList']:
				if (_userType < 3)
					break;
				url = 'cmd=list';
			break;
			case _config['specialBanlist']:
				if (_userType < 3)
					break;
				url = 'cmd=banlist';
			break;
			case _config['specialMutelist']:
				if (_userType < 2)
					break;
				url = 'cmd=mutelist';
			break;
			case _config['specialTopic']:
				if (_userType < 3)
					break;
				if (!_config['topics'])
					return showMessage('Wyświetlanie tematów jest wyłączone', 'Wróć', hideMessage);
				arr.shift();
				arr = arr.join(' ');
				if (!arr)
					return showMessage('Brak tematu', 'Wróć', hideMessage);
				url = 'cmd=topic&topic=' + encodeURI(arr).replace('+', '%2B');
			break;
		}
	}
	if (!url && text.length > _config['maxLength'])
		return showMessage('Wiadomość jest za długa. Maksymalnie ' + _config['maxLength'] + ' znaków', 'Wróć', hideMessage);
	if (_config['disableForm']) {
		document.getElementById('message').disabled = true;
		document.getElementById('button').disabled = true;
	} else
		document.getElementById('message').value = '';
	if (url)
		connect('spc.php', url, sendMessageResponse);
	else {
		_scheduling[_scheduling.length] = 'text=' + encodeURI(text).replace('+', '%2B') + '&color=' + _color.substr(1) + (_opened != '.' ? '&user=' + _opened : '');
		sendScheduled();
	}
}
function sendScheduled() {
	if (_scheduling == '' || o.readyState % 4 != 0)
		return;
	connect('msg.php', _scheduling.shift(), sendMessageResponse);
}
function sendMessageResponse() {
	var r = eval('(' + o.responseText + ')');
	switch (r.code) {
		case 1:
			newUpdate(r.messages);
			getMessages();
			if (_config['disableForm']) {
				document.getElementById('message').disabled = false;
				document.getElementById('button').disabled = false;
				document.getElementById('message').value = '';
			} else
				sendScheduled();
		break;
		case 2:
			resetChat();
			showMessage(r.message, 'OK', reloadPage);
		break;
	}
}
function checkKey(e) {
	e = e || window.event;
	if (e.keyCode == 13) {
		sendMessage();
		return false;
	}
}
/* get messages */
function getMessages() {
	if (g.readyState % 4 != 0)
		return;
	clearTimeout(_timer);
	g.open('POST', 'get.php?' + _salt++);
	g.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	g.onreadystatechange = function () {
		if (g.readyState == 4) {
			if (g.status == 200) {
				if (g.responseText != '+') {
					var r = eval('(' + g.responseText + ')');
					switch (r.code) {
						case 1:
							newUpdate(r.messages);
						break;
						case 2:
							resetChat();
							showMessage(r.message, 'OK', reloadPage);
						return;
					}
				}
				_timer = setTimeout('getMessages();', _config['timeOut'] * 1000);
			} else if (g.status != 0) {
				resetChat();
				showMessage('Status: ' + g.status + '. Nie można pobrać danych. Aplikacja kończy działanie.');
			}
		}
	};
	g.send('u=' + _userName + '&e=' + _userHash);
}
/* update conversation */
function updateBox() {
	var str = '';
	if (_opened == '.') {
		document.title = 'aleCzat - pokój: ' + _room;
		str += '<div class="box_info"><span>::</span> Dołączyłeś do pokoju: <strong>' + _room + '</strong></div>';
	} else
		document.title = 'aleCzat - pokój: ' + _room + ' - rozmowa: ' + _opened;
	var messages = _messages[_opened];
	for (var i = 0, length = messages.length; i < length; i++) {
		switch (messages[i][0]) {
			case 1:
				if (_config['time'])
					str += '<div class="box_message"><div class="date">[' + messages[i][1] + ']</div><div class="message1" style="color: #' + messages[i][2] + ';">' + (_userName == messages[i][3] ? '<span class="user">' + messages[i][3] + ':</span>' : '<a href="javascript:insertText(\'' + messages[i][3] + ': \')" class="user" style="color: #' + messages[i][2] + ';">' + messages[i][3] + ':</a>') + ' ' + messages[i][4] + '</div></div>';
				else
					str += '<div class="box_message"><div class="message2" style="color: #' + messages[i][2] + ';">' + (_userName == messages[i][3] ? '<span class="user">' + messages[i][3] + ':</span>' : '<a href="javascript:insertText(\'' + messages[i][3] + ': \')" class="user" style="color: #' + messages[i][2] + ';">' + messages[i][3] + ':</a>') + ' ' + messages[i][4] + '</div></div>';
			break;
			case 2:
				if (_config['time'])
					str += '<div class="box_message"><div class="date">[' + messages[i][1] + ']</div><div class="message1" style="color: #' + messages[i][2] + ';"><span class="user">' + messages[i][3] + ':</span> ' + messages[i][4] + '</div></div>';
				else
					str += '<div class="box_message"><div class="message2" style="color: #' + messages[i][2] + ';"><span class="user">' + messages[i][3] + ':</span> ' + messages[i][4] + '</div></div>';
			break;
			case 3:
				switch (messages[i][2]) {
					case '1': str += '<div class="box_info"><span>::</span> Dołączył: ' + (_userName == messages[i][1] ? '<span class="user">' + messages[i][1] + '</span>' : '<a href="javascript:insertText(\'' + messages[i][1] + ': \')" class="user">' + messages[i][1] + '</a>') + '</div>'; break;
					case '2': str += '<div class="box_info"><span>::</span> Odchodzi: <span class="user">' + messages[i][1] + '</span></div>'; break;
					case '3a': str += '<div class="box_info"><span>::</span> Użytkownik <span class="user">' + messages[i][1] + '</span> został zbanowany</div>'; break;
					case '3b': str += '<div class="box_info"><span>::</span> Ban został zdjęty z użytkownika <span class="user">' + messages[i][1] + '</span></div>'; break;
					case '4a': str += '<div class="box_info"><span>::</span> Użytkownik <span class="user">' + messages[i][1] + '</span> został uciszony</div>'; break;
					case '4b': str += '<div class="box_info"><span>::</span> Ograniczenie czatowania zostało zdjęte z użytkownika <span class="user">' + messages[i][1] + '</span></div>'; break;
					case '5a': str += '<div class="box_info"><span>::</span> Zezwolenie dodawania linków jest aktywne dla <span class="user">' + messages[i][1] + '</span></div>'; break;
					case '5b': str += '<div class="box_info"><span>::</span> Zezwolenie dodawania linków jest nieaktywne dla <span class="user">' + messages[i][1] + '</span></div>'; break;
					case '6': str += '<div class="box_info"><span>::</span> Użytkownik <span class="user">' + messages[i][1] + '</span> został wyrzucony</div>'; break;
					case '7a': str += '<div class="box_info"><span>::</span> Ignorowanie aktywne dla <span class="user">' + messages[i][1] + '</span></div>'; break;
					case '7b': str += '<div class="box_info"><span>::</span> Ignorowanie nieaktywne dla <span class="user">' + messages[i][1] + '</span></div>'; break;
				}
			break;
			case 4:
				str += '<div class="box_info"><span>::</span> ' + messages[i][1] + '</div>';
			break;
			case 5:
				if (messages[i][1] != '')
					str += '<div class="box_topic"><div class="label">:: Temat:</div><div class="topic">' + messages[i][1] + '</div></div>';
			break;
		}
	}
	document.getElementById('content').innerHTML = str;
	document.getElementById('content').scrollTop = document.getElementById('content').scrollHeight + 1024;
}
/* update users */
function newUpdate(messages) {
	var i, j, n, users, ignore, count, el, length, length2, anime = false, color;
	for (var index in messages) {
		if (typeof _messages[index] == 'undefined') {
			_messages[index] = [];
			_newMessages[index] = 0;
			_blinkTimer[index] = 0;
		}
		count = _messages[index].length;
		if (index == '.') {
			for (i = 0, length = messages['.'].length; i < length; i++) {
				switch (messages['.'][i][0]) {
					case 1:
						messages['.'][i][1] = getDate(messages['.'][i][1]);
						messages['.'][i][4] = createText(messages['.'][i][4]);
						for (j = 0, length2 = _users.length; j < length2; j++) {
							if (_users[j][0] == messages['.'][i][3] && _users[j][0] != _userName) {
								_users[j][1] = messages['.'][i][2];
								document.getElementById('user' + messages['.'][i][3]).firstChild.style.color = '#' + messages['.'][i][2];
							}
						}
					break;
					case 3:
						switch (messages['.'][i][2]) {
							case '1':
								color = _config['randomColor'] ? _config['colors'][Math.floor(Math.random() * _config['colors'].length)] : _config['defaultColor'];
								_users[_users.length] = [messages['.'][i][1], color.substr(1)];
								el = document.createElement('div');
								el.id = 'user' + messages['.'][i][1];
								el.innerHTML = '<a href="javascript:openMenu(\'' + messages['.'][i][1] + '\')" style="color: ' + color + ';">' + messages['.'][i][1] + '</a>';
								document.getElementById('users').appendChild(el);
								_ignore[messages['.'][i][1]] = 0;
							break;
							case '2':
							case '3a':
							case '6':
								n = 0;
								users = [];
								ignore = [];
								for (j = 0, length2 = _users.length; j < length2; j++) {
									if (_users[j][0] != messages['.'][i][1]) {
										users[n++] = _users[j];
										ignore[_users[j][0]] = _ignore[_users[j][0]];
									} else
										document.getElementById('users').removeChild(document.getElementById('user' + messages['.'][i][1]));
								}
								_users = users;
								_ignore = ignore;
								if (_userMenu == messages['.'][i][1]) {
									document.getElementById('user_menu').style.display = 'none';
									_userMenu = '';
								}
							break;
						}
					break;
				}
				if (messages['.'][i][0] == 1) {
					if (messages['.'][i][3] != _userName)
						anime = true;
				} else
					anime = true;
				_messages['.'][count++] = messages['.'][i];
				if (_opened != '.')
					_newMessages['.']++;
			}
			play('m');
		} else {
			for (i = 0, length = messages[index].length; i < length; i++) {
				switch (messages[index][i][0]) {
					case 2:
						messages[index][i][1] = getDate(messages[index][i][1]);
						messages[index][i][4] = createText(messages[index][i][4]);
					break;
					case 3:
						switch (messages[index][i][2]) {
							case '7a':
								_ignore[messages[index][i][1]] = 1;
							break;
							case '7b':
								_ignore[messages[index][i][1]] = 0;
							break;
						}
						ignore = _userMenu;
						_userMenu = '';
						openMenu(ignore);
					break;
				}
				if (messages[index][i][0] == 2) {
					if (messages[index][i][3] != _userName)
						anime = true;
				} else
					anime = true;
				_messages[index][count++] = messages[index][i];
				if (_opened != index)
					_newMessages[index]++;
			}
			play('c');
		}
		if (anime)
			startAnimation();
	}
	updateRoom();
	updatePrivs();
	updateBox();
}
/* toggle main - priv */
function openConversation(user) {
	_opened = user;
	if (typeof _messages[user] == 'undefined')
		_messages[user] = [];
	_newMessages[user] = 0;
	_blinkTimer[user] = 0;
	if (_opened == '.') {
		document.getElementById('priv_bar').style.display = 'none';
		document.getElementById('content').className = 'main';
	} else {
		document.getElementById('priv_bar').style.display = 'block';
		for (var i = 0, length = _users.length; i < length; i++) {
			if (_users[i][0] == _opened)
				var color = _users[i][1];
		}
		document.getElementById('priv_title').innerHTML = '<div class="box_info"><span>::</span> Rozmawiasz z: <span class="user" style="color: #' + color + ';">' + _opened + '</span></div>';
		document.getElementById('content').className = 'priv';
	}
	updateRoom();
	updatePrivs();
	updateBox();
	if (_screen == 'chat' && document.getElementById('message').disabled == false)
		document.getElementById('message').focus();
}
function closeConversation() {
	var messages = [], newMessages = [], blinkTimer = [];
	for (var index in _messages) {
		if (index != _opened) {
			messages[index] = _messages[index];
			newMessages[index] = _newMessages[index];
			blinkTimer[index] = _blinkTimer[index];
		}
	}
	_messages = messages;
	_newMessages = newMessages;
	_blinkTimer = blinkTimer;
	openConversation('.');
}
/* update users list */
function updateUsers() {
	var str = '<div id="user_menu"><div id="user_menu_inner"></div></div>';
	for (var i = 0, length = _users.length; i < length; i++) {
		if (_userName == _users[i][0]) {
			if (_userType < 2)
				str += '<div id="user' + _userName + '" class="selected"><span style="color: ' + _color + ';">' + _userName + '</span></div>';
			else
				str += '<div id="user' + _userName + '" class="selected"><a href="javascript:openMenu(\'' + _userName + '\')" style="color: ' + _color + ';">' + _userName + '</a></div>';
		} else
			str += '<div id="user' + _users[i][0] + '"><a href="javascript:openMenu(\'' + _users[i][0] + '\')" style="color: #' + _users[i][1] + ';">' + _users[i][0] + '</a></div>';
	}
	document.getElementById('users').innerHTML = str;
}
/* update privs list */
function updatePrivs() {
	var str = '';
	for (var index in _messages) {
		if (index != '.') {
			if (index == _opened)
				str += '<div class="selected" id="priv' + index + '">' + index + '</div>';
			else if (_newMessages[index])
				str += '<div><a href="javascript:openConversation(\'' + index + '\')" class="new" id="priv' + index + '">' + index + '</a> (' + _newMessages[index] + ')</div>';
			else
				str += '<div><a href="javascript:openConversation(\'' + index + '\')">' + index + '</a></div>';
		}
	}
	document.getElementById('privs').innerHTML = (str == '' ? '<div class="none">Brak rozmów prywatnych</div>' : str);
	for (index in _newMessages) {
		if (_newMessages[index] != 0)
			_blinkTimer[index] = setBlinking(index, 1);
	}
}
/* update room info */
function updateRoom() {
	var str = '';
	for (var i = 0, length = _rooms.length; i < length; i++)
		str += '<li><a href="javascript:openRoom(\'' + _rooms[i] + '\')">' + _rooms[i] + '</a></li>';
	document.getElementById('list_room').innerHTML = str;
	if (_newMessages['.']) {
		document.getElementById('selected_room').innerHTML = '<a href="javascript:openConversation(\'.\')" class="new">' + _room + '</a> (' + _newMessages['.'] + ')';
		_blinkTimer['.'] = setBlinking('.', 1);
	} else
		document.getElementById('selected_room').innerHTML = '<a href="javascript:openConversation(\'.\')">' + _room + '</a>';
	toggleRoomList('', 1);
}
/* open user menu */
function openMenu(user) {
	if (_userMenu == user) {
		document.getElementById('user_menu').style.display = 'none';
		_userMenu = '';
		if (document.getElementById('message').disabled == false)
			document.getElementById('message').focus();
		return;
	}
	var str = '';
	if (user == _userName)
		switch (_userType) {
			case 4:
				str = '<a href="adr.php" target="_blank">Pokoje</a><br />' + str;
				str = '<a href="adm.php" target="_blank">Administracja</a><br />' + str;
			case 3:
				if (_config['topics'])
					str = '<a href="javascript:insertText(\'' + _config['specialChar'] + _config['specialTopic'] + ' \', true)">Zmień temat</a><br />' + str;
				str = '<a href="javascript:insertText(\'' + _config['specialChar'] + _config['specialList'] + '\', true)">Lista admin&amp;mod</a><br />' + str;
				str = '<a href="javascript:insertText(\'' + _config['specialChar'] + _config['specialBanlist'] + '\', true)">Lista zbanowanych</a><br />' + str;
			case 2:
				str = '<a href="javascript:insertText(\'' + _config['specialChar'] + _config['specialMutelist'] + '\', true)">Lista uciszonych</a><br />' + str;
		}
	else
		switch (_userType) {
			case 4:
			case 3:
				if (_config['userPermit'])
					str = '<a href="javascript:insertText(\'' + _config['specialChar'] + _config['specialPermit'] + ' ' + user + '\', true)">Zezwól na linki</a><br />' + str;
				str = '<a href="javascript:insertText(\'' + _config['specialChar'] + _config['specialBan'] + ' ' + user + ' 1\', true)">Banuj użytkownika</a><br />' + str;
			case 2:
				str = '<a href="javascript:insertText(\'' + _config['specialChar'] + _config['specialMute'] + ' ' + user + ' 1\', true)">Ucisz użytkownika</a><br />' + str;
				str = '<a href="javascript:insertText(\'' + _config['specialChar'] + _config['specialKick'] + ' ' + user + '\', true)">Wyrzuć użytkownika</a><br />' + str;
			case 1:
			case 0:
				str = '<a href="javascript:insertText(\'' + _config['specialChar'] + _config['specialIgnore'] + ' ' + user + '\', true)">' + (_ignore[user] ? 'Odblokuj' : 'Ignoruj') + ' użytkownika</a><br />' + str;
				str = '<a href="javascript:openConversation(\'' + user + '\')">Rozmowa prywatna</a><br />' + str;
		}
	document.getElementById('user_menu_inner').innerHTML = str;
	if (document.getElementById('users').lastChild == document.getElementById('user' + user))
		document.getElementById('users').appendChild(document.getElementById('user_menu'));
	else
		document.getElementById('users').insertBefore(document.getElementById('user_menu'), document.getElementById('user' + user).nextSibling);
	document.getElementById('user_menu').style.display = 'block';
	_userMenu = user;
	if (document.getElementById('message').disabled == false)
		document.getElementById('message').focus();
}
/* sets blinking text */
function setBlinking(user, e) {
	clearTimeout(_blinkTimer[user]);
	if (!_newMessages[user])
		return;
	if (user == '.')
		document.getElementById('selected_room').firstChild.className = e ? '' : 'new';
	else
		document.getElementById('priv' + user).className = e ? 'new2' : 'new';
	_blinkTimer[user] = setTimeout('setBlinking("' + user + '", ' + (e ? 0 : 1) + ');', 500);
}
/* convert text */
function createText(text) {
	var i;
	if (_config['noLongLines']) {
		var arr = text.split(' '), l, text2, j, length;
		text = '';
		for (i = 0, length = arr.length; i < length; i++) {
			if (_config['createLinks'] && arr[i].substr(0, 7) == 'http://' && arr[i].search('&quot;') == -1)
				text += ' <a href="' + arr[i] + '" target="_blank">LINK</a>';
			else if (_config['createLinks'] && arr[i].match(/^www\..+\..+/) !== null && arr[i].search('&quot;') == -1)
				text += ' <a href="http://' + arr[i] + '" target="_blank">LINK</a>';
			else if ((l = arr[i].length) > _config['noLongLines']) {
				text2 = '';
				for (j = 0; j < l; j += _config['noLongLines'])
					text2 += '-' + arr[i].substr(j, _config['noLongLines']);
				text += ' ' + text2.substr(1);
			} else
				text += ' ' + arr[i];
		}
		text = text.substr(1);
	} else if (_config['createLinks']) {
		var arr = text.split(' ');
		text = '';
		for (i = 0, length = arr.length; i < length; i++) {
			if (_config['createLinks'] && arr[i].substr(0, 7) == 'http://' && arr[i].search('&quot;') == -1)
				text += ' <a href="' + arr[i] + '" target="_blank">LINK</a>';
			else if (_config['createLinks'] && arr[i].match(/^www\..+\..+/) !== null && arr[i].search('&quot;') == -1)
				text += ' <a href="http://' + arr[i] + '" target="_blank">LINK</a>';
			else
				text += ' ' + arr[i];
		}
		text = text.substr(1);
	}
	if (_config['smileys']) {
		var smiley;
		for (i = 0, length = _smileys.length; i < length; i++) {
			smiley = _smileys[i].split('.');
			while (text.search('&lt;' + smiley[0] + '&gt;') != -1)
				text = text.replace('&lt;' + smiley[0] + '&gt;', '<img src="smileys/' + _smileys[i] + '" alt="' + smiley[0] + '" />');
		}
	}
	return text;
}
/* convert date */
function getDate(num) {
	var date1 = new Date(), date2 = date1;
	date2.setTime(num * 1000 + date2.getTime());
	date1 = date2.getHours();
	date2 = date2.getMinutes();
	return (date1 < 10 ? '0' + date1 : date1) + ':' + (date2 < 10 ? '0' + date2 : date2);
}
/* insert text */
function insertText(text, clear) {
	var ob = document.getElementById('message');
	if (ob.disabled == false) {
		if (clear)
			ob.value = '';
		ob.focus();
		if (document.selection)
			document.selection.createRange().text = text;
		else {
			if (ob.selectionStart || (ob.selectionStart == '0'))
				ob.value = ob.value.substring(0, ob.selectionStart) + text + ob.value.substring(ob.selectionEnd, ob.value.length);
			else
				ob.value += text;
		}
	}
}
/* toggle boxes */
function togglePanel(box1, box2) {
	if (document.getElementById(box1 + '_button').className == 'button1') {
		document.getElementById(box1).parentNode.style.visibility = 'hidden';
		document.getElementById(box1 + '_button').className = 'button2';
	} else {
		document.getElementById(box1).parentNode.style.visibility = 'visible';
		document.getElementById(box1).style.display = 'block';
		document.getElementById(box1 + '_button').className = 'button1';
		document.getElementById(box2).style.display = 'none';
		document.getElementById(box2 + '_button').className = 'button2';
	}
	fuckIE();
	if (_screen == 'chat' && document.getElementById('message').disabled == false)
		document.getElementById('message').focus();
}
/* toggle login form */
function toggleLogin(box) {
	toggleRoomList('login_', 1);
	switch (box) {
		case 1:
			document.getElementById('button_guest').className = 'button1';
			document.getElementById('button_user').className = 'button2';
			document.getElementById('login_guest_box').style.display = 'block';
			document.getElementById('login_user_box').style.display = 'none';
			document.getElementById('guest_login').focus();
			document.getElementById('foot_login_links').style.display = 'none';
		break;
		case 2:
			document.getElementById('button_guest').className = 'button2';
			document.getElementById('button_user').className = 'button1';
			document.getElementById('login_guest_box').style.display = 'none';
			document.getElementById('login_user_box').style.display = 'block';
			document.getElementById('user_login').focus();
			if (_config['registerLink'] || _config['passwordLink'])
				document.getElementById('foot_login_links').style.display = 'block';
		break;
	}
	_login = box;
}
/* toggle lists of rooms */
function toggleRoomList(id, state) {
	state = state || document.getElementById(id + 'list_room').style.display == 'block';
	if (state) {
		document.getElementById(id + 'list_room').style.display = 'none';
		document.getElementById(id + 'list_room').parentNode.style.position = 'static';
	} else {
		document.getElementById(id + 'list_room').style.display = 'block';
		document.getElementById(id + 'list_room').parentNode.style.position = 'relative';
	}
	document.getElementById(id + 'list_room').style.display = (state ? 'none' : 'block');
	document.getElementById(id + 'list_room').parentNode.style.position = (state ? 'static' : 'relative');
	document.getElementById(id + 'button_room').style.backgroundPosition = id ? (state ? 'left top' : 'left bottom') : (state ? 'right top' : 'right bottom');
	if (id == '' && _screen == 'chat' && document.getElementById('message').disabled == false)
		document.getElementById('message').focus();
}
/* select room on login */
function selectLoginRoom(room) {
	document.getElementById('login_room').value = room;
	document.getElementById('login_selected_room').innerHTML = room;
	toggleRoomList('login_', 1);
}
/* set user color */
function setColor(color) {
	var str = '';
	for (var i = 0, length = _config['colors'].length; i < length; i++)
		str += '<div' + (color == _config['colors'][i] ? ' class="active"' : '') + '><a href="javascript:setColor(\'' + _config['colors'][i] + '\')" style="background: ' + _config['colors'][i] + ';">&nbsp;</a></div>';
	document.getElementById('colors').innerHTML = str;
	_color = color;
	document.getElementById('user' + _userName).firstChild.style.color = color;
	if (_screen == 'chat' && document.getElementById('message').disabled == false)
		document.getElementById('message').focus();
}
/* set content font */
function setFont(size) {
	document.getElementById('font_size1').className = '';
	document.getElementById('font_size2').className = '';
	document.getElementById('font_size3').className = '';
	document.getElementById('font_size' + size).className = 'active';
	switch (size) {
		case 1: size='1em'; break;
		case 2: size='1.25em'; break;
		case 3: size='1.5em'; break;
	}
	document.getElementById('content').style.fontSize = size;
	document.getElementById('content').scrollTop = document.getElementById('content').scrollHeight + 1024;
	if (_screen == 'chat' && document.getElementById('message').disabled == false)
		document.getElementById('message').focus();
}
/* sounds */
function play(id) {
	if (!_sounds)
		return;
	document.getElementById('myFlash').SetVariable('method:stop', '');
	document.getElementById('myFlash').SetVariable('method:setPosition', 0);
	switch (id) {
		case 'm':
			if (_sounds != 'm')
				document.getElementById('myFlash').SetVariable('method:setUrl', 'sounds/message.mp3');
			_sounds = 'm';
		break;
		case 'c':
			if (_sounds != 'c')
				document.getElementById('myFlash').SetVariable('method:setUrl', 'sounds/conversation.mp3');
			_sounds = 'c';
		break;
		case 'i':
			if (_sounds != 'i')
				document.getElementById('myFlash').SetVariable('method:setUrl', 'sounds/info.mp3');
			_sounds = 'i';
		break;
	}
	document.getElementById('myFlash').SetVariable('method:play', '');
}
function switchSounds() {
	_sounds = !_sounds;
	document.getElementById('sounds').style.backgroundPosition = _sounds ? 'right bottom' : 'right top';
	if (_screen == 'chat' && document.getElementById('message').disabled == false)
		document.getElementById('message').focus();
}
/* anime title */
function startAnimation() {
	document.onmousemove = stopAnime;
	document.onkeydown = stopAnime;
	animeTitle(0);
}
function animeTitle(v) {
	clearTimeout(_titleTimer);
	document.title = (v ? '___aleCzat___' : '\xAF\xAF\xAFaleCzat\xAF\xAF\xAF') + ' - pokój: ' + _room + (_opened != '.' ? ' - rozmowa: ' + _opened : '');
	_titleTimer = setTimeout('animeTitle(' + !v + ');', 500);
}
function stopAnime() {
	document.onmousemove = function () {};
	document.onkeydown = function () {};
	clearTimeout(_titleTimer);
	document.title = 'aleCzat - pokój: ' + _room + (_opened != '.' ? ' - rozmowa: ' + _opened : '');
}
/* IE /fuck/ hack */
function fuckIE() {
	if (!isIE)
		return;
	document.getElementById('ie_fuck').innerHTML = Math.random();
}
