var DOMTools = {
	getElementsByClassName: function(_className, strict)
	{
		if (strict == null) strict = true;
		var gathered = [];
		var elements = document.getElementsByTagName("*");
		var elementCount = elements.length;
		for (var i = 0; i < elementCount; i++)
		{
			var element = elements[i];
			if (strict == true)
			{
				var classes = element.className.split(" ");
				var classCount = classes.length;
				for (var j = 0; j < classCount; j++)
				{
					if (classes[j] == _className)
					{
						gathered.push(element);
						break;
					}
				}
			}
			else
			{
				if (element.className.indexOf(_className) > -1) gathered.push(element);
			}
		}
		return gathered;
	},
		
	getElementsByClassNames: function(_classNames, matchAll, strict)
	{
		if (matchAll == null) matchAll = false;
		if (strict == null) strict = true;
		var gathered = [];
		var elements = document.getElementsByTagName("*");
		var elementCount = elements.length;
		for (var i = 0; i < elementCount; i++)
		{
			var element = elements[i];
			var _classNamesCount = _classNames.length;
			var classes = element.className.split(" ");
			var classCount = classes.length;
			var matchCount = 0;
	
			for (var j = 0; j < _classNamesCount; j++)
			{
				var _className = _classNames[j];
				if (strict == true)
				{
					for (var a = 0; a < classCount; a++)
					{
						if (classes[a] == _className)
						{
							if (matchAll)
							{
								matchCount++;
							}
							else
							{
								gathered.push(element);
								break;
							}
						}
					}
				}
				else
				{
					if (element.className.indexOf(_className) > -1)
					{
						if (matchAll)
						{
							matchCount++;
						}
						else
						{
							gathered.push(element);
							break;
						}
					}
				}
			}
			if (matchAll && matchCount == _classNamesCount) gathered.push(element);
		}
		return gathered;
	}
}
