[ Index ]

PHP Cross Reference of vtigercrm-6.1.0

title

Body

[close]

/layouts/vlayout/modules/Vtiger/resources/ -> List.js (source)

   1      /*+***********************************************************************************
   2   * The contents of this file are subject to the vtiger CRM Public License Version 1.0
   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  jQuery.Class("Vtiger_List_Js",{
  11  
  12      listInstance : false,
  13  
  14      getRelatedModulesContainer : false,
  15  
  16      massEditPreSave : 'Vtiger.MassEdit.PreSave',
  17  
  18     getInstance: function(){
  19          if(Vtiger_List_Js.listInstance == false){
  20              var module = app.getModuleName();
  21              var parentModule = app.getParentModuleName();
  22              if(parentModule == 'Settings'){
  23                  var moduleClassName = parentModule+"_"+module+"_List_Js";
  24                  if(typeof window[moduleClassName] == 'undefined'){
  25                      moduleClassName = module+"_List_Js";
  26                  }
  27                  var fallbackClassName = parentModule+"_Vtiger_List_Js";
  28                  if(typeof window[fallbackClassName] == 'undefined') {
  29                      fallbackClassName = "Vtiger_List_Js";
  30                  }
  31              } else {
  32                  moduleClassName = module+"_List_Js";
  33                  fallbackClassName = "Vtiger_List_Js";
  34              }
  35              if(typeof window[moduleClassName] != 'undefined'){
  36                  var instance = new window[moduleClassName]();
  37              }else{
  38                  var instance = new window[fallbackClassName]();
  39              }
  40              Vtiger_List_Js.listInstance = instance;
  41              return instance;
  42          }
  43          return Vtiger_List_Js.listInstance;
  44      },
  45          /*
  46       * function to trigger send Email
  47       * @params: send email url , module name.
  48       */
  49      triggerSendEmail : function(massActionUrl, module, params){
  50          var listInstance = Vtiger_List_Js.getInstance();
  51          var validationResult = listInstance.checkListRecordSelected();
  52          if(validationResult != true){
  53              var selectedIds = listInstance.readSelectedIds(true);
  54              var excludedIds = listInstance.readExcludedIds(true);
  55              var cvId = listInstance.getCurrentCvId();
  56              var postData = listInstance.getDefaultParams();
  57  
  58              delete postData.module;
  59              delete postData.view;
  60              delete postData.parent;
  61              postData.selected_ids = selectedIds;
  62              postData.excluded_ids = excludedIds;
  63              postData.viewname = cvId;
  64              if(params){
  65                  jQuery.extend(postData,params);
  66              }
  67              var actionParams = {
  68                  "type":"POST",
  69                  "url":massActionUrl,
  70                  "dataType":"html",
  71                  "data" : postData
  72              };
  73  
  74              Vtiger_Index_Js.showComposeEmailPopup(actionParams);
  75          } else {
  76              listInstance.noRecordSelectedAlert();
  77          }
  78  
  79      },
  80      /*
  81       * function to trigger Send Sms
  82       * @params: send email url , module name.
  83       */
  84      triggerSendSms : function(massActionUrl, module){
  85          var listInstance = Vtiger_List_Js.getInstance();
  86          var validationResult = listInstance.checkListRecordSelected();
  87          if(validationResult != true){
  88              var progressIndicatorElement = jQuery.progressIndicator();
  89              Vtiger_Helper_Js.checkServerConfig(module).then(function(data){
  90                  progressIndicatorElement.progressIndicator({'mode' : 'hide'});
  91                  if(data == true){
  92                      Vtiger_List_Js.triggerMassAction(massActionUrl);
  93                  } else {
  94                      alert(app.vtranslate('JS_SMS_SERVER_CONFIGURATION'));
  95                  }
  96              });
  97          } else {
  98              listInstance.noRecordSelectedAlert();
  99          }
 100  
 101      },
 102  
 103      triggerTransferOwnership : function(massActionUrl){
 104          var thisInstance = this;
 105          var listInstance = Vtiger_List_Js.getInstance();
 106          var validationResult = listInstance.checkListRecordSelected();
 107          if(validationResult != true){
 108              var progressIndicatorElement = jQuery.progressIndicator();
 109              thisInstance.getRelatedModulesContainer = false;
 110              var actionParams = {
 111                  "type":"POST",
 112                  "url":massActionUrl,
 113                  "dataType":"html",
 114                  "data" : {}
 115              };
 116              AppConnector.request(actionParams).then(
 117                  function(data) {
 118                      progressIndicatorElement.progressIndicator({'mode' : 'hide'});
 119                      if(data) {
 120                          var callback = function(data) {
 121                              var params = app.validationEngineOptions;
 122                              params.onValidationComplete = function(form, valid){
 123                                  if(valid){
 124                                      thisInstance.transferOwnershipSave(form)
 125                                  }
 126                                  return false;
 127                              }
 128                              jQuery('#changeOwner').validationEngine(app.validationEngineOptions);
 129                          }
 130                          app.showModalWindow(data, function(data){
 131                              var selectElement = thisInstance.getRelatedModuleContainer();
 132                              app.changeSelectElementView(selectElement, 'select2');
 133                              if(typeof callback == 'function'){
 134                                  callback(data);
 135                              }
 136                          });
 137                      }
 138                  }
 139              );
 140          } else {
 141              listInstance.noRecordSelectedAlert();
 142          }
 143      },
 144  
 145      transferOwnershipSave : function (form){
 146          var listInstance = Vtiger_List_Js.getInstance();
 147          var selectedIds = listInstance.readSelectedIds(true);
 148          var excludedIds = listInstance.readExcludedIds(true);
 149          var cvId = listInstance.getCurrentCvId();
 150          var transferOwner = jQuery('#transferOwnerId').val();
 151          var relatedModules = jQuery('#related_modules').val();
 152  
 153          var params = {
 154              'module': app.getModuleName(),
 155              'action' : 'TransferOwnership',
 156              "viewname" : cvId,
 157              "selected_ids":selectedIds,
 158              "excluded_ids" : excludedIds,
 159              'transferOwnerId' : transferOwner,
 160              'related_modules' : relatedModules
 161          }
 162          AppConnector.request(params).then(
 163              function(data) {
 164                  if(data.success){
 165                      app.hideModalWindow();
 166                      var params = {
 167                          title : app.vtranslate('JS_MESSAGE'),
 168                          text: app.vtranslate('JS_RECORDS_TRANSFERRED_SUCCESSFULLY'),
 169                          animation: 'show',
 170                          type: 'info'
 171                      };
 172                      Vtiger_Helper_Js.showPnotify(params);
 173                      listInstance.getListViewRecords();
 174                      Vtiger_List_Js.clearList();
 175                  }
 176              }
 177          );
 178      },
 179  
 180      /*
 181       * Function to get the related module container
 182       */
 183      getRelatedModuleContainer  : function(){
 184          if(this.getRelatedModulesContainer == false){
 185              this.getRelatedModulesContainer = jQuery('#related_modules');
 186          }
 187          return this.getRelatedModulesContainer;
 188      },
 189  
 190      massDeleteRecords : function(url,instance) {
 191          var    listInstance = Vtiger_List_Js.getInstance();
 192          if(typeof instance != "undefined"){
 193              listInstance = instance;
 194          }
 195          var validationResult = listInstance.checkListRecordSelected();
 196          if(validationResult != true){
 197              // Compute selected ids, excluded ids values, along with cvid value and pass as url parameters
 198              var selectedIds = listInstance.readSelectedIds(true);
 199              var excludedIds = listInstance.readExcludedIds(true);
 200              var cvId = listInstance.getCurrentCvId();
 201              var message = app.vtranslate('LBL_MASS_DELETE_CONFIRMATION');
 202              Vtiger_Helper_Js.showConfirmationBox({'message' : message}).then(
 203                  function(e) {
 204  
 205                      var deleteURL = url+'&viewname='+cvId+'&selected_ids='+selectedIds+'&excluded_ids='+excludedIds;
 206                      var listViewInstance = Vtiger_List_Js.getInstance();
 207                      var searchValue = listViewInstance.getAlphabetSearchValue();
 208  
 209                         if((typeof searchValue != "undefined") && (searchValue.length > 0)) {
 210                          deleteURL += '&search_key='+listViewInstance.getAlphabetSearchField();
 211                          deleteURL += '&search_value='+searchValue;
 212                          deleteURL += '&operator=s';
 213                      }
 214                      deleteURL += "&search_params="+JSON.stringify(listViewInstance.getListSearchParams());
 215                      var deleteMessage = app.vtranslate('JS_RECORDS_ARE_GETTING_DELETED');
 216                      var progressIndicatorElement = jQuery.progressIndicator({
 217                          'message' : deleteMessage,
 218                          'position' : 'html',
 219                          'blockInfo' : {
 220                              'enabled' : true
 221                          }
 222                      });
 223                      AppConnector.request(deleteURL).then(
 224                          function(data){ 
 225                              progressIndicatorElement.progressIndicator({
 226                                  'mode' : 'hide'
 227                              });
 228                              listInstance.postMassDeleteRecords(); 
 229                                                          if(data.error){ 
 230                                                              var  params = { 
 231                                                                  text  : app.vtranslate(data.error.message), 
 232                                                                  title : app.vtranslate('JS_LBL_PERMISSION') 
 233                                                              } 
 234                                                              Vtiger_Helper_Js.showPnotify(params); 
 235                                                          } 
 236                          }
 237                      );
 238                  },
 239                  function(error, err){
 240                  Vtiger_List_Js.clearList();
 241                  })
 242          } else {
 243              listInstance.noRecordSelectedAlert();
 244          }
 245      },
 246  
 247  
 248  
 249      deleteRecord : function(recordId) {
 250          var listInstance = Vtiger_List_Js.getInstance();
 251          var message = app.vtranslate('LBL_DELETE_CONFIRMATION');
 252          Vtiger_Helper_Js.showConfirmationBox({'message' : message}).then(
 253              function(e) {
 254                  var module = app.getModuleName();
 255                  var postData = {
 256                      "module": module,
 257                      "action": "DeleteAjax",
 258                      "record": recordId,
 259                      "parent": app.getParentModuleName()
 260                  }
 261                  var deleteMessage = app.vtranslate('JS_RECORD_GETTING_DELETED');
 262                  var progressIndicatorElement = jQuery.progressIndicator({
 263                      'message' : deleteMessage,
 264                      'position' : 'html',
 265                      'blockInfo' : {
 266                          'enabled' : true
 267                      }
 268                  });
 269                  AppConnector.request(postData).then(
 270                      function(data){
 271                          progressIndicatorElement.progressIndicator({
 272                              'mode' : 'hide'
 273                          })
 274                          if(data.success) {
 275                              var orderBy = jQuery('#orderBy').val();
 276                              var sortOrder = jQuery("#sortOrder").val();
 277                              var urlParams = {
 278                                  "viewname": data.result.viewname,
 279                                  "orderby": orderBy,
 280                                  "sortorder": sortOrder
 281                              }
 282                              jQuery('#recordsCount').val('');
 283                              jQuery('#totalPageCount').text('');
 284                              listInstance.getListViewRecords(urlParams).then(function(){
 285                                  listInstance.updatePagination();
 286                              });
 287                          } else {
 288                              var  params = {
 289                                  text : app.vtranslate(data.error.message),
 290                                  title : app.vtranslate('JS_LBL_PERMISSION')
 291                              }
 292                              Vtiger_Helper_Js.showPnotify(params);
 293                          }
 294                      },
 295                      function(error,err){
 296  
 297                      }
 298                  );
 299              },
 300              function(error, err){
 301              }
 302          );
 303      },
 304  
 305  
 306      triggerMassAction : function(massActionUrl,callBackFunction,beforeShowCb, css) {
 307  
 308          //TODO : Make the paramters as an object
 309          if(typeof beforeShowCb == 'undefined') {
 310              beforeShowCb = function(){return true;};
 311          }
 312  
 313          if(typeof beforeShowCb == 'object') {
 314              css = beforeShowCb;
 315              beforeShowCb = function(){return true;};
 316          }
 317  
 318          var listInstance = Vtiger_List_Js.getInstance();
 319          var validationResult = listInstance.checkListRecordSelected();
 320          if(validationResult != true){
 321              var progressIndicatorElement = jQuery.progressIndicator();
 322              // Compute selected ids, excluded ids values, along with cvid value and pass as url parameters
 323              var selectedIds = listInstance.readSelectedIds(true);
 324              var excludedIds = listInstance.readExcludedIds(true);
 325              var cvId = listInstance.getCurrentCvId();
 326              var postData = {
 327                  "viewname" : cvId,
 328                  "selected_ids":selectedIds,
 329                  "excluded_ids" : excludedIds
 330              };
 331  
 332              var listViewInstance = Vtiger_List_Js.getInstance();
 333              var searchValue = listViewInstance.getAlphabetSearchValue();
 334  
 335              if((typeof searchValue != "undefined") && (searchValue.length > 0)) {
 336                  postData['search_key'] = listViewInstance.getAlphabetSearchField();
 337                  postData['search_value'] = searchValue;
 338                  postData['operator'] = "s";
 339              }
 340  
 341              postData.search_params = JSON.stringify(listInstance.getListSearchParams());
 342  
 343              var actionParams = {
 344                  "type":"POST",
 345                  "url":massActionUrl,
 346                  "dataType":"html",
 347                  "data" : postData
 348              };
 349  
 350              if(typeof css == 'undefined'){
 351                  css = {};
 352              }
 353              var css = jQuery.extend({'text-align' : 'left'},css);
 354  
 355              AppConnector.request(actionParams).then(
 356                  function(data) {
 357                      progressIndicatorElement.progressIndicator({'mode' : 'hide'});
 358                      if(data) {
 359                          var result = beforeShowCb(data);
 360                          if(!result) {
 361                              return;
 362                          }
 363                          app.showModalWindow(data,function(data){
 364                              if(typeof callBackFunction == 'function'){
 365                                  callBackFunction(data);
 366                                  //listInstance.triggerDisplayTypeEvent();
 367                              }
 368                          },css)
 369  
 370                      }
 371                  },
 372                  function(error,err){
 373                      progressIndicatorElement.progressIndicator({'mode' : 'hide'});
 374                  }
 375              );
 376          } else {
 377              listInstance.noRecordSelectedAlert();
 378          }
 379  
 380      },
 381  
 382      triggerMassEdit : function(massEditUrl) {
 383          var selectedCount = this.getSelectedRecordCount();
 384          if(selectedCount > 500) {
 385              var params = {
 386                  title : app.vtranslate('JS_MESSAGE'),
 387                  text: app.vtranslate('JS_MASS_EDIT_LIMIT'),
 388                  animation: 'show',
 389                  type: 'error'
 390              };
 391              Vtiger_Helper_Js.showPnotify(params);
 392              return;
 393          }
 394          Vtiger_List_Js.triggerMassAction(massEditUrl, function(container){
 395              var massEditForm = container.find('#massEdit');
 396              massEditForm.validationEngine(app.validationEngineOptions);
 397              var listInstance = Vtiger_List_Js.getInstance();
 398              listInstance.inactiveFieldValidation(massEditForm);
 399              listInstance.registerReferenceFieldsForValidation(massEditForm);
 400              listInstance.registerFieldsForValidation(massEditForm);
 401              listInstance.registerEventForTabClick(massEditForm);
 402              listInstance.registerRecordAccessCheckEvent(massEditForm);
 403              var editInstance = Vtiger_Edit_Js.getInstance();
 404              editInstance.registerBasicEvents(massEditForm);
 405              //To remove the change happended for select elements due to picklist dependency
 406              container.find('select').trigger('change',{'forceDeSelect':true});
 407              listInstance.postMassEdit(container);
 408  
 409              listInstance.registerSlimScrollMassEdit();
 410          },{'width':'65%'});
 411      },
 412  
 413      getSelectedRecordCount : function() {
 414          var count;
 415          var listInstance = Vtiger_List_Js.getInstance();
 416          var cvId = listInstance.getCurrentCvId();
 417          var selectedIdObj = jQuery('#selectedIds').data(cvId+'Selectedids');
 418          if(selectedIdObj != undefined){
 419              if(selectedIdObj != 'all') {
 420                  count = selectedIdObj.length;
 421              } else {
 422                  var excludedIdsCount = jQuery('#excludedIds').data(cvId+'Excludedids').length;
 423                  var totalRecords = jQuery('#recordsCount').val();
 424                  count = totalRecords - excludedIdsCount;
 425              }
 426          }
 427          return count;
 428      },
 429  
 430      /*
 431       * function to trigger export action
 432       * returns UI
 433       */
 434      triggerExportAction :function(exportActionUrl){
 435          var listInstance = Vtiger_List_Js.getInstance();
 436          // Compute selected ids, excluded ids values, along with cvid value and pass as url parameters
 437          var selectedIds = listInstance.readSelectedIds(true);
 438          var excludedIds = listInstance.readExcludedIds(true);
 439          var cvId = listInstance.getCurrentCvId();
 440          var pageNumber = jQuery('#pageNumber').val();
 441  
 442          exportActionUrl += '&selected_ids='+selectedIds+'&excluded_ids='+excludedIds+'&viewname='+cvId+'&page='+pageNumber;
 443  
 444          var listViewInstance = Vtiger_List_Js.getInstance();
 445          var searchValue = listViewInstance.getAlphabetSearchValue();
 446  
 447          if((typeof searchValue != "undefined") && (searchValue.length > 0)) {
 448              exportActionUrl += '&search_key='+listViewInstance.getAlphabetSearchField()+'&search_value='+searchValue+'&operator=s';
 449          }
 450          exportActionUrl += '&search_params='+JSON.stringify(listInstance.getListSearchParams());
 451          window.location.href = exportActionUrl;
 452      },
 453  
 454      /**
 455       * Function to reload list
 456       */
 457      clearList : function() {
 458          jQuery('#deSelectAllMsg').trigger('click');
 459          jQuery("#selectAllMsgDiv").hide();
 460      },
 461  
 462      showDuplicateSearchForm : function(url) {
 463          var progressIndicatorElement = jQuery.progressIndicator();
 464          app.showModalWindow("", url, function() {
 465              progressIndicatorElement.progressIndicator({'mode' : 'hide'});
 466              Vtiger_List_Js.registerDuplicateSearchButtonEvent();
 467          });
 468      },
 469  
 470      /**
 471       * Function that will enable Duplicate Search Find button
 472       */
 473      registerDuplicateSearchButtonEvent : function() {
 474          jQuery('#fieldList').on('change', function(e) {
 475              var value = jQuery(e.currentTarget).val();
 476              var button = jQuery('#findDuplicate').find('button[type="submit"]');
 477              if(value != null) {
 478                  button.attr('disabled', false);
 479              } else {
 480                  button.attr('disabled', true);
 481              }
 482          })
 483      }
 484  },{
 485  
 486      //contains the List View element.
 487      listViewContainer : false,
 488  
 489      //Contains list view top menu element
 490      listViewTopMenuContainer : false,
 491  
 492      //Contains list view content element
 493      listViewContentContainer : false,
 494  
 495      //Contains filter Block Element
 496      filterBlock : false,
 497  
 498      filterSelectElement : false,
 499  
 500  
 501      getListViewContainer : function() {
 502          if(this.listViewContainer == false){
 503              this.listViewContainer = jQuery('div.listViewPageDiv');
 504          }
 505          return this.listViewContainer;
 506      },
 507  
 508      getListViewTopMenuContainer : function(){
 509          if(this.listViewTopMenuContainer == false){
 510              this.listViewTopMenuContainer = jQuery('.listViewTopMenuDiv');
 511          }
 512          return this.listViewTopMenuContainer;
 513      },
 514  
 515      getListViewContentContainer : function(){
 516          if(this.listViewContentContainer == false){
 517              this.listViewContentContainer = jQuery('.listViewContentDiv');
 518          }
 519          return this.listViewContentContainer;
 520      },
 521  
 522      getFilterBlock : function(){
 523          if(this.filterBlock == false){
 524              var filterSelectElement = this.getFilterSelectElement();
 525              if(filterSelectElement.length <= 0) {
 526                  this.filterBlock = jQuery();
 527              }else if(filterSelectElement.is('select')){
 528                  this.filterBlock = filterSelectElement.data('select2').dropdown;
 529              }
 530          }
 531          return this.filterBlock;
 532      },
 533  
 534      getFilterSelectElement : function() {
 535  
 536          if(this.filterSelectElement == false) {
 537              this.filterSelectElement = jQuery('#customFilter');
 538          }
 539          return this.filterSelectElement;
 540      },
 541  
 542  
 543      getDefaultParams : function() {
 544          var pageNumber = jQuery('#pageNumber').val();
 545          var module = app.getModuleName();
 546          var parent = app.getParentModuleName();
 547          var cvId = this.getCurrentCvId();
 548          var orderBy = jQuery('#orderBy').val();
 549          var sortOrder = jQuery("#sortOrder").val();
 550          var params = {
 551              'module': module,
 552              'parent' : parent,
 553              'page' : pageNumber,
 554              'view' : "List",
 555              'viewname' : cvId,
 556              'orderby' : orderBy,
 557              'sortorder' : sortOrder
 558          }
 559  
 560          var searchValue = this.getAlphabetSearchValue();
 561  
 562          if((typeof searchValue != "undefined") && (searchValue.length > 0)) {
 563              params['search_key'] = this.getAlphabetSearchField();
 564              params['search_value'] = searchValue;
 565              params['operator'] = "s";
 566          }
 567          params.search_params = JSON.stringify(this.getListSearchParams());
 568          return params;
 569      },
 570  
 571      /*
 572       * Function which will give you all the list view params
 573       */
 574      getListViewRecords : function(urlParams) {
 575          var aDeferred = jQuery.Deferred();
 576          if(typeof urlParams == 'undefined') {
 577              urlParams = {};
 578          }
 579  
 580          var thisInstance = this;
 581          var loadingMessage = jQuery('.listViewLoadingMsg').text();
 582          var progressIndicatorElement = jQuery.progressIndicator({
 583              'message' : loadingMessage,
 584              'position' : 'html',
 585              'blockInfo' : {
 586                  'enabled' : true
 587              }
 588          });
 589  
 590          var defaultParams = this.getDefaultParams();
 591          var urlParams = jQuery.extend(defaultParams, urlParams);
 592          AppConnector.requestPjax(urlParams).then(
 593              function(data){
 594                  progressIndicatorElement.progressIndicator({
 595                      'mode' : 'hide'
 596                  })
 597                  var listViewContentsContainer = jQuery('#listViewContents')
 598                  listViewContentsContainer.html(data);
 599                  app.showSelect2ElementView(listViewContentsContainer.find('select.select2'));
 600                  app.changeSelectElementView(listViewContentsContainer);
 601                  thisInstance.registerTimeListSearch(listViewContentsContainer);
 602  
 603                  thisInstance.registerDateListSearch(listViewContentsContainer);
 604                  thisInstance.calculatePages().then(function(data){
 605                      //thisInstance.triggerDisplayTypeEvent();
 606                      Vtiger_Helper_Js.showHorizontalTopScrollBar();
 607  
 608                      var selectedIds = thisInstance.readSelectedIds();
 609                      if(selectedIds != ''){
 610                          if(selectedIds == 'all'){
 611                              jQuery('.listViewEntriesCheckBox').each( function(index,element) {
 612                                  jQuery(this).attr('checked', true).closest('tr').addClass('highlightBackgroundColor');
 613                              });
 614                              jQuery('#deSelectAllMsgDiv').show();
 615                              var excludedIds = thisInstance.readExcludedIds();
 616                              if(excludedIds != ''){
 617                                  jQuery('#listViewEntriesMainCheckBox').attr('checked',false);
 618                                  jQuery('.listViewEntriesCheckBox').each( function(index,element) {
 619                                      if(jQuery.inArray(jQuery(element).val(),excludedIds) != -1){
 620                                          jQuery(element).attr('checked', false).closest('tr').removeClass('highlightBackgroundColor');
 621                                      }
 622                                  });
 623                              }
 624                          } else {
 625                              jQuery('.listViewEntriesCheckBox').each( function(index,element) {
 626                                  if(jQuery.inArray(jQuery(element).val(),selectedIds) != -1){
 627                                      jQuery(this).attr('checked', true).closest('tr').addClass('highlightBackgroundColor');
 628                                  }
 629                              });
 630                          }
 631                          thisInstance.checkSelectAll();
 632                      }
 633                      aDeferred.resolve(data);
 634  
 635                      // Let listeners know about page state change.
 636                      app.notifyPostAjaxReady();
 637                  });
 638              },
 639  
 640              function(textStatus, errorThrown){
 641                  aDeferred.reject(textStatus, errorThrown);
 642              }
 643          );
 644          return aDeferred.promise();
 645      },
 646  
 647      /**
 648       * Function to calculate number of pages
 649       */
 650      calculatePages : function() {
 651          var aDeferred = jQuery.Deferred();
 652          var element = jQuery('#totalPageCount');
 653          var totalPageNumber = element.text();
 654          if(totalPageNumber == ""){
 655              var totalRecordCount = jQuery('#totalCount').val();
 656              if(totalRecordCount != '') {
 657                  var pageLimit = jQuery('#pageLimit').val();
 658                  if(pageLimit == '0') pageLimit = 1;
 659                  pageCount = Math.ceil(totalRecordCount/pageLimit);
 660                  if(pageCount == 0){
 661                      pageCount = 1;
 662                  }
 663                  element.text(pageCount);
 664                  aDeferred.resolve();
 665                  return aDeferred.promise();
 666              }
 667              this.getPageCount().then(function(data){
 668                  var pageCount = data['result']['page'];
 669                  if(pageCount == 0){
 670                      pageCount = 1;
 671                  }
 672                  element.text(pageCount);
 673                  aDeferred.resolve();
 674              });
 675          } else {
 676              aDeferred.resolve();
 677          }
 678          return aDeferred.promise();
 679      },
 680  
 681      /*
 682       * Function to return alerts if no records selected.
 683       */
 684      noRecordSelectedAlert : function(){
 685          return alert(app.vtranslate('JS_PLEASE_SELECT_ONE_RECORD'));
 686      },
 687  
 688      massActionSave : function(form, isMassEdit){
 689          if(typeof isMassEdit == 'undefined') {
 690              isMassEdit = false;
 691          }
 692          var aDeferred = jQuery.Deferred();
 693          var massActionUrl = form.serializeFormData();
 694          if(isMassEdit) {
 695              var fieldsChanged = false;
 696              var massEditFieldList = jQuery('#massEditFieldsNameList').data('value');
 697              for(var fieldName in massEditFieldList){
 698                  var fieldInfo = massEditFieldList[fieldName];
 699  
 700                  var fieldElement = form.find('[name="'+fieldInfo.name+'"]');
 701                  if(fieldInfo.type == "reference") {
 702                      //get the element which will be shown which has "_display" appended to actual field name
 703                      fieldElement = form.find('[name="'+fieldInfo.name+'_display"]');
 704                  }else if(fieldInfo.type == "multipicklist") {
 705                      fieldElement = form.find('[name="'+fieldInfo.name+'[]"]');
 706                  }
 707  
 708                  //Not all fields will be enabled for mass edit
 709                  if(fieldElement.length == 0) {
 710                      continue;
 711                  }
 712  
 713                  var validationElement = fieldElement.filter('[data-validation-engine]');
 714                  //check if you have element enabled has changed
 715                  if(validationElement.length == 0){
 716                      if(fieldInfo.type == "multipicklist") {
 717                          fieldName = fieldName+"[]";
 718                      }
 719                      delete massActionUrl[fieldName];
 720                      if(fieldsChanged != true){
 721                          fieldsChanged = false;
 722                      }
 723                  } else {
 724                      fieldsChanged = true;
 725                  }
 726              }
 727              if(fieldsChanged == false){
 728                  Vtiger_Helper_Js.showPnotify(app.vtranslate('NONE_OF_THE_FIELD_VALUES_ARE_CHANGED_IN_MASS_EDIT'));
 729                  form.find('[name="saveButton"]').removeAttr('disabled');
 730                  aDeferred.reject();
 731                  return aDeferred.promise();
 732              }
 733              //on submit form trigger the massEditPreSave event
 734              var massEditPreSaveEvent = jQuery.Event(Vtiger_List_Js.massEditPreSave);
 735              form.trigger(massEditPreSaveEvent);
 736              if(massEditPreSaveEvent.isDefaultPrevented()) {
 737                  form.find('[name="saveButton"]').removeAttr('disabled');
 738                  aDeferred.reject();
 739                  return aDeferred.promise();
 740              }
 741          }
 742          var progressIndicatorElement = jQuery.progressIndicator({
 743              'position' : 'html',
 744              'blockInfo' : {
 745                  'enabled' : true
 746              }
 747          });
 748          AppConnector.request(massActionUrl).then(
 749              function(data) {
 750                  progressIndicatorElement.progressIndicator({
 751                      'mode' : 'hide'
 752                  });
 753                  app.hideModalWindow();
 754                  aDeferred.resolve(data);
 755              },
 756              function(error,err){
 757                  app.hideModalWindow();
 758                  aDeferred.reject(error,err);
 759              }
 760          );
 761          return aDeferred.promise();
 762      },
 763  
 764      /*
 765       * Function to check the view permission of a record after save
 766       */
 767      registerRecordAccessCheckEvent : function(form) {
 768  
 769          form.on(Vtiger_List_Js.massEditPreSave, function(e) {
 770              var assignedToSelectElement = form.find('[name="assigned_user_id"][data-validation-engine]');
 771              if(assignedToSelectElement.length > 0){
 772                  if(assignedToSelectElement.data('recordaccessconfirmation') == true) {
 773                      return;
 774                  }else{
 775                      if(assignedToSelectElement.data('recordaccessconfirmationprogress') != true) {
 776                          var recordAccess = assignedToSelectElement.find('option:selected').data('recordaccess');
 777                          if(recordAccess == false) {
 778                              var message = app.vtranslate('JS_NO_VIEW_PERMISSION_AFTER_SAVE');
 779                              Vtiger_Helper_Js.showConfirmationBox({
 780                                  'message' : message
 781                              }).then(
 782                                  function(e) {
 783                                      assignedToSelectElement.data('recordaccessconfirmation',true);
 784                                      assignedToSelectElement.removeData('recordaccessconfirmationprogress');
 785                                      form.submit();
 786                                  },
 787                                  function(error, err){
 788                                      assignedToSelectElement.removeData('recordaccessconfirmationprogress');
 789                                      e.preventDefault();
 790                                  });
 791                              assignedToSelectElement.data('recordaccessconfirmationprogress',true);
 792                          } else {
 793                              return true;
 794                          }
 795                      }
 796                  }
 797              } else{
 798                  return true;
 799              }
 800              e.preventDefault();
 801          });
 802      },
 803  
 804      checkSelectAll : function(){
 805          var state = true;
 806          jQuery('.listViewEntriesCheckBox').each(function(index,element){
 807              if(jQuery(element).is(':checked')){
 808                  state = true;
 809              }else{
 810                  state = false;
 811                  return false;
 812              }
 813          });
 814          if(state == true){
 815              jQuery('#listViewEntriesMainCheckBox').attr('checked',true);
 816          } else {
 817              jQuery('#listViewEntriesMainCheckBox').attr('checked', false);
 818          }
 819      },
 820  
 821      getRecordsCount : function(){
 822          var aDeferred = jQuery.Deferred();
 823          var recordCountVal = jQuery("#recordsCount").val();
 824          if(recordCountVal != ''){
 825              aDeferred.resolve(recordCountVal);
 826          } else {
 827              var count = '';
 828              var cvId = this.getCurrentCvId();
 829              var module = app.getModuleName();
 830              var parent = app.getParentModuleName();
 831              var postData = {
 832                  "module": module,
 833                  "parent": parent,
 834                  "view": "ListAjax",
 835                  "viewname": cvId,
 836                  "mode": "getRecordsCount"
 837              }
 838  
 839              var searchValue = this.getAlphabetSearchValue();
 840              if((typeof searchValue != "undefined") && (searchValue.length > 0)) {
 841                  postData['search_key'] = this.getAlphabetSearchField();
 842                  postData['search_value'] = this.getAlphabetSearchValue();
 843                  postData['operator'] = "s";
 844              }
 845  
 846              postData.search_params = JSON.stringify(this.getListSearchParams());
 847  
 848              AppConnector.request(postData).then(
 849                  function(data) {
 850                      var response = JSON.parse(data);
 851                      jQuery("#recordsCount").val(response['result']['count']);
 852                      count =  response['result']['count'];
 853                      aDeferred.resolve(count);
 854                  },
 855                  function(error,err){
 856  
 857                  }
 858              );
 859          }
 860  
 861          return aDeferred.promise();
 862      },
 863  
 864      getSelectOptionFromChosenOption : function(liElement){
 865          var classNames = liElement.attr("class");
 866          var classNamesArr = classNames.split(" ");
 867          var currentOptionId = '';
 868          jQuery.each(classNamesArr,function(index,element){
 869              if(element.match("^filterOptionId")){
 870                  currentOptionId = element;
 871                  return false;
 872              }
 873          });
 874          return jQuery('#'+currentOptionId);
 875      },
 876  
 877      readSelectedIds : function(decode){
 878          var cvId = this.getCurrentCvId();
 879          var selectedIdsElement = jQuery('#selectedIds');
 880          var selectedIdsDataAttr = cvId+'Selectedids';
 881          var selectedIdsElementDataAttributes = selectedIdsElement.data();
 882          if (!(selectedIdsDataAttr in selectedIdsElementDataAttributes) ) {
 883              var selectedIds = new Array();
 884              this.writeSelectedIds(selectedIds);
 885          } else {
 886              selectedIds = selectedIdsElementDataAttributes[selectedIdsDataAttr];
 887          }
 888          if(decode == true){
 889              if(typeof selectedIds == 'object'){
 890                  return JSON.stringify(selectedIds);
 891              }
 892          }
 893          return selectedIds;
 894      },
 895      readExcludedIds : function(decode){
 896          var cvId = this.getCurrentCvId();
 897          var exlcudedIdsElement = jQuery('#excludedIds');
 898          var excludedIdsDataAttr = cvId+'Excludedids';
 899          var excludedIdsElementDataAttributes = exlcudedIdsElement.data();
 900          if(!(excludedIdsDataAttr in excludedIdsElementDataAttributes)){
 901              var excludedIds = new Array();
 902              this.writeExcludedIds(excludedIds);
 903          }else{
 904              excludedIds = excludedIdsElementDataAttributes[excludedIdsDataAttr];
 905          }
 906          if(decode == true){
 907              if(typeof excludedIds == 'object') {
 908                  return JSON.stringify(excludedIds);
 909              }
 910          }
 911          return excludedIds;
 912      },
 913  
 914      writeSelectedIds : function(selectedIds){
 915          var cvId = this.getCurrentCvId();
 916          jQuery('#selectedIds').data(cvId+'Selectedids',selectedIds);
 917      },
 918  
 919      writeExcludedIds : function(excludedIds){
 920          var cvId = this.getCurrentCvId();
 921          jQuery('#excludedIds').data(cvId+'Excludedids',excludedIds);
 922      },
 923  
 924      getCurrentCvId : function(){
 925          return jQuery('#customFilter').find('option:selected').data('id');
 926      },
 927  
 928      getAlphabetSearchField : function() {
 929          return jQuery("#alphabetSearchKey").val();
 930      },
 931  
 932      getAlphabetSearchValue : function() {
 933          return jQuery("#alphabetValue").val();
 934      },
 935  
 936  
 937      /*
 938       * Function to check whether atleast one record is checked
 939       */
 940      checkListRecordSelected : function(){
 941          var selectedIds = this.readSelectedIds();
 942          if(typeof selectedIds == 'object' && selectedIds.length <= 0) {
 943              return true;
 944          }
 945          return false;
 946      },
 947  
 948      postMassEdit : function(massEditContainer) {
 949          var thisInstance = this;
 950          massEditContainer.find('form').on('submit', function(e){
 951              e.preventDefault();
 952              var form = jQuery(e.currentTarget);
 953              var invalidFields = form.data('jqv').InvalidFields;
 954              if(invalidFields.length == 0){
 955                  form.find('[name="saveButton"]').attr('disabled',"disabled");
 956              }
 957              var invalidFields = form.data('jqv').InvalidFields;
 958              if(invalidFields.length > 0){
 959                  return;
 960              }
 961              thisInstance.massActionSave(form, true).then(
 962                  function(data) {
 963                      thisInstance.getListViewRecords();
 964                      Vtiger_List_Js.clearList();
 965                  },
 966                  function(error,err){
 967                  }
 968              )
 969          });
 970      },
 971      /*
 972       * Function to register List view Page Navigation
 973       */
 974      registerPageNavigationEvents : function(){
 975          var aDeferred = jQuery.Deferred();
 976          var thisInstance = this;
 977          jQuery('#listViewNextPageButton').on('click',function(){
 978              var pageLimit = jQuery('#pageLimit').val();
 979              var noOfEntries = jQuery('#noOfEntries').val();
 980              if(noOfEntries == pageLimit){
 981                  var orderBy = jQuery('#orderBy').val();
 982                  var sortOrder = jQuery("#sortOrder").val();
 983                  var cvId = thisInstance.getCurrentCvId();
 984                  var urlParams = {
 985                      "orderby": orderBy,
 986                      "sortorder": sortOrder,
 987                      "viewname": cvId
 988                  }
 989                  var pageNumber = jQuery('#pageNumber').val();
 990                  var nextPageNumber = parseInt(parseFloat(pageNumber)) + 1;
 991                  jQuery('#pageNumber').val(nextPageNumber);
 992                  jQuery('#pageToJump').val(nextPageNumber);
 993                  thisInstance.getListViewRecords(urlParams).then(
 994                      function(data){
 995                          thisInstance.updatePagination();
 996                          aDeferred.resolve();
 997                      },
 998  
 999                      function(textStatus, errorThrown){
1000                          aDeferred.reject(textStatus, errorThrown);
1001                      }
1002                  );
1003              }
1004              return aDeferred.promise();
1005          });
1006          jQuery('#listViewPreviousPageButton').on('click',function(){
1007              var aDeferred = jQuery.Deferred();
1008              var pageNumber = jQuery('#pageNumber').val();
1009              if(pageNumber > 1){
1010                  var orderBy = jQuery('#orderBy').val();
1011                  var sortOrder = jQuery("#sortOrder").val();
1012                  var cvId = thisInstance.getCurrentCvId();
1013                  var urlParams = {
1014                      "orderby": orderBy,
1015                      "sortorder": sortOrder,
1016                      "viewname" : cvId
1017                  }
1018                  var previousPageNumber = parseInt(parseFloat(pageNumber)) - 1;
1019                  jQuery('#pageNumber').val(previousPageNumber);
1020                  jQuery('#pageToJump').val(previousPageNumber);
1021                  thisInstance.getListViewRecords(urlParams).then(
1022                      function(data){
1023                          thisInstance.updatePagination();
1024                          aDeferred.resolve();
1025                      },
1026  
1027                      function(textStatus, errorThrown){
1028                          aDeferred.reject(textStatus, errorThrown);
1029                      }
1030                  );
1031              }
1032          });
1033  
1034          jQuery('#listViewPageJump').on('click',function(e){
1035              if(typeof Vtiger_WholeNumberGreaterThanZero_Validator_Js.invokeValidation(jQuery('#pageToJump'))!= 'undefined') {
1036                  var pageNo = jQuery('#pageNumber').val();
1037                  jQuery("#pageToJump").val(pageNo);
1038              }
1039              jQuery('#pageToJump').validationEngine('hideAll');
1040              var element = jQuery('#totalPageCount');
1041              var totalPageNumber = element.text();
1042              if(totalPageNumber == ""){
1043                  var totalCountElem = jQuery('#totalCount');
1044                  var totalRecordCount = totalCountElem.val();
1045                  if(totalRecordCount != '') {
1046                      var recordPerPage = jQuery('#pageLimit').val();
1047                      if(recordPerPage == '0') recordPerPage = 1;
1048                      pageCount = Math.ceil(totalRecordCount/recordPerPage);
1049                      if(pageCount == 0){
1050                          pageCount = 1;
1051                      }
1052                      element.text(pageCount);
1053                      return;
1054                  }
1055                  element.progressIndicator({});
1056                  thisInstance.getPageCount().then(function(data){
1057                      var pageCount = data['result']['page'];
1058                      totalCountElem.val(data['result']['numberOfRecords']);
1059                      if(pageCount == 0){
1060                          pageCount = 1;
1061                      }
1062                      element.text(pageCount);
1063                      element.progressIndicator({'mode': 'hide'});
1064              });
1065          }
1066          })
1067  
1068          jQuery('#listViewPageJumpDropDown').on('click','li',function(e){
1069              e.stopImmediatePropagation();
1070          }).on('keypress','#pageToJump',function(e){
1071              if(e.which == 13){
1072                  e.stopImmediatePropagation();
1073                  var element = jQuery(e.currentTarget);
1074                  var response = Vtiger_WholeNumberGreaterThanZero_Validator_Js.invokeValidation(element);
1075                  if(typeof response != "undefined"){
1076                      element.validationEngine('showPrompt',response,'',"topLeft",true);
1077                  } else {
1078                      element.validationEngine('hideAll');
1079                      var currentPageElement = jQuery('#pageNumber');
1080                      var currentPageNumber = currentPageElement.val();
1081                      var newPageNumber = parseInt(jQuery(e.currentTarget).val());
1082                      var totalPages = parseInt(jQuery('#totalPageCount').text());
1083                      if(newPageNumber > totalPages){
1084                          var error = app.vtranslate('JS_PAGE_NOT_EXIST');
1085                          element.validationEngine('showPrompt',error,'',"topLeft",true);
1086                          return;
1087                      }
1088                      if(newPageNumber == currentPageNumber){
1089                          var message = app.vtranslate('JS_YOU_ARE_IN_PAGE_NUMBER')+" "+newPageNumber;
1090                          var params = {
1091                              text: message,
1092                              type: 'info'
1093                          };
1094                          Vtiger_Helper_Js.showMessage(params);
1095                          return;
1096                      }
1097                      currentPageElement.val(newPageNumber);
1098                      thisInstance.getListViewRecords().then(
1099                          function(data){
1100                              thisInstance.updatePagination();
1101                              element.closest('.btn-group ').removeClass('open');
1102                          },
1103                          function(textStatus, errorThrown){
1104                          }
1105                      );
1106                  }
1107                  return false;
1108              }
1109          });
1110      },
1111  
1112      /**
1113       * Function to get page count and total number of records in list
1114       */
1115      getPageCount : function(){
1116          var aDeferred = jQuery.Deferred();
1117          var pageCountParams = this.getPageJumpParams();
1118          AppConnector.request(pageCountParams).then(
1119              function(data) {
1120                  var response;
1121                  if(typeof data != "object"){
1122                      response = JSON.parse(data);
1123                  } else{
1124                      response = data;
1125                  }
1126                  aDeferred.resolve(response);
1127              },
1128              function(error,err){
1129  
1130              }
1131          );
1132          return aDeferred.promise();
1133      },
1134  
1135      /**
1136       * Function to get Page Jump Params
1137       */
1138      getPageJumpParams : function(){
1139          var params = this.getDefaultParams();
1140          params['view'] = "ListAjax";
1141          params['mode'] = "getPageCount";
1142  
1143          return params;
1144      },
1145  
1146      /**
1147       * Function to update Pagining status
1148       */
1149      updatePagination : function(){
1150          var previousPageExist = jQuery('#previousPageExist').val();
1151          var nextPageExist = jQuery('#nextPageExist').val();
1152          var previousPageButton = jQuery('#listViewPreviousPageButton');
1153          var nextPageButton = jQuery('#listViewNextPageButton');
1154          var pageJumpButton = jQuery('#listViewPageJump');
1155          var listViewEntriesCount = parseInt(jQuery('#noOfEntries').val());
1156          var pageStartRange = parseInt(jQuery('#pageStartRange').val());
1157          var pageEndRange = parseInt(jQuery('#pageEndRange').val());
1158          var pages = jQuery('#totalPageCount').text();
1159          var totalNumberOfRecords = jQuery('.totalNumberOfRecords');
1160          var pageNumbersTextElem = jQuery('.pageNumbersText');
1161  
1162          if(pages > 1){
1163              pageJumpButton.removeAttr('disabled');
1164          }
1165          if(previousPageExist != ""){
1166              previousPageButton.removeAttr('disabled');
1167          } else if(previousPageExist == "") {
1168              previousPageButton.attr("disabled","disabled");
1169          }
1170  
1171          if((nextPageExist != "") && (pages >1)){
1172              nextPageButton.removeAttr('disabled');
1173          } else if((nextPageExist == "") || (pages == 1)) {
1174              nextPageButton.attr("disabled","disabled");
1175          }
1176          if(listViewEntriesCount != 0){
1177              var pageNumberText = pageStartRange+" "+app.vtranslate('to')+" "+pageEndRange;
1178              pageNumbersTextElem.html(pageNumberText);
1179              totalNumberOfRecords.removeClass('hide');
1180          } else {
1181              pageNumbersTextElem.html("<span>&nbsp;</span>");
1182              if(!totalNumberOfRecords.hasClass('hide')){
1183                  totalNumberOfRecords.addClass('hide');
1184              }
1185          }
1186  
1187      },
1188      /*
1189       * Function to register the event for changing the custom Filter
1190       */
1191      registerChangeCustomFilterEvent : function(){
1192          var thisInstance = this;
1193          var filterSelectElement = this.getFilterSelectElement();
1194          filterSelectElement.change(function(e){
1195              jQuery('#pageNumber').val("1");
1196              jQuery('#pageToJump').val('1');
1197              jQuery('#orderBy').val('');
1198              jQuery("#sortOrder").val('');
1199              var cvId = thisInstance.getCurrentCvId();
1200              selectedIds = new Array();
1201              excludedIds = new Array();
1202  
1203              var urlParams ={
1204                  "viewname" : cvId,
1205                  //to make alphabetic search empty
1206                  "search_key" : thisInstance.getAlphabetSearchField(),
1207                  "search_value" : "",
1208                  "search_params" : ""
1209              }
1210              //Make the select all count as empty
1211              jQuery('#recordsCount').val('');
1212              //Make total number of pages as empty
1213              jQuery('#totalPageCount').text("");
1214              thisInstance.getListViewRecords(urlParams).then (function(){
1215                                  thisInstance.ListViewPostOperation();
1216                  thisInstance.updatePagination();
1217              });
1218          });
1219      },
1220          
1221           //Fix for empty Recycle bin 
1222          ListViewPostOperation : function(){  
1223              return true;    
1224          },
1225  
1226      /*
1227       * Function to register the click event for list view main check box.
1228       */
1229      registerMainCheckBoxClickEvent : function(){
1230          var listViewPageDiv = this.getListViewContainer();
1231          var thisInstance = this;
1232          listViewPageDiv.on('click','#listViewEntriesMainCheckBox',function(){
1233              var selectedIds = thisInstance.readSelectedIds();
1234              var excludedIds = thisInstance.readExcludedIds();
1235              if(jQuery('#listViewEntriesMainCheckBox').is(":checked")){
1236                  var recordCountObj = thisInstance.getRecordsCount();
1237                  recordCountObj.then(function(data){
1238                      jQuery('#totalRecordsCount').text(data);
1239                      if(jQuery("#deSelectAllMsgDiv").css('display') == 'none'){
1240                          jQuery("#selectAllMsgDiv").show();
1241                      }
1242                  });
1243  
1244                  jQuery('.listViewEntriesCheckBox').each( function(index,element) {
1245                      jQuery(this).attr('checked', true).closest('tr').addClass('highlightBackgroundColor');
1246                      if(selectedIds == 'all'){
1247                          if((jQuery.inArray(jQuery(element).val(), excludedIds))!= -1){
1248                              excludedIds.splice(jQuery.inArray(jQuery(element).val(),excludedIds),1);
1249                          }
1250                      } else if((jQuery.inArray(jQuery(element).val(), selectedIds)) == -1){
1251                          selectedIds.push(jQuery(element).val());
1252                      }
1253                  });
1254              }else{
1255                  jQuery("#selectAllMsgDiv").hide();
1256                  jQuery('.listViewEntriesCheckBox').each( function(index,element) {
1257                      jQuery(this).attr('checked', false).closest('tr').removeClass('highlightBackgroundColor');
1258                  if(selectedIds == 'all'){
1259                      excludedIds.push(jQuery(element).val());
1260                      selectedIds = 'all';
1261                  } else {
1262                      selectedIds.splice( jQuery.inArray(jQuery(element).val(), selectedIds), 1 );
1263                  }
1264                  });
1265              }
1266              thisInstance.writeSelectedIds(selectedIds);
1267              thisInstance.writeExcludedIds(excludedIds);
1268  
1269          });
1270      },
1271  
1272      /*
1273       * Function  to register click event for list view check box.
1274       */
1275      registerCheckBoxClickEvent : function(){
1276          var listViewPageDiv = this.getListViewContainer();
1277          var thisInstance = this;
1278          listViewPageDiv.delegate('.listViewEntriesCheckBox','click',function(e){
1279              var selectedIds = thisInstance.readSelectedIds();
1280              var excludedIds = thisInstance.readExcludedIds();
1281              var elem = jQuery(e.currentTarget);
1282              if(elem.is(':checked')){
1283                  elem.closest('tr').addClass('highlightBackgroundColor');
1284                  if(selectedIds== 'all'){
1285                      excludedIds.splice( jQuery.inArray(elem.val(), excludedIds), 1 );
1286                  } else if((jQuery.inArray(elem.val(), selectedIds)) == -1) {
1287                      selectedIds.push(elem.val());
1288                  }
1289              } else {
1290                  elem.closest('tr').removeClass('highlightBackgroundColor');
1291                  if(selectedIds == 'all') {
1292                      excludedIds.push(elem.val());
1293                      selectedIds = 'all';
1294                  } else {
1295                      selectedIds.splice( jQuery.inArray(elem.val(), selectedIds), 1 );
1296                  }
1297              }
1298              thisInstance.checkSelectAll();
1299              thisInstance.writeSelectedIds(selectedIds);
1300              thisInstance.writeExcludedIds(excludedIds);
1301          });
1302      },
1303  
1304      /*
1305       * Function to register the click event for select all.
1306       */
1307      registerSelectAllClickEvent :  function(){
1308          var listViewPageDiv = this.getListViewContainer();
1309          var thisInstance = this;
1310          listViewPageDiv.delegate('#selectAllMsg','click',function(){
1311              jQuery('#selectAllMsgDiv').hide();
1312              jQuery("#deSelectAllMsgDiv").show();
1313              jQuery('#listViewEntriesMainCheckBox').attr('checked',true);
1314              jQuery('.listViewEntriesCheckBox').each( function(index,element) {
1315                  jQuery(this).attr('checked', true).closest('tr').addClass('highlightBackgroundColor');
1316              });
1317              thisInstance.writeSelectedIds('all');
1318          });
1319      },
1320  
1321      /*
1322      * Function to register the click event for deselect All.
1323      */
1324      registerDeselectAllClickEvent : function(){
1325          var listViewPageDiv = this.getListViewContainer();
1326          var thisInstance = this;
1327          listViewPageDiv.delegate('#deSelectAllMsg','click',function(){
1328              jQuery('#deSelectAllMsgDiv').hide();
1329              jQuery('#listViewEntriesMainCheckBox').attr('checked',false);
1330              jQuery('.listViewEntriesCheckBox').each( function(index,element) {
1331                  jQuery(this).attr('checked', false).closest('tr').removeClass('highlightBackgroundColor');
1332              });
1333              var excludedIds = new Array();
1334              var selectedIds = new Array();
1335              thisInstance.writeSelectedIds(selectedIds);
1336              thisInstance.writeExcludedIds(excludedIds);
1337          });
1338      },
1339  
1340      /*
1341       * Function to register the click event for listView headers
1342       */
1343      registerHeadersClickEvent :  function(){
1344          var listViewPageDiv = this.getListViewContainer();
1345          var thisInstance = this;
1346          listViewPageDiv.on('click','.listViewHeaderValues',function(e){
1347              var fieldName = jQuery(e.currentTarget).data('columnname');
1348              var sortOrderVal = jQuery(e.currentTarget).data('nextsortorderval');
1349              var cvId = thisInstance.getCurrentCvId();
1350              var urlParams = {
1351                  "orderby": fieldName,
1352                  "sortorder": sortOrderVal,
1353                  "viewname" : cvId
1354              }
1355              thisInstance.getListViewRecords(urlParams);
1356          });
1357      },
1358  
1359      /*
1360       * function to register the click event event for create filter
1361       */
1362      registerCreateFilterClickEvent : function(){
1363          var thisInstance = this;
1364          jQuery('#createFilter').on('click',function(event){
1365              //to close the dropdown
1366              thisInstance.getFilterSelectElement().data('select2').close();
1367              var currentElement = jQuery(event.currentTarget);
1368              var createUrl = currentElement.data('createurl');
1369              Vtiger_CustomView_Js.loadFilterView(createUrl);
1370          });
1371      },
1372  
1373      /*
1374       * Function to register the click event for edit filter
1375       */
1376      registerEditFilterClickEvent : function(){
1377          var thisInstance = this;
1378          var listViewFilterBlock = this.getFilterBlock();
1379          if(listViewFilterBlock != false){
1380              listViewFilterBlock.on('mouseup','li i.editFilter',function(event){
1381                  //to close the dropdown
1382                  thisInstance.getFilterSelectElement().data('select2').close();
1383                  var liElement = jQuery(event.currentTarget).closest('.select2-result-selectable');
1384                  var currentOptionElement = thisInstance.getSelectOptionFromChosenOption(liElement);
1385                  var editUrl = currentOptionElement.data('editurl');
1386                  Vtiger_CustomView_Js.loadFilterView(editUrl);
1387                  event.stopPropagation();
1388              });
1389          }
1390      },
1391  
1392      /*
1393       * Function to register the click event for delete filter
1394       */
1395      registerDeleteFilterClickEvent: function(){
1396          var thisInstance = this;
1397          var listViewFilterBlock = this.getFilterBlock();
1398          if(listViewFilterBlock != false){
1399              //used mouseup event to stop the propagation of customfilter select change event.
1400              listViewFilterBlock.on('mouseup','li i.deleteFilter',function(event){
1401                  //to close the dropdown
1402                  thisInstance.getFilterSelectElement().data('select2').close();
1403                  var liElement = jQuery(event.currentTarget).closest('.select2-result-selectable');
1404                  var message = app.vtranslate('JS_LBL_ARE_YOU_SURE_YOU_WANT_TO_DELETE');
1405                  Vtiger_Helper_Js.showConfirmationBox({'message' : message}).then(
1406                      function(e) {
1407                          var currentOptionElement = thisInstance.getSelectOptionFromChosenOption(liElement); 
1408                                                  var deleteUrl = currentOptionElement.data('deleteurl'); 
1409                                                  var newEle = '<form action='+deleteUrl+' method="POST">'+ 
1410                                             '<input type = "hidden" name ="'+csrfMagicName+'"  value=\''+csrfMagicToken+'\'>'+
1411                                             '</form>'; 
1412                                                  var formElement = jQuery(newEle);  
1413                                                  formElement.appendTo('body').submit(); 
1414                      },
1415                      function(error, err){
1416                      }
1417                  );
1418                  event.stopPropagation();
1419              });
1420          }
1421      },
1422  
1423      /*
1424       * Function to register the click event for approve filter
1425       */
1426      registerApproveFilterClickEvent: function(){
1427          var thisInstance = this;
1428          var listViewFilterBlock = this.getFilterBlock();
1429  
1430          if(listViewFilterBlock != false){
1431              listViewFilterBlock.on('mouseup','li i.approveFilter',function(event){
1432                  //to close the dropdown
1433                  thisInstance.getFilterSelectElement().data('select2').close();
1434                  var liElement = jQuery(event.currentTarget).closest('.select2-result-selectable');
1435                  var currentOptionElement = thisInstance.getSelectOptionFromChosenOption(liElement);
1436                  var approveUrl = currentOptionElement.data('approveurl');
1437                  window.location.href = approveUrl;
1438                  event.stopPropagation();
1439              });
1440          }
1441      },
1442  
1443      /*
1444       * Function to register the click event for deny filter
1445       */
1446      registerDenyFilterClickEvent: function(){
1447          var thisInstance = this;
1448          var listViewFilterBlock = this.getFilterBlock();
1449  
1450          if(listViewFilterBlock != false){
1451              listViewFilterBlock.on('mouseup','li i.denyFilter',function(event){
1452                  //to close the dropdown
1453                  thisInstance.getFilterSelectElement().data('select2').close();
1454                  var liElement = jQuery(event.currentTarget).closest('.select2-result-selectable');
1455                  var currentOptionElement = thisInstance.getSelectOptionFromChosenOption(liElement);
1456                  var denyUrl = currentOptionElement.data('denyurl');
1457                  window.location.href = denyUrl;
1458                  event.stopPropagation();
1459              });
1460          }
1461      },
1462  
1463      /*
1464       * Function to register the hover event for customview filter options
1465       */
1466      registerCustomFilterOptionsHoverEvent : function(){
1467          var thisInstance = this;
1468          var listViewTopMenuDiv = this.getListViewTopMenuContainer();
1469          var filterBlock = this.getFilterBlock()
1470          if(filterBlock != false){
1471              filterBlock.on('hover','li.select2-result-selectable',function(event){
1472                  var liElement = jQuery(event.currentTarget);
1473                  var liFilterImages = liElement.find('.filterActionImgs');
1474                  if (liElement.hasClass('group-result')){
1475                      return;
1476                  }
1477  
1478                  if( event.type === 'mouseenter' ) {
1479                      if(liFilterImages.length > 0){
1480                          liFilterImages.show();
1481                      }else{
1482                          thisInstance.performFilterImageActions(liElement);
1483                      }
1484  
1485                  } else {
1486                      liFilterImages.hide();
1487                  }
1488              });
1489          }
1490      },
1491  
1492      performFilterImageActions : function(liElement) {
1493          jQuery('.filterActionImages').clone(true,true).removeClass('filterActionImages').addClass('filterActionImgs').appendTo(liElement.find('.select2-result-label')).show();
1494          var currentOptionElement = this.getSelectOptionFromChosenOption(liElement);
1495          var deletable = currentOptionElement.data('deletable');
1496          if(deletable != '1'){
1497              liElement.find('.deleteFilter').remove();
1498          }
1499          var editable = currentOptionElement.data('editable');
1500          if(editable != '1'){
1501              liElement.find('.editFilter').remove();
1502          }
1503          var pending = currentOptionElement.data('pending');
1504          if(pending != '1'){
1505              liElement.find('.approveFilter').remove();
1506          }
1507          var approve = currentOptionElement.data('public');
1508          if(approve != '1'){
1509              liElement.find('.denyFilter').remove();
1510          }
1511      },
1512  
1513      /*
1514       * Function to register the list view row click event
1515       */
1516      registerRowClickEvent: function(){
1517          var thisInstance = this;
1518          var listViewContentDiv = this.getListViewContentContainer();
1519          listViewContentDiv.on('click','.listViewEntries',function(e){
1520              if(jQuery(e.target, jQuery(e.currentTarget)).is('td:first-child')) return;
1521              if(jQuery(e.target).is('input[type="checkbox"]')) return;
1522              var elem = jQuery(e.currentTarget);
1523              var recordUrl = elem.data('recordurl');
1524              if(typeof recordUrl == 'undefined') {
1525                  return;
1526              }
1527              window.location.href = recordUrl;
1528          });
1529      },
1530  
1531      /*
1532       * Function to register the list view delete record click event
1533       */
1534      registerDeleteRecordClickEvent: function(){
1535          var thisInstance = this;
1536          var listViewContentDiv = this.getListViewContentContainer();
1537          listViewContentDiv.on('click','.deleteRecordButton',function(e){
1538              var elem = jQuery(e.currentTarget);
1539              var recordId = elem.closest('tr').data('id');
1540              Vtiger_List_Js.deleteRecord(recordId);
1541              e.stopPropagation();
1542          });
1543      },
1544      /*
1545       * Function to register the click event of email field
1546       */
1547      registerEmailFieldClickEvent : function(){
1548          var listViewContentDiv = this.getListViewContentContainer();
1549          listViewContentDiv.on('click','.emailField',function(e){
1550              e.stopPropagation();
1551          })
1552      },
1553  
1554      /*
1555       * Function to register the click event of phone field
1556       */
1557      registerPhoneFieldClickEvent : function(){
1558          var listViewContentDiv = this.getListViewContentContainer();
1559          listViewContentDiv.on('click','.phoneField',function(e){
1560              e.stopPropagation();
1561          })
1562      },
1563  
1564      /*
1565       * Function to register the click event of url field
1566       */
1567      registerUrlFieldClickEvent : function(){
1568          var listViewContentDiv = this.getListViewContentContainer();
1569          listViewContentDiv.on('click','.urlField',function(e){
1570              e.stopPropagation();
1571          })
1572      },
1573  
1574      /**
1575       * Function to inactive field for validation in a form
1576       * this will remove data-validation-engine attr of all the elements
1577       * @param Accepts form as a parameter
1578       */
1579      inactiveFieldValidation : function(form){
1580          var massEditFieldList = jQuery('#massEditFieldsNameList').data('value');
1581          for(var fieldName in massEditFieldList){
1582              var fieldInfo = massEditFieldList[fieldName];
1583  
1584              var fieldElement = form.find('[name="'+fieldInfo.name+'"]');
1585              if(fieldInfo.type == "reference") {
1586                  //get the element which will be shown which has "_display" appended to actual field name
1587                  fieldElement = form.find('[name="'+fieldInfo.name+'_display"]');
1588              }else if(fieldInfo.type == "multipicklist") {
1589                  fieldElement = form.find('[name="'+fieldInfo.name+'[]"]');
1590              }
1591  
1592              //Not all the fields will be enabled for mass edit
1593              if(fieldElement.length == 0 ) {
1594                  continue;
1595              }
1596  
1597              var elemData = fieldElement.data();
1598  
1599              //Blank validation by default
1600              var validationVal = "validate[]"
1601              if('validationEngine' in elemData) {
1602                  validationVal =  elemData.validationEngine;
1603                  delete elemData.validationEngine;
1604              }
1605              fieldElement.data('invalidValidationEngine',validationVal);
1606              fieldElement.removeAttr('data-validation-engine');
1607          }
1608      },
1609  
1610      /**
1611       * function to register field for validation
1612       * this will add the data-validation-engine attr of all the elements
1613       * make the field available for validation
1614       * @param Accepts form as a parameter
1615       */
1616      registerFieldsForValidation : function(form){
1617          form.find('.fieldValue').on('change','input,select,textarea',function(e, params){
1618              if(typeof params == 'undefined'){
1619                  params = {};
1620              }
1621  
1622              if(typeof params.forceDeSelect == 'undefined') {
1623                  params.forceDeSelect = false;
1624              }
1625              var element = jQuery(e.currentTarget);
1626              var fieldValue = element.val();
1627              var parentTd = element.closest('td');
1628              if(((fieldValue == "" || fieldValue == null) && (typeof(element.attr('data-validation-engine')) != "undefined")) || params.forceDeSelect){
1629                  if(parentTd.hasClass('massEditActiveField')){
1630                      parentTd.removeClass('massEditActiveField');
1631                  }
1632                  element.removeAttr('data-validation-engine');
1633                  element.validationEngine('hide');
1634                  var invalidFields = form.data('jqv').InvalidFields;
1635                  var response = jQuery.inArray(element.get(0),invalidFields);
1636                  if(response != '-1'){
1637                      invalidFields.splice(response,1);
1638                  }
1639              } else if((fieldValue != "") && (typeof(element.attr('data-validation-engine')) == "undefined")){
1640                  element.attr('data-validation-engine', element.data('invalidValidationEngine'));
1641                  parentTd.addClass('massEditActiveField');
1642              }
1643          })
1644      },
1645  
1646      registerEventForTabClick : function(form){
1647          var ulContainer = form.find('.massEditTabs');
1648          ulContainer.on('click','a[data-toggle="tab"]',function(e){
1649              form.validationEngine('validate');
1650              var invalidFields = form.data('jqv').InvalidFields;
1651              if(invalidFields.length > 0){
1652                  e.stopPropagation();
1653              }
1654          });
1655      },
1656  
1657      registerReferenceFieldsForValidation : function(form){
1658          var referenceField = form.find('.sourceField');
1659          form.find('.sourceField').on(Vtiger_Edit_Js.referenceSelectionEvent,function(e,params){
1660              var element = jQuery(e.currentTarget);
1661              var elementName = element.attr('name');
1662              var fieldDisplayName = elementName+"_display";
1663              var fieldDisplayElement = form.find('input[name="'+fieldDisplayName+'"]');
1664              if(params.selectedName == ""){
1665                  return;
1666              }
1667              fieldDisplayElement.attr('data-validation-engine', fieldDisplayElement.data('invalidValidationEngine'));
1668              var parentTd = fieldDisplayElement.closest('td');
1669              if(!parentTd.hasClass('massEditActiveField')){
1670                  parentTd.addClass('massEditActiveField');
1671              }
1672          })
1673          form.find('.clearReferenceSelection').on(Vtiger_Edit_Js.referenceDeSelectionEvent,function(e){
1674              var sourceField = form.find('.sourceField');
1675              var sourceFieldName = sourceField.attr('name');
1676              var fieldDisplayName = sourceFieldName+"_display";
1677              var fieldDisplayElement = form.find('input[name="'+fieldDisplayName+'"]').removeAttr('data-validation-engine');
1678              var parentTd = fieldDisplayElement.closest('td');
1679              if(parentTd.hasClass('massEditActiveField')){
1680                  parentTd.removeClass('massEditActiveField');
1681              }
1682          })
1683      },
1684  
1685      registerSlimScrollMassEdit : function() {
1686          app.showScrollBar(jQuery('div[name="massEditContent"]'), {'height':'400px'});
1687      },
1688  
1689      /*
1690       * Function to register the submit event for mass Actions save
1691       */
1692      registerMassActionSubmitEvent : function(){
1693          var thisInstance = this;
1694          jQuery('body').on('submit','#massSave',function(e){
1695              var form = jQuery(e.currentTarget);
1696              var commentContent = form.find('#commentcontent')
1697              var commentContentValue = commentContent.val();
1698              if(commentContentValue == "") {
1699                  var errorMsg = app.vtranslate('JS_LBL_COMMENT_VALUE_CANT_BE_EMPTY')
1700                  commentContent.validationEngine('showPrompt', errorMsg , 'error','bottomLeft',true);
1701                  e.preventDefault();
1702                  return;
1703              }
1704              commentContent.validationEngine('hide');
1705              jQuery(form).find('[name=saveButton]').attr('disabled','disabled');
1706              thisInstance.massActionSave(form).then(function(data){
1707                  Vtiger_List_Js.clearList();
1708              });
1709              e.preventDefault();
1710          });
1711      },
1712  
1713      changeCustomFilterElementView : function() {
1714          var filterSelectElement = this.getFilterSelectElement();
1715          if(filterSelectElement.length > 0 && filterSelectElement.is("select")) {
1716              app.showSelect2ElementView(filterSelectElement,{
1717                  formatSelection : function(data, contianer){
1718                      var resultContainer = jQuery('<span></span>');
1719                      resultContainer.append(jQuery(jQuery('.filterImage').clone().get(0)).show());
1720                      resultContainer.append(data.text);
1721                      return resultContainer;
1722                  },
1723                  customSortOptGroup : true
1724              });
1725  
1726              var select2Instance = filterSelectElement.data('select2');
1727              jQuery('span.filterActionsDiv').appendTo(select2Instance.dropdown).removeClass('hide');
1728          }
1729      },
1730  
1731      triggerDisplayTypeEvent : function() {
1732          var widthType = app.cacheGet('widthType', 'narrowWidthType');
1733          if(widthType) {
1734              var elements = jQuery('.listViewEntriesTable').find('td,th');
1735              elements.attr('class', widthType);
1736          }
1737      },
1738  
1739      registerEventForAlphabetSearch : function() {
1740          var thisInstance = this;
1741          var listViewPageDiv = this.getListViewContentContainer();
1742          listViewPageDiv.on('click','.alphabetSearch',function(e) {
1743              var alphabet = jQuery(e.currentTarget).find('a').text();
1744              var cvId = thisInstance.getCurrentCvId();
1745              var AlphabetSearchKey = thisInstance.getAlphabetSearchField();
1746              var urlParams = {
1747                  "viewname" : cvId,
1748                  "search_key" : AlphabetSearchKey,
1749                  "search_value" : alphabet,
1750                  "operator" : 's',
1751                  "page"    :    1
1752              }
1753              jQuery('#recordsCount').val('');
1754              //To Set the page number as first page
1755              jQuery('#pageNumber').val('1');
1756              jQuery('#pageToJump').val('1');
1757              jQuery('#totalPageCount').text("");
1758              thisInstance.getListViewRecords(urlParams).then(
1759                      function(data){
1760                          thisInstance.updatePagination();
1761                          //To unmark the all the selected ids
1762                          jQuery('#deSelectAllMsg').trigger('click');
1763                      },
1764  
1765                      function(textStatus, errorThrown){
1766                      }
1767              );
1768          });
1769      },
1770  
1771      /**
1772       * Function to show total records count in listview on hover
1773       * of pageNumber text
1774       */
1775      registerEventForTotalRecordsCount : function(){
1776          var thisInstance = this;
1777          jQuery('.totalNumberOfRecords').on('click',function(e){
1778              var element = jQuery(e.currentTarget);
1779              var totalRecordsElement = jQuery('#totalCount');
1780              var totalNumberOfRecords = totalRecordsElement.val();
1781              element.addClass('hide');
1782              element.parent().progressIndicator({});
1783              if(totalNumberOfRecords == '') {
1784                  thisInstance.getPageCount().then(function(data){
1785                      totalNumberOfRecords = data['result']['numberOfRecords'];
1786                      totalRecordsElement.val(totalNumberOfRecords);
1787                      thisInstance.showPagingInfo();
1788                  });
1789              }else{
1790                  thisInstance.showPagingInfo();
1791              }
1792              element.parent().progressIndicator({'mode':'hide'});
1793          })
1794      },
1795  
1796      showPagingInfo : function(){
1797          var totalNumberOfRecords = jQuery('#totalCount').val();
1798          var pageNumberElement = jQuery('.pageNumbersText');
1799          var pageRange = pageNumberElement.text();
1800          var newPagingInfo = pageRange+" "+app.vtranslate('of')+" "+totalNumberOfRecords;
1801          var listViewEntriesCount = parseInt(jQuery('#noOfEntries').val());
1802          if(listViewEntriesCount != 0){
1803              jQuery('.pageNumbersText').html(newPagingInfo);
1804          } else {
1805              jQuery('.pageNumbersText').html("");
1806          }
1807      },
1808  
1809      registerEvents : function(){
1810  
1811          this.registerRowClickEvent();
1812          this.registerPageNavigationEvents();
1813          this.registerMainCheckBoxClickEvent();
1814          this.registerCheckBoxClickEvent();
1815          this.registerSelectAllClickEvent();
1816          this.registerDeselectAllClickEvent();
1817          this.registerDeleteRecordClickEvent();
1818          this.registerHeadersClickEvent();
1819          this.registerMassActionSubmitEvent();
1820          this.registerEventForAlphabetSearch();
1821  
1822          this.changeCustomFilterElementView();
1823          this.registerChangeCustomFilterEvent();
1824          this.registerCreateFilterClickEvent();
1825          this.registerEditFilterClickEvent();
1826          this.registerDeleteFilterClickEvent();
1827          this.registerApproveFilterClickEvent();
1828          this.registerDenyFilterClickEvent();
1829          this.registerCustomFilterOptionsHoverEvent();
1830          this.registerEmailFieldClickEvent();
1831          this.registerPhoneFieldClickEvent();
1832          //this.triggerDisplayTypeEvent();
1833          Vtiger_Helper_Js.showHorizontalTopScrollBar();
1834          this.registerUrlFieldClickEvent();
1835          this.registerEventForTotalRecordsCount();
1836  
1837          //Just reset all the checkboxes on page load: added for chrome issue.
1838          var listViewContainer = this.getListViewContentContainer();
1839          listViewContainer.find('#listViewEntriesMainCheckBox,.listViewEntriesCheckBox').prop('checked', false);
1840  
1841          this.registerListSearch();
1842          this.registerDateListSearch(listViewContainer);
1843          this.registerTimeListSearch(listViewContainer);
1844      },
1845  
1846      /**
1847       * Function that executes after the mass delete action
1848       */
1849      postMassDeleteRecords : function() {
1850          var aDeferred = jQuery.Deferred();
1851          var listInstance = Vtiger_List_Js.getInstance();
1852          app.hideModalWindow();
1853          var module = app.getModuleName();
1854          listInstance.getListViewRecords().then(
1855              function(data) {
1856                  jQuery('#recordsCount').val('');
1857                  jQuery('#totalPageCount').text('');
1858                  //listInstance.triggerDisplayTypeEvent();
1859                  jQuery('#deSelectAllMsg').trigger('click');
1860                  listInstance.calculatePages().then(function(){
1861                      listInstance.updatePagination();
1862                  });
1863                  aDeferred.resolve();
1864          });
1865          jQuery('#recordsCount').val('');
1866          return aDeferred.promise();
1867      },
1868  
1869      getListSearchParams : function(){
1870          var listViewPageDiv = this.getListViewContainer();
1871          var listViewTable = listViewPageDiv.find('.listViewEntriesTable');
1872          var searchParams = new Array();
1873          listViewTable.find('.listSearchContributor').each(function(index,domElement){
1874              var searchInfo = new Array();
1875              var searchContributorElement = jQuery(domElement);
1876              var fieldInfo = searchContributorElement.data('fieldinfo');
1877              var fieldName = searchContributorElement.attr('name');
1878  
1879              var searchValue = searchContributorElement.val();
1880  
1881              if(typeof searchValue == "object") {
1882                  if(searchValue == null) {
1883                     searchValue = "";
1884                  }else{
1885                      searchValue = searchValue.join(',');
1886                  }
1887              }
1888              searchValue = searchValue.trim();
1889              if(searchValue.length <=0 ) {
1890                  //continue
1891                  return true;
1892              }
1893              var searchOperator = 'c';
1894              if(fieldInfo.type == "date" || fieldInfo.type == "datetime") {
1895                  searchOperator = 'bw';
1896              }else if (fieldInfo.type == 'percentage' || fieldInfo.type == "double" || fieldInfo.type == "integer"
1897                  || fieldInfo.type == 'currency' || fieldInfo.type == "number" || fieldInfo.type == "boolean" ||
1898                  fieldInfo.type == "picklist") {
1899                  searchOperator = 'e';
1900              }
1901              searchInfo.push(fieldName);
1902              searchInfo.push(searchOperator);
1903              searchInfo.push(searchValue);
1904              searchParams.push(searchInfo);
1905          });
1906          return new Array(searchParams);
1907      },
1908  
1909      registerListSearch : function() {
1910        var listViewPageDiv = this.getListViewContainer();
1911        var thisInstance = this;
1912        listViewPageDiv.on('click','[data-trigger="listSearch"]',function(e){
1913              thisInstance.getListViewRecords({'page': '1'}).then(
1914                      function(data){
1915                          //To unmark the all the selected ids
1916                          jQuery('#deSelectAllMsg').trigger('click');
1917  
1918                           jQuery('#recordsCount').val('');
1919                          //To Set the page number as first page
1920                          jQuery('#pageNumber').val('1');
1921                          jQuery('#pageToJump').val('1');
1922                          jQuery('#totalPageCount').text("");
1923                          thisInstance.calculatePages().then(function(){
1924                              thisInstance.updatePagination();
1925                          });
1926                      },
1927  
1928                      function(textStatus, errorThrown){
1929                      }
1930              );
1931        })
1932  
1933        listViewPageDiv.on('keypress','input.listSearchContributor',function(e){
1934            if(e.keyCode == 13){
1935                var element = jQuery(e.currentTarget);
1936                var parentElement = element.closest('tr');
1937                var searchTriggerElement = parentElement.find('[data-trigger="listSearch"]');
1938                searchTriggerElement.trigger('click');
1939            }
1940        });
1941      },
1942  
1943      registerDateListSearch : function(container) {
1944          container.find('.dateField').each(function(index,element){
1945              var dateElement = jQuery(element);
1946              var customParams = {
1947                  calendars: 3,
1948                  mode: 'range',
1949                  className : 'rangeCalendar',
1950                  onChange: function(formated) {
1951                      dateElement.val(formated.join(','));
1952                  }
1953              }
1954              app.registerEventForDatePickerFields(dateElement,false,customParams);
1955          });
1956  
1957      },
1958  
1959      registerTimeListSearch : function(container) {
1960          app.registerEventForTimeFields(container,false);
1961      }
1962  });


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