//**************************************************************************************
//
// 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
//
//**************************************************************************************

var bDebugFlag  = false;
var bConvertNum = false;

var nSub;
var nCount;
var nCurPos;
var nStartPos;

var sChamp_Name;
var sChamp_Type;
var sChamp_Year;
var nCurrent_Round;
var nChallenge_RaceNo = 0;
var nRaceLaps;
var nDriver_records;
var nSelectedLap = 1;
var sSaved_Driver;
var sSaved_TableHTML;
var sSaved_Driver;
var sSavedColour;
var sSaved_GridPos;
var sSavedColour;
var sSaved_Driver;
var anSaved_Score        = new Array();
var sSaved_LapPos        = new Array();
var nSaved_FullTotal     = new Array();
var sSaved_StintNo;
var nSaved_LapsCompleted = new Array();
var sDriverColour        = new Array();

var asINITDriver         = new Array();
var asINITGridPos        = new Array();
var asINITFinishingTime  = new Array();
var anINITLapTime        = new Array();

var sData                = new Array();
var anLapTime            = new Array();
var asDriver             = new Array();
var anTotalTime          = new Array();
var anLapsCompleted      = new Array();

var asFinishingTime      = new Array();
var asExtraTime          = new Array();
var asGridPos            = new Array();
var asLapPos             = new Array();

var anDriverBestLap      = new Array();
var nSavedDriverBestLap  = new Array();
var nSavedRaceBestLap = 0;
var nSavedCurrentBestLap = 0;

var bPlaying_Race = false;
var tRace_Timer;
var timerID;

var sSelectedDriver1 = "";
var sSelectedDriver2 = "";
var nSelectedDriver;
var nSelectedTeam1;
var nSelectedTeam2;
var nSelectedInterval;
var nSelectedGraph;

var nOverride_AvgLap = 0;

var anGraphLapTime   = new Array();
var anGraphLapMPH    = new Array();
var anGraphTotalTime = new Array();
var anGraphDiff      = new Array();
var anGraphAvgLap    = new Array();
var anGraphAvgMPH    = new Array();
var anGraphPos       = new Array();

var asChartDriver        = new Array();
var anChartTotalTime     = new Array();
var anChartLapsCompleted = new Array();
var asChartFinishingTime = new Array();
var asChartExtraTime     = new Array();
var asChartGridPos       = new Array();
var anChartStintNo       = new Array();
var sChartDriverColour   = new Array();

var anChartLapTime       = new Array();
var asChartLapPos        = new Array();

var asTrackName          = new Array();
var asTrackTabName       = new Array();
var asTrackDate          = new Array();
var anTrackLength        = new Array();
var asRace_Analysis_Page = new Array();
var asTrackWebSite_Link  = new Array();
var asTrackWeather_Link  = new Array();
var asTrackHistory       = new Array();

var asIndicator		 = new Array();
var asComIndicator       = new Array();

var asDriver_Photo       = new Array();
var asDriver_WebPage     = new Array();


var bNoGridTimes;
var bFirstTime;

var nAvgLap;
var anStintNo = new Array();

var sHTML2;
var sColour1;
var sColour2;

//*************************************************
//COMMENTARY Variables !!

var sCommentary_String;

var asT10_Driver_1        = new Array(10);
var anT10_TotalTime_1     = new Array(10);
var asT10_ExtraTime_1     = new Array(10);
var anT10_LapsCompleted_1 = new Array(10);
var asT10_GridPos_1       = new Array(10);
var anT10_LapTime_1       = new Array(10);
var anT10_LapPos_1        = new Array(10);

var asT10_Driver_2        = new Array(10);
var anT10_TotalTime_2     = new Array(10);
var asT10_ExtraTime_2     = new Array(10);
var anT10_LapsCompleted_2 = new Array(10);
var asT10_GridPos_2       = new Array(10);
var anT10_LapTime_2       = new Array(10);
var anT10_LapPos_2        = new Array(10);

var asDropOut_Driver      = new Array(10);
var anDropOut_LapTime     = new Array(10);
var anDropOut_LapPos      = new Array(10);

var asNewIn_Driver        = new Array(10);
var anNewIn_LapTime       = new Array(10);
var anNewIn_LapPos        = new Array(10);

var asEdit_Rules_Array = new Array(10);
var nEditArrayLen;

var bTeam_Gap_Down;
var bTeam_Gap_Up;

var nTeamGapNEW;
var nTeamGapOLD;

var nFound_Pos;
var nFound_LapTime;

var bLeader_Gap_Down;
var bLeader_Gap_Up;

var nLeaderGapNEW;
var nLeaderGapOLD;

var nBestGain;
var sBestGain_Driver;

var nCommentary_FastestLap = 0;
var nCommentary_FastestLapOn = 0;
var sCommentary_FastestDriver = "";
var sCommentary_WinningDriver = "";
var nCommentary_Saved_BestPos = 0;
var nSelectedCommInterval = 1;

var bCommentary_Switch_On = false;
var bReporting_Switch_On = false;

var bNoRaceAnalysisDisplay;

var asWatchedDrivers = new Array();

bNoRaceAnalysisDisplay = false;
nSelectedCommInterval = 1;

//****************************************************
// RACE CHART VARIABLES !!

var sSelectedRange = "";
var nStartRangeLap = 0;
var nEndRangeLap = 0;
var nLastLap = 0;

sDriverColour[1] = "#003399";
sDriverColour[2] = "#999999";
sDriverColour[3] = "#000000";
sDriverColour[4] = "#CC9900";
sDriverColour[5] = "#003366";
sDriverColour[6] = "#FF9966";
sDriverColour[7] = "#FFFFFF";
sDriverColour[8] = "#993366";
sDriverColour[9] = "#33FFFF";
sDriverColour[10] = "#FF3300";
sDriverColour[11] = "#CCFF33";
sDriverColour[12] = "#666000";
sDriverColour[13] = "#FFCC00";
sDriverColour[14] = "#CC3366";
sDriverColour[15] = "#33FF99";
sDriverColour[16] = "#660066";
sDriverColour[17] = "#66FF00";
sDriverColour[18] = "#99CC00";
sDriverColour[19] = "#FF66CC";
sDriverColour[20] = "#00CC00";
sDriverColour[21] = "#336600";
sDriverColour[22] = "#FF6600";
sDriverColour[23] = "#CCFFCC";
sDriverColour[24] = "#3399FF";
sDriverColour[25] = "#CC99CC";
sDriverColour[26] = "#99CCFF";
sDriverColour[27] = "#9900CC";
sDriverColour[28] = "#663399";
sDriverColour[29] = "#330099";
sDriverColour[30] = "#0000CC";

//****************************************************

//*
//* Fun Cup Changes24/09/05
//*
var asSaved_PitLap       = new Array();
var asINITPitLap         = new Array();
var asPitLap             = new Array();
var asGraphPitLap    = new Array();
var asChartPitLap        = new Array();
var asT10_PitLap_1        = new Array(10);
var asT10_PitLap_2        = new Array(10);
var asDropOut_PitLap      = new Array(10);
var asNewIn_PitLap        = new Array(10);
var aGraphData		  = new Array();
var bNoPitData;
var XScale;
var YScale;
var leftOffset;
var topOffset;
var graphWidth;
var graphHeight;
var whichRaceChart;
var raceChartIMG;
var oldLap;
var oldPos;
var bDistanceDisplay = false;

//sColour1 = "#EBEBFF";
//sColour2 = "#FFFFFF";

sColour1 = "#E8F3FF";
sColour2 = "#D2E8FF";

sSaved_Driver = "";
nSelectedLap = 1;

bFirstTime = true;

//*****************************************
function Get_Fields(sString,aPassedArray) {

var sField;
var nCount;
var n;
var nPos;
var bEndOfString = false;
var sTemp;

nCount = 0;
n = 0;

while (n <= sString.length) {

nPos = sString.indexOf("\t");

if (nPos == -1) {
nPos = (sString.length +1);
bEndOfString = true;
}

nCount = nCount + 1;

sTemp = sString.substring(0, nPos);

if (bConvertNum == true) {
aPassedArray[nCount] = Number(sTemp);
}
else {
aPassedArray[nCount] = sTemp;
}

sString = sString.substring((nPos+1), sString.length);

if (bEndOfString == true) {
n = (sString.length + 1);
}
else {
n = 0;
}

}

return "";

}

//******************************************

function Initialise() {

var nPos;
var nSub;
var nCount;

alert(sChamp_Name + " - " + sChamp_Year + "\r\r" + "Race Analysis for Round " + nCurrent_Round + " - " + asTrackName[nCurrent_Round] + ". \r\rPlease Wait - Loading Data");

bConvertNum = false;
Get_Fields(sData[0],asINITDriver);

bConvertNum = true;
Get_Fields(sData[1],asINITFinishingTime);

bConvertNum = true;
Get_Fields(sData[2],asINITGridPos);

//*** Check to see if Grid Positions are present

bNoGridTimes = true;
bNoPitData = true;

for (nSub = 1; nSub <= nDriver_Records; nSub++) {
if (asINITGridPos[nSub] != 0) {
bNoGridTimes = false;
}

}

//*****************

anINITLapTime[0] = new Array(nDriver_Records);

for (nCount = 3; nCount <= (nRaceLaps+2);nCount++) {

var aTempArray = new Array();

bConvertNum = false;
Get_Fields(sData[nCount], aTempArray);

anINITLapTime[(nCount-2)] = new Array(nDriver_Records);

var sTemp;
var sString;

for (nSub = 1; nSub <= nDriver_Records; nSub++) {

anINITLapTime[0][nSub] = 0;

sTemp = aTempArray[nSub].substring(aTempArray[nSub].length, aTempArray[nSub].length-1);

if (sTemp == "P") {
   bNoPitData = false;
   anINITLapTime[(nCount-2)][nSub] = Number(aTempArray[nSub].substring(0, aTempArray[nSub].length-1));
} else {
   anINITLapTime[(nCount-2)][nSub] = Number(aTempArray[nSub]);
}


}
}

}


//******************************************

function Set_Menu_Text() {

//document.all.DivText1.innerHTML = "";
document.getElementById("DivText1").innerHTML = "";

sHTML = "";
sHTML += "<TABLE BORDER=0 WIDTH=800 ALIGN=CENTER>";
sHTML += "<TR>";
sHTML += "<TD ALIGN=LEFT><A HREF='http://www.TonyBarson.co.uk'><U>Home</U></A></TD>";
sHTML += "<TD ALIGN=CENTER><A onclick='Race_Table()'><U>Lap By Lap Analysis</U></A></TD>";
sHTML += "<TD ALIGN=CENTER><A onclick='Race_Chart()'><U>Race Chart</U></A></TD>";
sHTML += "<TD ALIGN=CENTER><A onclick='Race_Graphs()'><U>Graphs</A></U></TD>";
sHTML += "<TD ALIGN=CENTER><A onclick='Stint_Analysis()'><U>Stint Analysis</A></U></TD>";
sHTML += "<TD ALIGN=CENTER><A onclick='Race_Stats()'><U>Race Stats</A></U></TD>";
sHTML += "<TD ALIGN=CENTER><A onclick='Race_Reporting()'><U>Commentary/Race Reports</A></U></TD>"
sHTML += "</TR>";
sHTML += "</TABLE>";
sHTML += "<BR>";

//document.all.DivText1.innerHTML = sHTML;
document.getElementById("DivText1").innerHTML = sHTML;

}

//*****************************************************************************

function Race_Table(){

var X;
var sHTML;
var nPos;

var anSaved_Score = new Array(nRaceLaps);
var sSaved_LapPos = new Array(nRaceLaps);

document.getElementById("DivText2").innerHTML = "<P></P>";
document.getElementById("DivText3").innerHTML = "<P></P>";
document.getElementById("DivText4").innerHTML = "<P></P>";

sSaved_Driver = "";
sSaved_TableHTML = "";

//*****************************************************************************
//*** Work out Extra time taken to cross the grid and start first lap of race !
//*****************************************************************************
clearTimeout(timerID);

if(bFirstTime == true) {

   nStartRangeLap = 1;
   nEndRangeLap = nStartRangeLap + 19;

   if (nEndRangeLap > nRaceLaps) {
      nEndRangeLap = nRaceLaps;
   }

   for (X = 1; X <= nDriver_Records; X++) {

       anTotalTime[X] = 0;
       asWatchedDrivers[X] = "";
       asDriver[X] = asINITDriver[X];
       asFinishingTime[X] = asINITFinishingTime[X];
       asGridPos[X] = asINITGridPos[X];

       for (n = 1; n <= nRaceLaps; n++) {
          anTotalTime[X] = anTotalTime[X] + anINITLapTime[n][X];
       }

       if(sChamp_Type == "CAR") {
            asExtraTime[X] = 0;
       } else {
            asExtraTime[X] = asINITFinishingTime[X] - anTotalTime[X];
       }


   }         

   for (n = 0; n <= nRaceLaps; n++) {

       anLapTime[n] = new Array();
       asLapPos[n] = new Array();
      
       for (X = 1; X <= nDriver_Records; X++) {
           if (n == 0) { 
              anLapTime[n][X] = 0;
              asLapPos[n][X] = 0;
           } else {
              anLapTime[n][X] = anINITLapTime[n][X];

              asLapPos[n][X] = 0;
           }
       }
   }

   if(bNoGridTimes == false) {

      for (n = 1; n <= nDriver_Records; n++) {
          asLapPos[1][n] = asINITGridPos[n];
      }
   }

   for (n = 0; n <= nRaceLaps; n++) {
       for (X = 1; X <= nDriver_Records; X++) {

           if((anLapTime[n][X] <= nSavedRaceBestLap && anLapTime[n][X] != 0) || nSavedRaceBestLap == 0) {
              nSavedRaceBestLap = anLapTime[n][X];
           }
       } 
   }

   //********** Work out Avg Lap

   if(nOverride_AvgLap != 0){
      nAvgLap = nOverride_AvgLap;
   }else{
      var nLap;
      var nGrandTotal;
      var nDriver_Total;
      var nDriver_AVG;
      var nDriver_Laps;

      nAvgLap = 0;
      nGrandTotal = 0;
 
      nDriver_Total = 0;
      nDriver_AVG = 0;
      nDriver_Laps = 0;

      for (z = 1; z <= nDriver_Records; z++) {
          
          nDriver_Total = 0;
          nDriver_AVG = 0;
          nDriver_Laps = 0;

          for (nLap = 1; nLap <= nRaceLaps; nLap++) {
              if(anINITLapTime[nLap][z] != 0){
                  nDriver_Total = nDriver_Total + anINITLapTime[nLap][z];
                  nDriver_Laps++; 
              }
          }
      
         nDriver_AVG = (nDriver_Total / nDriver_Laps);
         nGrandTotal = nGrandTotal + nDriver_AVG;
      }

   }

   nAvgLap = nGrandTotal / nDriver_Records;

   nAvgLap = (nAvgLap * 1.20);

}

if(nSelectedLap > 1){
   Lap_Positions((nSelectedLap-1),true);
}

Lap_Positions(nSelectedLap,false);

if(bFirstTime == true){
   bFirstTime = false;
   if(bNoGridTimes == true){
      for (n = 1; n <= nDriver_Records; n++) {
          asGridPos[n] = n;
      }
   }
}


//************************************************************************
//** COMMENTARY - Store Top Ten from this lap
//************************************************************************

for (x = 1; x <= 10; x++) {
    asT10_Driver_2[x] = asDriver[x];
    anT10_TotalTime_2[x] = anTotalTime[x];
    asT10_ExtraTime_2[x] = asExtraTime[x];
    anT10_LapsCompleted_2[x] = anLapsCompleted[x];
    asT10_GridPos_2[x] = asGridPos[x];
    anT10_LapTime_2[x] = anLapTime[nSelectedLap][x];
    anT10_LapPos_2[x] = x;
    asT10_PitLap_2[x] = aGraphData[nSelectedLap][x].getPitLap();
}

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>Race Analysis for Round " + nCurrent_Round + " - " + asTrackDate[nCurrent_Round] + "</TD></TR>";
}else if(sChamp_Type == "ENDURANCE" || sChamp_Type == "CAR"){
       if(sChamp_Name == "Endurance Series - The Challenge"){
          sHTML += "<TR><TD class='HeadBox2' BGCOLOR='#A8D3FF' ALIGN=CENTER>Race Analysis for Round " + nCurrent_Round + " - Race " + nChallenge_RaceNo + " - " + asTrackDate[nCurrent_Round] + "</TD></TR>";
       }else{
          sHTML += "<TR><TD class='HeadBox2' BGCOLOR='#A8D3FF' ALIGN=CENTER>Race Analysis for Round " + nCurrent_Round + " - " + asTrackDate[nCurrent_Round] + "</TD></TR>";
       }
}else if(sChamp_Type == "CAR"){
        sHTML += "<TR><TD class='HeadBox2' BGCOLOR='#A8D3FF' ALIGN=CENTER>Race Analysis for Round " + nCurrent_Round + " - " + asTrackDate[nCurrent_Round] + "</TD></TR>";
}

sHTML += "</TABLE><BR>";

sHTML += "<TABLE class='HeadTable3' BORDER=1 ALIGN=CENTER WIDTH=600>";

if(sChamp_Type == "SPRINT"){
   sHTML += "<TR><TD class='HeadBox3' BGCOLOR='#A8D3FF' ALIGN=CENTER>Circuit: " + asTrackName[nCurrent_Round] + " - Length: " + anTrackLength[nCurrent_Round] + " Metres</TD></TR>";
}else if(sChamp_Type == "ENDURANCE" || sChamp_Type == "CAR"){
        sHTML += "<TR><TD class='HeadBox3' BGCOLOR='#A8D3FF' ALIGN=CENTER>Circuit: " + asTrackName[nCurrent_Round] + " - Length: " + anTrackLength[nCurrent_Round] + " Metres</TD></TR>";
}else if(sChamp_Type == "CAR"){
        sHTML += "<TR><TD class='HeadBox3' BGCOLOR='#A8D3FF' ALIGN=CENTER>Circuit: " + asTrackName[nCurrent_Round] + " - Length: " + anTrackLength[nCurrent_Round] + " Metres</TD></TR>";
}

sHTML += "</TABLE><BR>";

sHTML += "<TABLE class='ControlTable' BORDER=1 ALIGN=CENTER WIDTH=600>";
sHTML += "<TR><TD>";

sHTML += "<TABLE BORDER=0 ALIGN=CENTER WIDTH=600>";
sHTML += "<TR>";

sHTML += "<TD class='ControlBox' BGCOLOR='#E8F3FF' ALIGN=CENTER WIDTH=50><INPUT TYPE='BUTTON' VALUE='Prev' onClick='Previous_Lap()'></INPUT></TD>";

sHTML += "<TD class='ControlBox' BGCOLOR='#E8F3FF' ALIGN=CENTER WIDTH=200>";

sHTML += " Select Lap : <SELECT NAME='SelectLap' onChange='Prepare_for_Recalc()'>";

for (nLoop = 1; nLoop <= nRaceLaps; nLoop++) {

    if(nLoop == nSelectedLap){
       sHTML += "<OPTION SELECTED>" + nLoop;
    }else{
       sHTML += "<OPTION>" + nLoop;
    }
}

sHTML += "</SELECT>";
sHTML += "</TD>";

sHTML += "<TD class='ControlBox' BGCOLOR='#E8F3FF' ALIGN=CENTER WIDTH=150><INPUT TYPE='BUTTON' VALUE='Next' onClick='Next_Lap()'> <INPUT TYPE='BUTTON' VALUE='Play' onClick='Play_Race()'></INPUT> <INPUT TYPE='BUTTON' VALUE='Stop' onClick='Stop_Race();'></INPUT></TD>"

sHTML += "<TD class='ControlBox' BGCOLOR='#E8F3FF' ALIGN=CENTER WIDTH=200>";
sHTML += " View : <SELECT NAME='SelectView' onChange='Prepare_for_Recalc()'>";

if(bDistanceDisplay == false){
   sHTML += "<OPTION SELECTED>Lap Times";
   sHTML += "<OPTION>Distance Graph";
}else{
   sHTML += "<OPTION>Lap Times";
   sHTML += "<OPTION SELECTED>Distance Graph";
}

sHTML += "</SELECT>";

sHTML += "</TD>";

//*********

sHTML += "</TR>";
sHTML += "</TABLE></TD>";

sHTML += "</TR>";
sHTML += "</TABLE><BR>";

sHTML += "<TABLE class='DetTable' BORDER='1' WIDTH=900 ALIGN=CENTER>";

sHTML += "<TR>";
sHTML += "<TD class='DetHeadBox' BGCOLOR='#A8D3FF' WIDTH=30 VALIGN=TOP ALIGN=LEFT>Pos</TD>";
sHTML += "<TD class='DetHeadBox' BGCOLOR='#A8D3FF' WIDTH=40 VALIGN=TOP ALIGN=LEFT>Lap Gain</TD>";

if(bNoGridTimes == false){
   sHTML += "<TD class='DetHeadBox' BGCOLOR='#A8D3FF' WIDTH=50 VALIGN=TOP ALIGN=LEFT>Grid Gain</TD>";
}

if(bDistanceDisplay == false) {
   sHTML += "<TD class='DetHeadBox' BGCOLOR='#A8D3FF' WIDTH=30 VALIGN=TOP ALIGN=LEFT>Stint</TD>";
}

sHTML += "<TD class='DetHeadBox' BGCOLOR='#A8D3FF' WIDTH=200 VALIGN=TOP ALIGN=LEFT>Entrant</TD>";

sHTML += "<TD class='DetHeadBox' BGCOLOR='#A8D3FF' WIDTH=100 VALIGN=TOP ALIGN=CENTER>Lap Time</TD>";

if(bDistanceDisplay == true) {
   	sHTML += "<TD class='DetHeadBox' BGCOLOR='#A8D3FF' WIDTH=650 VALIGN=TOP ALIGN=CENTER>Distance</TD>";
} else {
	sHTML += "<TD class='DetHeadBox' BGCOLOR='#A8D3FF' WIDTH=100 VALIGN=TOP ALIGN=CENTER>Speed (mph)</TD>";
	sHTML += "<TD class='DetHeadBox' BGCOLOR='#A8D3FF' WIDTH=50 VALIGN=TOP ALIGN=CENTER>Laps</TD>";

	sHTML += "<TD class='DetHeadBox' BGCOLOR='#A8D3FF' WIDTH=100 VALIGN=TOP ALIGN=CENTER>Race Time</TD>";
	sHTML += "<TD class='DetHeadBox' BGCOLOR='#A8D3FF' WIDTH=100 VALIGN=TOP ALIGN=CENTER>Gap To Next</TD>";
	sHTML += "<TD class='DetHeadBox' BGCOLOR='#A8D3FF' WIDTH=100 VALIGN=TOP ALIGN=CENTER>Gap To Leader</TD>";
	sHTML += "<TD class='DetHeadBox' BGCOLOR='#A8D3FF' WIDTH=100 VALIGN=TOP ALIGN=CENTER>Best Lap Time</TD>";
	sHTML += "<TD class='DetHeadBox' BGCOLOR='#A8D3FF' WIDTH=100 VALIGN=TOP ALIGN=CENTER>Avg. Lap Time</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;
    }

    if(anLapTime[nSelectedLap][z] == anDriverBestLap[z]) {
       sColour = "#33FFFF";
    }


    if(Seconds_To_Time(anLapTime[nSelectedLap][z]) == Seconds_To_Time(nSavedCurrentBestLap)) {
       sColour = "#66FF66";
    }


    if(Seconds_To_Time(anLapTime[nSelectedLap][z]) == Seconds_To_Time(nSavedRaceBestLap)) {
       sColour = "#FFFF66";
    }

    if(anLapTime[nSelectedLap][z] > nAvgLap) {
       sColour = "#FF3366";
    }

    sHTML += "<TD class='DetBox' BGCOLOR='" + sColour + "' WIDTH=30 VALIGN=TOP ALIGN=LEFT>" + z + "</TD>";

//** WORK OUT POSITIONS ON PREVIOUS LAP

    if(nSelectedLap > 1){
       sGain = z - asLapPos[(nSelectedLap-1)][z];

       if (sGain < 0)  {
          sGain = sGain * -1;
       }

       if((z - asLapPos[(nSelectedLap-1)][z]) < 0){
          sHTML += "<TD class='DetBox' BGCOLOR='" + sColour + "' WIDTH=40 VALIGN=TOP ALIGN=LEFT><IMG ALT='Position Gained' SRC='UP_RED.png'>" + sGain + "</TD>";
       }else if((z - asLapPos[(nSelectedLap-1)][z]) > 0){
              sHTML += "<TD class='DetBox' BGCOLOR='" + sColour + "' WIDTH=40 VALIGN=TOP ALIGN=LEFT><IMG ALT='Position Lost' SRC='DOWN_RED.png'>" + sGain + "</TD>";
       }else if((z - asLapPos[(nSelectedLap-1)][z]) == 0){
              sHTML += "<TD class='DetBox' BGCOLOR='" + sColour + "' WIDTH=40 VALIGN=TOP ALIGN=LEFT><IMG ALT='Same Position' SRC='SAME_RED.png'></TD>";
       }
    }else{
       sGain = (z - asGridPos[z]);

       if (sGain < 0)  {
          sGain = sGain * -1;
       }

       if((z - asGridPos[z]) < 0){
          sHTML += "<TD class='DetBox' BGCOLOR='" + sColour + "' WIDTH=40 VALIGN=TOP ALIGN=LEFT><IMG ALT='Position Gained' SRC='UP_RED.png'>" + sGain + "</TD>";
       }else if((z - asGridPos[z]) > 0){
              sHTML += "<TD class='DetBox' BGCOLOR='" + sColour + "' WIDTH=40 VALIGN=TOP ALIGN=LEFT><IMG ALT='Position Lost' SRC='DOWN_RED.png'>" + sGain + "</TD>";
       }else if((z - asGridPos[z]) == 0){
              sHTML += "<TD class='DetBox' BGCOLOR='" + sColour + "' WIDTH=40 VALIGN=TOP ALIGN=LEFT><IMG ALT='Same Position' SRC='SAME_RED.png'></TD>";
       }
    }

