/**
 * Copyright 2011 Google Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

// DO NOT EDIT. Generated by ./google_analytics_snippet_gen.py

#ifndef NET_INSTAWEB_REWRITER_GOOGLE_ANALYTICS_SNIPPET_H_
#define NET_INSTAWEB_REWRITER_GOOGLE_ANALYTICS_SNIPPET_H_

namespace net_instaweb {

const char kGaSnippetGetTracker[] = "_modpagespeed_getRewriteTracker(";

const char kGaSnippetPrefix[] =
    "var _gaq = _gaq || [];\n"
    "(function(){\n"
    "  function functionName(fn) {\n"
    "    var name = /\\W*function\\s+([\\w\\$]+)\\(/.exec(fn);\n"
    "    if (!name)\n"
    "      return 'No name';\n"
    "    return name[1];\n"
    "  }\n"
    "  var nameSpace = '_gat';\n"
    "  var existingGat = window[nameSpace];\n"
    "  if (existingGat && typeof existingGat['_getTracker'] == 'function') {\n"
    "    return;\n"
    "  }\n"
    "\n"
    "  var gaqAccounts = [];\n"
    "  function setAccount(acct, prefix) {\n"
    "    if (gaqAccounts[prefix] != acct) {\n"
    "      gaqAccounts[prefix] = acct;\n"
    "      _gaq.push([prefix + '_setAccount', acct]);\n"
    "    }\n"
    "  }\n"
    "\n"
    "  window['_modpagespeed_getRewriteTracker'] = function(tracker_acct,\n"
    "                                                       tracker_name) {\n"
    "    var prefix = tracker_name ? tracker_name + '.' : '';\n"
    "\n"
    "    function deferTrackerFunc(fn) {\n"
    "      return function() {\n"
    "        setAccount(tracker_acct, prefix);\n"
    "        var pushArgs = [fn];\n"
    "        [].push.apply(pushArgs, arguments);\n"
    "        _gaq.push(pushArgs);\n"
    "      };\n"
    "    }\n"
    "    var pageTrackerMethodNames = [\n";

const char kGaSnippetSuffix[] =
    "    ];\n"
    "    var pageTracker = {\n"
    "      _initData: function() {},\n"
    "    };\n"
    "    for (var i=pageTrackerMethodNames.length; i--;) {\n"
    "      var n = pageTrackerMethodNames[i];\n"
    "      pageTracker[n] = deferTrackerFunc(prefix + n);\n"
    "    }\n"
    "    return pageTracker;\n"
    "  };\n"
    "\n"
    "  var ga = document.createElement('script');\n"
    "  ga.type = 'text/javascript'; ga.async = true;\n"
    "  ga.src = ('https:' == document.location.protocol ? 'https://ssl' :\n"
    "            'http://www') + '.google-analytics.com/ga.js';\n"
    "  var s = document.getElementsByTagName('script')[0];\n"
    "  s.parentNode.insertBefore(ga, s);\n"
    "})();\n";
}  // namespace net_instaweb

#endif  // NET_INSTAWEB_REWRITER_GOOGLE_ANALYTICS_SNIPPET_H_
