// Javascript ////////////////////////////////////////////
// 定数
var tagNameArr = Array( "InputMail", "InputMail2", "InputPass1", "InputPass2", "InputSites");
var monthDayArr = Array( 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 );

// エラーコード
var error_str = Array(
"",
// メール系
"* メールアドレスを入力してください",
"* アドレスの書式が正しくありません",
"* ドメイン名がありま",
"* メールアドレスが食い違っています",
// パスワード系
"* Passwordが短すぎます",
"* Passwordが長すぎます",
"* Passwordが食い違っています",
"* Passwordを入力してください",
// チェックボックス
"* 一つ以上選択してください"
);

var NO_ERROR = 0;
var ERROR_NO_MAIL_ADDRESS  = 1;
var ERROR_WRONG_ADDRESS    = 2;
var ERROR_NO_DOMAIN_ADDRESS= 3;
var ERROR_NOT_SAME_ADDRESS = 4;

var ERROR_PASS_TOO_SHORTY  = 5;
var ERROR_PASS_TOO_LONG    = 6;
var ERROR_PASS_NOT_SAME    = 7;
var ERROR_PASS_NO_INPUT    = 8;

var ERROR_CHECKBOX_NO_SEL  = 9;

// inputタグ
var INPUT_MAIL1  = 0;                       // メールアドレス
var INPUT_MAIL2  = INPUT_MAIL1+1;           // メールアドレス
var INPUT_PASS1  = INPUT_MAIL2+1;           // パスワード
var INPUT_PASS2  = INPUT_PASS1+1;           // パスワード（確認用）
var INPUT_TAG    = INPUT_PASS2+1;           // HP趣向
var CHK_TAG_TIMES= 22;
var INPUT_MAN    = INPUT_TAG+CHK_TAG_TIMES; // 男
var INPUT_WOMAN  = INPUT_MAN+1;             // 女
var INPUT_ZIP    = INPUT_WOMAN+1;           // 郵便番号

// ＩＤ等の長さ指定
var ID_LENGTH_MIN  = 5;
var ID_LENGTH_MAX  = 12;
var PASS_LENGTH_MIN= 6;
var PASS_LENGTH_MAX= 30;
var ZIP_LENGTH_MIN = 5;
var ZIP_LENGTH_MAX = 7;

var CONF_ENA_BTN = '<img src="img/button_confirm.gif" alt="確認" width="79" height="29" onclick="InputCheck()" />';
var CONF_DIS_BTN = '<img src="img/button_confirm_dis.gif" alt="確認" width="79" height="29" />';

var SAVE_ENA_BTN = '<img src="img/button_save.gif" alt="適用" width="79" height="29" onclick="InputCheck2()" />';
var SAVE_DIS_BTN = '<img src="img/button_save_dis.gif" alt="適用" width="79" height="29" />';


// Mail Address Check Function
function AddressChkFunc( emailStr){
  // メールアドレス
  var err_fl = NO_ERROR;
  if(emailStr.length <= 0)
    err_fl = ERROR_NO_MAIL_ADDRESS;
  else
      if(!emailStr.match(/^[A-Za-z0-9]+([\w\.-]*[\w-]+)*@[\w\.-]+\.\w{2,}$/))
      err_fl = ERROR_WRONG_ADDRESS;
  return err_fl;
}

function ZipCodeCheckCom(values){
  // 郵便番号
  var len = values.length;
  var err_str = "";
  if(len > 0){
    if(values.match(/[^0-9]+/))
      err_str = "* 半角数字のみ有効です";
    else{
      // ３桁からチェック
      if(len >= ZIP_LENGTH_MIN){
        if(len > ZIP_LENGTH_MAX)
          err_str = "* 桁数が多すぎます";
        else{
          // 郵便番号を検索
	  //  request("GET", "cgi-bin/getAddress.php?zip="+values, true, callback);
        }
      }
    }
  }
  return err_str;
}

// 入力項目のチェック
// キー入力毎
function InputCheckEx(){
  var tagObj = document.getElementsByTagName('input');
  var emailStr = tagObj[INPUT_MAIL1].value;
  var non_err = true;
  // アドレスチェック
  if(AddressChkFunc( emailStr) == NO_ERROR)
      document.getElementById( tagNameArr[INPUT_MAIL1]).innerHTML = "";
  else
      non_err = false;
  if(emailStr == tagObj[INPUT_MAIL2].value)
      document.getElementById( tagNameArr[INPUT_MAIL2]).innerHTML = "";
  else
      if( tagObj[INPUT_MAIL2].value.length < PASS_LENGTH_MIN )
	  non_err = false;
  // パスワードチェック
  var values = tagObj[INPUT_PASS1].value;
  var len = values.length;
  if((len >= PASS_LENGTH_MIN)&&(len <=PASS_LENGTH_MAX))
      document.getElementById( tagNameArr[INPUT_PASS1]).innerHTML = "";
  else
      non_err = false;
  if( values == tagObj[INPUT_PASS2].value)
      document.getElementById( tagNameArr[INPUT_PASS2]).innerHTML = "";
  else
      if( tagObj[INPUT_PASS2].value.length < PASS_LENGTH_MIN )
	  non_err = false;
  // チェックボックスのチェック
  var checked = false;
  for( var i=INPUT_TAG; !checked && (i<INPUT_MAN); ++i )
    checked |= tagObj[i].checked;
  if( checked )
      document.getElementById( tagNameArr[INPUT_TAG]).innerHTML = "";

  document.getElementById( "confirm_btn" ).innerHTML = ( checked && non_err) ? CONF_ENA_BTN : CONF_DIS_BTN;
}

