Файл: plugins/mailbox/static/js/contactmanager.js
Строк: 3204
<?php
/* Contact */
MAILBOX_Contact = Backbone.Model.extend({
defaults: {
convId: null,
opponentId: null,
status: '',
lastMessageTimestamp: 0,
displayName: '',
profileUrl: '',
avatarUrl: '',
wasCorrespondence: false,
isFriend: false,
unreadMessagesCount: 0,
show: false,
wasCreatedByScroll: false
},
show: function(){
this.set('show', true);
},
hide: function(){
this.set('show', false);
}
});
MAILBOX_ContactView = Backbone.View.extend({
template: function(data){
var itemControl = $('#peep_chat_list_proto ul li').clone();
itemControl.attr('id', 'contactItem'+this.model.get('opponentId'));
itemControl.data( this.model );
return itemControl;
},
initialize: function(){
var self = this;
this.setElement(this.template());
this.itemLink = $('a.peep_chat_item', this.$el);
this.unreadMessagesCountWrapper = $('.peep_count_wrap', this.$el);
this.unreadMessagesCountControl = $('.peep_count', this.$el);
this.displayNameControl = $( '#contactItemDisplayName', this.$el );
this.avatarUrlControl = $( '#contactItemAvatarUrl', this.$el );
this.statusControl = $('#contactProfileStatus', this.$el);
this.model.on('remove', function(){
this.$el.remove();
}, this);
this.model.on('change:status', function(){
this.statusControl.removeClass();
this.statusControl.addClass('peep_chat_status');
if (this.model.get('status') != 'offline'){
this.statusControl.addClass(this.model.get('status'));
}
this.$el.removeClass();
this.$el.addClass(this.model.get('status'));
}, this);
this.model.on('change:unreadMessagesCount', function(){
this.unreadMessagesCountControl.html(this.model.get('unreadMessagesCount'));
if (this.model.get('unreadMessagesCount') > 0){
this.unreadMessagesCountWrapper.show();
this.statusControl.hide();
this.itemLink.addClass('peep_active');
}
else{
this.unreadMessagesCountWrapper.hide();
this.statusControl.show();
this.itemLink.removeClass('peep_active');
}
}, this);
this.model.on('change:show', function(){
if (this.model.get('show')){
this.show();
}
else{
this.hide();
}
}, this);
this.model.on('change:wasCreatedByScroll', function(){
if (this.model.get('wasCreatedByScroll')){
this.model.set('show', true);
}
else{
this.model.set('show', false);
}
}, this);
this.$el.click(function (){
if (typeof PEEP.Mailbox.newMessageFormController != "undefined") {
if (PEEP.Mailbox.newMessageFormController.closeNewMessageWindowWithConfirmation($('.mailboxDialogBlock.peep_open').length)) {
PEEP.trigger('mailbox.open_dialog', {convId: self.model.get('convId'), opponentId: self.model.get('opponentId'), mode: 'chat', isSelected: true, isActive: true});
}
}
else {
PEEP.trigger('mailbox.open_dialog', {convId: self.model.get('convId'), opponentId: self.model.get('opponentId'), mode: 'chat', isSelected: true, isActive: true});
}
});
PEEP.bind('mailbox.presence', function(presence){
if (presence.opponentId != self.model.get('opponentId')){
return;
}
self.model.set('status', presence.status);
});
PEEP.bind('mailbox.dialog_opened', function(data){
if (data.convId != self.model.get('convId')){
return;
}
// self.model.set('unreadMessagesCount', 0);
self.updateUnreadMessagesCount({message: {convId: data.convId}, unreadMessageList: PEEP.Mailbox.contactManager.unreadMessageList});
});
PEEP.bind('mailbox.dialog_selected', function(data){
if (data.convId != self.model.get('convId')){
return;
}
// self.model.set('unreadMessagesCount', 0);
self.updateUnreadMessagesCount({message: {convId: data.convId}, unreadMessageList: PEEP.Mailbox.contactManager.unreadMessageList});
});
this.updateUnreadMessagesCount = function(data){
if (data.message.convId != self.model.get('convId')){
return;
}
var unreadMessagesCount = 0;
for(var i=0; i<data.unreadMessageList.length; i++){
if (self.model.get('convId') == data.unreadMessageList.models[i].get('convId')){
unreadMessagesCount++;
}
}
self.model.set('unreadMessagesCount', unreadMessagesCount);
}
PEEP.bind('mailbox.message_was_read', this.updateUnreadMessagesCount);
PEEP.bind('mailbox.data_received_for_'+self.model.get('opponentId'), function(data){
if (self.model.get('convId') == 0){
self.model.set('convId', data.conversationId);
}
});
},
render: function(){
this.displayNameControl.html(this.model.get('displayName'));
this.avatarUrlControl.attr('src', this.model.get('avatarUrl'));
this.avatarUrlControl.attr('alt', this.model.get('displayName'));
this.avatarUrlControl.attr('title', this.model.get('shortUserData'));
this.$el.addClass(this.model.get('status'));
this.hide();
this.statusControl.addClass('peep_chat_status');
if (this.model.get('status') != 'offline'){
this.statusControl.addClass(this.model.get('status'));
this.show();
}
PEEP.bindTips(this.$el);
return this;
},
hide: function(){
this.$el.addClass('peep_hidden');
},
show: function(){
this.$el.removeClass('peep_hidden');
}
});
MAILBOX_ContactsCollection = Backbone.Collection.extend({
model: MAILBOX_Contact,
comparator: function(model){
if (model.get('lastMessageTimestamp') > 0){
return -model.get('lastMessageTimestamp');
}
else if (model.get('isFriend')){
return model.get('status') != 'offline';
}
else{
return model.get('status') == 'offline';
}
},
initialize: function(){
PEEP.Mailbox.usersCollection.on('add', this.addUser, this);
PEEP.Mailbox.usersCollection.on('change', this.changeUser, this);
},
addUser: function(user){
if ( user.get('canInvite') && ( PEEPMailbox.showAllMembersMode || user.get('lastMessageTimestamp') > 0 || user.get('isFriend') ) ){
this.add(new MAILBOX_Contact(user.attributes));
}
},
changeUser: function(user){
var contact = this.findWhere({opponentId: user.get('opponentId')});
if (contact){
contact.set(user.attributes);
}
//TODO remove user from contacts if it became not friend or conversations were deleted and showAllMembersMode is off
}
});
/* End Contact */
/* Contact Manager */
MAILBOX_ContactManager = Backbone.Model.extend({
defaults: {
userOnlineCount: 0,
userOnlineStatusCount: 0,
totalUnreadMessages: 0,
chatSelectorUnreadMessages: 0,
soundEnabled: true,
showOnlineOnly: true,
chatBlockActive: "0",
},
initialize: function(){
this.contacts = new MAILBOX_ContactsCollection;
this.readMessageList = new Backbone.Collection;
this.unreadMessageList = new Backbone.Collection;
this.viewedConversationList = [];
this.loadedContactCount = 0;
this.set('soundEnabled', (im_readCookie('im_soundEnabled') !== null) ? parseInt(im_readCookie('im_soundEnabled')) : PEEPMailbox.soundEnabled);
this.set('showOnlineOnly', (im_readCookie('im_showOnlineOnly') !== null) ? parseInt(im_readCookie('im_showOnlineOnly')) : PEEPMailbox.showOnlineOnly);
},
addUnreadMessageToList: function(message){
this.unreadMessageList.add(message);
},
addViewedConversation: function(conversationId){
this.viewedConversationList.push(conversationId);
var conversation = PEEP.Mailbox.conversationsCollection.findWhere({conversationId: conversationId});
if (conversation){
conversation.set('conversationViewed', true);
}
},
clearReadMessageList: function(){
this.readMessageList = new Backbone.Collection;
},
clearViewedConversationList: function(){
this.viewedConversationList = [];
},
loadList: function(numberToLoad){
var toLoad = numberToLoad || 10; //TODO this is hardcode
var n =this.loadedContactCount + toLoad;
if (n > this.contacts.length){
n = this.contacts.length;
}
for (var i=this.loadedContactCount; i<n; i++){
var contact = this.contacts.models[i];
contact.set('wasCreatedByScroll', true);
}
this.loadedContactCount = i;
},
getReadMessageList: function(){
return this.readMessageList.pluck('id');
},
getUnreadMessageList: function(){
return this.unreadMessageList.pluck('id');
},
getViewedConversationList: function(){
return this.viewedConversationList;
}
});
MAILBOX_ContactManagerView = Backbone.View.extend({
initialize: function(){
var self = this;
this.dialogs = {};
this.newMessageTimeout = 0;
this.statusUpdatedTimeout = {};
this.construct();
this.model.unreadMessageList.on('add', this.addUnreadMessage, this);
this.model.unreadMessageList.on('remove', this.removeUnreadMessage, this);
PEEP.bind('mailbox.draggable.drag', function(){
self.fitWindow();
});
PEEP.bind('mailbox.message', function(message){
var messagesOpened = false;
if (typeof PEEP.Mailbox.conversationController != 'undefined'){
messagesOpened = true;
}
var conversationOpened = false;
if (messagesOpened && PEEP.Mailbox.conversationController.model.convId == message.convId){
conversationOpened = true;
}
if (PEEPMailbox.chatModeEnabled && PEEPMailbox.useChat == 'available' && message.mode == 'chat'){
var dialog;
// Message from my other resources
if( message.senderId == PEEPMailbox.userDetails.userId ){
dialog = self.getDialog(message.convId, message.recipientId);
dialog.model.setMode(message.mode);
if ( !conversationOpened ){
if (!dialog.model.isOpened){
dialog.showTab();
if (!dialog.model.isActive){
dialog.open();
}
}
else{
dialog.write(message);
}
}
else if (dialog.model.isOpened){
dialog.write(message);
}
PEEP.Mailbox.lastMessageTimestamp = message.timeStamp;
}
else{
// Message to other contact
dialog = self.getDialog(message.convId, message.senderId);
if (dialog){
if (!message.conversationViewed && !conversationOpened && message.mode == 'chat' && dialog.model.status != 'offline' && !dialog.model.isOpened && !dialog.model.isActive){
dialog.showTab().open();
dialog.model.setIsSelected(false);
// silent mode
if (!self.model.get('soundEnabled')) {
dialog.model.setIsActive(false);
}
}
if ( dialog.model.isLoaded ){
dialog.write(message);
}
//Dialog is not selected it can be hidden in chat selector or opened and collapsed or opened and expanded, but we need to inform user anyway by notifications
// if ( !dialog.model.isSelected && !conversationOpened && !message.conversationViewed ){
if ( !dialog.model.isSelected && !conversationOpened ){
if ( message.mode == 'chat' && self.newMessageTimeout === 0 ){
var new_message_label = PEEP.getLanguageText('mailbox', 'new_message');
self.newMessageTimeout = setInterval(function() {
document.title = document.title == new_message_label ? PEEPMailbox.documentTitle : new_message_label;
}, 3000);
}
self.model.addUnreadMessageToList(message);
PEEP.trigger('mailbox.new_message_notification', {message: message, unreadMessageList: self.model.unreadMessageList});
}
}
}
}
else{
if (!conversationOpened && message.recipientId == PEEPMailbox.userDetails.userId){
self.model.addUnreadMessageToList(message);
PEEP.trigger('mailbox.new_message_notification', {message: message, unreadMessageList: self.model.unreadMessageList});
return;
}
//else
//{
// console.log(message);
//}
}
});
PEEP.bind('mailbox.mark_message_read', function(data){
PEEP.trigger('mailbox.clear_new_message_notification', {convId: data.message.convId});
if (!data.message.readMessageAuthorized){
PEEP.trigger('mailbox.clear_new_message_blinking', {message: data.message, unreadMessageList: self.model.unreadMessageList});
return;
}
if (data.message.readMessageAuthorized){
self.model.readMessageList.add(data.message);
}
self.model.unreadMessageList.remove(data.message);
for (var i=0; i < PEEP.Mailbox.markedUnreadConversationList.length; i++){
var convId = PEEP.Mailbox.markedUnreadConversationList;
if (data.message.convId == convId){
PEEP.Mailbox.markedUnreadConversationList.splice(i, 1);
}
}
PEEP.trigger('mailbox.message_was_read', {message: data.message, unreadMessageList: self.model.unreadMessageList});
self.updateChatSelectorUnreadMessagesCount();
});
////////////////////////////////////// Chat Enabled //////////////////////////////////////
if (PEEPMailbox.chatModeEnabled && PEEPMailbox.useChat == 'available'){
this.model.contacts.on('add', this.addContact, this);
this.model.contacts.on('change', this.updateContact, this);
this.model.on('change:chatSelectorUnreadMessages', function(){
self.chatSelectorUnreadMessagesCounter.html(self.model.get('chatSelectorUnreadMessages'));
if (self.model.get('chatSelectorUnreadMessages') > 0 && !self.chatSelectorButton.hasClass('peep_active'))
{
self.chatSelectorTotalUnreadMessagesCountWrapper.show();
}
else
{
self.chatSelectorTotalUnreadMessagesCountWrapper.hide();
}
}, this);
this.model.on('change:soundEnabled', function(){
this.setSoundEnabled();
$.ajax({
url: PEEPMailbox.settingsResponderUrl,
type: 'POST',
data: {'soundEnabled': self.model.get('soundEnabled')},
dataType: 'json'
});
im_createCookie('im_soundEnabled', (self.model.get('soundEnabled'))?1:0, 1);
}, this);
this.model.on('change:showOnlineOnly', function(){
this.setShowOnlineOnly();
$.ajax({
url: PEEPMailbox.settingsResponderUrl,
type: 'POST',
data: {'showOnlineOnly': self.model.get('showOnlineOnly')},
dataType: 'json'
});
im_createCookie('im_showOnlineOnly', (self.model.get('showOnlineOnly'))?1:0, 1);
PEEPMailbox.showOnlineOnly = this.model.get('showOnlineOnly');
}, this);
this.model.on('change:chatBlockActive', function(){
if (this.model.get('chatBlockActive') == "1"){
this.maximize();
}
else{
this.minimize();
}
PEEP.updateScroll( this.contactListWrapper );
PEEPMailbox.getStorage().setItem('chatBlockActive', this.model.get('chatBlockActive'));
}, this);
this.model.on('change:userOnlineCount', this.onMainCounterUpdate, this);
this.model.on('change:userOnlineStatusCount', this.onOnlineCounterUpdate, this);
PEEP.bind('mailbox.application_started', function(){
self.model.loadList();
PEEP.updateScroll(self.contactListWrapper);
var openedDialogs = PEEPMailbox.getOpenedDialogsCookie();
$.each(openedDialogs, function(convId, presence){
self.moveToActiveMode();
var dialog = self.getDialog(parseInt(convId), presence.opponentId);
if (dialog == null){
var oDialogs = PEEPMailbox.getOpenedDialogsCookie();
if (typeof oDialogs[convId] != 'undefined'){
delete oDialogs[convId];
}
PEEPMailbox.setOpenedDialogsCookie(oDialogs);
}
else
{
PEEP.trigger('mailbox.open_dialog', {convId: convId, opponentId: presence.opponentId, mode: presence.mode, isActive: presence.isActive, isSelected: presence.isSelected});
}
});
self.fitWindow();
});
PEEP.bind('mailbox.clear_new_message_notification', function(data){
if ( self.newMessageTimeout !== 0 ){
clearInterval( self.newMessageTimeout );
document.title = PEEPMailbox.documentTitle;
self.newMessageTimeout = 0;
}
self.model.addViewedConversation(data.convId);
});
PEEP.bind('mailbox.dialog_moved_to_chat_selector', function(data){
self.updateChatSelector();
});
PEEP.bind('mailbox.dialog_removed_from_chat_selector', function(data){
self.updateChatSelector();
});
PEEP.bind('mailbox.open_dialog', function(data){
var dialog = self.getDialog(data.convId, data.opponentId);
if (data.hasOwnProperty('mode')){
dialog.model.setMode(data.mode);
}
dialog.showTab().open();
if (data.hasOwnProperty('isActive')){
dialog.model.setIsActive(data.isActive);
}
if (dialog.model.isOpened){
if (dialog.model.isHidden){
var dialogs = $('.mailboxDialogBlock.peep_open');
var firstDialogControl = dialogs.first();
var firstConvId = $(firstDialogControl).data('convId');
PEEP.trigger('mailbox.move_dialog_to_chat_selector', {convId: firstConvId});
PEEP.trigger('mailbox.remove_dialog_from_chat_selector', {convId: dialog.model.convId});
}
}
if (data.hasOwnProperty('isSelected')){
dialog.model.setIsSelected(data.isSelected);
}
self.fitWindow();
});
PEEP.bind('mailbox.close_dialog', function(data){
if (typeof self.dialogs[data.convId] != 'undefined'){
var dialog = self.getDialog(data.convId, data.opponentId);
if (dialog.model.isOpened){
dialog.hideTab();
}
}
});
PEEP.bind('mailbox.conversation_deleted', function(data){
PEEP.trigger('mailbox.close_dialog', data);
});
PEEP.bind('mailbox.dialog_tab_shown', function(params){
if (PEEPMailbox.chatModeEnabled){
self.moveToActiveMode();
}
self.fitWindow();
});
PEEP.bind('mailbox.dialog_hidden', function(params){
});
PEEP.bind('mailbox.dialog_selected', function(params){
$.each(self.dialogs, function(id, dialog){
if (dialog.model.isSelected && dialog.model.convId != params.convId){
dialog.model.setIsSelected(false);
}
});
});
PEEP.bind('mailbox.dialog_closed', function(params){
self.removeDialog(params.convId);
self.fitWindow();
});
PEEP.bind('mailbox.new_message_form_opened', function(data){
self.fitWindow();
});
PEEP.bind('mailbox.new_message_form_closed', function(data){
self.fitWindow();
});
PEEP.bind('mailbox.new_message_form_minimized', function(data){
self.fitWindow();
});
$(window).resize(function(){
self.fitWindow();
});
$(document).click(function( e ){
if ( !$(e.target).is(':visible') ){
return;
}
var countOfDialogsInChatSelector = self.countOfDialogsInChatSelector();
//Show or hide chat dialog selector
var isContent = self.chatSelectorList.find(e.target).length;
var isTarget = self.chatSelectorButton.is(e.target) || self.chatSelectorButton.find(e.target).length;
if ( isTarget && !isContent ){
if (self.chatSelectorList.hasClass('peep_hidden')){
if (countOfDialogsInChatSelector > 0){
self.chatSelectorButton.addClass('peep_active');
self.chatSelectorList.removeClass('peep_hidden');
//Hide if there are no hidden unread dialogs
self.chatSelectorTotalUnreadMessagesCountWrapper.hide();
}
}
else{
self.chatSelectorButton.removeClass('peep_active');
self.chatSelectorList.addClass('peep_hidden');
//Show if there are hidden unread dialogs
if ( self.model.get('chatSelectorUnreadMessages') > 0 ){
self.chatSelectorTotalUnreadMessagesCountWrapper.show();
}
}
self.showChatSelector();
}
else if ( !isContent ){
self.chatSelectorButton.removeClass('peep_active');
self.chatSelectorList.addClass('peep_hidden');
if (countOfDialogsInChatSelector == 0)
{
self.hideChatSelector();
}
else
{
//Show if there are hidden unread dialogs
if ( self.model.get('chatSelectorUnreadMessages') > 0 )
{
self.chatSelectorTotalUnreadMessagesCountWrapper.show();
}
}
}
var isTarget = $('.peep_chat_in_dialog_wrap').is(e.target) || $('.peep_chat_in_dialog_wrap').find(e.target).length || $('.peep_chat_message_block').is(e.target) || $('.peep_chat_message_block').find(e.target).length;
var isSwitchToChatBtn = $('#conversationSwitchToChatBtn').is(e.target);
var isContactArea = $('.peep_chat_list').find(e.target).length;
var isChatSelector = $('.peep_chat_selector').find(e.target).length;
if ( !isTarget && !isSwitchToChatBtn && !isContactArea && !isChatSelector){
$.each(self.dialogs, function(id, dialog){
dialog.model.setIsSelected(false);
});
}
});
$(document).ready(function(){
self.searchFormElement = new SearchField("im_find_contact", "im_find_contact", PEEP.getLanguageText('mailbox', 'find_contact'));
self.searchFormElement.setHandler(self);
});
this.minimizeButton.click(function(e){
if (self.sortSettingsBtn.is(e.target) || self.sortSettingsBtn.find(e.target).length){
return;
}
if (self.model.get('chatBlockActive') == "1"){
self.model.set('chatBlockActive', "0");
}
else{
self.model.set('chatBlockActive', "1");
}
});
this.soundSettingsBtn.click(function(){
self.model.set('soundEnabled', !self.model.get('soundEnabled'));
});
this.sortSettingsBtn.click(function(){
self.model.set('showOnlineOnly', !self.model.get('showOnlineOnly'));
});
this.contactListWrapper.bind('jsp-scroll-y', function(event, scrollPositionY, isAtTop, isAtBottom){
if (self.model.loadedContactCount < self.model.contacts.length && !self.loadingContacts && isAtBottom){
self.loadingContacts = true;
self.model.loadList();
PEEP.updateScroll(self.contactListWrapper);
self.loadingContacts = false;
}
});
$('.peep_chat_list .peep_chat_preloader').remove();
// var im_showOnlineOnly = im_readCookie('im_showOnlineOnly');
// if (im_showOnlineOnly){
// PEEPMailbox.showOnlineOnly = parseInt(im_showOnlineOnly);
// }
// this.model.set('showOnlineOnly', PEEPMailbox.showOnlineOnly);
this.setShowOnlineOnly();
// var im_soundEnabled = im_readCookie('im_soundEnabled');
// if (im_soundEnabled){
// PEEPMailbox.soundEnabled = parseInt(im_soundEnabled);
// }
// this.model.set('soundEnabled', PEEPMailbox.soundEnabled);
this.setSoundEnabled();
if (PEEPMailbox.getStorage().getItem('chatBlockActive') == "1"){
this.model.set('chatBlockActive', "1");
}
}
///////////////////////// End Chat Enabled ///////////////////////////////////////////////
},
addContact: function(user){
var contactView = new MAILBOX_ContactView({model: user});
var itemIndex = this.model.contacts.indexOf(user);
if (itemIndex == 0){
this.contactListContainer.prepend(contactView.render().$el);
}
else{
this.contactListContainer.append(contactView.render().$el);
}
var jsp = this.contactListWrapper.data('jsp');
if ( jsp ){
PEEP.updateScroll( this.contactListWrapper );
}
else{
PEEP.addScroll( this.contactListWrapper );
}
this.model.set('userOnlineCount', this.model.contacts.length);
if (user.get('status') != 'offline'){
var usersWithOnlineStatus = _.filter( this.model.contacts.models, function(contact){
return contact.get('status') != 'offline' } );
this.model.set('userOnlineStatusCount', usersWithOnlineStatus.length);
}
},
construct: function(){
var self = this;
this.contactListContainer = $('.peep_chat_list ul');
this.chatSelector = $('.peep_chat_selector');
this.chatSelectorButton = $('.peep_btn_dialogs');
this.chatSelectorList = $('.peep_chat_selector_list');
this.chatSelectorTotalUnreadMessagesCountWrapper = $('.peep_chat_selector .peep_chat_block .peep_selector_panel .peep_count_wrap');
this.chatSelectorUnreadMessagesCounter = $('.peep_chat_selector .peep_chat_block .peep_selector_panel .peep_count_wrap .peep_count_bg .peep_count');
this.hiddenContactsCountWrapper = $('.peep_chat_selector .peep_chat_block .peep_selector_panel .peep_dialog_count');
if (PEEPMailbox.chatModeEnabled && PEEPMailbox.useChat == 'available'){
this.chatSettingsActive = false;
this.fitWindowNumber = 0;
this.contactListWrapper = $('.peep_chat_list');
this.mainWindow = $('.peep_chat .peep_chat_block_wrap .peep_chat_block');
this.minimizeButton = $('.btn2_panel');
this.puller = $('.peep_puller', $('.peep_chat'));
this.inDragging = false;
this.puller.draggable({
disabled: true,
axis: "y",
cursor: 'row-resize',
drag: function(event, ui){
if (ui.position.top < 0)
{
if ( self.contactListWrapper.height() > $(window).innerHeight() * 0.8 )
{
return;
}
}
self.contactListWrapper.height( self.mainWindowHeight - ui.position.top );
},
stop: function(event, ui){
if ( self.contactListWrapper.height() > $(window).innerHeight() * 0.8 ){
self.contactListWrapper.height( $(window).innerHeight() * 0.8 );
}
self.puller.css('top','-10px');
if ( $('.peep_chat_list ul').height() > self.contactListWrapper.height() ){
PEEP.addScroll(self.contactListWrapper);
}
else{
self.contactListWrapper.width(245);
}
self.inDragging = false;
},
start: function(event, ui){
self.inDragging = true;
PEEP.removeScroll(self.contactListWrapper);
self.mainWindowHeight = self.contactListWrapper.height();
}
});
this.foldingTimeout = false;
this.foldingTime = 2000;
this.notificationWrapper = $('.peep_chat');
this.settingsWrapper = $('.peep_chat_settings');
this.soundSettingsBtn = $('#mailboxSoundPreference');
this.sortSettingsBtn = $('#mailboxSortUsersPreference');
this.soundSettings = $('#im_enable_sound');
this.totalUserOnlineCount = $('.totalUserOnlineCount');
this.totalUserOnlineCountBackground = $('.totalUserOnlineCountBackground');
}
},
countOfDialogsInChatSelector: function(){
var size = 0, key;
for (key in this.dialogs) {
if (this.dialogs[key].model.isHidden)
{
size++;
}
}
return size;
},
fitWindow: function() {
var self = this;
// exit from recursion
if (self.fitWindowNumber > 20)
{
self.fitWindowNumber = 0;
return;
}
self.fitWindowNumber++;
// get width of the contact finder
var allChatsWidth = $('.peep_chat').outerWidth(true);
// calculate all chats width
$("#dialogsContainer > div:visible").each(function(index, div) {
allChatsWidth += $(div).outerWidth(true);
});
// get the window inner width
var winWidth = $(window).innerWidth();
// do we need hide all chats?
var minOpenedChats = typeof PEEP.Mailbox.newMessageFormController != "undefined"
&& PEEP.Mailbox.newMessageFormController.isNewMessageWindowActive() ? 0 : 1;
if (winWidth < allChatsWidth)
{
// folding
if ($('.mailboxDialogBlock.peep_open').length > minOpenedChats) {
var dialogs = $('.mailboxDialogBlock.peep_open');
var box = !minOpenedChats
? (typeof dialogs[1] != "undefined" ? dialogs[1] : dialogs[0])
: dialogs[1];
var convId = $(box).data('convId');
PEEP.trigger('mailbox.move_dialog_to_chat_selector', {convId: convId});
self.fitWindow();
}
}
else
{
// get last hidden chat box width
if ($('.peep_chat_selector_items li.peep_dialog_in_selector').length > 0)
{
var dialogs = $('div.mailboxDialogBlock.peep_hidden');
var box = dialogs.last();
if (winWidth > (allChatsWidth + $(box).outerWidth(true)))
{
// unfolding
var convId = $(box).data('convId');
PEEP.trigger('mailbox.remove_dialog_from_chat_selector', {convId: convId});
self.fitWindow();
}
}
}
if (self.fitWindowNumber > 0)
{
self.fitWindowNumber--;
}
},
getContactFromUserList: function(userId){
return PEEP.Mailbox.usersCollection.findWhere({opponentId: userId});
},
getDialog: function(convId, opponentId){
var self = this;
if( typeof self.dialogs[convId] == 'undefined' ){
var contactModel = self.getContactFromUserList(opponentId);
if (contactModel == null){
$.post(PEEPMailbox.openDialogResponderUrl, {
userId: opponentId,
checkStatus: 2
}, function(data){
if ( typeof data != 'undefined'){
if ( typeof data['warning'] != 'undefined' && data['warning'] ){
PEEP.message(data['message'], data['type']);
}
else{
if (data['use_chat'] && data['use_chat'] == 'promoted'){
self.showPromotion();
}
else{
PEEP.Mailbox.usersCollection.add(data);
contactModel = self.getContactFromUserList(opponentId);
}
}
}
}, 'json');
if (contactModel == null)
{
return null;
}
}
var dialogModel = new PEEPMailbox.Dialog.Model(convId);
dialogModel.setConversationId(convId);
dialogModel.setOpponentId(opponentId);
dialogModel.setStatus(contactModel.get('status'));
dialogModel.setDisplayName(contactModel.get('displayName'));
dialogModel.setAvatarUrl(contactModel.get('avatarUrl'));
dialogModel.setProfileUrl(contactModel.get('profileUrl'));
self.dialogs[convId] = new PEEPMailbox.Dialog.Controller(dialogModel);
}
return self.dialogs[convId];
},
getRosterLength: function(){
var size = 0, key;
for (key in this.model.contacts) {
if (this.model.contacts.hasOwnProperty(key)) size++;
}
return size;
},
hideChatSelector: function(){
this.chatSelector.addClass('peep_hidden');
},
hidePromotion: function(){
$('#chatPromotionBlock').addClass('peep_hidden');
},
isActiveMode: function(){
return this.mainWindow.hasClass('peep_active');
},
isCompactMode: function(){
return this.mainWindow.hasClass('peep_compact');
},
maximize: function(){
this.mainWindow.addClass('peep_active');
if (this.mainWindow.hasClass('peep_compact')){
this.mainWindow.removeClass('peep_compact');
}
this.puller.draggable("enable");
//this.puller.addClass('peep_im_draggable');
},
minimize: function(){
this.mainWindow.removeClass('peep_active');
this.puller.draggable("disable");
//this.puller.removeClass('peep_im_draggable');
},
moveToActiveMode: function(){
var self = this;
if ( self.mainWindow.hasClass('peep_compact') && self.mainWindow.hasClass('peep_active') )
{
var speed = 'normal';
self.mainWindow.removeClass('peep_compact');
$('.peep_chat_cont').animate({
right: 0
}, speed);
if ( $('.peep_chat_list ul').height() > self.contactListWrapper.height() )
{
PEEP.updateScroll(self.contactListWrapper);
}
self.puller.draggable("enable");
}
},
onMainCounterUpdate: function(){
if (PEEPMailbox.chatModeEnabled && !this.model.get('showOnlineOnly')){
this.totalUserOnlineCount.html(this.model.get('userOnlineCount'));
}
},
onOnlineCounterUpdate: function(){
if (PEEPMailbox.chatModeEnabled && this.model.get('showOnlineOnly')){
this.totalUserOnlineCount.html(this.model.get('userOnlineStatusCount'));
}
},
removeDialog: function(convId){
delete this.dialogs[convId];
},
showChatSelector: function(){
this.chatSelector.removeClass('peep_hidden');
},
showPromotion: function(){
$('#chatPromotionBlock').removeClass('peep_hidden');
},
updateChatSelector: function() {
var count = this.countOfDialogsInChatSelector();
this.hiddenContactsCountWrapper.html(count);
if (count > 0)
{
this.showChatSelector();
}
if (count == 0)
{
this.hideChatSelector();
}
},
updateChatSelectorUnreadMessagesCount: function(message){
var chatSelectorUnreadMessages = 0;
var self = this;
$.each(this.dialogs, function(){
if (this.model.isHidden){
var convId = this.model.convId;
for(var i=0; i<self.model.unreadMessageList.length; i++){
if (self.model.unreadMessageList.models[i].get('convId') == convId){
chatSelectorUnreadMessages++;
}
}
}
});
this.model.set('chatSelectorUnreadMessages', chatSelectorUnreadMessages);
},
updateList: function(name){
var self = this;
if (name == ''){
for (var i=0; i<this.model.contacts.length; i++){
var contact = this.model.contacts.models[i];
if (contact.get('wasCreatedByScroll')){
contact.show();
}
else{
contact.hide();
}
}
PEEP.updateScroll(self.contactListWrapper);
}
else{
var expr = new RegExp('(^'+name+'.*)|(\s'+name+'.*)', 'i');
for (var i=0; i<this.model.contacts.length; i++){
var contact = this.model.contacts.models[i];
if (!expr.test(contact.get('displayName'))){
contact.hide();
}
else{
contact.show();
}
}
PEEP.updateScroll(self.contactListWrapper);
}
},
addUnreadMessage: function(message){
var messages = this.model.unreadMessageList.where({convId: message.get('convId')});
var conversation = PEEP.Mailbox.conversationsCollection.findWhere({conversationId: message.get('convId')});
if (conversation){
conversation.set('newMessageCount', messages.length);
conversation.set('conversationRead', 0);
}
this.updateChatSelectorUnreadMessagesCount(message);
},
removeUnreadMessage: function(message){
var messages = this.model.unreadMessageList.where({convId: message.get('convId')});
var conversation = PEEP.Mailbox.conversationsCollection.findWhere({conversationId: message.get('convId')});
if (conversation){
conversation.set('newMessageCount', messages.length);
conversation.set('conversationRead', 1);
conversation.set('conversationViewed', true);
}
},
updateContact: function(contact){
var usersWithOnlineStatus = _.filter( this.model.contacts.models, function(contact){
return contact.get('status') != 'offline' } );
this.model.set('userOnlineStatusCount', usersWithOnlineStatus.length);
},
setShowOnlineOnly: function(){
var self = this;
if (self.model.get('showOnlineOnly')){
$('#mailboxSortUsersPreference span').addClass('peep_btn_sort_online');
$('#mailboxSortUsersPreference').html( PEEP.getLanguageText('mailbox', 'show_all_users'));
self.contactListWrapper.removeClass('showAllUsers');
self.contactListWrapper.addClass('showOnlineOnly');
this.onOnlineCounterUpdate();
}
else{
$('#mailboxSortUsersPreference span').removeClass('peep_btn_sort_online');
$('#mailboxSortUsersPreference').html( PEEP.getLanguageText('mailbox', 'show_online_only'));
self.contactListWrapper.addClass('showAllUsers');
self.contactListWrapper.removeClass('showOnlineOnly');
this.onMainCounterUpdate();
}
PEEP.hideTip($('#mailboxSortUsersPreference'));
$('#mailboxSortUsersPreference').removeData('peepTip');
PEEP.bindTips($('#mailboxSortUsersPreference').parent());
PEEP.updateScroll(self.contactListWrapper);
},
setSoundEnabled: function(){
var self = this;
if (self.model.get('soundEnabled'))
{
$('#mailboxSoundPreference span').removeClass('peep_btn_sound_off');
$('#mailboxSoundPreference').html( PEEP.getLanguageText('mailbox', 'silent_mode_on'));
}
else
{
$('#mailboxSoundPreference span').addClass('peep_btn_sound_off');
$('#mailboxSoundPreference').html( PEEP.getLanguageText('mailbox', 'silent_mode_off'));
}
PEEP.hideTip($('#mailboxSoundPreference'));
$('#mailboxSoundPreference').removeData('peepTip');
PEEP.bindTips($('#mailboxSoundPreference').parent());
}
});
/* End Contact Manager */
/* Dialog */
PEEPMailbox.Dialog = {};
PEEPMailbox.Dialog.Model = function(convId){
var self = this;
this.convId = convId || 0;
this.opponentId = null;
this.mode = 'chat';
this.status = '';
this.firstMessageId = null;
this.lastMessageTimestamp = 0;
this.isLogLoaded = false;
this.displayName = false;
this.subject = false;
this.profileUrl = false;
this.avatarUrl = false;
this.isSuspended = false;
this.unreadMessagesCount = 0;
this.unreadMessageList = {};
this.shortUserData = '';
this.isComposing = false;
this.isActive = false;
this.isSelected = false;
this.isHidden = false;
this.isLoaded = false;
this.isOpened = false;
this.conversationIdSetSubject = PEEPMailbox.makeObservableSubject();
this.opponentIdSetSubject = PEEPMailbox.makeObservableSubject();
this.modeSetSubject = PEEPMailbox.makeObservableSubject();
this.statusUpdateSubject = PEEPMailbox.makeObservableSubject();
this.lastMessageTimestampSetSubject = PEEPMailbox.makeObservableSubject();
this.logLoadSubject = PEEPMailbox.makeObservableSubject();
this.displayNameSetSubject = PEEPMailbox.makeObservableSubject();
this.subjectSetSubject = PEEPMailbox.makeObservableSubject();
this.profileUrlSetSubject = PEEPMailbox.makeObservableSubject();
this.avatarUrlSetSubject = PEEPMailbox.makeObservableSubject();
this.isSuspendedSetSubject = PEEPMailbox.makeObservableSubject();
this.isComposingSetSubject = PEEPMailbox.makeObservableSubject();
this.isActiveSetSubject = PEEPMailbox.makeObservableSubject();
this.isSelectedSetSubject = PEEPMailbox.makeObservableSubject();
this.isHiddenSetSubject = PEEPMailbox.makeObservableSubject();
this.isLoadedSetSubject = PEEPMailbox.makeObservableSubject();
this.isOpenedSetSubject = PEEPMailbox.makeObservableSubject();
this.unreadMessagesCountSetSubject = PEEPMailbox.makeObservableSubject();
};
PEEPMailbox.Dialog.Model.prototype = {
setConversationId: function(value){
this.convId = value;
this.conversationIdSetSubject.notifyObservers();
},
setOpponentId: function(value){
this.opponentId = value;
this.opponentIdSetSubject.notifyObservers();
},
setMode: function(value){
this.mode = value;
this.modeSetSubject.notifyObservers();
},
setStatus: function(value){
this.status = value;
this.statusUpdateSubject.notifyObservers();
},
setLastMessageTimestamp: function(value){
this.lastMessageTimestamp = value;
this.lastMessageTimestampSetSubject.notifyObservers();
},
setIsLogLoaded: function(value){
this.isLogLoaded = value;
this.logLoadSubject.notifyObservers();
},
setDisplayName: function(value){
this.displayName = value;
this.displayNameSetSubject.notifyObservers();
},
setSubject: function(value){
this.subject = value;
this.subjectSetSubject.notifyObservers();
},
setProfileUrl: function(value){
this.profileUrl = value;
this.profileUrlSetSubject.notifyObservers();
},
setAvatarUrl: function(value){
this.avatarUrl = value;
this.avatarUrlSetSubject.notifyObservers();
},
setIsSuspended: function(value, message){
this.isSuspended = value;
this.suspendReasonMessage = message;
this.isSuspendedSetSubject.notifyObservers();
},
setIsComposing: function(value){
this.isComposing = value;
this.isComposingSetSubject.notifyObservers();
},
setIsActive: function(value){
this.isActive = value;
this.isActiveSetSubject.notifyObservers();
},
setIsHidden: function(value){
this.isHidden = value;
this.isHiddenSetSubject.notifyObservers();
},
setIsLoaded: function(value){
this.isLoaded = value;
this.isLoadedSetSubject.notifyObservers();
},
setIsOpened: function(value){
this.isOpened = value;
this.isOpenedSetSubject.notifyObservers();
},
setIsSelected: function(value){
this.isSelected = value;
this.isSelectedSetSubject.notifyObservers();
},
setUnreadMessagesCount: function(value){
this.unreadMessagesCount = value;
this.unreadMessagesCountSetSubject.notifyObservers();
},
addUnreadMessageToList: function(item){
this.unreadMessageList[item.id] = item;
var unreadMessagesCount = this.countUnreadMessages();
this.setUnreadMessagesCount(unreadMessagesCount);
},
removeUnreadMessageFromList: function(id){
delete this.unreadMessageList[id];
var unreadMessagesCount = this.countUnreadMessages();
this.setUnreadMessagesCount(unreadMessagesCount);
},
countUnreadMessages: function(){
var size = 0, key;
for (key in this.unreadMessageList) {
if (this.unreadMessageList.hasOwnProperty(key))
{
size++;
}
}
return size;
}
};
PEEPMailbox.Dialog.Controller = function(model){
var self = this;
this.model = model;
this.newMessageTimeout = 0;
this.historyLoadAllowed = false;
this.historyLoadInProgress = false;
this.uid = PEEPMailbox.uniqueId('mailbox_dialog_'+this.model.convId+'_'+this.model.opponentId+'_');
this.hasLinkObserver = false;
this.embedLinkDetected = false;
this.embedLinkResult = true;
this.embedAttachmentsValue = '';
this.embedAttachmentsObject = {};
this.construct();
peepFileAttachments[this.uid] = new PEEPFileAttachment({
'uid': this.uid,
'submitUrl': PEEPMailbox.attachmentsSubmitUrl,
'deleteUrl': PEEPMailbox.attachmentsDeleteUrl,
'showPreview': false,
'selector': '#main_tab_contact_' + this.model.opponentId + ' #dialogAttachmentsBtn',
'pluginKey': 'mailbox',
'multiple': false,
'lItems': []
});
PEEP.bind('base.add_attachment_to_queue', function(data){
if (data.pluginKey != 'mailbox' || data.uid != self.uid)
{
return;
}
self.attachmentsBtn.addClass('uploading');
// $('input', self.attachmentsBtn).attr('disabled', 'disabled');
});
PEEP.bind('base.update_attachment', function(data){
if (data.pluginKey != 'mailbox' || data.uid != self.uid)
{
return;
}
self.attachmentsBtn.removeClass('uploading');
// $('input', self.attachmentsBtn).removeAttr('disabled');
$.each(data.items, function(){
if (!this.result)
{
PEEP.error(this.message);
}
})
var newUid = PEEPMailbox.uniqueId('mailbox_dialog_'+self.model.convId+'_'+self.model.opponentId+'_');
PEEP.trigger('base.file_attachment', { 'uid': self.uid, 'newUid': newUid });
self.uid = newUid;
PEEP.getPing().getCommand('mailbox_ping').start();
});
$('.peep_chat_in_dialog_wrap, .peep_chat_message_block', this.control).click(function( e ){
self.model.setIsSelected(true);
});
this.minimizeMaximizeBtn.click(function(){
if ( self.model.isActive )
{
self.hide();
}
else
{
self.open();
self.model.setIsSelected(true);
}
if (!self.model.isSelected){
PEEP.trigger('mailbox.clear_new_message_notification', {convId: self.model.convId});
}
return false;
});
this.closeBtn.click(function(){
self.hideTab();
if (!self.model.isSelected){
PEEP.trigger('mailbox.clear_new_message_notification', {convId: self.model.convId});
}
});
$(this.textareaControl).bind('focus.invitation', {},
function(e){
el = $(this);
el.removeClass('invitation');
if( el.val() == '' || el.val() == PEEP.getLanguageText('mailbox', 'text_message_invitation')){
el.val('');
//hotfix for media panel
if( 'htmlarea' in el.get(0) ){
el.unbind('focus.invitation').unbind('blur.invitation');
el.get(0).htmlarea();
el.get(0).htmlareaFocus();
}
}
else{
el.unbind('focus.invitation').unbind('blur.invitation');
}
}
).bind('blur.invitation', {},
function(e){
el = $(this);
if( el.val() == '' || el.val() == PEEP.getLanguageText('mailbox', 'text_message_invitation')){
el.addClass('invitation');
el.val(PEEP.getLanguageText('mailbox', 'text_message_invitation'));
}
else{
el.unbind('focus.invitation').unbind('blur.invitation');
}
}
);
this.textareaControl.bind('paste', function(e){
var element = this;
setTimeout(function(){
self.adjustTextarea($(element));
}, 50);
});
this.textareaControl.bind('cut', function(e){
var element = this;
setTimeout(function(){
self.adjustTextarea($(element));
}, 50);
});
this.textareaControl.keyup(function(ev){
var storage = PEEPMailbox.getStorage();
storage.setItem('mailbox.dialog' + self.model.convId + '_form_message', $(this).val());
if (ev.which === 8){
self.adjustTextarea($(this));
}
if (ev.which === 13 && ev.shiftKey)
{
self.adjustTextarea($(this));
}
});
this.textareaControl.keydown(function(ev){
if (ev.which === 8){
self.adjustTextarea($(this));
}
if (ev.which === 13 && ev.shiftKey)
{
self.adjustTextarea($(this));
}
});
this.textareaControl.keypress(function (ev) {
if (!self.model.isSelected){
self.model.setIsSelected(true);
}
if (ev.which === 13 && !ev.shiftKey)
{
ev.preventDefault();
var body = $(this).val();
if ( $.trim(body) == '')
return;
self.sendMessage(body);
if (self.dialogWindowHeight > 0)
{
self.messageListWrapper.height( self.dialogWindowHeight );
}
$(this).attr('rows', 1);
$(this).css('height', self.textareaHeight);
self.scrollDialog();
self.model.setIsComposing(false);
}
else if (ev.which === 13 && ev.shiftKey)
{
self.adjustTextarea($(this));
}
else
{
self.adjustTextarea($(this));
}
});
this.smallItemControl.click(function(){
if (typeof PEEP.Mailbox.newMessageFormController != "undefined") {
if (PEEP.Mailbox.newMessageFormController.closeNewMessageWindowWithConfirmation($('.mailboxDialogBlock.peep_open').length)) {
PEEP.trigger('mailbox.open_dialog', {convId: self.model.convId, opponentId: self.model.convId, mode: self.model.mode});
}
}
else {
PEEP.trigger('mailbox.open_dialog', {convId: self.model.convId, opponentId: self.model.convId, mode: self.model.mode});
}
$('.peep_btn_dialogs').click();
});
this.messageListWrapper.bind('jsp-scroll-y', function(event, scrollPositionY, isAtTop, isAtBottom){
/**/
var dateCaps = $('.dialogMessageGroup', self.control);
dateCaps.each(function(){
var position = $(this).position();
var scrollPosition = parseInt(scrollPositionY) - 15;
if (scrollPosition > position.top)
{
self.setStickyDateCapValue($(this).data());
}
else
{
if (scrollPosition < 0)
{
self.hideStickyDateCap();
}
}
});
/**/
if (isAtTop && !self.historyLoadInProgress && self.model.firstMessageId != null && self.historyLoadAllowed)
{
//TODOS show preloader on top
self.historyLoadInProgress = true;
PEEP.Mailbox.sendInProcess = true;
$.ajax({
url: PEEPMailbox.getHistoryResponderUrl,
type: 'POST',
data: {
convId: self.model.convId,
messageId: self.model.firstMessageId,
},
success: function(data){
//TODOS hide preloader from top
if ( typeof data != 'undefined' )
{
if (data.log.length > 0)
{
var heightBefore = self.messageListControl.height();
$(data.log).each(function(){
self.writeHistory(this);
});
var heightAfter = self.messageListControl.height();
PEEP.updateScroll(self.messageListWrapper);
var jsp = self.messageListWrapper.data('jsp');
jsp.scrollByY(heightAfter - heightBefore);
}
else
{
self.historyLoadAllowed = false;
}
}
},
error: function(e){
PEEPMailbox.log(e);
self.messageListControl.html(e.responseText);
},
complete: function(){
self.historyLoadInProgress = false;
PEEP.Mailbox.sendInProcess = false;
},
dataType: 'json'
});
}
if (isAtBottom)
{
self.historyLoadAllowed = true;
}
});
this.messageListControl.on('click', '.callReadMessage', function(e){
$.ajax({
'type': 'POST',
'url': PEEPMailbox.authorizationResponderUrl,
'data': {
'actionParams': $(this).attr('id')
},
'success': function(data){
if (typeof data.error != 'undefined')
{
PEEP.error(data.error);
}
else
{
if (typeof data.authorizationActionText != 'undefined')
{
PEEP.info(data.authorizationActionText);
}
self.updateMessage(data);
}
},
'dataType': 'json'
})
});
this.model.conversationIdSetSubject.addObserver(function(){
// self.control.attr('id', 'main_tab_contact_' + self.model.convId);
self.control.data('convId', self.model.convId);
});
this.model.avatarUrlSetSubject.addObserver(function(){
self.avatarControl.attr('src', self.model.avatarUrl);
});
this.model.profileUrlSetSubject.addObserver(function(){
self.profileUrlControl.attr('href', self.model.profileUrl);
});
this.model.displayNameSetSubject.addObserver(function(){
self.avatarControl.attr('alt', self.model.displayName);
self.avatarControl.attr('title', self.model.shortUserData);
PEEP.bindTips(self.control);
self.displayNameControl.html(self.model.displayName);
self.chatSelectorDisplayNameControl.html(self.model.displayName);
});
this.model.modeSetSubject.addObserver(function(){
// if (self.model.mode == 'chat')
// {
// self.subjectBlockControl.remove();
if (!self.hasLinkObserver){
PEEPLinkObserver.observeInput('main_tab_contact_'+self.model.opponentId+' #dialogTextarea', function(link){
self.embedLinkResult = false;
self.embedLinkDetected = true;
this.requestResult();
this.onResult = function( r ){
self.embedLinkResult = true;
if (r.type == 'video' || r.type == 'link')
{
self.embedAttachmentsObject = r;
self.embedAttachmentsValue = JSON.stringify(r);
}
PEEP.trigger('mailbox.embed_link_request_result_'+self.model.convId, r);
}
});
self.hasLinkObserver = true;
}
// }
});
this.model.statusUpdateSubject.addObserver(function(){
self.statusControl.removeClass();
self.statusControl.addClass('peep_chat_status');
if (self.model.status != 'offline'){
self.statusControl.addClass(self.model.status);
}
});
this.model.isActiveSetSubject.addObserver(function(){
if (!self.model.isActive){
$('#main_tab_contact_' + self.model.opponentId).removeClass('peep_chat_dialog_active');
$('#main_tab_contact_' + self.model.opponentId).removeClass('peep_active');
if (self.model.unreadMessagesCount > 0){
self.unreadMessageCountBlock.addClass('peep_count_active');
}
}
else{
$('#main_tab_contact_' + self.model.opponentId).addClass('peep_chat_dialog_active');
$('#main_tab_contact_' + self.model.opponentId).addClass('peep_active');
if (self.model.unreadMessagesCount > 0){
self.unreadMessageCountBlock.removeClass('peep_count_active');
}
}
var openedDialogs = PEEPMailbox.getOpenedDialogsCookie();
if (typeof openedDialogs[self.model.convId] != 'undefined'){
openedDialogs[self.model.convId]['isActive'] = self.model.isActive;
}
PEEPMailbox.setOpenedDialogsCookie(openedDialogs);
});
this.model.isSelectedSetSubject.addObserver(function(){
if (self.model.isSelected){
if ( self.model.unreadMessagesCount > 0 ){
$.each(self.model.unreadMessageList, function(id, message){
PEEP.trigger('mailbox.mark_message_read', {message: message});
self.model.removeUnreadMessageFromList(id);
});
}
self.chatBlock.addClass('peep_chat_block_active');
//self.textareaControl.focus();
PEEP.trigger('mailbox.dialog_selected', {convId: self.model.convId});
}
else{
self.chatBlock.removeClass('peep_chat_block_active');
}
var openedDialogs = PEEPMailbox.getOpenedDialogsCookie();
if (typeof openedDialogs[self.model.convId] != 'undefined'){
openedDialogs[self.model.convId]['isSelected'] = self.model.isSelected;
}
PEEPMailbox.setOpenedDialogsCookie(openedDialogs);
});
this.model.isSuspendedSetSubject.addObserver(function(){
if (self.model.isSuspended)
{
self.userIsUnreachableBlock.show();
$('#conversationUserIsUnreachableText', self.userIsUnreachableBlock).html( self.model.suspendReasonMessage );
if (self.model.mode == 'chat')
{
self.conversationChatFormBlock.hide()
}
if (self.model.mode == 'mail')
{
self.messageFormBlock.hide();
}
}
else
{
self.userIsUnreachableBlock.hide();
$('#conversationUserIsUnreachableText', self.userIsUnreachableBlock).html( '' );
if (self.model.mode == 'chat')
{
self.conversationChatFormBlock.show()
}
if (self.model.mode == 'mail')
{
self.messageFormBlock.show();
}
}
});
this.model.unreadMessagesCountSetSubject.addObserver(function(){
if (self.model.unreadMessagesCount == 0){
self.unreadMessageCountBlock.removeClass('peep_count_active');
self.unreadMessageCount.html('0');
self.chatSelectorUnreadMessagesCountWrapper.hide();
self.chatSelectorUnreadMessagesCountControl.html('0');
}
else{
self.chatSelectorUnreadMessagesCountControl.html(self.model.unreadMessagesCount);
if (self.model.isHidden){
self.chatSelectorUnreadMessagesCountWrapper.show();
}
self.unreadMessageCount.html(self.model.unreadMessagesCount);
if (!self.model.isActive){
self.unreadMessageCountBlock.addClass('peep_count_active');
}
if ( self.model.isOpened && self.newMessageTimeout === 0 ){
self.newMessageTimeout = setInterval(function() {
if ( self.control.hasClass('peep_chat_new_message') ){
self.control.removeClass('peep_chat_new_message');
}
else{
self.control.addClass('peep_chat_new_message');
}
}, 1000);
}
}
});
this.model.logLoadSubject.addObserver(function(){
self.model.setIsOpened(true);
});
this.model.isOpenedSetSubject.addObserver(function(){
if (!self.control.hasClass('peep_hidden'))
{
self.control.addClass('peep_open');
}
self.enablePuller();
var storage = PEEPMailbox.getStorage();
var message = storage.getItem('mailbox.dialog' + self.model.convId + '_form_message');
if (typeof message != 'undefined' && message != null && message != '')
{
var lines = message.split("n");
self.textareaControl.attr('rows', lines.length);
var offset = 0;
for (var i=1; i<=lines.length; i++)
{
if (i == 2)
{
offset = offset + 12;
$('.peep_chat_message', self.control).removeClass('scroll');
}
else
{
if (i >= 3 && i <= 6)
{
offset = offset + 17;
$('.peep_chat_message', self.control).removeClass('scroll');
}
else
{
if (i > 6)
{
offset = 80;
$('.peep_chat_message', self.control).addClass('scroll');
break;
}
}
}
}
self.textareaControl.css('height', self.textareaHeight + offset);
self.textareaControl.val(message);
}
else
{
self.textareaControl.val( PEEP.getLanguageText('mailbox', 'text_message_invitation') );
}
self.scrollDialog();
var openedDialogs = PEEPMailbox.getOpenedDialogsCookie();
if (self.model.convId != 0 && typeof openedDialogs[self.model.convId] == 'undefined'){
openedDialogs[self.model.convId] = {opponentId: self.model.opponentId, mode: self.model.mode, isActive: self.model.isActive, isSelected: self.model.isSelected};
}
PEEPMailbox.setOpenedDialogsCookie(openedDialogs);
});
PEEP.bind('mailbox.presence', function(presence){
if (presence.opponentId != self.model.opponentId)
{
return;
}
self.model.setStatus(presence.status);
});
PEEP.bind('mailbox.move_dialog_to_chat_selector', function(data){
if (data.convId != self.model.convId)
{
return;
}
self.model.setIsHidden(true);
self.model.setIsSelected(false);
self.control.addClass('peep_hidden');
self.control.removeClass('peep_open');
self.smallItemControl.show();
self.smallItemControl.addClass('peep_dialog_in_selector');
PEEP.trigger('mailbox.dialog_moved_to_chat_selector', {convId: self.model.convId});
});
PEEP.bind('mailbox.remove_dialog_from_chat_selector', function(data){
if (data.convId != self.model.convId)
{
return;
}
self.model.setIsHidden(false);
self.control.removeClass('peep_hidden');
self.control.addClass('peep_open');
self.scrollDialog();
self.smallItemControl.hide();
self.smallItemControl.removeClass('peep_dialog_in_selector');
PEEP.trigger('mailbox.dialog_removed_from_chat_selector', {convId: self.model.convId});
});
PEEP.bind('mailbox.new_message_notification', function(data){
if (data.message.convId != self.model.convId)
{
return;
}
self.model.addUnreadMessageToList(data.message);
});
PEEP.bind('mailbox.data_received_for_'+self.model.opponentId, function(data){
if (self.model.convId == 0)
{
delete PEEP.Mailbox.contactManagerView.dialogs[self.model.convId];
self.model.setConversationId(data.conversationId);
PEEP.Mailbox.contactManagerView.dialogs[data.conversationId] = self;
}
if ( self.model.convId == 0 || self.model.convId == data.conversationId )
{
self.model.setAvatarUrl(data.avatarUrl);
self.model.shortUserData = data.shortUserData;
self.model.setDisplayName(data.displayName);
// self.model.setMode(data.mode);
self.model.setProfileUrl(data.profileUrl);
self.model.setStatus(data.status);
// self.model.setSubject(data.subject);
}
});
PEEP.bind('mailbox.message_was_read', function(data){
if (data.message.convId != self.model.convId)
{
return;
}
PEEP.trigger('mailbox.clear_new_message_blinking', data);
});
PEEP.bind('mailbox.clear_new_message_blinking', function(data){
if (data.message.convId != self.model.convId)
{
return;
}
if ( self.newMessageTimeout !== 0 )
{
clearInterval( self.newMessageTimeout );
if ( self.control.hasClass('peep_chat_new_message') )
{
self.control.removeClass('peep_chat_new_message');
}
self.newMessageTimeout = 0;
}
});
PEEP.bind('mailbox.send_message', function(data){
if (data.sentFrom != 'dialog' && data.opponentId == self.model.opponentId && data.convId == self.model.convId)
{
self.write(data.tmpMessage);
}
});
PEEP.bind('mailbox.update_message', function(data){
if (data.sentFrom != 'dialog' && data.opponentId == self.model.opponentId && data.convId == self.model.convId)
{
self.updateMessage(data.message);
}
});
PEEP.bind('mailbox.after_ping', function(data){
var openedDialogs = PEEPMailbox.getOpenedDialogsCookie();
$.each(openedDialogs, function(convId, presence){
if (convId == self.model.convId){
self.model.setIsSelected(presence.isSelected);
}
});
});
self.setData();
};
PEEPMailbox.Dialog.Controller.prototype = {
construct: function(){
var self = this;
this.control = $("#dialogPrototypeBlock").clone();
this.control.attr('id', 'main_tab_contact_' + this.model.opponentId);
this.control.data('convId', this.model.convId);
this.control.addClass('mailboxDialogBlock');
this.chatBlock = $('.peep_chat_block', this.control);
this.messageListWrapper = $('.peep_chat_in_dialog', this.control);
this.dialogWindowHeight = 250;
this.dialogWindowWidth = 250;
this.messageListControl = $('#dialogLog', this.messageListWrapper);
this.avatarControl = $('#dialogProfileAvatarUrl', this.control);
this.displayNameControl = $('#dialogProfileDisplayName', this.control);
// this.subjectControl = $('#dialogSubject', this.control);
// this.subjectBlockControl = $('#dialogSubjectBlock', this.control);
this.profileUrlControl = $('#dialogProfileUrl', this.control);
this.minimizeMaximizeBtn = $('#dialogMinimizeMaximizeBtn', this.control);
this.closeBtn = $('#dialogCloseBtn', this.control);
this.textareaControl = $('#dialogTextarea', this.control);
this.textareaHeight = 42;
this.preloaderControl = $('#dialogPreloader', this.control);
this.statusControl = $('#dialogProfileStatus', this.control);
this.unreadMessageCountBlock = $('#dialogUnreadMessageCountBlock', this.control);
this.unreadMessageCount = $('#dialogUnreadMessageCount', this.control);
this.messageGroupStickyBlockControl = $('#dialogStickyDateCapBlock', this.control);
this.userIsUnreachableBlock = $('#dialogUserIsUnreachable', this.control);
this.messageFormBlock = $('#dialogMessageFormBlock', this.control);
this.puller = $('.peep_vertical_puller', this.control);
this.puller.css('position','absolute');
this.puller.draggable({
disabled: false,
axis: "y",
cursor: 'row-resize',
drag: function(event, ui){
if (ui.position.top < 0)
{
if (self.control.height() > 506)
{
return;
}
if ( self.messageListWrapper.height() > $(window).innerHeight() * 0.8 )
{
return;
}
}
else
{
if (self.control.height() < 334)
{
return;
}
}
self.messageListWrapper.height( self.dialogWindowHeight - ui.position.top );
},
stop: function(event, ui){
if ( self.messageListWrapper.height() > $(window).innerHeight() * 0.8 )
{
self.messageListWrapper.height( $(window).innerHeight() * 0.8 );
}
self.puller.css('top','-10px');
PEEP.updateScroll(self.messageListWrapper);
},
start: function(event, ui){
self.dialogWindowHeight = self.messageListWrapper.height();
}
});
this.diagPuller = $('.peep_diagonal_puller', this.control);
this.diagPuller.css('position','absolute');
this.diagPuller.draggable({
disabled: false,
axis: "xy",
cursor: 'row-resize',
drag: function(event, ui){
if (ui.position.left < 0)
{
if (self.control.width() > 404)
{
return;
}
}
else
{
if (self.control.width() < 249)
{
return;
}
}
self.control.width( self.dialogWindowWidth - ui.position.left );
if (ui.position.top < 0)
{
if (self.control.height() > 506)
{
return;
}
}
else
{
if (self.control.height() < 334)
{
return;
}
}
self.messageListWrapper.height( self.dialogWindowHeight - ui.position.top );
PEEP.trigger('mailbox.draggable.drag', {"puller" : self.puller});
},
stop: function(event, ui){
if ( self.messageListWrapper.width() > $(window).innerWidth() * 0.8 )
{
self.messageListWrapper.width( $(window).innerWidth() * 0.8 );
}
if ( self.messageListWrapper.height() > $(window).innerHeight() * 0.8 )
{
self.messageListWrapper.height( $(window).innerHeight() * 0.8 );
}
self.puller.css('top','-10px');
self.diagPuller.css('left', '0px');
self.diagPuller.css('top', '0px');
PEEP.updateScroll(self.messageListWrapper);
PEEP.trigger('mailbox.draggable.stop', {"puller" : self.puller});
},
start: function(event, ui){
self.dialogWindowHeight = self.messageListWrapper.height();
self.dialogWindowWidth = self.control.width();
}
});
$('#dialogsContainer').prepend(this.control);
/* Add item to chat selector */
this.chatSelectorContactListContainer = $('.peep_chat_selector_items');
this.smallItemControl = $('#peep_chat_selector_items_proto li').clone();
this.smallItemControl.attr('id', 'chatSelectorContactItem'+this.model.convId);
this.chatSelectorDisplayNameControl = $('#chatSelectorContactItemDisplayName', this.smallItemControl);
this.chatSelectorUnreadMessagesCountWrapper = $('#chatSelectorContactItemCounterBlock', this.smallItemControl);
this.chatSelectorUnreadMessagesCountControl = $('#chatSelectorContactItemCounter', this.smallItemControl);
this.chatSelectorContactListContainer.append(this.smallItemControl);
this.attachmentsBtn = $('#dialogAttachmentsBtn', this.control);
PEEP.trigger('mailbox.after_dialog_render', [{'control' : this.control, 'opponentId' : this.model.opponentId}]);
},
adjustTextarea: function(input){
var textWidth = input.val().width(input.css('font'));
var lines = input.val().split("n");
var linesLength = 1;
if (textWidth > input.width()){
linesLength = Math.ceil( textWidth / input.width() );
if (linesLength < lines.length){
linesLength = lines.length;
}
}
else{
linesLength = lines.length;
}
input.attr('rows', linesLength);
var offset = 0;
for (var i=1; i<=linesLength; i++){
if (i == 2){
offset = offset + 12;
$('.peep_chat_message', self.control).removeClass('scroll');
}
else{
if (i >= 3 && i <= 6){
offset = offset + 17;
$('.peep_chat_message', self.control).removeClass('scroll');
}
else{
if (i > 6){
offset = 80;
$('.peep_chat_message', self.control).addClass('scroll');
break;
}
}
}
}
input.css('height', this.textareaHeight + offset);
this.messageListWrapper.height( this.dialogWindowHeight - offset );
this.scrollDialog();
},
disablePuller: function(){
// this.puller.draggable("disable");
},
enablePuller: function() {
// this.puller.draggable("enable");
},
hide: function(){
this.control.removeClass('peep_active');
this.disablePuller();
PEEP.updateScroll(this.messageListWrapper);
if (this.model.convId != 0)
{
var openedDialogs = PEEPMailbox.getOpenedDialogsCookie();
openedDialogs[this.model.convId] = {opponentId: this.model.opponentId, mode: this.model.mode, isActive: 0};
PEEPMailbox.setOpenedDialogsCookie(openedDialogs);
}
this.model.setIsActive(false);
this.model.setIsSelected(false);
PEEP.trigger('mailbox.dialog_hidden', {convId: this.model.convId});
return this;
},
hideComposing: function(){
$('#message_composing', this.messageListControl).remove();
this.model.setIsComposing(false);
//this.scrollDialog();
},
hideStickyDateCap: function(){
this.messageGroupStickyBlockControl.hide();
},
hideTab: function(){
this.messageListWrapper.hide();
this.control.hide();
this.messageListWrapper.remove();
this.control.remove();
this.smallItemControl.remove();
var storage = PEEPMailbox.getStorage();
var openedDialogs = PEEPMailbox.getOpenedDialogsCookie();
if (this.model.convId != 0)
{
delete openedDialogs[this.model.convId];
storage.removeItem('mailbox.dialog' + this.model.convId + '_form_message');
}
PEEPMailbox.setOpenedDialogsCookie(openedDialogs);
PEEP.trigger('mailbox.dialog_closed', {convId: this.model.convId});
},
loadHistory: function(){
var self = this;
var ajaxData = {};
ajaxData['actionData'] = {
'uniqueId': PEEPMailbox.uniqueId('getLog'),
'name': 'getLog',
'data': {
'convId': self.model.convId,
'opponentId': self.model.opponentId,
'lastMessageTimestamp': self.model.lastMessageTimestamp
}
};
ajaxData['actionCallbacks'] = {
success: function(data){
self.removePreloader();
if ( typeof data != 'undefined' )
{
PEEP.trigger('mailbox.data_received_for_'+data.opponentId, data);
if (data.close_dialog)
{
PEEP.trigger('mailbox.close_dialog', {convId: self.model.convId, opponentId: self.model.opponentId});
return;
}
if (data.log && data.log.length > 0)
{
$(data.log).each(function(i){
if (i == 0)
{
self.model.firstMessageId = this.id;
}
self.write(this, 'history');
});
}
if (data.isSuspended)
{
self.messageFormBlock.parent().remove();
$('#dialogUserIsUnreachableText', self.userIsUnreachableBlock).html( data.suspendReasonMessage );
self.userIsUnreachableBlock.css('display', 'block');
}
}
PEEP.trigger('mailbox.dialogLogLoaded', {opponentId: data.opponentId});
self.model.setIsLogLoaded(true);
self.model.setIsLoaded(true);
},
error: function(e){
PEEPMailbox.log(e);
self.removePreloader();
self.messageListControl.html(e.responseText);
},
complete: function(){
PEEP.Mailbox.sendInProcess = false;
}
};
PEEP.Mailbox.addAjaxData(ajaxData);
if (self.model.isSelected){
var ajaxData2 = {};
ajaxData2['actionData'] = {
'uniqueId': PEEPMailbox.uniqueId('markConversationRead'),
'name': 'markConversationRead',
'data': { conversationId: self.model.convId }
};
ajaxData2['actionCallbacks'] = {
success: function( data ){},
complete: function(){}
}
PEEP.Mailbox.addAjaxData(ajaxData2);
}
PEEP.Mailbox.sendInProcess = true;
PEEP.Mailbox.sendData();
},
open: function(){
var self = this;
// if (this.model.isOpened)
// {
this.onOpen();
// }
// else
// {
// PEEP.bind(self.model.convId+'_tabOpened', function(){
// self.onOpen();
// PEEP.unbind(self.model.convId+'_tabOpened');
// });
// }
return this;
},
onOpen: function(){
this.model.setIsActive(true);
this.model.setIsOpened(true);
// this.model.setIsSelected(true);
PEEP.trigger('mailbox.dialog_opened', {convId: this.model.convId});
},
removePreloader: function(){
this.preloaderControl.remove();
PEEP.addScroll(this.messageListWrapper, {contentWidth: '0px'});
},
scrollDialog: function(){
this.historyLoadAllowed = false;
PEEP.updateScroll(this.messageListWrapper);
var jsp = this.messageListWrapper.data('jsp');
if (typeof jsp != 'undefined' && jsp != null)
{
lastMessage = this.messageListControl.find('.clearfix').last();
if (lastMessage.length > 0){
jsp.scrollToElement(lastMessage, true, true);
}
else{
jsp.scrollToBottom();
}
}
},
sendMessage: function(text){
var self = this;
var tmpMessageUid = PEEPMailbox.uniqueId('tmpMsg_');
var d = new Date();
var utc = d.getTime() / 1000 + (d.getTimezoneOffset() * 60);
var timeStamp = parseInt(utc + PEEPMailbox.serverTimezoneOffset * 3600);
var timeLabel = PEEPMailbox.formatAMPM(new Date(timeStamp*1000));
if (!self.embedLinkDetected)
{
var tmpMessage = {
'rawMessage' : true,
'isSystem': false,
'date': PEEPMailbox.todayDate,
'dateLabel': PEEPMailbox.todayDateLabel,
'id': tmpMessageUid,
'text': text,
'attachments': [],
'senderId': PEEPMailbox.userDetails.userId,
'recipientId': self.model.opponentId,
'timeStamp': timeStamp,
'timeLabel': timeLabel
};
PEEP.trigger('mailbox.send_message', {'sentFrom': 'dialog', 'opponentId': self.model.opponentId, 'convId': self.model.convId, 'tmpMessage': tmpMessage});
var data = {
'convId': self.model.convId,
'text': text,
'uid': self.uid,
'embedAttachments': self.embedAttachmentsValue
};
self.postMessage(tmpMessageUid, data);
}
else
{
var tmpMessage = {
'rawMessage' : true,
'isSystem': true,
'date': PEEPMailbox.todayDate,
'dateLabel': PEEPMailbox.todayDateLabel,
'id': tmpMessageUid,
'attachments': [],
'senderId': PEEPMailbox.userDetails.userId,
'recipientId': self.model.opponentId,
'timeStamp': timeStamp,
'timeLabel': timeLabel
};
var preloaderContainer = $('#dialogEmbedLinkBlockPrototype').clone();
$('#dialogMessageText', preloaderContainer).html(text);
tmpMessage['text'] = preloaderContainer.html();
PEEP.trigger('mailbox.send_message', {'sentFrom': 'dialog', 'opponentId': self.model.opponentId, 'convId': self.model.convId, 'tmpMessage': tmpMessage});
if (self.embedLinkResult)
{
var data = {
'convId': self.model.convId,
'text': text,
'uid': self.uid,
'embedAttachments': self.embedAttachmentsValue
};
self.postMessage(tmpMessageUid, data);
}
else
{
PEEP.bind('mailbox.embed_link_request_result_'+self.model.convId, function(r){
var data = {
'convId': self.model.convId,
'text': text,
'uid': self.uid,
'embedAttachments': self.embedAttachmentsValue
};
self.postMessage(tmpMessageUid, data);
PEEP.unbind('mailbox.embed_link_request_result_'+self.model.convId);
});
}
PEEPLinkObserver.getObserver('main_tab_contact_'+self.model.opponentId+' #dialogTextarea').resetObserver();
}
tmpMessage.text = tmpMessage.text.nl2br();
self.write(tmpMessage);
var storage = PEEPMailbox.getStorage();
storage.setItem('mailbox.dialog' + self.model.convId + '_form_message', '');
self.textareaControl.val('');
},
postMessage: function(tmpMessageUid, data){
var self = this;
var ajaxData = {};
ajaxData['actionData'] = {
'uniqueId': PEEPMailbox.uniqueId('postMessage'),
'name': 'postMessage',
'data': data
};
ajaxData['actionCallbacks'] = {
'tmpMessageUid' : tmpMessageUid,
'success': function(data){
if (typeof data.error == 'undefined' || data.error == null)
{
data.message.uniqueId = tmpMessageUid;
self.updateMessage(data.message);
PEEP.Mailbox.lastMessageTimestamp = data.message.timeStamp;
PEEP.trigger('mailbox.update_message', {'sentFrom': 'dialog', 'opponentId': self.model.opponentId, 'convId': self.model.convId, 'message': data.message});
}
else
{
PEEP.error(data.error);
self.showSendMessageFailed(tmpMessageUid);
}
},
'error': function(e){
self.messageListControl.html(e.responseText);
self.showSendMessageFailed(tmpMessageUid);
},
'complete': function(){
PEEP.Mailbox.sendInProcess = false;
self.embedLinkResult = true;
self.embedLinkDetected = false;
self.embedAttachmentsValue = '';
self.embedAttachmentsObject = {};
}
};
PEEP.Mailbox.sendData(ajaxData);
},
showSendMessageFailed: function(messageId){
var self = this;
$('#messageItem'+messageId+' .peep_dialog_in_item', self.control).addClass('errormessage');
$('#messageItem'+messageId+' .peep_dialog_in_item', self.control).prepend('<span class="peep_errormessage_not peep_red peep_small">'+PEEP.getLanguageText('mailbox', 'send_message_failed')+'</span>');
},
selectTab: function(value){
var val = value || true;
this.model.setIsSelected(val);
},
setData: function(){
if (this.model.avatarUrl)
{
this.model.setAvatarUrl(this.model.avatarUrl);
}
if (this.model.displayName)
{
this.model.setDisplayName(this.model.displayName);
}
if (this.model.profileUrl)
{
this.model.setProfileUrl(this.model.profileUrl);
}
// if (this.model.mode == 'mail' && this.model.subject)
// {
// this.model.setSubject(this.model.subject);
// }
if (this.model.status)
{
this.model.setStatus(this.model.status);
}
},
setStickyDateCapValue: function(data){
if (data.date == PEEPMailbox.todayDate)
{
this.hideStickyDateCap();
}
else
{
this.showStickyDateCap();
}
$('#dialogStickyDateCap', this.messageGroupStickyBlockControl).html(data.dateLabel);
this.messageGroupStickyBlockControl.data(data);
},
showComposing: function(){
var self = this;
if (this.model.isComposing)
{
return;
}
var message_composing_container = $('#dialogChatMessagePrototypeBlock').clone();
message_composing_container.attr('id', 'message_composing');
$('.peep_dialog_item', message_composing_container).addClass('odd');
this.messageListControl.append(message_composing_container);
this.scrollDialog();
this.setIsComposing(true);
// Autohide after sometime
this.model.showComposingTimeout = setTimeout(function(){
self.hideComposing();
}, 2000);
},
showStickyDateCap: function(){
this.messageGroupStickyBlockControl.show();
},
showTab: function(){
var self = this
if (this.model.isOpened)
{
return this;
}
this.control.addClass('peep_open');
PEEP.trigger('mailbox.dialog_tab_shown', {convId: this.model.convId});
PEEP.trigger(this.model.convId+'_tabOpened');
if ( !this.model.isLogLoaded )
{
this.loadHistory();
}
return this;
},
showTimeBlock: function(timeLabel){
var timeBlock = $('#dialogTimeBlockPrototypeBlock').clone();
timeBlock.attr('id', 'timeBlock'+this.model.lastMessageTimestamp);
$('.peep_time_text', timeBlock).html(timeLabel);
this.messageListControl.append(timeBlock);
// this.scrollDialog();
return this;
},
updateChatMessage: function(message){
if (typeof message.uniqueId != 'undefined'){
var messageContainer = $('#messageItem'+message.uniqueId, this.control);
messageContainer.attr('id', 'messageItem'+message.id);
//messageContainer.attr('timestamp', message.timeStamp);
}
else{
var messageContainer = $('#messageItem'+message.id, this.control);
}
var html = '';
if (message.isSystem){
html = message.text;
messageContainer.html( html );
}
else{
if (message.attachments.length != 0)
{
var i = 0;
if (message.attachments[i]['type'] == 'image')
{
messageContainer.addClass('peep_dialog_picture_item');
$('#dialogMessageText', messageContainer).html( '<a href="'+message.attachments[i]['downloadUrl']+'" target="_blank"><img src="'+message.attachments[i]['downloadUrl']+'" /></a>' );
}
else
{
$('.peep_dialog_in_item', messageContainer).addClass('fileattach');
var attachment = $('#conversationFileAttachmentBlockPrototype').clone();
attachment.removeAttr('id');
$('#conversationFileAttachmentFileName', attachment).html( PEEPMailbox.formatAttachmentFileName(message.attachments[i]['fileName']) );
$('#conversationFileAttachmentFileName', attachment).attr('href', message.attachments[i]['downloadUrl']);
$('#conversationFileAttachmentFileSize', attachment).html( PEEPMailbox.formatAttachmentFileSize(message.attachments[i]['fileSize']) );
$('.peep_dialog_in_item', messageContainer).html( attachment.html() );
}
}
else
{
// html = htmlspecialchars(message.text, 'ENT_QUOTES');
html = message.text;
if ($('#dialogMessageText', messageContainer).length == 0){
tmpMessageContainer = $('#dialogChatMessagePrototypeBlock').clone();
tmpMessageContainer.attr('id', 'messageItem'+message.id);
messageContainer.html(tmpMessageContainer.html());
}
$('#dialogMessageText', messageContainer).html( html );
$('#dialogMessageText', messageContainer).autolink();
}
}
if ( message.senderId != this.model.opponentId ){
$('div.peep_dialog_item', messageContainer).addClass('even');
}
else{
$('div.peep_dialog_item', messageContainer).addClass('odd');
}
this.scrollDialog();
PEEP.trigger('mailbox.update_chat_message', message);
},
updateMessage: function(message){
if (this.model.mode == 'chat')
{
this.updateChatMessage(message);
}
},
writeChatMessage: function(message, css_class){
var css_class = css_class || null;
if ($('#messageItem'+message.id, this.control).length > 0)
{
return;
}
var groupContainer = $('#groupedMessages-'+message.date, this.control);
if (groupContainer.length == 0){
groupContainer = $('#dialogDateCapBlock').clone();
$('#dialogDateCap', groupContainer).html(message.dateLabel);
groupContainer.attr('id', 'groupedMessages-'+message.date);
groupContainer.data({
date: message.date,
dateLabel: message.dateLabel
});
}
var messageContainer = null;
if (message.isSystem){
messageContainer = $('#dialogSysMessagePrototypeBlock').clone();
}
else{
messageContainer = $('#dialogChatMessagePrototypeBlock').clone();
}
messageContainer.attr('id', 'messageItem'+message.id);
messageContainer.attr('data-tmp-id', 'messageItem'+message.id);
messageContainer.attr('data-timestamp', message.timeStamp);
messageContainer.addClass('message');
var html = '';
if (message.isSystem){
html = message.text;
// $('#dialogMessageWrapper', messageContainer).html( html );
messageContainer.html( html );
}
else
{
if (message.attachments.length != 0){
var i = 0;
if (message.attachments[i]['type'] == 'image')
{
messageContainer.addClass('peep_dialog_picture_item');
$('#dialogMessageText', messageContainer).html( '<a href="'+message.attachments[i]['downloadUrl']+'" target="_blank"><img src="'+message.attachments[i]['downloadUrl']+'" /></a>' );
}
else
{
$('.peep_dialog_in_item', messageContainer).addClass('fileattach');
var attachment = $('#conversationFileAttachmentBlockPrototype').clone();
attachment.removeAttr('id');
$('#conversationFileAttachmentFileName', attachment).html( PEEPMailbox.formatAttachmentFileName(message.attachments[i]['fileName']) );
$('#conversationFileAttachmentFileName', attachment).attr('href', message.attachments[i]['downloadUrl']);
$('#conversationFileAttachmentFileSize', attachment).html( PEEPMailbox.formatAttachmentFileSize(message.attachments[i]['fileSize']) );
$('.peep_dialog_in_item', messageContainer).html( attachment.html() );
}
}
else
{
// html = htmlspecialchars(message.text, 'ENT_QUOTES');
html = message.text;
$('#dialogMessageText', messageContainer).html( html );
$('#dialogMessageText', messageContainer).autolink();
}
}
if ( message.senderId != this.model.opponentId ){
$('div.peep_dialog_item', messageContainer).addClass('even');
}
else{
$('div.peep_dialog_item', messageContainer).addClass('odd');
}
if (css_class != null){
$('div.peep_dialog_item', messageContainer).addClass(css_class);
}
// get last message
var lastMessage = this.messageListControl.find('.message:last');
// HOTFIX;
if (message.rawMessage || !lastMessage.length || lastMessage.attr('data-timestamp') < message.timeStamp) {
if (this.lastMessageDate != message.date){
this.lastMessageDate = message.date;
this.messageListControl.append(groupContainer);
}
if ( message.timeLabel != this.model.lastMessageTimeLabel ){
this.model.lastMessageTimeLabel = message.timeLabel;
this.showTimeBlock(message.timeLabel);
}
this.messageListControl.append(messageContainer);
this.scrollDialog();
this.model.setLastMessageTimestamp(message.timeStamp);
this.model.lastMessageId = message.id;
}
else {
$(messageContainer).insertBefore(lastMessage);
this.scrollDialog();
}
var soundEnabled = im_readCookie('im_soundEnabled');
var isSoundEnabled = soundEnabled !== null
? parseInt(soundEnabled)
: PEEPMailbox.soundEnabled; // use the default value
if (css_class == null && isSoundEnabled){
var audioTag = document.createElement('audio');
if (!(!!(audioTag.canPlayType) && ("no" != audioTag.canPlayType("audio/mp3")) && ("" != audioTag.canPlayType("audio/mp3")) && ("maybe" != audioTag.canPlayType("audio/mp3")) )) {
AudioPlayer.embed("im_sound_player_audio", {
soundFile: PEEPMailbox.soundUrl,
autostart: 'yes'
});
}
else{
$('#im_sound_player_audio')[0].play();
}
}
// PEEP.Mailbox.lastMessageTimestamp = message.timeStamp;
},
write: function(message, css_class){
if (this.model.mode == 'chat'){
this.writeChatMessage(message, css_class);
}
if (this.model.isSelected && message.recipientId == PEEPMailbox.userDetails.userId && message.recipientRead == 0){
PEEP.trigger('mailbox.mark_message_read', {message: message});
}
return this;
},
writeHistoryChatMessage: function(message){
var messageContainer = null;
if (message.isSystem){
messageContainer = $('#dialogSysMessagePrototypeBlock').clone();
}
else{
messageContainer = $('#dialogChatMessagePrototypeBlock').clone();
}
messageContainer.attr('id', 'messageItem'+message.id);
var html = '';
if (message.isSystem){
html = message.text;
messageContainer.html( html );
}
else
{
if (message.attachments.length != 0)
{
var i = 0;
if (message.attachments[i]['type'] == 'image')
{
messageContainer.addClass('peep_dialog_picture_item');
$('#dialogMessageText', messageContainer).html( '<a href="'+message.attachments[i]['downloadUrl']+'" target="_blank"><img src="'+message.attachments[i]['downloadUrl']+'" /></a>' );
}
else
{
$('.peep_dialog_in_item', messageContainer).addClass('fileattach');
var attachment = $('#conversationFileAttachmentBlockPrototype').clone();
attachment.removeAttr('id');
$('#conversationFileAttachmentFileName', attachment).html( PEEPMailbox.formatAttachmentFileName(message.attachments[i]['fileName']) );
$('#conversationFileAttachmentFileName', attachment).attr('href', message.attachments[i]['downloadUrl']);
$('#conversationFileAttachmentFileSize', attachment).html( PEEPMailbox.formatAttachmentFileSize(message.attachments[i]['fileSize']) );
$('.peep_dialog_in_item', messageContainer).html( attachment.html() );
}
}
else
{
// html = htmlspecialchars(message.text, 'ENT_QUOTES');
html = message.text;
$('#dialogMessageText', messageContainer).html( html );
$('#dialogMessageText', messageContainer).autolink();
}
}
if ( message.senderId != this.model.opponentId ){
$('div.peep_dialog_item', messageContainer).addClass('even');
}
else{
$('div.peep_dialog_item', messageContainer).addClass('odd');
}
var groupContainer = $('#groupedMessages-'+message.date, this.control);
if (groupContainer.length == 0)
{
groupContainer.prepend(messageContainer);
var timeBlock = $('#dialogTimeBlockPrototypeBlock').clone();
timeBlock.attr('id', 'timeBlock'+message.timeStamp);
$('.peep_time_text', timeBlock).html(message.timeLabel);
groupContainer.prepend(timeBlock);
groupContainer = $('#dialogDateCapBlock').clone();
$('#dialogDateCap', groupContainer).html(message.dateLabel);
groupContainer.attr('id', 'groupedMessages-'+message.date);
groupContainer.data({
date: message.date,
dateLabel: message.dateLabel
});
this.messageListControl.prepend(groupContainer);
}
else
{
var firstMessageContainer = $('#messageItem'+this.model.firstMessageId, this.control);
firstMessageContainer.before(messageContainer);
}
this.model.firstMessageId = message.id;
},
writeHistory: function(message){
this.writeHistoryChatMessage(message);
}
};
/* End Dialog */
?>