// WikipediaPlugin
config.macros.wikipedia = {};
config.macros.wikipedia.handler= function(place,macroName,params) {
   var key=params[0];
   wikify("[["+key+"|http://en.wikipedia.org/wiki/"+key+"]]",place)
}

// PersonPlugin

config.macros.person= { };

// create alias as in AliasPlugin
config.macros.person.helper = function(alias,name,url) {
  // create new macro (as needed) 
  if (config.macros[alias]==undefined) {
    config.macros[alias] = { };
    config.macros[alias].handler = function (place,macroName,params) {
      record = config.macros[macroName];
      if (record.url) {
        wikify("[["+record.name+"|"+record.url+"]]", place)
      } else {
        wikify(record.name, place)
      }
    }
  }
  // fill record
  config.macros[alias].name = name;
  config.macros[alias].url = url;
  // reverse name lookup
  config.macros.person[name.replace(/ /g,"_")]=alias;
}

// parse arguments to macro and call helper
config.macros.person.handler = function(place,macroName,params) {
  var alias=params.shift(); if (!alias) return;
  // don't allow spaces in alias
  alias=alias.replace(/ /g,"_");
  config.macros.person.helper(alias,params[0],params[1]);
}

// reverse lookup
config.macros.personLookup={};
config.macros.personLookup.handler = function(place,macroName,params) {
  var name = params.shift();
  if (!name) return;
  var alias = config.macros.person[name.replace(/ /g,"_")];
  var macro = config.macros[alias]
  if (macro) {macro.handler(place,alias,params)} else {wikify(name,place)}
}

// PublicationPlugin2, which works with PersonPlugin and AliasPlugin
// In Flux

config.macros.pub = {};

function adorn(author) {
   var alias = config.macros[author];
   if (alias) {return alias.name?alias.name:alias.text} else {return author}
}

config.macros.pub.handler= function(place,macroName,params) {
  var type = params[0];
  var key = params[1];
  var year = params[2];
  var title = params[3];
  var authors = params[4].split(",");
  var citation = params[5];
  var url = params[6];

  // expand author aliases
  var aliases = adorn(authors[0]);
  for (var i=1; i < authors.length; i++) {
    aliases = aliases + ", " + adorn(authors[i])
  }
  wikify("''[[" + title + "|" + url + "]]'', " + aliases + ", [[" + citation + "]], " + year, place);
}

// RolloverPlugin
config.macros.rollover = {};
config.macros.rollover.handler= function(place,macroName,params) {
  if (params.length<3) return;
  var name = params[0];
  var img1 = params[1];
  var img2 = params[2];
  var url = (params.length==3) ? img2 : params[3];
  var options = (params.length>=5) ? params[4] : "";
  wikify("<html><a target = '_blank' href='"+url+"' onmouseout=\"document."+name+".src='"+img1+"'\" onmouseover=\"document."+name+".src='"+img2+"'\"> <img "+options+" name='"+name+"' src="+img1+"></a></html>",place)
}



