[hideprofile]

[html]    <div id="bank-calculator-wrapper">
        <div class='my-bank-calculator-bank'>
            <div class='my-bank-calculator-account'>
                <label for="initialAmount">Введите ваш баланс:</label>
                <input type="number" id="initialAmount" value="0">
            </div>

            <p>В окошках укажите, сколько раз посчитать каждый пункт (укажите цифрами количество). Если считать не нужно, не указывайте ничего. Строки с примечаниями "дополнительно" начисляются за выполнение условий: например, вы получите за закрытие эпизода определённую сумму, но если сделаете это за неделю, то можете взять вместе с этим и дополнительный бонус.</p>

            <div class='my-bank-calculator-banklist'>
                <ul class='earn'>
<li data-bank="40" id='1' class='headli'><span class="item-description">регистрация</span><textarea></textarea></li>
<li data-bank="50"><span class="item-description">регистрация нужного</span><textarea></textarea></li>
<li data-bank="20"><span class="item-description">привести друга на форум [+ принятая анкета]</span><textarea></textarea></li>
<li data-bank="10"><span class="item-description">написание заявки в «хочу видеть»</span><textarea></textarea></li>
<li data-bank="20"><span class="item-description">написание заявки в «нужные»</span><textarea></textarea></li>
<li data-bank="35"><span class="item-description">написание группы «нужных»</span><textarea></textarea></li>
<li data-bank="5"><span class="item-description">предложить что-либо написавшему в «хочу к вам»</span><textarea></textarea></li>
<li data-bank="80" id='2' class='headli'><span class="item-description">открытие эпизода (каждому)</span><textarea></textarea></li>
<li data-bank="40"><span class="item-description">первый пост в эпизоде (каждому)</span><textarea></textarea></li>
<li data-bank="10"><span class="item-description">пост в снс</span><textarea></textarea></li>
<li data-bank="30"><span class="item-description">пост до 3к</span><textarea></textarea></li>
<li data-bank="40"><span class="item-description">пост от 3к</span><textarea></textarea></li>
<li data-bank="20"><span class="item-description">дополнительно: использование 1 сюжетной ситуации в посте</span><textarea></textarea></li>
<li data-bank="10"><span class="item-description">дополнительно: за ответ в течение суток</span><textarea></textarea></li>
<li data-bank="20"><span class="item-description">закрытие эпизода</span><textarea></textarea></li>
<li data-bank="10"><span class="item-description">дополнительно: эпизод закрыт за неделю или меньше</span><textarea></textarea></li>
<li data-bank="200"><span class="item-description">дополнительно: за закрытый эпизод с сюжетной ситуацией</span><textarea></textarea></li>
<li data-bank="20" id='3' class='headli'><span class="item-description">завести соцсеть</span><textarea></textarea></li>
<li data-bank="5"><span class="item-description">1 пост в соцсеть</span><textarea></textarea></li>
<li data-bank="150"><span class="item-description">проведение квеста</span><textarea></textarea></li>
<li data-bank="100"><span class="item-description">проведение ивента</span><textarea></textarea></li>
<li data-bank="20" id='4' class='headli'><span class="item-description">каждые 100 сообщений</span><textarea></textarea></li>
<li data-bank="20"><span class="item-description">каждые 100 плюсов репутации</span><textarea></textarea></li>
<li data-bank="10"><span class="item-description">каждые 100 плюсов позитива</span><textarea></textarea></li>
<li data-bank="50"><span class="item-description">попадание в таблицу [за каждую номинацию]</span><textarea></textarea></li>
<li data-bank="20"><span class="item-description">помощь с графикой</span><textarea></textarea></li>
<li data-bank="3"><span class="item-description">1 реклама</span><textarea></textarea></li>
<li data-bank="300"><span class="item-description">единоразово: баннер на одном арт-форуме</span><textarea></textarea></li>
                </ul>
                <ul class='spend'>