//** WORK OUT POSITIONS GAINED/LOST FROM GRID SLOT

    if(bNoGridTimes == false){
  
       sGain = (z - asGridPos[z]);

       if (sGain < 0)  {
          sGain = sGain * -1;
       }

       if((z - asGridPos[z]) < 0){
          sHTML += "<TD class='DetBox' BGCOLOR='" + sColour + "' WIDTH=50 VALIGN=TOP ALIGN=LEFT><IMG ALT='Position Gained' SRC='UP_BLUE.png'>" + sGain + "&nbsp(" + asGridPos[z] + ")</TD>";
       }else if((z - asGridPos[z]) > 0){
              sHTML += "<TD class='DetBox' BGCOLOR='" + sColour + "' WIDTH=50 VALIGN=TOP ALIGN=LEFT><IMG ALT='Position Lost' SRC='DOWN_BLUE.png'>" + sGain + "&nbsp(" + asGridPos[z] + ")</TD>";
       }else if((z - asGridPos[z]) == 0){
              sHTML += "<TD class='DetBox' BGCOLOR='" + sColour + "' WIDTH=50 VALIGN=TOP ALIGN=LEFT><IMG ALT='Same Position' SRC='SAME_BLUE.png'>" + sGain + "&nbsp(" + asGridPos[z] + ")</TD>";
       }
    }

    if(bDistanceDisplay == false) {
    	sHTML += "<TD class='DetBox' BGCOLOR='" + sColour + "' WIDTH=30 VALIGN=TOP ALIGN=LEFT>" + anStintNo[z] + "</TD>";
    }	 	

    sHTML += "<TD class='DetBox' BGCOLOR='" + sColour + "' WIDTH=200 VALIGN=TOP ALIGN=LEFT>";

    sHTML += "<TABLE WIDTH=200 ALIGN=LEFT BORDER=0><TR><TD class='DetBox' WIDTH=180 ALIGN=LEFT>";

    if (nSelectedLap == nRaceLaps) {
       if (z == 1) {
          sHTML += "<IMG SRC='CheqFlag.png'>" + "<A onclick='Stint_Stats(" + "\"" + asDriver[z] + "\"" + ");'><U>" + asDriver[z] + "</U></A></TD><TD class='DetBox' WIDTH=20 ALIGN=RIGHT><IMG ALT='Podium - Winner' SRC='Gold_Cup.png'></TD>";
       } else if (z == 2) {
          sHTML += "<IMG SRC='CheqFlag.png'>" + "<A onclick='Stint_Stats(" + "\"" + asDriver[z] + "\"" + ");'><U>" + asDriver[z] + "</U></A></TD><TD class='DetBox' WIDTH=20 ALIGN=RIGHT><IMG ALT='Podium - 2nd Position' SRC='Silver_Cup.png'></TD>";
       } else if (z == 3) {
          sHTML += "<IMG SRC='CheqFlag.png'>" + "<A onclick='Stint_Stats(" + "\"" + asDriver[z] + "\"" + ");'><U>" + asDriver[z] + "</U></A></TD><TD class='DetBox' WIDTH=20 ALIGN=RIGHT><IMG ALT='Podium - 3rd Position' SRC='Bronze_Cup.png'></TD>";
       } else if (z > 3) {
          sHTML += "<IMG SRC='CheqFlag.png'>" + "<A onclick='Stint_Stats(" + "\"" + asDriver[z] + "\"" + ");'><U>" + asDriver[z] + "</U></A></TD>";
       }
    } else {
       sHTML += "<A onclick='Stint_Stats(" + "\"" + asDriver[z] + "\"" + ");'><U>" + asDriver[z] + "</U></A></TD>";
    }

 
    if(TrimString(aGraphData[nSelectedLap][z].getPitLap()) != "") {
        sHTML += "<TD class='DetBox' WIDTH=20 ALIGN=RIGHT><IMG ALT='" + TrimString(aGraphData[nSelectedLap][z].getPitLap()) + " - " + Get_Indicator_Description(TrimString(aGraphData[nSelectedLap][z].getPitLap()),"1") + "' SRC='" + TrimString(aGraphData[nSelectedLap][z].getPitLap()) + ".png'></TD>";
    }

    if (whichRaceChart == "NEW") {
       if(aGraphData[nSelectedLap][z].getMediaLink1() != "") {
          sHTML += "<TD class='DetBox' WIDTH=20 ALIGN=RIGHT><A HREF='" + aGraphData[nSelectedLap][z].getMediaLink1() + "' TARGET='_blank'><IMG BORDER='0' ALT='Media Link 1 - " + aGraphData[nSelectedLap][z].getMediaLink1() + "' SRC='Media.png'></A></TD>";
       }
    }

    if (whichRaceChart == "NEW") {
       if(aGraphData[nSelectedLap][z].getMediaLink2() != "") {
          sHTML += "<TD class='DetBox' WIDTH=20 ALIGN=RIGHT><A HREF='" + aGraphData[nSelectedLap][z].getMediaLink2() + "' TARGET='_blank'><IMG BORDER='0' ALT='Media Link 2 - " + aGraphData[nSelectedLap][z].getMediaLink2() + "' SRC='Media.png'></A></TD>";
       }
    }
 

    sHTML += "</TR></TABLE>";

    if(anLapTime[nSelectedLap][z] != 0){
       sHTML += "<TD class='DetBox' BGCOLOR='" + sColour + "' WIDTH=100 VALIGN=TOP ALIGN=RIGHT>";
       sHTML += Seconds_To_Time(anLapTime[nSelectedLap][z]) + "</TD>";
    }else{
       sHTML += "<TD class='DetBox' BGCOLOR='" + sColour + "' WIDTH=100 VALIGN=TOP ALIGN=RIGHT>";
       sHTML += "-----</TD>";
    }

    if(bDistanceDisplay == false) {
	    if(anLapTime[nSelectedLap][z] != 0) {
       		if(sChamp_Type == "SPRINT"){
          		sHTML += "<TD class='DetBox' BGCOLOR='" + sColour + "' WIDTH=100 VALIGN=TOP ALIGN=RIGHT>";
          		sHTML += format_MPH(3600 / (((anLapTime[nSelectedLap][z] / anTrackLength[nCurrent_Round])*1000)*1.6093)) + "</TD>";
	       }else if(sChamp_Type == "ENDURANCE" || sChamp_Type == "CAR"){
        	      sHTML += "<TD class='DetBox' BGCOLOR='" + sColour + "' WIDTH=100 VALIGN=TOP ALIGN=RIGHT>";
	              sHTML += format_MPH(3600 / (((anLapTime[nSelectedLap][z] / anTrackLength[nCurrent_Round])*1000)*1.6093)) + "</TD>";
	       }else if(sChamp_Type == "CAR"){
        	      sHTML += "<TD class='DetBox' BGCOLOR='" + sColour + "' WIDTH=100 VALIGN=TOP ALIGN=RIGHT>";
	              sHTML += format_MPH(3600 / (((anLapTime[nSelectedLap][z] / anTrackLength[nCurrent_Round])*1000)*1.6093)) + "</TD>";
	       }
	    }else{
        	sHTML += "<TD class='DetBox' BGCOLOR='" + sColour + "' WIDTH=100 VALIGN=TOP ALIGN=RIGHT>";
	        sHTML += "-----</TD>";
	    }
    }

    if(bDistanceDisplay == false) {
	    sHTML += "<TD class='DetBox' BGCOLOR='" + sColour + "' WIDTH=50 VALIGN=TOP ALIGN=RIGHT>";
	    sHTML += anLapsCompleted[z] + "</TD>";

	    sHTML += "<TD class='DetBox' BGCOLOR='" + sColour + "' WIDTH=100 VALIGN=TOP ALIGN=RIGHT>";
	    sHTML += Seconds_To_Time(anTotalTime[z]) + "</TD>";

	//Gap to next team

	    if(z == 1){
	       sHTML += "<TD class='DetBox' BGCOLOR='" + sColour + "' WIDTH=100 VALIGN=TOP ALIGN=RIGHT>";
	       sHTML += "0</TD>";
	    }else{
	       if(anLapsCompleted[z] == anLapsCompleted[z-1]){ ;
	          nPoints_diff = (TruncNum(anTotalTime[z]) - TruncNum(anTotalTime[z-1]));

	          sHTML += "<TD class='DetBox' BGCOLOR='" + sColour + "' WIDTH=100 VALIGN=TOP ALIGN=RIGHT>";
        	  sHTML += Seconds_To_Time(nPoints_diff) + "</TD>";
	       }else{
        	  sHTML += "<TD class='DetBox' BGCOLOR='" + sColour + "' WIDTH=100 VALIGN=TOP ALIGN=RIGHT>";

	          if((anLapsCompleted[z-1] - anLapsCompleted[z]) == 1){
        	     sHTML += "<B>" + (anLapsCompleted[z-1] - anLapsCompleted[z]) + " Lap</B></TD>";
	          }else{
        	     sHTML += "<B>" + (anLapsCompleted[z-1] - anLapsCompleted[z]) + " Laps</B></TD>";
	          }
	       }
	    }

	// gap to leader
	    if(z == 1){
	       sHTML += "<TD class='DetBox' BGCOLOR='" + sColour + "' WIDTH=100 VALIGN=TOP ALIGN=RIGHT>";
	       sHTML += "0</TD>";
	    }else{
	       if(anLapsCompleted[z] == anLapsCompleted[1]){ ;
	          nPoints_diff = (TruncNum(anTotalTime[z]) - TruncNum(anTotalTime[1]));

	          sHTML += "<TD class='DetBox' BGCOLOR='" + sColour + "' WIDTH=100 VALIGN=TOP ALIGN=RIGHT>";
        	  sHTML += Seconds_To_Time(nPoints_diff) + "</TD>";
	       }else{
        	  sHTML += "<TD class='DetBox' BGCOLOR='" + sColour + "' WIDTH=100 VALIGN=TOP ALIGN=RIGHT>";

	          if((anLapsCompleted[1] - anLapsCompleted[z]) == 1){
        	     sHTML += "<B>" + (anLapsCompleted[1] - anLapsCompleted[z]) + " Lap</B></TD>";
	          }else{
        	     sHTML += "<B>" + (anLapsCompleted[1] - anLapsCompleted[z]) + " Laps</B></TD>";
	          }
	       }
	    }

	    if(anDriverBestLap[z] != 0){
	       sHTML += "<TD class='DetBox' BGCOLOR='" + sColour + "' WIDTH=100 VALIGN=TOP ALIGN=RIGHT>";
	       sHTML += Seconds_To_Time(anDriverBestLap[z]) + "</TD>";
	    }else{
	       sHTML += "<TD class='DetBox' BGCOLOR='" + sColour + "' WIDTH=100 VALIGN=TOP ALIGN=RIGHT>";
	       sHTML += "-----</TD>";
	    }


	    if(anTotalTime[z] != 0){
       		sHTML += "<TD class='DetBox' BGCOLOR='" + sColour + "' WIDTH=100 VALIGN=TOP ALIGN=RIGHT>";
	       	sHTML += Seconds_To_Time(anTotalTime[z]/anLapsCompleted[z]) + "</TD>";
	    }else{
	       sHTML += "<TD class='DetBox' BGCOLOR='" + sColour + "' WIDTH=100 VALIGN=TOP ALIGN=RIGHT>";
	       sHTML += "-----</TD>";
	    }
   }


    if(bDistanceDisplay == true) {
	sHTML += "<TD class='DetBox' BGCOLOR='" + sColour + "' WIDTH=650 VALIGN=TOP ALIGN=LEFT>";

	    if(z == 1){
	         sHTML += "<IMG SRC='Bar_Start.png' WIDTH=1 HEIGHT=20></IMG><IMG SRC='Bar1.png' WIDTH=0 HEIGHT=20></IMG><IMG SRC='Bar_Shadow.png' WIDTH=2 HEIGHT=18></IMG>&nbsp &nbsp<IMG SRC='Car.png'>&nbsp &nbsp" + Seconds_To_Time(anTotalTime[z]) + "</TD>";
	    }else{
	       if(anLapsCompleted[z] == anLapsCompleted[1]){ ;
	          nPoints_diff = (TruncNum(anTotalTime[z]) - TruncNum(anTotalTime[1]));
		  if(nPoints_diff > (2*nAvgLap)) {
    			  sHTML += "<IMG SRC='Bar_Start.png' WIDTH=1 HEIGHT=20></IMG><IMG SRC='Bar1.png' WIDTH=300 HEIGHT=20></IMG><IMG SRC='Bar_Shadow.png' WIDTH=2 HEIGHT=18></IMG>&nbsp &nbsp<IMG SRC='Car.png'>&nbsp &nbsp+" + Seconds_To_Time(nPoints_diff);
        		  sHTML += "</TD>";
		  } else {
    			  sHTML += "<IMG SRC='Bar_Start.png' WIDTH=1 HEIGHT=20></IMG><IMG SRC='Bar1.png' WIDTH=" + ((300/(2*nAvgLap))*nPoints_diff) + " HEIGHT=20></IMG><IMG SRC='Bar_Shadow.png' WIDTH=2 HEIGHT=18></IMG>&nbsp &nbsp<IMG SRC='Car.png'>&nbsp &nbsp+" + Seconds_To_Time(nPoints_diff);
        		  sHTML += "</TD>";
		  }
	       }else{
	          if((anLapsCompleted[1] - anLapsCompleted[z]) == 1){
        	     sHTML += "<IMG SRC='Bar_Start.png' WIDTH=1 HEIGHT=20></IMG><IMG SRC='Bar1.png' WIDTH=300 HEIGHT=20></IMG><IMG SRC='Bar_Shadow.png' WIDTH=2 HEIGHT=18></IMG>&nbsp &nbsp<IMG SRC='Car.png'>&nbsp &nbsp" + "<B>+" + (anLapsCompleted[1] - anLapsCompleted[z]) + " Lap</B></TD>";
	          }else{
        	     sHTML += "<IMG SRC='Bar_Start.png' WIDTH=1 HEIGHT=20></IMG><IMG SRC='Bar1.png' WIDTH=300 HEIGHT=20></IMG><IMG SRC='Bar_Shadow.png' WIDTH=2 HEIGHT=18></IMG>&nbsp &nbsp<IMG SRC='Car.png'>&nbsp &nbsp" + "<B>+" + (anLapsCompleted[1] - anLapsCompleted[z]) + " Laps</B></TD>";
	          }
	       }
	    }

    }


    sSaved_TableHTML = sHTML;
}


sHTML += "<TABLE WIDTH=900 ALIGN=CENTER>";
sHTML += "<TR>";
sHTML += "<TD WIDTH=20 BGCOLOR='#33FFFF'></TD><TD WIDTH=200> = Fastest Personal Lap</TD>";
sHTML += "<TD WIDTH=20 BGCOLOR='#66FF66'></TD><TD WIDTH=200> = Fastest On Current Lap</TD>";
sHTML += "<TD WIDTH=20 BGCOLOR='#FFFF66'></TD><TD WIDTH=150> = Fastest Race Lap</TD>";
sHTML += "<TD WIDTH=20 BGCOLOR='#FF3366'></TD><TD WIDTH=150> = 'Long' Lap</TD>";
sHTML += "</TR>";
sHTML += "</TABLE>";

sHTML += "</TR>";
sHTML += "</TABLE>";

sSaved_TableHTML = sHTML;

document.getElementById("DivText2").innerHTML = sSaved_TableHTML;

if (bCommentary_Switch_On == true) {
   if (nSelectedLap == 1) {
      for (x = 1; x <= 10; x++) {
          asT10_Driver_1[x] = asT10_Driver_2[x];
          anT10_TotalTime_1[x] = anT10_TotalTime_2[x];
          asT10_ExtraTime_1[x] = asT10_ExtraTime_2[x];
          anT10_LapsCompleted_1[x] = anT10_LapsCompleted_2[x];
          asT10_GridPos_1[x] = asT10_GridPos_2[x];
          anT10_LapTime_1[x] = anT10_LapTime_2[x];
          anT10_LapPos_1[x] = anT10_LapPos_2[x];
          asT10_PitLap_1[x] = asT10_PitLap_2[x];
      }
   }
   Commentary(nSelectedLap);
}

bNoRecalc = false;

if (bPlaying_Race == true) {
   tRace_Timer = setTimeout('Next_Lap()', 2000);
}

}

//***********************************************************************************

function Play_Race() {

bPlaying_Race = true;

tRace_Timer = setTimeout('Next_Lap()', 2000);

}

//***********************************************************************************

function Stop_Race() {

bPlaying_Race = false;

clearTimeout(tRace_Timer);

}


//***********************************************************************************

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 Previous_Lap(){

if(nSelectedLap >  1){
  nSelectedLap = nSelectedLap - 1;

  Race_Table();
}

}

//********************************************************************************************

function Next_Lap(){

if(nSelectedLap < nRaceLaps){
  nSelectedLap = nSelectedLap + 1;

  Race_Table();
}

}

//********************************************************************************************

function Prepare_for_Recalc(){

var nIndex;

//nIndex = document.all.SelectLap.selectedIndex;
//nSelectedLap = Number(document.all.SelectLap.options(nIndex).text);

nIndex = document.Form1.SelectLap.selectedIndex;
nSelectedLap = Number(document.Form1.SelectLap.options[nIndex].text);

nIndex = document.Form1.SelectView.selectedIndex;
var sSelectedView = document.Form1.SelectView.options[nIndex].text;

if(sSelectedView == "Distance Graph") {
	bDistanceDisplay = true;
} else {
	bDistanceDisplay = false;
}

Race_Table();

}

//********************************************************************************************

function TruncNum(nPassedValue) {

var sTempString;

sTempString = String(nPassedValue);

nPos = sTempString.indexOf(".");

if (nPos == -1) {
   return nPassedValue;
}

if (sTempString.length > (nPos + 3)) {
   sTempString = sTempString.substring(0, (nPos + 4));
}

return Number(sTempString);

}

//********************************************************************************************

function Seconds_To_Time(nSeconds){

var nHours;
var nMins;
var nSecs;

var nRemainder;
var nPos;

nHours = parseInt(nSeconds / 3600);

nRemainder = nSeconds - (nHours * 3600);

nMins = parseInt(nRemainder / 60);

nSecs = nSeconds - (nMins * 60);

//*** Now Work out remainder to 3 dec places

nRemainder = nSecs;

nSecs = parseInt(nSecs);

var sStrMins = "";
var sStrSecs = "";
var sStrRemainder = "";

sStrRemainder = String(nRemainder);

nPos = sStrRemainder.indexOf(".");

if(nPos == -1){
   sStrRemainder = sStrRemainder + ".000";
}else{
   sStrRemainder = sStrRemainder + "000";
}

nPos = sStrRemainder.indexOf(".");

sStrRemainder = sStrRemainder.substring(nPos, (nPos+4));

sStrMins = "00" + String(parseInt(nMins));
sStrMins = sStrMins.substring(sStrMins.length-2,sStrMins.length+1);

sStrSecs = "00" + String(parseInt(nSecs));
sStrSecs = sStrSecs.substring(sStrSecs.length-2,sStrSecs.length+1);

//*** Now return value

if(nHours > 0){
   return nHours + ":" + sStrMins + ":" + sStrSecs + sStrRemainder;
} 

if(nMins > 0){
   return nMins + ":" + sStrSecs + sStrRemainder;
} 

return nSecs + sStrRemainder;

}

//********************************************************************************************

function format_MPH(nValue){

var nPos;

nPos = String(nValue).indexOf(".");

if(nPos == -1){
   return nValue + ".000";
}else{
   nValue = nValue + "000";
   nPos = nValue.indexOf(".");
   return nValue.substring(0, nPos+4);
}

}

//***********************************************************************************************

//*******************************************************

function Lap_Positions(nPassed_Lap, bLastLapPos){

var X = 0;
var Y = 0;
var nMatch = 0;

nSavedCurrentBestLap = 0;

for (X = 1; X <= nDriver_Records; X++) {

    for (Y = 1; Y <= nDriver_Records; Y++) {
        if (asDriver[X] == asINITDriver[Y]) {  
           nMatch = Y;
           Y = (nDriver_Records + 1);
        }
    }

    anTotalTime[X] = asExtraTime[X];
    anLapsCompleted[X] = 0;
    anStintNo[X] = 1;
    anDriverBestLap[X] = 0;

    for (n = 1; n <= nPassed_Lap; n++) {

        anLapTime[n][X] = anINITLapTime[n][nMatch];

        if((anLapTime[n][X] <= anDriverBestLap[X] && anLapTime[n][X] != 0) || anDriverBestLap[X] == 0) {
           anDriverBestLap[X] = anLapTime[n][X];
        }

        if(n == nPassed_Lap) {
           if((anLapTime[n][X] <= nSavedCurrentBestLap && anLapTime[n][X] != 0) || nSavedCurrentBestLap == 0) {
              nSavedCurrentBestLap = anLapTime[n][X];
           }
        }

        anTotalTime[X] = anTotalTime[X] + anINITLapTime[n][nMatch];
        if(anINITLapTime[n][nMatch] != 0){
           anLapsCompleted[X] = anLapsCompleted[X] + 1;
        } 

        if(anINITLapTime[n][nMatch] > nAvgLap){
           anStintNo[X] = anStintNo[X] + 1;
        } 
    }

}

//**************************
//BUBBLE SORT Into Total order
//**************************

bCycle_Finished = false;

while(bCycle_Finished == false) {
   bCycle_Finished = true;

   for (n = 1; n <= (nDriver_Records-1); n++) {
       if(anTotalTime[n] > anTotalTime[n+1]){
          //*** SAVE ARRAY VALUES HERE;
          sSaved_Driver = asDriver[n];
          nSaved_FullTotal = anTotalTime[n];
          nSaved_LapsCompleted = anLapsCompleted[n];
          sSaved_FinishingTime = asFinishingTime[n];
          sSaved_ExtraTime = asExtraTime[n];
          sSaved_GridPos = asGridPos[n];
          sSaved_StintNo = anStintNo[n];
          sSavedColour = sDriverColour[n];
          nSavedDriverBestLap = anDriverBestLap[n];

          for (X = (nPassed_Lap - 1); X <= nPassed_Lap; X++) {
              anSaved_Score[X] = anLapTime[X][n];
              sSaved_LapPos[X] = asLapPos[X][n];
          }
          //*****;

          //*****;
          asDriver[n] = asDriver[n+1];
          anTotalTime[n] = anTotalTime[n+1];
          anLapsCompleted[n] = anLapsCompleted[n+1];
          asFinishingTime[n] = asFinishingTime[n+1];
          asExtraTime[n] = asExtraTime[n+1];
          asGridPos[n] = asGridPos[n+1];
          anStintNo[n] = anStintNo[n+1];
          sDriverColour[n] = sDriverColour[n+1];
          anDriverBestLap[n] = anDriverBestLap[n+1];

          for (X = (nPassed_Lap - 1); X <= nPassed_Lap; X++) {
              anLapTime[X][n] = anLapTime[X][n+1];
              asLapPos[X][n] = asLapPos[X][n+1];
          }
          //*****;

          //*****;
          asDriver[n+1] = sSaved_Driver;
          anTotalTime[n+1] = nSaved_FullTotal;
          anLapsCompleted[n+1] = nSaved_LapsCompleted;
          asFinishingTime[n+1] = sSaved_FinishingTime;
          asExtraTime[n+1] = sSaved_ExtraTime;
          asGridPos[n+1] = sSaved_GridPos;
          anStintNo[n+1] = sSaved_StintNo;
          sDriverColour[n+1] = sSavedColour;
          anDriverBestLap[n+1] = nSavedDriverBestLap;

          for (X = (nPassed_Lap - 1); X <= nPassed_Lap; X++) {
              anLapTime[X][n+1] = anSaved_Score[X];
              asLapPos[X][n+1] = sSaved_LapPos[X];
          }
          //*****;
          bCycle_Finished = false;
       }
   }
}

//Now in Laps Completed Order

bCycle_Finished = false;

while(bCycle_Finished == false) {
   bCycle_Finished = true;
   for (n = 1; n <= (nDriver_Records - 1); n++) {
       if(anLapsCompleted[n] < anLapsCompleted[n+1]){
          //*** SAVE ARRAY VALUES HERE;
          sSaved_Driver = asDriver[n];
          nSaved_FullTotal = anTotalTime[n];
          nSaved_LapsCompleted = anLapsCompleted[n];
          sSaved_FinishingTime = asFinishingTime[n];
          sSaved_ExtraTime = asExtraTime[n];
          sSaved_GridPos = asGridPos[n];
          sSaved_StintNo = anStintNo[n];
          sSavedColour = sDriverColour[n];
          nSavedDriverBestLap = anDriverBestLap[n];

          for (X = (nPassed_Lap - 1); X <= nPassed_Lap; X++) {
              anSaved_Score[X] = anLapTime[X][n];
              sSaved_LapPos[X] = asLapPos[X][n];
          }
          //*****;

          //*****;
          asDriver[n] = asDriver[n+1];
          anTotalTime[n] = anTotalTime[n+1];
          anLapsCompleted[n] = anLapsCompleted[n+1];
          asFinishingTime[n] = asFinishingTime[n+1];
          asExtraTime[n] = asExtraTime[n+1];
          asGridPos[n] = asGridPos[n+1];
          anStintNo[n] = anStintNo[n+1];
          sDriverColour[n] = sDriverColour[n+1];
          anDriverBestLap[n] = anDriverBestLap[n+1];

          for (X = (nPassed_Lap - 1); X <= nPassed_Lap; X++) {
              anLapTime[X][n] = anLapTime[X][n+1];
              asLapPos[X][n] = asLapPos[X][n+1];
          }
          //*****;

          //*****;
          asDriver[n+1] = sSaved_Driver;
          anTotalTime[n+1] = nSaved_FullTotal;
          anLapsCompleted[n+1] = nSaved_LapsCompleted;
          asFinishingTime[n+1] = sSaved_FinishingTime;
          asExtraTime[n+1] = sSaved_ExtraTime;
          asGridPos[n+1] = sSaved_GridPos;
          anStintNo[n+1] = sSaved_StintNo;
          sDriverColour[n+1] = sSavedColour;
          anDriverBestLap[n+1] = nSavedDriverBestLap;

          for (X = (nPassed_Lap - 1); X <= nPassed_Lap; X++) {
              anLapTime[X][n+1] = anSaved_Score[X];
              asLapPos[X][n+1] = sSaved_LapPos[X];
          }
          //*****;
          bCycle_Finished = false;
       }
   }
}

for (n = 1; n <= nDriver_Records; n++) {
    asLapPos[nPassed_Lap][n] = n;
} 

//************************************************************************
//** Store Top Ten from previous lap
//************************************************************************

if (bLastLapPos == true) {
   for (x = 1; x <= 10; x++) {
       asT10_Driver_1[x] = asDriver[x];
       anT10_TotalTime_1[x] = anTotalTime[x];
       asT10_ExtraTime_1[x] = asExtraTime[x];
       anT10_LapsCompleted_1[x] = anLapsCompleted[x];
       asT10_GridPos_1[x] = asGridPos[x];
       anT10_LapTime_1[x] = anLapTime[nSelectedLap][x];
       anT10_LapPos_1[x] = x;
       asT10_PitLap_1[x] = aGraphData[nSelectedLap][x].getPitLap();
   }
}

}

//***********************************************************************************
function Race_Graphs(){

var X;
var nLap ;
var sHTML;

Stop_Race();
clearTimeout(timerID);

for (X=1;X <= nRaceLaps;X++) {
    anGraphLapTime[X] = new Array();
    asGraphPitLap[X] = new Array();
    anGraphLapMPH[X]  = new Array();
    anGraphTotalTime[X]  = new Array();
    anGraphDiff[X]  = new Array();
    anGraphAvgLap[X]  = new Array();
    anGraphAvgMPH[X]  = new Array();
    anGraphPos[X]  = new Array();

    for (n=1; n <= 2;n++) {
       anGraphLapTime[X][n] = 0;
       asGraphPitLap[X][n] = "";
       anGraphLapMPH[X][n] = 0;
       anGraphTotalTime[X][n] = 0;
       anGraphDiff[X][n] = 0;
       anGraphAvgLap[X][n] = 0;
       anGraphAvgMPH[X][n] = 0;
       anGraphPos[X][n] = 0;
    }
}

var    anSaved_Score = new Array(nRaceLaps);

document.getElementById("DivText2").innerHTML = "<P></P>";
document.getElementById("DivText3").innerHTML = "<P></P>";
document.getElementById("DivText4").innerHTML = "<P></P>";

sSelectedDriver1 = asDriver[1];
sSelectedDriver2 = asDriver[1];

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>Race Analysis for Round " + nCurrent_Round + " - " + asTrackDate[nCurrent_Round] + "</TD></TR>";
}else if(sChamp_Type == "ENDURANCE" || sChamp_Type == "CAR"){
       if(sChamp_Name == "Endurance Series - The Challenge"){
          sHTML += "<TR><TD class='HeadBox2' BGCOLOR='#A8D3FF' ALIGN=CENTER>Race Analysis for Round " + nCurrent_Round + " - Race " + nChallenge_RaceNo + " - " + asTrackDate[nCurrent_Round] + "</TD></TR>";
       }else{
          sHTML += "<TR><TD class='HeadBox2' BGCOLOR='#A8D3FF' ALIGN=CENTER>Race Analysis for Round " + nCurrent_Round + " - " + asTrackDate[nCurrent_Round] + "</TD></TR>";
       }
}else if(sChamp_Type == "CAR"){
        sHTML += "<TR><TD class='HeadBox2' BGCOLOR='#A8D3FF' ALIGN=CENTER>Race Analysis for Round " + nCurrent_Round + " - " + asTrackDate[nCurrent_Round] + "</TD></TR>";
}


sHTML += "</TABLE><BR>";

sHTML += "<TABLE class='HeadTable3' BORDER=1 ALIGN=CENTER WIDTH=600>";

if(sChamp_Type == "SPRINT"){
   sHTML += "<TR><TD class='HeadBox3' BGCOLOR='#A8D3FF' ALIGN=CENTER>Circuit: " + asTrackName[nCurrent_Round] + " - Length: " + anTrackLength[nCurrent_Round] + " Metres</TD></TR>";
}else if(sChamp_Type == "ENDURANCE" || sChamp_Type == "CAR"){
        sHTML += "<TR><TD class='HeadBox3' BGCOLOR='#A8D3FF' ALIGN=CENTER>Circuit: " + asTrackName[nCurrent_Round] + " - Length: " + anTrackLength[nCurrent_Round] + " Metres</TD></TR>";
}else if(sChamp_Type == "CAR"){
        sHTML += "<TR><TD class='HeadBox3' BGCOLOR='#A8D3FF' ALIGN=CENTER>Circuit: " + asTrackName[nCurrent_Round] + " - Length: " + anTrackLength[nCurrent_Round] + " Metres</TD></TR>";
}

sHTML += "</TABLE><BR>";

sHTML += "<TABLE class='ControlTable' BORDER=0 ALIGN=CENTER WIDTH=600>";
sHTML += "<TR>";

sHTML += "<TD class='ControlBox' BGCOLOR='#E8F3FF' ALIGN=CENTER WIDTH=250>";

sHTML += " Select Entrant 1 : <SELECT ID='SelectTeam1' onChange='Select_Team1()'>";

for (nLoop = 1;nLoop <= nDriver_Records; nLoop++) {

    if(asDriver[nLoop] == nSelectedTeam1){
       sHTML += "<OPTION SELECTED>" + asDriver[nLoop];
    }else{
       sHTML += "<OPTION>" + asDriver[nLoop];
    }
}

sHTML += "</SELECT>";
sHTML += "</TD>";

sHTML += "<TD class='ControlBox' BGCOLOR='#E8F3FF' ALIGN=CENTER WIDTH=250>";

sHTML += " Select Entrant 2 : <SELECT ID='SelectTeam2' onChange='Select_Team2()'>";

for (nLoop = 1;nLoop <= nDriver_Records; nLoop++) {

    if(asDriver[nLoop] == nSelectedTeam2){
       sHTML += "<OPTION SELECTED>" + asDriver[nLoop];
    }else{
       sHTML += "<OPTION>" + asDriver[nLoop];
    }
}

sHTML += "</SELECT>";
sHTML += "</TD>";

sHTML += "<TD class='ControlBox' BGCOLOR='#E8F3FF' ALIGN=LEFT WIDTH=100><INPUT TYPE='BUTTON' VALUE='Run Race Analysis' onClick='Race_Analysis()'></INPUT></TD>";

sHTML += "</TR>";
sHTML += "</TABLE></TD>";

nSwitch = 0;
sColour = "";

document.getElementById("DivText2").innerHTML = sHTML;

bNoRecalc = false;

}

//***********************************************************************************************

function Select_Team1(){

var nIndex;

nIndex = document.Form1.SelectTeam1.selectedIndex;
sSelectedDriver1 = document.Form1.SelectTeam1.options[nIndex].text;

}

//***********************************************************************************************

function Select_Team2(){

var nIndex;

nIndex = document.Form1.SelectTeam2.selectedIndex;
sSelectedDriver2 = document.Form1.SelectTeam2.options[nIndex].text;

}

//***********************************************************************************************

