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



var BASIC = {

	//■■■■■■■■■■■■
	//	基本
	//■■■■■■■■■■■■

	/**
	 *--------------------------------------------------------------------------------
	 * ■■■class名より要素を配列取得
	 * @example	var elements = BASIC.getElementsByClassName("kome");
	 * @date	2009-11-27
	 * @param	string	className	class名
	 * @return	array			指定class名が付いている要素の配列
	 *--------------------------------------------------------------------------------
	 */
	getElementsByClassName : function(className)
	{
		var allElements = (document.all) ? document.all : document.getElementsByTagName("*");
		var results = new Array();
		var re = new RegExp("\\b" + className + "\\b");
		for (var i = 0; i < allElements.length; i++) {
			if (re.test(allElements[i].className)) {
				results.push(allElements[i]);
			}
		}
		return results;
	},

	/**
	 *--------------------------------------------------------------------------------
	 * ■■■スタイルシートプロパティ取得
	 * @example	var bgcolor = BASIC.getElementStyle(ele, "background-color");
	 * @date	2010-07-06
	 * @param	object	ele		エレメント
	 * @param	string	property_name	プロパティ名（W3C DOM のCSS形式の名前）
	 * @return	string			プロパティ値
	 *--------------------------------------------------------------------------------
	 */
	getElementStyle : function(ele, property_name)
	{
		var styleValue, camel;
		if (ele) {
			if (document.defaultView && document.defaultView.getComputedStyle) {
				// W3C DOM バージョン
				var compStyle = document.defaultView.getComputedStyle(ele, "");
				styleValue = compStyle.getPropertyValue(property_name);
			} else if (ele.currentStyle) {
				// CSS名からIEすたいるプロパティ用のキャメル記法名に変換する。
				var IEStyleProp = property_name;
				var re = /-\D/;
				while (re.test(IEStyleProp)) {
					camel = IEStyleProp.match(re)[0].charAt(1).toUpperCase();
					IEStyleProp = IEStyleProp.replace(re, camel);
				}
				styleValue = ele.currentStyle[IEStyleProp];
			}
		}
		return (styleValue) ? styleValue : null;
	},



	//■■■■■■■■■■■■
	//	インクルード
	//■■■■■■■■■■■■

	/**
	 *--------------------------------------------------------------------------------
	 * ■■■JSパス取得
	 * HTMLからこのファイルへの相対パスを取得。
	 * @example	
	 * @date	2010-02-18
	 * @param	void
	 * @return	string		相対パス（false:自身ファイルを呼ぶscriptタグが無い）
	 *--------------------------------------------------------------------------------
	 */
	getJsPath : function()
	{
		var self_filename = "lib_basic.js";
		var script_tags = document.getElementsByTagName("script");
		var pos;
		var js_src;
		var js_path;

		// scriptタグを1つずつチェック
		for (var i = 0; i < script_tags.length; i++) {
			js_src = script_tags[i].src;
			if (js_src === self_filename) {
				return ".";
			} else {
				pos = js_src.lastIndexOf("/" + self_filename);
				if (pos != -1) {
					return js_src.substring(0, pos);
				}
			}
		}

		return false;
	},

	/**
	 *--------------------------------------------------------------------------------
	 * ■■■インクルード
	 * このファイルと同じディレクトリのJavaScriptファイルをインクルード。
	 * @example	
	 * @date	2010-02-18
	 * @param	string	filename	インクルードファイル名
	 * @return	bool
	 *--------------------------------------------------------------------------------
	 */
	include : function(filename)
	{
		//■JSパス取得
		var js_path = BASIC.getJsPath();
		if (js_path === false) {
			return false;
		}

		//■scriptエレメント作成
		var script_ele = document.createElement("script");
		script_ele.charset = "UTF-8";
		script_ele.src = js_path + "/" + filename;
		document.body.appendChild(script_ele);
	},



	//■■■■■■■■■■■■
	//	ブラウザ
	//■■■■■■■■■■■■

	/**
	 *--------------------------------------------------------------------------------
	 * ■■■ブラウザ・IE判定
	 * @date	2010-09-26
	 * @param	string	str	対象文字列
	 * @return	int		バイト数
	 *--------------------------------------------------------------------------------
	 */
	isIE : function()
	{
		return !!(window.attachEvent && !window.opera);
	},



	//■■■■■■■■■■■■
	//	文字列
	//■■■■■■■■■■■■

	/**
	 *--------------------------------------------------------------------------------
	 * ■■■バイト数取得
	 * @date	2006-12-8
	 * @param	string	str	対象文字列
	 * @return	int		バイト数
	 *--------------------------------------------------------------------------------
	 */
	getByte : function(str)
	{
		var byte = 0;
		for (var i=0; i<str.length; i++) {
			n = escape(str.charAt(i));
			if (n.length < 4) {
				byte++;
			} else {
				byte += 2;
			}
		}
		return byte;
	},

	/**
	 *--------------------------------------------------------------------------------
	 * ■■■全角数字を半角数字に変換
	 * @date	2010-02-22
	 * @param	string	str	対象文字列
	 * @return	string
	 *--------------------------------------------------------------------------------
	 */
	toHanNum : function(str)
	{
		var han = "0123456789";
		var zen = "０１２３４５６７８９";
		var dst = "";
		var c;
		var n;
		for (var i = 0; i < str.length; i++) {
			c = str.charAt(i);
			n = zen.indexOf(c,0);
			if (n >= 0) {
				c = han.charAt(n);
			}
			dst += c;
		}
		return dst;
	},

	/**
	 *--------------------------------------------------------------------------------
	 * ■■■全角ひらがなを全角カタカナに変換
	 * @date	2010-06-29
	 * @param	string	str	対象文字列
	 * @return	string
	 *--------------------------------------------------------------------------------
	 */
	toKatakana : function(str)
	{
		hirakana  = "あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわゐゑをん";
		hirakana += "ぁぃぅぇぉゃゅょっ";
		hirakana += "がぎぐげござじずぜぞだぢづでどばびぶべぼ";
		hirakana += "ぱぴぷぺぽ";

		katakana  = "アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヰヱヲン";
		katakana += "ァィゥェォャュョッ";
		katakana += "ガギグゲゴザジズゼゾダヂヅデドバビブベボ";
		katakana += "パピプペポ";

		var dst = "";
		for (var i = 0; i < str.length; i++)
		{
			var c = str.charAt(i);
			var num = hirakana.indexOf(c, 0);
			if (num >= 0) {
				c = katakana.charAt(num);
			}
			dst += c;
		}

		return dst;
	},

	/**
	 *--------------------------------------------------------------------------------
	 * ■■■全角カタカナを全角ひらがなに変換
	 * @date	2010-08-09
	 * @param	string	str	対象文字列
	 * @return	string
	 *--------------------------------------------------------------------------------
	 */
	toHirakana : function(str)
	{
		var hirakana;
		var katakana;
		var regex = /ヴ(.)/g;
		var callback = function($0, $1) {
					switch ($1) {
						case "ア":
						case "ァ":
							return "ば";
						case "イ":
						case "ィ":
							return "び";
						case "エ":
						case "ェ":
							return "べ";
						case "オ":
						case "ォ":
							return "ぼ";
						default:
							return "ヴ" + $1;
					}
				};

		str = str.replace(regex, callback);

		hirakana  = "あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわゐゑをん";
		hirakana += "ぁぃぅぇぉゃゅょっ";
		hirakana += "がぎぐげござじずぜぞだぢづでどばびぶべぼ";
		hirakana += "ぱぴぷぺぽ";

		katakana  = "アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヰヱヲン";
		katakana += "ァィゥェォャュョッ";
		katakana += "ガギグゲゴザジズゼゾダヂヅデドバビブベボ";
		katakana += "パピプペポ";

		var dst = "";
		for (var i = 0; i < str.length; i++)
		{
			var c = str.charAt(i);
			var num = katakana.indexOf(c,0);
			if (num >= 0) {
				c = hirakana.charAt(num);
			} else if (c === "ヴ") {
				c = "ぶ";
			}
			dst += c;
		}

		return dst;
	},

	/**
	 *--------------------------------------------------------------------------------
	 * ■■■トリミング
	 * @date	2010-02-19
	 * @param	string	str	対象文字列
	 * @return	string		トリミング後文字列
	 *--------------------------------------------------------------------------------
	 */
	trim : function(str)
	{
		return str.replace(/^\s+|\s+$/g, "");
	},

	ltrim : function(str)
	{
		return str.replace(/^\s+/g, "");
	},

	rtrim : function(str)
	{
		return str.replace(/\s+$/g, "");
	},

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

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

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

	/**
	 *--------------------------------------------------------------------------------
	 * ■■■削除
	 * @date	2011-01-24
	 * @param	string	str	対象文字列
	 * @return	string		削除後文字列
	 *--------------------------------------------------------------------------------
	 */
	deleteSpace : function(str)
	{
		return str.replace(/( |　)/g, "");
	},

	/**
	 *--------------------------------------------------------------------------------
	 * ■■■数字3桁区切り
	 * @example	BASIC.numberFormat(same_value)
	 * @date	2010-09-06
	 * @access	public
	 * @static
	 * @param	string	str	対象文字列
	 * @return	array		キーワードを格納した配列
	 *--------------------------------------------------------------------------------
	 */
	numberFormat : function(str)
	{
		var cnt = 0;
		var dst = "";
		for (var i = str.length - 1; i >= 0; i--) {
			dst = str.charAt(i) + dst;
			cnt++;
			if (((cnt % 3) == 0) && (i != 0)) {
				dst = "," + dst;
			}
		}
		return dst;
	},

	/**
	 *--------------------------------------------------------------------------------
	 * ■■■改行で分割
	 * @date	2010-07-21
	 * @access	public
	 * @static
	 * @param	string	str	対象文字列
	 * @return	array		キーワードを格納した配列
	 *--------------------------------------------------------------------------------
	 */
	splitNL : function(str)
	{
		return str.split(/(\r\n|\r|\n)/);
	},

	/**
	 *--------------------------------------------------------------------------------
	 * ■■■指定エレメントのテキスト書き換え（タグ無効）
	 * HTMLタグを含ませ書き込むとタグは反映されない。
	 * @example
	 * @date	2010-10-13
	 * @param	string	ele	セレクトボックス要素 or ID
	 * @param	string	text	書き換えるテキスト
	 * @return	void
	 *--------------------------------------------------------------------------------
	 */
	innerText : function(ele, text)
	{
		//■エレメント取得
		if (typeof ele === "string") {
			ele = document.getElementById(ele);
		}

		//■書き換え
		ele.innerText = text;	// FF以外
		ele.textContent = text;	// FF
	},

	/**
	 *--------------------------------------------------------------------------------
	 * ■■■指定classエレメントのテキスト書き換え（タグ無効）
	 * HTMLタグを含ませ書き込むとタグは反映されない。
	 * @example
	 *		var kome_flg = (document.getElementById("mail_cstm_send_flg0").checked) ? "" : "*";
	 *		BASIC.innerTextByClassName("kome2", kome_flg);
	 *
	 *		document.getElementById("mail_cstm_send_flg1").onclick = function()
	 *		{
	 *			BASIC.innerTextByClassName("kome2", "*");
	 *		}
	 *
	 *		document.getElementById("mail_cstm_send_flg0").onclick = function()
	 *		{
	 *			BASIC.innerTextByClassName("kome2", "");
	 *		}
	 *
	 * @date	2010-10-13
	 * @param	string	className	class名
	 * @param	string	text		書き換えるテキスト
	 * @return	void
	 *--------------------------------------------------------------------------------
	 */
	innerTextByClassName : function(className, text)
	{
		//■指定class名を使うエレメントを配列取得
		var elements = BASIC.getElementsByClassName(className);

		//■書き換え
		for (var i = 0; i < elements.length; i++) {
			elements[i].innerText = text;	// FF以外
			elements[i].textContent = text;	// FF
		}
	},

	/**
	 *--------------------------------------------------------------------------------
	 * ■■■指定classエレメントのテキスト書き換え（タグ有効）
	 * HTMLタグを含ませ書き込むとほぼタグは反映される。
	 * @example
	 * @date	2009-11-26
	 * @param	string	className	class名
	 * @param	string	text		書き換えるテキスト
	 * @return	void
	 *--------------------------------------------------------------------------------
	 */
	innerHTMLByClassName : function(className, text)
	{
		//■指定class名を使うエレメントを配列取得
		var elements = BASIC.getElementsByClassName(className);

		//■書き換え
		for (var i = 0; i < elements.length; i++) {
			elements[i].innerHTML = text;
		}
	},



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

	/**
	 *--------------------------------------------------------------------------------
	 * ■■■年月日Ymd変換
	 * 年・月・日よりyyyymmdd形式を返す。
	 * @date	2007-12-4
	 * @param	int	y	年
	 * @param	int	m	月
	 * @param	int	d	日
	 * @return	string		yyyymmdd
	 *--------------------------------------------------------------------------------
	 */
	joinDate : function(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;
	},

	/**
	 *--------------------------------------------------------------------------------
	 * ■■■現在の年月日取得
	 * @date	2008-6-26
	 * @param	void
	 * @return	array		年・月・日を格納した配列
	 *--------------------------------------------------------------------------------
	 */
	getToday : function()
	{
		var now   = new Date();		// 日付オブジェクト
		var now_y = now.getFullYear();	// 年
		var now_m = now.getMonth() + 1;	// 月
		var now_d = now.getDate();	// 日

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

		return today_array;
	},

	/**
	 *--------------------------------------------------------------------------------
	 * ■■■指定日数前後の年月日取得
	 * @date	2008-6-26
	 * @param	int	n	日数
	 * @return	array		年・月・日を格納した配列
	 *--------------------------------------------------------------------------------
	 */
	shiftDay : function(n)
	{
		if (n === undefined) {n = 0;}		// 未設定なら今日

		var obj   = new Date();			// 日付オブジェクト
		var today = obj.getTime();		// 1970年1月1日からの経過ミリ秒数
		var msec = 24 * 60 * 60 * 1000 * n;	// d日間のミリ秒数
		var new_date = new Date(today + msec);	// 指定日後の日付オブジェクト
		var new_y    = new_date.getFullYear();	// 指定日後の年
		var new_m    = new_date.getMonth() + 1;	// 指定日後の月
		var new_d    = new_date.getDate();	// 指定日後の日
		var new_yobi = new_date.getDay();	// 指定日後の曜日

		// 2桁月日
		var new_mm = (new_m < 10) ? "0" + new_m : new_m;
		var new_dd = (new_d < 10) ? "0" + new_d : new_d;

		// 年月日
		var new_ymd = "" + new_y + new_mm + new_dd;

		// 曜日文字配列
		var yobi_j_array = ["日", "月", "火", "水", "木", "金", "土"];

		var yobi_e1_array = {1:"January", 2:"February", 3:"March", 4:"April", 5:"May", 6:"June",
					7:"July", 8:"August", 9:"September", 10:"October", 11:"November", 12:"December"};

		var yobi_e2_array = {1:"Jan", 2:"Feb", 3:"Mar", 4:"Apr", 5:"May", 6:"Jun",
					7:"Jul", 8:"Aug", 9:"Sep", 10:"Oct", 11:"Nov", 12:"Dec"};

		return {y:new_y, m:new_m, d:new_d, mm:new_mm, dd:new_dd, ymd:new_ymd,
			yobi:yobi_j_array[new_yobi], yobi_e1:yobi_e1_array[new_yobi], yobi_e2:yobi_e2_array[new_yobi]};
	},

	/**
	 *--------------------------------------------------------------------------------
	 * ■■■年月日間の経過日数取得
	 * @date	2010-09-05
	 * @param	int	$start_y	開始年
	 * @param	int	$start_m	開始月
	 * @param	int	$start_d	開始日
	 * @param	int	$end_y		終了年
	 * @param	int	$end_m		終了月
	 * @param	int	$end_d		終了日
	 * @return	int			日数
	 *--------------------------------------------------------------------------------
	 */
	getDiffDay : function(start_y, start_m, start_d, end_y, end_m, end_d)
	{
		var start_date = new Date(start_y, start_m - 1, start_d);

		if (end_y !== undefined && end_m!== undefined && end_d !== undefined) {
			var end_date = new Date(end_y, end_m - 1, end_d);	// 指定日の00:00:00
		} else {
			var end_date = new Date();				// 今日の00:00:00
		}

		return Math.ceil((end_date.getTime() - start_date.getTime()) / (1000 * 60 * 60 * 24));
	},



	//■■■■■■■■■■■■
	//	フォーム
	//■■■■■■■■■■■■

	/**
	 *--------------------------------------------------------------------------------
	 * ■■■セレクトボックス・選択value属性値取得
	 * @example	BASIC.getSelectedValue("ctg_id");
	 * @date	2010-09-05
	 * @param	string		ele	セレクトボックス要素 or ID
	 * @return	string			value属性値
	 *--------------------------------------------------------------------------------
	 */
	getSelectedValue : function(ele)
	{
		if (typeof ele === "string") {
			ele = document.getElementById(ele);
		}

		return ele.options[ele.selectedIndex].value;
	},

	/**
	 *--------------------------------------------------------------------------------
	 * ■■■セレクトボックス・選択テキスト取得
	 * @example	BASIC.getSelectedText("ctg_id");
	 * @date	2010-09-06
	 * @param	string		ele	セレクトボックス要素 or ID
	 * @return	string			選択テキスト
	 *--------------------------------------------------------------------------------
	 */
	getSelectedText : function(ele)
	{
		if (typeof ele === "string") {
			ele = document.getElementById(ele);
		}

		return ele.options[ele.selectedIndex].text;
	},

	/**
	 *--------------------------------------------------------------------------------
	 * ■■■指定class名のテキストフィールド・一括変更
	 * @example	BASIC.updateTextElementByClassName("price", str);
	 * @date	2010-08-10
	 * @param	string		class_name	class名
	 * @param	string		str		変換文字
	 * @return	int				変換数
	 *--------------------------------------------------------------------------------
	 */
	updateTextElementByClassName : function(class_name, str)
	{
		//■class名より要素を配列取得
		var elements = BASIC.getElementsByClassName(class_name);

		//■書き換え
		for (var i = 0; i < elements.length; i++) {
			elements[i].value = str;
		}

		return elements.length;
	},

	/**
	 *--------------------------------------------------------------------------------
	 * ■■■指定class名のセレクトボックス・一括変更
	 * @example	BASIC.updateSelectboxByClassName("price", "btn_same");
	 * @date	2010-08-10
	 * @param	string		class_name	class名
	 * @param	int|string	select_index	選択インデックス
	 * @return	int				変換数
	 *--------------------------------------------------------------------------------
	 */
	updateSelectboxByClassName : function(class_name, select_index)
	{
		//■class名より要素を配列取得
		var elements = BASIC.getElementsByClassName(class_name);

		//■書き換え
		var cnt = 0;
		for (var i = 0; i < elements.length; i++) {
			if (elements[i].options[select_index]) {
				elements[i].selectedIndex = select_index;
				cnt++;
			}
		}

		return cnt;
	},

	/**
	 *--------------------------------------------------------------------------------
	 * ■■■ラジオボタン・チェックボックスのチェック数取得
	 * @example	checkbox時は BASIC.getCheckNum(obj.elements['ctg_id[]']) のように使用。
	 * @date	2008-11-24
	 * @param	object	ele	エレメント
	 * @return	int		チェック数
	 *--------------------------------------------------------------------------------
	 */
	getCheckNum : function(ele)
	{
		var num = 0;

		if (!ele) {
			// エレメントが無い
			return 0;
		} else if (ele.length) {
			// エレメントが複数（オブジェクトが配列）
			for (var i = 0; i < ele.length; i++) {
				if (ele[i].checked) {num++;}
			}
		} else if (ele) {
			// エレメントが1つ
			if (ele.checked) {return 1;}
		}

		return num;
	},

	/**
	 *--------------------------------------------------------------------------------
	 * ■■■チェックボックス・一括チェック
	 * エレメントのname属性は配列形式。
	 * @example	BASIC.changeCheckAll(this.form.elements['classroom_id[]'], 1)"
	 * @date	2010-03-18
	 * @param	object	ele	エレメント
	 * @param	mixed	flg	チェックフラグ（false,0,"0":チェック外す true,1,"1":チェック）
	 * @return	void
	 *--------------------------------------------------------------------------------
	 */
	changeCheckAll : function(ele, flg)
	{
		flg = (parseInt(flg, 10));

		if (!ele) {
			// エレメントが無い
		} else if (ele.length) {
			// エレメントが複数（オブジェクトが配列）
			for (var i = 0; i < ele.length; i++) {
				ele[i].checked = flg;
			}
		} else {
			// エレメントが1つ
			ele.checked = flg;
		}
	},

	/**
	 *--------------------------------------------------------------------------------
	 * ■■■セレクトボックス・指定ラベル以外optgroup削除
	 * @example	BASIC.filterOptgroup(selectbox, ken_name);
	 * @date	2010-05-18
	 * @param	object	ele	エレメント
	 * @param	string	label	残すoptgroupタグのlavel属性値
	 * @return	void
	 *--------------------------------------------------------------------------------
	 */
	filterOptgroup2 : function(selectbox, label)
	{
		var optgroup = selectbox.getElementsByTagName('optgroup');
		var optlen = optgroup.length;
		var optnum = 0;
		for (var i = 0; i < optlen; i++) {
			if (optgroup[i].label != label) {
				optgroup[i].style.display = "none";
//				selectbox.removeChild (optgroup[optnum]);
			} else {
//				optnum++;
			}
		}
		selectbox.selectedIndex = 0;
	},

	/**
	 *--------------------------------------------------------------------------------
	 * ■■■エレメント無効化
	 * @example	BASIC.disableElement("btn", 5);
	 * @date	2010-10-15
	 * @param	string	ele	エレメント or ID
	 * @param	int	sec	無効化秒数
	 * @return	void
	 *--------------------------------------------------------------------------------
	 */
	disableElement : function(ele, sec)
	{
		//■エレメント取得
		if (typeof ele === "string") {
			ele = document.getElementById(ele);
		}

		//■無効化
		ele.disabled = true;

		//■有効化タイマーセット
		if (sec !== undefined) {
			ele.disabled = true;
			setTimeout(function () {ele.disabled = false;}, sec * 1000);
		}
	},

	/**
	 *--------------------------------------------------------------------------------
	 * ■■■エレメント使用可否設定
	 * @example	var ele_array = ["spe_login_passwd"];
	 *		var flg = document.getElementById("update_passwd_flg").checked;
	 *		BASIC.setUsable(document.getElementById("form_input"), ele_array, flg);
	 * @date	2007-10-8
	 * @param	object	obj		フォームオブジェクト
	 * @param	array	ele_array	対象エレメント名の格納配列
	 * @param	bool	flg		使用可否フラグ（0:否 1:可）
	 * @return	void
	 *--------------------------------------------------------------------------------
	 */
	setUsable : function(obj, ele_array, flg)
	{
		var color = flg ? '#FFFFFF' : '#DDDDDD';

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

	/**
	 *--------------------------------------------------------------------------------
	 * ■■■エレメント・読み取り専用設定
	 * 指定フォーム内のエレメントを読み取り専用にする。
	 * readonly属性が効くのはinputとtextarea。
	 * Firefox3ではエレメントの背景が灰色になる。
	 * @date	2009-01-07
	 * @param	object	obj	フォームオブジェクト
	 * @return	void
	 *--------------------------------------------------------------------------------
	 */
	setReadOnly : function(obj)
	{
		var ele_num = obj.elements.length;
		for (var i=0; i<ele_num; i++) {
			obj.elements[i].readOnly = true;
		}
	},

	/**
	 *--------------------------------------------------------------------------------
	 * ■■■指定IDのエレメント表示非表示
	 * @date	2010-04-16
	 * @param	string	id	id名
	 * @param	bool	flg	表示フラグ（true:表示, false:非表示）
	 * @return	void
	 *--------------------------------------------------------------------------------
	 */
	switchDisplayById : function(id, flg)
	{
		document.getElementById(id).style.display = (flg) ? "block" : "none";
	},

	/**
	 *--------------------------------------------------------------------------------
	 * ■■■指定class名のエレメント表示非表示
	 * @example	BASIC.switchDisplayByClassName("row_basic", document.getElementById("basic_flg1").checked);
	 * @date	2010-04-16
	 * @param	string	className	class名
	 * @param	bool	flg		表示フラグ（true:表示, false:非表示）
	 * @return	void
	 *--------------------------------------------------------------------------------
	 */
	switchDisplayByClassName : function(className, flg)
	{
		var elements = BASIC.getElementsByClassName(className);
		for (var i = 0; i < elements.length; i++) {
			elements[i].style.display = (flg) ? "block" : "none";
		}
	},



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

	/**
	 *--------------------------------------------------------------------------------
	 * ■■■都道府県名取得
	 *
	 * @date	2010-03-19
	 * @param	int	ken_id	都道府県ID
	 * @return	string		都道府県名（JIS都道府県コード順）
	 *--------------------------------------------------------------------------------
	 */
	getKenName : function(ken_id)
	{
		var ken_array = ["", "北海道", "青森県", "岩手県", "宮城県", "秋田県", "山形県", "福島県",
					"茨城県", "栃木県", "群馬県", "埼玉県", "千葉県", "東京都", "神奈川県",
					"新潟県", "富山県", "石川県", "福井県", "山梨県", "長野県",
					"岐阜県", "静岡県", "愛知県", "三重県", "滋賀県", "京都府", "大阪府", "兵庫県", "奈良県", "和歌山県",
					"鳥取県", "島根県", "岡山県", "広島県", "山口県",
					"徳島県", "香川県", "愛媛県", "高知県",
					"福岡県", "佐賀県", "長崎県", "熊本県", "大分県", "宮崎県", "鹿児島県", "沖縄県"];

		return ken_array[ken_id];
	},



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

	/**
	 *--------------------------------------------------------------------------------
	 * ■■■配列に値があるかチェック
	 * @date	2009-03-20
	 * @param	mixed	value	チェックする値
	 * @return	bool
	 *--------------------------------------------------------------------------------
	 */
	inArray : function(value, array)
	{
		for (var i=0; i<array.length; i++) {
			if (array[i] === value) {
				return true;
			}
		}
		return false;
	},

	/**
	 *--------------------------------------------------------------------------------
	 * ■■■配列の最大値
	 * @date	2007-7-30
	 * @param	array	array	数値を格納した配列
	 * @return	bool		最大値
	 *--------------------------------------------------------------------------------
	 */
	max : function(array)
	{
		var n = array[0];
		for (var i=1; i<array.length; i++) {
			if (array[i] > n) {n = array[i];}
		}
		return n;
	},

	/**
	 *--------------------------------------------------------------------------------
	 * ■■■配列の最小値
	 * @date	2007-7-30
	 * @param	array	array	数値を格納した配列
	 * @return	bool		最小値
	 *--------------------------------------------------------------------------------
	 */
	min : function(array)
	{
		var n = array[0];
		for (var i=1; i<array.length; i++) {
			if (array[i] < n) {n = array[i];}
		}
		return n;
	},



	//■■■■■■■■■■■■
	//	座標
	//■■■■■■■■■■■■

	/**
	 *--------------------------------------------------------------------------------
	 * ■■■マウスカーソルX座標取得
	 *
	 * @date	2008-6-27
	 * @param	object	e	イベント
	 * @return	void
	 *--------------------------------------------------------------------------------
	 */
	COORD_mouse_x : function(e)
	{
		if (window.opera) {
			//Opera用
			return e.clientX;
		} else if (document.all) {
			//IE用
			return document.body.scrollLeft+event.clientX;
		} else if (document.layers||document.getElementById) {
			//N4,N6,Mozilla用
			return e.pageX;
		}
	},

	/**
	 *--------------------------------------------------------------------------------
	 * ■■■マウスカーソルY座標取得
	 *
	 * @date	2008-6-27
	 * @param	object	e	イベント
	 * @return	void
	 *--------------------------------------------------------------------------------
	 */
	COORD_mouse_y : function(e)
	{
		if (window.opera) {
			//Opera用
			return e.clientY;
		} else if (document.all) {
			//IE用
			return document.body.scrollLeft+event.clientY;
		} else if (document.layers||document.getElementById) {
			//N4,N6,Mozilla用
			return e.pageY;
		}
	}
}




