var tracking = {
  newWin: false, // open link in new window
  prepareLinks: function() {
    if (!document.getElementsByTagName) {
      return;
    }
    var rootHost = tracking.getHost(document.location.href);
    var links = document.getElementsByTagName('a');
    for (var i = 0; i < links.length; i++) {
      var linkHost = tracking.getHost(links[i].href);
      if (linkHost != rootHost) {
        tracking.addEvent(links[i], 'click', tracking.trackLink);
      }
    }
  },
  trackLink: function(event) {
    var htmlElement = document.getElementsByTagName('html')[0];
    // check attributes
    if (!this.getAttribute('rel') ||
        !htmlElement.getAttribute('xml:lang')) {
      return;
    }
    // send tracking to Urchin
    if (window.urchinTracker) {
      var language = htmlElement.getAttribute('xml:lang');
      var rel = this.getAttribute('rel');
      var path = '/tracking/' + language + '/' + rel;
      urchinTracker(path);
    }
    // open link in new window
    if (tracking.newWin) {
      tracking.stopEvent(event);
      window.open(this.getAttribute('href'));
    }
  },
  addEvent: function(obj, type, fn) {
    if (obj.addEventListener) {
      obj.addEventListener(type, fn, false);
    } else if (obj.attachEvent) {
      obj['e'+type+fn] = fn;
      obj[type+fn] = function() {
        obj['e'+type+fn](window.event);
      }
      obj.attachEvent('on'+type, obj[type+fn]);
    }
  },
  stopEvent: function(event) {
    if (event.preventDefault) {
      event.preventDefault();
      event.stopPropagation();
    } else {
      event.returnValue = false;
      event.cancelBubble = true;
    }
  },
  getHost: function(url) {
    var host = url.toLowerCase();
    if (host.indexOf('http://') >= 0) {
      host = host.substring(7, host.length);
    }
    return host.substring(0, host.indexOf('/'));
  }
}

tracking.addEvent(window, 'load', tracking.prepareLinks);