function Race_Analysis(){

var nLap;
var Y;

if(sSelectedDriver1 == sSelectedDriver2){
   alert("Driver/Team Names Must Be Different !");
   return;
}

if(sChamp_Type == "SPRINT"){
   alert(sChamp_Name + " - " + sChamp_Year + "\r\r" + "Performing Race Analysis for Round " + nCurrent_Round + " - " + asTrackName[nCurrent_Round] + ". Please Wait");
}else if(sChamp_Type == "ENDURANCE" || sChamp_Type == "CAR"){
       if(sChamp_Name == "Endurance Series - The Challenge"){
          alert(sChamp_Name + " - " + sChamp_Year + "\r\r" + "Performing Race Analysis for Round " + nCurrent_Round + " - Race " + nChallenge_RaceNo + " - " + asTrackName[nCurrent_Round] + ". Please Wait");
       }else{
          alert(sChamp_Name + " - " + sChamp_Year + "\r\r" + "Performing Race Analysis for Round " + nCurrent_Round + " - " + asTrackName[nCurrent_Round] + ". Please Wait");
       }
}else if(sChamp_Type == "CAR"){
       alert(sChamp_Name + " - " + sChamp_Year + "\r\r" + "Performing Race Analysis for Round " + nCurrent_Round + " - " + asTrackName[nCurrent_Round] + ". Please Wait");
}

for (nLap = 1;nLap <= nRaceLaps;nLap++) {
//*************************************************

   sSaved_Driver = "";
   sSaved_TableHTML = "";

   Lap_Positions(nLap,false);

//*************************************************

   //Re-populate grid;
    for (z = 1;z <= nDriver_Records;z++) {

       if(TrimString(asDriver[z]) == TrimString(sSelectedDriver1)){
          nSelectedDriver = 1;
         }else if(TrimString(asDriver[z]) == TrimString(sSelectedDriver2)){
              nSelectedDriver = 2;
         }

       if(TrimString(asDriver[z]) == TrimString(sSelectedDriver1) || TrimString(asDriver[z]) == TrimString(sSelectedDriver2)){ 

          if(anLapTime[nLap][z] != 0){
             anGraphLapTime[nLap][nSelectedDriver] = anLapTime[nLap][z];
          }else{
             anGraphLapTime[nLap][nSelectedDriver] = 0;
          }

	  if (aGraphData[nLap][z].getPitLap() != "") {
             asGraphPitLap[nLap][nSelectedDriver] = aGraphData[nLap][z].getPitLap();
          } else {
             asGraphPitLap[nLap][nSelectedDriver] = "";
          }

          if(anLapTime[nLap][z] != 0){
             if(sChamp_Type == "SPRINT"){
                anGraphLapMPH[nLap][nSelectedDriver] = format_MPH(3600 / (((anLapTime[nLap][z] / anTrackLength[nCurrent_Round])*1000)*1.6093)) ;
             }else if(sChamp_Type == "ENDURANCE" || sChamp_Type == "CAR"){
                    anGraphLapMPH[nLap][nSelectedDriver] = format_MPH(3600 / (((anLapTime[nLap][z] / anTrackLength[nCurrent_Round])*1000)*1.6093));
             }else if(sChamp_Type == "CAR"){
                    anGraphLapMPH[nLap][nSelectedDriver] = format_MPH(3600 / (((anLapTime[nLap][z] / anTrackLength[nCurrent_Round])*1000)*1.6093));
             }
          }else{
              anGraphLapMPH[nLap][nSelectedDriver] = 0;
          }

          anGraphTotalTime[nLap][nSelectedDriver] = anTotalTime[z];

          if(z == 1){
             anGraphDiff[nLap][nSelectedDriver] = 0;
          }else{
             anGraphDiff[nLap][nSelectedDriver] = TruncNum(anTotalTime[z]) - TruncNum(anTotalTime[1]);
          }

          if(anTotalTime[z] != 0){
             anGraphAvgLap[nLap][nSelectedDriver] = (anTotalTime[z]/anLapsCompleted[z]);
          }else{
             anGraphAvgLap[nLap][nSelectedDriver] = 0;
          }

          if(anTotalTime[z] != 0){
             if(sChamp_Type == "SPRINT"){
                anGraphAvgMPH[nLap][nSelectedDriver] = format_MPH(3600 / ((((anTotalTime[z]/anLapsCompleted[z]) / anTrackLength[nCurrent_Round])*1000)*1.6093));
             }else if(sChamp_Type == "ENDURANCE" || sChamp_Type == "CAR"){
                    anGraphAvgMPH[nLap][nSelectedDriver] = format_MPH(3600 / ((((anTotalTime[z]/anLapsCompleted[z]) / anTrackLength[nCurrent_Round])*1000)*1.6093));
             }else if(sChamp_Type == "CAR"){
                    anGraphAvgMPH[nLap][nSelectedDriver] = format_MPH(3600 / ((((anTotalTime[z]/anLapsCompleted[z]) / anTrackLength[nCurrent_Round])*1000)*1.6093));
             }
          }else{
              anGraphAvgMPH[nLap][nSelectedDriver] = 0;
          }

          anGraphPos[nLap][nSelectedDriver] = z;
      }

   }
}

alert("Race Analysis Complete - Please Select Graph Settings");

nSelectedGraph = "Lap Times";
nSelectedInterval = 1;

sHTML2 = "<TABLE class='HeadTable1' BORDER=1 ALIGN=CENTER WIDTH=400>";
sHTML2 += "<TR><TD class='HeadBox1' BGCOLOR='#A8D3FF' ALIGN=CENTER>" + sChamp_Name + " - " + sChamp_Year + "</TD></TR>";
sHTML2 += "</TABLE><BR>";

sHTML2 += "<TABLE class='HeadTable2' BORDER=1 ALIGN=CENTER WIDTH=600>";

if(sChamp_Type == "SPRINT"){
   sHTML2 += "<TR><TD class='HeadBox2' BGCOLOR='#A8D3FF' ALIGN=CENTER>Race Analysis for Round " + nCurrent_Round + " - " + asTrackDate[nCurrent_Round] + "</TD></TR>";
}else if(sChamp_Type == "ENDURANCE" || sChamp_Type == "CAR"){
       if(sChamp_Name == "Endurance Series - The Challenge"){
          sHTML2 += "<TR><TD class='HeadBox2' BGCOLOR='#A8D3FF' ALIGN=CENTER>Race Analysis for Round " + nCurrent_Round + " - Race " + nChallenge_RaceNo + " - " + asTrackDate[nCurrent_Round] + "</TD></TR>";
       }else{
          sHTML2 += "<TR><TD class='HeadBox2' BGCOLOR='#A8D3FF' ALIGN=CENTER>Race Analysis for Round " + nCurrent_Round + " - " + asTrackDate[nCurrent_Round] + "</TD></TR>";
       } ;
}else if(sChamp_Type == "CAR"){
        sHTML2 += "<TR><TD class='HeadBox2' BGCOLOR='#A8D3FF' ALIGN=CENTER>Race Analysis for Round " + nCurrent_Round + " - " + asTrackDate[nCurrent_Round] + "</TD></TR>";
}

sHTML2 += "</TABLE><BR>";

sHTML2 += "<TABLE class='HeadTable3' BORDER=1 ALIGN=CENTER WIDTH=600>";

if(sChamp_Type == "SPRINT"){
   sHTML2 += "<TR><TD class='HeadBox3' BGCOLOR='#A8D3FF' ALIGN=CENTER>Circuit: " + asTrackName[nCurrent_Round] + " - Length: " + anTrackLength[nCurrent_Round] + " Metres</TD></TR>";
}else if(sChamp_Type == "ENDURANCE" || sChamp_Type == "CAR"){
        sHTML2 += "<TR><TD class='HeadBox3' BGCOLOR='#A8D3FF' ALIGN=CENTER>Circuit: " + asTrackName[nCurrent_Round] + " - Length: " + anTrackLength[nCurrent_Round] + " Metres</TD></TR>";
}else if(sChamp_Type == "CAR"){
        sHTML2 += "<TR><TD class='HeadBox3' BGCOLOR='#A8D3FF' ALIGN=CENTER>Circuit: " + asTrackName[nCurrent_Round] + " - Length: " + anTrackLength[nCurrent_Round] + " Metres</TD></TR>";
}

sHTML2 += "</TABLE><BR>";

sHTML2 += "<TABLE class='SubjectTable' BORDER=1 ALIGN=CENTER WIDTH=600>";
sHTML2 += "<TR><TD class='SubjectBox' BGCOLOR='#E8F3FF' ALIGN=CENTER WIDTH=600 COLSPAN=3>Comparison Between " + sSelectedDriver1 + " and " + sSelectedDriver2 + "</TD></TR>";
sHTML2 += "</TABLE><BR>";

sHTML2 += "<TABLE class='ControlTable' BORDER=0 ALIGN=CENTER WIDTH=600>";
sHTML2 += "<TR>";

sHTML2 += "<TD class='ControlBox' BGCOLOR='#E8F3FF' ALIGN=CENTER WIDTH=250>";

sHTML2 += " Select Graph Type : <SELECT ID='SelectGraph' onChange='Select_Graph()'>";

sHTML2 += "<OPTION SELECTED>Lap Times";
sHTML2 += "<OPTION> Lap Speed";
sHTML2 += "<OPTION> Gap To Leader";
sHTML2 += "<OPTION> Average Lap Time";
sHTML2 += "<OPTION> Average Lap Speed";
sHTML2 += "<OPTION> Race Position";
sHTML2 += "<OPTION> Long Laps";
sHTML2 += "</SELECT>";
sHTML2 += "</TD>";

sHTML2 += "<TD class='ControlBox' BGCOLOR='#E8F3FF' ALIGN=CENTER WIDTH=250>";

sHTML2 += " Select Lap Interval for Graph : <SELECT ID='SelectInterval' onChange='Select_Interval()'>";

for (nLoop=1;nLoop <= nRaceLaps;nLoop++) {
    sHTML2 += "<OPTION>" + nLoop;
}

sHTML2 += "</SELECT>";
sHTML2 += "</TD>";

sHTML2 += "<TD class='ControlBox' BGCOLOR='#E8F3FF' ALIGN=LEFT WIDTH=100><INPUT TYPE='BUTTON' VALUE='Draw Graph' onClick='Draw_Graph()'></INPUT></TD>";

sHTML2 += "</TR>";
sHTML2 += "</TABLE></TD>";

document.getElementById("DivText2").innerHTML = sHTML + sHTML2;

}

//***********************************************************************************************

function Select_Graph(){

var nIndex;

nIndex = document.Form1.SelectGraph.selectedIndex;
nSelectedGraph = document.Form1.SelectGraph.options[nIndex].text;

}

//***********************************************************************************************

function Select_Interval(){

var nIndex;

nIndex = document.Form1.SelectInterval.selectedIndex;
nSelectedInterval = Number(document.Form1.SelectInterval.options[nIndex].text);

}

//***********************************************************************************************

function Draw_Graph(){

var sHTML3;

//START OF GRAPH HTML
sHTML3 = "<BR>";
sHTML3 += "<TABLE class='GraphTable' WIDTH=700 BORDER=0 BGCOLOR=#A8D3FF ALIGN=CENTER CELLSPACING=0 CELLPADDING=0>";

var nMaxValue1;
var nMaxValue2;

var nCount;
var nLap;
var sGraphType;
var nGrandTotal;
var nPos;
var anSavedReportPitLap = new Array(2);

sGraphType = nSelectedGraph;
nSelectedInterval = nSelectedInterval;

if(sGraphType == "Lap Times"){
   sHTML3 += "<TR><TD class='GraphBox' WIDTH=700 ALIGN=CENTER><B>Comparison Between " + sSelectedDriver1 + " and " + sSelectedDriver2 + " - Lap Time</B></TD></TR>";
}

if(sGraphType == "Lap Speed"){
   sHTML3 += "<TR><TD class='GraphBox' WIDTH=700 ALIGN=CENTER><B>Comparison Between " + sSelectedDriver1 + " and " + sSelectedDriver2 + " - Lap Speed (mph)</B></TD></TR>";
}

if(sGraphType == "Gap To Leader"){
      sHTML3 += "<TR><TD class='GraphBox' WIDTH=700 ALIGN=CENTER><B>Comparison Between " + sSelectedDriver1 + " and " + sSelectedDriver2 + " - Gap To Leader</B></TD></TR>";
}

if(sGraphType == "Average Lap Time"){
   sHTML3 += "<TR><TD class='GraphBox' WIDTH=700 ALIGN=CENTER><B>Comparison Between " + sSelectedDriver1 + " and " + sSelectedDriver2 + " - Average Lap Time</B></TD></TR>";
}

if(sGraphType == "Average Lap Speed"){
   sHTML3 += "<TR><TD class='GraphBox' WIDTH=700 ALIGN=CENTER><B>Comparison Between " + sSelectedDriver1 + " and " + sSelectedDriver2 + " - Average Lap Speed (mph)</B></TD></TR>";
}

if(sGraphType == "Race Position"){
   sHTML3 += "<TR><TD class='GraphBox' WIDTH=700 ALIGN=CENTER><B>Comparison Between " + sSelectedDriver1 + " and " + sSelectedDriver2 + " - Race Position</B></TD></TR>";
}

if(sGraphType == "Long Laps"){
   sHTML3 += "<TR><TD class='GraphBox' WIDTH=700 ALIGN=CENTER><B>Comparison Between " + sSelectedDriver1 + " and " + sSelectedDriver2 + " - Long Laps</B></TD></TR>";
}

sHTML3 += "<TR><TD class='GraphBox' ><BR></TD></TR>";
sHTML3 += "<TR><TD class='GraphBox' WIDTH=700 ALIGN=CENTER>" + sSelectedDriver1 + " = <IMG SRC='Bar_Start.png' WIDTH=1 HEIGHT=20></IMG><IMG SRC='Bar1.png' WIDTH=10 HEIGHT=20></IMG><IMG SRC='Bar_Shadow.png' WIDTH=2 HEIGHT=18></IMG>&nbsp &nbsp &nbsp" + sSelectedDriver2 + " = <IMG SRC='Bar_Start.png' WIDTH=1 HEIGHT=20></IMG><IMG SRC='Bar2.png' WIDTH=10 HEIGHT=20></IMG><IMG SRC='Bar_Shadow.png' WIDTH=2 HEIGHT=18></IMG></TD></TR>";
sHTML3 += "<TR><TD class='GraphBox'><BR><BR></TD></TR></TABLE>";

nMaxValue1 = 0;
nMaxValue2 = 0;

nGrandTotal = 0;

var nValue1;
var nValue2; 

nValue1 = 0;
nValue2 = 0; 

for (nLap = 1;nLap <= nRaceLaps;nLap++) {
    for (nDriver = 1;nDriver <= 2;nDriver++) {
        if(sGraphType == "Lap Times" || sGraphType == "Long Laps"){
           if(anGraphLapTime[nLap][nDriver] > nMaxValue1){
              nMaxValue1 = anGraphLapTime[nLap][nDriver];
           }           
        }

        if(sGraphType == "Lap Speed"){

           if(anGraphLapMPH[nLap][nDriver] > nMaxValue1){
              nMaxValue1 = anGraphLapMPH[nLap][nDriver];
           }           
        }

        if(sGraphType == "Gap To Leader"){

           nValue1 = anGraphDiff[nLap][nDriver];

           nValue2 = nMaxValue1;

           if(nValue1 > nValue2){
              nMaxValue1 = nValue1;
           }
        }

        if(sGraphType == "Average Lap Time"){
           if(anGraphAvgLap[nLap][nDriver] > nMaxValue1){
              nMaxValue1 = anGraphAvgLap[nLap][nDriver];
              nAvgLap = nMaxValue1;
           }           
        }

        if(sGraphType == "Average Lap Speed"){
           if(anGraphAvgMPH[nLap][nDriver] > nMaxValue1){
              nMaxValue1 = anGraphAvgMPH[nLap][nDriver];
           }           
        }

        if(sGraphType == "Race Position"){
           if(anGraphPos[nLap][nDriver] > nMaxValue1){
              nMaxValue1 = anGraphPos[nLap][nDriver];
           }           
        }
    }
}

sHTML3 += "<TABLE class='GraphTable' WIDTH=700 BORDER=0 BGCOLOR=#A8D3FF ALIGN=CENTER CELLSPACING=0 CELLPADDING=0>";

sHTML3 += "<TR>";

sHTML3 += "<TD class='GraphBox' WIDTH=20 ALIGN=CENTER VALIGN=CENTER><IMG SRC='LapNo.png'></IMG></TD>";
sHTML3 += "<TD class='GraphBox' WIDTH=680 ALIGN=CENTER><TABLE class='GraphTable' WIDTH=630 BORDER=0 BGCOLOR=#A8D3FF ALIGN=CENTER CELLSPACING=0 CELLPADDING=0>";

nCount = 0;

for (nLap = 1;nLap <= nRaceLaps;nLap++) {

    nCount++

    if(nLap == 1 || nCount == nSelectedInterval || sGraphType == "Long Laps"){

       for (nDriver = 1;nDriver <= 2;nDriver++) {
          sHTML3 += "<TR>";

          if(sGraphType == "Lap Times"){
             if(nDriver == 1){
                sHTML3 += "<TD class='GraphBox' WIDTH=30 ALIGN=LEFT><B>" + nLap + "</B></TD><TD class='GraphBox' WIDTH=650 ALIGN=LEFT VALIGN=BOTTOM>";
             }else{
                sHTML3 += "<TD class='GraphBox' WIDTH=30 ALIGN=LEFT></TD><TD class='GraphBox' WIDTH=650 ALIGN=LEFT VALIGN=TOP>";
             }
             sHTML3 += "<IMG SRC='Bar_Start.png' WIDTH=1 HEIGHT=20></IMG><IMG SRC='Bar" + nDriver + ".png' WIDTH=" + (500/nMaxValue1)*(anGraphLapTime[nLap][nDriver]) + " HEIGHT=20></IMG><IMG SRC='Bar_Shadow.png' WIDTH=2 HEIGHT=18></IMG>&nbsp &nbsp" + Seconds_To_Time(anGraphLapTime[nLap][nDriver]);

             if (asGraphPitLap[nLap][nDriver] != "") {
                 sHTML3 += "<IMG ALT='" + asGraphPitLap[nLap][nDriver] + " - " + Get_Indicator_Description(asGraphPitLap[nLap][nDriver],"1") + "' SRC='" + TrimString(asGraphPitLap[nLap][nDriver]) + ".png'>";
             }
	     sHTML3 +="</TD>";
          }

          if(sGraphType == "Lap Speed"){
             if(nDriver == 1){
                sHTML3 += "<TD class='GraphBox' WIDTH=30 ALIGN=LEFT><B>" + nLap + "</B></TD><TD class='GraphBox' WIDTH=650 ALIGN=LEFT VALIGN=BOTTOM>";
             }else{
                sHTML3 += "<TD class='GraphBox' WIDTH=30 ALIGN=LEFT></TD><TD class='GraphBox' WIDTH=650 ALIGN=LEFT VALIGN=TOP>";
             }
             sHTML3 += "<IMG SRC='Bar_Start.png' WIDTH=1 HEIGHT=20></IMG><IMG SRC='Bar" + nDriver + ".png' WIDTH=" + (500/nMaxValue1)*(anGraphLapMPH[nLap][nDriver]) + " HEIGHT=20></IMG><IMG SRC='Bar_Shadow.png' WIDTH=2 HEIGHT=18></IMG>&nbsp &nbsp" + (anGraphLapMPH[nLap][nDriver]);

             if (asGraphPitLap[nLap][nDriver] != "") {
                 sHTML3 += "<IMG ALT='" + asGraphPitLap[nLap][nDriver] + " - " + Get_Indicator_Description(asGraphPitLap[nLap][nDriver],"1") + "' SRC='" + TrimString(asGraphPitLap[nLap][nDriver]) + ".png'>";
             }
	     sHTML3 +="</TD>";
          }

          if(sGraphType == "Gap To Leader"){
             if(nDriver == 1){
                sHTML3 += "<TD class='GraphBox' WIDTH=30 ALIGN=LEFT><B>" + nLap + "</B></TD><TD class='GraphBox' WIDTH=650 ALIGN=LEFT VALIGN=BOTTOM>";
             }else{
                sHTML3 += "<TD class='GraphBox' WIDTH=30 ALIGN=LEFT></TD><TD class='GraphBox' WIDTH=650 ALIGN=LEFT VALIGN=TOP>";
             }
             if(nMaxValue1 == 0){
                sHTML3 += "<IMG SRC='Bar_Start.png' WIDTH=1 HEIGHT=20></IMG><IMG SRC='Bar" + nDriver + ".png' WIDTH=0 HEIGHT=20></IMG><IMG SRC='Bar_Shadow.png' WIDTH=2 HEIGHT=18></IMG>" + Seconds_To_Time(anGraphDiff[nLap][nDriver]);
             }else{
                sHTML3 += "<IMG SRC='Bar_Start.png' WIDTH=1 HEIGHT=20></IMG><IMG SRC='Bar" + nDriver + ".png' WIDTH=" + (500/nMaxValue1)*(anGraphDiff[nLap][nDriver]) + " HEIGHT=20></IMG><IMG SRC='Bar_Shadow.png' WIDTH=2 HEIGHT=18></IMG>&nbsp &nbsp" + Seconds_To_Time(anGraphDiff[nLap][nDriver]);
             }

             if (asGraphPitLap[nLap][nDriver] != "") {
                 sHTML3 += "<IMG ALT='" + asGraphPitLap[nLap][nDriver] + " - " + Get_Indicator_Description(asGraphPitLap[nLap][nDriver],"1") + "' SRC='" + TrimString(asGraphPitLap[nLap][nDriver]) + ".png'>";
             }
	     sHTML3 +="</TD>";
          }

          if(sGraphType == "Average Lap Time"){
             if(nDriver == 1){
                sHTML3 += "<TD class='GraphBox' WIDTH=30 ALIGN=LEFT><B>" + nLap + "</B></TD><TD class='GraphBox' WIDTH=650 ALIGN=LEFT VALIGN=BOTTOM>";
             }else{
                sHTML3 += "<TD class='GraphBox' WIDTH=30 ALIGN=LEFT></TD><TD class='GraphBox' WIDTH=650 ALIGN=LEFT VALIGN=TOP>";
             }
             sHTML3 += "<IMG SRC='Bar_Start.png' WIDTH=1 HEIGHT=20></IMG><IMG SRC='Bar" + nDriver + ".png' WIDTH=" + (500/nMaxValue1)*(anGraphAvgLap[nLap][nDriver]) + " HEIGHT=20></IMG><IMG SRC='Bar_Shadow.png' WIDTH=2 HEIGHT=18></IMG>&nbsp &nbsp" + Seconds_To_Time(anGraphAvgLap[nLap][nDriver]);

             if (asGraphPitLap[nLap][nDriver] != "") {
                 sHTML3 += "<IMG ALT='" + asGraphPitLap[nLap][nDriver] + " - " + Get_Indicator_Description(asGraphPitLap[nLap][nDriver],"1") + "' SRC='" + TrimString(asGraphPitLap[nLap][nDriver]) + ".png'>";
             }
             sHTML3 +="</TD>";
          }

          if(sGraphType == "Average Lap Speed"){
             if(nDriver == 1){
                sHTML3 += "<TD class='GraphBox' WIDTH=30 ALIGN=LEFT><B>" + nLap + "</B></TD><TD class='GraphBox' WIDTH=650 ALIGN=LEFT VALIGN=BOTTOM>";
             }else{
                sHTML3 += "<TD class='GraphBox' WIDTH=30 ALIGN=LEFT></TD><TD class='GraphBox' WIDTH=650 ALIGN=LEFT VALIGN=TOP>";
             }
             sHTML3 += "<IMG SRC='Bar_Start.png' WIDTH=1 HEIGHT=20></IMG><IMG SRC='Bar" + nDriver + ".png' WIDTH=" + (500/nMaxValue1)*(anGraphAvgMPH[nLap][nDriver]) + " HEIGHT=20></IMG><IMG SRC='Bar_Shadow.png' WIDTH=2 HEIGHT=18></IMG>&nbsp &nbsp" + (anGraphAvgMPH[nLap][nDriver]);

             if (asGraphPitLap[nLap][nDriver] != "") {
                 sHTML3 += "<IMG ALT='" + asGraphPitLap[nLap][nDriver] + " - " + Get_Indicator_Description(asGraphPitLap[nLap][nDriver],"1") + "' SRC='" + TrimString(asGraphPitLap[nLap][nDriver]) + ".png'>";
             }
	     sHTML3 +="</TD>";
          }

          if(sGraphType == "Race Position"){
             if(nDriver == 1){
                sHTML3 += "<TD class='GraphBox' WIDTH=30 ALIGN=LEFT><B>" + nLap + "</B></TD><TD class='GraphBox' WIDTH=650 ALIGN=LEFT VALIGN=BOTTOM>";
             }else{
                sHTML3 += "<TD class='GraphBox' WIDTH=30 ALIGN=LEFT></TD><TD class='GraphBox' WIDTH=650 ALIGN=LEFT VALIGN=TOP>";
             }
             sHTML3 += "<IMG SRC='Bar_Start.png' WIDTH=1 HEIGHT=20></IMG><IMG SRC='Bar" + nDriver + ".png' WIDTH=" + (500/nMaxValue1)*(anGraphPos[nLap][nDriver]) + " HEIGHT=20></IMG><IMG SRC='Bar_Shadow.png' WIDTH=2 HEIGHT=18></IMG>&nbsp &nbsp" + (anGraphPos[nLap][nDriver]);

             if (asGraphPitLap[nLap][nDriver] != "") {
                 sHTML3 += "<IMG ALT='" + asGraphPitLap[nLap][nDriver] + " - " + Get_Indicator_Description(asGraphPitLap[nLap][nDriver],"1") + "' SRC='" + TrimString(asGraphPitLap[nLap][nDriver]) + ".png'>";
             }
	     sHTML3 +="</TD>";
          }

          if(sGraphType == "Long Laps"){
              if(anGraphLapTime[nLap][nDriver] > nAvgLap){
                sHTML3 += "<TD class='GraphBox' WIDTH=30 ALIGN=LEFT><B>" + nLap + "</B></TD><TD class='GraphBox' WIDTH=650 ALIGN=LEFT>";
                sHTML3 += "<IMG SRC='Bar_Start.png' WIDTH=1 HEIGHT=20></IMG><IMG SRC='Bar" + nDriver + ".png' WIDTH=" + (500/nMaxValue1)*(anGraphLapTime[nLap][nDriver]) + " HEIGHT=20></IMG><IMG SRC='Bar_Shadow.png' WIDTH=2 HEIGHT=18></IMG>&nbsp &nbsp" + Seconds_To_Time(anGraphLapTime[nLap][nDriver]);
                if (asGraphPitLap[nLap][nDriver] != "" || asGraphPitLap[nLap-1][nDriver] != "" && anSavedReportPitLap[nDriver] != (nLap-1)) {
                   anSavedReportPitLap[nDriver] = nLap;
                   sHTML3 += "<IMG ALT='" + asGraphPitLap[nLap][nDriver] + " - " + Get_Indicator_Description(asGraphPitLap[nLap][nDriver],"1") + "' SRC='" + TrimString(asGraphPitLap[nLap][nDriver]) + ".png'>";
                }
                sHTML3 +="</TD>";
             } ;
          }

          sHTML3 += "</TR>";

       nCount = 0;
      }
   }
}

sHTML3 += "</TABLE></TD>";

sHTML3 += "</TR>";

sHTML3 += "<TR><TD class='GraphBox'><BR><BR></TD></TR></TABLE>";

sHTML3 += "</TABLE>";

document.getElementById("DivText3").innerHTML = sHTML3;

}


//***********************************************************************************
function Stint_Analysis(){

var X;
var nLap;
var sHTML;

Stop_Race();
clearTimeout(timerID);

document.getElementById("DivText2").innerHTML = "<P></P>";
document.getElementById("DivText3").innerHTML = "<P></P>";
document.getElementById("DivText4").innerHTML = "<P></P>";

sSelectedDriver1 = asDriver[1];
sSelectedDriver2 = asDriver[1];

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>Race Analysis for Round " + nCurrent_Round + " - " + asTrackDate[nCurrent_Round] + "</TD></TR>";
}else if(sChamp_Type == "ENDURANCE" || sChamp_Type == "CAR"){
       if(sChamp_Name == "Endurance Series - The Challenge"){
          sHTML += "<TR><TD class='HeadBox2' BGCOLOR='#A8D3FF' ALIGN=CENTER>Race Analysis for Round " + nCurrent_Round + " - Race " + nChallenge_RaceNo + " - " + asTrackDate[nCurrent_Round] + "</TD></TR>";
       }else{
          sHTML += "<TR><TD class='HeadBox2' BGCOLOR='#A8D3FF' ALIGN=CENTER>Race Analysis for Round " + nCurrent_Round + " - " + asTrackDate[nCurrent_Round] + "</TD></TR>";
       }
}else if(sChamp_Type == "CAR"){
        sHTML += "<TR><TD class='HeadBox2' BGCOLOR='#A8D3FF' ALIGN=CENTER>Race Analysis for Round " + nCurrent_Round + " - " + asTrackDate[nCurrent_Round] + "</TD></TR>";
}

sHTML += "</TABLE><BR>";

sHTML += "<TABLE class='HeadTable3' BORDER=1 ALIGN=CENTER WIDTH=400>";

if(sChamp_Type == "SPRINT"){
   sHTML += "<TR><TD class='HeadBox3' BGCOLOR='#A8D3FF' ALIGN=CENTER>Circuit: " + asTrackName[nCurrent_Round] + " - Length: " + anTrackLength[nCurrent_Round] + " Metres</TD></TR>";
}else if(sChamp_Type == "ENDURANCE" || sChamp_Type == "CAR"){
        sHTML += "<TR><TD class='HeadBox3' BGCOLOR='#A8D3FF' ALIGN=CENTER>Circuit: " + asTrackName[nCurrent_Round] + " - Length: " + anTrackLength[nCurrent_Round] + " Metres</TD></TR>";
}else if(sChamp_Type == "CAR"){
        sHTML += "<TR><TD class='HeadBox3' BGCOLOR='#A8D3FF' ALIGN=CENTER>Circuit: " + asTrackName[nCurrent_Round] + " - Length: " + anTrackLength[nCurrent_Round] + " Metres</TD></TR>";
}

sHTML += "</TABLE><BR>";

sHTML += "<TABLE class='ControlTable' BORDER=0 ALIGN=CENTER WIDTH=400>";
sHTML += "<TR>";

sHTML += "<TD class='ControlBox' BGCOLOR='#E8F3FF' ALIGN=CENTER WIDTH=250>";

sHTML += " Select Entrant : <SELECT ID='SelectTeam1' onChange='Select_Team1()'>";

for (nLoop = 1;nLoop <= nDriver_Records;nLoop++) {

    if(asDriver[nLoop] == nSelectedTeam1){
       sHTML += "<OPTION SELECTED>" + TrimString(asDriver[nLoop]);
    }else{
       sHTML += "<OPTION>" + TrimString(asDriver[nLoop]);
    }
}

sHTML += "</SELECT>";
sHTML += "</TD>";

sHTML += "</SELECT>";
sHTML += "</TD>";

sHTML += "<TD class='ControlBox' BGCOLOR='#E8F3FF' ALIGN=LEFT WIDTH=100><INPUT TYPE='BUTTON' VALUE='Run Stint Analysis' onClick='Stint_Stats(" + "\"" + sSelectedDriver1 + "\"" + ")'></INPUT></TD>";

sHTML += "</TR>";
sHTML += "</TABLE></TD>";

nSwitch = 0;
sColour = "";

//document.all.DivText2.innerHTML = sHTML;
document.getElementById("DivText2").innerHTML = sHTML;

}

//***********************************************************************************
function Stint_Stats(sPassed_Driver){

var nLap;
var z;
var nGrandTotal;
var nPos;
var nSelectedDriver;

var nStintCount;
var nStintStartLap;
var nStintEndLap;
var nStintLaps;
var nStintTotalTime;
var nStintFastestLap;
var nSavedPitLap;

nGrandTotal = 0;


if(sSelectedDriver1 == "" && sPassed_Driver != "") {
   sSelectedDriver1 = sPassed_Driver;
}

sPassed_Driver = " ";

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>Race Analysis for Round " + nCurrent_Round + " - " + asTrackDate[nCurrent_Round] + "</TD></TR>";
}else if(sChamp_Type == "ENDURANCE" || sChamp_Type == "CAR"){
       if(sChamp_Name == "Endurance Series - The Challenge"){
          sHTML += "<TR><TD class='HeadBox2' BGCOLOR='#A8D3FF' ALIGN=CENTER>Race Analysis for Round " + nCurrent_Round + " - Race " + nChallenge_RaceNo + " - " + asTrackDate[nCurrent_Round] + "</TD></TR>";
       }else{
          sHTML += "<TR><TD class='HeadBox2' BGCOLOR='#A8D3FF' ALIGN=CENTER>Race Analysis for Round " + nCurrent_Round + " - " + asTrackDate[nCurrent_Round] + "</TD></TR>";
       }
}else if(sChamp_Type == "CAR"){
        sHTML += "<TR><TD class='HeadBox2' BGCOLOR='#A8D3FF' ALIGN=CENTER>Race Analysis for Round " + nCurrent_Round + " - " + asTrackDate[nCurrent_Round] + "</TD></TR>";
}

sHTML += "</TABLE><BR>";

sHTML += "<TABLE class='HeadTable3' BORDER=1 ALIGN=CENTER WIDTH=600>";

if(sChamp_Type == "SPRINT"){
   sHTML += "<TR><TD class='HeadBox3' BGCOLOR='#A8D3FF' ALIGN=CENTER>Circuit: " + asTrackName[nCurrent_Round] + " - Length: " + anTrackLength[nCurrent_Round] + " Metres</TD></TR>";
}else if(sChamp_Type == "ENDURANCE" || sChamp_Type == "CAR"){
        sHTML += "<TR><TD class='HeadBox3' BGCOLOR='#A8D3FF' ALIGN=CENTER>Circuit: " + asTrackName[nCurrent_Round] + " - Length: " + anTrackLength[nCurrent_Round] + " Metres</TD></TR>";
}else if(sChamp_Type == "CAR"){
        sHTML += "<TR><TD class='HeadBox3' BGCOLOR='#A8D3FF' ALIGN=CENTER>Circuit: " + asTrackName[nCurrent_Round] + " - Length: " + anTrackLength[nCurrent_Round] + " Metres</TD></TR>";
}

