// フォームの入力チェック関係
// 引数に何をチェックするか指定する：例）NUM:ラベル=ctrlId1,ラベル=ctrlId2;EMAIL:ラベル=ctrlId1;EMPTY:ラベル=ctrlId1;DATE:ラベル=ctrlId1
function checkInputError(oForm, idPrefix, checkArgs)
{

  var errorArray = new Array();
  var errorControl;
  var validInput = true;
  var checkGroup = checkArgs.split(";");      // ; で分割


  for(i = 0; i < checkGroup.length; i++)
  {   
    var checkItem = checkGroup[i].split(":"); // : で分割
    var checkType = checkItem[0];
    var ctrlIdList = "";
    if (checkItem.length > 1)
    {
      ctrlIdList  = checkItem[1].split(",");  // , で分割
    }

    for(j = 0; j < ctrlIdList.length; j++)
    {
      // ラベルと分ける
      var ctrlItem = ctrlIdList[j].split("=");  // = で分割
      var ctrlLabel = ctrlItem[0];
      var ctrlId = "";
      if (ctrlItem.length > 1)
      {
        ctrlId = ctrlItem[1];
      }
      
      var ctrlError = false;
      // コントロールの検索
      var elementId = ctrlId;
      if (idPrefix != "")
      {
        elementId = idPrefix + "_" + ctrlId;
      }
      oControl = document.getElementById(elementId);
      if (oControl == null)
      {
        // コントロールが見つからなければ何もしない
        continue;
      }
      else
      {       
        // タイプ別に分岐
        if (checkType == "NUM")
        {
          if (isInputErrorNum(oControl))
          {
            ctrlError = true; // エラー発生
            errorArray.push(ctrlLabel + "は数字のみを入力してください。");
          }
        }
        else if (checkType == "EMAIL")
        {
          if(isInputErrorEmail(oControl))
          {
            ctrlError = true; // エラー発生
            errorArray.push(ctrlLabel + "はEメールアドレス形式で入力してください。");
          }
        }
        else if (checkType == "EMPTY")
        {
          if(isInputErrorEmpty(oControl))
          {
            ctrlError = true; // エラー発生
            errorArray.push(ctrlLabel + "が空です。何か入力してください。");
          }
        }
        else if (checkType == "DATE")
        {
          if(isInputErrorDate(oControl))
          {
            ctrlError = true; // エラー発生
            errorArray.push(ctrlLabel + "は日付形式（yyyy/MM/dd）で入力してください。");
          }
        }
        
        // 最初のエラーだけ確保する
        if ((validInput) && (ctrlError))
        {
          validInput = false;   // エラー発生
          errorControl = oControl // エラーの発生したコントロールを確保
        }
      }
    }
  }

  // エラーの表示
  if (validInput == false)
  {
    var errorMsg = "";
    for(x = 0; x < errorArray.length; x++)
    {
      errorMsg += errorArray[x] + "\n";
    }
    alert(errorMsg);
    errorControl.focus();
  }

  return validInput;
}

// コントロールのタイプにしたがって値を取得する
function GetControlValue(oControl)
{
  var ctrlValue = new Array();
  if ((oControl.type == "text") || (oControl.type == "textarea") || (oControl.type == "password"))
  {
    ctrlValue.push(oControl.value);
  }
  else if (oControl.type == "select-one")
  {
    index = oControl.selectedIndex;
    ctrlValue.push(oControl.options[index].value);
  } 
  else if (oControl.type == "radio")
  {
  }
  else if (oControl.type == "checkbox")
  {
  }
  
  return ctrlValue;
}


// 空文字でエラー
function isInputErrorEmpty(oControl)
{
  var err = false;
  
  var valueList = GetControlValue(oControl);
  for(k = 0; k < valueList.length; k++)
  {
    if(valueList[k] == "")
    {
      err = true;
      break;
    }
  }
  return err;
}
// 数字のみか？
function isInputErrorNum(oControl)
{
  var err = false;

  var valueList = GetControlValue(oControl);
  for(k = 0; k < valueList.length; k++)
  {
    if((isNum(valueList[k]) == false) && (valueList[k] != ""))
    {
      err = true;
      break;
    }

  }
  return err;
}

// 入力がEメールか
function isInputErrorEmail(oControl)
{
  var err = false;

  var valueList = GetControlValue(oControl);
  for(k = 0; k < valueList.length; k++)
  {
    if((isEmail(valueList[k]) == false) && (valueList[k] != ""))
    {
      err = true;
      break;
    }
  }

  return err;
}


// 入力が日付か？
function isInputErrorDate(oControl)
{
  var err = false;

  var valueList = GetControlValue(oControl);
  for(k = 0; k < valueList.length; k++)
  {
    if((isDate(valueList[k]) == false) && (valueList[k] != ""))
    {
      err = true;
      break;
    }
  }
  return err;
}

// 文字列チェックルーチン
function isNum(str)
{
  var result = true;
  // 数字以外の文字があったらエラー
  if (str.match(/[^0-9]/i)) {
    result = false;
  }
  return result;
}
function isEmail(str)
{
  var result = false;
  if (str.match(/[a-z0-9\-\+\.\_]+@\w+([-.]\w+)*\.\w+([-.]\w+)*/i)) {
    result = true;
  }
  return result;  
}
function isDate(str)
{
  var result = false;
  if (str.match(/[0-9][0-9][0-9][0-9]\/[0-9]?[0-9]\/[0-9]?[0-9]/i)) {
    result = true;
  }
  return result;
}
function isZip(str)
{
  var result = false;
  if (str.match(/\d{3}(-(\d{4}|\d{2}))?/i)) {
    result = true;
  }
  return result;
}
function isTel(str)
{
  var result = false;
  if (str.match(/(0\d{1,4}-|\(0\d{1,4}\) ?)?\d{1,4}-\d{4}/i)) {
    result = true;
  }
  return result;
}
