text: // GUIDO Music Notation plugin for Xinha
  // Implementation by Richard Christophe
  // Original Author - Richard Christophe cvrichard@infonie.fr
  //
  // Distributed under the same terms as HTMLArea itself.
  // This notice MUST stay intact for use (see license.txt).
  
  // this is a collection of JavaScript routines that
  // facilitate accessing the GUIDO NoteServer.
  //
  // These Functions can be used within WEB-Pages
  // examples can be found at
  // www.noteserver.org/javascript/index.html
  //
  
  function NoteServer(editor) {
    this.editor = editor;
    var cfg = editor.config;
    var self = this;
  
    cfg.registerButton({
                  id       : "insertscore",
                  tooltip  : this._lc("Insert GUIDO Music Notation"),
                  image    : editor.imgURL("note.gif", "NoteServer"),
                  textMode : false,
                  action   : function(editor) {
                                  self.buttonPress(editor);
                             }
              });
  	cfg.addToolbarElement("insertscore", "insertimage", 1);
  }
  
  NoteServer._pluginInfo = {
    name          : "NoteServer",
    version       : "1.1",
    developer     : "Richard Christophe",
    developer_url : "http://piano-go.chez.tiscali.fr/guido.html",
    c_owner       : "Richard Christophe",
    sponsor       : "",
    sponsor_url   : "",
    license       : "htmlArea"
  };
  
  NoteServer.prototype._lc = function(string) {
    return Xinha._lc(string, 'NoteServer');
  };
  
  NoteServer.prototype.buttonPress = function(editor) {
    editor._popupDialog( "plugin://NoteServer/codenote", function(param) {
      if (!param) {	// user must have pressed Cancel
        return false;
      } else IncludeGuido(editor,param);
    }, null);
  };
  
  // this variable is the address of the noteserver
  // can be set to another address (local address if availalble) 
  
  // var noteserveraddress = "www.noteserver.org";
  // var htmlbase = "";
  
  // alternative: specify server-adress directly:
  var noteserveraddress = "clef.cs.ubc.ca"; //"www.noteserver.org"
  var htmlbase = "/salieri/nview";
  
  
  // this is the version of the NoteServer used.
  // one of "0_4", "0_5", "0_6", or "0_7", or ""
  // "" means: take the current version
  // var versionstring = "0_7";
  var versionstring = "";
  
  // this functions takes a GMN-string and returns the URL
  // that converts it into a GIF-file
  function GetGIFURL(gmnstring,zoom,pagenum) {
    gmnstring = escape(gmnstring);
    gmnstring = gmnstring.replace(/\//g,"%2F");
  
    if (!zoom) {
      zoom = "1.0";
    }
    if (!pagenum) {
      pagenum = "1";
    }
  
    var string = "http://" + noteserveraddress +
                 "/scripts/salieri" + versionstring +
                 "/gifserv.pl?" +
                 "pagewidth=21" +
                 "&pageheight=29.7" +
                 "&zoomfactor=" + zoom +
                 "&pagesizeadjust=yes" +
                 "&outputformat=gif87" +
                 "&pagenum=" + pagenum +
                 "&gmndata=" + gmnstring;
  
    //	document.write(string);
    return string;
  }
  
  // this functions takes a GMN-string and returns the URL
  // that converts it into a MIDI-file
  function GetMIDIURL(gmnstring) {
    gmnstring = escape(gmnstring);
    gmnstring = gmnstring.replace(/\//g,"%2F");
  
    var string = "http://" + noteserveraddress +
                 "/scripts/salieri" + versionstring + 
                 "/midserv.pl?" +
                 "gmndata=" + gmnstring;
  
    return string;
  }
  
  // this functions takes a GMN-string and returns the URL
  // that insert Applet
  function GetAPPLETURL(gmnstring,zoom) {
    gmnstring = escape(gmnstring);
    gmnstring = gmnstring.replace(/\//g,"%2F");
  
    var string = '<applet ' +
                 'code="NoteServerApplet" ' +
                 'codebase="http://' +
                 noteserveraddress + htmlbase + '/java" ' +
                 ' width=700 height=300>' +
                 '<param name=server value="' +
                 noteserveraddress + '">' +
                 '<param name=serverVersion value="' +
                 versionstring + '">' +
                 '<param name=zoomFactor value="' +
                 zoom + '">' +
                 '<param name=pageWidth value="21">' +
                 '<param name=pageHeight value="29.7">' +
                 '<param name=gmn value="' +
                 gmnstring + '">' +
                 '</applet>';
  
    return string;
  }
  
  // This function takes a GUIDO string, accesses the
  // NoteServer (address specified as a constant above)
  // and then embeds the GIF-Image in the document.
  
  
  function IncludeGuido(editor,param) {
    // this  holds the URL for retrieving the picture ...
  
    if (!param["f_zoom"])
      zoom = "";
    //if (!pagenum)
     // pagenum = "";
  
    var string = GetGIFURL(param["f_code"],param["f_zoom"],"");
    var stringmidi = GetMIDIURL(param["f_code"]);
    var string2 = "<br>";
  
  if (param["f_applet"] == false ){
    if (((navigator.userAgent.toLowerCase().indexOf("msie") != -1)
      && (navigator.userAgent.toLowerCase().indexOf("opera") == -1))) {
      editor.focusEditor();
      editor.insertHTML("<img src=" + string + ">");
    }	else {
      img = new Image();
      img.src = string;
  
      var doc = editor._doc;
      var sel = editor._getSelection();
      var range = editor._createRange(sel);
      editor._doc.execCommand("insertimage", false, img.src);
    }
  } else {
    var stringapplet = GetAPPLETURL(param["f_code"],param["f_zoom"]);
    string2 = string2 + stringapplet + "<br>";
  }
  
  // To test code source in textarea
  //if (param["f_affcode"]) string2 = string2 + Xinha._lc("Source Code","NoteServer") + " :" + '<br> <textarea  cols=60 rows=10 style = "background: #FFFFE6">' +  param["f_code"] + '</textarea> <br>';
  
  if (param["f_affcode"]) string2 = string2 + Xinha._lc("GUIDO Code","NoteServer") + " : "  + param["f_code"] + "<br>";
  if (param["f_midi"]) string2 = string2 + "<a href=" + stringmidi + ">" + Xinha._lc("MIDI File","NoteServer") + "</a> <br>";
  
    editor.focusEditor();
    editor.insertHTML(string2);
  
      //var html = linktext.link(stringmidi);
      //editor.insertHTML(html);
  }
  
  // this routine includes the applet-definition 
  function IncludeGuidoStringAsApplet(editor, gmnstring, zoom) {
    gmnstring = escape(gmnstring);
    gmnstring = gmnstring.replace(/\//g,"%2F");
  
    var string = '<applet ' + 
                 'codebase="http://' + noteserveraddress + htmlbase + '/java"\n' +
                 'code="NoteServerApplet" width=480 height=230>' +
                 "<PARAM NAME=server VALUE='" + noteserveraddress + "'>" +
                 "<PARAM NAME=serverVersion VALUE='" + versionstring + "'>" +
                 "<PARAM NAME=zoomFactor VALUE='"	+ zoom + "'>" +
                 '<param name=pageWidth value="21">' +
                 '<param name=pageHeight value="29.7">' +
                 "<PARAM NAME=gmn VALUE='" + gmnstring + "'>" +
                 "</applet>";
    alert(string);
    editor.focusEditor();
    editor.insertHTML(string);
  }