sHTML += "</TABLE><BR>";

sHTML += "<TABLE class='SubjectTable' WIDTH=400 BORDER=1 ALIGN=CENTER>";
sHTML += "<TR><TD class='SubjectBox' BGCOLOR='#E8F3FF' ALIGN=CENTER>Stint Analysis for " + sSelectedDriver1 + "</TD></TR>";
sHTML += "</TABLE>";
sHTML += "<BR>";

//**************************************************

var sPhoto_File_Name = "";
var nPos = 0;
var sPhoto_Driver;

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(sSelectedDriver1.substring(0, sPhoto_Driver.length) == sPhoto_Driver){
       nPos = asDriver_Photo[n].indexOf("||");

       if (nPos != -1) {
          nPos = nPos + 2
          sPhoto_File_Name = asDriver_Photo[n].substring(nPos,asDriver_Photo[n].length);
       } else {
             sPhoto_File_Name = "";
       }

       if(sPhoto_File_Name != ""){
          sHTML += "<TABLE BORDER='0' ALIGN='Center' BGCOLOR='#FFFFFF' CELLPADDING='1' CELLSPACING='3' WIDTH=250>";
          sHTML += "<TR>";
          sHTML += "<TD WIDTH=100%><CENTER><IMG ALT='" + sSelectedDriver1 + "' BORDER=1 SRC='" + sPhoto_File_Name + "' </CENTER></TD>";
          sHTML += "</TR>";
          sHTML += "</TABLE>";
	  sHTML += "<BR>";
       }
       n = asDriver_Photo.length+1;
    }
}

//**************************************************

var sWebPage_Link = "";
var sTemp_WebPage_Link = "";

for (n = 1;n <= asDriver_WebPage.length-1;n++) {

    nPos = asDriver_WebPage[n].indexOf("||");

    if (nPos != -1) {
        sTemp_WebPage_Link = asDriver_WebPage[n].substring(0, nPos);
    } else {
	sTemp_WebPage_Link = "?????";
    }

    if(sSelectedDriver1.substring(0, sTemp_WebPage_Link.length) == sTemp_WebPage_Link){
       nPos = asDriver_WebPage[n].indexOf("||");

       if (nPos != -1) {
          nPos = nPos + 2
          sWebPage_Link = asDriver_WebPage[n].substring(nPos,asDriver_WebPage[n].length);
       } else {
             sWebPage_Link = "";
       }


       if(sWebPage_Link != ""){
          sHTML += "<TABLE BORDER=0 ALIGN=CENTER WIDTH=400>";
          sHTML += "<TR><TD ALIGN=CENTER WIDTH=400><A HREF='" + sWebPage_Link + "' TARGET='_blank'><U>Click Here For Website</U></A></TD></TR>";
          sHTML += "</TABLE><BR>";
       }
       n = asDriver_WebPage.length+1;
    }
}

sHTML += "<TABLE class='DetTable' BORDER='1' WIDTH=800 ALIGN=CENTER>";

sHTML += "<TR>";
sHTML += "<TD class='DetHeadBox' BGCOLOR='#A8D3FF' WIDTH=30 VALIGN=TOP ALIGN=LEFT>'Stint'</TD>";
sHTML += "<TD class='DetHeadBox' BGCOLOR='#A8D3FF' WIDTH=70 VALIGN=TOP ALIGN=LEFT>Lap Range</TD>";

sHTML += "<TD class='DetHeadBox' BGCOLOR='#A8D3FF' WIDTH=50 VALIGN=TOP ALIGN=LEFT>No. Laps</TD>";
sHTML += "<TD class='DetHeadBox' BGCOLOR='#A8D3FF' WIDTH=50 VALIGN=TOP ALIGN=LEFT>'Stint' Time</TD>";

sHTML += "<TD class='DetHeadBox' BGCOLOR='#A8D3FF' WIDTH=50 VALIGN=TOP ALIGN=LEFT>'In Lap'</TD>";
sHTML += "<TD class='DetHeadBox' BGCOLOR='#A8D3FF' WIDTH=50 VALIGN=TOP ALIGN=LEFT>Avg Lap</TD>";
sHTML += "<TD class='DetHeadBox' BGCOLOR='#A8D3FF' WIDTH=50 VALIGN=TOP ALIGN=LEFT>Best Lap</TD>";

sHTML += "</TR>";

nSwitch = 0;
sColour = "";

nStintCount = 0;
nStintStartLap = 1;
nStintTotalTime = 0;
nStintFastestLap = 0;
nStintLaps = 0;

for (z = 1;z <= nDriver_Records;z++) {

    if(TrimString(asINITDriver[z]) == TrimString(sSelectedDriver1)){

       nSelectedDriver = z;
    }
}

for (nLap = 1;nLap <= nRaceLaps;nLap++) {

    if(anINITLapTime[nLap][nSelectedDriver] != 0){
       nStintLaps++;
       nStintTotalTime = nStintTotalTime + anINITLapTime[nLap][nSelectedDriver];
    } 

    if((anINITLapTime[nLap][nSelectedDriver] != 0 && anINITLapTime[nLap][nSelectedDriver] < nStintFastestLap) || nStintFastestLap == 0){
       nStintFastestLap = anINITLapTime[nLap][nSelectedDriver];
    }

    if(anINITLapTime[nLap][nSelectedDriver] > nAvgLap || nLap == nRaceLaps){
       nStintCount++;
       nStintEndLap = nLap;

//*********************************************

       sHTML += "<TR>";

       if(nSwitch == 0){
          sColour = sColour1;
          nSwitch = 1;
       }else{
          sColour = sColour2;
          nSwitch = 0;
       }

       sHTML += "<TD class='DetBox" + nSwitch + "' BGCOLOR='" + sColour + "' WIDTH=30 VALIGN=TOP ALIGN=LEFT>" + nStintCount + "</TD>";

       sHTML += "<TD class='DetBox" + nSwitch + "' BGCOLOR='" + sColour + "' WIDTH=70 VALIGN=TOP ALIGN=LEFT>";
       sHTML += String(nStintStartLap) + " - " + String(nStintEndLap) + "</TD>";

       sHTML += "<TD class='DetBox" + nSwitch + "' BGCOLOR='" + sColour + "' WIDTH=50 VALIGN=TOP ALIGN=LEFT>";
       sHTML += String(nStintLaps) + "</TD>";

       sHTML += "<TD class='DetBox" + nSwitch + "' BGCOLOR='" + sColour + "' WIDTH=50 VALIGN=TOP ALIGN=LEFT>";
       sHTML += Seconds_To_Time(nStintTotalTime) + "</TD>";

       sHTML += "<TD class='DetBox" + nSwitch + "' BGCOLOR='" + sColour + "' WIDTH=80 VALIGN=TOP ALIGN=LEFT>";
       sHTML += Seconds_To_Time(anINITLapTime[nLap][nSelectedDriver]);

       var xLap = 0;
       var n = 0;
       var nMatchDriver = 0;
       var sPitInd1 = "";
       var sPitInd2 = "";

       for (xLap = (nLap-1);xLap <= nLap;xLap++) {
		for (n =1; n <= nDriver_Records;n++) {
			if (TrimString(aGraphData[xLap][n].getEntrantName()) == TrimString(sSelectedDriver1)) {
				nMatchDriver = n;
				if(aGraphData[xLap][nMatchDriver].getPitLap() != "") {
					if(xLap == (nLap-1)) {
						sPitInd1 = aGraphData[xLap][nMatchDriver].getPitLap();
						n = (nDriver_Records+1);
					} else {
						sPitInd2 = aGraphData[xLap][nMatchDriver].getPitLap();
						n = (nDriver_Records+1);
					}
				}
			}
		}
	}

	if (sPitInd2 != "" || sPitInd1 != "") {
		if (nStintLaps == 1) {
			if (nSavedPitLap != (nLap-1)) {
			//if (sPitInd1 != "") {
				sHTML += "<IMG ALT='" + sPitInd1 + " - " + Get_Indicator_Description(sPitInd1,"1") + "' SRC='" + TrimString(sPitInd1) + ".png'>";
			}
			nSavedPitLap = nLap;
	        } else {
             		sHTML += "<IMG ALT='" + sPitInd2 + " - " + Get_Indicator_Description(sPitInd2,"1") + "' SRC='" + TrimString(sPitInd2) + ".png'>";
          }
       }

 
       sHTML += "</TD>";

       if(nStintLaps != 0){
          sHTML += "<TD class='DetBox" + nSwitch + "' BGCOLOR='" + sColour + "' WIDTH=50 VALIGN=TOP ALIGN=LEFT>";
          sHTML += Seconds_To_Time(nStintTotalTime / nStintLaps) + "</TD>";
       }else{
          sHTML += "<TD class='DetBox" + nSwitch + "' BGCOLOR='" + sColour + "' WIDTH=50 VALIGN=TOP ALIGN=LEFT>";
          sHTML += "0</TD>";
       }

       sHTML += "<TD class='DetBox" + nSwitch + "' BGCOLOR='" + sColour + "' WIDTH=50 VALIGN=TOP ALIGN=LEFT>";
       sHTML += Seconds_To_Time(nStintFastestLap) + "</TD>";

       sSaved_TableHTML = sHTML;

//****************************************************************

       nStintStartLap = (nLap+1);
       nStintTotalTime = 0;
       nStintFastestLap = 0;
       nStintLaps = 0;
    } 

}

sHTML += "</TR>";
sHTML += "</TABLE>";

document.getElementById("DivText2").innerHTML = sSaved_TableHTML;

sSelectedDriver1 = "";

}

//*********************************************************************************

function Race_Stats(){

Stop_Race();
clearTimeout(timerID);

document.getElementById("DivText3").innerHTML = "<P></P>";

var nLap;
var Y;

var anStatsFastestLap = new Array(nDriver_Records);
var anStatsFastestLapOn = new Array(nDriver_Records);

var anStatsSlowestLap = new Array(nDriver_Records);
var anStatsSlowestLapOn = new Array(nDriver_Records);

var anStatsLeaderLaps = new Array(nDriver_Records);
var asStatsDriver = new Array(nDriver_Records);
var anStatsTotalTime = new Array(nDriver_Records);
var anStatsCompletedLaps = new Array(nDriver_Records);

if(sChamp_Type == "SPRINT"){
   alert(sChamp_Name + " - " + sChamp_Year + "\r\r" + "Performing Race Analysis for Round " + nCurrent_Round + " - " + asTrackName[nCurrent_Round] + ". Please Wait");
}else if(sChamp_Type == "ENDURANCE" || sChamp_Type == "CAR"){
       if(sChamp_Name == "Endurance Series - The Challenge"){
          alert(sChamp_Name + " - " + sChamp_Year + "\r\r" + "Performing Race Analysis for Round " + nCurrent_Round + " - Race " + nChallenge_RaceNo + " - " + asTrackName[nCurrent_Round] + ". Please Wait");
       }else{
          alert(sChamp_Name + " - " + sChamp_Year + "\r\r" + "Performing Race Analysis for Round " + nCurrent_Round + " - " + asTrackName[nCurrent_Round] + ". Please Wait");
       }
}else if(sChamp_Type == "CAR"){
       alert(sChamp_Name + " - " + sChamp_Year + "\r\r" + "Performing Race Analysis for Round " + nCurrent_Round + " - " + asTrackName[nCurrent_Round] + ". Please Wait");
}

for (z = 1;z <= nDriver_Records;z++) {
    anStatsFastestLap[z] = 0;
    anStatsFastestLapOn[z] = 0;

    anStatsSlowestLap[z] = 0;
    anStatsSlowestLapOn[z] = 0;

    anStatsLeaderLaps[z] = 0;
    asStatsDriver[z] = asDriver[z];
    anStatsTotalTime[z] = 0;
    anStatsCompletedLaps[z] = 0;
}

for (nLap = 1;nLap <= nRaceLaps;nLap++) {
//*************************************************

   sSaved_Driver = "";
   sSaved_TableHTML = "";

   Lap_Positions(nLap,false);

//*************************************************

   //Re-populate grid;
    for (z = 1;z <= nDriver_Records;z++) {

         for (y = 1;y <= nDriver_Records;y++) {
            if(asStatsDriver[y] == asDriver[z]){

               anStatsTotalTime[y] = anTotalTime[z];
               anStatsCompletedLaps[y] = anLapsCompleted[z];

               if(anLapTime[nLap][z] != 0 && (anLapTime[nLap][z] < anStatsFastestLap[y] || anStatsFastestLap[y] == 0)){
                  anStatsFastestLap[y] = anLapTime[nLap][z];
                  anStatsFastestLapOn[y] = nLap;
               }
   
               if(anLapTime[nLap][z] != 0 && (anLapTime[nLap][z] > anStatsSlowestLap[y])){
                  anStatsSlowestLap[y] = anLapTime[nLap][z];
                  anStatsSlowestLapOn[y] = nLap;
               }

               if(z == 1){
                  anStatsLeaderLaps[y] = anStatsLeaderLaps[y] + 1;
               }
            }
        }
   }
}

sCommentary_WinningDriver = asDriver[1];

//*****************************************************

sHTML2 = "<TABLE class='HeadTable1' BORDER=1 ALIGN=CENTER WIDTH=400>";
sHTML2 += "<TR><TD class='HeadBox1' BGCOLOR='#A8D3FF' ALIGN=CENTER>" + sChamp_Name + " - " + sChamp_Year + "</TD></TR>";
sHTML2 += "</TABLE><BR>";

sHTML2 += "<TABLE class='HeadTable2' BORDER=1 ALIGN=CENTER WIDTH=600>";

if(sChamp_Type == "SPRINT"){
   sHTML2 += "<TR><TD class='HeadBox2' BGCOLOR='#A8D3FF' ALIGN=CENTER>Race Statistics for Round " + nCurrent_Round + " - " + asTrackDate[nCurrent_Round] + "</TD></TR>";
}else if(sChamp_Type == "ENDURANCE" || sChamp_Type == "CAR"){
       if(sChamp_Name == "Endurance Series - The Challenge"){
          sHTML2 += "<TR><TD class='HeadBox2' BGCOLOR='#A8D3FF' ALIGN=CENTER>Race Statistics for Round " + nCurrent_Round + " - Race " + nChallenge_RaceNo + " - " + asTrackDate[nCurrent_Round] + "</TD></TR>";
       }else{
          sHTML2 += "<TR><TD  class='HeadBox2' BGCOLOR='#A8D3FF' ALIGN=CENTER>Race Statistics for Round " + nCurrent_Round + " - " + asTrackDate[nCurrent_Round] + "</TD></TR>";
       }
}else if(sChamp_Type == "CAR"){
        sHTML2 += "<TR><TD  class='HeadBox2' BGCOLOR='#A8D3FF' ALIGN=CENTER>Race Statistics for Round " + nCurrent_Round + " - " + asTrackDate[nCurrent_Round] + "</TD></TR>";
}

sHTML2 += "</TABLE><BR>";

sHTML2 += "<TABLE class='HeadTable3' BORDER=1 ALIGN=CENTER WIDTH=600>";

if(sChamp_Type == "SPRINT"){
   sHTML2 += "<TR><TD class='HeadBox3' BGCOLOR='#A8D3FF' ALIGN=CENTER>Circuit: " + asTrackName[nCurrent_Round] + " - Length: " + anTrackLength[nCurrent_Round] + " Metres</TD></TR>";
}else if(sChamp_Type == "ENDURANCE" || sChamp_Type == "CAR"){
        sHTML2 += "<TR><TD class='HeadBox3' BGCOLOR='#A8D3FF' ALIGN=CENTER>Circuit: " + asTrackName[nCurrent_Round] + " - Length: " + anTrackLength[nCurrent_Round] + " Metres</TD></TR>";
}else if(sChamp_Type == "CAR"){
        sHTML2 += "<TR><TD class='HeadBox3' BGCOLOR='#A8D3FF' ALIGN=CENTER>Circuit: " + asTrackName[nCurrent_Round] + " - Length: " + anTrackLength[nCurrent_Round] + " Metres</TD></TR>";
}

sHTML2 += "</TABLE><BR>";

//******************************************************************

var nSlowestLap;
var nSlowestLapOn;
var sSlowestDriver; 

var nFastestLap;
var nFastestLapOn;
var sFastestDriver; 

var nFastestAverageLap;
var sFastestAverageLapDriver;

var nSlowestAverageLap;
var sSlowestAverageLapDriver;

var nCountLaps;
var nGrandTotal;
var nRaceAverageLap;

var nBestGain;
var sBestGainDriver;
var nWorstDrop;
var sWorstDropDriver;

nBestGain = 0;
sBestGainDriver = "";
nBestGainGrid = 0;
nBestGainFinish = 0;
nWorstDrop = 0;
sWorstDropDriver = "";
nWorstDropGrid = 0;
nWorstDropFinish = 0;

nSlowestLap = 0;
sSlowestDriver = "";

nFastestLap = 0;
sFastestDriver = "";

nFastestAverageLap = 0;
sFastestAverageLapDriver = "";

nSlowestAverageLap = 0;
sSlowestAverageLapDriver = "";

nCommentary_FastestLap = 0;
nCommentary_FastestLapOn = 0;
sCommentary_FastestDriver = "";

nRaceAverageLap = 0;

for (z = 1;z <= nDriver_Records;z++) {

    if(anStatsFastestLap[z] != 0 && (anStatsFastestLap[z] < nFastestLap || nFastestLap == 0)){
       nFastestLap = anStatsFastestLap[z];
       nFastestLapOn = anStatsFastestLapOn[z];
       sFastestDriver = asStatsDriver[z];
       nCommentary_FastestLap = nFastestLap;
       nCommentary_FastestLapOn = nFastestLapOn;
       sCommentary_FastestDriver = sFastestDriver;
    }

    if(anStatsFastestLap[z] != 0 && (anStatsFastestLap[z] > nSlowestLap)){
       nSlowestLap = anStatsFastestLap[z];
       nSlowestLapOn = anStatsFastestLapOn[z];
       sSlowestDriver = asStatsDriver[z];
    }

    if(anStatsTotalTime[z] == 0 && anStatsCompletedLaps[z] == 0){
    }else{
       if((anStatsTotalTime[z]/anStatsCompletedLaps[z]) != 0 && (anStatsTotalTime[z]/anStatsCompletedLaps[z]) < nFastestAverageLap || nFastestAverageLap == 0){
          nFastestAverageLap = (anStatsTotalTime[z]/anStatsCompletedLaps[z]);
          sFastestAverageLapDriver = asStatsDriver[z];
       }
    }

    if(anStatsTotalTime[z] == 0 && anStatsCompletedLaps[z] == 0){
    }else{
       if((anStatsTotalTime[z]/anStatsCompletedLaps[z]) != 0 && ((anStatsTotalTime[z]/anStatsCompletedLaps[z]) > nSlowestAverageLap)){
          nSlowestAverageLap = (anStatsTotalTime[z]/anStatsCompletedLaps[z]);
          sSlowestAverageLapDriver = asStatsDriver[z];
       }
    } 

    if((z - asGridPos[z]) < 0){
       if(((z - asGridPos[z]) < nBestGain) || nBestGain == 0){
          nBestGain = (z - asGridPos[z]);
          sBestGainDriver = asDriver[z];
          nBestGainGrid = asGridPos[z];
          nBestGainFinish = z;
       }
    }

    if((z - asGridPos[z]) > 0){
       if(((z - asGridPos[z]) > nWorstDrop) || nWorstDrop == 0){
          nWorstDrop = (z - asGridPos[z]);
          sWorstDropDriver = asDriver[z];
          nWorstDropGrid = asGridPos[z];
          nWorstDropFinish = z;
       }
    }
}

nGrandTotal = 0;

var nDriver_Total = 0;
var nDriver_AVG = 0;
var nDriver_Laps = 0;

for (z = 1; z <= nDriver_Records; z++) {
          
     nDriver_Total = 0;
     nDriver_AVG = 0;
     nDriver_Laps = 0;

     for (nLap = 1; nLap <= nRaceLaps; nLap++) {
          if(anINITLapTime[nLap][z] != 0){
              nDriver_Total = nDriver_Total + anINITLapTime[nLap][z];
              nDriver_Laps++; 
          }
     }

     nDriver_AVG = (nDriver_Total / nDriver_Laps);
     nGrandTotal = nGrandTotal + nDriver_AVG;
}

nRaceAverageLap = (nGrandTotal / nDriver_Records);


sHTML2 += "<TABLE class='StatsTable' BORDER=1 ALIGN=CENTER WIDTH=700>";

if(sChamp_Type == "SPRINT"){
   sHTML2 += "<TR><TD class='StatsCatBox' BGCOLOR='#A8D3FF'>Most Laps Driven</TD><TD class='StatsDetBox1' BGCOLOR='#E8F3FF'>" + nRaceLaps + "&nbsp(" + ((((nRaceLaps * anTrackLength[nCurrent_Round])/1000)/8)*5)  + "&nbspmiles)</TD></TR>";
}else if(sChamp_Type == "ENDURANCE" || sChamp_Type == "CAR"){
       sHTML2 += "<TR><TD class='StatsCatBox' BGCOLOR='#A8D3FF'>Most Laps Driven</TD><TD class='StatsDetBox1' BGCOLOR='#E8F3FF'>" + nRaceLaps + "&nbsp(" + ((((nRaceLaps * anTrackLength[nCurrent_Round])/1000)/8)*5)  + "&nbspmiles)</TD></TR>";
}else if(sChamp_Type == "CAR"){
       sHTML2 += "<TR><TD class='StatsCatBox' BGCOLOR='#A8D3FF'>Most Laps Driven</TD><TD class='StatsDetBox1' BGCOLOR='#E8F3FF'>" + nRaceLaps + "&nbsp(" + ((((nRaceLaps * anTrackLength[nCurrent_Round])/1000)/8)*5)  + "&nbspmiles)</TD></TR>";
}

if(bNoGridTimes == false){
   if(nBestGain < 0){
      nBestGain = nBestGain * -1;
   }

   if(nWorstDrop < 0){
      nWorstDrop = nWorstDrop * -1;
   }

   if(nBestGain == 1){
      sHTML2 += "<TR><TD class='StatsCatBox' BGCOLOR='#A8D3FF'>Best Gained Positions</TD><TD class='StatsDetBox2' BGCOLOR='#E8F3FF'><B>" + sBestGainDriver + "</B>&nbsp(+" + nBestGain  + "&nbsp place) - Grid " + nBestGainGrid + " to " + nBestGainFinish + "</TD></TR>";
   }else{
      sHTML2 += "<TR><TD class='StatsCatBox' BGCOLOR='#A8D3FF'>Best Gained Positions</TD><TD class='StatsDetBox2' BGCOLOR='#E8F3FF'><B>" + sBestGainDriver + "</B>&nbsp(+" + nBestGain  + "&nbsp places) - Grid " + nBestGainGrid + " to " + nBestGainFinish + "</TD></TR>";
   }

   if(nWorstDrop == 1){
      sHTML2 += "<TR><TD class='StatsCatBox' BGCOLOR='#A8D3FF'>Worst Lost Positions</TD><TD class='StatsDetBox2' BGCOLOR='#E8F3FF'><B>" + sWorstDropDriver + "</B>&nbsp(-" + nWorstDrop  + "&nbsp place) - Grid " + nWorstDropGrid + " to " + nWorstDropFinish + "</TD></TR>";
   }else{
      sHTML2 += "<TR><TD class='StatsCatBox' BGCOLOR='#A8D3FF'>Worst Lost Positions</TD><TD class='StatsDetBox2' BGCOLOR='#E8F3FF'><B>" + sWorstDropDriver + "</B>&nbsp(-" + nWorstDrop  + "&nbsp places) - Grid " + nWorstDropGrid + " to " + nWorstDropFinish + "</TD></TR>";
   }
}


if(sChamp_Type == "SPRINT"){
   sHTML2 += "<TR><TD class='StatsCatBox' BGCOLOR='#A8D3FF'>Fastest Best Lap</TD><TD class='StatsDetBox2' BGCOLOR='#D2E8FF'><B>" + sFastestDriver + "</B> - " + Seconds_To_Time(nFastestLap) + "&nbsp(" + format_MPH(3600 / (((nFastestLap / anTrackLength[nCurrent_Round])*1000)*1.6093)) + "mph) On Lap " + nFastestLapOn + "</TD></TR>";
}else if(sChamp_Type == "ENDURANCE" || sChamp_Type == "CAR"){
   sHTML2 += "<TR><TD class='StatsCatBox' BGCOLOR='#A8D3FF'>Fastest Best Lap</TD><TD class='StatsDetBox2' BGCOLOR='#D2E8FF'><B>" + sFastestDriver + "</B> - " + Seconds_To_Time(nFastestLap) + "&nbsp(" + format_MPH(3600 / (((nFastestLap / anTrackLength[nCurrent_Round])*1000)*1.6093)) + "mph) On Lap " + nFastestLapOn + "</TD></TR>";
}else if(sChamp_Type == "CAR"){
   sHTML2 += "<TR><TD class='StatsCatBox' BGCOLOR='#A8D3FF'>Fastest Best Lap</TD><TD class='StatsDetBox2' BGCOLOR='#D2E8FF'><B>" + sFastestDriver + "</B> - " + Seconds_To_Time(nFastestLap) + "&nbsp(" + format_MPH(3600 / (((nFastestLap / anTrackLength[nCurrent_Round])*1000)*1.6093)) + "mph) On Lap " + nFastestLapOn + "</TD></TR>";
}

if(sChamp_Type == "SPRINT"){
   sHTML2 += "<TR><TD class='StatsCatBox' BGCOLOR='#A8D3FF'>Slowest Best Lap</TD><TD class='StatsDetBox2' BGCOLOR='#D2E8FF'><B>" + sSlowestDriver + "</B> - " + Seconds_To_Time(nSlowestLap) + "&nbsp(" + format_MPH(3600 / (((nSlowestLap / anTrackLength[nCurrent_Round])*1000)*1.6093)) + "mph) On Lap " + nSlowestLapOn + "</TD></TR>";
}else if(sChamp_Type == "ENDURANCE" || sChamp_Type == "CAR"){
   sHTML2 += "<TR><TD class='StatsCatBox' BGCOLOR='#A8D3FF'>Slowest Best Lap</TD><TD class='StatsDetBox2' BGCOLOR='#D2E8FF'><B>" + sSlowestDriver + "</B> - " + Seconds_To_Time(nSlowestLap) + "&nbsp(" + format_MPH(3600 / (((nSlowestLap / anTrackLength[nCurrent_Round])*1000)*1.6093)) + "mph) On Lap " + nSlowestLapOn + "</TD></TR>";
}else if(sChamp_Type == "CAR"){
   sHTML2 += "<TR><TD class='StatsCatBox' BGCOLOR='#A8D3FF'>Slowest Best Lap</TD><TD class='StatsDetBox2' BGCOLOR='#D2E8FF'><B>" + sSlowestDriver + "</B> - " + Seconds_To_Time(nSlowestLap) + "&nbsp(" + format_MPH(3600 / (((nSlowestLap / anTrackLength[nCurrent_Round])*1000)*1.6093)) + "mph) On Lap " + nSlowestLapOn + "</TD></TR>";
}

if(sChamp_Type == "SPRINT"){
   sHTML2 += "<TR><TD class='StatsCatBox' BGCOLOR='#A8D3FF'>Fastest Average Lap</TD><TD class='StatsDetBox2' BGCOLOR='#D2E8FF'><B>" + sFastestAverageLapDriver + "</B> - " + Seconds_To_Time(nFastestAverageLap) + "&nbsp(" + format_MPH(3600 / (((nFastestAverageLap / anTrackLength[nCurrent_Round])*1000)*1.6093)) + "mph)</TD></TR>";
}else if(sChamp_Type == "ENDURANCE" || sChamp_Type == "CAR"){
   sHTML2 += "<TR><TD class='StatsCatBox' BGCOLOR='#A8D3FF'>Fastest Average Lap</TD><TD class='StatsDetBox2' BGCOLOR='#D2E8FF'><B>" + sFastestAverageLapDriver + "</B> - " + Seconds_To_Time(nFastestAverageLap) + "&nbsp(" + format_MPH(3600 / (((nFastestAverageLap / anTrackLength[nCurrent_Round])*1000)*1.6093)) + "mph)</TD></TR>";
}else if(sChamp_Type == "CAR"){
   sHTML2 += "<TR><TD class='StatsCatBox' BGCOLOR='#A8D3FF'>Fastest Average Lap</TD><TD class='StatsDetBox2' BGCOLOR='#D2E8FF'><B>" + sFastestAverageLapDriver + "</B> - " + Seconds_To_Time(nFastestAverageLap) + "&nbsp(" + format_MPH(3600 / (((nFastestAverageLap / anTrackLength[nCurrent_Round])*1000)*1.6093)) + "mph)</TD></TR>";
}

if(sChamp_Type == "SPRINT"){
   sHTML2 += "<TR><TD class='StatsCatBox' BGCOLOR='#A8D3FF'>Slowest Average Lap</TD><TD class='StatsDetBox2' BGCOLOR='#D2E8FF'><B>" + sSlowestAverageLapDriver + "</B> - " + Seconds_To_Time(nSlowestAverageLap) + "&nbsp(" + format_MPH(3600 / (((nSlowestAverageLap / anTrackLength[nCurrent_Round])*1000)*1.6093)) + "mph)</TD></TR>";
}else if(sChamp_Type == "ENDURANCE" || sChamp_Type == "CAR"){
   sHTML2 += "<TR><TD class='StatsCatBox' BGCOLOR='#A8D3FF'>Slowest Average Lap</TD><TD class='StatsDetBox2' BGCOLOR='#D2E8FF'><B>" + sSlowestAverageLapDriver + "</B> - " + Seconds_To_Time(nSlowestAverageLap) + "&nbsp(" + format_MPH(3600 / (((nSlowestAverageLap / anTrackLength[nCurrent_Round])*1000)*1.6093)) + "mph)</TD></TR>";
}else if(sChamp_Type == "CAR"){
   sHTML2 += "<TR><TD class='StatsCatBox' BGCOLOR='#A8D3FF'>Slowest Average Lap</TD><TD class='StatsDetBox2' BGCOLOR='#D2E8FF'><B>" + sSlowestAverageLapDriver + "</B> - " + Seconds_To_Time(nSlowestAverageLap) + "&nbsp(" + format_MPH(3600 / (((nSlowestAverageLap / anTrackLength[nCurrent_Round])*1000)*1.6093)) + "mph)</TD></TR>";
}

if(sChamp_Type == "SPRINT"){
   sHTML2 += "<TR><TD class='StatsCatBox' BGCOLOR='#A8D3FF'>Race Average Lap</TD><TD class='StatsDetBox2' BGCOLOR='#D2E8FF'>" + Seconds_To_Time(nRaceAverageLap) + "&nbsp(" + format_MPH(3600 / (((nRaceAverageLap / anTrackLength[nCurrent_Round])*1000)*1.6093)) + "mph)</TD></TR>";
}else if(sChamp_Type == "ENDURANCE" || sChamp_Type == "CAR"){
   sHTML2 += "<TR><TD class='StatsCatBox' BGCOLOR='#A8D3FF'>Race Average Lap</TD><TD class='StatsDetBox2' BGCOLOR='#D2E8FF'>" + Seconds_To_Time(nRaceAverageLap) + "&nbsp(" + format_MPH(3600 / (((nRaceAverageLap / anTrackLength[nCurrent_Round])*1000)*1.6093)) + "mph)</TD></TR>";
}else if(sChamp_Type == "CAR"){
   sHTML2 += "<TR><TD class='StatsCatBox' BGCOLOR='#A8D3FF'>Race Average Lap</TD><TD class='StatsDetBox2' BGCOLOR='#D2E8FF'>" + Seconds_To_Time(nRaceAverageLap) + "&nbsp(" + format_MPH(3600 / (((nRaceAverageLap / anTrackLength[nCurrent_Round])*1000)*1.6093)) + "mph)</TD></TR>";
}

sHTML2 += "</TABLE><BR>";

//*******************************

sHTML2 += "<TABLE class='StatsLeadersTable' BORDER=1 ALIGN=CENTER WIDTH=400>";
sHTML2 += "<TR><TD class='StatsLeadersBox' BGCOLOR='#A8D3FF' ALIGN=CENTER>Race Leaders</TD></TR>";
sHTML2 += "</TABLE><BR>";

nSwitch = 0;
sColour = "";

sHTML2 += "<TABLE class='StatsLeadersTable' BORDER=1 ALIGN=CENTER WIDTH=400>";

for (z = 1;z <= nDriver_Records;z++) {
    if(anStatsLeaderLaps[z] > 0){
       if(nSwitch == 0){
          sColour = sColour1;
          nSwitch = 1;
       }else{
          sColour = sColour2;
          nSwitch = 0;
       }

       if(anStatsLeaderLaps[z] == 1){
          sHTML2 += "<TR><TD class='LeaderBox" + nSwitch + "' BGCOLOR='" + sColour + "' ALIGN=CENTER>" + asStatsDriver[z] + " - " + anStatsLeaderLaps[z] + " Lap (" + parseInt((anStatsLeaderLaps[z]/nRaceLaps)*100) + "%)</TD></TR>";
       }else{
          sHTML2 += "<TR><TD class='LeaderBox" + nSwitch + "' BGCOLOR='" + sColour + "' ALIGN=CENTER>" + asStatsDriver[z] + " - " + anStatsLeaderLaps[z] + " Laps (" + parseInt((anStatsLeaderLaps[z]/nRaceLaps)*100) + "%)</TD></TR>";
       }
    }
}

sHTML2 += "</TABLE><BR>";

//*****************************************************

if(bNoRaceAnalysisDisplay == false){
//   document.all.DivText2.innerHTML = sHTML + sHTML2;
     document.getElementById("DivText2").innerHTML = sHTML + sHTML2;
}

bNoRaceAnalysisDisplay = false;

}

