/*
  Geef een HTML table zebra strepen.  In tabellen met de class "list" worden
  rijen afwisselend automatisch van een "oddRow" en "evenRow" class
  voorzien.  Als een tabel tbody's bevat worden deze alleen ge-zebra-ed, in
  elke tbody wordt de teller weer op 0 gezet (odd) en elke eerste rij in z'n
  groep wordt ook voorzien van de class "first-child".
  
  Attributen:
    class="list"  hiermee geef je aan dat een tabel gestreept moet worden
  
  Voorbeeld:
  
  <style>
    tr.oddRow { background-color: green; }
    tr.evenRow { background-color: red; }
  </style>
  <table class="list">
    <tr>
      <td>bla</td>
      <td>die</td>
      <td>bla</td>
    </tr>
    <tr>
      <td>la</td>
      <td>die</td>
      <td>da</td>
    </tr>
  </table>
*/

var Zebra = {
  init: function () {
    var tables = document.getElementsByTagName("table");
    for (var i = 0; i < tables.length; i++) {
      if (Element.hasClassName(tables[i], 'list')) {
        Zebra.zebra(tables[i]);
      }
    }
  },
  
  zebra: function (table) {
    var odd = 'oddRow';
    var even = 'evenRow';
    var firstChild = 'first-child';
    
    // verzamel groepen met TRs
    var tbodys = [];
    var nl = table.childNodes;
    for (var i = 0; i < nl.length; i++) {
      if (nl[i].nodeName == 'TBODY') {
        tbodys.push(nl[i]);
      }
    }
    if (tbodys.length == 0) {
      tbodys = [table];
    }
    
    // zebra groepen
    for (var i = 0; i < tbodys.length; i++) {
      var current = odd;
      var nl = tbodys[i].childNodes;
      for (var j = 0, n = 0; j < nl.length; j++) {
        if (nl[j].nodeName == 'TR' && Element.visible(nl[j])) {
          var tr = nl[j];

          Element.removeClassName(tr, odd);
          Element.removeClassName(tr, even);
          Element.removeClassName(tr, firstChild);
          
          if (n == 0) {
            Element.addClassName(tr, firstChild);
          }
          n++;

          Element.addClassName(tr, current);
          current = current == even ? odd : even;
        }
      }
    }
  }
};

Event.observe(window, 'load', Zebra.init);

