window.chatId = 0;
window.clAjax = false;
window.clAll = {};

function startChat(id,n) /////
{
    if(n===true) window.chatId = parseInt(id);
    if(window.chatId<1) return;
    if (!window.chat) window.chat = new CAjax();
    window.chat.ureq({'id':window.chatId,'url':'/chat/server.php','method':'post'});
    if (n===true) window.setTimeout(startChat, 1000);
    else window.setTimeout(chatGetContacts, 3000);
};

function chatClient() /////
{
    window.setTimeout(chatStartClient,100);
};

function chatStartClient() /////
{
    if (window.clAjax) return;
    window.clAjax = new CAjax();
    window.clAjax.ureq({'id':window.chatId,'url':'/chat/client.php','method':'post'},chatMess);
};

function abortClient() /////
{    if (!window.clAjax) return;
    window.clAjax.http.abort();
    window.clAjax = false;
};

function chatMess(q) /////
{
    window.clAjax = false;
	if (q)
	{
        try{eval(q);} catch(ee){}
        switch(q)
        {
        	case 'TERMINATE BY TIMEOUT':
        	{
        		startChat(window.chatId, true);
        		break;
        	}
        	case 'REBOOT':
        	{
                chatClient();
        		break;
        	}
        	case 'WAIT_CONTACTS':
        	{
        		chatGetContacts();
        		break;
        	}
        	case 'BAD ID':
        	{
        		break;
        	}
        	case 'NO MAIL':
        	{
                alert(lang.no_vmail);
        		break;
        	}
        	case 'FALSE':
        	{
                if (confirm(lang.no_login))
  	        		startChat(window.chatId,true);
        		break;
        	}
        	default :
        	{
   		        try{eval(q);} catch(ee){}
   		        if (typeof(mess)!='undefined') rendMess(mess);
   		        if (typeof(cont)!='undefined') rendCont(cont);
   		        if (typeof(pres)!='undefined') rendPres(pres);
   		        chatClient();
        	}
        }
    }
};

function rendPres(s) /////
{
	for(var i in s)
	{
        if (window.chatBlackList && i in window.chatBlackList && window.chatBlackList[i]!==false) continue;
		if(s[i][0]=='subscribe')
        {
            window.sound.play(10);
            if (confirm(lang.accept_auth_req+i+': '+s[i][1]+'?'))
            {
                var d = i.split('@');
                chatPresence(d[0],d[1],'subscribe');
                chatPresence(d[0],d[1],'subscribed');
                window.setTimeout(chatReloadContacts,1000);
            }
        }

        var el = $(i+'_status');
        if (!el) el = $(i+'_status_list');
        else var el2 = $(i+'_status_list');

		if (el)
		{
			switch(s[i][0])
			{
			    case '':
			    {
			    	el.src = '/images/chat/online.gif';
			    	el.alt = s[i][1];
			    	el.title = s[i][1];
			    	break;
			    }
			    case 'chat':
			    {
			    	el.src = '/images/chat/chat.gif';
			    	el.alt = s[i][1];
			    	el.title = s[i][1];
			    	break;
			    }
			    case 'error':
			    {
			    	el.src = '/images/chat/offline.gif';
			    	el.alt = '';
			    	el.title = '';
			    	break;
			    }
   			    case 'away':
			    {
			    	el.src = '/images/chat/away.gif';
			    	el.alt = s[i][1];
			    	el.title = s[i][1];
			    	break;
			    }
			    case 'dnd':
			    {
			    	el.src = '/images/chat/dnd.gif';
			    	el.alt = s[i][1];
			    	el.title = s[i][1];
			    	break;
			    }
   			    case 'unavailable': case 'xa':
			    {
			    	el.src = '/images/chat/offline.gif';
			    	el.alt = s[i][1];
			    	el.title = s[i][1];
			    	break;
			    }
			}

	        if (el2)
	        {
	            el2.src = el.src;
	            el2.alt = el.alt;
	            el2.title = el.title;
	        }

	        if ($('resp_status_'+i))
	        {
	            $('resp_status_'+i).src = el.src;
	            $('resp_mess_'+i).innerHTML = el.title;
	        }

 		}

	}
};

