//------------------------------------------------------------------
// ファイル名: common.js
//
// 備考      : 
//
// 履歴      : 00.10.12  藤沢真里  新規作成
//           : is_numchar関数で入力が空のときはtrueに変更
//------------------------------------------------------------------


//------------------------------------------------------------------
// 関数名    : 必須チェック関数
//
// 返り値    : なし
//             
//
// 引　数    : オブジェクト 
//             オブジェクトの名称
//
// 機能説明  : 入力有無チェックを行う。エラーの場合、フォーカスを移動
//              する。
//
// 備考      : テキストボックス系とselect、radio用
//
// 履歴      : 02.08.20  溝口 祥  新規作成
//------------------------------------------------------------------
function chk_empty(obj , objName){

	var isEmpty;
	var msg;
	var i;
	
	switch (obj.type) {
		case "text":
		case "textarea" :
		case "password" :
		case "hidden" :
			isEmpty =  (obj.value == "");
			msg = "を入力してください。";
			break;
		case "radio" :
			isEmpty = !obj.checked;
			msg = "を選択してください。";
			break;
			
		case 'select-one' :
			msg = "を選択してください。";
			isEmpty = (obj.options[obj.selectedIndex].value == "");
			break;

		default :
			if (obj[0].type =='radio') {
				isEmpty = true;
		       	for (i = 0; i < obj.length; i++) {
		            if (obj[i].checked) {
		                isEmpty = false;
		            }
				}
				msg = "を選択してください。";
				obj = obj[0];
				
			} else {
				alert(obj.type + "はこの関数(chk_empty)ではつかえません。");
				return false;
			}
	}
	
	if (isEmpty) {
		alert(objName + msg);
		obj.focus();
		return false;
	}
	
	return true;
	
}

//------------------------------------------------------------------
// 関数名    : 英数字(0-9a-zA-Z_-.)チェック関数
//
// 返り値    : なし
//             
//
// 引　数    : オブジェクト
//             オブジェクトの名称
//
// 機能説明  : 英数字(0-9a-zA-Z_-.)チェックを行う。エラーの場合、フォーカスを移動
//              する。
//
// 備考      : テキストボックス系のみ
//
// 履歴      : 02.09.26  sen 新規作成
//------------------------------------------------------------------
function chk_h_n(obj , objName){

	var isEmpty;
	var msg;
	
	switch (obj.type) {
		case "text":
		case "textarea" :
		case "password" :
		case "hidden" :
			if (in_h_kana(obj.value)) {
				alert(objName + "に半角カナは入力できません。");
				obj.focus();
				return false;
			}
			break;
		
		default :
			alert(obj.type + "はこの関数(chk_h_kana)ではつかえません。");
			return false;
	}
	
	return true;
	
}

//------------------------------------------------------------------
// 関数名    : 半角かなチェック関数
//
// 返り値    : なし
//             
//
// 引　数    : オブジェクト
//             オブジェクトの名称
//
// 機能説明  : 半角かなチェックを行う。エラーの場合、フォーカスを移動
//              する。
//
// 備考      : テキストボックス系のみ
//
// 履歴      : 02.08.20  溝口 祥  新規作成
//------------------------------------------------------------------
function chk_h_kana(obj , objName){

	var isEmpty;
	var msg;
	
	switch (obj.type) {
		case "text":
		case "textarea" :
		case "password" :
		case "hidden" :
			if (in_h_kana(obj.value)) {
				alert(objName + "に半角カナは入力できません。");
				obj.focus();
				return false;
			}
			break;
		
		default :
			alert(obj.type + "はこの関数(chk_h_kana)ではつかえません。");
			return false;
	}
	
	return true;
	
}

//------------------------------------------------------------------
// 関数名    : 日付チェック関数
//
// 返り値    : なし
//             
//
// 引　数    : オブジェクト
//             オブジェクトの名称
//
// 機能説明  : 日付チェックを行う。エラーの場合、フォーカスを移動
//             する。
//
// 備考      : テキストボックスのみ
//
// 履歴      : 02.08.20  溝口 祥  新規作成
//------------------------------------------------------------------
function chk_date(obj , msg){

	var isEmpty;
	var msg;
	
	switch (obj.type) {
		case "text":
		case "hidden" :
			if (obj.value  != '') {
				if (!is_date(obj.value, 1)) {
					alert(msg);
					obj.focus();
					return false;
				}
			}
			break;
		
		default :
			alert(obj.type + "はこの関数(chk_date)ではつかえません。");
			return false;
	}
	return true;
}

//------------------------------------------------------------------
// 関数名    : 電話番号チェック関数
//
// 返り値    : なし
//             
//
// 引　数    : オブジェクト
//             オブジェクトの名称
//
// 機能説明  : 電話番号チェックを行う。エラーの場合、フォーカスを移動
//             する。
//
// 備考      : テキストボックスのみ
//
// 履歴      : 02.08.20  溝口 祥  新規作成
//------------------------------------------------------------------
function chk_numhyphen(obj , objName){

	var isEmpty;
	var msg;
	
	switch (obj.type) {
		case "text":
		case "textarea":
		case "hidden" :
			if (!is_numhyphen(obj.value)) {
				alert(objName + "が不正です。");
				obj.focus();
				return false;
			}
			break;
		
		default :
			alert(obj.type + "はこの関数(chk_numhyphen)ではつかえません。");
			return false;
	}
	return true;
}



//------------------------------------------------------------------
// 関数名    : 数値チェック関数
//
// 返り値    : なし
//             
//
// 引　数    : オブジェクト
//             オブジェクトの名称
//
// 機能説明  : 数値チェックを行う。エラーの場合、フォーカスを移動
//             する。
//
// 備考      : テキストボックスのみ
//
// 履歴      : 02.08.20  溝口 祥  新規作成
//------------------------------------------------------------------
function chk_num(obj , objName){

	var isEmpty;
	var msg;
	
	switch (obj.type) {
		case "text":
		case "textarea":
		case "hidden" :
			if (!is_numchar(obj.value)) {
				alert(objName + "には数字を入力してください。");
				obj.focus();
				return false;
			}
			break;
		
		default :
			alert(obj.type + "はこの関数(chk_num)ではつかえません。");
	}
	return true;
}

