Doublexp doubleskill.png Double Exp & Skill: Matar monstros rende o dobro de pontos de experiência. O progresso de skills é duas vezes mais rápido! Doublexp doubleskill.png
Bone Overlord.gif The Roost of the Graveborn Quest Spoiler!
Domine Graveborn: todos os bosses e mecânicas ilustradas!
Saiba mais ➔
Winter Tree.png Winter Update 2025
Acompanhe tudo sobre o Winter Update 2025!
Saiba mais ➔
Stag.gif The Order of the Stag Quest Spoiler!
Conheça Isle of Ada: sua quest, missões secundárias e todos os bosses!
Saiba mais ➔

Tibia Wiki:Imbuing/Codigo: mudanças entre as edições

De Tibia Wiki - A Enciclopédia do Tibia
Ir para navegação Ir para pesquisar
Linha 1: Linha 1:
<pre id="imbuing_html">
<pre id="imbuing_html">
<div class="main_panel">
<div class="imbuement-tool-panel">
        <div class="loading">
    <label class="imbument-tool-version-label">v3.0.0</label>
            <img src="https://www.tibiawiki.com.br/images/c/ce/The_Epic_Wisdom.gif" /><br />
    <div class="imbument-tool-loading">
            <label>Loading...</label>
        <img src="https://www.tibiawiki.com.br/images/c/ce/The_Epic_Wisdom.gif" /><br />
            <span>@TibiaWiki</span>
        <label>Loading...</label>
        <span>@TibiaWiki</span>
    </div>
    <div class="imbument-tool-menu-side">
        <h2>Imbuement Tool</h2>
        <div class="imbument-tool-radio-box">
            <input type="radio" id="imbument-tool-items" value="Items" name="imbuement-options">
            <label for="imbument-tool-items">Items</label>
        </div>
        <div class="imbument-tool-radio-box">
            <input type="radio" id="imbument-tool-scrolls" value="Scrolls" name="imbuement-options">
            <label for="imbument-tool-scrolls">Scrolls</label>
         </div>
         </div>
         <div class="menu">
         <span class="imbument-tool-divisor-line"></span>
            <div class="main_panel_title">Imbuing System</div>
        <div id="imbument-tool-items-container">
            <div class="sub-menu">
            <div class="imbument-tool-category-box">
                <div class="select-label">Categoria:
                 <label for="">Categoria:</label>
                    <select id="category">
                <select id="imbuement-tool-items-category">
                    </select>
                </select>
                 </div>
                <div class="select-label">Item:
                    <input type="text" id="search-item" placeholder="buscar por item..."/>
                    <select id="itemSelect" size="10">
                    </select>
                </div>
             </div>
             </div>
             <div class="divisor-line"></div>
             <div class="imbument-tool-category-box">
            <div class="selected-item-info">
                 <label for="">Items:</label>
                 <label class="select-label">Dados do Item:</label>
                 <div class="imbument-tool-search-box">
                 <div class="info-panel">
                     <input id="imbument-tool-input-search" type="text" placeholder="buscar por item...">
                     <div class="item-info">
                     <div><i>&#x1F50D;</i></div>
                        <span class="select-label">Name: <span id="item-name">Magic Plate Armor</span> </span></br>
                        <span class="select-label" style="display: none;">Armor: <span id="item-def">17</span> </span>
                        <span class="select-label" style="display: none;">Weight: <span id="item-weight">85.00 oz</span> </span>
                        <span class="select-label">Slots: <span id="item-slots">2</span> </span></br>
                     </div>
                    <span class="item-img">
                        <a href="" target="_blank">
                            <img src="https://www.tibiawiki.com.br/images/3/35/Trans.gif" id="slot-imagem" align="right" />
                        </a>
                    </span>
                 </div>
                 </div>
                <select id="imbuement-tool-items-list" size="10">
                </select>
             </div>
             </div>
            </br>
            <span class="divisor-line"></span>
            <span class="version-label">v2.0.0</span>
         </div>
         </div>
         <div class="imbuement-panel">
         <div class="imbument-tool-items">
            <label class="main_panel_title">Opções para Imbuir</label>
             <div class="imbument-tool-items-data-box">
             <div class="slots">
                 <div class="imbument-tool-items-data-image-box">
                 <div class="select-slot">
                     <img id="imbument-tool-items-image" src="" alt="item-image">
                    <label id="item-slot-1-label" class="disabled-slot">Slot 1</label>
                     <div id="item-slot-1" onclick="selectSlot(this.id)"><img src=""></div>
                 </div>
                 </div>
                 <div class="select-slot" >
                 <div class="imbument-tool-items-data-box-data">
                    <label id="item-slot-2-label" class="disabled-slot">Slot 2</label>
                     <label id="imbument-tool-items-name"><span class="label">Item:</span> Dauntless Dragon Scale Armor</label>
                     <div id="item-slot-2" onclick="selectSlot(this.id)"><img src=""></div>
                     <label id="imbument-tool-items-slots"><span class="label">Slots:</span> 2</label>
                </div>
                <div class="select-slot">
                     <label id="item-slot-3-label" class="disabled-slot">Slot 3</label>
                    <div id="item-slot-3" onclick="selectSlot(this.id)"><img src=""></div>
                 </div>
                 </div>
             </div>
             </div>
            <span class="divisor-line"></span>
        </div>
            <div class="imbuement-options">
    </div>
                <div class="selections">
    <div class="imbument-tool-imbuements-panel">
                    <div class="select-label">Imbuement:
        <div class="imbument-tool-imbuements-level-box">
                        <select id="imbuementSelect" class="border-left">
            <h2>Nível do Imbuement</h2>
                        </select>
            <div class="imbuement-tool-level-list">
                    </div>
            </div>
                    <div class="select-label">Nível:
        </div>
                        <select id="imbuementLevelSelect" class="border-left">
        <span class="imbument-tool-divisor-line"></span>
                        </select>
        <div class="imbument-tool-imbuements-data-box">
                    </div>
            <h2>Imbuements</h2>
                </div>
            <div class="imbuement-tool-data-table">
                <div class="imbuement-descriptions">
            </div>
                    <b>Efeito: </b><label id="imbument-description">Converte 5% do dano para hit points com chance de 100%.</label>
        </div>
                    </br>
        <span class="imbument-tool-divisor-line"></span>
                    </br>
        <div class="imbument-tool-imbuements-data-box">
                    <label>Dura por <b>20h00min</b> enquanto equipado.</label>
            <h2>Imbuements Items</h2>
                </div>
            <h3 id="imbuement-tool-selected-imbuement-description"></h3>
                <label class="main_panel_title">Requer as seguintes fontes astrais: </label>
            <div class="imbuement-tool-list-items">
                <div class="imbuements-items">
                    <div class="item-slot" onclick="">
                        <div id="item-img-slot-1" class="item-img-slot">
                            <a href="" target="_blank">
                                <img src="">
                            </a>
                        </div>
                        <input id="item-quantity-1" class="item-quantity" value="0" disabled/>
                    </div>
                    <div class="item-slot" onclick="">
                        <div id="item-img-slot-2" class="item-img-slot">
                            <a href="" target="_blank">
                                <img src=""/>
                            </a>
                        </div>
                        <input id="item-quantity-2" class="item-quantity" value="0" disabled/>
                    </div>
                    <div class="item-slot" onclick="">
                        <div id="item-img-slot-3" class="item-img-slot">
                            <a href="" target="_blank">
                                <img src="">
                            </a>
                        </div>
                        <input id="item-quantity-3" class="item-quantity" value="0" disabled/>
                    </div>
                </div>
             </div>
             </div>
            <span class="divisor-line"></span>
        </div>
            <div class="result-panels">
        <span class="imbument-tool-divisor-line"></span>
                <div class="price-panel">
        <div class="imbument-tool-imbuements-data-box">
                    <div id="item-price-0" class="item-price-section price-gold-token">
            <h2>Informações</h2>
                        <a href="https://www.tibiawiki.com.br/wiki/Gold_Token" target="_blank"><img src="https://www.tibiawiki.com.br/images/0/0b/Gold_Token.gif"/></a>
            <div class="imbuement-tool-prices">
                        <div class="item-price-data">
                <div class="imbuement-tool-prices-items">
                            <div>
                                <label style="font-weight: bold;">Nome:</label>
                                <label class="item-price-name">Gold Token</label>
                            </div>
                            <div>
                                <label style="font-weight: bold;">Quantidade: </label>
                                <input class="item-price-quantity" type="number" min="0" max="6" step="2" placeholder="0" oninput="updateValues(this.value, 'quantity', 'item-0')"/>
                            </div>
                            <div>
                                <label style="font-weight: bold;">Valor Unitário: </label>
                                <input class="item-price-value" type="number" min="0" placeholder="0" oninput="updateValues(this.value, 'price', 'item-0')"/>
                                <label style="font-weight: bold;"> GPs</label>
                            </div>
                        </div>
                    </div>
                    <span class="divisor-line price-gold-token"></span>
                    <div id="item-price-1" class="item-price-section">
                        <a href="" target="_blank"><img src=""/></a>
                        <div class="item-price-data">
                            <div>
                                <label style="font-weight: bold;">Nome:</label>
                                <label class="item-price-name">Vampire Tooth</label>
                            </div>
                            <div>
                                <label style="font-weight: bold;">Quantidade: </label>
                                <input class="item-price-quantity" type="number" min="0" placeholder="0" oninput="updateValues(this.value, 'quantity', 'item-1')"/>
                            </div>
                            <div>
                                <label style="font-weight: bold;">Valor Unitário: </label>
                                <input class="item-price-value" type="number" min="0" placeholder="0" oninput="updateValues(this.value, 'price', 'item-1')"/>
                                <label style="font-weight: bold;"> GPs</label>
                            </div>
                        </div>
                    </div>
                    <span class="divisor-line"></span>
                    <div id="item-price-2" class="item-price-section">
                        <a href="" target="_blank"><img src=""/></a>
                        <div class="item-price-data">
                            <div>
                                <label style="font-weight: bold;">Nome:</label>
                                <label class="item-price-name">Bloody Pincer</label>
                            </div>
                            <div>
                                <label style="font-weight: bold;">Quantidade: </label>
                                <input class="item-price-quantity" type="number" min="0" placeholder="0" oninput="updateValues(this.value, 'quantity', 'item-2')"/>
                            </div>
                            <div>
                                <label style="font-weight: bold;">Valor Unitário: </label>
                                <input class="item-price-value" type="number" min="0" placeholder="0" oninput="updateValues(this.value, 'price', 'item-2')"/>
                                <label style="font-weight: bold;"> GPs</label>
                            </div>
                        </div>
                    </div>
                    <span class="divisor-line item-price-2-divisor"></span>
                    <div id="item-price-3" class="item-price-section">
                        <a href="" target="_blank"><img src=""/></a>
                        <div class="item-price-data">
                            <div>
                                <label style="font-weight: bold;">Nome:</label>
                                <label class="item-price-name">Teste</label>
                            </div>
                            <div>
                                <label style="font-weight: bold;">Quantidade: </label>
                                <input class="item-price-quantity" type="number" min="0" placeholder="0" oninput="updateValues(this.value, 'quantity', 'item-3')"/>
                            </div>
                            <div>
                                <label style="font-weight: bold;">Valor Unitário: </label>
                                <input class="item-price-value" type="number" min="0" placeholder="0" oninput="updateValues(this.value, 'price', 'item-3')"/>
                                <label style="font-weight: bold;"> GPs</label>
                            </div>
                        </div>
                    </div>
                 </div>
                 </div>
                 <div class="result-panel">
                 <div class="imbuement-tool-prices-taxas-info">
                    <div class="enhance-select">
                    <h3>Valores</h3>
                        <div>
                     <!-- <span class="imbument-tool-divisor-line"></span> -->
                            <input type="checkbox" id="enhance-imbuement-chance" name="enhance-imbuement-chance" value="enhance-imbuement-chance" onchange="updatePrice(this)"/>
                     <div class="imbuement-tool-prices-taxas-info-items">  
                            <label for="enhance-imbuement-chance"> Aumentar Chance de sucesso para 100%?</label>
                        </div>
                    </div>
                     <div class="enhance-imbuement-data">
                        <div class="total-price-taxa">
                            <label style="font-weight: bold;">Taxa de Sucesso:</label>
                            <label id="percent-chance-rate">90%</label>
                        </div>
                        <div class="total-price-taxa">
                            <label style="font-weight: bold; font-size: 12px;">Valor da Taxa:</label>
                            <label id="price-tax" style="font-size: 12px;">????? <b>GPs</b></label>
                        </div>
                    </div>
                    <span class="divisor-line"></span>
                    <label class="main_panel_title">Preços | Taxas </label>
                    <div class="total-price-taxa">
                        <label style="font-weight: bold;">Taxa de Imbuement:</label>
                        <label id="total-imbuement-tax-value">????? <b>GPs</b></label>
                    </div>
                    <!-- <span class="divisor-line"></span> -->
                     <label class="main_panel_title">Preços dos Itens</label>
                    <div class="total-price-taxa price-gold-token">
                        <label style="font-weight: bold;">Total em Gold Token:</label>
                        <label id="total-item-0-value">????? <b>GPs</b></label>
                    </div>
                    <div id="total-price-item-1" class="total-price-taxa">
                        <label style="font-weight: bold;">Item 1:</label>
                        <label id="total-item-1-value">????? <b>GPs</b></label>
                    </div>
                    <div id="total-price-item-2" class="total-price-taxa">
                        <label style="font-weight: bold;">Item 2:</label>
                        <label id="total-item-2-value">????? <b>GPs</b></label>
                    </div>
                    <div id="total-price-item-3" class="total-price-taxa">
                        <label style="font-weight: bold;">Item 3:</label>
                        <label id="total-item-3-value">????? <b>GPs</b></label>
                    </div>
                    <div id="total-price-itens" class="total-price-taxa">
                        <label style="font-weight: bold;">Total dos Itens:</label>
                        <label id="total-item-imbuement-value">????? <b>GPs</b></label>
                    </div>
                    <div id="total-price-itens" class="total-price-taxa price-gold-token">
                        <label style="font-weight: bold;">Economia em Gold Tokens:</label>
                        <label id="total-item-economy-value">????? <b>GPs</b></label>
                    </div>
                    <div id="total-price-itens" class="total-price-taxa">
                        <label style="font-weight: bold;">Total Itens + Taxa:</label>
                        <label id="total-item-imbuement-tax-value">????? <b>GPs</b></label>
                    </div>
                    <div id="total-price-itens" class="total-price-taxa price-gold-token">
                        <label style="font-weight: bold;">Total Gold Token + Taxa:</label>
                        <label id="total-item-0-tax-value">????? <b>GPs</b></label>
                     </div>
                     </div>
                    <span class="imbument-tool-divisor-line"></span>
                    <label id="lbl-total-gold-token">Total com Gold Token: 500000 GPs</label>
                    <label id="lbl-total-items">Total com os Items: 450000 GPs</label>
                 </div>
                 </div>
             </div>
             </div>
         </div>
         </div>
     </div>
     </div>
