//**************************************************************************************
//
// Champ Calc / Champ Calc - Race Analysis
//
// Copyright Tony Barson 2004 - 2006 / Tickled Pink IT
//
// PLEASE do not use or alter this code without the permission of the author. 
// 
// The system can be purchased or optimised for any client. Please contact the author
// for further details.
//
// E-Mail : Tony_Barson@yahoo.co.uk
//
//**************************************************************************************
function ReCalculate_Table(){

var X,Y;
var bSimScoresFound;
var nWinner;
var nScores = new Array();
var sHTML;
var nSimEntries;

//****************
//Now weed out best X results && re-calculate total
//****************

if (bFirstTimeIn == true) {

   for (X = 1;X <= nRounds;X++) {
       anSimulatedScore[X]       = new Array();
       anSaved_SimulatedScore[X] = new Array();
       abInclude_Score[X]        = new Array();
    
       for (Y = 1;Y <= nDriver_Records;Y++) {
           anSimulatedScore[X][Y] = 0;
           anSaved_SimulatedScore[X][Y] = 0;
           abInclude_Score[X][Y] = false;
       }
   }

   bFirstTimeIn = false;
}

document.getElementById("DivText2").innerHTML = "<P></P>";
document.getElementById("DivText3").innerHTML = "<P></P>";
document.getElementById("DivText4").innerHTML = "<P></P>";

sSaved_Driver = "";
sSaved_TableHTML = "";
nSimEntries = 0;

nRounds_Left = nSavedRoundsLeft;

if(nScores_To_Include == 1){
   alert(sChamp_Name + " - " + sChamp_Year + "\n\n" + "Calculating Championship Table for Best " + nScores_To_Include + " Score. Please Wait");
}else{
   alert(sChamp_Name + " - " + sChamp_Year + "\n\n" + "Calculating Championship Table for Best " + nScores_To_Include + " Scores. Please Wait");
}

//populate array from grid
for (X = 1;X <= nDriver_Records;X++) {

     for (Y = 1;Y <= nRounds;Y++) {
       bSimScoresFound = false;
       if(bSimulationOn == true){
          if(Y > nCurrent_Round){
             if(anSimulatedScore[Y][X] != 0){
                bSimScoresFound = true;
                anScore[Y][X] = anSimulatedScore[Y][X];
                nRounds_Left = nRounds - Y;
             }else{
                anScore[Y][X] = 0;
             }
          }
          abInclude_Score[Y][X] = true;
       }else{
          if(Y > nCurrent_Round){
             anScore[Y][X] = 0;
          }
          abInclude_Score[Y][X] = true;
       }
    }
}

//Recalculate grid

for (X = 1;X <= nDriver_Records;X++) {
   var nScores = new Array(nRounds);
   var bCycle_Finished ;
   var nSaved_Score;
   var ntopx ;

   ntopx = 0;
   anFullTotal[X] = 0;
   anChamp_Contender[X] = "Y";

   for (n = 1;n <= nRounds;n++) {
       nScores[n] = anScore[n][X];
       anFullTotal[X] = anFullTotal[X] + anScore[n][X];
   }

   bCycle_Finished = 0;
   //Sort scores into order

   while (bCycle_Finished == 0) {

      bCycle_Finished = 1;

      for (n = 1; n <= (nRounds-1);n++) {

          if(nScores[n] > nScores[n+1]){
             nSaved_Score = nScores[n];
             nScores[n] = nScores[n+1];
             nScores[n+1] = nSaved_Score;
             bCycle_Finished = 0;
             n = 1;
          }
      }
   }

   //Work out Top n Total;
   for (n = nRounds;n >= ((nRounds - nScores_To_Include) + 1);n--) {
       ntopx = ntopx + nScores[n];
   }

   //Now mark in the array whether each score is included in the total || not, false = ! included

   for (n = (nRounds - nScores_To_Include);n >= 1;n--) {
       for (m = 1;m <= nRounds;m++) {
           if(nScores[n] != 0){
              if(anScore[m][X] == nScores[n]){
                 abInclude_Score[m][X] = false;
                 m = nRounds+1;
              }
           }
       }
   }

   anTopNTotal[X] = ntopx;

   //*****;
   //**************** START OF MAX SCORE CALC

   var nMax_Score ;
   var nCount;

   var anTop_Scores = new Array(nRounds);

   nMax_Score = 0;

   for (n = 1;n <= nRounds_Left;n++) {
       if(sChamp_Type.substring(0,6) == "SPRINT"){
          anTop_Scores[n] = Number(sPoints_Array[1].substring(0,3)) + 100;
       }else if(sChamp_Type.substring(0,9) == "ENDURANCE"){
               anTop_Scores[n] = Number(sPoints_Array[1].substring(0,3));
       }else if(sChamp_Type.substring(0,3) == "CAR"){
               anTop_Scores[n] = Number(sPoints_Array[1].substring(0,3));
       }
   }

//Create array of Maximum possible scores for rounds left

   nCount = 0;
   for (n = nRounds;n >= (nRounds_Left + 1);n--) {
       nCount = nCount + 1;
       anTop_Scores[nRounds_Left + nCount] = nScores[n];
   }

//Create Maximum Top n Total score
   for (n = 1;n <= nScores_To_Include;n++) {
       nMax_Score = nMax_Score + anTop_Scores[n];
   }

   anMax_Score[X] = nMax_Score;
//**************** END OF MAX SCORE CALC

}


//BUBBLE SORT Into Top X order

bCycle_Finished = false;

while (bCycle_Finished == false) {
   bCycle_Finished = true;
   for (n = 1;n <= nDriver_Records - 1;n++) {

       nWinner = 0;
       if(anTopNTotal[n] == anTopNTotal[n + 1] && anTopNTotal[n] != 0) {
          nWinner = Tie_Breaker(n, n + 1, sChamp_Type);
       } else {
          nWinner = 1;
       }

       if(anTopNTotal[n] < anTopNTotal[n + 1] || nWinner == 2){
          //*** SAVE ARRAY VALUES HERE;
          sSaved_Driver = asDriver[n];
          nSaved_TopNTotal = anTopNTotal[n];
          nSaved_FullTotal = anFullTotal[n];
          nSaved_MaxScore = anMax_Score[n];
          for (X = 1;X <= nRounds;X++) {
              anSaved_Score[X] = anScore[X][n];
              abSaved_Include_Score[X] = abInclude_Score[X][n];
              anSaved_SimulatedScore[X][n] = anSimulatedScore[X][n];
          }
          //*****;

          //*****;
          asDriver[n] = asDriver[n + 1];
          anTopNTotal[n] = anTopNTotal[n + 1];
          anFullTotal[n] = anFullTotal[n + 1];
          anMax_Score[n] = anMax_Score[n + 1];

          for (X = 1;X <= nRounds;X++) {
              anScore[X][n] = anScore[X][n + 1];
              abInclude_Score[X][n] = abInclude_Score[X][n + 1];
              anSimulatedScore[X][n] = anSimulatedScore[X][n + 1];
          }
          //*****;

          //*****;
          asDriver[n + 1] = sSaved_Driver;
          anTopNTotal[n + 1] = nSaved_TopNTotal;
          anFullTotal[n + 1] = nSaved_FullTotal;
          anMax_Score[n + 1] = nSaved_MaxScore;

          for (X = 1;X <= nRounds;X++) {
              anScore[X][n + 1] = anSaved_Score[X];
              abInclude_Score[X][n + 1] = abSaved_Include_Score[X];
              anSimulatedScore[X][n + 1] = anSaved_SimulatedScore[X][n];
          }
          //*****;
          bCycle_Finished = false;
       }
   }
}


//Find top Maximum Score
var nTop_MaxScore;
var nRound_MaxScore;
nTop_MaxScore = 0;

for (z = 1;z <= nDriver_Records;z++) {
    if(anMax_Score[z] > nTop_MaxScore){
       nTop_MaxScore = anMax_Score[z];
    }
}

sHTML = "";

sHTML += "<TABLE class='HeadTable1' BORDER=1 ALIGN=CENTER WIDTH=400>";
sHTML += "<TR><TD class='HeadBox1' BGCOLOR='#A8D3FF' ALIGN=CENTER>" + sChamp_Name + " - " + sChamp_Year + "</TD></TR>";
sHTML += "</TABLE><BR>";

sHTML += "<TABLE class='HeadTable2' BORDER=1 ALIGN=CENTER WIDTH=600>";

if(sChamp_Type == "SPRINT"){
   sHTML += "<TR><TD class='HeadBox2' BGCOLOR='#A8D3FF' ALIGN=CENTER>Championship Table After Round " + nCurrent_Round + " - " + asTrackName[nCurrent_Round] + " " + asTrackDate[nCurrent_Round] + "</TD></TR>";
}else if(sChamp_Type == "ENDURANCE"){
        sHTML += "<TR><TD class='HeadBox2' BGCOLOR='#A8D3FF' ALIGN=CENTER>Championship Table After Round " + nCurrent_Round + " - " + asTrackName[nCurrent_Round] + " " + asTrackDate[nCurrent_Round] + "</TD></TR>";
}else if(sChamp_Type == "CAR"){
        sHTML += "<TR><TD class='HeadBox2' BGCOLOR='#A8D3FF' ALIGN=CENTER>Championship Table After Round " + nCurrent_Round + " - " + asTrackName[nCurrent_Round] + " " + asTrackDate[nCurrent_Round] + "</TD></TR>";
}

sHTML += "</TABLE><BR>";

sHTML += "<TABLE class='ControlTable' BORDER=1 ALIGN=CENTER WIDTH=650>";
sHTML += "<TR>";
sHTML += "<TD class='ControlBox' BGCOLOR='#E8F3FF' ALIGN=LEFT>";

sHTML += " Best Scores To Include : <SELECT NAME='BestScores' onChange='Prepare_for_Recalc()'>";

for (nLoop = 2;nLoop <= nRounds;nLoop++) {

    if(nLoop == nScores_To_Include){
       sHTML += "<OPTION SELECTED>" + nLoop;
    }else{
       sHTML += "<OPTION>" + nLoop;
    }
}

sHTML += "</SELECT>";
sHTML += "</TD>";

sHTML += "<TD ALIGN=CENTER WIDTH=100></TD>";

sHTML += "<TD class='ControlBox' BGCOLOR='#E8F3FF' ALIGN=RIGHT>";
sHTML += " Simulated Scores : <SELECT NAME='SimScores' onChange='Prepare_for_Recalc()'>";

if(bSimulationOn == true){
   sHTML += "<OPTION SELECTED>On";
   sHTML += "<OPTION>Off";
}else{
   sHTML += "<OPTION>On";
   sHTML += "<OPTION SELECTED>Off";
}

sHTML += "</SELECT>";
sHTML += "</TD>";

sHTML += "<TD ALIGN=CENTER WIDTH=150><A onclick='Race_History(" + "\"" + "NEXT" + "\"" + "," + (nCurrent_Round+1) + "," + "\"" + "\"" + ")'><U>Next Race Details</U></A></TD>";

sHTML += "</TR>";
sHTML += "</TABLE><BR>";

sHTML += "<TABLE class='DetTable' BORDER='1' WIDTH=800 ALIGN=CENTER>";

sHTML += "<TR>";
sHTML += "<TD class='DetHeadBox' BGCOLOR='#A8D3FF' WIDTH=30 VALIGN=BOTTOM ALIGN=LEFT>Pos</TD>";
sHTML += "<TD class='DetHeadBox' BGCOLOR='#A8D3FF' WIDTH=450 VALIGN=BOTTOM ALIGN=LEFT>Entrant</TD>";

for (Y = 1;Y <= nRounds;Y++) {
    if(Y > nCurrent_Round){
       bSimScoreFound = false;
       for (X = 1;X <= nDriver_Records;X++) {
           if(anSimulatedScore[Y][X] != 0) {
              bSimScoreFound = true;
              X = nDriver_Records+1;
           }
       }
       if(bSimScoreFound == true && bSimulationOn == true){
          sHTML += "<TD class='DetHeadBox' BGCOLOR='#A8D3FF' WIDTH=30 VALIGN=BOTTOM ALIGN=LEFT><TABLE WIDTH=30 BORDER=0><TR><TD><A onclick='Display_Results(" + Y + "," + "\"" + "A" + "\"" + ")'><IMG ALT='Click for Round " + Y + " (Simulated) Results : ";
          if(sChamp_Type.substring(0,6) == "SPRINT"){
             sHTML += asTrackName[Y] + " - " + asTrackDate[Y] + "' SRC='" + asTrackTabName[Y] + "'></A></TD><TD VALIGN=BOTTOM><IMG ALT='Simulated Round' SRC='SIM.bmp'></TD></TR></TABLE></TD>";
          }else if(sChamp_Type.substring(0,9) == "ENDURANCE"){
             sHTML += asTrackName[Y] + " - " + asTrackDate[Y] + "' SRC='" + asTrackTabName[Y] + "'></A></TD><TD VALIGN=BOTTOM><IMG ALT='Simulated Round' SRC='SIM.bmp'></TD></TR></TABLE></TD>";
          }else if(sChamp_Type.substring(0,3) == "CAR"){  
             sHTML += asTrackName[Y] + " - " + asTrackDate[Y] + "' SRC='" + asTrackTabName[Y] + "'></A></TD><TD VALIGN=BOTTOM><IMG ALT='Simulated Round' SRC='SIM.bmp'></TD></TR></TABLE></TD>";
          }
       }else{
          sHTML += "<TD class='DetHeadBox' BGCOLOR='#A8D3FF' WIDTH=30 VALIGN=BOTTOM ALIGN=CENTER><A onclick='Display_Results(" + Y + "," + "\"" + "A" + "\"" + ")'><IMG ALT='Click for Round " + Y + " Results : ";
          if(sChamp_Type.substring(0,6) == "SPRINT"){
             sHTML += asTrackName[Y] + " - " + asTrackDate[Y] + "' SRC='" + asTrackTabName[Y] + "'></A></TD>";
          }else if(sChamp_Type.substring(0,9) == "ENDURANCE"){
             sHTML += asTrackName[Y] + " - " + asTrackDate[Y] + "' SRC='" + asTrackTabName[Y] + "'></A></TD>";
          }else if(sChamp_Type.substring(0,3) == "CAR"){  
             sHTML += asTrackName[Y] + " - " + asTrackDate[Y] + "' SRC='" + asTrackTabName[Y] + "'></A></TD>";
          } 
       }
    }else{
         var bNoRaceAnalysisDetails = true;

         if(sChamp_Type.substring(0,6) == "SPRINT"){
	    if(asRace_Analysis_Page[Y] != ""){
               bNoRaceAnalysisDetails = false;
	    }
	 }
	
	 if(sChamp_Type.substring(0,9) == "ENDURANCE"){
	    if(asRace_Analysis_Page[Y] != ""){
	       bNoRaceAnalysisDetails = false;
	    }
	 }
	
	 if(sChamp_Type.substring(0,3) == "CAR"){
	    if(asRace_Analysis_Page[Y] != ""){
	       bNoRaceAnalysisDetails = false;
	    }
	 }

         if (bNoRaceAnalysisDetails == false) {
             sHTML += "<TD class='DetHeadBox' BGCOLOR='#A8D3FF' WIDTH=30 VALIGN=BOTTOM ALIGN=LEFT><TABLE WIDTH=30 CELLSPACING=0 BORDER=0><TR><TD><A onclick='Display_Results(" + Y + "," + "\"" + "A" + "\"" + ")'><IMG ALT='Click for Round " + Y + " Results : ";
             if(sChamp_Type.substring(0,6) == "SPRINT"){
                sHTML += asTrackName[Y] + " - " + asTrackDate[Y] + "' SRC='" + asTrackTabName[Y] + "'></A></TD><TD VALIGN=BOTTOM><A HREF='" + asRace_Analysis_Page[Y] + "' TARGET='_blank'><IMG ALT='Click for Race Analysis' SRC='RaceAnalysis.gif'></A></TD></TR></TABLE></TD>";
             }else if(sChamp_Type.substring(0,9) == "ENDURANCE"){
                sHTML += asTrackName[Y] + " - " + asTrackDate[Y] + "' SRC='" + asTrackTabName[Y] + "'></A></TD><TD VALIGN=BOTTOM><A HREF='" + asRace_Analysis_Page[Y] + "' TARGET='_blank'><IMG ALT='Click for Race Analysis' SRC='RaceAnalysis.gif'></A></TD></TR></TABLE></TD>";
             }else if(sChamp_Type.substring(0,3) == "CAR"){  
                sHTML += asTrackName[Y] + " - " + asTrackDate[Y] + "' SRC='" + asTrackTabName[Y] + "'></A></TD><TD VALIGN=BOTTOM><A HREF='" + asRace_Analysis_Page[Y] + "' TARGET='_blank'><IMG ALT='Click for Race Analysis' SRC='RaceAnalysis.gif'></A></TD></TR></TABLE></TD>";
             }
         } else {
              sHTML += "<TD class='DetHeadBox' BGCOLOR='#A8D3FF' WIDTH=30 VALIGN=BOTTOM ALIGN=CENTER><A onclick='Display_Results(" + Y + "," + "\"" + "A" + "\"" + ")'><IMG ALT='Click for Round " + Y + " Results : ";
              if(sChamp_Type.substring(0,6) == "SPRINT"){
                sHTML += asTrackName[Y] + " - " + asTrackDate[Y] + "' SRC='" + asTrackTabName[Y] + "'></A></TD>";
              }else if(sChamp_Type.substring(0,9) == "ENDURANCE"){
                sHTML += asTrackName[Y] + " - " + asTrackDate[Y] + "' SRC='" + asTrackTabName[Y] + "'></A></TD>";
              }else if(sChamp_Type.substring(0,3) == "CAR"){  
                sHTML += asTrackName[Y] + " - " + asTrackDate[Y] + "' SRC='" + asTrackTabName[Y] + "'></A></TD>";
              }
         }
    }
}

sHTML += "<TD class='DetHeadBox' BGCOLOR='#A8D3FF' WIDTH=30 VALIGN=BOTTOM ALIGN=LEFT>Total</TD>";
sHTML += "<TD class='DetHeadBox' BGCOLOR='#A8D3FF' WIDTH=70 VALIGN=BOTTOM ALIGN=LEFT>Top " + nScores_To_Include + "</TD>";
sHTML += "<TD class='DetHeadBox' BGCOLOR='#A8D3FF' WIDTH=30 VALIGN=BOTTOM ALIGN=LEFT>Diff</TD>";
sHTML += "<TD class='DetHeadBox' BGCOLOR='#A8D3FF' WIDTH=40 VALIGN=BOTTOM ALIGN=LEFT>Max</TD>";

sHTML += "</TR>";

nSwitch = 0;
sColour = "";

//Re-populate grid

 for (z = 1;z <= nDriver_Records;z++) {

    sHTML += "<TR>";

    if(nSwitch == 0){
       sColour = sColour1;
       nSwitch = 1;
    }else{
       sColour = sColour2;
       nSwitch = 0;
    }

    sHTML += "<TD class='DetBox' BGCOLOR='" + sColour + "' WIDTH=30 VALIGN=TOP ALIGN=LEFT>" + z + "</TD>";

    bPhoto = false;

    if(bNoPhotoCheck == false){
       for (n = 1; n <= asDriver_Photo.length-1;n++) {

          nPos = asDriver_Photo[n].indexOf("||");

          if (nPos != -1) {
             sPhoto_Driver = asDriver_Photo[n].substring(0, nPos);
	  } else {
	     sPhoto_Driver = "?????";
          }

          if(asDriver[z].substring(0, sPhoto_Driver.length).toUpperCase() == sPhoto_Driver.toUpperCase()){

             nPos = asDriver_Photo[n].indexOf("||");
             
             if (nPos != -1) {
                nPos = nPos + 2;
                sPhoto_File_Name = asDriver_Photo[n].substring(nPos, asDriver_Photo[n].length);
                if(sPhoto_File_Name != ""){
                   bPhoto = true;
                }
                n = asDriver_Photo.length +1;
             }
          }
       }
    }

    if(bPhoto == true){
       sHTML += "<TD class='DetBox' BGCOLOR='" + sColour + "' WIDTH=450 VALIGN=TOP ALIGN=LEFT>";
       sHTML += "<a id='" + z + "' onclick='Driver_Analysis(" + z + ")'><U>" + asDriver[z] + "</U></A><IMG SRC='Camera.gif' ALT='Photo available'></TD>";
    }else{
       sHTML += "<TD class='DetBox' BGCOLOR='" + sColour + "' WIDTH=450 VALIGN=TOP ALIGN=LEFT>";
       sHTML += "<a id='" + z + "' onclick='Driver_Analysis(" + z + ")'><U>" + asDriver[z] + "</U></A></TD>";
    }


    for (Y = 1; Y <= nRounds;Y++) {


        if(abInclude_Score[Y][z] == false){
           sHTML += "<TD class='DetBox' BGCOLOR='" + sColour + "' WIDTH=30 VALIGN=TOP >";
           sHTML += "<LEFT><IMG ALT='Dropped Score' SRC='CHEQFLAG.bmp'></LEFT><RIGHT>" + anScore[Y][z] + "</RIGHT></TD>";
        }else{
           sHTML += "<TD class='DetBox' BGCOLOR='" + sColour + "' WIDTH=30 VALIGN=TOP ALIGN=RIGHT>";
           sHTML += anScore[Y][z] + "</TD>";
        }

    }

    sHTML += "<TD class='DetBox' BGCOLOR='" + sColour + "' WIDTH=30 VALIGN=TOP ALIGN=RIGHT>";
    sHTML += anFullTotal[z] + "</TD>";

    sHTML += "<TD class='DetBox' BGCOLOR='" + sColour + "' WIDTH=70 VALIGN=TOP ALIGN=RIGHT>";
    sHTML += anTopNTotal[z] + "</TD>";

    if(z == 1){
       sHTML += "<TD class='DetBox' BGCOLOR='" + sColour + "' WIDTH=30 VALIGN=TOP ALIGN=RIGHT>";
       sHTML += "0</TD>";
    }else{
       nPoints_diff = anTopNTotal[1] - anTopNTotal[z];
       sHTML += "<TD class='DetBox' BGCOLOR='" + sColour + "' WIDTH=30 VALIGN=TOP ALIGN=RIGHT>";
       sHTML += nPoints_diff + "</TD>";
    }

//Now mark with "X" if(Championship cannot now be won
    if(sChamp_Type.substring(0,6) == "SPRINT"){
       nRound_MaxScore = Number(sPoints_Array[1].substring(0,3)) + 100;
    }else if(sChamp_Type.substring(0,9) == "ENDURANCE"){
            nRound_MaxScore = Number(sPoints_Array[1].substring(0,3));
    }else if(sChamp_Type.substring(0,3) == "CAR"){
             nRound_MaxScore = Number(sPoints_Array[1].substring(0,3));
    }

    if(anMax_Score[z] < anTopNTotal[1]){
       sHTML += "<TD class='DetBox' BGCOLOR='" + sColour + "' WIDTH=40 VALIGN=TOP ALIGN=RIGHT>";
       sHTML += "<LEFT><IMG ALT='Cannot Win Championship' SRC='RED_CROSS.bmp' HEIGHT=10 WIDTH=10></LEFT><RIGHT>" + anMax_Score[z] + "</RIGHT></TD>";
       anChamp_Contender[z] = "N";
    }else{
       sHTML += "<TD class='DetBox' BGCOLOR='" + sColour + "' WIDTH=40 VALIGN=TOP ALIGN=RIGHT>";
       sHTML += anMax_Score[z] + "</TD>";
       anChamp_Contender[z] = "Y";
    }

    sHTML += "</TR>";

    sSaved_TableHTML = sHTML;
}

document.getElementById("DivText2").innerHTML = sSaved_TableHTML;

var nNo_Contenders = 0;

for (n = 1;n <= nDriver_Records;n++) {
    if(anChamp_Contender[n] == "Y"){
          nNo_Contenders++;
    }
} 


if(nNo_Contenders == 1){
   alert("Congratulations to: " + asDriver[1] + " - " + sChamp_Name + " - " + sChamp_Year + " Champion !");
   return;
}




bNoRecalc = false;

}