//------------------------------------------------------------------
// 関数名    : 数値チェック関数
//
// 返り値    : なし
//             
//
// 引　数    : オブジェクト
//             オブジェクトの名称
//             長さ
//
// 機能説明  : 長さチェックを行う。エラーの場合、フォーカスを移動
//             する。
//
// 備考      : テキストボックスのみ
//
// 履歴      : 02.08.20  溝口 祥  新規作成
//------------------------------------------------------------------
function chk_len(obj , objName, len){

	var isEmpty;
	var msg;
	
	switch (obj.type) {
		case "text":
		case "textarea":
		case "password":
			if (!check_max_length(obj.value , len)) {
				alert(objName + "は" + len + "バイト以内で入力してください。");
				obj.focus();
				return false;
			}
			break;
		default :
			alert(obj.type + "はこの関数(chk_len)ではつかえません。");
			return false;
	}
	return true;
}

//------------------------------------------------------------------
// 関数名    : 数値チェック関数
//
// 返り値    : なし
//             
//
// 引　数    : オブジェクト
//             オブジェクトの名称
//             長さ
//
// 機能説明  : 長さチェックを行う。エラーの場合、フォーカスを移動
//             する。
//
// 備考      : テキストボックスのみ
//
// 履歴      : 02.09.03  仙石 新規作成
//------------------------------------------------------------------
function chk_len2(obj , objName, len){

	var isEmpty;
	var msg;
	
	switch (obj.type) {
		case "text":
		case "textarea":
		case "password":
			if (obj.value.length != len ) {
				alert(objName + "は" + len + "バイトで入力してください。");
				obj.focus();
				return false;
			}
			break;
		default :
			alert(obj.type + "はこの関数(chk_len)ではつかえません。");
			return false;
	}
	return true;
}






//------------------------------------------------------------------
// 関数名    : 禁則文字チェック関数
//
// 返り値    : なし
//             
//
// 引　数    : オブジェクト
//             オブジェクトの名称
//
// 機能説明  : 禁則文字チェックを行う。エラーの場合、フォーカスを移動
//             する。
//
// 備考      : テキストボックスのみ
//
// 履歴      : 02.08.20  溝口 祥  新規作成
//------------------------------------------------------------------
function chk_forbidden(obj , objName){

    var forbidden = new RegExp("[<>\"'&]","");
	
	
	switch (obj.type) {
		case "text":
		case "textarea":
		case "hidden" :
		    if ( forbidden.test(obj.value)) {
				alert(objName + "には禁則文字[ < > \" ' & ]は入力できません。");
				obj.focus();
				return false;
		    }
			break;
		
		default :
			alert(obj.type + "はこの関数(chk_forbidden)ではつかえません。");
			return false;
	}
	return true;
}


//------------------------------------------------------------------
// 関数名    : 全角’チェック関数
//
// 返り値    : なし
//             
//
// 引　数    : フォームオブジェクト
//            
//
// 機能説明  : 全角’チェックを行う。エラーの場合、フォーカスを移動
//             する。
//
// 備考      : フォームに含まれているテキスト、パスワード等全てチェックする。
//
// 履歴      : 02.08.20  溝口 祥  新規作成
//------------------------------------------------------------------
function chk_multibytequote(frm ){

	
    var forbidden = new RegExp("[’]","");
	var i ;
	
	for (i = 0 ; i < frm.elements.length; i++) {
		if (
			(frm.elements[i].type == "text") ||
			(frm.elements[i].type == "textarea") ||
			(frm.elements[i].type == "password") 
			) {
			    if ( forbidden.test(frm.elements[i].value)) {
					alert("「’」（全角のシングルクォート）は入力できません。");
					frm.elements[i].focus();
					return false;
			    }
		}
	}

	return true;
}




//------------------------------------------------------------------
// 関数名    : メールアドレスチェック関数
//
// 返り値    : なし
//             
//
// 引　数    : フォームオブジェクト
//            
//
// 機能説明  : メールアドレスチェックを行う。エラーの場合、フォーカスを移動
//             する。
//
// 備考      : 
//
// 履歴      : 02.08.20  溝口 祥  新規作成
//------------------------------------------------------------------
function chk_mailaddress(obj){

	switch (obj.type) {
		case "text":
		case "textarea":
		case "hidden" :
		    if (!is_mailaddress(obj.value)) {
				alert("メールアドレスが不正です。");
				obj.focus();
				return false;
		    }
			break;
		
		default :
			alert(obj.type + "はこの関数(chk_mailaddress)ではつかえません。");
			return false;
	}
	return true;
}








//------------------------------------------------------------------
// 関数名    : メールアドレスチェック関数
//
// 返り値    : true/false
//             
//
// 引　数    : 文字列
//            
//
// 機能説明  : 
//             
//
// 備考      : 
//
// 履歴      : 02.08.20  溝口 祥  新規作成
//------------------------------------------------------------------
//function is_mailaddress(str){
//
//
//    if(str.match(/[!#-9A-~]+@[a-z0-9]+\.+[a-z0-9]+/i)){
//		return true;
//   }else{
//		return false;
//    }
//}