//***********************************************************************************

function TrimString(sPassedString) {

var nLen;
var sTempString = sPassedString;
var nStart = 0;
var nEnd = 0;
var n = 0;
var bFound = false;

nLen = (sPassedString.length-1);

while (n <= nLen && bFound == false) {

      if (sPassedString.charAt(n) != " " && sPassedString.charAt(n) != "\t") {
         nStart = n;
         bFound = true;
      } else {
           n++;
      }
}

bFound = false;

n = (sPassedString.length);

while (n > 0 && bFound == false) {
      if (sPassedString.charAt(n) != " "  && sPassedString.charAt(n) != "\t") {
         nEnd = n;
         bFound = true;
      } else {
           n--;
      }
}


if (nStart != 0 && nEnd != 0) {
   sTempString = sPassedString.substring(nStart, nEnd-1);
}

return sTempString;

}   

//***********************************************************************************
function Race_Reporting(){

var X;
var nLap;
var sHTML;

Stop_Race();
clearTimeout(timerID);

document.getElementById("DivText2").innerHTML = "<P></P>";
document.getElementById("DivText3").innerHTML = "<P></P>";
document.getElementById("DivText4").innerHTML = "<P></P>";

sSelectedDriver1 = asDriver[1];
sSelectedDriver2 = asDriver[1];

sHTML2 = "";

Build_Selected_List();

if(sHTML2 == ""){
   sHTML2 = "<OPTION>No Selections";
}

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>Race Analysis for Round " + nCurrent_Round + " - " + asTrackDate[nCurrent_Round] + "</TD></TR>";
}else if(sChamp_Type == "ENDURANCE" || sChamp_Type == "CAR"){
       if(sChamp_Name == "Endurance Series - The Challenge"){
          sHTML += "<TR><TD class='HeadBox2' BGCOLOR='#A8D3FF' ALIGN=CENTER>Race Analysis for Round " + nCurrent_Round + " - Race " + nChallenge_RaceNo + " - " + asTrackDate[nCurrent_Round] + "</TD></TR>";
       }else{
          sHTML += "<TR><TD class='HeadBox2' BGCOLOR='#A8D3FF' ALIGN=CENTER>Race Analysis for Round " + nCurrent_Round + " - " + asTrackDate[nCurrent_Round] + "</TD></TR>";
       }
}else if(sChamp_Type == "CAR"){
        sHTML += "<TR><TD class='HeadBox2' BGCOLOR='#A8D3FF' ALIGN=CENTER>Race Analysis for Round " + nCurrent_Round + " - " + asTrackDate[nCurrent_Round] + "</TD></TR>";
}

sHTML += "</TABLE><BR>";

sHTML += "<TABLE class='HeadTable3' BORDER=1 ALIGN=CENTER WIDTH=600>";

if(sChamp_Type == "SPRINT"){
   sHTML += "<TR><TD class='HeadBox3' BGCOLOR='#A8D3FF' ALIGN=CENTER>Circuit: " + asTrackName[nCurrent_Round] + " - Length: " + anTrackLength[nCurrent_Round] + " Metres</TD></TR>";
}else if(sChamp_Type == "ENDURANCE" || sChamp_Type == "CAR"){
        sHTML += "<TR><TD class='HeadBox3' BGCOLOR='#A8D3FF' ALIGN=CENTER>Circuit: " + asTrackName[nCurrent_Round] + " - Length: " + anTrackLength[nCurrent_Round] + " Metres</TD></TR>";
}else if(sChamp_Type == "CAR"){
        sHTML += "<TR><TD class='HeadBox3' BGCOLOR='#A8D3FF' ALIGN=CENTER>Circuit: " + asTrackName[nCurrent_Round] + " - Length: " + anTrackLength[nCurrent_Round] + " Metres</TD></TR>";
}

sHTML += "</TABLE><BR>";

//*************************************************************************************************************

sHTML += "<BR><TABLE class='ControlTable' BORDER=0 ALIGN=CENTER WIDTH=900>";
sHTML += "<TR>";

sHTML += "<TD class='ControlBox' BGCOLOR='#E8F3FF' ALIGN=CENTER WIDTH=500>";

sHTML += " Select Entrant to Watch : <SELECT ID='SelectWatchTeam'>";

for (nLoop = 1;nLoop <= nDriver_Records;nLoop++) {
    sHTML += "<OPTION>" + asDriver[nLoop];
}

sHTML += "</SELECT>";
sHTML += "<INPUT TYPE='BUTTON' VALUE='Add To List -->' onClick='Add_To_WatchedList()'></INPUT>";
sHTML += "</TD>";

sHTML += "<TD class='ControlBox' BGCOLOR='#E8F3FF' ALIGN=CENTER WIDTH=350>";

sHTML += " Watched List : <SELECT ID='SelectWatchedTeams'>";
sHTML += sHTML2;
sHTML += "</SELECT>";
sHTML += "<INPUT TYPE='BUTTON' VALUE='Clear List' onClick='Clear_WatchedList()'></INPUT>";
sHTML += "</TD>";

sHTML += "</TR>";
sHTML += "</TABLE></TD><BR>";

sHTML += "<TABLE class='ControlTable' BORDER=0 ALIGN=CENTER WIDTH=900>";
sHTML += "<TR>";

sHTML += "<TD class='ControlBox' BGCOLOR='#E8F3FF' ALIGN=CENTER WIDTH=550>";
sHTML += " Select Lap Interval for Reporting : <SELECT ID='SelectCommInterval'>";

for (nLoop = 1;nLoop <= nRaceLaps;nLoop++) {
    if (nLoop == nSelectedCommInterval) {
       sHTML += "<OPTION SELECTED>" + nLoop;
    } else {
       sHTML += "<OPTION>" + nLoop;
    }
}

sHTML += "</SELECT>";
sHTML += "<INPUT TYPE='BUTTON' VALUE='Select' onClick='Select_Commentary_Interval()'></INPUT>";
sHTML += "</TD>";

if(bCommentary_Switch_On == true){
   sHTML += "<TD class='ControlBox' ALIGN=CENTER WIDTH=300><INPUT TYPE='BUTTON' VALUE='Switch Commentary OFF' onClick='Commentary_OnOff()'></INPUT></TD>";
}else if(bCommentary_Switch_On == false){
   sHTML += "<TD class='ControlBox' ALIGN=CENTER WIDTH=300><INPUT TYPE='BUTTON' VALUE='Switch Commentary ON' onClick='Commentary_OnOff()'></INPUT></TD>";
}

sHTML += "<TD class='ControlBox' ALIGN=CENTER WIDTH=300><INPUT TYPE='BUTTON' VALUE='Produce Race Report' onClick='Race_Reporting_Analysis()'></INPUT></TD>";

sHTML += "</TR>";
sHTML += "</TABLE>";
sHTML += "</TD>";

sHTML += "</TR>";
sHTML += "</TABLE>";

nSwitch = 0;
sColour = "";

//document.all.DivText2.innerHTML = sHTML;
document.getElementById("DivText2").innerHTML = sHTML;

bNoRecalc = false;

}

//***********************************************************************************************

function Select_Commentary_Interval(){

var nIndex;

nIndex = document.Form1.SelectCommInterval.selectedIndex;
nSelectedCommInterval = Number(document.Form1.SelectCommInterval.options[nIndex].text);

}


//***********************************************************************************************

function Add_To_WatchedList() {

var nIndex;
var bExists;

nIndex = document.Form1.SelectWatchTeam.selectedIndex;
sSelectedWatchedDriver = document.Form1.SelectWatchTeam.options[nIndex].text;

bExists = false;

for (m = 1;m <= nDriver_Records;m++) {
    if(sSelectedWatchedDriver == asWatchedDrivers[m]){
       bExists = true;
       m = nDriver_Records+1;
    }
}

if(bExists == false){
   for (n = 1;n <= nDriver_Records;n++) {
       if(asWatchedDrivers[n] == "") {
          asWatchedDrivers[n] = sSelectedWatchedDriver;
          n = nDriver_Records+1;
       }
   }
}

Race_Reporting();

}

//***********************************************************************************************

function Build_Selected_List() {

sHTML2 = "";

for (n = 1;n <= nDriver_Records;n++) {
    if(asWatchedDrivers[n] != ""){
      sHTML2 += "<OPTION>" + asWatchedDrivers[n];
    }
}

if(sHTML2 == ""){
   sHTML2 = "<OPTION>No Selections";
} 

}

//***********************************************************************************************

function Clear_WatchedList() {

for (n = 1;n <= nDriver_Records;n++) {
    asWatchedDrivers[n] = "";
}

sHTML2 = "<OPTION>No Selections";

Race_Reporting();

}

//************************************************************************
//** Store Top Ten from previous lap
//************************************************************************

function Top10_In_Out(){

var bDriverExists;
var nDropCount;
var nNewCount;

nDropCount = 0;
nNewCount  = 0;

for (n = 1;n <= 10;n++) {
    asDropOut_Driver[n] = "";
    anDropOut_LapTime[n] = 0;
    anDropOut_LapPos[n] = 0;
    asDropOut_PitLap[n] = "";

    asNewIn_Driver[n] = "";
    anNewIn_LapTime[n] = 0;
    anNewIn_LapPos[n] = 0;
    asNewIn_PitLap[n] = "";
}

//First the drop outs

for (x = 1;x <= 10;x++) {
    bDriverExists = false;
    for (y = 1;y <= 10;y++) {
        if(asT10_Driver_1[x] == asT10_Driver_2[y]){
           bDriverExists = true;
           y = 11;
        }
    }

    if(bDriverExists == false){
       nDropCount++;
       asDropOut_Driver[nDropCount] = asT10_Driver_1[x];
       anDropOut_LapTime[nDropCount] = anT10_LapTime_1[x];
       anDropOut_LapPos[nDropCount] = anT10_LapPos_1[x];
       asDropOut_PitLap[nDropCount] = asT10_PitLap_1[x];
    }
}

//Next The New Ins

for (x = 1;x <= 10;x++) {
    bDriverExists = false;
    for (y = 1;y <= 10;y++) {
        if(asT10_Driver_2[x] == asT10_Driver_1[y]){
           bDriverExists = true;
           y = 11;
        }
    }

    if(bDriverExists == false){
       nNewCount++;
       asNewIn_Driver[nNewCount] = asT10_Driver_2[x];
       anNewIn_LapTime[nNewCount] = anT10_LapTime_2[x];
       anNewIn_LapPos[nNewCount] = anT10_LapPos_2[x];
       asNewIn_PitLap[nNewCount] = asT10_PitLap_2[x];
    }
}

}

//*************************************************************************
//** Work out position string
//*************************************************************************

function Get_Position_String(nPassedPos) {

var nTempLen = 0;
var nTempString = "";
var asPositionString = new Array(19);

asPositionString[0] = "0th";
asPositionString[1] = "1st";
asPositionString[2] = "2nd";
asPositionString[3] = "3rd";
asPositionString[4] = "4th";
asPositionString[5] = "5th";
asPositionString[6] = "6th";
asPositionString[7] = "7th";
asPositionString[8] = "8th";
asPositionString[9] = "9th";
asPositionString[10] = "10th";
asPositionString[11] = "11th";
asPositionString[12] = "12th";
asPositionString[13] = "13th";
asPositionString[14] = "14th";
asPositionString[15] = "15th";
asPositionString[16] = "16th";
asPositionString[17] = "17th";
asPositionString[18] = "18th";
asPositionString[19] = "19th";

if(nPassedPos > 0 && nPassedPos < 20) {
   return asPositionString[nPassedPos];
}

if (nPassedPos > 19 && nPassedPos < 101) {
   nTempLen = String(nPassedPos).length;
   nTempString = String(nPassedPos).substring(nTempLen-1, nTempLen);
   return String(nPassedPos).substring(0, nTempLen-1) + asPositionString[Number(nTempString)];
}


if(nPassedPos > 100){
  return "P" + String(nPassedPos);
}

}

//**********************************************************************************************************
//** Work out gap to team in front, || leader, and/or if(gap has gone up || down since last lap
//**********************************************************************************************************

function Team_Gap(nPassedPos, nSelectedLap) {

bTeam_Gap_Down = false;
bTeam_Gap_Up = false;

nTeamGapNEW = 0;
nTeamGapOLD = 0;

if(nPassedPos = 1 || nPassedPos > 9){
   return;
}

//Gap to next team - Only if(selected team is on lead lap.

if(anT10_LapsCompleted_2[nPassedPos] == nSelectedLap){ 
   nPoints_diff = TruncNum(anT10_TotalTime_2[nPassedPos+1]) - TruncNum(anT10_TotalTime_2[nPassedPos]);

   nTeamGapNEW = Seconds_To_Time(nPoints_Diff);
}

//Now see if(team positions are the same as on previous lap && if(so, work out if(gap up || down.

if(nSelectedLap > 1){
   if(asT10_Driver_2[nPassedPos] == asT10_Driver_1[nPassedPos] && asT10_Driver_2[nPassedPos+1] == asT10_Driver_1[nPassedPos+1]){
      if(anT10_LapsCompleted_1[nPassedPos] == nSelectedLap-1) {
         nPoints_diff = TruncNum(anT10_TotalTime_1[nPassedPos+1]) - TruncNum(anT10_TotalTime_1[nPassedPos]);

        nTeamGapOLD = Seconds_To_Time(nPoints_Diff);
      }
   }
}

if(nTeamGapNEW != 0 && nTeamGapOLD != 0){
   if(nTeamGapOLD < nTeamGapNEW){
      bTeam_Gap_Up = true;
   }

   if(nTeamGapOLD > nTeamGapNEW){
      bTeam_Gap_Down = true;
   }
}

}

//**********************************************************************************************************
//** Work out gap to team in front, || leader, and/or if(gap has gone up || down since last lap
//**********************************************************************************************************

function Leader_Gap(nSelectedLap) {

var nPoints_Diff = 0;

bLeader_Down = false;
bLeader_Up = false;

nLeaderGapNEW = 0;
nLeaderGapOLD = 0;

if(nSelectedLap == 1){
   return;
}

//Gap to Leader - Only if 2nd Pos team is on lead lap.

if(anT10_LapsCompleted_2[2] == nSelectedLap) { 
   nPoints_Diff = TruncNum(anT10_TotalTime_2[2]) - TruncNum(anT10_TotalTime_2[1]);

   nLeaderGapNEW = Seconds_To_Time(nPoints_Diff);
}

//Now see if(team positions are the same as on previous lap && if(so, work out if(gap up || down.

if(nSelectedLap > 1) {
   if(asT10_Driver_2[2] == asT10_Driver_1[2] && asT10_Driver_2[1] == asT10_Driver_1[1]) {

      if(anT10_LapsCompleted_1[2] == nSelectedLap-1) {
         nPoints_Diff = TruncNum(anT10_TotalTime_1[2]) - TruncNum(anT10_TotalTime_1[1]);

         nLeaderGapOLD = Seconds_To_Time(nPoints_Diff);
      }
   }
}

if(nLeaderGapNEW != 0 && nLeaderGapOLD != 0) {
   if(nLeaderGapOLD < nLeaderGapNEW) {
      bLeader_Gap_Up = true;
   }

   if(nLeaderGapOLD > nLeaderGapNEW){
      bLeader_Gap_Down = true;
   }
}

}

//*****************************************************************************
//** Find Driver's Position now and Lap Time//*****************************************************************************

function Find_Driver_Pos(sPassedDriver, nSelectedLap) {

nFound_Pos = 0;
nFound_LapTime = 0;

for (n = 1;n <= nDriver_Records;n++) {
    if(asDriver[n] == sPassedDriver) {
       nFound_Pos = n;
       nFound_LapTime = anINITLapTime[nSelectedLap][n];
       n = nDriver_Records + 1;
    }
}

}

//*****************************************************************************
//** Find Best Gained Positions
//*****************************************************************************

function Best_Gained_Positions(nSelectedLap) {

//** WORK OUT BEST POSITIONS POSITIONS FROM PREVIOUS LAP/START

nBestGain = 0;
sBestGain_Driver = "";

for (z = 1;z <= nDriver_Records;z++) {
    if(nSelectedLap > 1) {
       sGain = z - asLapPos[(nSelectedLap-1)][z];

       if(sGain < 0) {
          sGain = sGain * -1;
       }

       if(z - asLapPos[(nSelectedLap-1)][z] < 0){
          //Gained sGain places
          if(sGain > nBestGain) {
             nBestGain = sGain;
             sBestGain_Driver = asDriver[z];
          }   
       }
    }else{
       sGain = z - asGridPos[z];

       if(sGain < 0) {
          sGain = sGain * -1;
       }

       if(z - asGridPos[z] < 0){
          //Gained sGain places
          if(sGain > nBestGain) {
             nBestGain = sGain;
             sBestGain_Driver = asDriver[z];
          }  
       } 
    }
}

}

//*****************************************************************************
//** Populate Driver String
//*****************************************************************************

function Driver_String(nStartDriver, nEndDriver, sPositionsYN, sPassed_Array_Type, sPassed_UpDown) {

var sTemp_Driver_String;
var nDriver_NewPos;
var nDriver_OldPos;
var sUpDown;

sTemp_Driver_String = "";
sDriver = "";
nDriver_NewPos = 0;
nDriver_OldPos = 0;
sUpDown = " ";

if(nStartDriver > 10 || nStartDriver > nEndDriver) {
   return "";
}

for (n = nStartDriver;n <= nEndDriver-1;n++) {

   if(sPassed_Array_Type == "T10_1") {
      sDriver = asT10_Driver_1[n];
   }else if(sPassed_Array_Type == "T10_2") {
          sDriver = asT10_Driver_2[n];
          nDriver_NewPos = n;
          nDriver_OldPos = 0;

          for (x = 1;x <= 10;x++) {
              if(sDriver == asT10_Driver_1[x]) {
                 nDriver_OldPos = x;
              }
          }
   }else if(sPassed_Array_Type == "DropOuts") {
         sDriver = asDropOut_Driver[n];
   }else if(sPassed_Array_Type == "NewIns") {
          sDriver = asNewIn_Driver[n];
   }

   if(n == nStartDriver) {
      sTemp_Driver_String = sTemp_Driver_String + sDriver;
   }else{
      sTemp_Driver_String = sTemp_Driver_String + "," + sDriver;
   }

   if(TrimString(sPositionsYN) != "") {
      if(sPassed_Array_Type == "T10_2") {
         if(TrimString(sPassed_UpDown) != "") {
            if(nDriver_OldPos != 0 || nDriver_NewPos != 0) {
               sUpDown = " "; 

               if(nDriver_OldPos < nDriver_NewPos && nDriver_OldPos != 0) {
                  if((nDriver_NewPos - nDriver_OldPos) > 1 && nDriver_OldPos != 0) {
                     sUpDown = " down " + (nDriver_NewPos - nDriver_OldPos) + " to ";
                  }else{
                     sUpDown = " down to ";
                  }   
               }else{
                  if(nDriver_OldPos > nDriver_NewPos || nDriver_OldPos == 0) {
                     if((nDriver_OldPos - nDriver_NewPos) > 1 && nDriver_OldPos != 0) {
                        sUpDown = " up " + (nDriver_OldPos - nDriver_NewPos) + " to ";
                     }else{
                        sUpDown = " up to ";
                     }   
                  }
               }

               sTemp_Driver_String = sTemp_Driver_String + sUpDown + Get_Position_String(n);
            }
         }else{
            sTemp_Driver_String = sTemp_Driver_String + " " + Get_Position_String(n);
         }
      }else{
         sTemp_Driver_String = sTemp_Driver_String + " " + Get_Position_String(n);
      }
   }
}

if(sPassed_Array_Type == "T10_1") {
   sDriver = asT10_Driver_1[nEndDriver];
}else if(sPassed_Array_Type == "T10_2") {
       sDriver = asT10_Driver_2[nEndDriver];
       nDriver_NewPos = nEndDriver;
       nDriver_OldPos = 0;

       for (x = 1;x <= 10;x++) {
           if(sDriver == asT10_Driver_1[x]){
              nDriver_OldPos = x;
           }
       }
}else if(sPassed_Array_Type == "DropOuts") {
       sDriver = asDropOut_Driver[nEndDriver];
}else if(sPassed_Array_Type == "NewIns") {
       sDriver = asNewIn_Driver[nEndDriver];
}

if((nEndDriver - nStartDriver) > 0) {
   sTemp_Driver_String = sTemp_Driver_String + " and " + sDriver;
}else{
   sTemp_Driver_String = sTemp_Driver_String + sDriver;
}

if(TrimString(sPositionsYN) != "") { 
   if(sPassed_Array_Type == "T10_2") {
      if(TrimString(sPassed_UpDown) != "") {
         if(nDriver_OldPos != 0 || nDriver_NewPos != 0) {
            sUpDown = " "; 

            if(nDriver_OldPos < nDriver_NewPos && nDriver_OldPos != 0) {
               if((nDriver_NewPos - nDriver_OldPos) > 1 && nDriver_OldPos != 0) {
                  sUpDown = " down " + String(nDriver_NewPos - nDriver_OldPos) + " to ";
               }else{
                  sUpDown = " down to ";
               }  
            }else{
               if(nDriver_OldPos > nDriver_NewPos || nDriver_OldPos == 0) {
                  if((nDriver_OldPos - nDriver_NewPos) > 1 && nDriver_OldPos != 0) {
                     sUpDown = " up " + String(nDriver_OldPos - nDriver_NewPos) + " to ";
                  }else{
                     sUpDown = " up to ";
                  }   
               }
            }

            sTemp_Driver_String = sTemp_Driver_String + sUpDown + Get_Position_String(nEndDriver);
         }
      }else{
         sTemp_Driver_String = sTemp_Driver_String + " " + Get_Position_String(nEndDriver);
      }
   }else{
      sTemp_Driver_String = sTemp_Driver_String + " " + Get_Position_String(nEndDriver);
   }
}

return sTemp_Driver_String;

}

//*****************************************************************************
//** Edit Phrase
//****************************************************************************

function Phrase_Edit(sPassedPhrase) {

var sSearch = "";

sCopyPhrase = sPassedPhrase;

sTempPhrase = "";

for (n = 1;n <= nEditArrayLen;n++) {

    sSearch = "#" + asEdit_Rules_Array[n].substring(0,asEdit_Rules_Array[n].indexOf(" ")) + "#";

    nPos = sCopyPhrase.indexOf(sSearch);

    if (nPos != -1) {
       sTempPhrase = sCopyPhrase.substring(0, nPos) + asEdit_Rules_Array[n].substring(15, asEdit_Rules_Array[n].length);
       nPos2 = (nPos + sSearch.length);
       sTempPhrase = sTempPhrase + sCopyPhrase.substring(nPos2, sCopyPhrase.length);
       sCopyPhrase = sTempPhrase;
    }
}


return sCopyPhrase;

}

//*********************************************************************************
//** Race Reporting
//*********************************************************************************

function Race_Reporting_Analysis() {

var X;
var nPos;
var nCount;

nCount = 0;

bCommentary_Switch_On = true;

//****************************************************************************************************************

var oNewWin = window.open("", "newwin", "height=900, width=900,toolbar=yes,scrollbars=yes,menubar=yes");

if(sChamp_Type == "SPRINT") {
  oNewWin.document.write("<TITLE>Auto-Race Report for Round " + nCurrent_Round + " - " + asTrackName[nCurrent_Round] + " - " + asTrackDate[nCurrent_Round] + "</TITLE>");
}else if(sChamp_Type == "ENDURANCE" || sChamp_Type == "CAR") {
       if(sChamp_Name == "Endurance Series - The Challenge") {
         oNewWin.document.write("<TITLE>Auto-Race Report for Round " + nCurrent_Round + " - " + asTrackName[nCurrent_Round] + " - " + asTrackDate[nCurrent_Round] + " - Race " + nChallenge_RaceNo + " - " + asTrackDate[nCurrent_Round] + "</TITLE>");
       }else{
            oNewWin.document.write("<TITLE>Auto-Race Report for Round " + nCurrent_Round + " - " + asTrackName[nCurrent_Round] + " - " + asTrackDate[nCurrent_Round] + "</TITLE>");
       }
}else if(sChamp_Type == "CAR"){
        oNewWin.document.write("<TITLE>Auto-Race Report for Round " + nCurrent_Round + " - " + asTrackName[nCurrent_Round] + " - " + asTrackDate[nCurrent_Round] + "</TITLE>");
}

//oNewWin.document.write("<BODY>");
oNewWin.document.write("<LINK REL=STYLESHEET TYPE='text/css' HREF='CC_Style_Sheet.HTML'>");

oNewWin.document.write("<body BACKGROUND='BACKGROUND.JPG' text='#000000' bgcolor=WHITE link='#0000FF' vlink='#800080' alink='#FF0080' nosave>");

oNewWin.document.write("<TABLE BORDER=0 CELLPADDING=1 CELLSPACING=2 WIDTH=25% ALIGN=CENTER>");
oNewWin.document.write("<TR>");
oNewWin.document.write("<TD><A HREF='http://www.tickled-pink.net'><img ALT='Click To Visit Tickled Pink' ALIGN='CENTER' BORDER='1' SRC='TickledPink.jpg'></A></TD>");
oNewWin.document.write("</TR>");
oNewWin.document.write("</TABLE>");
oNewWin.document.write("<BR>");
oNewWin.document.write("<TABLE BORDER=0 CELLPADDING=1 CELLSPACING=2 WIDTH=100% ALIGN=CENTER>");
oNewWin.document.write("<TR>");

if(sChamp_Name == "Endurance Series - The Challenge") {
  oNewWin.document.write("<TD ALIGN='CENTER'><A HREF='http://www.uk-go-karting.com/'><img ALT='Click To Visit The Challenge Series' BORDER='0' SRC='Challenge.gif'></A></TD>");
} else if(sChamp_Name == "Uniroyal Fun Cup") {
          oNewWin.document.write("<TD ALIGN='CENTER'><A HREF='http://www.uniroyalfuncup.co.uk'><img ALT='Click To Uniroyal Fun Cup Website' BORDER='0' SRC='FunCup.jpeg'></A></TD>");
} else if(sChamp_Type == "CAR") {
} else {
  oNewWin.document.write("<TD ALIGN='CENTER'><A HREF='http://www.club100.co.uk'><img ALT='Click To Visit Club 100' BORDER='0' SRC='C100LogoSml.gif'></A></TD>");
}

oNewWin.document.write("</TR>");
oNewWin.document.write("<TR>");
oNewWin.document.write("<TD ALIGN='CENTER'><B>" + sChamp_Name + " - " + sChamp_Year + "</B></TD>");
oNewWin.document.write("</TR>");

oNewWin.document.write("<TR>");

if(sChamp_Type == "SPRINT") {
  oNewWin.document.write("<TD ALIGN='CENTER'><B>Auto-Race Report for Round " + nCurrent_Round + " - " + asTrackName[nCurrent_Round] + " - " + asTrackDate[nCurrent_Round] + "</B></TD>");
}else if(sChamp_Type == "ENDURANCE" || sChamp_Type == "CAR") {
       if(sChamp_Name == "Endurance Series - The Challenge") {
         oNewWin.document.write("<TD ALIGN='CENTER'><B>Auto-Race Report for Round " + nCurrent_Round + " - " + asTrackName[nCurrent_Round] + " - " + asTrackDate[nCurrent_Round] + " - Race " + nChallenge_RaceNo + " - " + asTrackDate[nCurrent_Round] + "</B></TD>");
       }else{
            oNewWin.document.write("<TD ALIGN='CENTER'><B>Auto-Race Report for Round " + nCurrent_Round + " - " + asTrackName[nCurrent_Round] + " - " + asTrackDate[nCurrent_Round] + "</B></TD>");
       }
}else if(sChamp_Type == "CAR"){
        oNewWin.document.write("<TD ALIGN='CENTER'><B>Auto-Race Report for Round " + nCurrent_Round + " - " + asTrackName[nCurrent_Round] + " - " + asTrackDate[nCurrent_Round] + "</B></TD>");
}

oNewWin.document.write("</TR>");
oNewWin.document.write("</TABLE>");

//****************************************************************************************************************


if(sCommentary_WinningDriver == "" || sCommentary_FastestDriver == "" || nCommentary_FastestLap == 0) {
   bNoRaceAnalysisDisplay = true;
   Race_Stats();
} 

var          anSaved_Score = new Array(nRaceLaps);
var          sSaved_LapPos = new Array(nRaceLaps);

for (nSelectedLap = 1;nSelectedLap <= nRaceLaps;nSelectedLap++) {

    sSaved_Driver = "";

    if(nSelectedLap > 1) {
       Lap_Positions((nSelectedLap-1),true);
    }

    Lap_Positions(nSelectedLap,false);

//************************************************************************
//** COMMENTARY - Store Top Ten from this lap
//************************************************************************
    for (x = 1;x <= 10;x++) {
        asT10_Driver_2[x] = asDriver[x];
        anT10_TotalTime_2[x] = anTotalTime[x];
        asT10_ExtraTime_2[x] = asExtraTime[x];
        anT10_LapsCompleted_2[x] = anLapsCompleted[x];
        asT10_GridPos_2[x] = asGridPos[x];
        anT10_LapTime_2[x] = anLapTime[nSelectedLap][x];
        anT10_LapPos_2[x] = x;
        asT10_PitLap_2[x] = aGraphData[nSelectedLap][x].getPitLap();
    }

    nCount++;

    if(nSelectedLap == 1 || nSelectedLap == (nRaceLaps-1) || nSelectedLap == nRaceLaps || nSelectedLap == parseInt(nRaceLaps/2) || nCount >= nSelectedCommInterval) {
       nCount = 0;

       if(bCommentary_Switch_On == true) {
         if (nSelectedLap == 1) {
            for (x = 1; x <= 10; x++) {
                asT10_Driver_1[x] = asT10_Driver_2[x];
                anT10_TotalTime_1[x] = anT10_TotalTime_2[x];
                asT10_ExtraTime_1[x] = asT10_ExtraTime_2[x];
                anT10_LapsCompleted_1[x] = anT10_LapsCompleted_2[x];
                asT10_GridPos_1[x] = asT10_GridPos_2[x];
                anT10_LapTime_1[x] = anT10_LapTime_2[x];
                anT10_LapPos_1[x] = anT10_LapPos_2[x];
                asT10_PitLap_1[x] = asT10_PitLap_2[x];
            }
         }

         Commentary(nSelectedLap);
         oNewWin.document.write("<P>" + sCommentary_String + "</P>");
       }
    }
}

nSelectedLap = 1;

oNewWin.document.write("</BODY>");

}

