// source: http://www.alistapart.com/articles/zebratables/

// 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;
}

/**
 * @param id table element ID
 * @param evenColor background color for even rows (optional)
 * @param oddColor background color for even rows (optional)
 */
function stripe(id) {

	// 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 and 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";

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

	// find all tbody elements to iterate through
	var tbodyList = table.getElementsByTagName("tbody");
	
	for (var h = 0; h < tbodyList.length; h++) {

		// find all tr elements to iterate through
		var trList = tbodyList[h].getElementsByTagName("tr");

		for (var i = 0; i < trList.length; i++) {
			
			// avoid rows that have a class attribute or backgroundColor style
			if (! hasClass(trList[i]) && ! trList[i].style.backgroundColor) {
				
				// find all td elements to iterate through
				var tdList = trList[i].getElementsByTagName("td");
				
				// and iterate through them...
				for (var j = 0; j < tdList.length; j++) {
					
					var tdNode = tdList[j];
					
					// avoid cells that have a class attribute or backgroundColor style
					if (! hasClass(tdNode) && ! tdNode.style.backgroundColor) {
						tdNode.style.backgroundColor = even ? evenColor : oddColor;
					}
				}
			}
			
			// flip from odd to even, or vice-versa
			even =  ! even;
		}
	}
}