/*
function is_mailaddress(emailStr) {

	var emailPat   = /^(.+)@(.+)$/;
	var userPat    = /^[a-zA-Z0-9\._-]+$/;
	var domainPat  = /^[a-zA-Z0-9\._-]+$/;
	var invalid0   = /^(.+)\.(.+)\.(.+)$/;
	var invalid1   = /^\.(.+)/;
	var invalid2   = /(.+)\.$/;
	var invalid3   = /\.\./;
	var eMailArray = emailStr.match(emailPat);

	if (eMailArray == null) {
		return false;
	}

	var user      = eMailArray[1];
	var dom       = eMailArray[2];

	if (user.match(userPat) == null || user.match(invalid0) != null
	     || user.length < 3         || user.match(invalid1) != null
	                                || user.match(invalid2) != null
	                                || user.match(invalid3) != null) {
		return false;
	}

	if (dom.match(domainPat) == null || dom.indexOf('.') == -1
	     || dom.length < 4           || dom.match(invalid1) != null
    	                             || dom.match(invalid2) != null
        	                         || dom.match(invalid3) != null) {
		return false;
	}

	return true;
}

*/

function is_mailaddress(emailStr) {

	var emailPat   = /^(.+)@(.+)$/;
	var userPat    = /^[a-zA-Z0-9\._-]+$/;
	var domainPat  = /^[a-zA-Z0-9\._-]+$/;

	var eMailArray = emailStr.match(emailPat);

	if (eMailArray == null) {
		return false;
	}

	var user      = eMailArray[1];
	var dom       = eMailArray[2];

	if (user.match(userPat) == null ) {
		return false;
	}

	if (dom.match(domainPat) == null ) {
		return false;
	}

	return true;
}


//------------------------------------------------------------------
// 関数名    : 入力有無チェック関数
//
// 返り値    : true  入力なし
//             false 入力有り
//
// 引　数    : 文字列
//
// 機能説明  : 入力有無チェックを行う
//
// 備考      : 
//
// 履歴      : 00.10.12  藤沢真里  新規作成
//------------------------------------------------------------------
function is_empty(str){
    if(str == "")
    {
        return(true);
    }
    return(false);
}




//------------------------------------------------------------------
// 関数名    : 数値＋ハイフン(電話番号/郵便番号)チェック関数
//
// 返り値    : true  数値と-だけで構成されている
//             false それ以外の文字がある
//
// 引　数    : 文字列
//
// 機能説明  : 文字列が半角数字と　-　のみかどうか判別する
//
// 備考      : 
//
// 履歴      : 01.05.12  溝口祥  新規作成
//------------------------------------------------------------------
function is_numhyphen(str){
var h_n1

    // 存在するか
    if(str == ""){
        return(true);
    }

    h_n1 = new RegExp("[^0-9\-]","");
	
    // 半角数字と-以外の文字が存在するか
    if ( h_n1.test(str))
    {
		return(false);
    }
    return(true);
}




//------------------------------------------------------------------
// 関数名    : 数値チェック関数
//
// 返り値    : true  数値＆ピリオドのみ
//             false 数値＆ピリオド以外の文字がある
//
// 引　数    : 文字列
//
// 機能説明  : 文字列が半角数字とピリオド（１個）のみかどうか判別する
//
// 備考      : 
//
// 履歴      : 00.10.12  藤沢真里  新規作成
//------------------------------------------------------------------
function is_numeric(str){
var h_n1,h_n2;
	
	str = str + "";
	
    h_n1 = new RegExp("^[0-9]+\.[0-9]+$","");
    h_n2 = new RegExp("^[0-9]+$","");
	
    // 存在するか
    if(str == ""){
        return(false);
    }

    // 半角数字とピリオド以外の文字が存在するか
    if(!( h_n1.test(str)) )
    {
	    if(!( h_n2.test(str)) )
		{
	        return(false);
		}
    }
    return(true);
}

//------------------------------------------------------------------
// 関数名    : 数字チェック関数
//
// 返り値    : true  数字のみ
//             false 数字以外の文字がある
//
// 引　数    : 文字列
//
// 機能説明  : 文字列が半角数字のみかどうか判別する
//
// 備考      : 
//
// 履歴      : 00.10.12  藤沢真里  新規作成
//------------------------------------------------------------------
function is_numchar(str){
var h_n;
    h_n = new RegExp("^[0-9]+$","");
	
    // 存在するか
    if(str == ""){
        return(true);
    }

    // 半角数字以外の文字が存在するか
    if(!( h_n.test(str)) )
    {
        return(false);
    }
    return(true);
}


//------------------------------------------------------------------
// 関数名    : 数値桁数チェック関数
//
// 返り値    : true  桁数が指定範囲内
//             false 桁数オーバー
//
// 引　数    : 文字列，整数部分桁数，少数部分桁数
//
// 機能説明  : 文字列（数値）の整数、少数部分の桁数をチェックする
//
// 備考      : 
//
// 履歴      : 00.10.29  藤沢真里  新規作成
//------------------------------------------------------------------
function check_keta(Str,Kt1,Kt2){
	var ArrStr;
	var Len;
	
    // 存在するか
    if(Str == ""){
		return false;
    }

    // 数字,ピリオド以外の文字が入力されているか
	if(! is_numeric(Str)){ 
		return false;
	}

    // 整数部分と少数部分の桁数をチェックする
	ArrStr = Str.split(".");
	Len = ArrStr.length;

	if (ArrStr[0].length > Kt1){
		return false;
	}
	
	// 少数部分有る場合	
    if(Len >= 2){
		if (ArrStr[1].length > Kt2){
			return false;
		}
    }
    return true;
}


//------------------------------------------------------------------
// 関数名    : 半角英数字記号チェック関数
//
// 返り値    : true  半角英数字記号のみ
//             false 半角英数字記号以外あり
//
// 引　数    : 文字列
//
// 機能説明  : 文字列に半角数字記号以外の文字が存在するかチェックを行う
//
// 備考      : 
//
// 履歴      : 00.10.12  藤沢真里  新規作成 
//------------------------------------------------------------------
function is_hankaku(str){
var h_n;
    h_n   = new RegExp("^[\!-\~ ]+$","");
//    h_n   = new RegExp("^[0-9A-Za-z|\(|\)]+$","");

    // 存在しない場合
    if(str == ""){
        return(false);
    }

    // 半角英数字記号以外の文字が存在するか
    if(! h_n.test(str))
    {
        return(false);
    }
    return(true);
}


