%PDF- %PDF-
| Direktori : /home/lightco1/www/lightingrepublic.com.au/media/com_files/js/ |
| Current File : /home/lightco1/www/lightingrepublic.com.au/media/com_files/js/delegation.js |
(function(addEvent, removeEvent){
var match = /(.*?):relay\(((?:\(.*?\)|.)+)\)$/,
combinators = /[+>~\s]/,
splitType = function(type){
var bits = type.match(match);
return !bits ? {event: type} : {
event: bits[1],
selector: bits[2]
};
},
check = function(e, selector){
var t = e.target;
if (combinators.test(selector = selector.trim())){
var els = this.getElements(selector);
for (var i = els.length; i--; ){
var el = els[i];
if (t == el || el.hasChild(t)) return el;
}
} else {
for ( ; t && t != this; t = t.parentNode){
if (Element.match(t, selector)) return document.id(t);
}
}
return null;
};
Element.implement({
addEvent: function(type, fn){
var split = splitType(type);
if (split.selector){
var monitors = this.retrieve('delegation:_delegateMonitors', {});
if (!monitors[type]){
var monitor = function(e){
var el = check.call(this, e, split.selector);
if (el) this.fireEvent(type, [e, el], 0, el);
}.bind(this);
monitors[type] = monitor;
addEvent.call(this, split.event, monitor);
}
}
return addEvent.apply(this, arguments);
},
removeEvent: function(type, fn){
var split = splitType(type);
if (split.selector){
var events = this.retrieve('events');
if (!events || !events[type] || (fn && !events[type].keys.contains(fn))) return this;
if (fn) removeEvent.apply(this, [type, fn]);
else removeEvent.apply(this, type);
events = this.retrieve('events');
if (events && events[type] && events[type].keys.length == 0){
var monitors = this.retrieve('delegation:_delegateMonitors', {});
removeEvent.apply(this, [split.event, monitors[type]]);
delete monitors[type];
}
return this;
}
return removeEvent.apply(this, arguments);
},
fireEvent: function(type, args, delay, bind){
var events = this.retrieve('events');
var e, el;
if (args) {
e = args[0];
el = args[1];
}
if (!events || !events[type]) return this;
events[type].keys.each(function(fn){
fn.create({bind: bind || this, delay: delay, arguments: args})();
}, this);
return this;
}
});
})(Element.prototype.addEvent, Element.prototype.removeEvent);
try {
if (typeof HTMLElement != 'undefined')
HTMLElement.prototype.fireEvent = Element.prototype.fireEvent;
} catch(e){}