// Usage: aoItems = getElementsByClass("my_class", "html_tag", document.getElementById("css_id"));
// pcTag and poContainer are optional, for speed.

function getElementsByClass ( pcSearchClass, pcTag, poContainer ) {
	var aoResult = [];
	poContainer = poContainer||document;
	pcTag = pcTag||'*';
	var oPattern = new RegExp("(^|\\s)"+pcSearchClass+"(\\s|$)");
	var aoElements = poContainer.getElementsByTagName(pcTag);
	var nLen = aoElements.length;
	for (var nL = 0; nL < nLen; nL++) {
		if (oPattern.test(aoElements[nL].className)) {
			aoResult[aoResult.length] = aoElements[nL];
		}
	}
	return aoResult;
}

// Usage: aoItems = getElementsByAttribute("className", "my_class", document.getElementById("css_id"));
// poContainer is optional, for speed.

function getElementsByAttribute ( pcAttribute, pcValue, poContainer ) {
	var aoResult = [];
	poContainer = poContainer||document;
	var aoElements = poContainer.all||poContainer.getElementsByTagName('*');
	var nLen = aoElements.length;
	for (var nL = 0; nL < nLen; nL++) {
		if (aoElements[nL].getAttribute(pcAttribute) == pcValue) {
			aoResult[aoResult.length] = aoElements[nL];
		}
	}
	return aoResult;
}

// Usage:
// var helloElms = getElementsByCondition(function(el){return el.className.indexOf('hello')>-1});
// or:
// var hidden = getElementsByCondition(function(el){if(el.className=='hiders'){el.style.display='none';return el}});

function getElementsByCondition ( pxCondition, poContainer ) {
	var aoResult = [];
	poContainer = poContainer||document;
	var aoElements = poContainer.all||poContainer.getElementsByTagName('*');
	var nLen = aoElements.length;
	for (var nL = 0; nL < nLen; nL++) {
		var oElement = aoElements[nL];
		if ( pxCondition(oElement, nL) ) {
			aoResult[aoResult.length] = oElement;
		}
	}
	return aoResult;
}