//------------------------------------------------------------------
// 関数名    : 全角チェック処理
//
// 返り値    : true  全角のみ
//             false 全角以外の文字がある     
//
// 引　数    : 文字列
//
// 機能説明  : 文字列が全角のみかどうかを判定する  
//
// 備考      : 
//
// 履歴      : 00.10.12  藤沢真里  新規作成
//------------------------------------------------------------------
function is_zenkaku(str){
        var i ;

    for (i=0; i<str.length; i++)
    {
        moji_code = str.charCodeAt(i);
        if(moji_code < 1000){
            return false ;
        }

    }
    return true;
}

//------------------------------------------------------------------
// 関数名    : 前ゼロの数字から前ゼロを除く
//
// 返り値    : 数字
//
// 引　数    : 半角数字
//
// 機能説明  : 前ゼロを除く。すべて０の場合は０を返す
//
// 備考      : 数値として認識できないものは０を返す
//             全角は無効（０を返す）
//
// 履歴      : 00.10.12  藤沢真里  新規作成
//------------------------------------------------------------------
function to_num(str){
        var i ;
        var moji = "";

	if (!is_numchar(str)) {
		return 0;
	}

    for (i=0; i<str.length; i++)
    {
        if(str.charAt(i) != "0"){
        	moji += str.substring(i, str.length)
        	break;
        }
    }
    
    if (is_empty(moji)) {
    	return 0;
    }else{
    	return moji;
    }
}

//------------------------------------------------------------------
// 関数名    : 前ゼロ付加関数
//
// 返り値    : 数字文字列
//
// 引　数    : 数値
//             桁数(バイト)
//
// 機能説明  : 文字列全体が桁数を満たすように前方に0を付加する
//
// 備考      : 第１引数の文字数が、第２引数の桁数を超えている場合は未処理
//             基本的に半角数字の正数以外は考慮していない
//------------------------------------------------------------------
function add_zero(str, fig) {

	var i;
	var tmp;
	tmp = "";
	
	if (str.length >= fig) {
		return(str);
	}		
	for (i = 0; i < (fig - str.length); i++) {
		tmp = tmp + "" + "0"
	}
	return(tmp + str);

}

//------------------------------------------------------------------
// 関数名    : 日付チェック関数
//
// 返り値    : true  暦日日付
//             false 暦日日付以外
//
// 引　数    : 文字列（yyyymmdd,yyyy/mm/dd)
//             チェック区分
//				（0:"yyyymmdd"型の日付チェック）
//				（1:"yyyy/mm/dd"型の日付チェック）
//
// 機能説明  : 文字列が暦日日付かどうか判別する
//
// 備考      : 
//
// 履歴      : 00.10.16  藤沢真里  新規作成
//------------------------------------------------------------------
function is_date(str,kbn){
    var ymd_re0 ;
    var ymd_re1 ;
	var rc  ;
	
    ymd_re0 = new RegExp("^([0-9]{4})([0-9]{2})([0-9]{2})$","");
    ymd_re1 = new RegExp("^([0-9]{4})\\/([0-9]{1,2})\\/([0-9]{1,2})$","");


    // 空文字の場合
    if(str == ""){
    	return false;
    }

    // 書式エラー
	switch (kbn) {
		case 0 :
			//（yyyymmdd型）
		    if(! ymd_re0.test(str)){
		    	return false;
		    }
			break;
		case 1 :
			//（yyyy/mm/dd型）
		    if(! ymd_re1.test(str)){

		    	return false;
		    }
			break;
	}

    if (check_ymd(RegExp.$1,RegExp.$2,RegExp.$3) != 0) {
		return false;
	}
	return true;
	
}


//------------------------------------------------------------------
// 関数名    : 年月日チェック処理
//
// 返り値    : 0:正常                                         
//           : 1:年月日が全て未入力                           
//           : 2:年月日が一部未入力                           
//           : 3:年月日が半角数字でない                       
//           : 4:年月日が存在しない年月日である（暦日チェック）
//           : 5:年が４桁未満
//           : 6:日付の範囲がSQLサーバーの日付型の範囲を超えそう
//
// 引  数    : 年
//           : 月
//           : 日
//
// 機能説明  : 年月日のデータ整合性をチェックする
//
// 備考      : 
//
// 履歴      : 00.10.16  藤沢真里  新規作成
//------------------------------------------------------------------
function check_ymd(year,mon,day){
    var bext= 1;
    var LastDay;


    // 年月日が全て入力されていない
    if( is_empty(year) && is_empty(mon) && is_empty(day) ){
        return 1;
    }

    // 年月日の一部分が入力されている
    if( is_empty(year) || is_empty(mon) || is_empty(day) ){
        return 2;
    }

	// 半角数字以外の文字が入力されている
    if( ! is_numchar(year) || ! is_numchar(mon) || ! is_numchar(day) ){
        return 3;
    }

	// 暦日チェック
	// （指定月の最終日を取得）
    LastDay = DaysOfMonth( to_num( year ), to_num( mon ) );
    
    // 整合性チェック
    if (!( 1 <= to_num( mon ) && to_num( mon ) <= 12 )){
    	return 4;
    }
    
    if (!( 1 <= to_num( day ) && to_num( day ) <= LastDay)) {
    	return 4;
    }
	
	if (year.length < 4) {
		return 5;
	}
	
	if (!((year >= '1754') && (year <= '9998' ))) {
		return 6;
	}

    return 0;
    
//    if (( 1 <= to_num( mon ) && to_num( mon ) <= 12 ) && ( 1 <= to_num( day ) && to_num( day ) <= LastDay )){
//        return 0;
//    }else{
//    	return 4;
//    }

}



