// 03/10/21 t.saka var2.0 update
// 05/05/16 t.saka doCheckに引数（pbCheckFlag）追加。
// 05/06/09 t.saka クッキー関数追加
// 05/11/22 t.saka inputtype「z2」追加
// 05/11/25 t.saka doCheckRadio追加
// 05/11/28 t.saka フォーカス移動ロジック変更

var COLOR_NORMAL = "white";
var COLOR_ERROR  = "pink";
var COLOR_NORMAL_BGCOLOR  = "#E5E5E5";

/* サブルーチン  */
function doTest(){
  alert('asbe2script Load OK!');
}

/* ダイアログオープン処理  */
function doOpenDialog(sURL,sWidth,sHeigh){
    window.open(sURL,'Dialog',"scrollbars='yes',z-lock=yes,width=" + sWidth + ",height= " + sHeigh + "'");
}
function backSubmit(oForm,psUrl,psTarget)
{
    oForm.action = psUrl;
    oForm.target = psTarget;
    oForm.submit();
}

/* ＳＵＢＭＩＴ処理  */
function doSubmit(oForm,sAct){
  doSubmitTarget(oForm,sAct,'_self');
}
function doSubmitTarget(oForm,sAct,sTarget){
  oForm.action = sAct;
  oForm.target = sTarget;
  oForm.submit();
}
function doSubmitAdd(oForm,sAct){
  oForm.action = oForm.action + sAct;
  oForm.submit();
}
/*チェックボックスでの入力数チェック*/
function doCheckCheckBox(checkbox,poTitle,limit) {
    var count=0;
    // checkboxで渡された名前のチェックボックスが複数ないとエラーになります！
    for(i=0;i<checkbox.length;i++){
        if(checkbox[i].checked){
            count++;
        }//チェックされていたらカウンタ増加
    }
    if(count>limit){
        alert(poTitle + "のチェック数は"+limit+"未満にしてください"); //制限数チェック
        return false;
    } else {
        return true;
    }
}
/* データチェック処理（２項目ある場合）  */
function doCheckDouble(po,po2,poTitle,pbHissu,pbAll,pnMinlen,pnlen,psChecktype,pbCheckFlg){
    if (po.value.length < 1){
        if (po2.value.length < 1){
            return doCheck(po,poTitle,pbHissu,pbAll,pnMinlen,pnlen,psChecktype,pbCheckFlg);
        } else {
            return doCheck(po2,poTitle,pbHissu,pbAll,pnMinlen,pnlen,psChecktype,pbCheckFlg);
        }
    } else {
        return doCheck(po,poTitle,pbHissu,pbAll,pnMinlen,pnlen,psChecktype,pbCheckFlg);
    }
}
//add start t.saka 05/11/25
/*ラジオボタンでの必須入力チェック*/
function doCheckRadio(po,poTitle,pbHissu) {
    var count=0;
    // checkboxで渡された名前のチェックボックスが複数ないとエラーになります！
    if (pbHissu){
      for(i=0;i<po.length;i++){
        if(po[i].checked){
            count++;
        }//チェックされていたらカウンタ増加
      }
      if (count > 0){
	return true;
      } else {
        alert(poTitle + "を選択してください。");
	return false;
      }
    } else {
	return true;
    }
}
//add  end  t.saka 05/11/25
/*同一か否かのチェック*/
function doCheckEqual(po1,po2,poTitle1,poTitle2) {
	if(po1.value != po2.value){
		alert(poTitle1 + 'と' + poTitle2 + 'が一致しません。');
		return false;
	}
	return true;
}
/* データチェック処理  */
function doCheck(po,poTitle,pbHissu,pbAll,pnMinlen,pnlen,psChecktype,pbCheckFlg){
/*  pbHissu   true:必須入力
    pbAll　true:全桁入力
    pnMinlen  最小入力桁数
    pnlen  桁数
    psChecktype 入力データのタイプ
      N:数値
      N11:正の数値のみ
      N21:正の整数値のみ
      N31:正の少数型
      Z:0〜9のみ
      Z1:0〜9のみ及び-(ハイホン)のみ
      Z2:0〜9のみ及び-,+のみ
      A:A〜Zのみ
      X:半角英数字のみ
      X1:半角英数字及び@,-,\,#などのみ
      XK:半角英数字及び半角カナのみ
      M:メールアドレスチェック
      M1:カンマ区切りの複数メールアドレスのチェック
      K:全角カナ及び1〜9のみ
      K1:全角チェック
      K2:全角カナのみ
      Kb2:全角カナのみ(バイトチェック)
      S:文字列
      Sb:文字列(バイトチェック)
      Sb1:文字列(バイトチェック2)
      T:時間形式（HH:MM）00〜24:00まで入力可
      T1:時間形式（HH:MM）00〜23:59まで入力可
      D:日付形式 YYYYMMDD
      D1:日付形式 YYYY/MM/DD
      D2:日付形式 MM/DD
      D3:日付形式 YYYY/MM
      上記以外:規定文字
    pbCheckFlg チェックを行うか否か true:行う [true/false]
*/
count = 0;  //バイトチェック用文字数カウント
if((po.disabled == false || po.disabled== undefined)
   && pbCheckFlg){
  if (pbHissu == true){
    if (Trim(po.value).length < 1){
      //05/02/17 hls コンボボックスの場合は「〜を選択してください」メッセージに
      if(po.type == "select-one"){
	//コンボボックスの場合
        alert(poTitle + "を選択してください。");
      } else {
	//○○を入力してください。
        alert(poTitle + "を入力してください。");
      }
      po.focus();
      return false; 
    }
  }
  if (pnMinlen == 0){
  } else {
    if (po.value.length < pnMinlen){
            alert(poTitle + "は" + pnMinlen + "桁以上入力してください。");
          po.focus();
            return false;
        } else {
        }
  }
  if (pnlen == 0){
  } else {
    // データタイプが"S"のとき、バイトチェックのため分岐
    if(psChecktype.toLowerCase() != 'sb' &&
	psChecktype.toLowerCase() != 'sb1' &&
	psChecktype.toLowerCase() != 'kb2'){
        //N31型の時、小数点前までを桁数チェックの対象とする
	if (psChecktype.toLowerCase() == 'n31'){
	  Len = po.value.indexOf('.',0);
          if (Len == -1){
            Len = po.value.length;
          }
          if (Len > pnlen){
            alert(poTitle + "の入力可能桁数の上限を超えています。" + pnlen + "桁まで");
            po.focus();
            return false;
          } else {
           if (pbAll == true){
              if (Len != pnlen && Len !=0){
		   if(psChecktype.toLowerCase() == "n" ||
		      psChecktype.toLowerCase() == "n11" ||
		      psChecktype.toLowerCase() == "n21" ||
		      psChecktype.toLowerCase() == "n31"){
                     alert(poTitle + "に半角" + pnlen + "桁の数値を入力してください。");
		   } else {
                     alert(poTitle + "に" + pnlen + "桁入力してください。");
		   }
	           po.focus();
                   return false;
              }
           }      
          }
        } else {
          if (po.value.length > pnlen){
            alert(poTitle + "の入力可能桁数の上限を超えています。" + pnlen + "桁まで");
            po.focus();
            return false;
          } else {
           if (pbAll == true){
              if (po.value.length != pnlen && po.value.length !=0){
		   if(psChecktype.toLowerCase() == "n" ||
		      psChecktype.toLowerCase() == "n11" ||
		      psChecktype.toLowerCase() == "n21" ||
		      psChecktype.toLowerCase() == "n31"){
                     alert(poTitle + "に半角" + pnlen + "桁の数値を入力してください。");
		   } else {
                     alert(poTitle + "に" + pnlen + "桁入力してください。");
		   }
	           po.focus();
                   return false;
              }
           }      
          }
        }
    }
  }
  if (po.value.length < 1) { return true } ;
  switch(psChecktype.toLowerCase()){
  case 'n':
    if (isNaN(po.value) == true){
      alert(poTitle + "に半角数値以外の入力があります。");
      po.focus();
      return false;
    }
    for(i=0; i<po.value.length; i++){
      if (po.value.substr(i,1)=="　" || 
	  po.value.substr(i,1)==" "){
        alert(poTitle + "に半角数値以外の入力があります。");
        po.focus();
	return false;
      }
    }
    break;
  case 'n11':
    if (isNaN(po.value) == true){
      alert(poTitle + "に半角数値以外の入力があります。");
      po.focus();
      return false;
    }
    if (parseFloat(po.value) <= 0) {
      alert(poTitle + "がゼロあるいはマイナス値です。");
      po.focus();
      return false;
    }
    break;
  case 'n21':
    if (isNaN(po.value) == true){
      alert(poTitle + "に半角数値以外の入力があります。");
      po.focus();
      return false;
    }
    if (parseFloat(po.value) <= 0) {
      alert(poTitle + "がゼロあるいはマイナス値です。");
      po.focus();
      return false;
    }
    if (parseFloat(po.value) == parseInt(po.value)) {
    } else {
      alert(poTitle + "が整数でありません。");
      po.focus();
      return false;
    }
    break;
  case 'n31':
    if (isNaN(po.value) == true){
      alert(poTitle + "に半角数値以外の入力があります。");
      po.focus();
      return false;
    }
    if (parseFloat(po.value) < 0) {
      alert(poTitle + "がマイナス値です。");
      po.focus();
      return false;
    }
    break;
  case 'z':
    for(i=0; i<po.value.length; i++){
      if (po.value.substr(i,1)<"0" || po.value.substr(i,1)>"9"){
        alert(poTitle + "に０〜９以外の入力があります。");
        po.focus();
    return false;
      }
    }
    break;
  case 'z1':
    for(i=0; i<po.value.length; i++){
      if (po.value.substr(i,1)>="0" && po.value.substr(i,1)<="9") {
        continue;
      }
      if (po.value.substr(i,1).toUpperCase()=="-"){
        continue;
      }
      alert(poTitle + "に半角数字以外の入力があります。");
      po.focus();
      return false;
    }
    break;
  case 'z2':
    for(i=0; i<po.value.length; i++){
      if (po.value.substr(i,1)>="0" && po.value.substr(i,1)<="9") {
        continue;
      }
      if (po.value.substr(i,1).toUpperCase()=="-" || po.value.substr(i,1).toUpperCase()=="+"){
        continue;
      }
      alert(poTitle + "に半角数字及び、+,-以外の入力があります。");
      po.focus();
      return false;
    }
    break;
  case 'a':
    for(i=0; i<po.value.length; i++){
      if (po.value.substr(i,1).toUpperCase()<"A" || po.value.substr(i,1).toUpperCase()>"Z"){
        alert(poTitle + "にＡ〜Ｚ以外の入力があります。");
        po.focus();
    return false;
      }
    }
    break;
  case 'x':
    for(i=0; i<po.value.length; i++){
      if (po.value.substr(i,1)>="0" && po.value.substr(i,1)<="9") {
        continue;
      }
      if (po.value.substr(i,1).toUpperCase()>="A" && po.value.substr(i,1).toUpperCase()<="Z"){
        continue;
      }
      alert(poTitle + "に半角英数字以外の入力があります。");
      po.focus();
      return false;
    }
    break;
  case 'x1':
    for(i=0; i<po.value.length; i++){
      if (po.value.substr(i,1)>="0" && po.value.substr(i,1)<="9") {
        continue;
      }
      if (po.value.substr(i,1).toUpperCase()>="A" && po.value.substr(i,1).toUpperCase()<="Z"){
        continue;
      }
      if (po.value.substr(i,1).toUpperCase()=="#" || po.value.substr(i,1).toUpperCase()=="@" || po.value.substr(i,1).toUpperCase()=="-" || po.value.substr(i,1).toUpperCase()=="&#165" || po.value.substr(i,1).toUpperCase()=="/" || po.value.substr(i,1).toUpperCase()=="_" || po.value.substr(i,1).toUpperCase()=="."|| po.value.substr(i,1).toUpperCase()==":"|| po.value.substr(i,1).toUpperCase()=="~"){
        continue;
      }
      alert(poTitle + "に半角英数字以外の入力があります。");
      po.focus();
      return false;
    }
    break;
  case 'xk':
    for(i=0; i<po.value.length; i++){
      if (po.value.substr(i,1)>="0" && po.value.substr(i,1)<="9") {
        continue;
      }
      if (po.value.substr(i,1).toUpperCase()>="A" && po.value.substr(i,1).toUpperCase()<="Z"){
        continue;
      }
      if ((po.value.substr(i,1) >= "ｧ" && po.value.substr(i,1) <= "ﾝ")){
        continue;
      }
      if (po.value.substr(i,1).toUpperCase()=="@" || po.value.substr(i,1).toUpperCase()=="-" || po.value.substr(i,1).toUpperCase()=="&#165" || po.value.substr(i,1).toUpperCase()=="/" || po.value.substr(i,1).toUpperCase()=="_" || po.value.substr(i,1).toUpperCase()=="."|| po.value.substr(i,1).toUpperCase()==":"|| po.value.substr(i,1).toUpperCase()=="~"){
        continue;
      }
      alert(poTitle + "に半角英数字及び半角カナ以外の入力があります。");
      po.focus();
      return false;
    }
    break;
  case 'k':
   for(i=0; i<po.value.length; i++){
      if ((po.value.substr(i,1) >= "ァ" && po.value.substr(i,1) <= "ン") || po.value.substr(i,1).toUpperCase()=="ー" || (po.value.substr(i,1)>="０" && po.value.substr(i,1)<="９")){
        continue;
      }
      alert(poTitle + "に全角カタカナ及び全角数字以外の入力があります。");
      po.focus();
      return false;
    }
    break;
  case 'k1':
   for(i=0;i<po.value.length;i++){
      if(escape(po.value.charAt(i)).length>=4){
    if(po.value.substr(i,1) >= "ｱ" && po.value.substr(i,1) <= "ﾝ"){
    } else {
      continue;
    }
      }
      alert(poTitle + "に全角文字以外の入力があります。");
      po.focus();
      return false;
    }
    break;
  case 'k2':
   for(i=0; i<po.value.length; i++){
      if (po.value.substr(i,1) >= "ァ" && po.value.substr(i,1) <= "ン" ||
	  po.value.substr(i,1).toUpperCase()=="ー"){
        continue;
      }
//      alert(poTitle + "に全角カタカナ以外の入力があります。");
      alert(poTitle + "には全角カナ文字を入力してください。");
      po.focus();
      return false;
    }
    break;
  case 'd':
    if (doCheckDate(po,psChecktype,poTitle) == false){
        po.focus();
        return false;
    }
    break;
  case 'd1':
    if (doCheckDate(po,psChecktype,poTitle) == false){
	var type = po.type;
	if (type=='hidden'){
	} else {
		po.focus();
        }
	return false;
    }
    break;
  case 'd2':
    if (doCheckDate(po,psChecktype,poTitle) == false){
        po.focus();
        return false;
    }
    break;
  case 'd3':
    if (doCheckDate(po,psChecktype,poTitle) == false){
        po.focus();
        return false;
    }
    break;
  case 'm':
    if (MailaddressCheck(po.value,"yes") == false){
      po.focus();
      return false;
    }
    break;
  case 'm1':
    farstIndex = 0;
    lastIndex = po.value.indexOf(',');
    while(lastIndex != -1){
        sbsMail = po.value.substr(farstIndex,lastIndex - farstIndex);
        sbsMail = strRep(sbsMail,"\n","");
        sbsMail = strRep(sbsMail,"\r","");
        if (MailaddressCheck(sbsMail,"no") == false){
            alert("以下のメールアドレスが不正です。\nメールアドレス=" + sbsMail);
             po.focus();
            return false;

        }
        farstIndex = lastIndex + 1;
        lastIndex = po.value.indexOf(',',farstIndex);
    }
    sbsMail = po.value.substr(farstIndex,po.value.length - farstIndex);
    sbsMail = strRep(sbsMail,"\n","");
    sbsMail = strRep(sbsMail,"\r","");
    if (sbsMail == '') {
    } else {
        if (MailaddressCheck(sbsMail,"no") == false){
            alert("以下のメールアドレスが不正です。\nメールアドレス=" + sbsMail);
            po.focus();
            return false;

        }
    }
    break;
  case 't':
    if (TimeCheck(poTitle,po.value,"yes","00","24") == false){
      po.focus();
      return false;
    }
    break;
  case 't1':
    if (TimeCheck(poTitle,po.value,"yes","00","23") == false){
      po.focus();
      return false;
    }
    break;
  case 's':
    break;
  case 'kb2':
    // バイトチェック
   for(i=0; i<po.value.length; i++){
        n = escape(po.value.charAt(i));
        c = po.value.charCodeAt(i);
      if (!(po.value.substr(i,1) >= "ァ" && po.value.substr(i,1) <= "ン" ||
	  po.value.substr(i,1).toUpperCase()=="ー")){
      alert(poTitle + "には全角カナ文字を入力してください。");
      po.focus();
      return false;
      }
        if (n.length < 4)
        {
            count++;
        }
        else
        {
            count+=2;
        }
    }
    if( count > pnlen )
    {
//hls専用　メッセージ修正
//        alert(poTitle + "の入力可能バイト数の上限を超えています。" + pnlen + "バイトまで");
	var SLen = Math.floor(pnlen/2);
        alert(poTitle + "が項目長を超過しています。（全角 " + SLen + "文字）");
        po.focus();
        return false;
    }
    break;
  case 'sb':
    // バイトチェック
    for (i=0; i<po.value.length; i++)
    {
        n = escape(po.value.charAt(i));
        c = po.value.charCodeAt(i);
        if (c >= 0xff61 && c <= 0xff9f) {
            alert(poTitle + "に半角カタカナの入力があります。");
            po.focus();
            return false;
        }
        if (n.length < 4)
        {
            count++;
        }
        else
        {
            count+=2;
        }
    }
    if( count > pnlen )
    {
//hls専用　メッセージ修正
//        alert(poTitle + "の入力可能バイト数の上限を超えています。" + pnlen + "バイトまで");
	var SLen = Math.floor(pnlen/2);
        alert(poTitle + "が項目長を超過しています。（全角 " + SLen + "文字）");
        po.focus();
        return false;
    }
    break;
  case 'sb1':
    // バイトチェック
    for (i=0; i<po.value.length; i++)
    {
        n = escape(po.value.charAt(i));

        if (n == "%0D" || n == "%0A")
        {
            count+=2;
        }
        else if (n.length < 4)
        {
            count++;
        }
        else
        {
            count+=2;
        }
    }
    if( count > pnlen )
    {
        alert(poTitle + "の入力可能バイト数の上限を超えています。" + pnlen + "バイトまで\n※ 改行は4バイトとしています。");
        po.focus();
        return false;
    }
    break;
  default:
    for(i=0; i<po.value.length; i++){
    flg=0;
    for(j=0; j<psChecktype.length; j++){
        if (po.value.substr(i,1) != psChecktype.substr(j,1)){
            flg=flg+1;
        }
    }
    if (j==flg){
        alert(poTitle + "に規定の文字で入力してください。");
            po.focus();
        return(false);
    }
    }
    break;
  }
}
}
    //時間形式のチェック
    var chkTime_moji = "0123456789:";     //使用可能文字列の指定
    function TimeCheck(poTitle,obj,msg,hourfrom,houruntil) {//時間形式（99:99）のチェック
    for (i=0; i<obj.length; i++) {
        if (chkTime_moji.indexOf(obj.charAt(i)) == -1) {
        if (msg=="yes"){
            alert(poTitle + "に不正な文字が含まれています");
        }
            return false;
        }
    }
        intIndex = obj.indexOf(':', 0);
        if (intIndex == -1)
      {
        if (msg=="yes"){
           alert(poTitle + "に「:」がありません");
        }
        return false;
      }

      if (obj.length == 5){
      } else {
        if (msg=="yes"){
            alert(poTitle + "が「HH:MM」の形式ではありません");
        }
        return false;
      }
      if (intIndex == 2){
      } else {
        if (msg=="yes"){
            alert(poTitle + "が「HH:MM」の形式ではありません");
        }
        return false;
      }
      var strHour = obj.substring(0,2);
      var strMinuts = obj.substring(3,5);
      //if (strHour <= houruntil && strHour >= hourfrom){
    if (strHour <= houruntil && strHour >= hourfrom){
      } else {
        if (msg=="yes"){
           alert(poTitle + "の時間が「" + hourfrom + "」〜「" + houruntil + "」の範囲外です");
            //alert(poTitle + "の時間が「00」〜「23」の範囲外です");
        }
        return false;
      }
      if (strMinuts <= '59' && strMinuts >= '00'){
      } else {
        if (msg=="yes"){
           alert(poTitle + "の分が「00」〜「59」の範囲外です");
        }
        return false;
      }
    return true;
    }

    var chk_moji = "abcdefghijklnmopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789@-._ ";     //使用可能文字列の指定
    function MailaddressCheck(obj,msg) {//メールアドレスのチェック
    for (i=0; i<obj.length; i++) {
        if (chk_moji.indexOf(obj.charAt(i)) == -1) {
        if (msg=="yes"){
            alert("メールアドレスとして使用不可な文字が含まれています。");
        }
            return false;
        }
    }
      intIndex = obj.indexOf('@', 0);
      if (intIndex == -1)
      {
        if (msg=="yes"){
           alert("メールアドレスに誤りがあります。");
        }
        return false;
      }
      if (intIndex == 0)
      {
        if (msg=="yes"){
            alert("メールアドレスに誤りがあります。");
        }
        return false;
      }
      if (intIndex == (obj.length - 1))
      {
        if (msg=="yes"){
           alert("メールアドレスに誤りがあります。");
        }
        return false;
      }
          if (obj.indexOf(".",intIndex+1) == -1) {
        if (msg=="yes"){
            alert("メールアドレスに誤りがあります。");
        }
        return false;
      }
      intIndex = obj.indexOf('@', intIndex + 1);
      if (intIndex != -1)
      {
        if (msg=="yes"){
            alert("メールアドレスに誤りがあります。");
        }
        return false;
      }
    return true;
    }

