// Decompiled by DJ v3.0.0.63 Copyright 2002 Atanas Neshkov  Date: 13-09-2003 21:36:24
// Home Page : http://members.fortunecity.com/neshkov/dj.html  - Check often for new version!
// Decompiler options: fullnames 
// Source File Name:   NeXTClock.java

import java.applet.Applet;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.util.Date;

public class NeXTClock extends java.applet.Applet
    implements java.lang.Runnable
{

    public void init()
    {
        baseImg = getImage(getCodeBase(), "default.gif");
        timeFont = new Font("TimesRoman", 1, 16);
        dayFont = new Font("Helvetica", 0, 6);
        dateFont = new Font("TimesRoman", 1, 18);
        monthFont = new Font("Helvetica", 2, 8);
        darkGreen = new Color(0, 200, 0);
    }

    int doItalic(int i, int j)
    {
        if(italic == 1)
            return (int)((double)i - (double)j * 0.20000000000000001D);
        else
            return i;
    }

    void drawSegment(java.awt.Graphics g, int i, int j, int k)
    {
        int ai[] = {
            0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 
            1, 2, 1, 2, 0, 2, 0, 2, 0, 1, 
            0, 1, 0, 0, 0, 1, 1, 1
        };
        g.drawLine(doItalic(i + ai[k * 4] * size, ai[k * 4 + 1] * size), j + ai[k * 4 + 1] * size, doItalic(i + ai[k * 4 + 2] * size, ai[k * 4 + 3] * size), j + ai[k * 4 + 3] * size);
    }

    void drawDigit(java.awt.Graphics g, int i, int j, int k)
    {
        int ai[] = {
            63, 6, 91, 79, 102, 109, 125, 7, 127, 111
        };
        for(int l = 0; l < 7; l++)
            if((ai[i] & 1 << l) != 0)
                drawSegment(g, j, k, l);

    }

    void drawDigitString(java.awt.Graphics g, java.lang.String s, int i, int j)
    {
        for(int k = 0; k < s.length(); k++)
        {
            char c = s.charAt(k);
            if(c >= '0' && c <= '9')
                drawDigit(g, c - 48, i += (int)((double)size * 1.8D), j);
            else
                i += (int)((double)size * 0.80000000000000004D);
        }

    }

    void drawBlink(java.awt.Graphics g)
    {
        if(blink == 0)
        {
            g.setColor(darkGreen);
            blink = 1;
        } else
        {
            g.setColor(java.awt.Color.black);
            blink = 0;
        }
        g.drawLine(30, 9, 30, 10);
        g.drawLine(29, 12, 29, 13);
    }

    void drawTime(java.awt.Graphics g)
    {
        getFontMetrics(timeFont);
        java.lang.String s = "" + now.getHours() / 10 + now.getHours() % 10 + ":" + "" + now.getMinutes() / 10 + now.getMinutes() % 10;
        g.setFont(timeFont);
        g.setColor(darkGreen);
        drawDigitString(g, s, 4, 6);
    }

    void drawDate(java.awt.Graphics g)
    {
        g.setColor(java.awt.Color.black);
        java.awt.FontMetrics fontmetrics = getFontMetrics(dayFont);
        java.lang.String s = weekday[now.getDay()];
        g.setFont(dayFont);
        g.drawString(s, (size().width - fontmetrics.stringWidth(s)) / 2 - 2, 31);
        fontmetrics = getFontMetrics(dateFont);
        s = "" + now.getDate();
        g.setFont(dateFont);
        g.drawString(s, (size().width - fontmetrics.stringWidth(s)) / 2 - 2, 46);
        fontmetrics = getFontMetrics(monthFont);
        s = month[now.getMonth()];
        g.setFont(monthFont);
        g.drawString(s, (size().width - fontmetrics.stringWidth(s)) / 2 - 2, 54);
    }

    public void update(java.awt.Graphics g)
    {
        paint(g);
    }

    public void paint(java.awt.Graphics g)
    {
        g.drawImage(baseImg, 0, 0, this);
        drawDate(g);
        drawTime(g);
    }

    public void start()
    {
        if(clockThread == null)
        {
            clockThread = new Thread(this, "Clock");
            clockThread.start();
        }
    }

    public void run()
    {
        while(clockThread != null) 
        {
            now = new Date();
            if(last_min != now.getMinutes())
            {
                last_min = now.getMinutes();
                getGraphics().drawImage(baseImg, 0, 0, this);
                drawDate(getGraphics());
                drawTime(getGraphics());
            }
            drawBlink(getGraphics());
            getToolkit().sync();
            pause(1000);
        }
    }

    public void pause(int i)
    {
        try
        {
            java.lang.Thread.sleep(i);
            return;
        }
        catch(java.lang.InterruptedException _ex)
        {
            return;
        }
    }

    public void stop()
    {
        clockThread.stop();
        clockThread = null;
    }

    public NeXTClock()
    {
        size = 5;
        italic = 1;
        last_min = -1;
    }

    java.lang.Thread clockThread;
    java.awt.Font dateFont;
    java.awt.Font dayFont;
    java.awt.Font timeFont;
    java.awt.Font monthFont;
    java.awt.Image baseImg;
    int size;
    int italic;
    java.util.Date now;
    java.awt.Color darkGreen;
    int blink;
    int last_min;
    java.lang.String weekday[] = {
        "SØN", "MAN", "TIR", "ONS", "TOR", "FRE", "LØR"
    };
    java.lang.String month[] = {
        "JAN", "FEB", "MAR", "APR", "MAJ", "JUN", "JUL", "AUG", "SEP", "OKT", 
        "NOV", "DEC"
    };
}