//------------------------------------------------------------------
// 関数名    : 時分チェック処理
//
// 返り値    : 0:正常                                         
//           : 1:時分が全て未入力                           
//           : 2:時分が一部未入力                           
//           : 3:時分が半角数字でない                       
//           : 4:時分が存在しない時分である
//
// 引  数    : 時
//           : 分
//
// 機能説明  : 時分のデータ整合性をチェックする
//
// 備考      : 
//
// 履歴      : 00.04.30  青木  新規作成
//------------------------------------------------------------------
function check_hhnn(hh,nn){
    var bext= 1;

    // 時分が全て入力されていない
    if( is_empty(hh) && is_empty(nn)){
        return 1;
    }

    // 時分の一部分が入力されている
    if( is_empty(hh) || is_empty(nn)){
        return 2;
    }

	// 半角数字以外の文字が入力されている
    if( ! is_numchar(hh) || ! is_numchar(nn) ){
        return 3;
    }


    // 整合性チェック
    if (!( 0 <= to_num( hh ) && to_num( hh ) <= 23 )){
    	return 4;
    }
    
    if (!( 0 <= to_num( nn ) && to_num( nn ) <= 59)) {
    	return 4;
    }
	

    return 0;
    
//    if (( 1 <= to_num( mon ) && to_num( mon ) <= 12 ) && ( 1 <= to_num( day ) && to_num( day ) <= LastDay )){
//        return 0;
//    }else{
//    	return 4;
//    }

}



//------------------------------------------------------------------
// 関数名    : 月の日数算出処理
//
// 返り値    : 月の日数
//
// 引  数    : 年（yyyy）
//           : 月
//
// 機能説明  : 西暦年号と月からその月の日数を算出する
//
// 備考      : 
//
// 履歴      : 00.10.16  藤沢真里  新規作成
//------------------------------------------------------------------
function DaysOfMonth( Year, Month ){
    var Days = new Array( 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 );

    // 月の日数算出
    if( Month == 2 ){
        // ２月の場合、閏年計算
        if( Year % 4 == 0 && ( Year % 100 != 0 || Year % 400 == 0 ) ){
            return Days[1] + 1;
        }
    }
    return Days[Month - 1];
}


//------------------------------------------------------------------
// 関数名    : 半角カナチェック関数
//
// 返り値    : true  半角カナあり
//             false 半角カナなし
//
// 引　数    : 文字列
//					 ↓
// 機能説明  : 半角カナ文字が文字列に存在するかチェックする  
//
// 備考      : 
//
// 履歴      : 00.10.12  藤沢真里  新規作成
//------------------------------------------------------------------
function in_h_kana(str) {
if(navigator.appName == "Netscape" && parseFloat(navigator.appVersion) <= "4.04") {
var s = "" + str
    var kf = 0
    for(var i=0;i<s.length;i++) {
        var c = s.charAt(i)
        var s1 = escape(c)
        if(!kf && c >= "｡" && c <= "ﾟ")
            return  true
        if(!kf && s1.charAt(0) == "%" && s1.length >= 2) {
            var cb = to_num("0x"+s1.charAt(1))
            if((cb >= 8 && cb <=9) || (cb >=14 && cb <= 15))
                kf = 1
            else    kf = 0
                } else  kf = 0
            }
        } else {
        var s = "" + str
        for(var i=0;i<s.length;i++) {
            var c = s.charAt(i)
            if(c >= "｡" && c <= "ﾟ")
                return  true
        }
    }
    return  false;
}


//------------------------------------------------------------------
// 関数名    : 全角カナチェック関数
//
// 返り値    : true  全角カナのみ
//             false 全角カナ以外あり
//
// 引　数    : 文字列
//					 ↓
// 機能説明  : 全角カナのみで構成されているかをチェックする  
//
// 履歴      : 01.11.24  森山宗一郎  新規作成
//------------------------------------------------------------------
function is_zen_kana(str) {

	var iCount;
	var iCode;
	st_val=str;

	for (iCount=0 ; iCount<st_val.length ; iCount++){
    	iCode = st_val.charCodeAt(iCount);
      	if (12449<= iCode && iCode <= 12542){
			;
		} else {
			var check = 1;
		}
    }
	if (check) {
		return(false);
	} else {
		return(true);
	}

}


//------------------------------------------------------------------
// 関数名    : 文字列比較関数
//
// 返り値    : Str1 < Str2 の場合  1
//             Str1 = Str2 の場合  0
//             Str1 > Str2 の場合 -1
//
//
// 引　数    : Str1,Str2(但し、同じ形式であること)
//					 ↓
// 機能説明  : 年比較、年月比較、年月日比較、金額比較
//
// 備考      : 
//
// 履歴      : 00.10.18  藤沢真里  新規作成
//------------------------------------------------------------------
function comp_string( Str1, Str2 ){
    var TmpStr1;
    var TmpStr2;
    var Char;
    var i ;

    // Str1 から数値以外を取り除く
    TmpStr1 = "";
    for( i = 0; i < Str1.length; i++ ){
        Char = Str1.charAt( i );
        if( !isNaN( Char ) ){
            TmpStr1 = TmpStr1 + Char;
        }
    }

    // Str2 から数値以外を取り除く
    TmpStr2 = "";
    for( i = 0; i < Str2.length; i++ ){
        Char = Str2.charAt( i );
        if( !isNaN( Char ) ){
            TmpStr2 = TmpStr2 + Char;
        }
    }
	
    // Str1 と Str2 の比較
    if( to_num( TmpStr1 ) < to_num( TmpStr2 ) ){
        return 1;
    }else if( to_num( TmpStr1 ) == to_num( TmpStr2 ) ){
        return 0;
    }else if( to_num( TmpStr1 ) > to_num( TmpStr2 ) ){
        return -1;
    }
}



//------------------------------------------------------------------
//  関数名   : 入力バイト数制限チェック関数
//
//  戻り値   : true=ＯＫ, false=ＮＧ
//
//  引　数   : 制限数（最大）
//
//  機能説明 : 文字列のバイト数が制限内であるかチェック。
//
//  履歴     : 01.01.31  森山宗一郎  新規作成
//------------------------------------------------------------------
function check_max_length(str ,max){
    var i ;
	if (str == '') return true;
    //適用欄
    if(max < get_byte_len(str))
    {
        return false;
    }
    return true;
}

