var mainTabTimeout = 2000;
var otherTabsTimeout = 20000;
var scrollTimeout = 100;
var chatRoomPrefix = 'chatRoom_';
var request;
var requestLeave;
var requestOnline;
var requestInvite;
var requestSend;
var requestMsg;
var requestPos;
var requestCheckRooms;
var requestActivate;
var checkMsg;
var checkMsgAllRooms;

function getActiveTab() {
	var chatTabs = document.getElementById('chatTabs');
	var currentChat = document.getElementById('currentChat').value;
	var tabId = '';
	for (var i = 0;i< chatTabs.childNodes.length;i++) {
		if (i == 0) {
			tabId = chatTabs.childNodes[i].id;
		}
		var room = chatTabs.childNodes[i].id.substr(chatRoomPrefix.length);
		if (room == currentChat){
			return room;
		}
	}
	
	return tabId;
}
function minimizeChat() {
	var chatWindow = document.getElementById('chatWindow');
	var chatState;
	if (chatWindow.style.height > '15px') {
		chatWindow.style.height = '15px';
		chatState = 'minimized';
		clearTimeout(checkMsg);
	} else {
		var tabId = getActiveTab();
		changeChatRoom(tabId);
		
		chatState = 'normal';
		startTimers();
		chatWindow.style.height = 'auto';
		document.getElementById('chatHead').className = 'chatHead';
		document.getElementById(chatRoomPrefix+document.getElementById('currentChat').value).className = 'chatRoom selectedChat';
	}
	
	document.getElementById('stateChat').value = chatState;
	
	
	request=getXmlHttpRequestObject();
	var url = "chat.php?chatState="+chatState;
	// request.onreadystatechange=chatOnlineStateChanged;
	request.open("GET",url,true);
	request.setRequestHeader("Accept-Language", "bg, en");
	request.setRequestHeader("Accept-Charset", "utf8"); 
	request.send(null);
	
	
	hideAllChatWindows();
	return false;
}
function maximizeChat() {
	request=getXmlHttpRequestObject();
	var url = "chat.php?chatState=maximized";
	// request.onreadystatechange=chatOnlineStateChanged;
	request.open("GET",url,true);
	request.setRequestHeader("Accept-Language", "bg, en");
	request.setRequestHeader("Accept-Charset", "utf8"); 
	request.send(null);
	
	clearTimeout(checkMsg);
	
	document.getElementById('stateChat').value = 'maximized';
	document.getElementById('chatWindow').style.display = 'none';
	
	return true;
}
function unMaximizeChat() {
	request=getXmlHttpRequestObject();
	var url = "chat.php?chatState=normal";
	request.onreadystatechange=unMaximizeChatStateChanged;
	request.open("GET",url,true);
	request.setRequestHeader("Accept-Language", "bg, en");
	request.setRequestHeader("Accept-Charset", "utf8"); 
	request.send(null);
	
	return false;
}

function unMaximizeChatStateChanged() {
	if (request.readyState==4 || request.readyState=="complete") {
		document.getElementById('stateChat').value = 'normal';
		if (window.opener) {
			window.opener.document.getElementById('stateChat').value = 'normal';
			window.opener.document.getElementById('chatWindow').style.display = '';
			window.opener.checkNewChatMsg();
		}
		
		window.close();
	}
}

function closeChat() {
	var chatWindow = document.getElementById('chatWindow');
	if (chatWindow.style.display == 'none') {
		document.getElementById('stateChat').value = 'normal';
		chatWindow.style.display = '';
	} else {
		clearTimeout(checkMsg);
		clearTimeout(checkMsgAllRooms);
		document.getElementById('stateChat').value = 'closed';
		chatWindow.style.display = 'none';
	}
	return false;
}

function showEmotes() {
	var emotesWindow = document.getElementById('emotesWindow');
	if (emotesWindow.style.display == 'none') {
		hideAllChatWindows();
		emotesWindow.style.display = '';
	} else {
		hideAllChatWindows();
	}
	return false;
}
function showFriends(aid) {
	var friendsWindow = document.getElementById('friendsWindow');
	if (friendsWindow.style.display == 'none') {
		hideAllChatWindows();
		
		getOnlineFriends(aid);
		
		friendsWindow.style.display = '';
	} else {
		hideAllChatWindows();
	}
	return false;
}

function insertEmoticon(emoticon,element) {
	element = document.getElementById(element);
	insertAtCursor(element,emoticon);
}


