/*
 * Onload
 */
Onload = {
  foos: new Array()
};

Onload.run = function() {
  for (var i=0; i<Onload.foos.length; i++)
    Onload.foos[i]();
};

Onload.add = function(foo) {
  Onload.foos[Onload.foos.length] = foo;
  window.onload = Onload.run;
};

/*
 * Display
 */
Display = {
  targets: new Array(),
  pullers: new Array(),
  titles: new Array(),
  maps: new Array()
};

Display.set = function(targets, pullers, titles, maps) {
  var set_id = Display.targets.length;

  Display.targets[set_id] = targets;
  Display.pullers[set_id] = pullers;
  Display.titles[set_id] = titles
  Display.maps[set_id] = maps;

  return set_id;
};

  Display.mapped = function(set_id) {
    if (Display.maps != null && Display.maps[set_id] != null && Display.maps[set_id].length > 0)
      return true;
    return false;
  };

  Display.match = function(set_id, map_id, target_id) {
    var map = Display.maps[set_id][map_id];
    if (map != null) {
      if (map.match(/[, ]/)) {
        map = map.replace(/,/g, " ");
        map = map.replace(/ +/g, " ");
      }
      map = map.split(" ");
      for (var i=0; i<map.length; i++)
        if (Display.targets[set_id][target_id].indexOf(map[i]) > -1)
          return true;
    }
    return false;
  };

  Display.get_title = function(set_id) {
    var amt = new Array();
    var show = new Array();
    var calc = new Array();
    var result = 0;
    var o_target;

    if (Display.mapped(set_id)) {
      for (var i=0; i<Display.maps[set_id].length; i++) {
        amt[i] = 0;
        show[i] = 0;
        for (var k=0; k<Display.targets[set_id].length; k++) {
          if (Display.match(set_id, i, k)) {
            amt[i]++;
            if (o_target = document.getElementById(Display.targets[set_id][k]))
              if (o_target.style.display != "none")
                show[i]++;
          }
        }
        calc[i] = (amt[i] == 0) ? 0 : show[i] / amt[i];
        result = (i == 0) ? 0 : ((calc[i] > calc[result]) ? i : result);
      } // for (i)
    } else { // if (Display.mapped)
      for (var k=0; k<Display.targets[set_id].length; k++) {
        if (o_target = document.getElementById(Display.targets[set_id][k]))
          result = (o_target.style.display == "none") ? result + 1 : result - 1;
      }
      result = (result > 0) ? 0 : 1;
    }
    return result;
  };
  
  Display.reset_titles = function() {
    var o_puller;

    for (var i=0; i<Display.targets.length; i++) {
      var title = Display.get_title(i);
      for (var j=0; j<Display.pullers[i].length; j++) {
        var link = "";
        for (var k=0; k<Display.titles[i].length; k++)
          if (title != k)
            link = link + "<a href=\"#begin-of-page\" onclick=\"javascript:Display.run(" + i + ", " + k + "); return true;\">" + Display.titles[i][k] + "</a> ";
        
        if (o_puller = document.getElementById(Display.pullers[i][j] + "-" + i))
          o_puller.innerHTML = link;
        else if (o_puller = document.getElementById(Display.pullers[i][j]))
          o_puller.innerHTML = "<span id=\"" + Display.pullers[i][j] + "-" + i + "\">" + link + "</span>";
      } // for (j)
    } // for (i)
  };

Display.run = function(set_id, title_id) {
  var pulled = false;

  if (set_id != null)
    pulled = true;

  var o_target;
  if (pulled) { 
    for (var i=0; i<Display.targets[set_id].length; i++) {
      if (o_target =  document.getElementById(Display.targets[set_id][i])) {
        if (Display.mapped(set_id)) {
          if (Display.match(set_id, title_id, i))
            o_target.style.display = "block";
          else
            o_target.style.display = "none";

        } else
          o_target.style.display = (o_target.style.display == "none") ? "block" : "none";
        
      } // if o_target
    } // for (i)
  } // if (pulled)
  
  Display.reset_titles();
};

/*
 * Postroll
 */
Postroll = {
  bar: "recent-entries-toolbar",
  box: "recent-entries-",
  step: 5,
  bar1_txt: "&nbsp;&nbsp;&laquo;&nbsp;&nbsp;&nbsp;&nbsp;",
  bar2_txt: "&nbsp;&nbsp;&nbsp;&nbsp;&raquo;&nbsp;&nbsp;",
  bar1_lnk_title: "Previous 5 entries",
  bar2_lnk_title: "Next 5 entries"
};

Postroll.reset_title = function(current, go) {
  var start, o, bar1, bar2, link = "";

  start = (go > 0) ? current : (current - Postroll.step);
  bar1 = "<a href='#' onclick='Postroll.run(" + start + ", -1); return false;' title='" + Postroll.bar1_lnk_title + "'>" + Postroll.bar1_txt + "</a> ";
  if (document.getElementById(Postroll.box + (start - 1)))
    link = link + bar1;
  
  start = (go > 0) ? (current + Postroll.step) : current;
  bar2 = "<a href='#' onclick='Postroll.run(" + start + ", 1); return false;' title='" + Postroll.bar2_lnk_title + "'>" + Postroll.bar2_txt + "</a> ";
  if (document.getElementById(Postroll.box + (start)))
    link = link + bar2;

  if (o = document.getElementById(Postroll.bar))
    o.innerHTML = link;
};

Postroll.run = function(start, go) {
  var o;

  if (start == null) {
    start = go = 1;

    for (var i=start; ;i++)
      if (o = document.getElementById(Postroll.box + i))
        o.style.display = (i <= Postroll.step) ? "block" : "none";
      else
        break;

  } else {
    for (var i=start; i<start+Postroll.step; i++)
      if (o = document.getElementById(Postroll.box + i))
        o.style.display = (go > 0) ? "block" : "none";

    for (var i=start-1; i>=start-Postroll.step; i--)
      if (o = document.getElementById(Postroll.box + i))
        o.style.display = (go < 0) ? "block" : "none";
  }

  Postroll.reset_title(start, go);
};