//------------------------------------------------------------------
// 関数名    : 文字列バイト数取得関数
//
// 返り値    : バイト数
//
// 引　数    : str - 対象文字列
//
// 機能説明  : 文字列のバイト数を返す
//
// 履歴      : 01.01.31  森山宗一郎  新規作成
//------------------------------------------------------------------
function get_euc_byte_len(str) {

    var i;
    var b;
    var nchar;

    for(i = b = 0; i < str.length; i++) {
        nchar = str.charAt(i);
        if(nchar >= ' ' && nchar <= '~') {
            b++;
        } else {
            b += 2;
        }
    }
    return(b);

}

//------------------------------------------------------------------
// 関数名    : 文字列バイト数取得関数
//
// 返り値    : バイト数
//
// 引　数    : str - 対象文字列
//
// 機能説明  : 文字列のバイト数を返す
//
// 履歴      : 01.01.31  森山宗一郎  新規作成
//------------------------------------------------------------------
function get_byte_len(str) {

    var i;
    var b;
    var nchar;

    for(i = b = 0; i < str.length; i++) {
        nchar = str.charAt(i);
        if(nchar >= ' ' && nchar <= '~') {
            b++;
        } else if(nchar >= '｡' && nchar <= 'ﾟ') {
            b++;
        } else {
            b += 2;
        }
    }
    return(b);

}

//------------------------------------------------------------------
// 関数名    : 値セット関数
//
// 返り値    : なし
//
// 引　数    : テーブル名
//             コードフィールド名
//             コード値
//             データフィールド名
//             ターゲットテキストオブジェクト
//
// 機能説明  : 指定されたテーブルの指定されたコードフィールド
//             を指定のコード値で検索し、指定のデータフィールドの
//             値を取得して、指定のテキストにセットする。
//             
//
//
//
// 備考      : 
//
// 履歴      : 01.04.28  溝口　祥  新規作成
//------------------------------------------------------------------
function SetValue(sTblNm, sCdNm,sCdVal ,sFldNm,oTxt){
	var sWhere
	if (sCdVal == "" ) {
		oTxt.value="";
	} else {
		sWhere = sCdNm + " = '" + sCdVal +"'";
		window.open("MgSetValue.Asp?TblNm=" + sTblNm + "&Where=" + sWhere + "&FldNm1=" + sFldNm + "&TxtNm1=" + oTxt.name ,'_blank',
			'toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,width=1,height=1,left=5000,top=5000');
	}
}

//------------------------------------------------------------------
// 関数名    : 値セット関数２
//
// 返り値    : なし
//
// 引　数    : テーブル名
//             コードフィールド名
//             コード値
//             データフィールド名１
//             ターゲットテキストオブジェクト１
//             データフィールド名２
//             ターゲットテキストオブジェクト２
//             
//
// 機能説明  : 指定されたテーブルの指定されたコードフィールド
//             を指定のコード値で検索し、指定のデータフィールドの
//             値を取得して、指定のテキストにセットする。
//             データフィールドを２つ設定できる
//
// 備考      : 
//
// 履歴      : 01.04.28  溝口　祥  新規作成
//------------------------------------------------------------------
function SetValue2(sTblNm, sCdNm, sCdVal , sFldNm1, oTxt1, sFldNm2, oTxt2){
	var sWhere
	if (sCdVal == "" ) {
		oTxt1.value = "";
		oTxt2.value = "";
	} else {
		sWhere = sCdNm + " = '" + sCdVal +"'";
		window.open("MgSetValue.Asp?TblNm=" + sTblNm + "&Where=" + sWhere + "&FldNm1=" + sFldNm1 + "&TxtNm1=" + oTxt1.name + "&FldNm2=" + sFldNm2 + "&TxtNm2=" + oTxt2.name,'_blank',
		'toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,width=1,height=1,left=5000,top=5000');
	}
}

//------------------------------------------------------------------
// 関数名    : ポップアップウィンドウ表示
//
// 返り値    : windowオブジェクト
//
// 引　数    : ＵＲＬ
//             ウィンドウの高さ
//             ウィンドウの幅
//             
//
// 機能説明  : 指定されたテーブルの指定されたコードフィールド
//             を指定のコード値で検索し、指定のデータフィールドの
//             値を取得して、指定のテキストにセットする。
//             データフィールドを２つ設定できる
//
// 備考      : 
//
// 履歴      : 01.04.28  溝口　祥  新規作成
//             01.21.11  森山　宗一郎  返り値にwindowオブジェクトを返すよう修正
//------------------------------------------------------------------
function ShowPopUp(sUrl,iWidth,iHeight,sTarget){
var w;
		w= window.open(sUrl,sTarget,
		'toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,width=' + iWidth + ',height=' + iHeight 
		+ ',left=10,top=10');
		w.resizeTo(iWidth,iHeight);
		w.focus();
		return(w);
}

//------------------------------------------------------------------
// 関数名    : ELEMENTオブジェクトの取得
//
// 返り値    : ELEMENTオブジェクト
//
// 引　数    : FORMオブジェクト
//             値
//             以降、インデックス+フィールド名
//
// 履歴      : 01.11.08  森山　宗一郎  新規作成
//------------------------------------------------------------------
function getobj(){

	var elem = "default__1__";
	var form = getobj.arguments[0];
	var i;
	
	//引数の数が奇数の場合はエラー
	if (getobj.arguments.length % 2 == 1){
		return(false);
	}
	
	//引数が２個の場合
	if (getobj.arguments.length == 2) {
		elem = elem + getobj.arguments[1];
		return(form.elements[elem]);
	
	//それ以上の場合
	} else {
		for (i = 1; i < getobj.arguments.length - 1; i = i + 2){
			if (elem != "default__1__") {
				elem = elem + "__";
			}
			elem = elem + getobj.arguments[i] + "__" + getobj.arguments[i + 1];
		}
		elem = elem + "__" + getobj.arguments[getobj.arguments.length - 1];
		return(form.elements[elem]);
	}
}