//********************************************************************************

function Tie_Breaker(nDriver1, nDriver2, sChamp_Type){

var n;
var bWinner         = new Array(2);
var nDriver         = new Array(2);
var nPointsCount    = new Array(2);
var nEndLoop;
var Round = 0;
var Driver = 0;
var nStored_Highest = new Array(2);
var nOldHighest     = new Array(2);
var nPoints = 0;

bWinner[1] = false;
bWinner[2] = false;
nDriver[1] = nDriver1;
nDriver[2] = nDriver2;
nPointsCount[1] = 0;
nPointsCount[2] = 0;


if(sChamp_Type.substring(0,6) == "SPRINT"){
   nEndLoop = sPoints_Array.length-1;
}

if(sChamp_Type.substring(0,9) == "ENDURANCE"){
   nEndLoop = sPoints_Array.length-1;
}

if(sChamp_Type.substring(0,3) == "CAR"){
   nEndLoop = sPoints_Array.length-1;
}

for (nPoints = 1;nPoints <= nEndLoop;nPoints++) {

       nPointsCount[1] = 0;
       nPointsCount[2] = 0;

       for (Driver = 1; Driver <= 2;Driver++) {

           for (Round = 1;Round <= nRounds;Round++) {

              if(abInclude_Score[Round][nDriver[Driver]] == true){
                 if(sChamp_Type.substring(0,6) == "SPRINT"){

                    if(anScore[Round][nDriver[Driver]] == Number(sPoints_Array[nPoints].substring(0,3)) + 100){
                       nPointsCount[Driver] = nPointsCount[Driver] + 1;
                    }
                 }

                 if(sChamp_Type.substring(0,9) == "ENDURANCE"){
                    if(anScore[Round][nDriver[Driver]] == Number(sPoints_Array[nPoints].substring(0,3))){
                       nPointsCount[Driver] = nPointsCount[Driver] + 1;
                    }
                 }

                 if(sChamp_Type.substring(0,3) == "CAR"){
                    if(anScore[Round][nDriver[Driver]] == Number(sPoints_Array[nPoints].substring(0,3))){
                       nPointsCount[Driver] = nPointsCount[Driver] + 1;
                    }
                 }
             }
           }
       }

       if(nPointsCount[1] > nPointsCount[2]){
          bWinner[1] = true;
          return 1;
       }

       if(nPointsCount[2] > nPointsCount[1]){
          bWinner[2] = true;
          return 2;
       }
}


//As Number of counted scores are the same, look for highest non-counted score to decide between the entrants

if(bWinner[1] == false && bWinner[2] == false){
    nStored_Highest[1] = 0;
    nStored_Highest[2] = 0;
    nOldHighest[1] = 999;
    nOldHighest[2] = 999;
    while (bWinner[1] == false && bWinner[2] == false) {
       for (Driver = 1; Driver <= 2;Driver++) {
           for (Round = 1; Round <= nRounds;Round++) {
             if(sChamp_Type.substring(0,6) == "SPRINT"){
                  if(abInclude_Score[Round][nDriver[Driver]] == false || anScore[Round][nDriver[Driver]] < 100){
                     if(anScore[Round][nDriver[Driver]] > nStored_Highest[Driver] && anScore[Round][nDriver[Driver]] < nOldHighest[Driver]){
                        nStored_Highest[Driver] = anScore[Round][nDriver[Driver]];
                     }
                  }
             }

             if(abInclude_Score[Round][nDriver[Driver]] == false){
                if(sChamp_Type.substring(0,9) == "ENDURANCE"){
                    if(anScore[Round][nDriver[Driver]] > nStored_Highest[Driver] && anScore[Round][nDriver[Driver]] < nOldHighest[Driver]){
                       nStored_Highest[Driver] = anScore[Round][nDriver[Driver]];
                    }
                }


                if(sChamp_Type.substring(0,3) == "CAR"){
                   if(anScore[Round][nDriver[Driver]] > nStored_Highest[Driver] && anScore[Round][nDriver[Driver]] < nOldHighest[Driver]){
                      nStored_Highest[Driver] = anScore[Round][nDriver[Driver]];
                   }
                }
             }
           }
       }

      if(nStored_Highest[1] > nStored_Highest[2]){
        bWinner[1] = true;
        return 1;
      }

      if(nStored_Highest[2] > nStored_Highest[1]){
         bWinner[2] = true;
         return 2;
      }

      if(nStored_Highest[1] == 0 && nStored_Highest[2] == 0){
        return 0;
      }

       nOldHighest[1] = nStored_Highest[1];
       nOldHighest[2] = nStored_Highest[2];
       nStored_Highest[1] = 0;
       nStored_Highest[2] = 0;
    }

}

}

