
if (!window.trice_libs) {trice_libs = {};}

trice_libs["form"] = {
  run : function() {
    form.activateTextareas();
    form.activateAutoCompletes();
    form.setFocus();
  }
}

var form = {

  activateTextareas : function() {
    var els = dom.elsByClass('resizable', '', 'textarea');
    for (var i = 0; i < els.length; i++) {
      form.activateTextarea(els[i]);
    }
  },

  activateTextarea : function(el) {
    //form.resizeTextarea(el);
    //el.style.overflow = 'hidden';
    dom.addEvent(el, 'focus', form.textareaFocus);
    dom.addEvent(el, 'keyup', form.textareaKeyup);
    dom.addEvent(el, 'dblclick', form.textareaDblclick);
  },
  
  textareaFocus : function(e) {
    form.resizeTextarea(this);
  },
  
  textareaDblclick : function(e) {
    form.resizeTextarea(this);
  },
  
  textareaKeyup : function(e) {
    //form.resizeTextarea(this);
  },
  
  resizeTextarea : function(el) {
    var scroll_pos = window.scrollY;
    var lines = el.value.split("\n");
    var lc = lines.length;
    for (var i in lines) {
      var ll = lines[i].length;
      while (ll > (el.scrollWidth / 8)) {
        lc++;
        ll -= (el.scrollWidth / 8);
      }
    }
    el.style.height = ((lc + 1) * 12) + 'px';
    el.style.height = (el.scrollHeight + 14) + 'px';
    window.scroll(0, scroll_pos);
  },
  
  /*   */
   
  activateAutoCompletes : function() {
    var els = dom.elsByPath('form .auto-complete input');
    for (var i = 0 ; i < els.length; i++) {
      form.activateAutoComplete(els[i]);
    }
  },
  
  activateAutoComplete : function(el) {
    el.prev_val = el.value;
    try {
      el.setAttribute('autocomplete', 'off');
    } catch(e) {}
    dom.addEvent(el, 'focus', function(e){form.trackAutoComplete(el)});
    dom.addEvent(el, 'blur', function(e){form.stopAutoComplete(el)});
  },
  
  trackAutoComplete : function(el) {
    try { window.clearTimeout(window.auto_complete_track_to); } catch(e) {}
    var el = dom.elById(el);
    var prev_val = el.prev_val;
    var val = el.value;
    if (prev_val != val) {
      try { window.clearTimeout(window.auto_complete_submit_to); } catch(e) {}
      window.auto_complete_submit_to = window.setTimeout("dom.parentByTag('form', '" + el.id + "').submit()", 500);
    }
    window.auto_complete_track_to = window.setTimeout("form.trackAutoComplete('" + el.id + "')", 250);
    el.prev_val = val;
  },
  
  stopAutoComplete : function(el) {
    try { window.clearTimeout(window.auto_complete_track_to); } catch(e) {}
    try { window.clearTimeout(window.auto_complete_submit_to); } catch(e) {}
  },
  
  /*   */
  
  setFocus : function() {
    var els = dom.elsByPath('form .focus input');
    for (var i in els) {
      try { els[i].focus(); } catch(e){};
    }
  },
  
  /*   */

  showSuggestions : function(val) {
    form.hideSuggestions();
    var tmp_el = document.createElement('div');
    tmp_el.innerHTML = val.replace(/^\s+/, '');
    var el_id = tmp_el.firstChild.id;
    var el_pos = dom.elPos(el_id);
    var el = tmp_el.firstChild;
    el.id += 'list';
    el.className += ' form-field-suggestions';
    el.style.top = el_pos.y + 'px'; 
    el.style.left = el_pos.x + 'px';
    dom.elByClass('canvas').appendChild(el);
  },
  
  hideSuggestions : function() {
    var els = dom.elsByClass('form-field-suggestions');
    for (var i = 0; i < els.length; i++) {
      els[i].parentNode.removeChild(els[i]);
    }
  }
  
}