// ↓MOD 2003/09/25 M.Arayama UT-MK1232
function doCheckDate(po,psChecktype,poTitle) {

    po.value = _funcDateForm( po );
    CB = new Array();
    PB = new Array();
    chkFlg = 0;					// チェックフラグ
	chkLen = po.value.length;	// 桁数

    errMsgD     = poTitle + "の日付の書式をYYYYMMDDで入力して下さい。";
    errMsgD1    = poTitle + "の日付の書式をYYYY/MM/DDで入力して下さい。";
    errMsgD2    = poTitle + "の日付の書式をMM/DDで入力して下さい。";
    errMsgD3    = poTitle + "の日付の書式をYYYY/MMで入力して下さい。";
    errMsg      = poTitle + "の日付が存在しない日付です。";
// ↓MOD 2003/10/01 M.Arayama UT-SK1157
    errMsg1     = poTitle + "の日付に半角数字または\"/\"以外の入力があります。";
// ↑MOD 2003/10/01 M.Arayama UT-SK1157
    errMsgMaxD  = "最大日付は20781231までです。";
    errMsgMaxD1 = "最大日付は2078/12/31までです。";
    errMsgMinD  = "最小日付は19000101までです。";
    errMsgMinD1 = "最小日付は1900/01/01までです。";

// ↓MOD 2003/10/01 M.Arayama UT-SK1157
	// 半角英数チェック(0〜9・/)
	for (i=0; i<po.value.length; i++) {
		if ((po.value.substr(i,1) >= "0" && po.value.substr(i,1) <= "9") || po.value.substr(i,1) == "/") {
			continue;
		}
		alert(errMsg1);
		return(false);
    }
// ↑MOD 2003/10/01 M.Arayama UT-SK1157

    // 桁数チェック・年月日設定
    if (psChecktype.toLowerCase() == 'd') {
        if (!(chkLen == 8)) {
            alert(errMsgD);
            return(false);
        }
        CB[0] = po.value.substring(0,4);    // 年設定
        CB[1] = po.value.substring(4,6);    // 月設定
        CB[2] = po.value.substring(6,8);    // 日設定
    } else if (psChecktype.toLowerCase() == 'd1'){
        if (!(chkLen == 10)) {
            alert(errMsgD1);
            return(false);
        }
        CB[0] = po.value.substring(0,4);    // 年設定
        PB[0] = po.value.substring(4,5);
        CB[1] = po.value.substring(5,7);    // 月設定
        PB[1] = po.value.substring(7,8);
        CB[2] = po.value.substring(8,10);   // 日設定
    } else if (psChecktype.toLowerCase() == 'd2'){
        if (!(chkLen == 5)) {
            alert(errMsgD2);
            return(false);
        }
        CB[0] = 2000;  //下での判定を通すため固定で年表示を２以上に。
        CB[1] = po.value.substring(0,2);    // 月設定
        PB[0] = po.value.substring(2,3);
        CB[2] = po.value.substring(3,5);    // 日設定
    } else if (psChecktype.toLowerCase() == 'd3'){
        if (!(chkLen == 7)) {
            alert(errMsgD3);
            return(false);
        }
        CB[0] = po.value.substring(0,4);	//年設定
        CB[1] = po.value.substring(5,7);	// 月設定
        PB[0] = po.value.substring(4,5);
        CB[2] = "01";    // 日設定
    } else {
        CB = po.value.split("/"); 
    }

    // 書式チェック（'D'はチェックしない）
    if (!(psChecktype.toLowerCase() == 'd')) {
        if (psChecktype.toLowerCase() == 'd1') {  // 'D1'書式チェック
            if (!(PB[0] == "/")) {
                chkFlg = 1;
            }
            if (!(PB[1] == "/")) {
                chkFlg = 1;
            }
            if (chkFlg == 1) {
                alert(errMsgD1);
                return(false);
            }
        } else if (psChecktype.toLowerCase() == 'd2') {  // 'D2'書式チェック
            if (!(PB[0] == "/")) {
                chkFlg = 1;
            }
            if (chkFlg == 1) {
                alert(errMsgD2);
                return(false);
            }
        } else if (psChecktype.toLowerCase() == 'd3') {  // 'D3'書式チェック
            if (!(PB[0] == "/")) {
                chkFlg = 1;
            }
            if (chkFlg == 1) {
                alert(errMsgD3);
                return(false);
            }
        }
    }

    // 月末日設定
    MT = new Array(12);
    MT[0]=0; MT[1]=31; MT[2]=29; MT[3]=31; MT[4]=30; MT[5]=31; MT[6]=30;
    MT[7]=31; MT[8]=31; MT[9]=30; MT[10]=31; MT[11]=30; MT[12]=31;

    // 妥当性チェック
    if (isNaN(CB[0])==false && eval(CB[0])>=1 &&
        isNaN(CB[1])==false && eval(CB[1])>=1 && eval(CB[1])<=12 && 
        isNaN(CB[2])==false && eval(CB[2])>=1 && eval(CB[2])<=MT[eval(CB[1])]) {
        if (eval(CB[1])==2 && eval(CB[2])==29 &&
            Math.abs(eval(CB[0])/4)-Math.floor(eval(CB[0])/4)==0 &&
           (Math.abs(eval(CB[0])/100)-Math.floor(eval(CB[0])/100)!=0 ||
            Math.abs(eval(CB[0])/400)-Math.floor(eval(CB[0])/400)==0)) {

//              return(true);
        } else {
            if(eval(CB[1]) == 2 && eval(CB[2])>=29) {
                alert(errMsg);
                return(false);
            }
        }
//      return(true);
    } else {
        alert(errMsg);
        return(false);
    }

//↓05/02/17 hls oracleのためコメントアウト
    // 年月日上限チェック（'D2'はチェックしない）
//    if (!(psChecktype.toLowerCase() == 'd2')) {
//        if (psChecktype.toLowerCase() == 'd') {   // 'D'の場合
//            if (po.value > "20781231") {
//                alert(errMsgMaxD);
//                return(false);
//            }
//        } else {                    // 'D1'の場合
//            if (po.value > "2078/12/31") {
//                alert(errMsgMaxD1);
//                return(false);
//            }
//        }
//    }

    // 年月日下限チェック（'D2'はチェックしない）
//    if (!(psChecktype.toLowerCase() == 'd2')) {
//        if (psChecktype.toLowerCase() == 'd') {   // 'D'の場合
//            if (po.value < "19000101") {
//                alert(errMsgMinD);
//                return(false);
//            }
//        } else {                    // 'D1'の場合
//            if (po.value < "1900/01/01") {
//                alert(errMsgMinD1);
//                return(false);
//            }
//        }
//    }
//↑05/02/17 hls oracleのためコメントアウト

    // 正常
    return(true);
}
// ↑MOD 2003/09/25 M.Arayama UT-MK1232
function strRep(msg, key, rep){
    var n = 0;

    while ((n = msg.indexOf(key, n)) != -1) {
        msg = msg.substring(0, n) + rep + msg.substring(n + key.length, msg.length);
        n = n + rep.length;
    }
    return msg;
}
//-----------------------------------------------------------------------------------
// 関数名：_doInputOn()
// 機能  ：パラメータで渡されたオブジェクトの入力を可能にする。
// 戻り値：なし
//-----------------------------------------------------------------------------------
function _doInputOn(psForm,psObj)
{
  var len = _doInputOn.arguments.length;    // 引数の数
  for(i=0; i<len; i++){
    var cnt = psForm.elements[psObj].length;
    if( cnt > 1 ){
      var type1 = psForm.elements[psObj][0].type;
      var type2 = psForm.elements[psObj].type;
    }else{
      var type2 = psForm.elements[psObj].type;
    }
    switch(type1) {
      case "radio":                     // ラジオボタン
           for(j=0; j<cnt; j++){
             psForm.elements[psObj][j].disabled = false;
           } break;
      case "checkbox":                   // チェックボックス
           for(j=0; j<cnt; j++){
             psForm.elements[psObj][j].disabled = false;
           } break;
      case "select-one":                  // リストボックス
           psForm.elements[psObj].disabled = false;
           _funcComChgBgColor(psForm.elements[psObj], COLOR_NORMAL);
           break;
      case "text":                       // テキストボックス
           for(j=0; j<cnt; j++){
               psForm.elements[psObj][j].disabled = false;
               _funcComChgBgColor(psForm.elements[psObj][j], COLOR_NORMAL);
           }
           break;
    }
    switch(type2) {
      case "checkbox":                   // チェックボックス
             psForm.elements[psObj].disabled = false;
             break;
      case "text":                       // テキストボックス
           psForm.elements[psObj].disabled = false;
           _funcComChgBgColor(psForm.elements[psObj], COLOR_NORMAL);
           break;
      case "button":                      // ボタン
           psForm.elements[psObj].disabled = false;
           break;
      case "submit":                      // サブミット
           psForm.elements[psObj].disabled = false;
           break;
      case "select-one":                  // リストボックス
           psForm.elements[psObj].disabled = false;
           _funcComChgBgColor(psForm.elements[psObj], COLOR_NORMAL);
           break;
      case "textarea":                    // テキストエリア
           psForm.elements[psObj].disabled = false;
           _funcComChgBgColor(psForm.elements[psObj], COLOR_NORMAL);
           break;

    }
  }
}