function insertAtCursor(myField, myValue) {
	//IE support
	if (document.selection) {
		myField.focus();
		sel = document.selection.createRange();
		sel.text = myValue;
	} else if (myField.selectionStart || myField.selectionStart == 0) {
	//MOZILLA/NETSCAPE support
		var startPos = myField.selectionStart;
		var endPos = myField.selectionEnd;
		myField.value = myField.value.substring(0, startPos)
			+ myValue
			+ myField.value.substring(endPos, myField.value.length);
	} else {
		myField.value += myValue;
	}
}

function hideAllChatWindows() {
	document.getElementById('friendsWindow').style.display = 'none';
	document.getElementById('emotesWindow').style.display = 'none';
}

function getOnlineFriends(aid) {
	var friendsWindow = document.getElementById('friendsWindow');
	var chatOnlinePrefix = 'chat_online_';
	checkOnline(aid);
}

function checkOnline(aid) {
	requestOnline=getXmlHttpRequestObject();
	var url = "chat.php?checkOnlineFor="+aid;
	requestOnline.onreadystatechange=chatOnlineStateChanged;
	requestOnline.open("GET",url,true);
	requestOnline.setRequestHeader("Accept-Language", "bg, en");
	requestOnline.setRequestHeader("Accept-Charset", "utf8"); 
	requestOnline.send(null);
}
function chatOnlineStateChanged() {
	if (requestOnline.readyState==4 || requestOnline.readyState=="complete") {
		var chatOnlinePrefix = 'chat_online_';
		xml = requestOnline.responseXML;
		var arr=getTagsAsArray(xml);
		if (arr) {
			for (var cnt=1; cnt<=arr.length; cnt++) {
				var online = arr[cnt-1]['online'];
				var aid = arr[cnt-1]['aid'];
				if (online == 'false') {
					document.getElementById(chatOnlinePrefix+aid).className = 'offline';
					document.getElementById(chatOnlinePrefix+aid).parentNode.style.display = 'none';
				} else {
					document.getElementById(chatOnlinePrefix+aid).className = 'online';
					document.getElementById(chatOnlinePrefix+aid).parentNode.style.display = '';
				}
			}
		}
	}
}
function inviteForChat(aid) {
	requestInvite=getXmlHttpRequestObject();
	var room = document.getElementById('currentChat').value;
	var url = "chat.php?inviteForChat="+aid+"&room="+room;
	requestInvite.onreadystatechange=chatInviteStateChanged;
	requestInvite.open("GET",url,true);
	requestInvite.setRequestHeader("Accept-Language", "bg, en");
	requestInvite.setRequestHeader("Accept-Charset", "utf8"); 
	requestInvite.send(null);
}
function chatInviteStateChanged() {
	if (requestInvite.readyState==4 || requestInvite.readyState=="complete") {
		xml = requestInvite.responseXML;
		var arr=getTagsAsArray(xml);
		if (arr) {
			for (var cnt=1; cnt<=arr.length; cnt++) {
				document.getElementById('chatHistory').innerHTML += '<a href="index.php?page=preview&aid='+arr[cnt-1]['aid']+'" target="_blank" class="friendsColor">'+arr[cnt-1]['name'] + '</a> ' + arr[cnt-1]['accept'] + '<br />';
			}
		}
		hideAllChatWindows();
	}
}
function changeChatRoom(name) {
	document.getElementById('currentChat').value = name;
	document.getElementById('chatHistory').innerHTML = '';
	document.getElementById('tabChanged').value = 'true';
	
	
	var chatTabs = document.getElementById('chatTabs');
	for (var i = 0;i< chatTabs.childNodes.length;i++) {
		chatTabs.childNodes[i].className = 'chatRoom';
	}
	if (!document.getElementById(chatRoomPrefix+name)) {
		name = getActiveTab();
	}
	document.getElementById(chatRoomPrefix+name).className = 'chatRoom selectedChat';
	
	
	request=getXmlHttpRequestObject();
	var url = "chat.php?changeRoom="+name;
	// request.onreadystatechange=chatOnlineStateChanged;
	request.open("GET",url,true);
	request.setRequestHeader("Accept-Language", "bg, en");
	request.setRequestHeader("Accept-Charset", "utf8"); 
	request.send(null);
	
	hideAllChatWindows();
	return false;
}

function trim(str) {
   return str.replace(/^\s*|\s*$/g,"");
}

