import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.util.*;
import omaTabbed.*;
import java.io.*;
import java.net.*;



/**
 * Title:
 * Description:
 * Copyright:    Copyright (c) 2002
 * Company:
 * @author
 * @version 1.0
 */

public class OLiveResults extends Applet {
    boolean isStandalone = false;




    static String version = "OLiveResults 0.97c socket version";
    Etusivu etusivu;
    TabbedPanel tb = new TabbedPanel();
    BorderLayout borderLayout = new BorderLayout();
    BorderLayout borderLayout1 = new BorderLayout();
    Button button1 = new Button();
    TextArea textArea1= new TextArea();
    Vector kisat = new Vector();
    Vector kisaidt = new Vector();
    Image logo;

    DataReader dr;
    int demowait;




    /**Get a parameter value*/
    public String getParameter(String key, String def) {
        return (getParameter(key) != null ? getParameter(key) : def);
    }



    /**Construct the applet*/
    public OLiveResults() {
    }
    /**Initialize the applet*/
    public void init() {

        try {demowait = Integer.parseInt(getParameter("demowait","0"));}
        catch (Exception e) {demowait=0;}
        try {logo = getImage(getDocumentBase(),"logo.gif");}catch (Exception e) {}
        etusivu = new Etusivu(this,logo);

        try {
            jbInit();
        }
        catch(Exception e) {
            e.printStackTrace();
        }
    }
    /**Component initialization*/
    private void jbInit() throws Exception {
        this.setLayout(borderLayout1);

        //etusivu.setLayout(borderLayout);
        //etusivu.setBackground(new java.awt.Color(200,200,200));
        //etusivu.add(button1, BorderLayout.SOUTH);
        //etusivu.add(textArea1, BorderLayout.CENTER);


        button1.setLabel("Aloita");
        textArea1.setText("Appletti demonstroi online tulosten näyttämiseen käytettävää luokkaa.\n\nDemoon tiedot tulevat valmiista tekstitiedostosta");




        this.add(tb,BorderLayout.CENTER);
        tb.setTitle(version);
        tb.add("Valikko",etusivu);
    }

    /**Start the applet*/
    public void start() {
    }
    /**Stop the applet*/
    public void stop() {
        if(dr!=null) dr.interrupt();
    }
    /**Destroy the applet*/
    public void destroy() {
        if(dr!=null) dr.interrupt();
    }

    void aloitusbutton_actionPerformed(ActionEvent e) {
        if(!checkEmail(etusivu.maili.getText()))
            {etusivu.maili.setText("VÄÄRÄNLAINEN OSOITE");
             etusivu.maili.selectAll();
             etusivu.maili.requestFocus();
            return;
            }
        try {Integer.parseInt(etusivu.gesmi.getText());}
        catch (Exception ex)
        {etusivu.gesmi.setText("VÄÄRÄNLAINEN NUMERO");
        etusivu.gesmi.selectAll();
        etusivu.gesmi.requestFocus();
        return;}
        if(etusivu.gesmi.getText().length()<8)
        {etusivu.gesmi.setText("VÄÄRÄNLAINEN NUMERO");
        etusivu.gesmi.selectAll();
        etusivu.gesmi.requestFocus();
        return;}




        Kilpailu kilp = new Kilpailu(etusivu.list1.getSelectedItem());

        if(dr!=null)
        {
          try{ dr.suljeSoketti();
               dr.interrupt();
             }
          catch (Exception ex) {ex.printStackTrace();}
        }

        dr = new DataReader(kilp, (String)kisaidt.elementAt(etusivu.list1.getSelectedIndex()),etusivu.maili.getText(),etusivu.gesmi.getText(),this,demowait);
        dr.start();
        tb.add("Tulostaulu",kilp);
        tb.show("Tulostaulu");
    }


