eSim MU Storage 2

Improve the E-sim Mu Storage page

// ==UserScript==
// @name         eSim MU Storage 2
// @namespace    eSim-MU2
// @version      2.1
// @description  Improve the E-sim Mu Storage page
// @author       gg
// @match        https://*.e-sim.org/militaryUnitStorage.html*
// @icon         https://cdn.discordapp.com/icons/316566483021070356/cfffdee309ec53078e9a9698ec4eef42.png?size=256
// @grant        none
// ==/UserScript==

const qualityForm = document.getElementById('quantity')
const tickAllBtn = document.getElementById('tickAll')
const esimDonateForm = document.getElementById('donateProductForm')
const userElement = document.getElementById('userName')
const userId = userElement.href.split('=')[1]
const productOptions = document.getElementById('product')
const storage = document.querySelectorAll('.storage')
const elementList = document.querySelectorAll('.receipments')
const foodDiv = document.createElement('div')
const foodTextarea = document.createElement('input')
const foodQuantityInput = document.createElement('input')
const giftDiv = document.createElement('div')
const giftTextarea = document.createElement('input')
const giftQuantityInput = document.createElement('input')
const wepDiv = document.createElement('div')
const wepTextarea = document.createElement('input')
const wepQuantityInput = document.createElement('input')
const btnSendSupps = document.createElement('BUTTON')
const lineBreak = document.createElement('hr')

const delay = ms => new Promise(res => setTimeout(res, ms))

function randomNumber () {
  const n = Math.floor(Math.random() * 3000) + 4000
  return n
}

function findFormCitizenId () {
  for (let i = 0; i < elementList.length; i++) {
    if (elementList[i].value === userId) {
      return elementList[i].name
    }
  }
}

function createElements () {
  const quantityAdd10Btn = document.createElement('BUTTON')
  quantityAdd10Btn.type = 'button'
  quantityAdd10Btn.setAttribute('class', 'submit')
  quantityAdd10Btn.innerHTML = '10'
  qualityForm.parentNode.insertBefore(quantityAdd10Btn, qualityForm.nextSibling)
  quantityAdd10Btn.addEventListener('click', function () { addQuantity(10) })

  const quantityAdd100Btn = document.createElement('BUTTON')
  quantityAdd100Btn.type = 'button'
  quantityAdd100Btn.innerHTML = '100'
  qualityForm.parentNode.insertBefore(quantityAdd100Btn, quantityAdd10Btn.nextSibling)
  quantityAdd100Btn.addEventListener('click', function () { addQuantity(100) })

  const quantityAdd1000btn = document.createElement('BUTTON')
  quantityAdd1000btn.type = 'button'
  quantityAdd1000btn.innerHTML = '1000'
  qualityForm.parentNode.insertBefore(quantityAdd1000btn, quantityAdd100Btn.nextSibling)
  quantityAdd1000btn.addEventListener('click', function () { addQuantity(1000) })

  const formName = findFormCitizenId()
  const sendYourselfBtn = document.createElement('BUTTON')
  sendYourselfBtn.innerHTML = 'Send Yourself'
  sendYourselfBtn.setAttribute('name', formName)
  sendYourselfBtn.setAttribute('value', userId)
  tickAllBtn.parentNode.insertBefore(sendYourselfBtn, tickAllBtn.nextSibling)

  foodDiv.style.display = 'inline-block'
  foodDiv.setAttribute('id', 'foodProductForm')

  esimDonateForm.parentNode.insertBefore(foodDiv, esimDonateForm)

  foodTextarea.setAttribute('value', 'Q5-FOOD')
  foodTextarea.setAttribute('name', 'product')
  foodTextarea.value = 'Food'
  foodTextarea.disabled = true
  foodTextarea.style.cssText = 'color:black; width:33px; height:15px;'
  foodDiv.appendChild(foodTextarea)

  foodQuantityInput.style.cssText = 'margin-left: -0.1em!important; margin-right: 0.5em!important; width:31px; height:15px'
  foodQuantityInput.setAttribute('name', 'quantity')
  foodQuantityInput.setAttribute('value', '15')
  foodQuantityInput.type = 'digit'
  foodDiv.appendChild(foodQuantityInput)

  giftDiv.style.display = 'inline-block'
  giftDiv.setAttribute('id', 'giftProductForm')

  esimDonateForm.parentNode.insertBefore(giftDiv, esimDonateForm)

  giftTextarea.value = 'Gift'
  giftTextarea.disabled = true
  giftTextarea.style.cssText = 'color:black; width:30px; height:15px;'
  giftDiv.appendChild(giftTextarea)

  giftQuantityInput.style.cssText = 'margin-left: -0.1em!important; margin-right: 0.5em!important; width:31px; height:15px'
  giftQuantityInput.type = 'digit'
  giftQuantityInput.setAttribute('value', '15')
  giftDiv.appendChild(giftQuantityInput)

  wepDiv.style.display = 'inline-block'
  wepDiv.setAttribute('id', 'wepProductForm')
  wepDiv.noValidate = true
  esimDonateForm.parentNode.insertBefore(wepDiv, esimDonateForm)

  wepTextarea.value = 'Wep'
  wepTextarea.disabled = true
  wepTextarea.style.cssText = 'color:black; width:30px; height:15px;'
  wepDiv.appendChild(wepTextarea)

  wepQuantityInput.style.cssText = 'margin-left: -0.1em!important; margin-right: 0.5em!important; width:31px; height:15px'
  wepQuantityInput.type = 'digit'
  wepQuantityInput.setAttribute('value', '250')
  wepDiv.appendChild(wepQuantityInput)

  btnSendSupps.type = 'button'
  btnSendSupps.addEventListener('click', sendSupps)
  btnSendSupps.innerHTML = 'SEND SUPPS'
  esimDonateForm.parentNode.insertBefore(btnSendSupps, esimDonateForm)

  esimDonateForm.parentNode.insertBefore(lineBreak, esimDonateForm)

  productOptions.options[0].text = 'Click on an item'
}

