var  EventManager = {

listeners: [],
registerEvent: function(elt, evtType, obj, fn, captures) {


var blnTrouve = false;
var i=0;
var listenerRegistred;
var elementRegistred;
var eventRegistred;

while (i<this.listeners.length && !blnTrouve){
if (this.listeners[i][0] == obj){
blnTrouve = true;
}else{
i++;
}
}
if (blnTrouve){
listenerRegistred = this.listeners[i];
}else{
this.listeners.push([obj, new Array()]);
listenerRegistred = this.listeners[this.listeners.length-1];
}

blnTrouve = false;
i=0;
while (i<listenerRegistred[1].length && !blnTrouve){
if (listenerRegistred[1][i][0] == elt){
blnTrouve = true;
}else{
i++;
}
}

if (blnTrouve){
elementRegistred =  listenerRegistred[1][i];
}else{
listenerRegistred[1].push([elt, new Array()]);
elementRegistred = listenerRegistred[1][listenerRegistred[1].length-1];
}

blnTrouve = false;
i=0;
while (i<elementRegistred[1].length && !blnTrouve){
if (elementRegistred[1][i][0] == evtType){
blnTrouve = true;
}else{
i++;
}
}

if (blnTrouve){
eventRegistred = elementRegistred[1][i];
}else{
elementRegistred[1].push([evtType, fn, captures]);
eventRegistred = elementRegistred[1][elementRegistred[1].length-1];
}

if (elementRegistred[0].addEventListener){
elementRegistred[0].addEventListener(eventRegistred[0],
eventRegistred[1],
eventRegistred[2]);
}
else{
elementRegistred[0].attachEvent ("on" + eventRegistred[0],
eventRegistred[1]);
}

listenerRegistred = null;
elementRegistred  = null;
eventRegistred   = null;
elt      = null;
evtType     = null;
obj      = null;
fn       = null;
captures     = null;

},

unregisterEvent: function(elt, evtType, obj) {

var listenerRegistred;
var elementRegistred;
var eventRegistred;

var i=0;
while (i<this.listeners.length && !listenerRegistred){
if (this.listeners[i][0] == obj){
listenerRegistred = this.listeners[i];

var j=0;
while (j<listenerRegistred[1].length && !elementRegistred){
if (listenerRegistred[1][j][0] == elt){
elementRegistred =  listenerRegistred[1][j];

var k=0;
while (k<elementRegistred[1].length && !eventRegistred){

if (elementRegistred[1][k][0] == evtType){
eventRegistred = elementRegistred[1][k];

if (elementRegistred[0].removeEventListener){
elementRegistred[0].removeEventListener(eventRegistred[0],
eventRegistred[1],
eventRegistred[2]);
}
else{
elementRegistred[0].detachEvent ("on" + eventRegistred[0],
eventRegistred[1]);
}

elementRegistred[1].splice(k,1)

}else{
k++;
}
}
if (elementRegistred[1].length == 0){
listenerRegistred[1].splice(j,1);
}

}else{
j++;
}
}
if (listenerRegistred[1].length == 0){
this.listeners.splice(i,1);
}

}else{
i++;
}
}

listenerRegistred = null;
elementRegistred  = null;
eventRegistred   = null;
elt      = null;
evtType     = null;
obj      = null;

},

unregisterElement: function(elt, obj) {

var listenerRegistred;
var elementRegistred;
var eventRegistred;

var i=0;
while (i<this.listeners.length && !listenerRegistred){
if (this.listeners[i][0] == obj){
listenerRegistred = this.listeners[i];

var j=0;
while (j<listenerRegistred[1].length && !elementRegistred){

if (listenerRegistred[1][j][0] == elt){
elementRegistred =  listenerRegistred[1][j];

while (elementRegistred[1].length>0){

eventRegistred = elementRegistred[1][0];

if (elementRegistred[0].removeEventListener){
elementRegistred[0].removeEventListener(eventRegistred[0],
eventRegistred[1],
eventRegistred[2]);
}
else{
elementRegistred[0].detachEvent ("on" + eventRegistred[0],
eventRegistred[1]);
}

elementRegistred[1].splice(0,1);
}

listenerRegistred[1].splice(j,1);

}else{
j++;
}
}
if (listenerRegistred[1].length == 0){
this.listeners.splice(i,1);
}

}else{
i++;
}
}

listenerRegistred = null;
elementRegistred  = null;
eventRegistred   = null;
elt      = null;
obj      = null;
},

unregisterListener: function(obj) {

var listenerRegistred;
var elementRegistred;
var eventRegistred;

var i=0;
while (i<this.listeners.length && !listenerRegistred){

if (this.listeners[i][0] == obj){

listenerRegistred = this.listeners[i];

while (listenerRegistred[1].length>0){

elementRegistred =  listenerRegistred[1][0];

while (elementRegistred[1].length>0){

eventRegistred = elementRegistred[1][0];

if (elementRegistred[0].removeEventListener){
elementRegistred[0].removeEventListener(eventRegistred[0],
eventRegistred[1],
eventRegistred[2]);
}
else{
elementRegistred[0].detachEvent ("on" + eventRegistred[0],
eventRegistred[1]);
}

elementRegistred[1].splice(0,1);
}
listenerRegistred[1].splice(0,1);
}
this.listeners.splice(i,1);

}else{
i++;
}
}

listenerRegistred = null;
elementRegistred  = null;
eventRegistred   = null;
obj      = null;
},

unregisterAll: function() {

var listenerRegistred;
var elementRegistred;
var eventRegistred;

while (EventManager.listeners.length>0){

listenerRegistred = EventManager.listeners[0];

while (listenerRegistred[1].length>0){

elementRegistred =  listenerRegistred[1][0];

while (elementRegistred[1].length>0){

eventRegistred = elementRegistred[1][0];

if (elementRegistred[0].removeEventListener){
elementRegistred[0].removeEventListener(eventRegistred[0],
eventRegistred[1],
eventRegistred[2]);
}
else{
elementRegistred[0].detachEvent ("on" + eventRegistred[0],
eventRegistred[1]);
}

elementRegistred[1].splice(0,1);
}
listenerRegistred[1].splice(0,1);
}
this.listeners.splice(0,1);
}

listenerRegistred = null;
elementRegistred  = null;
eventRegistred   = null;
},

add: function(element, eventtype, listener, captures) {


var fnEvent = function(event) { listener.handleEvent(event); };
this.registerEvent( element, eventtype, listener, fnEvent, captures);
fnEvent  = null;
eventtype  = null;
element  = null;
captures = null;

},

remove: function(element, eventtype, listener) {
this.unregisterEvent(element, eventtype, listener);
listener = null;
eventtype  = null;
element  = null;
}
}
