////////////////////////////////////////////////////////////
//                   パブリック変数
////////////////////////////////////////////////////////////
tuki_tbl = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
strHira = "ぁあぃいぅうぇえぉおかきくけこさしすせそたちっつてとなにぬねのはひふへほまみむめもゃやゅゆょよらりるれろわをんがぎぐげござじずぜぞだぢづでどばびぶべぼぱぴぷぺぽ 　";
strKata = "ァアィイゥウェエォオカキクケコサシスセソタチッツテトナニヌネノハヒフヘホマミムメモャヤュユョヨラリルレロワヲンガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポ 　";
strNumeric = "1234567890";
strAlpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
strHankaku = strNumeric + strAlpha + "-_ｧｱｨｲｩｳｪｴｫｵｶｷｸｹｺｻｼｽｾｿﾀﾁｯﾂﾃﾄﾅﾆﾇﾈﾉﾊﾋﾌﾍﾎﾏﾐﾑﾒﾓｬﾔｭﾕｮﾖﾗﾘﾙﾚﾛﾜｦﾝｰﾟ!#0&'()=`|~{+*}<>?^@[;:],./$\%\\ﾞ\"\'";

////////////////////////////////////////////////////////////
//              フォームコントロール関数
////////////////////////////////////////////////////////////

// 全角を半角に（英数字のみ対応）
function convHankaku( obj ){
	strURI = "-_@.:/";
	strURIFull = "－＿＠．：／";
	strNumericFull = "１２３４５６７８９０";
	strAlphaFull = "ＡＢＣＤＥＦＧＨＩＪＫＬＭＮＯＰＱＲＳＴＵＶＷＸＹＺａｂｃｄｅｆｇｈｉｊｋｌｍｎｏｐｑｒｓｔｕｖｗｘｙｚ";

	moji1 = strNumericFull + strAlphaFull + strURIFull;
	moji2 = strNumeric + strAlpha + strURI;
	motoTxt = obj.value;
	obj.value = "";
	for(i=0; i<motoTxt.length; i++)
	{
		c = motoTxt.charAt(i);
		n = moji1.indexOf(c,0);
		if(n >=0 )
			 c = moji2.charAt(n);
		obj.value += c;
	}
}
// ひらがねをカタカナに変換（全角文字のみ対応）
function convKatakana( obj ){
	strKata = "ァアィイゥウェエォオカキクケコサシスセソタチッツテトナニヌネノハヒフヘホマミムメモャヤュユョヨラリルレロワヲンガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポ 　";
	moji1 = strHira;
	moji2 = strKata;
	motoTxt = obj.value;
	obj.value = "";
	for(i=0; i<motoTxt.length; i++)
	{
		c = motoTxt.charAt(i);
		n = moji1.indexOf(c,0);
		if(n >=0 )
			 c = moji2.charAt(n);
		obj.value += c;
	}
}

////////////////////////////////////////////////////////////
//                  内部処理関数
////////////////////////////////////////////////////////////

//TODO step2.jspから排除すれば、この関数はいらなくなるかもしれない。念のため、要確認。
// インデックス用ブラケット付加
function makeTitle( title, index ){
	var txt = "";
	if(index==""){
		txt = title;
	} else {
		txt = title + "[" + index + "]";
	}
	return txt;
}

// 文字探査報告
function InFlag( c, aryChar ){
	var flg = false;
	var i = 0;

	for(i=0;i<aryChar.length;i++)
		if(c == aryChar.charAt(i)) flg = true;
	return flg;
}

//TODO step2.jspから「CalChecker」を排除すれば、この関数はいらなくなる。
// 閏年対応
function uruu(y){
	if (y % 4 == 0 && y % 100 != 0 || y % 400 == 0){
		tuki_tbl[1] = 29;
	} else {
		tuki_tbl[1] = 28;
	}
}

////////////////////////////////////////////////////////////
//                  基本チェック関数
////////////////////////////////////////////////////////////

//TODO step2.jspから排除すれば、この関数はいらなくなるかもしれない。念のため、要確認。
// 未入力チェック
function isInput( obj ) {
	return obj.value != "";
}

// 半角数字チェック
function isNumeric( obj ){
	var flg = true;
	var i = 0;
	if( obj.type == "select-one" ){
		for(i=0;i<obj.options[obj.selectedIndex].value.length;i++){
			if(!(InFlag( obj.options[obj.selectedIndex].value.charAt(i), strNumeric ))){
				flg = false;
			}
		}
	}else{
		for(i=0;i<obj.value.length;i++){
			if(!(InFlag( obj.value.charAt(i), strNumeric ))){
				flg = false;
			}
		}
	}
	return flg;
}

//TODO step2.jspから排除すれば、この関数はいらなくなる。
// \" ダブルコーテーションチェック　$マークチェック
function isMark( obj ){
	var flg = true;
	var i = 0;

	for(i=0;i<obj.value.length;i++){
		if(InFlag( obj.value.charAt(i),  "\"$" )){
			flg = false;
		}
	}
	return flg;
}