</div> 
</pre>
</pre>


<pre id="imbuing_css">
<pre id="imbuing_css">
.main_panel {
    .imbuement-tool-panel {
        display: flex;
        max-width: 870px;
         position: relative;
         position: relative;
        display: flex;
        width: 815px;
         border: 2px solid #a2a9b1;
         border: 2px solid #a2a9b1;
         background: #ffffff;
         background: #ffffff;
         border-radius: 5px;
         border-radius: 5px;
        margin: 2px;
         -webkit-box-shadow: 0px 0px 10px 2px rgba(255, 255, 255, 1);
         -webkit-box-shadow: 0px 0px 10px 2px rgba(255, 255, 255, 1);
         -moz-box-shadow: 0px 0px 10px 2px rgba(255, 255, 255, 1);
         -moz-box-shadow: 0px 0px 10px 2px rgba(255, 255, 255, 1);
Linha 260: Linha 101:
         color: black;
         color: black;
     }
     }
     .loading {
     .imbument-tool-loading {
         z-index: 9999;
         z-index: 9999;
         background-color: rgba(255, 255, 255, 0.98);
         background-color: rgba(255, 255, 255, 0.98);
Linha 273: Linha 114:
         text-align: center;
         text-align: center;
     }
     }
   
 
     .loading>label {
     .imbument-tool-loading>label {
         position: relative;
         position: relative;
         bottom: 0px;
         bottom: 0px;
Linha 281: Linha 122:
         background: transparent;
         background: transparent;
     }
     }
     .loading > span {
     .imbument-tool-loading > span {
         text-align: center;
         text-align: center;
         align-content: center;
         align-content: center;
Linha 295: Linha 136:
         border-bottom-right-radius: 3px;
         border-bottom-right-radius: 3px;
     }
     }
     .border-left {
     .imbument-tool-menu-side {
         border-left: #c7451d 5px solid;
         width: 320px;
        background-color: #c7451d;
        padding: 5px;
        color: white;
     }
     }
     .divisor-line {
     .imbument-tool-menu-side > h2 {
        width: 100%;
        text-align: center;
        padding-bottom: 15px;
        border-bottom: 1px solid black;
    }
    .imbument-tool-radio-box {
        margin-top: 15px;
         display: flex;
         display: flex;
         flex-flow: row wrap;
         margin-top: 2px;
        justify-content: center;
        align-items: center;
        gap: 0.5rem;
        border-bottom: 1px solid #a2a9b1;
        padding: 0.75rem;
     }
     }
 
     .imbument-tool-radio-box > label {
     .version-label {
         margin-top: 3px;
         font-size: 14px;
         font-size: 20px;
         margin-top: 30px;
         font-weight: bold;
         font-weight: bold;
         bottom: 5px;
    }
    .imbument-tool-category-box {
         margin-top: 15px;
         width: 100%;
         width: 100%;
        text-align: center;
         display: block;
         display: block;
        position: absolute;
     }
     }
 
    .imbument-tool-category-box > label {
     .result-panels {
        width: 100%;
        margin-left: 2px;
        font-weight: bold;
    }
     .imbument-tool-category-box > select {
        margin-top: 5px;
        width: 100%;
        min-height: 32px;
        font-weight: bold;
        border-radius: 5px;
        border: 1px solid black;
    }
    .imbument-tool-search-box {
        margin-top: 5px;
        width: 100%;
         display: flex;
         display: flex;
     }
     }
 
     .imbument-tool-search-box > input {
     .menu {
         width: calc(100% - 25px);
         position: absolute;
        height: 32px;
         border-top-left-radius: 3px;
         border: 1px solid black;
         border-bottom-left-radius: 3px;
         border-bottom-left-radius: 5px;
        position: relative;
         border-top-left-radius: 5px;
        left: 0px;
         border-right: 2px solid #a2a9b1;
        max-width: 250px;
        background: #c7451d;
        padding: 5px;
     }
     }
     .menu > .divisor-line {
     .imbument-tool-search-box > div {
        width: 25px;
        height: 30px;
        background-color: white;
        border-left: none;
        border-right: 1px solid black;
        border-top: 1px solid black;
         border-bottom: 1px solid black;
         border-bottom: 1px solid black;
        border-bottom-right-radius: 5px;
        border-top-right-radius: 5px;
        align-content: center;
        text-align: center;
    }
    .imbument-tool-imbuements-panel {
        display: block;
        width: calc(100% - 330px);
        padding: 5px;
     }
     }
 
     .imbument-tool-items {
     .main_panel_title {
        height: 32px;
         width: 100%;
         width: 100%;
         line-height: 32px;
         margin-top: 15px;
    }
    .imbument-tool-items-data-box {
        display: flex;
    }
    .imbument-tool-items-data-box > .imbument-tool-items-data-image-box {
        width: 50px;
        height: 50px;
        background-color: white;
        border: 1px solid black;
        border-radius: 5px;
        align-content: center;
         text-align: center;
         text-align: center;
        font-weight: bold;
        font-size: 12px;
     }
     }
     .sub-menu {
     .imbument-tool-items-data-box-data {
        margin-left: 5px;
    }
    .imbument-tool-items-data-box-data > label {
         width: 100%;
         width: 100%;
        display: block;
        margin-bottom: 15px;
        /* font-weight: bold; */
        font-size: 15px;
    }
    .imbument-tool-divisor-line {
        display: flex;
        flex-flow: row wrap;
        justify-content: center;
        align-items: center;
        gap: 0.5rem;
        border-bottom: 1px solid black;
        padding: 0.25rem;
        width: calc(100% - 10px);
     }
     }


     .source,
     .imbument-tool-version-label {
    .item-img img {
         font-size: 14px;
         /* position: relative; */
         font-weight: bold;
        display: inline;
        padding: 5px;
         margin: 1px 2px 0 2px;
        border-radius: 5px;
        border: #a2a9b1 1px solid;
        background: #f8f8f8;
        padding: 0 auto;
        height: 32px;
        width: 32px;
         text-align: center;
         text-align: center;
         cursor: default;
         display: block;
        position: absolute;
        top: 5px;
        left: 5px;
        color: white;
     }
     }
 
     #imbument-tool-items-container {
     .source {
         display: block;
         margin: 0 auto;
        width: 34px;
     }
     }


     select#category, select#itemSelect {
     .imbument-tool-imbuements-level-box {
         width: 250px;
         width: 100%;
     }
     }
 
     .imbument-tool-imbuements-level-box > h2 {
     select#itemSelect {
         width: 100%;
         height: 250px;
        text-align: center;
     }
     }
     input#search-item {
     .imbuement-tool-level-list {
         width: 205px;
        display: flex;
         border: 1px solid #a2a9b1;
         width: 100%;
         border-radius: 5px;
         justify-content: center;
         align-items: center;
     }
     }


     select {
     .imbuement-tool-level-list-item {
         font-family: Verdana, Arial, Times New Roman, sans-serif;
         display: flex;
        width: 100px;
        height: 50px;
        margin: 5px;
        flex-shrink: 0;
        align-content: center;
        text-align: center;
         border-radius: 5px;
         border-radius: 5px;
         border: #a2a9b1 1px solid;
         border: 1px solid black;
         background: #f8f8f8;
         justify-content: center;
        border-collapse: separate;
         align-items: center;
         margin-top: 5px;
    }
        height: 24px;
    .imbuement-tool-level-list-item:hover {
        text-align: center;
         background-color: #c04e2b;
        display: inline-block;
    }
        vertical-align: top;
    .imbuement-tool-level-list-item.selected {
         white-space: nowrap;
         background-color: #c7451d;
        font-size: 13px;
         color: black;
     }
     }
     .select-label {
     .imbuement-tool-level-list-item > label {
        font-size: 14px;
        text-align: left;
        margin-top: 10px;
         font-weight: bold;
         font-weight: bold;
        flex-shrink: 0;
        margin-right: 5px;
     }
     }
     .select-label > span {
     .imbuement-tool-level-list-item > div {
        font-size: 12px;
         font-weight: bold;
         font-weight: bold;
        flex-shrink: 0;
     }
     }
     .selected-item-info {
     .imbuement-tool-level-list-item-level {
         margin-top: 10px;
         display: flex;
        justify-content: center;
        align-items: center;
     }
     }
     .info-panel {
     .imbuement-tool-level-list-item-level > img {
         margin-top: 15px;
         flex-shrink: 0;
         height: 25px;
        width: 10px;
         scale: 150%;
     }
     }
     .item-info {
 
        left: 0px;
     .imbument-tool-imbuements-data-box {
        max-width: 200px;
        display: inline-table;
        position: absolute;
        padding: 5px;
    }
    .imbuement-panel {
        position: relative;
        right: 0px;
         width: 100%;
         width: 100%;
        min-height: 200px;
        display: block;
     }
     }
     .imbuement-panel > .main_panel_title {
     .imbument-tool-imbuements-data-box > h2, .imbument-tool-imbuements-data-box > h3 {
        display: inline-block;
         width: 100%;
         width: 100%;
        text-align: center;
        align-content: center;
     }
     }
 
     .imbuement-tool-data-table {
     .imbuement-panel > .slots {
         display: block;
         display: flex;
        justify-content: center; /* Centers horizontally */
        align-items: center; 
        height: 50px;
         width: 100%;
         width: 100%;
        max-height: 200px;
        overflow-y: auto;
     }
     }
     .slots > .select-slot {
     .imbuement-tool-data-table-line {
        position: relative;
         display: block;
         display: block;
         width: 35px;
         width: 100%;
        height: 64px;
        align-content: center;
        margin: 15px;
     }
     }
     .slots > .select-slot > div {
     .imbuement-tool-data-list {
         width: 32px;
         width: 100%;
         height: 32px;
        display: flex;
        justify-content: center;
         align-items: center;
     }
     }
     .slots > .select-slot > div > img {
     .imbuement-tool-data-list-item {
         width: 31px;
         width: 64px;
         height: 31px;
         height: 64px;
        margin: 5px;
         border-radius: 5px;
         border-radius: 5px;
         border: 1px solid #a2a9b1;
         /* border: 2px solid black; */
     }
     }
     .slots > .select-slot > label {
     .imbuement-tool-data-list-item.selected {
         display: block;
         width: 66px;
         width: 35px;
         height: 66px;
         font-weight: bold;
         filter: brightness(1.75);
         font-size: 10px;
         border: 0.15rem solid chocolate;
         text-align: center;
    }
    .imbuement-tool-data-list-item.selected > img {
         border-radius: 2px;
     }
     }
     .imbuement-options {
     .imbuement-tool-data-list-item > img {
        position: relative;
         width: 100%;
         width: 100%;
        scale: 100%;
        border-radius: 5px;
     }
     }
     .imbuement-options > .main_panel_title {
     .imbuement-tool-data-list-item:hover {
         display: block;
         width: 66px;
        height: 66px;
        filter: brightness(1.25);
     }
     }
     .imbuement-options > .imbuement-descriptions {
     .imbuement-tool-list-items {
         margin: 15px;
         width: 100%;
    }
    .imbuement-options > .selections {
         display: flex;
         display: flex;
         justify-content: center; /* Centers horizontally */
         justify-content: center;
         align-items: center
         align-items: center;
        width: 100%;
     }
     }
     .selections > .select-label {
     .imbuement-tool-list-items-box {
         position: relative;
         background-color: #f3f3f3;
        margin: 5px;
        width: 64px;
        height: 64px;
        border: 1px solid black;
        border-radius: 5px;
         display: block;
         display: block;
        flex-shrink: 0;
        text-align: center;
         align-content: center;
         align-content: center;
        margin: 15px;
    }
    .selections > .select-label > select {
        width: 230px;
     }
     }
 
     .imbuement-tool-list-items-box > div {
     .imbuements-items {
        display: flex;
        justify-content: center; /* Centers horizontally */
        align-items: center; 
        height: 50px;
         width: 100%;
         width: 100%;
    }
         height: 44px;
 
         text-align: center;
    .imbuements-items > .item-slot {
         position: relative;
         display: inline-block;
        width: 64px;
        height: 32px;
         align-content: center;
         align-content: center;
        margin: 15px;
     }
     }
     .imbuements-items > .item-slot > .item-img-slot {
     .imbuement-tool-list-items-box > div > img {
         width: 64px;
         width: 32px;
        height: 32px;
        align-content: center;
        border-top-left-radius: 5px;
        border-top-right-radius: 5px;
        border-top: #a2a9b1 1px solid;
        border-left: #a2a9b1 1px solid;
        border-right: #a2a9b1 1px solid;
        display: flex;
        justify-content: center;
     }
     }
     .imbuements-items > .item-slot > .percent-imbuement {
     .imbuement-tool-list-items-box > label {
         height: 50px;
         display: block;
        width: 64px;
         font-weight: bold;
         font-weight: bold;
         position: relative;
         color: white;
         display: inline-block;
         width: 100%;
         align-content: center;  
        height: 20px;
        text-align: center;
         align-content: center;
        border-top: 1px solid black;
         background-color: #c7451d;
         background-color: #c7451d;
        border-radius: 5px;
        border: #a2a9b1 1px solid;
    }
    .imbuements-items > .item-slot > .item-quantity {
        width: 60px;
         border-bottom-left-radius: 5px;
         border-bottom-left-radius: 5px;
         border-bottom-right-radius: 5px;
         border-bottom-right-radius: 5px;
        border: #a2a9b1 1px solid;
        text-align: center;
     }
     }
     .price-panel {  
 
         width: 50%;
     .imbuement-tool-prices {
         border-right: 1px solid #a2a9b1;
         width: 100%;
         display: flex;
        justify-content: center;
        align-items: center;
     }
     }
     .result-panel {  
 
     .imbuement-tool-prices-items {
         width: 50%;
         width: 50%;
    }
        margin-left: 10px;
 
    .result-panel > .main_panel_title {
         display: block;
         display: block;
        flex-shrink: 0;
     }
     }


     .price-panel > .item-price-section {
     .imbuement-tool-prices-items-box {
         width: 100%;
         width: 100%;
        height: 64px;
         display: flex;
         display: inline-flex;
         justify-content: center;
         justify-content: center;
         align-items: center;
         align-items: center;
     }
     }
     .price-panel > .item-price-section > img {
 
        display: inline;
     .imbuement-tool-prices-items-box > a {
        padding: 1px;
         height: 100%;
        margin: 1px 2px 0 2px;
        border-radius: 5px;
        border: #a2a9b1 1px solid;
        background: #f8f8f8;
        padding: 0 auto;
         height: 32px;
        width: 32px;
         text-align: center;
         text-align: center;
         cursor: default;
         align-content: end;
     }
     }
     .price-panel > .item-price-section > .item-price-data {
     .imbuement-tool-prices-items-box > a > img {
         right: 0px;
         border: 1px solid black;
         max-width: calc(100% - 66px);
         border-radius: 5px;
        display: inline-table;
     }
     }
     .price-panel > .item-price-section > div {
     .imbuement-tool-prices-items-box > div {
         /* width: 100%; */
         height: 40px;
        margin-left: 15px;
      margin: 0px 5px 0px 5px;  
        text-align: left;
     }
     }
     .price-panel > .item-price-section > div > div {
     .imbuement-tool-prices-items-box > div > label {
         margin-top: 3px;
         font-weight: bold;
        font-size: 10px;
     }
     }
     .price-panel > .item-price-section > div > div > input {
     .imbuement-tool-prices-items-box > div > input {
         width: 60px;
         width: 100%;
         text-align: center;
         text-align: center;
         border-radius: 5px;
        border: 1px solid black;
         border: #a2a9b1 1px solid;
         border-radius: 3px;
        height: 23px;
    }
 
    .imbuement-tool-prices-taxas-info {
        width: 50%;
        min-height: 140px;
        padding: 5px;
         border-left: 1px solid black;
        display: block;
        flex-shrink: 0;
     }
     }


     .enhance-select {
     .imbuement-tool-prices-taxas-info > h3 {
         height: 40px;
         width: 100%;
        margin: 0px 0px 15px 0px;
        text-align: center;
        align-content: center;
     }
     }
     .enhance-select > div {
     .imbuement-tool-prices-taxas-info > div {
         margin-top: 25px;
         width: 100%;
        height: 5px;
         display: block;
         display: flex;
         margin-top: 5px;
        align-items: center;
        width: fit-content;
        float: left;
         margin-left: 5px;
     }
     }
 
     .imbuement-tool-prices-taxas-info > label {
     .enhance-select > div > label {
        display: block;
        width: 100%;
        height: 20px;
        margin-top: 5px;
         font-weight: bold;
         font-weight: bold;
        font-size: 12px;
     }
     }
     input[type=checkbox] {
     .imbuement-tool-prices-taxas-info > div > label {
         width: 20px;
        display: block;
         width: 100%;
         height: 20px;
         height: 20px;
        font-weight: bold;
     }
     }


     .enhance-imbuement-data {
     .mg-top-35px {
        width: 100%;
         margin-top: 35px;
        height: 10px;
         margin: 10px;
     }
     }
     .enhance-imbuement-data > .total-price-taxa {
     .label {
         margin: 0px;
        font-weight: bold;
         font-size: 15px;
     }
     }
     .total-price-taxa {
     /* Extra small devices (phones, less than 576px) */
         margin: 10px;
    @media (max-width: 575.98px) {
    }
        .imbuement-tool-panel {
    .unselected-slot {
            width: calc(100% - 5px);
        color: black;
            display: block;
    }
        }
    .selected-slot {
 
        color: lime;
         .imbument-tool-menu-side {
    }
            width: calc(100% - 10px);
    .disabled-slot {
            border-top-left-radius: 3px;
        color: #a2a9b1;
            border-top-right-radius: 3px;
    }
        }
    #total-price-itens > label {
 
        display: inline-table;
        .imbument-tool-imbuements-panel {
            width: 100%;
        }
 
        .imbuement-tool-prices {
            display: block;
        }
        .imbuement-tool-prices-items, .imbuement-tool-prices-taxas-info {
            width: calc(100% - 20px);
            border-left: none;
        }
        .imbuement-tool-data-list-item, .imbuement-tool-data-list-item.selected {
            height: 100%;
        }
     }
     }
