//-----------------------------------------------------------
//	E-mail and URL check functions
//-----------------------------------------------------------

// Check email
function checkEmail(checkString)
{
	var newstr = "";
	var at = true;
	var atcnt = 0;
	var dot = false;

	if(checkString.indexOf("@") != -1){
		at = true;
	} else if(checkString.indexOf(".") != -1){
		dot = true;
	}
	for(var i = 0; i < checkString.length; i++){
		ch = checkString.substring(i, i + 1)
		if(		(ch >= "ANY" && ch <= "Z")
			 || (ch >= "a" && ch <= "z")
			 || (ch == "@")
			 || (ch == ".")
			 || (ch == "_")
			 || (ch == "-")
			 || (ch >= "0" && ch <= "9")	){
			newstr += ch;
			if(ch == "@"){
				at=true;
				++atcnt;
			}
			if(ch == ".") dot=true;
		}
	}
	if(at == true && dot == true && atcnt==1) return true;
	return false;
}

// Replace comma to period
function ReplaceC2P(checkObj)
{
	var i, val;
	var res = "";
	val = checkObj.value;
	for (var i=0; i< val.length; i++){
		c = val.charAt(i);
		(c=="," ? res += "." : res += c);
	}
	checkObj.value = res;
}

// Check URL
function checkUrl(str)
{
	if (str.match(/(http|ftp):\/\/[!#-9A-~]+\.+[a-z0-9]+/i)) return true;
	return false;
}
//https対応
function checkUrlS(str)
{
	if (str.match(/(http|https|ftp):\/\/[!#-9A-~]+\.+[a-z0-9]+/i)) return true;
	return false;
}


//-----------------------------------------------------------
//	Character check functions
//-----------------------------------------------------------

// Check only Space
function checkOnlySpace(checkString)
{
	err = 0;
	str = new String(checkString);
	if(str.length==0) return false;
	for (var i=0; i < str.length; i++){
		code = str.charCodeAt(i);
		if(code!=32 && code!=12288) return true;
	}
	return false;
}

// Check alphanumeric
function checkAlphanumeric(str)
{
	var txt, jtxt;
	txt = "01234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
	for (var i=0; i<str.length; i++){
		c = str.charAt(i);
		n = txt.indexOf(c,0);
		if(n < 0) return false;
	}
	return true;
}

// Check numeric
function checkNumeric(str)
{
	var txt, jtxt;
	txt = "0123456789";
	for (var i=0; i<str.length; i++){
		c = str.charAt(i);
		n = txt.indexOf(c,0);
		if(n < 0) return false;
	}
	return true;
}

// Check float
function checkFloat(str, int, float)
{
	txt		= "0123456789";
	int_num = 0;
	flt_num = 0;
	p_num	= 0;
	for (var i=0; i<str.length; i++){
		c = str.charAt(i);
		if (c=="."){
			++p_num;
			continue;
		}
		n = txt.indexOf(c,0);
		if(n < 0) return false;
		if (p_num==0) ++int_num;
		if (p_num==1) ++flt_num;
	}
	if (p_num > 1) return false;
	if (int_num > int) return false;
	if (p_num==1 && (flt_num==0 || flt_num > float)) return false;
	return true;
}

// Check plus string
function checkPlusStr(str,mode,plus)
{
	var txt	  = Array();
	var error = 0;

	txt   = plus.split("##");
	pStr  = txt[0];

	switch(mode){
		case 1:
			txt = "0123456789";
			txt += plus;
			for(var i=0; i<str.length; i++){
				c = str.charAt(i);
				n = txt.indexOf(c,0);
				if(n < 0) ++error;
			}
			break;
		case 2:
			if(str.match(/[0-9a-zA-ZpStr]/)){
				var str2 = str;
				for(var i=0; i<str.length; i++){
					str2 = str2.replace(txt[1], "");
					i = str2.length;
					if(!str2.match((txt[1]))) break;
				}
				if(str2.match(/[a-z]/)) ++error;
			}
			break;
	}

	if(error > 0) return false;
	return true;
}

// Check hankana
function checkHanKana(str)
{
	var temp = "";
	// ブラウザが全角文字を何文字と判断するかチェック
	var plus_numb = "ア".length;

	var cnst = "ｧｱｨｲｩｳｪｴｫｵｶｷｸｹｺｻｼｽｾｿﾀﾁｯﾂﾃﾄﾅﾆﾇﾈﾉﾊﾋﾌﾍﾎﾏﾐﾑﾒﾓｬﾔｭﾕｮﾖﾗﾘﾙﾚﾛﾜｦﾝｰﾟﾞ";
	cnst += "1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_";
	cnst += "!#0&'()=`|~{+*}<>?^@[;:],./$\%\\･ \"､";
	cnst += "ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩω";
	cnst += "αβγδεζηθικλμνξοπρστυφχψω";



	var flg = true;
	var i = 0;
	while(1){
		temp = str.charAt(i);
		if(cnst.indexOf(temp) >= 0){
			i = i+plus_numb;
			if(i >= str.length) break;
		}else{
			flg = false;
			break;
		}
	}

	if(flg) return true;
	return false;
}

//-----------------------------------------------------------
//	Date check functions
//-----------------------------------------------------------

// Check date totaly
function checkDateTotaly(myDate)
{
	var i;
	for (i=0; i < 3; i++){
		if (!checkOnlySpace(myDate[i])) return "NoDate";
		if (!checkNumeric(myDate[i])) return "MalDate";
	}
	if (myDate[0] < 1970) return "MalDate";
	if (myDate[1] < 1 || myDate[1] > 12) return "MalDate";
	if (myDate[2] < 1 || myDate[2] > 31) return "MalDate";
	if (!checkRightDate(myDate[0], myDate[1], myDate[2])) return "MalDate";
	return true;
}

// Check before 1970 date totaly
function checkBirthTotaly(myDate)
{
	var i;
	for (i=0; i < 3; i++){
		if (!checkOnlySpace(myDate[i])) return "NoDate";
		if (!checkNumeric(myDate[i])) return "MalDate";
	}
	if (myDate[0] < 0) return "MalDate";
	if (myDate[1] < 1 || myDate[1] > 12) return "MalDate";
	if (myDate[2] < 1 || myDate[2] > 31) return "MalDate";
	if (!checkRightDate(myDate[0], myDate[1], myDate[2])) return "MalDate";
	return true;
}

// Check date
function checkRightDate(y, m, d)
{
	var y, m, d, r, h;
	var hantei=0;
	(m == 2
		 ? (y % 4 == 0
			 ? (y % 100 == 0 ? (y % 400 == 0 ? hantei = 3 : hantei = 2) : hantei = 3)
			 : hantei = 2															)
		 : (m == 4 || m == 6 || m == 9 || m == 11 ? hantei = 0 : hantei = 1)		);
	switch(hantei){
		case 0:
			r = 30;
			break;
		case 1:
			r = 31;
			break;
		case 2:
			r = 28;
			break;
		case 3:
			r = 29;
			break;
	}
	(d > r ? h = false : h = true);
	return h;
}

// Get difference 2days
function getDif2Days(sy, sm, sd, ey, em, ed)
{
	var ret;
	var sdt = new Array(sy, sm, sd);
	var edt = new Array(ey, em, ed);
	ret = checkDateTotaly(sdt);
	if (ret=="NoDate" || ret=="MalDate") return false;
	ret = checkDateTotaly(edt);
	if (ret=="NoDate" || ret=="MalDate") return false;
	var cd1 = new Date(sy, sm-1, sd);
	var cd2 = new Date(ey, em-1, ed);
	return Math.ceil((cd2.getTime()-cd1.getTime())/(24*60*60*1000));
}


//-----------------------------------------------------------
//	Code check functions
//-----------------------------------------------------------

// Check zip-code
function checkZipCode(checkString)
{
	var num = checkString.match(/^\d{3}-\d{4}$/);
	if(!num) return false;
	return true;
}

// Check phone-no
function checkPhoneNo(checkString)
{
	var num = checkString.match(/^\d{2,5}-\d{1,4}-\d{4}$/);
	if(!num) return false;
	return true;
}
// Check Freephone-no
function checkFreePhoneNo(checkString)
{
	var num = checkString.match(/^\d{4}-\d{3}-\d{3}$/);
	if(!num) return false;
	return true;
}

//-----------------------------------------------------------
//	Anti double entry
//-----------------------------------------------------------

// Disable submit button after enter submit
function DisableSubmit()
{
	document.Form.Submit.disabled = true;
}

//全角→半角変更
function convZen2Han(thisObj)
{
	var myHan = new Array(	"A","B","C","D","E","F","G","H","I","J","K","L","M","N",
							"O","P","Q","R","S","T","U","V","W","X","Y","Z",
							"a","b","c","d","e","f","g","h","i","j","k","l","m","n",
							"o","p","q","r","s","t","u","v","w","x","y","z",
							"1","2","3","4","5","6","7","8","9","0",
							"@",".","\,","-","_","(",")","!","\"","#","$","%","&","=",
							"~","{","}","+","*",";",":","?","/","<",">"," ","\'","･");
	var myZen = new Array(	"Ａ","Ｂ","Ｃ","Ｄ","Ｅ","Ｆ","Ｇ","Ｈ","Ｉ","Ｊ","Ｋ",
							"Ｌ","Ｍ","Ｎ","Ｏ","Ｐ","Ｑ","Ｒ","Ｓ","Ｔ","Ｕ","Ｖ",
							"Ｗ","Ｘ","Ｙ","Ｚ",
							"ａ","ｂ","ｃ","ｄ","ｅ","ｆ","ｇ","ｈ","ｉ","ｊ","ｋ",
							"ｌ","ｍ","ｎ","ｏ","ｐ","ｑ","ｒ","ｓ","ｔ","ｕ","ｖ",
							"ｗ","ｘ","ｙ","ｚ",
							"１","２","３","４","５","６","７","８","９","０",
							"＠","．","，","－","＿","（","）","！","”","＃","＄",
							"％","＆","＝","￣","｛","｝","＋","＊","；","：","？",
							"／","＜","＞","　","’","・");
	var str = thisObj.value;
	var i;
	var j;
	var bit = "";
	var res = "";
	for (i = 0; i < str.length; i++){
		bit = str.charAt(i);
		for (j = 0; j < myZen.length; j++){
			bit = bit.replace(myZen[j], myHan[j]);
		}
		res = res + bit;
	}
	thisObj.value = res;
}

// 全角→半角変更（カナ
function convZen2HanKana(thisObj){
	var myHan = new Array(
							"ｶﾞ","ｷﾞ","ｸﾞ","ｹﾞ","ｺﾞ","ｻﾞ","ｼﾞ","ｽﾞ","ｾﾞ","ｿﾞ","ﾀﾞ","ﾁﾞ",
							"ﾂﾞ","ﾃﾞ","ﾄﾞ","ﾊﾞ","ﾋﾞ","ﾌﾞ","ﾍﾞ","ﾎﾞ","ﾊﾟ","ﾋﾟ","ﾌﾟ","ﾍﾟ","ﾎﾟ","ｦ","ｧ",
							"ｨ","ｩ","ｪ","ｫ","ｬ","ｭ","ｮ","ｯ","ｰ","ｱ","ｲ","ｳ","ｴ","ｵ","ｶ","ｷ","ｸ","ｹ",
							"ｺ","ｻ","ｼ","ｽ","ｾ","ｿ","ﾀ","ﾁ","ﾂ","ﾃ","ﾄ","ﾅ","ﾆ","ﾇ","ﾈ","ﾉ","ﾊ","ﾋ",
							"ﾌ","ﾍ","ﾎ","ﾏ","ﾐ","ﾑ","ﾒ","ﾓ","ﾔ","ﾕ","ﾖ","ﾗ","ﾘ","ﾙ","ﾚ","ﾛ","ﾜ","ﾝ","ｳﾞ"
						);

	var myZen = new Array(
							"ガ","ギ","グ","ゲ","ゴ","ザ","ジ","ズ","ゼ","ゾ","ダ","ヂ",
							"ヅ","デ","ド","バ","ビ","ブ","ベ","ボ","パ","ピ","プ","ペ","ポ","ヲ","ァ",
							"ィ","ゥ","ェ","ォ","ャ","ュ","ョ","ッ","ー","ア","イ","ウ","エ","オ","カ",
							"キ","ク","ケ","コ","サ","シ","ス","セ","ソ","タ","チ","ツ","テ","ト","ナ",
							"ニ","ヌ","ネ","ノ","ハ","ヒ","フ","ヘ","ホ","マ","ミ","ム","メ","モ","ヤ",
							"ユ","ヨ","ラ","リ","ル","レ","ロ","ワ","ン","ヴ"
						);
	var str = thisObj.value;
	var i;
	var j;
	var bit = "";
	var res = "";
	for (i = 0; i < str.length; i++){
		bit = str.charAt(i);
		for (j = 0; j < myZen.length; j++){
			bit = bit.replace(myZen[j], myHan[j]);
		}
		res = res + bit;
	}
	thisObj.value = res;
}

//全角カナチェック
function KanaCheck(checkString)
{
	var txt;
	var jtxt;
	txt = "アイウエオカキクケコサシスセソタチツテトナニヌネノ";
	txt+= "ガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポヴ";
	txt+= "ハヒフヘホマミムメモヤユヨラリルレロワヲンァィゥェォャュョッヶヵ";
	txt+= "ー・ 　（）";
	txt+= "ｱｲｳｴｵｶｷｸｹｺｻｼｽｾｿﾀﾁﾂﾃﾄﾅﾆﾇﾈﾉ";					//
	txt+= "ﾊﾋﾌﾍﾎﾏﾐﾑﾒﾓﾔﾕﾖﾗﾘﾙﾚﾛﾜｦﾝｧｨｩｪｫｬｭｮｯ";				//　半角カナを許可する場合はCGIで
	txt+= "ｰ･ﾞﾟ()";										//　全角カナに変換すること

	for (var i=0; i<checkString.length; i++){
		c = checkString.charAt(i);
		n = txt.indexOf(c,0);
		if(n < 0) return false;
	}
	return true;
}

//エラーチェック（個別チェック）
//	type：チェックタイプ
//		  0:数値チェック
//		  1:英数字チェック
//		  2:カタカナチェック
//		  3:電話番号チェック
//		  4:メールアドレスチェック
//		  5:日付チェック（過去日付可）
//		  6:日付チェック（過去日付不可）
//		　7:日付チェック（未来日付不可）
//		  8:郵便番号チェック
function FormCheckOne(thisObj, ele_name, type)
{
	var i, e, res=0, dt=new Array(3), dt2=new Array(3), t=thisObj.value, nm=thisObj.name, myObj=document.Form, err_msg="";
	var re = /\[\d\]/;
	if (checkOnlySpace(t)==0) return true;
	var myDate = new Date();
	dt2[0] = myDate.getFullYear();
	dt2[1] = myDate.getMonth() + 1;
	dt2[2] = myDate.getDate();
	if (type > 4 && type < 8){
		nm = nm.replace(re, "");
		for (i=0; i < 3; i++){
			e	  = nm+"["+i+"]";
			t	  = myObj.elements[e].value;
			if (checkOnlySpace(t)==1){
				if (checkNumeric(t)==0){ err_msg = getAlertMsg('E0006', ele_name); break; }
			}
			dt[i] = t;
		}
		if (checkOnlySpace(err_msg)==0) res = checkDateTotaly(dt);
	}
	if (type==0){
		if (checkNumeric(t)==0)		 err_msg = getAlertMsg('E0006', ele_name);
	}
	if (type==1){
		if (checkAlphanumeric(t)==0) err_msg = getAlertMsg('E0005', ele_name);
	}
	if (type==2){
		if (KanaCheck(t)==0)		 err_msg = getAlertMsg('E0007', ele_name);
	}
	if (type==3){
		if (checkPhoneNo(t)==0)		 err_msg = getAlertMsg('E0003', ele_name);
	}
	if (type==4){
		if (checkEmail(t)==0)		 err_msg = getAlertMsg('E0003', ele_name);
	}
	if (type > 4 && type < 8){
		if (res=="MalDate")			 err_msg = getAlertMsg('E0003', ele_name);
		if (res==true){
			if (type==6){
				if (getDif2Days(dt[0], dt[1], dt[2], dt2[0], dt2[1], dt2[2]) > 0) err_msg = ele_name+"に過去の日付を指定しています。";
			}
			if (type==7){
				if (getDif2Days(dt[0], dt[1], dt[2], dt2[0], dt2[1], dt2[2]) < 0) err_msg = ele_name+"に未来の日付を指定しています。";
			}
		}
	}
	if (type==8){
		if (checkZipCode(t)==0)		 err_msg = getAlertMsg('E0003', ele_name);
	}
	if (checkOnlySpace(err_msg)==1){
		alert(err_msg);
		thisObj.value = "";
	}
}

/* 日付フォーマット */
function date_format(thisObj, ele_name){
	var myObj = document.Form;
	var t	  = thisObj.value;
	var dt=new Array(3), err_msg="";
	var err_flg = false;

	if(!t) return false;

	if(t.match(/^\d{6}$/)){
		// yymmdd形式
		t = t.substr(0,2) + "/" + t.substr(2,2) + "/" + t.substr(4,2);
	}else if(t.match(/^\d{8}$/)){
		// yyyymmdd形式
		t = t.substr(2,2) + "/" + t.substr(4,2) + "/" + t.substr(6,2);
	}

	if(!t.match(/^\d{2}\/\d{2}\/\d{2}$/)) err_flg = true;

	if(!err_flg){
		dt = t.split("/");
		dt[0] = eval(dt[0]) + 2000;
		dt[1] = eval(dt[1]);
		dt[2] = eval(dt[2]);
		if(checkDateTotaly(dt) != true) err_flg = true;
	}

	if(err_flg) err_msg = getAlertMsg("E0003", ele_name);
	// エラーメッセージ表示
	if(checkOnlySpace(err_msg) == 1){
		alert(err_msg);
		thisObj.value = "";
	}else{
		thisObj.value = t;
	}
}

/* バイト数取得 */
function getByte(str) {
/*	var count = 0;
	for(var i=0; i<str.length; i++){
		var s = str.substring(i, i + 1);
		var c = s.charCodeAt(i);
		if(c < 256 || (c >= 0xff61 && c <= 0xff9f)){
			// 半角の場合
			count += 1;
		}else{
			// 全角の場合
			count += 2;
		}
	}
	return count;*/

	len = 0; 
	for(i=0;i<str.length;i++){ 
		iCode = str.charCodeAt(i);
		if((iCode>=0 && iCode<=255)||(iCode>=0xff61 && iCode<=0xff9f)){
			len += 1;
		}else{
			len += 2;
		}
	}
	return len;
}
//-----------------------------------------------------------
//	Error & Worning message
//-----------------------------------------------------------
function getAlertMsg(myErrorCode, myItemName)
{
	var myMsg = "";
	switch (myErrorCode){
		case "E0001":	myMsg = myItemName+"の入力がありません。\n";
						break;
		case "E0002":	myMsg = myItemName+"の選択がありません。\n";
						break;
		case "E0003":	myMsg = myItemName+"を正しく入力してください。\n";
						break;
		case "E0004":	myMsg = myItemName+"を正しく選択してください。\n";
						break;
		case "E0005":	myMsg = myItemName+"は半角英数字で入力してください。\n";
						break;
		case "E0006":	myMsg = myItemName+"は半角数字で入力してください。\n";
						break;
		case "E0007":	myMsg = myItemName+"は半角で入力してください。\n";
						break;
		case "E0008":	myMsg = myItemName+"は既に使用されています。\n";
						break;
		case "E0009":	myMsg = myItemName+"エラーです。\n";
						break;
		case "E0010":	myMsg = myItemName+"はひらがなで入力して下さい。\n";
						break;
		case "E0011":	myMsg = myItemName+"\n";
						break;
		case "W0001":	myMsg = "データベースの読み出しに失敗しました。";
						break;
		case "W0002":	myMsg = "情報"+myItemName+"を実行します。よろしいですか？";
						break;
		case "W0003":	myMsg = "情報"+myItemName+"が完了しました。";
						break;
		case "W0004":	myMsg = "情報"+myItemName+"に失敗しました。";
						break;
	}
	return myMsg;
}