// キー入力毎(userdataedit用)
function InputCheckEx2(){
  var tagObj = document.getElementsByTagName('input');
  var values = tagObj[INPUT_PASS1 -2].value;
  var len = values.length;
  var non_err = true;
  if((len <= 0)||((len >= PASS_LENGTH_MIN)&&(len <=PASS_LENGTH_MAX))){
      document.getElementById( tagNameArr[INPUT_PASS1]).innerHTML = "";
      if( values == tagObj[INPUT_PASS2 -2].value)
	  document.getElementById( tagNameArr[INPUT_PASS2]).innerHTML = "";
      else if( tagObj[INPUT_PASS2 -2].value.length < PASS_LENGTH_MIN )
	  non_err = false;
  }
  else if( len > 0 )
      non_err = false;
  // チェックボックスのチェック
  var checked = false;
  for( var i=INPUT_TAG-2; !checked && (i<(INPUT_MAN-2)); ++i )
    checked |= tagObj[i].checked;
  if( checked )
      document.getElementById( tagNameArr[INPUT_TAG]).innerHTML = "";

  document.getElementById( "save_btn" ).innerHTML = ( checked && non_err) ? SAVE_ENA_BTN : SAVE_DIS_BTN;
}

// 送信キーが押された時のチェック
function InputCheck(){
  var tagObj = document.getElementsByTagName('input');
  // メールアドレス
  var emailStr = tagObj[INPUT_MAIL1].value;
  var err_fl1 = AddressChkFunc( emailStr);
  document.getElementById( tagNameArr[INPUT_MAIL1]).innerHTML = error_str[err_fl1];
  // mail reconfirm
  var emailStr2 = tagObj[INPUT_MAIL2].value;
  var err_fl2 = NO_ERROR;
  if((emailStr.length > 0) && (emailStr != emailStr2))
      err_fl2 = (emailStr2.length == 0) ? ERROR_NO_MAIL_ADDRESS : ERROR_NOT_SAME_ADDRESS;
  document.getElementById( tagNameArr[INPUT_MAIL2]).innerHTML = error_str[err_fl2];

  // パスワード
  values = tagObj[INPUT_PASS1].value;
  len = values.length;
  var pass_err_fl = NO_ERROR;
  document.getElementById( tagNameArr[INPUT_PASS2]).innerHTML = "";
  if(len > 0){
    if(len < PASS_LENGTH_MIN)
      pass_err_fl = ERROR_PASS_TOO_SHORTY;
    else if(len > PASS_LENGTH_MAX)
      pass_err_fl = ERROR_PASS_TOO_LONG;
    else if( values != tagObj[INPUT_PASS2].value){
	pass_err_fl = ERROR_PASS_NOT_SAME;
        document.getElementById( tagNameArr[INPUT_PASS2]).innerHTML = error_str[pass_err_fl];
    }
  }
  else
      pass_err_fl = ERROR_PASS_NO_INPUT;
  if( pass_err_fl != ERROR_PASS_NOT_SAME )
      document.getElementById( tagNameArr[INPUT_PASS1]).innerHTML = error_str[pass_err_fl];
  
  // 日付チェック
  var dayObj = document.getElementsByTagName('select');
  var years = parseInt(dayObj[0].value);
  var months= parseInt(dayObj[1].value)-1;
  var days  = parseInt(dayObj[2].value);
  var flag = true;

  // 登録した日時が適正なら同じはず
  var dates = new Date(years,months,days);
  if ((years!= dates.getFullYear())||(months!= dates.getMonth())||(days!= dates.getDate()))
    flag = false;

  // チェックボックスのチェック
  var checked = false;
  var chk_fl = NO_ERROR;
  for( var i=INPUT_TAG; !checked && (i<INPUT_MAN); ++i )
    checked |= tagObj[i].checked;
  if( !checked ){
      document.getElementById( tagNameArr[INPUT_TAG]).innerHTML = error_str[ERROR_CHECKBOX_NO_SEL];
      chk_fl = ERROR_CHECKBOX_NO_SEL;
  }

  // 問題なければ送信
  if((err_fl1==NO_ERROR)&&(err_fl2==NO_ERROR)&&(pass_err_fl==NO_ERROR)&&(chk_fl==NO_ERROR))
      document.postForm.submit();
}

