<!--

// Function library to return tides information

// Author: Roger Bray specifix@bray.net.nz
// This script copywrite Specifix - ALL RIGHTS RESERVED

// Host page must include tides.ccs

 
// Global variables
tideday = new Array();
tidehgt = new Array();

//****************************************************************************************
// TideGet (month,day) - returns string array tideday(4) with elements of form tttt h.h (t=24h time, h=hight)
//****************************************************************************************

function TideGet(month,day) {

  // DAYLIGHT START END NEEDS PARAMETERISING !!!
  daylightsave = false;
  if ((month < 3) ||
      (month == 3 && day < 17) || 
      (month == 10 && day > 20) ||
      (month > 10)) daylightsave = true;
  

  for (i=0; i<4; i++) {

    try {
      tidework = tidetimes[month][day][i];
      tidehgt[i] = tidehights[month][day][i];
    
      if (daylightsave) {
        if (tidework < 0 && i == 0) {
          if (day > 1) {
             prevmth = month;
             prevday = day -1;          
          }
          else {
            if (month == 1) prevmth = 12
            else prevmth = month -1;  
            prevday = tidemaxday[prevmth];
          }       
          tidework = tidetimes[prevmth][prevday][3] -2300;
          tidehgt[i] = tidehights[prevmth][prevday][3];
        }
        else if (tidework > 2259) tidework = -1 
        else tidework += 100; 
      }
    
      if (isNaN(tidework) || tidework < 0) {
        tideday[i] = '';
        tidehgt[i] = '';
      } 
      else {
        if (tidework > 999) tideday[i] = tidework.toString()
        else if (tidework > 99) tideday[i] = '0' + tidework.toString()
        else if (tidework > 9) tideday[i] = '00' + tidework.toString()
        else tideday[i] = '000' + tidework.toString();
      }
    }
    catch(e) {
      tideday[i] = '';
      tidehgt[i] = '';
    }
  }  
}

//****************************************************************************************
// TideCell(month,day) - writes HTML string for a 5 line cell of tides
//****************************************************************************************

function TideCell(month,day) {

 TideGet(month,day);
 document.write('<TD CLASS=TideCellF><SPAN cLASS=TideCellC>Time&nbsp&nbspHgt</SPAN>');

 for (j=0; j<4; j++) {
   document.write('<BR><SPAN cLASS=TideCell');
   if (tideday[j] < 600 || tideday[j] > 1800 ) document.write('N>')
   else document.write('D>');
   document.write(tideday[j]);
   document.write(' &nbsp </SPAN><SPAN cLASS=TideCell');
   if (tidehgt[j] > 2) document.write('H>')
   else document.write('L>');
   document.write(tidehgt[j] + '</SPAN>');
 }

 document.write('</TD>');
} 

//****************************************************************************************
// TideDay(month,day) - build a one cell table with nominated day's tides
//****************************************************************************************

function TideDay(month,day) {
 document.write('<TABLE CLASS=tides><TR><TD ALIGN=CENTER CLASS=TideCellF><SPAN cLASS=TideCellT>' + 
  day + ' ' + tidemonths[month-1].slice(0,3) + '</SPAN></TD></TR><TR>');
 TideCell(month,day);
 document.write('</TR></TABLE>');
}

//****************************************************************************************
// TideDays(monthst,dayst,count) - build a table with count days of tides from monthst dayst 
//****************************************************************************************

function TideDays(monthst,dayst,count) {
 // if count invalid specify 1 day ** default
 if (isNaN(count) || count < 1) count =1;
 document.write('<TABLE CLASS=tides><TR>');
 // do headers
 month = monthst;
 day = dayst;
 for (k=1; k<=count; k++) { 
  if (day > tidemaxday[month-1]) {
    day =1
    month++;
    if (month > 12) month = 1;
  }
  document.write('<TD ALIGN=CENTER CLASS=TideCellF><SPAN cLASS=TideCellT>' + 
   day + ' ' + tidemonths[month-1].slice(0,3) + '</SPAN></TD>');
  day++
 }
 document.write('</TR><TR>');
 // do tides
 month = monthst;
 day = dayst;
 for (k=1; k<=count; k++) { 
  if (day > tidemaxday[month-1]) {
    day =1
    month++;
    if (month > 12) month = 1;
  }
  TideCell(month,day);
  day++
 }
 document.write('</TABLE>');
}


//****************************************************************************************
// TideToday - build table starting with today's tides
//****************************************************************************************

function TideToday(count) {
 today = new Date();
 month = today.getMonth() +1;
 day = today.getDate();
 TideDays(month,day,count);
}

//****************************************************************************************
// TideHigh(month,day) - writes HTML string for a 1 line cell with daylight high tide
//****************************************************************************************

