//----------------------------------------------------------------------------
//
//	cmMessage.js
//
//	JR高速バスロケーションシステム
//
//	JavaScript 用ユーティリティ
//
//	バージョン：1.0.0
//
//	作成者	：林　智子
//
//	作成日	：2002/01/16
//
//	備考	：
//		
//＜変更履歴＞
//	林  2002/02/18 Util_isTime()の分最大チェック誤り修正
//	
//	Copyright(C) 2002 Kozo Keikaku Eng.
//
//----------------------------------------------------------------------------

function Util_MkUniqueStr()
{
    // ### 1970/1/1 00:00:00 からの経過ミリ秒を取得する ###
    // ### システム時間を取得する   ###
    var toDay	= new Date();
    var retStr	= "" + toDay.getTime();

    return retStr;
}

// ### 全て半角英大文字 or 半角数字 ###
function Util_isalnum ( CheckStr )
{
    var sLen;
    var code;
    var p;
    sLen = CheckStr.length;
    for (p=0; p<sLen; p++) {
        code = CheckStr.charCodeAt(p);
        if ((0x41 <= code) && (code <= 0x5a)) {
            // ### 半角英大文字     ###
        } else if ((0x61 <= code) && (code <= 0x7a)) {
            // ### 半角英小文字     ###
        } else if ((48 <= code) && (code <= 57)) {
            // ### 半角数字         ###
        } else {
            // ### それ以外         ###
            return false;
        }
    }
    return true;
}
// ### 全て半角英大文字 or 半角数字 ###
function Util_isMailAddress ( CheckStr )
{
    var sLen;
    var code;
    var p;
    sLen = CheckStr.length;
    for (p=0; p<sLen; p++) {
        code = CheckStr.charCodeAt(p);
        if ((0x41 <= code) && (code <= 0x5a)) {
            // ### 半角英大文字     ###
        } else if ((0x61 <= code) && (code <= 0x7a)) {
            // ### 半角英小文字     ###
        } else if ((0x30 <= code) && (code <= 0x39)) {
            // ### 半角数字         ###
        } else if (code == 0x40) {
            // ### @                ###
        } else if (code == 0x2e) {
            // ### .                ###
        } else if (code == 0x5f) {
            // ### _                ###
        } else if (code == 0x2d) {
            // ### -                ###
        } else {
            // ### それ以外         ###
            return false;
        }
    }
    return true;
}
// ### 全て半角数字 ###
function Util_isnum ( CheckStr )
{
	if(isNaN( CheckStr )){
		return false;
    }
    if (CheckStr == " ") {
		return false;
	}	
    return true;
}
// ### 全て半角整数 ###
function Util_isint ( CheckStr )
{
    var sLen;
    var code;
    var p;
    var count;
    sLen = CheckStr.length;
    for (p=0, count=0; p<sLen; p++) {
        code = CheckStr.charCodeAt(p);
        if (code == 0x20) {
            // ### 空白         ###
            count++;
        }
    }
    if (count == sLen) {
        // ###　全て空白         ###
        return false;
    }

	if(isNaN(CheckStr)){
		return false;
	}
	if(CheckStr.indexOf(".",0) < 0){
		return true;
	}
	return false;
}


// ### 全て半角英大文字 or 半角数字 ###
function Util_isTime ( CheckStr )
{
    var sLen;
    var code;
    var p;
    var sHH;
    var sMM;

    sLen = CheckStr.length;
	
    if (sLen != 5) {
       // ### 半角英大文字     ###
       return false;
    } 
    for (p=0; p<sLen; p++) {
        code = CheckStr.charCodeAt(p);
        if ((0x30 <= code) && (code <= 0x39)) {
            // ### 半角数字         ###
        } else if (code == 0x3a) {
            // ### :                ###
	    	if (p != 2) {
	    		return false;	
	    	}
       } else {
            // ### それ以外         ###
            return false;
        }
    } 
    sHH = CheckStr.substr(0, 2);
    if ((sHH < "00") || (sHH > "23")) {
       // ### 半角英大文字     ###
       return false;
    } 
    sMM = CheckStr.substr(3, 2);
    if ((sMM < "00") || (sMM > "59")) {
       // ### 半角英大文字     ###
       return false;
    } 
 
    return true;
}

