addEvent(window, "load", stripe_init);

function stripe_init() {
	if (!document.getElementsByTagName) return;	
	 // Find all elements with class 'stripe' and stripe them
	 
	var aStripeTags = new Array('table', 'ol', 'ul');
	for (var i = 0; i < aStripeTags.length; i++) {
		_assignStripes(document.getElementsByTagName(aStripeTags[i]));
	}
}

function _assignStripes(aStripeElements) {
	for (var i = 0; i < aStripeElements.length; i++) {
		oElem = aStripeElements[i];
        if (((' ' + oElem.className + ' ').indexOf('stripe') != -1) && (oElem.id)) {
			stripeAdd(oElem);
        }
    }
}

/*
	Add 'stripes' to the specified table
*/
function stripeAdd(oElem) {
		
	var aArr = _stripeChildElements(oElem);
	
	var i = 0;
	
	var iOriginalGroupLen = getRowGroupLen('stripe', oElem);
	var iGroupLen = iOriginalGroupLen;
	
	// Check to see if the striping should be started on the even or odd row
	var reEvenCheck = /stripe(-(\\d)*)?-even/;
	var bOn = !(reEvenCheck.test(oElem.className));
	
	for (var j = 0; j < aArr.length; j++) {
		oRows = aArr[j];
		for (var k = 0; k < oRows.length; k++) {
			if (oRows[k].className.indexOf('resetstripe') == -1) {
				if (oRows[k].className.indexOf('nostripe') == -1) {
					removeCSSClass(oRows[k], 'stripe');				
					if (bOn) {
						addCSSClass(oRows[k], 'stripe');
					}
					iGroupLen--;
				}				
			} else {
				bOn = false;
			}			
			if (iGroupLen == 0) {
				iGroupLen = iOriginalGroupLen;
				bOn = !bOn;
			}
		}	
	}
}

function _stripeChildElements(oElem) {
	var aRet = new Array();
	switch (getTag(oElem)) {
		case 'table':
			var oTBodies = oElem.getElementsByTagName('tbody');
			if (oTBodies.length > 0) {
				for (var i = 0; i < oTBodies.length; i++) {
					aRet = aRet.concat((oTBodies[i]).getElementsByTagName('tr'));
				}
			} else {
				aRet = aRet.concat(oElem.getElementsByTagName('tr'));
			}
			break;
		case 'ol':
		case 'ul':
			aRet = aRet.concat(oElem.getElementsByTagName('li'));
			break;
		default:
			return null;
	}
	return aRet;
}

