Index: googleanalytics.js
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/google_analytics/googleanalytics.js,v
retrieving revision 1.3.2.8
diff -u -r1.3.2.8 googleanalytics.js
--- googleanalytics.js	4 Mar 2009 07:25:47 -0000	1.3.2.8
+++ googleanalytics.js	19 Jun 2009 17:28:12 -0000
@@ -2,8 +2,15 @@
 
 Drupal.behaviors.gaTrackerAttach = function(context) {
 
-  // Attach onclick event to all links.
-  $('a', context).click( function() {
+  // Attach an onclick event to body tag. Clicks on links will "bubble up".
+  // This approach is more efficient than attaching to each link, since
+  // all the links can share one handler.
+  $('body', context).click( function(e) {
+    if (e.target.tagName.toLowerCase() != 'a') {
+      return;
+    }
+
+    var link = e.target;
     var ga = Drupal.settings.googleanalytics;
     // Expression to check for absolute internal links.
     var isInternal = new RegExp("^(https?):\/\/" + window.location.host, "i");
@@ -14,26 +21,26 @@
 
     try {
       // Is the clicked URL internal?
-      if (isInternal.test(this.href)) {
+      if (isInternal.test(link.href)) {
         // Is download tracking activated and the file extension configured for download tracking?
-        if (ga.trackDownload && isDownload.test(this.href)) {
+        if (ga.trackDownload && isDownload.test(link.href)) {
           // Download link clicked.
-          var extension = isDownload.exec(this.href);
-          pageTracker._trackEvent("Downloads", extension[1].toUpperCase(), this.href.replace(isInternal, ''));
+          var extension = isDownload.exec(link.href);
+          pageTracker._trackEvent("Downloads", extension[1].toUpperCase(), link.href.replace(isInternal, ''));
         }
-        else if (isInternalSpecial.test(this.href)) {
+        else if (isInternalSpecial.test(link.href)) {
           // Keep the internal URL for Google Analytics website overlay intact.
-          pageTracker._trackPageview(this.href.replace(isInternal, ''));
+          pageTracker._trackPageview(link.href.replace(isInternal, ''));
         }
       }
       else {
-        if (ga.trackMailto && $(this).is("a[href^=mailto:]")) {
+        if (ga.trackMailto && $(link).is("a[href^=mailto:]")) {
           // Mailto link clicked.
-          pageTracker._trackEvent("Mails", "Click", this.href.substring(7));
+          pageTracker._trackEvent("Mails", "Click", link.href.substring(7));
         }
         else if (ga.trackOutgoing) {
           // External link clicked.
-          pageTracker._trackEvent("Outgoing links", "Click", this.href);
+          pageTracker._trackEvent("Outgoing links", "Click", link.href);
         }
       }
     } catch(err) {}