function TideHigh(month,day) {

 TideGet(month,day);

 for (j=0; j<4; j++) {
   if (tideday[j] > 530 && tidehgt[j] > 2) {
     document.write('<TD ALIGN=CENTER CLASS=TideCellF><SPAN cLASS=TideCell');
     if (tideday[j] < 600 || tideday[j] > 1800 ) document.write('N>')
     else document.write('D>');
     document.write(tideday[j] + ' &nbsp </SPAN><SPAN cLASS=TideCellH>' + tidehgt[j] + '</SPAN></TD>');
     j=4;
   }
 }
} 

//****************************************************************************************
// TideHDays(monthst,dayst,count) - writes HTML string for row with count days of tides from monthst dayst 
//****************************************************************************************

function TideHDays(monthst,dayst,count) {
 // if count invalid specify 1 day ** default
 if (isNaN(count) || count < 1) count =1;
 document.write('<TR>');
 // do tides
 month = monthst;
 day = dayst;
 for (k=1; k<=count; k++) { 
  if (day > tidemaxday[month-1]) {
    day =1
    month++;
    if (month > 12) month = 1;
  }
  TideHigh(month,day);
  day++
 }
 document.write('</TR>');
}


//****************************************************************************************
// TideHToday - writes HTML string for row starting with today's tides
//****************************************************************************************

function TideHToday(count) {
 today = new Date();
 month = today.getMonth() +1;
 day = today.getDate();
 TideHDays(month,day,count);
}

//****************************************************************************************
// TideMenu - build a menu of months
//****************************************************************************************

function TideMenuM() {
  FlatMenuML(tidestartmth-1,11);
  if (tidestartmth > 1)  FlatMenuML(1,tidestartmth-2);
}

function TideMenuL(astart,aend) {
  for (actwrk = astart; actwrk <= aend; actwrk++) {
    j=actwrk+1;
    document.write('<BR><A HREF=' + document.location.pathname + '?m=' + j + ' TARGET=_top>' + 
     tidemonths[actwrk] + '</A>');
  }
}


//****************************************************************************************
// TideMonth - build a table with months's tides
//****************************************************************************************

function TideMonth(month) {  

  if (month < 1 || month > 12) {
    today = new Date();
    month = today.getMonth() +1;
  } 

  document.write('<TABLE CLASS=tides BORDER=0 CELLSPACING=0>' +
   '<TR CLASS=TidesM ALIGN=CENTER><TD COLSPAN=3 VALIGN=CENTER><FONT size=-2>Waitemata Harbour<BR>Auckland, New Zealand</FONT></TD>' +
   '<TD><A HREF=' + tidehome + '><IMG SRC=' + tidehomeimg + ' BORDER=0></A>&nbsp');

  mthwrk = month;
  mthwrk--;
  if (mthwrk < 1) mthwrk=12;     
  if (month == tidestartmth) document.write('&nbsp')
    else document.write('<A HREF=' + document.location.pathname + '?m=' + mthwrk + 
    '><IMG SRC=' + tidenavprev +' BORDER =0 WIDTH=20 HIEGT=20></A>');
  
  document.write('</TD><TD COLSPAN=6>Tides for ' + tidemonths[month-1] + '</TD><TD>');

  mthwrk = month;
  mthwrk++;
  if (mthwrk > 12) mthwrk=1;     
  if (mthwrk == tidestartmth) document.write('&nbsp')
    else document.write('<A HREF=' + document.location.pathname + '?m=' + mthwrk + 
    '><IMG SRC=' + tidenavnext +' BORDER =0 WIDTH=20 HIEGT=20></A>');

  document.write('</TD>' +
   '<TD COLSPAN=3><FONT size=-2>Time: Local DST - Height: Metres<BR>Lat. 36&deg51S &nbsp Long. 174&deg46E</FONT></TD></TR>' +
   '<TR ALIGN=RIGHT CLASS=TidesDH><TD COLSPAN=2>Sunday</TD><TD COLSPAN=2>Monday</TD><TD   COLSPAN=2>Tuesday</TD><TD COLSPAN=2>Wednesday</TD><TD COLSPAN=2>Thursday</TD><TD COLSPAN=2>Friday</TD><TD   COLSPAN=2>Saturday</TD></TR><TR>');
  col = tidestartday[month-1] -1;
  if (col > 0) document.write('<TD COLSPAN=' + col*2 + '> </TD>');

  for (day = 1; day <= tidemaxday[month-1]; day++) {
   col++;
   if (col > 7) {
     document.write('</TR><TR><TD COLSPAN=14> </TD></TR><TR>');
     col = 1;
   }  

   document.write('<TD ALIGN=RIGHT CLASS=TidesDN>&nbsp' + day + '<BR>&nbsp</FONT></TD>')
   TideCell(month,day);

  }

  document.write('</TR></TABLE><CENTER><SPAN CLASS=TideCellC>Adjusted for Daylight Saving</SPAN></CENTER>');
}

//-->