//-----------------------------------------------------------------------------------
// 関数名：_doInputOff()
// 機能  ：パラメータで渡されたオブジェクトの入力を不可にする。
// 戻り値：なし
//-----------------------------------------------------------------------------------
function _doInputOff(psForm,psObj)
{
  var len = _doInputOff.arguments.length;    // 引数の数
  for(i=0; i<len; i++){
    var cnt = psForm.elements[psObj].length;
    if(cnt > 1){
      var type1 = psForm.elements[psObj][0].type;
      var type2 = psForm.elements[psObj].type;
    }else{
      var type2 = psForm.elements[psObj].type;
    }

    switch(type1) {
      case "radio":                     // ラジオボタン
           for(j=0; j<cnt; j++){
             //psForm.elements[psObj][j].checked = false;
             psForm.elements[psObj][j].disabled = true;
           }
           break;
      case "checkbox":                  // チェックボックス
           for(j=0; j<cnt; j++){
             //psForm.elements[psObj][j].checked = false;
             psForm.elements[psObj][j].disabled = true;
           }
           break;
      case "select-one":                  // リストボックス
           psForm.elements[psObj].disabled = true;
           _funcComChgBgColor(psForm.elements[psObj], COLOR_NORMAL_BGCOLOR);
           break;
      case "button":                      // ボタン
           for(j=0; j<cnt; j++){
	           psForm.elements[psObj][j].disabled = true;
	           break;
			}
      case "text":                       // テキストボックス
           for(j=0; j<cnt; j++){
               psForm.elements[psObj][j].disabled = true;
               _funcComChgBgColor(psForm.elements[psObj][j], COLOR_NORMAL_BGCOLOR);
           }
           break;
    }
    switch(type2) {
      case "checkbox":                  // チェックボックス
           psForm.elements[psObj].disabled = true;
           break;
      case "text":                       // テキストボックス
               psForm.elements[psObj].disabled = true;
               _funcComChgBgColor(psForm.elements[psObj], COLOR_NORMAL_BGCOLOR);
               break;
      case "button":                      // ボタン
           psForm.elements[psObj].disabled = true;
           break;
      case "submit":                      // ボタン
           psForm.elements[psObj].disabled = true;
           break;
      case "textarea":                    // テキストエリア
           psForm.elements[psObj].disabled = true;
           _funcComChgBgColor(psForm.elements[psObj], COLOR_NORMAL_BGCOLOR);
           break;
      case "select-one":                  // リストボックス
           psForm.elements[psObj].disabled = true;
           _funcComChgBgColor(psForm.elements[psObj], COLOR_NORMAL_BGCOLOR);
           break;
    }
  }
}

