import java.awt.*;
import java.awt.image.*;
import java.applet.*;
import java.net.*;
import java.util.*;

public class ImageTextButton extends Applet
{
 String kohde, text = new String(), mail = new String();
 String fontname, about;
 int fontstyle, fontsize;
 int rows, cols, w, h, hspace, vspace;
 int i, u, index;
 Color textcolor1, textcolor2, textbgcolor, bgcolor;
 Image image, img;
 IText itext;
 MediaTracker tracker;

 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"));

  w = Integer.parseInt(getParameter("w"));
  h = Integer.parseInt(getParameter("h"));

  img = getImage(getDocumentBase(), getParameter("image"));

  tracker = new MediaTracker(this);

  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]);

  setBackground(bgcolor);

  setLayout(new GridLayout(rows, cols, hspace, vspace));
 
   for(i= 0; i < rows; i++)   
    for(u= 0; u < cols; u++)
    {
  
  image = createImage(new FilteredImageSource(img.getSource(),
  new CropImageFilter((w*u), (h*i), size().width, size().height))); 
  
  text = getParameter("text" + index);// button_text
  mail = getParameter("url" + index); // button_url
  kohde = getParameter("kohde");
  
  tracker.addImage(image, index);
  
  itext = new IText(text, fontname, fontstyle, fontsize, 
          textcolor1, textcolor2, textbgcolor, image, mail, 
          getAppletContext(), kohde);

  add (itext, index);
  try { tracker.waitForID(index); }
  catch (InterruptedException e) {}
  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 IText extends Canvas
{
 Image image;
 String text, fontname, mail, kohde;
 int fontstyle, fontsize;
 Color textcolor1, textcolor2, textbgcolor;
 int X, Y, index;
 AppletContext ac;
 
 public IText(String text1, String fontname1, int fontstyle1, int fontsize1,
            Color textcolor01, Color textcolor02, Color textbgcolor1, 
            Image image1, String mail1, AppletContext browser, String kohde1)
 {
  text = text1;
  fontname = fontname1;
  fontstyle = fontstyle1;
  fontsize = fontsize1;
  textcolor1 = textcolor01;
  textcolor2 = textcolor02;
  textbgcolor = textbgcolor1;
  image = image1;
  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.6);

  g.drawImage(image, 0, 0, this);

  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);
  
   
 }

 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;
 }
}