</pre>
</pre>


<pre id="imbuing_js">
<pre id="imbuing_js">
var version = "2.0.7";
const version = "3.0.0";
          
    var categories = new Object();
         // Imbuements
    var selectedImbuementLevel = "";
         var imbuements = new Object();
    var imbuementScrolls = {
        "Blank Imbuement Scroll": {
            "slots": 1,
            "imbuements": {
                "Vampirism": ["Intricate", "Powerful"],
                "Void": ["Intricate", "Powerful"],
                "Strike": ["Intricate", "Powerful"],
                "Featherweight": ["Intricate", "Powerful"],
                "Swiftness": ["Intricate", "Powerful"],
                "Vibrancy": ["Intricate", "Powerful"],
                "Reap": ["Intricate", "Powerful"],
                "Venom": ["Intricate", "Powerful"],
                "Scorch": ["Intricate", "Powerful"],
                "Frost": ["Intricate", "Powerful"],
                "Electrify": ["Intricate", "Powerful"],
                "Cloud Fabric": ["Intricate", "Powerful"],
                "Demon Presence": ["Intricate", "Powerful"],
                "Dragon Hide": ["Intricate", "Powerful"],
                "Lich Shroud": ["Intricate", "Powerful"],
                "Quara Scale": ["Intricate", "Powerful"],
                "Snake Skin": ["Intricate", "Powerful"],
                "Bash": ["Intricate", "Powerful"],
                "Blockade": ["Intricate", "Powerful"],
                "Chop": ["Intricate", "Powerful"],
                "Epiphany": ["Intricate", "Powerful"],
                "Precision": ["Intricate", "Powerful"],
                "Slash": ["Intricate", "Powerful"],
                "Punch": ["Intricate", "Powerful"]
            }
         }
    }
    var goldToken = {
        "name": "Gold Token",
         "quantity": 6,
        "link": "https://www.tibiawiki.com.br/wiki/Gold_Token",
         "image": "https://www.tibiawiki.com.br/images/0/0b/Gold_Token.gif"
    }


         // Objetos - Armors, Backpacks, Boots, Helmets, Clubs, Distance, Shields, Swords, Axes, Spellbooks, Wands and Rods.
    var loadAllItens = async () => {
        var armors = new Object();
        let baseURL = '';
         var shields = new Object();
         $('.imbument-tool-loading label').text('Loading Imbuements and Itens for You, Adventurer!...');
        var boots = new Object();
        await Promise.all([
        var swords = new Object();
            loadData(baseURL, 'imbuements', 'Imbuements'),
        var axes = new Object();
            loadData(baseURL, 'armors', 'Armors'),
        var clubs = new Object();
            loadData(baseURL, 'backpacks', 'Backpacks'),
        var helmets = new Object();
            loadData(baseURL, 'boots', 'Boots'),
         var wandsRods = new Object();
            loadData(baseURL, 'fists', 'Fists'),
        var distance = new Object();
            loadData(baseURL, 'helmets', 'Helmets'),
        var spellbooks = new Object();
            loadData(baseURL, 'clubs', 'Clubs'),
         var backpacks = new Object();
            loadData(baseURL, 'distance', 'Distance'),
        var fists = new Object();
            loadData(baseURL, 'shields', 'Shields'),
            loadData(baseURL, 'swords', 'Swords'),
            loadData(baseURL, 'axes', 'Axes'),
            loadData(baseURL, 'spellbooks', 'Spellbooks'),
            loadData(baseURL, 'wandsRods', 'WandsRods')
         ]).then((results) => {
            categories = {
                "Armaduras": armors,
                "Backpacks": backpacks,
                "Botas": boots,
                "Capacetes": helmets,
                "Clavas": clubs,
                "Distância": distance,
                "Escudos": shields,
                "Espadas": swords,
                "Machados": axes,
                "Punhos": fists,
                "Spellbooks": spellbooks,
                "Wands e Rods": wandsRods
            }
            loadCategories();
            $('.imbument-tool-loading')[0].style.display = 'none';
            console.log("Load Done!");
         }).catch((error) => {
            showAlert();
            console.error('Error:', error);
         });
    }


        // Lista Categorias
    var loadData = async (baseURL, varName, path) => {
         var categories = new Object();
         return new Promise((resolve, reject) => {
 
            $.ajax({
        // Popula o Select de Categorias
                contentType: 'text/plain; charset=utf-8',
        var loadCategories = () => {
                url: baseURL + '/index.php?title=Tibia_Wiki:' + path + '/json&action=raw',
            Object.keys(categories).forEach((category) => {
                type: 'GET',
                 $("#category").append(new Option(category, category));
                success: function(data) {
                    callbacks(data.replace(/<pre id="[^"]*">/gi, '').replace(/<\/pre>/gi, ''), varName);
                    resolve('Loaded: ' + varName);
                },
                 error: function(error) {
                    console.error(error);
                    callbacks(null, varName);
                }
             });
             });
            // Inicializa o campote Item, selecionando o primeiro item.
        });
            setSelectedOption('category', "Armaduras");
    }
           
        }  


        // Carrega a lista de items de acordo com a Categoria selecionada
    var callbacks = (codigo, varName) => {
        var loadItems = () => {
        if (codigo == null) {
             let items = getItemList();
             codigo = "";
             loadItemSelect(items);
        } else {
            console.log('Loaded:', varName);
             window[varName] = JSON.parse(codigo);
         }
         }
    }


        // Popula a lista de Items a serem selecionados para fazer os imbuements.
    var loadCategories = () => {
        var loadItemSelect = (items) => {
        const categoriesSelect = document.getElementById('imbuement-tool-items-category');
           
        if (Object.keys(categories).length === 0 || categoriesSelect == null) {
            $("#itemSelect").empty();
            showAlert();
            $("#itemSelect").append('<input type="text" placeholder="Search...">');
             return;
            Object.keys(items).forEach(itemName => {
                $("#itemSelect").append(new Option(itemName, itemName));
            });
             setSelectedOption('itemSelect', Object.keys(items)[0]);
         }
         }
          
         Object.keys(categories).forEach(category => {
        var selectItem = (itemName) => {
             let option = document.createElement('option');
             cleanSlotsImages();
             option.value = category;
            $('#item-name').text(itemName);
             option.innerHTML = category;
             $('.item-img a').attr('href', 'https://www.tibiawiki.com.br/wiki/' + itemName);
             categoriesSelect.appendChild(option);
             $('#slot-imagem').attr("src", "https://www.tibiawiki.com.br/wiki/Especial:Redirecionar/file/" + itemName + ".gif")
        });
            $('#item-slots').text(getItemList()[itemName].slots);
        if (categoriesSelect.children.length > 0) {
            selectedItem["name"] = itemName;
            categoriesSelect.children[0].setAttribute('selected', true);
             selectedItem["slots_quantity"] = getItemList()[itemName].slots;
             loadItemList();
            selectedItem["imbuements"] = getItemList()[itemName].imbuements;
            selectedItem["slots"] = new Object();
            for (let i = 1; i <= selectedItem["slots_quantity"]; i++) {
                selectedItem["slots"][i] = {
                    "selected": (i === 1),
                    "imbuement": {
                        "name": "",
                        "level": "",
                        "itens": {
                            0: {
                                value: 0,
                                quantity: 0,
                            },
                            1: {
                                value: 0,
                                quantity: 0,
                            },
                            2: {
                                value: 0,
                                quantity: 0,
                            },
                            3: {
                                value: 0,
                                quantity: 0,
                            }
                        }
                    }
                };
             }
            selectSlot('item-slot-1');
         }
         }
    }
    var loadItemList = (listItems) => {
        const category = getSelectedCategory();
        const itemsList = document.getElementById('imbuement-tool-items-list');
        if (Object.keys(categories[category]).length === 0 || itemsList == null) {
            showAlert();
            return;
        }       
        itemsList.innerHTML = '';
        const listOfItems = (listItems == null) ? categories[category] : listItems;
        Object.keys(listOfItems).forEach(item => {
            let option = document.createElement('option');
            option.value = item;
            option.innerHTML = item;
            itemsList.appendChild(option);
        });


         // Busca Item na lista de Items.
         if (itemsList.children.length > 0) {
        var searchItems = (input) => {
             itemsList.children[0].setAttribute('selected', true);
            let items = getItemList();
             selectItem();
            let filteredKeys = Object.keys(items).filter(name => name.toLowerCase().includes(input.value.toLowerCase()));
            if (filteredKeys.length === 0) {
                return
            }
             let filteredItems = new Object();
            filteredKeys.forEach(itemName => {
                filteredItems[itemName] = items[itemName];
            });
             loadItemSelect(filteredItems);
         }
         }
    }
    var selectItem = () => {
        const selectedCategory = document.getElementById('imbuement-tool-items-category').value;
        const selectedItem = document.getElementById('imbuement-tool-items-list').value;
        const itemNameLabel = document.getElementById('imbument-tool-items-name');
        const itemSlotsLabel = document.getElementById('imbument-tool-items-slots');
        const itemImage = document.getElementById('imbument-tool-items-image');
        itemNameLabel.innerHTML = `<span class="label">Item:</span> ${getSelectedItemName()}`;
        itemSlotsLabel.innerHTML = `<span class="label">Slots:</span> ${getSelectedItemObject().slots}`;
        itemImage.setAttribute('src', "https://www.tibiawiki.com.br/wiki/Especial:Redirecionar/file/" + getSelectedItemName() + ".gif");
        loadImbuementsLevel();
        createImbuementsLine();
    }


        var getItemList = () => {
    var selectImbuementLevel = (component) => {
            let selectedCategory = getSelectedValueFromSelect('category');
        cleanSelectedImbuementLevel();
             return categories[selectedCategory];
        component.classList.add("selected");
        selectedImbuementLevel = component.getAttribute('level');
        createImbuementsLine();
    }
 
    var loadImbuementsLevel = () => {
       
        const imbuementLevelLists = document.getElementsByClassName("imbuement-tool-level-list");
        if (imbuementLevelLists == null || imbuementLevelLists.length === 0) {
            showAlert();
             return;
         }
         }
        const componentList = imbuementLevelLists[0];
        componentList.innerHTML = "";


         var loadSelectImbuements = () => {
         const selectedItem = getSelectedItemObject();
            $("#imbuementSelect").empty();
        const selectedItemImbuements = selectedItem.imbuements;
            let selectedImbuementsOnAnotherSlots = getSelectedImbuementsInAnotherSlots();
            Object.keys(selectedItem.imbuements).forEach(imbuementName => {
                if (!selectedImbuementsOnAnotherSlots.includes(imbuementName) || selectedItem.slots[getSelectedSlotName()].imbuement.name === imbuementName) {
                    $("#imbuementSelect").append(new Option(imbuementName + ' (' + imbuements[imbuementName].name + ')', imbuementName));
                }
            });


             if (selectedItem.slots[getSelectedSlotName()].imbuement.name.length !== 0) {
        selectedItemImbuements[Object.keys(selectedItemImbuements)[0]].forEach(level => {
                setSelectedOption('imbuementSelect', selectedItem.slots[getSelectedSlotName()].imbuement.name);
             const componentLevel = createImbuementLevelButton(level);
            } else {
            componentList.appendChild(componentLevel);
                setSelectedOption('imbuementSelect', $("select#imbuementSelect option")[0].value);
        });
            }
        const mostLevelImbuement = document.getElementsByClassName("imbuement-tool-level-list-item");
        if (mostLevelImbuement == null || mostLevelImbuement.length === 0) {
            showAlert();
            return;
        }
        if (selectedImbuementLevel.length === 0) {
            mostLevelImbuement[mostLevelImbuement.length - 1].classList.add("selected");
            selectedImbuementLevel = mostLevelImbuement[mostLevelImbuement.length - 1].getAttribute('level');
        } else {
            const indexes = Object.keys(mostLevelImbuement).filter(index => mostLevelImbuement[index].getAttribute('level') === selectedImbuementLevel);
            mostLevelImbuement[indexes[0]].classList.add('selected');
         }
         }
    }


        var selectImbuement = (imbuementName) => {
    var createImbuementLevelButton = (level) => {
            let slotName = getSelectedSlotName();
 
            selectedItem.slots[slotName].imbuement.name = imbuementName;
        const btn = document.createElement("div");
             showHideGoldToken()
        btn.classList.add("imbuement-tool-level-list-item");
         }
        btn.setAttribute("level", level);
        btn.addEventListener('click', function() {
             selectImbuementLevel(this);
         }, false);
 
        const imgBox = document.createElement("div");
        imgBox.classList.add("imbuement-tool-level-list-item-level");


         var loadSelectImbuementLevel = (imbuementName) => {
         const label = document.createElement("label");
            let imbuementLevels = selectedItem.imbuements[imbuementName];
        label.innerText = level;
            $("#imbuementLevelSelect").empty();
            imbuementLevels.forEach(imbuementLevel => {
                $("#imbuementLevelSelect").append(new Option(imbuements[imbuementName].level[imbuementLevel].name + ((imbuements[imbuementName].level[imbuementLevel].premium) ? ' (premium)' : '' ), imbuementLevel));
            });


            if (selectedItem.slots[getSelectedSlotName()].imbuement.level.length !== 0) {
        let indexLevel = 1;
                setSelectedOption('imbuementLevelSelect', selectedItem.slots[getSelectedSlotName()].imbuement.level);
        switch (level) {
             } else {
            case("Intricate"): {
                setSelectedOption('imbuementLevelSelect', $("#imbuementLevelSelect option")[0].value);
                indexLevel = 2;
                break;
             }
            case("Powerful"): {
                indexLevel = 3;
                break;
             }
             }
            default: {
                indexLevel = 1;
                break;
            }
        }
        for(let i = 0; i < indexLevel; i++) {
            const img = document.createElement('img');
            img.setAttribute('src', 'https://www.tibiawiki.com.br/images/2/2f/The_Heart_of_the_Sea.gif');
            img.setAttribute('alt', 'level');
            imgBox.appendChild(img);
         }
         }
         var selectImbuementLevel = (imbuementLevel) => {
         btn.appendChild(imgBox);
            let slotName = getSelectedSlotName();
        btn.appendChild(label);
            selectedItem.slots[slotName].imbuement.level = imbuementLevel;
        return btn;
    }


            $('#item-slot-' + slotName + ' > img').attr('src', imbuements[selectedItem.slots[slotName].imbuement.name].level[imbuementLevel].image);
    var createImbuementsLine = () => {
            $('#imbument-description').text(imbuements[selectedItem.slots[slotName].imbuement.name].level[selectedItem.slots[slotName].imbuement.level].description);
        const selectedItem = getSelectedItemObject();
           
        const selectedItemImbuements = selectedItem.imbuements;
            // Mostra os itens necessários.
            cleanAllImbuementItensSlots();
            updatePrice();
            checkItensValue();
            let imbuementItens = imbuements[selectedItem.slots[slotName].imbuement.name].level[selectedItem.slots[slotName].imbuement.level].itens;
            let index = 1;
            imbuementItens.forEach(item => {
                updateItensPrice(index);
                $('#item-img-slot-' + index + ' img').attr('src', item.image);
                $('#item-img-slot-' + index + ' a').attr('href', item.link);
                $('#item-img-slot-' + index + ' a').attr('target', '_blank');
                $('#item-price-' + index + ' img').attr('src', item.image);
                $('#item-price-' + index + ' a').attr('href', item.link);
                $('#item-quantity-' + index).val(item.quantity);
                $('#item-price-' + index + ' div input.item-price-quantity ').attr('min', 0);
                $('#item-price-' + index + ' div input.item-price-quantity ').attr('max', item.quantity);
                $('#item-price-' + index + ' div input.item-price-quantity ').val(item.quantity);
                $('#item-price-' + index + ' div input.item-price-value ').val(selectedItem.slots[getSelectedSlotName()].imbuement.itens[index].value);


                $('#item-price-' + index + ' div label.item-price-name ').text(item.name);
        const tables = document.getElementsByClassName('imbuement-tool-data-table');
                document.getElementById('item-price-' + index).style.display = '';
        if (tables == null || tables.length === 0) {
                if (document.getElementsByClassName('item-price-' + index + '-divisor')[0] != null) {
             showAlert();
                    document.getElementsByClassName('item-price-' + index + '-divisor')[0].style.display = '';
             return;
                }
                document.getElementById('total-price-item-' + index).style.display = '';
                document.querySelectorAll('div[id="total-price-item-' + index + '"] > label')[0].innerHTML = item.name + ": ";
                index++;
            });
            let currentSelectedImbuement = imbuements[selectedItem.slots[getSelectedSlotName()].imbuement.name];
            if (currentSelectedImbuement.gold_token) {
                let gpQuantity = selectedItem.slots[getSelectedSlotName()].imbuement.itens[0].quantity;
                if (selectedItem.slots[slotName].imbuement.level === 'Powerful') {
                    gpQuantity = 6;
                } else if (selectedItem.slots[slotName].imbuement.level === 'Intricate') {
                    gpQuantity = 4;
                } else {
                    gpQuantity = 2;
                }
                $('#item-price-0 div input.item-price-quantity ').val(gpQuantity);
                $('#item-price-0 div input.item-price-value ').val(selectedItem.slots[getSelectedSlotName()].imbuement.itens[0].value);
                updateItensPrice(0);
             } else {
                $('#item-price-0 div input.item-price-quantity ').val(0);
             }
            updateTotalPrices();
         }
         }
        const table = tables[0];
        table.innerHTML = "";
        let indexLine = 0;
        let tableLine = null;
        let tableDataLineList = null;
        Object.keys(selectedItemImbuements).forEach(imbuement => {
            if (indexLine === 0) {
                tableLine = document.createElement("div");
                tableLine.classList.add("imbuement-tool-data-table-line");


        var getSelectedSlotName = () => {
                tableDataLineList = document.createElement("div");
            return Object.keys(selectedItem.slots).find(slot => selectedItem.slots[slot].selected);
                tableDataLineList.classList.add("imbuement-tool-data-list");
        }
        var getSelectedImbuementsInAnotherSlots = () => {
            let arrImbuements = new Array();
            Object.keys(selectedItem.slots).forEach(slot => {
                arrImbuements.push(selectedItem.slots[slot].imbuement.name);
            });
            return arrImbuements;
        }


        var selectSlot = (slotId) => {
                tableLine.appendChild(tableDataLineList);
            $('#' + slotId + ' > label')
            slotId = slotId.replace(/item-slot-/gi, '')
            let selectedSlotName = getSelectedSlotName();
            if (selectedItem.slots[slotId] == null) {
                return
             }
             }
            disableSlot();
            unselectAllSlotsLabels();
            selectSlotLabel('item-slot-' + slotId);
            selectedItem.slots[selectedSlotName].selected = false;
            selectedItem.slots[slotId].selected = true;
            loadSelectImbuements();
        }


        var cleanSlotsImages = () => {
             const itemList = createImbuementsItem(imbuement);
             $('#item-slot-1 > img').attr('src', 'https://www.tibiawiki.com.br/images/3/35/Trans.gif');
             if (itemList) {
            $('#item-slot-2 > img').attr('src', 'https://www.tibiawiki.com.br/images/3/35/Trans.gif');
                 tableDataLineList.appendChild(itemList);
            $('#item-slot-3 > img').attr('src', 'https://www.tibiawiki.com.br/images/3/35/Trans.gif');
        }
        var selectSlotLabel = (slotId) => {
            $('#' + slotId + '-label').addClass('selected-slot');
            $('#' + slotId + '-label').removeClass('unselected-slot');
            $('#' + slotId + '-label').removeClass('disabled-slot');
        }
        var disableSlot = () => {
            // disabled-slot
             for (let i = 3; i > 0; i--) {
                 $('#item-slot-' + i + '-label').addClass('disabled-slot');
                $('#item-slot-' + i + '-label').removeClass('selected-slot');
                $('#item-slot-' + i + '-label').removeClass('unselected-slot');
             }
             }
        }
 
        var unselectAllSlotsLabels = () => {
            indexLine++;
             for (let i = selectedItem.slots_quantity; i > 0; i--) {
             if (indexLine === 6 || indexLine === Object.keys(selectedItemImbuements).length) {
                $('#item-slot-' + i + '-label').addClass('unselected-slot');
                 table.append(tableLine);
                 $('#item-slot-' + i + '-label').removeClass('selected-slot');
                 indexLine = 0;
                 $('#item-slot-' + i + '-label').removeClass('disabled-slot');
             }
             }
        });
        const imbuementComponent = document.getElementsByClassName("imbuement-tool-data-list-item")[0];
        selectImbuementCell(imbuementComponent);
    }
    var createImbuementsItem = (imbuementName) => {
        const imbuement = imbuements[imbuementName];
        const imbuementLevel = getSelectedImbuementLevel();
        const selectedItem = getSelectedItemObject();
        if (!selectedItem.imbuements[imbuementName].includes(imbuementLevel)) {
            return;
         }
         }


         var cleanAllImbuementItensSlots = () => {
         const divItem = document.createElement('div');
            for (let i = 3; i > 0; i--) {
        divItem.classList.add("imbuement-tool-data-list-item");
                $('#item-img-slot-' + i + ' img').attr('src', 'https://www.tibiawiki.com.br/images/3/35/Trans.gif');
        divItem.setAttribute("imbuement-name", imbuementName);
                $('#item-img-slot-' + i + ' a').attr('href', 'javascript:;');
        divItem.setAttribute("imbuement-level", imbuementLevel);
                $('#item-img-slot-' + i + ' a').attr('target', '');
        divItem.setAttribute("title", imbuementName.concat(" | ").concat(imbuement.name));
                $('#item-quantity-' + i).val(0);
 
                $('#item-price-' + i + ' img').attr('src', 'https://www.tibiawiki.com.br/images/3/35/Trans.gif');
        const img = document.createElement('img');
                $('#item-price-' + i + ' div input.item-price-quantity ').val(0);
        img.setAttribute('src', imbuement.level[imbuementLevel].image);
                $('#item-price-' + i + ' div input.item-price-quantity ').attr('min', 0);
 
                $('#item-price-' + i + ' div input.item-price-quantity ').attr('max', 0);
        divItem.appendChild(img);
                // $('#item-price-' + i + ' div input.item-price-value ').val(0);
 
                $('#item-price-' + i + ' div label.item-price-name ').text('');
        divItem.addEventListener('click', function() {
                document.getElementById('item-price-' + i).style.display = 'none';
            selectImbuementCell(this);
                if (document.getElementsByClassName('item-price-' + i + '-divisor')[0] != null) {
        }, false);
                    document.getElementsByClassName('item-price-' + i + '-divisor')[0].style.display = 'none';
 
                }
        return divItem;
                document.getElementById('total-price-item-' + i).style.display = 'none';
    }
             }
 
            // $('#item-price-0 div input.item-price-value ').val(0);
    var loadImbuementsItems = () => {
        const listItems = document.getElementsByClassName("imbuement-tool-list-items");
        if (listItems == null || Object.keys(listItems).length === 0) {
            showAlert();
             return;
         }
         }
        const itemList = listItems[0];
        itemList.innerHTML = "";
        const imbuement = getSelectedImbuementObject();
        imbuement.itens.forEach(item => {
            const itemSlot = createImbuementItemSlot(item);
            itemList.appendChild(itemSlot);
        });
    }
    var createImbuementItemSlot = (imbuementItem) => {
        const divBox = document.createElement("div");
        divBox.classList.add("imbuement-tool-list-items-box");
        divBox.setAttribute("title", new String(imbuementItem.quantity).concat("x ").concat(imbuementItem.name));
        const divImg = document.createElement("div");
        const a = document.createElement("a");
        a.setAttribute('href', imbuementItem.link);
        a.setAttribute('target', "_blank");
        const img = document.createElement("img");
        img.setAttribute('src', imbuementItem.image);
        const label = document.createElement("label");
        label.innerText = imbuementItem.quantity;
        a.appendChild(img);
        divImg.appendChild(a);
        divBox.appendChild(divImg);
        divBox.appendChild(label);
        return divBox;
    }
    var selectImbuementCell = (component) => {
        cleanSelectedImbuementCell();
        component.classList.add('selected');
        const imbuementDescription = document.getElementById('imbuement-tool-selected-imbuement-description');
        imbuementDescription.innerText = imbuements[component.getAttribute('imbuement-name')].level[component.getAttribute('imbuement-level')].description;
        loadImbuementsItems();
        loadImbuementItemsInfos();
        loadItemsInfosLine();
    }


        var showHideGoldToken = () => {
    var loadImbuementItemsInfos = () => {
            let currentSelectedImbuement = imbuements[selectedItem.slots[getSelectedSlotName()].imbuement.name];
 
            let components = $('.price-gold-token');
 
            if (currentSelectedImbuement.gold_token != null && currentSelectedImbuement.gold_token) {
        const itemsInfosList = document.getElementsByClassName('imbuement-tool-prices-items');
                Object.keys(components).forEach(component => {
        if (itemsInfosList == null || Object.keys(itemsInfosList).length === 0) {
                    if (!isNaN(Number(component))) {
             showAlert();
                        components[component].style.display = "";
             return;
                    }
                })
             } else {
                Object.keys(components).forEach(component => {
                    if (!isNaN(Number(component))) {
                        components[component].style.display = "none";
                    }
                })
             }
         }
         }
        const itemsInfosListComponent = itemsInfosList[0];
        itemsInfosListComponent.innerHTML = "";


         var updatePrice = () => {
         const imbuement = getSelectedImbuementObject();
            let imbuementLevel = selectedItem.slots[getSelectedSlotName()].imbuement.level;
        if (imbuement.gold_token) {
            let tax = '0';
             goldToken.quantity = getGoldTokenQuantity();
            let percent = '0';
             const goldTokenBox = createImbuementItemInfoBox(goldToken, 0);
            if (imbuementLevel === 'Powerful') {
             itemsInfosListComponent.appendChild(goldTokenBox);
                percent = 50;
                tax = (document.getElementById('enhance-imbuement-chance').checked) ? '250,000' : '200,000';
                document.getElementById('price-tax').innerHTML = '50,000' + ' <b>GPs</b>';
            } else if (imbuementLevel === 'Intricate') {
                percent = 70;
                tax = (document.getElementById('enhance-imbuement-chance').checked) ? '60,000' : '30,000';
                document.getElementById('price-tax').innerHTML = '30,000' + ' <b>GPs</b>';
            } else {
                percent = 90;
                tax = (document.getElementById('enhance-imbuement-chance').checked) ? '15,000' : '5,000';
                document.getElementById('price-tax').innerHTML = '10,000' + ' <b>GPs</b>';
             }
            document.getElementById('percent-chance-rate').innerHTML = ((document.getElementById('enhance-imbuement-chance').checked) ? 100 : percent) + '%';
             document.getElementById('percent-chance-rate').style.color = (document.getElementById('enhance-imbuement-chance').checked) ? 'lime' : 'red';
             document.getElementById('total-imbuement-tax-value').innerHTML = tax + ' <b>GPs</b>';
            updateTotalPrices();
         }
         }
        let index = 1;
        imbuement.itens.forEach(item => {
            const itemInfoBox = createImbuementItemInfoBox(item, index);
            itemsInfosListComponent.appendChild(itemInfoBox);
            index++;
        });
    }
    var createImbuementItemInfoBox = (item, indexId) => {
        const img = document.createElement('img');
        img.setAttribute('src', item.image);
        img.setAttribute('alt', 'imbuement item');
        const a = document.createElement('a');
        a.setAttribute('href', item.link);
        a.setAttribute('target', '_blank');
        a.setAttribute('title', item.name);
        a.appendChild(img);
        const labelQuantity = document.createElement('label');
        labelQuantity.innerText = "Quantidade:";
        const inputQuantity = document.createElement('input');
        inputQuantity.setAttribute('value', item.quantity);
        inputQuantity.setAttribute('min', '0');
        inputQuantity.setAttribute('type', 'number');
        inputQuantity.setAttribute('id', 'input-quantity-'.concat(indexId));
        inputQuantity.addEventListener('input', function () {
            updateValues(this, 'quantity', indexId);
        });
        const divQuantity = document.createElement('div');
        divQuantity.appendChild(labelQuantity);
        divQuantity.appendChild(inputQuantity);
        const labelPrice = document.createElement('label');
        labelPrice.innerText = "Valor Unitário (GPs):";
        const inputPrice = document.createElement('input');
        inputPrice.setAttribute('value', 0);
        inputPrice.setAttribute('min', '0');
        inputPrice.setAttribute('type', 'number');
        inputPrice.setAttribute('id', 'input-price-'.concat(indexId));
        inputPrice.addEventListener('input', function () {
            updateValues(this, 'price', indexId);
        });
        const divPrice = document.createElement('div');
        divPrice.appendChild(labelPrice);
        divPrice.appendChild(inputPrice);
        const divBox = document.createElement('div');
        divBox.classList.add('imbuement-tool-prices-items-box');
        divBox.appendChild(a);
        divBox.appendChild(divQuantity);
        divBox.appendChild(divPrice);
       
        return divBox;
    }


        var updateValues = (value, type, id) => {
    var loadItemsInfosLine = () => {
            let itemIndex = id.replace(/item-/gi, '');
 
           
        const itemsInfoDivs = document.getElementsByClassName('imbuement-tool-prices-taxas-info-items');
            if (type === 'price') {
        if (itemsInfoDivs == null || Object.keys(itemsInfoDivs).length === 0) {
                selectedItem.slots[getSelectedSlotName()].imbuement.itens[itemIndex].value = value
             showAlert();
                selectedItem.slots[getSelectedSlotName()].imbuement.itens[itemIndex].quantity = $('#item-price-' + itemIndex + ' input.item-price-quantity').val()
             return;
            } else {
                selectedItem.slots[getSelectedSlotName()].imbuement.itens[itemIndex].quantity = value
                selectedItem.slots[getSelectedSlotName()].imbuement.itens[itemIndex].price = $('#item-price-' + itemIndex + ' input.item-price-value').val()
             }
            updateItensPrice(itemIndex);
             updateTotalPrices();
         }
         }
        const itemsInfo = itemsInfoDivs[0];
        itemsInfo.innerHTML = "";


         var updateItensPrice = (idIndex) => {
         const imbuement = getSelectedImbuementObject();
             let value = calcValues(idIndex);
        if (imbuement.gold_token) {
             setTotalValuesToFields(idIndex, value);
             const goldTokenBox = createItemInfoLabel(goldToken, 0);
             itemsInfo.appendChild(goldTokenBox);
         }
         }
        document.getElementById("lbl-total-gold-token").style.display = imbuement.gold_token ? 'block' : 'none';
        let index = 1;
        imbuement.itens.forEach(item => {
            const itemLabel = createItemInfoLabel(item, index);
            itemsInfo.appendChild(itemLabel);
            index++;
        });
    }
    var createItemInfoLabel = (item, indexId) => {
        const label = document.createElement('label');
        label.setAttribute('id', "lbl-item-".concat(indexId));
        label.innerText = "Total ".concat(item.name).concat(": 0 GPs");
        return label;
    }


        var updateTotalPrices = () => {
    var getGoldTokenQuantity = () => {
            let total = 0;
        switch(getSelectedImbuementLevel()) {
            let tax = Number(document.getElementById('total-imbuement-tax-value').innerHTML.replace(/\s<b>GPs<\/b>/gi, '').replace(/,/gi, ''));
             case ("Powerful"): {
             if (selectedItem.slots[getSelectedSlotName()].imbuement.level === 'Basic') {
                 return 6;
                 let value = calcValues(1);
                total += value;
             }
             }
             if (selectedItem.slots[getSelectedSlotName()].imbuement.level === 'Intricate') {
             case ("Intricate"): {
                 let value = calcValues(1);
                 return 4;
                value += calcValues(2);
                total += value;
             }
             }
             if (selectedItem.slots[getSelectedSlotName()].imbuement.level === 'Powerful') {
             default: {
                 let value = calcValues(1);
                 return 2;
                value += calcValues(2);
                value += calcValues(3);
                total += value;
             }
             }
            if (imbuements[selectedItem.slots[getSelectedSlotName()].imbuement.name].gold_token) {
                let goldToken = calcValues(0);
                setTotalValuesToFields('economy', total - goldToken);
                setTotalValuesToFields('0-tax', goldToken + tax);
            }
            setTotalValuesToFields('imbuement', total);
            setTotalValuesToFields('imbuement-tax', total + tax);
         }
         }
    }
    var getSelectedImbuementLevel = () => {
        return selectedImbuementLevel;
    }
    var getSelectedCategory = () => {
        return document.getElementById('imbuement-tool-items-category').value;
    }
    var getSelectedItemName = () => {
        return (getSelectedImbuementOption() === "Items") ? document.getElementById('imbuement-tool-items-list').value : Object.keys(imbuementScrolls)[0];
    }
    var getSelectedItemObject = () => {
        return (getSelectedImbuementOption() === "Items") ? categories[getSelectedCategory()][getSelectedItemName()] : imbuementScrolls[getSelectedItemName()];
    }
    var getItemList = () => {
        return categories[getSelectedCategory()];
    }
    var getSelectedImbuementObject = () => {
        const selectedComponent = document.querySelector('.imbuement-tool-data-list-item.selected');
        const imbuementName = selectedComponent.getAttribute('imbuement-name');
        const imbuementLevel = selectedComponent.getAttribute('imbuement-level');
        imbuements[imbuementName].level[imbuementLevel]["gold_token"] = imbuements[imbuementName].gold_token;
        return imbuements[imbuementName].level[imbuementLevel];
    }
    // Limpa Campos.
    var cleanSearchField = () => {
        let searchInput = document.getElementById('imbument-tool-input-search');
        searchInput.value = '';
    }
    var cleanSelectedImbuementLevel = () => {
        const selectedComponent = document.querySelector('.imbuement-tool-level-list-item.selected');
        if (selectedComponent == null) {
            return;
        }
        selectedComponent.classList.remove("selected");
        selectedImbuementLevel = "";


         var setTotalValuesToFields = (idIndex, value) => {
         cleanSelectedImbuementCell();
            document.getElementById('total-item-' + idIndex + '-value').innerHTML = value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",") + ' <b>GPs</b>';
    }
    var cleanSelectedImbuementCell = () => {
        const selectedComponent = document.querySelector('.imbuement-tool-data-list-item.selected');
        if (selectedComponent == null) {
            return;
         }
         }
        selectedComponent.classList.remove("selected");


         var checkItensValue = () => {
         const imbuementDescription = document.getElementById('imbuement-tool-selected-imbuement-description');
           
        imbuementDescription.innerText = "";
            for (let i = 3; i >= 0; i--) {
 
                let value = selectedItem.slots[getSelectedSlotName()].imbuement.itens[i];
        const listItems = document.getElementsByClassName("imbuement-tool-list-items");
                $('#item-price-' + i + ' div input.item-price-value ').val(value);
        if (listItems == null || Object.keys(listItems).length === 0) {
             }
            showAlert();
             return;
         }
         }
         var calcValues = (idIndex) => {
         const itemList = listItems[0];
            let quantity = selectedItem.slots[getSelectedSlotName()].imbuement.itens[idIndex].quantity;
        itemList.innerHTML = "";
            let value = selectedItem.slots[getSelectedSlotName()].imbuement.itens[idIndex].value;
    }


             return Number(quantity * value);
    var showSelectedOption = () => {
        const selectedImbuementOption = getSelectedImbuementOption();
        const itemsContainer = document.getElementById('imbument-tool-items-container');
        if (itemsContainer == null) {
             showAlert();
            return;
         }
         }
        itemsContainer.style.display = (selectedImbuementOption === "Items") ? 'block' : 'none';
        cleanSelectedImbuementLevel();
    }


        // Limpa Campos.
    // Busca Item na lista de Items.
        var cleanSearchField = () => {
    var searchItems = (input) => {
            let searchInput = document.getElementById('search-item');
        let items = getItemList();
            searchInput.value = '';
        let filteredKeys = Object.keys(items).filter(name => name.toLowerCase().includes(input.value.toLowerCase()));
        if (filteredKeys.length === 0) {
            return
         }
         }
        let filteredItems = new Object();
        filteredKeys.forEach(itemName => {
            filteredItems[itemName] = items[itemName];
        });
        loadItemList(filteredItems);
    }
    var updateValues = (component, type, indexId) => {
        const value = component.value;


         /**
         const multiplier = document.getElementById(`input-${(type === 'quantity') ? 'price' : 'quantity'}-${indexId}`).value;
        * Adiciona Evento para quando houver interação nos selects, disparar uma ação/função.
        */
        var addEventListeners = () => {
            // Category Select
            document.getElementById('category').addEventListener('change', function() {
                cleanSearchField();
                loadItems();
            }, false);


            // Item Select
        const total = value * multiplier;
            document.getElementById('itemSelect').addEventListener('change', function() {
        const imbuement = getSelectedImbuementObject();
                let option = getSelectedValueFromSelect('itemSelect');
        const imbuementItemName = (indexId === 0) ? goldToken.name : imbuement.itens[indexId - 1].name;
                selectItem(option);
        document.getElementById(`lbl-item-${indexId}`).innerText = `Total ${imbuementItemName}: ${total.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",")} GPs`;
            }, false);


            let searchInput = document.getElementById('search-item');
        updateTotal();
            searchInput.addEventListener('input', () => {
    }
                searchItems(searchInput);
            });


            // ImbuementSelect
    var updateTotal = () => {
            document.getElementById('imbuementSelect').addEventListener('change', function() {
        const imbuement = getSelectedImbuementObject();
                let option = getSelectedValueFromSelect('imbuementSelect');
                selectImbuement(option);
                loadSelectImbuementLevel(option);
            }, false);


            // Imbuement Level Select
        let totalGoldTotken = 0;
             document.getElementById('imbuementLevelSelect').addEventListener('change', function() {
        if (imbuement.gold_token) {
                let option = getSelectedValueFromSelect('imbuementLevelSelect');
             const quantityGoldToken = document.getElementById('input-quantity-0').value;
                selectImbuementLevel(option);
            const priceGoldToken = document.getElementById('input-price-0').value;
             }, false);
             totalGoldTotken = quantityGoldToken * priceGoldToken;
         }
         }


         /**
         let totalItens = 0;
        * Pega a Opção selecionada de um Select.
         for (let i = 1; i <= imbuement.itens.length; i++) {
        */
             const quantityItem = document.getElementById(`input-quantity-${i}`).value;
         var getSelectedValueFromSelect = (selectId) => {
             const priceItem = document.getElementById(`input-price-${i}`).value;
             let selectElement = document.getElementById(selectId);
            totalItens += quantityItem * priceItem;
             return selectElement.options[selectElement.selectedIndex].value;  
         }
         }
         /**
         const taxa = getTaxPrice();
        * Seta uma opção forçando a seleção e disparando o evento de ação/função.
         if (imbuement.gold_token) {
        */
             document.getElementById('lbl-total-gold-token').innerText = `Total com Gold Token: ${(totalGoldTotken + taxa).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",")} GPs`;
         var setSelectedOption = (selectId, value) => {
             let selectElement = document.getElementById(selectId);
            selectElement.value = value;
            // Trigger the change event
            var event = new Event('change');
            selectElement.dispatchEvent(event);
         }
         }
        document.getElementById('lbl-total-items').innerText = `Total com os Items: ${(totalItens + taxa).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",")} GPs`;
    }


        var loadAllItens = async () => {
    var getTaxPrice = () => {
            let baseURL = 'https://mypper.com/tibia/v1/tibiawiki/';
        switch(getSelectedImbuementLevel()) {
            $('.loading label').text('Loading Imbuements and Itens for You, Adventurer!...');
             case('Powerful'): {
             await Promise.all([
                 return 250000;
                loadData(baseURL, 'imbuements', 'Imbuements'),
             }
                 loadData(baseURL, 'armors', 'Armors'),
            case('Intricate'): {
                loadData(baseURL, 'backpacks', 'Backpacks'),
                 return 60000;
                loadData(baseURL, 'boots', 'Boots'),
             }
                loadData(baseURL, 'fists', 'Fists'),
            default: {
                loadData(baseURL, 'helmets', 'Helmets'),
                 return 7500;
                loadData(baseURL, 'clubs', 'Clubs'),
             }
                loadData(baseURL, 'distance', 'Distance'),
                loadData(baseURL, 'shields', 'Shields'),
                loadData(baseURL, 'swords', 'Swords'),
                loadData(baseURL, 'axes', 'Axes'),
                loadData(baseURL, 'spellbooks', 'Spellbooks'),
                loadData(baseURL, 'wandsRods', 'WandsRods')
             ]).then((results) => {
                categories = {
                    "Armaduras": armors,
                    "Backpacks": backpacks,
                    "Botas": boots,
                    "Capacetes": helmets,
                    "Clavas": clubs,
                    "Distância": distance,
                    "Escudos": shields,
                    "Espadas": swords,
                    "Machados": axes,
                    "Punhos": fists,
                    "Spellbooks": spellbooks,
                    "Wands e Rods": wandsRods
                }
                loadCategories();
                $('.loading')[0].style.display = 'none';
                 console.log("Load Done!");
             }).catch((error) => {
                 console.error('Error:', error);
             });
            // executedPromises();
         }
         }
    }


        var loadData = async (baseURL, varName, path) => {
    /**
             return new Promise((resolve, reject) => {
    * Adiciona Evento para quando houver interação nos selects, disparar uma ação/função.
                $.ajax({
    */
                    contentType: 'text/plain; charset=utf-8',
    var addEventListeners = () => {
                    url: baseURL + '/index.php?title=Tibia_Wiki:' + path + '/json&action=raw',
        // Category Select
                    type: 'GET',
        document.getElementById('imbuement-tool-items-category').addEventListener('change', function() {
                    success: function(data) {
             cleanSearchField();
                        callbacks(data.replace(/<pre id="[^"]*">/gi, '').replace(/<\/pre>/gi, ''), varName);
            loadItemList();
                        resolve('Loaded: ' + varName);
            createImbuementsLine();
                    },
        }, false);
                    error: function(error) {
 
                        console.error(error);
        // Item Select
                        callbacks(null, varName);
        document.getElementById('imbuement-tool-items-list').addEventListener('change', function() {
                    }
            selectItem();
                });
        }, false);
            });
 
        }
        // Imbuement Option Select
        document.getElementById('imbument-tool-items').addEventListener('click', function() {
            showSelectedOption();
            selectItem();
        }, false);
        document.getElementById('imbument-tool-scrolls').addEventListener('click', function() {
            showSelectedOption();
            selectItem();
        }, false);
 
        let searchInput = document.getElementById('imbument-tool-input-search');
        searchInput.addEventListener('input', () => {
            searchItems(searchInput);
        });
 
        // // ImbuementSelect
        // document.getElementById('imbuementSelect').addEventListener('change', function() {
        //     let option = getSelectedValueFromSelect('imbuementSelect');
        //    selectImbuement(option);
        //    loadSelectImbuementLevel(option);
        // }, false);
 
        // // Imbuement Level Select
        // document.getElementById('imbuementLevelSelect').addEventListener('change', function() {
        //    let option = getSelectedValueFromSelect('imbuementLevelSelect');
        //    selectImbuementLevel(option);
        // }, false);
    }


        var callbacks = (codigo, varName) => {
    var showAlert = (message) => {
            if (codigo == null) {
        alert(message || "Desculpe pela inconveniência!\n\nAlgo deu errado. Por favor, recarregue a página.");
                codigo = "";
    }
            } else {
                console.log('Loaded:', varName);
                window[varName] = JSON.parse(codigo);
            }
            // executedPromises();
        }


        var executedPromises = async () => {
    var getSelectedImbuementOption = () => {
            // await Promise.all(promises).
        return document.querySelector('input[name="imbuement-options"]:checked').value;
        }
    }


        var selectedItem = new Object();
    $(document).ready(function () {
        var promises = [];
        $(document).ready(function () {


            $(".version-label").text("v" + version);
        $(".imbument-tool-version-label").text("v" + version);
        const radioItems = document.getElementById('imbument-tool-items');
        if (radioItems == null) {
            showAlert();
            return;
        }
        radioItems.setAttribute('checked', true);
        // Adiona os eventos aos componentes.
        addEventListeners();


            // Adiona os eventos aos componentes.
        loadAllItens();
            addEventListeners();


            loadAllItens();
        showSelectedOption();
        });
    });
