import java.awt.*;
import java.applet.*;
import java.net.*;
import java.util.*;

public class TextButton extends Applet
{
 String kohde, text = new String(), mail = new String();
 String fontname, about;
 int fontstyle, fontsize;
 int rows, cols, hspace, vspace, index;
 Color textcolor1, textcolor2, textbgcolor, bgcolor, bordercolor;
 Can c;

 public void init()
 {
  about = getParameter("author Rain Ausmaa|rainex@sgic.fi"); //pieni suojaus
  if (about != null)  
  rows = Integer.parseInt(getParameter("rows"));//rivi
  cols = Integer.parseInt(getParameter("cols"));//sarake
  hspace = Integer.parseInt(getParameter("hspace"));
  vspace = Integer.parseInt(getParameter("vspace"));

  fontsize = Integer.parseInt(getParameter("fontsize"));
  fontstyle = Integer.parseInt(getParameter("fontstyle"));
  fontname = getParameter("fontname");

  int[] ints;
  ints = parseInt(getParameter("button_textcolor_1"), ",");
  textcolor1 = new Color(ints[0], ints[1], ints[2]);

  ints = parseInt(getParameter("button_textcolor_2"), ",");
  textcolor2 = new Color(ints[0], ints[1], ints[2]);

  ints = parseInt(getParameter("text_bgcolor"), ",");
  textbgcolor = new Color(ints[0], ints[1], ints[2]);

  ints = parseInt(getParameter("bgcolor"), ",");
  bgcolor = new Color(ints[0], ints[1], ints[2]);

  ints = parseInt(getParameter("button_bordercolor"), ",");
  bordercolor = new Color(ints[0], ints[1], ints[2]);
  
  setBackground(bgcolor);

  setLayout(new GridLayout(rows, cols, hspace, vspace));
 
  for(index = 0; index < (rows * cols); index++)
  {

  text = getParameter("text" + index);// button_text
  mail = getParameter("url" + index); // button_url
  kohde = getParameter("kohde");
  

  c = new Can(text, fontname, fontstyle, fontsize, textcolor1, textcolor2,
              textbgcolor, bordercolor, mail, getAppletContext(), kohde);
  add (c, index);
  }
   
 }

int[] parseInt(String s, String sep) 
    {
	StringTokenizer st = new StringTokenizer(s, sep);
        int[] result = new int[st.countTokens()];

	for (int i=0; i<result.length; i++) {
            result[i] = Integer.parseInt(st.nextToken());
	}
        return result;
    }


}

class Can extends Canvas
{
 String text, fontname, mail, kohde;
 int fontstyle, fontsize;
 Color textcolor1, textcolor2, textbgcolor, bordercolor;
 int X, Y, index;
 AppletContext ac;
 
 public Can(String text1, String fontname1, int fontstyle1, int fontsize1,
            Color textcolor01, Color textcolor02, Color textbgcolor1, 
            Color bordercolor1,
    	    String mail1, AppletContext browser, String kohde1)
 {
  text = text1;
  fontname = fontname1;
  fontstyle = fontstyle1;
  fontsize = fontsize1;
  textcolor1 = textcolor01;
  textcolor2 = textcolor02;
  textbgcolor = textbgcolor1;
  bordercolor = bordercolor1;
  mail = mail1;
  ac = browser;
  kohde = kohde1;
      
 }
 public void paint(Graphics g)
 {
  X = (size().width - getFontMetrics(new Font(fontname, fontstyle,
      fontsize)).stringWidth(text))/2;
       // X ja Y keskitävät textiä
  Y = (int)(size().height/1.4);

  g.setFont(new Font(fontname, fontstyle, fontsize));
 
  g.setColor(bordercolor);//bordercolor
  
  g.fill3DRect(0, 0, size().width, size().height, true); //border
  g.fill3DRect(3, 3, size().width-6, size().height-6, false);
 
  g.setColor(textbgcolor);//textbgcolor
  g.drawString(text, X+2, Y+2);
  g.setColor(textcolor1);//textcolor1
  g.drawString(text, X, Y);
  
  
 }

 public boolean mouseMove (Event evt, int x, int y)
  {  
     Graphics g = getGraphics();
     g.setFont(new Font(fontname, fontstyle, fontsize));
     g.setColor(textcolor2);
     g.drawString(text, X, Y);
     return true;
   }  
 public boolean mouseExit (Event evt, int x, int y)
  { 
   Graphics g = getGraphics();
   g.setFont(new Font(fontname, fontstyle, fontsize));
   g.setColor(textbgcolor);//textbgcolor
  g.drawString(text, X+2, Y+2);
  g.setColor(textcolor1);//textcolor1
  g.drawString(text, X, Y);
   
   return true;  
  }

public boolean mouseDown (Event evt, int x, int y)
  {
      try {
	URL url = new URL(mail);
	ac.showDocument(url, kohde);
	  }
	catch (MalformedURLException e) {}
  return true;
 }
}






