try { document.execCommand('BackgroundImageCache', false, true); } catch(e) {}

function dom_createElement (nodeName, attributes) {
	var isopera = typeof window.opera != 'undefined';
	var isie = typeof document.all != 'undefined' && !isopera && navigator.vendor != 'KDE';
		
	var newElement;
	try {
		newElement = document.createElement (nodeName);
	}
	catch (error) {
		return null;
	}
	
	var attributesLength = attributes.length;
	for (var i = 0; i < attributesLength; i++) {
		var attribute = attributes[i][0];
		var value = attributes[i][1];
		newElement.setAttribute(attribute, value);
		switch (attribute) {
			case 'id':
				newElement.id = value;
				break;
			case 'class':
				if (isie) {
					newElement.setAttribute ('className', value);
				}
				newElement.className = value;
				break;
			case 'style':
				newElement.style.cssText = newElement.style.cssText + ' ' + value;
				break;
			case 'for':
				if (isie) {
					newElement.setAttribute ('htmlFor', value);
				}
				newElement.htmlFor = value;
		}
	}
	return newElement;
}


function dom_removeWhitespaceTextNodes(node) {
	for (var x = 0; x < node.childNodes.length; x++) {
		var child = node.childNodes [x];
		if (child.nodeType == 3 && !/\S/.test(child.nodeValue)) {
			node.removeChild(node.childNodes[x]);
			x--;
		}
		if (child.nodeType == 1) {
			dom_removeWhitespaceTextNodes(child);
		}
	}
}

function callFunctionOnWindowLoad(functionToCall) {
	if (typeof window.addEventListener != 'undefined') {
		window.addEventListener ('load', functionToCall, false);
	}
	else if (typeof document.addEventListener != 'undefined') {
		document.addEventListener ('load', functionToCall, false);
	}
	else if (typeof window.attachEvent != 'undefined') {
		window.attachEvent ('onload', functionToCall);
	}
	else {
		var oldFunctionToCall = window.onload;
		if (typeof window.onload != 'function') {
			window.onload = functionToCall;
		}
		else {
			window.onload = function () {
				oldFunctionToCall ();
				functionToCall ();
			};
		}
	}
}

function callFunctionOnElementLoad(targetId, functionToCall) {
	var myArguments = arguments;
	callFunctionOnWindowLoad (function () {
		window.loaded = true;
	});
	var targetElement = document.getElementById (targetId);
	if (targetElement == null && !window.loaded) {
		var pollingInterval = setInterval (function () {
			if (window.loaded) {
				clearInterval (pollingInterval);
			}
			targetElement = document.getElementById (targetId);
			if (targetElement != null) {
				clearInterval(pollingInterval);
				var argumentsTemp = new Array();
				var argumentsTempLength = myArguments.length - 2;
				for (var i = 0; i < argumentsTempLength; i++) {
					argumentsTemp[i] = myArguments[i + 2];
				}		
				functionToCall.apply(this, argumentsTemp);
			}
		}, 10);
	}
}


function addEventHandlerOnElementLoad(targetId, eventType, functionToCall, bubbleEventUpDOMTree) {
	callFunctionOnWindowLoad (function () {
		window.loaded = true;

	});
	var targetElement = document.getElementById (targetId);
	if (targetElement == null && !window.loaded) {
		var pollingInterval = setInterval (function () {
			if (window.loaded) {
				clearInterval(pollingInterval);
			}
			targetElement = document.getElementById(targetId);
			if (targetElement != null) {
				clearInterval(pollingInterval);
				addEventHandler(targetElement, eventType, functionToCall, bubbleEventUpDOMTree);
			}
		}, 10);
	}
}


function addEventHandler(targetElement, eventType, functionToCall, bubbleEventUpDOMTree) {
	if (!targetElement) {
		window.status = 'Warning: Tried to attach event to null object';
		return false;
	}
	if (typeof targetElement.addEventListener != 'undefined') {
		targetElement.addEventListener (eventType, functionToCall, bubbleEventUpDOMTree);
	}
	else if (typeof targetElement.attachEvent != 'undefined') {
		targetElement.attachEvent ('on' + eventType, functionToCall);
	}
	else {
		eventType = 'on' + eventType;
		if (typeof targetElement [eventType] == 'function') {
			var oldListener = targetElement [eventType];
			targetElement [eventType] = function () {
				oldListener ();
				return functionToCall ();
			}
		}
		else {
			targetElement [eventType] = functionToCall;
		}
	}
	return true;
}

function removeEventHandler(targetElement, eventType, functionToRemove, bubbleEventUpDOMTree) {
	if (typeof targetElement.removeEventListener != "undefined") {
		targetElement.removeEventListener(eventType, functionToRemove, bubbleEventUpDOMTree);
	}
	else if (typeof targetElement.detachEvent != "undefined") {
		targetElement.detachEvent("on" + eventType, functionToRemove);
	}
	else {
		targetElement["on" + eventType] = null;
	}
	return true;
}

function stopDefaultAction (event)
{
	event.returnValue = false;
	if (typeof event.preventDefault != 'undefined')
	{
		event.preventDefault ();
	}
}
