﻿/**
* 定義値
* siteObject:データ管理オブジェクト
* myPageName:ページ名、gaugingStartメソッドの引数で渡して任意のページ名に設定する必要がある
* cookieManager:クッキー操作オブジェクト
*/
var startTime;
var myPageName;
var search_strings = "";
var search = "";
var listing = "";
var estate = "";
var maker = "";
var cookieManager = new CookieManager();

/**
* 参照元判定用の定義
******************************************************************************************
gauging_setting.js にて行い、セットで読み込みして使用する形式に変更

/**
*******************************************************************************************/

/**
* 各ページのオンロードとアンオンロードにて以下の処理を呼び出す必要あり
* オンロード、アンオンロードにて別途何か処理をしているページでは、それに
* 合わせて呼び出し方を変える必要も出てくるかも
*/
/*
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 {
			search = "Google";
		}
	} else if( null != referrer.match( yahoo_ref ) ) {
		// Yahooの場合
		if (referrer.match(/[&\?]p=/)) {
			query = referrer.replace(/^.*[&\?]p=([^&]+)&?.*$/i, '$1');
		}
		if (loc.match(ad_code)) {
			listing = "Yahooリスティング";
		} else {
			search = "Yahoo";
		}
	} else if( null != referrer.match( msn_ref ) ) {
		// MSNの場合
		search = "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.estate ) || "" == obj.estate ) {
		obj.estate = estate;
	} else if( "undefined" == typeof( obj.estate ) || "" != obj.estate ) {
		if( !isInclude( obj.estate, estate ) && "" != estate ) {
			obj.estate = obj.estate + "," + estate;
		}
	}

	if( "undefined" == typeof( obj.maker ) || "" == obj.maker ) {
		obj.maker = maker;
	} else if( "undefined" == typeof( obj.maker ) || "" != obj.maker ) {
		if( !isInclude( obj.maker, maker ) && "" != maker ) {
			obj.maker = obj.maker + "," + maker;
		}
	}

	var source = listing;
	if( "" != search ) {
		source = search;
	} else if( "" != estate ) {
		source = "不動産サイト";
	} else if( "" != maker ) {
		source = "インターネットサイト";
	}
	if( "undefined" == typeof( obj.costomersource ) || "" == obj.costomersource ) {
		obj.costomersource = source;
	} else if( "undefined" == typeof( obj.costomersource ) || "" != obj.costomersource ) {
		if( !isInclude( obj.costomersource, source ) && "" != source ) {
			obj.costomersource = obj.costomersource + "," + source;
		}
	}

	if( "undefined" == typeof( obj.costomerprocess ) || "" == obj.costomerprocess ) {
		obj.costomerprocess = listing + search + estate + maker;
	} else if( "undefined" == typeof( obj.costomerprocess ) || "" != obj.costomerprocess ) {
		if( !isInclude( obj.costomerprocess, estate + maker ) && "" != estate + maker ) {
			obj.costomerprocess = obj.costomerprocess + "," + listing + search + estate + maker;
		}
	}
}

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;
}

/*
***************************************************************************************************************/

