// 地図の画像を切り替える
function changeImage(img_name, img){
  document.images[img_name].src = img;
}

// 文字サイズ変更
// target => 文字サイズを変えるclass
// size   => 変えるサイズ[small, middle, large]
var keywordsArr = new Array("xx-small", "x-small", "inherit", "smaller", "small", "medium", "large", "larger", "x-large", "xx-large");
var img_re = new RegExp("([^/]+)$");
function changeFontsize(target, size){
  var targets = document.getElementsByClassName(target);
  if(targets.length > 0){
    for(var i=0; i<targets.length; i++){
      var t = targets[i];
      if(typeof _fs == 'undefined'){
        _fs = {
          medium:"medium",
          large:"large"
        };
      }

      // 変更
      t.style.fontSize =
        size == 'medium' ? _fs.medium :
        size == 'large' ? _fs.large :
        '';
    }
    setCookie(target, size);
  }

  // 画像を切り替える
  var img = document.getElementById('_fs_img');
  var source = typeof img.src != 'undefined' ? img.src : img.data;
  if(source.match(img_re)){
    // mac safari 1.x対策...
    if(typeof img.src != 'undefined'){
      img.src = (RegExp.leftContext!==undefined?RegExp.leftContext:'/img/')+'bnr_char-size-'+size+'.jpg';
    }else{
      img.data = (RegExp.leftContext!==undefined?RegExp.leftContext:'/img/')+'bnr_char-size-'+size+'.jpg';
    }
  }
  return;
}


// getElementsByClassName
document.getElementsByClassName = function (className) {
  var i, j, eltClass;
  var objAll = document.getElementsByTagName ? document.getElementsByTagName("*") : document.all;
  var objCN = new Array();
  for (i = 0; i < objAll.length; i++) {
    eltClass = objAll[i].className.split(/\s+/);
    for (j = 0; j < eltClass.length; j++) {
      if (eltClass[j] == className) {
        objCN.push(objAll[i]);
        break;
      }
    }
  }
  return objCN;
}

// 配列に値があるかどうか
function in_array(arr, value){
  var i;
  for(i in arr) if(arr[i] == value) return i;
  return false;
}

/***          ***/
/*** 送信関連 ***/
/***          ***/

// フォームオブジェクトを受け取り、所属エレメントの値をオブジェクトに集約して返す。
// array({name:elem.name, value:Array elem.value}...) の形に集約
// validation用の必須ID [must_id[:エラー表示テキスト]] は、戻り値に含めません。
// validationに通らなかった場合は、falseを返します。
var validateConf = {
  okBgColor:'#FFF',
  errorBgColor:'#FDD'
};
function getElementsValue(f){
  var ret = new Array();
  var elems = f.elements;
  var checkboxes = new Array();
  var checkbox_added = new Array();
  var radio_added = new Array();

  for(var i=0; i<elems.length; i++){
    var elem = elems[i];
    var elemtype = elem.type !== undefined ? elem.type.toLowerCase() : '';
    var arrSaveVal = new Array();

    // 不要な要素は無視
    if(
      elem.name === undefined || elemtype == 'submit' ||
      elemtype == 'reset' || elem.name == 'must_id'
    ){
      continue;
    }

    // ラジオボタン
    // ※同名のキーは保存しない
    if(elemtype == 'radio'){
      if(elem.checked || radio_added[elem.name] !== 1){
        arrSaveVal.push(elem.value);
        radio_added[elem.name] = 1;
      }else{
        continue;
      }
    }

    // セレクトボックス
    if(elemtype.indexOf('select') === 0){
      var opts = elem.options;
      for(var j=0; j<opts.length; j++){
        var opt = opts[j];
        if(opt.selected){
          arrSaveVal.push(opt.value!==undefined?opt.value:'');
        }
      }
    }else{
      arrSaveVal.push(elem.value!==undefined?elem.value:'');
    }

    // チェックボックス
    // ※同名のキーは一回目のキー検出時にすべて集約する
    if(elemtype == 'checkbox'){
      if(elem.checked && checkbox_added[elem.name] !== 1){
        var box = f.elements[elem.name];
        if(box.length !== undefined){
          for(var j=0; j<box.length; j++){
            if(box[j].checked){
              arrSaveVal.push(box[j].value!==undefined?box[j].value:'');
            }
          }
        }else{
          arrSaveVal.push(box.value!==undefined&&box.checked?box.value:'');
        }
        checkbox_added[elem.name] = 1;
      }else{
        continue;
      }
    }
    ret.push({name:elem.name,value:arrSaveVal});
  }

  // 必須IDがある場合はValidationを行う
  var must_id = f.must_id!==undefined?f.must_id.value:'';
  if(must_id != ''){
    var email = '';
    var err = '';
    var must_re = new RegExp(must_id+"(:(.+))?$");
    for(var i=0; i<ret.length; i++){
      var elem = ret[i];
      if(elem.name.match(must_re)){

        // 必須IDの左部分はエレメント本来のIDとして保存
        var realElemName = RegExp.leftContext;

        // マッチ部分の $2 をエラー表示用に保存
        var matchText = RegExp.$2;

        // メールアドレス
        if(realElemName == 'email'){
          if(email != ''){
            var email = elem.value[0];
          }
        }else if(realElemName == 'email_confirm'){
          if(email != elem.value[0]){
            f.elements[elem.name].style.backgroundColor = validateConf.errorBgColor;
            err += (err!=''?"\n":'')+'メールアドレスが一致しません。';
            continue;
          }
        }

        if(elem.value[0] == ''){
          f.elements[elem.name].style.backgroundColor = validateConf.errorBgColor;
          err += (err!=''?"\n":'')+(matchText!=''?matchText:realElemName)+'が未入力です。';
        }else{
          f.elements[elem.name].style.backgroundColor = validateConf.okBgColor;
          elem.name = realElemName;
        }
      }
    }
    if(err != ''){
      alert(err);
      return false;
    }
  }
  return ret;
}