</pre>
</pre>

Edição das 01h43min de 28 de julho de 2025

<div class="imbuement-tool-panel">
    <label class="imbument-tool-version-label">v3.0.0</label>
    <div class="imbument-tool-loading">
        <img src="https://www.tibiawiki.com.br/images/c/ce/The_Epic_Wisdom.gif" /><br />
        <label>Loading...</label>
        <span>@TibiaWiki</span>
    </div>
    <div class="imbument-tool-menu-side">
        <h2>Imbuement Tool</h2>
        <div class="imbument-tool-radio-box">
            <input type="radio" id="imbument-tool-items" value="Items" name="imbuement-options">
            <label for="imbument-tool-items">Items</label>
        </div>
        <div class="imbument-tool-radio-box">
            <input type="radio" id="imbument-tool-scrolls" value="Scrolls" name="imbuement-options">
            <label for="imbument-tool-scrolls">Scrolls</label>
        </div>
        <span class="imbument-tool-divisor-line"></span>
        <div id="imbument-tool-items-container">
            <div class="imbument-tool-category-box">
                <label for="">Categoria:</label>
                <select id="imbuement-tool-items-category">
                </select>
            </div>
            <div class="imbument-tool-category-box">
                <label for="">Items:</label>
                <div class="imbument-tool-search-box">
                    <input id="imbument-tool-input-search" type="text" placeholder="buscar por item...">
                    <div><i>🔍</i></div>
                </div>
                <select id="imbuement-tool-items-list" size="10">
                </select>
            </div>
        </div>
        <div class="imbument-tool-items">
            <div class="imbument-tool-items-data-box">
                <div class="imbument-tool-items-data-image-box">
                    <img id="imbument-tool-items-image" src="" alt="item-image">
                </div>
                <div class="imbument-tool-items-data-box-data">
                    <label id="imbument-tool-items-name"><span class="label">Item:</span> Dauntless Dragon Scale Armor</label>
                    <label id="imbument-tool-items-slots"><span class="label">Slots:</span> 2</label>
                </div>
            </div>
        </div>
    </div>
    <div class="imbument-tool-imbuements-panel">
        <div class="imbument-tool-imbuements-level-box">
            <h2>Nível do Imbuement</h2>
            <div class="imbuement-tool-level-list">
            </div>
        </div>
        <span class="imbument-tool-divisor-line"></span>
        <div class="imbument-tool-imbuements-data-box">
            <h2>Imbuements</h2>
            <div class="imbuement-tool-data-table">
            </div>
        </div>
        <span class="imbument-tool-divisor-line"></span>
        <div class="imbument-tool-imbuements-data-box">
            <h2>Imbuements Items</h2>
            <h3 id="imbuement-tool-selected-imbuement-description"></h3>
            <div class="imbuement-tool-list-items">
            </div>
        </div>
        <span class="imbument-tool-divisor-line"></span>
        <div class="imbument-tool-imbuements-data-box">
            <h2>Informações</h2>
            <div class="imbuement-tool-prices">
                <div class="imbuement-tool-prices-items">
                </div>
                <div class="imbuement-tool-prices-taxas-info">
                    <h3>Valores</h3>
                    <!-- <span class="imbument-tool-divisor-line"></span> -->
                    <div class="imbuement-tool-prices-taxas-info-items">   
                    </div>
                    <span class="imbument-tool-divisor-line"></span>
                    <label id="lbl-total-gold-token">Total com Gold Token: 500000 GPs</label>
                    <label id="lbl-total-items">Total com os Items: 450000 GPs</label>
                </div>
            </div>
        </div>
    </div>
