// containers
var openTags = [];
var setCaretPos = 0;
// color settings
var openClr = "#ff0000"; // "#aaa"
var closedClr = "#000";

function getCaretPosition(oField) {
  var iCaretPos = 0;
  if (document.selection) { 
    oField.focus();
    var oSel = document.selection.createRange ();
    oSel.moveStart ('character', -oField.value.length);
    iCaretPos = oSel.text.length;
  }
  else if (oField.selectionStart || oField.selectionStart == '0')
    iCaretPos = oField.selectionStart;
  return (iCaretPos);
}

function setCaretPosition(oField, iCaretPos) {
  if (document.selection) { 
    oField.focus();
    var oSel = document.selection.createRange ();
    oSel.moveStart ('character', -oField.value.length);
    oSel.moveStart ('character', iCaretPos);
    oSel.moveEnd ('character', 0);
    oSel.select ();
  }
  else if (oField.selectionStart || oField.selectionStart == '0') {
    oField.selectionStart = iCaretPos;
    oField.selectionEnd = iCaretPos;
    oField.focus();
  }
}

function insertAtCursor(myField, myValue) {
  if (document.selection) {
    myField.focus();
    sel = document.selection.createRange();
    sel.text = myValue;
  } else if (myField.selectionStart || myField.selectionStart == '0') {
    var startPos = myField.selectionStart;
    var endPos = myField.selectionEnd;
    myField.value = myField.value.substring(0, startPos)
      + myValue
      + myField.value.substring(endPos, myField.value.length);
      setCaretPosition(myField, (startPos + myValue.length));
  } else {
      myField.value += myValue;
  }
}

function tag_is_open(tag) {
  if (openTags.indexOf(tag) >= 0) {
    return true;
  } else {
    return false;
  }
}

function updateBtn(btn, clr) {
  $('btn_' + btn).setStyle({
    color: clr
  })
}

function toggleTag(tag, el) {
  if (!tag_is_open(tag)) {
    openTags[openTags.length] = tag;
    insertAtCursor(el, "[" + tag + "]");
    updateBtn(tag, openClr);
  } else {  
    openTags[openTags.indexOf(tag)] = null;
    openTags.compact();
    insertAtCursor(el, "[/" + tag + "]");
    updateBtn(tag, closedClr);
  }
  el.focus();
}