import java.awt.*;
import java.awt.image.*;
import java.applet.*;
import java.net.*;
import java.util.*;

public class FilterButton2 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;
 Color filtercolor1, filtercolor2;
 Image image, img, im1, im2;
 FB2 fb;
 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]);

  ints = parseInt(getParameter("filter_color_1"), ",");
  filtercolor1 = new Color(ints[0], ints[1], ints[2]);

  ints = parseInt(getParameter("filter_color_2"), ",");
  filtercolor2 = 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)));


  im1 = createImage(new FilteredImageSource(image.getSource(),
      new CFilter(filtercolor1)));

  im2 = createImage(new FilteredImageSource(image.getSource(),
      new CFilter(filtercolor2)));  
  
  text = getParameter("text" + index);// button_text
  mail = getParameter("url" + index); // button_url
  kohde = getParameter("target");
  
  tracker.addImage(im1, index);
  tracker.addImage(im2, index);
  
  fb = new FB2(text, fontname, fontstyle, fontsize, 
          textcolor1, textcolor2, textbgcolor, image, im1, im2, mail, 
          getAppletContext(), kohde);

  add (fb, index);
  try { tracker.waitForAll(); }
  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 FB2 extends Canvas
{
 Image image, im1, im2, im;
 String text, fontname, mail, kohde;
 int fontstyle, fontsize;
 Color textcolor1, textcolor2, textbgcolor;
 int X, Y, index;
 AppletContext ac;
 //Graphics gr;
 //Dimension d = new Dimension();
 //Image upd_image;
 
 
 public FB2(String text1, String fontname1, int fontstyle1, int fontsize1,
            Color textcolor01, Color textcolor02, Color textbgcolor1,
            Image image1, Image im01, Image im02, 
            String mail1, AppletContext browser, String kohde1)
 {
  text = text1;
  fontname = fontname1;
  fontstyle = fontstyle1;
  fontsize = fontsize1;
  textcolor1 = textcolor01;
  textcolor2 = textcolor02;
  textbgcolor = textbgcolor1;
  image = image1;
  im1 = im01;
  im2 = im02;
  mail = mail1;
  ac = browser;
  kohde = kohde1;
       
 }

 public void paint(Graphics g)
 {
  //d = size();
  //upd_image = createImage(size().width, size().height);
  //gr = upd_image.getGraphics();

  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(im1, 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 void update(Graphics g)
  { 
   paint(g);
   
  }

 public boolean mouseEnter (Event evt, int x, int y)
  {  
     Graphics g = getGraphics();
     g.drawImage(im2, 0, 0, this);
     
     g.setFont(new Font(fontname, fontstyle, fontsize));
     g.setColor(textcolor2);
     g.drawString(text, X, Y);
     
     return mouseMove(evt, x, y);
   }
//public boolean mouseEnter (Event evt, int x, int y)
// { return mouseMove(evt, x, y); }
  
 public boolean mouseExit (Event evt, int x, int y)
  { 
   Graphics g = getGraphics();
   g.drawImage(im1, 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);
   
   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;
 }
}

class CFilter extends RGBImageFilter {
	Color color;

     public CFilter(Color mask) {
		color = mask;
		canFilterIndexColorModel = true;
	}
	public int filterRGB(int x, int y, int pixel) {

return 255 << 24 |
       (((pixel & 0xff0000) >> 16) * color.getRed()/255) << 16 |
       (((pixel & 0xff00) >> 8) * color.getGreen()/255) << 8 |
       (pixel & 0xff) * color.getBlue()/255 ;
	}
}





