
//■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
//	JavaScript - ライブラリ
//■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■



//■■■■■■■■■■■■
//	バリデーション
//■■■■■■■■■■■■



/**
 *****************************************************************************************************
 * ■■■バイト数取得■■■
 *
 * @update	2006-12-8
 *
 * @param	string	str	対象文字列
 * @return	int		バイト数
 *****************************************************************************************************
 */

function GET_byte(str)
{
	var byte = 0;
	for(i=0; i<str.length; i++){
		n = escape(str.charAt(i));
		if(n.length < 4){byte++;}
		else            {byte += 2;}
	}
	return byte;
}



/**
 *****************************************************************************************************
 * ■■■空チェック■■■
 *
 * 文字列が空白文字のみかチェック。
 * @update	2007-9-19
 *
 * @param	string		対象文字列（可変長引数）
 * @return	bool		true（空有り） or false（空無し）
 *****************************************************************************************************
 */

function VLD_kara()
{
	var i;
	for(i=0; i<VLD_kara.arguments.length; i++){
		if(VLD_kara.arguments[i].match(/^[\s　]*$/)){return true;}
	}
	return false;
}



/**
 *****************************************************************************************************
 * ■■■半角数字チェック■■■
 *
 * @update	2007-5-18
 *
 * @param	string	v	対象文字列
 * @return	bool		true（半角数字） or false（半角数字以外混入）
 *****************************************************************************************************
 */

function VLD_num(v)
{
	var i;
	for(i=0; i<v.length; i++){
		c = v.charAt(i);
		if ("0123456789".indexOf(c,0) < 0){return false;}
	}
	return true;
}



/**
 *****************************************************************************************************
 * ■■■全半角数字チェック■■■
 *
 * @update	2007-9-19
 *
 * @param	string		対象文字列（可変長引数）
 * @return	bool		true（全半角数字） or false（全半角数字以外混入）
 *****************************************************************************************************
 */

function VLD_num_zenhan()
{
	var i;
	for(i=0; i<VLD_num_zenhan.arguments.length; i++){
		if(!VLD_num(CNV_han_num(VLD_num_zenhan.arguments[i]))){return false;}
	}
	return true;
}



/**
 *****************************************************************************************************
 * ■■■半角英数チェック■■■
 *
 * @update	2007-5-11
 *
 * @param	string	str	対象文字列
 * @return	bool		true（半角英数のみ） or false（半角英数以外混入）
 *****************************************************************************************************
 */

function VLD_alnum(str)
{
	if(str.match(/^[0-9a-zA-Z]+$/)){return true;}
	return false;
}



/**
 *****************************************************************************************************
 * ■■■メールアドレスチェック■■■
 *
 * @update	2006-5-4
 *
 * @param	string	str	対象文字列
 * @return	bool
 *****************************************************************************************************
 */

