/* ... in StrUtils.js
//文字列のトリミング
function Trim(Str)
*/
var kAvailHiraOnlyStr = 'あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやいゆえよらりるれろわゐゑをんがぎぐげござじずぜぞだぢづでどばびぶべぼぱぴぷぺぽぁぃぅぇぉっゃゅょゎ';
var kAvail2ByteKataStr = 'アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤイユエヨラリルレロワヰヱヲンガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポァィゥェォッャュョー－ヮヵヶ゛゜°ヴ';
var kExtraAvail2ByteNumCharStr = 'ａｂｃｄｅｆｇｈｉｊｋｌｍｎｏｐｑｒｓｔｕｖｗｘｙｚＡＢＣＤＥＦＧＨＩＪＫＬＭＮＯＰＱＲＳＴＵＶＷＸＹＺ１２３４５６７８９０～！＠＃＄％＾＆＊（）＿＋‐＝－｀「」￥｜｛｝；：、。・＜＞？￣※〔〕〈〉《》『』【】‘’“”［］＿±≠≡≒〓＼∥；：，…‥．／÷≦≪≫≧';//キーボードで打てる＆変換可能全角英数記号
var kAvail1ByteKataStr = 'ｱｲｳｴｵｶｷｸｹｺｻｼｽｾｿﾀﾁﾂﾃﾄﾅﾆﾇﾈﾉﾊﾋﾌﾍﾎﾏﾐﾑﾒﾓﾔｲﾕｴﾖﾗﾘﾙﾚﾛﾜｦﾝｧｨｩｪｫｯｬｭｮｰ｡｢｣､･ﾞﾟ';
var kAvail1ByteAlphaNumCharStr = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";//半角英数のみ記号不可
var kExtraAvail1ByteNumCharStr = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!\"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~";//キーボードで打てる＆変換可能半角英数記号
var kAvail2ByteNumCharStr = '１２３４５６７８９０';//2byte 数字
var k2ByteHyphenStr = '－';//2byte ハイフン
var k2BytePeriodStr = '．';//2byte ピリオド
var kAvail1ByteNumCharStr = '1234567890';//1byte 数字(2バイトと並び順同期のこと)
var k1ByteHyphenStr = '-';//1byte ハイフン(2バイトと並び順同期のこと)
var k1BytePeriodStr = '.';//1byte ピリオド(2バイトと並び順同期のこと)
var k1ByteSpace = ' ';
var k2ByteSpace = '　';
//--
//var kCharTypeOptionHyphenAvail  = 'ctOptHyphenAvail';
var kCharTypeOption2ByteNumAvail  = 'ctOpt2ByteNumAvail';
//----
var kReqCharTypeHanNum = 'HanNum';
var kReqCharTypeHanFloatNum = 'HanFloatNum';
var kReqCharTypeHanAlphaNum = 'HanAlphaNum';//記号不可
var kReqCharTypeHanChar = 'HanChar';//一部記号可、アンダーバーなど
var kReqCharTypeZenChar = 'ZenChar';
var kReqCharTypeHanKataKana = 'HanKataKana';
var kReqCharTypeZenKataKana = 'ZenKataKana';
var kReqCharTypeZenExtraKataKana = 'ZenExtraKataKana';
var kReqCharTypeAnyExtraKataKana = 'AnyExtraKataKana';
var kReqCharTypeHanPhoneNum = 'HanPhoneNum';
var kReqCharTypeHanZipNum = 'HanZipNum';
var kReqCharTypeEmailChar = 'EmailChar';
var kReqCharTypeZenMultiLineChar = 'ZenMultiLineChar';
var kReqCharTypeAnyExtraAvail1ByteNumChar = 'AnyExtraAvail1ByteNumChar';
var kReqCharTypeArray = [kReqCharTypeHanNum,kReqCharTypeHanFloatNum,kReqCharTypeHanChar,kReqCharTypeZenChar,kReqCharTypeHanKataKana,kReqCharTypeZenKataKana,kReqCharTypeZenExtraKataKana,kReqCharTypeAnyExtraKataKana,kReqCharTypeHanPhoneNum,kReqCharTypeHanZipNum,kReqCharTypeEmailChar,kReqCharTypeZenMultiLineChar,kReqCharTypeAnyExtraAvail1ByteNumChar,kReqCharTypeHanAlphaNum];

var kReqCharTypeMsgHanNum = 'は半角数字のみを入力して下さい。';
var kReqCharTypeMsgHanFloatNum = 'は半角で正しい数値のみを入力して下さい。';
var kReqCharTypeMsgHanAlphaNum = 'は半角英数文字のみを入力して下さい。';
var kReqCharTypeMsgHanChar = 'は半角英数文字のみを入力して下さい。';
var kReqCharTypeMsgZenChar = 'は全角文字のみを入力して下さい。';
var kReqCharTypeMsgHanKataKana = 'は半角カタカナのみを入力して下さい。';
var kReqCharTypeMsgZenKataKana = 'は全角カタカナのみを入力して下さい。';
var kReqCharTypeMsgZenExtraKataKana = 'は全角の英数記号カタカナのみを入力して下さい。';
var kReqCharTypeMsgAnyExtraKataKana = 'は英数記号カタカナのみを入力して下さい。';
var kReqCharTypeMsgPhoneNum = 'は数字で入力して下さい。';//'はハイフンと数字で入力して下さい。'
var kReqCharTypeMsgZipNum = 'は数字で入力して下さい。';//'はハイフンと数字で入力して下さい。'
var kReqCharTypeMsgEmailChar = 'は正しいメールアドレスで入力して下さい。';
var kReqCharTypeMsgZenMultiLineChar = 'は全角文字のみを入力して下さい。';
var kReqCharTypeMsgAnyExtraAvail1ByteNumChar = 'は半角文字のみを入力して下さい。';
var kReqCharTypeMsgArray = [kReqCharTypeMsgHanNum,kReqCharTypeMsgHanFloatNum,kReqCharTypeMsgHanChar,kReqCharTypeMsgZenChar,kReqCharTypeMsgHanKataKana,kReqCharTypeMsgZenKataKana,kReqCharTypeMsgZenExtraKataKana,kReqCharTypeMsgAnyExtraKataKana,kReqCharTypeMsgPhoneNum,kReqCharTypeMsgZipNum,kReqCharTypeMsgEmailChar,kReqCharTypeMsgZenMultiLineChar,kReqCharTypeMsgAnyExtraAvail1ByteNumChar,kReqCharTypeMsgHanAlphaNum];
var kInvalidDateMsgStr = 'が正しい日付になっていません。';
var kInvalidTimeMsgStr = 'が正しい時間になっていません。';
var kInvalidDateOrderMsgStr = 'の順序が正しくありません。';
var kErrMsgSuffix_ReqTxt = 'を入力して下さい。';
var kErrMsgSuffix_ReqSel = 'を選択して下さい。';

