z_API‎ > ‎

Tracking API(ga.js)


Tracking APIを使用すると、googleサ-バに送るデ-タをいろいろ操作、変更できる。


あと、Google help forum の メジャ-回答者をcheck

ga.jsの概観

  • 無名関数の形で書かれて居る( (function(){.....})(); )
  • google compiler? で変数は一文字変数に、一時変数の共通化などが行われている
  • まず、コ-ド全体で使うユ-ティリティ関数が定義されている
  • その後、機能に沿って10個くらいのオブジェクトが定義されている。
  • 最後にwindowオブジェクトに、_gaq, _gatをくっつけている。
  • _gatには、核となるオブジェクトが参照され、APIもこのオブジェクトにメッセ-ジをsendする形

ga.jsで定義されているオブジェクトの紹介

    名前がない(compilerで変換されている)ので、僕の命名でいきます。
  • Main(APIの窓口オブジェクト、_gatが参照する、ボスオブジェクト)
  • DefaultValues(いろいろな設定情報を貯蔵するやつ)
  • CookieWorker(cookieに関する低レベルでの処理者)
  • CookieManager(utma, utmb, utmzとか、それぞれのcookieの取扱者)
  • Submitter(送信処理実務者)
  • Campaingner(キャンペ-ンに関する処理、utmzの処理業者)
  • UtmvManager(utmvの処理者、customVarが導入されて重要度が増した)
  • KeyValueWorker(デ-タ処理ユ-ティリティ、主にcutomVarのデ-タの出し入れなどが多い仕事)
  • EcommerceManager(Eコマ-スに関する処理、僕は、あんまり見てないけど重要)
  • EventCreater(よくみてないけど、APIにcreateEventTrackerがあって、そのため)

以下、一時変数を手動で変換して、コメントをいれたもの。
勘違いも多いと思いますので、参考という事です。


