/**
 * Message center module
 *
 * @package    wsCat Jx
 * @version    1.0
 * @since      04.09.2008
 * @copyright  2004-2008 5Dev
 * @link       http://5dev.com
 */
function MC_Main() 
{ 
    this.__construct(); 
}

MC_Main.prototype = 
{
    errFlag:         false,
    mCid:            0,
    mPrevTextLength: 0,
    mStopRefresh:    false,
    mContacts:       null,
    mpStart:           1,

    __construct: function()
    {
        this.mContacts = new Array();
    },

    OpenChat: function(cid)
    {
        self.location = '/my/mc/?mod=chat&action=main&cid=' + cid;
        
        /*this.mPrevTextLength = 0;

        if (in_array(this.mCid, this.mContacts))
        {
            _v('contact_' + this.mCid).className = _v('contact_' + this.mCid).className.replace(' act','');
            _v('contact_img_' + this.mCid).src = '/i2008/close001.gif';
        }

        _v('contact_' + cid).className = _v('contact_' + cid).className + ' act';
        _v('contact_img_' + cid).src   = '/i2008/close002.gif';

        this.mCid = cid;
        this.GetMessagesList(true);*/
    },

    GenerateContactList: function(contacts)
    {
        var cnt = contacts.length;

        if (0 == cnt)
        {
            window.close();
            return;
        }
        
        var res = '<ul>';
        var found_active_user = false;
        var tmp_contacts = new Array();

        for (var i = 0; i < cnt; i++)
        {
    		res += '<li class="';
            
            res +=  (1 == contacts[i].gender) ? 'men' : 'women';

            if (this.mCid == contacts[i]['uid'])
            {
                res += ' act';
                found_active_user = true;
            }
            
            res += '" id="contact_' + contacts[i]['uid'] + '" >';
            res += '<span class="close"><img src="/i2008/close00' + ((this.mCid == contacts[i]['uid']) ? 2 : 1) + '.gif" alt="" id="contact_img_' + contacts[i]['uid'] + '" class="hd" onclick="oMc.HideContactFromChat(' + contacts[i]['uid'] + ');"/></span><a href="javascript:oMc.OpenChat(' + contacts[i]['uid'] + ');">' + contacts[i]['fname'] + '</a>';
            
            if (1 == contacts[i]['is_typing'])
                res +=  ' typing...';
		    
            res += '<p class="hd" onclick="oMc.OpenChat(' + contacts[i]['uid'] + ');"><img src="/i2008/message' + (0 == contacts[i]['flag'] ? '2' : '') + '_ico.gif" alt="" /> ';
            
            res += 1 == contacts[i]['flag'] ? contacts[i]['mess_cnt'] + ' Messages' : '&nbsp;';
          			
            res += '</p></li>';

            tmp_contacts[tmp_contacts.length] = contacts[i]['uid'];
        }

        res += '</ul>';

        this.mContacts = tmp_contacts;
        _v('contacts_list').innerHTML = res;

        if (!found_active_user)
           this.OpenChat(this.mContacts[0]);
    },

    GetMessagesList: function(withContactInfo, pStart)
    {
        if (null == pStart)
            pStart = 0;

        this.mpStart = pStart;

        this.mStopRefresh = true;
        var req = new JsHttpRequest();
        req.onreadystatechange = function()
        {
            if (4 == req.readyState)
            {
                var r = req.responseJS;

                _v('chat_body').innerHTML = r.list;

                if (null != withContactInfo)
                {
                    _v('contact_info').innerHTML = r.contact_info;
                    document.title               = r.chat_title;
                }

                _v('pages').innerHTML = _v('paginal_view').innerHTML;

                if (_v('message'))
                    _v('message').focus();
                window.focus();

                oMc.mStopRefresh = false;
            }
        }
        
        req.caching = false;
        req.open('GET', '/my/mc/', true);

        var query = {gate: 'ajax', mod: 'chat', action: 'view', cid: this.mCid, with_contact_info: (null != withContactInfo ? 1 : 0), pstart: this.mpStart};
        
        req.send(query);
    },

    HideContactFromChat: function(cid)
    {
        var req = new JsHttpRequest();
        req.onreadystatechange = function()
        {
            if (4 == req.readyState)
            {
            }
        }
        
        req.caching = false;
        req.open('GET', '/my/mc/', true);
        req.send({gate: 'ajax', mod: 'chat', action: 'hide_contact', cid: cid});

        _v('contact_' + cid).style.display = 'none';

        this.mContacts = del_from_array(this.mContacts, cid, 2); 

        if (0 == this.mContacts.length)
           window.close();
        else if (cid == this.mCid)
           oMc.OpenChat(this.mContacts[0]);                     
    },

    GetUnreadCnt: function()
    {
        var req = new JsHttpRequest();
        req.onreadystatechange = function()
        {
            if (4 == req.readyState)
            {
               var r = req.responseJS;

               if (null != r.cnt)
                   _v('jx_mc_unread_cnt').innerHTML =  (0 < r.cnt) ? '('+ r.cnt + ' new)' : '';
            }
        }
        
        req.caching = false;
        req.open('GET', '/my/mc/', true);
        req.send({gate: 'ajax', mod: 'get_unread_cnt'});
    },

    SendMessage: function()
    {
        if (0 == _v('message').value.length)
           return false;
   
        this.mpStart               = 0;
        this.mStopRefresh          = true;
        // _v('send_button').src      = '/i2008/wait.png';
        _v('send_button').disabled = true;
        var req = new JsHttpRequest();
        req.onreadystatechange = function()
        {
            if (4 == req.readyState)
            {
                var r = req.responseJS;

                if (0 == r.errCode)
                    _v('chat_body').innerHTML = r.list;

                oMc.mStopRefresh           = false;
                oMc.mPrevTextLength        = 0;
                _v('message').value        = '';
                _v('pages').innerHTML      = _v('paginal_view').innerHTML;
                _v('send_button').disabled = false;
                // _v('send_button').src      = '/i2008/send_b.png';

            }
        }
        
        req.caching = false;
        req.open('GET', '/my/mc/', true);
        req.send({gate: 'ajax', mod: 'chat', action: 'send', cid: this.mCid, message: _v('message').value});

        return true;
    },

    AutoChatRefresh: function()
    {
        if (this.mStopRefresh)
            return;

        var req = new JsHttpRequest();
        req.onreadystatechange = function()
        {
            if (4 == req.readyState)
            {
                if (oMc.mStopRefresh)
                    return;

                if (null != req.responseJS)
                {
                    var r = req.responseJS;
                   
                    if (0 < r.cnt)
                    {
                        _v('chat_body').innerHTML = r.list;
                        _v('pages').innerHTML     = _v('paginal_view').innerHTML;
                        if (_v('message'))
                            _v('message').focus();
                    }
                   
                    oMc.GenerateContactList(r.CA);
                }
            }
        }
        
        if (_v('message'))
        {
            var is_typing = this.mPrevTextLength > _v('message').value.length ? 1 : 0;
            this.mPrevTextLength = _v('message').value.length;
        }
        else
        {
            var is_typing        = 0;
            this.mPrevTextLength = 0;
        }

        req.caching = false;
        req.open('GET', '/my/mc/', true);
        req.send({gate: 'ajax', mod: 'chat', action: 'auto_refresh', cid: this.mCid, is_typing: is_typing, pstart: this.mpStart});
    }
}

function ctrl_enter(k)
{
   if (k)
   {
       ctrl = k.ctrlKey;
       k    = k.which;
   }
   else
   {
       k    = event.keyCode;
       ctrl = event.ctrlKey;
   }

   if ((13 == k && ctrl) || 10 == k) 
       oMc.SendMessage();
}
               
