ac.parfait.top Open in urlscan Pro
210.152.87.176  Public Scan

URL: https://ac.parfait.top/fpc/cookie_js.php
Submission: On December 08 via api from IE — Scanned from JP

Form analysis 0 forms found in the DOM

Text Content

var catsNum          = '1001';


var paramCatsid      = '';
var paramCatsIdArray = [];
var paramCatsResult  = false;
var cookie          = catsGetCookie();
var catsDomain       = catsGetDomain(); // スクリプト呼び出しドメイン

if ( (typeof(cid) === 'undefined' ) ) var cid = '';
if ( (typeof(gid) === 'undefined' ) ) var gid = '';


/**
 * パラメータを解析してクッキーに保存する
 */

try {
    if (location.search.match(/cats_sid=(.*?)(&|$)/)) {
        paramCatsid = decodeURIComponent(location.search.match(/cats_sid=(.*?)(&|$)/)[1]);// 現在アクセスしているページのURLパラメータを正規表現で取得する。
    }

    // ドット区切りでパラメータを分割する
    paramCatsIdArray = paramCatsid.split('.');

     // 離脱→再流入(URLパラメータを伴っていない)
    if (paramCatsIdArray == '') {
       if (cookie.hasItem('CCATS' + cid)) {
          // P_CCATS = Parameter_ContentId_Cats の略
          paramCatsid = cookie.getItem('P_CCATS' + cid) + '.' + cookie.getItem('CCATS' + cid);
          // ドット区切りでパラメータを分割する
          paramCatsIdArray = paramCatsid.split('.');
          // バリデーションの実施
          if (cidValidate(cid, paramCatsIdArray) === false) {
            catsExit('');
          }
       } else if (cookie.hasItem('GCATS' + gid)) {
          // P_GCATS = Parameter_GroupId_Cats の略
          paramCatsid = cookie.getItem('P_GCATS' + gid) + '.' + cookie.getItem('GCATS' + gid);;
          // ドット区切りでパラメータを分割する
          paramCatsIdArray = paramCatsid.split('.');
          // バリデーションの実施
          if (gidValidate(gid, paramCatsIdArray) === false) {
            catsExit('');
          }
       } else {
          catsExit('');
       }
    }

    // バリデーションの実施
     if (paramValidate(paramCatsIdArray) === false) {
        catsExit('');
     }

    // 有効期限の作成
    var nowtime    = new Date().getTime();
    var clearTime  = new Date(nowtime + (60 * 60 * 24 * 1000 * paramCatsIdArray[2]));
    var expires    = clearTime.toGMTString(); // toGMTString インターネットグリニッジ標準時 (GMT) 協定に基づき、与えられた日付を表す文字列。

    // CIDのクッキーを残す
    var origin = catsGetOriginDomain();

    // CCATS = ContentId_Cats の略
    document.cookie = 'CCATS' + paramCatsIdArray[0] + '=' + paramCatsIdArray[3] + '; expires=' + expires + '; path=/; domain=.' + origin;
    // P_CCATS = Parameter_ContentId_Cats の略
    document.cookie = 'P_CCATS' + paramCatsIdArray[0] + '=' + paramCatsIdArray[0] + '.' + paramCatsIdArray[1] + '.' + paramCatsIdArray[2] + '; expires=' + expires + '; path=/; domain=.' + origin;
    // GIDがある場合クッキーを残す
    if (paramCatsIdArray[1] != 0) {
        // GCATS = GroupId_Cats の略
        document.cookie = 'GCATS' + paramCatsIdArray[1] + '=' + paramCatsIdArray[3] + '; expires=' + expires + '; path=/; domain=.' + origin;
        // P_GCATS = Parameter_GroupId_Cats の略
        document.cookie = 'P_GCATS' + paramCatsIdArray[1] + '=' + paramCatsIdArray[0] + '.' + paramCatsIdArray[1] + '.' + paramCatsIdArray[2] + '; expires=' + expires + '; path=/; domain=.' + origin;
    }

    paramCatsResult = true;

} catch (errorMsg) {
	// console.log('ITP_Error!: ');
	// console.log(errorMsg);
}

