var	hiragana  = "あいうえおかきくけこさしすせそたちつてとなにぬねの";
	hiragana += "はひふへほまみむめもやゆよらりるれろわをん";
	hiragana += "ぁぃぅぇぉっゃゅょー、。゛゜「」・ヽヾゝゞ";
	hiragana += "がぎぐげござじずぜぞだぢづでどばびぶべぼぱぴぷぺぽゐゑぶ";
var	katakana  = "アイウエオカキクケコサシスセソタチツテトナニヌネノ";
	katakana += "ハヒフヘホマミムメモヤユヨラリルレロワヲン";
	katakana += "ァィゥェォッャュョー、。゛゜「」・ヽヾゝゞ";
	katakana += "ガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポヰヱヴ";
var	hankata   = "ｱｲｳｴｵｶｷｸｹｺｻｼｽｾｿﾀﾁﾂﾃﾄﾅﾆﾇﾈﾉ";
	hankata  += "ﾊﾋﾌﾍﾎﾏﾐﾑﾒﾓﾔﾕﾖﾗﾘﾙﾚﾛﾜｦﾝｧｨｩｪｫｯｬｭｮｰ､｡ﾞﾟ｢｣･";


var	hsuji  = "0123456789";
var	zsuji  = "０１２３４５６７８９";
var	heiji  = hsuji;
	heiji += "abcdefghijklmnopqrstuvwxyz";
	heiji += "ABCDEFGHIJKLMNOPQRSTUVWXYZ_";
var	zeiji  = zsuji;
	zeiji += "ａｂｃｄｅｆｇｈｉｊｋｌｍｎｏｐｑｒｓｔｕｖｗｘｙｚ";
	zeiji += "ＡＢＣＤＥＦＧＨＩＪＫＬＭＮＯＰＱＲＳＴＵＶＷＸＹＺ＿";
var	henzn  = ".-+*/%()";
var zenzn  = "．−＋＊／％（）";
var	hkigo  = ",@!#=[]{}<>?:;~& ";
var	zkigo  = "，＠！＃＝［］｛｝＜＞？：；〜＆　";
var	hsuen  = hsuji + henzn;
var	zsuen  = zsuji + zenzn;
var	hseek  = heiji + henzn + hkigo;
var	zseek  = zeiji + zenzn + zkigo;

/*
	仮名の変換
	org:	原文
	sel:	1 カタカナ⇒ひらがな  0 ひらがな⇒カタカナ
	modo:	1 修正  0 誤字消去
	Ex. onChange="this.value=cnv_hira(this.value);"
*/
function cnv_kana(org, sel, mode) {
	var tbl1, tbl2, str = "";
	if (sel) {
		tbl1 = hiragana+"　 "; tbl2 = katakana;
	} else {
		tbl1 = katakana+"　 "; tbl2 = hiragana;
	}
	for (i = 0; i < org.length; ++i) {
		c = org.charAt(i);
		n = hankata.indexOf(c, 0);
		if (n < 0)  { n = tbl1.indexOf(c, 0); }
		if (n >= 0) { str += tbl1.charAt(n); }
	}
	org = str;	str = '';
	for (i = 0; i < org.length; ++i) {
		c = org.charAt(i);
		n = tbl2.indexOf(c, 0);
		if (n < 0)  { n = tbl1.indexOf(c, 0); }
		if (mode) {
			if (n >= 0) { c = tbl1.charAt(n); }
			str += c;
		} else {
			if (n >= 0) { str += tbl1.charAt(n); }
		}
	}
	return str;
}

/*
	半角数字への変換
	org:	原文
	sel:	1 数字と記号  0 数字のみ
	modo:	1 修正  0 誤字消去
	Ex. onChange="this.value=cnv_hanSuji(this.value);"
*/
function cnv_hanSuji(org, sel, mode) {
	var tbl1, tbl2, str = "";
	if (sel) {
		tbl1 = hsuen; tbl2 = zsuen;
	} else {
		tbl1 = hsuji; tbl2 = zsuji;
	}
	for (i = 0; i < org.length; ++i) {
		c = org.charAt(i);
		n = tbl2.indexOf(c, 0);
		if (n < 0)  { n = tbl1.indexOf(c, 0); }
		if (mode) {
			if (n >= 0) { c = tbl1.charAt(n); }
			str += c;
		} else {
			if (n >= 0) { str += tbl1.charAt(n); }
		}
	}
	return str;
}

