var ClassName =
{
	test: function(elem, name)
	{
		if (!elem){
			return false;
		}
		return this._rName(name).test(elem.className);
	},

	set: function(elem, name)
	{
		if (!elem){
			return;
		}
		if (elem.className != name) {
			elem.className = name;
		}
	},

	add: function(elem, name)
	{
		if (!elem){
			return;
		}
		if (!this.test(elem, name)) {
			elem.className += ' ' + name;
		}
	},

	remove: function(elem, name)
	{
		if (!elem){
			return;
		}
		if (this.test(elem, name)) {
			elem.className = normalizeSpace(elem.className.replace(this._rName(name), '$1$2'));
		}
	},

	assign: function(elem, name, test)
	{
		if (!elem){
			return;
		}
		if (test) {
			this.add(elem, name);
		} else {
			this.remove(elem, name);
		}
	},

	replace: function(elem, find, replace)
	{
		if (!elem){
			return;
		}
		if (this.test(elem, find)) {
			elem.className = elem.className.replace(this._rName(find), '$1' + replace + '$2');
		}
	},

	swap: function(elem, one, two)
	{
		if (!elem){
			return;
		}
		if (this.test(elem, one)) {
			this.replace(elem, one, two);
		} else if (this.test(elem, two)) {
			this.replace(elem, two, one);
		} else {
			this.add(elem, one);
		}
	},

	_rName: function(name)
	{
		return new RegExp('(^|\\s+)' + escapeRegexp(name) + '(\\s+|$)', '');
	}
};
