var libDI = {
	getTarget: function(e,tag){
		tag = tag.toLowerCase();
	
		// Get the object that fired the event
		var t = window.event ? window.event.srcElement : e ? e.target : null;
		if(!t) return;
	
		// Climb the DOM untill we find the object we're looking for
		while(t != document.body && t.nodeName.toLowerCase() != tag)
			t = t.parentNode;
			
		// Make sure it is the one we're looking for
		if(t.nodeName.toLowerCase() != tag)
			return null;
	
		return t;
	},
	
	/**
	 * Cross-browser event handling for IE5+ (Win & Mac), NS6+ and Mozilla/Gecko
	 * By Scott Andrew
	 */
	addEvent: function(obj, evType, fn, useCapture) {
		useCapture = useCapture || false;
		if (obj.addEventListener) {
			obj.addEventListener(evType, fn, useCapture);
			return true;
		} else if (obj.attachEvent) {
			var r = obj.attachEvent('on' + evType, fn);
			return r;
		} else {
			obj['on' + evType] = fn;
		}
	},

	getParent: function(el, pTagName){
		if (el == null) return null;
		else if (el.nodeType == 1 && el.tagName.toLowerCase() == pTagName.toLowerCase()) // Gecko bug, supposed to be uppercase
			return el;
		else
			return libDI.getParent(el.parentNode, pTagName);
	}
}