//************************************************************************
//** COMMENTARY - ON/OFF
//************************************************************************

Commentary_OnOff = function() {

if(bCommentary_Switch_On == true){
   bCommentary_Switch_On = false;
}else if(bCommentary_Switch_On == false){
       bCommentary_Switch_On = true;
       if(sCommentary_WinningDriver == "" || sCommentary_FastestDriver == "" || nCommentary_FastestLap == 0){
          bNoRaceAnalysisDisplay = true;
          Race_Stats();
       } 
}

Race_Table();

}

//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************
//***********************************************************************************************************************



//************************************************************************
//** COMMENTARY - Now the actual Commentary !
//************************************************************************

function Commentary(nPassed_Lap){

var asPhrases = new Array(35);

sCommentary_String = "";

Top10_In_Out();

//#DRIVER#
//#DRIVERSTRING# ie "X, Y && Z"
//#TIME#
//#POSITION#
//#LAPTIME#
//#TYPE# ie. "Driver/Team"
//#GRIDPOS#
//#AMOUNT#
//#LAPNO#

asPhrases[1] = "The gap between leader #DRIVER1# and #DRIVER2# was now down to #TIME#.";
asPhrases[2] = "The gap between leader #DRIVER1# and 2nd placed #DRIVER2# now increased to #TIME#.";
asPhrases[3] = "Leader #DRIVER# opened up a commanding #TIME# gap.";
asPhrases[4] = "#DRIVER# now had a slender #TIME# advantage over #DRIVERSTRING#.";
asPhrases[5] = " #DRIVER# had a slow #LAPTIME# lap dropping to #POSITION#.";
asPhrases[6] = " Meanwhile, #DRIVER# down in #POSITION# set the fastest lap of the race with a #LAPTIME#.";
asPhrases[7] = " #DRIVER1# dropped down the order restarting in #POSITION#, promoting #DRIVER2# into the top 10.";
asPhrases[8] = " #DRIVER# gained a fantastic #AMOUNT# places up to #POSITION#.";
asPhrases[9] = " #DRIVER# was now running in #POSITION# position.";
asPhrases[10] = " #DRIVER# set the fastest lap of the race with a #LAPTIME#.";
asPhrases[11] = " The #TYPE# on the move at this stage of the race was #DRIVER# who was up #AMOUNT# places from grid #GRIDPOS#.";
asPhrases[12] = " #DRIVER# gained #AMOUNT# places, up to #POSITION#.";
asPhrases[13] = " #DRIVER# made a great start gaining #AMOUNT# places, slotting into #POSITION#, from grid #GRIDPOS#.";
asPhrases[14] = "Lap #LAPNO#.";
asPhrases[15] = "Lap #LAPNO#, the half way stage.";
asPhrases[16] = "Into the last lap and ";
asPhrases[17] = "#DRIVER# took an easy win ahead of #DRIVERSTRING#.";
asPhrases[18] = "#DRIVER# held on to take the chequered flag first ahead of #DRIVERSTRING#.";
asPhrases[19] = " these #AMOUNT# ahead of #DRIVERSTRING#.";
asPhrases[20] = " these #AMOUNT# covered by only #TIME# ! ";
asPhrases[21] = " these #AMOUNT# now #TIME# clear of #DRIVERSTRING#";
asPhrases[22] = "#DRIVER# led the first lap ahead of #DRIVERSTRING#.";
asPhrases[23] = " Next up were #DRIVERSTRING#";
asPhrases[24] = "#DRIVER# was #POSITION# and following, were #DRIVERSTRING#";
asPhrases[25] = " with #DRIVER# completing the top 10.";
asPhrases[26] = " #DRIVER# completed the top 10.";
asPhrases[27] = " #DRIVERSTRING1# all dropped down the order, promoting #DRIVERSTRING2# into the top 10.";
asPhrases[28] = " Then it was #DRIVERSTRING#.";
asPhrases[29] = "#DRIVER# led, with #DRIVERSTRING#.";
asPhrases[30] = "#DRIVER# led, ahead of #DRIVERSTRING#";
asPhrases[31] = " #DRIVER1# dropped to #POSITION#, allowing #DRIVER2# into the top 10.";
asPhrases[32] = " #DRIVER1# had a slow lap and dropped down the order restarting in #POSITION#, promoting #DRIVER2# into the top 10.";
asPhrases[33] = " #DRIVER# was now down in #POSITION# position having been as high up as #BESTPOS# at one stage.";
asPhrases[34] = " #DRIVER# finished in #POSITION# position.";
asPhrases[35] = " #DRIVER# was in #POSITION# position.";
asPhrases[36] = " #DRIVER1# pitted and dropped to #POSITION#, allowing #DRIVER2# into the top 10.";
asPhrases[37] = " #DRIVER1# pitted and dropped down the order restarting in #POSITION#, promoting #DRIVER2# into the top 10.";

//**************************************************************************

//End of race, report phase(17) || Phase(18) + Phase(25) || Phase(26)

//Some phrases should only be used once, (Phrase(11))

//Check for more than 3 places being gained duraing a lap, && report Phrase(8) || Phrase(12)

//More than 3 drivers separated by less than 2 seconds, report Phrase(20)

//Gap to leader < than before, report Phrase(1)

//Gap to leader > than before report Phrase(2)
//   }else{ if(> 3 seconds report Phrase(3)

//if(Gap To Leader < 1 second, report Phrase(4)

//**************************************************************************


//******************************************************************
// Flags
//******************************************************************
bFlag_Gap_To_Leader = false;
bFlag_Gap_To_Team = false;
bFlag_DropOut_Slow_Lap = false;
bFlag_DropOut_Long_Lap = false;
bFlag_Man_On_The_Move = false;
//******************************************************************

asEdit_Rules_Array[1] = "";
asEdit_Rules_Array[2] = "";
asEdit_Rules_Array[3] = "";
asEdit_Rules_Array[4] = "";
asEdit_Rules_Array[5] = "";
asEdit_Rules_Array[6] = "";
asEdit_Rules_Array[7] = "";
asEdit_Rules_Array[8] = "";
asEdit_Rules_Array[9] = "";
asEdit_Rules_Array[10] = "";

var nDriverStringStart;
var nDriverStringEnd;

var bFlag_2sGap_REPORTED;
var bFlag_FastestLap_REPORTED;
var bFlag_3Places_REPORTED;

nDriverStringStart = 0;
nDriverStringEnd = 0;

bFlag_2sGap_REPORTED = false;

if(bFlag_FastestLap_REPORTED != true){
   bFlag_FastestLap_REPORTED = false;
}

bFlag_3Places_REPORTED = false;
bFlag_Leader_Reported = false;

nLoop = 1;
nDropOutCounter = 0;

while (nLoop < 11 && asDropOut_Driver[nLoop] != "") {
   nDropOutCounter++;
   nLoop++;
}

nDriver = 1;

if(nPassed_Lap > 1 && nPassed_Lap != (nRaceLaps-1) && nPassed_Lap != nRaceLaps && nPassed_Lap != parseInt(nRaceLaps/2)) {
   asEdit_Rules_Array[1] = "LAPNO         -" + nPassed_Lap;
   nEditArrayLen = 1;

   sCommentary_String = sCommentary_String + Phrase_Edit(asPhrases[14]);
}

if(nPassed_Lap == nRaceLaps-1) {
   sCommentary_String = sCommentary_String + Phrase_Edit(asPhrases[16]);
}

while (nDriver < (11 - nDropOutCounter)) {

    if(nPassed_Lap == 1) {
       asEdit_Rules_Array[1] = "DRIVER        -" + asT10_Driver_2[1];
       asEdit_Rules_Array[2] = "DRIVERSTRING  -" + Driver_String(2, 10,"POSITIONS", "T10_2", "")      ;
       nEditArrayLen = 2;

       //******** asPhrases[22] = "#DRIVER# led the first lap ahead of #DRIVERSTRING#." *******      ;
       sCommentary_String = sCommentary_String + Phrase_Edit(asPhrases[22]);
       nDriver = 11;
    }


    if(nPassed_Lap == parseInt(nRaceLaps/2)) {

       asEdit_Rules_Array[1] = "LAPNO         -" + parseInt(nRaceLaps/2);
       nEditArrayLen = 1;

       //******** asPhrases[15] = "Lap #LAPNO#, the half way stage." *******      ;
       sCommentary_String = sCommentary_String + Phrase_Edit(asPhrases[15]);

       asEdit_Rules_Array[1] = "DRIVER        -" + asT10_Driver_2[1]   ;
       asEdit_Rules_Array[2] = "DRIVERSTRING  -" + Driver_String(2, 10,"POSITIONS", "T10_2", "")      ;
       nEditArrayLen = 2;

       //******** asPhrases[30] = "#DRIVER# led, ahead of #DRIVERSTRING#" *******      ;
       sCommentary_String = sCommentary_String + Phrase_Edit(asPhrases[30]);
       nDriver = 11;
    }

    if(nPassed_Lap == nRaceLaps) {

       bLeader_Gap_Down = false;
       bLeader_Gap_Up = false;

       nLeaderGapNEW = 0;
       nLeaderGapOLD = 0;

       Leader_Gap(nPassed_Lap);

       if(nLeaderGapNEW > 2) {
          asEdit_Rules_Array[1] = "DRIVER        -" + asT10_Driver_2[1]   ;
          asEdit_Rules_Array[2] = "DRIVERSTRING  -" + Driver_String(2, 10,"POSITIONS", "T10_2", "")      ;
          nEditArrayLen = 2;

          //******** asPhrases[17] = "#DRIVER# took an easy win ahead of #DRIVERSTRING#." *******      ;
          sCommentary_String = sCommentary_String + Phrase_Edit(asPhrases[17]);
          nDriver = 11;
       }else{
          asEdit_Rules_Array[1] = "DRIVER        -" + asT10_Driver_2[1]   ;
          asEdit_Rules_Array[2] = "DRIVERSTRING  -" + Driver_String(2, 10,"POSITIONS", "T10_2", "")      ;
          nEditArrayLen = 2;

          //******** asPhrases[18] = "#DRIVER# held on to take the chequered flag first ahead of #DRIVERSTRING#." *******      ;
          sCommentary_String = sCommentary_String + Phrase_Edit(asPhrases[18]);
          nDriver = 11;
       }

    }


    if(nDriver == 2) {
       nDriverStringStart = 2;
       //Check Gap To Leader;
       bLeader_Gap_Down = false;
       bLeader_Gap_Up = false;

       nLeaderGapNEW = 0;
       nLeaderGapOLD = 0;

       Leader_Gap(nPassed_Lap);

       if(bLeader_Gap_Down == true) {
          asEdit_Rules_Array[1] = "DRIVER1       -" + asT10_Driver_2[1];
          asEdit_Rules_Array[2] = "DRIVER2       -" + asT10_Driver_2[2];
          asEdit_Rules_Array[3] = "TIME          -" + nLeaderGapNEW + " seconds";
          nEditArrayLen = 3;
          //********** asPhrases[1] = "The gap between leader #DRIVER1# && #DRIVER2# was now down to #TIME#." ********;
          sCommentary_String = sCommentary_String + Phrase_Edit(asPhrases[1]);
          bFlag_Leader_Reported = true;
          nDriverStringStart = 3;
          nDriver = 3;
       }else if(bLeader_Gap_Up == true) {
              if(nLeaderGapNEW < 2.8) {
                 asEdit_Rules_Array[1] = "DRIVER1       -" + asT10_Driver_2[1];
                 asEdit_Rules_Array[2] = "DRIVER2       -" + asT10_Driver_2[2];
                 asEdit_Rules_Array[3] = "TIME          -" + Seconds_To_Time(nLeaderGapNEW) + " seconds";
                 nEditArrayLen = 3;
                 //********** asPhrases[2] = "The gap between leader #DRIVER1# && 2nd placed #DRIVER2# now increased to #TIME#." **********;
                 sCommentary_String = sCommentary_String + Phrase_Edit(asPhrases[2]);
                 bFlag_Leader_Reported = true;
                 nDriverStringStart = 3;
                 nDriver = 3;
              }else{
                 asEdit_Rules_Array[1] = "DRIVER        -" + asT10_Driver_2[1];
                 asEdit_Rules_Array[2] = "TIME          -" + Seconds_To_Time(nLeaderGapNEW) + " seconds";
                 nEditArrayLen = 2;
                 //********** asPhrases[3] = "Leader #DRIVER# opened up a commanding #TIME# gap." **********;
                 sCommentary_String = sCommentary_String + Phrase_Edit(asPhrases[3]);
                 bFlag_Leader_Reported = true;
                 nDriverStringStart = 2;
               }
        }
        nDriverStringEnd = (10 - nDropOutCounter);
    }

    //if(nDriver < 11){ ;
    //   if(nPassed_Lap > 1){
    //      if(nDriver > 1){
    //         'Gap between other teams nPassed_Lap > 2;
    //         bTeam_Gap_Down = false;
    //         bTeam_Gap_Up = false;
    //       ;
    //         nTeamGapNEW = 0;
    //         nTeamGapOLD = 0;
    // ;
    //         Team_Gap(nDriver, nPassed_Lap);
    // ;
    //          asEdit_Rules_Array[1] = "DRIVER        -" + asT10_Driver_2(nDriver) + " " + Get_Position_String(nDriver) ;
    //          asEdit_Rules_Array[2] = "TIME          -" + Seconds_To_Time(nTeamGapNEW) + "seconds ";
    //          asEdit_Rules_Array[3] = "DRIVERSTRING  -" + Driver_String(nDriver+1, 10,"POSITIONS", "T10_2", "UPDOWN")   ;
    //          nEditArrayLen = 3;
    //          '********** asPhrases[4] = "#DRIVER# now had a slender #TIME# advantage over #DRIVERSTRING#." **********;
    //          sCommentary_String = sCommentary_String + Phrase_Edit(asPhrases[4]);
    //  ;
    //          if(bTeam_Gap_Down == true){
    //             alert("Team Gap Down !");
    //          }else if(bTeam_Gap_Up == true){
    //                 alert("Team Gap Up !");
    //          }
    //       }
    //    }
    //}

    if(bFlag_2sGap_REPORTED == false){
       //COunt No. drivers in a 2 second gap;
       nTempGap = 0;
       nSavedTempGap = 0;
       nGapTotalDrivers = 0;

       nGapStartDriver = nDriver;
       nGapEndDriver = 0;
       nGapTotalDrivers = 0;

       for (nGapDriver = nGapStartDriver;nGapDriver <= 10;nGapDriver++) {
           if(anT10_LapsCompleted_2[nGapDriver] == anT10_LapsCompleted_2[nGapDriver-1]) {
              if(nGapDriver == nGapStartDriver) {
                 nTempGap = 0;
              }else{
                 nTempGap = nTempGap + (anT10_TotalTime_2[nGapDriver] - anT10_TotalTime_2[nGapDriver-1]);
              }

              if(nTempGap < 2) {
                 nGapTotalDrivers++;
                 nGapEndDriver = nGapDriver;
                 nSavedTempGap = nTempGap;
              }

           }
       }

       if(nGapTotalDrivers > 3) {

          nDriverStringEnd = (nDriver - 1);

          if(nDriverStringStart != 0 && nDriverStringEnd != 0 && nDriverStringStart <= nDriverStringEnd) {
             if(bFlag_Leader_Reported == false) {
                asEdit_Rules_Array[1] = "DRIVER        -" + asT10_Driver_2[1]   ;
                asEdit_Rules_Array[2] = "DRIVERSTRING  -" + Driver_String(nDriverStringStart, nDriverStringEnd,"POSITIONS", "T10_2", "UPDOWN")      ;
                nEditArrayLen = 2;
                //******** asPhrases[29] = "#DRIVER# led, with #DRIVERSTRING#." *******      ;
                sCommentary_String = sCommentary_String + Phrase_Edit(asPhrases[29]);
                bFlag_Leader_Reported = true;
             }else{
                asEdit_Rules_Array[1] = "DRIVERSTRING  -" + Driver_String(nDriverStringStart, nDriverStringEnd,"POSITIONS", "T10_2", "UPDOWN")      ;
                nEditArrayLen = 1;
                //********** asPhrases[28] = "#DRIVERSTRING#" *********;
                sCommentary_String = sCommentary_String + Phrase_Edit(asPhrases[28]);
             } ;
          }

          if(bFlag_Leader_Reported == false) {
             asEdit_Rules_Array[1] = "DRIVER        -" + asT10_Driver_2[1]   ;
             asEdit_Rules_Array[2] = "DRIVERSTRING  -" + Driver_String(2, nGapEndDriver, "POSITIONS", "T10_2", "UPDOWN")      ;
             nEditArrayLen = 2;
             //********** asPhrases[30] = "#DRIVER# led, ahead of #DRIVERSTRING#" **********;
             sCommentary_String = sCommentary_String + Phrase_Edit(asPhrases[30]);

             asEdit_Rules_Array[1] = "AMOUNT        -" + nGapTotalDrivers;
             asEdit_Rules_Array[2] = "TIME          -" + Seconds_To_Time(nSavedTempGap) + " seconds";
             nEditArrayLen = 2;
             //********** asPhrases[20] = " these #AMOUNT# covered by only #TIME# !" **********;
             sCommentary_String = sCommentary_String + Phrase_Edit(asPhrases[20]);
             bFlag_Leader_Reported = true;
          }else{
             asEdit_Rules_Array[1] = "DRIVERSTRING  -" + Driver_String(nGapStartDriver, nGapEndDriver, "POSITIONS", "T10_2", "UPDOWN")      ;
             nEditArrayLen = 1;
             //********** asPhrases[23] = "Next up were #DRIVERSTRING#" **********;
             sCommentary_String = sCommentary_String + Phrase_Edit(asPhrases[23]);

             asEdit_Rules_Array[1] = "AMOUNT        -" + nGapTotalDrivers;
             asEdit_Rules_Array[2] = "TIME          -" + Seconds_To_Time(nSavedTempGap) + " seconds";
             nEditArrayLen = 2;
             //********** asPhrases[20] = " these #AMOUNT# covered by only #TIME# !" **********;
             sCommentary_String = sCommentary_String + Phrase_Edit(asPhrases[20]);
          }


          nDriverStringStart = (nGapEndDriver + 1);
          nDriverStringEnd = (10 - nDropOutCounter);
          nDriver = (nGapEndDriver + 1);
          bFlag_2sGap_REPORTED = true;

       }
   }

    //Next check to see if(the current top 10 driver has had a slow lap (105% AVG)

    //Slow Lap

    if(nDriver < 11) {
       nSlowLap = (nAvgLap * 0.85);

       if(anT10_LapTime_2[nDriver] > nSlowLap && anT10_LapPos_2[nDriver] < anT10_LapPos_1[nDriver]){
          Find_Driver_Pos(asT10_Driver_2[nDriver], nPassed_Lap);
          asEdit_Rules_Array[1] = "DRIVER        -" + asT10_Driver_2[nDriver];
          asEdit_Rules_Array[2] = "LAPTIME       -" + Seconds_To_Time(anT10_LapTime_2[nDriver]);
          asEdit_Rules_Array[3] = "POSITION      -" + Get_Position_String(nFound_Pos);
          nEditArrayLen = 3;
          //********** asPhrases[5] = "#DRIVER# had a slow #LAPTIME# lap dropping them to #POSITION#." **********;
          sCommentary_String = sCommentary_String + Phrase_Edit(asPhrases[5]);
       }
    }

    nDriver++;
}

//Report latest DriverString

if(nDriverStringStart != 0 && nDriverStringEnd != 0 && nDriverStringStart <= nDriverStringEnd) {

   if(bFlag_Leader_Reported == false) {
      asEdit_Rules_Array[1] = "DRIVER        -" + asT10_Driver_2[1]   ;
      asEdit_Rules_Array[2] = "DRIVERSTRING  -" + Driver_String(nDriverStringStart, nDriverStringEnd,"POSITIONS", "T10_2", "UPDOWN")      ;
      nEditArrayLen = 2;
      //******** asPhrases[29] = "#DRIVER# led, with #DRIVERSTRING#." *******      ;
      sCommentary_String = sCommentary_String + Phrase_Edit(asPhrases[29]);
      bFlag_Leader_Reported = true;
      nDriverStringStart = nDriverStringEnd+1;
   } 

   if (nDriverStringStart < 10 && nDriverStringStart <= nDriverStringEnd) { 
      asEdit_Rules_Array[1] = "DRIVERSTRING  -" + Driver_String(nDriverStringStart, nDriverStringEnd,"POSITIONS", "T10_2", "UPDOWN")      ;
      nEditArrayLen = 1;
      //********** asPhrases[28] = "#DRIVERSTRING#" *********;
      sCommentary_String = sCommentary_String + Phrase_Edit(asPhrases[28]);
   }
   nDriverStringStart = 0;
   nDriverStringEnd = 0;

}

//Best positions Gained in this Lap

if(bFlag_3Places_REPORTED == false) {
   Best_Gained_Positions(nPassed_Lap);
   Find_Driver_Pos(sBestGain_Driver , nPassed_Lap);

   if(nPassed_Lap == 1){
      if (sBestGain_Driver != "") {
         asEdit_Rules_Array[1] = "DRIVER        -" + sBestGain_Driver   ;
         asEdit_Rules_Array[2] = "AMOUNT        -" + nBestGain;
         asEdit_Rules_Array[3] = "POSITION      -" + Get_Position_String(nFound_Pos);
         asEdit_Rules_Array[4] = "GRIDPOS       -" + asGridPos[nFound_Pos];
         nEditArrayLen = 4;
         //******* asPhrases[13] = "#DRIVER# made a great start gaining #AMOUNT# places, slotting into #POSITION#, from grid #GRIDPOS#.";
         sCommentary_String = sCommentary_String + Phrase_Edit(asPhrases[13]);
      }
   }else{
      if(nBestGain > 2){
         nDriverStringEnd = (nDriver - 1);

         if(nDriverStringStart != 0 && nDriverStringEnd != 0 && nDriverStringStart < nDriverStringEnd) {
            if(bFlag_Leader_Reported == false) {
               asEdit_Rules_Array[1] = "DRIVER        -" + asT10_Driver_2[1]   ;
               asEdit_Rules_Array[2] = "DRIVERSTRING  -" + Driver_String(nDriverStringStart, nDriverStringEnd,"POSITIONS", "T10_2", "UPDOWN")      ;
               nEditArrayLen = 2;
               //******** asPhrases[29] = "#DRIVER# led, with #DRIVERSTRING#." *******      ;
               sCommentary_String = sCommentary_String + Phrase_Edit(asPhrases[29]);
               bFlag_Leader_Reported = true;
               nDriverStringStart = nDriverStringEnd+1;
            } 
         }

         if (nDriverStringStart != 0 && nDriverStringEnd != 0 && nDriverStringStart < 10 && nDriverStringStart <= nDriverStringEnd) { 
            asEdit_Rules_Array[1] = "DRIVERSTRING  -" + Driver_String(nDriverStringStart, nDriverStringEnd,"POSITIONS", "T10_2", "UPDOWN")      ;
            nEditArrayLen = 1;
            //********** asPhrases[28] = "#DRIVERSTRING#" **********;
            sCommentary_String = sCommentary_String + Phrase_Edit(asPhrases[28]);
            nDriverStringStart = 0;
            nDriverStringStart = 0;
         }

         if(nBestGain > 4) {
            asEdit_Rules_Array[1] = "DRIVER        -" + sBestGain_Driver   ;
            asEdit_Rules_Array[2] = "AMOUNT        -" + nBestGain;
            asEdit_Rules_Array[3] = "POSITION      -" + Get_Position_String(nFound_Pos);
            nEditArrayLen = 3;
            //********** asPhrases[8] = "#DRIVER# gained a fantastic #AMOUNT# places up to #POSITION#." **************;
            sCommentary_String = sCommentary_String + Phrase_Edit(asPhrases[8]);
         }else{
            asEdit_Rules_Array[1] = "DRIVER        -" + sBestGain_Driver   ;
            asEdit_Rules_Array[2] = "AMOUNT        -" + nBestGain;
            asEdit_Rules_Array[3] = "POSITION      -" + Get_Position_String(nFound_Pos);
            nEditArrayLen = 3;
            //********** asPhrases[12] = "#DRIVER# gained #AMOUNT# places, up to #POSITION#.";
            sCommentary_String = sCommentary_String + Phrase_Edit(asPhrases[12]);
         }

         bFlag_3Places_REPORTED = true;
      }
   }
}

//at the end of the checks, report drop outs && New Ins.

nLoop = 1;
nCounter = 0;

while (nLoop < 11 && asDropOut_Driver[nLoop] != "") {
   nCounter = nCounter + 1;
   nLoop = nLoop + 1;
}

if(nCounter == 1) {
   if(anDropOut_LapTime[1] > nAvgLap) {
      Find_Driver_Pos(asDropOut_Driver[1], nPassed_Lap);
      asEdit_Rules_Array[1] = "DRIVER1       -" + asDropOut_Driver[1];
      asEdit_Rules_Array[2] = "POSITION      -" + Get_Position_String(nFound_Pos);
      asEdit_Rules_Array[3] = "DRIVER2       -" + asNewIn_Driver[1];
      nEditArrayLen = 3;
      //********** asPhrases[7] = "#DRIVER1# dropped down the order restarting in #POSITION#, promoting #DRIVER2# into the top 10.";
      sCommentary_String = sCommentary_String + Phrase_Edit(asPhrases[7]);
   }else if(anDropOut_LapTime[1] > nSlowLap){
          Find_Driver_Pos(asDropOut_Driver[1], nPassed_Lap);
          asEdit_Rules_Array[1] = "DRIVER1       -" + asDropOut_Driver[1];
          asEdit_Rules_Array[2] = "POSITION      -" + Get_Position_String(nFound_Pos);
          asEdit_Rules_Array[3] = "DRIVER2       -" + asNewIn_Driver[1];
          nEditArrayLen = 3;
          //********** asPhrases[32] = "#DRIVER1# had a slow lap && dropped down the order restarting in #POSITION#, promoting #DRIVER2# into the top 10.";
          if (asDropOut_PitLap[1] != "") {
              sCommentary_String = sCommentary_String + Phrase_Edit(asPhrases[37]);
          } else {
              sCommentary_String = sCommentary_String + Phrase_Edit(asPhrases[32]);
          }
   }else{
          Find_Driver_Pos(asDropOut_Driver[1], nPassed_Lap);
          asEdit_Rules_Array[1] = "DRIVER1       -" + asDropOut_Driver[1];
          asEdit_Rules_Array[2] = "POSITION      -" + Get_Position_String(nFound_Pos);
          asEdit_Rules_Array[3] = "DRIVER2       -" + asNewIn_Driver[1];
          nEditArrayLen = 3;
          //********** asPhrases[31] = "#DRIVER1# dropped to #POSITION#, allowing #DRIVER2# into the top 10.";
          if (asDropOut_PitLap[1] != "") {
              sCommentary_String = sCommentary_String + Phrase_Edit(asPhrases[36]);
          } else {
              sCommentary_String = sCommentary_String + Phrase_Edit(asPhrases[31]);
          }
   }
}else if(nCounter > 0){
       asEdit_Rules_Array[1] = "DRIVERSTRING1 -" + Driver_String(1, nCounter, "", "DropOuts", "");
       asEdit_Rules_Array[2] = "DRIVERSTRING2 -" + Driver_String(1, nCounter, "", "NewIns", "");
       nEditArrayLen = 2;
       //********** asPhrases[27] = "#DRIVERSTRING1# all dropped down the order, promoting #DRIVERSTRING2# into the top 10.";
       sCommentary_String = sCommentary_String + Phrase_Edit(asPhrases[27]);
}

if(nPassed_Lap == nCommentary_FastestLapOn) {
   if(bFlag_FastestLap_REPORTED == false) {
      Find_Driver_Pos(sCommentary_FastestDriver, nPassed_Lap);

      if(nFound_Pos <= 10) {
         asEdit_Rules_Array[1] = "DRIVER        -" + sCommentary_FastestDriver;
         asEdit_Rules_Array[2] = "LAPTIME       -" + Seconds_To_Time(nCommentary_FastestLap);
         nEditArrayLen = 2;
         //********** asPhrases[10] = " #DRIVER# set the fastest lap of the race with a #LAPTIME#." ********;
         sCommentary_String = sCommentary_String + Phrase_Edit(asPhrases[10]);
      }else{
         asEdit_Rules_Array[1] = "DRIVER        -" + sCommentary_FastestDriver;
         asEdit_Rules_Array[2] = "POSITION      -" + Get_Position_String(nFound_Pos);
         asEdit_Rules_Array[3] = "LAPTIME       -" + Seconds_To_Time(nCommentary_FastestLap);
         nEditArrayLen = 3;
         //********** asPhrases[6] = " Meanwhile, #DRIVER# down in #POSITION#the fastest lap of the race with a #LAPTIME#." ********;
         sCommentary_String = sCommentary_String + Phrase_Edit(asPhrases[6]);
      } 
   } 
}

if(sCommentary_WinningDriver != "") {

   //Find and store best position in race so far for eventual winning driver;
   Find_Driver_Pos(sCommentary_WinningDriver, nPassed_Lap);

   if(nFound_Pos < nCommentary_Saved_BestPos || nCommentary_Saved_BestPos == 0) {
      nCommentary_Saved_BestPos = nFound_Pos;
   }

   Find_Driver_Pos(sCommentary_WinningDriver, nPassed_Lap);

   if(nFound_Pos > 10) {
      if(nCommentary_Saved_BestPos < nFound_Pos) {
         asEdit_Rules_Array[1] = "DRIVER        -" + sCommentary_WinningDriver;
         asEdit_Rules_Array[2] = "POSITION      -" + Get_Position_String(nFound_Pos);
         asEdit_Rules_Array[3] = "BESTPOS       -" + Get_Position_String(nCommentary_Saved_BestPos);

         nEditArrayLen = 3;
         //********** asPhrases[33] = " #DRIVER# was now down in #POSITION# position having been as high up as #BESTPOS# at one stage." ********;
        sCommentary_String = sCommentary_String + Phrase_Edit(asPhrases[33]);
      }else{
         asEdit_Rules_Array[1] = "DRIVER        -" + sCommentary_WinningDriver;
         asEdit_Rules_Array[2] = "POSITION      -" + Get_Position_String(nFound_Pos);
         nEditArrayLen = 2;
         //********** asPhrases[35] = " #DRIVER# was in #POSITION# position." ********;
         sCommentary_String = sCommentary_String + Phrase_Edit(asPhrases[35]);
      }
   }
}

//**********************************************
// Sort the Watched Drivers into Position Order
//**********************************************

var n = 0;
var nPos = 0;

if(nPassed_Lap == 1 || nPassed_Lap == parseInt(nRaceLaps/2) || nPassed_Lap == nRaceLaps || nPassed_Lap == (nRaceLaps-1)){
   var nLowestPos;
   var nHighestPos;

   nLowestPos = 0;
   nHighestPos = 0;

   for (n = 1;n <= nDriver_Records;n++) {
      if(asWatchedDrivers[n] != "" && asWatchedDrivers[n] != sCommentary_WinningDriver) {

         Find_Driver_Pos(asWatchedDrivers[n], nPassed_Lap);
         if(nFound_Pos > 10) {
            if(nFound_Pos < nLowestPos || nLowestPos == 0 ){
               nLowestPos = nFound_Pos;
            }

            if(nFound_Pos > nHighestPos || nHighestPos == 0) {
               nHighestPos = nFound_Pos;
            }
         }
      }
      if (asWatchedDrivers[n] == "") {
         n = nDriver_Records + 1;
      }
   }
}

var nPos;
var sPassDriver;

if(nPassed_Lap == 1 || nPassed_Lap == parseInt(nRaceLaps/2) || nPassed_Lap == nRaceLaps || nPassed_Lap == (nRaceLaps-1)){
   for (nPos = nLowestPos;nPos <= nHighestPos;nPos++) {
       for (n = 1;n <= nDriver_Records;n++) {

          if(asWatchedDrivers[n] != "" && asWatchedDrivers[n] != sCommentary_WinningDriver) {

             sPassDriver = asWatchedDrivers[n];

             Find_Driver_Pos(asWatchedDrivers[n], nPassed_Lap);

             if(nFound_Pos == nPos) { 
                if(nPassed_Lap == nRaceLaps) {
                   asEdit_Rules_Array[1] = "DRIVER        -" + asWatchedDrivers[n];
                   asEdit_Rules_Array[2] = "POSITION      -" + Get_Position_String(nFound_Pos);
                   nEditArrayLen = 2;
                   //********** asPhrases[34] = " #DRIVER# finished in #POSITION# position." ********;
                   sCommentary_String = sCommentary_String + Phrase_Edit(asPhrases[34]);
                }else{ 
                   if(nPassed_Lap = 1) {
                      asEdit_Rules_Array[1] = "DRIVER        -" + asWatchedDrivers[n];
                      asEdit_Rules_Array[2] = "POSITION      -" + Get_Position_String(nFound_Pos);
                      nEditArrayLen = 2;
                      //********** asPhrases[35] = " #DRIVER# was in #POSITION# position." ********;
                      sCommentary_String = sCommentary_String + Phrase_Edit(asPhrases[35]);
                   }else{ 
                      if(nFound_LapTime > nAvgLap){
                         asEdit_Rules_Array[1] = "DRIVER        -" + asWatchedDrivers[n];                                                                                                                                                                                                                                              
                         nEditArrayLen = 3;
                         //********** asPhrases[5] = " #DRIVER# had a slow #LAPTIME# lap dropping them to #POSITION#." *********;
                         sCommentary_String = sCommentary_String + Phrase_Edit(asPhrases[5]);
                      }else{  
                         asEdit_Rules_Array[1] = "DRIVER        -" + asWatchedDrivers[n];
                         asEdit_Rules_Array[2] = "POSITION      -" + Get_Position_String(nFound_Pos);
                         nEditArrayLen = 2;
                         //********** asPhrases[9] = " #DRIVER# was now running in #POSITION# position." ********;
                         sCommentary_String = sCommentary_String + Phrase_Edit(asPhrases[9]);
                      }
                   }
                }
             }
          }
       }
   }
}else{
   for (n = 1;n <= nDriver_Records;n++) {
         if(asWatchedDrivers[n] != "" && asWatchedDrivers[n] != sCommentary_WinningDriver) {

            Find_Driver_Pos(asWatchedDrivers[n], nPassed_Lap);

            if(nFound_Pos > 10) {
               if(nPassed_Lap != nRaceLaps,3) {

                  if(nFound_LapTime > nAvgLap) {
                     asEdit_Rules_Array[1] = "DRIVER        -" + asWatchedDrivers[n];
                     asEdit_Rules_Array[2] = "LAPTIME       -" + Seconds_To_Time(nFound_LapTime);
                     asEdit_Rules_Array[3] = "POSITION      -" + Get_Position_String(nFound_Pos);
                     nEditArrayLen = 3;
                     //********** asPhrases[5] = " #DRIVER# had a slow #LAPTIME# lap dropping them to #POSITION#." *********;
                     sCommentary_String = sCommentary_String + Phrase_Edit(asPhrases[5]);
                  }
               }
            }
         }
   }
}

alert(sCommentary_String);

}