//================================================================================
function getIsValidObj(theObj)
{
	if(theObj == void(0)) {
		return false;
	}
	else{
		return true;
	}
}
//半角ハイフンの除去
//文字タイプチェック済みの半角文字であること数字文字問わず、半角であればよい
//---------------------
function getNoHyphenNumStr(theStr)
{
  var newStr = '';
  var theCnt = theStr.length;
  var theChar = '';
  for(var charIndex = (theCnt - 1);charIndex >= 0 ;charIndex--){
    theChar = theStr.charAt(charIndex);
    if(theChar == k1ByteHyphenStr){
      continue;
    }
    newStr = theChar + newStr;
  }

  return newStr;
}

//2バイトの数値と2バイトハイフン・ピリオドの半角文字変換
//文字タイプチェック済みの正しい値であること
//---------------------
function convZen2HanNumPeriodHyphenStr(theStr)
{
  var pos;
  var newStr = '';
  var theCnt = theStr.length;
  var wByteStr = kAvail2ByteNumCharStr + k2ByteHyphenStr + k2BytePeriodStr;
  var sByteStr = kAvail1ByteNumCharStr + k1ByteHyphenStr + k1BytePeriodStr;
  var theChar = '';
  for(var charIndex = 0;charIndex < theCnt ;charIndex++){
    pos = wByteStr.indexOf(theStr.charAt(charIndex));
    if(pos == -1){// may be 1byte
      newStr += theStr.charAt(charIndex);
    }
    else{
      newStr += sByteStr.charAt(pos);
    }
  }

  return newStr;
}


//2バイトハイフンのオプションつき１・２バイト混在数値チェック
//---------------------
function getIsCustomValid2ByteNumChar(inputStr,bIsAvailHyphen)
{
  var theCnt = inputStr.length;
  var validStr = kAvail2ByteNumCharStr + kAvail1ByteNumCharStr;
  if (bIsAvailHyphen){
    validStr += k2ByteHyphenStr + k1ByteHyphenStr;
  }
  for(var charIndex = 0;charIndex < theCnt ;charIndex++){
    if(validStr.indexOf(inputStr.charAt(charIndex)) == -1){
      return false;
    }
  }

  return true;
}

//１・２バイト混在の少数値チェック
//---------------------
function getIsValid2ByteFloatNumChar(inputStr)
{
  var theCnt = inputStr.length;
  var validStr = kAvail2ByteNumCharStr + kAvail1ByteNumCharStr + k2BytePeriodStr + k1BytePeriodStr;
  for(var charIndex = 0;charIndex < theCnt ;charIndex++){
    if(validStr.indexOf(inputStr.charAt(charIndex)) == -1){
      return false;
    }
  }

  return true;
}
//---------------------
function arrayIndexOf(theArray,theValue)
{
  var len = theArray.length;
  for (var i=0; i<len; ++i) {
    if (theValue == theArray[i]) {
      return i;
    }
  }
  return -1;
}

function arrayPropIndexOf(theArray,propNameStr,theValue) {
  var len = theArray.length;
  for (var i=0; i<len; ++i) {
    if (theValue == eval('theArray[i].'+propNameStr)) {
      return i;
    }
  }
  return -1;
}

//文字列のトリミング(全角対応)
function mbTrim(Str)
{
  return String(Str).replace(/(^[\s　]*)|([\s　]*$)/g, "");
}

//改行除去(SJIS専用）
function trimCR(Str)
{
  var newStr = String(Str).replace(/\r\n/g, "");//IE(Win),NN47(Win)
  newStr = String(newStr).replace(/\n/g, "");  // NN71(Win),Mac
  /*
  if(navigator.userAgent.indexOf("Win") != -1){
    return String(Str).replace(/\r\n/g, "");
  }
  else{
    return String(Str).replace(/\n/g, "");
  }
  */
  return newStr;
}

//空欄もしくはスペースのみチェック（全角対応） v1.0.0 S.Sagiya
function isEmptyOrOnlySpaceMB(inputStr)
{
  if (mbTrim(inputStr).length !== 0){
    return false;
  }

  return true;
}

