import java.applet.Applet;
import java.awt.*;
import java.awt.image.*;
import java.util.*;
import java.net.URL;

public class thumb extends Applet implements Runnable {

Thread runner;
Image offimage;
Graphics off;
Image knap, tommel, tommel2, knap2;
String text [];
MediaTracker mt = new MediaTracker (this);
int numberofbuttoms=0;
int dx=4;
int y;
int x=-120;
Font font ;
int timer=0;
int nedtrykt=-1;
int aktuelle=-1;
URL links [];
int f1,f2,f3,f4,f5,f6,f7,f8,f9;
String target="_self";
boolean knaptrykket=false;
boolean førstegang = true;
int Width, Height;
String wait;

public void update (Graphics g)

	{
	paint(g);
	}

public void init () {

	String tfarve=getParameter("text_antialising_color");
	f1= Integer.parseInt(tfarve.substring(0,3));	
	f2= Integer.parseInt(tfarve.substring(4,7));
	f3= Integer.parseInt(tfarve.substring(8,11));

	tfarve=getParameter("text_color");
	f4= Integer.parseInt(tfarve.substring(0,3));	
	f5= Integer.parseInt(tfarve.substring(4,7));
	f6= Integer.parseInt(tfarve.substring(8,11));

	tfarve=getParameter("background_color");
	f7= Integer.parseInt(tfarve.substring(0,3));	
	f8= Integer.parseInt(tfarve.substring(4,7));
	f9= Integer.parseInt(tfarve.substring(8,11));

	tfarve=getParameter("fontface");
	font = new Font(tfarve,Font.PLAIN,Integer.parseInt(getParameter("fontsize")));
	if (getParameter("target")!=null) target=getParameter("target");

	wait=getParameter("loading_message");

	knap2 = getImage (getCodeBase(), "knap2.gif");
	mt.addImage(knap2,0);
	knap = getImage (getCodeBase(), "knap1.gif");
	mt.addImage(knap,1);
	tommel = getImage (getCodeBase(), "tommel.gif");
	mt.addImage(tommel,2);
	tommel2 = getImage (getCodeBase(), "tommel2.gif");
	mt.addImage(tommel2,3);

	
	for (int i=1 ; getParameter ("text"+i) != null ; i++)
		numberofbuttoms++;
	text = new String [numberofbuttoms];
	links = new URL [numberofbuttoms];


	for (int i=0; i<numberofbuttoms; i++)
	     	{
		try {
	        links[i] = new URL (getCodeBase(), getParameter ("link"+(i+1)));
			} catch (Exception e) {}				
		text[i] = getParameter ("text"+(i+1));
	     	}
	
	Width = size().width;	
	Height = size().height;

	offimage = createImage(size().width,size().height);
	off = offimage.getGraphics();
	off.setFont(font);
	off.setColor(new Color(f7,f8,f9));
	off.fillRect(0,0,Width,Height);

	

	
	}

public void paint (Graphics g)

	{
	
	g.drawImage(offimage,0,0,this);	
	}

 public void start() {
    if (runner == null); {
      runner = new Thread(this);
      runner.start();
    }
  }

  public void stop() {
    if (runner != null) {
      runner.stop();
      runner = null;
    }
  }

  public void run() {

	while (true)
	{

	if (førstegang && !mt.checkAll(true))
		{
		udskriv(wait,20,20);
		}


	if (førstegang && mt.checkAll(true)) 
		{
		off.setColor(new Color(f7,f8,f9));
		off.fillRect(0,0,Width,Height);

		for (int i=0; i<numberofbuttoms; i++)
			{
			udskriv (text[i],70,50+i*50); 
			off.drawImage (knap, 20,20+i*50,this);
			}
		førstegang=false;	
		} 

	if (!førstegang && mt.checkAll(true))
	{
	if (aktuelle!=-1)
		{
		off.setColor(new Color(f7,f8,f9));
		off.fillRect(0,19+aktuelle*50,Width,80);
		off.drawImage (knap, 20,20+aktuelle*50,this);

		if (!(aktuelle+1==numberofbuttoms)) 
			off.drawImage (knap, 20,20+(aktuelle+1)*50,this);

		if (aktuelle!=-1) {udskriv (text[aktuelle],70,50+aktuelle*50); 
			if (!(aktuelle+1==numberofbuttoms)) 	
				 udskriv (text[aktuelle+1],70,50+(aktuelle+1)*50); }
		//udskriv (aktuelle+"",70,100);
		}

	if (aktuelle!=-1) timer++;

	if (nedtrykt!=-1 && timer>0) off.drawImage (knap2, 20,20+nedtrykt*50,this);

	if (aktuelle!=-1) {
				if (timer<26 || timer >32)
					off.drawImage (tommel, x,y,this);
					else off.drawImage (tommel2, x,y,this);
				x+=dx;  }
	
	

	if (timer==30) getAppletContext().showDocument(links[aktuelle],target);	

	if (timer==32) dx=-4;
	if (timer==55) {aktuelle=-1; dx=4; timer=0; x=-120; }

	
	if (timer==25) {dx=0; 
			if (nedtrykt!=-1 && nedtrykt != aktuelle) 
				off.drawImage (knap, 20,20+nedtrykt*50,this); 
			nedtrykt=aktuelle;}

	
	}

			
	repaint();
	try {Thread.sleep(10);}
	catch (InterruptedException e) {showStatus("Error " + e);}
    	}

	}

	public boolean mouseDown(Event evt, int x2, int y2)
	{
	int i=0; if (timer!=0) return true;
	for (i=0; i<numberofbuttoms; i++)
	if (x2>18 && x2<61 && y2> 18+i*50 && y2<61+i*50) 
		{ y=20+i*50; aktuelle=i;}
	return true;
  	}





	void udskriv (String text, int x, int y)
	{
	off.setColor(new Color(f1,f2,f3));
	off.drawString (text, x+1,y);
	off.drawString (text, x-1,y);
	off.drawString (text, x,y+1);
	off.drawString (text, x,y-1);
	off.setColor(new Color(f4,f5,f6));
	off.drawString (text, x,y);
	}

}
