
// ログ収集サーバにあるイメージファイル
//var _imgpath="http://10.66.1.104/ecx/images/Access.gif";
var _imgpath="/ec/images/Access.gif";

//-- Auto/Organic Sources and Keywords
var _searchWebSite=new Array();
var _searchKeyWord=new Array();
var _searchEngine=new Array();
_searchWebSite[0]="google";	_searchKeyWord[0]="q";		_searchEngine[0]="Googlebot";
_searchWebSite[1]="yahoo";	_searchKeyWord[1]="p";		_searchEngine[1]="Yahoo! Slurp";
_searchWebSite[2]="msn";	_searchKeyWord[2]="q";		_searchEngine[2]="MSNBot";
_searchWebSite[3]="baidu";	_searchKeyWord[18]="wd";	_searchEngine[3]="Baiduspider";


//-- 無視のキーワード
var _ignoeKeyWord=new Array();

var _exeFlg,_url,_udl=document.location;
var _referrer,_refDomain="",_refKeyword="",_accesstime,_title,_uid,_userAgent,_banner,_logType;
var _pcMobileFlg="0";	//0:PC; 1:Docomo; 2:au; 3:softbank;
var _logFlg="1";		//1:

function itforecTracker(page) {
 //プロトコルは「file」の場合、該当スクリプトが実行しない
 if (_udl.protocol=="file:") return;
 //同じ画面で２回目実行の場合、該当スクリプトが実行しない
 if (_exeFlg && (!page || page=="")) return;

 _userAgent=navigator.userAgent;
 for (var ii=0;ii<_searchEngine.length;ii++) {
   if (_userAgent.toLowerCase().indexOf(_searchEngine[ii].toLowerCase()) > -1) 
   return;
  }
  
 var strParameter="";
 _referrer=document.referrer;
 //リファラーのドメイン取得
 getReferrerDomain();
 strParameter+="referrer=" +_refDomain;

 //リファラーの検索キーワード取得
 getReferrerKeyword("1");
 strParameter+="&keyword=" +_refKeyword;

 //乱数で疑似セッションID作成
 _uid=getCookieUnitid();
 if(!_uid || _uid=="") {
    getUnitid();
 }
 var expireTime=new Date(); expireTime.setTime(expireTime.getTime()+(3*60*60*1000));
 document.cookie = "unitid=" + _uid + ";expires=" + expireTime.toGMTString()+";path=/";
 strParameter+="&uid=" +_uid;
 
 
 //アクセス時間取得
 //アクセス時間はサーバ側で取るために、削除する
 //var dateFormat = new DateFormat("yyyy/MM/dd HH:mm:ss SSS"); 
 //var _accesstime = dateFormat.format(new Date()); // Date(現在時刻)をStringに変換 
 //strParameter+="&accesstime=" + _accesstime;

 //ＵＲＬ追加
 _urlpath=_udl.pathname;
 strParameter+="&url="+_urlpath;

 //タイトル追加
 _title=document.title;
 strParameter+="&title="+_uES(_title);

 //ＰＣモバイル区分
 strParameter+="&pcMobileFlg="+_pcMobileFlg;

 //バナー&ログ種類
 if(page && page!=""){
   _logType="2";
   _banner=page;
 }else{
   _logType="1";
   _banner="";
 }
 strParameter+="&banner="+_banner;
 strParameter+="&logType="+_logType;
 
 // パラメータをサーバへ送信する
 //
  var img=new Image(1,1);
  img.src=_imgpath+"?"+strParameter;
  img.onload=function() { _uVoid(); }
  _exeFlg=1;
  return;
}

function getCookieUnitid(){
  var kword = "unitid" + "=";
  var data = "",start,end;
  var scookie = document.cookie + ";";
  start = scookie.indexOf(kword);
  if (start != -1){    
    end = scookie.indexOf(";", start);
    data = unescape(scookie.substring(start + kword.length, end));
  }
  return data;
}

//7桁の乱数生成関数
function getUnitid(){
  var i=0;
  while(!(i>=0.1&&i<1)) i=Math.random();
  _uid=Math.round(i*10000000);
}