//emailアドレス妥当性チェック v1.0.0 S.Sagiya
function isValidEmailAddr(inputStr)
{
  var kMailPatStr = /^([-+.\w]+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;//記号で始まるのを許可
  if (isEmptyOrOnlySpaceMB(inputStr)){
    return false;
  }

  if (! inputStr.match(kMailPatStr)){
    return false;
  }

  return true;
}

//文字種妥当性チェック v1.0.0 S.Sagiya
function isValid1ByteChar(inputStr)
{
  for (var iIndex=0;iIndex<inputStr.length;iIndex++){
    //if (escape(inputStr.charAt(iIndex)).length > 4){ //半角カナが通る（６）ので注意！
    if(! getIs1ByteChar(inputStr.charCodeAt(iIndex))){
      return false;
    }
  }

  return true;
}

//--
//    (escape(theChar).length >= 4)//この方法は半角カナ「カ」が6で通ってしまうのでこちらが正しい
//    半角検出
function getIs1ByteChar(uniCode10)
{
  if(uniCode10 <= 127){//半角の英数記号
    return true;
  }

  if(uniCode10 == 165){//半角の円記号
    return true;
  }

  if(uniCode10 == 8254){//半角のチルダ
    return true;
  }

  if(   (uniCode10 >= 65377)
    &&  (uniCode10 <= 65439)
            ){//半角のカタカナ
    return true;
  }


  return false;
}

//文字種妥当性チェック v1.0.0 S.Sagiya
function isValidNumAlphaNoSymbolChar(theStr)
{
  var theCnt = theStr.length;
  for(var charIndex = 0;charIndex < theCnt ;charIndex++){
    if(kAvail1ByteAlphaNumCharStr.indexOf(theStr.charAt(charIndex)) == -1){
      return false;
      break;
    }
  }

  return true;
}

//文字種妥当性チェック v1.0.0 S.Sagiya
function isValidNumAlphaChar(inputStr)
{
  var kIBadPatStr = /\W+/;
  if (isEmptyOrOnlySpaceMB(inputStr)){
    return false;
  }

  if (inputStr.match(kIBadPatStr)){//不正パターンに一致
    return false;
  }

  return true;
}

//全角カナのみチェック v1.0.0 S.Sagiya
function getIs2ByteKataKanaOnly(theStr)
{
  var theCnt = theStr.length;
  for(var charIndex = 0;charIndex < theCnt ;charIndex++){
    if(kAvail2ByteKataStr.indexOf(theStr.charAt(charIndex)) == -1){
      return false;
      break;
    }
  }

  return true;
}

//半角カナのみチェック v1.0.0 S.Sagiya
function getIs1ByteKataKanaOnly(theStr)
{
  var theCnt = theStr.length;
  for(var charIndex = 0;charIndex < theCnt ;charIndex++){
    if(kAvail1ByteKataStr.indexOf(theStr.charAt(charIndex)) == -1){
      return false;
      break;
    }
  }

  return true;
}

//一部英数記号を含む全角カナのみチェック v1.0.0 S.Sagiya
function getIsExtra2ByteKataKanaOnly(theStr)
{
  var theCnt = theStr.length;
  var extraZenKanaStr = kAvail2ByteKataStr + kExtraAvail2ByteNumCharStr + k2ByteSpace;
  for(var charIndex = 0;charIndex < theCnt ;charIndex++){
    if(extraZenKanaStr.indexOf(theStr.charAt(charIndex)) == -1){
      return false;
      break;
    }
  }

  return true;
}

//一部英数記号を含む半・全角カナのみチェック v1.0.0 S.Sagiya
function getIsExtraAnyByteKataKanaOnly(theStr)
{
  var theCnt = theStr.length;
  var extraAnyKanaStr = kAvail2ByteKataStr + kExtraAvail2ByteNumCharStr + k2ByteSpace;
  extraAnyKanaStr += kAvail1ByteKataStr + kExtraAvail1ByteNumCharStr;
  for(var charIndex = 0;charIndex < theCnt ;charIndex++){
    if(extraAnyKanaStr.indexOf(theStr.charAt(charIndex)) == -1){
      return false;
      break;
    }
  }

  return true;
}

//文字が全角半角指定したものだけチェック v1.0.0 S.Sagiya
function getIsSameByteCharOnly(theStr,bIs2Byte,bIsDiffByteSpaceAvail)//異角スペースを許可
{
  var theCnt = theStr.length;
  for(var charIndex = 0;charIndex < theCnt ;charIndex++){
    var theChar = theStr.charCodeAt(charIndex);
    if(! getIs1ByteChar(theChar)){
      if(! bIs2Byte){
        if(! bIsDiffByteSpaceAvail){
          return false;
          break;
        }
        if (theChar != (k2ByteSpace).charCodeAt(0)){
          return false;
          break;
        }
      }
    }
    else{
      if(bIs2Byte){
        if(! bIsDiffByteSpaceAvail){
          return false;
          break;
        }
        if (theChar != (k1ByteSpace).charCodeAt(0)){
          return false;
          break;
        }
      }
    }
  }

  return true;
}

//電話番号妥当性チェック v1.0.0 S.Sagiya
//0～9とハイフンのみ,数字のみ可,ハイフンの連続・終始不可,ハイフン２個まで
//桁数不問
function isValidPhoneChar(inputStr)
{
  var kValidPatStr = /^(\d+-?)?\d+-?\d+$/
  if (isEmptyOrOnlySpaceMB(inputStr)){
    return false;
  }

  if (! inputStr.match(kValidPatStr)){
    return false;
  }

  return true;
}

//整数・小数値妥当性チェック v1.0.0 S.Sagiya
//0～9とピリオドのみ,数字のみ可,ピリオドの連続・終始不可,ピリオド１個まで
//桁数不問
function isValidFloatChar(inputStr)
{
  var kValidPatStr = /^(\d+.?)?\d+$/
  if (isEmptyOrOnlySpaceMB(inputStr)){
    return false;
  }

  if (! inputStr.match(kValidPatStr)){
    return false;
  }

  return true;
}

//〒番号妥当性チェック v1.0.0 S.Sagiya
//0～9とハイフンのみ,数字のみ可,ハイフンの連続・終始不可,ハイフン１個まで
//桁数不問
function isValidZipChar(inputStr)
{
  var kValidPatStr = /^(\d+-?)?\d+$/
  if (isEmptyOrOnlySpaceMB(inputStr)){
    return false;
  }

  if (! inputStr.match(kValidPatStr)){
    return false;
  }

  return true;
}

//文字種妥当性チェック v1.0.0 S.Sagiya
function isValidNumChar(inputStr)
{
  var kValidPatStr = /^\d+$/;
  if (isEmptyOrOnlySpaceMB(inputStr)){
    return false;
  }

  if (! inputStr.match(kValidPatStr)){
    return false;
  }

  return true;
}

function getSafeTimeObj(inputStr)
{
  /* safari not avial date('YYYY/MM/DD') (avail only 'jul 31 2004') cf. Date.parse is same
  var testDate = new Date(inputStr);
  */
  //--safari not avial date('YYYY/MM/DD') (avail only 'jul 31 2004') cf. Date.parse is samevar testDate = new Date();
  var wkDate = new Date(/**/);
  var tempDay = wkDate.getDate();
  wkDate.setDate(15);//セット途中の桁上がり回避
  wkDate.setMinutes(0);//セット途中の桁上がり回避
  wkDate.setHours(parseInt(inputStr.split(':')[0],10));
  wkDate.setMinutes(parseInt(inputStr.split(':')[1],10));
  wkDate.setDate(tempDay);//セット途中の桁上がり回避

  return wkDate;
}

function getSafeDateObj(inputStr)
{
  //--safari not avial date('YYYY/MM/DD') (avail only 'jul 31 2004') cf. Date.parse is samevar testDate = new Date();
  //var wkDate = new Date(inputStr);
  var wkDate = new Date(/**/);
  wkDate.setMonth(6);//年月日セット途中の桁上がり回避
  wkDate.setFullYear(parseInt(inputStr.split('/')[0],10));
  wkDate.setDate(15);//年月日セット途中の桁上がり回避
  wkDate.setMonth(parseInt(inputStr.split('/')[1],10) - 1);
  wkDate.setDate(parseInt(inputStr.split('/')[2],10));

  return wkDate;
}

//HH:MMフォーマットチェック v1.0.0 S.Sagiya
// 7:01 12:02 07:09
function isValidHHMMColonChar(inputStr)
{
  var kValidPatStr = /^\d{1,2}\:\d{2}$/;
  if (isEmptyOrOnlySpaceMB(inputStr)){
    return false;
  }

  if (! inputStr.match(kValidPatStr,inputStr)){
    return false;
  }

  return true;
}

//時間値チェック v1.0.0 S.Sagiya
//入力は正しいHH:MMのフォーマットであること
//dateオブジェクトの自動繰り上がりで不正値を検査(ex.25:61)
function isValidHHMMColonTimeBounds(inputStr)
{
  /*
  if(getIsSafari()){
    return safari_isValidHHMMColonTimeBounds(inputStr);
  }
  */

  var testDate = getSafeTimeObj(inputStr);
  if (testDate.getHours()   != inputStr.split(':')[0]){
    return false;
  }
  if (testDate.getMinutes() != inputStr.split(':')[1]){
    return false;
  }

  return true;
}

//時間期間チェック v1.0.0 S.Sagiya
//入力は正しいHH:MMのフォーマットであること
function isValidHHMMColonTimeFromTo(fromStr,toStr)
{
  /*
  if(getIsSafari()){
    return safari_isValidHHMMColonTimeFromTo(fromStr,toStr);
  }
  */

  var fromDate = getSafeTimeObj(fromStr);
  var toDate = getSafeTimeObj(toStr);
  if (Date.UTC(fromDate.getFullYear(),fromDate.getMonth(),fromDate.getDate(),fromDate.getHours(),fromDate.getMinutes(),0) > Date.UTC(toDate.getFullYear(),toDate.getMonth(),toDate.getDate(),toDate.getHours(),toDate.getMinutes(),0)){
    return false;
  }

  return true;
}

//YYYY/MM/DDフォーマットチェック v1.0.0 S.Sagiya
function isValidYYYYMMDDSlashedChar(inputStr)
{
  var kValidPatStr = /^\d{4}\/\d{2}\/\d{2}$/;
  if (isEmptyOrOnlySpaceMB(inputStr)){
    return false;
  }

  if (! inputStr.match(kValidPatStr,inputStr)){
    return false;
  }

  return true;
}

//日付値チェック v1.0.0 S.Sagiya
//入力は正しいYYYY/MM/DDのフォーマットであること
//dateオブジェクトの自動繰り上がりで不正値を検査(ex.2003/51/44)
function isValidYYYYMMDDSlashedDateBounds(inputStr)
{
  /*
  if(getIsSafari()){
    return safari_isValidYYYYMMDDSlashedDateBounds(inputStr);
  }
  */

  var testDate = getSafeDateObj(inputStr);//safari not avial date('YYYY/MM/DD') (avail only 'jul 31 2004') cf. Date.parse is same

  if (testDate.getFullYear() != inputStr.split('/')[0]){
    return false;
  }
  if ((testDate.getMonth() + 1) != inputStr.split('/')[1]){
    return false;
  }
  if (testDate.getDate() != inputStr.split('/')[2]){
    return false;
  }

  return true;
}

//日付期間チェック v1.0.0 S.Sagiya
//入力は正しいYYYY/MM/DDのフォーマットであること
function isValidYYYYMMDDSlashedDateFromTo(fromStr,toStr)
{
  /*
  if(getIsSafari()){
    return safari_isValidYYYYMMDDSlashedDateFromTo(fromStr,toStr);
  }
  */

  //--safari not avial date('YYYY/MM/DD') (avail only 'jul 31 2004') cf. Date.parse is samevar testDate = new Date();
  var fromDate = getSafeDateObj(fromStr);//--safari..
  var toDate = getSafeDateObj(toStr);//--safari..
  if (Date.UTC(fromDate.getFullYear(),fromDate.getMonth(),fromDate.getDate(),0,0,0) > Date.UTC(toDate.getFullYear(),toDate.getMonth(),toDate.getDate(),0,0,0)){
    return false;
  }

  return true;
}

//２つの日付期間の独立チェック v1.0.0 S.Sagiya
//入力は正しいYYYY/MM/DDのフォーマットであること
//セット内ではfromtoの順序が妥当であること
function isValidYYYYMMDDSlashedDateUniquePeriod(fromStr,toStr,fromStr2,toStr2)
{
  /*
  if(getIsSafari()){
    return safari_isValidYYYYMMDDSlashedDateUniquePeriod(fromStr,toStr,fromStr2,toStr2);
  }
  */

  //--safari not avial date('YYYY/MM/DD') (avail only 'jul 31 2004') cf. Date.parse is samevar testDate = new Date();
  var fromDate = getSafeDateObj(fromStr);
  var toDate = getSafeDateObj(toStr);
  var fromDate2 = getSafeDateObj(fromStr2);
  var toDate2 = getSafeDateObj(toStr2);
  var fromUTC  = Date.UTC(fromDate.getFullYear() ,fromDate.getMonth() ,fromDate.getDate(),0,0,0);
  var toUTC    = Date.UTC(toDate.getFullYear() ,toDate.getMonth() ,toDate.getDate(),0,0,0);
  var fromUTC2 = Date.UTC(fromDate2.getFullYear(),fromDate2.getMonth(),fromDate2.getDate(),0,0,0);
  var toUTC2   = Date.UTC(toDate2.getFullYear(),toDate2.getMonth(),toDate2.getDate(),0,0,0);
  if ( (fromUTC === fromUTC2) || (toUTC === toUTC2)  || (toUTC === fromUTC2) || (toUTC2 === fromUTC)){
    return false;
  }
  if ( (fromUTC < fromUTC2) && (fromUTC2 < toUTC) ){
    return false;
  }
  if ( (fromUTC2 < fromUTC) && (fromUTC < toUTC2) ){
    return false;
  }

  return true;
}

//checkboxグループの現在の選択値を取得 v1.0.0 S.Sagiya
// 引数は妥当な値であること
function getCBGrpValue(theCBGrpObj)
{
  return getRadioGrpValue(theCBGrpObj);
}

//ラジオボタングループの現在の選択値を取得 v1.0.0 S.Sagiya
// 引数は妥当な値であること
function getRadioGrpValue(theRadioGrpObj)
{
  var theValue = null;
  if(! getIsObjHasArray(theRadioGrpObj)){//１個のときは配列でこない
    if (theRadioGrpObj.checked){
      theValue = theRadioGrpObj.value;
      return theValue;
    }
    else{
      return theValue;
    }
  }
  for(radioIndex = 0;radioIndex < theRadioGrpObj.length;radioIndex++){
    if (theRadioGrpObj[radioIndex].checked){
      theValue = theRadioGrpObj[radioIndex].value;
      break;
    }
  }

  return theValue;
}

//ラジオボタングループの指定値を持つインデックス取得 v1.0.0 S.Sagiya
// 引数は妥当な値であること
function getTheValueRadioIndex(theRadioGrpObj,theValue)
{
  var theIndex = null;
  if(! getIsObjHasArray(theRadioGrpObj)){//１個のときは配列でこない
    if (theRadioGrpObj.value == theValue){
      theIndex = 0;
      return theIndex;
    }
    else{
      return theIndex;
    }
  }
  for(radioIndex = 0;radioIndex < theRadioGrpObj.length;radioIndex++){
    if (theValue == theRadioGrpObj[radioIndex].value){

      theIndex = radioIndex;
      break;
    }

  }

  return theIndex;
}

// ラジオボタングループの最大インデックス取得 v1.0.0 S.Sagiya
// 引数は妥当な値であること
function getMaxRadioIndex(theRadioGrpObj)
{
  var theIndex = null;
  if(! getIsObjHasArray(theRadioGrpObj)){//１個のときは配列でこない
    theIndex = 0;
    return theIndex;
  }

  return (theRadioGrpObj.length - 1);
}

//メニューの指定ラベルを持つインデックス取得 v1.0.0 S.Sagiya
// 引数は妥当な値であること
function getTheTextMenuIndex(theMenuObj,theValue)
{
  var theIndex = null;
  if(! getIsObjHasArray(theMenuObj)){//１個のときは配列でこない
    if (theMenuObj.text == theText){
      theIndex = 0;
      return theIndex;
    }
    else{
      return theIndex;
    }
  }
  for(menuIndex = 0;menuIndex < theMenuObj.length;menuIndex++){
    if (theValue == theMenuObj[menuIndex].text){
      theIndex = menuIndex;
      break;
    }
  }

  return theIndex;
}

// ラジオボタン・メニューが配列（選択肢複数）かどうか v1.0.0 S.Sagiya
// 引数は妥当な値であること
function getIsObjHasArray(theObj)
{
  if(isNaN(theObj.length) || (isNaN(theObj.length) === void(0))){//１個のときは配列でこない
  //if(isNaN(theObj.length)){//１個のときは配列でこない
    return false;
  }
  else{
		if(!getIsValidObj(theObj[0])){//１個のときは配列でこない
			return false;
		}
    return true;
  }
}

//前ゼロ等指定桁数の前置文字付文字列生成 v1.0.0 S.Sagiya
function getTheLenPrefixStr(srcStr,fillChar,theLen)
{
  var fillStr = fillChar;
  var theStr = srcStr;
  for(var theIndex = 1;theIndex <= theLen;theIndex++){
    fillStr += fillChar;
  }
  theStr = '' + fillStr + theStr;

  return theStr.slice((-1 * theLen),theStr.length)
}

//---=============
//-------------------------------------------
function doFormCheck(formName)
{
  var errMsg = '';
  var itemCnt = gFieldInfoArray.length;
  for(theIndex = 0;theIndex < itemCnt;theIndex ++){
    errMsg = doOneFormFieldCheck(formName,theIndex);
    if (errMsg != '') {
      alert(errMsg);
      return false;// do not continue check
    }
  }

  return true;
}

function doTheFieldFormCheck(formName,fieldName,bIsUseAlert)
{
  var errMsg = '';
  var fieldIndex = arrayPropIndexOf(gFieldInfoArray,'Name',fieldName);
  if (fieldIndex == -1) {
    return false;
  }
  errMsg = doOneFormFieldCheck(formName,fieldIndex);
  if (errMsg != '') {
    if (bIsUseAlert){
      alert(errMsg);
    }
    return false;// do not continue check
  }

  return true;
}

function doOneFormFieldCheck(formName,theIndex)
{
  var bIsOK = true;
  var errMsg = '';

	var theObj = eval('document.' + formName + '.' + gFieldInfoArray[theIndex].Name);
	if(!getIsValidObj(theObj)){
    return '';// no check
	}
  if (! getIsNeedCheckByRefField(formName,theIndex)) {
    return '';// no check
  }
  // input required check
  if (gFieldInfoArray[theIndex].bReqText) {
    errMsg = gFieldInfoArray[theIndex].MsgTxt + kErrMsgSuffix_ReqTxt;
    bIsOK = checkRequiredText(formName,theIndex);
  }
  else{
    if (gFieldInfoArray[theIndex].bRadioSel) {
      errMsg = gFieldInfoArray[theIndex].MsgTxt + kErrMsgSuffix_ReqSel;
      bIsOK = checkRequiredRadioSel(formName,theIndex);
    }
    else{
			var bReqireCB = false;
			if(getIsValidObj(gFieldInfoArray[theIndex].bCBSel)){
				if (gFieldInfoArray[theIndex].bCBSel) {
					bReqireCB = true;
				}
			}
			if (bReqireCB) {
				errMsg = gFieldInfoArray[theIndex].MsgTxt + kErrMsgSuffix_ReqSel;
				bIsOK = checkRequiredCBSel(formName,theIndex);
			}
			else{
				var bReqireAnyCBGrpCB = false;
				if(getIsValidObj(gFieldInfoArray[theIndex].bAnyCBGrpSel)){
					if (gFieldInfoArray[theIndex].bAnyCBGrpSel.length) {
						bReqireAnyCBGrpCB = true;
					}
				}
				if (bReqireAnyCBGrpCB) {
					errMsg = gFieldInfoArray[theIndex].MsgTxt + kErrMsgSuffix_ReqSel;
					bIsOK = checkRequiredAnyCBGrpSel(formName,theIndex);
				}
				else{
					if (gFieldInfoArray[theIndex].bSelectNZ) {
						errMsg = gFieldInfoArray[theIndex].MsgTxt + kErrMsgSuffix_ReqSel;
						bIsOK = checkRequiredSelectNZ(formName,theIndex);
					}
				}
			}
	  }
  }
  if (! bIsOK){
    return errMsg;// do not continue check
  }

  // value check
  //length
  if (    (gFieldInfoArray[theIndex].bReqMaxLen)
    ||    (gFieldInfoArray[theIndex].bReqMinLen)
    ||    (gFieldInfoArray[theIndex].bSpecialReqMinLen)
        ) {
    errMsg = checkTextLength(formName,theIndex);
    if (errMsg !== '') {
      return errMsg;// do not continue check
    }
  }

  // char type check
  var theStr = mbTrim(eval('document.' + formName + '.' + gFieldInfoArray[theIndex].Name).value);
  if (! isEmptyOrOnlySpaceMB(theStr)) {
    if (gFieldInfoArray[theIndex].checkCharType != ''){
      //switch(gFieldInfoArray[theIndex].checkCharType){
      switch(arrayIndexOf(kReqCharTypeArray,gFieldInfoArray[theIndex].checkCharType)){
        case (0)://kReqCharTypeHanNum
                            if(getIsCheckOption2ByteNumAvail(formName,theIndex)){
                              bIsOK = getIsCustomValid2ByteNumChar(theStr,false);//NOT avail Hyphen
                              if (bIsOK){
                                theStr = convZen2HanNumPeriodHyphenStr(theStr);
                              }
                            }
                            if (bIsOK){
                              bIsOK = isValidNumChar(theStr);
                            }
                            break;
        case (1)://kReqCharTypeHanFloatNum
                            if(getIsCheckOption2ByteNumAvail(formName,theIndex)){
                              bIsOK = getIsValid2ByteFloatNumChar(theStr);
                              if (bIsOK){
                                theStr = convZen2HanNumPeriodHyphenStr(theStr);
                              }
                            }
                            if (bIsOK){
                              bIsOK = isValidFloatChar(theStr);
                            }
                            break;
				case (2)://kReqCharTypeHanChar
                            bIsOK = isValidNumAlphaChar(theStr);
                            break;
        case (3)://kReqCharTypeZenChar
                            bIs2Byte = true;
                            bIsDiffByteSpaceAvail = false;
                            bIsOK = getIsSameByteCharOnly(theStr,bIs2Byte,bIsDiffByteSpaceAvail);
                            break;
        case (4)://kReqCharTypeHanKataKana
                            bIsOK = getIs1ByteKataKanaOnly(theStr);
                            break;
        case (5)://kReqCharTypeZenKataKana
                            bIsOK = getIs2ByteKataKanaOnly(theStr);
                            break;
        case (6)://kReqCharTypeZenExtraKataKana
        					//半角スペースは全角スペースに変換しておく
        					theStr = theStr.replace(/\s/g,"　");
                            bIsOK = getIsExtra2ByteKataKanaOnly(theStr);
                            break;
        case (7)://kReqCharTypeAnyExtraKataKana
        					//半角スペースは全角スペースに変換しておく
        					theStr = theStr.replace(/\s/g,"　");
                            bIsOK = getIsExtraAnyByteKataKanaOnly(theStr);
                            break;
        case (8)://kReqCharTypeHanPhoneNum
                            if(getIsCheckOption2ByteNumAvail(formName,theIndex)){
                              bIsOK = getIsCustomValid2ByteNumChar(theStr,true);//avail Hyphen
                              if (bIsOK){
                                theStr = convZen2HanNumPeriodHyphenStr(theStr);
                              }
                            }
                            if (bIsOK){
                              bIsOK = isValidPhoneChar(theStr);
                            }
                            break;
        case (9)://kReqCharTypeHanZipNum
                            if(getIsCheckOption2ByteNumAvail(formName,theIndex)){
                              bIsOK = getIsCustomValid2ByteNumChar(theStr,true);//avail Hyphen
                              if (bIsOK){
                                theStr = convZen2HanNumPeriodHyphenStr(theStr);
                              }
                            }
                            if (bIsOK){
                              bIsOK = isValidZipChar(theStr);
                            }
                            break;
        case (10)://kReqCharTypeEmailChar
                            bIsOK = isValidEmailAddr(theStr);
                            break;
        case (11)://kReqCharTypeZenMultiLineChar
                            bIs2Byte = true;
                            bIsDiffByteSpaceAvail = false;
                            theStr = trimCR(theStr);
                            bIsOK = getIsSameByteCharOnly(theStr,bIs2Byte,bIsDiffByteSpaceAvail);
                            break;
        case (12)://kReqCharTypeAnyExtraAvail1ByteNumChar
                            bIs2Byte = false;
                            bIsDiffByteSpaceAvail = false;
                            bIsOK = getIsSameByteCharOnly(theStr,bIs2Byte,bIsDiffByteSpaceAvail);
                            break;
				case (13)://kReqCharTypeHanAlphaNum
                            bIsOK = isValidNumAlphaNoSymbolChar(theStr);
                            break;
        default:
                            break;
      }
    }
  }
  if (! bIsOK){
    var typeIndex = arrayIndexOf(kReqCharTypeArray,gFieldInfoArray[theIndex].checkCharType);
    errMsg = gFieldInfoArray[theIndex].MsgTxt + kReqCharTypeMsgArray[typeIndex];
    return errMsg;// do not continue check
  }

  return '';
}

function checkRequiredRadioSel(formName,theIndex)
{
  var bIsOK = true;

  var theElem = eval('document.' + formName + '.' + gFieldInfoArray[theIndex].Name);
  if (! getRadioGrpValue(theElem)){
    bIsOK = false;
  }

  return bIsOK;
}

function checkRequiredCBSel(formName,theIndex)
{
  var bIsOK = true;

  //var theElem = eval('document.' + formName + '.elements["' + gFieldInfoArray[theIndex].Name + '"]');
  var theElem = eval('document.' + formName + '.' + gFieldInfoArray[theIndex].Name);
  if (! getCBGrpValue(theElem)){
    bIsOK = false;
  }

  return bIsOK;
}

function checkRequiredAnyCBGrpSel(formName,theIndex)
{
  var bIsOK = false;
	var nameArr = gFieldInfoArray[theIndex].bAnyCBGrpSel;
	bIsOK = checkRequiredTheArrAnyCBGrpSel(formName,theIndex,nameArr);
	
  return bIsOK;
}

function checkRequiredTheArrAnyCBGrpSel(formName,theIndex,nameArr)
{
  var bIsOK = false;
	var theElem;
	
	var cnt = nameArr.length;
	for(refIndex = 0;refIndex < cnt;refIndex++){
		theElem = eval('document.' + formName + '.' + nameArr[refIndex]);
		if (theElem.checked){
			bIsOK = true;
			break;
		}
	}
	
  return bIsOK;
}

function checkRequiredSelectNZ(formName,theIndex)
{
  var bIsOK = true;
  var theElem = eval('document.' + formName + '.' + gFieldInfoArray[theIndex].Name);
  if(theElem.selectedIndex < 0){// default(ZERO) or none selected
    bIsOK = false;
  }
  if(			(('' + getTheFormItemValue(formName,gFieldInfoArray[theIndex].Name)) === '0')
			||	(('' + getTheFormItemValue(formName,gFieldInfoArray[theIndex].Name)) === '')
			||	(getTheFormItemValue(formName,gFieldInfoArray[theIndex].Name).length === 0)
			||	(getTheFormItemValue(formName,gFieldInfoArray[theIndex].Name).length === null)
			||	('' + getTheFormItemValue(formName,gFieldInfoArray[theIndex].Name) === 'null')
			){// default(ZERO) or none selected
    bIsOK = false;
  }
//alert('['+(getTheFormItemValue(formName,gFieldInfoArray[theIndex].Name) == '')+']');
  return bIsOK;
}

//-------------------------------------------
function getIsCheckOption2ByteNumAvail(formName,theIndex)
{
  var optList = gFieldInfoArray[theIndex].optionList;
  if (! optList.length) {
    return false;
  }

  if (arrayIndexOf(optList,kCharTypeOption2ByteNumAvail) == -1){
    return false;
  }

  return true;//always need
}

function getIsNeedCheckByRefField(formName,theIndex)
{
  var refName = gFieldInfoArray[theIndex].ReqText_RefFld;
  if (refName !== '') {
    if(getIsCheckByRefFieldFill(formName,theIndex)){
      if (getIsNeedCheckByRefFieldFill(true,formName,theIndex)){
        return true;
      }
      else{
        return false;
      }
    }
    else{
      if (getIsNeedCheckByRefFieldValue(formName,theIndex)){
        return true;
      }
    }
    return false;
  }

  return true;//always need
}

function getIsNeedCheckByRefFieldFill(bIsRefFill,formName,theIndex)
{
  var refName = gFieldInfoArray[theIndex].ReqText_RefFld;
  if (! bIsRefFill) {
    return false;
  }
  if (refName !== '') {
    refValue = getTheFormItemValue(formName,refName);
    if (! isEmptyOrOnlySpaceMB(refValue)) {
      return true;
    }
  }

  return false;
}

function getIsCheckByRefFieldFill(formName,theIndex)
{
  var refName = gFieldInfoArray[theIndex].ReqText_RefFld;
  if (refName !== '') {
    if (gFieldInfoArray[theIndex].bReqText_RefFill) {
      return true;
    }
  }

  return false;
}

function getIsNeedCheckByRefFieldValue(formName,theIndex)
{
  var refName = gFieldInfoArray[theIndex].ReqText_RefFld;
  var refValue = '';
  if (refName !== '') {
    refValue = getTheFormItemValue(formName,refName);
    if (refValue == gFieldInfoArray[theIndex].ReqText_RefVal) {
      return true;
    }
    else{
    }
  }

  return false;
}

function getTheFormItemValue(formName,theName)
{
  var theElem = eval('document.' + formName + '.' + theName);
  var theType = getTheFormItemType(formName,theName);
  if (getIsObjHasArray(theElem)){
    if (theType == 'radio'){
      theValue = getRadioGrpValue(theElem);
    }
    else{
      if (theType == 'select-one'){
        theValue = theElem[theElem.selectedIndex].value;
      }
      else{
				if (theType == 'checkbox'){
					theValue = ((theElem.checked)?mbTrim(theElem.value):'0');
				}
				else{
					theValue = mbTrim(theElem.value);
				}
      }
    }
  }
  else{
		if (theType == 'checkbox'){
			theValue = ((theElem.checked)?mbTrim(theElem.value):'0');
		}
		else{
			theValue = mbTrim(theElem.value);
		}
  }

  return theValue;
}

function getTheFormItemType(formName,theName)
{
  var theElem = eval('document.' + formName + '.' + theName);
  if (getIsObjHasArray(theElem)){
    theType = theElem[0].type;
  }
  else{
    theType = theElem.type;
  }

  return theType;
}

//-------------------------------------------
function checkRequiredText(formName,theIndex)
{
  var bIsOK = true;
  var theElem = eval('document.' + formName + '.' + gFieldInfoArray[theIndex].Name);
  if (isEmptyOrOnlySpaceMB(theElem.value)) {// empty check only
    bIsOK = false;
  }

  return bIsOK;
}

//-------------------------------------------
function checkTextLength(formName,theIndex)
{
  var bIsOK = true;

  var errMsg = '';
  var theElem = eval('document.' + formName + '.' + gFieldInfoArray[theIndex].Name);
  var minLen = -1;
  var maxLen = -1;
  var bIsMax = true;
//  var strLen = trimCR(theElem.value).length;
  var strLen = theElem.value.length;

  if (gFieldInfoArray[theIndex].bReqMaxLen) {
    maxLen = gFieldInfoArray[theIndex].MaxLength;
    if (strLen > maxLen){
      bIsOK = false;
      bIsMax = true;
    }
  }
  if (gFieldInfoArray[theIndex].bReqMinLen) {
    minLen = gFieldInfoArray[theIndex].MinLength;
    if (strLen < minLen && !isEmptyOrOnlySpaceMB(theElem.value)){
      bIsOK = false;
      bIsMax = false;
    }
  }
  if (gFieldInfoArray[theIndex].bSpecialReqMinLen) {
    minLen = gFieldInfoArray[theIndex].MinLength;
    if (strLen < minLen){
      bIsOK = false;
      bIsMax = false;
    }
  }
  if (! bIsOK) {
    errMsg = gFieldInfoArray[theIndex].MsgTxt + getMinMaxMessage(bIsMax,minLen,maxLen,gFieldInfoArray[theIndex].bSingleByte);
  }

  return errMsg;
}

//-------------------------------------------
function getMinMaxMessage(bIsMax,minLen,maxLen,bIsSingleByte)
{
  var kErrMsgSuffix_ReqMaxLen1 = 'の文字数が長すぎます。';
  var kErrMsgSuffix_ReqMinLen1 = 'の文字数が短かすぎます。';
  var kErrMsgSuffix_SingleByte = '';
  var kErrMsgSuffix_DoubleByte = '全角';
  var kErrMsgSuffix_ReqMaxLen2 = '文字以下にして下さい。';
  var kErrMsgSuffix_ReqMinLen2 = '文字以上にして下さい。';
  var kErrMsgSuffix_ReqMaxMinLen1 = '文字以上';
  var kErrMsgSuffix_ReqMaxMinLen2 = '文字以下にして下さい。';
  var kErrMsgSuffix_ReqMaxMinEqLen = '文字にして下さい。';

  var theStr = '';
  if (bIsSingleByte) {
    var bytePrefix = kErrMsgSuffix_SingleByte;
  }
  else{
    var bytePrefix = kErrMsgSuffix_DoubleByte;
  }
  if (bIsMax) {
    var badTypeMsg = kErrMsgSuffix_ReqMaxLen1;
  }
  else{
    var badTypeMsg = kErrMsgSuffix_ReqMinLen1;
  }
  if ((minLen >= 0) && (maxLen >= 0)){
		if (minLen == maxLen ){
   	 var lengthMsg = minLen + kErrMsgSuffix_ReqMaxMinEqLen;
		}
		else{
   	 var lengthMsg = minLen + kErrMsgSuffix_ReqMaxMinLen1 + maxLen + kErrMsgSuffix_ReqMaxMinLen2;
		}
  }
  else{
    if (minLen >= 0){
      var lengthMsg = minLen + kErrMsgSuffix_ReqMinLen2;
    }
    else{
      if (maxLen >= 0){
        var lengthMsg = maxLen + kErrMsgSuffix_ReqMaxLen2;
      }
      else{
        return theStr;// param invalid
      }
    }
  }

  theStr = badTypeMsg + bytePrefix + lengthMsg;

  return theStr;
}

