import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

/**
 * Listing 5-1, Java 2 Bible (http://www.JavaBible.com/)
 */

public class Tips extends JApplet implements MouseListener, MouseMotionListener, ActionListener {

// Intierer variabler

  private Image myImage;
  private Image imageSetPro;
  private String paramDag;
  private String msg;
  private int iStartPaintY = 50;
  public String paramLag[] = new String[12];
  public String paramPro[] = new String[12];
  public Kupong aktivKup = new Kupong();
  //
  private String evtComand = " Folkerekken ";
  private int index;
  public int paramGrid[][] = new int[12][6];
  private boolean update = true, pictProWisble = false;
  //
  private int xpos = 0, ypos = 0, xlast = 0, ylast = 0,pictposy = 0,lastpictposy = 0, lastpictposx=0;
  private int px1,px2,py1,py2; // brukes til kontroll av områder i bilde
  private int pictHeight = 104, pictWidth = 104;
  private int pH,pU,pB; // kalulerte prosenter fra bildevisning.
//  private AudioClip  myAudio;

  /**
   * Initialize applet via init()
   */
  public void init()
  {
    this.setBackground(Color.white);
    addMouseListener(this);
    addMouseMotionListener(this);

    // Setter opp kontroller og layout
    //JCheckBox schFolk = new JCheckBox(" Folkerekken ", true);
    //schFolk.addActionListener(this);

    //JCheckBox schEksp = new JCheckBox(" Eksperttips ", false);
    //schEksp.addActionListener(this);


    Label tilfeldig = new Label("Tilfeldig rekke basert på :");
    // TextField fraText = new TextField("40000",8);
    // TextField tilText = new TextField("140000",8);

    Button goButton1 = new Button(" Eksperttips ");
    goButton1.addActionListener(this);

    Button goButton2 = new Button(" Folkerekken ");
    goButton2.addActionListener(this);

    Button goButton3 = new Button(" Gjennomsnitt ");
    goButton3.addActionListener(this);

    Button goButton4 = new Button(" Egendefinert ");
    goButton4.addActionListener(this);

    FlowLayout flow = new FlowLayout(4);
    Container pane = getContentPane();
    pane.setLayout(flow);
    //pane.add(schFolk);
    //pane.add(schEksp);
    // pane.add(fraText);
    // pane.add(tilKr);
    pane.add(tilfeldig);
    pane.add(goButton1);
    pane.add(goButton2);
    pane.add(goButton3);
    pane.add(goButton4);

    setContentPane(pane);

    // Henter parameter for dag fra web siden den ble startet fra
    paramDag = getParameter("Dag");
    myImage = getImage(getCodeBase(), "./" + paramDag + ".gif");
    imageSetPro = getImage(getCodeBase(), "./SetPro.gif");

    // myButKjør = getImage(getCodeBase(), "./ButKjør.gif");
    // Henter så de neste 12 parameter for prosenter HUB-Folk og HUB-Ekspert
    for (int i=0; i < 12; i++)
    {
      // String paramGet = "Pm" + i;
      paramLag[i] = getParameter("PmLag" + i);
      aktivKup.nr[i].setLag(paramLag[i]);
      paramPro[i] = getParameter("PmPro" + i);

      int index = 0; // index for ord som behandles
      // Parameter kommer som en lang streng, og splittes så opp her.
      for (int pos =0;pos < paramPro[i].length(); pos ++)
      {
        char c = paramPro[i].charAt(pos);
        if (c != ' ')
        {
          // .. ellers skal oppbygging av streng fortsette.
          int holder = new Integer(""+c).intValue();
          paramGrid[i][index] = 10 * paramGrid[i][index] + holder;
        }
        else
        {
          // Når mellomrom nåes skifter index til neste ord.
          // paramGrid[i][index] = new Integer(holder).intValue();
          index ++;
          // paramGrid[i][index] = 0;
        }
      }
      // Griden som bygges opp med parameter, overføres også til klasse for
      // Kamper gjennom objektet Kupong.

      aktivKup.nr[i].iProHFolk = paramGrid[i][0];
      aktivKup.nr[i].iProUFolk = paramGrid[i][1];
      aktivKup.nr[i].iProBFolk = paramGrid[i][2];
      aktivKup.nr[i].iProHEkspert = paramGrid[i][3];
      aktivKup.nr[i].iProUEkspert = paramGrid[i][4];
      aktivKup.nr[i].iProBEkspert = paramGrid[i][5];
      // set default til folkerekken
      aktivKup.BrukFolkerekken();
    }


  } // end init


