//
// Javascript for zipcode to address translation
//
zipcode = function() {};
zipcode.prev = '';

zipcode.trans = function (code)
{
  var val = code.value;
  var zip = '';

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

  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;
  }

  //
  // get form object
  //
  var curval;
  var setData;
  var oElements, oElements1, oElements2;

  if (code.name.slice(-1) == '2') {		// called by txtZipcode2
    // check if this page is default form type (just one Juusho field)
    oElements = document.getElementsByName("txtJuusho2");
    if (oElements.length > 0) {
      curval = zip + oElements[0].name;
      setData = function(req) {
	if (!req) return;
	if (!req.responseText) return;
	var data = eval('(' + req.responseText + ')');
	var oElements = document.getElementsByName("txtJuusho2");
	if (oElements[0].value == "") {
	  oElements[0].value = data["Ken"] + data["Shi"] + data["Chouiki"];
	} else {
	  // check wether txtJuusho and DB is same value.
	  var rObj = new RegExp("^" + data["Ken"] + data["Shi"] + data["Chouiki"] + ".*");
	  var stNew = oElements[0].value;
	  if (!stNew.match(rObj)) {
	    if (confirm("郵便番号が変わりました．新しい住所(" + data["Ken"] + data["Shi"] + data["Chouiki"] + ")に変更しますか？")) {
	      oElements[0].value = data["Ken"] + data["Shi"] + data["Chouiki"];
	    }
	  }
	}
      }
    } else {
      // check if this page is separate form type (Ken, Shi, Chouiki)
      oElements = document.getElementsByName("txtKen2");
      oElements1 = document.getElementsByName("txtShi2");
      oElements2 = document.getElementsByName("txtChouiki2");
      if ((oElements.length > 0)
	 && (oElements1.length > 0) && (oElements2.length > 0)) {
	curval = zip + oElements[0].name + oElements1[0].name + oElements2[0].name;
	setData = function(req) {
	  if (!req) return;
	  if (!req.responseText) return;
	  var data = eval('(' + req.responseText + ')');
	  var oElements = document.getElementsByName("txtKen2");
	  var oElements1 = document.getElementsByName("txtShi2");
	  var oElements2 = document.getElementsByName("txtChouiki2");
	  if (oElements[0].value == "") {
	    oElements[0].value = data["Ken"];
	  }
	  if (oElements1[0].value == "") {
	    oElements1[0].value = data["Shi"];
	  }
	  if (oElements2[0].value == "") {
	    oElements2[0].value = data["Chouiki"];
	  }
	}
      } else {
        return;				// unknown type
      }
    }
  } else {					// called by txtZipcode
    // check if this page is default form type (just one Juusho field)
    oElements = document.getElementsByName("txtJuusho");
    if (oElements.length > 0) {
      curval = zip + oElements[0].name;
      setData = function(req) {
	if (!req) return;
	if (!req.responseText) return;
	var data = eval('(' + req.responseText + ')');
	var oElements = document.getElementsByName("txtJuusho");
	if (oElements[0].value == "") {
	  oElements[0].value = data["Ken"] + data["Shi"] + data["Chouiki"];
	} else {
	  // check wether txtJuusho and DB is same value.
	  var rObj = new RegExp("^" + data["Ken"] + data["Shi"] + data["Chouiki"] + ".*");
	  var stNew = oElements[0].value;
	  if (!stNew.match(rObj)) {
	    if (confirm("郵便番号が変わりました．新しい住所(" + data["Ken"] + data["Shi"] + data["Chouiki"] + ")に変更しますか？")) {
	      oElements[0].value = data["Ken"] + data["Shi"] + data["Chouiki"];
	    }
	  }
	}
      }
    } else {
      // check if this page is separate form type (Ken, Shi, Chouiki)
      oElements = document.getElementsByName("txtKen");
      oElements1 = document.getElementsByName("txtShi");
      oElements2 = document.getElementsByName("txtChouiki");
      if ((oElements.length > 0)
	 && (oElements1.length > 0) && (oElements2.length > 0)) {
	curval = zip + oElements[0].name + oElements1[0].name + oElements2[0].name;
	setData = function(req) {
	  if (!req) return;
	  if (!req.responseText) return;
	  var data = eval('(' + req.responseText + ')');
	  var oElements = document.getElementsByName("txtKen");
	  var oElements1 = document.getElementsByName("txtShi");
	  var oElements2 = document.getElementsByName("txtChouiki");
	  if (oElements[0].value == "") {
	    oElements[0].value = data["Ken"];
	  }
	  if (oElements1[0].value == "") {
	    oElements1[0].value = data["Shi"];
	  }
	  if (oElements2[0].value == "") {
	    oElements2[0].value = data["Chouiki"];
	  }
	}
      } else {
        return;				// unknown type
      }
    }
  }

  // state changed ?
  //if (curval == zipcode.prev) {
    // state not changed
  //  return;
  //}
  zipcode.prev = curval;

  // get address from server
  var url = location.protocol + "//" + location.host + "/php/getZipcode.php";
  sendRequest(setData, '&zipcode=' + zip, 'GET', url);
}

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;
  }
}
