/* $Id: syntaxhighlighter.js,v 1.6 2010/04/05 21:51:59 mattyoung Exp $ */

/**
 * @file
 * SyntaxHighlighter JavaScript.
 *
 * @author: Matthew Young <www.hddigitalworks.com/contact>
 * @author: Tom Kirkpatrick (mrfelton), www.kirkdesigns.co.uk
 */

/**
 * Core behavior for syntaxHighlighter.
 *
 */
 
(function ($) {

Drupal.behaviors.syntaxhighlighter = { attach: function(context) {

  // Initialize settings.
  Drupal.settings.syntaxhighlighter = $.extend({
    tagname: false,
    clipboard: false,
    legacy_mode: false
  }, Drupal.settings.syntaxhighlighter || {});
  
  if ($('body:not(.syntaxhighlighter-processed)', context).length) {
    SyntaxHighlighter.config.strings.expandSource = Drupal.t('expand source');
    SyntaxHighlighter.config.strings.viewSource = Drupal.t('view source');
    SyntaxHighlighter.config.strings.copyToClipboard = Drupal.t('copy to clipboard');
    SyntaxHighlighter.config.strings.copyToClipboardConfirmation = Drupal.t('The code is in your clipboard now');
    SyntaxHighlighter.config.strings.print = Drupal.t('print');
    SyntaxHighlighter.config.strings.help = Drupal.t('?');

    SyntaxHighlighter.config.strings.alert = Drupal.t('SyntaxHighlighter\n\n');
    SyntaxHighlighter.config.strings.noBrush = Drupal.t('Can\'t find brush for: ');
    SyntaxHighlighter.config.strings.brushNotHtmlScript = Drupal.t('Brush wasn\'t made for html-script option: ');

    if (Drupal.settings.syntaxhighlighter.tagname) {
      SyntaxHighlighter.config.tagName = Drupal.settings.syntaxhighlighter.tagname;
    }

    if (SyntaxHighlighter.config.clipboardSwf !== undefined && SyntaxHighlighter.config.clipboardSwf === null && Drupal.settings.syntaxhighlighter.clipboard) {
      SyntaxHighlighter.config.clipboardSwf = Drupal.settings.syntaxhighlighter.clipboard;
    }
    $('body:not(.syntaxhighlighter-processed)', context).addClass('syntaxhighlighter-processed');
  };

  SyntaxHighlighter.highlight();
  if (Drupal.settings.syntaxhighlighter.legacy_mode) {
    dp.SyntaxHighlighter.HighlightAll('code');
  }
}};

})(jQuery);
;
(function ($) {

$(document).ready(function() {

  // Accepts a string; returns the string with regex metacharacters escaped. The returned string
  // can safely be used at any point within a regex to match the provided literal string. Escaped
  // characters are [ ] { } ( ) * + ? - . , \ ^ $ # and whitespace. The character | is excluded
  // in this function as it's used to separate the domains names.
  RegExp.escapeDomains = function(text) {
    return (text) ? text.replace(/[-[\]{}()*+?.,\\^$#\s]/g, "\\$&") : '';
  }

  // Attach onclick event to document only and catch clicks on all elements.
  $(document.body).click(function(event) {
    // Catch the closest surrounding link of a clicked element.
    $(event.target).closest("a,area").each(function() {

      var ga = Drupal.settings.googleanalytics;
      // Expression to check for absolute internal links.
      var isInternal = new RegExp("^(https?):\/\/" + window.location.host, "i");
      // Expression to check for special links like gotwo.module /go/* links.
      var isInternalSpecial = new RegExp("(\/go\/.*)$", "i");
      // Expression to check for download links.
      var isDownload = new RegExp("\\.(" + ga.trackDownloadExtensions + ")$", "i");
      // Expression to check for the sites cross domains.
      var isCrossDomain = new RegExp("^(https?|ftp|news|nntp|telnet|irc|ssh|sftp|webcal):\/\/.*(" + RegExp.escapeDomains(ga.trackCrossDomains) + ")", "i");

      // Is the clicked URL internal?
      if (isInternal.test(this.href)) {
        // Is download tracking activated and the file extension configured for download tracking?
        if (ga.trackDownload && isDownload.test(this.href)) {
          // Download link clicked.
          var extension = isDownload.exec(this.href);
          _gaq.push(["_trackEvent", "Downloads", extension[1].toUpperCase(), this.href.replace(isInternal, '')]);
        }
        else if (isInternalSpecial.test(this.href)) {
          // Keep the internal URL for Google Analytics website overlay intact.
          _gaq.push(["_trackPageview", this.href.replace(isInternal, '')]);
        }
      }
      else {
        if (ga.trackMailto && $(this).is("a[href^=mailto:],area[href^=mailto:]")) {
          // Mailto link clicked.
          _gaq.push(["_trackEvent", "Mails", "Click", this.href.substring(7)]);
        }
        else if (ga.trackOutbound && this.href) {
          if (ga.trackDomainMode == 2 && isCrossDomain.test(this.href)) {
            // Top-level cross domain clicked. document.location is handled by _link internally.
            _gaq.push(["_link", this.href]);
          }
          else {
            // External link clicked.
            _gaq.push(["_trackEvent", "Outbound links", "Click", this.href]);
          }
        }
      }
    });
  });
});

})(jQuery);
;

