import java.awt.*;
import java.applet.Applet;

public class blink4 extends Applet implements Runnable {
	boolean paused = false;
	boolean loading = true;
	Thread anim = null;
	int frame = 0;
	Image loading_img;
	Image[] frame_img = new Image[10];
	int[] delay = {135,105,75,60,60,60,60,75,105,135,105,75,60,60,60,60,75,105};
	Image buffer;
	Graphics g_buffer;
	MediaTracker tracker;

	public void init() {
		int i;

		buffer = createImage(284, 130);
		g_buffer = buffer.getGraphics();
		g_buffer.setColor(new Color(120, 120, 220));
		tracker = new MediaTracker(this);
		loading_img = getImage(getCodeBase(), "blink4_load.gif");
		tracker.addImage(loading_img, 0);
		frame_img[0] = getImage(getCodeBase(), "blink4_01.jpg");
		frame_img[1] = getImage(getCodeBase(), "blink4_02.jpg");
		frame_img[2] = getImage(getCodeBase(), "blink4_03.jpg");
		frame_img[3] = getImage(getCodeBase(), "blink4_04.jpg");
		frame_img[4] = getImage(getCodeBase(), "blink4_05.jpg");
		frame_img[5] = getImage(getCodeBase(), "blink4_06.jpg");
		frame_img[6] = getImage(getCodeBase(), "blink4_07.jpg");
		frame_img[7] = getImage(getCodeBase(), "blink4_08.jpg");
		frame_img[8] = getImage(getCodeBase(), "blink4_09.jpg");
		frame_img[9] = getImage(getCodeBase(), "blink4_10.jpg");
		tracker.addImage(frame_img[0], 10);
		tracker.addImage(frame_img[1], 11);
		tracker.addImage(frame_img[2], 12);
		tracker.addImage(frame_img[3], 13);
		tracker.addImage(frame_img[4], 14);
		tracker.addImage(frame_img[5], 15);
		tracker.addImage(frame_img[6], 16);
		tracker.addImage(frame_img[7], 17);
		tracker.addImage(frame_img[8], 18);
		tracker.addImage(frame_img[9], 19);
	}

	public void start() {
		if (!paused) {
			if (anim == null) {
				anim = new Thread(this);
			}
			anim.start();
		}
	}

	public void stop() {
		if (anim != null && anim.isAlive()) {
			anim.stop();
		}
		anim = null;
	}

	public boolean mouseDown(Event e, int x, int y) {
		if (paused) {
			paused = false;
			start();
		} else {
			if (!loading) {
				paused = true;
				stop();
			}
		}
		return true;
	}

	public void run() {
		long time = System.currentTimeMillis();
		Thread anim_thread = Thread.currentThread();
		long sleep;

		anim_thread.setPriority(Thread.MIN_PRIORITY);

		while (Thread.currentThread() == anim) {
			if (!loading) frame = (frame + 1) % 18;
			repaint();
			try {
				if (loading) {
					time += 150;
				} else {
					time += delay[(frame < 10) ? frame : 18 - frame];
				}
				sleep = time - System.currentTimeMillis();
				if (sleep > 0) {
					Thread.sleep(sleep);
				}
			} catch (InterruptedException e) {
				break;
			}
		}
	}

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


	public void paint(Graphics g) {
		int i, num=0;

		if (loading) {
			if (tracker.checkID(0, true)) {
				g_buffer.drawImage(loading_img, 0, 0, this);
				for (i=0; i<10; i++) {
					if (tracker.checkID(i + 10, true)) {
						num++;
					} else {
						break;
					}
				}
				if (num >= 10) loading = false;
				g_buffer.fillRect(32, 71, num * 22, 30);
				g.drawImage(buffer, 0, 0, this);
			}
			return;
		}

		g.drawImage(frame_img[(frame < 10) ? frame : 18 - frame], 0, 0, this);
	}
}


