function update_subtabs() {
  var start = 0;
  var end = num_subtabs;
  //alert('cur '+cur_subtab+' sel '+selected_page);

  // Draw the left "...", if necessary.
  if (cur_subtab > 0) {
    var subtab = document.getElementById("subtab-0");
    subtab.innerHTML =
        '<a href="javascript:void(0);" onclick="shift_subtabs(' +
        -(num_subtabs-2) + ')">...</a>';
    start = start + 1;
  }

  // Draw the right "...", if necessary.
  if (cur_subtab < subtab_urls.length-num_subtabs) {
    var subtab = document.getElementById("subtab-"+(num_subtabs-1));
    subtab.innerHTML =
        '<a href="javascript:void(0);" onclick="shift_subtabs(' +
        (num_subtabs-2) + ')">...</a>';
    end = end - 1;
  }

  // Draw the selected tabs.
  for (var i=start; i<end; i++) {
    var subtab = document.getElementById("subtab-"+i);
    var pagenum = i+cur_subtab-start;
    subtab.innerHTML = '<a href="'+subtab_urls[pagenum]+'">'+
                        subtab_labels[pagenum]+'</a>';
  }

  // Reset css styles.
  for (var i=0; i<num_subtabs; i++) {
    var subtab = document.getElementById("subtab-"+i);
    var elt = subtab.childNodes.item(0);
    elt.style.background = '#c0d0e0';
    elt.style.borderBottom = '1px solid black';
    elt.style.color = '#444';
  }

  // Select this pages tab.
  var selpage;
  if (selected_page < cur_subtab)
    seltabnum = 0;
  else if (selected_page >= (cur_subtab+num_subtabs-start)) {
    seltabnum = num_subtabs-1;
  } else {
    seltabnum = selected_page-cur_subtab+start;
  }
  var seltab = document.getElementById("subtab-"+seltabnum);
  var elt = seltab.childNodes.item(0);
  elt.style.background = '#e0e8ff';
  elt.style.borderBottom = '1px solid #e8f0f8';
  elt.style.color = '';
}

function shift_subtabs(delta) {
  if (subtab_urls.length <= num_subtabs)
    return; // This shouldn't happen.

  cur_subtab = cur_subtab + delta;
  if (cur_subtab < 0)
    cur_subtab = 0;
  if (cur_subtab > subtab_urls.length - num_subtabs)
    cur_subtab = subtab_urls.length - num_subtabs;
  update_subtabs()
}
