CmdUtils.CreateCommand({
  name: "dict",
  takes: {word: noun_arb_text},
  
  homepage: "http://www.damianbrady.com.au",
  author: {name: "Damian Brady", homepage: "http://www.damianbrady.com.au"},
  license: "Public Domain",
  icon: "chrome://ubiquity/content/icons/search.png",

  _lookup_prefix: "http://www.google.com.au/search?hl=en&q=define:",
  _lookup_suffix: "&oi=glossary_definition",
  _lookup_regexp: /<ul type="disc">(.*?)[\r\n]/gi,
  _lookup_help: "<em>Looks up a word using google's 'define' function</em>",

  _toTitlecase: function ( toconvert ) {
    toconvert = toconvert.toLowerCase();
    var myword = "";
    var mywords = toconvert.split(' ');
    for (var i=0;i<mywords.length;i++) {
      myword += mywords[i].substr(0,1).toUpperCase() + mywords[i].substr(1) + " ";
    }
    return myword;
  },

  execute: function( directObj ) {
    var expression = directObj.text;
    var url = this._lookup_prefix + encodeURIComponent(expression) + this._lookup_suffix;
    Utils.openUrlInBrowser( url );
  },

  preview: function(pblock, directObj) {
    var expression = directObj.text;
    var cmd = this;
    if (!expression || expression.length < 1)
    {
      pblock.innerHTML = cmd._lookup_help;
    }
    else
    {
      var exprCapitalized = cmd._toTitlecase(expression);

      pblock.innerHTML = "looking up " + expression + "...";

      jQuery.get( cmd._lookup_prefix + encodeURIComponent(expression) + cmd._lookup_suffix, {}, 
        function( result_page ) {
          var matchresult = result_page.match(cmd._lookup_regexp);
          if (matchresult) {
            pblock.innerHTML = "<h2>" + exprCapitalized + "</h2>" + matchresult + 
              "</ul><br/><font size=-1><u><a href=\"" + 
              cmd._lookup_prefix + encodeURIComponent(expression) +
              cmd._lookup_suffix + "\">More definitions...</a></u></font>";
          } else {
            pblock.innerHTML = "Unknown word '" + expression + "'";
          }
        });
    }
  }
});
