/*
Copyright(C) 1998-2007 京葉システム株式会社. All Rights Reserved.
本プログラムは、弊社提供のシステム内で、
所定の目的に沿っての実行のみを許諾します。
その他の流用・公開・解析等の一切を禁止します。

＞履歴



2016/10/05 T.Yoshihara TW10




2007/10/10-01	Y.Watanabe	変更 SSL対応。
・非SSL側のResponse.Headerへのcookie値の漏出を避ける。
2007/06/05-01	Y.Watanabe	変更 パスワード管理強化。
2000/08/29-1	Y.Watanabe	改訂 r3.2.6。
2000/05/08 11:12:04	Y.Watanabe	追加 r1.7.0。

＞守備範囲
単純な一次元配列をクッキーに保存。
※エスケープ処理はないので値によっては正常動作しません。
・記号「:」「=」「;」等。
・キー名「path」「domain」「expires」等。
*/

//[s]2006082901 改訂
var vpjBag = new function () {

	var cssDefaultName = "TWE";
	//cookie keynameの既定値。

	var cssSplitChar  = ":";
	//配列要素を区切る文字。

	var csoTest = new RegExp("[^" + cssSplitChar + "]");
	//「区切り文字」以外の文字を探す。

	function fsoGetAssocArray(caoFrame) {
	//クッキーから連想配列を取得する。

		var vloResult = {};

		var vlsaPair = caoFrame.document.cookie.split(/; */);
		//文字列「キー名=キー値」の配列。

		var vlnNum = vlsaPair.length;
		for (var vlnIdx = 0; vlnIdx < vlnNum; vlnIdx ++) {
			with (vlsaPair[vlnIdx]) {
				var vlnPos = indexOf("=");
				if (vlnPos < 1) {
				//先頭が「=」のケースは弾く。
				//「=」がない場合も弾く。
				} else {
					var vlsName = substring(0, vlnPos);
					var vlsValue = substring(vlnPos + 1, length);
					vloResult[vlsName] = vlsValue;
				}
			} //item
		} //for

		return vloResult;

	} //fsoGetAssocArray

	this.fpsGetValue = function (caoFrame, casName) {
	//キー名を指定して文字列をクッキーに保存する。
	//※連想配列が必要なケースは少ないことを想定。
	//・同一pathで大量のキー名を併用しない。
	//・同一箇所のロジックで複数キー名で並行処理しない。

		return fsoGetAssocArray(caoFrame)[casName];

	} //vpjBag.fpsGetValue

	this.spSetValue = function (caoFrame, casName, casValue) {
	//キー名を指定して文字列をクッキーに保存する。

		if (casValue == null) {
		//値がnullならクッキーを削除する。
			var vlnMonths = -1;
		} else {
		//さもなくば有効期間＝２ヶ月とする。
			var vlnMonths = 2;
		}

		var vldExpired = new Date;
		with (vldExpired) setMonth(getMonth() + vlnMonths);
		//有効期限。

		with (caoFrame.location.pathname) {
			var vlsFolder = substring(0, lastIndexOf("/") + 1);
			//※末尾の「/」を含める。
		}

//[s]2007101001 変更
		var vlsa = [
			casName + "=" + casValue,
			"expires=" + vldExpired.toGMTString(),
			"path=" + vlsFolder
		];

		if (caoFrame.location.protocol.toLowerCase() != "http:") vlsa.push("secure");
		//安全に倒すため、「httpsか」ではなく「非httpか」とした。

		caoFrame.document.cookie = vlsa.join(";");
//[e]2007101001 変更

	} //vpjBag.spSetValue

//[s]2007060501 追加
	function fssEscape (/*ByVal*/ casValue) {
		if (casValue.indexOf("\x5C") >= 0) casValue = casValue.replace(/\\/g, "\\x5C");

		if (casValue.indexOf("\x3D") >= 0) casValue = casValue.replace(/=/g , "\\x3D");
		if (casValue.indexOf("\x3B") >= 0) casValue = casValue.replace(/;/g , "\\x3B");
		if (casValue.indexOf("\x3A") >= 0) casValue = casValue.replace(/:/g , "\\x3A");

		return casValue;
	}

	function fssUnescape (/*ByVal*/ casValue) {
		if (casValue.indexOf("\\x3A") >= 0) casValue = casValue.replace(/\\x3A/g, "\x3A");
		if (casValue.indexOf("\\x3B") >= 0) casValue = casValue.replace(/\\x3B/g, "\x3B");
		if (casValue.indexOf("\\x3D") >= 0) casValue = casValue.replace(/\\x3D/g, "\x3D");

		if (casValue.indexOf("\\x5C") >= 0) casValue = casValue.replace(/\\x5C/g, "\x5C");

		return casValue;
	}

	function ssConvertArray (casaValue, caoConvert) {
		var vlnNum = casaValue.length;
		for (var vln_ = 0; vln_ < vlnNum; vln_++) {
			casaValue[vln_] = caoConvert(casaValue[vln_].toString());
		}
	} //ssEscapeArray
//[e]2007060501 追加

	this.xpPut = function (caoFrame, caoArray) {
	//配列をクッキーに保存する。
	//※旧来の仕様と互換を取る。

		//配列のシリアル化。
//[s]2007060501 変更
		var vlsa = caoArray.slice(0, caoArray.length);
		ssConvertArray(vlsa, fssEscape);
		var vlsValue = vlsa.join(cssSplitChar);
//[e]2007060501 変更

		if (vlsValue.search(csoTest) < 0) {
		//配列が空ならクッキーを削除する。
			vlsValue = null;
		}

		this.spSetValue(caoFrame, cssDefaultName, vlsValue);

	} //vpjBag.xpPut

	this.fpjGet = function (caoFrame) {
	//クッキーから配列を取得する。
	//※旧来の仕様と互換を取る。

		var vlsValue = this.fpsGetValue(caoFrame, cssDefaultName);
		//キー値を取得する。

		//配列の逆シリアル化。
		if (vlsValue == null) {
			return [];
		} else {
//[s]2007060501 変更
			var vlsa = vlsValue.split(cssSplitChar);
			ssConvertArray(vlsa, fssUnescape);
			return vlsa;
//[e]2007060501 変更
		}

	} //vpjBag.fpjGet

} //vpjBag
//[e]2006082901 改訂