//-----------------------------------------------------------------------------------
// 日付0埋め処理
// _funcDateForm()
//-----------------------------------------------------------------------------------
function _funcDateForm( obj )
{
    var datePat = /^(\d{4})(\/)(\d{2})\2(\d{2})$/;

    strDate = obj.value;

    if( strDate == "" ){ return; }
    
    if (strDate.match(/[^0-9\x2f]/) != null)
    {
//        alert("日付が不正です。再度入力してください。");
//        obj.select();
        return strDate;
    }

    d_check =  strDate.split("/");
    
    if (d_check.length < 3)
    {
        return strDate;
    } 
    
    year  = d_check[0]
    month = d_check[1]
    date  = d_check[2]
    
    if (month.length < 2)
    {
        month = "0" + month;
    }
    
    if (date.length < 2)
    {
        date = "0" + date;
    }
    
    day = year + "/" + month + "/" + date;

    return day;
}
//-----------------------------------------------------------------------------------
// 日付0埋め処理（yyyy/mm）
// _funcDateForm()
//-----------------------------------------------------------------------------------
function _funcDateFormYYYYMM( obj )
{
    strDate = obj.value;
    if( strDate == "" ){ return; }
    
    if (strDate.match(/[^0-9\x2f]/) != null)
    {
        return strDate;
    }

    d_check =  strDate.split("/");
    
    if (d_check.length < 2)
    {
        return strDate;
    } 
    
    year  = d_check[0]
    month = d_check[1]
    
    if (month.length < 2)
    {
        month = "0" + month;
    }
    
    day = year + "/" + month;

    return day;
}
function _funcComChgBgColor(f_nm,color){
  f_nm.style.background = color;
  return;
}
function Trim(poText)
{
	var strRet, strFinal;
	//LTRIM
	strRet = LTrim(poText);
	//RTRIM
	strFinal = RTrim(strRet);
	//結果表示
	return strFinal;
}
function RTrim(strTemp)
{
	var nLoop = 0;
	var strReturn = strTemp;
	while (nLoop < strTemp.length)
	{
		if ((strReturn.substring(strReturn.length - 1, strReturn.length) == " ") || (strReturn.substring(strReturn.length - 1, strReturn.length) == "　"))
		{
			strReturn = strTemp.substring(0, strTemp.length - (nLoop + 1));
		}
		else
		{
			break;
		}
		nLoop++;
	}
	return strReturn;
}
function LTrim(strTemp)
{
	var nLoop = 0;
	var strReturn = strTemp;
	while (nLoop < strTemp.length)
	{
		if ((strReturn.substring(0, 1) == " ") || (strReturn.substring(0, 1) == "　"))
		{
			strReturn = strTemp.substring(nLoop + 1, strTemp.length);
		}
		else
		{
			break;
		}
		nLoop++;
	}
	return strReturn;
}

