// http server and directory where the ogg files are
var videoURL = "http://stream.goto10.org/makeart09/";  // FIXME TODO confirm this

// list of categories with names, each with a list of videos
var categories = [
  { en: "Exhibition", fr: "Exposition", videos: [
    { url: "", en: "Opening", fr: "Vernissage" },
    { url: "", en: "Exhibition", fr: "Exposition" }
  ]},
  { en: "\"Placard\"", fr: "\"Placard\"", videos: [
    { url: "", en: "No Copy Paste", fr: "No Copy Paste" },
    { url: "", en: "Wesley Smith \"Descent\"", fr: "Wesley Smith \"Descent\"" },
    { url: "", en: "Noyade", fr: "Noyade" },
    { url: "", en: "Taku Unami & Mattin", fr: "Taku Unami & Mattin" }
  ]},
  { en: "Galactic", fr: "Galactique", videos: [
    { url: "", en: "IOhannes Zmölnig \"Do sinusoids dream of electric sweeps?\"", fr: "IOhannes Zmölnig \"Do sinusoids dream of electric sweeps?\"" },
    { url: "", en: "Koray Tahiroğlu \"LiveImprovS~\"", fr: "Koray Tahiroğlu \"LiveImprovS~\"" }
  ]},
  { en: "Hardware", fr: "Hardware", videos: [
    { url: "", en: "Anne Laforet", fr: "Anne Laforet" },
    { url: "makeart-concerts-renihofmuller.ogg", en: "Reni Hoffmüller", fr: "Reni Hoffmüller" },
    { url: "", en: "Mattin", fr: "Mattin" }
  ]},
  { en: "Workshop", fr: "Atelier", videos: [
    { url: "", en: "Fork a house!", fr: "Fork une maison!" }
  ]},
  { en: "Secret agents, expressive programming and virtual machines", fr: "Agents secrets, programmation expressive et machines virtuelles", videos: [
    { url: "", en: "Wesley Smith \"LuaAV\"", fr: "Wesley Smith \"LuaAV\"" },
    { url: "", en: "IOhannes Zmölnig \"iemguts\"", fr: "IOhannes Zmölnig \"iemguts\"" },
    { url: "", en: "Agoston Nagy \"Pure-data\"", fr: "Agoston Nagy \"Pure-data\"" },
    { url: "", en: "Gábor Papp \"Fluxus\"", fr: "Gábor Papp \"Fluxus\"" }
  ]},
  { en: "Totally f*rked", fr: "Complètement f*rké", videos: [
    { url: "makeart-whatthefork-simonyuill.ogg", en: "Simon Yuill", fr: "Simon Yuill" },
    { url: "makeart-whatthefork-wayneclemens.ogg", en: "Wayne Clements \"love2\"", fr: "Wayne Clements \"love2\"" },
    { url: "makeart-whatthefork-deptfordtv.ogg", en: "Adnan Hadzi & Lisa Haskel \"Deptford.TV\"", fr: "Adnan Hadzi & Lisa Haskel \"Deptford.TV\"" },
    { url: "makeart-whatthefork-robmayers.ogg", en: "Rob Myers \"FooCorp\"", fr: "Rob Myers \"FooCorp\"" }
  ]},
  { en: "Hadopi", fr: "Hadopi", videos: [
    { url: "makeart-whatthefork-milovann-yanatchkov.ogg", en: "Cities and architectures: towards open artworks?", fr: "Villes et architectures: vers des œuvres ouvertes?" },
    { url: "", en: "Internet, Freedom and Creation", fr: "Internet, Freedom and Creation" } // FIXME TODO TRANSLATION
  ]},
  { en: "Bottom-up! scriptable design", fr: "Bottom-up! le design en scriptant", videos: [
    { url: "makeart-whatthefork-bottom-up-lafkon.ogg", en: "LAFKON", fr: "LAFKON" },
    { url: "makeart-whatthefork-bottom-up-milovann.ogg", en: "Milovann Yanatchkov", fr: "Milovann Yanatchkov" },
    { url: "makeart-whatthefork-bottom-up-olivierlaruelle.ogg", en: "Olivier Laruelle", fr: "Olivier Laruelle" }
  ]},
  { en: "Breakfast Club with Nathalie Magnan", fr: "Breakfast Club avec Nathalie Magnan", videos: [
    { url: "", en: "Puredyne forking", fr: "Puredyne forking" },  // FIXME TODO TRANSLATION
    { url: "makeart-whatthefork-morningtalk-simon-nathalie.ogg", en: "Simon Yuill explains", fr: "Simon Yuill explains" }  // FIXME TODO TRANSLATION
  ]}
];

// return a closure that adds a video with the right url and fallback text
function addvideo(url, text) { return function(evt) {
  var download = { en: "download", fr: "download" }; // TODO FIXME TRANSLATE
  var doc = document;
  var eh3 = evt.target;
  var ediv = eh3.parentNode;
  var edivv = doc.createElement("div");
  var ev = doc.createElement("video");
//  ev.setAttribute("controls", "controls"); // should this be set? at least in firefox with it set it's annoying to mouse over and out to remove visible controls on load, but unsetting it makes it a pain to pause later (have to right-click to show controls...)
  ev.setAttribute("autoplay", "autoplay");
  ev.setAttribute("src", url);
//  ev.setAttribute("poster", url + ".jpg"); // do any browsers support this yet?
  var ea = doc.createElement("a");
  ea.setAttribute("href", url);
  ea.setAttribute("title", text);
  var edown = doc.createTextNode(download[lang]);
  ea.appendChild(edown);
  ev.appendChild(ea);
  edivv.appendChild(ev);
  ediv.appendChild(edivv);
  eh3.onclick = removevideo(url, text); // behaviour change: toggle
}; }

// return a closure that removes the neighbouring video
function removevideo(url, text) { return function(evt) {
  var doc = document;
  var eh3 = evt.target;
  var ediv = eh3.parentNode;
  var ev = eh3.nextSibling;
  ediv.removeChild(ev);
  eh3.onclick = addvideo(url, text); // behaviour change: toggle
}; }

// called on body load
function init() {
  var doc = document;
  var evs = doc.getElementById("videos");
  if (evs) { // if this page is the videos page
    var c;
    for (c = 0; c < categories.length; c = c + 1) {
      // add a heading for each category that has a non-empty video inside
      var videos = categories[c].videos;
      var nonempty = false;
      var v;
      for (v = 0; v < videos.length; v = v + 1) {
        nonempty = nonempty || videos[v].url != "";
      }
      if (nonempty) {
        var eh3 = doc.createElement("h3");
        var ehead = doc.createTextNode(categories[c][lang]);
        eh3.appendChild(ehead);
        evs.appendChild(eh3);
        var i;
        for (i = 0; i < videos.length; i = i + 1) {
          // add a link for each video that has a non-empty url..
          var video = videos[i];
          if (video.url != "") {
            var url = videoURL + video.url;
            var hash = video.url;
            var text = video[lang];
            var ediv = doc.createElement("div");
            ediv.setAttribute("class", "video");
            var ea = doc.createElement("a");
            ea.setAttribute("href", "#"); // link to nowhere
            ea.setAttribute("class", "videolink");
            var ehead = doc.createTextNode(text);
            ea.appendChild(ehead);
            ediv.appendChild(ea);
            ea.onclick = addvideo(url, text); // link behaviour
            evs.appendChild(ediv);
          }
        }
      }
    }
  }
}


