[ Index ]

PHP Cross Reference of vtigercrm-6.1.0

title

Body

[close]

/pkg/vtiger/modules/MailManager/templates/resources/ -> MailManager.js (source)

   1  /*+**********************************************************************************
   2   * The contents of this file are subject to the vtiger CRM Public License Version 1.1
   3   * ("License"); You may not use this file except in compliance with the License
   4   * The Original Code is:  vtiger CRM Open Source
   5   * The Initial Developer of the Original Code is vtiger.
   6   * Portions created by vtiger are Copyright (C) vtiger.
   7   * All Rights Reserved.
   8   ************************************************************************************/
   9  
  10  Vtiger_Header_Js.extend('MailManager_QuickCreate_Js', {
  11      foldersClicked : false
  12  }, {
  13  
  14      registerQuickCreatePostLoadEvents: function(form, params) {
  15          var thisInstance = this;
  16          form.find('#goToFullForm').remove();
  17  
  18          form.on('click','.cancelLink',function() {
  19              MailManager.resetLinkToDropDown();
  20          });
  21  
  22          form.on('submit', function(e){
  23              var invalidFields = form.data('jqv').InvalidFields;
  24  
  25              if (invalidFields.length > 0) {
  26                  //If validation fails, form should submit again
  27                  form.removeData('submit');
  28                  form.closest('#globalmodal').find('.modal-header h3').progressIndicator({
  29                      'mode': 'hide'
  30                  });
  31                  e.preventDefault();
  32                  return;
  33              }
  34              var recordPreSaveEvent = jQuery.Event(Vtiger_Edit_Js.recordPreSave);
  35              form.trigger(recordPreSaveEvent, {'value': 'edit', 'module': form.find('[name="module"]').val()});
  36              if (!(recordPreSaveEvent.isDefaultPrevented())) {
  37                  MailManager.mail_associate_create(form, jQuery('form[name="relationship"]'));
  38              }
  39              e.preventDefault();
  40          });
  41          thisInstance.registerTabEventsInQuickCreate(form);
  42      }
  43  });
  44  
  45  if (typeof(MailManager) == 'undefined') {
  46  
  47      // Legacy classes used
  48      if (typeof VtigerJS_DialogBox == 'undefined') {
  49          VtigerJS_DialogBox = {
  50              block: function() { },
  51              unblock: function() { }
  52          }
  53      }
  54      if (typeof Form == 'undefined') {
  55          Form = {
  56              serialize: function(form) {
  57                  return jQuery(form).serialize();
  58              }
  59          }
  60      }
  61  
  62      /*
  63       * Namespaced javascript class for MailManager
  64       */
  65      MailManager = {
  66  
  67          MailManagerUploadLimit : 6,
  68  
  69          /*
  70          * Utility function
  71          * Usage:
  72          * var output = MailManager.sprintf("String format %s, Number format %s", "VALUE", 10);
  73          */
  74          sprintf: function(){
  75              var printString = arguments[0];
  76              for (var i = 1; i < arguments.length; ++i) {
  77                  // Replace any %s, %d, %c with the variables.
  78                  // TODO Format the argument w.r.t to format specifier
  79                  printString = printString.replace(/%[a-z]+/, arguments[i]);
  80              }
  81              return printString;
  82          },
  83  
  84          /* Show error message */
  85          show_error: function(message){
  86              var errordiv = jQuery('#_messagediv_');
  87  
  88              if (message == '') {
  89                  errordiv.text('').hide();
  90              } else {
  91                  errordiv.html('<p>' + message + '</p>').css('display','block').addClass('mm_error').removeClass('mm_message');
  92                  MailManager.placeAtCenter(errordiv);
  93              }
  94              MailManager.hide_error();
  95          },
  96  
  97          hide_error: function() {
  98              setTimeout( function() {
  99                  jQuery('#_messagediv_').hide();
 100              }, 5000);
 101          },
 102  
 103          show_message: function(message){
 104              var errordiv = jQuery('#_messagediv_');
 105              if (message == '') {
 106                  errordiv.text('').hide();
 107              } else {
 108                  errordiv.html('<p>' + message + '</p>').css('display','block').removeClass('mm_error').addClass('mm_message');
 109                  MailManager.placeAtCenter(errordiv);
 110              }
 111              MailManager.hide_error();
 112          },
 113  
 114          /* Base url for any ajax actions */
 115          _baseurl: function(){
 116              return "index.php?module=MailManager&view=Index&";
 117          },
 118  
 119          /* Translation support */
 120          i18n: function(key){
 121              return app.vtranslate(key);
 122          },
 123  
 124          /* Build the main ui */
 125          mainui: function(){
 126              var isMailBoxExists = jQuery('#isMailBoxExists').val();
 127              if (isMailBoxExists == 1) {
 128                  MailManager.openCurrentFolder();
 129              }
 130              setTimeout(function() {
 131                  if (isMailBoxExists == 1) {
 132                      jQuery("#_folderprogress_").show();
 133                      MailManager.mail_open_meta = {};
 134                      if (MailManager.mail_reply_rteinstance) {
 135                          MailManager.mail_reply_rteinstance.destroy();
 136                          MailManager.mail_reply_rteinstance = false;
 137                      }
 138                      var message = app.vtranslate('JSLBL_Loading_Please_Wait')+' ....';
 139                      var progressIndicatorElement = jQuery.progressIndicator({
 140                          'message' : message,
 141                          'position' : 'html',
 142                          'blockInfo' : {
 143                              'enabled' : true
 144                          }
 145                      });
 146                  }
 147                  AppConnector.request(MailManager._baseurl() + "_operation=mainui").then(function(response) { 
 148                          //var response = MailManager.removeHidElement(transport.responseText);
 149                          response = JSON.parse(response);
 150                          MailManager._mainui_callback(response);
 151                          if (isMailBoxExists == 1) {
 152                              progressIndicatorElement.progressIndicator({
 153                                  'mode' : 'hide'
 154                              })
 155                              jQuery("#_folderprogress_").hide();
 156                              var timeOut = jQuery("#refresh_timeout").val();
 157                              if(timeOut != "" && timeOut !=0) {
 158                                  setInterval(MailManager.updateMailFolders, timeOut);
 159                              }
 160                              // Update the seleted folders to highlight them.
 161                              jQuery('.defaultContainer').addClass('show');
 162                              jQuery('.defaultContainer').removeClass('hide');
 163                          } else {
 164                              jQuery('.defaultContainer').addClass('hide');
 165                              jQuery('.defaultContainer').removeClass('show');
 166                          }
 167                          var folderName = jQuery('#mm_selected_folder').val();
 168                          MailManager.updateSelectedFolder(folderName);
 169                      });
 170              }, 400);
 171          },
 172  
 173          openCurrentFolder : function() {
 174              if(jQuery("#mailbox_folder")) {
 175                  var currentFolder = jQuery("#mailbox_folder").val();
 176                  // This is added as we will be settings mailbox_folder with the current selected folder.
 177                  // By this time we would have lost the last mailbox folder also
 178                  if(currentFolder == 'mm_drafts') currentFolder = 'INBOX';
 179  
 180                  if(currentFolder) {
 181                      MailManager.folder_open(currentFolder);
 182                  }else {
 183                      MailManager.folder_open('INBOX');
 184                  }
 185              } else {
 186                  MailManager.folder_open('INBOX');
 187              }
 188          },
 189  
 190          updateMailFolders : function() {
 191               AppConnector.request(MailManager._baseurl() + "_operation=mainui").then(function(response) { 
 192                      //var response = MailManager.removeHidElement(transport.responseText);
 193                      response = JSON.parse(response);
 194                      jQuery('#_mainfolderdiv_').html(response['result']['ui']);
 195                      MailManager.refreshCurrentFolder(); // this is used to refresh the mails in the folders
 196  
 197                      var folderName = jQuery('#mm_selected_folder').val();
 198                      MailManager.updateSelectedFolder(folderName);
 199  
 200                      MailManager.triggerUI5Resize();
 201                  }
 202                  );
 203          },
 204  
 205          quicklinks_update: function() {
 206                          AppConnector.request(MailManager._baseurl() + "_operation=mainui&_operationarg=_quicklinks").then(function(response) { 
 207                      //var response = MailManager.removeHidElement(transport.responseText);
 208                      response = JSON.parse(response);
 209                      jQuery("#_quicklinks_mainuidiv_").html(response['result']['ui']);
 210                  }
 211                  );
 212          },
 213  
 214          showSelectFolderDesc: function() {
 215              jQuery(".selectFolderValue").addClass('hide');
 216              jQuery(".selectFolderDesc").show();
 217              jQuery(".selectFolderDesc").removeClass('hide');
 218          },
 219  
 220          /* Intermedidate call back to build main ui */
 221          _mainui_callback: function(responseJSON){
 222              jQuery('#_mainfolderdiv_').html(responseJSON['result']['ui']);
 223  
 224              if (!responseJSON['result']['mailbox']) {
 225                  MailManager.open_settings_detail();
 226              }
 227  
 228              MailManager.triggerUI5Resize();
 229          },
 230  
 231  
 232          moveMail : function(element) {
 233  
 234  			function execute() {
 235                  var temp = new Array();
 236  
 237  				function getCheckedMails() {
 238                      var cb_elements = jQuery('[name="mc_box"]');
 239  
 240                      for (var i = 0; i < cb_elements.length; i++) {
 241                          if (cb_elements[i].checked) {
 242                              temp.push(cb_elements[i].value);
 243                          }
 244                      }
 245                  }
 246  
 247  				function validate() {
 248                      getCheckedMails();    // Check the selected mails
 249                      if(temp.length < 1) {
 250                          alert(app.vtranslate('JSLBL_PLEASE_SELECT_ATLEAST_ONE_MAIL'));
 251                          MailManager.resetFolderDropDown();
 252                          return false;
 253                      }
 254                      return true;
 255                  }
 256  
 257  				function callbackFunction(response) {
 258                      for(var i = 0; i<temp.length; i++){
 259                          jQuery("#_mailrow_"+temp[i]).fadeOut(1500,function() {
 260                              jQuery("#_mailrow_"+temp[i]).remove();
 261                          });
 262                      }
 263                  }
 264  
 265                  if(validate()) {
 266                      var message = app.vtranslate('JSLBL_MOVING')+' ....';
 267                      var progressIndicatorElement = jQuery.progressIndicator({
 268                          'message' : message,
 269                          'position' : 'html',
 270                          'blockInfo' : {
 271                              'enabled' : true
 272                          }
 273                      });
 274                      VtigerJS_DialogBox.block();
 275                      var moveToFolderName = jQuery("#moveFolderList").val();
 276                      var currentFolderName = jQuery("#mailbox_folder").val();
 277                      var params = {
 278                          '_operation': 'mail',
 279                          '_operationarg' : 'move',
 280                          '_msgno' : encodeURIComponent(temp),
 281                          '_folder' : encodeURIComponent(currentFolderName),
 282                          '_moveFolder' : moveToFolderName.replace('�','')
 283                      };
 284                      MailManager.Request(MailManager._baseurl() , params, callbackFunction).then( function () {
 285                          MailManager.folder_open(currentFolderName);
 286                          progressIndicatorElement.progressIndicator({
 287                              'mode' : 'hide'
 288                          })
 289                          alert(app.vtranslate('JSLBL_MAIL_MOVED'));
 290                      });
 291                  }
 292              }
 293              execute();
 294          },
 295  
 296          /* Refresh the main ui */
 297          reload_now: function(){
 298              MailManager.mainui();
 299          },
 300  
 301          /* Close all the div */
 302          close_all: function(){
 303              if (jQuery('#_contentdiv_'))    jQuery('#_contentdiv_').hide();
 304              if (jQuery('#_contentdiv2_'))   jQuery('#_contentdiv2_').hide();
 305              if (jQuery('#_messagediv_'))    jQuery('#_messagediv_').hide();
 306              if (jQuery('#_settingsdiv_'))   jQuery('#_settingsdiv_').hide();
 307              if (jQuery('#_replydiv_'))      jQuery('#_replydiv_').hide();
 308          },
 309  
 310          /* Open settings page */
 311          open_settings: function(){
 312              var message = app.vtranslate('JSLBL_Settings')+' ....';
 313              var progressIndicatorElement = jQuery.progressIndicator({
 314                  'message' : message,
 315                  'position' : 'html',
 316                  'blockInfo' : {
 317                      'enabled' : true
 318                  }
 319              });
 320                          AppConnector.request(MailManager._baseurl() + "_operation=settings&_operationarg=edit").then(function(response) { 
 321                                          response = JSON.parse(response);
 322                      progressIndicatorElement.progressIndicator({
 323                          'mode' : 'hide'
 324                      })
 325                      MailManager.close_all();
 326                      jQuery('#_settingsdiv_').show();
 327                      //var response = MailManager.removeHidElement(transport.responseText);
 328                      jQuery('#_settingsdiv_').html(response.result);
 329  
 330                      // Update the seleted folders to highlight them.
 331                      MailManager.updateSelectedFolder('mm_settings');
 332                      jQuery('#mm_selected_folder').val('mm_settings');
 333                      
 334                      MailManager.triggerUI5Resize();
 335                  }
 336                  );
 337          },
 338  
 339          /* Open settings detail page */
 340          open_settings_detail: function(){
 341              var message = app.vtranslate('JSLBL_Settings')+' ....';
 342              var progressIndicatorElement = jQuery.progressIndicator({
 343                  'message' : message,
 344                  'position' : 'html',
 345                  'blockInfo' : {
 346                      'enabled' : true
 347                  }
 348              });
 349                          AppConnector.request(MailManager._baseurl() + "_operation=settings&_operationarg=detail").then(function(response) { 
 350                                          response = JSON.parse(response);
 351                      progressIndicatorElement.progressIndicator({
 352                          'mode' : 'hide'
 353                      })
 354                      MailManager.close_all();
 355                      jQuery('#_settingsdiv_').show();
 356                      //var response = MailManager.removeHidElement(transport.responseText);
 357                      jQuery('#_settingsdiv_').html(response.result);
 358  
 359                      // Update the seleted folders to highlight them.
 360                      MailManager.updateSelectedFolder('mm_settings');
 361                      jQuery('#mm_selected_folder').val('mm_settings');
 362  
 363                      MailManager.triggerUI5Resize();
 364                  }
 365                  );
 366          },
 367  
 368          handle_settings_confighelper: function(selectBox){
 369              var form = selectBox.form;
 370  
 371              var useServer = '', useProtocol = '', useSSLType = '', useCert = '';
 372              if (selectBox.value == 'gmail' || selectBox.value == 'yahoo') {
 373                  useServer = 'imap.gmail.com';
 374                  if(selectBox.value == 'yahoo') {
 375                      useServer = 'imap.mail.yahoo.com';
 376                  }
 377                  useProtocol = 'IMAP4';
 378                  useSSLType = 'ssl';
 379                  useCert = 'novalidate-cert';
 380                  jQuery('.settings_details').show();
 381                  jQuery('.additional_settings').hide();
 382              } else  if (selectBox.value == 'fastmail') {
 383                  useServer = 'mail.messagingengine.com';
 384                  useProtocol = 'IMAP2';
 385                  useSSLType = 'tls';
 386                  useCert = 'novalidate-cert';
 387                  jQuery('.settings_details').show();
 388                  jQuery('.additional_settings').hide();
 389              } else if (selectBox.value == 'other') {
 390                  useServer = '';
 391                  useProtocol = 'IMAP4';
 392                  useSSLType = 'ssl';
 393                  useCert = 'novalidate-cert';
 394                  jQuery('.settings_details').show();
 395                  jQuery('.additional_settings').show();
 396              } else {
 397                  jQuery('.settings_details').hide();
 398              }
 399              jQuery('.refresh_settings').show();
 400              // Clear the User Name and Password field
 401              jQuery('#_mbox_user').val('');
 402              jQuery('#_mbox_pwd').val('');
 403  
 404              if (useProtocol != '') {
 405                  form._mbox_server.value = useServer;
 406  
 407                  jQuery(form._mbox_protocol).each(function(node){
 408                      node.checked = (node.value == useProtocol);
 409                  });
 410                  jQuery(form._mbox_ssltype).each(function(node){
 411                      node.checked = (node.value == useSSLType);
 412                  });
 413                  jQuery(form._mbox_certvalidate).each(function(node){
 414                      node.checked = (node.value == useCert);
 415                  });
 416              }
 417          },
 418  
 419          /* Save the settings */
 420          save_settings: function(form){
 421              if(form._mbox_server.value == "") {
 422                  alert(app.vtranslate('JSLBL_SERVERNAME_CANNOT_BE_EMPTY'));
 423                  return false;
 424              }
 425              if(form._mbox_user.value == "") {
 426                  alert(app.vtranslate('JSLBL_USERNAME_CANNOT_BE_EMPTY'));
 427                  return false;
 428              }
 429              if(form._mbox_pwd.value == "") {
 430                  alert(app.vtranslate('JSLBL_PASSWORD_CANNOT_BE_EMPTY'));
 431                  return false;
 432              }
 433              var message = app.vtranslate('JSLBL_Saving_And_Verifying')+' ....';
 434              var progressIndicatorElement = jQuery.progressIndicator({
 435                  'message' : message,
 436                  'position' : 'html',
 437                  'blockInfo' : {
 438                      'enabled' : true
 439                  }
 440              });
 441              var url = MailManager._baseurl() + "_operation=settings&_operationarg=save&" + Form.serialize(form);
 442                          AppConnector.request(url).then(function(data) { 
 443                                  data = JSON.parse(data);
 444                  progressIndicatorElement.progressIndicator({
 445                      'mode' : 'hide'
 446                  })
 447                  //var response = MailManager.removeHidElement(transport.responseText);
 448                  //var responseJSON = JSON.parse(response);
 449                  if (data['success']) {
 450                      jQuery('#isMailBoxExists').val(1);
 451                      jQuery('#folders').find(':last-child').remove();
 452                      MailManager_QuickCreate_Js.foldersClicked = false;
 453                      var imageEle = jQuery('.imageElement');
 454                      var imagePath = imageEle.data('rightimage');
 455                      imageEle.attr('src', imagePath);
 456                      MailManager.mainui();
 457                  } else {
 458                      alert(app.vtranslate(data['error']['message']));
 459                  }
 460              }
 461              );
 462          },
 463          
 464          /* Remove the settings */
 465          remove_settings: function(form){
 466              var message = app.vtranslate('JSLBL_Removing')+' ....';
 467              var progressIndicatorElement = jQuery.progressIndicator({
 468                  'message' : message,
 469                  'position' : 'html',
 470                  'blockInfo' : {
 471                      'enabled' : true
 472                  }
 473              });
 474                          AppConnector.request(MailManager._baseurl() + "_operation=settings&_operationarg=remove&" + Form.serialize(form)).then(function(responseJSON) { 
 475                                          responseJSON = JSON.parse(responseJSON);
 476                      progressIndicatorElement.progressIndicator({
 477                          'mode' : 'hide'
 478                      })
 479                      MailManager.close_all();
 480                      jQuery('#folders').find(':last-child').remove();
 481                      jQuery('#isMailBoxExists').val(0);
 482                      MailManager_QuickCreate_Js.foldersClicked = false;
 483                      var imageEle = jQuery('.imageElement');
 484                      var imagePath = imageEle.data('rightimage');
 485                      imageEle.attr('src', imagePath);
 486                      jQuery('#quickLinksInfo').html('');
 487                      if (responseJSON['success']) {
 488                          MailManager.reload_now();
 489                      } else {
 490                          alert(app.vtranslate(data['error']['message']));
 491                      }
 492                  }
 493                  );
 494          },
 495          
 496          /* Close the settings */
 497          close_settings: function(){
 498              MailManager.close_all();
 499              jQuery('#_contentdiv_').show();
 500  
 501              // Toggle highlighting previous folder and current folder selection
 502              var folderName = jQuery('#mailbox_folder').val();
 503              MailManager.updateSelectedFolder(folderName);
 504              jQuery('#mm_selected_folder').val(folderName);
 505          },
 506  
 507          /* Open the folder listing */
 508          folder_open: function(name, page){
 509              if (typeof(page) == 'undefined')
 510                  page = 0;
 511  
 512              var query = "";
 513              // Consider search string too
 514              if(jQuery('#search_txt').val()) {
 515                  query = "&q=" +encodeURIComponent(jQuery('#search_txt').val());
 516              }
 517              if(jQuery('#search_type').val()) {
 518                  query += "&type=" + encodeURIComponent(jQuery('#search_type').val());
 519              }
 520              var message = app.vtranslate('JSLBL_Loading')+' ' + name + ' ...';
 521              var progressIndicatorElement = jQuery.progressIndicator({
 522                  'message' : message,
 523                  'position' : 'html',
 524                  'blockInfo' : {
 525                      'enabled' : true
 526                  }
 527              });
 528                          AppConnector.request(MailManager._baseurl() + "_operation=folder&_operationarg=open&_folder=" + encodeURIComponent(name)  +
 529                  "&_page=" + encodeURIComponent(page) + query).then(function(response) { 
 530                                          response = JSON.parse(response);
 531                      progressIndicatorElement.progressIndicator({
 532                          'mode' : 'hide'
 533                      })
 534  
 535                      // Toggle highlighting previous folder and current folder selection
 536                      MailManager.updateSelectedFolder(name);
 537  
 538                      // Update the selected MailBox folder name
 539                      jQuery('#mailbox_folder').val(name);
 540  
 541                      // Update the current selected folder, which will be used to highlight the selected folder
 542                      jQuery('#mm_selected_folder').val(name);
 543                      
 544                      MailManager.mail_close();
 545                      //var response = MailManager.removeHidElement(transport.responseText);
 546                      jQuery('#_contentdiv_').html(response.result);
 547                      
 548                      // Clear last open mail
 549                      jQuery('#_contentdiv2_').html('');
 550                      
 551                      // Updates the drop down used for move emails
 552                      MailManager.updateMoveFolderList();
 553  
 554                      // Bind "Enter" key for search on the Search text box
 555                      MailManager.bindEnterKeyForSearch();
 556                      var type = jQuery('#search_type').val();
 557                      var dateformat = jQuery('#jscal_dateformat').val();
 558                      var element = jQuery('#search_txt');
 559                      if(type == 'ON') {
 560                          if(element.length != 0) {
 561                              element.closest('div').addClass('date')
 562                              element.addClass('dateField').attr('data-date-format', dateformat);
 563                              element.after(" <span class='add-on'><i class='icon-calendar'></i></span>");
 564                              app.registerEventForDatePickerFields(element, true);
 565                          }
 566                      }else {
 567                          element.closest('div').removeClass('date');
 568                          element.removeClass('dateField').removeAttr('data-date-format');
 569                          element.unbind('focus');
 570                          element.next().remove("span.add-on");
 571                          jQuery('#jscal_trigger_fval').hide();
 572                      }
 573                      MailManager.triggerUI5Resize();
 574                  }
 575                  );
 576          },
 577  
 578          updateSelectedFolder : function(currentSelectedFolder) {
 579              var prevFolderName = jQuery('#mm_selected_folder').val();
 580              if (jQuery('[id="_mailfolder_' + prevFolderName +'"]') && prevFolderName != currentSelectedFolder) {
 581                  jQuery('[id="_mailfolder_' + prevFolderName +'"]').removeClass('mm_folder_selected');
 582                  jQuery('[id="_mailfolder_' + prevFolderName +'"]').parent().removeClass('mm_folder_selected_background');
 583              }
 584              jQuery('[id="_mailfolder_'+ currentSelectedFolder +'"]').addClass('mm_folder_selected');
 585              jQuery('[id="_mailfolder_'+ currentSelectedFolder +'"]').parent().addClass('mm_folder_selected_background');
 586          },
 587  
 588          bindEnterKeyForSearch : function() {
 589              jQuery("#search_txt").keyup(function (event) {
 590                  if(event.keyCode == 13){
 591                      jQuery("#mm_search").click();
 592                  }
 593              });
 594          },
 595  
 596          updateMoveFolderList : function() {
 597              if(jQuery('#mailbox_folder') && jQuery('#moveFolderList')) {
 598                  var currentFolder = jQuery('#mailbox_folder').val();
 599                  jQuery('#moveFolderList').find("option[value='"+currentFolder+"']").remove();
 600  
 601              }
 602          },
 603  
 604          refreshCurrentFolder: function(){
 605              var selectedFolder = jQuery('#mm_selected_folder').val();
 606              var currentFolderName = jQuery("#mailbox_folder").val();
 607  
 608              //check if the mail is open
 609              var mail = jQuery('#_contentdiv2_').css('display');
 610              if(selectedFolder == currentFolderName && currentFolderName !='mm_drafts' && mail != 'block') {
 611                  MailManager.folder_open(currentFolderName, 0);
 612              }
 613          },
 614  
 615          /* Update count of unread mails on folder */
 616          folder_updateCount: function(folder, count){
 617              if (jQuery('#_mailfolder_' + folder)) {
 618                  if (count) {
 619                      jQuery('#_mailfolder_' + folder).addClass('mm_folder_selected').html(MailManager.sprintf("<b>%s (%s)</b>", folder, count));
 620                  } else {
 621                      jQuery('#_mailfolder_' + folder).addClass('mm_folder_selected').html(MailManager.sprintf("%s", folder));
 622                  }
 623              }
 624          },
 625  
 626          /* Basic search for folder emails */
 627          search_basic: function(form){
 628              var frmparams = Form.serialize(form);
 629  
 630              var message = app.vtranslate('JSLBL_Searching')+' ...';
 631              var progressIndicatorElement = jQuery.progressIndicator({
 632                  'message' : message,
 633                  'position' : 'html',
 634                  'blockInfo' : {
 635                      'enabled' : true
 636                  }
 637              });
 638                          AppConnector.request(MailManager._baseurl() + "_operation=folder&_operationarg=open&" + frmparams).then(function(response) { 
 639                                          response = JSON.parse(response);
 640                      progressIndicatorElement.progressIndicator({
 641                          'mode' : 'hide'
 642                      })
 643  
 644                      MailManager.mail_close();
 645                      //var response = MailManager.removeHidElement(transport.responseText);
 646                      jQuery('#_contentdiv_').html(response.result);
 647  
 648                      MailManager.triggerUI5Resize();
 649                  }
 650                  );
 651  
 652              return false;
 653          },
 654  
 655          // Meta information of currently opened mail
 656          mail_open_meta: {},
 657  
 658          /* Open email */
 659          mail_open: function(folder, msgno){
 660  
 661              var message = app.vtranslate('JSLBL_Opening')+' ...';
 662              var progressIndicatorElement = jQuery.progressIndicator({
 663                  'message' : message,
 664                  'position' : 'html',
 665                  'blockInfo' : {
 666                      'enabled' : true
 667                  }
 668              });
 669              jQuery('#_mailrow_' + msgno).removeClass('fontBold');
 670              jQuery('#_mailrow_' + msgno).addClass('mm_normal');
 671  
 672                           AppConnector.request(MailManager._baseurl() + "_operation=mail&_operationarg=open&_folder=" + encodeURIComponent(folder) + "&_msgno=" + encodeURIComponent(msgno)).then(function(responseJSON) { 
 673                                          responseJSON = JSON.parse(responseJSON);
 674                      progressIndicatorElement.progressIndicator({
 675                          'mode' : 'hide'
 676                      })
 677                      //var response = MailManager.removeHidElement(transport.responseText);
 678                      //var responseJSON = JSON.parse(response);
 679                      var resultJSON = responseJSON['result'];
 680                      if (!resultJSON['ui']) {
 681                          Vtiger_Helper_Js.showPnotify(app.vtranslate('JSLBL_Failed_To_Open_Email'));
 682                          return;
 683                      }
 684  
 685                      MailManager.close_all();
 686                      jQuery('#_contentdiv2_').show();
 687                      jQuery('#_contentdiv2_').html(resultJSON['ui']);
 688  
 689                      MailManager.mail_open_meta = resultJSON['meta'];
 690                      var folderName = resultJSON['folder'];
 691  
 692                      // Update folder count on UI
 693                      MailManager.folder_updateCount(folderName, resultJSON['unread']);
 694  
 695                      MailManager.mail_find_relationship();
 696                  }
 697                  );
 698          },
 699  
 700  
 701          /* Close email */
 702          mail_close: function(){
 703              MailManager.close_all();
 704              jQuery('#_contentdiv_').show();
 705              MailManager.mail_open_meta = {};
 706          },
 707  
 708          /* Mark mail as read */
 709          mail_mark_unread: function(folder, msgno){
 710  
 711              var message = app.vtranslate('JSLBL_Updating')+' ...';
 712              var progressIndicatorElement = jQuery.progressIndicator({
 713                  'message' : message,
 714                  'position' : 'html',
 715                  'blockInfo' : {
 716                      'enabled' : true
 717                  }
 718              });
 719                          AppConnector.request(MailManager._baseurl() + "_operation=mail&_operationarg=mark&_markas=unread&_folder=" + encodeURIComponent(folder) + "&_msgno=" + encodeURIComponent(msgno)).then(function(responseJSON) { 
 720                                          responseJSON = JSON.parse(responseJSON);
 721                      progressIndicatorElement.progressIndicator({
 722                          'mode' : 'hide'
 723                      })
 724                      //var response = MailManager.removeHidElement(transport.responseText);
 725                      //var responseJSON = JSON.parse(response);
 726                      var resultJSON = responseJSON['result'];
 727  
 728                      if (responseJSON && resultJSON['status']) {
 729                          MailManager.mail_close();
 730  
 731                          var msgno = resultJSON['msgno'];
 732                          jQuery('#_mailrow_' + msgno).removeClass('mm_normal');
 733                          jQuery('#_mailrow_' + msgno).addClass('fontBold');
 734  
 735                          MailManager.folder_updateCount(resultJSON['folder'], resultJSON['unread']);
 736                      }
 737                  }
 738                  );
 739          },
 740  
 741          /*Print email */
 742          mail_print: function(){
 743  
 744              var subject = jQuery('#_mailopen_subject').html();
 745              var from = jQuery('#_mailopen_from').html();
 746              var to = jQuery('#_mailopen_to').html();
 747              var cc = jQuery('#_mailopen_cc') ? jQuery('#_mailopen_cc').html() : '';
 748              var date = jQuery('#_mailopen_date').html();
 749              var body = jQuery('#_mailopen_body').html();
 750  
 751              var content = window.open();
 752              content.document.write("<b>"+subject+"</b><br>");
 753              content.document.write("<br>From :" +from +"<br>");
 754              content.document.write("To :" +to+"<br>");
 755              cc == null ? '' : content.document.write("CC :" +cc+"<br>");
 756              content.document.write("Date :" + date+"<br>");
 757              content.document.write("<br>"+body +"<br>");
 758  
 759              content.print();
 760          },
 761  
 762          /* Lookup for mail relations in CRM */
 763          mail_find_relationship: function(){
 764              jQuery('#_mailrecord_findrel_btn_').html(MailManager.i18n('JSLBL_Finding_Relation') + '...');
 765              jQuery("#_mailrecord_findrel_btn_").attr('disabled', true);
 766  
 767              var meta = MailManager.mail_open_meta;
 768                          AppConnector.request(MailManager._baseurl() + "_operation=relation&_operationarg=find&_mfrom=" + encodeURIComponent(meta['from']) +
 769                  '&_folder=' +encodeURIComponent(meta['folder']) +'&_msgno=' +encodeURIComponent(meta['msgno']) +'&_msguid=' +
 770                  encodeURIComponent(meta['msguid'].replace('<', '&lt;').replace('>', '&gt;'))).then(function(responseJSON) { 
 771                                          responseJSON = JSON.parse(responseJSON);
 772                      jQuery('#_mailrecord_findrel_btn_').html(MailManager.i18n('JSLBL_Find_Relation_Now'));
 773                      jQuery("#_mailrecord_findrel_btn_").attr('disabled', false);
 774                      jQuery('#_mailrecord_findrel_btn_').hide();
 775                      //var response = MailManager.removeHidElement(transport.responseText);
 776                      //var responseJSON = JSON.parse(response);
 777                      var resultJSON = responseJSON['result'];
 778  
 779                      jQuery('#_mailrecord_relationshipdiv_').html(resultJSON['ui']);
 780  
 781                      MailManager.triggerUI5Resize();
 782                  }
 783                  );
 784          },
 785  
 786          /* Associate email to CRM record */
 787          mail_associate: function(form){
 788  
 789              var frmparams = Form.serialize(form);
 790              // No record is selected for linking?
 791              if (frmparams.indexOf('_mlinkto') == -1)
 792                  return;
 793  
 794              var message = app.vtranslate('JSLBL_Associating')+' ...';
 795              var progressIndicatorElement = jQuery.progressIndicator({
 796                  'message' : message,
 797                  'position' : 'html',
 798                  'blockInfo' : {
 799                      'enabled' : true
 800                  }
 801              });
 802                          AppConnector.request(MailManager._baseurl() + "_operation=relation&_operationarg=link&" + frmparams).then(function(responseJSON) { 
 803                      progressIndicatorElement.progressIndicator({
 804                          'mode' : 'hide'
 805                      })
 806                      //var response = MailManager.removeHidElement(transport.responseText);
 807                      //var responseJSON = JSON.parse(response);
 808                      var resultJSON = responseJSON['result'];
 809                      if (resultJSON['ui']) {
 810                          jQuery('#_mailrecord_relationshipdiv_').html(resultJSON['ui']);
 811                      }
 812  
 813                      MailManager.triggerUI5Resize();
 814                  }
 815                  );
 816          },
 817  
 818          /* Extended support for creating and linking */
 819          mail_associate_create_wizard: function(form){
 820              if (form._mlinktotype.value == '') {
 821                  MailManager.mail_associate_create_cancel();
 822                  return;
 823              }
 824              var thisInstance = this;
 825  
 826              var message = app.vtranslate('JSLBL_Loading')+' ...';
 827              var progressIndicatorElement = jQuery.progressIndicator({
 828                  'message' : message,
 829                  'position' : 'html',
 830                  'blockInfo' : {
 831                      'enabled' : true
 832                  }
 833              });
 834              var frmparams = Form.serialize(form);
 835                           AppConnector.request(MailManager._baseurl() + "_operation=relation&_operationarg=create_wizard&" + frmparams).then(function(response) {
 836                      var quickCreateController = new MailManager_QuickCreate_Js();
 837                      quickCreateController.handleQuickCreateData(response);
 838                  }
 839                  );
 840          },
 841  
 842          /* This will be used to perform actions on mails with an Linked record*/
 843          mail_associate_actions : function(form) {
 844              var selected = false;
 845  
 846              if(form._mlinkto.length != undefined) {
 847                  for(i=0; i<form._mlinkto.length; i++) {
 848                      if(form._mlinkto[i].checked) {
 849                          selected = true;
 850                      }
 851                  }
 852              } else {
 853                  if(form._mlinkto && form._mlinkto.checked) {
 854                      selected = true;
 855                  } else {
 856                      form._mlinkto.checked = true;
 857                      selected = true;
 858                  }
 859              }
 860  
 861              // No record is selected for linking?
 862              if (selected == false) {
 863                  Vtiger_Helper_Js.showPnotify(app.vtranslate('JSLBL_PLEASE_SELECT_ATLEAST_ONE_RECORD'));
 864                  MailManager.resetLinkToDropDown();
 865                  return false;
 866              }
 867  
 868              if(form._mlinktotype.value == 'Emails') {
 869                  MailManager.mail_associate(form);
 870              } else if(form._mlinktotype.value == 'ModComments') {
 871                  MailManager.showCommentWidget(form);
 872              } else {
 873                  MailManager.mail_associate_create_wizard(form);
 874              }
 875          },
 876  
 877          mail_associate_create_cancel: function(){
 878              jQuery('#_relationpopupdiv_').hide();
 879              MailManager.resetLinkToDropDown();
 880              app.hideModalWindow();
 881          },
 882  
 883          mail_associate_create: function(form, mainform){
 884  
 885              var frmparams = Form.serialize(form);
 886              frmparams = frmparams.replace('module=', 'xmodule=').replace('action=', 'xaction=');
 887              frmparams += '&' + Form.serialize(mainform);
 888  
 889              jQuery('#globalmodal').find('.modal-header').progressIndicator({smallLoadingImage : true, 'mode' : 'show'});
 890              var message = app.vtranslate('JSLBL_Associating')+' ...';
 891              var progressIndicatorElement = jQuery.progressIndicator({
 892                  'message' : message,
 893                  'position' : 'html',
 894                  'blockInfo' : {
 895                      'enabled' : true
 896                  }
 897              });
 898                          AppConnector.request(MailManager._baseurl() + "_operation=relation&_operationarg=create&" + frmparams).then(function(responseJSON) {
 899                      progressIndicatorElement.progressIndicator({
 900                          'mode' : 'hide'
 901                      })
 902                      //var response = MailManager.removeHidElement(transport.responseText);
 903                      //var responseJSON = JSON.parse(response);
 904                      var resultJSON = responseJSON['result'];
 905                      if (resultJSON['ui']) {
 906                          MailManager.mail_associate_create_cancel();
 907                          jQuery('#_mailrecord_relationshipdiv_').html(resultJSON['ui']);
 908                          MailManager.resetLinkToDropDown();
 909  
 910                          MailManager.triggerUI5Resize();
 911                          return true;
 912                      }
 913                  }
 914                  );
 915          },
 916  
 917          // function to show the comment widget
 918          showCommentWidget : function(form) {
 919              var frmparams = Form.serialize(form);
 920              var progressIndicatorElement = jQuery.progressIndicator({
 921                  'message' : '',
 922                  'position' : 'html',
 923                  'blockInfo' : {
 924                      'enabled' : true
 925                  }
 926              });
 927                          AppConnector.request(MailManager._baseurl() + "_operation=relation&_operationarg=commentwidget&" + frmparams).then(function(response) {
 928                      progressIndicatorElement.progressIndicator({
 929                          'mode' : 'hide'
 930                      })
 931                      var callBackFunction = function(data){
 932                          jQuery('.cancelLink', data).on('click',function(e){
 933                              MailManager.resetLinkToDropDown();
 934                          });
 935  
 936                          jQuery('[name="saveButton"]',data).on('click',function(e){
 937                              var valid = MailManager.addCommentValidate(data);
 938                              if(valid){
 939                                  MailManager.saveComment(data);
 940                              }
 941                          });
 942                      }
 943                      app.showModalWindow(response,function(response){
 944                          if(typeof callBackFunction == 'function'){
 945                              callBackFunction(response);
 946                          }
 947                      },{
 948                          'text-align' : 'left'
 949                      });
 950                  }
 951                  );
 952          },
 953  
 954          addCommentValidate : function(form) {
 955              var element = jQuery('[name=commentcontent]', form);
 956              var comment = jQuery.trim(element.val());
 957              if(comment == '') {
 958                  element.validationEngine('showPrompt',app.vtranslate('JSLBL_CANNOT_ADD_EMPTY_COMMENT'),'',"topLeft",true);
 959                  return false;
 960              }
 961              return true;
 962          },
 963  
 964          saveComment : function(form){
 965              var _mlinkto = jQuery('[name="_mlinkto"]:checked').val();
 966              var _mlinktotype = jQuery('[name="_mlinktotype"]').val();
 967              var _msgno = jQuery('[name="_msgno"]').val();
 968              var _folder = jQuery('[name="_folder"]').val()
 969              var commentcontent = jQuery('[name="commentcontent"]').val();
 970              var frmparams = 'commentcontent='+commentcontent+'&_mlinkto='+_mlinkto+'&_mlinktotype='+_mlinktotype+'&_msgno='+_msgno+'&_folder='+_folder;
 971              var message = app.vtranslate('JSLBL_Saving')+' ...';
 972              var progressIndicatorElement = jQuery.progressIndicator({
 973                  'message' : message,
 974                  'position' : 'html',
 975                  'blockInfo' : {
 976                      'enabled' : true
 977                  }
 978              });
 979                          AppConnector.request(MailManager._baseurl() + "_operation=relation&_operationarg=create&" + frmparams).then(function(responseJSON) {
 980                              responseJSON = JSON.parse(responseJSON);
 981                      progressIndicatorElement.progressIndicator({
 982                          'mode' : 'hide'
 983                      })
 984                      var resultJSON = responseJSON['result'];
 985                      if (resultJSON['ui']) {
 986                          app.hideModalWindow(form);
 987                          MailManager.resetLinkToDropDown();
 988                      }
 989                  }
 990              );
 991          },
 992  
 993          // Place an element at the center of the page
 994          placeAtCenter : function(element) {
 995              element.css("position","absolute");
 996              element.css("top", ((jQuery(window).height() - element.outerHeight()) / 4) + jQuery(window).scrollTop() + "px");
 997              element.css("left", ((jQuery(window).width() - element.outerWidth()) / 2) + jQuery(window).scrollLeft() + "px");
 998  
 999          },
1000  
1001          /* Compose new mail */
1002          mail_compose: function(){
1003              var params = {step: "step1", module: "MailManager", view: "MassActionAjax", mode: "showComposeEmailForm",
1004                  selected_ids : "[]", excluded_ids : "[]"};
1005              Vtiger_Index_Js.showComposeEmailPopup(params);
1006          },
1007  
1008          createUploader : function (){
1009              var uploader = new qq.FileUploader({
1010                  element: document.getElementById('file-uploader'),
1011                  action : 'index.php?module=MailManager&action=MailManagerAjax&file=index&mode=ajax&_operation=relation&_operationarg=saveattachment',
1012  
1013                  template: '<div class="qq-uploader">' +
1014                  '<div class="qq-upload-drop-area"><span>'+MailManager.i18n('JSLBL_UPLOAD_DROPFILES')+'</span></div>' +
1015                  '<div class="qq-upload-button">'+MailManager.i18n('JSLBL_UPLOAD_FILE')+'</div>' +
1016                  '<ul class="qq-upload-list"></ul>' +
1017                  '</div>',
1018  
1019                  // template for one item in file list
1020                  fileTemplate: '<li>' +
1021                  '<span class="qq-upload-file small"></span>' +
1022                  '<span class="qq-upload-spinner small"></span>' +
1023                  '<span class="qq-upload-size small"></span>' +
1024                  '<a class="qq-upload-cancel small" href="#">'+MailManager.i18n('JSLBL_UPLOAD_CANCEL')+'</a>' +
1025                  '<a class="qq-upload-deleteupload small" href="#">\n\
1026                                      <img height="12" border="0" width="12" title='+MailManager.i18n('JSLBL_Delete')+' src="themes/images/no.gif"></a>' +
1027                  '<span class="qq-upload-failed-text small">'+MailManager.i18n('JSLBL_UPLOAD_FAILED')+'</span>' +
1028                  '</li>',
1029                  multiple: false,
1030                  classes: {
1031                      // used to get elements from templates
1032                      button: 'qq-upload-button',
1033                      drop: 'qq-upload-drop-area',
1034                      dropActive: 'qq-upload-drop-area-active',
1035                      list: 'qq-upload-list',
1036  
1037                      file: 'qq-upload-file',
1038                      spinner: 'qq-upload-spinner',
1039                      size: 'qq-upload-size',
1040                      cancel: 'qq-upload-cancel',
1041                      deleteupload: 'qq-upload-deleteupload',
1042                      // added to list item when upload completes
1043                      // used in css to hide progress spinner
1044                      success: 'qq-upload-success',
1045                      fail: 'qq-upload-fail'
1046                  }
1047              });
1048              return uploader;
1049          },
1050  
1051          //draft
1052          mail_draft: function(id, edit){
1053              var params = {module: "Emails", view: "ComposeEmail", mode: "emailPreview", record: id}
1054              if (typeof edit != 'undefined' && edit) params['mode'] = 'emailEdit';
1055              var emailEditInstance = new Emails_MassEdit_Js();
1056              var win = emailEditInstance.showComposeEmailForm(params);
1057              var folder = jQuery('#mailbox_folder').val();
1058              if (folder == 'mm_drafts') {
1059                  var timer = setInterval(function() {
1060                      if(win.closed) {
1061                          clearInterval(timer);
1062                          MailManager.folder_drafts(0);
1063                      }
1064                  }, 500);
1065              }
1066          },
1067  
1068          deleteAttachment : function(id, docid, ele) {
1069              var message = app.vtranslate('JSLBL_Loading')+' ...';
1070              var progressIndicatorElement = jQuery.progressIndicator({
1071                  'message' : message,
1072                  'position' : 'html',
1073                  'blockInfo' : {
1074                      'enabled' : true
1075                  }
1076              });
1077                          AppConnector.request(MailManager._baseurl() + "_operation=mail&_operationarg=deleteAttachment&emailid="+ encodeURIComponent(id)
1078                  +"&docid="+ encodeURIComponent(docid)).then(function(responseJSON) {
1079                                          responseJSON = JSON.parse(responseJSON);
1080                      progressIndicatorElement.progressIndicator({
1081                          'mode' : 'hide'
1082                      })
1083                      //var responseJSON = JSON.parse(response.responseText);
1084                      if(responseJSON.result.success == true) {
1085                          jQuery(ele).parent().fadeTo('slow', 0.0, function(){
1086                              var count = jQuery('#attachmentCount').val();
1087                              jQuery('#attachmentCount').val(--count);
1088                              jQuery(ele).parent().remove();
1089                          });
1090                      } else {
1091                          Vtiger_Helper_Js.showPnotify(app.vtranslate('JSLBL_ATTACHMENT_NOT_DELETED'));
1092                      }
1093                  }
1094                  );
1095          },
1096  
1097          /* Reply to mail */
1098          mail_reply: function(all){
1099              if (typeof(all) == 'undefined')
1100                  all = true;
1101  
1102              // TODO Strip invalid HTML?
1103              var from = jQuery('#_mailopen_from').html();
1104              var cc = all ? jQuery('#_mailopen_cc').html() : '';
1105              var subject = jQuery('#_mailopen_subject').html();
1106              var body = jQuery('#_mailopen_body').html();
1107              var date = jQuery('#_mailopen_date').html();
1108  
1109              var replySubject = (subject.toUpperCase().indexOf('RE:') == 0) ? subject : 'Re: ' + subject;
1110              var replyBody = MailManager.sprintf('<p></p><p style="margin:0;padding:0;">%s, %s, %s:</p><blockquote style="border:0;margin:0;border-left:1px solid gray;padding:0 0 0 2px;">%s</blockquote><br />', 'On ' + date, from, 'wrote', body);
1111  
1112  			function fillComposeEmailForm(win) {
1113                  var formValues = {
1114                      '#ccContainer input' : cc,
1115                      '[name="subject"]': replySubject
1116                  }
1117                  var rteValues = {
1118                      'description': replyBody
1119                  }
1120                  win['app']['setFormValues'](formValues);
1121                  win['app']['setRTEValues'](rteValues);
1122                  if (cc) {
1123                      win['jQuery']('#ccLink').trigger('click');
1124                  }
1125              }
1126  
1127              var params = {step: "step1", module: "MailManager", view: "MassActionAjax", mode: "showComposeEmailForm", selected_ids:"[]", excluded_ids: "[]", to:'["'+from+'"]'}
1128              Vtiger_Index_Js.showComposeEmailPopup(params, function(win){
1129                  if (typeof win != 'undefined') {
1130                      setTimeout(function() {fillComposeEmailForm(win);}, 2000);
1131                  }
1132              });
1133          },
1134  
1135          /* Track and Initialize RTE instance for reply */
1136          mail_reply_rteinstance: false,
1137          mail_reply_rteinit: function(data){
1138              if (MailManager.mail_reply_rteinstance == false) {
1139                  var textAreaName = '_mail_replyfrm_body_';
1140                  CKEDITOR.replace(textAreaName, {
1141                      toolbar: 'Full',
1142                      extraPlugins: 'uicolor',
1143                      uiColor: '#dfdff1'
1144                  });
1145                  MailManager.mail_reply_rteinstance = CKEDITOR.instances[textAreaName];
1146              }
1147  
1148              MailManager.mail_reply_rteinstance.setData(data, function(){
1149                  });
1150              MailManager.mail_reply_rteinstance.focus();
1151          },
1152  
1153          /* Close reply UI */
1154          mail_reply_close: function(){
1155              jQuery('#_replydiv_').hide();
1156              if(jQuery('#mm_selected_folder').val()=='mm_settings'){
1157                  MailManager.open_settings();
1158              }
1159              else{
1160                  var contentDiv2 = jQuery('#_contentdiv2_').html();
1161                  if (contentDiv2 == '') {
1162                      jQuery('#_contentdiv_').show();
1163                  } else {
1164                      jQuery('#_contentdiv2_').show();
1165                  }
1166  
1167                  // Updated to highlight selected folder
1168                  var currentSelectedFolder = jQuery('#mailbox_folder').val();
1169                  MailManager.updateSelectedFolder(currentSelectedFolder);
1170                  jQuery('#mm_selected_folder').val(currentSelectedFolder);
1171              }
1172  
1173              MailManager.triggerUI5Resize();
1174          },
1175  
1176          /* Forward email */
1177          mail_forward: function(messageId){
1178  
1179              /**
1180               * If mail has no attachment - open the popup in compose mode.
1181               * Else create a draft with attachment - open the popup as draft edit mode.
1182               */
1183  
1184              var from = jQuery('#_mailopen_from').html();
1185              var to = jQuery('#_mailopen_to').html();
1186              var cc = jQuery('#_mailopen_cc') ? jQuery('#_mailopen_cc').html() : '';
1187              var subject = jQuery('#_mailopen_subject').html();
1188              var body = jQuery('#_mailopen_body').html();
1189              var date = jQuery('#_mailopen_date').html();
1190              var folder = jQuery('#mailbox_folder').val();
1191  
1192              var fwdMsgMetaInfo = MailManager.i18n('JSLBL_FROM') + from + '<br/>'+MailManager.i18n('JSLBL_DATE') + date + '<br/>'+MailManager.i18n('JSLBL_SUBJECT') + subject;
1193              if (to != '' && to != null)
1194                  fwdMsgMetaInfo += '<br/>'+MailManager.i18n('JSLBL_TO') + to;
1195              if (cc != '' && cc != null)
1196                  fwdMsgMetaInfo += '<br/>'+MailManager.i18n('JSLBL_CC') + cc;
1197              fwdMsgMetaInfo += '<br/>';
1198  
1199              var fwdSubject = (subject.toUpperCase().indexOf('FWD:') == 0) ? subject : 'Fwd: ' + subject;
1200              var fwdBody = MailManager.sprintf('<p></p><p>%s<br/>%s</p>%s', MailManager.i18n('JSLBL_FORWARD_MESSAGE_TEXT'), fwdMsgMetaInfo, body);
1201  
1202              var attachmentCount = jQuery("#_mail_attachmentcount_").val();
1203              if(attachmentCount) {
1204                  VtigerJS_DialogBox.block();
1205                                  AppConnector.request(MailManager._baseurl() + "_operation=mail&_operationarg=forward&messageid=" + 
1206                      encodeURIComponent(messageId) +"&folder=" + encodeURIComponent(folder) +"&subject=" + encodeURIComponent(fwdSubject) +
1207                      "&body=" + fwdBody).then(function(responseJSON) {
1208                                              responseJSON = JSON.parse(responseJSON);
1209                          VtigerJS_DialogBox.unblock();
1210                          // Open the draft the was saved.
1211                          if (responseJSON['success']) {
1212                              MailManager.mail_draft(responseJSON['result']['emailid'], true);
1213                          }
1214                      }
1215                      );
1216  
1217              } else {
1218                  // Populate the popup window
1219  				function fillComposeEmailForm(win) {
1220                      var formValues = {
1221                          '[name="subject"]': fwdSubject
1222                      }
1223                      var rteValues = {
1224                          'description': fwdBody
1225                      }
1226                      win['app']['setFormValues'](formValues);
1227                      win['app']['setRTEValues'](rteValues);
1228                  }
1229                  var params = {step: "step1", module: "MailManager", view: "MassActionAjax", mode: "showComposeEmailForm", selected_ids:"[]", excluded_ids: "[]"}
1230                  Vtiger_Index_Js.showComposeEmailPopup(params, function(win){
1231                      if (typeof win != 'undefined') {
1232                          setTimeout(function() {fillComposeEmailForm(win);}, 2000);
1233                      }
1234                  });
1235              }
1236          },
1237  
1238          /* Send reply to email */
1239          mail_reply_send: function(form){
1240              if (MailManager.mail_reply_rteinstance) {
1241                  MailManager.mail_reply_rteinstance.updateElement();
1242              }
1243              var meta = MailManager.mail_open_meta;
1244  
1245              var msguid = encodeURIComponent(meta['msguid'] ? meta['msguid'].replace('<', '&lt;').replace('>', '&gt;') : '');
1246  
1247              if(!MailManager.validateEmailFields(form.to.value, form.cc.value, form.bcc.value)) {
1248                  return false;
1249              }
1250  
1251              if (form.to.value == '') {
1252                  Vtiger_Helper_Js.showPnotify(app.vtranslate('JSLBL_Recepient_Cannot_Be_Empty'));
1253                  return false;
1254              }
1255              if (form.subject.value == '') {
1256                  Vtiger_Helper_Js.showPnotify(app.vtranslate('JSLBL_Subject_Cannot_Be_Empty'));
1257                  return false;
1258              }
1259              var bodyval = $('_mail_replyfrm_body_').value.trim();
1260              if (bodyval == '<br />' || bodyval == '') {
1261                  Vtiger_Helper_Js.showPnotify(app.vtranslate('JSLBL_Body_Cannot_Be_Empty'));
1262                  return false;
1263              }
1264              var message = app.vtranslate('JSLBL_Sending')+' ...';
1265              var progressIndicatorElement = jQuery.progressIndicator({
1266                  'message' : message,
1267                  'position' : 'html',
1268                  'blockInfo' : {
1269                      'enabled' : true
1270                  }
1271              });
1272              var params = {
1273                  '_operation':'mail',
1274                  '_operationarg':'send',
1275                  '_msgid':msguid,
1276                  'to':encodeURIComponent(form.to.value),
1277                  'cc':encodeURIComponent(form.cc.value),
1278                  'bcc':encodeURIComponent(form.bcc.value),
1279                  'subject':encodeURIComponent(form.subject.value),
1280                  'body':encodeURIComponent(form.body.value),
1281                  'linkto':encodeURIComponent(form.linkto.value),
1282                  'emailid':encodeURIComponent(form.emailid.value)
1283              };
1284              var baseurl = MailManager._baseurl();
1285              MailManager.Request(baseurl, params, function(transport) {
1286                  progressIndicatorElement.progressIndicator({
1287                      'mode' : 'hide'
1288                  })
1289                  var response = MailManager.removeHidElement(transport.responseText);
1290                  var responseJSON = JSON.parse(response);
1291                  if (responseJSON['success']) {
1292                      MailManager.mail_reply_close();
1293                      MailManager.show_message(MailManager.i18n('JSLBL_MAIL_SENT'));
1294                  } else {
1295                      Vtiger_Helper_Js.showPnotify(app.vtranslate('JSLBL_Failed_To_Send_Mail') +
1296                          ': ' + responseJSON['error']['message']);
1297                  }
1298              });
1299          },
1300  
1301          /* Send reply to email */
1302          save_draft: function(form){
1303              if (MailManager.mail_reply_rteinstance) {
1304                  MailManager.mail_reply_rteinstance.updateElement();
1305              }
1306  
1307              if(!MailManager.validateEmailFields(form.to.value, form.cc.value, form.bcc.value)) {
1308                  return false;
1309              }
1310  
1311              if (form.subject.value == '' ) {
1312                  if(!confirm(MailManager.i18n('JSLBL_SaveWith_EmptySubject'))) {
1313                      return false;
1314                  }
1315              }
1316  
1317              var message = app.vtranslate('JSLBL_Saving')+' ...';
1318              var progressIndicatorElement = jQuery.progressIndicator({
1319                  'message' : message,
1320                  'position' : 'html',
1321                  'blockInfo' : {
1322                      'enabled' : true
1323                  }
1324              });
1325              var params = {
1326                  '_operation':'mail',
1327                  '_operationarg':'save',
1328                  'emailid':encodeURIComponent(form.emailid.value),
1329                  'to':encodeURIComponent(form.to.value),
1330                  'cc':encodeURIComponent(form.cc.value),
1331                  'bcc':encodeURIComponent(form.bcc.value),
1332                  'subject':encodeURIComponent(form.subject.value),
1333                  'body':encodeURIComponent(form.body.value),
1334                  'linkto':encodeURIComponent(form.linkto.value),
1335                  'currentid':encodeURIComponent(form.emailid.value)
1336              };
1337              var baseurl = MailManager._baseurl();
1338              MailManager.Request(baseurl, params, function(transport) {
1339                  progressIndicatorElement.progressIndicator({
1340                      'mode' : 'hide'
1341                  })
1342                  var response = MailManager.removeHidElement(transport.responseText);
1343                  var responseJSON = JSON.parse(response);
1344  
1345                  if (responseJSON['success']) {
1346                      MailManager.show_message(MailManager.i18n('JSLBL_DRAFT_MAIL_SAVED'));
1347                  } else {
1348                      Vtiger_Helper_Js.showPnotify(app.vtranslate('JSLBL_Failed_To_Save_Mail'));
1349                  }
1350              });
1351          },
1352  
1353          folder_drafts: function(page){
1354              var message = app.vtranslate('JSLBL_Loading')+' '+app.vtranslate('JSLBL_Loading');
1355              var progressIndicatorElement = jQuery.progressIndicator({
1356                  'message' : message,
1357                  'position' : 'html',
1358                  'blockInfo' : {
1359                      'enabled' : true
1360                  }
1361              });
1362              var params = {
1363                  '_operation':'folder',
1364                  '_operationarg':'drafts',
1365                  '_page':encodeURIComponent(page)
1366              };
1367              var baseurl = MailManager._baseurl();
1368              MailManager.Request(baseurl, params, function(transport) {
1369                  progressIndicatorElement.progressIndicator({
1370                      'mode' : 'hide'
1371                  })
1372                  MailManager.mail_close();
1373                  var resultObject = JSON.parse(transport.responseText);
1374                  jQuery('#_contentdiv_').html(resultObject.result);
1375                  // Initialize upload
1376                  //MailManager.createUploader();
1377  
1378                  MailManager.bindEnterKeyForSearch();
1379  
1380                  // Update the selected folder to highlight selected folder
1381                  MailManager.updateSelectedFolder('mm_drafts');
1382                  jQuery('#mm_selected_folder').val('mm_drafts');
1383                  jQuery('#mailbox_folder').val('mm_drafts');
1384  
1385                  MailManager.triggerUI5Resize();
1386              });
1387          },
1388  
1389          search_popupui: function(target, handle){
1390              var message = app.vtranslate('JSLBL_Loading')+' ...';
1391              var progressIndicatorElement = jQuery.progressIndicator({
1392                  'message' : message,
1393                  'position' : 'html',
1394                  'blockInfo' : {
1395                      'enabled' : true
1396                  }
1397              });
1398              var params = {
1399                  '_operation':'search',
1400                  '_operationarg':'popupui'
1401              };
1402              var baseurl = MailManager._baseurl();
1403              MailManager.Request(baseurl, params, function(transport) {
1404                  progressIndicatorElement.progressIndicator({
1405                      'mode' : 'hide'
1406                  })
1407                  var response = MailManager.removeHidElement(transport.responseText);
1408                  jQuery('#_popupsearch_').html(response);
1409                  MailManager.placeAtCenter(jQuery('#_popupsearch_'));
1410                  jQuery('#_popupsearch_').show().draggable();
1411                  MailManager.search_popup_init(target);
1412  
1413                  MailManager.triggerUI5Resize();
1414              });
1415          },
1416  
1417          search_popup_init: function(target){
1418              var url = MailManager._baseurl() + "_operation=search&_operationarg=email&";
1419  
1420              if (jQuery('#_search_popupui_target_')) {
1421                  jQuery('#_search_popupui_target_').val(target);
1422              }
1423  
1424              var elem = jQuery('#_search_popupui_input_');
1425              if (elem) {
1426                  if (elem.attr('_tokeninput_init_'))
1427                      return;
1428                  elem.tokenInput(url, {
1429                      hintText: MailManager.i18n('JSLBL_Search_For_Email') + '...',
1430                      noResultsText: MailManager.i18n('JSLBL_Nothing_Found'),
1431                      searchingText: MailManager.i18n('JSLBL_Searching_Please_Wait') + '...',
1432                      minChars : 3,
1433                      classes: {
1434                          tokenList: "token-input-list-facebook",
1435                          token: "token-input-token-facebook",
1436                          tokenDelete: "token-input-delete-token-facebook",
1437                          selectedToken: "token-input-selected-token-facebook",
1438                          highlightedToken: "token-input-highlighted-token-facebook",
1439                          dropdown: "token-input-dropdown-facebook",
1440                          dropdownItem: "token-input-dropdown-item-facebook",
1441                          dropdownItem2: "token-input-dropdown-item2-facebook",
1442                          selectedDropdownItem: "token-input-selected-dropdown-item-facebook",
1443                          inputToken: "token-input-list-facebook"
1444                      }
1445                  });
1446                  elem.attr('_tokeninput_init_', true);
1447              }
1448          },
1449  
1450          search_consume_input: function(form){
1451              var inputstr = form._search_popupui_input_.value;
1452              var target = form._search_popupui_target_.value;
1453  
1454              // Based on target perform the operation
1455              var targetnode = $(target);
1456              if (targetnode) {
1457                  if (targetnode.value.length > 0 && targetnode.value.substr(-1) != ',') {
1458                      inputstr = ',' + inputstr;
1459                  }
1460                  targetnode.value += inputstr;
1461              }
1462              MailManager.popup_close();
1463          },
1464  
1465          popup_close: function(){
1466              jQuery('#_popupsearch_').html('');
1467              jQuery('#_popupsearch_').hide();
1468  
1469              MailManager.triggerUI5Resize();
1470          },
1471  
1472          clear_input: function(id){
1473              if (jQuery("#"+id))
1474                  jQuery("#"+id).val('');
1475          },
1476  
1477          selectTemplate: function() {
1478              url = 'module=EmailTemplate&parent=Settings&view=List';
1479              var popupInstance = Vtiger_Popup_Js.getInstance();
1480              popupInstance.show(url,function(data){
1481                  var responseData = JSON.parse(data);
1482                  for(var key in responseData){
1483                      responseData = responseData[key];
1484                      break;
1485                  }
1486                  jQuery('#_mail_replyfrm_subject_').val(responseData['name']);
1487                  CKEDITOR.instances['_mail_replyfrm_body_'].setData(responseData['info']);
1488              });
1489          },
1490  
1491          removeHidElement: function(jsonresponse){
1492              // PHPSESSID is General value
1493              // Session Name should be picked from php.ini
1494              var replaceJsonTxt = jsonresponse.replace('/<input type="hidden" name="PHPSESSID" value=["]{1}[a-z0-9]+["]{1}\s{0,1}[/]?[>]?/', '');
1495              return replaceJsonTxt;
1496          },
1497  
1498          massMailDelete: function(folder){
1499              var cb_elements = jQuery('[name="mc_box"]');
1500              var temp = new Array();
1501              var len = jQuery('[name="mc_box"]').length;
1502              for (var i = 0; i < len; i++) {
1503                  if (cb_elements[i].checked) {
1504                      temp.push(cb_elements[i].value);
1505                  }
1506              }
1507              if (temp.length == 0) {
1508                  return alert(app.vtranslate('JSLBL_NO_EMAILS_SELECTED'));
1509              } else {
1510                  MailManager.maildelete(folder, temp, true);
1511              }
1512          },
1513  
1514          maildelete: function(foldername, msgno, reloadfolder){
1515              var message = app.vtranslate('LBL_DELETE_CONFIRMATION');
1516              if (!confirm(message)) return;
1517  
1518              var message = app.vtranslate('JSLBL_Deleting')+' ...';
1519              var progressIndicatorElement = jQuery.progressIndicator({
1520                  'message' : message,
1521                  'position' : 'html',
1522                  'blockInfo' : {
1523                      'enabled' : true
1524                  }
1525              });
1526              var params = {
1527                  '_operation':'mail',
1528                  '_operationarg':'delete',
1529                  '_folder':encodeURIComponent(foldername),
1530                  '_msgno':encodeURIComponent(msgno)
1531              };
1532              var baseurl = MailManager._baseurl();
1533              MailManager.Request(baseurl, params, function() {
1534                  for(var i = 0;i<msgno.length;i++) {
1535                      var ele ="#_mailrow_"+msgno[i];
1536                      jQuery(ele).fadeOut(1500,function() {
1537                          jQuery(ele).remove();
1538                      });
1539                  }
1540                  if(reloadfolder == true) {
1541                      progressIndicatorElement.progressIndicator({
1542                          'mode' : 'hide'
1543                      })
1544                      if(foldername == "__vt_drafts") {
1545                          MailManager.folder_drafts();
1546                      } else {
1547                          MailManager.folder_open(foldername);
1548                      }
1549                  }
1550              });
1551          },
1552  
1553          show: function(ele){
1554              jQuery('#' + ele).css('display', 'block');
1555          },
1556  
1557          getDocuments : function(){
1558              if(!MailManager.checkUploadCount()) {
1559                  return false;
1560              }
1561              var emailId = jQuery('#emailid').val();
1562              if(emailId == "") {
1563                  var body = CKEDITOR.instances['_mail_replyfrm_body_'];
1564                  if(body != "")
1565                      body =  body.getData();
1566  
1567                  var to = jQuery('#_mail_replyfrm_to_').val();
1568                  var cc = jQuery('#_mail_replyfrm_cc_').val();
1569                  var bcc = jQuery('#_mail_replyfrm_bcc_').val();
1570                  var subject = jQuery('#_mail_replyfrm_subject_').val();
1571                  VtigerJS_DialogBox.block();
1572  
1573                  var params = {
1574                      '_operation':'mail',
1575                      '_operationarg':'save',
1576                      'to':encodeURIComponent(to),
1577                      'cc':encodeURIComponent(cc),
1578                      'bcc':encodeURIComponent(bcc),
1579                      'subject':encodeURIComponent(subject),
1580                      'body':encodeURIComponent(body)
1581                  };
1582                  var baseurl = MailManager._baseurl();
1583                  MailManager.Request(baseurl, params, function(response){
1584                      var responseText = JSON.parse(response.responseText);
1585                      emailId = responseText.result.emailid;
1586                      jQuery('#emailid').val(emailId);
1587                      window.open('index.php?module=Documents&return_module=MailManager&action=Popup&popuptype=detailview&form=EditView&form_submit=false&recordid='+emailId+'&forrecord='+emailId+'&parenttab=Marketing&srcmodule=MailManager&popupmode=ajax&RLreturn_module=MailManager&RLparent_id='+emailId+'&parenttab=My Home Page&callback=MailManager.add_data_to_relatedlist','test','width=640,height=602,resizable=0,scrollbars=0');
1588                  });
1589              } else {
1590                  window.open('index.php?module=Documents&return_module=MailManager&action=Popup&popuptype=detailview&form=EditView&form_submit=false&recordid='+emailId+'&forrecord='+emailId+'&parenttab=Marketing&srcmodule=MailManager&popupmode=ajax&RLreturn_module=MailManager&RLparent_id='+emailId+'&parenttab=My Home Page&callback=MailManager.add_data_to_relatedlist','test','width=640,height=602,resizable=0,scrollbars=0');
1591              }
1592              VtigerJS_DialogBox.unblock();
1593          },
1594  
1595          search_drafts: function(){
1596              var string = jQuery('#search_txt').val();
1597              if(string == '') {
1598                  alert(app.vtranslate('JSLBL_ENTER_SOME_VALUE'));
1599                  return false;
1600              }
1601  
1602              var type   = jQuery('#search_type').val();
1603              var message = app.vtranslate('JSLBL_Searching')+' ...';
1604              var progressIndicatorElement = jQuery.progressIndicator({
1605                  'message' : message,
1606                  'position' : 'html',
1607                  'blockInfo' : {
1608                      'enabled' : true
1609                  }
1610              });
1611              var params = {
1612                  '_operation':'folder',
1613                  '_operationarg':'drafts',
1614                  'q':encodeURIComponent(string),
1615                  'type':encodeURIComponent(type)
1616              };
1617              var baseurl = MailManager._baseurl();
1618              MailManager.Request(baseurl, params, function(response){
1619                  progressIndicatorElement.progressIndicator({
1620                      'mode' : 'hide'
1621                  })
1622                  MailManager.mail_close();
1623                  var responseText = MailManager.removeHidElement(response.responseText);
1624                  jQuery('#_contentdiv_').html(responseText.result);
1625  
1626                  MailManager.triggerUI5Resize();
1627              });
1628  
1629              return false;
1630          },
1631  
1632          search_mails: function(foldername){
1633              var string = jQuery('#search_txt').val();
1634              if(string == '') {
1635                  alert(app.vtranslate('JSLBL_ENTER_SOME_VALUE'));
1636                  return false;
1637              }
1638              var type   = jQuery('#search_type').val();
1639              var dateformat = jQuery('#jscal_dateformat').val();
1640              var message = app.vtranslate('JSLBL_Searching')+' ...';
1641              var progressIndicatorElement = jQuery.progressIndicator({
1642                  'message' : message,
1643                  'position' : 'html',
1644                  'blockInfo' : {
1645                      'enabled' : true
1646                  }
1647              });
1648              var params = {
1649                  '_operation':'folder',
1650                  '_operationarg':'open',
1651                  'q':encodeURIComponent(string),
1652                  'type':encodeURIComponent(type),
1653                  '_folder':encodeURIComponent(foldername)
1654              };
1655              var baseurl = MailManager._baseurl();
1656              MailManager.Request(baseurl, params, function(response){
1657                  progressIndicatorElement.progressIndicator({
1658                      'mode' : 'hide'
1659                  })
1660                  MailManager.mail_close();
1661                  response = JSON.parse(response['responseText']);
1662                  jQuery('#_contentdiv_').html(response.result);
1663  
1664                  jQuery('#_mailfolder_' + foldername).addClass('mm_folder_selected');
1665                  var element = jQuery('#search_txt');
1666                  if(type == 'ON') {
1667                      if(element.length != 0) {
1668                          element.closest('div').addClass('date')
1669                          element.addClass('dateField').attr('data-date-format', dateformat);
1670                          element.after(" <span class='add-on'><i class='icon-calendar'></i></span>");
1671                          app.registerEventForDatePickerFields(element, true);
1672                      }
1673                  }else {
1674                      element.closest('div').removeClass('date');
1675                      element.removeClass('dateField').removeAttr('data-date-format');
1676                      element.unbind('focus');
1677                      element.next().remove("span.add-on");
1678                      jQuery('#jscal_trigger_fval').hide();
1679                  }
1680  
1681                  MailManager.triggerUI5Resize();
1682  
1683                  MailManager.bindEnterKeyForSearch();
1684  
1685              });
1686  
1687              return false;
1688          },
1689  
1690          add_data_to_relatedlist: function(res){
1691              var fileSize, attachContent, element;
1692              fileSize = MailManager.computeDisplayableFileSize(res['size']);
1693              if(res.error != undefined) {
1694                  attachContent = "<li class='qq-upload-success small'><span class='qq-upload-file small'>"+res['name']+"</span>\n\
1695                                  <span class='qq-upload-size small' style='display: inline;'>"+fileSize+"</span>\n\
1696                                  <span class='qq-upload-failed-text small' style='display: inline;'>Failed</span>";
1697                  element = jQuery(window.opener.document).find('.qq-upload-list');
1698                  jQuery(element[0]).append(attachContent);
1699                  window.close();
1700                  return false;
1701              }
1702  
1703              attachContent = "<li class='qq-upload-success small'><span class='qq-upload-file small'>"+res['name']+"</span>\n\
1704                              <span class='qq-upload-size small' style='display: inline;'>"+fileSize+"</span>\n\
1705                              <a class='qq-upload-deleteupload small' onclick='MailManager.deleteAttachment(\""+res['emailid']+"\", \""+res['docid']+"\", this);' href='#'>\n\
1706                              <img height='12' border='0' width='12' title='Delete' src='themes/images/no.gif'></a></li>";
1707  
1708              try
1709              {
1710                  element = jQuery(window.opener.document).find('.qq-upload-list');
1711  
1712                  if(element[0]) {
1713                      jQuery(element[0]).append(attachContent);
1714                  } else {
1715                      element = jQuery.find('.qq-upload-list');
1716                      jQuery(element[0]).append(attachContent);
1717                  }
1718                  window.close();
1719              } catch(e) {
1720                  element = jQuery.find('.qq-upload-list');
1721                  jQuery(element[0]).append(attachContent);
1722              }
1723              // Update the attachment counter
1724              MailManager.uploadCountUpdater();
1725  
1726          },
1727  
1728          computeDisplayableFileSize : function(size) {
1729              var fileSize;
1730              if(size <= 1024) {
1731                  fileSize = size+"b";
1732              } else if(size > 1024 && size < 1048576) {
1733                  fileSize = (Math.round(size/1024))+"kB";
1734              } else if(size > (1024*1024)) {
1735                  fileSize = (Math.round(size/(1024*1024)))+"MB";
1736              } else {
1737                  fileSize = size;
1738              }
1739              return fileSize;
1740          },
1741  
1742          validateEmailFields :  function(to, cc, bcc) {
1743              if(to != "") {
1744                  if(!MailManager.mail_validate(to)) {
1745                      return false;
1746                  }
1747              }
1748              if(cc != "") {
1749                  if(!MailManager.mail_validate(cc)) {
1750                      return false;
1751                  }
1752              }
1753              if(bcc != "") {
1754                  if(!MailManager.mail_validate(bcc)) {
1755                      return false;
1756                  }
1757              }
1758              return true;
1759          },
1760  
1761          mail_validate : function(str) {
1762              var email_regex = /^[_/a-zA-Z0-9]+([!"#$%&'()*+,./:;<=>?\^_`{|}~-]?[a-zA-Z0-9/_/-])*@[a-zA-Z0-9]+([\_\-\.]?[a-zA-Z0-9]+)*\.([\-\_]?[a-zA-Z0-9])+(\.?[a-zA-Z0-9]+)?$/;
1763              arr = new Array();
1764              arr = str.split(",");
1765              var tmp;
1766              for(var i=0; i<=arr.length-1; i++) {
1767                  tmp = arr[i];
1768                  if(tmp.match('<') && tmp.match('>')) {
1769                      if(!MailManager.findAngleBracket(arr[i])) {
1770                          var errorMsg = app.vtranslate('JSLBL_EMAIL_FORMAT_INCORRECT');
1771                          Vtiger_Helper_Js.showPnotify(errorMsg+": "+arr[i]);
1772                          return false;
1773                      }
1774                  } else if(trim(arr[i]) != "" && !(email_regex.test(trim(arr[i])))) {
1775                      var errorMsg2 = app.vtranslate('JSLBL_EMAIL_FORMAT_INCORRECT');
1776                      Vtiger_Helper_Js.showPnotify(errorMsg2+": "+arr[i]);
1777                      return false;
1778                  }
1779              }
1780              return true;
1781          },
1782  
1783          findAngleBracket : function (mailadd) {
1784              var strlen = mailadd.length;
1785              var gt = 0;
1786              var lt = 0;
1787              var ret = '';
1788              for(i=0 ;i<strlen; i++) {
1789                  if(mailadd.charAt(i) == '<' && gt == 0) {
1790                      lt = 1;
1791                  }
1792                  if(mailadd.charAt(i) == '>' && lt == 1) {
1793                      gt = 1;
1794                  }
1795                  if(mailadd.charAt(i) != '<' && lt == 1 && gt == 0) {
1796                      ret = ret + mailadd.charAt(i);
1797                  }
1798              }
1799              if(/^[a-z0-9]([a-z0-9_\-\.]*)@([a-z0-9_\-\.]*)(\.[a-z]{2,3}(\.[a-z]{2}){0,2})$/.test(ret)){
1800                  return true;
1801              } else {
1802                  return false;
1803              }
1804          },
1805  
1806          uploadCountUpdater : function() {
1807              var countElement;
1808              if(jQuery('#attachmentCount').length) {
1809                  countElement = jQuery('#attachmentCount');
1810              } else {
1811                  countElement = jQuery(window.opener.document).find('#attachmentCount');
1812              }
1813              var MailManagerCurrentUploadCount = countElement.val();
1814              if(MailManagerCurrentUploadCount == null || MailManagerCurrentUploadCount == "") {
1815                  MailManagerCurrentUploadCount = 0;
1816              }
1817              countElement.val(++MailManagerCurrentUploadCount);
1818          },
1819  
1820          checkUploadCount : function() {
1821              var MailManagerCurrentUploadCount = jQuery("#attachmentCount").val();
1822              if(MailManagerCurrentUploadCount >= MailManager.MailManagerUploadLimit) {
1823                  Vtiger_Helper_Js.showPnotify(app.vtranslate('JSLBL_FILEUPLOAD_LIMIT_EXCEEDED'));
1824                  return false;
1825              }
1826              return true;
1827          },
1828  
1829  
1830          AjaxDuplicateValidate : function (module, fieldname, form) {
1831              var deferred = jQuery.Deferred();
1832  
1833  			function execute() {
1834                  var fieldvalue = encodeURIComponent(trim(getObj(fieldname).value));
1835                  var recordid = getObj('record').value;
1836  
1837  				function validate() {
1838                      if(fieldvalue == '') {
1839                          Vtiger_Helper_Js.showPnotify(app.vtranslate('JSLBL_ACCOUNTNAME_CANNOT_EMPTY'));
1840                          deffered.reject(form);
1841                          return false;
1842                      }
1843                      return true;
1844                  }
1845  
1846  				function requestOnComplete(response) {
1847                      var str = response.responseText;
1848                      VtigerJS_DialogBox.unblock();
1849                      if(str.indexOf('SUCCESS') > -1) {
1850                          deferred.resolve(form);
1851                      } else {
1852                          alert(str);
1853                          deferred.reject(form);
1854                      }
1855                  }
1856  
1857                  if(validate()) {
1858                      VtigerJS_DialogBox.block();
1859                      var params = {
1860                          'module':encodeURIComponent(module),
1861                          'action':encodeURIComponent(module)+"Ajax",
1862                          'file':'Save',
1863                          'dup_check':true,
1864                          'record':encodeURIComponent(recordid)
1865                      };
1866                      params[fieldname] = encodeURIComponent(fieldvalue);
1867                      MailManager.Request('index.php?', params, requestOnComplete);
1868                      VtigerJS_DialogBox.unblock();
1869                  }
1870              }
1871              // Trigger the function call
1872              execute();
1873              return deferred.promise();
1874          },
1875  
1876          Request : function(url, params, callback) {
1877              //var encodedParams = MailManager.getEncodedParameterString(params);
1878              return jQuery.ajax( {
1879                  url  : url,
1880                  type : 'POST',
1881                  data : params,
1882                  complete : function(response) {
1883                      callback(response);
1884                  }
1885              });
1886          },
1887  
1888          getEncodedParameterString : function (paramObject){
1889              var encodedParams = new Array();
1890              for(key in paramObject) {
1891                  encodedParams.push(key+'='+ paramObject[key]);
1892              }
1893              encodedParams = encodedParams.join('&');
1894              return encodedParams;
1895          },
1896  
1897          clearSearchString : function() {
1898              jQuery('#search_txt').val("");
1899              jQuery('#search_type').val("");
1900          },
1901  
1902          resetLinkToDropDown : function() {
1903              jQuery('#_mlinktotype').val("");
1904          },
1905  
1906          resetFolderDropDown : function() {
1907              jQuery('#moveFolderList').val("")
1908          },
1909  
1910          toggleSelect : function(state, relCheckName) {
1911              var elements = jQuery('[name='+relCheckName+']');
1912              for(i=0; i<elements.length; i++) {
1913                  var element = jQuery(elements[i]);
1914                  if(state) {
1915                      element.attr('checked',state).parent().parent().addClass('mm_lvtColDataHover').removeClass('mm_lvtColData');
1916                  } else {
1917                      element.attr('checked',state).parent().parent().removeClass('mm_lvtColDataHover').addClass('mm_lvtColData');
1918                  }
1919              }
1920          },
1921  
1922          toggleSelectMail : function(state, element) {
1923              if(state) {
1924                  jQuery(element).parent().parent().addClass('mm_lvtColDataHover').removeClass('mm_lvtColData');
1925              } else {
1926                  jQuery(element).parent().parent().addClass('mm_lvtColData').removeClass('mm_lvtColDataHover');
1927              }
1928  
1929              var allChecked = false;
1930              if (state) {
1931                  var allChecked = true;
1932                  var elements = jQuery('[name="mc_box"]');
1933                  for(var i=0; i<elements.length; i++) {
1934                      var element = jQuery(elements[i]);
1935                      var isChecked = jQuery(element).parent().parent().hasClass('mm_lvtColDataHover');
1936                      if (!isChecked) {
1937                          var allChecked = false;
1938                          break;
1939                      }
1940                  }
1941              }
1942              jQuery('#parentCheckBox').attr('checked', allChecked);
1943          },
1944  
1945          highLightListMail : function(element) {
1946              jQuery(element).addClass('mm_lvtColDataHover').removeClass('mm_lvtColData');
1947          },
1948  
1949          unHighLightListMail : function(element) {
1950              jQuery(element).addClass('mm_lvtColData').removeClass('mm_lvtColDataHover');
1951              var state = jQuery(element).find('input:nth-child(1)')[0].checked;
1952              if(state){
1953                  jQuery(element).addClass('mm_lvtColDataHover');
1954              }
1955          },
1956  
1957          addRequiredElements : function() {
1958              var option = jQuery('#search_type').val();
1959              var dateformat = jQuery('#jscal_dateformat').val();
1960              var element = jQuery('#search_txt');
1961              if(option == 'ON') {
1962                  element.closest('div').addClass('date')
1963                  element.addClass('dateField').attr('data-date-format', dateformat);
1964                  element.after(" <span class='add-on'><i class='icon-calendar'></i></span>");
1965                  jQuery('#search_txt').val("");
1966                  app.registerEventForDatePickerFields(jQuery('.dateField'), true);
1967              } else {
1968                  element.closest('div').removeClass('date');
1969                  element.removeClass('dateField').removeAttr('data-date-format');
1970                  element.unbind('focus');
1971                  element.next().remove("span.add-on");
1972                  jQuery('#jscal_trigger_fval').hide();
1973              }
1974          },
1975  
1976          getFoldersList: function() {
1977              var foldersList = jQuery('#foldersList').val();
1978              if (typeof foldersList !== 'undefined') {
1979                  var imageEle = jQuery('.imageElement');
1980                  if (jQuery('#foldersList').hasClass('hide')) {
1981                      var imagePath = imageEle.data('downimage');
1982                      jQuery('#foldersList').removeClass('hide');
1983                  } else {
1984                      var imagePath = imageEle.data('rightimage');
1985                      jQuery('#foldersList').addClass('hide');
1986                  }
1987                  imageEle.attr('src', imagePath);
1988              } else {
1989                  var progressElement = jQuery('#folders');
1990                  progressElement.progressIndicator();
1991  
1992                  var imageEle = jQuery('.imageElement');
1993                  var imagePath = imageEle.data('downimage');
1994                  imageEle.attr('src', imagePath);
1995  
1996                  if(MailManager_QuickCreate_Js.foldersClicked == false) {
1997                                      AppConnector.request(MailManager._baseurl() + "_operation=folder&_operationarg=getFoldersList").then(function(response) { 
1998                                                  response = JSON.parse(response);
1999                          jQuery('#folders').append(response.result);
2000                          progressElement.progressIndicator({'mode':'hide'});
2001                          MailManager_QuickCreate_Js.foldersClicked = true;
2002                      });
2003                  }
2004              }
2005          },
2006  
2007          triggerUI5Resize: function() {
2008              if (parent.resizeUI5Iframe) parent.resizeUI5Iframe(self.document.body.scrollHeight);
2009          }
2010      }
2011  }


Generated: Fri Nov 28 20:08:37 2014 Cross-referenced by PHPXref 0.7.1