//########特定のキーが押された時の処理############
//F5キーの無効
function KeyControl(){ 
	var keycode = event.keyCode; 
	if ( keycode == 116){ 
		event.keyCode = 0; 
		event.returnValue = false; 
	} 
} 
/*リターンキー無効処理*/
function doReturn() {
  if(event.keyCode=="13"){
    return false;
  }
}
//右クリックの禁止
//サンプル→if(document.layers)document.captureEvents(Event.MOUSEDOWN);document.onmousedown=forbidRight;
var forbidRightMsg = "右クリックメニューは使用できません";
function setforbidRightMsg(psMsg){
	forbidRightMsg = psMsg;
}
function forbidRight(eve){
    if(document.all){
        if(event.button == 2){
            alert(forbidRightMsg);
            return false;
        }
    }
    if(document.layers){
        if(eve.which == 3){
            alert(forbidRightMsg);
            return false;
        }
    }
}

//テキストボックス等上で指定キーが押された時の処理
function moveFocusKeyControl(poForm,psSelf,prevName,nextName,prevKeyCode,nextKeyCode){
	var keycode = event.keyCode;
	//フォームがあるか否かの判定
	if (poForm == null){
		alert('指定されたフォームがありません');
		return false;
	}
	//prevKeyCodeキー：前へ移動
	if ( keycode == prevKeyCode){ 
		//nextNameが「move_next」の時、ドキュメントの次を探す
		if (prevName == 'move_prev'){
			prevName = getNextFieldName(poForm,psSelf,-1,true);
			if (prevName == undefined){
				return false;
			} else if (prevName == ""){
				return false;
			} else if (poForm.elements(prevName) == null){
				alert('指定された項目名がありません [' + prevName + ']');
				return false;
			}
			//項目がhiddenフィールドか否か
			if (poForm.elements(prevName).type != 'hidden'){
				var cnt = poForm.elements[prevName].length;
				if(cnt > 1){
					var type1 = poForm.elements[prevName][0].type;
					var type2 = poForm.elements[prevName].type;
				}else{
					var type2 = poForm.elements[prevName].type;
				}
				//エラー処理
				try{
					if (type1 =="radio" || type1=="checkbox"){
						poForm.elements(prevName)[0].focus();
					} else {
						poForm.elements(prevName).focus();
					}
				}catch(e){
				}
			}
		} else if (prevName != ''){
			//項目があるか否かの判定
			if (prevName == undefined){
				return false;
			} else if (prevName == ""){
				return false;
			} else if (poForm.elements(prevName) == null){
				alert('指定された項目名がありません [' + prevName + ']');
				return false;
			}
			//項目がhiddenフィールドか否か
			if (poForm.elements(prevName).type != 'hidden'){
				var cnt = poForm.elements[prevName].length;
				if(cnt > 1){
					var type1 = poForm.elements[prevName][0].type;
					var type2 = poForm.elements[prevName].type;
				}else{
					var type2 = poForm.elements[prevName].type;
				}
				//エラー処理
				try{
					if (type1 =="radio" || type1=="checkbox"){
						poForm.elements(prevName)[0].focus();
					} else {
						poForm.elements(prevName).focus();
					}
				}catch(e){
				}

			}
		}
	//nextKeyCodeキー：次へ移動
	} else if (keycode == nextKeyCode){
		//nextNameが「move_next」の時、ドキュメントの次を探す
		if (nextName == 'move_next'){
			nextName = getNextFieldName(poForm,psSelf,1,true);
			if (nextName == undefined){
				return false;
			} else if (nextName == ""){
				return false;
			} else if (poForm.elements(nextName) == null){
				alert('指定された項目名がありません [' + nextName + ']');
				return false;
			}
			//項目がhiddenフィールドか否か
			if (poForm.elements(nextName).type != 'hidden'){
				var cnt = poForm.elements[nextName].length;
				if(cnt > 1){
					var type1 = poForm.elements[nextName][0].type;
					var type2 = poForm.elements[nextName].type;
				}else{
					var type2 = poForm.elements[nextName].type;
				}
				//エラー処理
				try{
					if (type1 =="radio" || type1=="checkbox"){
						poForm.elements(nextName)[0].focus();
					} else {
						poForm.elements(nextName).focus();
					}
				}catch(e){
				}

			}
		} else if (nextName != ''){
			//項目があるか否かの判定
			if (nextName == undefined){
				return false;
			} else if (nextName == ""){
				return false;
			} else if (poForm.elements(nextName) == null){
				alert('指定された項目名がありません [' + nextName + ']');
				return false;
			}
			//項目がhiddenフィールドか否か
			if (poForm.elements(nextName).type != 'hidden'){
				var cnt = poForm.elements[nextName].length;
				if(cnt > 1){
					var type1 = poForm.elements[nextName][0].type;
					var type2 = poForm.elements[nextName].type;
				}else{
					var type2 = poForm.elements[nextName].type;
				}
				//エラー処理
				try{

					if (type1 =="radio" || type1=="checkbox"){
						poForm.elements(nextName)[0].focus();
					} else {
						poForm.elements(nextName).focus();
					}
				}catch(e){
				}
			}
		}
	}
}