</div>   
    .imbuement-tool-panel {
        display: flex;
        max-width: 870px;
        position: relative;
        border: 2px solid #a2a9b1;
        background: #ffffff;
        border-radius: 5px;
        -webkit-box-shadow: 0px 0px 10px 2px rgba(255, 255, 255, 1);
        -moz-box-shadow: 0px 0px 10px 2px rgba(255, 255, 255, 1);
        box-shadow: 0px 0px 10px 2px rgba(255, 255, 255, 1);
        font-family: Verdana, Arial, Times New Roman, sans-serif;
        font-size: 13px;
        color: black;
    }
    .imbument-tool-loading {
        z-index: 9999;
        background-color: rgba(255, 255, 255, 0.98);
        display: inline-block;
        border-radius: 3px;
        position: absolute;
        height: 100%;
        width: 100%;
        top: 0;
        left: 0;
        align-content: center;
        text-align: center;
    }

    .imbument-tool-loading>label {
        position: relative;
        bottom: 0px;
        text-align: center;     
        font-size: math;
        background: transparent;
    }
    .imbument-tool-loading > span {
        text-align: center;
        align-content: center;
        background-color: #c7451d;
        height: 32px;
        width: 100%;
        position: absolute;
        bottom: 0px;
        left: 0px;
        text-align: center;     
        font-size: math;
        border-bottom-left-radius: 3px;
        border-bottom-right-radius: 3px;
    }
    .imbument-tool-menu-side {
        width: 320px;
        background-color: #c7451d;
        padding: 5px;
        color: white;
    }
    .imbument-tool-menu-side > h2 {
        width: 100%;
        text-align: center;
        padding-bottom: 15px;
        border-bottom: 1px solid black;
    }
    .imbument-tool-radio-box {
        margin-top: 15px;
        display: flex;
        margin-top: 2px;
    }
    .imbument-tool-radio-box > label {
        margin-top: 3px;
        font-size: 20px;
        font-weight: bold;
    }
    .imbument-tool-category-box {
        margin-top: 15px;
        width: 100%;
        display: block;
    }
    .imbument-tool-category-box > label {
        width: 100%;
        margin-left: 2px;
        font-weight: bold;
    }
    .imbument-tool-category-box > select {
        margin-top: 5px;
        width: 100%;
        min-height: 32px;
        font-weight: bold;
        border-radius: 5px;
        border: 1px solid black;
    }
    .imbument-tool-search-box {
        margin-top: 5px;
        width: 100%;
        display: flex;
    }
    .imbument-tool-search-box > input {
        width: calc(100% - 25px);
        height: 32px;
        border: 1px solid black;
        border-bottom-left-radius: 5px;
        border-top-left-radius: 5px;
    }
    .imbument-tool-search-box > div {
        width: 25px;
        height: 30px;
        background-color: white;
        border-left: none;
        border-right: 1px solid black;
        border-top: 1px solid black;
        border-bottom: 1px solid black;
        border-bottom-right-radius: 5px;
        border-top-right-radius: 5px;
        align-content: center;
        text-align: center;
    }
    .imbument-tool-imbuements-panel {
        display: block;
        width: calc(100% - 330px);
        padding: 5px;
    }
    .imbument-tool-items {
        width: 100%;
        margin-top: 15px;
    }
    .imbument-tool-items-data-box {
        display: flex;
    }
    .imbument-tool-items-data-box > .imbument-tool-items-data-image-box {
        width: 50px;
        height: 50px;
        background-color: white;
        border: 1px solid black;
        border-radius: 5px;
        align-content: center;
        text-align: center;
    }
    .imbument-tool-items-data-box-data {
        margin-left: 5px;
    }
    .imbument-tool-items-data-box-data > label {
        width: 100%;
        display: block;
        margin-bottom: 15px;
        /* font-weight: bold; */
        font-size: 15px;
    }
    .imbument-tool-divisor-line {
        display: flex;
        flex-flow: row wrap;
        justify-content: center;
        align-items: center;
        gap: 0.5rem;
        border-bottom: 1px solid black;
        padding: 0.25rem;
        width: calc(100% - 10px);
    }

    .imbument-tool-version-label {
        font-size: 14px;
        font-weight: bold;
        text-align: center;
        display: block;
        position: absolute;
        top: 5px;
        left: 5px;
        color: white;
    }
    #imbument-tool-items-container {
        display: block;
    }

    .imbument-tool-imbuements-level-box {
        width: 100%;
    }
    .imbument-tool-imbuements-level-box > h2 {
        width: 100%;
        text-align: center;
    }
    .imbuement-tool-level-list {
        display: flex;
        width: 100%;
        justify-content: center;
        align-items: center;
    }

    .imbuement-tool-level-list-item {
        display: flex;
        width: 100px;
        height: 50px;
        margin: 5px;
        flex-shrink: 0;
        align-content: center;
        text-align: center;
        border-radius: 5px;
        border: 1px solid black;
        justify-content: center;
        align-items: center;
    }
    .imbuement-tool-level-list-item:hover {
        background-color: #c04e2b;
    }
    .imbuement-tool-level-list-item.selected {
        background-color: #c7451d;
    }
    .imbuement-tool-level-list-item > label {
        font-weight: bold;
        flex-shrink: 0;
        margin-right: 5px;
    }
    .imbuement-tool-level-list-item > div {
        font-weight: bold;
        flex-shrink: 0;
    }
    .imbuement-tool-level-list-item-level {
        display: flex;
        justify-content: center;
        align-items: center;
    }
    .imbuement-tool-level-list-item-level > img {
        flex-shrink: 0;
        width: 10px;
        scale: 150%;
    }

    .imbument-tool-imbuements-data-box {
        width: 100%;
        min-height: 200px;
        display: block;
    }
    .imbument-tool-imbuements-data-box > h2, .imbument-tool-imbuements-data-box > h3 {
        width: 100%;
        text-align: center;
        align-content: center;
    }
    .imbuement-tool-data-table {
        display: block;
        width: 100%;
        max-height: 200px;
        overflow-y: auto;
    }
    .imbuement-tool-data-table-line {
        display: block;
        width: 100%;
    }
    .imbuement-tool-data-list {
        width: 100%;
        display: flex;
        justify-content: center;
        align-items: center;
    }
    .imbuement-tool-data-list-item {
        width: 64px;
        height: 64px;
        margin: 5px;
        border-radius: 5px;
        /* border: 2px solid black; */
    }
    .imbuement-tool-data-list-item.selected {
        width: 66px;
        height: 66px;
        filter: brightness(1.75);
        border: 0.15rem solid chocolate;
    }
    .imbuement-tool-data-list-item.selected > img {
        border-radius: 2px;
    }
    .imbuement-tool-data-list-item > img {
        width: 100%;
        scale: 100%;
        border-radius: 5px;
    }
    .imbuement-tool-data-list-item:hover {
        width: 66px;
        height: 66px;
        filter: brightness(1.25);
    }
    .imbuement-tool-list-items {
        width: 100%;
        display: flex;
        justify-content: center;
        align-items: center;
    }
    .imbuement-tool-list-items-box {
        background-color: #f3f3f3;
        margin: 5px;
        width: 64px;
        height: 64px;
        border: 1px solid black;
        border-radius: 5px;
        display: block;
        flex-shrink: 0;
        text-align: center;
        align-content: center;
    }
    .imbuement-tool-list-items-box > div {
        width: 100%;
        height: 44px;
        text-align: center;
        align-content: center;
    }
    .imbuement-tool-list-items-box > div > img {
        width: 32px;
    }
    .imbuement-tool-list-items-box > label {
        display: block;
        font-weight: bold;
        color: white;
        width: 100%;
        height: 20px;
        text-align: center;
        align-content: center;
        border-top: 1px solid black;
        background-color: #c7451d;
        border-bottom-left-radius: 5px;
        border-bottom-right-radius: 5px;
    }

    .imbuement-tool-prices {
        width: 100%;
        display: flex;
        justify-content: center;
        align-items: center;
    }

    .imbuement-tool-prices-items {
        width: 50%;
        margin-left: 10px;
        display: block;
        flex-shrink: 0;
    }

    .imbuement-tool-prices-items-box {
        width: 100%;
        display: flex;
        justify-content: center;
        align-items: center;
    }

    .imbuement-tool-prices-items-box > a {
        height: 100%;
        text-align: center;
        align-content: end;
    }
    .imbuement-tool-prices-items-box > a > img {
        border: 1px solid black;
        border-radius: 5px;
    }
    .imbuement-tool-prices-items-box > div {
        height: 40px;
       margin: 0px 5px 0px 5px;    
    }
    .imbuement-tool-prices-items-box > div > label {
        font-weight: bold;
        font-size: 10px;
    }
    .imbuement-tool-prices-items-box > div > input {
        width: 100%;
        text-align: center;
        border: 1px solid black;
        border-radius: 3px;
        height: 23px;
    }

    .imbuement-tool-prices-taxas-info {
        width: 50%;
        min-height: 140px;
        padding: 5px;
        border-left: 1px solid black;
        display: block;
        flex-shrink: 0;
    }

    .imbuement-tool-prices-taxas-info > h3 {
        width: 100%;
        margin: 0px 0px 15px 0px;
        text-align: center;
        align-content: center;
    }
    .imbuement-tool-prices-taxas-info > div {
        width: 100%;
        display: block;
        margin-top: 5px;
    }
    .imbuement-tool-prices-taxas-info > label {
        display: block;
        width: 100%;
        height: 20px;
        margin-top: 5px;
        font-weight: bold;
    }
    .imbuement-tool-prices-taxas-info > div > label {
        display: block;
        width: 100%;
        height: 20px;
        font-weight: bold;
    }

    .mg-top-35px {
        margin-top: 35px;
    }
    .label {
        font-weight: bold;
        font-size: 15px;
    }
    /* Extra small devices (phones, less than 576px) */
    @media (max-width: 575.98px) {
        .imbuement-tool-panel {
            width: calc(100% - 5px);
            display: block;
        }

        .imbument-tool-menu-side {
            width: calc(100% - 10px);
            border-top-left-radius: 3px;
            border-top-right-radius: 3px;
        }

        .imbument-tool-imbuements-panel {
            width: 100%;
        }

        .imbuement-tool-prices {
            display: block;
        }
        .imbuement-tool-prices-items, .imbuement-tool-prices-taxas-info {
            width: calc(100% - 20px);
            border-left: none;
        }
        .imbuement-tool-data-list-item, .imbuement-tool-data-list-item.selected {
            height: 100%;
        }
    }
