//+ Carlos R. L. Rodrigues

//@ http://jsfromhell.com/geral/event-listener [v1.4]



addEvent = function(o, e, f, s){

	var r = o[r = "_" + (e = "on" + e)] = o[r] || (o[e] ? [[o[e], o]] : []), a, c, d;

	r[r.length] = [f, s || o], o[e] = function(e){

		try{

			(e = e || (window.event ? (arguments = [].slice.call(arguments)).unshift(e = event) || 1 && e : {})).preventDefault || (e.preventDefault = function(){e.returnValue = false;});

			e.stopPropagation || (e.stopPropagation = function(){e.cancelBubble = true;});

			e.target || (e.target = e.srcElement || null);

			e.key = (e.which + 1 || e.keyCode + 1) - 1 || 0;

		}catch(f){}

		for(d = 1, f = r.length; f; r[--f] && (a = r[f][0], o = r[f][1], a.apply ? c = a.apply(o, arguments) : (o._ = a, c = o._(e), o._ = null), d &= c !== false));

		return e = null, !!d;

    }

};



removeEvent = function(o, e, f, s){

	for(var i = (e = o["_on" + e] || []).length; i;)

		if(e[--i] && e[i][0] == f && (s || o) == e[i][1])

			return delete e[i];

	return false;

};