FieldsGamenList = new Array(0);	//getNextFieldName用
//次のフィールド名取得(hiddenフィールド以外)
function getNextFieldName(poForm,psSelf,piAdd,pbHidden){
	//poForm:フォームオブジェクト　例：document.MyForm
	//psSelf:自分のフィールド名　例：SelXxxName
	//piAdd:参照番号で移動する値　例：-2  
	//pbHidden:hiddenフィールドを飛ばすか否か 例：true/false  

	//フォームがあるか否かの判定
	if (poForm == null){
		alert('poForm:指定されたフォームがありません');
		return "";
	}
	//form_MyForm_formfieldsgamen項目があるか否かの判定
	var sFormName = poForm.name;
	var sEleName = "form_" + sFormName + "_formfieldsgamen";
	var sEleValue = "";
	if (sEleName == ""){
	} else if (poForm.elements(sEleName) == null){
		alert('formタグで作成されるformfieldsgamen項目がありません [' + sEleName + ']');
		return "";
	}
	sEleValue = poForm.elements(sEleName).value;
	if (poForm.elements(sEleValue) == ""){
		return "";
	}
	//一度実行後だった場合実行しない
	var aLen = FieldsGamenList.length;	//フィールド配列の要素数
	if (aLen == null || aLen == 0){
		//##フィールド項目名の配列の作成##
		//連想配列定義
		//変数定義
		var FieldsGamenName = "";
		var iInd = sEleValue.indexOf(":");	//「:」の位置
		var iStartInd = 0;	//「:」の位置
		var iLen = sEleValue.length;
		while (iInd != -1) {
			if (iInd > iLen) { 
				iInd = iLen;
			}
			FieldsGamenName = sEleValue.substring(iStartInd,iInd);
			FieldsGamenList.push(FieldsGamenName);
			iStartInd = iInd + 1;
			iInd = sEleValue.indexOf(":",iStartInd);
		}
	}
	
	aLen = FieldsGamenList.length;	//フィールド配列の要素数
	//##配列内の検索##
	var iSelfNo =0;
	var sReturnName = "";
	var oTargetFieldObj = null;
	for (i =0;i<=aLen;i++){
		var sValue = FieldsGamenList[i];
		//指定された引数と配列の要素が一致した場合
		if (sValue == psSelf){
			iSelfNo = i;
			//加算する値（引数で指定）が0以下の場合
			if (piAdd < 0 && i == 0){
			} else {
				if (i + piAdd > aLen){
				} else {
					iSelfNo = i + piAdd;
				}
			}
			//hiddenフィールドか否か
			if(pbHidden == true){
				var iTmp = iSelfNo;
				var iAdd2 = 1;
				//prevの時は1を引くようにする。
				if (piAdd < 0 ){
					iAdd2 = -1;
				}

				while(pbHidden){
					sReturnName = FieldsGamenList[iTmp];
					oTargetFieldObj = poForm.elements(sReturnName);

					pbHidden = (oTargetFieldObj.type == 'hidden');
					//最後の項目だった場合、何も返さない
					if(aLen<= iTmp){
						pbHidden =false;
						return "";
					}
					iTmp = iTmp+iAdd2;

				}
			}
			break;
		}
	}

	return sReturnName;
	
}