//------------------------------------------------------------------
// 関数名    : 数値の範囲内チェック
//
// 返り値    : true=範囲内; false=範囲外(または数値以外の引数)
//
// 引　数    : チェック対象の値（数値）
//           : 範囲のMIN値
//           : 範囲のMAX値
//
// 備考      : minとmaxの値は範囲内とする
//             数値かどうかのチェックは外に任せる。
//             数値以外の値が引数に渡されたらfalseを返す。
//
// 履歴      : 01.11.08  森山　宗一郎  新規作成
//------------------------------------------------------------------
function is_within(data, min, max) {

	if (!is_numeric(data)) {return(false)}
	if (!is_numeric(min))  {return(false)}
	if (!is_numeric(max))  {return(false)}
	
	if (data < min) {return(false)}
	if (data > max) {return(false)}
	return(true);

}

//------------------------------------------------------------------
// 関数名    : 数値の範囲内チェック（両端の認識指定ありバージョン）
//
// 返り値    : true=範囲内; false=範囲外(または数値以外の引数)
//
// 引　数    : チェック対象の値（数値）
//           : 範囲のMIN値
//           : 範囲のMAX値
//           : MINとMAXを範囲内として判断するか true=する; false=しない
//
// 備考      : minとmaxの値は範囲内とする
//             数値かどうかのチェックは外に任せる。
//             数値以外の値が引数に渡されたらfalseを返す。
//
// 履歴      : 01.11.08  森山　宗一郎  新規作成
//------------------------------------------------------------------
function is_within_ex(data, min, max, contain) {

	if (!is_numeric(data)) {return(false)}
	if (!is_numeric(min)) {return(false)}
	if (!is_numeric(max)) {return(false)}

	if (contain) {
		if (data < min) {return(false)}
		if (data > max) {return(false)}
	} else {
		if (data <= min) {return(false)}
		if (data >= max) {return(false)}
	}
	return(true);

}

//---------------------------------------------------------------------
// 機能      : プルダウンリストアイテム選択
//
// 返り値    : true=選択対象あり、false=選択対象なし
//
// 引き数    : プルダウンリストオブジェクト, value値
//
// 機能説明  : プルダウンリストから指定されたvalue値を持つアイテムを選択する
//---------------------------------------------------------------------
function SetSelValue(lst, val) {
	var i;
	for (i = 0; i < lst.options.length; i++) {
		if (lst.options[i].value == val) {
			lst.options[i].selected = true;
			return(true);
		}
	}
	return(false);
}

//---------------------------------------------------------------------
// 機能      : プルダウンリスト
//
// 返り値    : true=選択対象あり、false=選択対象なし
//
// 引き数    : プルダウンリストオブジェクト, value値
//
// 機能説明  : プルダウンリストから指定されたvalue値を取得
//---------------------------------------------------------------------
function GetSelValue(sel) {
	if (sel.selectedIndex >= 0) {
		return sel.options[sel.selectedIndex].value;
	} else {
		return "";
	}
}



//---------------------------------------------------------------------
// 機能      : ラジオボタン選択値取得
//
// 返り値    : 選択されている値
//
// 引き数    : 
//
// 機能説明  : ラジオボタンの選択されているボタンの値を取得
//---------------------------------------------------------------------
function GetRadioValue(radio) {
	var i;
	var ret = '';
	if (radio.length) {
		for (i = 0; i <= radio.length -1 ; i++) {
			if (radio[i].checked) {
				ret = radio[i].value;
			}
		}
	} else {
		if (radio.checked) {
			ret = radio[i].value;
		}
	}
	return ret;
}



function HtmlSpecialchar(rstr) {
	var str;
	str = rstr;
	str = str.replace("&","&amp");
	str = str.replace("<","&lt");
	str = str.replace(">","&gt");
	str = str.replace(" ","&nbsp");
	return str;
}


//---------------------------------------------------------------------
// 機能      : rtrim 右端のスペースを取り除く
//
// 返り値    : 文字列
//
// 引き数    : 文字列
//
// 機能説明  : 
//---------------------------------------------------------------------
function rtrim(str) {
	while (str.substr(str.length -1 , 1) == ' ') {
		str = str.substr(0, str.length -1);
	}
	return str;
}	
	

//------------------------------------------------------------------
// 関数名    : 文字列分割処理
//
// 返り値    : 指定位置の文字列
//
// 引　数    : 連結文字列
//             指定番号（-1:末尾,1以上:指定位置）
//             デリミタ（"\")
//
// 機能説明  : デミリタで連結された文字列から指定番号の文字列を取り出す
//
// 備考      : 指定位置が分割後の文字列数を超えている場合は末尾を取り出す
//
// 履歴      : 00.10.27  藤沢真里  新規作成
//------------------------------------------------------------------
/*function get_str(Str, Count){

	var TmpStr;
	var Delimit = "\\";
	var ArrStr;
 	var Len = 0;
	
	
	ArrStr = Str.split(Delimit);
	
	Len = ArrStr.length;
	if (Len == 0) {
		return(Str);
	}

 	// 末尾を抜き出す
 	if (Count == -1 ) || (Count >= Len) {
		TmpStr = ArrStr[Len - 1];
	}else{
	    TmpStr = ArrStr[Count - 1];
    }

    return(TmpStr);
}
*/


function check_date(oyear,omon,oday){
	var year = GetSelValue(oyear);
	var mon = GetSelValue(omon);
	var day = GetSelValue(oday);
	var ret = check_ymd(year,mon,day);
	if (ret == 4) {
		alert('日付' + "が不正です");
		oday.focus();
		return false;
	}
	return true;
}

