if(window.exZip2Address == undefined)
{
  window.exZip2Address = 
  {
    _url: 'http://shared-api.exsight.com/getAddressByZip/',
    _blocking: false,
    _user_callback: null,

    _error_messages:
    {
      'Request contains unacceptable character.': '郵便番号に使用できない文字が含まれています。',
      'Requested zipcode is not valid.': '正しい7桁の郵便番号ではありません。',
      'No result.': '郵便番号がデータベースに見つかりませんでした。',

      'ERROR_BLOCKING': 'しばらくお待ちください。',
      'ERROR_EMPTY': '郵便番号が空欄です。',
      'ERROR_UNKNOWN': '不明なエラーです。'
    },

    callback: function(json)
    {
      if(json.success)
      {
        this._user_callback(json.result[0]);
      }
      else
      {
        var msg = this._error_messages[json.message];
        if(!msg)
          alert(this._error_messages['ERROR_UNKNOWN']);
        else
          alert(msg);
        this._user_callback(null);
      }
      this._blocking = false;  
    },
    
    retrieve: function(zipcode, user_callback)
    {
      if(!zipcode)
      {
        alert(this._error_messages['ERROR_EMPTY']);
        user_callback(null);
        return;
      }
      if(this._blocking)
      {
        alert(this._error_messages['ERROR_BLOCKING']);
        user_callback(null);
        return;
      }

      this._blocking = true;
      this._user_callback = user_callback;

      var uri = this._url + encodeURIComponent(zipcode) + '?callback=exZip2Address.callback';
      var scr = document.createElement('script');
      scr.src = uri;
      scr.charset = 'UTF-8';
      document.body.appendChild(scr);
    }
  };
}