/*
	半角英字への変換
	org:	原文
	sel:	1 英数字と記号  0 英数字のみ
	modo:	1 修正  0 誤字消去
	Ex. onChange="this.value=cnv_hanEiji(this.value);"
*/
function cnv_hanEiji(org, sel, mode) {
	var tbl1, tbl2, str = "";
	if (sel) {
		tbl1 = hseek; tbl2 = zseek;
	} else {
		tbl1 = heiji; tbl2 = zeiji;
	}
	for (i = 0; i < org.length; ++i) {
		c = org.charAt(i);
		n = tbl2.indexOf(c, 0);
		if (n < 0)  { n = tbl1.indexOf(c, 0); }
		if (mode) {
			if (n >= 0) { c = tbl1.charAt(n); }
			str += c;
		} else {
			if (n >= 0) { str += tbl1.charAt(n); }
		}
	}
	return str;
}

/*
	Email や URL の打ち間違いを修正
	Ex. onChange="this.value=reviseURL(this.value);"
*/
function reviseURL(str) {
	str = cnv_hanEiji(str, 1);
	while (str.indexOf(",") >= 0) { str = str.replace(",", "."); }
	while (str.indexOf(";") >= 0) { str = str.replace(";", ":"); }
	return str;
}
function revisePHONE(str) {
	str = cnv_hanSuji(str, 1);
	while (str.match(/[\.\+\*\/\%\(\)]/)) { str = str.replace(/[\.\+\*\/\%\(\)]/, ""); }
	return str;
}

//	ＵＲＬチェック
//	間違いがある場合、エラーが帰ってくる。
//	Ex. var errmsg = chkURL( URL );
function chkURL (str, mode) {
	error = "";
	if (str == "" || str == "http://") {
	//	mode が yes のときは空チェックする（デフォ）
		if (mode != "no") {
			error = "ホームページアドレス が入力されていません。\n";
		}
	} else if (!str.match(/^https?\:\/\/[0-9a-z_\.\-]{2,}\.[a-z]{2,}\//i)) {
		error = "無効な ホームページアドレス です。\n";
	}
	return error;
}

//	電話番号チェック
//	間違いがある場合、エラーが帰ってくる。
//	Ex. var errmsg = chkPHONE( email );
function chkPHONE (str, mode) {
	error = "";
	if (str == "") {
	//	mode が yes のときは空チェックする（デフォ）
		if (mode != "no") {
			error = "番号が入力されていません。\n";
		}
	} else {
		while (str.match(/[^0-9]/)) { str.replace(/[^0-9]/, ''); }
		if (!str.match(/^0[0-9]{9,10}$/)) {
			error = "無効な番号です。\n";
		}
	}
	return error;
}

//	Emailチェック
//	間違いがある場合、エラーが帰ってくる。
//	Ex. var errmsg = chkEmail( email );
function chkEmail (str, mode) {
	error = "";
	if (str == "") {
	//	mode が yes のときは空チェックする（デフォ）
		if (mode != "no") {
			error = "メールアドレスが入力されていません。\n";
		}
	} else if (!str.match(/^[0-9a-z_\!\+\-\*\/\%\=\.\?]+\@[0-9a-z_\-\.]{2,}\.[a-z]{2,}$/i)) {
		error = "無効なメールアドレスです。\n";
	}
	return error;
}

//	３桁毎にカンマを入れる
function number_format(str) {
	if (isNaN(str) || str == "" || str == null) { return "0"; }
	str = str.toString();
	while (str.match(/\d{4}(,|$)/)) { str = str.replace(/(\d)(\d{3})(,|$)/, "$1,$2$3"); }
	return str;
}

//	チェックを探してチェックを付ける
function checkCheck(obj, m) {
	var length = obj.length;
	for (i = 0; i < length; ++i) {
		if (obj[i].value == m) { obj[i].checked = true; return m; }
	}
}

//	チェックを探してその値をとってくる
function searchCheck(obj) {
	if (obj.checked) { return obj.value; }
	var length = obj.length;
	for (i = 0; i < length; ++i) {
		if (obj[i].checked) { return obj[i].value; }
	}
}

//	ValueCheckとは関係ないが、新しいウィンドウを開くファンクション
function openNewWindow(url, sX, sY, mX, mY) {
	if (url != '' && url != 'http://') {
		var ableX = screen.availWidth - 10;
		var ableY = screen.availHeight - 29;
		if (isNaN(sX) || ableX < sX) { sX = ableX; }
		if (isNaN(sY) || ableY < sY) { sY = ableY; }
		var opt = '';
		opt+='width=' + sX + ',height=' + sY + ',';
		opt+='toolbar=0,location=0,directories=0,status=0,menubar=0,';
		opt+='resizable=1,scrollbars=1,alwaysLowered=1,titlebar=0';
		WI = window.open(url, '_blank', opt);
		WI.location.replace(url);
		if (!isNaN(mX) && !isNaN(mY)) {
			WI.moveTo(mX, mY);
		}
	}
}

//	End of Script;