//TODO step2.jspから「HiraganaChecker」を排除すれば、この関数はいらなくなる。
// 全角ひらがなチェック
function isHiragana( obj ){
	var flg = true;
	var i = 0;

	for(i=0;i<obj.value.length;i++){
		if(!(InFlag( obj.value.charAt(i), strHira+"ー" ))){
			flg = false;
		}
	}
	return flg;
}

//TODO step2.jspから「KatakanaChecker」を排除すれば、この関数はいらなくなる。
// 全角カタカナチェック
function isKatakana( obj ){
	var flg = true;
	var i = 0;

	for(i=0;i<obj.value.length;i++){
		if(!(InFlag( obj.value.charAt(i), strKata+"ー" ))){
			flg = false;
		}
	}
	return flg;
}

//TODO step2.jspから「ZenkakuChecker」を排除すれば、この関数はいらなくなる。
// 全角文字チェック
function isZenkaku( obj ){
	var flg = true;
	var i = 0;

	for(i=0;i<obj.value.length;i++){
		if(InFlag( obj.value.charAt(i), strHankaku )){
			flg = false;
		}
	}
	return flg;
}

////////////////////////////////////////////////////////////
//                  詳細チェック関数
////////////////////////////////////////////////////////////

// 未入力チェック
function InputChecker( obj, title, index ){
	var msg = "";

	if( !isInput(obj) ){
		msg += makeTitle(title,index) + "が未入力です。\r\n";
	}

	return msg;
}

//TODO step2.jspから排除すれば、この関数はいらなくなる。
// 全角文字チェック
function ZenkakuChecker( obj, title, index ){
	var msg = "";

	if( !isInput(obj) ){
		msg += makeTitle(title,index) + "が未入力です。\r\n";
	} else if (!isZenkaku(obj)) {
		msg += makeTitle(title,index) + "は全角文字で入力してください。\r\n";
	}

	return msg;
}

// 半角数字チェック
function NumericChecker( obj, title, index ){
	var msg = "";

	if( !isInput(obj) ){
		msg += makeTitle(title,index) + "が未入力です。\r\n";
	} else if (!isNumeric(obj)) {
		msg += makeTitle(title,index) + "は半角数字で入力してください。\r\n";
	}
	return msg;
}

//TODO step2.jspから排除すれば、この関数はいらなくなる。
// ひらがなのチェック
function HiraganaChecker( obj, title, index ){
	var msg = "";

	if( !isInput(obj) ){
		msg += makeTitle(title,index) + "が未入力です。\r\n";
	} else if (!isHiragana(obj)) {
		msg += makeTitle(title,index) + "は全角ひらがなで入力してください。\r\n";
	}

	return msg;
}

//TODO step2.jspから排除すれば、この関数はいらなくなる。
// カタカナのチェック
function KatakanaChecker( obj, title, index ){
	var msg = "";

	if( !isInput(obj) ){
		msg += makeTitle(title,index) + "が未入力です。\r\n";
	} else if (!isKatakana(obj)) {
		msg += makeTitle(title,index) + "は全角カナ文字で入力してください。\r\n";
	}

	return msg;
}

//TODO step2.jspから排除すれば、この関数はいらなくなる。
// 電話番号フィールドのチェック
function TelFieldsChecker( obj1, obj2, obj3, title, index ){
	var msg = "";
	msg += NumericChecker(obj1,title,index + "市外局番");
	msg += NumericChecker(obj2,title,index + "市内局番");
	msg += NumericChecker(obj3,title,index + "市内局番");
	return msg;
}

//TODO step2.jspから排除すれば、この関数はいらなくなる。
// 電子メール書式チェック
function MailChecker( obj, title, index ){
	var msg = "";
	var flg = false;
	var i = 0;
	var code = 0;
	var atcnt = 0;
	var atpos = 0;
	var pdcnt = 0;

	if( !isInput(obj) ){
		msg += makeTitle(title,index) + "が未入力です。\r\n";
	}
	else{
		if ( !InFlag( obj.value.charAt(0), strAlpha + strNumeric ) ) {
			msg += makeTitle(title,index) + "の先頭は半角英数字しか使えません。\n";
		}
		for(i=0;i<obj.value.length;i++){
			code = obj.value.charAt(i);

			if( !( InFlag( code, strAlpha + strNumeric + "@.-_" ) ) ){
				flg = true;
			}

			if( InFlag( code, "@" ) ){
				atcnt++;
				atpos = i;
			}
		}

		for(i=atpos;i<obj.value.length;i++){
			code = obj.value.charAt(i);

			if( InFlag( code, "." ) ){
				pdcnt++;
			}
		}
		if( flg ) msg += makeTitle(title,index) + "に使用できる文字は、半角英数字および @ . - _ です。\r\n";
		if( atcnt != 1 ) msg += makeTitle(title,index) + "には @ が１つだけ必要です。\r\n";
		if(pdcnt < 1) msg += makeTitle(title,index) + "には.が@の後に１つ以上必要です。\r\n";
	}
	return msg;
}