// ### 日付として正しいかどうか ###
function Util_isdate2( CheckYear, CheckMonth, CheckDay )
{
	if ( CheckYear == "" ) {
		return false;
	}
	
    // # 月を判定
    switch ( parseInt(CheckMonth) ) {
        case 1:
            break;
        case 2:
            // # 29日の場合うるう年判定
            if ( parseInt(CheckDay) == 29 ) {
                if ( (parseInt(CheckYear)%400) != 0 ) {
                    // # 400で割り切れない
                    if ( (parseInt(CheckYear)%100) == 0 ) {
                        // # 100で割り切れる
                        return false;
                    } else {
                        if ( (parseInt(CheckYear)%4) != 0 ) {
                            // # 4で割り切れない
                            return false;
                        }
                    }
                }
            } else if ( parseInt(CheckDay) >= 30 ) {
                // # 30日以上
                return false;
            }
            break;
        case 3:
            break;
        case 4:
            if ( parseInt(CheckDay) == 31 ) {
                // # 31日の場合
                return false;
            }
            break;
        case 5:
            break;
        case 6:
            if ( parseInt(CheckDay) == 31 ) {
                // # 31日の場合
                return false;
            }
            break;
        case 7:
            break;
        case 8:
            break;
        case 9:
            if ( parseInt(CheckDay) == 31 ) {
                // # 31日の場合
                return false;
            }
            break;
        case 10:
            break;
        case 11:
            if ( parseInt(CheckDay) == 31 ) {
                // # 31日の場合
                return false;
            }
            break;
        case 12:
            break;
    }
    return true;
}


// ### 日付フォーマットチェック ###
function Util_isDate ( CheckStr )
{
    var sLen;
    var code;
    var p;
    var sYYYY;
    var sMM;
    var sDD;

    sLen = CheckStr.length;
	
    if (sLen != 10) {
       // ### YYYY/MM/DDの文字数でない  ###
       return false;
    } 
    for (p=0; p<sLen; p++) {
        code = CheckStr.charCodeAt(p);
        if ((0x30 <= code) && (code <= 0x39)) {
            // ### 半角数字         ###
        } else if (code == 0x2f) {
            // ### /の位置が不正
	    	if ((p != 4) && (p != 7)) {
            	return false;
	    	}
       } else {
            // ### それ以外         ###
            return false;
        }
    } 

    sYYYY = CheckStr.substr(0, 4);
   if ( parseInt(sYYYY) == NaN ) {
        // ### 年    ###
       return false;
    } 
    sMM = CheckStr.substr(5, 2);
    if ((sMM < "01") || (sMM > "12")) {
       // ### 月     ###
       return false;
    } 
    sDD = CheckStr.substr(8, 2);
    if ((sDD < "01") || (sDD > "31")) {
       // ### 日    ###
       return false;
    } 
     if (Util_isdate2( sYYYY, sMM, sDD ) == false ) {
       // ### 日    ###
       return false;
    }  
     if ((sMM < "01") || (sMM > "12")) {
       // ### 月     ###
       return false;
    } 

    return true;
}


// ### 日付フォーマットチェック ###
function Util_isMonth ( CheckStr )
{
    var sLen;
    var code;
    var p;
    var sYYYY;
    var sMM;

    sLen = CheckStr.length;
	
    if (sLen != 7) {
       // ### YYYY/MMの文字数でない  ###
       return false;
    }
    for (p=0; p<sLen; p++) {
        code = CheckStr.charCodeAt(p);
        if ((0x30 <= code) && (code <= 0x39)) {
            // ### 半角数字         ###
        } else if (code == 0x2f) {
            // ### /の位置が不正
	    	if ((p != 4)) {
            	return false;
	    	}
       } else {
            // ### それ以外         ###
            return false;
        }
    } 

    sYYYY = CheckStr.substr(0, 4);
   if ( parseInt(sYYYY) == NaN ) {
        // ### 年    ###
       return false;
    } 
    sMM = CheckStr.substr(5, 2);
    if ((sMM < "01") || (sMM > "12")) {
       // ### 月     ###
       return false;
    } 

    return true;
}


