  // 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(id) {



    // the flag we'll use to keep track of 

    // whether the current row is odd or even

    var even = false;

  

	// Set the alternate color in the method call arguments

	var evenColor; 

	

	

	

	

	

	// hard coded here and applies to all tables.

	/*

	*********

	*********

	*/

	

    var oddColor = "#f0f0f0"; /*ebf2fd*/

	

    /*

	*********

	*********

	*/ 

	// hard coded here and applies to all tables.

	

	

	

	

	 

	 // Populate 2 arrays with the arguments,

	 // separating the colors from the ID's.

	 var colorArray = new Array();

	 var cArrayCount = 0;

	 

	 var IdArray = new Array();

	 var IdArrayCount = 0;

	 

	 // This script assumes that the arguements always

	 // come in pairs: ID / evenColor. So the first

	 // argument will always be the ID.

	 for (i_id = 0; i_id < arguments.length; i_id++) {

	 	

		// Since the function arguments are formatted in ID/color pairs,

		// and the first argument is an ID, when %2 == 0 

		// it will be a element ID and not a color.

		if (i_id%2 == 0) {

			IdArray[IdArrayCount] = arguments[i_id];

			IdArrayCount++;

		}

		else {

			colorArray[cArrayCount] = arguments[i_id];

			cArrayCount++;			

		}

	 }

	 // Populate 2 arrays with arguments

	 

	 

	 

	 

	 /*

	 // Testing code for the arrays

	 alert("Color Array has: "+ colorArray.length);

	 alert("ID Array has: "+IdArray.length);

	 

	 for (a = 0; a < colorArray.length; a++) {

	 	alert(colorArray[a]);	 	

	 }

	 

	  for (a = 0; a < IdArray.length; a++) {

	 	alert(IdArray[a]);	 	

	 }

	 // Testing code for the arrays

	 */

	 

	

	

	 // color the rows for each table as defined in the function arguments

	 for (a = 0; a < IdArray.length; a++) {	 	 

		  		 

		 	     evenColor = colorArray[a]; 		

		 			 

		 		// obtain a reference to the desired table

				// if no such table exists, abort

				var table = document.getElementById(IdArray[a]);

				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++) {

			

					// avoid rows that have a class attribute

					// or backgroundColor style

					if (! hasClass(trs[i]) &&

						! trs[i].style.backgroundColor) {

					  

					  

					  //shaun add.. get all the table header cell tags in this row

					 /* var ths = trs[i].getElementsByTagName("th");

					 for (var k = 0; k < ths.length; k++) {

					

						var myth = ths[k];

			

						// avoid cells that have a class attribute

						// or backgroundColor style

						if (! hasClass(myth) &&

							! myth.style.backgroundColor) {

					

						  myth.style.backgroundColor =

							even ? evenColor : oddColor;

						

						}

					  }

					 // end shaun add

					 */

					  

					  

					  // 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 =

							even ? evenColor : oddColor;

						

						}

					  }

					}

					// flip from odd to even, or vice-versa

					even =  ! even;

				  }

				}

		} // for loop		

  }

