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);
	}
}