function suppsStatusColor (suppType, status) {
  if (suppType === 'FOOD') {
    if (status === 'ORANGE') {
      foodTextarea.style.color = 'Orange'
      foodQuantityInput.style.color = 'Orange'
    } else if (status === 'GREEN') {
      foodQuantityInput.style.color = '#11806a'
      foodTextarea.style.color = '#11806a'
    }
  }
  if (suppType === 'GIFT') {
    if (status === 'ORANGE') {
      giftTextarea.style.color = 'Orange'
      giftQuantityInput.style.color = 'Orange'
    } else if (status === 'GREEN') {
      giftTextarea.style.color = '#11806a'
      giftQuantityInput.style.color = '#11806a'
    }
  }
  if (suppType === 'WEAPON') {
    if (status === 'ORANGE') {
      wepTextarea.style.color = 'Orange'
      wepQuantityInput.style.color = 'Orange'
    } else if (status === 'GREEN') {
      wepTextarea.style.color = '#11806a'
      wepQuantityInput.style.color = '#11806a'
    }
  }
}

function resetButtonsAndText () {
  foodTextarea.style.color = 'Black'
  foodQuantityInput.style.color = 'Black'
  giftTextarea.style.color = 'Black'
  giftQuantityInput.style.color = 'Black'
  wepTextarea.style.color = 'Black'
  wepQuantityInput.style.color = 'Black'
  btnSendSupps.disabled = false
}

function startConnection () {
  const xhr = new XMLHttpRequest()
  xhr.open('POST', '/militaryUnitStorage.html', true)

  // Send the proper header information along with the request
  xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')

  xhr.onreadystatechange = function () { // Call a function when the state changes.
    if (this.readyState === XMLHttpRequest.DONE) {
      // Request finished. Do processing here.
    }
  }
  return xhr
}

