

/**
 * Title:
 * Description:
 * Copyright:    Copyright (c) 2002
 * Company:
 * @author
 * @version 1.0
 */
import java.util.*;
import omaTable.*;

public class Sarja {
    Kilpailu kisa;
    Vector kilpailijat;
    Vector tulossa = new Vector();
    boolean onLLista=false;
    String sarja;
    String matka;
    String arvo;
    int lkm;
    int hyva;
    int tulematta=0;
    String viime="0";
    int uusin=0;
    int uusinpoisto=0;
    String llista="";

    public Sarja(String isarja,String imatka, String iarvo, String ilista, Kilpailu ikisa) {
     try {
     if(ilista.length()>0)
     {
       StringTokenizer st1 = new StringTokenizer(ilista,"\n");
       while(st1.hasMoreTokens())
       {
            int nro=0;
            StringTokenizer st2 = new StringTokenizer(st1.nextToken(),";");
            if(st2.countTokens()<3) break;
            String laika = st2.nextToken();
            try {nro = Integer.parseInt(st2.nextToken());}
            catch(Exception ex) {nro = 0;}
            String knimi = st2.nextToken();
            String seura = (st2.hasMoreTokens()?st2.nextToken():"");
            Kilpailija kilp= new Kilpailija(nro,knimi,0,"",seura,laika);
            int paikka = tulossa.size();
            while(paikka>0 && ((Kilpailija)tulossa.elementAt(paikka-1)).laika.compareTo(laika)>0)
             paikka--;
            tulossa.insertElementAt(kilp,paikka);
       }
      llista = ilista;
     }
     }catch (Exception ex) {ex.printStackTrace();}
     if(tulossa.size()>0) onLLista=true;
     tulematta = tulossa.size();
     sarja=isarja;
     matka=(imatka.equals("")?"N/A":imatka);
     kilpailijat = new Vector();
     arvo = iarvo;
     kisa = ikisa;
    }

    public Kilpailija annaKilpailija(int sija){
        return (Kilpailija)kilpailijat.elementAt(sija);
    }
    public int lisaaKilpailija(Kilpailija kilp, String iaikaleima) {

     try {
      for(int i=0;i<kilpailijat.size();i++)
      {
        if(((Kilpailija)kilpailijat.elementAt(i)).nro==(kilp.nro))
        {
        if(((Kilpailija)kilpailijat.elementAt(i)).nimi.equals(kilp.nimi) && ((Kilpailija)kilpailijat.elementAt(i)).seura.equals(kilp.seura) && ((Kilpailija)kilpailijat.elementAt(i)).hyv.equals(kilp.hyv) && ((Kilpailija)kilpailijat.elementAt(i)).aika == kilp.aika)
        return -10;
        if(((Kilpailija)kilpailijat.elementAt(i)).aika<999990)
        hyva--;
        kilpailijat.removeElementAt(i);
        lkm--;
        break;
        }
       }

        if (iaikaleima.compareTo(viime)>0)
         viime = iaikaleima;
          for(int i=0;i<tulossa.size();i++)
          {
            if(((Kilpailija)tulossa.elementAt(i)).nro==(kilp.nro))
            {
             //tulossa.removeElementAt(i);
             if(((Kilpailija)tulossa.elementAt(i)).matkalla)
              tulematta--;
             ((Kilpailija)tulossa.elementAt(i)).aika=kilp.aika;
             ((Kilpailija)tulossa.elementAt(i)).hyv=kilp.hyv;
             ((Kilpailija)tulossa.elementAt(i)).matkalla = false;
             uusinpoisto=i;


            break;
            }
           }

      int iaika=kilp.aika;
      int i=0;
      while(i<kilpailijat.size() && ((Kilpailija)kilpailijat.elementAt(i)).aika<iaika)
      i++;
      kilpailijat.insertElementAt(kilp,i);
      lkm++;
      if(kilp.aika<999990)
      hyva++;
      uusin = i;
      return i+1;
     } catch(Exception ex) {ex.printStackTrace();return -10;}
    }