//リファラーのドメイン取得関数
function getReferrerDomain(){
 if (!_referrer ||_referrer=="") return "";
 var i=0,h,k;
 if ((i=_referrer.indexOf("://")) < 0) return "";
 h=_referrer.substring(i+3,_referrer.length);
 if (h.indexOf("/") > -1) {
  h=h.substring(0,h.indexOf("/"));
 }
  var dm=document.domain;
  var p=_referrer.indexOf(dm);
  if ((p>=0) && (p<=8)) { h=""; }
  if (_referrer.indexOf("[")==0 && _referrer.lastIndexOf("]")==(_referrer.length-1)) { h=""; }
 _refDomain=h;
}
//リファラーのキーワード取得関数
function getReferrerKeyword(flg) {
 if (!_referrer ||_referrer=="") return "";
 if (!_refDomain ||_refDomain=="") return "";
 var j,k,m;
 for (var i=0;i<_searchWebSite.length;i++) {
  if (_refDomain.toLowerCase().indexOf(_searchWebSite[i].toLowerCase()) > -1) {
   if ((j=_referrer.indexOf("?"+_searchKeyWord[i]+"=")) > -1 || (j=_referrer.indexOf("&"+_searchKeyWord[i]+"=")) > -1) {
    m=_referrer.substring(j+_searchKeyWord[i].length+2,_referrer.length);
    if ((j=m.indexOf("&")) > -1) m=m.substring(0,j);
    for (var y=0;y<_ignoeKeyWord.length;y++) {
     if (_ignoeKeyWord[y].toLowerCase()==m.toLowerCase()) { _ufno=1; break; }
    }
    if (flg){
      _refKeyword=_uEC(m);
      return;
    }else{
     _refKeyword="utmccn=(organic)|utmcsr="+_uEC(_searchWebSite[i])+"|"+"utmctr="+_uEC(m)+"|utmcmd=organic";
     return;
    }
   }
  }
 }
 return "";
}
function _uVoid() { return; }

function _uEC(s) {
  var n="";
  if (!s || s=="") return "";
  for (var i=0;i<s.length;i++) {if (s.charAt(i)==" ") n+="+"; else n+=s.charAt(i);}
  return n;
}

function _uES(s,u) {
 if (typeof(encodeURIComponent) == 'function') {
  if (u) return encodeURI(s);
  else return encodeURIComponent(s);
 } else {
  return escape(s);
 }
}
function _uUES(s) {
 if (typeof(decodeURIComponent) == 'function') {
  return decodeURIComponent(s);
 } else {
  return unescape(s);
 }
}

var DateFormat = function(pattern) {
  this._init(pattern);
};

