/*-----------------------------------------------------------------------
 * cookie関数
 *
 * DEPENDENCIES
 *  - 
 *
 * @(#) $Revision: 3426 $ (keimana)
 *-----------------------------------------------------------------------
 */

// COOKIE取得、設定に関する定義
var  MEMORYCOOKIE_NAME    ="KM_SS"; // メモリcookie
var  FILECOOKIE_NAME      ="KM_ST"; // ファイルcookie
var  KENCOOKIE_NAME      ="KEN_ST"; // ファイルcookie
var  CHIKISSCD_NAME      ="CHIKI_SS_CD"; // 地域コードのCOOKIE情報のメモリ情報
var  CHIKICOOKIE_NAME    ="CHIKI_ST"; // 地域コードのCOOKIE情報
var  COOKIE_DOMAIN        ="keikotomanabu.net"; // ドメイン
var static_escape_char='%';
var static_delimitor_name=':';
var static_delimitor_value='|';
var static_delimitor_cookie=';';
var static_delimitor_cname='=';

/*
 * デリミタ(:|)が文字列中にある場合には、%をつける
 * @param  string job      編集する文字列
 * @return string job      編集後の文字列
 */
function static_escape_string(job)
{
	// 引数jobが存在しない場合、空文字を返す
	if(job == null) {
		return "";
	}

	// 文字列を編集（:→%:）
	job = job.replace(static_delimitor_name, static_escape_char+static_delimitor_name);

	// 文字列を編集（|→%|）
	job = job.replace(static_delimitor_value, static_escape_char+static_delimitor_value);

	// 値を返す
	return job;
}

/*
 * エスケープ(%)されたデリミタ(:|)が文字列中にある場合には、%を外す
 * @param  string job      編集する文字列
 * @return string job      編集後の文字列
 */
function static_unescape_string(job)
{

	// 引数jobが存在しない場合、空文字を返す
	if(job == null) {
		return "";
	}

	// 文字列を編集（%:→:）
	job = job.replace(static_escape_char+static_delimitor_name, static_delimitor_name);

	// 文字列を編集（%|→|）
	job = job.replace(static_escape_char+static_delimitor_value, static_delimitor_value);

	// 値を返す
	return job;
}

/*
 * クッキーを分割して、対象となる名前の値を返す
 * @param cookie      クッキー文字列
 * @param name        対象名(Array)
 * @return            
 */
function km_cookie_get_value(cookie, name)
{
	var item;
	var c_num, c_num2;
	var i_num;
	var i, flag;
	var nname, value;

	// 引数cookieまたは引数nameが存在しない場合、NULLを返す
	if(cookie == null || name == null) {
		return null;
	}
	cookie = unescape(cookie);
	c_num = 0;
	flag = 0;
	for(i = 0; flag == 0; ++i) {
		c_num2 = c_num;
		c_num = cookie.indexOf(static_delimitor_cookie, c_num2+1);
		if(c_num == -1) {
			c_num = cookie.length;
			flag = 1;
		}
		if(c_num2 != 0) {
			++c_num2;
		}
		str = cookie.substring(c_num2, c_num);
		i_num = str.indexOf(static_delimitor_cname);
		
		if(i_num != -1) {
			nname = str.substring(0, i_num);
			value = str.substring(i_num+1, str.length);
			if(nname.length > 0) {
				nname = nname.replace(/^\s+|\s+$/g, "");
			}
			if(value.length > 0) {
				value = value.replace(/^\s+|\s+$/g, "");
			}
		}
		if(nname == name) {
			return value;
		}
	}
	return null;
}

/*
 * クッキーから値を取得する
 * @param cookie      クッキー文字列
 * @param name        対象名
 */
function km_cookie_get_unzip(cookie, name)
{
	var nname;
	var value;
	var num, num2, num3;
	var flag = 0;
	
	if(cookie == null || name == null) {
		return null;
	}
	
	// クッキー内をnameで探す
	nname = static_escape_string(name);
	if(nname.length == 0) {
		return null;
	}
	num = cookie.indexOf(nname) ;
	if(num == -1) {
		return null;
	}
	flag = 1;
	while(flag == 1) {
		// nameがエスケープされてないかをチェックする
		num2 = cookie.indexOf(static_delimitor_name, num);
		if(cookie.charAt(num2-static_escape_char.length) == static_escape_char) {
			num = num2+static_delimitor_name.length;
			flag = 1;
		} else if(num2 == -1) {
			flag = 0;
		} else {
			num2+=static_delimitor_name.length;
			flag = 0;
		}
	}
	flag = 1;
	num = num2;
	while(flag == 1) {
		// valueがエスケープされていないかをチェックする
		num3 = cookie.indexOf(static_delimitor_value, num);
		if(cookie.charAt(num3-static_escape_char.length) == static_escape_char) {
			num = num3+static_delimitor_value.length;
			flag = 1;
		} else {
			flag = 0;
		}
	}
	if(num2 <= -1) {
		return null;
	}
	if(num3 <= -1) {
		num3 = cookie.length;
	}
	value = cookie.substring(num2, num3);
	return static_unescape_string(value);
}