(function () {
var aa = "_gat",
  s = "_gaq",
  v = true,
  w = false,
  x = undefined,
  ba = "4.5.9",
  z = "length",
  A = "cookie",
  C = "location",
  D = "&",
  E = "=",
  F = "__utma=",
  H = "__utmb=",
  I = "__utmc=",
  ca = "__utmk=",
  K = "__utmv=",
  L = "__utmz=",
  M = "__utmx=",
  da = "GASO=";
  var NoVl = function (f) {
    return undefined == f || "-" == f || "" == f;
  },

  ea = function (f) {
    return f["length"] > 0 && " \n\r\t".indexOf(f) > -1;
  },

  //f文字列の中から、i-bの部分を抜き出し
  Q = function (f, i, b) {
    var j = "-",
    c;
    if (!NoVl(f) && !NoVl(i) && !NoVl(b)) {
      c = f.indexOf(i);
      if (c > -1) {
        b = f.indexOf(b, c);
        if (b < 0) b = f["length"];
        j = GaSubstr(f, c + i.indexOf("=") + 1, b);
      }
    }
    return j;
  },

  //数字もしくは".","-"以外のものが入っていないかcheck
  checkOnlyNumSome = function (f) {
    var i = false,
    b = 0,
    j, c;
    if (!NoVl(f)) {
      i = true;
      for (j = 0; j < f["length"]; j++) {
        c = f.charAt(j);
        b += "." == c ? 1 : 0;
        i = i && b <= 1 && (0 == j && "-" == c || ".0123456789".indexOf(c) > -1);
      }
    }
    return i;
  },

  //encoding
  GaEncode = function (f, i) {
    var b = encodeURIComponent;
    return b instanceof Function ? i ? encodeURI(f) : b(f) : escape(f);
  },

  //decoding
  GaDecode = function (f, i) {
    var b = decodeURIComponent,
    j;
    f = f.split("+").join(" ");
    if (b instanceof Function) try {
      j = i ? decodeURI(f) : b(f);
    } catch(c) {
      j = unescape(f);
    } else j = unescape(f);
    return j
  },

  GaIndexOf = function (f, i) {
    return f.indexOf(i) > -1;
  },

  GaPush = function (f, i) {
    f[f["length"]] = i;
  },

  ToLower = function (f) {
    return f.toLowerCase()
  },

  GaSplit = function (f, i) {
    return f.split(i);
  },

  GaSubstr = function (f, i, b) {
    b = undefined == b ? f["length"] : b;
    return f.substring(i, b);
  },

  GaJoin = function (f, i) {
    return f.join(i);
  },

  GaHash = function (f) {
    var i = 1,
    b = 0,
    j;
    if (!NoVl(f)) {
      i = 0;
      for (j = f["length"] - 1; j >= 0; j--) {
        b = f.charCodeAt(j);
        i = (i << 6 & 268435455) + b + (b << 14);
        b = i & 266338304;
        i = b != 0 ? i ^ b >> 21 : i;
      }
    }
    return i;
  },

  //setAllowlinkの時に使う? 一カ所だけで呼ばれる
  GaGlobalCheck = function () {
    var f = window,
    i = undefined;
    if (f && f.gaGlobal && f.gaGlobal.hid) i = f.gaGlobal.hid;
    else {
      i = GaRand();
      f.gaGlobal = f.gaGlobal ? f.gaGlobal : {};
      f.gaGlobal.hid = i;
    }
    return i;
  },

  GaRand = function () {
    return Math.round(Math.random() * 2147483647);
  },

  Z = {
    Ha: function (f, i) {
      this.bb = f; //検索エンジン用property
      this.nb = i;
    },
    cookiePersistence: 63072000000, //二年ミリ秒
    ib: false,
    _gasoDomain: undefined,
    _gasoCPath: undefined
  };

  //初期化オブジェクト
  Z.DfVls = function () { //Gb
    var dfvls = this, //f
    i = Z.Ha;
    function setEngines(c) {
      return new i(c[0], c[1]);
    }

    //dfvls.engineの設定で呼ばれる
    function j(c) {
      var p = [];
      c = c.split(",");
      var m;
      for (m = 0; m < c.length; ++m){
        p.push(setEngines(c[m].split(":")));
      }
      return p;
    }

    dfvls.Ia = "utm_campaign";
    dfvls.Ja = "utm_content";
    dfvls.Ka = "utm_id";
    dfvls.La = "utm_medium";
    dfvls.utm_nooverride = "utm_nooverride"; //1で上書きしない
    dfvls.Na = "utm_source";
    dfvls.Oa = "utm_term";
    dfvls.Pa = "gclid";
    dfvls.allowAnchor = 0;
    dfvls.allowLinker = 0;
    dfvls.sixmonthsec = "15768000"; //6ヶ月秒 Ya
    dfvls.thirtyminsec = "1800"; //30分秒 sb
    dfvls.otherengines = []; //追加検索エンジン用配列
    dfvls.ignoredRef = [];
    dfvls.cse = "cse"; //カスタム検索エンジン nc
    dfvls.queryparameter = "q"; //google 検索パラメ-タ oc
    dfvls.maxSlot = 5;
    dfvls.engines = j("images.google:q,google:q,yahoo:p,msn:q,bing:q,aol:query,aol:encquery,lycos:query,ask:q,altavista:q,netscape:query,cnn:query,looksmart:qt,about:terms,mamma:query,alltheweb:q,gigablast:q,voila:rdata,virgilio:qs,live:q,baidu:wd,alice:qs,yandex:text,najdi:q,aol:q,club-internet:query,mama:query,seznam:q,search:q,wp:szukaj,onet:qt,netsprint:q,google.interia:q,szukacz:q,yam:k,pchome:q,kvasir:q,sesam:q,ozu:q,terra:query,nostrum:query,mynet:q,ekolay:q,search.ilse:search_for,rambler:words");
    dfvls.outbounds = undefined; // b._setAutoTrackOutbound = function (a){
    dfvls.lb = false;
    dfvls.cookiepath = "/";
    dfvls.samplerate = 100;
    dfvls.oa = "/__utm.gif";
    dfvls.ga = 1;
    dfvls.ha = 1;
    dfvls.v = "|";
    dfvls.fa = 1;
    dfvls.da = 1;
    dfvls.Ra = 1;
    dfvls.domainName = "auto";
    dfvls.I = 1;
    dfvls.hrefexaminlimit = 1000; //b._setHrefExaminLimit -1にした場合は、無制限
    dfvls.Jc = 10; //utmb[2]の値 trackEventとsetOutBoundでdecrementする
    dfvls.Pb = 10;
    dfvls.Kc = 0.2;
    dfvls.namespace = undefined;
    dfvls.a = document;
    dfvls.e = window;
  };

  //cookie下請けオブジェクト
  Z.CookieWorker = function (f) { //Z.Hb
    var cookieworker = this,
    dfvls = f; //b=f
    cookieworker.timenow = (new Date).getTime();
    var j = ["__utma=", "__utmb=", "__utmc=", "__utmz", "__utmv=", "__utmx=", da];

    function c(k, n, r, a) {
      var d = "",
      l = 0;
      d = Q(k, "2" + n, ";");
      if (!NoVl(d)) {
        k = d.indexOf("^" + r + ".");
        if (k < 0) return ["", 0];
        d = GaSubstr(d, k + r["length"] + 2);
        if (d.indexOf("^") > 0) d = d.split("^")[0];
        r = d.split(":");
        d = r[1];
        l = parseInt(r[0], 10);
        if (!a && l < cookieworker.timenow) d = ""
      }
      if (NoVl(d)) d = "";
      return [d, l];
    }

    //cookie読み込み
    cookieworker.getCookieStr = function () {
      var k = dfvls.a["cookie"];
      return dfvls.namespace ? cookieworker.Wb(k, dfvls.namespace) : k;
    };

    //namespace指定時
    cookieworker.Wb = function (k, n) {
      var r = [],
      a, d;
      for (a = 0; a < j["length"]; a++) {
        d = c(k, j[a], n)[0];
        NoVl(d) || (r[r["length"]] = j[a] + d + ";");
      }
      return r.join("");
    };

    //Writer, 実際の処理はwriteInCookieに移譲
    //r=-1の時は、ブラウザと共に消えるcookie
    cookieworker.write = function (k, n, r) {
      var a = r > 0 ? h(r) : "";
      if (dfvls.namespace) {
        n = cookieworker.kc(dfvls.a["cookie"], k, dfvls.namespace, n, r);
        k = "2" + k;
        a = e(r);
      }
      writeInCookie(k + n, a);
    };

    //namespace指定時
    cookieworker.kc = function (k, n, r, a, d) {
      var l = "";
      d = p(d);
      a = m([a, cookieworker.timenow + d * 1], r);
      l = Q(k, "2" + n, ";");
      if (!NoVl(l)) {
        k = m(c(k, n, r, true), r);
        l = GaJoin(l.split(k), "");
        return l = a + l;
      }
      return a;
    };

    function p(k) {
      return k || Z.cookiepersistence;
    }

    function m(k, n) {
      return "^" + GaJoin([[n, k[1]].join("."), k[0]], ":");
    }

    //cookie書き込み
    function writeInCookie(k, n) {
      //nが""の時は、ブラウザが生きてる間のみ有効
      dfvls.a["cookie"] = k + "; path=" + dfvls.cookiepath + "; " + n + cookieworker.getDomainStr(); //cookieworker.fb()はドメインのkey=value;
    }

    //domain="hoge.com"の形を返す
    cookieworker.getDomainStr = function () { //fb
      return NoVl(dfvls.domainName) ? "" : "domain=" + dfvls.domainName + ";";
    };

    //k>0で、"expire=????"の形を返す k<0で""
    function e(k) {
      return k > 0 ? g() : "";
    }

    function g() {
      return h(Z.cookiepersistence);
    }

    //expire時間設定
    function h(k) {
      var n = new Date;
      k = new Date(n.getTime() + k);
      return "expires=" + k.toGMTString() + "; ";
    }
  };


  //cookieマネ-ジャ
  Z.CookieManager = function (f) {
    var utmaAr, utmbAr, utmcAr, utmzAr, utmxAr, utmvAr, q, cookiemanager = this, //this=e
    g, //値の真偽性をcheck utmc??を足してハッシュ値を持つ
    dfvls = f;
    //cookiemanager.j = new Z.CookieWorker(f);
    cookieworker = new Z.CookieWorker(f);

    function AtoS_Bar(a) { //k
      a = a instanceof Array ? a.join(".") : "";
      return NoVl(a) ? "-" : a;
    }

    function StoA_Ept(a, d) {//n
      var l = [];
      if (!NoVl(a)) {
        l = a.split(".");
        if (d) for (a = 0; a < l["length"]; a++) checkOnlyNumSome(l[a]) || (l[a] = "-");
      }
      return l;
    }

    //aの文字列を使って、dのドメインハッシュを, 各々のtypeに値をsetする, lは";"とか
    function setValues(a, d, l) {
      var t = cookiemanager.M,
      o, u;
      for (o = 0; o < t["length"]; o++) {
        u = t[o][0]; //該当するtype "__utma="とか
        u += NoVl(d) ? d : d + t[o][4]; //utmaなら、ドメインハッシュを付けるとか
        t[o][2](Q(a, u, l)); //値をsetする "__utma"に相当する変数とかに
      }
    }

    //真偽性をcheck
    cookiemanager.verify = function () {
      return undefined == g || g == cookiemanager.getAllStrToHash();
    };

    //cookie読み出し
    cookiemanager.getCookieStr = function () { //k
      return cookieworker.getCookieStr();
    };

    //utmx
    cookiemanager.ma = function () {
      return utmxAr ? utmxAr : "-";
    };
    cookiemanager.vb = function (a) {
      utmxAr = a;
    };

    //
    cookiemanager.setG = function (a) {
      //数字".","-"以外のものがなければ、aを数値化、入っていれば"-"
      g = checkOnlyNumSome(a) ? a * 1 : "-";
    };

    //utmv
    cookiemanager.la = function () {
      return AtoS_Bar(utmvAr);
    };
    cookiemanager.Aa = function (a) {
      utmvAr = StoA_Ept(a);
    };

    //initDataの中の$.UtmvManagerのtcの中のutmvの処理で呼ばれる
    //セッション限りのcookieにする
    cookiemanager.Vb = function () {
      cookieworker.write("__utmv=", "", -1); //-1はexpireがない
    };

    //utmkを使った真偽check
    cookiemanager.lc = function () {
      return g ? g : "-";
    };

    //cookie書き込み時の"domain=www.hoge.com;"を返す
    cookiemanager.fb = function () {
      return NoVl(dfvls.domainName) ? "" : "domain=" + dfvls.domainName + ";";
    };

    //utma
    cookiemanager.ja = function () {
      return AtoS_Bar(utmaAr);
    };
    cookiemanager.tb = function (a) {
      utmaAr = StoA_Ept(a, 1);
    };

    //utmb
    cookiemanager.C = function () {
      return AtoS_Bar(utmbAr);
    };
    cookiemanager.ya = function (a) {
      utmbAr = StoA_Ept(a, 1);
    };

    //utmc
    cookiemanager.ka = function () {
      return AtoS_Bar(utmcAr);
    };
    cookiemanager.ub = function (a) {
      utmcAr = StoA_Ept(a, 1);
    };

    //utmz
    cookiemanager.na = function () {
      return AtoS_Bar(utmzAr);
    };
    cookiemanager.wb = function (a) {
      utmzAr = StoA_Ept(a);
      for (a = 0; a < utmzAr["length"]; a++) if (a < 4 && !checkOnlyNumSome(utmzAr[a])) utmzAr[a] = "-"
    };

    //変数qのsetter ,getter
    cookiemanager.fc = function () {
      return q;
    };
    cookiemanager.Dc = function (a) {
      q = a;
    };

    //値のsetをし直す
    cookiemanager.Sb = function () {
      utmaAr = [];
      utmbAr = [];
      utmcAr = [];
      utmzAr = [];
      utmxAr = undefined;
      utmvAr = [];
      g = undefined;
    };

    //値の真偽性をcheckする。全部の値を足した数で、ハッシュを作る, P
    cookiemanager.getAllStrToHash = function () {
      var a = "",
      d;
      for (d = 0; d < cookiemanager.M["length"]; d++) a += cookiemanager.M[d][1]();
      return GaHash(a);
    };

    //cookie情報があるかどうか、変数gに記憶しておく
    cookiemanager.setValuesToG  = function (a) {
      var d = cookiemanager.getCookieStr(),
      l = false;
      if (d) {
        setValues(d, a, ";");
        cookiemanager.setG(cookiemanager.getAllStrToHash());//gにutm?関連の値を代入しておく
        l = true;
      }
      return l; //cookie情報があれば、true
    };

    //utmkの値を変数gに代入
    cookiemanager.setValuesAndG = function (a) {
      setValues(a, "", "&"); //utm[a-z]の値をset
      cookiemanager.setG(Q(a, "__utmk=", "&")); //gにutmk=の値を代入しておく
    };


    //すべてのcookie値から
    cookiemanager.getStrWithK = function () {
      var a = cookiemanager.M,
      d = [],
      l;
      for (l = 0; l < a["length"]; l++) GaPush(d, a[l][0] + a[l][1]());
      GaPush(d, "__utmk=" + cookiemanager.getAllStrToHash());
      return d.join("&");
    };

    //cookiePathCopyから呼ばれる
    cookiemanager.Nc = function (a, d) {
      var l = cookiemanager.M,
      t = dfvls.cookiepath;
      cookiemanager.setValuesToG(a);
      dfvls.cookiepath = d;
      //値が"-"だったら、cookieへの書き込み
      for (a = 0; a < l["length"]; a++) NoVl(l[a][1]()) || l[a][3]();
      dfvls.cookiepath = t;
    };

    //cookie書き込みメソッド群
    cookiemanager.Cb = function () {
      cookieworker.write("__utma=", cookiemanager.ja(), Z.cookiepersistence);
    };
    cookiemanager.Ea = function () {
      cookieworker.write("__utmb=", cookiemanager.C(), dfvls.thirtyminsec * 1000);
    };
    cookiemanager.Db = function () {
      cookieworker.write("__utmc=", cookiemanager.ka(), 0);
    };
    cookiemanager.Ga = function () {
      cookieworker.write("__utmz=", cookiemanager.na(), dfvls.sixmonthsec * 1000);
    };
    cookiemanager.Eb = function () {
      cookieworker.write("__utmx=", cookiemanager.ma(), Z.cookiepersistence);
    };
    cookiemanager.Fa = function () {
      cookieworker.write("__utmv=", cookiemanager.la(), Z.cookiepersistence);
    };
    cookiemanager.Oc = function () {
      cookieworker.write(da, cookiemanager.fc(), 0);
    };

    //data保存庫
    //"type", "AtoS"(:getter), "StoA"(:setter), "writeInCookie", "なんか"
    cookiemanager.M = [
      ["__utma=", cookiemanager.ja, cookiemanager.tb, cookiemanager.Cb, "."],
      ["__utmb=", cookiemanager.C, cookiemanager.ya, cookiemanager.Ea, ""],
      ["__utmc=", cookiemanager.ka, cookiemanager.ub, cookiemanager.Db, ""],
      ["__utmx=", cookiemanager.ma, cookiemanager.vb, cookiemanager.Eb, ""],
      ["__utmz=", cookiemanager.na, cookiemanager.wb, cookiemanager.Ga, "."],
      ["__utmv=", cookiemanager.la, cookiemanager.Aa, cookiemanager.Fa, "."]];
  };


  //通信オブジェクト
  Z.Submitter = function (f) {
    var submitter = this,
    dfvls = f, //b
    cookieManager = new Z.CookieManager(dfvls),
    c = function () {},
    //[m]はutmb, trackEvent時に、utmbを更新する
    UpdateUtmb = function (m) {
      var q = (new Date).getTime(),
      e;
      e = (q - m[3]) * (dfvls.Kc / 1000);
      if (e >= 1) {
        m[2] = Math.min(Math.floor(m[2] * 1 + e), dfvls.Pb);
        m[3] = q;
      }
      return m;
    };

    //通信受付Interface
    submitter.H = function (str, account, domainhash, g, h, k) {
      //[cookie_value, account-id, domain-hash, bool, bool, ?]
      //gはtrackTransの時true
      //hはsendXevent, trackPageviewでsetAutoTrackOutBoundを設定した場合に true
      var utmbAry, r = dfvls.I, //dfvls.Iはdefault=>1, local, remote server判別用flag n,r
      location = dfvls.a["location"]; //a
      cookieManager.setValuesToG(domainhash);
      utmbAry = GaSplit(cookieManager.C(), "."); //utmbの値をgetして配列化
      //n[1]はペ-ジビュ-,500を超える場合は、trackTrans用に限る
      if (utmbAry[1] < 500 || g) {
        //g=>false, h=>truetrueなのは、_trackEventの時, outbountの時。
        if (h) utmbAry = UpdateUtmb(utmbAry);
        if (g || !h || utmbAry[2] >= 1) {
          if (!g && h) utmbAry[2] = utmbAry[2] * 1 - 1; //TrackEvent,OutBoundをcount(decrement)する
          utmbAry[1] = utmbAry[1] * 1 + 1; //pageviewがcountされた
          //cookie_valueを追加, baはversion 4.8.9とか
          str = "?utmwv=" + ba + "&utmn=" + GaRand() + (NoVl(location.hostname) ? "" : "&utmhn=" + GaEncode(location.hostname)) + (dfvls.samplerate == 100 ? "" : "&utmsp=" + GaEncode(dfvls.samplerate)) + str;

          //local-server-setting
          if (0 == r || 2 == r) {
            g = 2 == r ? c : k || c;
            //送信, dfvls.oaは、setLocalGifPathの値、通常はdfvls.oa => "/__utm.gif";
            submitter.$a(dfvls.oa + str, g);
          }

          //remote-server-setting 通常パタ-ン
          if (1 == r || 2 == r) {
            str = ("https:" == location.protocol ? "https://ssl.google-analytics.com/__utm.gif" : "http://www.google-analytics.com/__utm.gif") + str + "&utmac=" + account + "&utmcc=" + submitter.getUtmccStr(domainhash);

            if (la) str += "&gaq=1"; //"_gaq"が設定されている場合 ansycrony-tracking
            submitter.$a(str, k); //送信 kは送信後に実行する関数
          }
        }
      }
      cookieManager.ya(utmbAry.join(".")); //utmbの値をset
      cookieManager.Ea(); //utmbの値を書き込み
    };

    //送信実務担当
    submitter.$a = function (m, q) {
      //q = function(){alert(m);}; my test functioin :)
      var e = new Image(1, 1);
      e.src = m;
      e.onload = function () {
        e.onload = null;
        //cはfunction(){}, qはconstructorで指定
        //qは,setAutoTrackOutBoundを設定した場合に trackPageviewで Main#daがqになる
        (q || c)();
      };
    };

    //i.Hから呼ばれる。 mはdomain-hash
    submitter.getUtmccStr = function (m) {
      var q = [],
      e = ["__utma=", "__utmz=", "__utmv=", "__utmx="],
      g, h = cookieManager.getCookieStr(), //hにcookieに値を代入
      k;
      for (g = 0; g < e["length"]; g++) {
        k = Q(h, e[g] + m, ";"); //それぞれの値
        if (!NoVl(k)) {//utmvについては、"|"を"."にsubstituteする
          if (e[g] == "__utmv=") {
            k = GaSplit(k.split(m + ".")[1], "|")[0];
            if (NoVl(k)) continue;
            k = m + "." + k;
          }
          GaPush(q, e[g] + k + ";");
        }
      }
      //"+"で文字列化して返す
      return GaEncode(q.join("+"));
    };
  };


  //Ecommerceマネ-ジャ
  Z.n = function () {
    var f = this;
    f.Y = [];
    f.hb = function (i) {
      var b, j = f.Y,
      c;
      for (c = 0; c < j.length; c++) b = i == j[c].q ? j[c] : b;
      return b
    };
    f.Ob = function (i, b, j, c, p, m, q, e) {
      var g = f.hb(i);
      if (undefined == g) {
        g = new Z.n.Mb(i, b, j, c, p, m, q, e);
        GaPush(f.Y, g)
      } else {
        g.Qa = b;
        g.Ab = j;
        g.zb = c;
        g.xb = p;
        g.Wa = m;
        g.yb = q;
        g.Za = e
      }
      return g
    }
  };

 //Ecommerce下請け-デ-タ部門
  Z.n.Lb = function (f, i, b, j, c, p) {
    var m = this;
    m.Bb = f;
    m.Ba = i;
    m.D = b;
    m.Ua = j;
    m.pb = c;
    m.qb = p;
    m.Ca = function () {
      return "&" + ["utmt=item", "tid=" + GaEncode(m.Bb), "ipc=" + GaEncode(m.Ba), "ipn=" + GaEncode(m.D), "iva=" + GaEncode(m.Ua), "ipr=" + GaEncode(m.pb), "iqt=" + GaEncode(m.qb)].join("&utm");
    };
  };

  //Ecommerce下請け 制作部門
  Z.n.Mb = function (f, i, b, j, c, p, m, q) {
    var e = this;
    e.q = f;
    e.Qa = i;
    e.Ab = b;
    e.zb = j;
    e.xb = c;
    e.Wa = p;
    e.yb = m;
    e.Za = q;
    e.R = [];
    e.Nb = function (g, h, k, n, r) {
      var a = e.gc(g),
      d = e.q;
      if (undefined == a) GaPush(e.R, new Z.n.Lb(d, g, h, k, n, r));
      else {
        a.Bb = d;
        a.Ba = g;
        a.D = h;
        a.Ua = k;
        a.pb = n;
        a.qb = r
      }
    };
    e.gc = function (g) {
      var h, k = e.R,
      n;
      for (n = 0; n < k.length; n++) h = g == k[n].Ba ? k[n] : h;
      return h
    };
    e.Ca = function () {
      return "&" + ["utmt=tran", "id=" + GaEncode(e.q), "st=" + GaEncode(e.Qa), "to=" + GaEncode(e.Ab), "tx=" + GaEncode(e.zb), "sp=" + GaEncode(e.xb), "ci=" + GaEncode(e.Wa), "rg=" + GaEncode(e.yb), "co=" + GaEncode(e.Za)].join("&utmt");
    };
  };


  //システム・ブラウザデ-タ取得オブジェクト
  Z.Fb = function (f) {
    var i = f,
    b = i.e,
    j = this,
    c = "-";
    j.V = b.screen;
    j.Sa = !j.V && b.java ? java.awt.Toolkit.getDefaultToolkit() : undefined;
    j.d = b.navigator;
    j.W = c;
    j.xa = c;
    j.Va = c;
    j.qa = c;
    j.pa = 1;
    j.eb = c;

    function p() {
      var m, q, e;
      q = "ShockwaveFlash";
      var g = "$version",
      h = j.d ? j.d.plugins : undefined;
      if (h && h["length"] > 0) for (m = 0; m < h["length"] && !e; m++) {
        q = h[m];
        if (GaIndexOf(q.name, "Shockwave Flash")) e = q.description.split("Shockwave Flash ")[1]
      } else {
        q = q + "." + q;
        try {
          m = new ActiveXObject(q + ".7");
          e = m.GetVariable(g)
        } catch(k) {}
        if (!e) try {
          m = new ActiveXObject(q + ".6");
          e = "WIN 6,0,21,0";
          m.AllowScriptAccess = "always";
          e = m.GetVariable(g)
        } catch(n) {}
        if (!e) try {
          m = new ActiveXObject(q);
          e = m.GetVariable(g);
        } catch(r) {}
        if (e) {
          e = GaSplit(e.split(" ")[1], ",");
          e = e[0] + "." + e[1] + " r" + e[2];
        }
      }
      return e ? e : c
    }
    j.bc = function () {
      var m;
      if (b.screen) {
        j.W = j.V.width + "x" + j.V.height;
        j.xa = j.V.colorDepth + "-bit";
      } else if (j.Sa) try {
        m = j.Sa.getScreenSize();
        j.W = m.width + "x" + m.height;
      } catch(q) {}
      j.qa = ToLower(j.d && j.d.language ? j.d.language : j.d && j.d.browserLanguage ? j.d.browserLanguage : c);
      j.pa = j.d && j.d.javaEnabled() ? 1 : 0;
      j.eb = i.ha ? p() : c;
      j.Va = GaEncode(i.a.characterSet ? i.a.characterSet : i.a.charset ? i.a.charset : c)
    };
    j.Ic = function () {
      return "&" + "utm" + ["cs=" + GaEncode(j.Va), "sr=" + j.W, "sc=" + j.xa, "ul=" + j.qa, "je=" + j.pa, "fl=" + GaEncode(j.eb)].join("&utm");
    };
    j.$b = function () {
      var m = i.a,
      q = b.history["length"];
      m = j.d.appName + j.d.version + j.qa + j.d.platform + j.d.userAgent + j.pa + j.W + j.xa + (m["cookie"] ? m["cookie"] : "") + (m.referrer ? m.referrer : "");
      for (var e = m["length"]; q > 0;) m += q--^e++;
      return GaHash(m);
    };
  };


  //キャンペ-ン処理オブジェクト
  Z.Cmp = function (f, i, b, j) {  //Z.m
    var dfvls = j, //c = j
    cmp = this;
    cmp.c = f; //domain-hash
    cmp.referer = i; //referrer
    cmp.timenow = b; //cmp.r

    //値がなければ、True
    function isBadStr(g) {
      return NoVl(g) || "0" == g || !GaIndexOf(g, "://");
    }

    //Path名を返す、パラメ-タは含まない
    function getQueryPathWithoutParameter(g) {
      var h = "";
      g = ToLower(g.split("://")[1]);
      if (GaIndexOf(g, "/")) {
        g = g.split("/")[1];
        if (GaIndexOf(g, "?")) h = g.split("?")[0];
      }
      return h;
    }

    //host名を返す
    function getHostName(g) {
      var h = "";
      h = ToLower(g.split("://")[1]);
      if (GaIndexOf(h, "/")) h = h.split("/")[0];
      return h;
    }

    //setAndGetDataHolder
    cmp.setAndGetDataHolder = function (g) {
      var h = cmp.setOrganic(); //検索エンジンでの値を返す
      //c.Ja(setCampContentKey), ,,,
      return new Z.Cmp.DataHolder(
        Q(g, dfvls.Ka + "=", "&"), //c.Ka => "utm_id"
        Q(g, dfvls.Na + "=", "&"), //c.Na => "utm_source"
        Q(g, dfvls.Pa + "=", "&"), //c.Pa => "gclid"
        cmp.Q(g, dfvls.Ia, "(not set)"), //c.Ia => "utm_campaign"
        cmp.Q(g, dfvls.La, "(not set)"), //c.La => "utm_medium"
        cmp.Q(g, dfvls.Oa, h && !NoVl(h.K) ? GaDecode(h.K) : undefined), //c.Oa => "utm_term"
        cmp.Q(g, dfvls.Ja, undefined)); //c.Ja => "utm_content"
    };

    //Googleカスタム検索か?
    cmp.isCse = function (g) { //jb
      var h = getHostName(g),
      //search?q=hogeなら、search部分を返す
      k = getQueryPathWithoutParameter(g);
      if (GaIndexOf(h, "google")) {
        g = g.split("?").join("&");
        //googleのカスタム検索の時はTrue
        if (GaIndexOf(g, "&" + dfvls.queryparameter + "=")) if (k == dfvls.cse) return true;
      }
      //基本はfalse
      return false;
    };

    //organicでの値があれば、Cmp.DataHolderをsetして返す
    cmp.setOrganic = function () { //gb
      var g, h = cmp.referer;
      var k, n, engines = dfvls.engines;
      //通常検索 or referralがあれば
      if (! (isBadStr(h) || cmp.isCse(h))) {
        //ホストを代入
        g = getHostName(h);
        for (k = 0; k < engines["length"]; k++) {
          n = engines[k];
          //referreに検索エンジンがあれば、
          if (GaIndexOf(g, ToLower(n.bb))) { //n.bb => name of the engine
            h = h.split("?").join("&");
            if (GaIndexOf(h, "&" + n.nb + "=")) { //n.nb => parameter
              g = h.split("&" + n.nb + "=")[1];
              if (GaIndexOf(g, "&")) g = g.split("&")[0];
              //見つかった時点で、setしたオブジェクトをreturn
              return new Z.Cmp.DataHolder(x, n.bb, x, "(organic)", "organic", g, x);
              //n.bbは検索エンジン名, gはキ-ワ-ド
            }
          }
        }
      }
    };

    cmp.Q = function (g, h, k) {
      g = Q(g, h + "=", "&");
      return k = !NoVl(g) ? GaDecode(g) : !NoVl(k) ? k : "-";
    };

    //無視する検索ワ-ドに登録されているもの? gは cmp.DataHolder
    cmp.isIgnoredTerm = function (g) { //uc
      var h = dfvls.otherengines,
      k = false,
      n;
      if (g && "organic" == g.S) { //g.S="utmc_medium"
        g = ToLower(GaDecode(g.K)); //g.K="utmc_term"
        //一致するものがあれば、k=true;
        for (n = 0; n < h["length"]; n++) k = k || ToLower(h[n]) == g;
      }
      return k;
    };

    //cmp.DataHolder
    cmp.setReferral = function () { //hc
      var g = "",
      path = "";
      g = cmp.referer;
      if (! (isBadStr(g) || cmp.isCse(g))) {
        g = g.split("://")[1];
        if (GaIndexOf(g, "/")) {
          path = GaSubstr(g, g.indexOf("/"));
          path = path.split("?")[0];
          g = ToLower(g.split("/")[0]);
        }
        if (0 == g.indexOf("www.")) g = GaSubstr(g, 4);
        //g => host, path(content)には、referrerのpath(パラメ-タは削除)が入る
        return new Z.Cmp.DataHolder(x, g, x, "(referral)", "referral", x, path);
      }
    };

    //document.location.searchを返す setalowlinkerは"#"以下
    cmp.getSearchTerm = function (g) {//gは document.location Xb
      var h = "";
      if (dfvls.allowAnchor) { //dfvls.allowAnchor => setAllowAnchor
        h = g && g.hash ? g.href.substring(g.href.indexOf("#")) : "";
        h = "" != h ? h + "&" : h;
      }
      h += g.search;
      return h;
    };


    //直接訪問
    cmp.setDirect = function () {
      return new Z.Cmp.DataHolder(
        undefined, "(direct)", undefined, "(direct)", "(none)", undefined, undefined
      );
    };

    cmp.isIgnoredRef = function (g) { //vc
      var h = false,
      k, n = dfvls.ignoredRef;
      if (g && "referral" == g.S) {
        g = ToLower(GaEncode(g.X));
        for (k = 0; k < n["length"]; k++) h = h || GaIndexOf(g, ToLower(n[k]));
      }
      return h;
    };

    //判別、cmp.wにdelegate id, source, gclidのどれかでもあれば、true
    cmp.L = function (g) {
      return undefined != g && g.mb();
    };

    //initDataで呼ばれるもの
    //return "" or "&utmcn=1" or "&utmcr=1"
    //arguments g=>"cookiemanager, h=>"isNewVisit?"
    cmp.cc = function (cookiemanager, newsession) { //?, h
      var k = "",
      n = "-",
      r, a = 0,
      d, l, domainhash = cmp.c;
      if (!cookiemanager) return "";
      l = cookiemanager.getCookieStr(); //lにcookie値を入れる
      k = cmp.getSearchTerm(dfvls.a["location"]); //kにはsearch(パラメ-タ)が入る
      //_linkで遷移してきて、validataに通った場合
      if (dfvls.allowLinker && cookiemanager.verify()) {
        n = cookiemanager.na(); //utmzに関する値が、cookiemanager内変数のutmzArにあるか?
        //linkで飛んだ先に、既存のcampaignがあれば、return ""
        if (!NoVl(n) && !GaIndexOf(n, ";")) { //nに値があり、;がきちんとあれば、
          cookiemanager.Ga(); //utmzの値をcookieに書き込み
          return ""; //campaignには関係なしと
        }
      }
      n = Q(l, "__utmz=" + domainhash + ".", ";"); //nには今までのcookieにあるutmzが入る
      r = cmp.setAndGetDataHolder(k); //rに$.Camp.DataHolderオブジェクトがはいる, kはlocation.searchパラメ-タ

      //nooverride=1の時
      if (cmp.L(r)) {
        k = Q(k, dfvls.utm_nooverride + "=", "&"); //nooverrideの値を取得
        if ("1" == k && !NoVl(n)) return ""; //1で utmzに値があれば、""
      }

      //無視する検索ワ-ドの場合に return ""
      if (!cmp.L(r)) { //id, source, gclidのどれもない
        r = cmp.setOrganic(); //new Z.Camp.DataHolder()が入る
        if (!NoVl(n) && cmp.isIgnoredTerm(r)) return ""; //追加の無視キ-ワ-ドであれば
      }

      //新規セッションなら、referrerを調査して、無視する参照元ならreturn ""
      if (!cmp.L(r) && newsession) {
        r = cmp.setReferral(); //referralをsetしたcmp.DataHolderが入る
        if (!NoVl(n) && cmp.isIgnoredRef(r)) return ""; //無視する参照元なら、""
      }

      //新規セッションで、cookieが""なら直接参照をset
      if (!cmp.L(r)) if (NoVl(n) && newsession) r = cmp.setDirect(); //utmzが空なら、直接参照

      //3条件のどれも持たないなら、return ""
      if (!cmp.L(r)) return "";

      //utmzに値があれば、referrerのものと比較
      if (!NoVl(n)) {
        //a [ <domainhash><birth-time><num_of_session><num_of_camp> + csr]
        a = n.split(".");
        d = new Z.Cmp.DataHolder;
        d.setValueFromStr(a.slice(4).join("."));//utmzのutmc値から、dオブジェクトに値をset
        d = ToLower(d.getStr()) == ToLower(r.getStr()); //dオブジェクトの値を文字列化して、比較
        a = a[3] * 1; //aにはキャンペ-ンセッション回数
      }
      if (!d || newsession) {//cookieとreferrerが違うか、newsessionなら
        //utmaの値を取得
        newsession = Q(l, "__utma=" + domainhash + ".", ";");
        //最後の"."の場所を取得
        l = newsession.lastIndexOf(".");
        //session回数を取得 l>9にならない場合があるのか? domain-hashが1でも、session-idがあるし?
        newsession = l > 9 ? GaSubstr(newsession, l + 1) * 1 : 0;
        a++; //campain-counterを++
        //0を1に。他はそのまま
        newsession = 0 == newsession ? 1 : newsession;
        //referrerからの値で、cookiemanagerに値をSet
        cookiemanager.wb([domainhash, cmp.timenow, newsession, a, r.getStr()].join("."));
        cookiemanager.Ga(); //書き込み
        return "&" + "utmcn=1";
      } else return "&" + "utmcr=1"; //repeartの場合は、utmzは変更しない
    };
  };


  Z.Cmp.DataHolder = function (f, i, b, j, c, p, m) { //Z.m.w
    //頭の3つ, f, i, bがあれば、キャンペ-ンセッションとなる
    var cmpq = this; //q
    cmpq.q = f; //utm_id
    cmpq.X = i; //utm_source
    cmpq.ea = b; //gclid
    cmpq.D = j;  //utm_campaign
    cmpq.S = c; //utm_medium
    cmpq.K = p; //utm_term
    cmpq.Xa = m; //utm_content
    cmpq.getStr = function () { //Da
      var e = [],
      g = [
        ["cid", cmpq.q],
        ["csr", cmpq.X],
        ["gclid", cmpq.ea],
        ["ccn", cmpq.D],
        ["cmd", cmpq.S],
        ["ctr", cmpq.K],
        ["cct", cmpq.Xa]],
      h, k;
      if (cmpq.mb()) for (h = 0; h < g["length"]; h++) if (!NoVl(g[h][1])) {
        k = g[h][1].split("+").join("%20");
        k = k.split(" ").join("%20");
        GaPush(e, "utm" + g[h][0] + "=" + k);
      }
      return e.join("|");
    };

    //id,source,gclidが3つともなければ、false, それ以外はtrue
    cmpq.mb = function () {
      return ! (NoVl(cmpq.q) && NoVl(cmpq.X) && NoVl(cmpq.ea));
    };

    //cookieから、パラメ-タを入れる。キャンペ-ン処理で使われる
    cmpq.setValueFromStr = function (e) { //Zb
      var g = function (h) {
        return GaDecode(Q(e, "utm" + h + "=", "|"));
      };
      cmpq.q = g("cid");
      cmpq.X = g("csr");
      cmpq.ea = g("gclid");
      cmpq.D = g("ccn");
      cmpq.S = g("cmd");
      cmpq.K = g("ctr");
      cmpq.Xa = g("cct");
    };
  };

  //utmv管理オブジェクト   initDataから呼ばれる
  Z.UtmvManager = function (f, i, b, j) {
    //qは初期化オブジェクト, pはドメインハッシュ, c.Oはcookiemanager, eは$.CvManager
    var utmvmanager = this,
    domainhash = i,
    m = "=",
    dfvls = f,
    cvmanager = j; //cvmanager

    utmvmanager.cookiemanager = b; //cookiemanager O
    utmvmanager.oldsetvar = ""; //sa
    utmvmanager.data = {}; //値がstoreされる

    //initDataから呼ばれる
    utmvmanager.tc = function () {
      var h;
      //cookieの値を読んで、domain-hashを見て、utmv値を取り出す("."以降)
      h = GaSplit(Q(utmvmanager.cookiemanager.getCookieStr(), "__utmv=" + domainhash + ".", ";"), domainhash + ".")[1];
      if (!NoVl(h)) {
        h = h.split("|");
        //1, {}, "|" ?? utmvmanager.dataに値がsetされる gの定義は下
        // {index: [key,value,scope]}の形
        setting(1, utmvmanager.data, h[1]);
        //旧式のsetvarの値
        utmvmanager.oldsetvar = h[0];
        //cvmanagerオブジェにset
        utmvmanager.setInKvoperator();
      }
    };

    //実際にcookieにutmvの値を書き込みする
    //utmvmanager.dataオブジェクトが書き込みされる
    utmvmanager.setInKvoperator = function () {
      utmvmanager.clearAndSet(); //値を設定し直す、内部でkvopertorにデ-タをset
      var h = utmvmanager.oldsetvar, //setvarの代入
      k, n, r = "";
      //scope-level=>1 "user-level" rに代入
      for (k in utmvmanager.data){
        if ((n = utmvmanager.data[k]) && 1 === n[2]){
          r += k + m + n[0] + m + n[1] + m + 1 + ",";
        }
      }
      //rに値があれば(user-levelがあれば)
      NoVl(r) || (h += "|" + r);

      //setvar, user-levelに値がなければ
      if (NoVl(h)){
        //utmvに、値なし期限無しのcookie書き込み,
        utmvmanager.cookiemanager.Vb();
      //あれば
      }else {
        //utmvに値をset
        utmvmanager.cookiemanager.Aa(domainhash + "." + h);
        //utmvに、実際に、cookie書き込み
        utmvmanager.cookiemanager.Fa();
      }
    };

    //setVar用の設定
    utmvmanager.setSetVar = function (h) {
      utmvmanager.oldsetvar = h;
      utmvmanager.setInKvoperator();
    };

   //setCustomVarの設定用
    //b._setCustomVarをcallした時は、initData()のあとに、これが呼ばれる
    //pageTracker内で作られたutmv
    utmvmanager.setSetCustomVar = function (h, k, n, r) { //[index, name, value, scope]
      if (1 != r && 2 != r && 3 != r) r = 3; //指定がない場合は3(page-level)
      var a = false;
      if (k && n && h > 0 && h <= dfvls.maxSlot) { // dfvls.obは indexの最大値制限 5
        k = GaEncode(k);
        n = GaEncode(n);
        if (k["length"] + n["length"] <= 64) {
          utmvmanager.data[h] = [k, n, r]; //{index, [name, value, scope]}というデ-タ構造
          utmvmanager.setInKvoperator();
          a = true;
        }
      }
      return a;
    };

    //getVisitorCustomVar用
    utmvmanager.mc = function (h) {
      if ((h = utmvmanager.data[h]) && 1 === h[2]) return h[1];
    };

    utmvmanager.Ub = function (h) {
      var k = utmvmanager.data;
      if (k[h]) {
        delete k[h];
        utmvmanager.setInKvoperator();
      }
    };

    //utmvの値をclearして、setし直す
    utmvmanager.clearAndSet = function () {
      cvmanager._clearKey(8); //"k"が8のvalueをclear
      cvmanager._clearKey(9); //"k"が9のvalueをclear
      cvmanager._clearKey(11); //"k"が11のvalueをclear
      var h = utmvmanager.data,
      k, n;
      //転置のイメ-ジ、utmvmanager.dataの長さと同じ長さの配列を作る
      //cvmanagerにデ-タをsetしていく
      for (n in h){
        if (k = h[n]) { //=に注意、==でない
          //cvmanager._setKey(8or9or11, index, value)という形
          cvmanager._setKey(8, n, k[0]); //nameは8
          cvmanager._setKey(9, n, k[1]); //valueは9
           //3 != k => user, sessionなら書き込み scopeをset
          (k = k[2]) && 3 != k && cvmanager._setKey(11, n, "" + k); //scopeは11
        }
      }
    };

    //値のset
    function setting(h, data, n) {
      var r;
      if (!NoVl(n)) {
        n = n.split(",");
        for (var a = 0; a < n["length"]; a++) {
          r = n[a];
          if (!NoVl(r)) {
            r = r.split(m); //m=>"="
            if (r["length"] == 4) data[r[0]] = [r[1], r[2], h]; //kに値が入る
          }
        }
      }
    }
  };

  //key-value操作用 utmv用オジェ、 メインオブジェから呼ばれる
  //3階層オブジェクトを作り、読む keyは文字列、valueは数字
  //Mainオブジェクトのプロパティとして入る
  Z.CvManager = function () {
    var cvmanager = this, //f = this
    i = {}, //メイン-インスタンス-オブジェクト
    //b = "k",
    //j = "v",
    c = ["k", "j"]; //"k", "v"
    //p = "(",
    //m = ")",
    /*
    q = "*",
    e = "!",
    g = "'",
    h = {};
    h[g] = "'0";
    h[m] = "'1";
    h[q] = "'2";
    h[e] = "'3";
    */
    var k = 1,
    h = {"'":"'0", ")":"'1", "*":"'2", "!":"'3"};

    //Setter
    function setter(o, u, y, B) {
      if (undefined == i[o]) i[o] = {};
      if (undefined == i[o][u]) i[o][u] = [];
      i[o][u][y] = B;
    }

    //Getter
    function getter(o, u, y) {
      return undefined != i[o] && undefined != i[o][u] ? i[o][u][y] : undefined;
    }

    //Deleter
    function deleter(o, u) {
      if (undefined != i[o] && undefined != i[o][u]) {
        i[o][u] = undefined;
        u = true;
        var y;
        for (y = 0; y < ["k","v"]["length"]; y++) {
          if (undefined != i[o][["k","v"][y]]) {
            u = false;
            break
          }
        }
        if (u) i[o] = undefined;
      }
    }

    function buildStrByNum(o) { //d
      var u = "",
      y = false,
      B, O; //c => ["k", "v"]
      for (B = 0; B < c["length"]; B++) {
        O = o[c[B]];
        if (undefined != O) {
          if (y) u += c[B];
          u += l(O);
          y = false;
        }else{
          y = true;
        }
      }
      return u;
    }


    function l(o) {
      var u = [],
      y, B;
      for (B = 0; B < o["length"]; B++) if (undefined != o[B]) {
        y = "";
        if (B != k && undefined == o[B - 1]) y += B.toString() + "!";
        y += t(o[B]);
        GaPush(u, y);
      }
      return "(" + u.join("*") + ")";
    }

    function t(o) {
      var u = "",
      y, B, O;
      for (y = 0; y < o["length"]; y++) {
        B = o.charAt(y);
        O = h[B];
        u += undefined != O ? O : B;
      }
      return u;
    }
    cvmanager.qc = function (o) {
      return undefined != i[o];
    };

    //b.Lc(trackPageview)から呼ばれる,送信用文字列を作成
    cvmanager.getCustomVarStr = function () {
      var o = "",
      u;
      for (u in i){
        if (undefined != i[u]){
          o += u.toString() + buildStrByNum(i[u]);
        }
      }
      return o;
    };

    //b._sendXEventからcallされる,送信文字列作成用
    cvmanager.Ac = function (cvmanager_local) {
      if (cvmanager_local == x) return cvmanager.getCustomVarStr();
      //uの例 : "5(category*action)"
      var u = cvmanager_local.getCustomVarStr(),
      y;
      for (y in i){
        if (undefined != i[y] && !cvmanager_local.qc(y)){
          u += y.toString() + buildStrByNum(i[y]);
        }
      }
      return u;
    };

    //clearAndSetから呼ばれる
    cvmanager._setKey = function (either_8_9_11, i, name) {
      if (typeof name != "string") return false;
      //elementOfUtmvDataは順番i["8"]["k"] = x xが配列でnがインデクサで、nameがvalue
      setter(either_8_9_11, "k", i, name);
      return true;
    };

    //真っ当な数字であること
    cvmanager._setValue = function (o, u, y) {
      if (typeof y != "number" && (undefined == Number || !(y instanceof Number)) || Math.round(y) != y || y == NaN || y == Infinity) return false;
      //uは順番
      setter(o, "v", u, y.toString());
      return true;
    };
    cvmanager._getKey = function (o, u) {
      return getter(o, "k", u);
    };
    cvmanager._getValue = function (o, u) {
      return getter(o, "v", u);
    };
    cvmanager._clearKey = function (o) {
      deleter(o, "k"); //o は 8 or 9 0r 11
    };
    cvmanager._clearValue = function (o) {
      deleter(o, "v");
    };
  };
  //End of CvManager


  //trackEvent用オブジェ
  Z.Jb = function (f, i) {
    var b = this;
    b.Qc = i;
    b.xc = f;
    b._trackEvent = function (j, c, p) {
      return i._trackEvent(b.xc, j, c, p);
    };
  };

  Z.Main = function (f, i) {
    var b = this,
    submitter = x,
    dfvls = new Z.DfVls, //c
    p = false,
    utmvmanager = undefined;
    //変数宣言終わり

    //プロパティ設定
    b.e = window;
    b.time = Math.round((new Date).getTime() / 1000);
    b.account = f || "UA-XXXXX-X";
    b.referrer = dfvls.a.referrer; //b._setReferrerOverrideというAPI?があるが、無視されている?
    b.ia = undefined;
    b.f = undefined;
    b.B = undefined;
    b.isNewSession = false; //b.F
    b.A = undefined;
    b.Ta = ""; //new campaign or not
    b.cvmanager1 = undefined; //b.g
    b.cvmanager2 = undefined; //b.cb
    b.domainhash = undefined;
    b.cookiemanager = undefined;
    dfvls.namespace = i ? GaEncode(i) : undefined;

    //ドメイン名取得、wwwを取る
    function GaGetDomainName() {//
      if ("auto" == dfvls.domainName) {
        var a = dfvls.a.domain;
        if ("www." == GaSubstr(a, 0, 4)) a = GaSubstr(a, 4);
        dfvls.domainName = a;
      }
      dfvls.domainName = ToLower(dfvls.domainName);
    }

    //initData内の通常のペ-ジかどうか判定で使う ,通常-1
    function e() {
      var a = dfvls.domainName, //"auto" "none" "vitual-pagepath"
      d = a.indexOf("www.google.") * a.indexOf(".google.") * a.indexOf("google.");
      //c.hは_setCookiePath(デフォルト"/")
      //通常は、-1が返値
      return d || "/" != dfvls.cookiepath || a.indexOf("google.org") > -1;
    }

    //utma用配列作成関数
    function setUtmaArray(a, d, l) {
      if (NoVl(a) || NoVl(d) || NoVl(l)) return "-";
      b.domainhash = b.GetDomainHash(); //ドメンイハッシュを返す
      a = Q(a, "__utma=" + b.domainhash + ".", d);
      if (!NoVl(a)) {
        a = a.split(".");
        a[5] = a[5] ? a[5] * 1 + 1 : 1;
        a[3] = a[4];
        a[4] = l;
        a = a.join(".");
      }
      return a;
    }

    //protocolがfileでないか、google関連のサイトでないか?
    function h() {
      return "file:" != dfvls.a["location"].protocol && e();
    }


    function k(a) {
      if (!a || "" == a) return "";
      for (; ea(a.charAt(0));) a = GaSubstr(a, 1);
      for (; ea(a.charAt(a["length"] - 1));) a = GaSubstr(a, 0, a["length"] - 1);
      return a;
    }

    function n(a, d, l, t) {
      if (!NoVl(a())) {
        d(t ? GaDecode(a()) : a());
        GaIndexOf(a(), ";") || l();
      }
    }

    function r(a) {
      var d, l = "" != a && dfvls.a["location"].host != a;
      if (l) for (d = 0; d < dfvls.outbounds["length"]; d++) l = l && GaIndexOf(ToLower(a), ToLower(dfvls.outbounds[d])) == false; // i change from "-1" to "false"
      return l;
    }

    b.wc = function () {
      var a = false;
      if (b.B) a = b.B.match(/^[0-9a-z-_.]{10,1200}$/i);
      return a;
    };


    b.jc = function () {
      return GaRand() ^ b.A.$b() & 2147483647;
    };

   //ドメインハッシュを返す
    b.GetDomainHash = function () {
      if (!dfvls.domainName || "" == dfvls.domainName || "none" == dfvls.domainName) {
        dfvls.domainName = "";
        return 1
      }
      GaGetDomainName(); // dfvls.aにドメイン名を入れる。
      return dfvls.Ra ? GaHash(dfvls.domainName) : 1;
    };

    //referrerとdomainを受け取って,
    b.Yb = function (a, d) {
      if (NoVl(a)){
        a = "-";
      }else {
        //cookiepathを足す
        d += dfvls.cookiepath && "/" != dfvls.cookiepath ? dfvls.cookiepath : "";
        d = a.indexOf(d); //referrerとdomainの一致を探って
        //a, dが一致しなくて、"[...]"でなければ、referreのまま、"[..."]の場合は "-"
        //1-9文字までで一致を見たとき、"0"
        a =
          d >= 0 && d <= 8 ? "0" :
                             "[" == a.charAt(0) && "]" == a.charAt(a["length"] - 1) ? "-" : a;
      }
      return a; //通常はreferrerを返す
    };

    //送信用デ-タを文字列化する
    b.getSubmittedStr = function (a) {
      var d = "",
      l = dfvls.a;
      d += dfvls.fa ? b.A.Ic() : "";
      d += dfvls.da ? b.Ta : ""; //b.Taはキャンペ-ン該当セッションなのかどうか
      d += dfvls.ga && !NoVl(l.title) ? "&utmdt=" + GaEncode(l.title) : "";
      d += "&utmhid=" + GaGlobalCheck() + "&utmr=" + GaEncode(b.ia) + "&utmp=" + GaEncode(b.Bc(a));
      return d;
   };

   b.Bc = function (a) {
     var d = dfvls.a["location"];
     return a = undefined != a && "" != a ? GaEncode(a, true) : GaEncode(d.pathname + d.search, true);
   };

   //initDataから呼ばれる, sumitterに仕事を頼む
   b.Lc = function (a) {
     if (b.NoSampling()) {
       var d = "";
       if (b.cvmanager1 != undefined && b.cvmanager1.getCustomVarStr()["length"] > 0){
         d += "&utme=" + GaEncode(b.cvmanager1.getCustomVarStr());
       }
       d += b.getSubmittedStr(a);
       submitter.H(d, b.account, b.domainhash);
     }
   };

   //b._getLinkerUrl内で使用
   b.Tb = function () {
     var cookiemanager = new Z.CookieManager(dfvls);
     //cookieの全ての値をcookiemanager=>gに入れておく、値があればt, utmkの値を付ける
     return cookiemanager.setValuesToG(b.domainhash) ? cookiemanager.getStrWithK() : undefined;
   };

   //_link, _linkByPost,
   b._getLinkerUrl = function (a, d) {
     var l = a.split("#"),
     t = a,
     o = b.Tb();
     //oには、utmkの値が付いてくる
     if (o){
       if (d && 1 >= l["length"]){
         t += "#" + o;
       }else if(!d || 1 >= l["length"]){
         if (1 >= l["length"]) t += (GaIndexOf(a, "?") ? "&" : "?") + o;
       }else {
         t = l[0] + (GaIndexOf(a, "?") ? "&" : "?") + o + "#" + l[1];
       }
     }
     return t;
   };

   //GASO
   b.Fc = function () {
     var a;
     if (b.wc()) {
       b.cookiemanager.Dc(b.B);
       b.cookiemanager.Oc();
       Z._gasoDomain = dfvls.domainName;
       Z._gasoCPath = dfvls.cookiepath;
       a = dfvls.a.createElement("script");
       a.type = "text/javascript";
       a.id = "_gasojs";
       a.src = "https://www.google.com/analytics/reporting/overlay_js?gaso=" + b.B + "&" + GaRand();
       dfvls.a.getElementsByTagName("head")[0].appendChild(a);
     }
   };


   //セッションに関する処理を行う
   b.pc = function () {
     var timenow = b.time, //現在時間がb.timeに入っている
     cookiemanager = b.cookiemanager,     //CookiManagerオブジェクト d
     cookievalue = cookiemanager.getCookieStr(),   //cookieの値を取得 l
     domainhash = b.domainhash + "", //t=b.domainhash ドメインハッシュ "none"なら1
     o = dfvls.e,     //dfvlsは初期値格納オブジェ、.eはwindowsオブジェになっている
     u = o ? o.gaGlobal : undefined, //たぶん、そのままwindowsオブジェクト
     y,           //アンカ-で"#"を指定した場合に、アンカ-以下のURIが入ってくる
     B = GaIndexOf(cookievalue, "__utma=" + domainhash + "."), //_utmaある?
     O = GaIndexOf(cookievalue, "__utmb=" + domainhash),       //_utmbある?
     ma = GaIndexOf(cookievalue, "__utmc=" + domainhash),     // _utmcある?
     G,          //_utmaの値を格納
     J = [],     //_utmbの値を配列で格納
     S = "",    //y+"&"
     ha = false; //gaGlobalの判別flag(ドメインハッシュが一致しない場合はtrue)
     //b.pcの内部変数宣言終わり

     //"-"とかを""にする
     cookievalue = NoVl(cookievalue) ? "" : cookievalue;

     //c.allowLinkerはsetAllowLinker(true)で1
     //urlから値を取得、この時に、utmkがハッシュでの改ざんcheckになる
     if (dfvls.allowLinker) {
       y = dfvls.a["location"] && dfvls.a["location"].hash ? dfvls.a["location"].href.substring(dfvls.a["location"].href.indexOf("#")) : "";
       //b.setAllowAnchorで設定, anchorでの文字列があれば、Sに代入
       if (dfvls.allowAnchor && !NoVl(y)) S = y + "&";
       //search部分も引っ付ける
       S += dfvls.a["location"].search;
       //Sに_utmaが含まれれば
       if (!NoVl(S) && GaIndexOf(S, "__utma=")) {
         cookiemanager.setValuesAndG(S); //Sの値をcookieに入れて、utmk値をGにSet
         //verifyで、gが未設定か、urlの値がきちんとcookieに入ったかをHashでcheck
         //失敗なら、gはundefinedに、utmA..Z設定用変数の中身もclear
         cookiemanager.verify() || cookiemanager.Sb();
         G = cookiemanager.ja(); //_utma設定用変数から値をGに Sb()を実行した場合には、G="-"となる
       }
       //utmxのsetter, getter, cookiewriter, true(Decodeする)
       //utmx をcookieに書き込み
       n(cookiemanager.ma, cookiemanager.vb, cookiemanager.Eb, true);
       //utmv をcookieに書き込み
       n(cookiemanager.la, cookiemanager.Aa, cookiemanager.Fa);
     }
     //以上でAllowLinkerがtrueの時の作業終わり


     //通常(linkでない)の場合と、上記でutmaがなかった場合
     if (NoVl(G)){
       //Bは、domainHashに対応したutmaのcheck-flag
       if (B){
         //utmb, utmcが無い場合、新規セッション
         if (!O || !ma) {
           //utmaの値を現在時間で更新して代入
           G = setUtmaArray(cookievalue, ";", timenow);
           //b.isNewSessionは、キャンペ-ン処理での新規セッション判定に使われる
           b.isNewSession = true;
         //継続セッションの場合
         } else {
           //utmaの値を取得
           G = Q(cookievalue, "__utma=" + domainhash + ".", ";");
           //utmbをset, 配列にいれておく
           J = GaSplit(Q(cookievalue, "__utmb=" + domainhash, ";"), ".");
         }
       //utmaのドメインハッシュが一致しない
       }else {
         //新規にutma用の配列を作る
         G = GaJoin([domainhash, b.jc(), timenow, timenow, timenow, 1], ".");
         //新規セッションflag
         ha = b.isNewSession = true; //haはGaGlobalで使う
       }
     //utmaがあるけど、utmb or utmcがない=>新規セッション
     }else if (NoVl(cookiemanager.C()) || NoVl(cookiemanager.ka())) { //utmb, utmcのどちらかが、"-"だったとき
       //値を現在時間で更新してGに入れる
       G = setUtmaArray(S, "&", timenow);
       //新規セッションflagをtrueに
       b.isNewSession = true;
     //utma, utmb, utmcあり
     } else {
       //utmbをset
       J = GaSplit(cookiemanager.C(), ".");
       //utmbの先頭要素がドメインハッシュに?
       domainhash = J[0];
     }
     //G(utma), J(utmb)の設定終わり


     G = G.split(".");

     //gaGlobalがある時
     if (o && u && u.dh == domainhash && !dfvls.namespace) {
       G[4] = u.sid ? u.sid : G[4];
       if (ha) {
         G[3] = u.sid ? u.sid : G[4];
         if (u.vid) {
           timenow = u.vid.split("."); //from string to array
           G[1] = timenow[0];
           G[2] = timenow[1];
         }
       }
     }


     //utmaの値を、クッキ-マネ-ジャ-オブジェクトにset
     cookiemanager.tb(G.join("."));
     //utmbをsetしていく

     J[0] = domainhash;
     J[1] = J[1] ? J[1] : 0;
     J[2] = undefined != J[2] ? J[2] : dfvls.Jc; //dfvls.Jc = 10
     J[3] = J[3] ? J[3] : G[4]; //session開始時間

     //utmbをset
     cookiemanager.ya(J.join("."));
     //utmcをset
     cookiemanager.ub(domainhash);
     //クッキ-マネ-ジャ-オブジェクトの変数gがなければ、
     //cookiemanager.setG(cookiemanager.getAllStr())でutmkの値を入れる
     NoVl(cookiemanager.lc()) || cookiemanager.setG(cookiemanager.getAllStrToHash());
     //utmaをcookieに書き込み
     cookiemanager.Cb();
     //utmbをcookieに書き込み
     cookiemanager.Ea();
     //utmcをcookieに書き込み
     cookiemanager.Db();
   };
    //End of b.pc()




   //通信用オブジェクトZ.Submitterを呼び、submitterに代入
   b.rc = function () {
     submitter = new Z.Submitter(dfvls);
   };


   //INITDATA
   b._initData = function () {
     var cmpmanager;
     //pは、このメインオブジェの変数、デフォでfalse
     if (!p) {
       if (!b.A) {
         //システム・ブラウザ情報取得
         b.A = new Z.Fb(dfvls);
         b.A.bc();
       }

       b.domainhash = b.GetDomainHash();       //ドメインハッシュを求めて、
       b.cookiemanager = new Z.CookieManager(dfvls);  //cookie管理オブジェを作って
       b.cvmanager1 = new Z.CvManager;                 //utmv下請け処理オブジェを作って
       utmvmanager = new Z.UtmvManager(dfvls, b.domainhash, b.cookiemanager, b.cvmanager1);  //utmvの処理オブジェを作る m=
       //通信用オブジェクトを呼び、変数submitterに代入
       b.rc();
     }

     if (h()) {
       b.pc(); //セッション管理処理,utma,utmb,utmc
       utmvmanager.tc();       //utmvの処理を行う
     }
     if (!p) {
       if (h()) {
         b.ia = b.Yb(b.referrer, dfvls.a.domain); //referrerとdomain名を渡す,通常はreferreが戻る
         if (dfvls.da) {
           //[domain-hash, referrer, TimeNow, dfvls]
           cmpmanager = new Z.Cmp(b.domainhash, b.ia, b.time, dfvls);
           //キャンペ-ン処理を行う。"", "utmcr=1", "utmcn=1"
           b.Ta = cmpmanager.cc(b.cookiemanager, b.isNewSession);
         }
       }
       b.cvmanager2 = new Z.CvManager; //trackEvent用オブジェの作成しておく
       p = true; //重複処理を避ける為
    }

     //b.scはGASO処理、Z.ibはGaso処理後にtrueに
     Z.ib || b.sc();
   };

   //utmbaのvisit(セッション)固有の番号を返す <domain-hash><これ><time><time><time><num>
   b._visitCode = function () {
     b._initData();
     var a = Q(b.cookiemanager.getCookieStr(), "__utma=" + b.domainhash + ".", ";");
     a = a.split(".");
     return a["length"] < 4 ? "" : a[1];
   };

   b._cookiePathCopy = function (a) {
     b._initData();
     b.cookiemanager && b.cookiemanager.Nc(b.domainhash, a);
   };


   b.sc = function () {
     var a = dfvls.a["location"].hash; //#パラメ-タが#の時。"#hell
     if (a && 1 == a.indexOf("gaso=")) a = Q(a, "gaso=", "&");
     else a = (a = dfvls.e.name) && 0 <= a.indexOf("gaso=") ? Q(a, "gaso=", "&") : Q(b.cookiemanager.getCookieStr(), da, ";");
     if (a["length"] >= 10) {
       b.B = a;
       b.Fc();
     }
     Z.ib = true;
   };

   b.NoSampling = function () { //b.J getVisitCode
     return b._visitCode() % 10000 < dfvls.samplerate * 100;
   };

    //Outbound用 trackPageview内で呼ばれる
   b.Gc = function () {
     var a, d, l = dfvls.a.links; //lにリンクをあつめる
     //自ドメインをoutboundに入れる
     if (!dfvls.lb) { //lbはsebdomain用のoutbound設定
       a = dfvls.a.domain;
       if ("www." == GaSubstr(a, 0, 4)) a = GaSubstr(a, 4);
       dfvls.outbounds.push("." + a);
     }
     //dfvls.hrefexaminlimitのdefaultは1000
     for (a = 0; a < l["length"] && (dfvls.hrefexaminlimit == -1 || a < dfvls.hrefexaminlimit); a++) {
       d = l[a];
       if (r(d.host)){
         if (!d.gatcOnclick) {
           d.gatcOnclick = d.onclick ? d.onclick : b.yc;
           d.onclick = function (t) {
             var o = !this.target || this.target == "_self" || this.target == "_top" || this.target == "_parent";
             o = o && !b.Rb(t); //b.Rb(t)で、shitt,alt,ctrlが押されたかcheck
             b.Mc(t, this, o); //送信を行う
             return o ? false : this.gatcOnclick ? this.gatcOnclick(t) : true;
           };
         };
       }
     }
   };

    //onclickが定義されてない時に、使う関数
    b.yc = function (){}; // {/a/[-1]=='a' && alert(b);}; firefoxなら、console.logが使える

   b._trackPageview = function (a) {
     if (h()) {
       b._initData();
       //dfvls.outbounds = [];//WWWWWWW delete it
       // domが構築された後でないとだめ? b._setAutoTrackOutboundが有効な場合
       dfvls.outbounds && b.Gc();
       //debugger;
       b.Lc(a); //submitterを使う
       b.isNewSession = false; //falseにして、新規セッションが終了したとさせる
     }
   };

   b._trackTrans = function () {
     var a = b.domainhash,
       d = [],
       l, t, o;
     b._initData();
     if (b.f && b.NoSampling()) {
       for (l = 0; l < b.f.Y["length"]; l++) {
         t = b.f.Y[l];
         GaPush(d, t.Ca());
         for (o = 0; o < t.R["length"]; o++) GaPush(d, t.R[o].Ca());
       }
       for (l = 0; l < d["length"]; l++) submitter.H(d[l], b.account, a, true);
     }
   };

   b._setTrans = function () {
     var a = dfvls.a,
       d, l, t;
     a = a.getElementById ? a.getElementById("utmtrans") : a.utmform && a.utmform.utmtrans ? a.utmform.utmtrans : undefined;
     b.initData();
     if (a && a.value) {
       b.f = new Z.n;
       t = a.value.split("UTM:");
       dfvls.v = !dfvls.v || "" == dfvls.v ? "|" : dfvls.v;
       for (a = 0; a < t["length"]; a++) {
         t[a] = k(t[a]);
         d = t[a].split(dfvls.v);
         for (l = 0; l < d["length"]; l++) d[l] = k(d[l]);
         if ("T" == d[0]) b._addTrans(d[1], d[2], d[3], d[4], d[5], d[6], d[7], d[8]);
         else "I" == d[0] && b._addItem(d[1], d[2], d[3], d[4], d[5], d[6])
       }
     }
   };
   b._addTrans = function (a, d, l, t, o, u, y, B) {
     b.f = b.f ? b.f : new Z.n;
     return b.f.Ob(a, d, l, t, o, u, y, B)
   };
   b._addItem = function (a, d, l, t, o, u) {
     var y;
     b.f = b.f ? b.f : new Z.n;
     (y = b.f.hb(a)) || (y = b._addTrans(a, "", "", "", "", "", "", ""));
     y.Nb(d, l, t, o, u)
   };
   b._setVar = function (a) {
     if (a && "" != a && e()) {
       b._initData();
       utmvmanager.setSetVar(GaEncode(a));
       b.NoSampling() && submitter.H("&utmt=var", b.account, b.domainhash)
     }
   };
   //a=>slot, d=>name, l=>value, t=>scope
   b._setCustomVar = function (a, d, l, t) {
     b._initData();
     return utmvmanager.setSetCustomVar(a, d, l, t);
   };
   //aはslot番号
   b._deleteCustomVar = function (a) {
     b._initData();
     utmvmanager.Ub(a);
   };
   //aはslot番号
   b._getVisitorCustomVar = function (a) {
     b._initData();
     return utmvmanager.mc(a);
   };
   //通常は5だが、、
   b._setMaxCustomVariables = function (a) {
     dfvls.maxSlot = a;
   };

   b._link = function (a, d) {
     if (dfvls.allowLinker && a) {
       b._initData();
       dfvls.a["location"].href = b._getLinkerUrl(a, d);
     }
   };
   b._linkByPost = function (a, d) {
     if (dfvls.allowLinker && a && a.action) {
       b._initData();
       a.action = b._getLinkerUrl(a.action, d);
     }
   };

   //aは[5689(11)], dは[1-5], lはvalue
   b._setXKey = function (a, d, l) {
     b.cvmanager1._setKey(a, d, l);
   };
   //使い方不明
   b._setXValue = function (a, d, l) {
     b.cvmanager1._setValue(a, d, l);
   };
   //aは[5689(11)], dは[1-5]
   b._getXKey = function (a, d) {
     return b.cvmanager1._getKey(a, d);
   };
   b._getXValue = function (a, d) {
     return b.cvmanager1._getValue(a, d);
   };
   b._clearXKey = function (a) {
     b.cvmanager1._clearKey(a);
   };
   b._clearXValue = function (a) {
     b.cvmanager1._clearValue(a);
   };
   b._createXObj = function () {
     b._initData();
     return new Z.CvManager();
   };


   b._sendXEvent = function (a) {
     var d = "";
     b._initData();
     if (b.NoSampling()) {
       d += "&utmt=event&utme=" + GaEncode(b.cvmanager1.Ac(a)) + b.getSubmittedStr();
       submitter.H(d, b.account, b.domainhash, false, true);
     }
   };

   b._createEventTracker = function (a) {
     b._initData();
     return new Z.Jb(a, b)
   };

    //[category, action, opt_label, opt_value]
   b._trackEvent = function (a, d, l, t) {
     var o = b.cvmanager2; //initDataの時に、設定された CvManager オブジェクト
     if (undefined != a && undefined != d && "" != a && "" != d) {
       o._clearKey(5);
       o._clearValue(5);
       (
         a = o._setKey(5, 1, a) &&
           o._setKey(5, 2, d) &&
           (undefined == l || o._setKey(5, 3, l)) &&
           (undefined == t || o._setValue(5, 1, t))
       )
         && b._sendXEvent(o);
     }else{
       a = false;
     }
     return a;
   };

    //OutBound用,送信処理
    //a=>event, d=>dom, l=>遷移するかどうか
   b.Mc = function (a, d, l) {
     b._initData();
     if (b.NoSampling()) {
       var localCvManager = new Z.CvManager;
       localCvManager._setKey(6, 1, d.href);
       var o = l ? function () {b.db(a, d);} : undefined; //b.dbは遷移処理
       //false, true の引数は、trackEventではなく、outBoundを示す。oは送信後実行関数
       submitter.H("&utmt=event&utme=" + GaEncode(localCvManager.getCustomVarStr()) + b.getSubmittedStr(), b.account, b.domainhash, false, true, o);
       if (l) {
         var u = this;
         dfvls.e.setTimeout(function () {
                              u.db(a, d); //遷移処理
                            },
    //この話は以下を参考、http://www.google.com/support/forum/p/Google+Analytics/thread?tid=3dfa688533e09141&hl=en
                            500);
       }
     }
   };

    //OutBound用 処理をした後に、遷移させる call from b.MC
    //遷移処理する関数は、上のdfvls.e.setTimeoutもあるが、b.dbがfront runner
    //a => event, d => dom
   b.db = function (a, d) {
     if (!a) a = dfvls.e.event;
     var l = true;
     if (d.gatcOnclick) l = d.gatcOnclick(a);
     if (l || typeof l == "undefined") if (!d.target || d.target == "_self") dfvls.e["location"] = d.href;
     else if (d.target == "_top") dfvls.e.top.document["location"] = d.href;
     else if (d.target == "_parent") dfvls.e.parent.document["location"] = d.href;
   };

    //shift, alt, ctrlが押されたかcheck OutBound用 call from b.Gc
   b.Rb = function (a) {
     if (!a) a = dfvls.e.event;
     var d = a.shiftKey || a.ctrlKey || a.altKey;
     if (!d){
       if (a.modifiers && dfvls.e.Event){
         d = a.modifiers & dfvls.e.Event.CONTROL_MASK || a.modifiers & dfvls.e.Event.SHIFT_MASK || a.modifiers & dfvls.e.Event.ALT_MASK;
       }
     }
     return d;
   };

   b.Pc = function () {
     return dfvls
   };

   b._setDomainName = function (a) {
     dfvls.domainName = a
   };
   b._addOrganic = function (a, d, l) {
     dfvls.engines.splice(l ? 0 : dfvls.engines.length, 0, new Z.Ha(a, d))
   };
   b._clearOrganic = function () {
     dfvls.engines = []
   };
   b._addIgnoredOrganic = function (a) {
     GaPush(dfvls.otherengines, a)
   };

   b._clearIgnoredOrganic = function () {
     dfvls.otherengines = [];
   };

   b._addIgnoredRef = function (a) {
     GaPush(dfvls.ignoredRef, a)
   };
   b._clearIgnoredRef = function () {
     dfvls.ignoredRef = []
   };
   b._setAllowHash = function (a) {
     dfvls.Ra = a ? 1 : 0
   };
   b._setCampaignTrack = function (a) {
     dfvls.da = a ? 1 : 0
   };
   b._setClientInfo = function (a) {
     dfvls.fa = a ? 1 : 0
   };
   b._getClientInfo = function () {
     return dfvls.fa
   };
   b._setCookiePath = function (a) {
     dfvls.cookiepath = a
   };
   b._setTransactionDelim = function (a) {
     dfvls.v = a
   };
   b._setCookieTimeout = function (a) {
     dfvls.sixmonthsec = a
   };
   b._setDetectFlash = function (a) {
     dfvls.ha = a ? 1 : 0
   };
   b._getDetectFlash = function () {
     return dfvls.ha
   };
   b._setDetectTitle = function (a) {
     dfvls.ga = a ? 1 : 0
   };
   b._getDetectTitle = function () {
     return dfvls.ga
   };
   b._setLocalGifPath = function (a) {
     dfvls.oa = a
   };
   b._getLocalGifPath = function () {
     return dfvls.oa
   };
   b._setLocalServerMode = function () {
     dfvls.I = 0
   };
   b._setRemoteServerMode = function () {
     dfvls.I = 1
   };
   b._setLocalRemoteServerMode = function () {
     dfvls.I = 2
   };
   b._getServiceMode = function () {
     return dfvls.I
   };
   b._setSampleRate = function (a) {
     dfvls.samplerate = a;
   };
   b._setSessionTimeout = function (a) {
     dfvls.thirtyminsec = a
   };
   b._setAllowLinker = function (a) {
     dfvls.allowLinker = a ? 1 : 0
   };
   b._setAllowAnchor = function (a) {
     dfvls.alloAnchor = a ? 1 : 0
   };
   b._setCampNameKey = function (a) {
     dfvls.Ia = a;
   };
   b._setCampContentKey = function (a) {
     dfvls.Ja = a;
   };
   b._setCampIdKey = function (a) {
     dfvls.Ka = a;
   };
   b._setCampMediumKey = function (a) {
     dfvls.La = a;
   };
   b._setCampNOKey = function (a) {
     dfvls.utm_nooverride = a;
   };
   b._setCampSourceKey = function (a) {
     dfvls.Na = a
   };
   b._setCampTermKey = function (a) {
     dfvls.Oa = a
   };
   b._setCampCIdKey = function (a) {
     dfvls.Pa = a
   };
   b._getAccount = function () {
     return b.account;
   };
   b._setAccount = function (a) {
     b.account = a
   };
   b._setNamespace = function (a) {
     dfvls.namespace = a ? GaEncode(a) : x
   };
   b._getVersion = function () {
     return ba;
   };
 // 外部リンクを計測する、引数には計測しないドメインを配列の形で
   b._setAutoTrackOutbound = function (a) {
     dfvls.outbounds = [];
     if (a) dfvls.outbounds = a;
   };
   b._setTrackOutboundSubdomains = function (a) {
     dfvls.lb = a;
   };
    //defaultは1000
   b._setHrefExamineLimit = function (a) {
     dfvls.hrefexaminlimit = a;
   };
   b._setReferrerOverride = function (a) {
     b.referrer = a;
   };
   b._setCookiePersistence = function (a) {
     Z.cookiepersistence = a; //utma, utmx, utmv
   };
 };

 Z._getTracker = function (f, i) {
   return new Z.Main(f, i)
 };

 var $ = {
   ca: {},

   _createAsyncTracker: function (f, i) {
     i = i || "";
     f = new Z.Main(f);
     return $.ca[i] = f;
   },

   _getAsyncTracker: function (f) {
     f = f || "";
     var i = $.ca[f];
     if (!i) {
       i = new Zx.Main;
       $.ca[f] = i;
     }
     return i;
   },

// 配列の要素を、pageTrackerオブジェクトのメソッドで実行、関数オブジェの場合はそれを実行
   push: function () {
     for (var f = arguments, i = 0, b = 0; b < f["length"]; b++) try {
       if (typeof f[b] === "function"){
         f[b]();
       }else {
         var j = "",
           c = f[b][0],
           p = c.lastIndexOf(".");
         if (p > 0) {
           j = GaSubstr(dfvls, 0, p);
           c = GaSubstr(dfvls, p + 1);
         }
         var m = $._getAsyncTracker(j);
         m[c].apply(m, f[b].slice(1));
       }
     } catch(q) {
       i++
     }
     return i;
   }
 };

  window["_gat"] = Z;
  var la = window["_gaq"];

  function na() {
    var f = window["_gaq"],
    i = false;
    if (f && typeof f.push == "function") {
      i = f.constructor == Array;
      if (!i) return
    }
    window["_gaq"] = $;
    i && $.push.apply($, f);
  }

  na();
 })();