/*
 * analytics.js v1.2.0
 * Google Analytics 用のトラッキングコードを仕込む(非同期トラッキングコード対応版)
 */

// #### トラッキング用クラス ####
// インスタンス生成時に引数を指定しない場合、下記の初期値がセットされる
var GP_Analytics = function(fileTypes, gaUA, outPath) {
  // 内部リンクの場合、トラッキングしない拡張子
  this.fileTypes = fileTypes || ["html","htm","php","pl","cgi","asp","aspx","jsp"];
  // Google Analytics UA
  this.gaUA = gaUA || "UA-300381-26";
  // 外部リンクの場合に URL の頭に付加する識別用ディレクトリ(フィルタでサブディレクトリのトラフィックのみ計測する場合は /dir/outgoing/ のような形にする)
  this.outPath = outPath || "/ff14/outgoing/";
};
GP_Analytics.prototype = {
  createOutgoingTrackPath: function(url) {
    // 外部リンクの URL を検証し、対象であればトラッキング用のパスを返す
    var trac_path = "";
    var p_pos = url.indexOf("://");
    trac_path = this.outPath + url.substring( (p_pos + "://".length) , url.length );
    return trac_path;
  },
  createIngoingTrackPath: function(url) {
    // 内部リンクの URL を検証し、対象であればトラッキング用のパスを返す
    var trac_path = "";
    // http://www.hoge.jp/dir/ や http://www.hoge.jp/dir/# のような URL をはじく
    if ( (url.charAt(url.length - 1) != "/") && (! url.match("#")) ) {
      var urlArray = url.split(".");
      var extension = urlArray[urlArray.length - 1];
      urlArray = extension.split("?");
      extension = urlArray[0];
      // http://www.hoge.jp/dir のようなリンクをはじく(この例だと拡張子は .jp/dir になっている)
      if ( ! extension.match("/") ) {
        if ($.inArray(extension, this.fileTypes) == -1) {
          if ( (url.match(/^http:|https:/)) && ( url.match(location.hostname)) ) {
            var d_pos = url.indexOf(location.hostname);
            trac_path = url.substring( (d_pos + location.hostname.length) , url.length );
          } else {
            trac_path = url;
          }
        }
      }
    }
    return trac_path;
  },
  track: function(_gaq, url) {
    // 外部リンク or 内部リンク判定し、トラッキング対象の URL であればトラッキング
    var trac_path = "";
    // 外部リンク or 内部リンク判定
    if ( (url.match(/^http:|https:/)) && (! url.match(location.hostname)) ) {
      trac_path = this.createOutgoingTrackPath(url);
    } else {
      trac_path = this.createIngoingTrackPath(url);
    }
    // trac_path がセットされていたらトラッキング
    if ( trac_path ) {
      _gaq.push(["_trackPageview", trac_path.toString()]);
    }
  }
};

// ### インスタンス生成 ###
var gp_analytics1 = new GP_Analytics();

// ### Google Analytics の初期コード実行 ###
var _gaq = _gaq || [];
_gaq.push(["_setAccount", gp_analytics1.gaUA]);
_gaq.push(["_trackPageview"]);

(function() {
  var ga = document.createElement("script"); ga.type = "text/javascript"; ga.async = true;
  ga.src = ("https:" == document.location.protocol ? "https://ssl" : "http://www") + ".google-analytics.com/ga.js";
  var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(ga, s);
})();

// #### イベントごとの処理 ####
$(document).ready(function(){

  // <a> タグのクリック時の制御を行う
  $("a").click(function(){
    gp_analytics1.track(_gaq, this.href);
  });

  // submit クリック時の制御を行う
  $(":submit").click(function(){
    var e_wk = document.createElement("span");
    e_wk.innerHTML = "<a href='" + $(this).parents("form").attr("action") + "' />";
    gp_analytics1.track(_gaq, e_wk.firstChild.href);
  });

});

