//
// Cookie に関する関数
//

function getCookieVal(offset) {
  var endstr = document.cookie.indexOf (';', offset) ;
  if (endstr == -1)
    endstr = document.cookie.length ;
  return unescape(document.cookie.substring(offset, endstr)) ;
}

function FixCookieDate(date) {
  var base = new Date(0) ;
  /*  dawn of (Unix) time - should be 0 */
  var skew = base.getTime() ;
  /*  Except on the Mac - ahead of its time */
  if (skew > 0)
    date.setTime (date.getTime() - skew) ;
  return ;
}

function GetCookie(name) {
  var key = name + "=" ;
  var value = null ;
  var cookies = window.document.cookie.split(";") ;
  for (var i = 0; i < cookies.length; i++) {
    var pos = cookies[i].indexOf(key) ;
    if (pos >= 0) {
      value = cookies[i].substring(pos + key.length) ;
      if (value) break ;
    }
  }
  return (value != null) ? unescape(value) : null ;
}

function GetCookieGeneric(name) {
  var value = GetCookie(name);
  if (value == null) {
    value = GetCookie(name.replace('ck', 'ckJs'));
  }
  return value;
}

function SetCookie(name, value, expires, path, domain, secure) {
  window.document.cookie = name + "=" + escape(value)
    + (expires ? ("; expires=" + expires.toGMTString()) : "")
      + (path ? ("; path=" + path) : "")
        + (domain ? ("; domain=" + domain) : "")
          + (secure ? ("; secure") : "") ;
  return ;
}

function checkZipcode(oJuusho, oZipcode, mode)
{
  if ((oJuusho == null) || (oZipcode == null)) {
    return true;
  }

  var val = oZipcode.value;
  var zip = '';

  //
  // get zipcode value
  //
  if (!val) {
    return true;
  }

  for (var i = 0; i < val.length; i++) {
    var c = val.charCodeAt(i);
    if (( c >= 48 ) && ( c <= 57 )) {
      zip += val.charAt(i);
    } else if (( c >= 65296 ) && ( c <= 65305 )) {
      // Zenkaku number
      zip += String.fromCharCode(c - 65248);
    }
  }
  if (zip.length < 7) {
    return true;
  }
  var url = location.protocol + "//" + location.host + "/php/getZipcode.php";
  var req = sendRequest(function(){}, '&zipcode=' + zip, 'GET', url, false);
  if (!req) return true;
  if (!req.responseText) return true;
  var data = eval('(' + req.responseText + ')');
  if (data["Jigyosyo"] == 1) {
    return true;
  }

  if (mode == 0) {
    var juusho = data["Ken"] + data["Shi"] + data["Chouiki"];
    if (oJuusho.value != juusho) {
      return true;
    }
    return false;
  } else {
    if (oJuusho.value != data["Chouiki"]) {
      return true;
    }
    return false;
  }
}

