var textareaControl = {
  init: function() {
    var textareas = document.getElementsByTagName('textarea');
    if (textareas && textareas.length > 0) {
      for (var i=0;i<textareas.length;i++) {
        textareas[i].onkeyup = textareaControl.adjustHeight;
        fireEvent(document.getElementById(textareas[i].id), 'keyup');
      }
    }
  },
  adjustHeight: function(e)  {
    if (!e) e = window.event;
    if (e) {
      var source = e.srcElement? e.srcElement : e.target
      var newline_pieces = source.value.toString().split(/\n/);
      var newline_count = 0; //newline_pieces.length;
      var chars_per_line_estimate = Math.floor(source.offsetWidth/9);
      for (var i=0;i<newline_pieces.length;i++) {
        newline_count += Math.max(1,Math.ceil(newline_pieces[i].length/chars_per_line_estimate));
      }
      source.style.height = Math.max(65,((1 + newline_count) * 16)) + "px";
    }
  }
};
function textareaControlInit() {
  textareaControl.init();
}
onLoadCalls.push(new onLoadCall('textareaControlInit',''));

/* Function taken from http://jehiah.cz/archive/firing-javascript-events-properly */
function fireEvent(element,event){
    if (document.createEventObject){
        // dispatch for IE
        var evt = document.createEventObject();
        return element.fireEvent('on'+event,evt)
    }
    else{
        // dispatch for firefox + others
        var evt = document.createEvent("HTMLEvents");
        evt.initEvent(event, true, true ); // event type,bubbling,cancelable
        return !element.dispatchEvent(evt);
    }
}