//********************************************************************************

function ReDisplay_Table(){

document.getElementById("DivText2").innerHTML = "<P></P>";
document.getElementById("DivText3").innerHTML = "<P></P>";
document.getElementById("DivText4").innerHTML = "<P></P>";

sSaved_Driver = "";

document.getElementById("DivText2").innerHTML = sSaved_TableHTML;

}

//********************************************************************************************

function Prepare_for_Recalc(){

var nIndex;

nIndex = document.Form1.BestScores.selectedIndex;
nScores_To_Include = document.Form1.BestScores.options[nIndex].text;

nIndex = document.Form1.SimScores.selectedIndex;

if(document.Form1.SimScores.options[nIndex].text == "On"){
   bSimulationOn = true;
}else{
   bSimulationOn = false;
}

ReCalculate_Table();

}

//********************************************************************************************

function Race_History(sPassed_Type, nPassed_Round, sPassed_Final){

var X;
var Y;
var sHTML;

nSwitch = 0;

sHTML = "";

if(sPassed_Type == "NEXT") {
   sHTML += "<TABLE class='HeadTable1' BORDER=1 ALIGN=CENTER WIDTH=400>";
   sHTML += "<TR><TD class='HeadBox1' BGCOLOR='#A8D3FF' ALIGN=CENTER>Next Race : Round " + nPassed_Round + " - " + asTrackName[nPassed_Round] + " " + asTrackDate[nPassed_Round] + "</TD></TR>";
   sHTML += "</TABLE><BR>";
}

if(sPassed_Type == "HISTORY" || sPassed_Type == "RESULTS" ) {
   if (nPassed_Round > nCurrent_Round) {
      sHTML += "<TABLE class='HeadTable1' BORDER=1 ALIGN=CENTER WIDTH=200>";
      sHTML += "<TR><TD class='HeadBox1' BGCOLOR='#A8D3FF' ALIGN=CENTER>Race Not Yet Run</TD></TR>";
      sHTML += "</TABLE><BR>";
   }

   sHTML += "<TABLE class='HeadTable1' BORDER=1 ALIGN=CENTER WIDTH=400>";
   sHTML += "<TR><TD class='HeadBox1' BGCOLOR='#A8D3FF' ALIGN=CENTER>Race History for Round " + nPassed_Round + " - " + asTrackName[nPassed_Round] + " " + asTrackDate[nPassed_Round] + "</TD></TR>";
   sHTML += "</TABLE><BR>";
}

var sHistory_String = "";

sHistory_String = asTrackHistory[nPassed_Round];


if(sHistory_String == "") {
  if(sPassed_Type != "NEXT") {
     return;
  }
}

var nField = -1;
var sField = new Array();
var n = 0;
var sChar = "";
var sTempField = "";

while (n < sHistory_String.length) {

   sTempField = "";

   sChar = sHistory_String.substring(n, n+1);

   while (n < sHistory_String.length && sChar != "|") {
         sTempField += sChar;
         n++;
         if (n < sHistory_String.length) {
            sChar = sHistory_String.substring(n, n+1);
         }
   }

   nField++;

   sField[nField] = sTempField;

   sChar = sHistory_String.substring(n, n+1);

   while (n < sHistory_String.length && sChar == "|") {
         n++;
         if (n < sHistory_String.length) {
            sChar = sHistory_String.substring(n, n+1);
         }
   }
}


if(sPassed_Type == "NEXT") {
   if(asTrackWebSite_Link[nPassed_Round] != ""){
      sHTML += "<TABLE BORDER=0 ALIGN=CENTER WIDTH=400>";
      sHTML += "<TR><TD ALIGN=CENTER WIDTH=400><A HREF='" + asTrackWebSite_Link[nPassed_Round] + "' TARGET='_blank'><U>Track Website - Click Here</U></A></TD></TR>";
      sHTML += "</TABLE><BR>";
   }

   if(asTrackWeather_Link[nPassed_Round] != ""){
      sHTML += "<TABLE BORDER=0 ALIGN=CENTER WIDTH=400>";
      sHTML += "<TR><TD ALIGN=CENTER WIDTH=400><A HREF='" + asTrackWeather_Link[nPassed_Round] + "' TARGET='_blank'><U>Track Weather - Click Here</U></A></TD></TR>";
      sHTML += "</TABLE><BR>";
   }

   if(sHistory_String != "") {
      sHTML += "<TABLE class='HeadTable1' BORDER=1 ALIGN=CENTER WIDTH=400>";
      sHTML += "<TR><TD class='HeadBox1' BGCOLOR='#A8D3FF' ALIGN=CENTER>Race History for Round " + nPassed_Round + " - " + asTrackName[nPassed_Round] + " " + asTrackDate[nPassed_Round] + "</TD></TR>";
      sHTML += "</TABLE><BR>";
   }

}

if(sHistory_String != "") {
   sHTML += "<TABLE class='StatsTable' BORDER=1 ALIGN=CENTER WIDTH=400>";
   sHTML += "<TR><TD class='StatsCatBox' BGCOLOR='#A8D3FF'>Season</TD><TD class='StatsDetBox2' BGCOLOR='#E8F3FF'>" + sField[0] + " - Round " + sField[1] + "</TD></TR>";
   sHTML += "<TR><TD class='StatsCatBox' BGCOLOR='#A8D3FF'>Pole Position</TD><TD class='StatsDetBox2' BGCOLOR='#E8F3FF'>" + sField[2] + "</TD></TR>";
   sHTML += "<TR><TD class='StatsCatBox' BGCOLOR='#A8D3FF'>1st Position</TD><TD class='StatsDetBox2' BGCOLOR='#E8F3FF'>" + sField[3] + "</TD></TR>";
   sHTML += "<TR><TD class='StatsCatBox' BGCOLOR='#A8D3FF'>2nd Position</TD><TD class='StatsDetBox2' BGCOLOR='#E8F3FF'>" + sField[4] + "</TD></TR>";
   sHTML += "<TR><TD class='StatsCatBox' BGCOLOR='#A8D3FF'>3rd Position</TD><TD class='StatsDetBox2' BGCOLOR='#E8F3FF'>" + sField[5] + "</TD></TR>";
   sHTML += "<TR><TD class='StatsCatBox' BGCOLOR='#A8D3FF'>Fastest Lap</TD><TD class='StatsDetBox2' BGCOLOR='#E8F3FF'>" + sField[6] + "</TD></TR>";

   if(nField == 7) {
      if(sField[7] != "" && sField[7] != "?") {
         sHTML += "<TR><TD class='StatsCatBox' BGCOLOR='#A8D3FF'>Race Analysis</TD><TD class='StatsDetBox2' BGCOLOR='#E8F3FF'><A HREF='" + sField[7] + "' TARGET='_blank'>Click Here</A></TD></TR>";
      }
   }
   sHTML += "</TABLE>";
}

if(sPassed_Type == "RESULTS") {
   sHTML += "<BR><TABLE BORDER=0 ALIGN=CENTER WIDTH=400>";
   sHTML += "<TR><TD ALIGN=CENTER WIDTH=400><A onclick='Display_Results(" + nPassed_Round + "," + "\"" + sPassed_Final + "\"" + ")'><U>Back To Results</U></A></TD></TR>";
   sHTML += "</TABLE><BR>";
}


document.getElementById("DivText2").innerHTML = sHTML;

}

















