// *********************************************************************
// *
// *  Splits Calculator -
// *  
// *  This file may not be altered in any way, including this header and the 
// *  information contained in it.  Doing so, violates copyright and voids
// *  any warranty or support provided with the code found here within.
// * 
// *  This code is copyrighted and may not be used or altered without
// *  permission.  For permission, contact:
// *  
// *    Edward J. Murphy  
// *    1628 W. Oceanfront - Suite 4
// *    Newport Beach, CA 92663
// *    949.723.1952
// *    murphy99@prodigy.net
// *
// *********************************************************************


// *********************************************************************
// *
// *  Convert Miles to Kilometers
// *
// *     miles:   number of miles
// *
// *
// *********************************************************************

function GetKilometers(miles) {

  var k = 0.0

  k = miles / 0.6213712

  return k
}

// *********************************************************************
// *
// *  Create a String of Space used for Padding.  Method depends on
// *  where the output is destined.  For blanks, FORMS support " " only,  
// *  HTML supports "&nbsp" only.
// *
// *     num:   number of spaces
// *
// *     type:  0 = " " - for forms
// *            1 = "&nbsp" - for HTML
// *
// *********************************************************************

function GetSpace(num, type) {

  str = ""

  for (j=1; j <= num; j++) {  // Create some padding
    if (type == 0) 
      str = str + " "
    else
      str = str + "&nbsp;"
  }

  return str
}

// *********************************************************************
// *
// * Return number of seconds as a formatted string (hh:mm:ss)
// *
// *   total:	total number of seconds
// *
// *
// *********************************************************************

function ConvertTime(total) {  // Time in seconds is returned as a formatted string (hh:mm:ss)

  var stime
  
  hr =  Math.floor(total / 3600)
  min = Math.floor((total - (hr * 3600)) / 60)
  sec = Math.round(total - (hr * 3600) - (min * 60))
  
  sec = (sec < 10) ? "0" + sec : sec
  min = (min < 10) ? "0" + min : min

  if (hr < 1)
    stime = min + ":" + sec
  else
    stime = hr + ":" + min + ":" + sec

  return stime
}

// *********************************************************************
// *
// *  Generate Mile or Kilometer splits based on the time and distance
// *  the user entered.  Place results in the forms TEXTAREA
// * 
// *    FRMpace:  Actual form, it must be passed to this function in 
// *              order to work with Netscape.  
// *
// *********************************************************************

function GetResultsText(FRMpace) {

  var sec, min, hour, total, mtime, ftime, msec, tsec
  var str, split, i, j, pad
  var mile  // this var used for miles and kilometers

  hour = FRMpace.PACEhours[FRMpace.PACEhours.selectedIndex].value
  min  = FRMpace.PACEminutes[FRMpace.PACEminutes.selectedIndex].value
  sec  = FRMpace.PACEseconds[FRMpace.PACEseconds.selectedIndex].value
  dist = FRMpace.PACEdistance[FRMpace.PACEdistance.selectedIndex].value

  if (FRMpace.RADIOMiKm[1].checked)              // Is Kilometer Splits Checked?
    dist = GetKilometers(dist)                   // Convert Miles to Kilometers 
  
  tsec = (3600 * hour) + (60 * min) + (1 * sec)

  ftime = hour + ((min < 10) ? ":0" : ":") + min + ((sec < 10) ? ":0" : ":") + sec
  total = tsec/dist    
  hour  = Math.floor(total / 3600)
  min   = Math.floor((total - (hour * 3600)) / 60)
  sec   = Math.floor(total - (hour * 3600) - (min * 60))

  if (hour < 1)
    mtime = min + ((sec < 10) ? ":0" : ":") + sec
  else  
    mtime = hour + ((min < 10) ? ":0" : ":") + min + ((sec < 10) ? ":0" : ":") + sec
  msec  = (3600 * hour) + (60 * min) + (1 * sec)
   
  if (FRMpace.RADIOMiKm[0].checked)               // Is Mile Splits Checked?     
    FRMpace.TXTpace.value = " Mile      Splits \r\n"
  else
    FRMpace.TXTpace.value = " KM        Splits \r\n"
  FRMpace.TXTpace.value = FRMpace.TXTpace.value + "------------------\r\n"

  sum = 0

  for (i=1; i<=1+1*dist; i++) {                   // Loop to write Mile or Kilometer Splits
    if (i > dist) {
      if (dist % 1 != 0) {
        if (FRMpace.RADIOMiKm[0].checked) {      // Is Mile Splits Checked?    
          if ((dist > 4) && (dist < 5))          // Round to 1 decimal place for miles 
            mile = Math.round(dist * 100) / 100  // EXCEPTION: Force 2 decimals for 8K 4.97 - Otherwise is rounded to 5 even
          else 
            mile = Math.round(dist * 10) / 10
        }  
        else                                      
          mile = Math.round(dist * 100) / 100     // Round to 2 decimal places for kilometers
        mile = '' + mile
        split = ConvertTime(total + (tsec - total))  
        pad = 16 - mile.length - split.length
        if ((i<10) && (dist>=10)) {
          mile = ' ' + mile 
          pad = pad - 1
        }
        else
          mile =  '' + mile 
        str = mile + GetSpace(pad, 0) + split
        FRMpace.TXTpace.value =  FRMpace.TXTpace.value + str + "\r\n"
      }  
    }
    else {
      sum  = sum + msec
      mile  = '' + i    
      split = ConvertTime(sum)
      pad = 16 - mile.length - split.length
      if ((i<10) && (dist>=10)) {
        mile = ' ' + mile 
        pad = pad - 1
      }
      else
        mile =  '' + mile 
      str = mile + GetSpace(pad, 0) + split 
      FRMpace.TXTpace.value =  FRMpace.TXTpace.value + str + "\r\n"
    }
  }
}

