function eventEdit(elm)
{
  //TODO Don't clobber the existing event if it's unsaved
  var event = {date: dateToStr(new Date)};
  if(elm.id)
  {
    var aMatch = elm.id.match(/^event(\d+)/);
    if(aMatch)
    {
      // Edit event
      event = fetchEvent(aMatch[1]);
      if(!event)
      {
        alert("Sorry, event #" + aMatch[1] + " ('" + elm.innerHTML.unescapeHTML() + "') no longer exists.");
        new Effect.Fade(elm);
        waitForEffectQueue();
        elm.parentNode.removeChild(elm);
      }
    }
    else
    {
      // Add new event
      event = {date: elm.id};
    }
  }

  var child = window.open("about:blank", "addEvent", "width=400,height=500,toolbar=no,top=100,left=100");
  var doc = child.document.open();
  doc.write(calcEventEditHtml());
  doc.close();

  // Fill in the data
  if(event.id)
  {
    doc.title = "Edit event";
    doc.getElementById("eventWindowTitle").innerHTML = "Edit event";
    doc.getElementById("eventDeleteLink").style.display="";
    doc.getElementById("eventID").value = event.id;
  }
  else
  {
    doc.title = "Add new event";
    doc.getElementById("eventWindowTitle").innerHTML = "Add new event";
    doc.getElementById("eventDeleteLink").style.display="none";
  }
  
  if(event.desc)
    doc.getElementById("eventDesc").value = event.desc;

  if(event.date)
  {
    var d = strToDate(event.date);
    doc.getElementById("eventYear").value = d.getFullYear();
    doc.getElementById("eventMonth").value = (d.getMonth() + 1);
    doc.getElementById("eventDay").value = d.getDate();
  }

  if(event.notes)
    doc.getElementById("eventNotes").value = event.notes;

  doc.getElementById("eventDesc").focus();  
}