<!--
/**
 *******************************************************************************
 *
 * 共通JavaScript関数
 *
 * JavaScript
 *
 * @author    M.INOUE
 * @copyright 2004 Acqures, Inc.
 *
 *******************************************************************************
 */

/**
 *******************************************************************************
 * 入力チェック                                                                *
 *******************************************************************************
 */

/**
 *------------------------------------------------------------------------------
 * 必須入力チェック
 *------------------------------------------------------------------------------
 */
function checkHissu(STR)
{
  if (STR == ""){
    return false;
  }else{
    return true;
  }
}


/**
 *------------------------------------------------------------------------------
 * 全角のみチェック（IEのみ）
 *------------------------------------------------------------------------------
 */
function checkZenkaku(STR)
{
  var i = new Number();
  for (i = 0; i < STR.length;i++){
    var ch = STR.charAt(i);
  if ((ch >= " " && ch <= "~")||(ch >= "｡" && ch <= "ﾟ"))
    return false;
  }
    return true;
}


/**
 *------------------------------------------------------------------------------
 * 半角のみチェック（半角と全角の混在はエラーとする）
 *------------------------------------------------------------------------------
 */
function checkHankaku(STR)
{
  for (i = 0; i < STR.length;i++){
   if ((checkZenkaku(STR.charAt(i)))==true) return false;
  }
   return true;
}


/**
 *------------------------------------------------------------------------------
 * 数字チェック
 *------------------------------------------------------------------------------
 */
function checkNumber(STR)
{
  for (i=0;i<STR.length;i++) {
    if (!parseInt(STR.charAt(i))&&STR.charAt(i)!='0'){
      return false;
    }
  }
  return true;
}


/**
 *------------------------------------------------------------------------------
 * 全角カタカナのみチェック（全角スペースは許可する）
 *------------------------------------------------------------------------------
 */
function checkKatakana(STR)
{
  if (STR.length == 0)
    return false;
    var  naturalNum = new String("　アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンァィゥェォャュョッヴガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポー－・");
    var  i = new Number();
    for (i = 0; i < STR.length; i++) {
  if (naturalNum.indexOf(STR.charAt(i), 0) == -1)
    return false;
  }
    return true;
}


/**
 *------------------------------------------------------------------------------
 * 半角英字のみチェック（半角スペースは許可する）
 *------------------------------------------------------------------------------
 */
function checkEiji(STR)
{
  if (STR.length == 0)
    return false;
    var  naturalNum = new String("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz");
    var  i = new Number();
    for (i = 0; i < STR.length; i++) {
  if (naturalNum.indexOf(STR.charAt(i), 0) == -1)
    return false;
  }
    return true;
}


/**
 *------------------------------------------------------------------------------
 * TEL番号／FAX番号チェック
 *------------------------------------------------------------------------------
 *
 * 半角数字チェック。1バイト目が「0」か。２個の「-」を含むか。11桁以上であるか
 */
function checkTelno(STR)
{
  if (STR.length < 11 || STR.charAt(0)!="0"){
    return false;
  }
    flg = 0;
    var  naturalNum = new String("1234567890-");
    var  i = new Number();
  for (i = 0; i < STR.length; i++) {
    if (naturalNum.indexOf(STR.charAt(i),0)=="10"){
      flg++;
    }
    if (naturalNum.indexOf(STR.charAt(i), 0) == -1){
      return false;
    }
  }
  if(flg!=2){
    return false;
  }
    return true;
}


/**
 *------------------------------------------------------------------------------
 * 文字数チェック
 *------------------------------------------------------------------------------
 *
 * ketaに渡した文字数に完全に一致かチェック。STRに何も入っていなければTRUEを返す。
 */
function checkLength(STR,keta)
{
  if (STR.length > 0){
    if (STR.length == keta){
      return true;
    }else{
      return false;
    }
  }
  return true;
}


/**
 *------------------------------------------------------------------------------
 * 文字数チェック（範囲チェック）
 *------------------------------------------------------------------------------
 *
 * keta_min、keta_maxに渡した文字数内の桁数かチェック。STRに何も入っていなければTRUEを返す。
 */