    public void teeRivit(Table itaul, Table itaul2, boolean siirrytaanko)
    {
      try {
        Kilpailija k;
        int paras =0;
        int sija = 0;
        if(hyva>0) paras = ((Kilpailija)kilpailijat.elementAt(0)).aika;
        String uusin1 = (viime.length()>12?viime.substring(8,10)+":"+viime.substring(10,12):"");
        String apu1[] = {"","",hyva+"+"+(lkm-hyva)+(onLLista?"/"+tulematta:"")+ " tulosta","uusin klo",uusin1,""};
        String apu0[] = {"","",sarja,matka,"",""};
        itaul.removeAll();

        itaul.setRow(-1,apu0);
        itaul.setRow(-1,apu1);
        itaul.setRowBackground(0,new java.awt.Color(0,255,255));
        itaul.setRowBackground(1,new java.awt.Color(0,255,255));
        synchronized(kilpailijat)
        {
         for(int i=0;i<kilpailijat.size();i++)
          {
             k = (Kilpailija)kilpailijat.elementAt(i);
             //tasa-ajat
             sija = i+1;
             if(i>0 && k.aika==((Kilpailija)kilpailijat.elementAt(i-1)).aika && k.aika<999991)
             {
                int j=i;
                while(j>0 && k.aika==((Kilpailija)kilpailijat.elementAt(j-1)).aika)
                {
                 sija--;
                 j--;
                }
             }

             String apu2[] = {(k.aika>99990?"  ":(sija)+". "),k.nro+"",k.nimi,k.seura,(k.aika>99990?k.hyv:MinSek(k.aika)),(k.aika>999990?" ":"-"+MinSek(k.aika-paras))};
             itaul.setRow(-1,apu2);
             if(i%2==1) itaul.setRowBackground(i+2,new java.awt.Color(220,220,220));
             else itaul.setRowBackground(i+2,new java.awt.Color(255,255,255));
          }
          itaul.setRowBackground(uusin+2,new java.awt.Color(255,30,30));
          if(siirrytaanko) itaul.gotoRowPosition(uusin+2);

        }


        if(onLLista)
        {
        int pienin = 10000;

        synchronized(tulossa)
        {
        if(siirrytaanko) {
             k = (Kilpailija)tulossa.elementAt(uusinpoisto);
             if(k.aika>0)
             {
                 itaul2.setRowBackground(uusinpoisto,new java.awt.Color(255,255,255));
                 itaul2.setCell(uusinpoisto,4,k.aika>999990?k.hyv:MinSek(k.aika));
                 itaul2.setCell(uusinpoisto,7,k.aika+"");
                 itaul2.setCell(uusinpoisto,6,"");
                 //itaul2.gotoRowPosition(uusinpoisto);
            }
        }
        else
        {
        itaul2.removeAll();
        int mihin = 0;

         for(int i=0;i<tulossa.size();i++)
          {
             k = (Kilpailija)tulossa.elementAt(i);
             String la;
             try {la  = k.laika.substring(0,2) + ":" + k.laika.substring(2,4) + ":" + k.laika.substring(4,6);}
             catch(Exception ex) {la = k.laika;}
             String apu2[] = {la,k.nro+"",k.nimi,k.seura,(k.matkalla?"":(k.aika<999990?MinSek(k.aika):k.hyv)),k.laikasek+"","",k.aika+"",""};
             itaul2.setRow(-1,apu2);
             if(k.matkalla) itaul2.setRowBackground(i,new java.awt.Color(220,220,220));
             else itaul2.setRowBackground(i,new java.awt.Color(255,255,255));

             //if(k.matkalla && i<pienin) pienin = i;
          }
          //if(pienin<10000)
          //itaul2.gotoRowPosition(pienin);

        }
        }
        }
        else
        {

          String apu2[] = {"","ei","lähtölistoja","","",""};

          if(itaul2.getRowCount()==0 || !itaul2.getCell(0,1).equals("ei") || itaul2.getCell(0,2).equals("lähtölistoja"))
          {
          itaul2.removeAll();
          itaul2.setRow(-1,apu2);
          }
        }


        } catch(Exception ex) {ex.printStackTrace();}
    }

    public int annaKeula() {
        if(hyva>0) return ((Kilpailija)kilpailijat.elementAt(0)).aika;
        else return 0;
    }

    public int annaSija(int aika)
    {
        if(hyva==0) return 0;
        if(aika>99990) return 0;
        for(int i=0;i<hyva;i++)
         if(((Kilpailija)kilpailijat.elementAt(i)).aika>=aika)
            return i+1;

        return hyva+1;




    }

    private String MinSek(int sek){
     try {
      return (sek-sek%60)/60 + ":" + ((sek%60) <10 ? "0" : "") + sek%60;
     } catch(Exception ex) {ex.printStackTrace(); return "";}
    }

}
