function addListener(elm, type, func) {
	if(!elm) {
		return false;
	}

	if(elm.addEventListener) {
		elm.addEventListener(type, func, false);
	} else if(elm.attachEvent) {
		elm.attachEvent("on" + type, func);
	} else {
		return false;
	}

	return true;
}

function removeListener(elm, type, func) {
	if(!elm) {
		return false;
	}

	if(elm.removeEventListener) {
		elm.removeEventListener(type, func, false);
	} else if(elm.detachEvent) {
		elm.detachEvent("on" + type, func);
	} else {
		return false;
	}

	return true;
}

function preventDefault(evt) {
	if(evt && evt.preventDefault) {
		evt.preventDefault();
		evt.currentTarget["on" + evt.type] = function() {return false;};
	} else if(window.event) {
		window.event.returnValue = false;
	}
}

function target(e) {
	if(e && e.target) {
		if(e.target.nodeType == 3) {
			return e.target.parentNode;
		} else {
			return e.target;
		}

	} else if(window.event && window.event.srcElement) {
		return window.event.srcElement;
	}

	return null;
}