function checkRangeLength(STR,keta_min,keta_max)
{
  if (STR.length > 0){
    if (STR.length < keta_min) {
      return false;
    } else if (STR.length > keta_max) {
      return false;
    }
  }
  return true;
}


/**
 *------------------------------------------------------------------------------
 * TEXTAREA文字数チェック
 *------------------------------------------------------------------------------
 *
 * チェックするTEXTAREAに onKeyup イベントで実行するように追記する。
 *   例）
 *   <textarea name="AREA1" cols="40" rows="10" onKeyup="checkLengthTextarea(this, 10)"></textarea>
 * alert は必須となる。alert を入れないと、全角入力時に文字が消えてしまう現象が発生する。
 */
function checkLengthTextarea(target, keta)
{
  if (target.value.length > keta ) {
    alert("入力が "+keta+" 文字を越えています");
    target.value= target.value.substr(0, keta);
  }
}


/**
 *------------------------------------------------------------------------------
 * radioボタン必須チェック
 *------------------------------------------------------------------------------
 */
function checkHissuRadio(form_name, ele_name)
{

  // チェックフラグのクリア
  var wk_check_flag = false;

  if (document.forms[form_name][ele_name].length) {

    // 選択肢が複数ある場合
    var i;

    for (i=0; i<document.forms[form_name][ele_name].length; i++) {
      if (document.forms[form_name][ele_name][i].checked) {
        wk_check_flag = true;
        break;
      }
    }
  }
  else {
    
    // 選択肢が1つの場合 
    if (document.forms[form_name][ele_name].checked) {
      wk_check_flag = true;
    }
  }

  return wk_check_flag;
}


/**
 *------------------------------------------------------------------------------
 * checkbox必須チェック
 *------------------------------------------------------------------------------
 *
 * <FORM>内のcheckbox定義にて、checkboxを配列（例：chk[] 等）で定義している場合
 *
 * @param form_name str フォーム名
 * @param ele_name  str checkboxの名前
 */
function checkHissuCheckbox(form_name, ele_name)
{

  // チェックフラグのクリア
  var wk_check_flag = false;

  // 要素名の設定
  var wk_ele_name = ele_name + "[]";

  if (document.forms[form_name].elements[wk_ele_name].length) {
    // 選択肢が複数ある場合
    var i;

    for (i=0; i<document.forms[form_name].elements[wk_ele_name].length; i++) {
      if (document.forms[form_name].elements[wk_ele_name][i].checked) {
        wk_check_flag = true;
        break;
      }
    }
  }
  else {
    
    // 選択肢が1つの場合 
    if (document.forms[form_name][wk_ele_name].checked) {
      wk_check_flag = true;
    }
  }

  return wk_check_flag;
}


/**
 *------------------------------------------------------------------------------
 * radioボタンフォーカスセット
 *------------------------------------------------------------------------------
 *
 * 指定されたradioボタンにフォーカスを当てる。
 * radioボタンが複数ある場合は、一番左側にフォーカスを当てる。
 */
function setFocusRadio(form_name, ele_name)
{

  // 選択肢が一つか、複数かでフォーカスの当て方を変える
  if (document.forms[form_name].elements[ele_name].length) {

    // 複数の場合
    document.forms[form_name].elements[ele_name][0].focus();
  }
  else {

    // 一つの場合
    document.forms[form_name].elements[ele_name].focus();
  }
}


/**
 *------------------------------------------------------------------------------
 * checkboxボタンフォーカスセット
 *------------------------------------------------------------------------------
 *
 * 指定されたcheckboxボタンにフォーカスを当てる。
 * checkboxボタンが複数ある場合は、一番左側にフォーカスを当てる。
 */
function setFocusCheckbox(form_name, ele_name)
{

  // 要素名の設定
  var wk_ele_name = ele_name + "[]";

  // 選択肢が一つか、複数かでフォーカスの当て方を変える
  if (document.forms[form_name].elements[wk_ele_name].length) {

    // 複数の場合
    document.forms[form_name].elements[wk_ele_name][0].focus();
  }
  else {

    // 一つの場合
    document.forms[form_name].elements[wk_ele_name].focus();
  }
}