  /**
   * Tegner opp bile, lag og prosenter
   */
public void paint(Graphics g) {
Color c[] = new Color[3];
c[0] = new Color(247,255,99);
c[1] = new Color(120,80,0);
c[2] = new Color(20,10,200);

//Graphics2D scr = (Graphics2D) g;


g.setColor(Color.white);
g.fillRect(0,0,getSize().width, 50);

g.drawImage(myImage, 0, iStartPaintY, this);


// scr.drawImage(myButKjør, 10, 200, this);

g.setColor(c[0]);
g.drawString(" H = " +pH +" U = " +pU+" B = "+pB,10,60);

// Område når og hvor det skal legges ut prosent bilde

// g.setColor(c[1]);
// g.fillRect(15,122 + 18 * index ,185,12);
//g.fillRect(15, (iStartPaintY +82 )+ 18 * (ypos -( iStartPaintY +82))/18,100,18);

// Tegn bilde for prosent, om det skal vises.
if (pictProWisble == true) {
g.fillRect(15,122 + 18 * index ,185,12);
g.drawImage(imageSetPro, 250, pictposy, this);
}

//
g.setColor(c[0]);
g.drawString("Rekke basert på " + evtComand,410,90);


// g.setColor(Color.blue);
for (int i=0; i < 12; i++)   // Antall Kamper
{
// Lag A vs Lag B
String tipsHer;
g.setColor(Color.red);
g.drawString(aktivKup.nr[i].sLag, 20 , iStartPaintY+82 + 18 *i);


tipsHer = aktivKup.nr[i].sTilfeldig;   // henter inn verdien for rekke.

int pos = 0;
if (tipsHer=="H"){pos = 35;}
if (tipsHer=="U"){pos = 70;}
if (tipsHer=="B"){pos = 105;}
if (pos>1){
  g.drawString("X", 370+pos , iStartPaintY+82 + 18 *i);
}
//}


// Skriv prosenter for brukt rekke

   g.drawString("" + aktivKup.nr[i].iProH , 400+35*3 , iStartPaintY+82 + 18 *i);
   g.drawString("" + aktivKup.nr[i].iProU , 400+35*4 , iStartPaintY+82 + 18 *i);
   g.drawString("" + aktivKup.nr[i].iProB , 400+35*5 , iStartPaintY+82 + 18 *i);
} // end for i


}



// Hendelser leses og behandles her.
public void actionPerformed(ActionEvent evt){
//if (aktivKup.BrukerFolkerekke = true){
evtComand = evt.getActionCommand();

if (evtComand == " Eksperttips "){
  aktivKup.BrukEkspertrekke();
//  aktivKup.setTilfeldigRekke();
}

if (evtComand == " Folkerekken "){
 aktivKup.BrukFolkerekken();
// aktivKup.setTilfeldigRekke();
}

if (evtComand == " Gjennomsnitt "){
  for (int i=0; i < 12; i++){
    aktivKup.nr[i].BrukBegge();
  }
}

if (evtComand == " Egendefinert "){
   //aktivKup.BrukFolkerekken();
      aktivKup.BrukEgendefinert();
//     aktivKup.setTilfeldigRekke();
}

  //aktivKup.nr
  aktivKup.setTilfeldigRekke();



update = true;
repaint();
//
}

public void mouseDragged(MouseEvent e) {
    }

    public void mouseReleased(MouseEvent e) {
    }

