/* Not the original file!  Don't edit! */

if (!self.Hatena) var Hatena = {};

if (!Hatena.Locale) {

Hatena.Locale = new Ten.Class({
  /* --- Languages --- */

  getAvailLangs: function () {
    if (this._availLangs) return this._availLangs;
    var de = document.documentElement;
    var langs = de ? de.getAttribute('data-avail-langs') : '';
    if (langs) {
      langs = langs.split(/\s+/);
    } else {
      langs = [];
    }
    this._availLangs = langs;
    return langs;
  },

  setAcceptLang: function (newLang) {
    var cookie = new Ten.Cookie();
    cookie.set('Accept-Language', newLang, {domain: this.cookieDomain, expires: '+1y', path: '/'});
    cookie.set('_hatena_set_lang', 1, {domain: this.cookieDomain, expires: '+1d', path: '/'});
  },

  getTextLang: function () {
    var docEl = document.documentElement;
    if (!docEl) return 'ja';
    var lang = docEl.getAttribute('lang');
    return lang || 'ja';
  },

  loadTextData: function () {
    var key = 'textDataLoaded' + this.textDataDirName + this.textDataFileNameStemSuffix;
    if (this[key]) return;
    this[key] = true;

    var self = this;
    var host = this.dataHost;
    var lang = this.getTextLang();
    var date = new Date;
    var url = 'http://' + host + '/js/' + this.textDataDirName + 'texts-' + lang + this.textDataFileNameStemSuffix + '.js?' + date.getFullYear() + date.getMonth() + date.getDate();

    if (Ten.AsyncLoader) {
      Ten.AsyncLoader.loadScripts([url], function () {
        var key = 'Hatena.Locale,' + self.project + ',Text';
        Ten.AsyncLoader.registerObject(key, self);
      });
    } else {
      var script = document.createElement('script');
      script.src = url;
      document.getElementsByTagName('head')[0].appendChild(script);
    }
  },

  text: function (msgid) {
    var lang = this.getTextLang();
    var entry;
    try {
      entry = Hatena[this.project].Locale.Data.Text[lang][msgid];
    } catch (e) {}
    if (entry) {
      return entry.value;
    } else {
      return msgid;
    }
  },

  textN: function (msgid, n) {
    var allArgs = arguments;
    var lang = this.getTextLang();
    n = n || 0;
    var entry;
    try {
      entry = Hatena[this.project].Locale.Data.Text[lang][msgid];
    } catch (e) { }
    if (entry) {
      var qt = entry.quanttype || 'o';
      var v = entry.value;
      var args = entry.args;
      if (qt == '1_o') {
        if (n == 1) {
          v = entry.value_1;
          args = entry.args_1;
        }
      } else if (qt == '01_o') {
        if (n == 0 || n == 1) {
          v = entry.value_1;
          args = entry.args_1;
        }
      }

      if (args) {
        var i = 0;
        return v.replace(/%s/, function () {
          return allArgs[1 + parseInt(args[i++])];
        });
      } else {
        return v;
      }
    } else {
      return msgid;
    }
  },

  textFwN: function (msgid, n) {
    var lang = this.getTextLang();
    if (/^ja(?:-|$)$/.test(lang)) {
      //
    } else {
      n *= 2;
    }

    var args = [msgid, n, this.number(n)];
    for (var i = 2; i < arguments.length; i++) {
      args.push(arguments[i]);
    }

    return this.textN.apply(this, args);
  },

  number: function (n) {
    return (n + 0).toLocaleString();
  },

  /* --- Regions --- */

  getAvailRegions: function () {
    if (this._availRegions) return this._availRegions;
    var de = document.documentElement;
    var regions = de ? de.getAttribute('data-avail-regions') : '';
    if (regions) {
      regions = regions.split(/\s+/);
    } else {
      regions = [];
    }
    this._availRegions = regions;
    return regions;
  },

  setRegionCode: function (newRegionCode) {
    var cookie = new Ten.Cookie();
    cookie.set('_hatena_region', newRegionCode, {domain: this.cookieDomain, expires: '+1y', path: '/'});
  },

  /* --- Date and Time --- */

  datetimeHTML: function (dt) {
    var y = '000' + dt.getUTCFullYear(); y = y.substring(y.length - 4);
    var M = '0' + (dt.getUTCMonth() + 1); M = M.substring(M.length - 2);
    var d = '0' + dt.getUTCDate(); d = d.substring(d.length - 2);
    var h = '0' + dt.getUTCHours(); h = h.substring(h.length - 2);
    var m = '0' + dt.getUTCMinutes(); m = m.substring(m.length - 2);
    var s = '0' + dt.getUTCSeconds(); s = s.substring(s.length - 2);
    var ms = '00' + dt.getUTCMilliseconds(); ms = ms.substring(ms.length - 3);
    return '<time datetime="'+y+'-'+M+'-'+d+'T'+h+':'+m+':'+s+'.'+ms+'Z">' + dt.toLocaleString() + '</time>';
  },

  /* --- URLs and Navigation --- */

  reload: function (args) {
    var query = location.search;
    if (query) {
      args = args || {};
      var preserve = args.preserve || {};

      query = query.replace(/^\?/, '').split(/[&;]/);
      var changed = false;
      var newQuery = [];
      for (var i = 0; i < query.length; i++) {
        var qp = query[i];
        var m;
        if (m = qp.match(/^(locale.[^=]+)/)) {
          if (preserve[m[1]]) {
            newQuery.push(qp);
          } else {
            changed = true;
          }
        } else {
          newQuery.push(qp);
        }
      }

      if (changed) {
        location.search = '?' + newQuery.join('&');
        return;
      }
    } 

    location.reload(true);
  },

  /* --- Cookie and remote data configuration --- */

  project: 'Default',
  textDataFileNameStemSuffix: '',
  textDataDirName: '',
  dataHost: location.host,
  cookieDomain: '.hatena.ne.jp'
});

if (/\.hatena\.com$/i.test(location.hostname)) {
  Hatena.Locale.cookieDomain = '.hatena.com';
}

} // if (!Hatena.Locale)

