//====================================================================
// Cookie処理用ライブラリ
// 2010/03/17 nausus sd
//====================================================================

// クッキー配列の数を取得
function CookieDimCount(aKey)
{
	var cnam, cval, cnt;
	
	// 登録済配列の個数分スキャン
	cnam = aKey + "_count";
	cval = CookieGet(cnam);
	if(cval == "")		cnt = 0;
	else				cnt = parseInt(cval);
	
	return cnt;
}

// クッキー配列に値を追加
function CookieDimAdd(aKey, aValue, aDate)
{
	var cnam, cval, inam, val, esc;
	var i, cnt;
	
	// 初期設定
	esc = escape(aValue);
	
	// 登録済配列の個数分スキャン
	cnam = aKey + "_count";
	cval = CookieGet(cnam);
	if(cval == "")		cnt = 0;
	else				cnt = parseInt(cval);
	for(i = 0; i < cnt; i++) {
		// 値を取得
		inam = aKey + "_" + i;
		val = CookieGet(inam);
		
		// 既に登録されていたら何もしない
		if(val == aValue) return;
	}
	
	// 新しい値で登録
	inam = aKey + "_" + cnt;
	CookieSet(inam, aValue, aDate);
	
	// カウンタを更新
	cnt++;
	CookieSet(cnam, escape(cnt), aDate);
}

// クッキー配列から値を削除
function CookieDimRemove(aKey, aValue, aDate)
{
	var cnam, cval, inam, val, esc, wnam, wval;
	var i, cnt, j;
	
	// 初期設定
	esc = escape(aValue);
	
	// 登録済配列の個数分スキャン
	cnam = aKey + "_count";
	cval = CookieGet(cnam);
	if(cval == null)	cnt = 0;
	else				cnt = parseInt(cval);
	
	for(i = 0; i < cnt; i++) {
		// 値を取得
		inam = aKey + "_" + i;
		val = CookieGet(inam);
		if(val != null) val = val.slice(0, aValue.length);
		
		// 既に登録されていたら削除
		if(val == aValue) {
			// 一つ先の値をループして代入
			for(j = i + 1; j < cnt; j++) {
				wnam = aKey + "_" + j;
				wval = CookieGet(wnam);
				wnam = aKey + "_" + (j - 1);
				CookieSet(wnam, wval);
			}
			
			// カウンタを更新
			cnt--;
			CookieSet(cnam, escape(cnt), aDate);
			
			return;
		}
	}
}

// クッキーの値に指定された値が既に設定されているかどうかチェック
function CookieCheck(aValues, aCheck)
{
	var div;
	var i, cnt;
	
	div = aValues.split(",");
	cnt = div.length;
	for(i = 0; i < cnt; i++)
		if(div[i] == aCheck) return true;
	
	return false;
}

// クッキーの値を取得する
function CookieGet(aKey)
{
	var div, cmd;
	var i, cnt;
	
	// クッキー文字列を分割してスキャン
	div = document.cookie.split("; ");
	cnt = div.length;
	for(i = 0; i < cnt; i++) {
		// keyとvalueに分割
		cmd = div[i].split("=");
		
		// keyが一致したかどうかチェック
		if(cmd[0] == aKey) {
			return unescape(cmd[1]);
		}
	}
	
	return "";
}

// クッキーの値を設定する
function CookieSet(aKey, aValue, aDate)
{
	var exp = new Date();
	
	// クッキーの期限を1年間にする
	exp.setTime(exp.getTime() + aDate * 1000 * 60 * 60 * 24);
	esc = escape(aValue);
	document.cookie = aKey + "=" + esc + "; expires=" + exp.toGMTString() + "; path=/";
}

// クッキーに値を追加する
function CookieAdd(aKey, aValue, aDate)
{
	var exp = new Date();
	var div, cmd, esc;
	var flg = false;
	var i, cnt;
	
	// クッキーの期限を1年間にする
	exp.setTime(exp.getTime() + aDate * 1000 * 60 * 60 * 24);
	esc = escape(aValue);
	
	// クッキー文字列を分割してスキャン
	div = document.cookie.split("; ");
	cnt = div.length;
	for(i = 0; i < cnt; i++) {
		// keyとvalueに分割
		cmd = div[i].split("=");
		
		// keyが一致したかどうかチェック
		if(cmd[0] == aKey) {
			// valueが空かどうかチェック
			if(cmd[1] != null && cmd[1] != "") {
				// 処理済みフラグを設定
				flg = true;
				
				// 既に登録されているかどうかチェック
				if(CookieCheck(cmd[1], esc) == false) {
					// 登録されていないので、値を追加して登録
					document.cookie = aKey + "=" + cmd[1] + "," + esc + "; expires=" + exp.toGMTString() + "; path=/";
				}
			}
		}
	}
	if(flg == false) {
		// 一致するkeyが存在しないので、初回のクッキー登録を行う
		document.cookie = aKey + "=" + esc + "; expires=" + exp.toGMTString() + "; path=/";
	}
}

// クッキーから値を削除する
function CookieRemove(aKey, aValue, aDate)
{
	var exp = new Date();
	var div, cmd, parm, val, esc;
	var i, cnt, j, jcnt;
	
	// クッキーの期限を1年間にする
	exp.setTime(exp.getTime() + aDate * 1000 * 60 * 60 * 24);
	esc = escape(aValue);
	
	// クッキー文字列を分割してスキャン
	div = document.cookie.split("; ");
	cnt = div.length;
	for(i = 0; i < cnt; i++) {
		// keyとvalueに分割
		cmd = div[i].split("=");
		
		// keyが一致したかどうかチェック
		if(cmd[0] == aKey) {
			// valueに値が含まれているかどうかチェック
			if(CookieCheck(cmd[1], esc) == true) {
				// valueを一つずつ確認しながら、該当する値を抜く
				parm = "";
				val = cmd[1].split(",");
				jcnt = val.length;
				for(j = 0; j < jcnt; j++) {
					if(val[j] != esc) {
						if(parm == "")	parm = val[j];
						else			parm += "," + val[j];
					}
				}
				
				// クッキーを再設定
				if(parm == "")	exp.setTime(0);
				document.cookie = aKey + "=" + parm + "; expires=" + exp.toGMTString() + "; path=/";
			}
		}
	}
}