try {
	// 付与するパラメータがない場合は処理しない
	if (paramCatsResult == false) {
		catsExit('');
	}
	// パラメータを付与するスクリプトを読み込ませる
	// defer付きで読み込むのでコールバックで呼ばれる処理は最後になる
	catsLoadScript(catsDomain + '/fpc/param.js', paramCatsIdArray, function(paramCatsIdArray) {
		catsAddParameter(paramCatsIdArray);
	});
} catch (errorMsg) {
}

/**
 * スクリプトファイルを動的に読み込み生成する
 *
 * @param src 読み込むソースファイルのURL
 * @param paramCatsIdArray パラメータ配列
 * @param callback コールバック関数
 * @returns
 */
function catsLoadScript(src, paramCatsIdArray, callback) {
	var done     = false;
	var head     = document.getElementsByTagName('head')[0];
	var script   = document.createElement('script');
	script.src   = src;
	script.defer = true;
	script.async = false;
	head.appendChild(script);
	// Attach handlers for all browsers
	script.onload = script.onreadystatechange = function() {
		if ( !done && (!this.readyState ||
				this.readyState === 'loaded' || this.readyState === 'complete') ) {
			done = true;
			callback(paramCatsIdArray);
			//Handle memory leak in IE
			script.onload = script.onreadystatechange = null;
			if ( head && script.parentNode ) {
			//	head.removeChild( script );
			}
	    }
	};
}

/**
 * cats_sidのバリデーション
 * @param paramCatsId Array パラメータ配列
 * @return boolean true エラーなし / false エラーあり
 */
function paramValidate(paramCatsIdArray) {

    if (paramCatsIdArray.length != 4) {
        return false;
    }

    // 広告IDの検証
    if ( (typeof(paramCatsIdArray[0]) === 'undefined' || paramCatsIdArray[0] === null) || isNaN(paramCatsIdArray[0] ) !== false ) {
        return false;
    } else {
    	if(paramCatsIdArray[0] < 0){
            return false;
     	}
    }

    // 広告グループIDの検証
    if ( (typeof(paramCatsIdArray[1]) === 'undefined' || paramCatsIdArray[1] === null) || isNaN(paramCatsIdArray[1]) !== false ) {
        return false;
    } else {
    	if(paramCatsIdArray[1] < 0){
            return false;
     	}
    }

    // クッキー保存期間の検証
    if ( (typeof(paramCatsIdArray[2]) === 'undefined' || paramCatsIdArray[2] === null) || isNaN(paramCatsIdArray[2]) !== false || paramCatsIdArray[2] == 0) {
        return false;
    } else {
    	if(paramCatsIdArray[2] < 0){
            return false;
     	}
    }

    // アフィリエイトIDの検証
    if ( (typeof(paramCatsIdArray[3]) === 'undefined' || paramCatsIdArray[3] === null) || paramCatsIdArray[3] === "") {
        return false;
    } else if (paramCatsIdArray[3].match(/[^A-Za-z0-9]+/)) { // 半角英数字以外の文字が存在する場合、エラー
        return false;
    } else if( paramCatsIdArray[3].length != 16){ // 16桁でなければエラー
        return false;
    }

    return true;
}

/**
 * cidのバリデーション
 * @param cid 広告ID
 * @param paramCatsId Array パラメータ配列
 * @return boolean true エラーなし / false エラーあり
 */
function cidValidate(cid, paramCatsIdArray) {

    // 広告IDの検証
    if ( (typeof(cid) === 'undefined' || cid === null) || isNaN(cid) !== false ) {
       return false;
    } else {
    	if(cid < 0){
            return false; // マイナス値はエラー
     	}
    }

    // URLパラメータの値とタグに指定してある値が異なる
    if(paramCatsIdArray[0] != cid){
        return false;
    }

    return true;
}

/**
 * gidのバリデーション
 * @param gid 広告グループID
 * @param paramCatsId Array パラメータ配列
 * @return boolean true エラーなし / false エラーあり
 */
function gidValidate(gid, paramCatsIdArray) {

    // 広告グループIDの検証
    if ( (typeof(gid) === 'undefined' || gid === null) || isNaN(gid) !== false ) {
       return false;
    } else {
    	if(gid < 0){
            return false; // マイナス値はエラー
     	}
    }

    // URLパラメータの値とタグに指定してある値が異なる
    if(paramCatsIdArray[1] != gid){
        return false;
    }

    return true;
}

/**
 * クッキー情報を取得しオブジェクトとして返却する
 * https://developer.mozilla.org/ja/docs/Web/API/Document/cookie
 * @return オブジェクト クッキー情報
 */