    void etusivubutton1_actionPerformed(ActionEvent e) {
        kisat.removeAllElements();
        kisaidt.removeAllElements();
        InputStream in = null;
        Reader reader = null;
        BufferedReader breader = null;
        boolean onnistuiko = true;
        try {
          etusivu.list1.removeAll();
          //luodaan binäärivirta tiedostosta lukemista varten
          in = (new URL("http://www.suunnistus.info/cgi-bin/textdb/pirila/showqueuelist").openStream());
          //in = (new URL("http://www.suunnistus.net/pekkavaris/scoreboard/apu.php").openStream());
          //luodaan merkkivirta, joka lukee merkit binäärivirrasta käyttäen
          //annettua merkistöä.
          reader = new InputStreamReader(in);
          //puskuroidaan virta
          breader = new BufferedReader(reader);
          String rivi = null;
          //BufferedReader-luokalla on metodi rivien lukemiseen


          while((rivi=breader.readLine()) != null){
             if(!rivi.startsWith("#") && rivi.indexOf(";")>1)
             {
                kisaidt.addElement(rivi.substring(0,rivi.indexOf(";")));
                kisat.addElement(rivi.substring(rivi.indexOf(";"),rivi.length()-1));
                etusivu.list1.add(rivi.substring(rivi.indexOf(";")+1,rivi.length()-1));
              }
            }

            if(etusivu.list1.getItemCount()==0) etusivu.list1.add("Kisalista tyhjä");

          }

        catch ( IOException ioe ) {
            etusivu.list1.removeAll();
            etusivu.list1.add("Listan haku epäonnistui");
        }
        finally {
          //suljetaan virta
          try {
            if (breader != null) breader.close();
            } catch(IOException ioe) {}
        }
    }

private boolean checkEmail(String emailAddr) {
	// this function checks for a well-formed e-mail address
	// in the format:
	// user@domain.com

	int i;

	if (emailAddr.equals("pv")) {
		emailAddr="pekka.varis@suunnistus.info";
		etusivu.maili.setText(emailAddr);
        	etusivu.gesmi.setText("0505669742");
             	etusivu.maili.selectAll();
             	etusivu.maili.requestFocus();
		}
	if (emailAddr.equals("ji")) {
		emailAddr="jukka.inkeri@suunnistus.info";
		etusivu.maili.setText(emailAddr);
        	etusivu.gesmi.setText("0400572324");
             	etusivu.maili.selectAll();
             	etusivu.maili.requestFocus();
		}
		

	// check for @
	i = emailAddr.indexOf("@");
	if (i == -1) {
		return false;
	}

	// separate the user name and domain
	String username = emailAddr.substring(0, i);
	String domain = emailAddr.substring(i + 1, emailAddr.length());

	// look for spaces at the beginning of the username
	i = 0;
	while ((username.substring(i, i + 1).equals(" ")) && (i < username.length())) {
		i++;
	}
	// remove any found
	if (i > 0) {
		username = username.substring(i, username.length());
	}

	// look for spaces at the end of the domain
	i = domain.length() - 1;
	while ((domain.substring(i, i + 1).equals(" ")) && (i >= 0)) {
		i--;
	}
	// remove any found
	if (i < (domain.length() - 1)) {
		domain = domain.substring(0, i + 1);
	}

	// make sure neither the username nor domain is blank
	if ((username.equals("")) || (domain.equals(""))) {
		return false;
	}

	// check for bad characters in the username
	char ch;
	for (i = 0; i < username.length(); i++) {
		ch = (username.toLowerCase()).charAt(i);
		if (!(((ch >= 'a') && (ch <= 'z')) ||
			((ch >= '0') && (ch <= '9')) ||
			(ch == '_') || (ch == '-') || (ch == '.'))) {
				return false;
		}
	}

	// check for bad characters in the domain
	for (i = 0; i < domain.length(); i++) {
		ch = (domain.toLowerCase()).charAt(i);
		if (!(((ch >= 'a') && (ch <= 'z')) ||
			((ch >= '0') && (ch <= '9')) ||
			(ch == '_') || (ch == '-') || (ch == '.'))) {
				return false;
		}
	}

        if (domain.indexOf(".")<0 || domain.indexOf(".")==0 || domain.indexOf(".")==domain.length()-1) return false;

        return true;
}


}