/*  ログオンボタンクリック時の処理 */
function register(frm) {
  var oElements = document.getElementsByName("txtNamae");
  if (oElements.length > 0) {
    // frm.txtNamae が存在する場合
    var Namae = frm.txtNamae.value;
    // 全角スペースを半角スペースに変換
    Namae = Namae.split('　');
    Namae = Namae.join(' ');

    arrNamae = Namae.split(' ');
    if (arrNamae.length == 1) {
      alert("姓と名の間に１つだけスペースをいれてください．(例：日本 太郎)");
      return false;
    };
    frm.txtNamae.value = Namae;
  }

  oElements = document.getElementsByName("txtEmail");
  if (oElements.length > 0) {
    if (!HanCheck(frm.txtEmail,"メールアドレス")) return false;
    if (!FormEmailCheck(frm.txtEmail,"メールアドレス")) return false;
  };

  oElements = document.getElementsByName("txtJuusho");
  if (oElements.length > 0) {
    // frm.txtJuusho が存在する場合
    var Juusho = frm.txtJuusho.value;
    var stMatch = new RegExp("^(中国|中華|北海道|東京都|(京都|大阪)府|(青森|秋田|岩手|宮城|山形|福島|神奈川|千葉|埼玉|栃木|群馬|茨城|新潟|富山|石川|福井|山梨|長野|岐阜|静岡|愛知|三重|滋賀|兵庫|奈良|和歌山|鳥取|島根|岡山|広島|山口|徳島|香川|愛媛|高知|福岡|佐賀|長崎|大分|熊本|宮崎|鹿児島|沖縄)県)");
    if (!Juusho.match(stMatch)) {
      // 都道府県が存在しないとき
      alert("都道府県は必ずいれてください．");
      return false;
    };

    // 英数全角を半角に変換
    if (!AlphaNumCheck(frm.txtJuusho, "住所", true)) return false;

    // 住所が郵便番号からの自動代入で入れられた文字列のままである場合, 差し戻す
    if (checkZipcode(frm.txtJuusho, frm.txtZipcode, 0) == false) {
      alert("住所を番地まで入力してください．");
      return false;
    }
  }

  if (frm.txtChouiki) {
    // 英数全角を半角に変換
    if (!AlphaNumCheck(frm.txtChouiki, "住所", true)) return false;

    // 住所が郵便番号からの自動代入で入れられた文字列のままである場合, 差し戻す
    if (checkZipcode(frm.txtChouiki, frm.txtZipcode, 1) == false) {
      alert("住所を番地まで入力してください．");
      return false;
    }
  }

  var expires = new Date() ;

  /* 古いCookieを削除 */
  expires.setTime(0) ;

  SetCookie("ckNamae", "", expires, "/") ;
  SetCookie("ckKaisha", "", expires, "/") ;
  SetCookie("ckKaishaKana", "", expires, "/") ;
  SetCookie("ckBusho", "", expires, "/") ;
  SetCookie("ckYakushoku", "", expires, "/") ;
  SetCookie("ckYuubin", "", expires, "/") ;
  SetCookie("ckJuusho", "", expires, "/") ;
  SetCookie("ckTEL", "", expires, "/") ;
  SetCookie("ckFAX", "", expires, "/") ;
  SetCookie("ckEmail", "", expires, "/") ;
  SetCookie("ckChouiki", "", expires, "/") ;
  SetCookie("ckShi", "", expires, "/") ;
  SetCookie("ckKen", "", expires, "/") ;
  SetCookie("ckZipcode", "", expires, "/") ;
  SetCookie("ckBusho2", "", expires, "/") ;
  SetCookie("ckSei", "", expires, "/") ;
  SetCookie("ckSeiKana", "", expires, "/") ;
  SetCookie("ckMei", "", expires, "/") ;
  SetCookie("ckMeiKana", "", expires, "/") ;

  SetCookie("ckJsNamae", "", expires, "/") ;
  SetCookie("ckJsNamaeKana", "", expires, "/") ;
  SetCookie("ckJsKaisha", "", expires, "/") ;
  SetCookie("ckJsKaishaKana", "", expires, "/") ;
  SetCookie("ckJsBusho", "", expires, "/") ;
  SetCookie("ckJsYakushoku", "", expires, "/") ;
  SetCookie("ckJsYuubin", "", expires, "/") ;
  SetCookie("ckJsJuusho", "", expires, "/") ;
  SetCookie("ckJsTEL", "", expires, "/") ;
  SetCookie("ckJsFAX", "", expires, "/") ;
  SetCookie("ckJsEmail", "", expires, "/") ;
  SetCookie("ckJsURL", "", expires, "/") ;

  return true ;
};

/* 半角チェック */
function HanCheck(obj, Msg) {
  var kana = new Array(
    " ", "!", "\"","#", "$", "%", "&", "'", "(", ")", "*", "+", ",", "-", ".", "/",
    "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ":", ";", "<", "=", ">", "?",
    "@", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O",
    "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "[", "\\","]", "^", "_",
    "`", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o",
    "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "{", "|", "}", "~", " ",
    " ", "｡", "｢", "｣", "､", "･", "\""," "
    ) ;
  var value = obj.value ;
  for (var i = 0; i < value.length; i++) {
    var c = value.charAt(i) ;
    var err = true ;
    for (var j = 0 ; j < kana.length; j++) {
      if (c == kana[j]) {
        err = false ;
        break ;
      }
    }
    if (err) {
      alert(Msg + "は英数半角文字で入力してください。") ;
      return false ;
    }
  }
  return true ;
}