/**
 *******************************************************************************
 * 日付関連                                                                    *
 *******************************************************************************
 */

/**
 *------------------------------------------------------------------------------
 * 日付のフォーマットチェック
 *------------------------------------------------------------------------------
 *
 * dateStrに渡した文字が日付として正しいかチェック。区切りなしのYYYYMMDDで入力。dateStrに何も入っていなければTRUEを返す。
 */
function checkDateFormat(dateStr)
{
  if (dateStr == "") {
    return true;
  }

  if (dateStr.length != 8) {
    return false;
  }

  //数字タイプチェック
  for (i=0;i<dateStr.length;i++) {
    if (!parseInt(dateStr.charAt(i))&&dateStr.charAt(i)!='0'){
      return false;
    }
  }

  wyear  = dateStr.substr(0,4);
  wmonth = eval(dateStr.substr(4,2));
  wday   = eval(dateStr.substr(6,2));

  if (checkMonth(wmonth)){
  }else{
      return false;
  }

  dd = checkRangeDayMonth(wyear,wmonth);
  if ((wday > dd) || (wday < 1)) {
      return false;
  }
  
  return true;
}


/**
 *------------------------------------------------------------------------------
 * checkDateFormat のサブ関数。日付の範囲チェック
 *------------------------------------------------------------------------------
 */
function checkRangeDayMonth(year,month)
{
  day = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
  if(month==2 && checkLeapyear(year)) return 29;
  return day[month-1];
}


/**
 *------------------------------------------------------------------------------
 * checkDateFormat のサブ関数。うるう年のチェック
 *------------------------------------------------------------------------------
 */
function checkLeapyear(year)
{
  return year%4==0 && (year%100!=0 || year%400==0);
}




/**
 *------------------------------------------------------------------------------
 * checkDateFormat のサブ関数。月の範囲チェック
 *------------------------------------------------------------------------------
 */
function checkMonth(month)
{
  if((month >= 1) && (month <= 12)) return true;
  return false;
}


/**
 *------------------------------------------------------------------------------
 * 時分のフォーマットチェック
 *------------------------------------------------------------------------------
 *
 * timeStrに渡した文字が日付として正しいかチェック。区切りなしのHHMMで入力（24時間表記）。timeStrに何も入っていなければTRUEを返す。
 */
function checkTimeFormat(timeStr)
{

  if (timeStr == "") {
    return true;
  }

  if (timeStr.length != 4) {
    return false;
  }

  //数字タイプチェック
  for (i=0;i<timeStr.length;i++) {
    if (!parseInt(timeStr.charAt(i))&&timeStr.charAt(i)!='0'){
      return false;
    }
  }

  hour   = eval(timeStr.substr(0,2));
  minute = eval(timeStr.substr(2,2));

  if (checkHour(hour)){
  } else {
      return false;
  }
  
  if (checkMinute(minute)){
  } else {
      return false;
  }
  
  return true;
}


/**
 *------------------------------------------------------------------------------
 * checkTimeFormat のサブ関数。時間の範囲チェック
 *------------------------------------------------------------------------------
 */
function checkHour(month)
{
  if ((month >= 0) && (month <= 23)) return true;
  return false;
}


/**
 *------------------------------------------------------------------------------
 * checkTimeFormat のサブ関数。分の範囲チェック
 *------------------------------------------------------------------------------
 */
function checkMinute(month)
{
  if ((month >= 0) && (month <= 59)) return true;
  return false;
}


/**
 *------------------------------------------------------------------------------
 * 現在日時よりも入力された日付が先かをチェックする。フォーマットはYYYYMMDD,HHMM形式とする。
 *------------------------------------------------------------------------------
 *
 * 現在時間はクライアントPCの時間を使用する。
 * 形式チェックは済んでいることを前提とする。
 */
