  // 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 stripeTables(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 = "#fff";	    /*	*********	*********	*/ 	// 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) {					  					  // 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		  }
