/* Add event */

function addEvent(element, type, handler) {
  if (!handler.$$guid) handler.$$guid = addEvent.guid++;
  if (!element.events) element.events = {};
  var handlers = element.events[type];
  if (!handlers) {
    handlers = element.events[type] = {};
    if (element["on" + type]) {
      handlers[0] = element["on" + type];
    }
  }
  handlers[handler.$$guid] = handler;
  element["on" + type] = handleEvent;
};
addEvent.guid = 1;

function removeEvent(element, type, handler) {
  if (element.events && element.events[type]) {
    delete element.events[type][handler.$$guid];
  }
};

function handleEvent(event) {
  event = event || window.event;
  var handlers = this.events[event.type];
  for (var i in handlers) {
    this.$$handleEvent = handlers[i];
    this.$$handleEvent(event);
  }
};


/* Set "target" attribute for external links */

addEvent(window, 'load', function(e) {
	var hrefs = document.links, i = 0, link;
	for (; (link = hrefs[i]); i++) {
		if (link.className && link.className.indexOf('external') !== -1) {
			link.target = '_blank';
		}
	}
});