function checkDatetime(dateStr, timeStr)
{
  //現在日時を取得
  var datetimeStr;
  var nowStr;

  var dtNow = new Date;

  var strYear;
  var strMonth;
  var strDate;
  var strHour;
  var strMinutes;

  //年月日時分を取得
  strYear    = dtNow.getYear();
  strMonth   = dtNow.getMonth() + 1;
  strDate    = dtNow.getDate();
  strHour    = dtNow.getHours();
  strMinutes = dtNow.getMinutes();
  
  //2桁に揃えておく
  if (strMonth < 10)  {
    strMonth = "0" + strMonth;
  }

  if (strDate < 10)  {
    strDate = "0" + strDate;
  }

  //2桁に揃えておく
  if (strHour < 10)  {
    strHour = "0" + strHour;
  }

  if (strMinutes < 10)  {
    strMinutes = "0" + strMinutes;
  }
  
  //入力された年月日 時分を連結
  datetimeStr = dateStr+timeStr;

  //現在日時を連結
  nowStr = " "+strYear+strMonth+strDate+strHour+strMinutes;
  nowStr = eval(nowStr.substr(1,14))

  if (datetimeStr > nowStr) {
    return true;
  }
  else {
    return false;
  }
}


/**
 *******************************************************************************
 * ダイヤログ表示                                                              *
 *******************************************************************************
 */

/**
 *------------------------------------------------------------------------------
 * 確認ダイヤログ（ロケーション）
 *------------------------------------------------------------------------------
 */
function confirmLocation(message, location_url)
{
  if (confirm(message)) {
    location.href=location_url;
  }
}


/**
 *------------------------------------------------------------------------------
 * 確認ダイヤログ（削除用に２回確認）（ロケーション）
 *------------------------------------------------------------------------------
 */
function confirmDeleteLocation(message, location_url)
{
  if (confirm(message)) {
    if(confirm("本当に削除しますか？")) {
      location.href=location_url;
    }
  }
}


/**
 *------------------------------------------------------------------------------
 * 確認ダイヤログ（サブミット、フォーム名をパラメータで受け取り）
 *------------------------------------------------------------------------------
 */
function confirmSubmit(message, form_name)
{
  if (confirm(message)) {
    document.forms[form_name].target="_self";
    document.forms[form_name].submit();
  }
  else {
    return false;
  }
}


/**
 *------------------------------------------------------------------------------
 * 全て元に戻す（＝リロード）確認ダイヤログ
 *------------------------------------------------------------------------------
 */
function confirmReload(message)
{
  if (confirm(message)) {
    location.reload();
  }
}


/**
 *******************************************************************************
 * 画像アップロード処理                                                        *
 *******************************************************************************
 */

/**
 *------------------------------------------------------------------------------
 * アップする画像をリアルタイムに反映する。（アップした画像の縮小および、画像の切換と、削除フラグのリセット）
 *------------------------------------------------------------------------------
 *
 * @param str ele_src_name   img_src のエレメント名
 * @param str sSrc           アップされた画像のファイルパス
 * @param int resize_x       リサイズするサイズの横幅（指定サイズがXYともに0ならば縮小処理をバイパスする）
 * @param int resize_y       リサイズするサイズの高さ（指定サイズがXYともに0ならば縮小処理をバイパスする）
 * @param str ele_exist_flag hiddenで設定されたこの画像の存在フラグ
 *
 * @return none
 */
function dispImage(ele_src_name, sSrc, resize_x, resize_y, ele_exist_flag)
{
  var x, y, mx, my;

  a = new Image();

  a.src = sSrc;


  // 読み込めない時に待ち画像を表示する。
  //  a.onerror = function(){
  //    dispImageLoading(ele_src_name);
  //  }

  // 画像読込完了時にリサイズ処理を行う。onloadイベントを待たないと、大きい画像の場合に画像読込が完了せず画像のサイズを取得できない。
  a.onload = function(){
    dispImageResize(ele_src_name, sSrc, resize_x, resize_y, ele_exist_flag);
  }

  // 画像によっては、onloadイベントが発生しないため、保険として二重処理となるが上記と同じ関数を無条件でコールする。
  dispImageResize(ele_src_name, sSrc, resize_x, resize_y, ele_exist_flag);
}


