
    function BxShoutBox()
    {
        this.oMessages = new Object(),
        
        // contain page's URL for queries;
        this.sPageReceiver = '',

        // will check new messages;
        this.iUpdateTime = 0,

        this.updateTimeNotifyHandler = '',

        // last message's Id;
        this.iLastMessageId = 0,

        this.sMessagesContainer = 'shoutbox_wrapper',

        /**
         * Function will send message from logged member ;
         *
         * @param  : e (system event) ;
         * @param  : evElement (object) (link on current field);
         */
        this.sendMessage = function(e, evElement)
        {
            var self = this;

            if(!e) {
                if( window.event ) { //Internet Explorer
                  e = window.event;
                } 
                else { //total failure, we have no way of referencing the event
                  return;
                }
            }

            var n = e.keyCode ? e.keyCode : e.charCode; 

            if (n == 13) { //Enter
                var sMessage = $.trim(evElement.value);
                // clear all tags;
                sMessage = sMessage.replace(/<\/?[^>]+>/gi, '');

                // send message
                if(sMessage) {
                    clearTimeout(this.updateTimeNotifyHandler);
                    var _sRandom = Math.random();  

                    $.post(this.sPageReceiver + 'write_message' + '&_r=' + _sRandom, { 'message': sMessage }, function(sData){
                        if(!sData) {
                            self.getMessages();
                        }
                        else {
                            alert(sData);
                        }                        
                    });

                    evElement.value = '';
                }
                else {
                    alert(this.oMessages.empty_message);
                    evElement.value = '';
                }
            }
        },

        /**
         * Function will return all latest messages list;
         *
         */
        this.getMessages = function()
        {
            var self = this;
            var _sRandom = Math.random();  

            $.getJSON(this.sPageReceiver + 'get_messages/' + this.iLastMessageId + '&_r=' + _sRandom, function(data){
                self.iLastMessageId = parseInt(data.last_message_id);

                if(data.messages) {

                    var $el = $('.' + self.sMessagesContainer);
                    // need for scroll content;
                    var iOldContentHeight = self.getContentHeight($el);
                    var iChatBoxHeight    =  $el.outerHeight();
 
                    $el.append(data.messages);

                    var iNewContentHeight = self.getContentHeight($el);

                    // scroll content;
                    iOldContentHeight -= iChatBoxHeight;
                    if( iOldContentHeight <= $el.scrollTop() ) {
                        $el.scrollTop(iNewContentHeight)
                    }

                    //self.scrollContent($el);
                }

                // start it again;
                self.updateTimeNotifyHandler = setTimeout(function(){
                   self.getMessages(self.getMessages);
                }, self.iUpdateTime);
            });
        },

        /**
         * Function will get the chat box's sub content height;
         *
         * @param  : $oChatBox (object) - chat box;
         * @return : (integer) - sub content height;
         */
        this.getContentHeight = function($el)
        {
            var iHeight = 0;

            // define the chat boxe's childrens height;
            $el.children().each(function(){
                iHeight += $(this).outerHeight();
            });

            return iHeight;
        },

        /**
         * Function will scroll content to the end of container;
         */
        this.scrollContent = function($el)
        {
            // define container's height;
            if(typeof $el == 'undefined') {
                var $el = $('.' + this.sMessagesContainer);
            }

            $el.scrollTop( this.getContentHeight($el) );
        }
    }