//コンボボックスの連動
//poObj:配列オブジェクト
//psParentName:親コンボ名
//psChildName:子コンボ名
//別途[subSelect]変数が必要
function funcCreateList(poObj,psParentName,psChildName) 
{
    var objParentList = null;
    var objChildList = null;
    if(document.all){
	objParentList = document.all(psParentName);
	objChildList = document.all(psChildName);
    } else if (document.getElementById){
	objParentList = document.getElementById(psParentName);
	objChildList = document.getElementById(psChildName);
    } else if (document.layers){
    }
    var nSelectIndex = objParentList.options.selectedIndex;
    var sSelectValue = objParentList.options[nSelectIndex].value; 
    //作成
    var objArray = poObj[sSelectValue];
    if(objArray  == undefined) {
	//配列が定義されていなかった場合、コンボボックスをクリアする
	objChildList.length=0; 
    } else {
	objChildList.length=0; 
	    var nMax = objArray.length; 
	    var nLoop = 0; 
	    var iInd = 0;	//配列値の中の「:」位置
	    var sOptionValue="";
	    var sOptionShow="";
	    //配列からのOptionの作成
	    for (nLoop = 0; nLoop < nMax; nLoop++){ 
		//配列値の分解
		iInd = objArray[nLoop].indexOf(':');
		sOptionValue = objArray[nLoop].substring(0,iInd);
		sOptionShow = objArray[nLoop].substring(iInd+1,objArray[nLoop].length);

	        oAdd = document.createElement('OPTION'); 
	        if(objChildList.childNodes[nLoop]  != undefined) 
	            objChildList.removeChild(objChildList.childNodes[nLoop]); 

	        objChildList.appendChild(oAdd); 
		//値のセット
	        objChildList.childNodes[nLoop].setAttribute('value',sOptionValue); 
		//表示のセット
	        oAddx= document.createTextNode(sOptionShow); 
	        if(objChildList.childNodes[nLoop].firstChild  != undefined) 
	            objChildList.childNodes[nLoop].removeChild(objChildList.childNodes[nLoop].firstChild); 
	        objChildList.childNodes[nLoop].appendChild(oAddx); 
	    } 
    }
    objChildList.length=nLoop; 
} 