/**
 *------------------------------------------------------------------------------
 * dispImage のサブ関数。縮小処理を行う。（指定サイズがXYともに0ならば縮小処理をバイパスする）
 *------------------------------------------------------------------------------
 */
function dispImageResize(ele_src_name, sSrc, resize_x, resize_y, ele_exist_flag)
{
  var x, y, mx, my;

  a = new Image();
  a.src = sSrc;

  document.all[ele_src_name].src = sSrc;

  x = a.width;
  y = a.height;

  // サイズが指定された場合のみ処理する
  if ((resize_x > 0) && (resize_y > 0)) {

    if (x > y) {
      // X が大きい場合はX座標を基準にリサイズする。
      mx = resize_x;
      my = y / (x / mx);

      // X の長さでリサイズ処理しても、もし Y 座標がリサイズ値をオーバーしていた場合は、縮小した値に対して Y を基準にさらにリサイズの計算を行う。
      if (my > resize_y) {
        wk_y = my;
        my = resize_y;
        mx = mx / (wk_y / my);
      }
    }
    else {
      // Y が大きい場合はY座標を基準にリサイズする。
      my = resize_y;
      mx = x / (y / my);

      // Y の長さでリサイズ処理しても、もし X 座標がリサイズ値をオーバーしていた場合は、縮小した値に対して X を基準にさらにリサイズの計算を行う。
      if (mx > resize_x) {
        wk_x = mx;
        mx = resize_x;
        my = my / (wk_x / mx);
      }
    }
    document.all[ele_src_name].width  = mx;
    document.all[ele_src_name].height = my;

  }
  // サイズが指定されていない場合は、読み込んだ画像そのままのサイズを指定する。
  else {
    document.all[ele_src_name].width  = x;
    document.all[ele_src_name].height = y;
  }

  // 存在フラグを立てる
  document.all[ele_exist_flag].value="1";
}


/**
 *------------------------------------------------------------------------------
 * dispImage のサブ関数。画像が読み込まれるまでの待ち画像を表示する。
 *------------------------------------------------------------------------------
 */
function dispImageLoading(ele_src_name)
{
  document.all[ele_src_name].src = "../img/loading_img.gif";
}


/**
 *------------------------------------------------------------------------------
 * 削除する画像をリアルタイムに反映する。（「画像はありません」への切換と、削除フラグのセット）
 *------------------------------------------------------------------------------
 *
 * @param ele_src_name   str img_srcのエレメント名
 * @param ele_exist_flag str hiddenで設定されたこの画像の存在フラグ
 */
function deleteImage(ele_src_name, ele_exist_flag)
{
  if(confirm('画像を削除しますか？')) {

    // NoImage画像に置きかえる
    document.all[ele_src_name].src    = "../img/no_img.gif";
    document.all[ele_src_name].width  = 100;
    document.all[ele_src_name].height = 30;

    // 存在フラグをクリアする
    document.all[ele_exist_flag].value="0";
  }
}


/**
 *******************************************************************************
 * 業務依存                                                                    *
 *******************************************************************************
 */

/**
 *------------------------------------------------------------------------------
 * 表示順を１から順番に振りなおす。
 *------------------------------------------------------------------------------
 *
 * 画面上の入力フォームに対して無条件に値を入れるため、表示順以外の入力項目があると異常動作するので注意
 */
function renumberHyoujiJun_(message, form_name)
{
  if (confirm(message)) {
    // 初期化
    var wk_jun = 1; // セットする表示順
    var i;          // ループで使用するインデックス


    // フォーム内の入力項目の数だけループする。
    for(i=0;i < document.forms[form_name].length; i++) {

      // input-typeが「text」のものに対して数字をセットする。
      if (document.forms[form_name].elements[i].type == 'text') {
        document.forms[form_name].elements[i].value = wk_jun;
        wk_jun = wk_jun + 1;
      }
    }
  }
}
// -->

