/**
 * 年式ドロップダウン生成
 *   西暦／和暦形式の車の年式ドロップダウンリスト値を生成する。
 * @param targetId   optionsタグをセットするselectタグのid。
 * @param optDefault optionsタグで初期選択したい年(西暦)。
 * @param saveIdx    optionsタグ生成時に現行のリストで残しておきたいリストインデックス番号。
 * @version 1.0
 */
function _modelYearVar_initOptions(targetId, optDefault, saveIdx) {
    // 引数チェック。
    if (!targetId || !document.getElementById(targetId)) return;
    saveIdx = (!saveIdx) ? 0: saveIdx;

    // 和暦元号ソート。
    var jpEraNew = _modelYearVar_jpEraSort(this);

    // selectタグリセット。
    var objParent = document.getElementById(targetId);
    objParent.remove(saveIdx);

    // optionsタグ生成。
    for (var idx = this.nowYear; idx > (this.nowYear - this.listCount); idx--) {
        var newOpt = document.createElement("option")
        var newVal = _modelYearVar_createListValue(idx, this);
        if (!newVal) continue;

        newOpt.value     = idx;
        newOpt.innerHTML = newVal
        newOpt.selected  = (String(idx) == String(optDefault)) ? true: false;
        objParent.appendChild(newOpt);
    }

    /**
     * 和暦元号リストソート
     *   和暦元号リスト(連想配列オブジェクト)を新しい順にソートする。
     * @param obj 年式ドロップダウン生成クラス。
     * @version 1.0
     */
    function _modelYearVar_jpEraSort(obj) {
        var tempObj = new Object();
        var tempAry = new Array();
        for (key in obj.jpEra) { tempAry[key] = Number(key); }
        tempAry.sort(function (x, y) { return x > y ? -1 : x < y ? 1 : 0;});
        for (key in tempAry) { tempObj[String(tempAry[key])] = obj.jpEra[String(tempAry[key])]; }
        return tempObj;
    }

    /**
     * optionsタグ表示テキスト生成。
     *   optionsタグの表示テキストを編集する。
     *   表示テキストのは以下のフォーマットで出力される。
     *     "西暦(半角数値)" + "年" + "/" + "和暦元号" + "和暦(全角数値)" + "年"
     *     尚、和暦元号開始年の場合、"元年"として表示される。
     * @param obj 年式ドロップダウン生成クラス。
     * @version 1.0
     */
    function _modelYearVar_createListValue(yy, obj) {
        var ret;
        for (key in jpEraNew) {
            if (Number(key) <= yy) {
                var jpYy = (Number(key) == yy) ? obj.jpEraStart:
                                                 String(yy - Number(key) + 1).replace(/([0-9])/g, function ($0) {return String.fromCharCode($0.charCodeAt(0) + 65248);});
                ret = String(yy) + obj.jpUnit + obj.delimit + jpEraNew[key] + jpYy + obj.jpUnit;
                break;
            }
        }
        return ret;
    }
}
/**
 * 年式ドロップダウン生成クラス
 *   車の年式ドロップダウンを生成する。
 * @version 1.0
 */
function _modelYearVar() {
    // インスタンス変数宣言
    this.nowYear    = (new Date()).getFullYear(); // 現在年(システム当年)
    this.jpEra      = {                           // 和暦元号
                          "1867":["明治"],
                          "1912":["大正"],
                          "1926":["昭和"],
                          "1989":["平成"]
                      };
    this.jpEraStart = "元";                       // 和暦元年
    this.jpUnit     = "年";                       // 単位文字：年
    this.delimit    = "/"                         // 西暦／和暦セパレーター
    this.listCount  = 40;                         // リスト件数
}
_modelYearVar.prototype.initOptions = _modelYearVar_initOptions; // optionタグ生成

// 当JavaScript読込み時にインスタンスを生成しておく。
var modelYearVar = new _modelYearVar();