DateFormat.prototype = {
  _init: function(pattern) {

    this.pattern = pattern;
    this._patterns = [];

    for (var i = 0; i < pattern.length; i++) {
      var ch = pattern.charAt(i);
      if (this._patterns.length == 0) {
        this._patterns[0] = ch;
      } else {
        var index = this._patterns.length - 1;
        if (this._patterns[index].charAt(0) == "'") {
          if (this._patterns[index].length == 1 
             || this._patterns[index].charAt(this._patterns[index].length - 1) != "'") {
            this._patterns[index] += ch;
          } else {
            this._patterns[index + 1] = ch;
          }
        } else if (this._patterns[index].charAt(0) == ch) {
          this._patterns[index] += ch;
        } else {
          this._patterns[index + 1] = ch;
        }
      }
    }
  },

  format: function(date) {

    var result = [];
    for (var i = 0; i < this._patterns.length; i++) {
      result[i] = this._formatWord(date, this._patterns[i]);
    }
    return result.join('');
  },
  _formatWord: function(date, pattern) {

    var formatter = this._formatter[pattern.charAt(0)];
    if (formatter) {
      return formatter.apply(this, [date, pattern]);
    } else {
      return pattern;
    }
  },
  _formatter: {
    "y": function(date, pattern) {
      // Year
      var year = String(date.getFullYear());
      if (pattern.length <= 2) {
        year = year.substring(2, 4);
      } else {
        year = this._zeroPadding(year, pattern.length);
      }
      return year;
    },
    "M": function(date, pattern) {
      // Month in year
      return this._zeroPadding(String(date.getMonth() + 1), pattern.length);
    },
    "d": function(date, pattern) {
      // Day in month
      return this._zeroPadding(String(date.getDate()), pattern.length);
    },
    "H": function(date, pattern) {
      // Hour in day (0-23)
      return this._zeroPadding(String(date.getHours()), pattern.length);
    },
    "m": function(date, pattern) {
      // Minute in hour
      return this._zeroPadding(String(date.getMinutes()), pattern.length);
    },
    "s": function(date, pattern) {
      // Second in minute
      return this._zeroPadding(String(date.getSeconds()), pattern.length);
    },
    "S": function(date, pattern) {
      // Millisecond
      return this._zeroPadding(String(date.getMilliseconds()), pattern.length);
    },
    "'": function(date, pattern) {
      // escape
      if (pattern == "''") {
        return "'";
      } else {
        return pattern.replace(/'/g, '');
      }
    }
  },

  _zeroPadding: function(str, length) {
    if (str.length >= length) {
      return str;
    }

    return new Array(length - str.length + 1).join("0") + str;
  },


  /// Parser ///
  parse: function(text) {

    if (typeof text != 'string' || text == '') return null;

    var result = {year: 1970, month: 1, day: 1, hour: 0, min: 0, sec: 0, msec: 0};

    for (var i = 0; i < this._patterns.length; i++) {
       if (text == '') return null; // parse error!!
       text = this._parseWord(text, this._patterns[i], result);
       if (text === null) return null; // parse error!!
    }
    if (text != '') return null; // parse error!!

    return new Date(
                result.year,
                result.month - 1,
                result.day,
                result.hour,
                result.min,
                result.sec,
                result.msec);
  },
  _parseWord: function(text, pattern, result) {

    var parser = this._parser[pattern.charAt(0)];
    if (parser) {
      return parser.apply(this, [text, pattern, result]);
    } else {
      if (text.indexOf(pattern) != 0) {
        return null;
      } else {
        return text.substring(pattern.length);
      }
    }
  },
  _parser: {
    "y": function(text, pattern, result) {
      // Year
      var year;
      if (pattern.length <= 2) {
        year = text.substring(0, 2);
        year = year < 70 ? '20' + year : '19' + year;
        text = text.substring(2);
      } else {
        var length = (pattern.length == 3) ? 4 : pattern.length;
        year = text.substring(0, length);
        text = text.substring(length);
      }
      if (!this._isNumber(year)) return null; // error
      result.year = parseInt(year, 10);
      return text;
    },
    "M": function(text, pattern, result) {
      // Month in year
      var month;
      if (pattern.length == 1 && text.length > 1
          && text.substring(0, 2).match(/1[0-2]/) != null) {
        month = text.substring(0, 2);
        text  = text.substring(2);
      } else {
        month = text.substring(0, pattern.length);
        text  = text.substring(pattern.length);
      }
      if (!this._isNumber(month)) return null; // error
      result.month = parseInt(month, 10);
      return text;
    },
    "d": function(text, pattern, result) {
      // Day in month
      var day;
      if (pattern.length == 1 && text.length > 1 
          && text.substring(0, 2).match(/1[0-9]|2[0-9]|3[0-1]/) != null) {
        day  = text.substring(0, 2);
        text = text.substring(2);
      } else {
        day  = text.substring(0, pattern.length);
        text = text.substring(pattern.length);
      }
      if (!this._isNumber(day)) return null; // error
      result.day = parseInt(day, 10);
      return text;
    },
    "H": function(text, pattern, result) {
      // Hour in day (0-23)
      var hour;
      if (pattern.length == 1 && text.length > 1
          && text.substring(0, 2).match(/1[0-9]|2[0-3]/) != null) {
        hour = text.substring(0, 2);
        text = text.substring(2);
      } else {
        hour = text.substring(0, pattern.length);
        text = text.substring(pattern.length);
      }
      if (!this._isNumber(hour)) return null; // error
      result.hour = parseInt(hour, 10);
      return text;
    },
    "m": function(text, pattern, result) {
      // Minute in hour
      var min;
      if (pattern.length == 1 && text.length > 1
          && text.substring(0, 2).match(/[1-5][0-9]/) != null) {
        min  = text.substring(0, 2);
        text = text.substring(2);
      } else {
        min  = text.substring(0, pattern.length);
        text = text.substring(pattern.length);
      }
      if (!this._isNumber(min)) return null; // error
      result.min = parseInt(min, 10);
      return text;
    },
    "s": function(text, pattern, result) {
      // Second in minute
      var sec;
      if (pattern.length == 1 && text.length > 1
          && text.substring(0, 2).match(/[1-5][0-9]/) != null) {
        sec  = text.substring(0, 2);
        text = text.substring(2);
      } else {
        sec  = text.substring(0, pattern.length);
        text = text.substring(pattern.length);
      }
      if (!this._isNumber(sec)) return null; // error
      result.sec = parseInt(sec, 10);
      return text;
    },
    "S": function(text, pattern, result) {
      // Millimsecond
      var msec;
      if (pattern.length == 1 || pattern.length == 2) {
        if (text.length > 2 && text.substring(0, 3).match(/[1-9][0-9][0-9]/) != null) {
          msec = text.substring(0, 3);
          text = text.substring(3);
        } else if (text.length > 1 && text.substring(0, 2).match(/[1-9][0-9]/) != null) {
          msec = text.substring(0, 2);
          text = text.substring(2);
        } else {
          msec = text.substring(0, pattern.length);
          text = text.substring(pattern.length);
        }
      } else {
        msec = text.substring(0, pattern.length);
        text = text.substring(pattern.length);
      }
      if (!this._isNumber(msec)) return null; // error
      result.msec = parseInt(msec, 10);
      return text;
    },
    "'": function(text, pattern, result) {
      // escape
      if (pattern == "''") {
        pattern = "'";
      } else {
        pattern = pattern.replace(/'/g, '');
      }
      if (text.indexOf(pattern) != 0) {
        return null; // error
      } else {
        return text.substring(pattern.length);
      }
    }
  },

  _isNumber: function(str) {
    return /^[0-9]*$/.test(str);
  }
}
