var addHandler = (function()
{
	function ie(element, name, handler)
	{
		return (element.attachEvent(name, handler));
	}

	function ff(element, name, handler, capture)
	{
		return (element.addEventListener(name.replace(/^(on)?(.+)$/, "$2"), handler, capture ? true : false));
	}

	return (window["attachEvent"] ? ie : ff);
})();

var removeHandler = (function()
{
	function ie(element, name, handler)
	{
		return (element.detachEvent(name, handler));
	}

	function ff(element, name, handler, capture)
	{
		return (element.removeEventListener(name.replace(/^(on)?(.+)$/, "$2"), handler, capture ? true : false));
	}

	return (window["detachEvent"] ? ie : ff);
})();

function getAncestorOfType(node, type)
{
	type = type.toLowerCase();
	for (node = node.parentNode; node; node = node.parentNode)
		if (node.tagName.toLowerCase() == type)
			return (node);
	return (null);
}

function getElementsBy(node, property, value, recursive)
{
	var nodes = [];
	var child = null;

	for (var i = 0; i < node.childNodes.length; ++i)
	{
		child = node.childNodes[i];
		if (child[property] == value)
			nodes[nodes.length] = child;
		if (recursive)
			nodes = nodes.concat(getElementsBy(child, property, value, recursive));
	}
	return (nodes);
}

window["preload"] = (function()
{
	if (/MSIE 6\./.test(navigator.appVersion))
	{
		try
		{
		  document.execCommand("BackgroundImageCache", false, true);
		}
		catch (error)
		{
		}
	}

	return (function(src)
	{
		var images = window["preload"]["images"];
		var img = images[images.length] = document.createElement("img");

		img.setAttribute("src", src, 0);
	});
})();

window["preload"]["images"] = [];