// ### 有効日付かどうかのチェック ###
function Util_isValidDate ( CheckStr, Year )
{
    var sLen;
    var code;
    var p;
    var sYYYY;
    var sMM;
    var sDD;
    var sSysDate;
    var sAftYearDate;
    var sTgtDate;
   
    // ### 本日より１年後の年月日指定 
    sYYYY = CheckStr.substr(0, 4);
    sMM = CheckStr.substr(5, 2);
    sDD = CheckStr.substr(8, 2);
    sTgtDate = new Date(sYYYY, sMM-1, sDD);
	sTgtDate.setHours(0);
	sTgtDate.setMinutes(0);
	sTgtDate.setSeconds(0);
	sTgtDate.setMilliseconds(0);

    // ### 本日の00:00の日時を取得
	sSysDate = new Date();
	sSysDate.setHours(0);
	sSysDate.setMinutes(0);
	sSysDate.setSeconds(0);
	sSysDate.setMilliseconds(0);
	
    // ### １年後の00:00の日時を取得
	sAftYearDate = new Date();
	sAftYearDate.setYear(sSysDate.getYear()+Year);
	sAftYearDate.setHours(0);
	sAftYearDate.setMinutes(0);
	sAftYearDate.setSeconds(0);
	sAftYearDate.setMilliseconds(0);

//  var lTgtDate, lSysDate, lAftYearDate;
//	lTgtDate = sTgtDate.getTime()/(24*60*60*1000)
//	lSysDate = sSysDate.getTime()/(24*60*60*1000)
//	lAftYearDate = sAftYearDate.getTime()/(24*60*60*1000)
//alert(lTgtDate);
//alert(lSysDate);
//alert(lAftYearDate);

   // ### 日付の大小比較
    if ( sTgtDate.getTime() < sSysDate.getTime()) {
   // ### 日付の大小比較
      return false;
    } 
    if ( sTgtDate.getTime() > sAftYearDate.getTime()) {
   // ### 日付の大小比較
      return false;
    } 

    return true;
}


// ### 日付大小比較 ###
function Util_isDiffDate ( TargetStr, CheckStr )
{
    var sYYYY;
    var sMM;
    var sDD;
    var sAftYearDate;
    var sTgtDate;
    var sChkDate;
    
    // ### 本日より１年後の年月日指定 
    sYYYY = TargetStr.substr(0, 4);
    sMM = TargetStr.substr(5, 2);
    sDD = TargetStr.substr(8, 2);
    sTgtDate = new Date(sYYYY, sMM-1, sDD);

    // ### 本日より１年後の年月日指定 
    sYYYY = CheckStr.substr(0, 4);
    sMM = CheckStr.substr(5, 2);
    sDD = CheckStr.substr(8, 2);
    sChkDate = new Date(sYYYY, sMM-1, sDD);

//alert(sTgtDate.getTime());
//alert(sChkDate.getTime());

   // ### 日付の大小比較
   if ( sTgtDate.getTime() < sChkDate.getTime() ) {
        // ### 比較日より小さい    ###
       return -1;
    } 
   if ( sTgtDate.getTime() == sChkDate.getTime() ) {
        // ### 比較日と等しい   ###
       return 0;
    } 
   if ( sTgtDate.getTime() > sChkDate.getTime() ) {
        // ### 比較より大きい   ###
       return 1;
    } 
}


// ### 有効日付かどうかのチェック ###
function Util_isValidMonth ( CheckStr, Year )
{
    var sLen;
    var code;
    var p;
    var sYYYY;
    var sMM;
    var sDD;
    var sSysDate;
    var sAftDate;
    var sTgtDate;


    // ### 入力日の00:00の日時を取得 
    sYYYY = CheckStr.substr(0, 4);
    sMM = CheckStr.substr(5, 2);
    sDD = 1;
    sTgtDate = new Date(sYYYY, sMM-1, sDD);
	sTgtDate.setHours(0);
	sTgtDate.setMinutes(0);
	sTgtDate.setSeconds(0);
	sTgtDate.setMilliseconds(0);

    // ### 本日の00:00の日時を取得
	sSysDate = new Date();
	sSysDate.setDate(1);
	sSysDate.setHours(0);
	sSysDate.setMinutes(0);
	sSysDate.setSeconds(0);
	sSysDate.setMilliseconds(0);
	
    // ### １年後の00:00の日時を取得
	sAftYearDate = new Date();
	sAftYearDate.setYear(sSysDate.getYear()+Year);
	sAftYearDate.setDate(1);
	sAftYearDate.setHours(0);
	sAftYearDate.setMinutes(0);
	sAftYearDate.setSeconds(0);
	sAftYearDate.setMilliseconds(0);

   // ### 日付の大小比較
    if ( sTgtDate.getTime() < sSysDate.getTime()) {
   // ### 日付の大小比較
      return false;
    }
    if ( sTgtDate.getTime() > sAftYearDate.getTime()) {
   // ### 日付の大小比較
      return false;
    }

    return true;
}

// ### 全て半角英大文字 or 半角数字 ###
function Util_CodeChk ( CheckStr )
{
    var sLen;
    var code;
    var p;
    sLen = CheckStr.length;
    for (p=0; p<sLen; p++) {
        code = CheckStr.charCodeAt(p);
        if ((0x30 <= code) && (code <= 0x39)) {
            // ### 半角数字     ###
        } else if (code == 0x3b) {
            // ### ;                ###
        } else {
            // ### それ以外         ###
            return false;
        }
    }
    return true;
}

