function ClassManager(_item) {
	this.item = _item;
	this.classNames = this.item.className.split(' ');

	this.setClasses = function() {
		var newClassName = '';
		var newClasses = new Array();
		var needSeparator = false;
		var hasEmpty = false;
		for (var i = 0, length = this.classNames.length; i < length; i++) {
			var cName = this.classNames[i];
			if (cName == '') {
				hasEmpty = true;
			} else {
				newClasses.push(cName);
				if (needSeparator) {
					newClassName += ' ';
				} else {
					needSeparator = true;
				}
				newClassName += cName;
			}
		}
		this.item.className = newClassName;
		if (hasEmpty) {
			this.classNames = newClasses;
		}
	}

	this.hasClass = function(className) {
		var found = false;
		for (var i = 0, length = this.classNames.length; i < length; i++) {
			var cName = this.classNames[i];
			if (cName == className) {
				found = true;
			}
		}
		return found;
	}

    this.removeClass = function(className) {
    	var found = false;
    	for (var i = 0, length = this.classNames.length; i < length; i++) {
    		var cName = this.classNames[i];
    		if (cName == className) {
    			this.classNames[i] = '';
    			found = true;
    		}
    	}
    	if (found) {
    		this.setClasses();
    	}
    	return found;
    }

	this.addClass = function(className) {
		var needToAdd = !this.hasClass(className);
		if (needToAdd) {
			this.classNames.push(className);
			this.setClasses();
		}
		return needToAdd;
	}

	this.addOrRemoveClass = function(className, add) {
		if (add) {
			this.addClass(className);
		} else {
			this.removeClass(className);
		}
	}

	this.switchClass = function(className) {
		var found = !this.addClass(className);
		if (found) {
			this.removeClass(className);
		}
		return found;
	}

	this.getElementsByClassName = function(className, tagName) {
		var elementsByClassName = new Array();
		var elements;
		if (tagName) {
			elements = this.item.getElementsByTagName(tagName);
		} else {
			elements = new Array(); // TODO get all children
		}
		for (var i = 0, length = elements.length; i < length; i++) {
			var element = elements[i];
			var c = new ClassManager(element);
			if (c.hasClass(className)) {
				elementsByClassName.push(element);
			}
		}
		return elementsByClassName;
	}

	this.getElementByClassName = function(className, tagName) {
		var elements = this.getElementsByClassName(className, tagName);
		return elements.length == 1 ? elements[0] : false;
	}

	this.getFirstElementByClassName = function(className, tagName) {
		var elements = this.getElementsByClassName(className, tagName);
		return elements.length > 0 ? elements[0] : false;
	}
}

