/* onload handler */
function addLoadEventHandlers()  {
	var old = window.onload;
	var args = arguments;
		
	window.onload = function(e)  {
		if (old) old(e);
		for (var i = 0; i < args.length; i++)
			args[i](e);
	}
}


/*
 * Escapes regular expression meta characters from given string.
 */
String.prototype.escapeRxSpecials = function()
{
	return this.replace(/([.*+?^${}()|[\]\/\\])/g, '\\$1');
}


/*
 * Returns true if the node has CSS class with given name; otherwise returns false.
 */
function hasClass(node, className)
{
	return new RegExp('\\b' + className.escapeRxSpecials() + '\\b').exec(node.className);
}

function setClass(node, className)
{
	if (!hasClass(node, className))
		node.className = className + (node.className.length > 0 ? ' ': '') + node.className;
	
	return node;
}


function removeClass(node, className)
{
	var classNames = node.className.split(/\s+/);
	
	for (var i = 0; i < classNames.length; i++) {
		if (classNames[i] == className) {
			classNames.splice(i, 1);
			node.className = classNames.join(' ');
			break;
		}
	}
	
	return node;
}

