var Chat = {
    user: null,
    last: null,
    count: 0,
    
    init: function(){
                
        $('#chat-button').click(Chat.clickEvt);
        $('#chat-message').keypress(Chat.keypressEvt);
        
        Chat.user = (jriName) ? jriName : "Anonymous";         
        
        Chat.poll(true);
    },
    
    clickEvt: function(){
       
        var msgEl = $('#chat-message');
    
        var message = util.str.removeNL(msgEl.val());
        message = util.str.htmlEntities(message);

        var limit = 120;
        if(message.length > limit){
            alert("Please limit your message below "+limit+" characters.");
            return msgEl.focus();
        }        
       
        if($.trim(message)){
        
            //user is already logged-in
            if(Chat.user){               
                Chat.append(Chat.user, message, 'sender');
                Chat.send(message, Chat.receive);
                Chat.srollDown();    

                msgEl.val('');                
            }
            
        }            
        else
            alert("You must enter a message.");
        
    },
    
    keypressEvt:function(evt){
        
        if(13 == evt.keyCode){
            Chat.clickEvt();
            evt.preventDefault();
        }
    },
    
    
    append:function(user, msg, cls, datetime){
    
        
        var sender = '<strong>' + util.str.addWordBreak(user,15) + '</strong>:&nbsp;';
        var message = '<span>' + Chat.checkMessage(msg) + '</span><br />';
        var dt = (datetime) ? '<small>' + util.date.sanitize(datetime) + '</small>' : '';
    
        var li = $('<li></li>')
                    .attr({ 'class': cls })
                    .html(sender+message+dt);  
                    
        $('#chat-history').append(li);
    },
    
    receive:function(data){
    
        var shouts = data.shouts;
        var users = data.users;
    
        if(data && 'OK' == data.STATUS){
            
            if(shouts && $.isArray(shouts)){
            
                if(shouts.length != Chat.count){
                    $('#chat-history').html('');
                
                    var len = shouts.length - 1;                
                    var cls, rec;
                    
                    do{  
                        rec = shouts[len];
                        cls = (Chat.user == rec.sender) ? 'sender' : 'receiver';
                        Chat.append(rec.sender, rec.shout, cls, rec.tmstmp);
                    }while(0 <= --len);
                    
                    Chat.srollDown();
                    
                    Chat.count = shouts.length;
                }       
            }
            
        }       
              
        
        //poll
        Chat.poll();
  
    },
    
    srollDown : function()
    {
        var hist = $('#chat-history').get(0);
        if(hist) hist.scrollTop = hist.scrollHeight;      
    }, 
    
    poll:function(first){
        
        function doPoll(first){
            var args = {};
            if(first) args.first = first;
            Chat.request("fetch", args, Chat.receive);            
        }
        window.setTimeout(doPoll, 6000, (first)?true:false);
    },    
    
    send:function(message){
        var args = {
            shout: message,
            sender: Chat.user
        };
        Chat.request("send", args, null);
    },
    
    checkMessage:function(msg){
    
        var urlpattern = /((ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?)/gi;
        var matches = msg.match(urlpattern);

        if(matches){
            $.each(matches, function(i, url){                
                msg = msg.replace(url, '<a target="_blank" href="'+url+'">'+url+'</a>');
            });
        }
    
        return util.str.addWordBreak(msg,15);
    },

    request:function(mode, args, cb){
        $.post(
            jriHost + "/shouts/"+mode,
            args,
            cb,
            'json'
        );
    }
    
};

$(document.body).ready(function(){    
    Chat.init();    
});

