function indent_block (text) {
  return text.replace (/(^|(\r?\n))/g, "$1\t");
}

function unindent_block (text, _t) {
  return text.replace (/(^|(\r?\n))(\t| )/g,"$1");
}

function indent_catcher (field, e) {
  var ch          = e.which ? e.which : e.keyCode;
  var indent_mode = [ indent_block, unindent_block] [e.shiftKey +0];
  var sT  = field.scrollTop;

  if (ch != 9)
    return;

  field.focus();

  /*******************************************/
  /* STOP EVENT FROM BUBBLE-HOAX             */
  /*******************************************/
  if (e.preventDefault)  {e.preventDefault  ();}
  if (e.stopPropagation) {e.stopPropagation ();}

  e.cancelBubble =true; e.stopped       =true;
  e.cancel       =true; e.returnValue  =false;
  /*******************************************/

  if (document.selection) { /* IE */
    var sel = document.selection.createRange ();

    var yapaste_com = document.body.createTextRange ();
    ;   yapaste_com.moveToElementText (field);
    ;   yapaste_com.setEndPoint       ("EndToStart", sel);

    var new_range = document.body.createTextRange ();
    ;   new_range.setEndPoint ("StartToEnd", yapaste_com);

    if (sel.text.indexOf ("\r\n") != -1) { /* MULTI-LINE SELECTION */
      var lines = sel.text.split ("\r\n");

      for (var i=0; i < lines.length; ++i) {
        lines[i] = indent_mode (lines[i]);
      }

      sel.text = lines.join ("\r\n");

      new_range.setEndPoint ("EndToEnd", sel);
      new_range.select ();

    } else { /* SINGLE LINE */
      var is_collapsed = sel.text == '';
      sel.text         = indent_mode (sel.text);

      if (is_collapsed) {
        if (sel.text.length == 0 && indent_mode == unindent_block) {
          sel.moveStart ('character', -1);

          if (sel.text.charAt (0).match ("\t| "))
            sel.text ='';
          else
            sel.moveStart ('character', +1);
        }

        sel.select ();

      } else {
        new_range.setEndPoint ("EndToEnd", sel);
        new_range.select ();
      }
    }

  } else if (field.setSelectionRange) { /* FIREFOX. CHROME, ETC ETC */
    var sP   = field.selectionStart;
    var eP   = field.selectionEnd;

    var text = field.value.substring (sP, eP);
    var inde = indent_mode (text);
    var diff = inde.length - text.length;

    if (text.length == 0 && indent_mode == unindent_block) {
      if (field.value.charAt (sP-1).match ("\t| ")) {
        field.value = field.value.substring (0, --sP) + field.value.substring (eP--);
      }
    }

    field.value   = field.value.substring (0, sP) + inde + field.value.substring (eP);

    field.selectionStart = eP != sP ? sP : sP + diff;
    field.selectionEnd   = eP + diff;

  } else {
    field.value += _t;
  }

  field.scrollTop = sT;
  field.focus ();

  return false;
}

/* -------------------------------------------------------- */
/* -------------------------------------------------------- */

var foozbar = ['paste-content','paste-description','paste-tags'];

for (var i in foozbar) {
  var n =     foozbar[i];
  var _ = document.getElementById (n);

  _.parentNode.getElementsByTagName ('div')[0].style.color = _.value.length && !_.disabled ? "#fff" : "#ddd";
  _.onfocus  = _.onblur   = function (e) {
    this.parentNode.getElementsByTagName ('div')[0].style.color = ((this.value.length) || (e.type == 'focus')) ? "#fff" : "#ddd";
  };

}

