var W3CDOM = (document.createElement && document.getElementsByTagName);

addEvent(window, 'load', initAlternatingRows);

function initAlternatingRows()
{
	if (!W3CDOM) return;
    stripe('alternaterows')
}


// this function is needed to work around 
// a bug in IE related to element attributes
function hasClass(obj) {
   var result = false;
   if (obj.getAttributeNode("class") != null) {
       result = obj.getAttributeNode("class").value;
   }
   return result;
}   

function stripe(classToStripe) {


    // if arguments are provided to specify the colours
    // of the even & odd rows, then use the them;
    // otherwise use the following defaults:
    var evenColor = arguments[1] ? arguments[1] : "#fff";
    var oddColor = arguments[2] ? arguments[2] : "#efefef";

    // get a list of all the tables
    var tables = document.getElementsByTagName('table');
  
    // the flag we'll use to keep track of 
    // whether the current row is odd or even
    var stripThisRow = true;  
  
    // if there aren't any tables exit
    if (tables.length==0) { return; }

    // and iterate through them...
    for (var k = 0; k < tables.length; k++) {

        if (hasClass(tables[k])) {
        if (tables[k].getAttributeNode("class").value.indexOf(classToStripe)!=-1) {
  
            // by definition, tables can have more than one tbody
            // element, so we'll have to get the list of child
            // &lt;tbody&gt;s 
            var tbodies = tables[k].getElementsByTagName("tbody");
    
            // and iterate through them...
            for (var h = 0; h < tbodies.length; h++) {
      
                // find all the &lt;tr&gt; elements... 
                var trs = tbodies[h].getElementsByTagName("tr");
                
                // ... and iterate through them
                for (var i = 0; i < trs.length; i++) {
    
                    // avoid rows that have a class attribute
                    // or backgroundColor style
                    if (! hasClass(trs[i]) && ! trs[i].style.backgroundColor) {
    	  
                        // get all the cells in this row...
                        var tds = trs[i].getElementsByTagName("td");
          
                        // and iterate through them...
                        for (var j = 0; j < tds.length; j++) {
          
                            var mytd = tds[j];
    
                           // avoid cells that have a class attribute
                           // or backgroundColor style
                           if (! hasClass(mytd) && ! mytd.style.backgroundColor) {

                                mytd.style.backgroundColor =
                                stripThisRow ? evenColor : oddColor;
              
                            }
                        }
                    }
          
                    // if the class doesn't not have "collapsible" in it, then switch the striping
                    if (tables[k].getAttributeNode("class").value.indexOf('collapsible')==-1) {stripThisRow =  ! stripThisRow;}
          
                    // if the class does have "collapsible" in it and it's every other row
                    if ((tables[k].getAttributeNode("class").value.indexOf('collapsible')!=-1)&&((i % 2)==1)) {stripThisRow =  ! stripThisRow;}

                }
            }
        }
        } 
        // Reset "even" for the next table
        stripThisRow = true;
    }     
}