//TODO step2.jspから排除すれば、この関数はいらなくなる。
function CalChecker( y, m, d, d_flg, f_flg, title, index ){
	var msg = "";
	var cal = new Date();
	var cal2;
	if(isInput(y)&&isInput(m)&&isInput(d)&&isNumeric(y)&&isNumeric(m)&&isNumeric(d)){
		uruu( y.value );
	 	if( m.value <1 || m.value > 12){
	 		msg += makeTitle(title,index) + "の月が 1 ～ 12 の範囲を超えています。\r\n";
	 	} else if( d.value < 1 || d.value > tuki_tbl[m.value -1]){
	 		msg += makeTitle(title,index) + "の日が 1 ～ " + tuki_tbl[m.value-1] + " の範囲を超えています。\r\n";
	 	} else if(y.value < 0){
				msg += makeTitle(title,index) + "の年は西暦で入力してください。\r\n";
		} else {
			cal2 = new Date(y.value,m.value-1,d.value);
			if(d_flg && cal2.getTime() < cal.getTime()) {
				msg += makeTitle(title,index) + "が過去のものになっています。\r\n";
			} else if(f_flg && cal2.getTime() > cal.getTime()) {
				msg += makeTitle(title,index) + "が未来のものになっています。\r\n";
			}
		}
	} else {
		msg += makeTitle(title,index) + "は未入力もしくは数字以外の値が入っています。\r\n";
	}

	return msg;
}

// 文字列前後の全角及び半角スペースを削除
function SpcTrim( s ) {
	var fs = "　";  //２文字判定対策
	while ( 1 == 1 ) {
		if ( s.length == 0 ) {
			return "";
		}
		if ( s.indexOf(" ") == 0 ) {
			s = s.substring( 1, s.length );
		} else if ( s.indexOf("　") == 0 ) {
			s = s.substring( fs.length, s.length );
		} else {
			break;
		}
	}
	while ( 1 == 1 ) {
		if ( s.length == 0 ) {
			return "";
		}
		if ( s.lastIndexOf(" ") == s.length-1 ) {
			s = s.substring( 0, s.lastIndexOf(" ") );
		} else if ( s.lastIndexOf("　") == s.length-1 ) {
			s = s.substring( 0, s.lastIndexOf("　") );
		} else {
			break;
		}
	}
	return s;
}

function CheckCarender(yyy,mmm,ddd,type){
	var msg = "";
	month = new Array(12)
	month[0] = 29;//うるう年の二月
	month[1] = 31;
	month[2] = 28;
	month[3] = 31;
	month[4] = 30;
	month[5] = 31;
	month[6] = 30;
	month[7] = 31;
	month[8] = 31;
	month[9] = 30;
	month[10] = 31;
	month[11] = 30;
	month[12] = 31;
	var yy;
	var mm;
	var dd;
	var i;
	for(var i=0;i<yyy.options.length;i++){
		if(yyy.options[i].selected){
			yy = eval(yyy.options[i].value);
		}
	}
	for(i=0;i<mmm.options.length;i++){
		if(mmm.options[i].selected){
			mm = eval(mmm.options[i].value);
		}
	}
	for(i=0;i<ddd.options.length;i++){
		if(ddd.options[i].selected){
			dd = eval(ddd.options[i].value);
		}
	}
	yy = eval(yy + type);
	if (yy % 4 == 0 && yy % 100 != 0 || yy % 400 == 0){
		if( mm != 2 ){
			if( month[mm] < dd ){
//				msg = mm + "月は" + month[mm] +"日までです";
				return false;
			}
		}else{
			if( month[0] < dd ){
//				msg = mm + "月は" + month[mm] +"日までです";
				return false;
			}
		}
	}else{
		if( month[mm] < dd ){
//			msg = mm + "月は" + month[mm] +"日までです";
			return false;
		}
	}
	return true;
}

/****************************************************************
* 機　能： 入力された値が日付でYYYY/MM/DD形式になっているか調べる
* 引　数： datestr　入力された値
* 戻り値： 正：true　不正：false
****************************************************************/
function checkDate(datestr) {
	// 正規表現による書式チェック
//	if (!datestr.match(/[^0-9]+/)) {
	if (!datestr.match(/^\d{8}$/)) {
		return false;
	}
	var vYear = datestr.substr(0, 4) - 0;
	var vMonth = datestr.substr(4, 2) - 1;
	var vDay = datestr.substr(6, 2) - 0;
	// 月,日の妥当性チェック
	if (vYear >= 1900 && vYear < 2100 && vMonth >= 0 && vMonth <= 11 && vDay >= 1 && vDay <= 31) {
		var vDt = new Date(vYear, vMonth, vDay);
		if (isNaN(vDt)) {
			return false;
		} else if (vDt.getFullYear() == vYear && vDt.getMonth() == vMonth && vDt.getDate() == vDay) {
			return true;
		} else {
			return false;
		}
	} else {
		return false;
	}
}

function closeWindow(edit){
	if(navigator.appName=="Netscape"){
		if (edit!=null){
			if( edit.closed ){ return; }
		}else{
			return;
		}
	}
	if (edit!=null){ edit.close(); }
}

function submitFnc(formName, action, cmd){
	var frm = document.forms[formName];
	frm.action = action;
	frm.cmd.value = cmd;
	frm.submit();
	return false;
}