function catsGetCookie()
{
	var docCookies = {
		getItem: function (sKey) {
			if (!sKey || !this.hasItem(sKey)) { return null; }
			return unescape(document.cookie.replace(new RegExp("(?:^|.*;\\s*)" + escape(sKey).replace(/[\-\.\+\*]/g, "\\$&") + "\\s*\\=\\s*((?:[^;](?!;))*[^;]?).*"), "$1"));
		},
		setItem: function (sKey, sValue, vEnd, sPath, sDomain, bSecure) {
			if (!sKey || /^(?:expires|max\-age|path|domain|secure)$/i.test(sKey)) { return; }
			var sExpires = "";
			if (vEnd) {
				switch (vEnd.constructor) {
					case Number:
						sExpires = vEnd === Infinity ? "; expires=Tue, 19 Jan 2038 03:14:07 GMT" : "; max-age=" + vEnd;
						break;
					case String:
						sExpires = "; expires=" + vEnd;
						break;
					case Date:
						sExpires = "; expires=" + vEnd.toGMTString();
						break;
				}
			}
			document.cookie = escape(sKey) + "=" + escape(sValue) + sExpires + (sDomain ? "; domain=" + sDomain : "") + (sPath ? "; path=" + sPath : "") + (bSecure ? "; secure" : "");
		},
		removeItem: function (sKey, sPath) {
			if (!sKey || !this.hasItem(sKey)) { return; }
			document.cookie = escape(sKey) + "=; expires=Thu, 01 Jan 1970 00:00:00 GMT" + (sPath ? "; path=" + sPath : "");
		},
		hasItem: function (sKey) {
			return (new RegExp("(?:^|;\\s*)" + escape(sKey).replace(/[\-\.\+\*]/g, "\\$&") + "\\s*\\=")).test(document.cookie);
		},
		keys: /* optional method: you can safely remove it! */ function () {
			var aKeys = document.cookie.replace(/((?:^|\s*;)[^\=]+)(?=;|$)|^\s*|\s*(?:\=[^;]*)?(?:\1|$)/g, "").split(/\s*(?:\=[^;]*)?;\s*/);
			for (var nIdx = 0; nIdx < aKeys.length; nIdx++) { aKeys[nIdx] = unescape(aKeys[nIdx]); }
			return aKeys;
		}
	};
	return docCookies;
}

/**
 * 現在のスクリプトの呼び出しドメインを取得する
 * @return string ドメイン(ex http://ad.cats.jp)
 */
function catsGetDomain()
{
    var currentScript = document.getElementById('cats_script'+catsNum).src;
	var urlArray      = currentScript.match(/^(.*?:\/\/)(.*?)([a-z0-9][a-z0-9\-]{1,63}\.[a-z\.]{2,6})[\:[0-9]*]?([\/].*?)?$/i);
	return urlArray[1] + urlArray[2] + urlArray[3];
}

/**
 * サブドメインなしのドメイン名を取得する
 * @return string サブドメインなしのドメイン名
 */
function catsGetOriginDomain()
{
	var origin      = '';
	var sessionName = 's';
	var cookie      = catsGetCookie();

	// ドメインをピリオドで分割
	var domains = location.hostname.split('.').reverse();
	var length  = domains.length;

	// トップレベルから順に回してクッキーをセットしていく
	for (var i= 0; i < length; i++) {
		// 仮ドメインを生成
		var bufOrigin = domains.slice(0, i + 1).reverse().join('.');

		// 仮ドメインを用いてクッキーをセット
		document.cookie = sessionName + '=s; domain=.' + bufOrigin + '; path=/';

		// セットしたクッキーの値が取得できたら利用可能かつ一番高いレベルのドメインであるとみなし、オリジンとする
		if (cookie.hasItem(sessionName)) {
			origin = bufOrigin;
		}

		// 先にセットしたクッキーを削除しておく
		document.cookie = sessionName + '=; domain=.' + bufOrigin + '; path=/; Max-age=0';

		// オリジンがセットできたら終了
		if (origin) {
			break;
		}
	}

	return origin;
}

/**
 * 例外処理の実行させる為のexit関数
 * @param errorMsg エラーメッセージ
 */
function catsExit(errorMsg) {
	throw (errorMsg);
}