﻿/**
* 定義値
* siteObject:データ管理オブジェクト
* myPageName:ページ名、gaugingStartメソッドの引数で渡して任意のページ名に設定する必要がある
* cookieManager:クッキー操作オブジェクト
*/
var startTime;
var myPageName;
var search_strings = "";
var listing = "";
var estate = "";
var maker = "";
var cookieManager = new CookieManager();

/**
* 参照元判定用の定義
******************************************************************************************/
var msn_ref = /^http:\/\/search\.msn.*/i;
var google_ref = /^http:\/\/(www)?\.?google.*/i;
var yahoo_ref = /^http:\/\/search\.yahoo.*/i;

// リスティングのアドコードパラメータ名をここで設定する.
var ad_code = /neyagawa=/;

// 不動産サイトはこの配列に設定する　URLに対象となるリファラーを記述し、titleに表示名を記述する
var estate_ref = [
					 { url: /^http:\/\/suumo\.jp\/.*/i, title: "SUMO" }
					,{ url: /^http:\/\/www\.panahome\.jp\/bunjyo\/.*/i, title: "パナホーム分譲サイト" }
					,{ url: /^http:\/\/www\.ie-erabi\.net\/.*/i, title: "家選びネット（大手ハウスメーカーサイト）" }
					,{ url: /^http:\/\/www\.athome\.co\.jp\/.*/i, title: "athome web" }
					,{ url: /^http:\/\/home\.adpark\.co\.jp\/.*/i, title: "ＨＯＭＥ　ＡＤＰＡＲＫ" }
					,{ url: /^http:\/\/(www\.)?(.*\.)*?home4u\.jp\/.*/i, title: "home4u " }
					,{ url: /^http:\/\/(.*\.)*?catchup-j\.com\/.*/i, title: "キャッチアップ " }
					,{ url: "http://kodate.homes.co.jp/", title: "HOME'S新築" }
					,{ url: "http://shinchiku.homes.co.jp/", title: "HOME'Sマンション" }
					,{ url: "http://rent.homes.co.jp/", title: "HOME'S賃貸" }
					,{ url: /^http:\/\/(.*\.)*?homes\.co\.jp\/.*/i, title: "HOME'S" }
					,{ url: "http://mansion.home-plaza.jp/", title: "HOMEPLAZAマンション" }
					,{ url: "http://house.home-plaza.jp/", title: "HOMEPLAZA新築" }
					,{ url: "http://land.home-plaza.jp/", title: "HOMEPLAZA土地" }
					,{ url: "http://mansion.o-uccino.jp/", title: "HOMEPLAZA中古マンション" }
					,{ url: "http://house.o-uccino.jp/", title: "HOMEPLAZA中古一戸建て" }
					,{ url: /^http:\/\/(.*\.)*?home-plaza\.jp\/.*/i, title: "HOMEPLAZA" }
					,{ url: /^http:\/\/(.*\.)*?o-uccino\.jp\/.*/i, title: "HOMEPLAZA" }
					,{ url:/^http:\/\/www\.panahome\.jp\/bunjyo\/data\/kinki\/detail\/movie\/index\.php.*/i, title: "パナホーム動画サイト" }

				];

// インターネットサイトはこの配列に設定する　URLに対象となるリファラーを記述し、titleに表示名を記述する

var maker_ref = [
/*					 { url: "", title: "" }
					,{ url: "", title: "" }
*/				];

/**
*******************************************************************************************/

/**
* 各ページのオンロードとアンオンロードにて以下の処理を呼び出す必要あり
* オンロード、アンオンロードにて別途何か処理をしているページでは、それに
* 合わせて呼び出し方を変える必要も出てくるかも
*/
/*
window.onload = function() {
	gaugingStart( "未定義ページ" );
}
*/
window.onbeforeunload = function() {
	gaugingStop();
}

window.onblur = function() {
	gaugingStop();
	resetStartTime();
}

function toRequest( url ) {
	gaugingStop();
	resetStartTime();
}

function gaugingStart( pageName ) {
	startTime = getSecondTime();
	gaugingPageStart( pageName );
}

function gaugingPageStart( pageName ) {
	myPageName = pageName;
}

