$(function ()
{
    // 初期化
    var days   = { 1:31, 2:28, 3:31, 4:30, 5:31, 6:30, 7:31, 8:31, 9:30, 10:31, 11:30, 12:31 },
        $m_sel = $('[name="Emonth"]'),
        $d_sel = $('[name="Eday"]'),
        now = new Date();
        _m  = now.getMonth()+1, // 0-11 を 1-12 に補正
        _d  = now.getDate()+3;  // 3日後以降が予約対象

    $m_sel.empty();
    $d_sel.empty();

    // 現在について、向こう1年分の月と、今月の日付を補正して定義
    // 3日の数字が今月が存在しないならば補正して、次の月に進める
    var i   = (days[_m] <= _d) ? ((_m + 1)>12 ? (_m + 1)-12 // 13月であれば1月に補正
                                              : (_m + 1) )  // でなければ +1ヶ月
                               : _m,
        iz  = i + 11,
        d   = (_d >= days[i]) ? (_d - days[i]) : _d, // 月をまたいで32日や33日である場合は、1日や2日から始まるように補正
        dz  = days[i];
        tmp = {i:i, iz:iz, d:d, dz:dz};

    // 1年分の月を再構築
    for ( ; i <= iz; i++ ) {
        var m = i > 12 ? i - 12
                       : i;
        $m_sel.append('<option value="'+m+'">'+m+'</option>');
    }

    // 今月の日を再構築
    for ( ; d <= dz; d++ ) {
        $d_sel.append('<option value="'+d+'">'+d+'</option>');
    }

    $m_sel.change(function()
    {
        var new_m = $(this).val(),
            n     = (new_m == tmp['i']) ? tmp['d'] : 1,
            nz    = days[new_m],
            ram   = $d_sel.val();
        $d_sel.empty();
        for ( ; n <= nz; n++ ) {
            $d_sel.append('<option value="'+n+'">'+n+'</option>');
        }
        $d_sel.val(ram);
    });
});
