import java.applet.Applet;
import java.awt.Graphics;
import java.awt.Color;
import java.awt.Image;
import java.util.Date;
import KlockTimer;
import KlockRitare;

public class Klocka extends Applet
{
 KlockTimer  timer;
 KlockRitare ritare;
 Image[]     bilder;
 Image       komma;
 Color       bgColor       = Color.black;
 String      bildMapp      = "Bilder/";
 String      errors        = "";
 int         bildBredd     = 0;
 int         kommaBredd    = 4;
 boolean     bilderLaddade = false;

 public void start()
 {
  String param;
  param = getParameter("BgColor");
  if(param != null)
  {
   try
   {
    bgColor = new Color(Integer.parseInt(param.substring(1, 7), 16));
   }
   catch(Exception e)
   {
    bgColor = new Color(0xAA0000);
    errors += "Parse Error: " + param + " ; ";
   }
  }
  param = getParameter("Pictures");
  if(param != null)
  {
   if(param.charAt(param.length()-1) != '/')
   {param += "/";}
   bildMapp = param;
  }
  setBackground(bgColor);
  if(timer == null && ritare == null)
  {
   ritare = new KlockRitare(this);
   timer  = new KlockTimer(ritare);
   timer.setPriority(Thread.MAX_PRIORITY);
   timer.start();
   ritare.start();
  }
 }

 public void update(Graphics g)
 {
  paint(g);
 }

 public synchronized void paint(Graphics g)
 {
  Image    bgImage;
  Graphics bg;
  Date     now = new Date();
  int      timmar   = now.getHours();
  int      minuter  = now.getMinutes();
  int      sekunder = now.getSeconds();

  if(!bilderLaddade)
  {
   bilder = new Image[10];
   g.setColor(Color.white);
   for(byte i = 0; i < 10; i++)
   {
    if(i == 0)
    {g.drawString("Bilderna laddas...", 5, 14);}
    else
    {g.drawString("Bilder kvar: " +(11 - i), 5, 14);}
    bilder[i] = getImage(getDocumentBase(), bildMapp+i+".gif");
    g.clearRect(5, 0, size().width, 17);
   }
   komma = getImage(getDocumentBase(), bildMapp+"Komma.gif");
   bilderLaddade = true;
   if(!errors.equals(""))
   {showStatus(errors);}
  }
  bildBredd  = bilder[0].getWidth(this);
  kommaBredd = komma.getWidth(this);

  if(bilderLaddade)
  {
   bgImage = createImage(size().width, size().height);
   bg      = bgImage.getGraphics();
   bg.drawImage(bilder[timmar/10], 4, 4, this);
   bg.drawImage(bilder[timmar%10], bildBredd+4, 4, this);
   bg.drawImage(komma, bildBredd*2+4, 4, this);
   bg.drawImage(bilder[minuter/10], bildBredd*2+4+kommaBredd, 4, this);
   bg.drawImage(bilder[minuter%10], bildBredd*3+4+kommaBredd, 4, this);
   bg.drawImage(komma, bildBredd*4+4+kommaBredd, 4, this);
   bg.drawImage(bilder[sekunder/10], bildBredd*4+4+kommaBredd*2, 4, this);
   bg.drawImage(bilder[sekunder%10], bildBredd*5+4+kommaBredd*2, 4, this);
   g.drawImage(bgImage, 0, 0, this);
  }
 }

 public void stop()
 {
  timer.interrupt();
  ritare.interrupt();
 }

 public void destroy()
 {
  timer.stop();
  ritare.stop();
  timer  = null;
  ritare = null;
 }

}