// **********************************************************************************
// 
//     アクセスログ取得プログラム
// ==================================================================================
// ProgramID:loging.js
// 作成日:2006/11/09
// 作成者:吉岡　誠
// ----------------------------------------------------------------------------------
// 更新日:2006/12/11
// 更新者:吉岡　誠
// ==================================================================================
// 機能:JavaScriptを使用し、閲覧者のリファラー情報を取得
//      クッキーからクライアントIDを取得。なければ作成し登録する。
//      ログを書き出すperlプログラムに値を付加し呼び出す。
// 
// **********************************************************************************


// ==================================================================================
// コンストラクタと初期化
// 別ファイルconst.js にファイルパスを収録
// conLogUrl　　はログ取得CGIへのパスとファイル名を結合したもの
// 概念図:↓
// var conLogUrl = "/cgi-bin/WPI_ACC/CGI/access_rog.cgi?";// ログ取得プログラムへのアドレス
// ==================================================================================


var strMyFile_name = window.location.href;//         自分のファイル名：http付き
var strMyReferrer;// 							     どこからの遷移で来たのか:http付き

if (parent.frames.length > 0){
	strMyReferrer = parent.document.referrer;
}else{
	strMyReferrer = document.referrer;
}
var strMyclient_id = "";//                           クッキーを使ったクライアントID
// 20070205 add program


var res = ret_keyword(strMyReferrer);

// 20070205 add program End

var arrayMyCookie = new Object();//                            取得クッキー格納用変数


// ---------------------------------------------------------------------------------
//  動作確認エリア　動作確認が取れればコメントアウトして下さい。
// ---------------------------------------------------------------------------------
// window.document.write('JavaScript動作確認');
// window.document.write('<P>リファラ：'+window.document.referrer);
// window.document.write('<P>自ファイル：'+window.location.href);
// window.document.write('<P>');
// 動作確認エリア End


// ==================================================================================
// クッキーの取得ロジック
// ----------------------------------------------------------------------------------
// 取得できれば既定の変数に格納。
// できなければ新規クライアントID発行＆クッキーセット
// ==================================================================================
/* クッキー取得ルーチン */
arrayMyCookie = getCookie();

if(arrayMyCookie != false){					// クッキーが取得できればクライアントID用変数に格納
	strMyclient_id = arrayMyCookie[0];
}else{
	strMyclient_id = makeClientID();		// クッキーが取れなければ新規ID発行
	setCookie(strMyclient_id);				// 新しく作成したIDをクッキーに登録
}


// ==================================================================================
// 書き出しロジック
// ----------------------------------------------------------------------------------
// ログファイル生成用プログラム（perlプログラム）書き出す
// http://〜?クエリを付加
// ==================================================================================

window.document.write("<script type=\"text/JavaScript\" src=\"" + conLogUrl + "htm=" + strMyFile_name + "&ref=" + strMyReferrer + "&now=" + getNow() + "&client_id=" + strMyclient_id +  "&key=" + res + "\"></script>");



// ******  program end  ******  program end  ******  program end  ******  program end  ******  program end  ******  program end  ******  program end  ******


// **********************************************************************************
// 
//      現在日付取得サブルーチン
// 
// ==================================================================================
// 引数:なし
// 戻り値:YYYYMMDDhhmmss
// ----------------------------------------------------------------------------------
// 機能:現在日付をYYYYMMDDhhmmss形式で返す。
// 使い方:
// string = getNow();
// **********************************************************************************

function getNow(){
	Now = new Date();
	var year = Now.getFullYear();
	var month = Now.getMonth()+1;
	var date = Now.getDate();
	var hours = Now.getHours();
	var minutes = Now.getMinutes();
	var seconds = Now.getSeconds();
	if(month < 10)
		month = "0" + month;
	if(date < 10)
		date = "0" + date;
	if(minutes < 10)
		minutes = "0" + minutes;
	if(seconds < 10)
		seconds = "0" + seconds;
	
	//   YYYYMMDDhhmmss
 	
	var ret = year + '' + month + '' + date + '' + hours + '' + minutes + '' + seconds;
	
	return ret;
	
}// end function getNow


// **********************************************************************************
// 
//      クライアントID自動生成サブルーチン
// 
// ==================================================================================
// 引数:なし
// 戻り値:生成された20桁の文字列
// ----------------------------------------------------------------------------------
// 機能:ランダムに作成された20桁の文字列を返す。
// 使い方:
// string = makeClientID();
// **********************************************************************************
// 新規クライアントID取得　20桁のランダムなIDを自動生成する。
// 生成後はクッキーにして埋め込み。
// 条件として本日始めての来訪者である場合。

function makeClientID(){
	var client_id = '';
	var rndpass = new Array("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z",
	"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","_","-",
	"1","2","3","4","5","6","7","8","9");
	
	//　２０桁のランダムな文字を作成しこれをクライアントＩＤとする
	
	for(i = 0;i < 20;i++){
		a = Math.floor(Math.random() * rndpass.length);
		client_id += rndpass[a];
	}// end for
	return client_id;
}// end function makeClientID