/* Emailチェック */
function FormEmailCheck(obj, Msg) {
  var valid = new Array(
    "!", "#", "$", "&", "'", "*", "+", "-", ".", "/",
    "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "=", "?", "@",
    "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O",
    "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "^", "_", "`",
    "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o",
    "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "{", "|", "}", "~"
  );
  var value = obj.value;
  for (var i = 0; i < value.length; i++) {
    var c = value.charAt(i);
    var err = true;
    for (var j = 0; j < valid.length; j++) {
      if (c == valid[j]) {
        err = false;
        break;
      }
    }
    if (err) {
      alert(Msg + "に不正な文字が含まれています。(" + c + ")") ;
      return false;
    }
  }
  return true;
}

/*
 * 英数が半角かどうかのチェック
 * bReplace = true で全角を半角に置換する
 */
function AlphaNumCheck(obj, Msg, bReplace) {
  if (bReplace == undefined) {
    bReplace = false;
  }
  //全角数字配列
  var char1 = new Array(
    "　", "！", "”","＃", "＄", "％", "＆", "’",
    "（", "）", "＊", "＋", "，", "\uff0d", "．", "／",
    "０", "１", "２", "３", "４", "５", "６", "７",
    "８", "９", "：", "；", "＜", "＝", "＞", "？",
    "＠", "Ａ", "Ｂ", "Ｃ", "Ｄ", "Ｅ", "Ｆ", "Ｇ",
    "Ｈ", "Ｉ", "Ｊ", "Ｋ", "Ｌ", "Ｍ", "Ｎ", "Ｏ",
    "Ｐ", "Ｑ", "Ｒ", "Ｓ", "Ｔ", "Ｕ", "Ｖ", "Ｗ",
    "Ｘ", "Ｙ", "Ｚ", "［", "￥", "」", "＾", "\uff3f",
    "‘", "ａ", "ｂ", "ｃ", "ｄ", "ｅ", "ｆ", "ｇ",
    "ｈ", "ｉ", "ｊ", "ｋ", "ｌ", "ｍ", "ｎ", "ｏ",
    "ｐ", "ｑ", "ｒ", "ｓ", "ｔ", "ｕ", "ｖ", "ｗ",
    "ｘ", "ｙ", "ｚ", "｛", "｜", "｝", "〜",
    "\u2010", "\u2015", "ー"
  );
  //半角数字配列
  var char2 = new Array(
    " ", "!", "\"","#", "$", "%", "&", "'",
    "(", ")", "*", "+", ",", "-", ".", "/",
    "0", "1", "2", "3", "4", "5", "6", "7",
    "8", "9", ":", ";", "<", "=", ">", "?",
    "@", "A", "B", "C", "D", "E", "F", "G",
    "H", "I", "J", "K", "L", "M", "N", "O",
    "P", "Q", "R", "S", "T", "U", "V", "W",
    "X", "Y", "Z", "[", "\\","]", "^", "_",
    "`", "a", "b", "c", "d", "e", "f", "g",
    "h", "i", "j", "k", "l", "m", "n", "o",
    "p", "q", "r", "s", "t", "u", "v", "w",
    "x", "y", "z", "{", "|", "}", "~",
    "-", "-", "-"
  );
  var bPrev = true;
  var str = '';
  for (var i = 0; i < obj.value.length; i++) {
    var c = obj.value.charAt(i);
    var p = -1;
    for (var j = 0; j < char1.length; j++) {
      if (char1[j] == c) {
        p = j;
        break;
      }
    }
    if (((bPrev == true) && (p >= 0))
        || ((p >= 0) && (p < 95) && (p != 13))) {
      if (bReplace == false) {
        alert(Msg + "の英数記号は半角で入力してください。");
        return false;
      }
      str += char2[p];
    } else {
      str += c;
    }
    // 英数記号か?
    bPrev = false;
    for (var j = 0; j < char1.length; j++) {
      if ((char1[j] == c) || (char2[j] == c)) {
        bPrev = true;
        break;
      }
    }
  }
  obj.value = str;
  return true;
}

/* ブラウザのバージョンを確認 */
function checkBrowser() {
  var name = navigator.appName ;
  var version = "" ;
  for (var i = 0; i < navigator.appVersion.length; i++) {
    var c = navigator.appVersion.charAt(i) ;
    if ((c != ".") && isNaN(c))
      break ;
    version = version + c ;
  }

  name = name.toLowerCase() ;
  if (!isNaN(version))
    version = parseFloat(version) ;

  if (
    ((name == "netscape") && (version >= 4)) ||
    ((name == "microsoft internet explorer") && (version >= 4))
    ) return true ;

  alert("Microsoft Internet Explorer 4.01 SP2以上，もしくはNetscape 4.7以上をご使用ください．") ;

  return false ;
};

/* Cookie から情報を設定 */
function setTxtArea(name, value) {
  if (value) {
    var oElements = document.getElementsByName(name);
    if (oElements.length > 0) {
      oElements[0].value = value;
    }
  }
}

function setSelectBox(name, value) {
  if (value) {
    var oElements = document.getElementsByName(name);
    if (oElements.length > 0) {
      oElements[0].selectedIndex = value;
    }
  }
}