function VLD_email(str)
{
	if(!str.match(/^\S+@\S+\.\S+$/)){return false;}
	if(str.match(/[!"#$%&'\(\)=\\|,:;^\[\]\{\}`*?+><]/)){return false;}
	return true;
}



/**
 *****************************************************************************************************
 * ■■■URLチェック■■■
 *
 * @update	2006-5-4
 *
 * @param	string	str	対象文字列
 * @return	bool
 *****************************************************************************************************
 */

function VLD_url(str)
{
	if(!str.match(/(http|https):\/\/.+/)){return false;}
	return true;
}



/**
 *****************************************************************************************************
 * ■■■RGBチェック■■■
 *
 * @update	2007-7-30
 *
 * @param	string	$str	対象文字列
 * @return	bool
 *****************************************************************************************************
 */

function VLD_rgb(str)
{
	if(str.match(/^[a-fA-F0-9]{6}$/)){return true;}
	return false;
}



//■■■■■■■■■■■■
//	文字列変換
//■■■■■■■■■■■■



/**
 *****************************************************************************************************
 * ■■■全角数字を半角数字に変換■■■
 *
 * @update	2007-4-6
 *
 * @param	string	str	対象文字列
 * @return	string
 *****************************************************************************************************
 */

function CNV_han_num(v)
{
	var i;
	var han = "0123456789";
	var zen = "０１２３４５６７８９";
	var str = "";
	for(i=0; i<v.length; i++){
		c = v.charAt(i);
		n = zen.indexOf(c,0);
		if(n >= 0){c = han.charAt(n);}
		str += c;
	}
	return str;
}



/**
 *****************************************************************************************************
 * ■■■トリミング■■■
 *
 * @update	2007-7-26
 *
 * @param	string	str	対象文字列
 * @return	string		トリミング後文字列
 *****************************************************************************************************
 */

function CNV_trim(str)
{
	return str.replace(/^\s+|\s+$/g,"");
}



//■■■■■■■■■■■■
//	日時
//■■■■■■■■■■■■



/**
 *****************************************************************************************************
 * ■■■年月日Ymd変換■■■
 *
 * 年・月・日よりyyyymmdd形式を返す。
 * @update	2007-12-4
 *
 * @param	int	y	年
 * @param	int	m	月
 * @param	int	d	日
 * @return	string		yyyymmdd
 *****************************************************************************************************
 */

function DATE_join(y, m, d)
{
	// 文字列型に変換
	y = y + "";
	m = m + "";
	d = d + "";

	// 桁あわせ
	if(m < 10){m = "0" + m;}
	if(d < 10){d = "0" + d;}

	return y+m+d;
}



/**
 *****************************************************************************************************
 * ■■■現在の年月日取得■■■
 *
 * @update	2006-11-23
 *
 * @param	void
 * @return	array		年・月・日を格納した配列
 *****************************************************************************************************
 */

function GET_today()
{
	now   = new Date();		// 日付オブジェクト
	now_y = now.getFullYear();	// 年
	now_m = now.getMonth() + 1;	// 月
	now_d = now.getDate();		// 日

	today_array = new Array(now_y, now_m, now_d);

	return today_array;
}



/**
 *****************************************************************************************************
 * ■■■指定日までの残日数取得■■■
 *
 * @update	
 *
 * @param	int	y	指定年
 * @param	int	m	指定月
 * @param	int	d	指定日
 * @return	int		残日数
 *****************************************************************************************************
 */

function cd_day(yyyy, m, d)
{
	nengappi  = yyyy + "/" + m + "/" + d;
	today = new Date();
	nissu = Math.ceil((Date.parse(nengappi) - today.getTime()) / (24*60*60*1000));
	return nissu;
}



//■■■■■■■■■■■■
//	エレメント
//■■■■■■■■■■■■



/**
 *****************************************************************************************************
 * ■■■ラジオボタン・チェックボックスのチェック数取得■■■
 *
 * @sample	checkbox時は GET_check_num(obj.elements['ctg_id[]']) のように使用。
 * @update	2007-9-2
 *
 * @param	object	ctrl_obj	コントロールオブジェクト
 * @return	int			チェック数
 *****************************************************************************************************
 */

function GET_check_num(ctrl_obj)
{
	var i;
	var num = 0;
	for(i=0; i<ctrl_obj.length; i++){
		if(ctrl_obj[i].checked){num++;}
	}
	return num;
}



/**
 *****************************************************************************************************
 * ■■■チェックボックス・一括チェック■■■
 *
 * エレメントのname属性は配列形式。
 * @example	onClick="CHECKBOX_check(this.form.elements['classroom_id[]'], 1)"
 * @update	2008-2-14
 *
 * @param	object	ele_obj	コントロールオブジェクト
 * @param	int	flg	チェックフラグ（0:チェック外す 1:チェック）
 * @return	void
 *****************************************************************************************************
 */

function CHECKBOX_check(ctrl_obj, flg)
{
	var i;
	for(i=0; i<ctrl_obj.length; i++){
		ctrl_obj[i].checked = flg;
	}
}



/**
 *****************************************************************************************************
 * ■■■フォーム部品使用可否設定■■■
 *
 * @sample	var flg = document.cstm.otodoke[1].checked;
 *		SET_usable(document.cstm, ele_array, flg);
 * @update	2007-10-8
 *
 * @param	object	obj		フォームオブジェクト
 * @param	array	ele_array	対象エレメント名の格納配列
 * @param	bool	flg		使用可否フラグ（0:否 1:可）
 * @return	void
 *****************************************************************************************************
 */

function SET_usable(obj, ele_array, flg)
{
	var color = flg ? '#FFFFFF' : '#DDDDDD';

	for(i=0; i<ele_array.length; i++){
		obj.elements[ele_array[i]].disabled = !flg;
		obj.elements[ele_array[i]].style.backgroundColor = color;
	}
}



//■■■■■■■■■■■■
//	環境
//■■■■■■■■■■■■



/**
 *****************************************************************************************************
 * ■■■Cookie有効チェック■■■
 *
 * IE4-,NN6-
 * @update	
 *
 * @param	void
 * @return	bool
 *****************************************************************************************************
 */

function CK_cookie()
{
	if(navigator.cookieEnabled){return true;}
	else                       {return false;}
}



//■■■■■■■■■■■■
//	配列
//■■■■■■■■■■■■



/**
 *****************************************************************************************************
 * ■■■配列の最大値■■■
 *
 * @update	2007-7-30
 *
 * @param	array	array	数値を格納した配列
 * @return	bool		最大値
 *****************************************************************************************************
 */

function GET_max(array)
{
	var i;
	var n = array[0];
	for(i=1; i<array.length; i++){
		if(array[i] > n){n = array[i];}
	}
	return n;
}



/**
 *****************************************************************************************************
 * ■■■配列の最小値■■■
 *
 * @update	2007-7-30
 *
 * @param	array	array	数値を格納した配列
 * @return	bool		最小値
 *****************************************************************************************************
 */

function GET_min(array)
{
	var i;
	var n = array[0];
	for(i=1; i<array.length; i++){
		if(array[i] < n){n = array[i];}
	}
	return n;
}



//■■■■■■■■■■■■
//	地域
//■■■■■■■■■■■■



/**
 *****************************************************************************************************
 * ■■■都道府県名取得■■■
 *
 * @update	2007-12-4
 *
 * @param	int	todofuken_id	都道府県ID
 * @return	string			都道府県名（JIS都道府県コード順）
 *****************************************************************************************************
 */

function GET_todofuken(todofuken_id)
{
	var todofuken_array = ["", "北海道", "青森県", "岩手県", "宮城県", "秋田県", "山形県", "福島県",
				"茨城県", "栃木県", "群馬県", "埼玉県", "千葉県", "東京都", "神奈川県",
				"新潟県", "富山県", "石川県", "福井県", "山梨県", "長野県",
				"岐阜県", "静岡県", "愛知県", "三重県", "滋賀県", "京都府", "大阪府", "兵庫県", "奈良県", "和歌山県",
				"鳥取県", "島根県", "岡山県", "広島県", "山口県",
				"徳島県", "香川県", "愛媛県", "高知県",
				"福岡県", "佐賀県", "長崎県", "熊本県", "大分県", "宮崎県", "鹿児島県", "沖縄県"];

	if(!VLD_num(todofuken_id) || todofuken_id == 0 || todofuken_id > 47){return false;}

	return todofuken_array[todofuken_id];
}



//■■■■■■■■■■■■
//	エラー
//■■■■■■■■■■■■



/**
 *****************************************************************************************************
 * ■■■エラーアラート表示■■■
 *
 * @update	2007-9-19
 *
 * @param	object		obj	フォームオブジェクト
 * @param	error		array	エラー文格納配列
 * @param	focus_ele	array	エラーエレメント名格納配列
 * @return	void
 *****************************************************************************************************
 */

function ERROR_alert(obj, error, focus_ele)
{
	if(!error.length){return;}

	//■エラーアラート
	var i;
	for(i=0; i<error.length; i++){
		error[i] = '・' + error[i];
	}
	alert("エラー\n\n" + error.join("\n"));

	//■フォーカス
	if(obj.elements[focus_ele[0]].type){
		// ラジオボタン以外
		obj.elements[focus_ele[0]].focus();
	}else{
		// ラジオボタン
		obj.elements[focus_ele[0]][0].focus();
	}
}



