function getSelection(ta)
  { var bits = [ta.value,'','','']; 
    if(document.selection)
      { var vs = '#$%^%$#';
        var tr=document.selection.createRange()
        if(tr.parentElement()!=ta) return null;
        bits[2] = tr.text;
        tr.text = vs;
        fb = ta.value.split(vs);
        tr.moveStart('character',-vs.length);
        tr.text = bits[2];
        bits[1] = fb[0];
        bits[3] = fb[1];
      }
    else
      { if(ta.selectionStart == ta.selectionEnd) return null;
        bits=(new RegExp('([\x00-\xff]{'+ta.selectionStart+'})([\x00-\xff]{'+(ta.selectionEnd - ta.selectionStart)+'})([\x00-\xff]*)')).exec(ta.value);
      }
     return bits;
  }

function matchPTags(str)
  { str = ' ' + str + ' ';
    ot = str.split(/\[[B|U|I].*?\]/i);
    ct = str.split(/\[\/[B|U|I].*?\]/i);
    return ot.length==ct.length;
  }

function addPTag(taId,pTag)
  {
    var ta = document.getElementById(taId);
    bits = getSelection(ta);
    if(bits)
      { if(!matchPTags(bits[2]))
          { alert('\t\tInvalid Selection\nSelection contains unmatched opening or closing tags.');
            return;
          }
        ta.value = bits[1] + '<' + pTag + '>' + bits[2] + '</' + pTag + '>' + bits[3];
      }
    else
	  {
	    if (pTag.toLowerCase() == 'vfp')
	        {
                insertAtCursor(ta, '\n<vfp>\n* your code here\n</vfp>\n') ;
            }
        else
            {
                insertAtCursor(ta, '<' + pTag + '>your text here</' + pTag + '>\n') ;
            }
	    // alert('Please make a text selection before clicking this button.');
	  }
  }

function Trim(s) 
{
	while (s.substring(0,1) == ' ') 
	{
		s = s.substring(1,s.length);
	}
	while (s.substring(s.length-1,s.length) == ' ') {
		s = s.substring(0,s.length-1);
	}
	return s;
}

function HandleKeyDown(obj) {
   var tabKeyCode = 9;
   if (event.keyCode == tabKeyCode && event.srcElement == obj) {
      obj.selection = document.selection.createRange();
      obj.selection.text = String.fromCharCode(tabKeyCode);
      event.returnValue = false;
   }
}

function clickButton(btnId)
  {
    var btn = document.getElementById(btnId);
    if (btn) { btn.click(); }
    return false;
  }
  

function addIDTag(taId)
  {
    var ta = document.getElementById(taId);
    bits = getSelection(ta);
    if(bits)
      { if(!matchPTags(bits[2]))
          { alert('\t\tInvalid Selection\nSelection contains unmatched opening or closing tags.');
            return;
          }
        ta.value = bits[1] + '<id>' + bits[2] + '</id>' + bits[3];
      }
    else
	  {
         insertAtCursor(ta, '<id>Message ID here</id>') ;
	  }
  }

// edd 20080419: add support for emoticon toolbar button //
function addETag(ta,pTag)
{
    insertAtCursor(window.parent.document.getElementById(ta), " " + pTag + " ");
}

function insertAtCursor(myField, myValue) 
{
    //IE support
    if (document.selection) 
    {
        myField.focus();
        sel = document.selection.createRange();
        sel.text = myValue;
    }
    //MOZILLA/NETSCAPE support
    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);
    } 
    else 
    {
        myField.value += myValue;
    }
}