// validationがOKなら、送信
// <form onsubmit="return sendMail(this)">
function sendMail(f){
  if(getElementsValue(f)!==false){
    if(confirm("送信してもよろしいですか？")){
      var elems = f.elements;
      for(var i=0; i<elems.length ;i++){
        var elem = elems[i];
        if(elem.type == "submit"){
          elem.disabled = true;
        }
      }
      f.submit();
      //return true;
    }
  }
  return false;
}


/***              ***/
/*** 郵便番号関連 ***/
/***              ***/

// 郵便番号から住所を取得し、output_idにセット
// 引数1: 郵便番号入力元オブジェクト
//     2: 出力先ID(inputでなくてもOK)
//     3: 返す住所の長さ; 1=都道府県まで, 2=市区町村まで, その他 or 指定なし=番地まで
var zip_old = undefined;
var zip_re = new RegExp("^[0-9]{7}$");
var zip_trim_re = new RegExp("[^0-9]+","g");
function getAddressByZip(obj, output_id, limit){
  var zip = obj.value;
  var output = document.getElementById(output_id);
  if(zip != ''){
    zip = zip.replace(zip_trim_re, '');
    if((zip.match(zip_re) && zip != zip_old) || output.value == ''){
      xmlhttp = createXMLHttp();
      xmlhttp.open('POST','./ken_all.pl');
      xmlhttp.onreadystatechange = function() {
        if(xmlhttp.readyState == 4 && xmlhttp.status == 200) {
          var ret = xmlhttp.responseText;
          var retArr = ret.split(",");
          if(retArr[0] != '' && retArr[1] != '' && retArr[2] != ''){
            switch(limit){
              case 1:
                output.value = retArr[0];
                break;
              case 2:
                output.value = retArr[0]+retArr[1];
                break;
              default:
                output.value = retArr[0]+retArr[1]+retArr[2];
                break;
            }
            zip_old = zip;
          }
        }
      }
      xmlhttp.setRequestHeader("Content-Type" , "application/x-www-form-urlencoded");
      xmlhttp.send("zip="+zip);
    }
  }else{
    output.value = '';
  }
  return null;
}



/***                          ***/
/*** XMLHttpRequest関連ツール ***/
/***                          ***/

// XMLHttpRequestを作成
function createXMLHttp(){
  return browser.isIE7() ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
}

/***                    ***/
/*** クッキー関連ツール ***/
/***                    ***/

// クッキーに値をセットする
// key = キー, val = 値
function setCookie(key, val){
  var c = document.cookie;
  var cArr = c.split(";");
  var reTrim = new RegExp("^ +");

  // 古い値を削除する
  for(var i=0; i<cArr.length; i++){
    var pairs = cArr[i].replace(reTrim, '').split('=');
    var oldkey = pairs[0];
    if(oldkey == key){
      // 値を設定しようとしているキーと同名のクッキーは削除する
      deleteCookie(oldkey);
      break;
    }
  }
  document.cookie = escape(key)+"="+escape(val);
  return null;
}

// クッキーから値を取り出す
// key = キー
function getCookie(key){
  var c = document.cookie;
  var cArr = c.split(";");
  var reTrim = new RegExp("^ +");
  var ret = '';
  for(var i=0; i<cArr.length; i++){
    var pairs = cArr[i].replace(reTrim, '').split('=');
    var oldkey = unescape(pairs[0]);
    if(oldkey == key){
      var val = pairs[1];
      ret = val!==undefined?unescape(val):'';
      break;
    }
  }
  return ret;
}

// クッキーから値を削除する
function deleteCookie(key){
  document.cookie = key+"=; expires=Thu,01-Jan-70 00:00:01 GMT";
  return null;
}


/***                    ***/
/*** ブラウザ関連ツール ***/
/***                    ***/

// ブラウザがIE(7以前)かどうかを判定
var browser = {
  IE:undefined,
  IE7:undefined,

  // ブラウザがIEかどうかを判定
  isIE:function(){
    if(this.IE===undefined){
      this.IE = navigator.appName.toLowerCase().indexOf("microsoft internet explorer") >= 0 ? true : false;
    }
    return this.IE;
  },

  // ブラウザがIE(7以前)かどうかを判定
  isIE7:function(){
    if(this.IE===undefined){
      var re = new RegExp("MSIE [4-7]");
      this.IE7 = navigator.appName.toLowerCase().indexOf("microsoft internet explorer") >= 0 ? 
        navigator.appVersion.match(re) ? true : false :
          false;
    }
    return this.IE7;
  }
}


/***                    ***/
/*** その他細かいツール ***/
/***                    ***/

function is_array(obj){
  return obj.constructor === Array();
}

// イベント追加
function addEvent(elm,listener,fn){
	try{
		elm.addEventListener(listener,fn,false);
	}catch(e){
		elm.attachEvent("on"+listener,fn);
	}
	return;
}