function sendChatMessage() {
	var msg = document.getElementById('chatTextarea').value;
	
	if (trim(msg) != '') {
		setTimeout("document.getElementById('chatSend').style.background = '#FFFFFF';",5000);
		var room = document.getElementById('currentChat').value;
		document.getElementById('chatSend').style.background = '#FF9D4F';
		var vars = "sendMsg="+encodeURIComponent(msg)+'&room='+room;
		requestSend=getXmlHttpRequestObject();
		var url = "chat.php";
		requestSend.onreadystatechange=sendChatMessageStateChanged;
		requestSend.open("POST",url,true);
		requestSend.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=utf8');
		requestSend.setRequestHeader("Accept-Language", "bg, en");
		requestSend.setRequestHeader("Accept-Charset", "utf8"); 
		requestSend.send(vars);
	}
	// alert(msg);
	
	return false;
}

function sendChatMessageStateChanged() {
	if (requestSend.readyState==4 || requestSend.readyState=="complete") {
		// alert(request.responseText);
		document.getElementById('chatSend').style.background = '#FFFFFF';
		document.getElementById('chatTextarea').value = '';
	}
}

function checkToSend(event) {
	if ((event.ctrlKey && event.keyCode == 13) || event.keyCode == 13) {
		sendChatMessage();
	}
}
function checkNewChatMsgOtherTabs() {
	var room = document.getElementById('currentChat').value;
	if (document.getElementById('stateChat').value == 'minimized') {
		room = '';
	}
	requestCheckRooms=getXmlHttpRequestObject();
	var url = "chat.php?checkNewMessagesExceptRoom="+room;
	requestCheckRooms.onreadystatechange=checkNewMessagesExceptRoomStateChanged;
	requestCheckRooms.open("GET",url,true);
	requestCheckRooms.setRequestHeader("Accept-Language", "bg, en");
	requestCheckRooms.setRequestHeader("Accept-Charset", "utf8"); 
	requestCheckRooms.send(null);
	checkMsgAllRooms = setTimeout('checkNewChatMsgOtherTabs()',otherTabsTimeout);
}
function checkNewMessagesExceptRoomStateChanged() {
	if (requestCheckRooms.readyState==4 || requestCheckRooms.readyState=="complete") {
		xml = requestCheckRooms.responseXML;
		var arr=getTagsAsArray(xml);
		var hasNew = false;
		if (arr) {
			for (var cnt=1; cnt<=arr.length; cnt++) {
				if (arr[cnt-1]['count'] > 0) {
					hasNew = true;
					if (document.getElementById(chatRoomPrefix+arr[cnt-1]['name'])) {
						document.getElementById(chatRoomPrefix+arr[cnt-1]['name']).className = document.getElementById(chatRoomPrefix+arr[cnt-1]['name']).className + ' newChatMsg';
					} else {
						var name = arr[cnt-1]['name'];
						var newTab = document.createElement('a');
						newTab.id = chatRoomPrefix+name;
						newTab.innerHTML = name;
						newTab.href = "#";
						newTab.onclick = function() { return changeChatRoom(name); }
						newTab.className = 'chatRoom';
						document.getElementById('chatTabs').appendChild(newTab);
						
						document.getElementById(chatRoomPrefix+name).className = document.getElementById(chatRoomPrefix+name).className + ' newChatMsg';
					}
				}
			}
			
			if (hasNew && document.getElementById('stateChat').value == 'minimized') {
				document.getElementById('chatHead').className = 'chatHead newChatMsg';
			}
		}
	}
}
function checkNewChatMsg() {
	var room = document.getElementById('currentChat').value;
	var activeChat = document.getElementById('activeChat').value;
	requestMsg=getXmlHttpRequestObject();
	if (document.getElementById('tabChanged').value == 'true') {
		var url = "chat.php?checkNewMessagesRoom="+room+"&allMsg=true";
		document.getElementById('tabChanged').value = 'false';
	} else {
		var url = "chat.php?checkNewMessagesRoom="+room;
	}
	url += '&activeChat='+activeChat;
	requestMsg.onreadystatechange=checkNewMessagesRoomStateChanged;
	requestMsg.open("GET",url,true);
	requestMsg.setRequestHeader("Accept-Language", "bg, en");
	requestMsg.setRequestHeader("Accept-Charset", "utf8"); 
	requestMsg.send(null);
	checkMsg = setTimeout('checkNewChatMsg()',mainTabTimeout);
}

