/*
    Written by Jonathan Snook, http://www.snook.ca/jonathan
    Add-ons by Robert Nyman, http://www.robertnyman.com
*/
// Revised version May 11th 2007
function getElementsByOneClassName(elm, tag, className){
	var testClass = new RegExp("(^|\\s)" + className + "(\\s|$)");
	tag = tag || "*";
	elm = elm || document;
	var elements = (tag === "*" && elm.all)? elm.all : elm.getElementsByTagName(tag);
	var returnElements = [];
	var current;
	var length = elements.length;
	for(var i=0; i<length; i++){
		current = elements[i];
		if(testClass.test(current.className)){
			returnElements.push(current);
		}	
	}
	return returnElements;
}

/*
	Revised to support looking for multiple class names,
	no matter in which order they're applied to the element
*/
// Revised version June 9th 2007 by Olivier D. alias ze kat

function getElementsByClassName(oElm, strTagName, oClassNames){
	var arrElements = (strTagName === "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);
	var arrReturnElements = [];
	var arrRegExpClassNames = [];
	if(typeof oClassNames === "object"){
		var oClassesLength = oClassNames.length;
		for(var i=0; i<oClassesLength; i++){
			arrRegExpClassNames.push(new RegExp("(^|\\s)" + oClassNames[i].replace(/\-/g, "\\-") + "(\\s|$)"));
		}
	}
	else{
		arrRegExpClassNames.push(new RegExp("(^|\\s)" + oClassNames.replace(/\-/g, "\\-") + "(\\s|$)"));
	}
	var oElement;
	var bMatchesAll;
	var arrEltsLength = arrElements.length;
	var arrClassesLength = arrRegExpClassNames.length;
	for(var j=0; j<arrEltsLength; j++){
		oElement = arrElements[j];
		bMatchesAll = true;
		for(var k=0; k<arrClassesLength; k++){
			if(!arrRegExpClassNames[k].test(oElement.className)){
				bMatchesAll = false;
				break;
			}
		}
		if(bMatchesAll){
			arrReturnElements.push(oElement);
		}
	}
	return (arrReturnElements);
}

// Array support for the push method in IE 5
if(typeof Array.prototype.push !== "function"){
	Array.prototype.push = ArrayPush;
	function ArrayPush(value){
		this[this.length] = value;
	}
}

/*
	Examples of how to call the function:
	
	To get all a elements in the document with a "info-links" class:
    getElementsByClassName(document, "a", "info-links");
    
	To get all div elements within the element named "container", with a "col" and a "left" class:
    getElementsByClassName(document.getElementById("container"), "div", ["col", "left"]);
*/

