// event.js: cross-browser Listener-style event handling written by Andrew Clover <and@doxdesk.com>, use freely
// version 0.7, 21-Nov-2001
event_list= new Array();
event_level= 0;
if (document.implementation)
if (document.implementation.hasFeature('Events', '2.0'))
event_level= 2;
function event_addListener(esource, etype, elistener) {
var i;
var alreadyTriggering= false;
for (i= 0; i<event_list.length; i++) {
if (event_list[i][0]==esource && event_list[i][1]==etype) {
if (event_list[i][2]==elistener) return;
alreadyTriggering= true;
} }
event_list[event_list.length]= new Array(esource, etype, elistener);
if (!alreadyTriggering) {
if (event_level==2) {
esource.addEventListener(etype, event_trigger_DOM2, true);
} else {
eval(event_trigger_DOM0(etype));
esource['on'+etype]= event_trigger;
if (esource.captureEvents)
esource.captureEvents('Event.'+etype.toUpperCase());
} }
}
function event_removeListener(esource, etype, elistener) {
var i; var e;
var j= 0;
var removedListener= false;
var keepTrigger= false;
for (i= 0; i<event_list.length; i++) {
if (event_list[i][0]==esource && event_list[i][1]==etype) {
if (event_list[i][2]==elistener) {
removedListener= true;
continue;
}
else keepTrigger= true;
}
if (i!=j) event_list[j]= event_list[i];
j++;
}
event_list.length= j;
if (removedListener && !keepTrigger) {
if (event_level==2)
esource.removeEventListener(etype, elistener, true);
else
esource['on'+etype]= window.clientInformation ? null : window.undefined;
}
}
function event_trigger_DOM2(e) {
if (event_dispatch(this, e.type)==false)
e.preventDefault();
}
function event_trigger_DOM0(t) {
return 'function event_trigger() {return event_dispatch(this, \''+t+'\');}';
}
function event_dispatch(esource, etype) {
var i; var r;
var elisteners= new Array();
var result= window.undefined;
for (i= 0; i<event_list.length; i++)
if (event_list[i][0]==esource && event_list[i][1]==etype)
elisteners[elisteners.length]= event_list[i][2];
for (i= 0; i<elisteners.length; i++) {
r= elisteners[i](esource, etype);
if (r+''!='undefined') result= r;
}
return result;
}
function event_prevent(esource, etype) { return false; }

