import java.applet.Applet;
import java.awt.Graphics;
import java.awt.Label;
import java.awt.PopupMenu;
import java.awt.MenuItem;
import java.awt.Menu;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.Color;
import java.awt.Image;
import java.net.URL;
import java.net.MalformedURLException;

public class MenuApplet extends Applet {

    public static String ROOT = "http://www-2.cs.cmu.edu/afs/.cs.cmu.edu/Web/People/fgandon/";
    
    PopupMenu myPopUp=null;
    Image myImage=null;
    
    public void init()
      {
        this.setBackground(Color.white);
        this.setForeground(Color.black);
        

        Menu aSubMenu=null;
        
        // Make a popup menu.
        myPopUp = new PopupMenu("Home Page Menu:");
        this.add(myPopUp);
        
        myPopUp.add(NewItem("Hello",ROOT));
        myPopUp.addSeparator();
        
        myPopUp.add(NewItem("About Me",ROOT+"cv/"));
        
        myPopUp.add(NewItem("Research",ROOT+"research/"));
        
        myPopUp.add(NewItem("Lecture",ROOT+"lecture/"));
        
        aSubMenu=new Menu("Miscellaneous");
        aSubMenu.addActionListener(new PopupListener(this));
        myPopUp.add(aSubMenu);
        aSubMenu.add(NewItem("Muphy's Laws",ROOT+"miscellaneous/murphy/"));
        aSubMenu.add(NewItem("Riddles",ROOT+"miscellaneous/riddle/"));
        aSubMenu.add(NewItem("Japanese sayings",ROOT+"miscellaneous/japan/"));
        aSubMenu.add(NewItem("Smileys",ROOT+"miscellaneous/smiley/"));
        aSubMenu.add(NewItem("Cartoons",ROOT+"miscellaneous/cartoons/"));
        aSubMenu.add(NewItem("Utilities",ROOT+"miscellaneous/utilities/"));
                
        aSubMenu=new Menu("Bookmarks");
        aSubMenu.addActionListener(new PopupListener(this));
        myPopUp.add(aSubMenu);
        aSubMenu.add(NewItem("Professional",ROOT+"bookmarks/professional.html"));
        aSubMenu.add(NewItem("Personal",ROOT+"bookmarks/personal.html"));        

        myPopUp.addSeparator();
        
        myPopUp.add(NewItem("Restricted Area",ROOT+"restricted/"));  
        
        myPopUp.addSeparator();
        
        myPopUp.add(NewItem("Mail me","mailto:Fabien.Gandon@sophia.inria.fr"));  
        
        myPopUp.addSeparator();
        
        myPopUp.add(NewItem("Goodbye","http://www.yahoo.com/"));  
        
        // Add Listeners
        this.addMouseListener(new AppletListener(this));
        myPopUp.addActionListener(new PopupListener(this));
        
      }
    
    private void showPopup() {myPopUp.show(this, 0,0);}

    private MenuItem NewItem(String theLabel, String theURL)
      {
        MenuItem anItem = new MenuItem(theLabel);
        anItem.setActionCommand(theURL);
        return (anItem);
      }

    private void goToURL(String theURL)
      {
        try { getAppletContext().showDocument( new URL(theURL) );  }
        catch(MalformedURLException ex) { System.err.println(ex); }
      }

    class AppletListener extends MouseAdapter
      {  
        MenuApplet myApplet;
        AppletListener(MenuApplet anApplet) {myApplet = anApplet; }
        public void mousePressed(MouseEvent e) { myApplet.showPopup(); }
      }
      
    class PopupListener implements ActionListener
      {  
        MenuApplet myApplet;
        PopupListener(MenuApplet anApplet) { myApplet = anApplet; }
        public void actionPerformed(ActionEvent e) { myApplet.goToURL(e.getActionCommand()); }
      }

    public void start() { }
    public void stop() {}
    public void destroy() {}
    public void paint(Graphics g)
      {

        if (myImage!=null)
          {
            g.drawImage(myImage,0,0,this);    
          }
        else
          {
            try
              {
                myImage = getImage(new URL(ROOT+"resources/menu.gif"));
                if (myImage!=null)
                  {
                    g.drawImage(myImage,0,0,this);    
                  }
              }
            catch(MalformedURLException ex) { myImage=null; System.err.println(ex); }
          }
      }
}