var commands = new Array(
  'link', 'image', 'gallery', '\n',
  'bold', 'italic', '\n',
//  'underline', 'strikethrough','\n',
//  'justifyleft', 'justifyright', 'justifycenter','\n',
//  'outdent', 'indent','\n',
  'orderedlist', 'unorderedlist','\n',
  'H1', 'H2', 'H3','\n',
  'br', 'hr', 'pre', 'quote', 'def', 'citation', 'acronyme', 'reference', 'anchor'
);
var tooltips = new Array(
  'Insert link', 'Insert image', 'Insert gallery', '\n',
  'Strong', 'Em', '\n',
//  'underline', 'strikethrough','\n',
//  'justifyleft', 'justifyright', 'justifycenter','\n',
//  'outdent', 'indent','\n',
  'Insert ordered list element', 'Insert unordered list element','\n',
  'Title 1', 'Title 2', 'Title 3','\n',
  'Forced line break', 'Line separator', 'Preformatted code', 'Quote', 'Definition', 'Citation', 'Acronym', 'Reference', 'Anchor'
);
var wikiSyntaxes = new Array(
  '[|]', '((|))', '%%|%%', '\n',
  '__|__', "''|''", '\n',
//  '', '', '\n',
//  '', '', '', '\n',
//  '', '', '\n',
  '#', '*', '\n',
  '!!!', '!!', '!', '\n',
  '%%%', '====', ' ', '>', ';|:', '^^|^^', '~~|~~', '{{|}}', '~~|~~'
);

function onSimpleToolbarClicked(e)
{
  var img;

  // 1- retrieve button from event
  if (window.event)
  {
    // internet explorer
    img = window.event.srcElement;
  }
  else
  if (e.target)
  {
    // DOM
    img = e.target;
  }
  else
  {
    return;
  }

  // 2- retrieve textarea
  var textarea = img.textarea;

  // 3- extract wiki tags from image (it does not seem to work on link)
  var wikiStartTag = img.startTag;
  var wikiEndTag   = img.endTag;

  // 4- insert text into textarea
  var range = null;
  if (document.selection && document.selection.createRange)
  {
    // IE
    range = document.selection.createRange().duplicate();
  }

  if (range != null && range.text != '')
  {
    // IE : replace selection
    var sel = range.text;
    range.text = wikiStartTag + sel + wikiEndTag;
  }
  else
  if (typeof(textarea.selectionStart) != 'undefined' && typeof(textarea.selectionEnd) != 'undefined')
  {
    // gecko
    var start      = textarea.value.substring(0, textarea.selectionStart);
    var middle     = textarea.value.substring(textarea.selectionStart, textarea.selectionEnd);
    var end        = textarea.value.substring(textarea.selectionEnd);
    textarea.value = start + wikiStartTag + middle + wikiEndTag + end;
    textarea.setSelectionRange(start.length + wikiStartTag.length, textarea.value.length - end.length - wikiEndTag.length);
  }
  else
  {
    // default : append at end of text
    textarea.value  += wikiStartTag + wikiEndTag;
  }

  if (range == null)
  {
    // do not focus with IE : it makes the page scroll
    textarea.focus();
  }

  return false;
}

function addToolbar(textarea)
{
  // insert a div before simple_toolbar's textarea
  var simple_toolbar_parent = textarea.parentNode;
  var toolbar = document.createElement("div");
  simple_toolbar_parent.insertBefore(toolbar, textarea);

  for (var i = 0; i < commands.length; i++)
  {
    // create a button that bear an image
    var command  = commands[i];

    if (command == '\n')
    {
      var space = document.createElement("span");
      space.style.padding = '0 10px 0 0';
      toolbar.insertBefore(space, null);
    }
    else
    {
      var tooltip = tooltips[i];

      // create image
      var img      = document.createElement("img");
      img.setAttribute("src", "tools/simple_toolbar/images/" + command + ".gif");
      img.style.margin     = '0 2px 0 0';
      img.style.padding    = '0';
      img.style.border     = "1px solid #BBB";
      img.style.width      = '18px';
      img.style.height     = '18px';
      img.style.background = '#DDD';

      // create link
      var a        = document.createElement("a");
      a.appendChild(img);
      a.setAttribute("title", tooltip);

      // emulate :hover css with javascript (don't know how to specify :hover css style in javascript)
      a.onmouseover = function()
      {
        this.childNodes[0].style.background = '#BBB';
        this.childNodes[0].style.border     = '1px solid #DDD';
      }
      a.onmouseout = function()
      {
        this.childNodes[0].style.background = '#DDD';
        this.childNodes[0].style.border     = '1px solid #BBB';
      }

      // set onClick event handler on image
      img.onclick    = onSimpleToolbarClicked;

      // extract wiki startTag and endTag from wiki syntax and add it on image
      var wikiSyntax   = wikiSyntaxes[i];
      var pipePos      = wikiSyntax.indexOf('|', 0);
      var wikiStartTag = '';
      var wikiEndTag   = '';
      if (pipePos != -1)
      {
        wikiStartTag = wikiSyntax.substring(0, pipePos);
        wikiEndTag   = wikiSyntax.substring(pipePos + 1);
      }
      else
      {
        wikiStartTag = wikiSyntax;
      }

      img.startTag = wikiStartTag;
      img.endTag   = wikiEndTag;
      img.textarea = textarea;

      // and finally insert link in toolbar
      toolbar.insertBefore(a, null);
    }
  }
}

function initSimpleToolbar()
{
  var textareas = document.getElementsByTagName('textarea');

  var re = new RegExp('\b*simple_toolbar\b*');
  for (var i = 0; i < textareas.length; ++i)
  {
    // process only textareas with a class of 'simpletoolbar'
    if (re.test(textareas[i].className))
    {
      addToolbar(textareas[i]);
    }
  }
}

addLoadListener(initSimpleToolbar);