/* ロードイベント */
function documentOnLoad() {
  /* クッキーを取得 */
  var Namae = GetCookieGeneric('ckNamae') ;
  var NamaeKana = GetCookieGeneric('ckNamaeKana') ;
  var Kaisha = GetCookieGeneric('ckKaisha') ;
  var KaishaKana = GetCookieGeneric('ckKaishaKana') ;
  var Busho = GetCookieGeneric('ckBusho') ;
  var Yakushoku = GetCookieGeneric('ckYakushoku') ;
  var Yuubin = GetCookieGeneric('ckYuubin') ;
  var Juusho = GetCookieGeneric('ckJuusho') ;
  var TEL = GetCookieGeneric('ckTEL') ;
  var FAX = GetCookieGeneric('ckFAX') ;
  var Email = GetCookieGeneric('ckEmail') ;
  var URL = GetCookieGeneric('ckURL') ;
  var Chouiki = GetCookieGeneric('ckChouiki') ;
  var Shi = GetCookieGeneric('ckShi') ;
  var Ken = GetCookieGeneric('ckKen') ;
  var Zipcode = GetCookieGeneric('ckZipcode') ;
  var Busho2 = GetCookieGeneric('ckBusho2') ;
  var Sei = GetCookieGeneric('ckSei') ;
  var SeiKana = GetCookieGeneric('ckSeiKana') ;
  var Mei = GetCookieGeneric('ckMei') ;
  var MeiKana = GetCookieGeneric('ckMeiKana') ;

  var frm = window.document.frm ;

  setTxtArea("txtNamae", Namae);
  setTxtArea("txtNamaeKana", NamaeKana);
  setTxtArea("txtKaisha", Kaisha);
  setTxtArea("txtKaishaKana", KaishaKana);
  setTxtArea("txtBusho", Busho);
  setTxtArea("txtYakushoku", Yakushoku);
  setTxtArea("txtZipcode", Yuubin);
  setTxtArea("txtZipcode", Zipcode);
  setTxtArea("txtJuusho", Juusho);
  setTxtArea("txtFAX", FAX);
  setTxtArea("txtTEL", TEL);
  setTxtArea("txtEmail", Email);
  setTxtArea("txtURL", URL);
  setTxtArea("txtChouiki", Chouiki);
  setTxtArea("txtShi", Shi);
  setSelectBox("txtKen", Ken);
  setTxtArea("txtBusho2", Busho2);
  setTxtArea("txtSei", Sei);
  setTxtArea("txtSeiKana", SeiKana);
  setTxtArea("txtMei", Mei);
  setTxtArea("txtMeiKana", MeiKana);

  /* ブラウザのバージョンを確認 */
  checkBrowser() ;

  /* 暗号化された個人情報の復元, アンケートの場合はデータベースに問い合わせ */
  try {
    var q = "";
    var arr = window.location.search.substring(1).split('&');
    for (var i = 0; i < arr.length; i++) {
      var val = arr[i].split('=', 2);
      if (val[0] == 'q') {
        q = val[1];
      }
    }
    setPersonalData(q);
  } catch(e) {
    // just ignore
  }

  /* 個人情報を Cookie に保存するかどうかのチェックボックスがあるか?
     ない場合は hidden タグをつけて formpost.php に情報を渡す */
  var oElements = document.getElementsByName("chkMemorize");
  if (oElements.length == 0) {
    /* チェックボックスがない */
    var oInput = document.createElement('input');
    oInput.name = "chkMemorize";
    oInput.type = "hidden";
    oInput.value = "on";
    frm.appendChild(oInput);
  }

  return ;
}

function winOpen(opt){
  url = "/php/get_zipcode.php?txtZipcode=" + opt.value;
  win=window.open(url , "Title" , "width=1,height=1,menubar=no,toolbar=no,location=no,directories=no,status=no,scrollbars=no,resizable=no");
}

//
// fill forms by stored information in cookie
//
function setPersonalData(q) {
  var setData = function(req) {
    if (!req) return;
    if (!req.responseText) return;
    var data = eval('(' + req.responseText + ')');
    var p;
    for (p in data) {
      var field;
      var prop;
      var oElements;
      field = p.replace(/^s/, "txt");
      oElements = document.getElementsByName(field);
      for (var i = 0; i < oElements.length; i++) {
        oElements[i].value = data[p];
      }
    }
  };

  if ((q != undefined) && (q != null)) {
    data = {
      "q": q
    }
  } else {
    data = {
      "q": ""
    }
  }

  var url = location.protocol + "//" + location.host + "/php/decPersonal.php";
  sendRequest(setData, data, 'GET', url);
}
