var create: function() {
return function() {
this.initialize.apply(this, arguments);
}
}
}
var ElementListener = Class.create();
ElementListener.prototype =
{
initialize : function()
{
this._listenerInfo =
function(expression, bubbling)
{
this.Expression =
expression;
this.Bubbling =
bubbling;
};
this._listenerList =
function (element, type)
{
this.Element =
element;
this.Type =
type;
this.ListenerInfo =
[];
};
this._listenerHash =
[];
this._addListener = function (element, type,
expression, bubbling)
{
bubbling = bubbling || false;
if(window.addEventListener)
{ //
Standard
element.addEventListener(type, expression,
bubbling);
return true;
}
else if(window.attachEvent)
{ // IE
element.attachEvent('on' + type, expression);
return true;
}
else return false;
};
this._removeListener = function (element, type, expression,
bubbling)
{
bubbling = bubbling || false;
if(window.removeEventListener)
{ //
Standard
element.removeEventListener(type, expression,
bubbling);
return true;
}
else if(window.detachEvent)
{ // IE
element.detachEvent('on' + type, expression);
return true;
}
else return false;
};
},
addListener : function(element, type, expression,
bubbling)
{
for (var i = 0; i < this._listenerHash.length;
i++)
{
var listener =
this._listenerHash[i];
if(listener.Element == element &&
listener.Type == type)
{
if
(this._addListener(element, type, expression, bubbling))
{
listener.ListenerInfo[listener.ListenerInfo.length] =
new this._listenerInfo(expression, bubbling);
}
return;
}
}
if (this._addListener(element, type, expression,
bubbling))
{
var listenerList = new
this._listenerList(element, type);
listenerList.ListenerInfo[listenerList.ListenerInfo.length] = new
this._listenerInfo(expression, bubbling);
this._listenerHash[this._listenerHash.length] = listenerList;
}
},
removeListener : function(element, type, expression,
isRefFunction)
{
for (var i = 0; i <
this._listenerHash.length; i++)
{
var listener =
this._listenerHash[i];
if(listener.Element == element &&
listener.Type == type)
{
if(expression != null
&& arguments.length >= 3)
{
for (var j = 0; j < listener.ListenerInfo.length; j++)
{
var listenerInfo =
listener.ListenerInfo[j];
if
(isRefFunction)
{
if(listenerInfo.Expression == expression)
{
if (this._removeListener(element, type,
listenerInfo.Expression,
listenerInfo.Bubbling))
{
listener.ListenerInfo.splice(j,
1);
j--;
}
}
}
else
{
if(listenerInfo.Expression.toString() ==
expression.toString())
{
if (this._removeListener(element, type,
listenerInfo.Expression,
listenerInfo.Bubbling))
{
listener.ListenerInfo.splice(j,
1);
j--;
}
}
}
}
}
else
{
for (var j
= 0; j < listener.ListenerInfo.length; j++)
{
var listenerInfo =
listener.ListenerInfo[j];
if
(this._removeListener(element, type, listenerInfo.Expression,
listenerInfo.Bubbling))
{
listener.ListenerInfo.splice(j,
1);
j--;
}
}
}
if
(listener.ListenerInfo.length == 0)
{
this._listenerHash.splice(i, 1);
i--;
}
}
}
}
};