//----------------------------------------------------------------------------
//
//	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;
}

// ### 2003/08/28 池福（追加）vvv
// ### 半角カナが使用されていないか ###
function Util_isUseHalfKanaChk ( CheckStr )
{
	var txt = "ｱｲｳｴｵｶｷｸｹｺｻｼｽｾｿﾀﾁﾂﾃﾄﾅﾆﾇﾈﾉﾊﾋﾌﾍﾎﾏﾐﾑﾒﾓﾔﾕﾖﾗﾘﾙﾚﾛﾜｦﾝｧｨｩｪｫｬｭｮ､｡｢｣ﾞﾟ";
    var sLen;
	var p;
    sLen = CheckStr.length;
    for (p=0; p<sLen; p++) {
		if (txt.indexOf(CheckStr.charAt(p),0) >= 0) {
            // ### 半角カナ ###
            return false;
        }
    }
    return true;
}

// ### 文字色指定用制御記号の除去 ### （Util.vbsにも同様の関数あり）
function Util_excludeColoredTag ( CheckStr, code1, code2, code3 )
{
	var str = "";
    var sLen = CheckStr.length;
	var p;
    for (p=0; p<sLen; p++) {
        if ( p < sLen-3) {
		     if ((CheckStr.substr(p,4) == code1) || 
		         (CheckStr.substr(p,4) == code2) || 
		         (CheckStr.substr(p,4) == code3)   ){ 
				p = p+3;
			 }else {
				str = str + CheckStr.charAt(p);
			 }
		}else {
			str = str + CheckStr.charAt(p);
        }
    }
    return str;
}

// ### 制御記号もどきが使用されていないか ###
function Util_isUseLikeColoredTagChk ( CheckStr )
{
	// ### 制御記号もどき（制御記号字を除いた後にこれらが含まれる）
	var txt = "＜＞<>";
    var sLen;
	var p;
    sLen = CheckStr.length;
    for (p=0; p<sLen; p++) {
		if (txt.indexOf(CheckStr.charAt(p),0) >= 0) {
            // ### 制御記号もどき ###
            return false;
        }
    }
    return true;
}

// ### 文字色指定用制御記号をHTMLタグに変換 ### 
function Util_ConvertColoredTag ( CheckStr, code1, code2, code3, tag1, tag2, tag3 )
{
	var str = "";
    var sLen = CheckStr.length;
	var p;
	var closeFlag = true;
	
    for (p=0; p<sLen; p++) {
        if ( p < sLen-3) {
		     if (CheckStr.substr(p,4) == code1) {
			 	str = str + "</FONT><FONT COLOR='" + tag1 + "'>";
			 	closeFlag = false;
				p = p+3;
			 }
			 else if (CheckStr.substr(p,4) == code2) {
			 	str = str + "</FONT><FONT COLOR='" + tag2 + "'>";
			 	closeFlag = false;
				p = p+3;
			 }
			 else if (CheckStr.substr(p,4) == code3) { 
			 	str = str + "</FONT><FONT COLOR='" + tag3 + "'>";
			 	closeFlag = false;
				p = p+3;
			 }else {
			 	if ( p == 0 ){
					str = str + "<FONT COLOR='" + tag1 + "'>";
					closeFlag = false;
				}
				str = str + CheckStr.charAt(p);
			 }
		}else {
			str = str + CheckStr.charAt(p);
        }
    }
	if ( closeFlag != true ){
		str = str + "</FONT>"
	}
    return str;
}

// ### 空白の除去 ### 
function Util_TrimStr ( CheckStr )
{
	var str = "";
    var sLen = CheckStr.length;
	var p;
    for (p=0; p<sLen; p++) {
        if ( p < sLen) {
		     if ((CheckStr.substr(p,1) == "　") || 
		         (CheckStr.substr(p,1) == " ") ){ 
			 }else {
				str = str + CheckStr.charAt(p);
			 }
		}else {
			str = str + CheckStr.charAt(p);
        }
    }
    return str;
}

// 2005/10/11	追加　サブウインドウのメッセージを参照する	From四日市 vvv
// ### ニュース用の時刻から余分なものを除く(空白にする) ###
function Util_isConvertNewsDateTime ( CheckStr )
{
	var newString;
	// 有効な文字
	var txt = "0123456789/:";
    var sLen,sLen2;
	var p,p2;
	var wchar;
	var wNoStr;
	var w1SpCheck;
	newString = "";
	wNoStr = 0;
	w1SpCheck = 0;
    sLen = CheckStr.length;
    sLen2 = txt.length;
    for (p=0; p<sLen; p++) {
		wchar = CheckStr.charAt(p);
		wNoStr = 0;
	    for (p2=0; p2<sLen2; p2++) {
			if (txt.charAt(p2) == wchar) {
				//	有効な文字
	            newString = newString + wchar;
				wNoStr = 1;
				break;
			}
		}
		if (wNoStr == 0){
			//	無効な文字
			//	日付と時間の間の空白を１つのみにする
			if (w1SpCheck == 0){
				//	空白を１ついれる
				newString = newString + " ";
				w1SpCheck = 1;
			}
		}
    }
    return newString;
}
// ### 制御記号の除去 ###
function Util_excludeTag ( CheckStr )
{
	var str = "";
    var sLen = CheckStr.length;
	var p, p2;

//alert(CheckStr); 

    for (p=0; p<sLen; p++) {

//alert(CheckStr.charAt(p)); 
    
		if ( CheckStr.charAt(p) == "<" ){ 
		       for (p2=p; p2<sLen; p2++) {
//alert(CheckStr.charAt(p2));
		   			if ( CheckStr.charAt(p2) == ">" ){
		   				p = p2;
		   				break;
		   			}
		       }
		}else {
		   str = str + CheckStr.charAt(p);
		}
    }
    return str;
}

// ### 有効日付かどうかのチェック ###
function Util_isValidDateByAdjustToDate ( CheckStr )
{
    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);


//alert(CheckStr);
//alert(sTgtDate);
//alert(sSysDate);

   // ### 日付の大小比較
    if ( sTgtDate.getTime() != sSysDate.getTime()) {
   // ### 日付の大小比較
      return false;
    } 

    return true;
}
// ### 有効日付かどうかのチェック ###
function Util_isValidDateByAdjustToTime ( CheckStr )
{
    var sLen;
    var code;
    var p;
    var sYYYY;
    var sMM;
    var sDD;
    var sHr;
    var sMin;
    var sSysDate;
    var sAftYearDate;
    var sTgtDate;
   
    // ### 入力値の時分を取得 
    sTgtDate = new Date();
    sHr = CheckStr.substr(0, 2);
    sMin = CheckStr.substr(3, 2);
	sTgtDate.setHours(sHr);
	sTgtDate.setMinutes(sMin);
	sTgtDate.setSeconds(0);			//	秒以下は比較しない
	sTgtDate.setMilliseconds(0);	//	秒以下は比較しない

    // ### 本日の時分を取得
    sSysDate = new Date();
	sSysDate.setSeconds(0);			//	秒以下は比較しない
	sSysDate.setMilliseconds(0);	//	秒以下は比較しない

//alert(CheckStr);
//alert(sTgtDate);
//alert(sSysDate);
	
   // ### 日付の大小比較
    if ( sTgtDate.getTime() < sSysDate.getTime()) {
   // ### 日付の大小比較
      return false;
    } 

    return true;
}

// 2005/10/11	追加　サブウインドウのメッセージを参照する	From四日市 ^^^

