/*
	Author: Daniel J. Carter
	Created: 04/22/2008
	Inspired by: http://dean.edwards.name/weblog/2005/10/add-event/
*/
/*

	PLEASE NOTE!  With Listener, your eventType should NOT have the 'on'.
	For 'onclick', just use 'click'

	WHAT YOU PASS => Listener.add( 'id', 'eventType', function );

	EXAMPLE:

	Listener.add( 'myElementsIdHere', 'click', function() {
		//in here the keyword 'this' is the element you clicked on.
		alert( 'you clicked me! ' + this.id );
	} );

*/
var Listener = {
	eid: 1,
	add: function(e, t, h) {
		e = Listener.getE(e);
		if (!h.__eid) h.__eid = Listener.eid++;
		if (!e._evts) {
			e._evts = {};
		}
		var hs = e._evts[t];
		if (!hs) {
			hs = e._evts[t] = {};
			if (e['on'+t]) hs[0] = e['on'+t];
		}
		hs[h.__eid] = h;
		e['on'+t] = ListenerHandle;
	},
	remove: function(e, t, h) {
		e = Listener.getE(e);
		if (e._evts && e._evts[t]) delete e._evts[t][h.__eid];
	},
	removeAll: function(e, t) {
		e = Listener.getE(e);
		if (e._evts && e._evts[t]) e._evts[t] = {};
		e['on'+t] = null;
	},
	fixEvent: function(e) {
		e.preventDefault = Listener.prevDef;
		e.stopPropagation = Listener.stopProp;
		return e;
	},
	prevDef: function() { this.returnValue = false; },
	stopProp: function() { this.cancelBubble = true; },
	getE: function(e) { return ( typeof e == 'string' ) ? (document.getElementById?document.getElementById(e):null) : e; }
}

function ListenerHandle(ev) {
	ev = ev ? ev : window.event ? Listener.fixEvent(window.event) : null;
	var h = this._evts[ev.type], r = true;
	for (var i in h) {
		this.__evHandle = h[i];
		if (this.__evHandle(ev) === false) r = false;
	}
	this.__evHandle = null;
	return r;
}
