var hasXMLHttp = true;

function http()
{
	try
	{
		return new XMLHttpRequest();
	}
	catch(e)
	{
		try
		{
			return new ActiveXObject('Msxml2.XMLHTTP.6.0');
		}
		catch(e)
		{
			try
			{
				return new ActiveXObject('Msxml2.XMLHTTP');
			}
			catch(e)
			{
				// :(
			}
		}
	}
}

function hasAttribute(node, attribute)
{
	if(node.hasAttribute)
		return node.hasAttribute(attribute);
	return node.getAttribute(attribute) != null;
}

if(document.getElementsByClassName == undefined)
{
	document.getElementsByClassName = function(classname, root)
	{
		if(root == undefined)
			root = document;
		
		var classRegexp = new RegExp("\\b" + classname + "\\b");
		var results = new Array();
		
		var children = root.childNodes;
		for(var i = 0; i < children.length; i++)
		{
			var exploredNode = children.item(i);
			if(exploredNode.className != null && classRegexp.test(exploredNode.className))
				results.push(exploredNode);
			results = results.concat(document.getElementsByClassName(classname, exploredNode));
		}
		return results;
	}
}