function checkNewMessagesRoomStateChanged() {
	if (requestMsg.readyState==4 || requestMsg.readyState=="complete") {
		if (requestMsg.responseText != '') {
			// alert(requestMsg.responseText.indexOf('<bool>true</bool>'));
			if (requestMsg.responseText.indexOf('<bool>true</bool>') != -1) {
				document.getElementById('chatWindow').style.height = '15px';
				document.getElementById('stateChat').value = 'minimized';
				hideAllChatWindows();
				killTimers();
			} else {
				var history = document.getElementById('chatHistory');
				history.innerHTML += requestMsg.responseText;
				setTimeout("document.getElementById('chatHistory').scrollTop = document.getElementById('chatHistory').scrollHeight",scrollTimeout);
			}
			
		}
	}
}

function leaveChat() {
	var room = document.getElementById('currentChat').value;
	
	requestLeave=getXmlHttpRequestObject();
	var url = "chat.php?leaveRoom="+room;
	requestLeave.onreadystatechange=leaveRoomStateChanged;
	requestLeave.open("GET",url,true);
	requestLeave.setRequestHeader("Accept-Language", "bg, en");
	requestLeave.setRequestHeader("Accept-Charset", "utf8"); 
	requestLeave.send(null);
	
	return false;
}

function leaveRoomStateChanged() {
	if (requestLeave.readyState==4 || requestLeave.readyState=="complete") {
		xml = requestLeave.responseXML;
		var arr=getTagsAsArray(xml);
		
		if (arr) {
			var tabs = document.getElementById('chatTabs');
			/*if (document.getElementById('chatTabs').childNodes.length > 0) {
				var newRoom = '';
				for (var i = 0;i< tabs.childNodes.length;i++) {
					if (tabs.childNodes[i].innerHTML != arr[0]['chatName']) {
						newRoom = tabs.childNodes[0].innerHTML;
						break;
					}
				}
				if (newRoom != '') {
					changeChatRoom(newRoom);
				} else {
					closeChat();
				}
			}*/
			for (var cnt=1; cnt<=arr.length; cnt++) {
				document.getElementById('chatHistory').innerHTML += '<a href="index.php?page=preview&aid='+arr[cnt-1]['aid']+'" target="_blank" class="friendsColor">'+arr[cnt-1]['name'] + '</a> ' + arr[cnt-1]['left'] + '<br />';
				tabs.removeChild(document.getElementById(chatRoomPrefix+arr[cnt-1]['chatName']));
			}
			var tabId = getActiveTab();
			var newRoom = tabId;
			if (newRoom != '') {
				changeChatRoom(newRoom);
			} else {
				closeChat();
			}
		}
		hideAllChatWindows();
	}
}
function startChat(state) {
	if (document.getElementById('stateChat').value != 'closed') {
		setTimeout("document.getElementById('chatHistory').scrollTop = document.getElementById('chatHistory').scrollHeight",100);
		if (state == 'normal' || state == '') {
			checkNewChatMsg();
		}
		checkNewChatMsgOtherTabs(state);
	}
}
function killTimers() {
	clearTimeout(checkMsg);
	clearTimeout(checkMsgAllRooms);
}
function setActiveChat() {
	var activeChat = document.getElementById('activeChat').value;
	var url = "chat.php?setActive="+activeChat;
	requestActivate=getXmlHttpRequestObject();
	requestActivate.onreadystatechange=setActiveStateChanged;
	requestActivate.open("GET",url,true);
	requestActivate.setRequestHeader("Accept-Language", "bg, en");
	requestActivate.setRequestHeader("Accept-Charset", "utf8"); 
	requestActivate.send(null);
}

function setActiveStateChanged() {
	if (requestActivate.readyState==4 || requestActivate.readyState=="complete") {
		killTimers();
		changeChatRoom(document.getElementById('currentChat').value);
		checkNewChatMsg();
		checkNewChatMsgOtherTabs('normal');
		// setTimeout("document.getElementById('chatWindow').style.height = 'auto'",500);
	}
}

function startTimers() {
	setActiveChat();
}

function dragStart() {
	var handle = document.getElementById('chatHead');
	var root = document.getElementById('chatWindow');
	Drag.init(handle,root);
	
	root.onDragEnd = function(x,y) {
		var url = "chat.php?setPosX="+x+"&setPosY="+y;
		requestPos=getXmlHttpRequestObject();
		// requestPos.onreadystatechange=dragStateChanged;
		requestPos.open("GET",url,true);
		requestPos.setRequestHeader("Accept-Language", "bg, en");
		requestPos.setRequestHeader("Accept-Charset", "utf8"); 
		requestPos.send(null);
	}
}