const version = "3.0.0";
    var categories = new Object();
    var selectedImbuementLevel = "";
    var imbuementScrolls = {
        "Blank Imbuement Scroll": {
            "slots": 1,
            "imbuements": {
                "Vampirism": ["Intricate", "Powerful"],
                "Void": ["Intricate", "Powerful"],
                "Strike": ["Intricate", "Powerful"],
                "Featherweight": ["Intricate", "Powerful"],
                "Swiftness": ["Intricate", "Powerful"],
                "Vibrancy": ["Intricate", "Powerful"],
                "Reap": ["Intricate", "Powerful"],
                "Venom": ["Intricate", "Powerful"],
                "Scorch": ["Intricate", "Powerful"],
                "Frost": ["Intricate", "Powerful"],
                "Electrify": ["Intricate", "Powerful"],
                "Cloud Fabric": ["Intricate", "Powerful"],
                "Demon Presence": ["Intricate", "Powerful"],
                "Dragon Hide": ["Intricate", "Powerful"],
                "Lich Shroud": ["Intricate", "Powerful"],
                "Quara Scale": ["Intricate", "Powerful"],
                "Snake Skin": ["Intricate", "Powerful"],
                "Bash": ["Intricate", "Powerful"],
                "Blockade": ["Intricate", "Powerful"],
                "Chop": ["Intricate", "Powerful"],
                "Epiphany": ["Intricate", "Powerful"],
                "Precision": ["Intricate", "Powerful"],
                "Slash": ["Intricate", "Powerful"],
                "Punch": ["Intricate", "Powerful"]
            }
        }
    }
    var goldToken = {
        "name": "Gold Token",
        "quantity": 6,
        "link": "https://www.tibiawiki.com.br/wiki/Gold_Token",
        "image": "https://www.tibiawiki.com.br/images/0/0b/Gold_Token.gif"
    }

    var loadAllItens = async () => {
        let baseURL = '';
        $('.imbument-tool-loading label').text('Loading Imbuements and Itens for You, Adventurer!...');
        await Promise.all([
            loadData(baseURL, 'imbuements', 'Imbuements'),
            loadData(baseURL, 'armors', 'Armors'),
            loadData(baseURL, 'backpacks', 'Backpacks'),
            loadData(baseURL, 'boots', 'Boots'),
            loadData(baseURL, 'fists', 'Fists'),
            loadData(baseURL, 'helmets', 'Helmets'),
            loadData(baseURL, 'clubs', 'Clubs'),
            loadData(baseURL, 'distance', 'Distance'),
            loadData(baseURL, 'shields', 'Shields'),
            loadData(baseURL, 'swords', 'Swords'),
            loadData(baseURL, 'axes', 'Axes'),
            loadData(baseURL, 'spellbooks', 'Spellbooks'),
            loadData(baseURL, 'wandsRods', 'WandsRods')
        ]).then((results) => {
            categories = {
                "Armaduras": armors,
                "Backpacks": backpacks,
                "Botas": boots,
                "Capacetes": helmets,
                "Clavas": clubs,
                "Distância": distance,
                "Escudos": shields,
                "Espadas": swords,
                "Machados": axes,
                "Punhos": fists,
                "Spellbooks": spellbooks,
                "Wands e Rods": wandsRods
            }
            loadCategories();
            $('.imbument-tool-loading')[0].style.display = 'none';
            console.log("Load Done!");
        }).catch((error) => {
            showAlert();
            console.error('Error:', error);
        });
    }

    var loadData = async (baseURL, varName, path) => {
        return new Promise((resolve, reject) => {
            $.ajax({
                contentType: 'text/plain; charset=utf-8',
                url: baseURL + '/index.php?title=Tibia_Wiki:' + path + '/json&action=raw',
                type: 'GET',
                success: function(data) {
                    callbacks(data.replace(/<pre id="[^"]*">/gi, '').replace(/<\/pre>/gi, ''), varName);
                    resolve('Loaded: ' + varName);
                },
                error: function(error) {
                    console.error(error);
                    callbacks(null, varName);
                }
            });
        });
    }

    var callbacks = (codigo, varName) => {
        if (codigo == null) {
            codigo = "";
        } else {
            console.log('Loaded:', varName);
            window[varName] = JSON.parse(codigo);
        }
    }

    var loadCategories = () => {
        const categoriesSelect = document.getElementById('imbuement-tool-items-category');
        if (Object.keys(categories).length === 0 || categoriesSelect == null) {
            showAlert();
            return;
        }
        Object.keys(categories).forEach(category => {
            let option = document.createElement('option');
            option.value = category;
            option.innerHTML = category;
            categoriesSelect.appendChild(option);
        });
        if (categoriesSelect.children.length > 0) {
            categoriesSelect.children[0].setAttribute('selected', true);
            loadItemList();
        }
    }

    var loadItemList = (listItems) => {
        const category = getSelectedCategory();
        const itemsList = document.getElementById('imbuement-tool-items-list');
        if (Object.keys(categories[category]).length === 0 || itemsList == null) {
            showAlert();
            return;
        }        
        itemsList.innerHTML = '';
        const listOfItems = (listItems == null) ? categories[category] : listItems;
        Object.keys(listOfItems).forEach(item => {
            let option = document.createElement('option');
            option.value = item;
            option.innerHTML = item;
            itemsList.appendChild(option);
        });

        if (itemsList.children.length > 0) {
            itemsList.children[0].setAttribute('selected', true);
            selectItem();
        }
    }

    var selectItem = () => {
        const selectedCategory = document.getElementById('imbuement-tool-items-category').value;
        const selectedItem = document.getElementById('imbuement-tool-items-list').value;

        const itemNameLabel = document.getElementById('imbument-tool-items-name');
        const itemSlotsLabel = document.getElementById('imbument-tool-items-slots');
        const itemImage = document.getElementById('imbument-tool-items-image');

        itemNameLabel.innerHTML = `<span class="label">Item:</span> ${getSelectedItemName()}`;
        itemSlotsLabel.innerHTML = `<span class="label">Slots:</span> ${getSelectedItemObject().slots}`;
        itemImage.setAttribute('src', "https://www.tibiawiki.com.br/wiki/Especial:Redirecionar/file/" + getSelectedItemName() + ".gif");

        loadImbuementsLevel();
        createImbuementsLine();
    }

    var selectImbuementLevel = (component) => {
        cleanSelectedImbuementLevel();
        component.classList.add("selected");
        selectedImbuementLevel = component.getAttribute('level');
        createImbuementsLine();
    }

    var loadImbuementsLevel = () => {
        
        const imbuementLevelLists = document.getElementsByClassName("imbuement-tool-level-list");
        if (imbuementLevelLists == null || imbuementLevelLists.length === 0) {
            showAlert();
            return;
        }
        const componentList = imbuementLevelLists[0];
        componentList.innerHTML = "";

        const selectedItem = getSelectedItemObject();
        const selectedItemImbuements = selectedItem.imbuements;

        selectedItemImbuements[Object.keys(selectedItemImbuements)[0]].forEach(level => {
            const componentLevel = createImbuementLevelButton(level);
            componentList.appendChild(componentLevel);
        });
        const mostLevelImbuement = document.getElementsByClassName("imbuement-tool-level-list-item");
        if (mostLevelImbuement == null || mostLevelImbuement.length === 0) {
            showAlert();
            return;
        }
        if (selectedImbuementLevel.length === 0) {
            mostLevelImbuement[mostLevelImbuement.length - 1].classList.add("selected");
            selectedImbuementLevel = mostLevelImbuement[mostLevelImbuement.length - 1].getAttribute('level');
        } else {
            const indexes = Object.keys(mostLevelImbuement).filter(index => mostLevelImbuement[index].getAttribute('level') === selectedImbuementLevel);
            mostLevelImbuement[indexes[0]].classList.add('selected');
        }
    }

    var createImbuementLevelButton = (level) => {

        const btn = document.createElement("div");
        btn.classList.add("imbuement-tool-level-list-item");
        btn.setAttribute("level", level);
        btn.addEventListener('click', function() {
            selectImbuementLevel(this);
        }, false);

        const imgBox = document.createElement("div");
        imgBox.classList.add("imbuement-tool-level-list-item-level");

        const label = document.createElement("label");
        label.innerText = level;

        let indexLevel = 1;
        switch (level) {
            case("Intricate"): {
                indexLevel = 2;
                break;
            }
            case("Powerful"): {
                indexLevel = 3;
                break;
            }
            default: {
                indexLevel = 1;
                break;
            }
        }
        for(let i = 0; i < indexLevel; i++) {
            const img = document.createElement('img');
            img.setAttribute('src', 'https://www.tibiawiki.com.br/images/2/2f/The_Heart_of_the_Sea.gif');
            img.setAttribute('alt', 'level');
            imgBox.appendChild(img);
        }
        btn.appendChild(imgBox);
        btn.appendChild(label);
        return btn;
    }

    var createImbuementsLine = () => {
        const selectedItem = getSelectedItemObject();
        const selectedItemImbuements = selectedItem.imbuements;

        const tables = document.getElementsByClassName('imbuement-tool-data-table');
        if (tables == null || tables.length === 0) {
            showAlert();
            return;
        }
        const table = tables[0];
        table.innerHTML = "";
        let indexLine = 0;
        let tableLine = null;
        let tableDataLineList = null;
        Object.keys(selectedItemImbuements).forEach(imbuement => {
            if (indexLine === 0) {
                tableLine = document.createElement("div");
                tableLine.classList.add("imbuement-tool-data-table-line");

                tableDataLineList = document.createElement("div");
                tableDataLineList.classList.add("imbuement-tool-data-list");

                tableLine.appendChild(tableDataLineList);
            }

            const itemList = createImbuementsItem(imbuement);
            if (itemList) {
                tableDataLineList.appendChild(itemList);
            }

            indexLine++;
            if (indexLine === 6 || indexLine === Object.keys(selectedItemImbuements).length) {
                table.append(tableLine);
                indexLine = 0;
            }
        });

        const imbuementComponent = document.getElementsByClassName("imbuement-tool-data-list-item")[0];
        selectImbuementCell(imbuementComponent);
    }

    var createImbuementsItem = (imbuementName) => {
        const imbuement = imbuements[imbuementName];
        const imbuementLevel = getSelectedImbuementLevel();
        const selectedItem = getSelectedItemObject();
        if (!selectedItem.imbuements[imbuementName].includes(imbuementLevel)) {
            return;
        }

        const divItem = document.createElement('div');
        divItem.classList.add("imbuement-tool-data-list-item");
        divItem.setAttribute("imbuement-name", imbuementName);
        divItem.setAttribute("imbuement-level", imbuementLevel);
        divItem.setAttribute("title", imbuementName.concat(" | ").concat(imbuement.name));

        const img = document.createElement('img');
        img.setAttribute('src', imbuement.level[imbuementLevel].image);

        divItem.appendChild(img);

        divItem.addEventListener('click', function() {
            selectImbuementCell(this);
        }, false);

        return divItem;
    }

    var loadImbuementsItems = () => {
        const listItems = document.getElementsByClassName("imbuement-tool-list-items");
        if (listItems == null || Object.keys(listItems).length === 0) {
            showAlert();
            return;
        }
        const itemList = listItems[0];
        itemList.innerHTML = "";

        const imbuement = getSelectedImbuementObject();
        imbuement.itens.forEach(item => {
            const itemSlot = createImbuementItemSlot(item);
            itemList.appendChild(itemSlot);
        });
    }

    var createImbuementItemSlot = (imbuementItem) => {

        const divBox = document.createElement("div");
        divBox.classList.add("imbuement-tool-list-items-box");
        divBox.setAttribute("title", new String(imbuementItem.quantity).concat("x ").concat(imbuementItem.name));

        const divImg = document.createElement("div");
        const a = document.createElement("a");
        a.setAttribute('href', imbuementItem.link);
        a.setAttribute('target', "_blank");
        const img = document.createElement("img");
        img.setAttribute('src', imbuementItem.image);
        const label = document.createElement("label");
        label.innerText = imbuementItem.quantity;

        a.appendChild(img);
        divImg.appendChild(a);
        divBox.appendChild(divImg);
        divBox.appendChild(label);

        return divBox;
    }

    var selectImbuementCell = (component) => {
        cleanSelectedImbuementCell();
        component.classList.add('selected');
        const imbuementDescription = document.getElementById('imbuement-tool-selected-imbuement-description');
        imbuementDescription.innerText = imbuements[component.getAttribute('imbuement-name')].level[component.getAttribute('imbuement-level')].description;

        loadImbuementsItems();
        loadImbuementItemsInfos();
        loadItemsInfosLine();
    }

    var loadImbuementItemsInfos = () => {


        const itemsInfosList = document.getElementsByClassName('imbuement-tool-prices-items');
        if (itemsInfosList == null || Object.keys(itemsInfosList).length === 0) {
            showAlert();
            return;
        }
        const itemsInfosListComponent = itemsInfosList[0];
        itemsInfosListComponent.innerHTML = "";

        const imbuement = getSelectedImbuementObject();
        if (imbuement.gold_token) {
            goldToken.quantity = getGoldTokenQuantity();
            const goldTokenBox = createImbuementItemInfoBox(goldToken, 0);
            itemsInfosListComponent.appendChild(goldTokenBox);
        }
        let index = 1;
        imbuement.itens.forEach(item => {
            const itemInfoBox = createImbuementItemInfoBox(item, index);
            itemsInfosListComponent.appendChild(itemInfoBox);
            index++;
        });
    }

    var createImbuementItemInfoBox = (item, indexId) => {

        const img = document.createElement('img');
        img.setAttribute('src', item.image);
        img.setAttribute('alt', 'imbuement item');

        const a = document.createElement('a');
        a.setAttribute('href', item.link);
        a.setAttribute('target', '_blank');
        a.setAttribute('title', item.name);
        a.appendChild(img);

        const labelQuantity = document.createElement('label');
        labelQuantity.innerText = "Quantidade:";

        const inputQuantity = document.createElement('input');
        inputQuantity.setAttribute('value', item.quantity);
        inputQuantity.setAttribute('min', '0');
        inputQuantity.setAttribute('type', 'number');
        inputQuantity.setAttribute('id', 'input-quantity-'.concat(indexId));
        inputQuantity.addEventListener('input', function () {
            updateValues(this, 'quantity', indexId);
        });

        const divQuantity = document.createElement('div');
        divQuantity.appendChild(labelQuantity);
        divQuantity.appendChild(inputQuantity);

        const labelPrice = document.createElement('label');
        labelPrice.innerText = "Valor Unitário (GPs):";

        const inputPrice = document.createElement('input');
        inputPrice.setAttribute('value', 0);
        inputPrice.setAttribute('min', '0');
        inputPrice.setAttribute('type', 'number');
        inputPrice.setAttribute('id', 'input-price-'.concat(indexId));
        inputPrice.addEventListener('input', function () {
            updateValues(this, 'price', indexId);
        });

        const divPrice = document.createElement('div');
        divPrice.appendChild(labelPrice);
        divPrice.appendChild(inputPrice);

        const divBox = document.createElement('div');
        divBox.classList.add('imbuement-tool-prices-items-box');
        divBox.appendChild(a);
        divBox.appendChild(divQuantity);
        divBox.appendChild(divPrice);
        
        return divBox;
    }

    var loadItemsInfosLine = () => {

        const itemsInfoDivs = document.getElementsByClassName('imbuement-tool-prices-taxas-info-items');
        if (itemsInfoDivs == null || Object.keys(itemsInfoDivs).length === 0) {
            showAlert();
            return;
        }
        const itemsInfo = itemsInfoDivs[0];
        itemsInfo.innerHTML = "";

        const imbuement = getSelectedImbuementObject();
        if (imbuement.gold_token) {
            const goldTokenBox = createItemInfoLabel(goldToken, 0);
            itemsInfo.appendChild(goldTokenBox);
        }
        document.getElementById("lbl-total-gold-token").style.display = imbuement.gold_token ? 'block' : 'none';
        let index = 1;
        imbuement.itens.forEach(item => {
            const itemLabel = createItemInfoLabel(item, index);
            itemsInfo.appendChild(itemLabel);
            index++;
        });
    }

    var createItemInfoLabel = (item, indexId) => {
        const label = document.createElement('label');
        label.setAttribute('id', "lbl-item-".concat(indexId));
        label.innerText = "Total ".concat(item.name).concat(": 0 GPs");
        return label;
    }

    var getGoldTokenQuantity = () => {
        switch(getSelectedImbuementLevel()) {
            case ("Powerful"): {
                return 6;
            }
            case ("Intricate"): {
                return 4;
            }
            default: {
                return 2;
            }
        }
    }
    var getSelectedImbuementLevel = () => {
        return selectedImbuementLevel;
    }

    var getSelectedCategory = () => {
        return document.getElementById('imbuement-tool-items-category').value;
    }
    var getSelectedItemName = () => {
        return (getSelectedImbuementOption() === "Items") ? document.getElementById('imbuement-tool-items-list').value : Object.keys(imbuementScrolls)[0];
    }
    var getSelectedItemObject = () => {
        return (getSelectedImbuementOption() === "Items") ? categories[getSelectedCategory()][getSelectedItemName()] : imbuementScrolls[getSelectedItemName()];
    }
    var getItemList = () => {
        return categories[getSelectedCategory()];
    }
    var getSelectedImbuementObject = () => {
        const selectedComponent = document.querySelector('.imbuement-tool-data-list-item.selected');
        const imbuementName = selectedComponent.getAttribute('imbuement-name');
        const imbuementLevel = selectedComponent.getAttribute('imbuement-level');
        imbuements[imbuementName].level[imbuementLevel]["gold_token"] = imbuements[imbuementName].gold_token;
        return imbuements[imbuementName].level[imbuementLevel];
    }

    // Limpa Campos.
    var cleanSearchField = () => {
        let searchInput = document.getElementById('imbument-tool-input-search');
        searchInput.value = '';
    }
    var cleanSelectedImbuementLevel = () => {
        const selectedComponent = document.querySelector('.imbuement-tool-level-list-item.selected');
        if (selectedComponent == null) {
            return;
        }
        selectedComponent.classList.remove("selected");
        selectedImbuementLevel = "";

        cleanSelectedImbuementCell();
    }
    var cleanSelectedImbuementCell = () => {
        const selectedComponent = document.querySelector('.imbuement-tool-data-list-item.selected');
        if (selectedComponent == null) {
            return;
        }
        selectedComponent.classList.remove("selected");

        const imbuementDescription = document.getElementById('imbuement-tool-selected-imbuement-description');
        imbuementDescription.innerText = "";

        const listItems = document.getElementsByClassName("imbuement-tool-list-items");
        if (listItems == null || Object.keys(listItems).length === 0) {
            showAlert();
            return;
        }
        const itemList = listItems[0];
        itemList.innerHTML = "";
    }

    var showSelectedOption = () => {
        const selectedImbuementOption = getSelectedImbuementOption();
        const itemsContainer = document.getElementById('imbument-tool-items-container');
        if (itemsContainer == null) {
            showAlert();
            return;
        }
        itemsContainer.style.display = (selectedImbuementOption === "Items") ? 'block' : 'none';
        cleanSelectedImbuementLevel();
    }

    // Busca Item na lista de Items.
    var searchItems = (input) => {
        let items = getItemList();
        let filteredKeys = Object.keys(items).filter(name => name.toLowerCase().includes(input.value.toLowerCase()));
        if (filteredKeys.length === 0) {
            return
        }
        let filteredItems = new Object();
        filteredKeys.forEach(itemName => {
            filteredItems[itemName] = items[itemName];
        });
        loadItemList(filteredItems);
    }

    var updateValues = (component, type, indexId) => {
        const value = component.value;

        const multiplier = document.getElementById(`input-${(type === 'quantity') ? 'price' : 'quantity'}-${indexId}`).value;

        const total = value * multiplier;
        const imbuement = getSelectedImbuementObject();
        const imbuementItemName = (indexId === 0) ? goldToken.name : imbuement.itens[indexId - 1].name;
        document.getElementById(`lbl-item-${indexId}`).innerText = `Total ${imbuementItemName}: ${total.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",")} GPs`;

        updateTotal();
    }

    var updateTotal = () => {
        const imbuement = getSelectedImbuementObject();

        let totalGoldTotken = 0;
        if (imbuement.gold_token) {
            const quantityGoldToken = document.getElementById('input-quantity-0').value;
            const priceGoldToken = document.getElementById('input-price-0').value;
            totalGoldTotken = quantityGoldToken * priceGoldToken;
        }

        let totalItens = 0;
        for (let i = 1; i <= imbuement.itens.length; i++) {
            const quantityItem = document.getElementById(`input-quantity-${i}`).value;
            const priceItem = document.getElementById(`input-price-${i}`).value;
            totalItens += quantityItem * priceItem;
        }
        const taxa = getTaxPrice();
        if (imbuement.gold_token) {
            document.getElementById('lbl-total-gold-token').innerText = `Total com Gold Token: ${(totalGoldTotken + taxa).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",")} GPs`;
        }
        document.getElementById('lbl-total-items').innerText = `Total com os Items: ${(totalItens + taxa).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",")} GPs`;
    }

    var getTaxPrice = () => {
        switch(getSelectedImbuementLevel()) {
            case('Powerful'): {
                return 250000;
            }
            case('Intricate'): {
                return 60000;
            }
            default: {
                return 7500;
            }
        }
    }

    /**
     * Adiciona Evento para quando houver interação nos selects, disparar uma ação/função.
     */
    var addEventListeners = () => {
        // Category Select
        document.getElementById('imbuement-tool-items-category').addEventListener('change', function() {
            cleanSearchField();
            loadItemList();
            createImbuementsLine();
        }, false);

        // Item Select
        document.getElementById('imbuement-tool-items-list').addEventListener('change', function() {
            selectItem();
        }, false);

        // Imbuement Option Select
        document.getElementById('imbument-tool-items').addEventListener('click', function() {
            showSelectedOption();
            selectItem();
        }, false);
        document.getElementById('imbument-tool-scrolls').addEventListener('click', function() {
            showSelectedOption();
            selectItem();
        }, false);

        let searchInput = document.getElementById('imbument-tool-input-search');
        searchInput.addEventListener('input', () => {
            searchItems(searchInput);
        });

        // // ImbuementSelect
        // document.getElementById('imbuementSelect').addEventListener('change', function() {
        //     let option = getSelectedValueFromSelect('imbuementSelect');
        //     selectImbuement(option);
        //     loadSelectImbuementLevel(option);
        // }, false);

        // // Imbuement Level Select
        // document.getElementById('imbuementLevelSelect').addEventListener('change', function() {
        //     let option = getSelectedValueFromSelect('imbuementLevelSelect');
        //     selectImbuementLevel(option);
        // }, false);
    }

    var showAlert = (message) => {
        alert(message || "Desculpe pela inconveniência!\n\nAlgo deu errado. Por favor, recarregue a página.");
    }

    var getSelectedImbuementOption = () => {
        return document.querySelector('input[name="imbuement-options"]:checked').value;
    }

    $(document).ready(function () {

        $(".imbument-tool-version-label").text("v" + version);
        const radioItems = document.getElementById('imbument-tool-items');
        if (radioItems == null) {
            showAlert();
            return;
        }
        radioItems.setAttribute('checked', true);
        // Adiona os eventos aos componentes.
        addEventListeners();

        loadAllItens();

        showSelectedOption();
    });