(function($){$.fn.markupEditor=function(opts)
{var $$=this;$$.wrap('<div class="markup-editor" />');var buttons=$('<div class="buttons" />').insertBefore($$);for(var i in opts.commands)
{(function(cmd){$('<a href="#">&nbsp</a>').addClass(cmd.name.toLowerCase().replace(/\W+/,'_')).attr('title',cmd.name+(cmd.key?': Ctrl-'+cmd.key.toUpperCase():'')).appendTo(buttons).click(function(e)
{e.preventDefault();if(cmd.trigger)
{cmd.trigger($$);}
else if(cmd.replace)
{$$.replaceSelection(cmd.replace);}});})(opts.commands[i]);}
if(opts.help_link)
{$('<a class="help" target="_blank">&nbsp;</a>').attr('href',opts.help_link).appendTo(buttons);}
$$.keydown(function(e)
{if(e.ctrlKey||e.metaKey)
{for(var i in opts.commands)
{var cmd=opts.commands[i];if(cmd.key&&cmd.key.toLowerCase()==String.fromCharCode(e.keyCode).toLowerCase())
{e.preventDefault()
e.stopPropagation()
$$.replaceSelection(cmd.replace);}}}});return this;}})(jQuery);