import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.net.URL;
public class Kamishibai extends JApplet {
    public void init(){
	Container contentPane = getContentPane();
	String number = getParameter("number");
	if(number==null) return;
	int n = Integer.parseInt(number);
	String[] filename = new String[n];
	String[] option = new String[n];
	Image image;
	MediaTracker tracker = new MediaTracker(this);
	URL documentBase = getDocumentBase();
	ImagePanel panel = new ImagePanel(n);
	for(int i=0; i<n; i++){
	    filename[i]=getParameter("image_"+(i+1));
	    option[i]=getParameter("option_"+(i+1));
	    image = getImage(documentBase,filename[i]);
	    panel.addImage(i,image);
	    tracker.addImage(image,i);
	}
	try{
	    tracker.waitForAll();
	}catch(InterruptedException e){}
	JPanel buttonPanel = new JPanel();
	JButton backButton = new JButton("Back");
	JButton forwardButton = new JButton("Forward");

	buttonPanel.add(backButton);
	buttonPanel.add(forwardButton);
	contentPane.add(buttonPanel,BorderLayout.SOUTH);
	contentPane.add(panel);
	backButton.addActionListener(panel.new ButtonAction(new BackwordButton()));
	forwardButton.addActionListener(panel.new ButtonAction(new ForwardButton(n)));

    }
}
interface ButtonFunction {
    int action(int now);
}
class ForwardButton implements ButtonFunction {
    int max;
    public ForwardButton(int n){
	max=n-1;
    }
    public int action(int now){
	return now<max?now+1:max;
    }
}
class BackwordButton implements ButtonFunction {
    public int action(int now){
	return now>0?now-1:0;
    }
}

class ImagePanel extends JPanel{
    private Image[] images;
    private int counter;
    public ImagePanel(int n){
	images = new Image[n];
	counter=0;
    }
    public void addImage(int n,Image image){
	images[n]=image;
    }
    public int getCounter(){
	return counter;
    }
    public void setCounter(int n){
	counter=n;
	repaint();
    }
    public void paintComponent(Graphics g){
	super.paintComponent(g);
	g.drawImage(images[counter],0,0,null);
    }
    public class ButtonAction implements ActionListener {
	private ImagePanel imagePanel;
	private ButtonFunction buttonFunction;
	public ButtonAction(ButtonFunction bf){
	    buttonFunction=bf;
	}
	public void actionPerformed(ActionEvent event){
	    setCounter(buttonFunction.action(getCounter()));
	}
    }
}
	