function chatGetMessList(user,domain,all) /////
{    if (typeof(all)!='undefined') window.clAll[user+'@'+domain] = parseInt(all);
    else if (window.clAll[user+'@'+domain]) all = window.clAll[user+'@'+domain];
    else all = 0;
    abortClient();
    (new CAjax()).ureq({'id':window.chatId,'all':all,'act':'getmess','user':user,'domain':domain,'tz':window.tz,'url':'/chat/client.php','method':'post'}, function(q)
    {
        var m = user+'@'+domain;
        var el = $('vc_messages_'+m);
        if (el)
        {
            el.innerHTML = q;
            el.scrollTop = 10000;
            el = $(m+'_new');
			if(el) el.innerHTML = '';
        }
	    chatClient();
    });
};

function rendMess(s) /////
{
	for(var i in s)
	{
        var m = i.toLowerCase();
        if ($('vc_messages_'+m))
        {
            var s = m.split('@');
            chatGetMessList(s[0],s[1]);
            window.sound.play(9);
        }
        else
        {
			var el = $(m+'_new');
			if(el)
			{
	            var cnt = el.innerHTML;
				cnt = cnt ? parseInt(cnt) : 0;
				cnt += parseInt(s[i][0]);
				el.innerHTML = cnt;
                window.sound.play(8);
			}
		}
	}
};

function rendCont(cont) /////
{
    //number = none | info@voon.ru | info | voon.ru | uid | cnt | img |
    var a = {};
    for(var i in cont)
    {
        var e = cont[i];
	    var m = (e[2]+'@'+e[3]).toLowerCase();
	    var n = parseInt(e[5]);
	    n = n ? n : '';
	    if (!a[e[0]]) a[e[0]] = {};
        if (!e[6]) e[6] = '/images/chat/offline.gif';
	    a[e[0]][i] = '<div class="aleft list_row" style="cursor:pointer;" align="'+e[4]+'@'+e[0]+'" id="'+m+'" '+
    	'onmousedown="drag_new(event, \'/messenger/'+m+'\')" onclick="return windowNew(\'/messenger/'+m+'\', event)">'+
    	'<div class="vc_new_mess"><blink id="'+m+'_new">'+n+'</blink></div>'+
	    '<img class="vc_status_image" id="'+m+'_status" alt="" title="" src="'+e[6]+'"/>'+e[1]+
	    '</div>';
	    if ($('resp_status_'+m)) $('resp_status_'+m).src = e[6];
    }
    var s = '', odd = false;
    if (a['both'])for(i in a['both'])
    {
        s += odd ? a['both'][i].replace('list_row', 'list_row odd') : a['both'][i];
        odd = !odd;
    }
    if (a['from']) for(i in a['from'])
    {
        s += odd ? a['from'][i].replace('list_row', 'list_row odd') : a['from'][i];
        odd = !odd;
    }
    if (a['none']) for(i in a['none'])
    {
        s += odd ? a['none'][i].replace('list_row', 'list_row odd') : a['none'][i];
        odd = !odd;
    }
    if($('vc_cont')) $('vc_cont').innerHTML = s ? s : $('vc_intro').innerHTML;
    windowsLineUp();
};

function chatSearchUser() /////
{
    $('vc_ignore_list').style.display = 'none';
    $('my_status_edit_bar').style.display = 'none';
    $('vc_cont').style.display = 'none';
    $('vc_search_list_data').innerHTML = lang.load;
    $('vc_search_list').style.display = 'block';
    windowsLineUp();
    abortClient();
    (new CAjax()).ureq({'id':window.chatId,'act':'search','url':'/chat/client.php','method':'post'}, function(q){
        $('vc_search_list_data').innerHTML = q;
	    chatClient();
	    windowsLineUp();
    });
};