// **********************************************************************************
// 
//      クッキー取得サブルーチン
// 
// ==================================================================================
// 引数:なし
// 戻り値:取得成功時　Array  失敗時 false
// ----------------------------------------------------------------------------------
// 機能:クッキーを取得する。取得できなければfalseを、取れれば配列を返す
//      取得するクッキー:クライアントID
// 使い方:
// (Array or false) = getCookie();
// **********************************************************************************

function getCookie(){
	var ret_str = new Array;
	var theBigCookie=document.cookie;
	var c_Array = theBigCookie.split(";");

	for(i=0; i<c_Array.length; i++){
		var a = c_Array[i].split("=");

		// indexOf を使い該当するクッキー名が存在するか検索する。
		if(a[0].indexOf("client_id", 0) >= 0){
			ret_str[0] = unescape(a[1]);
			// ret_str[0] = a[1];
		}
	}// end for
		if(ret_str.length == 1){
			
			return ret_str;
		}else{
			return false;
		}// End if


}// end function getCookie


// **********************************************************************************
// 
//      クッキーセットサブルーチン
// 
// ==================================================================================
// 引数1:クライアントID string
// 戻り値:無し
// ----------------------------------------------------------------------------------
// 機能:引数を元にクッキーをセットする。有効期間は24時間である。
// 使い方:
// setCookie(string);
// **********************************************************************************

function setCookie(client_id){
	Exp = new Date();
	Exp.setTime(Exp.getTime()+(24*60*60*1000));// 24時間
	//クッキーネーム=クッキー値
	cookie1 = "client_id=" + escape(client_id);
	Expires = "expires=" + Exp.toGMTString();
	//セットクッキー
	document.cookie = cookie1 + ";" + Expires
}// end function setCookie

// **********************************************************************************
// 
//      キーワード取得サブルーチン
// 
// ==================================================================================
// 引数1: リファラ
// 戻り値: キーワード
// ----------------------------------------------------------------------------------
// 機能: 検索エンジンごとにキーワードの渡し方がちがうp= だったりtext= だったり　それをキーワードごとに分ける
// 使い方:res = ret_keyword();
// 				キーワード 
// **********************************************************************************

function ret_keyword(referrer){
	var result = false;
	var keyword = '';
	var ret = '';
	var search_engine = new Array();
	
	search_engine[0] = new Array();
	search_engine[0][0] = 'google.co';
	search_engine[0][1] = 'q';
	search_engine[1] = new Array();
	search_engine[1][0] = 'yahoo.co.jp';
	search_engine[1][1] = 'p';
	search_engine[2] = new Array();
	search_engine[2][0] = 'www.excite.co.jp';
	search_engine[2][1] = 'search';
	search_engine[3] = new Array();
	search_engine[3][0] = 'odn.excite.co.jp';
	search_engine[3][1] = 'search';
	search_engine[4] = new Array();
	search_engine[4][0] = 'apple.excite.co.jp';
	search_engine[4][1] = 's';

	search_engine[5] = new Array();
	search_engine[5][0] = 'nifty.com';
	search_engine[5][1] = 'Text';
	search_engine[6] = new Array();
	search_engine[6][0] = 'dion.ne.jp';
	search_engine[6][1] = 'QueryString';
	search_engine[7] = new Array();
	search_engine[7][0] = 'infoseek.co.jp';
	search_engine[7][1] = 'qt';
	search_engine[8] = new Array();
	search_engine[8][0] = 'goo.ne.jp';
	search_engine[8][1] = 'MT';
	
	search_engine[9] = new Array();
	search_engine[9][0] = 'alltheweb.com';
	search_engine[9][1] = 'q';
	
	search_engine[10] = new Array();
	search_engine[10][0] = 'search.lycos.co.jp';
	search_engine[10][1] = 'qt';

	search_engine[11] = new Array();
	search_engine[11][0] = 'dir.lycos.co.jp';
	search_engine[11][1] = 'q';
	
	search_engine[12] = new Array();
	search_engine[12][0] = 'aol.com';
	search_engine[12][1] = 'query';

	search_engine[13] = new Array();
	search_engine[13][0] = 'netscape.com';
	search_engine[13][1] = 'query';

	search_engine[14] = new Array();
	search_engine[14][0] = 'biglobe.ne.jp';
	search_engine[14][1] = 'q';
	
	search_engine[15] = new Array();
	search_engine[15][0] = 'msn.co.jp';
	search_engine[15][1] = 'q';
	
	search_engine[16] = new Array();
	search_engine[16][0] = 'search.dmoz.org';
	search_engine[16][1] = 'search';
	
	search_engine[17] = new Array();
	search_engine[17][0] = 'allabout.co.jp';
	search_engine[17][1] = 'qs';
	
	search_engine[18] = new Array();
	search_engine[18][0] = 'freshye.com';
	search_engine[18][1] = 'kw';
	
	search_engine[19] = new Array();
	search_engine[19][0] = 'exvote';
	search_engine[19][1] = 'keyword';
	
	var max = search_engine.length;
	for(i = 0;i < max; i++){
		res = referrer.match(search_engine[i][0]);
		if(res){
			var Name = new RegExp(search_engine[i][1] + "=([^\s&]*)", "i");
			
			res = referrer.match(Name);
			if(res){
				ret = RegExp.$1;
				return ret;
			}// if End
		}
	}// for End
	return ret;


}// function ret_keyword End














