// 送信キーが押された時のチェック(userdataedit用)
function InputCheck2(){
  var tagObj = document.getElementsByTagName('input');
  // パスワード
  values = tagObj[INPUT_PASS1-2].value;
  len = values.length;
  var pass_err_fl = NO_ERROR;
  document.getElementById( tagNameArr[INPUT_PASS2]).innerHTML = "";
  if(values != tagObj[INPUT_PASS2-2].value){
      pass_err_fl = ERROR_PASS_NOT_SAME;
      document.getElementById( tagNameArr[INPUT_PASS2]).innerHTML = error_str[pass_err_fl];
  }
  if(len > 0){
      if(len < PASS_LENGTH_MIN)
	  pass_err_fl = ERROR_PASS_TOO_SHORTY;
      else if(len > PASS_LENGTH_MAX)
	  pass_err_fl = ERROR_PASS_TOO_LONG;
  }
  if( pass_err_fl != ERROR_PASS_NOT_SAME )
      document.getElementById( tagNameArr[INPUT_PASS1]).innerHTML = error_str[pass_err_fl];
  
  // 日付チェック
  var dayObj = document.getElementsByTagName('select');
  var years = parseInt(dayObj[0].value);
  var months= parseInt(dayObj[1].value)-1;
  var days  = parseInt(dayObj[2].value);
  var flag = true;

  // 登録した日時が適正なら同じはず
  var dates = new Date(years,months,days);
  if ((years!= dates.getFullYear())||(months!= dates.getMonth())||(days!= dates.getDate()))
    flag = false;

  // チェックボックスのチェック
  var checked = false;
  var chk_fl = NO_ERROR;
  for( var i=INPUT_TAG-2; !checked && (i<(INPUT_MAN-2)); ++i )
    checked |= tagObj[i].checked;
  if( !checked ){
      document.getElementById( tagNameArr[INPUT_TAG]).innerHTML = error_str[ERROR_CHECKBOX_NO_SEL];
      chk_fl = ERROR_CHECKBOX_NO_SEL;
  }

  // 問題なければ送信
  if((pass_err_fl==NO_ERROR)&&(chk_fl==NO_ERROR))
      document.postForm.submit();
}

// 送信キーが押された時のチェック(support_questions.html用)
function SendCheck(){
    var tagObj = document.getElementsByTagName('input');
    // 名前(長さだけ)
    var err_fl = (tagObj[0].value.length <= 0);
    // メールアドレス
    err_fl |= AddressChkFunc( tagObj[1].value );
    // 項目
    tagObj = document.getElementsByTagName('select');
    var sel_value = tagObj[0].value;
    err_fl |= (sel_value.length<=0)||(sel_value < 0)||(sel_value > 3);
    // テキストエリア
    tagObj = document.getElementsByTagName('textarea');
    err_fl |= (tagObj[0].value.length <= 0 );
    // 問題なければ送信
    document.getElementById("ErrorBox").innerHTML = ( err_fl ? '<div class="inquily_error">全ての項目に入力してください。</div>' : '');
    if( !err_fl )
	document.postForm.submit();
}

// 送信キーが押された時のチェック(remind.html用)
function SendCheck2(){
  // メールアドレスのみちぇっく
  var tagObj = document.getElementsByTagName('input');
  // 問題なければ送信
  if(AddressChkFunc( tagObj[INPUT_MAIL1].value )==NO_ERROR)
      document.postForm.submit();
}

// 郵便番号専用
function ZipCodeCheck(values){
    var err_str = ZipCodeCheckCom( values );
    // エラー表示
    document.getElementById( 'InputZIP' ).innerHTML = err_str;
    if( err_str.length > 0 )
	document.getElementById( "confirm_btn" ).innerHTML = CONF_DIS_BTN;
    else
	InputCheckEx();
}
// userdataedit.php 用
function ZipCodeCheck2(values){
    var err_str = ZipCodeCheckCom( values );
    // エラー表示
    document.getElementById( 'InputZIP' ).innerHTML = err_str;
    if( err_str.length > 0 )
	document.getElementById( "save_btn" ).innerHTML = SAVE_DIS_BTN;
    else
	InputCheckEx2();
}

// 日付のリアルタイムチェック
function DateSelectLimiter(){
  var dayObj = document.getElementsByTagName('select');
  var years = parseInt(dayObj[0].value);
  var months= parseInt(dayObj[1].value); // 計算の場合-1する
  var days  = parseInt(dayObj[2].value);

  var daytimes = monthDayArr[months-1];
  // 閏年チェック
  if( months == 2 ){
    if(((years % 4)==0)
       &&(((years % 100)!=0))
       ||((years % 400)==0))
       daytimes++;
  }

  // Now Day Count
  dayObj[2].innerHTML = "";
  for( i=1; i<=daytimes; i++){
    tobj = document.createElement("option");
    tobj.value = i;
    tobj.appendChild( document.createTextNode( i ));
    dayObj[2].appendChild(tobj);
  }
  // reset default select
  if(days > daytimes) days = daytimes;
  dayObj[2].value = days;
}