function chatIgnoreList() /////
{
    $('my_status_edit_bar').style.display = 'none';
    $('vc_cont').style.display = 'none';
    $('vc_search_list').style.display = 'none';
    $('vc_ignore_list_data').innerHTML = lang.load;
    $('vc_ignore_list').style.display = 'block';
    windowsLineUp();
    abortClient();
    (new CAjax()).ureq({'id':window.chatId,'act':'ignorelist','url':'/chat/client.php','method':'post'}, function(q)
    {
	    $('vc_ignore_list_data').innerHTML = q;
	    chatClient();
	    windowsLineUp();
    });
};

function chatAddFound(m,el) /////
{
    var s = m.split('@');
    if (!s[1])
    {
        m += '@voon.ru';
        s[1] = 'voon.ru';
    }
    if (el) m = stripTags(el.innerHTML);
    if (!confirm(lang.chat_auth_request+m+'?')) return;
    chatPresence(s[0],s[1],'subscribe');
    window.setTimeout(chatReloadContacts,1000);
    alert(lang.chat_auth_sent);
};

function chatContactList() /////
{    $('vc_ignore_list').style.display = 'none';
    $('my_status_edit_bar').style.display = 'none';
    $('vc_search_list').style.display = 'none';
    $('vc_cont').style.display = 'block';
    windowsLineUp();
};

function chatEditStatus() /////
{
    var st = $('my_status_edit_'+$('my_status_image').alt);
    if (st) st.checked = true;
    $('my_mess_edit').value = $('my_status_mess').innerHTML;
    $('vc_cont').style.display = 'none';
    $('vc_ignore_list').style.display = 'none';
    $('vc_search_list').style.display = 'none';
    $('my_status_edit_bar').style.display = 'block';
    $('my_mess_edit').focus();
    windowsLineUp();
};

function setMyStatus() /////
{
	var st = $('my_status_group_radio').getElementsByTagName('INPUT');
	for(var i=0;i<st.length;i++)
	{		if (st[i].checked)
		{			st = st[i].value;
			break;		}	}
	var ms = $('my_mess_edit').value;
	chatStatus(st,ms);
	$('my_status_mess').innerHTML = ms;
	$('my_status_image').alt = st;
	switch(st)
	{
		case 'dnd':
		{
			$('my_status_image').src = '/images/chat/dnd.gif';
			break;
		}
		case 'away':
		{
			$('my_status_image').src = '/images/chat/away.gif';
			break;
		}
		case 'xa':
		{
			$('my_status_image').src = '/images/chat/offline.gif';
			break;
		}
		case 'chat':
		{
			$('my_status_image').src = '/images/chat/chat.gif';
			break;
		}
		default:
		{
			$('my_status_image').src = '/images/chat/online.gif';
			break;
		}
	}
    window.coo.set('chat_status_img',$('my_status_image').src,'/');
    $('my_status_edit_bar').style.display = 'none';
    $('vc_cont').style.display = 'block';
    windowsLineUp();
};

function chatStartUser(vmail) /////
{
    var s = vmail.split('@');
    if($(vmail+'_new'))
    {
        $(vmail+'_new').innerHTML = '';
        $('resp_status_'+vmail).src = $(vmail+'_status').src;
        $('resp_mess_'+vmail).innerHTML = $(vmail+'_status').title;
    }
    else chatPresence(s[0],s[1],'probe');    abortClient();
    (new CAjax()).ureq({'id':window.chatId,'act':'getmess','user':s[0],'domain':s[1],'lang':lang.lang,
                        'tz':window.tz,'url':'/chat/client.php','method':'post'}, function(q){    	$('vc_messages_'+vmail).innerHTML = q;
        $('vc_messages_'+vmail).scrollTop = 10000;
	    chatClient();
    });
};

window.myNick = false;
function sendChatMess(vmail)
{
    var m = trim(stripTags($('main_mess_'+vmail).value));
    $('main_mess_'+vmail).disabled = true
    if (!m) return;
    var s = vmail.split('@');
    chatPostMess(s[0], s[1], m);
};

