/**
 * helpers
 */

// 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;
}

/**
 * original source http://www.alistapart.com/articles/zebratables/
 * - modified for use only 'class' on tr tags
 *
 * @param string tableId
 *
 * [@param string evenColorClass]
 * [@param string oddColorClass]
 */
function stripe(tableId) {

    // the flag we'll use to keep track of
    // whether the current row is odd or even
    var even = false;

    // if arguments are provided to specify the colours
    // of the even & odd rows, then use the them;
    // otherwise use the following defaults:
    var evenColorClass = arguments[1] ? arguments[1] : "even";
    var oddColorClass = arguments[2] ? arguments[2] : "odd";

    // obtain a reference to the desired table
    // if no such table exists, abort
    var table = document.getElementById(tableId);
    if (! table) { return; }

    // 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++) {

		var currClass = even ? evenColorClass : oddColorClass;
		var applyClass = hasClass(trs[i]) ? trs[i].className +' '+ currClass : currClass;

		trs[i].className = applyClass;

        // flip from odd to even, or vice-versa
        even =  ! even;
      }//fore tr
    }//fore tbody
}

