var hcUtilities = {
addListener: function(target, func, event) {
	var arrayName = event + "Listeners";
	var old = target[event];
	if(!target[arrayName]){
		target[arrayName] = new Array();
		target[event] = function(e) { 
			var status = true;
			if(!e) e = window.event;
			for (var j = 0; j < this[arrayName].length; j++) {
				if(this[arrayName][j](this, e) === false){
					status = false;
				}
			}
			return status;
		};
		if(old) {
			target[arrayName][target[arrayName].length] = old;
		}
	}
	target[arrayName][target[arrayName].length] = func;
},

removeListener: function(target, func, event) {
	var arrayName = event + "Listeners";
	if(target[arrayName]){
		for(i = 0; i < target[arrayName].length; i++){
			if(target[arrayName][i] === func){
				target[arrayName].splice(i, 1);
			}
		}
	} else {
		return false;
	}
},

addClassName: function(element, className) {
	var old = element.className;
	if(old == "" || old == null){
		element.className = className;
	} else {
		element.className = element.className + " " + className;
	}
	return element;
},

removeClassName: function(element, className) {
	var old = element.className.split(" ");
	var neue = "";
	for(var i = 0; i < old.length; i++){
		if(old[i] !== className) {
			neue = neue + (neue?" ":"") + old[i];
		}
	}
	element.className = neue;
},

getElementsByClassName: function(className, node){
	var targets = className.split(" ");
	var els = [];
	var searchDepth = function(level){
		var classes = level.className.split(" ");
		for(var j in classes){
			var count = 0;
			for(var k in targets){
				if(classes[j] == targets[k]){
					count++;
				}
			}
			if(count == targets.length){
				els.push(level);
			}
		}
		var children = level.childNodes;
		for(var i in level.childNodes){
			if(children[i].nodeType == 1){
				searchDepth(children[i]);
			}
		}
	}
	searchDepth(node?node:document.body);
	return els;
}
}