class Element
{
  //Deklarer de lokale variabler.
  int x;
  int y;
  int id;
  int group;
  int period;
  String shortvers;
  String type;
  String english;
  String fullname;
  float molarweight;
  float spcSpace;
  color col;

  Element(int tid, int tgr, int tpe, String tsh, String tty, String ten, String tfu, float tmw)
  {
    //Assign variablerne hentet fra ptable.xml til de lokale variabler defineret ovenfor.
    id = tid;
    group = tgr;
    period = tpe;
    shortvers = tsh;
    type = tty;
    english = ten;
    fullname = tfu;
    molarweight = tmw;

    x = (group - 1) * 63 + 30; //Lokal x-koordinat baseret på gruppenummer.
    y = (period - 1) * 63 + 30; //Lokal y-koordinat baseret på periodenummer.

    // Hvis typen er enten Lanthanoid eller Actinoid, skal de tegnes 
    // 136px under de andre elementer med samme periodenummer.
    if (type.equals("Lanthanoid") || type.equals("Actinoid"))
    {
      y = y + 136;
    }
    
    // Undersøg hvilken type elementet har, sæt derefter col-variablen til en bestemt farve.
    if (type.equals("Alkali-metal"))
    {
      col = color(178, 100, 4);
    }
    else if (type.equals("Alkaline-metal"))
    {
      col = color(178, 125, 20);
    }
    else if (type.equals("Transition-metal"))
    {
      col = color(203, 115, 125);
    }
    else if (type.equals("Lanthanoid"))
    {
      col = color(201, 73, 90);
    }
    else if (type.equals("Actinoid"))
    {
      col = color(201, 32, 55);
    }
    else if (type.equals("Post-transition"))
    {
      col = color(85, 154, 167);
    }
    else if (type.equals("Metalloids"))
    {
      col = color(137, 184, 193);
    }
    else if (type.equals("Non-metal"))
    {
      col = color(128, 167, 0);
    }
    else if (type.equals("Halogen"))
    {
      col = color(156, 196, 40);
    }
    else if (type.equals("Noble-gass"))
    {
      col = color(153, 51, 205);
    }
    else // Hvis elementtypen enten er ukendt, eller ikke hører under de andre typer.
    {
      col = color(107, 107, 107);
    }
  }

  void draw() // Tegn den farvede boks med id og navn.
  {
    // Tegn en boks med farve-variablen col.
    fill(col);
    rect(x, y, 60, 60);
    fill(20, 20, 20);

    // Skriv Id i øverste venstre hjørne af boksen.    
    textAlign(TOP);
    textSize(10);
    text(id + 1, x + 2, y + 10); // Der lægges 1 til id, da id i ptable.xml starter ved 0

    // Skriv det kemiske symbol i midten af boksen.
    textAlign(CENTER, CENTER);
    textSize(30);
    text(shortvers, x + 30, y + 30);
    if(english != "" && lang == true)
    {
      // Skriv det fulde navn i nederste højre hjørne af boksen.
      textAlign(RIGHT, BOTTOM);
      textSize(8);
      text(english, (x + 60) - 2, (y + 60) - 2);
    }
    else
    {
      // Skriv det fulde navn i nederste højre hjørne af boksen.
      textAlign(RIGHT, BOTTOM);
      textSize(8);
      text(fullname, (x + 60) - 2, (y + 60) - 2); 
    }
  }

  void clicked() //Når musen trykkes ned er der tre mulige events, count++, count-- og RESET.
  {
    // Hvis musen er over den farvede boks når der klikkes, lægges 1 til count[i].
    if (mouseX >= x && mouseY >= y && mouseX <= x + 60 && mouseY <= y + 60)
    {
      count[id]++;
    }

    //Hvis musen er over dette element i det grå "molekyle" felt og count[i] 
    //er større end 0 når der klikkes, trækkes 1 fra count[i].
    if (mouseX >= 189 + spcSpace && mouseY >= 146 && mouseX <= 189 + spcSpace + sw[id] && mouseY <= 186)
    {
      if (count[id] > 0)
      {
        count[id]--;
      }
    }

    // Hvis musen er over reset-knappen nulstilles programmet.
    if (mouseX >= 534 && mouseY >= 121 && mouseX <= 594 && mouseY <= 146)
    {
      loop();
      count[id] = 0; // Sæt variabel [id] i arrayen count til 0.
    }
  }

  void display() //Skriver elementnavn og antal i det grå "molekyle" felt hvis count er over 0.
  {
    if (count[id] > 0)
    {
      weight = weight + molarweight * count[id];
      spcSpace = space;

      // Skriv elementnavnet indenfor den grå boks, med den specifikke afstand til de andre elementer.
      fill(20, 20, 20);
      textAlign(LEFT, BOTTOM);
      textSize(30);
      text(shortvers, 189 + spcSpace, 186);

      // Skriv count[id] i nederste højre hjørne af navnet hvis count[id] er større end 1.
      if (count[id] > 1)
      {
        textAlign(LEFT, BOTTOM);
        textSize(10);
        text(count[id], 189 + spcSpace + sw[id], 186);
      }

      space = space + sw[id] + 10; // Tilføj sw[id] og et mellemrum på 10px til den globale space variabel.
    }
  }
}
