//  Stripe tables dynamically, to avoid having to alternate classes...  

// this function is need 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;
    if (/^(editconferencesessionheader|top3goal)$/.test(result)) {
      result = false;
    }
  }
  return result;
}   

function stripe_tables(startstripe, classesok) {
  tables = document.getElementsByTagName('table');  
  for (i = 0; i < tables.length; i++) {
      if (! /dontStripe/.test(tables[i].className)) {
	  stripe(tables[i], startstripe, classesok);
      }
  }
} 

function stripe(table, startstripe, classesok) {
  if (typeof(startstripe) != 'boolean') { startstripe = true; }

  // the flag we'll use to keep track of 
  // whether the current row is odd or even
  var even = ! startstripe;
  
  // 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] : "#eee";
  var evenColor = "#fff";
  var oddColor = "#eee";

  // obtain a reference to the desired table
  // if no such table exists, abort
  //    var table = document.getElementById(id);
  if (! table) { return; }
  if (typeof(table) == "string") {
      table = document.getElementById(table);
  }	

  var classesAreOk = ( /(standard.*2009)/i.test(table.className) ) ? true : false;
  if (classesok) { classesAreOk = true; }

  // 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 = table.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 ((classesAreOk) || (!hasClass(trs[i]) && ! trs[i].style.backgroundColor)) {
	
	// get all the cells in this row...
	var tds = trs[i].getElementsByTagName("td");
	if (tds.length == 0) {
	   tds = trs[i].getElementsByTagName("th");
	}

	// 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 ((classesAreOk) || (!hasClass(mytd) && ! mytd.style.backgroundColor)) {
	    mytd.style.backgroundColor = even ? evenColor : oddColor;
	  } else if (mytd.getAttributeNode("class") != null) {
	      if (mytd.getAttributeNode("class").value.match(/stripeshaded/)) {
		  mytd.style.backgroundColor = oddColor;
	      } else if (mytd.getAttributeNode("class").value.match(/stripewhite/)) {
		  mytd.style.backgroundColor = evenColor;
	      }
	  }
	}
      }
      // flip from odd to even, or vice-versa
      even =  ! even;
    }
  }
}