function check_date2(fyear,fmon,fday,tyear,tmon,tday){
	var f_year = GetSelValue(fyear);
	var f_mon = add_zero(GetSelValue(fmon),2);
	var f_day = add_zero(GetSelValue(fday),2);
	var t_year = GetSelValue(tyear);
	var t_mon = add_zero(GetSelValue(tmon),2);
	var t_day = add_zero(GetSelValue(tday),2);
	
	var fdate = f_year + '' + f_mon + '' + f_day;
	var tdate = t_year + '' + t_mon + '' + t_day;
	
	if (fdate - tdate > 0) {
		alert("日付の大小が不正です");
		fyear.focus();
		return false;
	}
	return true;
}
function check_date3(date_from,date_to){

	var a_from = date_from.split('/');
	var a_to = date_to.split('/');
	
	var f_year = a_from[0];
	if (f_year.length == 2) f_year = '20' + f_year;
	var f_mon  = add_zero(a_from[1],2);
	var f_day  = add_zero(a_from[2],2);
	var t_year = a_to[0];
	if (t_year.length == 2) t_year = '20' + t_year;
	var t_mon  = add_zero(a_to[1],2);
	var t_day  = add_zero(a_to[2],2);
	
	var fdate = f_year + f_mon  + f_day;
	var tdate = t_year + t_mon  + t_day;
	
	if (fdate - tdate > 0) {
		return false;
	}
	return true;
}

function is_zip(str){
var h_n1

    // 存在するか
    if(str == ""){
        return(true);
    }

    h_n1 = new RegExp("[0-9]{3}-[0-9]{4}","");
	
    if ( h_n1.test(str))
    {
		return(true);
    }
    return(false);
}

function emailCheck (emailStr) {

var emailPat=/^(.+)@(.+)$/
var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]"
var validChars="\[^\\s" + specialChars + "\]"
var firstChars=validChars
var quotedUser="(\"[^\"]*\")"
var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/
var atom="(" + firstChars + validChars + "*" + ")"
var word="(" + atom + "|" + quotedUser + ")"

var userPat=new RegExp("^" + word + "(\\." + word + ")*$")
var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$")

var matchArray=emailStr.match(emailPat)
if (matchArray==null) {
	return false
}
var user=matchArray[1]
var domain=matchArray[2]


if (user.match(userPat)==null) {    
	return false
}

var IPArray=domain.match(ipDomainPat)
if (IPArray!=null) {
	  for (var i=1;i<=4;i++) {
		if (IPArray[i]>255) {
		return false
		}
	}
	return true
}


var domainArray=domain.match(domainPat)
if (domainArray==null) {
	return false
}

var atomPat=new RegExp(atom,"g")
var domArr=domain.match(atomPat)
var len=domArr.length
if (domArr[domArr.length-1].length<2 || 
	domArr[domArr.length-1].length>3) {
   return false
}

if (domArr[domArr.length-1].length==2 && len<3) {
   var errStr="This address ends in two characters, which is a country"
   errStr+=" code.  Country codes must be preceded by "
   errStr+="a hostname and category (like com, co, pub, pu, etc.)"
   return false
}

if (domArr[domArr.length-1].length==3 && len<2) {
   var errStr="This address is missing a hostname!"
   return false
}

return true;
}

function DIM(dimx,dimy)
{
	var i;
	var myArray = new Array(dimy);				//　まず１次元配列を作成
	for (i=0; i<dimy; i++) myArray[i] = new Array(dimx);	//　次に２次元配列を作成
	return myArray;						//　作成した配列オブジェクトを返す
}

//---------------------------------------------------------------------
// 機能      : プルダウンリストアイテム選択
//
// 返り値    : true=選択対象あり、false=選択対象なし
//
// 引き数    : プルダウンリストオブジェクト, value値
//
// 機能説明  : プルダウンリストからデフォルトアイテムを選択する
//---------------------------------------------------------------------
function SetSelDefaultValue(lst) {
	var i;
	for (i = 0; i < lst.options.length; i++) {
		if (lst.options[i].defaultSelected) {
			lst.options[i].selected = true;
			return(true);
		}
	}
	return(false);
}

// エラー表示
function error_msg(obj,msg){
	alert(msg);
	obj.focus();
}

function check_hhnn2(str){
    var time_re1 ;
	var rc  ;
	
    time_re1 = new RegExp("^([0-9]{1,2}):([0-9]{1,2})$","");


    // 空文字の場合
    if(str == ""){
    	return false;
    }

	//（yyyy/mm/dd型）
    if(! time_re1.test(str)){

    	return false;
    }
    if (check_hhnn(RegExp.$1,RegExp.$2) != 0) {
		return false;
	}
	return true;
}
    
function chk_time(obj){

	var isEmpty;
	var msg;
	
	switch (obj.type) {
		case "text":
		case "hidden" :
			if (obj.value  != '') {
				if (!check_hhnn2(obj.value)) {
					alert("時間が不正です。");
					obj.focus();
					return false;
				}
			}
			break;
		
		default :
			alert(obj.type + "はこの関数(chk_date)ではつかえません。");
			return false;
	}
	return true;
}

// 日付間の日数を取得する
function getdateDifference(date_from, date_to) {

	// 1970年1月1日午前00:00:00から日付までのミリ秒を求めます
	
	var from = Date.parse(date_from);
	var to = Date.parse(date_to);

	// 一日（60秒 × 60分 × 24時間）で割る
	return ((to - from)/ (60 * 60 * 24 * 1000)) + 1;

}
// 日付間の月数を取得する
function getmonDifference(date_from, date_to) {

	// スラッシュを省く
	var a_from = date_from.split('/');
	var a_to = date_to.split('/');
	var year2 = a_to[0];
	var year = a_from[0];
	var month2 = a_to[1];
	var month = a_from[1];
	
	var year_sa = year2 - year;
	var month_sa = month2 - month;
	
	if (month_sa >= 0) {
		var monnum =  year_sa * 12 + month_sa + 1;
	} else {
		var monnum =  (year_sa - 1) * 12 + 12 + month_sa + 1;
	}
	return monnum;
}