//*********************************************************************************************

function Race_Chart() {

Stop_Race();

if (whichRaceChart == "NEW") {
   Race_Chart_NEW();
} else {
   Race_Chart_OLD();
}

}

//*********************************************************************************************

function Race_Chart_NEW() {

document.getElementById("DivText3").innerHTML = "<P></P>";

document.getElementById("DivText2").innerHTML = "<P></P>";

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>Race Analysis for Round " + nCurrent_Round + " - " + asTrackDate[nCurrent_Round] + "</TD></TR>";
}else if(sChamp_Type == "ENDURANCE" || sChamp_Type == "CAR"){
       if(sChamp_Name == "Endurance Series - The Challenge"){
          sHTML += "<TR><TD class='HeadBox2' BGCOLOR='#A8D3FF' ALIGN=CENTER>Race Analysis for Round " + nCurrent_Round + " - Race " + nChallenge_RaceNo + " - " + asTrackDate[nCurrent_Round] + "</TD></TR>";
       }else{
          sHTML += "<TR><TD class='HeadBox2' BGCOLOR='#A8D3FF' ALIGN=CENTER>Race Analysis for Round " + nCurrent_Round + " - " + asTrackDate[nCurrent_Round] + "</TD></TR>";
       }
}else if(sChamp_Type == "CAR"){
        sHTML += "<TR><TD class='HeadBox2' BGCOLOR='#A8D3FF' ALIGN=CENTER>Race Analysis for Round " + nCurrent_Round + " - " + asTrackDate[nCurrent_Round] + "</TD></TR>";
}

sHTML += "</TABLE><BR>";

sHTML += "<TABLE class='HeadTable3' BORDER=1 ALIGN=CENTER WIDTH=600>";

if(sChamp_Type == "SPRINT"){
   sHTML += "<TR><TD class='HeadBox3' BGCOLOR='#A8D3FF' ALIGN=CENTER>Circuit: " + asTrackName[nCurrent_Round] + " - Length: " + anTrackLength[nCurrent_Round] + " Metres</TD></TR>";
}else if(sChamp_Type == "ENDURANCE" || sChamp_Type == "CAR"){
        sHTML += "<TR><TD class='HeadBox3' BGCOLOR='#A8D3FF' ALIGN=CENTER>Circuit: " + asTrackName[nCurrent_Round] + " - Length: " + anTrackLength[nCurrent_Round] + " Metres</TD></TR>";
}else if(sChamp_Type == "CAR"){
        sHTML += "<TR><TD class='HeadBox3' BGCOLOR='#A8D3FF' ALIGN=CENTER>Circuit: " + asTrackName[nCurrent_Round] + " - Length: " + anTrackLength[nCurrent_Round] + " Metres</TD></TR>";
}

sHTML += "</TABLE><BR>";

sHTML += "<TABLE class='SubjectTable' WIDTH=400 BORDER=1 ALIGN=CENTER>";
sHTML += "<TR><TD class='SubjectBox' BGCOLOR='#E8F3FF' ALIGN=CENTER>Race Chart</TD></TR>";
sHTML += "</TABLE><BR>";

document.getElementById("DivText2").innerHTML = sHTML;

var nWidth = (graphWidth > 900) ? 900 : graphWidth;
var nHeight = (graphHeight > 600) ? 600 : graphHeight;

sHTML = "<TABLE class='DetTable' BORDER='0' WIDTH='" + nWidth + "' ALIGN=CENTER><TR><TD><div style='height:" + nHeight + ";width:" + nWidth + "; overflow:auto' align='center'>";
sHTML = sHTML +	"<table border='0'>";
sHTML = sHTML +	"<tr>";
sHTML = sHTML +	"<td><img src='" + raceChartIMG + "' alt='' border='0' onMouseMove='getGraphXY();'></td>";
sHTML = sHTML +	"</tr>";
sHTML = sHTML + "</table>";
sHTML = sHTML +	"</div>";

sHTML = sHTML +	"<div id='DriverDetails' style='BORDER-RIGHT: black thin solid; BORDER-TOP: black thin solid; Z-INDEX: 101; LEFT: 200px; VISIBILITY: hidden; BORDER-LEFT: black thin solid; BORDER-BOTTOM: black thin solid; POSITION: absolute; TOP: 200px; BACKGROUND-COLOR: lightgoldenrodyellow'></div>";
sHTML = sHTML + "</TD></TR></TABLE>";

document.getElementById("DivText3").innerHTML = sHTML;

}

//**********************************************************************************************************************************

function getGraphXY() {

var lap = Math.round((window.event.offsetX-leftOffset)/XScale);
var pos = (Math.round(((window.event.offsetY-topOffset)/YScale)));

var top =  window.event.offsetY+graphHeight-200;
var left = (window.event.clientX > (window.document.body.clientWidth-90)) ? (window.event.offsetX-160) : (window.event.offsetX-80);

if (lap < 1) {
   if(bNoGridTimes == false) {
       lap = 0;
   } else {
       lap = 1;
   }
}

if (lap > nRaceLaps) {
    lap = nRaceLaps;
}

if (pos < 1) {
    pos = 1;
}

if (pos > nDriver_Records) {
    pos = nDriver_Records;
}

if (oldLap != lap || oldPos != pos) {
    Display_Driver(lap,pos,aGraphData[lap][pos].getLaptime(),aGraphData[lap][pos].getEntrantName(),aGraphData[lap][pos].getGapNext(),aGraphData[lap][pos].getGapFollowing(),aGraphData[lap][pos].getGapLeader(),aGraphData[lap][pos].getLapsCompleted(),aGraphData[lap][pos].getPitLap(),aGraphData[lap][pos].getStintNo(),top,left, aGraphData[lap][pos].getMediaLink1(),aGraphData[lap][pos].getMediaLink2());
}

}

//************************************************************************************************************************************
function hideLapDetails() {

window.document.all['DriverDetails'].style.visibility = "hidden";
clearTimeout(timerID);
}

//************************************************************************************************************************************

function Display_Driver(nPassed_Lap, nPassed_Driver, laptime, name, gapNext, gapFollowing, gapLeader, lapsCompleted, pitLap, stintNo,nPassed_Top, nPassed_Left,sPassed_MediaLink1, sPassed_MediaLink2) {

var nPoints_diff;

var div = window.document.all['DriverDetails'];

var top = window.event.clientY + document.body.scrollTop-150;
var left = ((window.document.body.clientWidth-graphWidth)/2)+((graphWidth-250)/2);

clearTimeout(timerID);

div.style.visibility = "";
div.style.top = top + "px";	
div.style.left = left + "px";
oldLap = nPassed_Lap;
oldPos = nPassed_Driver;

nLastLap = nPassed_Lap-1;

document.getElementById("DriverDetails").innerHTML = "";
sHTML3 = "<TABLE class='RaceChartTable' BGCOLOR='99CCFF' BORDER=1 WIDTH=250 ALIGN=CENTER>";
sHTML3 += "<TR>";
sHTML3 += "<TD class='RaceChartBox' WIDTH=250 BGCOLOR='99CCFF' ALIGN=LEFT>";

sHTML3 += "<TABLE class='RaceChartTable' BORDER=0 WIDTH=250 ALIGN=LEFT>";

if(nPassed_Lap == 0) {
   sHTML3 += "<TR>";
   sHTML3 += "<TD class='RaceChartBox' WIDTH=250 ALIGN=CENTER>";
   sHTML3 += "<FONT FACE='Verdana' SIZE=2><B>" + name + "</B></FONT>";
   sHTML3 += "</TD></TR>";
   sHTML3 += "<TR>";
   sHTML3 += "<TD class='RaceChartBox' WIDTH=250 ALIGN=CENTER>";
   sHTML3 += "<FONT FACE='Verdana' SIZE=2>Grid: " + nPassed_Driver + "</FONT>";
   sHTML3 += "</TD></TR>";
}

if(nPassed_Lap != 0) {
   sHTML3 += "<TR><TD class='RaceChartBox' WIDTH=250 ALIGN=LEFT>";
   sHTML3 += "<FONT FACE='Verdana' SIZE=2><B>" + name + "</B></FONT>";
   sHTML3 += "</TD></TR>";

   sHTML3 += "<TR><TD class='RaceChartBox' WIDTH=250 ALIGN=LEFT>";
   sHTML3 += "<TABLE class='RaceChartTable' BORDER=0 WIDTH=250 ALIGN=LEFT>";
   sHTML3 += "<TR>";
   sHTML3 += "<TD class='RaceChartBox' WIDTH=60 ALIGN=LEFT><FONT FACE='Verdana' SIZE=1><B>Lap : </B>" + nPassed_Lap + "</FONT></TD>";

   // WORK OUT POSITIONS ON PREVIOUS LAP
   if (nPassed_Lap > 0) {
      sGain = 0;
      for (n = 1;n <= nDriver_Records;n++) {
          if (aGraphData[nPassed_Lap-1][n].getEntrantName() == name) {
             sGain = n - nPassed_Driver;
             n = nDriver_Records+1;
          }
      }
   
      if (sGain >= 0) {
         sGain = "+" + String(sGain);
      }
     
   } else {
      sGain = "+0";
   }

   if (sGain == -999) {
      sHTML3 += "<TD class='RaceChartBox' WIDTH=130 ALIGN=LEFT><FONT FACE='Verdana' SIZE=1><B>Position : </B>" + nPassed_Driver + "</FONT></TD>";
   } else {
      sHTML3 += "<TD class='RaceChartBox' WIDTH=130 ALIGN=LEFT><FONT FACE='Verdana' SIZE=1><B>Position : </B>" + nPassed_Driver + " (" + sGain + ")</FONT></TD>";
   }

   //** STINT NO.
   sHTML3 += "<TD class='RaceChartBox' WIDTH=60 ALIGN=LEFT><FONT FACE='Verdana' SIZE=1><B>Stint : </B>" + stintNo + "</FONT></TD>";

   sHTML3 += "</TR>";
   sHTML3 += "</TABLE>";
   sHTML3 += "</TD></TR>";

   //** LAP TIME

   sHTML3 += "<TR><TD class='RaceChartBox' WIDTH=250 ALIGN=LEFT><FONT FACE='Verdana' SIZE=1><B>Lap Time : </B>";

   if(laptime != 0){
      sHTML3 += Seconds_To_Time(laptime);
   }else{
      sHTML3 += "-----";
   }

   if(laptime != 0){
     if(sChamp_Type == "SPRINT"){
        sHTML3 += " (" + format_MPH(3600 / (((laptime / anTrackLength[nCurrent_Round])*1000)*1.6093)) + " mph)";
     }else if(sChamp_Type == "ENDURANCE" || sChamp_Type == "CAR"){
              sHTML3 += " (" + format_MPH(3600 / (((laptime / anTrackLength[nCurrent_Round])*1000)*1.6093)) + " mph)";
     }else if(sChamp_Type == "CAR"){
              sHTML3 += " (" + format_MPH(3600 / (((laptime / anTrackLength[nCurrent_Round])*1000)*1.6093)) + " mph)";
     }

      if(pitLap != "") {
         sHTML3 += "<IMG BORDER='0' IMG ALT='" + TrimString(pitLap) + " - " + Get_Indicator_Description(pitLap,"1") +  "' SRC='" + TrimString(pitLap) + ".png'>";
      }

      if (sPassed_MediaLink1 != "") {
          sHTML3 += "<A HREF='" + sPassed_MediaLink1 + "' TARGET='_blank'><IMG BORDER='0' ALT='Media Link 1 - " + sPassed_MediaLink1 + "' SRC='Media.png'></A>";
      }

      if (sPassed_MediaLink2 != "") {
          sHTML3 += "<A HREF='" + sPassed_MediaLink2 + "' TARGET='_blank'><IMG BORDER='0' ALT='Media Link 2 - " + sPassed_MediaLink2 + "' SRC='Media.png'></A>";
      }
   }

   sHTML3 += "</FONT></TD></TR>";
				
   sHTML3 += "<TR><TD class='RaceChartBox' WIDTH=250 ALIGN=LEFT><FONT FACE='Verdana' SIZE=1><B>Gap To Next : </B>"; 

   //Gap to next team

   if(nPassed_Driver == 1){
      sHTML3 += "----</FONT></TD></TR>";
   }else{
        if(lapsCompleted == aGraphData[nPassed_Lap][nPassed_Driver-1].getLapsCompleted()){ ;
           nPoints_diff = (TruncNum(gapNext));

           if (nPoints_diff < 0) {
              nPoints_diff = nPoints_diff * -1;
           }

           sHTML3 += "-" + Seconds_To_Time(nPoints_diff) + "</FONT></TD></TR>";
        }else{
           if((aGraphData[nPassed_Lap][nPassed_Driver-1].getLapsCompleted() - lapsCompleted) == 1){
               sHTML3 += "-" + (aGraphData[nPassed_Lap][nPassed_Driver-1].getLapsCompleted() - lapsCompleted) + " Lap</FONT></TD></TR>";
           }else{
               sHTML3 += "-" + (aGraphData[nPassed_Lap][nPassed_Driver-1].getLapsCompleted() - lapsCompleted) + " Laps</FONT></TD></TR>";
           }
        }
   }

   //Gap to Following team

   sHTML3 += "<TR><TD class='RaceChartBox' WIDTH=250 ALIGN=LEFT><FONT FACE='Verdana' SIZE=1><B>Gap To Following : </B>"; 

   if(nPassed_Driver == nDriver_Records){
      sHTML3 += "----</FONT></TD></TR>";
   }else{
        if(lapsCompleted == aGraphData[nPassed_Lap][nPassed_Driver+1].getLapsCompleted()){ ;
           nPoints_diff = (TruncNum(gapFollowing));
        
           if (nPoints_diff < 0) {
              nPoints_diff = nPoints_diff * -1;
           }
           sHTML3 += "+" + Seconds_To_Time(nPoints_diff) + "</FONT></TD></TR>";
        }else{
           if((lapsCompleted - aGraphData[nPassed_Lap][nPassed_Driver+1].getLapsCompleted()) == 1){
               sHTML3 += "+" + (lapsCompleted - aGraphData[nPassed_Lap][nPassed_Driver+1].getLapsCompleted()) + " Lap</FONT></TD></TR>";
           }else{
               sHTML3 += "+" + (lapsCompleted - aGraphData[nPassed_Lap][nPassed_Driver+1].getLapsCompleted()) + " Laps</FONT></TD></TR>";
           }
        }
   }


   // gap to leader
   sHTML3 += "<TR><TD class='RaceChartBox' WIDTH=250 ALIGN=LEFT><FONT FACE='Verdana' SIZE=1><B>Gap To Leader : </B>"; 

   if(nPassed_Driver == 1){
      sHTML3 += "----</FONT></TD></TR>";
   }else{
      if(lapsCompleted == aGraphData[nPassed_Lap][1].getLapsCompleted()){ ;
         nPoints_diff = (TruncNum(gapLeader));

         if (nPoints_diff < 0) {
            nPoints_diff = nPoints_diff * -1;
         }
 
        sHTML3 += "-" + Seconds_To_Time(nPoints_diff) + "</FONT></TD></TR>";
      }else{

         if((aGraphData[nPassed_Lap][1].getLapsCompleted() - lapsCompleted) == 1){
           sHTML3 += "-" + (aGraphData[nPassed_Lap][1].getLapsCompleted() - lapsCompleted) + " Lap</FONT></TD></TR>";
         }else{
           sHTML3 += "-" + (aGraphData[nPassed_Lap][1].getLapsCompleted() - lapsCompleted) + " Laps</FONT></TD></TR>";
         }
      }
   }
}

sHTML3 += "</TABLE>";

sHTML3 += "</TD>";
sHTML3 += "</TR>";
sHTML3 += "</TABLE>";

document.getElementById("DriverDetails").innerHTML = sHTML3;

timerID = setTimeout("hideLapDetails();", 2000);

}

//***************************************************************************************************************************

function LapPosData(lapNo, position, entrantName, laptime, gapNext, gapFollowing, gapLeader, lapsCompleted, pitLap, stintNo, MediaLink1, MediaLink2) {
			this.lapNo = lapNo;
			this.position = position;
			this.entrantName = entrantName;
			this.laptime = laptime;
			this.gapNext = gapNext;
			this.gapFollowing = gapFollowing;
			this.gapLeader = gapLeader;
			this.lapsCompleted = lapsCompleted;
			this.pitLap = pitLap;
			this.stintNo = stintNo;
			this.MediaLink1 = MediaLink1;
			this.MediaLink2 = MediaLink2;
}

LapPosData.prototype.getLapNo = function() {
	return this.lapNo;
}
			
LapPosData.prototype.getPosition = function() {
	return this.position;
}
			
	
LapPosData.prototype.getEntrantName = function() {
	return this.entrantName;
}
			
			
LapPosData.prototype.getLaptime = function() {
	return this.laptime;
}
			
LapPosData.prototype.getGapNext = function() {
	return this.gapNext;
}

LapPosData.prototype.getGapFollowing = function() {
	return this.gapFollowing;
}

LapPosData.prototype.getGapLeader = function() {
	return this.gapLeader;
}

LapPosData.prototype.getLapsCompleted = function() {
	return this.lapsCompleted;
}

LapPosData.prototype.getPitLap = function() {
	return this.pitLap;
}

LapPosData.prototype.getStintNo = function() {
	return this.stintNo;
}

LapPosData.prototype.getMediaLink1 = function() {
	return this.MediaLink1;
}

LapPosData.prototype.getMediaLink2 = function() {
	return this.MediaLink2;
}


//***************************************************************************************************************************

function Race_Chart_OLD() {

var nLap;
var Y = 0;
var nMatch = 0;
var sSavedColour;
var nCount = 0;
var nStartLap;
var nEndLap;
var sString = "";
var nIndex;

var bCycle_Finished;
var nSaved_Score;
var nLapCount = 0;
var nLapCount2 = 0;

document.getElementById("DivText3").innerHTML = "<P></P>";

document.getElementById("DivText2").innerHTML = "<P></P>";

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>Race Analysis for Round " + nCurrent_Round + " - " + asTrackDate[nCurrent_Round] + "</TD></TR>";
}else if(sChamp_Type == "ENDURANCE" || sChamp_Type == "CAR"){
       if(sChamp_Name == "Endurance Series - The Challenge"){
          sHTML += "<TR><TD class='HeadBox2' BGCOLOR='#A8D3FF' ALIGN=CENTER>Race Analysis for Round " + nCurrent_Round + " - Race " + nChallenge_RaceNo + " - " + asTrackDate[nCurrent_Round] + "</TD></TR>";
       }else{
          sHTML += "<TR><TD class='HeadBox2' BGCOLOR='#A8D3FF' ALIGN=CENTER>Race Analysis for Round " + nCurrent_Round + " - " + asTrackDate[nCurrent_Round] + "</TD></TR>";
       }
}else if(sChamp_Type == "CAR"){
        sHTML += "<TR><TD class='HeadBox2' BGCOLOR='#A8D3FF' ALIGN=CENTER>Race Analysis for Round " + nCurrent_Round + " - " + asTrackDate[nCurrent_Round] + "</TD></TR>";
}

sHTML += "</TABLE><BR>";

sHTML += "<TABLE class='HeadTable3' BORDER=1 ALIGN=CENTER WIDTH=600>";

if(sChamp_Type == "SPRINT"){
   sHTML += "<TR><TD class='HeadBox3' BGCOLOR='#A8D3FF' ALIGN=CENTER>Circuit: " + asTrackName[nCurrent_Round] + " - Length: " + anTrackLength[nCurrent_Round] + " Metres</TD></TR>";
}else if(sChamp_Type == "ENDURANCE" || sChamp_Type == "CAR"){
        sHTML += "<TR><TD class='HeadBox3' BGCOLOR='#A8D3FF' ALIGN=CENTER>Circuit: " + asTrackName[nCurrent_Round] + " - Length: " + anTrackLength[nCurrent_Round] + " Metres</TD></TR>";
}else if(sChamp_Type == "CAR"){
        sHTML += "<TR><TD class='HeadBox3' BGCOLOR='#A8D3FF' ALIGN=CENTER>Circuit: " + asTrackName[nCurrent_Round] + " - Length: " + anTrackLength[nCurrent_Round] + " Metres</TD></TR>";
}

sHTML += "</TABLE><BR>";

sHTML += "<TABLE class='ControlTable' BORDER=1 ALIGN=CENTER WIDTH=400>";
sHTML += "<TR><TD>";

sHTML += "<TABLE BORDER=0 ALIGN=CENTER WIDTH=400>";
sHTML += "<TR>";

sHTML += "<TD class='ControlBox'BGCOLOR='#E8F3FF' ALIGN=CENTER WIDTH=400>";

sHTML += " Select Range : <SELECT NAME='SelectLapRange' onChange='Set_Lap_Range()'>";

nLoop = 1;

while (nLoop <= nRaceLaps) {

    nStartLap = nLoop;
    nEndLap = nLoop + 19;

    if (nEndLap > nRaceLaps) {
       nEndLap = nRaceLaps
    }

    sString = "Laps " + nStartLap + " to " + nEndLap;

    if(sString == sSelectedRange){
       sHTML += "<OPTION SELECTED>" + sString;
    }else{
       sHTML += "<OPTION>" + sString;
    }

    nLoop = nLoop + 20;
}

sHTML += "</SELECT>";
sHTML += "</TD>";

sHTML += "</TR>";
sHTML += "</TABLE></TD>";

sHTML += "</TR>";
sHTML += "</TABLE><BR>";

if(sChamp_Type == "SPRINT"){
   alert(sChamp_Name + " - " + sChamp_Year + "\r\r" + "Race Analysis for Round " + nCurrent_Round + " - " + asTrackName[nCurrent_Round] + ". \r\rPlease Wait - Building Race Chart for laps: " + nStartRangeLap + " to: " + nEndRangeLap);
}else if(sChamp_Type == "ENDURANCE" || sChamp_Type == "CAR"){
       if(sChamp_Name == "Endurance Series - The Challenge"){
          alert(sChamp_Name + " - " + sChamp_Year + "\r\r" + "Race Analysis for Round " + nCurrent_Round + " - Race " + nChallenge_RaceNo + " - " + asTrackName[nCurrent_Round] + ". \r\rPlease Wait - Building Race Chart for laps: " + nStartRangeLap + " to: " + nEndRangeLap);
       }else{
          alert(sChamp_Name + " - " + sChamp_Year + "\r\r" + "Race Analysis for Round " + nCurrent_Round + " - " + asTrackName[nCurrent_Round] + ". \r\rPlease Wait - Building Race Chart for laps: " + nStartRangeLap + " to: " + nEndRangeLap);
       }
}else if(sChamp_Type == "CAR"){
       alert(sChamp_Name + " - " + sChamp_Year + "\r\r" + "Race Analysis for Round " + nCurrent_Round + " - " + asTrackName[nCurrent_Round] + ". \r\rPlease Wait - Building Race Chart for laps: " + nStartRangeLap + " to: " + nEndRangeLap);
}


sHTML += "<P ALIGN=CENTER>Hover mouse over <FONT FACE='Wingdings' SIZE=1>o</FONT> to display information.</P>";

document.getElementById("DivText2").innerHTML = sHTML;

sHTML2 = "<TABLE BORDER=0 ALIGN=CENTER WIDTH=700>";
sHTML2 += "<TR>";

nLapCount = (nEndRangeLap - nStartRangeLap)+1;

sHTML2 += "<TD WIDTH=" + ((nLapCount > 20) ? 400 : (nLapCount*20)) + " ALIGN=CENTER>";

sHTML2 += "<TABLE BORDER=0 ALIGN=CENTER WIDTH=" + ((nLapCount > 20) ? 400 : (nLapCount*20)) + ">";
sHTML2 += "<TR>";

sHTML2 += "<TD WIDTH=20 ALIGN=CENTER>";
sHTML2 += "<TABLE BORDER=0 ALIGN=LEFT WIDTH=20 >";
sHTML2 += "<TR>";
sHTML2 += "<TD VALIGN=CENTER><IMG SRC='Position_Vertical.png'></IMG></TD>"; 
sHTML2 += "</TR>";
sHTML2 += "</TABLE>";
sHTML2 += "</TD>";


sHTML2 += "<TD WIDTH=20 ALIGN=CENTER>";
sHTML2 += "<TABLE BORDER=0 ALIGN=LEFT WIDTH=20 >";

for (z = 1;z <= nDriver_Records;z++) {
    sHTML2 += "<TR>";
    sHTML2 += "<TD HEIGHT=15 WIDTH=20 VALIGN=TOP ALIGN=CENTER><FONT FACE='Verdana' SIZE=1>" + z + "</FONT></TD>"; 
    sHTML2 += "</TR>";
}