/*
 * クッキー用の設定文字列を作成する
 * @param cookiename      クッキー文字列
 * @param cookievalue     対象名
 * @param expr            対象時間(nullだと未設定）
 */
function km_cookie_set_value(cookiename, cookievalue, expr)
{
	var str;
	
	if(cookiename == null) {
		return null;
	}
	if(cookievalue == null) {
		cookievalue = "";
	}
	
	str = cookiename + "=" + escape(cookievalue) + "; domain=" + COOKIE_DOMAIN + "; path=/";
	if(expr != null) {
		str = str + "; Expires="+expr;
	}
	return str;
}

/*
 * クッキー用にExpire時間を生成する
 * ３ヶ月後の２５日を生成する
 *
 */
function km_session_expr(str)
{
	var nowtime;
	var nflag = 0;
	var datestr;
	var nmonth;
	var yobi = new Array("Sun", "Mon", "Tue", "Wed", "Thu", "Fir", "Sat");
	var tuki = new Array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec");
	
	if(str == null || str.length == 0) {
		nowtime = new Date();
	} else {
		nowtime = new Date(str);
	}
	
	if(nowtime.getDate() > 25) {
		nflag = 1;
	}
	nowtime.setDate(25);

	if(nowtime.getMonth() > (8-nflag)) {
		nowtime.setFullYear(nowtime.getFullYear() + 1);
	}
	nmonth=(nowtime.getMonth() + 3 + nflag) % 12;
	nowtime.setMonth(nmonth);
	
	datestr = yobi[nowtime.getDay()]+", "+nowtime.getDate()+"-"+tuki[nowtime.getMonth()]+"-"+nowtime.getFullYear()+" 00:00:00 GMT";
	return datestr;
}

/*
 * クッキー用にExpire時間を生成する
 * 削除用の時間を返す
 *
 */
function km_session_expr_remove()
{
	return "Thu, 1-Jan-1970 00:00:00 GMT";
}

/*
 * クッキーに値を設定する
 * @param cookie      クッキー文字列
 * @param name        対象名
 */
function km_cookie_zip_touroku(cookie, name, value)
{
	var nname;
	var num, num2, num3, num4;
	var flag = 0;
	var newcookie;
	
	if(name == null) {
		return null;
	}
	if(cookie == null) {
		cookie = "";
	}
	// クッキー内をnameで探す
	nname = static_escape_string(name);
	if(nname.length == 0) {
		return null;
	}
	if(value != null) {
		value = static_escape_string(value);
	}
	num = cookie.indexOf(nname) ;

	if(num > -1) {
		// 置換対象となるnameがすでに存在する
		// name:valueの文字列を取り除く
		flag = 1;
		num4 = num;
		while(flag == 1) {
			// nameがエスケープされてないかをチェックする
			num2 = cookie.indexOf(static_delimitor_name, num4);
			if(cookie.charAt(num2-static_escape_char.length) == static_escape_char) {
				num4 = num2+static_delimitor_name.length;
				flag = 1;
			} else if(num2 == -1) {
				flag = 0;
			} else {
				num2+=static_delimitor_name.length;
				flag = 0;
			}
		}
		flag = 1;
		num4 = num2;
		while(flag == 1) {
			// valueがエスケープされていないかをチェックする
			num3 = cookie.indexOf(static_delimitor_value, num4);
			if(cookie.charAt(num3-static_escape_char.length) == static_escape_char) {
				num4 = num3+static_delimitor_value.length;
				flag = 1;
			} else if(num3 == -1) {
				flag = 0;
			} else {
				num3+=static_delimitor_value.length;
				flag = 0;
			}
		}
		if(num3 <= -1) {
			num3 = cookie.length;
			num-=static_delimitor_value.length;
		}
		if(num2 > -1) {
			newcookie = cookie.substring(0, num) + cookie.substring(num3, cookie.length);
		} else {
			newcookie = cookie;
		}
	} else {
		newcookie = cookie;
	}
	
	// valueがの場合は、値の削除
	if(value != null) {
		// クッキーに追加する
		if(newcookie.length == 0) {
			newcookie = nname + static_delimitor_name + value;
		} else {
			newcookie = newcookie + static_delimitor_value + nname + static_delimitor_name + value;
		}
	}
	
	return newcookie;
}