function setInfoOnReferer() {
	var referrer = decodeURIComponent( document.referrer );
	var loc = document.location.href;

	if( null != referrer.match( google_ref ) ) {
		// Googleの場合
		if (referrer.match(/q=/)) {
			query = referrer.replace(/^.*[&\?]q=([^&]+)&?.*$/i, '$1');
		}
		if (loc.match(ad_code)) {
			listing = "Googleリスティング";
		}
	} else if( null != referrer.match( yahoo_ref ) ) {
		// Yahooの場合
		if (referrer.match(/q=/)) {
			query = referrer.replace(/^.*[&\?]p=([^&]+)&?.*$/i, '$1');
		}
		if (loc.match(ad_code)) {
			listing = "Yahooリスティング";
		}
	} else if( null != referrer.match( msn_ref ) ) {
		// MSNの場合
		if (referrer.match(/q=/)) {
			query = referrer.replace(/^.*[&\?]q=([^&]+)&?.*$/i, '$1');
		}
	} else {
		// 検索エンジンじゃない場合、不動産サイトと大手メーカーのチェックを行う
		for( var i = 0; i < estate_ref.length; i++ ) {
			if( null != referrer.match( estate_ref[i]["url"] ) ) {
				estate = estate_ref[i]["title"];
				break;
			}
		}
		for( var i = 0; i < maker_ref.length; i++ ) {
			if( null != referrer.match( maker_ref[i]["url"] ) ) {
				maker = maker_ref[i]["title"];
				break;
			}
		}
	}

	if ( "undefined" != typeof( query ) && "" != query ) {
		query = query.replace(/\'|"/, '');
		search_strings = query.split(/[\s,\+\.]+/).join( "," );
	}

}

function gaugingStop() {
	if( undefined == myPageName || "" == myPageName ) {
		return;
	}
	var siteObject = getSiteObject();
	setSiteStart( siteObject );
	setContentsEnd( siteObject );
	if( null != siteObject ) {
		cookieManager.setCookie( "siteObject", escape( Object.toJSON( siteObject ) ) );
	}
}

/**
********************************************************************************************************/
/**
* 時間計測などに必要なメソッド
*/

function setSiteStart( obj ) {
	var sec = getSecondTime();
	setSiteStartTime( obj, startTime );
}

function resetStartTime() {
	startTime = getSecondTime();
}

function setContentsEnd( obj ) {
	var sec = getSecondTime();

	if( "undefined" == typeof( obj.contents ) ) {
		obj.contents = {};
		obj.number = 0;
	}
	if( "undefined" == typeof( obj.contents[ myPageName ] ) ) {
		obj.contents[ myPageName ] = {};
		obj.number++;
	}

	if( "undefined" != typeof( obj.contents ) && "undefined" != typeof( obj.contents[ myPageName ] ) ) {
		var totalTime = "undefined" == typeof( obj.contents[ myPageName ][ "totalTime" ] ) ? 0 : obj.contents[ myPageName ][ "totalTime" ];
		obj.contents[ myPageName ][ "totalTime" ] = totalTime + ( sec - startTime );
		obj.contents[ myPageName ][ "number" ] = "undefined" == typeof( obj.contents[ myPageName ][ "number" ] ) ? obj.number : obj.contents[ myPageName ][ "number" ];
	}

	if( "undefined" == typeof( obj.search_word ) || "" == obj.search_word ) {
		obj.search_word = search_strings;
	}

	if( "undefined" == typeof( obj.listing ) || "" == obj.listing ) {
		obj.listing = listing;
	}

	if( "undefined" == typeof( obj.maker ) || "" == obj.maker ) {
		obj.maker = maker;
	} else if( "undefined" == typeof( obj.maker ) || "" != obj.maker ) {
		if( !isInclude( obj.maker, maker ) ) {
			obj.maker = obj.maker + "," + maker;
		}
	}

	if( "undefined" == typeof( obj.estate ) || "" == obj.estate ) {
		obj.estate = estate;
	}
}

function isInclude( obj, tstr ) {
	var ret = false;
	var list = obj.split( "," );

	for( var i = 0; i < list.length; i++ ) {
		if( list[i].match( tstr ) ) {
			ret = true;
			break;
		}
	}

	return ret;
}

/**
********************************************************************************************************/
/**
* 汎用ライブラリ的な、、メソッド
*/

function getSiteObject() {
	var siteObject = cookieManager.getCookie( "siteObject" );
	siteObject = null == siteObject ? {} : eval( "(" + unescape( siteObject ) + ")" );
	return siteObject;
}

function getBData() {
	var b_data;
	b_data = cookieManager.getCookie( "bData" );
	b_data = null == b_data ? null : eval( "(" + unescape( b_data ) + ")" );
	return b_data;
}

function setSiteStartTime( obj, sec ) {
	var startTime = obj[ "startTime" ];
	obj[ "startTime" ] = "undefined" != typeof( startTime ) ? startTime : sec;
}

function getSecondTime() {
	var now = new Date();
	var sec = parseInt( now.getTime() / 1000 );
	return sec;
}

/*
***************************************************************************************************************/

