thomascube
2010-03-02 7c9d922b96f9a88b350d6e07f5bde84ccc40f9b0
program/js/app.js
@@ -305,7 +305,7 @@
        this.set_page_buttons();
        
        if (this.env.address_sources && this.env.address_sources[this.env.source] && !this.env.address_sources[this.env.source].readonly)
          this.enable_command('add', true);
          this.enable_command('add', 'import', true);
        
        if (this.env.cid)
          this.enable_command('show', 'edit', true);
@@ -313,7 +313,7 @@
        if ((this.env.action=='add' || this.env.action=='edit') && this.gui_objects.editform)
          this.enable_command('save', true);
        else
          this.enable_command('search', 'reset-search', 'moveto', 'import', true);
          this.enable_command('search', 'reset-search', 'moveto', true);
          
        if (this.contact_list && this.contact_list.rowcount > 0)
          this.enable_command('export', true);
@@ -472,7 +472,7 @@
    this.init_address_input_events(input_to);
    this.init_address_input_events($("[name='_cc']"));
    this.init_address_input_events($("[name='_bcc']"));
    if (!html_mode)
      this.set_caret_pos(input_message, this.env.top_posting ? 0 : $(input_message).val().length);
@@ -481,6 +481,8 @@
        && !html_mode) {  // if we have HTML editor, signature is added in callback
      this.change_identity(input_from[0]);
    }
    else if (!html_mode)
      this.set_caret_pos(input_message, this.env.top_posting ? 0 : $(input_message).val().length);
    if (input_to.val() == '')
      input_to.focus();
@@ -606,7 +608,7 @@
            this.reset_qsearch();
          this.list_contacts(props);
          this.enable_command('add', (this.env.address_sources && !this.env.address_sources[props].readonly));
          this.enable_command('add', 'import', (this.env.address_sources && !this.env.address_sources[props].readonly));
          }
        break;
@@ -622,8 +624,8 @@
        if (this.env.sort_col==sort_col)
          sort_order = this.env.sort_order=='ASC' ? 'DESC' : 'ASC';
        else
     sort_order = 'ASC';
          sort_order = 'ASC';
        // set table header class
        $('#rcm'+this.env.sort_col).removeClass('sorted'+(this.env.sort_order.toUpperCase()));
        $('#rcm'+sort_col).addClass('sorted'+sort_order);
@@ -975,10 +977,6 @@
        clearTimeout(this.request_timer);
        break;
      case 'insert-sig':
        this.change_identity($("[name='_from']")[0], true);
        break;
      case 'add-attachment':
        this.show_attachment_form(true);
        
@@ -991,6 +989,10 @@
      
      case 'remove-attachment':
        this.remove_attachment(props);
        break;
      case 'insert-sig':
        this.change_identity($("[name='_from']")[0], true);
        break;
      case 'reply-all':
@@ -1073,7 +1075,7 @@
          this.lock_form(this.gui_objects.importform, true);
        }
        else
          this.goto_url('import');
          this.goto_url('import', (this.env.source ? '_target='+urlencode(this.env.source)+'&' : ''));
        break;
        
      case 'export':
@@ -1616,8 +1618,8 @@
      this.env.current_page = 1;
      this.set_busy(true, 'searching');
      this.http_request('search', '_filter='+filter
           + (search ? '&_q='+urlencode(search) : '')
           + (this.env.mailbox ? '&_mbox='+urlencode(this.env.mailbox) : ''), true);
          + (search ? '&_q='+urlencode(search) : '')
          + (this.env.mailbox ? '&_mbox='+urlencode(this.env.mailbox) : ''), true);
    }
