function loadAutoSynthesis() {
    let scriptElement = document.createElement('script');
    scriptElement.setAttribute('type', 'text/javascript');
    scriptElement.textContent = '(' + Init.toString() + ')(j213$);';
    document.body.appendChild(scriptElement);
}

function Init($) {
    let $LogBox = null;

    let xrwStatusText = function (xhr) {
        return xhr.setRequestHeader('X-Requested-With', 'statusText');
    };

    function log(s) {
        if ($LogBox && $LogBox.length) {
            $LogBox.val($LogBox.val() + s + "\n");
            $LogBox.scrollTop($LogBox[0].scrollHeight);
        }
        else {
            console.log(s);
        }
    }

    let exitFlg = false,
        errFlg = false;

    function autoSkillLvUp(cardId) {
        const WaitTime = 100;
        const RequireExp = [0, 0, 300, 800, 1800, 4000, 7000, 12000, 18000, 28000, 40000];
        const RequireExpSkill4 = [0, 0, 900, 2400, 5400, 12000, 21000, 36000, 54000, 84000, 120000];
        const RarityName = { 'jo': '序', 'jou': '上', 'toku': '特', 'goku': '極', 'ten': '天' };
        const FixedExp = { 'jo': 350, 'jou': 600, 'toku': 2000, };
        const CampaignFactor = $('div.new_union_campaign_info').length ? Number($('div.new_union_campaign_info div.hukidashi pre').eq(1).text().replace('倍', '')) : 1;

        // 入力値を保存
        localStorage.setItem('AutoSynthesis_TargetLv', $('#TargetLv').val());
        localStorage.setItem('AutoSynthesis_SenKujiNum', $('#SenKujiNum').val());
        localStorage.setItem('AutoSynthesis_ExcludeJou', $('#ExcludeJou').prop('checked'));
        localStorage.setItem('AutoSynthesis_ExcludeToku', $('#ExcludeToku').prop('checked'));
        localStorage.setItem('AutoSynthesis_ExcludeNames', $('#ExcludeNames').val());
        localStorage.setItem('AutoSynthesis_ExcludeSkills', $('#ExcludeSkills').val());
        localStorage.setItem('AutoSynthesis_TenShots', $('#TenShots').prop('checked'));
        localStorage.setItem('AutoSynthesis_TenShotsHidden', $('#TenShotsHidden').val());
        localStorage.setItem('AutoSynthesis_ExcludeRank', $('#ExcludeRank').prop('checked'));
        localStorage.setItem('AutoSynthesis_ExcludeLevel', $('#ExcludeLevel').prop('checked'));
        localStorage.setItem('AutoSynthesis_ExcludeAdditional', $('#ExcludeAdditional').prop('checked'));
        localStorage.setItem('AutoSynthesis_ExcludeRareCard', $('#ExcludeRareCard').prop('checked'));

        // 合成ボタンロック
        let $submit = $("#ASSubmit");
        $submit.val('合成中...');
        $submit.off('click');
        $submit.css({ 'background-image': '-webkit-gradient(linear, left top, left bottom, from(#44C), to(#116))', });
        let $inputselect = $('#AutoSkillUpMenu').find('input:not("#TenShotsHidden"), select');
        $inputselect.prop('disabled', true);
        let $exit = $("#ASExit");
        $exit.prop('disabled', false);
        $exit.css({ 'background-image': '-webkit-gradient(linear, left top, left bottom, from(#C44), to(#611))', });
        $('#ASSetMax').css({ 'background-image': '-webkit-gradient(linear, left top, left bottom, from(#444), to(#666))', }).prop('disabled', true);

        let targetLv = Number($('#TargetLv').val()),
            kujiNum = Number($('#SenKujiNum').val()),
            restDosen = -1,
            senkujiToken = "",
            capaMargin = -1,
            jqXHRList = [],
            cardInfoList = [],
            skill_id = [],
            skillIdList = [],
            excludeRarity = [],
            excludeNames = [],
            tenShots = false,
            excludeSkills = [],
            subId = "";

        class CardInfo {
            constructor(id, name, rarity, skill, exp) {
                this.id = id;
                this.name = name;
                this.rarity = rarity;
                this.skill = skill;
                this.exp = exp;
            }
        }

        // スキルレベルアップ
        function skillLvUp() {
            let finished = false;

            log('合成実行...');
            let postData = {
                select_card_group: $('input[name="select_card_group"]').val(),
                select_hp_status: $('input[name="select_hp_status"]').val(),
                common_filter_change_flg: $('input[name="common_filter_change_flg"]').val(),
                select_filter_num: $('input[name="select_filter_num"]').val(),
                show_deck_card_count: $('input[name="show_deck_card_count"]').val(),
                material_arr: $.map(cardInfoList, function (ci) { return ci.id; }),
                skill_radio: skill_id,
                base_cid: $('input[name="base_cid"]').val(),
                add_flg: $('input[name="add_flg"]').val(),
                new_cid: $('input[name="new_cid"]').val(),
                remove_cid: $('input[name="remove_cid"]').val(),
                selected_skill_radio: $('input[name="selected_skill_radio"]').val(),
                p: 1,
                selected_cid: $('input[name="selected_cid"]').val(),
                deck_mode: $('input[name="deck_mode"]').val(),
                union_type: $('input[name="union_type"]').val(),
                btn_change_flg: $('input[name="btn_change_flg"]').val(),
                use_cp_flg: 0,
                exec_btn: 1,
                sub_id: $('input[name="sub_id"]').val(),
            };
            if ($('input[name="ad_id"]').length) {
              postData.ad_id = $('input[name="ad_id"]').val();
            }

            $.ajax({
                type: 'post',
                url: '/union/levelup_execute.php',
                data: postData,
                beforeSend: xrwStatusText
            }).then(function (html) {
                // 合成結果確認
                let resultType = $(html).find('div.common_box1bottom > p.mb10 > img').attr('alt'),
                    expNum = $(html).find('p.new_union_result_para > strong.red').text();

                if (resultType.match(/合成方法/)) {
                    console.log(postData);
                    exit('エラー:合成失敗');
                    finished = true;
                }
                else {
                    log(`⇒ ${resultType} : exp ${expNum} 獲得`);

                    // 合成結果スキル毎確認
                    let nextLvSum = 0;
                    $(html).find('div.new_union_result_detail > div.skill_result').each(function () {
                        let $title = $(this).find('p.title'),
                            name = $title.text().match(/([^LV\s]+)LV/),
                            lv = 0,
                            exp_info = 0,
                            exp_bar_width = "0%";
                        let title_text = $title.text().match(/\s/g);
                        if (title_text !== null) {
                            if (title_text.length >= 2) {
                                title_text = $title.text().replace(/(.*)LV\d+/, '');
                                name = title_text.match(/([^LV\s]+)LV/);
                            }
                        }
                        if (name) {
                            name = name[1];
                        }
                        else {
                            name = $title.text().match(/([^LV\s]+)\sLV/)[1];
                        }
                        $(html).find('span.ig_skill_name').each(function () {
                            let matches = $(this).text().match(/(\S+)LV(\d+)/);
                            if (!matches) matches = $(this).text().match(/(\S+)\sLV(\d+)/);
                            if (matches && matches.length > 2 && matches[1] == name)
                                lv = Number(matches[2]);
                        });
                        // 目標Lvに到達したか?
                        if (lv < 10) exp_info = $(this).find('div.next_exp').children().eq(0).find('span.num').data('last_exp');
                        if (lv >= targetLv) {
                            // すべてのスキルが到達したなら終了
                            $('table.skill_list_table').find('td.name').each(function () {
                                let matches = $(this).text().match(/(\S+)LV(\d+)/);
                                if (!matches) matches = $(this).text().match(/(\S+)\sLV(\d+)/);
                                if (matches && matches.length > 2 && matches[1] == name) {
                                    $(this).prev().children().eq(0).prop('checked', false);
                                    getSkillIds();
                                    if (!(skill_id.length)) finished = true;
                                }
                            });
                        }

                        exp_bar_width = $(this).data('last_skill_per') + "%";

                        // 合成結果を合成画面に反映
                        $('table.skill_list_table > tbody > tr').each(function (index) {
                            let matches = $(this).find('td.name').text().match(/(\S+)LV(\d+)/);
                            if (!matches) matches = $(this).find('td.name').text().match(/(\S+)\sLV(\d+)/);
                            if (matches && matches.length > 2 && matches[1] == name) {
                                let prevLv = Number(matches[2]);
                                if (prevLv != lv) {
                                    let matches = $(this).find('th > input').val().match(/(\S+)(\d)/);
                                    if (matches && matches.length > 2) {
                                        $(this).find('th > input').val(matches[1] + (Number(matches[2]) + (lv - prevLv)));
                                        getSkillIds();
                                    }
                                    else {
                                        exit('エラー:スキルID更新エラー');
                                        finished = true;
                                    }

                                    $(this).find('td.name').text(name + "LV" + lv);
                                    $(this).find('td.name').animate({ 'backgroundColor': 'red' }, 1000);
                                    if (lv < 10)
                                        $(this).find('span.num').css({ 'width': '0%' });
                                }
                                $(this).find('td.next_lv').text(exp_info);
                                if (index != 3) {
                                    $(this).find('td.next_lv.max').text((Number(exp_info) + RequireExp[10] - RequireExp[lv + 1]) || '-');
                                    if ($.isNumeric($(this).find('td.next_lv.max').text())) {
                                        nextLvSum += Number($(this).find('td.next_lv.max').text());
                                    }
                                }
                                else {
                                    $(this).find('td.next_lv.max').text((Number(exp_info) + RequireExpSkill4[10] - RequireExpSkill4[lv + 1]) || '-');
                                    if ($.isNumeric($(this).find('td.next_lv.max').text())) {
                                        nextLvSum += Number($(this).find('td.next_lv.max').text());
                                    }
                                }
                                $(this).find('span.num').animate({ 'width': exp_bar_width }, 1000);
                            }
                        });
                    });
                    $('span.get_full_exp').text(nextLvSum);
                }

                jqXHRList = [];
                cardInfoList = [];

                if (exitFlg) {
                    finished = true;
                    exit('===処理が中断されました===');
                }

                if (errFlg) {
                    finished = true;
                }

                //log(`finished = ${finished}`);
                // 目標Lvに到達していないならもう一度
                if (!finished) {
                    getKujiToken(kujiNum).then(function () {
                        castSenKuji('0', kujiNum, senkujiToken).then(skillLvUp);
                    }, function () {
                        exit('---合成終了---');
                    });
                }
                else {
                    getKujiToken(-1).then(function () {
                        exit('---合成終了---');
                    });
                }
            });
        }

        // トークンと所持枠・所持銅銭取得
        function getKujiToken(checkNum) {
            let deferred = new $.Deferred;

            if (exitFlg) {
                exit('===処理が中断されました===');
                deferred.reject();
                return deferred.promise();
            }

            $.ajax(
                {
                    type: 'post',
                    url: '/senkuji/senkuji.php',
                    beforeSend: xrwStatusText
                }
            ).then(function (html) {
                let nums = $(html).find('p.l_cardstock').text().match(/(\d+) \/ (\d+)/);
                capaMargin = Number(nums[2]) - Number(nums[1]);
                restDosen = Number($(html).find('span.money_b').text().replace("万", ""));
                senkujiToken = $(html).find('input[name="senkuji_token"]').val(),
                subId = $(html).find('input[name="sub_id"]').val() || 0;
                log(`■所持枠空き: ${capaMargin}, 銅銭: ${restDosen}`);

                // 終了判定 log(`${checkNum} !!`);
                if (checkNum > 0) {
                    // 所持枠確認 log(`${capaMargin} ? ${checkNum}`);
                    if (capaMargin >= checkNum) {
                        // 銅銭確認 log(`${restDosen} ? ${500 * checkNum}`);
                        if (restDosen >= 500 * checkNum) {
                            //log('再実行可能');
                            deferred.resolve();
                        }
                        else {
                            exit('銅銭が足りません');
                            deferred.reject();
                        }
                    }
                    else {
                        exit('カード所持枠が足りません');
                        deferred.reject();
                    }
                }
                else {
                    $('span.money_b').text(restDosen);
                    deferred.resolve();
                }
            }, function () {
                exit('通信エラー:クジ画面取得失敗');
                deferred.reject();
            });

            return deferred.promise();
        }

        // 指定枚数まで一枚ずつくじ引き
        function castSenKuji(t, n, token) {
            let deferred = new $.Deferred;
            let count = 0;
            let excludeCnt = 0;

            function cast(t, n, token, deferred) {
                if (exitFlg) {
                    exit('===処理が中断されました===');
                    return deferred.reject();
                }

                $.ajax({
                    type: 'post',
                    url: '/senkuji/play_senkuji.php',
                    data: { send: 'send', got_type: t, senkuji_token: token, sub_id: subId, },
                    beforeSend: xrwStatusText
                }).then(function (html) {
                    // 白くじを引けなかったら終了
                    if (!$(html).find('div.cardstatus').length) {
                        log('エラー : 白くじ獲得失敗 [1000枚制限]');
                        errFlg = true;
                        if (count == 0) {
                            exit('---合成終了---');
                            return deferred.reject();
                        }
                        else {
                            log('===ここまでのカードを合成します===');
                            return deferred.resolve();
                        }
                    }

                    $(html).find('div.cardstatus').each(function () {
                        tenShots = false;
                        if ($('#TenShotsHidden').val() == '1') {
                            tenShots = true;
                        }

                        let $card = $(this).find('div.parameta_area');
                        let cardId = $card.find('span.commandsol_').attr('id').match(/card_commandsol_(\d+)/)[1];
                        let card_name = $(this).find('span.ig_card_name').text(),
                            rarity = $(this).find('span[class^="rarity_"]').attr('class').match(/rarity_([a-z]+)/)[1],
                            skill_name = $(this).find('span.ig_skill_name').text().match(/(\S+)LV/)[1],
                            exp = FixedExp[rarity] * CampaignFactor;

                        s = " [" + RarityName[rarity] + "] " + card_name + " (" + skill_name + ")";

                        // 指定された条件で除外
                        if (excludeRarity.indexOf(rarity) == -1 && excludeNames.indexOf(card_name) == -1 && excludeSkills.indexOf(skill_name) == -1) {
                            log(s);
                            cardInfoList.push(new CardInfo(cardId, card_name, rarity, skill_name, exp));
                        }
                        else {
                            log(`${s} : 除外`);
                            excludeCnt++;
                        }

                        count++;
                    });

                    if ($(document).find('#whitecount').length) {
                        let Dt = new Date();
                        let now = Dt.getFullYear() + '/' + (Dt.getMonth() + 1) + '/' + Dt.getDate();
                        let storageKey = 'ixamoko_white_lottery';
                        if (document.body.classList.contains("current_owner_sub")) {
                            storageKey = 'zs_' + storageKey;
                        }
                        let whiteLottery = window.localStorage.getItem(storageKey);
                        if (whiteLottery) {
                            whiteLottery = JSON.parse(whiteLottery);
                        }
                        else {
                            whiteLottery = {"date": now, "count": 0};
                        }
                        if(whiteLottery.date !== now) {
                            whiteLottery = {"date": now, "count": 0};
                        }
                        let gotType = t == '1320' ? 10 : 1;
                        let newWhtCnt = Number(whiteLottery.count) + gotType;
                        let wcStr = '今日引ける枚数: ' + newWhtCnt + '/1000';
                        $(document).find('#whitecount').text(wcStr);
                        whiteLottery = {"date": now, "count": newWhtCnt};
                        localStorage.setItem(storageKey, JSON.stringify(whiteLottery));
                    }

                    if (tenShots && cardInfoList.length == 0) {
                        log(`素材: ${cardInfoList.length} 枚取得[除外 ${excludeCnt} 枚] --- 再度10連`);
                        setTimeout(cast.bind(null, t, n, token, deferred), WaitTime);
                    }

                    // 必要経験値に到達したら終了
                    let totalRequiredExp = Number($('span.get_full_exp').text()),
                        expectedExp = cardInfoList.reduce((sum, elm) => sum + elm.exp, 0);
                    $('table.skill_list_table.powerup tr').each(function(idx, elm) {
                        if ($(this).find('input.skill_radio')) {
                            if ($(this).find('input.skill_radio').prop('checked')) {
                                if (idx == 3) {
                                    totalRequiredExp -= (RequireExpSkill4[10] - RequireExpSkill4[targetLv]);
                                } else {
                                    totalRequiredExp -= (RequireExp[10] - RequireExp[targetLv]);
                                }
                            }
                        }
                    });
                    if (expectedExp >= totalRequiredExp) {
                        log(`素材 ${cardInfoList.length} 枚取得完了[除外 ${excludeCnt} 枚] : 必要経験値到達`);
                        return deferred.resolve();
                    }

                    if (!tenShots) {
                        if (kujiNum - cardInfoList.length <= 10) {
                            t = '0';
                        }

                        // 指定枚数に達してないならもう一度
                        if (cardInfoList.length < kujiNum) {
                            //log(`${count} < ${kujiNum}`);
                            if (count < n) {
                                setTimeout(cast.bind(null, t, n, token, deferred), WaitTime);
                            }
                            else {
                                // 再度所持枠・銅銭確認
                                let m = kujiNum - cardInfoList.length;
                                count = 0;
                                log(`${m} 枚不足`);
                                getKujiToken(m).then(function () {
                                    if (exitFlg) {
                                        exit('===処理が中断されました===');
                                        return deferred.reject();
                                    }
                                    setTimeout(cast.bind(null, t, m, token, deferred), WaitTime);
                                }, function () {
                                    exit('---合成終了---');
                                    deferred.reject();
                                });
                            }

                        }
                        else {
                            log(`素材 ${cardInfoList.length} 枚取得完了[除外 ${excludeCnt} 枚]`);
                            deferred.resolve();
                        }
                    }
                    else {
                        if (cardInfoList.length + 10 <= kujiNum) {
                            let nums2 = $(html).find('p.l_cardstock').text().match(/(\d+) \/ (\d+)/);
                                capaMargin2 = Number(nums2[2]) - Number(nums2[1]);
                                restDosen2 = Number($(html).find('span.money_b').text().replace("万", ""));
                            if (capaMargin2 < 10) {
                                log('カード所持枠が足りなくなりました');
                                log('===合成を実行します===');
                                log(`素材 ${cardInfoList.length} 枚取得[除外 ${excludeCnt} 枚]`);
                                return deferred.resolve();
                            }
                            else if (restDosen2 < 5000) {
                                errFlg = true;
                                log('銅銭が足りなくなりました');
                                log('===ここまでのカードを合成します===');
                                log(`素材 ${cardInfoList.length} 枚取得[除外 ${excludeCnt} 枚]`);
                                return deferred.resolve();
                            }
                            else {
                                setTimeout(cast.bind(null, t, n, token, deferred), WaitTime);
                            }
                        }
                        else {
                            log(`素材 ${cardInfoList.length} 枚取得完了[除外 ${excludeCnt} 枚]`);
                            deferred.resolve();
                        }
                    }
                }, function () {
                    exit('通信エラー:くじ引き失敗');
                    deferred.reject();
                });
            }

            if (n >= 10) t = '1320';
            log(`白くじ ${n} 枚引き中...`);
            cast(t, n, token, deferred);

            return deferred.promise();
        }

        // selected_skill_radioのための文字列作成&スキル名⇔ID配列確保 
        // 目標Lvに到達したスキルはチェックを外す
        function getSkillIds() {
            if (true === skill_level_exp_collect_enable) {
                skill_id = $('input[name="skill_radio[]"]:checked').map(function () {
                    let matches = $(this).parent().next().text().match(/(\S+)LV(\d+)/);
                    if (!matches) matches = $(this).parent().next().text().match(/(\S+)\sLV(\d+)/);
                    if (matches && matches.length > 2) {
                        let lv = Number(matches[2]);
                        if (lv < targetLv) {
                            skillIdList[matches[1]] = $(this).val();
                            return $(this).val();
                        }
                        else {
                            log(`${matches[1]} は既に LV${targetLv} 以上です`);
                            $(this).prop('checked', false);
                        }
                    }
                }).get();
            }
            else {
                skill_id = $('input[name="skill_radio"]:checked').val();
            }

            if (skill_id.length)
                $('input[name="selected_skill_radio"]').val(skill_id.join(','));
        }

        // 開始ボタン復帰
        function exit(s) {
            log(s);
            $submit.val('開始');
            $submit.prop('disabled', false);
            $submit.css({ 'background-image': '-webkit-gradient(linear, left top, left bottom, from(#C44), to(#611))', });
            $submit.on('click', autoSkillLvUp.bind(null, $('input[name="base_cid"]').val()));
            $inputselect.prop('disabled', false);
            $exit.prop('disabled', true);
            $exit.css({ 'background-image': '-webkit-gradient(linear, left top, left bottom, from(#444), to(#666))', });
            $('#ASSetMax').css({ 'background-image': '-webkit-gradient(linear, left top, left bottom, from(#C44), to(#611))', });
            exitFlg = false;
            errFlg = false;
            if (Number($('#SenKujiNum').val()) % 10 == 0) {
                $('#TenShots').prop('disabled', false);
            }
            else {
                $('#TenShots').prop('disabled', true);
            }
            if ($('#TenShots').prop('checked') && !$('#TenShots').prop('disabled')) {
                $('#TenShotsHidden').val('1');
            }
            else {
                $('#TenShotsHidden').val('0');
            }
        }

        //-----------------------------------------------------

        if (!(targetLv >= 2 && targetLv <= 10)) {
            exit('エラー:目標レベルを入力して下さい(2~10)');
            return;
        }

        if (!(kujiNum >= 1 && kujiNum <= 100)) {
            exit('エラー:素材カード数/回を入力して下さい(1~100)');
            return;
        }

        if (eval($('#ExcludeJou').prop('checked'))) excludeRarity.push('jou');
        if (eval($('#ExcludeToku').prop('checked'))) excludeRarity.push('toku');

        excludeNames = $('#ExcludeNames').val().split(',');
        excludeSkills = $('#ExcludeSkills').val().split(',');

        getSkillIds();

        // 合成対象スキルがチェックされているか?
        if (skill_id.length) {
            getKujiToken(kujiNum).then(function () {
                castSenKuji('0', kujiNum, senkujiToken).then(skillLvUp);
            }, function () {
                exit('---合成終了---');
            });
        }
        else {
            exit('強化するスキルを選んでください');
        }
    }

    function setMaxMaterial() {
        // 入力値を保存
        localStorage.setItem('AutoSynthesis_TargetLv', $('#TargetLv').val());
        localStorage.setItem('AutoSynthesis_SenKujiNum', $('#SenKujiNum').val());
        localStorage.setItem('AutoSynthesis_ExcludeJou', $('#ExcludeJou').prop('checked'));
        localStorage.setItem('AutoSynthesis_ExcludeToku', $('#ExcludeToku').prop('checked'));
        localStorage.setItem('AutoSynthesis_ExcludeNames', $('#ExcludeNames').val());
        localStorage.setItem('AutoSynthesis_ExcludeSkills', $('#ExcludeSkills').val());
        localStorage.setItem('AutoSynthesis_TenShots', $('#TenShots').prop('checked'));
        localStorage.setItem('AutoSynthesis_TenShotsHidden', $('#TenShotsHidden').val());
        localStorage.setItem('AutoSynthesis_ExcludeRank', $('#ExcludeRank').prop('checked'));
        localStorage.setItem('AutoSynthesis_ExcludeLevel', $('#ExcludeLevel').prop('checked'));
        localStorage.setItem('AutoSynthesis_ExcludeAdditional', $('#ExcludeAdditional').prop('checked'));
        localStorage.setItem('AutoSynthesis_ExcludeRareCard', $('#ExcludeRareCard').prop('checked'));

        $(document).find('#ASSetMax').css({ 'background-image': '-webkit-gradient(linear, left top, left bottom, from(#444), to(#666))', }).prop('disabled', true);

        let scrl = $(document).find('#scrl_div');
        let list = [];
        $('div.new_union_material_list div.union_material').each(function() {
            list.push($(this).attr('data-card_id'));
        });
      
        let fullExp = Number($('span.get_full_exp').text()),
            setCnt = 0,
            reloadFlg = true;

        $('img[alt="セットする"]').each(function() {
            // 保護はcontinue
            if ($(this).closest('a').attr('style') == 'display:none;') {
                return true;
            }

            // セット済みはcontinue
            let materialId = $(this).closest('a').attr('id').match(/card_set_btn_(\d+)/)[1];
            if (list.includes(materialId)) {
                return true;
            }

            // ランク判定
            if ($(document).find('#ExcludeRank').prop('checked')) {
                let star = $(this).closest('tr').find('div.rank span.rank_glay').text().trim() || '';
                if (star != '★★★★★') {
                  return true;
                }
            }

            // レベル判定
            if ($(document).find('#ExcludeLevel').prop('checked')) {
                let level = $(this).closest('tr').find('div.rank').closest('td').find('div:eq(1)').text().trim() || '20';
                if (level != '0') {
                  return true;
                }
            }

            // 追加スキル判定
            if ($(document).find('#ExcludeAdditional').prop('checked')) {
                let arrSkill = [];
                $(this).closest('tr').find('div.skill_name').each(function() {
                    arrSkill.push($(this).text().trim() || '-');
                });
                if (arrSkill.filter((v) => {return v != '-';}).length != 1) {
                    return true;
                }
            }

            // レアリティ判定
            if ($(document).find('#ExcludeRareCard').prop('checked')) {
                let bushoRarity = $(this).closest('tr').find('div[class^="icon_rarity_"]').attr('class').replace('icon_rarity_', '');
                if (!['jo', 'jou'].includes(bushoRarity)) {
                    return true;
                }
            }

            // 除外武将判定
            let excludeName = $('#ExcludeNames').val().split(',');
            if (excludeName) {
                let bushoName = $(this).closest('tr').find('a.busho_name').text().trim() || '';
                if (excludeName.includes(bushoName)) {
                    return true;
                }
            }

            // 除外スキル判定
            let excludeSkill = $('#ExcludeSkills').val().split(',');
            if (excludeSkill) {
                let skillName = $(this).closest('tr').find('div.skill_name:first').text().trim() || '';
                if (excludeSkill.includes(skillName)) {
                    return true;
                }
            }

            // 必要経験値で止める
            if (Number($('div.composite_box_exp.point').text().match(/\d+/)[0] || 0) >= fullExp) {
                reloadFlg = false;
                scrl.scrollTop(scrl[0].scrollHeight);
                alert('必要経験値に達しました');
                return false;
            }
          
            $(this).trigger('click');
            ++setCnt;

            // 100枚で止める
            if ($('div.union_material:last #exp_data').text() != '-') {
                reloadFlg = false;
                scrl.scrollTop(scrl[0].scrollHeight);
                alert('最大枚数をセットしました');
                return false;
            }
        });

        let nextPage = $('#bar_card:eq(0) ul.pager li.last a:eq(0)');
        if (setCnt == 0) {
            if (confirm('セット可能なカードがありません\n次ページへ遷移しますか?')) {
                if (nextPage.length) {
                    nextPage.trigger('click');
                }
                else {
                    scrl.scrollTop(scrl[0].scrollHeight);
                    alert('最終ページまでセットしました');
                    return false;
                }
            }
        }
        else if (reloadFlg) {
            if (nextPage.length) {
                nextPage.trigger('click');
            }
            else {
                scrl.scrollTop(scrl[0].scrollHeight);
                alert('最終ページまでセットしました');
            }
        }

        // セット済み素材を1番下までスクロール
        scrl.scrollTop(scrl[0].scrollHeight);
    }

    // levelUp用UI設置
    if (location.pathname == '/union/levelup.php') {
        const createOptions = function (id, start, end, selected) {
            let str = '<select id="' + id + '">';
            for (let n = start; n <= end; n++) {
                str += '<option value="' + n + '"';
                if (n == selected) {
                    str += ' selected';
                }
                str += '>' + n + '</option>';
            }
            str += '</select>';
            return str;
        }

        const cssClass = [
            ".AS_header { margin-bottom: 2px; padding: 5px; background-color: rgb(197,181,96); color: black;" +
            'font: bold 18px/140% "MS 明朝", serif; text-align: center; text-shadow: 1px 1px 1px rgba(0,0,0,0.1), -1px 1px 1px rgba(0,0,0,0.1), 1px -1px 1px rgba(0,0,0,0.1), -1px -1px 1px rgba(0,0,0,0.1); }',
            ".AS_contents { " + 'font-family: "MS 明朝"; ' + "display: flex; align-items: top; height: 340px; padding: 4px; background-color: rgb(43,41,37); }",
            ".AS_inputBoxContainer { width: 430px; margin-right: 5px; background-color: rgb(43,41,37); }",
            ".AS_inputInlineContainer { display: flex; align-items: center; padding: 2px; background-color: rgb(43,41,37); }",
            ".AS_inputText1 { width: 45px; height: 20px; border: none; border-bottom: white 1px solid; background-color: rgb(43,41,37); color: white; }",
            ".AS_inputText2 { flex: 1; border: none; border-bottom: white 1px solid; background-color: rgb(43,41,37); color: white; }",
            '.AS_logTextBox { flex: 1; align-self: stretch; border: white 1px solid; padding: 2px; background-color: rgb(24,24,24); color: white; font:12px/110% "MS 明朝", serif; }',
        ];

        let style = document.createElement("style");
        document.head.appendChild(style);

        let sheet = style.sheet;
        for (let i = 0; i < cssClass.length; i++) {
            sheet.insertRule(cssClass[i], sheet.cssRules.length);
        }

        let $menu = $('<div id="AutoSkillUpMenu">').css({ 'margin': '10px 16.5px', 'color': 'white', });
        let $head = $('<div>').addClass('AS_header').text('自動レベルアップ ').appendTo($menu);
        $('<img src="../img/lot/lot_tab_title_white10.png" alt="戦国くじ【白】拾連">').css({ 'display': 'inline', 'vertical-align': 'middle', 'width': '57px', 'height': '20px', 'margin-bottom': '4px', }).appendTo($head);
        $head.prop('innerHTML', $head.prop('innerHTML') + '&素材100枚 対応版');
        let $contents = $('<div>').addClass('AS_contents').appendTo($menu);
        let $inputBox = $('<div>').addClass('AS_inputBoxContainer').appendTo($contents);

        let $inputs = $('<div>').addClass('AS_inputInlineContainer').appendTo($inputBox);
        $('<p>').css({ 'height': '1px', }).appendTo($inputs);
        $inputs = $('<div>').addClass('AS_inputInlineContainer').appendTo($inputBox);
        $('<label for="TargetLv">').css({ 'padding': '0px 5px 0px 5px', }).text('目標スキルLV').appendTo($inputs);
        $(createOptions('TargetLv', 2, 10, localStorage.getItem('AutoSynthesis_TargetLv') || 10)).addClass('AS_inputText1').appendTo($inputs)
        $('<label for="SenKujiNum">').css({ 'padding': '0px 10px 0px 25px', }).text('素材カード数/回').appendTo($inputs);
        $(createOptions('SenKujiNum', 1, 12, localStorage.getItem('AutoSynthesis_SenKujiNum') || 12)).addClass('AS_inputText1').appendTo($inputs);
        $('<input id="ASExit" type="button" value="停止" disabled>').css({
            'width': '50px', 'padding': '2px 5px', 'border': 'white 1px solid', 'border-radius': '5px', 'background-color': '#BBB', 'color': 'white',
            'background-image': '-webkit-gradient(linear, left top, left bottom, from(#444), to(#666))', 'margin-left': 'auto',
        }).appendTo($inputs);

        $inputs = $('<div>').addClass('AS_inputInlineContainer').appendTo($inputBox);
        $('<label>').css({ 'padding': '0px 5px 0px 5px', 'height': '20px', 'display': 'flex', 'align-items': 'center', }).text('除外レア  ').appendTo($inputs);
        $('<input id="ExcludeJou" type="checkbox">').css({ 'margin-right': '2px', }).appendTo($inputs);
        $('<img src = "../img/card/icon/icon_jou.png">').css({ 'width': '18px', 'height': '18px', }).appendTo($inputs);
        $('<input id="ExcludeToku" type="checkbox">').css({ 'margin': '0px 2px 0px 12px', }).appendTo($inputs);
        $('<img src = "../img/card/icon/icon_toku.png">').css({ 'width': '18px', 'height': '18px', }).appendTo($inputs);

        $inputs = $('<div>').addClass('AS_inputInlineContainer').css('margin-bottom', '1px').appendTo($inputBox);
        $('<label for="ExcludeNames">').css({ 'padding': '0px 5px', }).text('除外武将名 ').appendTo($inputs);
        $(`<input id="ExcludeNames" type="text" value="${localStorage.getItem('AutoSynthesis_ExcludeNames') || ''}">`).addClass('AS_inputText2').appendTo($inputs);

        $inputs = $('<div>').addClass('AS_inputInlineContainer').appendTo($inputBox);
        $('<label for="ExcludeSkills">').css({ 'padding': '0px 5px', }).text('除外スキル ').appendTo($inputs);
        $(`<input id="ExcludeSkills" type="text" value="${localStorage.getItem('AutoSynthesis_ExcludeSkills') || ''}">`).addClass('AS_inputText2').appendTo($inputs);

        $inputs = $('<div>').addClass('AS_inputInlineContainer').appendTo($inputBox);
        $('<label for="TenShots">').css({ 'padding': '0px 5px 0px 5px', 'height': '20px', 'display': 'flex', 'align-items': 'center', }).text('10連のみ  ').appendTo($inputs);
        $('<input id="TenShots" type="checkbox">').appendTo($inputs);
        $('<input id="TenShotsHidden" type="hidden" value="0">').appendTo($inputs);
        $('<label>素材カード数が10の倍数の時のみ選択可能(引き直し無し)</label>').appendTo($inputs);

        $inputs = $('<div>').addClass('AS_inputInlineContainer').appendTo($inputBox);
        $('<input id="ASSubmit" type="button" value="開始">').css({
            'flex': '1', 'padding': '2px 5px', 'border': 'white 1px solid', 'border-radius': '5px', 'background-color': 'rgb(168,41,37)', 'color': 'white',
            'background-image': '-webkit-gradient(linear, left top, left bottom, from(#C44), to(#611))',
        }).appendTo($inputs).on('click', autoSkillLvUp.bind(null, $('input[name="base_cid"]').val()));

        $inputs = $('<div> </div>').addClass('AS_inputInlineContainer').appendTo($inputBox);
        $inputs = $('<div>').addClass('AS_inputInlineContainer').appendTo($inputBox);
        $('<span style="font-weight: bold;">余りカード処理 追加条件(除外武将・除外スキルも考慮)</span>').appendTo($inputs);

        $inputs = $('<div class="AS_AddionalCriteria">').addClass('AS_inputInlineContainer').appendTo($inputBox);
        $('<label for="ExcludeRank"><input id="ExcludeRank" type="checkbox">★1以上を除外(★0のみ)</label>').appendTo($inputs);

        $inputs = $('<div class="AS_AddionalCriteria">').addClass('AS_inputInlineContainer').appendTo($inputBox);
        $('<label for="ExcludeLevel"><input id="ExcludeLevel" type="checkbox">レベル1~20を除外(レベル0のみ)</label>').appendTo($inputs);

        $inputs = $('<div class="AS_AddionalCriteria">').addClass('AS_inputInlineContainer').appendTo($inputBox);
        $('<label for="ExcludeAdditional"><input id="ExcludeAdditional" type="checkbox">追加スキルを持つ武将を除外</label>').appendTo($inputs);

        $inputs = $('<div class="AS_AddionalCriteria">').addClass('AS_inputInlineContainer').appendTo($inputBox);
        $('<label for="ExcludeRareCard"><input id="ExcludeRareCard" type="checkbox">特以上を除外</label>').appendTo($inputs);

        $inputs = $('<div>').addClass('AS_inputInlineContainer').appendTo($inputBox);
        $('<input id="ASSetMax" type="button" value="全ての条件でこのページの待機武将から最大セットして次ページ">').css({
            'flex': '1', 'padding': '2px 5px', 'border': 'white 1px solid', 'border-radius': '5px', 'background-color': 'rgb(168,41,37)', 'color': 'white',
            'background-image': '-webkit-gradient(linear, left top, left bottom, from(#C44), to(#611))',
        }).appendTo($inputs).on('click', setMaxMaterial);

        $LogBox = $('<textarea id="LogBox" type="textbox" value="">').addClass('AS_logTextBox').appendTo($contents);

        if ($('.ig_deck_subcardarea').find('#id_deck_card1_front').length) {
            $('table#cardslot_table').after($menu);
        }

        $('.AS_AddionalCriteria').find('label').css({ 'padding': '0px 5px 0px 5px', 'height': '20px', 'display': 'flex', 'align-items': 'center', });
        $('.AS_AddionalCriteria').find('input').css({ 'margin-right': '2px', });

        //素材100枚対応
        for (let r = 20; r <= 100; r = r + 10) {
            $(document).find('#SenKujiNum').append($('<option value="' + r + '">' + r + '</option>'));
        }
        let storageVal = localStorage.getItem('AutoSynthesis_SenKujiNum');
        if (storageVal) {
            $(document).find('#SenKujiNum').val(storageVal);
        }
        else {
            $(document).find('#SenKujiNum').val('100');
        }

        if (eval(localStorage.getItem('AutoSynthesis_ExcludeJou'))) $('#ExcludeJou').prop('checked', true);
        if (eval(localStorage.getItem('AutoSynthesis_ExcludeToku'))) $('#ExcludeToku').prop('checked', true);
        if (eval(localStorage.getItem('AutoSynthesis_TenShots'))) $('#TenShots').prop('checked', true);
        if (eval(localStorage.getItem('AutoSynthesis_ExcludeRank'))) $('#ExcludeRank').prop('checked', true);
        if (eval(localStorage.getItem('AutoSynthesis_ExcludeLevel'))) $('#ExcludeLevel').prop('checked', true);
        if (eval(localStorage.getItem('AutoSynthesis_ExcludeAdditional'))) $('#ExcludeAdditional').prop('checked', true);
        if (eval(localStorage.getItem('AutoSynthesis_ExcludeRareCard'))) $('#ExcludeRareCard').prop('checked', true);
        if (Number($('#SenKujiNum').val()) % 10 == 0) {
            $('#TenShots').prop('disabled', false);
        }
        else {
            $('#TenShots').prop('disabled', true);
        }
        if ($('#TenShots').prop('checked') && !$('#TenShots').prop('disabled')) {
            $('#TenShotsHidden').val('1');
        }

        let scrollDiv = $('<div id="scrl_div" style="width: 459px; height: 317px; overflow-x: hidden; overflow-y: auto;">');
        $('#busho_info').wrapAll(scrollDiv);
        $(document).on('load ajaxStop', function() {
            $(document).find('#scrl_div').scrollTop($(document).find('#scrl_div')[0].scrollHeight);
        });
    }

    $('#SenKujiNum').on('change', function () {
        if (Number($(this).val()) % 10 == 0) {
            $('#TenShots').prop('disabled', false);
            if ($('#TenShots').prop('checked')) {
                $('#TenShotsHidden').val('1');
            }
            else {
                $('#TenShotsHidden').val('0');
            }
        }
        else {
            $('#TenShots').prop('disabled', true);
            $('#TenShotsHidden').val('0');
        }
    });

    $('#ASExit').on('click', function () {
        exitFlg = true;
        return false;
    });

}

if (document.readyState === 'loading') {
  document.addEventListener('DOMContentLoaded', loadAutoSynthesis);
}
else {
  loadAutoSynthesis();
}

END

Close