const sendSupps = async () => {
  btnSendSupps.disabled = true

  let xhr
  const citizenId = findFormCitizenId()
  if (foodQuantityInput.value > 1) {
    suppsStatusColor('FOOD', 'ORANGE')
    await delay(randomNumber())
    const foodFormData = 'product=5-FOOD&quantity=' + foodQuantityInput.value + '&reason=&' + citizenId + '=' + userId
    xhr = startConnection()
    xhr.send(foodFormData)
    suppsStatusColor('FOOD', 'GREEN')
  }
  if (giftQuantityInput.value > 1) {
    suppsStatusColor('GIFT', 'ORANGE')
    await delay(randomNumber())
    const giftFormData = 'product=5-GIFT&quantity=' + giftQuantityInput.value + '&reason=&' + citizenId + '=' + userId
    xhr = startConnection()
    xhr.send(giftFormData)
    suppsStatusColor('GIFT', 'GREEN')
  }
  if (wepQuantityInput.value > 1) {
    suppsStatusColor('WEAPON', 'ORANGE')
    await delay(randomNumber())
    console.log('product=5-WEAPON&quantity=' + wepQuantityInput.value + '&reason=&' + citizenId + '=' + userId)
    const wepFormData = 'product=5-WEAPON&quantity=' + wepQuantityInput.value + '&reason=&' + citizenId + '=' + userId
    xhr = startConnection()
    xhr.send(wepFormData)
    suppsStatusColor('WEAPON', 'GREEN')
  }
  resetButtonsAndText()
}

function addQuantity (amount) {
  qualityForm.value = parseInt(qualityForm.value) + amount
}

function itemClickedOn (item) {
  for (let i = 1; i < productOptions.length; i++) {
    const pOption = productOptions[i]
    if (pOption.value === item) {
      pOption.selected = true
    }
  }
}

createElements()
for (let i = 0; i < storage.length; i++) {
  const itemInStorage = storage[i]
  const itemDirty = itemInStorage.children[0].className
  if (itemDirty) {
    const itemClean = itemDirty.replace('-ammount', '')
    switch (itemClean) {
      case 'Weapon-5':
        itemInStorage.addEventListener('click', function () { itemClickedOn('5-WEAPON') })
        break
      case 'Weapon-4':
        itemInStorage.addEventListener('click', function () { itemClickedOn('4-WEAPON') })
        break
      case 'Weapon-3':
        itemInStorage.addEventListener('click', function () { itemClickedOn('3-WEAPON') })
        break
      case 'Weapon-2':
        itemInStorage.addEventListener('click', function () { itemClickedOn('2-WEAPON') })
        break
      case 'Weapon-1':
        itemInStorage.addEventListener('click', function () { itemClickedOn('1-WEAPON') })
        break
      case 'Food-5':
        itemInStorage.addEventListener('click', function () { itemClickedOn('5-FOOD') })
        break
      case 'Food-4':
        itemInStorage.addEventListener('click', function () { itemClickedOn('4-FOOD') })
        break
      case 'Food-3':
        itemInStorage.addEventListener('click', function () { itemClickedOn('3-FOOD') })
        break
      case 'Food-2':
        itemInStorage.addEventListener('click', function () { itemClickedOn('2-FOOD') })
        break
      case 'Food-1':
        itemInStorage.addEventListener('click', function () { itemClickedOn('1-FOOD') })
        break
      case 'Gift-5':
        itemInStorage.addEventListener('click', function () { itemClickedOn('5-GIFT') })
        break
      case 'Gift-4':
        itemInStorage.addEventListener('click', function () { itemClickedOn('4-GIFT') })
        break
      case 'Gift-3':
        itemInStorage.addEventListener('click', function () { itemClickedOn('3-GIFT') })
        break
      case 'Gift-2':
        itemInStorage.addEventListener('click', function () { itemClickedOn('2-GIFT') })
        break
      case 'Gift-1':
        itemInStorage.addEventListener('click', function () { itemClickedOn('1-GIFT') })
        break
      case 'Ticket-5':
        itemInStorage.addEventListener('click', function () { itemClickedOn('5-TICKET') })
        break
      case 'Ticket-4':
        itemInStorage.addEventListener('click', function () { itemClickedOn('4-TICKET') })
        break
      case 'Ticket-3':
        itemInStorage.addEventListener('click', function () { itemClickedOn('3-TICKET') })
        break
      case 'Ticket-2':
        itemInStorage.addEventListener('click', function () { itemClickedOn('2-TICKET') })
        break
      case 'Ticket-1':
        itemInStorage.addEventListener('click', function () { itemClickedOn('1-TICKET') })
        break
      case 'House-5':
        itemInStorage.addEventListener('click', function () { itemClickedOn('5-HOUSE') })
        break
      case 'Estate-5':
        itemInStorage.addEventListener('click', function () { itemClickedOn('5-ESTATE') })
        break
    }
  }
}