﻿/* -------------
GA.utils.js

20101116 ryow.net(MIT Lisence)

about:
http://analytics.ryow.net/2010/10/11-120034.php


isVisitor
true：リピーター / false：初訪

visits
何回目の訪問か(セッション数)

recency
前回の訪問から何日経ったか

pageviews
今回のセッションで何ページ閲覧しているか

campaign
cookie内のトラフィックキャンペーン
デフォルトはnone

media
cookie内のトラフィックメディア
主にはorganic,cpc,referrel,none

source
cookie内のトラフィックソース
主にはリンク元ドメイン

version
バージョン

------------- */

var gaUtil ={
  isVisitor:false,
  visits:0,
  recency:0,
  pageviews:0,
  campaign:'',
  media:'',
  source:'',
  version:'1.0.4',

  init:function(){
    this.isVisitor = this._isVisitor();
    this.visits = this._countOfVisits();
    this.recency = this._visitorRecency();
    this.pageviews = this._sessionPageviews();
    this.campaign = this._getUtmCampaignCookie();
    this.media = this._getUtmMediaCookie();
    this.source = this._getUtmSourceCookie();
  },

  _isVisitor:function(){
    var cookiename = "__utma";
    var ret = false;
    var c = document.cookie.split(';');
    for (var i=0;i<c.length;i++){
      if(cookiename == c[i].split('=')[0].replace(/^(\s+)|(\s+$)/g, '')){
        var _utma = c[i].split("=")[1];
        var cookieBirthTime = _utma.split(".")[2];
        var cookieNowTime = _utma.split(".")[4];

        if(cookieBirthTime != cookieNowTime){
          ret = true;
        }
      }
    }
    return ret;
  },

  _countOfVisits:function(){
    var cookiename = "__utma";
    var ret = 0;
    var c = document.cookie.split(';');
    var count ="";
    for (var i=0;i<c.length;i++){
      if(cookiename == c[i].split('=')[0].replace(/^(\s+)|(\s+$)/g, '')){
        var _utma = c[i].split("=")[1];
        count = _utma.split(".")[5];
      }
    }
    ret = Number(count);
    return ret;
  },

  _visitorRecency:function(){
    var cookiename = "__utma";
    var ret = 0;
    var c = document.cookie.split(';');
    var cookieNowTime;
    var cookiePreviousTime;
    for (var i=0;i<c.length;i++){
      if(cookiename == c[i].split('=')[0].replace(/^(\s+)|(\s+$)/g, '')){
        var _utma = c[i].split("=")[1];
        cookieNowTime = Number(_utma.split(".")[3]);
        cookiePreviousTime = Number(_utma.split(".")[4]);
      }
    }
    var time = cookiePreviousTime - cookieNowTime;
    if(time>0){
      time = Math.round(time/86400);
    }
    ret = time;
    if(isNaN(ret) ) ret =0;

    return ret;
  },

  _sessionPageviews:function(){
    var cookiename = "__utmb";
    var ret = 0;
    var c = document.cookie.split(';');
    for (var i=0;i<c.length;i++){
      if(cookiename == c[i].split('=')[0].replace(/^(\s+)|(\s+$)/g, '')){
        var _utmb = c[i].split("=")[1];
        var pageviews = Number(_utmb.split(".")[1]);
      }
    }
    ret = Number(pageviews);
    if(isNaN(ret) ) ret =1;

    return ret;
  },

  _getUtmMediaCookie:function(){
    var cookiename = "__utmz";
    var ret = 'none';
    var c = document.cookie.split(';');
    for (var i=0;i<c.length;i++){
      if(cookiename == c[i].split('=')[0].replace(/^(\s+)|(\s+$)/g, '')){
        var _media = c[i].split("utmcmd=")[1];
        if(_media != undefined){
          if(_media.indexOf("|") != -1){
            ret = _media.split("|")[0];
            ret = ret.replace(/\(|\)/g,"");
          }
        }
      }
     }
    return ret;
  },

  _getUtmSourceCookie:function(){
    var cookiename = "__utmz";
    var ret = 'none';
    var c = document.cookie.split(';');
    for (var i=0;i<c.length;i++){
      if(cookiename == c[i].split('=')[0].replace(/^(\s+)|(\s+$)/g, '')){
        var _src = c[i].split("utmcsr=")[1];
        if(_src != undefined){
          if(_src.indexOf("|") != -1){
            ret = _src.split("|")[0];
            ret = ret.replace(/\(|\)/g,"");
          }
        }
      }
     }
    return ret;
  },

  _getUtmCampaignCookie:function(){
    var cookiename = "__utmz";
    var ret = 'none';
    var c = document.cookie.split(';');
    for (var i=0;i<c.length;i++){
      if(cookiename == c[i].split('=')[0].replace(/^(\s+)|(\s+$)/g, '')){
        var _campaign = c[i].split("utmccn=")[1];
        if( _campaign != undefined){
          if(_campaign.indexOf("|") != -1){
            ret = _campaign.split("|")[0];
            ret = ret.replace(/\(|\)/g,"");
          }
        }
      }
     }
    return ret;
  }

}


gaUtil.init();