function upSendChatMess(event,vmail) /////
{
   if (!event) return;
   if(!event.keyCode) return;
   if(event.keyCode==13) sendChatMess(vmail);
};

function chatPostMess(user,domain,mess) /////
{
    var m = user+'@'+domain;
    abortClient();
    (new CAjax()).ureq({'id':window.chatId,'act':'message','user':user,'domain':domain,'mess':mess,'url':'/chat/client.php','method':'post'}, function(q){        if ($('main_mess_'+m))
        {
            $('main_mess_'+m).value = '';
            $('main_mess_'+m).disabled = false;
        }
        chatGetMessList(user,domain);    });
};

function chatReloadContacts() /////
{
    abortClient();
    (new CAjax()).ureq({'id':window.chatId,'act':'contacts','url':'/chat/client.php','method':'post'}, chatClient);
    window.setTimeout(chatGetContacts, 5000);
};

function chatGetContacts(f) /////
{
    abortClient();
    if (typeof(f)=='function')
        (new CAjax()).ureq({'id':window.chatId,'act':'getcont','url':'/chat/client.php','method':'post'}, f);
    else
        (new CAjax()).ureq({'id':window.chatId,'act':'getcont','url':'/chat/client.php','method':'post'}, chatMess);
};

function chatAuthUser(vmail) /////
{
    if (!confirm(lang.chat_auth_request+vmail+'?')) return;
    var s = vmail.split('@');
    chatPresence(s[0],s[1],'subscribe');
    chatPresence(s[0],s[1],'subscribed');
    window.setTimeout(chatReloadContacts,1000);
};

function chatDelUser(vmail,ins) /////
{
    if (!confirm(lang.chat_del_user)) return;
    dropWindow(ins);
    var s = vmail.split('@');
    chatPresence(s[0],s[1],'unsubscribe');
    chatPresence(s[0],s[1],'unsubscribed');
    window.setTimeout(chatReloadContacts,5000);
};

function chatIgnoreUser(vmail,ins) /////
{
    if (!confirm(lang.chat_ignore_user)) return;
    dropWindow(ins);
    if (!window.chatBlackList) window.chatBlackList = {};
    window.chatBlackList[vmail] = '0';
    abortClient();
    (new CAjax()).ureq({'id':window.chatId,'act':'black','hide':1,'vmail':vmail,'url':'/chat/client.php','method':'post'}, function(q)
    {
        var s = vmail.split('@');
        chatPresence(s[0],s[1],'unsubscribe');
        chatPresence(s[0],s[1],'unsubscribed');
        window.setTimeout(chatReloadContacts,1000);
    });
};

function chatRestoreUser(vmail) /////
{
    if (!confirm(lang.chat_restore_user)) return false;
    window.chatBlackList[vmail] = false;
    abortClient();
    (new CAjax()).ureq({'id':window.chatId,'act':'black','vmail':vmail,'url':'/chat/client.php','method':'post'}, chatReloadContacts);
    return true;
};


function chatPresence(user,domain,pres) /////
{
    //'unavailable', 'subscribe', 'subscribed', 'unsubscribe', 'unsubscribed', 'probe', 'error'
    abortClient();
    (new CAjax()).ureq({'id':window.chatId,'act':'presence','user':user,'domain':domain,'pres':pres,'url':'/chat/client.php','method':'post'}, chatClient);
};

function chatStatus(status,mess,p) /////
{
    if (typeof(p)=='undifined') p = 10;
    if (typeof(mess)=='undifined') mess = '';
    if (typeof(status)=='undifined') status = 'chat';
    window.coo.set('chat_status_mess',mess,'/');
    window.coo.set('chat_status',status,'/');
    abortClient();
    (new CAjax()).ureq({'id':window.chatId,'act':'status','show':status,'status':mess,'priority':p,'url':'/chat/client.php','method':'post'}, chatClient);
};


