/*
 * Copyright 2006 Tridium, Inc. All Rights Reserved.
 * Some parts...
 * Copyright 2000 SiteExperts.com/ InsideDHTML.com, LLC
 */                
 
/**
 * Javascript for the TextAreaFE class.  Makes the text editor
 * include many other common features not built into the simple
 * TextArea HTML component.
 *
 * @author    Lee Adcock
 * @creation  27 July 06
 * @version   $Revision$ $Date$
 * @since     Baja 1.0
 */
 

function checkTab(event, element, isIE) 
{
  if((isIE && window.event.keyCode == 9) || (!isIE && event.which == 9)) 
  {
    //element.selection=document.selection.createRange(); 
    if(!event.shiftKey)
      insertAtcursor(element,String.fromCharCode(9));
    else
      removeAtcursor(element,String.fromCharCode(9));
    setTimeout("document.getElementById('"+element.id+"').focus()",0);
    return false;
  }
  return true;
}

function makeBold(element) 
{
  // get things fixed for IE
  if( document.selection ){
    var range = document.selection.createRange();
    var stored_range = range.duplicate();
    stored_range.moveToElementText( element );
    stored_range.setEndPoint( 'EndToEnd', range );
    element.selectionStart = stored_range.text.length - range.text.length;
    element.selectionEnd = element.selectionStart + range.text.length;
  }  

  var startPos = element.selectionStart;
  var endPos = element.selectionEnd;
  if (startPos != endPos) 
  {
    // insert one tab at the cursor location
    element.value = element.value.substring(0, startPos)
      + "*" + myValue + "*"
      + element.value.substring(endPos, element.value.length);
      
    setSelectionRange(element,startPos+1,startPos+1);
    
  }
}

function insertAtcursor(element, myValue) 
{
  // get things fixed for IE
  if( document.selection ){
    var range = document.selection.createRange();
    var stored_range = range.duplicate();
    stored_range.moveToElementText( element );
    stored_range.setEndPoint( 'EndToEnd', range );
    element.selectionStart = stored_range.text.length - range.text.length;
    element.selectionEnd = element.selectionStart + range.text.length;
  }  
  
  // Everyone else
  var startPos = element.selectionStart;
  var endPos = element.selectionEnd;
  if (startPos == endPos) 
  {
    // insert one tab at the cursor location
    element.value = element.value.substring(0, startPos)
      + myValue
      + element.value.substring(endPos, element.value.length);
      
    setSelectionRange(element,startPos+1,startPos+1);
    
  } else {
    // do some smart tabbing
    if(startPos>0 && element.value.substring(startPos-1,startPos)=='\n')
      startPos--;
    var selectedText = element.value.substring(startPos, endPos)
    selectedText = selectedText.replace(/\n([^\z])/gm, "\n\t$1");
    
    element.value = element.value.substring(0, startPos)
      + selectedText
      + element.value.substring(endPos, element.value.length);
  }
}

function removeAtcursor(element, myValue) 
{
  // get things fixed for IE
  if( document.selection ){
    var range = document.selection.createRange();
    var stored_range = range.duplicate();
    stored_range.moveToElementText( element );
    stored_range.setEndPoint( 'EndToEnd', range );
    element.selectionStart = stored_range.text.length - range.text.length;
    element.selectionEnd = element.selectionStart + range.text.length;
  }  
  
  // Everyone else
  var startPos = element.selectionStart;
  var endPos = element.selectionEnd;
  if (startPos == endPos) 
  {
    // if the line is indented, unindent it    
    while(startPos-1>0 && element.value.substring(startPos-1,startPos)!='\n')      
      startPos--;
      
    if(element.value.substring(startPos,startPos+1)!='\t')
    {
      element.value = element.value.substring(0, startPos)
        + element.value.substring(startPos+1, element.value.length);
    }
    
  } else {
    // do some smart tabbing
    while(startPos-1>0 && element.value.substring(startPos,startPos+1)!='\n')      
      startPos--;
            
    var selectedText = element.value.substring(startPos, endPos)
    selectedText = selectedText.replace(/\n\t/gm, "\n");
    
    element.value = element.value.substring(0, startPos)
      + selectedText
      + element.value.substring(endPos, element.value.length);
  }
}

function setSelectionRange(input, selectionStart, selectionEnd) {
  if (input.setSelectionRange) {
    input.focus();
    input.setSelectionRange(selectionStart, selectionEnd);
  }
  else if (input.createTextRange) {
    var range = input.createTextRange();
    range.collapse(true);
    range.moveEnd('character', selectionEnd);
    range.moveStart('character', selectionStart);
    range.select();
  }
} 