    public void mouseEntered(MouseEvent e) {
        repaint();
    }

    public void mouseExited(MouseEvent e) {
        repaint(xlast-20,ylast-20,100,40);
    }

    public void mouseClicked(MouseEvent e) {
    }
public void mouseMoved(MouseEvent e) {
//int px1= 11, px2=398, py1= 116, py2=332; //, pictposy = 0,lastpictposy = 0, pictHeight
//if (xpos>px1 & xpos<px2 & ypos>py1 & ypos<py2){
  e.consume();
    xpos = e.getX(); ypos = e.getY();
    // Repaint av område ved musepeker.
    // valg av kamp

      //update = false;
      //repaint(xlast-20,ylast-20,100,40);
      // xlast = xpos; ylast = ypos;
    // pictProWisble=false;

      // peker området hvor prosent bilde skal tegnes opp på nytt.
      px1= 11; px2=200; py1= 116; py2=333;
      if (xpos>px1 & xpos<px2 & ypos>py1 & ypos<py2){
      pictposy = ypos - (int)(pictHeight * (double)(ypos-py1)/(double)(py2-py1));
      repaint(250,lastpictposy,pictWidth,pictHeight);
      lastpictposy = pictposy;
      repaint(250,lastpictposy,pictWidth,pictHeight);
      pictProWisble = true;
      // valg av kamp

        // Når en kamp ikke er valgt, skal dette indikere på nytt
        repaint(15,  (122 + 18 * ((ylast-122) / 18)),185,12);
        repaint(15,  (122 + 18 * ((ypos-122) / 18)),185,12);
        ylast = ypos;
        // index for valgt kamp settes
        index = ((ypos-122) / 18);

      }
      // peker i bilde for prosent input.
      px1= 250; px2=352; py1= pictposy; py2=pictposy+pictHeight;
      if (xpos>px1 & xpos<px2 & ypos>py1 & ypos<py2){
      kalkulerProsenter();
        //pictposy = ypos - (int)(pictHeight * (double)(ypos-py1)/(double)(py2-py1));
      repaint(10,40,250,40);
      //lastpictposy = pictposy;
      //pictProWisble = true;
      }
      // peker området til høyre av prosent bilde for input.
      px1= 353; px2=600; py1= 116; py2=334;
      if (xpos>px1 & xpos<px2 & ypos>py1 & ypos<py2){
      //pictposy = ypos - (int)(pictHeight * (double)(ypos-py1)/(double)(py2-py1));
      pictProWisble = false;
      repaint(250,lastpictposy,pictWidth,pictHeight);
      //lastpictposy = pictposy;
      }

// repaint(250,lastpictposy,pictWidth,pictHeight);
}
public void mousePressed(MouseEvent e) {

  xpos = e.getX();
  ypos = e.getY();
  update = true;
  kalkulerProsenter();
  aktivKup.nr[index].setEgendefinertProsenter(pH,pU,pB);
  repaint();
  pictProWisble = false;
 //   e.consume();
    //requestFocus();
}

public void kalkulerProsenter(){
  pU  = avstand(250 + (pictWidth/2),pictposy+2,xpos,ypos);
  pU = 75 - pU;
  if (pU<0){pU=0;}

  pH = avstand(250 + 5,pictposy+75,xpos,ypos);
  pH = 75 - pH;
  if (pH<0){pH=0;}

  pB = avstand(250 + pictWidth - 5,pictposy+75,xpos,ypos);
  pB = 75 - pB;
  if (pB<0){pB=0;}
  // omgjør verdier slik at de tilsvarer 100%
  int total = pH+pU+pB;
  pH = 100 * pH/total;
  pB = 100 * pB/total;
  pU = 100 - pH - pB;
}
public int avstand(int pktAX, int pktAY, int pktBX, int pktBY){
  //int c = (int) Math.pow(5,2);
  int c = (int)Math.sqrt(Math.pow((double)pktAX-pktBX,2)+ Math.pow((double)pktAY-pktBY,2));
  return c;
}
//*********************
} // end class