@@ -1883,7 +1885,7 @@
    if (this.env.flag_for_deletion)
      this.mark_message('delete');
    // if there isn't a defined trash mailbox or we are in it
    else if (!this.env.trash_mailbox || String(this.env.mailbox).toLowerCase() == String(this.env.trash_mailbox).toLowerCase())
    else if (!this.env.trash_mailbox || this.env.mailbox == this.env.trash_mailbox)
      this.permanently_remove_messages();
    // if there is a trash mailbox defined and we're not currently in it
    else {
@@ -2303,7 +2305,7 @@
    };
    
  this.change_identity = function(obj, show_sig)
    {
  {
    if (!obj || !obj.options)
      return false;
@@ -2311,150 +2313,122 @@
      show_sig = this.env.show_sig;
    var id = obj.options[obj.selectedIndex].value;
    var input_message = $("[name='_message']");
    var message = input_message.val();
    var is_html = ($("input[name='_is_html']").val() == '1');
    var sig;
    // enable manual signature insert
    if (this.env.signatures && this.env.signatures[id])
      this.enable_command('insert-sig', true);
    else {
      this.enable_command('insert-sig', false);
      if (!this.env.signatures)
        return true;
      }
    var sig, cursor_pos, p = -1;
    if (!this.env.identity)
      this.env.identity = id
    if (!show_sig)
      return false;
  
    if (!is_html)
      {
      var input_message = $("[name='_message']");
      var message = input_message.val();
      var pos, cursor_pos, p = -1;
    // enable manual signature insert
    if (this.env.signatures && this.env.signatures[id])
      this.enable_command('insert-sig', true);
    else
      this.enable_command('insert-sig', false);
    if (!is_html) {
      // remove the 'old' signature
      if (this.env.identity && this.env.signatures[this.env.identity])
        {
        if (this.env.signatures[this.env.identity]['is_html'])
          sig = this.env.signatures[this.env.identity]['plain_text'];
        else
          sig = this.env.signatures[this.env.identity]['text'];
      if (show_sig && this.env.identity && this.env.signatures && this.env.signatures[this.env.identity]) {
        sig = this.env.signatures[this.env.identity].is_html ? this.env.signatures[this.env.identity].plain_text : this.env.signatures[this.env.identity].text;
        if (sig.indexOf('-- ') != 0)
          sig = '-- \n'+sig;
   if (this.env.top_posting)
          p = message.indexOf(sig);
        else {
     if (sig.indexOf('-- ')!=0)
            sig = '-- \n'+sig;
          p = message.lastIndexOf(sig);
     }
        if (p>=0)
        p = this.env.sig_above ? message.indexOf(sig) : message.lastIndexOf(sig);
        if (p >= 0)
          message = message.substring(0, p) + message.substring(p+sig.length, message.length);
   }
      input_message.get(0).focus();
      }
      // add the new signature string
      if (this.env.signatures[id])
        {
        if (this.env.signatures[id]['is_html'])
          sig = this.env.signatures[id]['plain_text'];
   else
          sig = this.env.signatures[id]['text'];
      if (show_sig && this.env.signatures && this.env.signatures[id]) {
        sig = this.env.signatures[id]['is_html'] ? this.env.signatures[id]['plain_text'] : this.env.signatures[id]['text'];
        if (sig.indexOf('-- ') != 0)
          sig = '-- \n'+sig;
   if (this.env.top_posting) {
     if (p>=0) { // in place of removed signature
       message = message.substring(0, p) + sig + message.substring(p, message.length);
       cursor_pos = p - 1;
       }
     else if (pos = this.get_caret_pos(input_message.get(0))) { // at cursor position
       message = message.substring(0, pos) + '\n' + sig + '\n' + message.substring(pos, message.length);
       cursor_pos = pos;
       }
     else { // on top
       cursor_pos = 0;
       message = '\n\n' + sig + '\n' + message;
       }
     }
   else {
          message = message.replace(/[\r\n]+$/, '');
          if (sig.indexOf('-- ')!=0)
            sig = '-- \n'+sig;
     cursor_pos = message.length ? message.length+1 : 0;
          message += '\n\n' + sig;
     }
        if (this.env.sig_above) {
          if (p >= 0) { // in place of removed signature
            message = message.substring(0, p) + sig + message.substring(p, message.length);
            cursor_pos = p - 1;
          }
          else if (pos = this.get_caret_pos(input_message.get(0))) { // at cursor position
            message = message.substring(0, pos) + '\n' + sig + '\n\n' + message.substring(pos, message.length);
            cursor_pos = pos;
          }
          else { // on top
            cursor_pos = 0;
            message = '\n\n' + sig + '\n\n' + message.replace(/^[\r\n]+/, '');
          }
        }
        else {
          message = message.replace(/[\r\n]+$/, '');
          cursor_pos = !this.env.top_posting && message.length ? message.length+1 : 0;
          message += '\n\n' + sig;
        }
      }
      else
        cursor_pos = this.env.top_posting ? 0 : message.length;
      input_message.val(message);
      // move cursor before the signature
      if (typeof(cursor_pos) != 'undefined')
        this.set_caret_pos(input_message.get(0), cursor_pos);
      }
    // html
    else
      {
      this.set_caret_pos(input_message.get(0), cursor_pos);
    }
    else if (is_html && show_sig && this.env.signatures) {  // html
      var editor = tinyMCE.get(this.env.composebody);
      var sigElem = editor.dom.get('_rc_sig');
      // Append the signature as a div within the body
      if (!sigElem) {
   var body = editor.getBody();
   var doc = editor.getDoc();
   sigElem = doc.createElement('div');
        var body = editor.getBody();
        var doc = editor.getDoc();
        sigElem = doc.createElement('div');
        sigElem.setAttribute('id', '_rc_sig');
        if (this.env.top_posting) {
        if (this.env.sig_above) {
          // if no existing sig and top posting then insert at caret pos
          editor.getWin().focus(); // correct focus in IE
          var node = editor.selection.getNode();
          if (node.nodeName == 'BODY') {
            // no real focus, insert at start
            body.insertBefore(sigElem, body.firstChild);
            body.insertBefore(doc.createElement('br'), body.firstChild);
            }
          }
          else {
            body.insertBefore(sigElem, node.nextSibling);
            body.insertBefore(doc.createElement('br'), node.nextSibling);
            }
     }
          }
        }
        else {
     if (bw.ie)
            // add empty line before signature on IE
          if (bw.ie)  // add empty line before signature on IE
            body.appendChild(doc.createElement('br'));
          body.appendChild(sigElem);
          }
   }
      if (this.env.signatures[id])
        {
        if (this.env.signatures[id]['is_html']) {
          sig = this.env.signatures[id]['text'];
          if (!this.env.top_posting && this.env.signatures[id]['plain_text'].indexOf('-- ')!=0)
            sig = '-- <br />' + sig;
     }
   else {
          sig = this.env.signatures[id]['text'];
     if (!this.env.top_posting && sig.indexOf('-- ')!=0)
            sig = '-- \n' + sig;
     sig = '<pre>' + sig + '</pre>';
          }
        sigElem.innerHTML = sig;
        }
      }
      if (this.env.signatures[id]) {
        if (this.env.signatures[id].is_html) {
          sig = this.env.signatures[id].text;
          if (this.env.signatures[id].plain_text.indexOf('-- ') != 0)
            sig = '-- <br />' + sig;
        }
        else {
          sig = this.env.signatures[id].text;
          if (sig.indexOf('-- ') != 0)
            sig = '-- \n' + sig;
          sig = '<pre>' + sig + '</pre>';
        }
        sigElem.innerHTML = sig;
      }
    }
    this.env.identity = id;
    return true;
    };
  };
  this.show_attachment_form = function(a)
    {
@@ -2832,8 +2806,8 @@
  this.ksearch_display_results = function (a_results)
  {
    // display search results
    if (a_results.length && this.ksearch_input) {
      var p, ul, li;
    if (a_results.length && this.ksearch_input && this.ksearch_value) {
      var p, ul, li, s_val = this.ksearch_value;
      
      // create results pane if not present
      if (!this.ksearch_pane) {
@@ -2845,11 +2819,11 @@
      // remove all search results
      ul = this.ksearch_pane.__ul;
      ul.innerHTML = '';
      // add each result line to list
      for (i=0; i<a_results.length; i++) {
        li = document.createElement('LI');
        li.innerHTML = a_results[i].replace(new RegExp('('+this.ksearch_value+')', 'ig'), '##$1%%').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/##([^%]+)%%/g, '<b>$1</b>');
        li.innerHTML = a_results[i].replace(new RegExp('('+s_val+')', 'ig'), '##$1%%').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/##([^%]+)%%/g, '<b>$1</b>');
        li.onmouseover = function(){ ref.ksearch_select(this); };
        li.onmouseup = function(){ ref.ksearch_click(this) };
        li._rcm_id = i;
@@ -3394,10 +3368,13 @@
    if (!this.gui_objects.subscriptionlist)
      return false;
    // find not protected folder
    for (var refid in this.env.subscriptionrows)
      if (this.env.subscriptionrows[refid]!=null && !this.env.subscriptionrows[refid][2])
    // find not protected folder
    var refid;
    for (var rid in this.env.subscriptionrows)
      if (this.env.subscriptionrows[rid]!=null && !this.env.subscriptionrows[rid][2]) {
        refid = rid;
        break;
      }
    var refrow, form;
    var tbody = this.gui_objects.subscriptionlist.tBodies[0];
@@ -3410,10 +3387,11 @@
      refid = replace.id;
    }
    if (!id || !(refrow = document.getElementById(refid)))
    if (!id || !refid || !(refrow = document.getElementById(refid)))
      {
      // Refresh page if we don't have a table row to clone
      this.goto_url('folders');
      return false;
      }
    else
      {
@@ -3439,7 +3417,7 @@
    // set messages count to zero
    if (!replace)
      row.cells[1].innerHTML = '*';
    if (!replace && row.cells[2] && row.cells[2].firstChild.tagName.toLowerCase()=='input')
      {
      row.cells[2].firstChild.value = name;
@@ -4201,7 +4179,7 @@
    if (this.env.framed && window.parent)
      parent.location.href = url;
    else
    else
      location.href = url;
    };
@@ -4218,7 +4196,7 @@
    var url = this.env.comm_path + '&_action=' + action + '&' + querystring
    
    // send request
    console.log('HTTP POST: ' + url);
    console.log('HTTP GET: ' + url);
    jQuery.get(url, { _unlock:(lock?1:0) }, function(data){ ref.http_response(data); }, 'json');
  };
@@ -4282,8 +4260,8 @@
      
      case 'moveto':
        if (this.env.action == 'show') {
     // re-enable commands on move/delete error
     this.enable_command('reply', 'reply-all', 'forward', 'delete', 'mark', 'print', 'open', 'edit', 'viewsource', 'download', true);
          // re-enable commands on move/delete error
          this.enable_command('reply', 'reply-all', 'forward', 'delete', 'mark', 'print', 'open', 'edit', 'viewsource', 'download', true);
        } else if (this.message_list)
          this.message_list.init();
        break;
@@ -4296,8 +4274,8 @@
            this.show_contentframe(false);
          // disable commands useless when mailbox is empty
          this.enable_command('show', 'reply', 'reply-all', 'forward', 'moveto', 'delete', 
       'mark', 'viewsource', 'open', 'edit', 'download', 'print', 'load-attachment',
       'purge', 'expunge', 'select-all', 'select-none', 'sort', false);
            'mark', 'viewsource', 'open', 'edit', 'download', 'print', 'load-attachment',
            'purge', 'expunge', 'select-all', 'select-none', 'sort', false);
        }
        break;
@@ -4343,16 +4321,18 @@
    };
  // send periodic request to check for recent messages
  this.check_for_recent = function(setbusy)
  this.check_for_recent = function(refresh)
    {
    if (this.busy)
      return;
    if (setbusy)
      this.set_busy(true, 'checkingmail');
    var addurl = '_t=' + (new Date().getTime());
    if (refresh) {
      this.set_busy(true, 'checkingmail');
      addurl += '&_refresh=1';
    }
    if (this.gui_objects.messagelist)
      addurl += '&_list=1';
    if (this.gui_objects.quotadisplay)