<li data-bank="400" id='5' class='headli'><span class="item-description">выкуп внешности для нужного/твина на 2 недели</span><textarea></textarea></li>
<li data-bank="300"><span class="item-description">выкупить имя/фамилию [для нужного/твина] на 2 недели</span><textarea></textarea></li>
<li data-bank="500"><span class="item-description">реклама с нужным [наша графика] на 2 недели</span><textarea></textarea></li>
<li data-bank="1600"><span class="item-description">вечный выкуп имени/фамилии [для нужного/твина]</span><textarea></textarea></li>
<li data-bank="100" id='6' class='headli'><span class="item-description">смена внешности [первый раз бесплатно]</span><textarea></textarea></li>
<li data-bank="100"><span class="item-description">смена имени [первый раз бесплатно]</span><textarea></textarea></li>
<li data-bank="300"><span class="item-description">смена персонажа [первый раз бесплатно]</span><textarea></textarea></li>
<li data-bank="2000" id='7' class='headli'><span class="item-description">заказ гма [один эпизод]</span><textarea></textarea></li>
<li data-bank="500"><span class="item-description">иммунитет от чистки [одной]</span><textarea></textarea></li>
<li data-bank="100"><span class="item-description">покупка места в таблице</span><textarea></textarea></li>
<li data-bank="500"><span class="item-description">получить награду ивента без выполнения заданий, если награда - оформление или спутник</span><textarea></textarea></li>
                </ul>
            </div>

            <p>Скопируйте расчёт ниже и приложите необходимые ссылки-подтверждения, если требуется:</p>

            <div class='my-bank-calculator-outbank'>
                <h2>× <b>Доходы</b></h2>
                <code id="outbankEarn"></code>
                <h2>× <b>Расходы</b></h2>
                <code id="outbankSpend"></code>
                <h2>× <b>Итого в профиле</b></h2>
                <code id="outbankResult"></code>
            </div>
            <button class="my-bank-calculator-copy-button">Копировать</button>
            <button class="my-bank-calculator-resetButton">Сбросить всё</button>
        </div>
    </div>

    <div id="copyMessage"></div>

    <script>
        const initialAmountInput = document.getElementById('initialAmount');
        const earnList = document.querySelector('.earn');
        const spendList = document.querySelector('.spend');
        const outbankEarn = document.getElementById('outbankEarn');
        const outbankSpend = document.getElementById('outbankSpend');
        const outbankResult = document.getElementById('outbankResult');
        const resetButton = document.querySelector('.my-bank-calculator-resetButton');
        const copyButton = document.querySelector('.my-bank-calculator-copy-button');
        const copyMessage = document.getElementById('copyMessage');

        function calculateValues(list, isAddition) {
            let total = 0;
            let text = "";
            const sign = isAddition ? '+' : '-';

            for (let i = 0; i < list.children.length; i++) {
                const item = list.children[i];
                if (item.tagName === 'H3') continue;

                const itemDescriptionSpan = item.querySelector('.item-description');
                const itemDescription = itemDescriptionSpan ? itemDescriptionSpan.textContent : 'Неизвестный пункт';

                const valueText = item.querySelector('textarea').value;
                const values = valueText.split(',').map(v => parseFloat(v.trim())).filter(v => !isNaN(v));

                if (values.length > 0) {
                    const bankValue = parseInt(item.dataset.bank);
                    let itemTotal = 0;
                    // Используем <p> для заголовка пункта, это создаст новую строку при innerText
                    text += `<p><strong>${itemDescription} (${sign}${bankValue}):</strong></p>`;

                    for (const value of values) {
                        const calculationResult = bankValue * value;
                        // Используем <p> для каждого вычисления, это создаст новую строку при innerText
                        text += `<p style="margin-left: 20px;">${sign}${bankValue} x ${value} = ${calculationResult}</p>`;
                        itemTotal += calculationResult;
                    }
                    if (values.length > 1) {
                         // Используем <p> для итога по пункту, это создаст новую строку при innerText
                         text += `<p style="margin-left: 20px;">Итого по пункту: ${itemTotal}</p>`;
                    }
                    total += itemTotal;
                }
            }
            return { total, text };
        }

        function updateCalculation() {
            let initialAmount = parseFloat(initialAmountInput.value) || 0;

            const earnResult = calculateValues(earnList, true);
            const spendResult = calculateValues(spendList, false);

            let finalResult = initialAmount + earnResult.total - spendResult.total;
            let difference = finalResult - initialAmount; // Вычисляем разницу

            // Формируем текст для итогового блока с использованием <br> для отображения
            let resultSummaryHTML = `Начальный баланс: ${initialAmount}<br>`;
            resultSummaryHTML += `Всего начислено: ${earnResult.total}<br>`;
            resultSummaryHTML += `Всего потрачено: ${spendResult.total}<br>`;
            resultSummaryHTML += `Итого: ${finalResult}<br>`; // Добавляем перенос строки после Итого
            resultSummaryHTML += `Разница с начальным балансом: ${difference}`; // Добавляем строку с разницей

            outbankEarn.innerHTML = `<code>${earnResult.text}</code>`;
            outbankSpend.innerHTML = `<code>${spendResult.text}</code>`;
            outbankResult.innerHTML = resultSummaryHTML;
        }

        initialAmountInput.addEventListener('input', updateCalculation);
        earnList.addEventListener('input', updateCalculation);
        spendList.addEventListener('input', updateCalculation);

        resetButton.addEventListener('click', () => {
            initialAmountInput.value = '0';
            earnList.querySelectorAll('textarea').forEach(textarea => textarea.value = '');
            spendList.querySelectorAll('textarea').forEach(textarea => textarea.value = '');
            outbankEarn.innerHTML = '';
            outbankSpend.innerHTML = '';
            outbankResult.innerHTML = '';
        });

        function addBankValueToListItem() {
            const listItems = document.querySelectorAll('.my-bank-calculator-banklist li');

            listItems.forEach(listItem => {
                const bankNumber = listItem.dataset.bank;
                const span = document.createElement('span');
                span.textContent = bankNumber;
                span.classList.add('bank-value');
                const itemDescriptionSpan = listItem.querySelector('.item-description');
                if (itemDescriptionSpan) {
                    listItem.insertBefore(span, itemDescriptionSpan);
                } else {
                    listItem.insertBefore(span, listItem.firstChild);
                }
            });
        }
        addBankValueToListItem();

        function showCopyMessage(message) {
            copyMessage.textContent = message;
            copyMessage.style.display = 'block';
            setTimeout(() => {
                copyMessage.style.display = 'none';
            }, 2000);
        }

        function copyToClipboard() {
            // Получаем заголовки и содержимое каждого блока по отдельности
            const earnTitle = document.querySelector('.my-bank-calculator-outbank h2:nth-of-type(1)').innerText;
            const earnContent = outbankEarn.innerText; // innerText сохранит переносы строк из <p>
            const spendTitle = document.querySelector('.my-bank-calculator-outbank h2:nth-of-type(2)').innerText;
            const spendContent = outbankSpend.innerText; // innerText сохранит переносы строк из <p>
            const resultTitle = document.querySelector('.my-bank-calculator-outbank h2:nth-of-type(3)').innerText;
            const resultContent = outbankResult.innerText; // innerText сохранит переносы строк из <br>

            // Собираем текст для копирования, добавляя пустые строки между блоками
            let textToCopy = `${earnTitle}\n${earnContent}\n\n`;
            textToCopy += `${spendTitle}\n${spendContent}\n\n`;
            textToCopy += `${resultTitle}\n${resultContent}\n`;

            navigator.clipboard.writeText(textToCopy)
            .then(() => {
                showCopyMessage("Текст скопирован в буфер обмена!");
            })
            .catch(err => {
                console.error('Failed to copy using Clipboard API: ', err);
                const tempInput = document.createElement('textarea');
                tempInput.value = textToCopy;
                document.body.appendChild(tempInput);
                tempInput.focus();
                tempInput.select();
                try {
                    document.execCommand('copy');
                    showCopyMessage('Текст скопирован в буфер обмена!');
                } catch (e) {
                    console.error("execCommand('copy') failed", e);
                    showCopyMessage('Копирование не поддерживается вашим браузером. Пожалуйста, скопируйте текст вручную.');
                } finally {
                    document.body.removeChild(tempInput);
                }
            });
        }

        copyButton.addEventListener('click', copyToClipboard);

        updateCalculation();

    </script>
[/html]