//########チェックボックス処理############
//repeat内のチェックボックスリストを全てチェックする
function allCheck(poform,checkbox,maxcount){
    for(i=1; i<=maxcount; i++){
	poform.elements[checkbox + i].checked = true;
    }
}
//repeat内のチェックボックスリストのチェックを全てはずす
function allRelease(poform,checkbox,maxcount){
    for(i=1; i<=maxcount; i++){
	poform.elements[checkbox + i].checked = false;
    }
}

//########改行コード置換############
function replaceBR(sTarget)
{
	var sTmp = sTarget;
	while(sTmp.search(/%BR%/i) != -1){
		sTmp = sTmp.replace("%BR%","\r\n");
	}
	return sTmp
}


//########クッキー処理############
//クッキーの取得
function GetCookie(sKey){
	var tmp = document.cookie + ";";
	var index1 = tmp.indexOf(sKey, 0);
	if(index1 != -1){
		tmp = tmp.substring(index1,tmp.length);
		var iIndEq = tmp.indexOf("=",0) + 1;
		var iIndSc = tmp.indexOf(";",iIndEq);
		return(unescape(tmp.substring(iIndEq,iIndSc)));
	}
	return("");
}

//クッキーのセット
function SetCookie(sKey, sValue){
	document.cookie = sKey + "=" + escape(sValue) + 
			";expires=Fri, 31-Dec-2030 23:59:59;";
}

//メッセージ出力用ロジック
function alertUni(psMsgUni,psMsgURL){
	var UTFesc = "\u3042"
	if(UTFesc.length == 1) {
		//IEで[escape]関数を使用して取得
		alert(psMsgUni);
	} else {
		//NNで[escape]関数を使用して取得
		alert(unescape(psMsgURL));
	}
}



