import java.applet.*;
import java.awt.*;
import java.util.*;
import java.net.*;
import java.awt.event.*;

public class ImageMap extends Applet implements MouseMotionListener, MouseListener 
{
 Image image[] = new Image[1];
 MediaTracker tracker;
 ColorRectangle cr[];
 Rectangle r;
 Color c, c2;
 int n = 1;
 int num[];
 String urltext;
 
 public void init()
 { 

   for (int i = 0; ;i++) 					
   if (getParameter("rect"+(i+1)) == null)
   {
      num = new int[i];
      break;
   }

   addMouseListener(this); addMouseMotionListener(this);
   tracker = new MediaTracker(this); 
   image[0] = getImage(getDocumentBase(), getParameter("image"));
   tracker.addImage(image[0], 0);

   StringTokenizer st2 = new StringTokenizer(getParameter("colorrect2"), ",");

    c2 = new Color(Integer.parseInt(st2.nextToken()), 
                   Integer.parseInt(st2.nextToken()), 
                   Integer.parseInt(st2.nextToken()));

   cr = new ColorRectangle[num.length];
   while (n <= cr.length)
   {
    StringTokenizer st = new StringTokenizer(getParameter("rect" + n), ",|");
 
     r = new Rectangle(Integer.parseInt(st.nextToken()), 
                       Integer.parseInt(st.nextToken()), 
                       Integer.parseInt(st.nextToken()), 
                       Integer.parseInt(st.nextToken()));

     c = new Color(Integer.parseInt(st.nextToken()), 
                   Integer.parseInt(st.nextToken()), 
                   Integer.parseInt(st.nextToken()));

    urltext = new String(st.nextToken());

    cr[n-1] = new ColorRectangle(this, r, c, c2, urltext);
    n++;
   }

   try {tracker.waitForID(0); } catch (InterruptedException e) {}  

 }      
    
    
    public void paint(Graphics g) 
    {
      g.drawImage(image[0], 0, 0, this);
    }

    public void update(Graphics g) 
    {
        paint(g);
    }

  public void mouseExited(MouseEvent mee)
 {
  Graphics g = getGraphics();
  int x = mee.getX(), y = mee.getY();
  
  for(int i = 0; i < cr.length; i++) 	
  {
   if (cr[i].contains(x, y)) { repaint(); showStatus(""); }
   
  }
 }

 public void mouseReleased(MouseEvent mee){} 
 public void mouseClicked(MouseEvent mee) {}
 public void mouseMoved(MouseEvent mee)
 {
  Graphics g = getGraphics();
  int x = mee.getX(), y = mee.getY();
  
  for(int i = 0; i < cr.length; i++) 	
  {
   if (cr[i].contains(x, y)) { cr[i].drawRectangle(g, true); cr[i].readStatus();}
   
   else { cr[i].drawRectangle(g, false);  }
  }
 
 } 
 public void mouseDragged(MouseEvent mee) {}
 public void mouseEntered(MouseEvent mee) {}  

 public void mousePressed(MouseEvent mee) 
 {
  Graphics g = getGraphics();
  int x = mee.getX(), y = mee.getY();
  
  for(int i = 0; i < cr.length; i++) 	
  {
   if (cr[i].contains(x, y)) { cr[i].setURL(); }
  }
 }
}

class ColorRectangle extends Canvas
{
 Rectangle r;
 Color c, c2;
 ImageMap im;
 String urltext;

 public ColorRectangle(ImageMap im, Rectangle r, Color c, Color c2, String urltext)
 {
  this.r = r;
  this.c = c; this.c2 = c2;
  this.im = im; 
  this.urltext = urltext;
 }

 public boolean contains (int x, int y)
 {
  if (x >= r.x && x < (r.x+r.width) && y >= r.y && y < (r.y+r.height)) return true;
  
  else return false;
 }

 public void drawRectangle(Graphics g, boolean b)
 { 
  if(b)
  {
  g.setColor(c);
  g.drawRect(r.x, r.y, r.width, r.height);
  }
   else { 
         g.setColor(c2);
         g.drawRect(r.x, r.y, r.width, r.height);
        } 
 }

 public void setURL()
 {
  try {
	URL url = new URL(im.getDocumentBase(), urltext);
	im.getAppletContext().showDocument(url);
       }
	catch (MalformedURLException e) {}
 }

 public void readStatus()
 { 
  im.getAppletContext().showStatus(urltext);
  
 }

 
} 
