/*
    JB - HTML browser using the browser package

    Copyright (C) 1996  Alexey Goloshubin, Jeremy Cook

	@version 1.0	Released 20/12-1996

    Changes: Copyright (c)1997 by Matthias Nickles (Matthias_Nickles@msn.com)

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

    A copy of the  GNU General Public License is also available 
    on the world-wide-web at ftp://prep.ai.mit.edu/pub/gnu/GNUinfo/GPL

    The authors can be contacted:

     Jeremy Cook
	Jeremy.Cook@ii.uib.no	http://www.ii.uib.no/~jeremy

     Alexey Goloshubin
        s667@ii.uib.no		http://www.lstud.ii.uib.no/~s667 
*/

//package AOT;

import java.awt.*;


public class jb extends Frame
{

 final static String BACK = "   <<   ";
 final static String FORWARD = "   >>   ";
 final static String CLOSE = "Close";
 final static String RELOAD = "Reload";

 final static int SIZE_X = 600, SIZE_Y = 600;

	public jb(String start) {
    
      this(start, null);

    }

    public jb(String start, String content) {

		setTitle(AOT.APPLET_NAME+" HTML view"); 

	// Create a menu panel

		Panel p = new Panel();
		p.setLayout(new FlowLayout());

		Font f = new Font("Dialog",Font.PLAIN, 14);

		Button b ;
		
		b = new Button(BACK);
		b.setFont(f);
		p.add(b);
		
		b = new Button("  >>  ");
		b.setFont(f);
		p.add(b);

		b = new Button(RELOAD);
		b.setFont(f);
		p.add(b);

        p.add(new Label("URL: "));


		textURL = new TextField(start ,30);

		textURL.setFont(new Font("Courier",Font.PLAIN,12));

		p.add(textURL);


		/* ***alles andere als MENU_INLINE fuehrt leider zum Absturz...
        b = new Button("Menu");
		b.setFont(f);
		p.add(b);*/

		b = new Button(CLOSE);
		b.setFont(f);
		p.add(b); 

		add("North",p);
		
	    // Put browser into this frame
        browser = new BrowserInterface(this, SIZE_X/*-1*/, SIZE_Y/*-1*/, content, "Center", false, null);

		resize(SIZE_X, SIZE_Y); show(); // ***(!)

		if(start!=null) 
		 browser.URL_Process(start);
		
		browser.setMenuHeight(30);
		browser.setMenuMode(browser./*MENU_PANEL*/MENU_INLINE);

        try { Thread.currentThread().sleep(500); } catch(Exception e) {}

        browser.panel1.resize(browser.panel1.bounds().width+1, browser.panel1.bounds().height+1);  //(?)

		resize(SIZE_X+1, SIZE_Y+1); show();  // ***(!)

        validate();	

	}

	public boolean handleEvent(Event evt) {
		if (evt.id == Event.WINDOW_DESTROY) 
		 { hide(); dispose(); AOT.current_browser = null;  }


   if(evt.id==Event.KEY_ACTION) {  // nicht-ASCII Tasten:

	switch(evt.key) {

     case Event.PGDN:

 		browser.panel1.setScrolls(browser.panel1.getScrollX(),browser.panel1.getScrollY()+200);
  	    browser.panel1.canvas.translate(browser.panel1.getScrollX(),browser.panel1.getScrollY());
 
     return true;

     case Event.PGUP:

 		browser.panel1.setScrolls(browser.panel1.getScrollX(),browser.panel1.getScrollY()-200);
  	    browser.panel1.canvas.translate(browser.panel1.getScrollX(),browser.panel1.getScrollY());

	  return true;

     case Event.DOWN:

 		browser.panel1.setScrolls(browser.panel1.getScrollX(),browser.panel1.getScrollY()+30);
  	    browser.panel1.canvas.translate(browser.panel1.getScrollX(),browser.panel1.getScrollY());
	  return true;

     case Event.UP:

	   	browser.panel1.setScrolls(browser.panel1.getScrollX(),browser.panel1.getScrollY()-30);
  	    browser.panel1.canvas.translate(browser.panel1.getScrollX(),browser.panel1.getScrollY());
       return true;

	} }	
		

		return super.handleEvent(evt);
	}

	public boolean action(Event evt, Object arg) {
		if (arg.equals(CLOSE))
		{ hide(); dispose(); AOT.current_browser = null;  }
		else if (arg.equals(RELOAD)) {
		// Tell browser to load/display a URL
			browser.URL_Process(textURL.getText());
		// Get the actual file name of the URL from browser
			textURL.setText(browser.getFileName());
		}
		else if (arg.equals(BACK)) {
		// Go back in history list
			browser.goBack();
			textURL.setText(browser.getFileName());
		}
		else if (arg.equals(FORWARD)) {
		// Go forward in history list
			browser.goForward();
			textURL.setText(browser.getFileName());
		}
		else if (arg.equals("Menu"))
		// Change menu mode (cycle thru all 3 modes)
			browser.setMenuMode((browser.getMenuMode()+1)%3);
		else return super.action(evt, arg);
		return true;
	}

	public boolean keyDown(Event evt, int key) {
		if (key==10) {
		// If Enter is pressed, load URL from the textfield
			browser.URL_Process(textURL.getText());
			textURL.setText(browser.getFileName());
			return true;
		}
		return super.keyDown(evt,key);
	}

	public boolean mouseUp(Event evt, int mx, int my) {
	// Mouse buttong is usually released after a click.
	// And a click means that user maybe has followed a link
	// in the document, so URL may have been changed.
		textURL.setText(browser.getFileName());
		return super.mouseUp(evt,mx,my);
	}

	void goto_URL(String name) {

	 browser.URL_Process(name);

	 textURL.setText(browser.getFileName());

	}

	private   TextField textURL;		// URL name input

	BrowserInterface browser;	// The browser object
}