// *********************************************************************
// *
// *  Repeat of GetResultsText() except the results are 
// *  created in HTML and displayed in a new window
// * 
// *    FRMpace:  Actual form, it must be passed to this function in  
// *              order to work with Netscape.  
// *
// *********************************************************************

function GetResultsPrinter(FRMpace) {

  var sec, min, hour, dist, total, mtime, ftime, msec, tsec
  var str, split, i, j, pad
  var mile  // this var used for miles and kilometers

  var newWindow = window.open("","","status,height=375,width=170,scrollbars,menubar")

  hour = FRMpace.PACEhours[FRMpace.PACEhours.selectedIndex].value
  min  = FRMpace.PACEminutes[FRMpace.PACEminutes.selectedIndex].value
  sec  = FRMpace.PACEseconds[FRMpace.PACEseconds.selectedIndex].value
  dist = FRMpace.PACEdistance[FRMpace.PACEdistance.selectedIndex].value

  if (FRMpace.RADIOMiKm[1].checked)              // Is Kilometer Splits Checked?
    dist = GetKilometers(dist)                   // Convert Miles to Kilometers 
  
  tsec = (3600 * hour) + (60 * min) + (1 * sec)

  ftime = hour + ((min < 10) ? ":0" : ":") + min + ((sec < 10) ? ":0" : ":") + sec
  total = tsec/dist    
  hour  = Math.floor(total / 3600)
  min   = Math.floor((total - (hour * 3600)) / 60)
  sec   = Math.floor(total - (hour * 3600) - (min * 60))

  if (hour < 1)
    mtime = min + ((sec < 10) ? ":0" : ":") + sec
  else  
    mtime = hour + ((min < 10) ? ":0" : ":") + min + ((sec < 10) ? ":0" : ":") + sec
  msec  = (3600 * hour) + (60 * min) + (1 * sec)
   
  // HTML start
  newWindow.document.writeln('<html>')

  newWindow.document.writeln('<head>')
  newWindow.document.writeln('<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">')
  newWindow.document.writeln('<meta name="GENERATOR" content="Microsoft FrontPage 4.0">')
  newWindow.document.writeln('<meta name="ProgId" content="FrontPage.Editor.Document">')
  newWindow.document.writeln('<title>Cal Coast Pace Calculator</title>')
  newWindow.document.writeln('</head>')

  newWindow.document.writeln('<body>')

  // Table 1 start
  newWindow.document.writeln('<div align="left">')
  newWindow.document.writeln('<table border="1" cellpadding="2" cellspacing="0" width="140"  bordercolor="#000000">')

  // Cell Start
  newWindow.document.writeln('<tr>')
  newWindow.document.writeln('<td align="left" width="135">')

  newWindow.document.writeln('<font face="Courier New" color="#000000" size="1"><b>')
  newWindow.document.writeln('&nbsp;Cal Coast Track<br>')
  newWindow.document.writeln('&nbsp;Miles - ' + FRMpace.PACEdistance[FRMpace.PACEdistance.selectedIndex].text + '<br>')
  newWindow.document.writeln('&nbsp;Pace - ' + mtime + '<br>')
  newWindow.document.writeln('&nbsp;Time - ' + ftime + '</b>')

  // Cell End
  newWindow.document.writeln('</td>')
  newWindow.document.writeln('</tr>')

  // Table 1 End
  newWindow.document.writeln('</table')
  newWindow.document.writeln('</div')

  // Table 2 start
  newWindow.document.writeln('<div align="left">')
  newWindow.document.writeln('<table border="1" cellpadding="2" cellspacing="0" width="140"  bordercolor="#000000">')

  // Cell Start
  newWindow.document.writeln('<tr>')
  newWindow.document.writeln('<td align="center" width="135">')

  // Font Set
  newWindow.document.writeln('<font face="Courier New" color="#000000" size="2">')
  newWindow.document.writeln('<b>')

  // Header Write
  if (FRMpace.RADIOMiKm[0].checked)               // Is Mile Splits Checked?     
    newWindow.document.writeln('&nbsp;' + 'Mile' + '&nbsp;&nbsp;' + 'Splits' + '</br>')
  else
    newWindow.document.writeln('&nbsp;' + 'KM' + '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' + 'Splits' + '</br>')

  newWindow.document.writeln('&nbsp;-------------' + '</br>')

  sum = 0

  for (i=1; i<=1+1*dist; i++) {                   // Loop to write Mile or Kilometer Splits
    if (i > dist) {
      if (dist % 1 != 0) {
        if (FRMpace.RADIOMiKm[0].checked) {       // Is Mile Splits Checked?    
          if ((dist > 4) && (dist < 5))           // Round to 1 decimal place for miles 
            mile = Math.round(dist * 100) / 100   // EXCEPTION: Force 2 decimals for 8K 4.97 - Otherwise is rounded to 5 even
          else 
            mile = Math.round(dist * 10) / 10
        }  
        else                                      
          mile = Math.round(dist * 100) / 100     // Round to 2 decimal places for kilometers
        mile = '' + mile
        split = ConvertTime(total + (tsec - total))  
        pad = 13 - mile.length - split.length
        if ((i<10) && (dist>=10)) {
          mile = '&nbsp;' + mile 
          pad = pad - 1
        }
        else
          mile = '' + mile 
        str = mile + GetSpace(pad) + split
        newWindow.document.writeln('<font color="#FF0000">' + str + '</font></br>')
        newWindow.document.writeln('&nbsp;-------------' + '</br>')
        newWindow.document.writeln('<font size="1">' + 'calcoasttrack.com' + '</font></br>')
      }  
    }
    else {
      sum  = sum + msec
      mile  = '' + i    
      split = ConvertTime(sum)
      pad = 13 - mile.length - split.length
      if ((i<10) && (dist>=10)) {
        mile = '&nbsp;' + mile 
        pad = pad - 1
      }
      else
        mile = '' + mile 
      str = mile + GetSpace(pad) + split 
      if (i == dist) {          // NON Decimal Mile finishing Time - ex. NOT (26.2, 3.1, etc.)
        newWindow.document.writeln('<font color="#FF0000">' + str + '</font></br>')
        newWindow.document.writeln('&nbsp;-------------' + '</br>')
        newWindow.document.writeln('<font size="1">' + 'calcoasttrack.com' + '</font></br>')
      }  
      else if ((i % 5) == 0)  // Every 5th Mile
        newWindow.document.writeln('<font color="#0000FF">' + str + '</font></br>')
      else                    // All other Miles
        newWindow.document.writeln('<font color="000000">' + str + '</font></br>')
    }
  }

  for (i=i; i<=45; i++) {              // Write some additional blank lines
    newWindow.document.writeln('&nbsp</br>')    
  }

  newWindow.document.writeln('</b>')
  newWindow.document.writeln('</font>')

  // Cell End
  newWindow.document.writeln('</td>')
  newWindow.document.writeln('</tr>')


  // Table 1 End
  newWindow.document.writeln('</table')
  newWindow.document.writeln('</div')

  newWindow.document.writeln('</body>')
  newWindow.document.writeln('</html>')
  newWindow.document.close()

}