sHTML2 += "</TABLE>";
sHTML2 += "</TD>";

//**************************
//*** Recalculate grid
//**************************


for (n = 0; n <= 20; n++) {
    anChartLapTime[n] = new Array();
    asChartLapPos[n]  = new Array();
    asChartPitLap[n]  = new Array();
}

for (X = 1; X <= nDriver_Records; X++) {

    for (Y = 1; Y <= nDriver_Records; Y++) {
        if (asDriver[X] == asINITDriver[Y]) {  
           nMatch = Y;
           Y = (nDriver_Records + 1);
        }
    }

    asChartDriver[X] = asDriver[X];
    asChartFinishingTime[X] = asFinishingTime[X];
    asChartExtraTime[X] = asExtraTime[X];
    asChartGridPos[X] = asGridPos[X];
    anChartStintNo[X] = anStintNo[X];
    sChartDriverColour[X] = sDriverColour[X];

    anChartTotalTime[X] = asExtraTime[X];
    anChartLapsCompleted[X] = 0;
    anChartStintNo[X] = 1;

    for (n = 1; n <= (nStartRangeLap-1); n++) {
        anChartTotalTime[X] = anChartTotalTime[X] + anINITLapTime[n][nMatch];
        if(anINITLapTime[n][nMatch] != 0){
           anChartLapsCompleted[X] = anChartLapsCompleted[X] + 1;
        } 

        if(anINITLapTime[n][nMatch] > nAvgLap){
           anChartStintNo[X] = anChartStintNo[X] + 1;
        } 
    }
}

nLapCount = (nEndRangeLap - nStartRangeLap)+1

for (X = 1; X <= nDriver_Records; X++) {

    for (Y = 1; Y <= nDriver_Records; Y++) {
        if (asDriver[X] == asINITDriver[Y]) {  
           nMatch = Y;
           Y = (nDriver_Records + 1);
        }
    }

    nLapCount2 = 0;

    if (nStartRangeLap > 1) {

       asChartLapPos[0][X] = asLapPos[nStartRangeLap-1][X];
    } else {
          asChartLapPos[0][X] = asChartLapPos[1][X];
    }

    for (n = nStartRangeLap; n <= nEndRangeLap; n++) {

        nLapCount2++;

        anChartLapTime[nLapCount2][X] = anINITLapTime[n][nMatch];
        asChartPitLap[nLapCount2][X] = asINITPitLap[n][nMatch];

    }
}

nLapCount2 = 0;

for (nLap = nStartRangeLap;nLap <= nEndRangeLap;nLap++) {
//*************************************************

   nLapCount2++;

   sHTML2 += "<TD WIDTH=20 ALIGN=CENTER>";
   sHTML2 += "<TABLE BORDER=0 ALIGN=LEFT WIDTH=20 >";

   sSaved_Driver = "";
   sSaved_TableHTML = "";

   for (X = 1; X <= nDriver_Records; X++) {

       anChartTotalTime[X] = anChartTotalTime[X] + anChartLapTime[nLapCount2][X];
       if(anChartLapTime[nLapCount2][X] != 0){
          anChartLapsCompleted[X] = anChartLapsCompleted[X] + 1;
       } 

       if(anChartLapTime[nLapCount2][X] > nAvgLap){
          anChartStintNo[X] = anChartStintNo[X] + 1;
       } 
   }

   //**************************
   //BUBBLE SORT Into Total order
   //**************************

   bCycle_Finished = false;

   while(bCycle_Finished == false) {
      bCycle_Finished = true;

      for (n = 1; n <= (nDriver_Records-1); n++) {
          if(anChartTotalTime[n] > anChartTotalTime[n+1]){
             //*** SAVE ARRAY VALUES HERE;
             sSaved_Driver = asChartDriver[n];
             nSaved_FullTotal = anChartTotalTime[n];
             nSaved_LapsCompleted = anChartLapsCompleted[n];
             sSaved_FinishingTime = asChartFinishingTime[n];
             sSaved_ExtraTime = asChartExtraTime[n];
             sSaved_GridPos = asChartGridPos[n];
             sSaved_StintNo = anChartStintNo[n];
             sSavedColour = sChartDriverColour[n];

             for (X = 1; X <= nLapCount; X++) {
                 anSaved_Score[X] = anChartLapTime[X][n];
                 sSaved_LapPos[X] = asChartLapPos[X][n];
                 if (bNoPitData == false) {
                    asSaved_PitLap[X] = asChartPitLap[X][n];
                 }
             }
             //*****;

             //*****;
             asChartDriver[n] = asChartDriver[n+1];
             anChartTotalTime[n] = anChartTotalTime[n+1];
             anChartLapsCompleted[n] = anChartLapsCompleted[n+1];
             asChartFinishingTime[n] = asChartFinishingTime[n+1];
             asChartExtraTime[n] = asChartExtraTime[n+1];
             asChartGridPos[n] = asChartGridPos[n+1];
             anChartStintNo[n] = anChartStintNo[n+1];
             sChartDriverColour[n] = sChartDriverColour[n+1];

             for (X = 1; X <= nLapCount; X++) {
                 anChartLapTime[X][n] = anChartLapTime[X][n+1];
                 asChartLapPos[X][n] = asChartLapPos[X][n+1];
                 if (bNoPitData == false) {
                    asChartPitLap[X][n] = asChartPitLap[X][n+1];
                 }
             }
             //*****;

             //*****;
             asChartDriver[n+1] = sSaved_Driver;
             anChartTotalTime[n+1] = nSaved_FullTotal;
             anChartLapsCompleted[n+1] = nSaved_LapsCompleted;
             asChartFinishingTime[n+1] = sSaved_FinishingTime;
             asChartExtraTime[n+1] = sSaved_ExtraTime;
             asChartGridPos[n+1] = sSaved_GridPos;
             anChartStintNo[n+1] = sSaved_StintNo;
             sChartDriverColour[n+1] = sSavedColour;

             for (X = 1; X <= nLapCount; X++) {
                 anChartLapTime[X][n+1] = anSaved_Score[X];
                 asChartLapPos[X][n+1] = sSaved_LapPos[X];
                 if (bNoPitData == false) {
                    asChartPitLap[X][n+1] = asSaved_PitLap[X];
                 }
             }
             //*****;
             bCycle_Finished = false;
          }
      }
   }

   //Now in Laps Completed Order

   bCycle_Finished = false;

   while(bCycle_Finished == false) {
      bCycle_Finished = true;
      for (n = 1; n <= (nDriver_Records - 1); n++) {
          if(anChartLapsCompleted[n] < anChartLapsCompleted[n+1]){
             //*** SAVE ARRAY VALUES HERE;
             sSaved_Driver = asChartDriver[n];
             nSaved_FullTotal = anChartTotalTime[n];
             nSaved_LapsCompleted = anChartLapsCompleted[n];
             sSaved_FinishingTime = asChartFinishingTime[n];
             sSaved_ExtraTime = asChartExtraTime[n];
             sSaved_GridPos = asChartGridPos[n];
             sSaved_StintNo = anChartStintNo[n];
             sSavedColour = sChartDriverColour[n];

             for (X = 1; X <= nLapCount; X++) {
                 anSaved_Score[X] = anChartLapTime[X][n];
                 sSaved_LapPos[X] = asChartLapPos[X][n];
                 if (bNoPitData == false) {
                    asSaved_PitLap[X] = asChartPitLap[X][n];
                 }
             }
             //*****;

             //*****;
             asChartDriver[n] = asChartDriver[n+1];
             anChartTotalTime[n] = anChartTotalTime[n+1];
             anChartLapsCompleted[n] = anChartLapsCompleted[n+1];
             asChartFinishingTime[n] = asChartFinishingTime[n+1];
             asChartExtraTime[n] = asChartExtraTime[n+1];
             asChartGridPos[n] = asChartGridPos[n+1];
             anChartStintNo[n] = anChartStintNo[n+1];
             sChartDriverColour[n] = sChartDriverColour[n+1];

             for (X = 1; X <= nLapCount; X++) {
                 anChartLapTime[X][n] = anChartLapTime[X][n+1];
                 asChartLapPos[X][n] = asChartLapPos[X][n+1];
                 if (bNoPitData == false) {
                    asChartPitLap[X][n] = asChartPitLap[X][n+1];
                 }
             }
             //*****;

             //*****;
             asChartDriver[n+1] = sSaved_Driver;
             anChartTotalTime[n+1] = nSaved_FullTotal;
             anChartLapsCompleted[n+1] = nSaved_LapsCompleted;
             asChartFinishingTime[n+1] = sSaved_FinishingTime;
             asChartExtraTime[n+1] = sSaved_ExtraTime;
             asChartGridPos[n+1] = sSaved_GridPos;
             anChartStintNo[n+1] = sSaved_StintNo;
             sChartDriverColour[n+1] = sSavedColour;

             for (X = 1; X <= nLapCount; X++) {
                 anChartLapTime[X][n+1] = anSaved_Score[X];
                 asChartLapPos[X][n+1] = sSaved_LapPos[X];
                 if (bNoPitData == false) {
                    asChartPitLap[X][n+1] = asSaved_PitLap[X];
                 }
             }
             //*****;
             bCycle_Finished = false;
          }
      }
   }

   for (n = 1; n <= nDriver_Records; n++) {
       asChartLapPos[nLapCount2][n] = n;
   } 

   nLastLap = 0;

   for (z = 1;z <= nDriver_Records;z++) {
         sHTML2 += "<TR>";
         if (anChartLapTime[nLapCount2][z] > nAvgLap) {
            sHTML2 += "<TD HEIGHT=15 BGCOLOR='" + sChartDriverColour[z] + "' COLOR='" + sChartDriverColour[z] + "' WIDTH=30 VALIGN=CENTER ALIGN=CENTER>";
            sHTML2 += "<A id='" + z + nLapCount2 + "' onmouseover='Display_Driver_OLD(" + z + "," + nLapCount2 + ")' onclick='Display_Driver(" + z + "," + nLapCount2 + ")'><FONT SIZE=1>"; 
            
	    if (asChartPitLap[nLapCount2][z] != "") {
                sHTML2 += "P";
            } 

            sHTML2 += (anChartStintNo[z]-1) + "</FONT></A></TD>";

         } else {
            sHTML2 += "<TD HEIGHT=15 BGCOLOR='" + sChartDriverColour[z] + "' COLOR='" + sChartDriverColour[z] + "' WIDTH=30 VALIGN=CENTER ALIGN=CENTER>";
            sHTML2 += "<A id='" + z + nLapCount2 + "' onmouseover='Display_Driver_OLD(" + z + "," + nLapCount2 + ")' onclick='Display_Driver_OLD(" + z + "," + nLapCount2 + ")'>";

            if (asChartPitLap[nLapCount2][z] != "") {
                sHTML2 += "<FONT SIZE=1>P</FONT></A></TD>";
            } else {
                sHTML2 += "<FONT FACE='Wingdings' SIZE=1>o</FONT></A></TD>";
            } 
         }
         sHTML2 += "</TR>";
   }

   sHTML2 += "<TR>";
   sHTML2 += "<TD HEIGHT=15 WIDTH=30 VALIGN=BOTTOM ALIGN=LEFT><FONT FACE='Verdana' SIZE=1>" + nLap + "</FONT></TD>";
   sHTML2 += "</TR>";
   sHTML2 += "</TABLE>";
   sHTML2 += "</TD>";

}

sHTML2 += "</TR>";
sHTML2 += "</TABLE>";

sHTML2 += "<TABLE BORDER=0 ALIGN=CENTER WIDTH=400>";
sHTML2 += "<TR>";
sHTML2 += "<TD WIDTH=400 VALIGN=TOP ALIGN=CENTER><IMG SRC='LapNo_Horizontal.png'</IMG></TD>";
sHTML2 += "</TR>";
sHTML2 += "</TABLE>";

sHTML2 += "</TD>";

sHTML2 += "<TD WIDTH=250 ALIGN=CENTER VALIGN=TOP>";
sHTML2 += "<DIV id='DivDriver'></DIV>";
sHTML2 += "</TD>";


sHTML2 += "</TR>";
sHTML2 += "</TABLE>";

document.getElementById("DivText3").innerHTML = sHTML2;

}

//***********************************************************************************

function Display_Driver_OLD(nPassed_Driver, nPassed_Lap) {

var nPoints_diff;

if (((nStartRangeLap + nPassed_Lap)-1) != nLastLap) {
  RaceChart_Lap_Positions(nPassed_Lap);
}

nLastLap = (nStartRangeLap + nPassed_Lap)-1;

document.getElementById("DivDriver").innerHTML = "";

sHTML3 = "<TABLE class='RaceChartTable' BGCOLOR='99CCFF' BORDER=1 WIDTH=250 ALIGN=CENTER>";
sHTML3 += "<TR>";
sHTML3 += "<TD class='RaceChartBox' WIDTH=250 BGCOLOR='99CCFF' ALIGN=LEFT>";

sHTML3 += "<TABLE class='RaceChartTable' BORDER=0 WIDTH=250 ALIGN=LEFT>";
sHTML3 += "<TR><TD class='RaceChartBox' WIDTH=250 ALIGN=LEFT>";

sHTML3 += "<TABLE class='RaceChartTable' BORDER=0 WIDTH=10 ALIGN=LEFT><TR><TD WIDTH=10 ALIGN=LEFT BGCOLOR='" + sChartDriverColour[nPassed_Driver] + "' COLOR='" + sChartDriverColour[nPassed_Driver] + "'><FONT FACE='Wingdings' SIZE=1>o</FONT></TD></TR></TABLE>";
sHTML3 += "<FONT FACE='Verdana' SIZE=2><B>" + asChartDriver[nPassed_Driver] + "</B></FONT>";

sHTML3 += "</TD></TR>";

sHTML3 += "<TR><TD class='RaceChartBox' WIDTH=250 ALIGN=LEFT>";
sHTML3 += "<TABLE class='RaceChartTable' BORDER=0 WIDTH=250 ALIGN=LEFT>";
sHTML3 += "<TR>";
sHTML3 += "<TD class='RaceChartBox' WIDTH=60 ALIGN=LEFT><FONT FACE='Verdana' SIZE=1><B>Lap : </B>" + ((nStartRangeLap + nPassed_Lap)-1) + "</FONT></TD>";

//** WORK OUT POSITIONS ON PREVIOUS LAP
if((((nStartRangeLap + nPassed_Lap)-1)) > 1){

   if (asChartLapPos[(nPassed_Lap-1)][nPassed_Driver] == 0) {
      sGain = -999;
   } else {
      sGain = asChartLapPos[(nPassed_Lap-1)][nPassed_Driver] - nPassed_Driver;

      if (sGain < 0)  {
          sGain = String(sGain);
      } else {
          sGain = "+" + String(sGain);
      }
   }
}else{
   sGain = (asChartGridPos[nPassed_Driver] - nPassed_Driver);

   if (sGain < 0)  {
       sGain = String(sGain);
   } else {
       sGain = "+" + String(sGain);
   }

}

if (sGain == -999) {
   sHTML3 += "<TD class='RaceChartBox' WIDTH=130 ALIGN=LEFT><FONT FACE='Verdana' SIZE=1><B>Position : </B>" + nPassed_Driver + "</FONT></TD>";
} else {
   sHTML3 += "<TD class='RaceChartBox' WIDTH=130 ALIGN=LEFT><FONT FACE='Verdana' SIZE=1><B>Position : </B>" + nPassed_Driver + " (" + sGain + ")</FONT></TD>";
}

sHTML3 += "<TD class='RaceChartBox' WIDTH=60 ALIGN=LEFT><FONT FACE='Verdana' SIZE=1><B>Stint : </B>" + anChartStintNo[nPassed_Driver] + "</FONT></TD>";
sHTML3 += "</TR>";
sHTML3 += "</TABLE>";
sHTML3 += "</TD></TR>";

//** LAP TIME

sHTML3 += "<TR><TD class='RaceChartBox' WIDTH=250 ALIGN=LEFT><FONT FACE='Verdana' SIZE=1><B>Lap Time : </B>";

if(anChartLapTime[nPassed_Lap][nPassed_Driver] != 0){
   sHTML3 += Seconds_To_Time(anChartLapTime[nPassed_Lap][nPassed_Driver]);
}else{
   sHTML3 += "-----";
}

if(anChartLapTime[nPassed_Lap][nPassed_Driver] != 0){
   if(sChamp_Type == "SPRINT"){
      sHTML3 += " (" + format_MPH(3600 / (((anChartLapTime[nPassed_Lap][nPassed_Driver] / anTrackLength[nCurrent_Round])*1000)*1.6093)) + " mph)";
   }else if(sChamp_Type == "ENDURANCE" || sChamp_Type == "CAR"){
            sHTML3 += " (" + format_MPH(3600 / (((anChartLapTime[nPassed_Lap][nPassed_Driver] / anTrackLength[nCurrent_Round])*1000)*1.6093)) + " mph)";
   }else if(sChamp_Type == "CAR"){
            sHTML3 += " (" + format_MPH(3600 / (((anChartLapTime[nPassed_Lap][nPassed_Driver] / anTrackLength[nCurrent_Round])*1000)*1.6093)) + " mph)";
   }
   if(asChartPitLap[nPassed_Lap][nPassed_Driver] != "") {
      sHTML3 += "<IMG BORDER='0' SRC='" + TrimString(asChartPitLap[nPassed_Lap][nPassed_Driver]) + ".png'>";
   }
}

sHTML3 += "</FONT></TD></TR>";

sHTML3 += "<TR><TD class='RaceChartBox' WIDTH=250 ALIGN=LEFT><FONT FACE='Verdana' SIZE=1><B>Gap To Next : </B>"; 

//Gap to next team

if(nPassed_Driver == 1){
   sHTML3 += "----</FONT></TD></TR>";
}else{
     if(anChartLapsCompleted[nPassed_Driver] == anChartLapsCompleted[nPassed_Driver-1]){ ;
        nPoints_diff = (TruncNum(anChartTotalTime[nPassed_Driver]) - TruncNum(anChartTotalTime[nPassed_Driver-1]));

        if (nPoints_diff < 0) {
           nPoints_diff = nPoints_diff * -1;
        }

        sHTML3 += "-" + Seconds_To_Time(nPoints_diff) + "</FONT></TD></TR>";
     }else{
        if((anChartLapsCompleted[nPassed_Driver-1] - anChartLapsCompleted[nPassed_Driver]) == 1){
            sHTML3 += "-" + (anChartLapsCompleted[nPassed_Driver-1] - anChartLapsCompleted[nPassed_Driver]) + " Lap</FONT></TD></TR>";
        }else{
            sHTML3 += "-" + (anChartLapsCompleted[nPassed_Driver-1] - anChartLapsCompleted[nPassed_Driver]) + " Laps</FONT></TD></TR>";
        }
     }
}

//Gap to Following team

sHTML3 += "<TR><TD class='RaceChartBox' WIDTH=250 ALIGN=LEFT><FONT FACE='Verdana' SIZE=1><B>Gap To Following : </B>"; 

if(nPassed_Driver == nDriver_Records){
   sHTML3 += "----</FONT></TD></TR>";
}else{
     if(anChartLapsCompleted[nPassed_Driver] == anChartLapsCompleted[nPassed_Driver+1]){ ;
        nPoints_diff = (TruncNum(anChartTotalTime[nPassed_Driver+1]) - TruncNum(anChartTotalTime[nPassed_Driver]));
        
        if (nPoints_diff < 0) {
           nPoints_diff = nPoints_diff * -1;
        }
        sHTML3 += "+" + Seconds_To_Time(nPoints_diff) + "</FONT></TD></TR>";
     }else{
        if((anChartLapsCompleted[nPassed_Driver] - anChartLapsCompleted[nPassed_Driver+1]) == 1){
            sHTML3 += "+" + (anChartLapsCompleted[nPassed_Driver] - anChartLapsCompleted[nPassed_Driver+1]) + " Lap</FONT></TD></TR>";
        }else{
            sHTML3 += "+" + (anChartLapsCompleted[nPassed_Driver] - anChartLapsCompleted[nPassed_Driver+1]) + " Laps</FONT></TD></TR>";
        }
     }
}


// gap to leader
sHTML3 += "<TR><TD class='RaceChartBox' WIDTH=250 ALIGN=LEFT><FONT FACE='Verdana' SIZE=1><B>Gap To Leader : </B>"; 

if(nPassed_Driver == 1){
   sHTML3 += "----</FONT></TD></TR>";
}else{
   if(anChartLapsCompleted[nPassed_Driver] == anChartLapsCompleted[1]){ ;
      nPoints_diff = (TruncNum(anChartTotalTime[nPassed_Driver]) - TruncNum(anChartTotalTime[1]));

      if (nPoints_diff < 0) {
         nPoints_diff = nPoints_diff * -1;
      }
 
     sHTML3 += "-" + Seconds_To_Time(nPoints_diff) + "</FONT></TD></TR>";
   }else{

      if((anChartLapsCompleted[1] - anChartLapsCompleted[nPassed_Driver]) == 1){
        sHTML3 += "-" + (anChartLapsCompleted[1] - anChartLapsCompleted[nPassed_Driver]) + " Lap</FONT></TD></TR>";
      }else{
        sHTML3 += "-" + (anChartLapsCompleted[1] - anChartLapsCompleted[nPassed_Driver]) + " Laps</FONT></TD></TR>";
      }
   }
}

sHTML3 += "</TABLE>";

sHTML3 += "</TD>";
sHTML3 += "</TR>";
sHTML3 += "</TABLE>";

document.getElementById("DivDriver").innerHTML = sHTML3;

}

//***********************************************************************************

function Set_Lap_Range() {

var nIndex;

nIndex = document.Form1.SelectLapRange.selectedIndex;
sSelectedRange = document.Form1.SelectLapRange.options[nIndex].text;

nPos = sSelectedRange.indexOf("to");

nStartRangeLap = Number(sSelectedRange.substring(5, nPos-1));
nEndRangeLap = Number(sSelectedRange.substring(nPos+3,sSelectedRange.length));

Race_Chart();

}

//***********************************************************************************

function RaceChart_Lap_Positions(nPassed_Lap) {

var nLap;
var sSavedColour;
var bCycle_Finished;
var nSaved_Score;
var nLapCount = 0;
var nLapCount2 = 0;
var Y = 0;
var nMatch = 0;
var nMatch2 = 0;

for (X = 1; X <= nDriver_Records; X++) {

    for (Y = 1; Y <= nDriver_Records; Y++) {
        if (asChartDriver[X] == asDriver[Y]) {  
           nMatch = Y;
           Y = (nDriver_Records + 1);
        }
    }

    for (Y = 1; Y <= nDriver_Records; Y++) {
        if (asChartDriver[X] == asINITDriver[Y]) {  
           nMatch2 = Y;
           Y = (nDriver_Records + 1);
        }
    }

    anChartTotalTime[X] = asChartExtraTime[X];
    anChartLapsCompleted[X] = 0;
    anChartStintNo[X] = 1;

    for (n = 1; n <= (nStartRangeLap-1); n++) {

        anChartTotalTime[X] = anChartTotalTime[X] + anINITLapTime[n][nMatch2];
        if(anINITLapTime[n][nMatch2] != 0){
           anChartLapsCompleted[X] = anChartLapsCompleted[X] + 1;
        } 

        if(anINITLapTime[n][nMatch2] > nAvgLap){
           anChartStintNo[X] = anChartStintNo[X] + 1;
        } 
    }

}

nLapCount = (nEndRangeLap - nStartRangeLap)+1

for (X = 1; X <= nDriver_Records; X++) {

    nLapCount2 = 0;

    for (n = nStartRangeLap; n <= ((nStartRangeLap + nPassed_Lap)-1); n++) {

        nLapCount2++;

        anChartTotalTime[X] = anChartTotalTime[X] + anChartLapTime[nLapCount2][X];

        if(anChartLapTime[nLapCount2][X] != 0){
           anChartLapsCompleted[X] = anChartLapsCompleted[X] + 1;
        } 

        if(anChartLapTime[nLapCount2][X] > nAvgLap){
          anChartStintNo[X] = anChartStintNo[X] + 1;
        } 

    }
}

//*************************************************

sHTML2 += "<TD WIDTH=20 ALIGN=CENTER>";
sHTML2 += "<TABLE BORDER=0 ALIGN=LEFT WIDTH=20 >";

sSaved_Driver = "";
sSaved_TableHTML = "";

//**************************
//BUBBLE SORT Into Total order
//**************************

bCycle_Finished = false;

while(bCycle_Finished == false) {
   bCycle_Finished = true;

   for (n = 1; n <= (nDriver_Records-1); n++) {
       if(anChartTotalTime[n] > anChartTotalTime[n+1]){
          //*** SAVE ARRAY VALUES HERE;
          sSaved_Driver = asChartDriver[n];
          nSaved_FullTotal = anChartTotalTime[n];
          nSaved_LapsCompleted = anChartLapsCompleted[n];
          sSaved_FinishingTime = asChartFinishingTime[n];
          sSaved_ExtraTime = asChartExtraTime[n];
          sSaved_GridPos = asChartGridPos[n];
          sSaved_StintNo = anChartStintNo[n];
          sSavedColour = sChartDriverColour[n];

          for (X = 1; X <= nLapCount; X++) {
              anSaved_Score[X] = anChartLapTime[X][n];
              sSaved_LapPos[X] = asChartLapPos[X][n];
              if (bNoPitData == false) {
                 asSaved_PitLap[X] = asChartPitLap[X][n];
              } 
          }
          //*****;

          //*****;
          asChartDriver[n] = asChartDriver[n+1];
          anChartTotalTime[n] = anChartTotalTime[n+1];
          anChartLapsCompleted[n] = anChartLapsCompleted[n+1];
          asChartFinishingTime[n] = asChartFinishingTime[n+1];
          asChartExtraTime[n] = asChartExtraTime[n+1];
          asChartGridPos[n] = asChartGridPos[n+1];
          anChartStintNo[n] = anChartStintNo[n+1];
          sChartDriverColour[n] = sChartDriverColour[n+1];

          for (X = 1; X <= nLapCount; X++) {
              anChartLapTime[X][n] = anChartLapTime[X][n+1];
              asChartLapPos[X][n] = asChartLapPos[X][n+1];
              if (bNoPitData == false) {
                 asChartPitLap[X][n] = asChartPitLap[X][n+1];
              } 
          }
          //*****;

          //*****;
          asChartDriver[n+1] = sSaved_Driver;
          anChartTotalTime[n+1] = nSaved_FullTotal;
          anChartLapsCompleted[n+1] = nSaved_LapsCompleted;
          asChartFinishingTime[n+1] = sSaved_FinishingTime;
          asChartExtraTime[n+1] = sSaved_ExtraTime;
          asChartGridPos[n+1] = sSaved_GridPos;
          anChartStintNo[n+1] = sSaved_StintNo;
          sChartDriverColour[n+1] = sSavedColour;

          for (X = 1; X <= nLapCount; X++) {
              anChartLapTime[X][n+1] = anSaved_Score[X];
              asChartLapPos[X][n+1] = sSaved_LapPos[X];
              if (bNoPitData == false) {
                 asChartPitLap[X][n+1] = asSaved_PitLap[X];
              }
          }
          //*****;
          bCycle_Finished = false;
       }
   }
}

//Now in Laps Completed Order

bCycle_Finished = false;

while(bCycle_Finished == false) {
   bCycle_Finished = true;
   for (n = 1; n <= (nDriver_Records - 1); n++) {
       if(anChartLapsCompleted[n] < anChartLapsCompleted[n+1]){
          //*** SAVE ARRAY VALUES HERE;
          sSaved_Driver = asChartDriver[n];
          nSaved_FullTotal = anChartTotalTime[n];
          nSaved_LapsCompleted = anChartLapsCompleted[n];
          sSaved_FinishingTime = asChartFinishingTime[n];
          sSaved_ExtraTime = asChartExtraTime[n];
          sSaved_GridPos = asChartGridPos[n];
          sSaved_StintNo = anChartStintNo[n];
          sSavedColour = sChartDriverColour[n];

          for (X = 1; X <= nLapCount; X++) {
              anSaved_Score[X] = anChartLapTime[X][n];
              sSaved_LapPos[X] = asChartLapPos[X][n];
              if (bNoPitData == false) {
                 asSaved_PitLap[X] = asChartPitLap[X][n];
              }
          }
          //*****;

          //*****;
          asChartDriver[n] = asChartDriver[n+1];
          anChartTotalTime[n] = anChartTotalTime[n+1];
          anChartLapsCompleted[n] = anChartLapsCompleted[n+1];
          asChartFinishingTime[n] = asChartFinishingTime[n+1];
          asChartExtraTime[n] = asChartExtraTime[n+1];
          asChartGridPos[n] = asChartGridPos[n+1];
          anChartStintNo[n] = anChartStintNo[n+1];
          sChartDriverColour[n] = sChartDriverColour[n+1];

          for (X = 1; X <= nLapCount; X++) {
              anChartLapTime[X][n] = anChartLapTime[X][n+1];
              asChartLapPos[X][n] = asChartLapPos[X][n+1];
              if (bNoPitData == false) {
                 asChartPitLap[X][n] = asChartPitLap[X][n+1];
              }
          }
          //*****;

          //*****;
          asChartDriver[n+1] = sSaved_Driver;
          anChartTotalTime[n+1] = nSaved_FullTotal;
          anChartLapsCompleted[n+1] = nSaved_LapsCompleted;
          asChartFinishingTime[n+1] = sSaved_FinishingTime;
          asChartExtraTime[n+1] = sSaved_ExtraTime;
          asChartGridPos[n+1] = sSaved_GridPos;
          anChartStintNo[n+1] = sSaved_StintNo;
          sChartDriverColour[n+1] = sSavedColour;

          for (X = 1; X <= nLapCount; X++) {
              anChartLapTime[X][n+1] = anSaved_Score[X];
              asChartLapPos[X][n+1] = sSaved_LapPos[X];
              if (bNoPitData == false) {
                 asChartPitLap[X][n+1] = asSaved_PitLap[X];
              } 
          }
          //*****;
          bCycle_Finished = false;
       }
   }
}

for (n = 1; n <= nDriver_Records; n++) {
    asChartLapPos[nPassed_Lap][n] = n;
} 


}

//*********************************************************************

function Get_Indicator_Description(sPassed_Indicator, sType) {

var asArray = new Array();
var sIndicator
var sDescription
var nPos

if(sType == "1") {
  asArray = asIndicator;
} else {
	if(sType == "2") {
	  asArray = asComIndicator;
	}
}

for (n = 1; n <= asArray.length-1; n++) {
	nPos = asArray[n].indexOf("|");
	if (nPos != -1) {
		sIndicator = asArray[n].substring(0, nPos);
	} else {
		sIndicator = "";
	}

	if(TrimString(sPassed_Indicator) == TrimString(sIndicator)) {
		nPos = asArray[n].indexOf("|");

		if (nPos != -1) {
			nPos++;
			sDescription = asArray[n].substring(nPos, asArray[n].length);
			if(sDescription != "") {
				bFound = true;
				return sDescription;
			}
			n = asDescription.length+1;
		}
	}
}

return "";

}
    
	





     

      









