var monthname = new MakeArray("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
var dayname = new MakeArray("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" );

function isLeapYear(yy) {
 if( Math.floor( yy / 400 ) * 400 == yy )       return true;
 else if( Math.floor( yy / 100 ) * 100 == yy )  return false;
 else if( Math.floor( yy / 4 ) * 4 == yy )      return true;
 else                                           return false;
}

function limitDay( yy, mm ) {
 switch( mm ) {
  case 3 : return 30;
  case 5 : return 30;
  case 8 : return 30;
  case 10 : return 30;
  case 1 : return isLeapYear( yy ) ? 29 : 28;
  default : return 31;
 }
}

function ComputeGPSWeek( yy2, mm2, dd2 ) {
  var basedate = new Date(1980, 0, 6);
  var todaydate = new Date(yy2, mm2, dd2);
  var totaldays = Math.floor((todaydate - basedate) / 86400 / 1000) + 1;
  var gpsweek = Math.ceil(totaldays / 7) - 1;
  return gpsweek;
}

function ComputeDayOfYear( yy2, mm2, dd2 ) {
  var basedate = new Date(yy2, 0, 1);
  var todaydate = new Date(yy2, mm2, dd2);
  var totaldays = Math.floor((todaydate - basedate) / 86400 / 1000) + 1;
  return totaldays;
}

function MakeArray() {
  this.length = MakeArray.arguments.length;
 for(i = 0; i < this.length; i++)
   this[i] = MakeArray.arguments[i];
}

function popupCalender() { 
  var todate = new Date();
  var fyy = todate.getFullYear();
  var fmm = todate.getMonth();
  ViewCalender( fyy, fmm );     // Show Calendar with specail year and month
}

function ViewCalender( yy, mm ) {
  var firstdate = new Date( yy, mm, 1 );
  var firstdow = firstdate.getDay();
  var tDay = 1 - firstdow;
  var tGPSWeek = ComputeGPSWeek( yy, mm, 1 );
  var lastday = limitDay( parseInt(yy), parseInt(mm) );
  var lastgw = ComputeGPSWeek( yy, mm, lastday );
  var tMonth = parseInt(mm) + 1;
  
  var gwcWin = open("", "GPSWeekCalendarWindow", "width=500,height=350" );
// open document for further output
 with( gwcWin.document ) {
  open();
  clear();
// create document
  writeln("<html>");
  writeln("  <head>");
  writeln("    <title>GPS Week Calendar</title>");
  writeln("<!--       <link rel=\"stylesheet\" type=\"text/css\" href=\"GPSWeek.css\"> -->");

  writeln("<style type=\"text/css\">");
  writeln("<!--");
  writeln("body { background-color: #f0fff4; font-family: verdana,arial,helvetica; }");
  writeln("div.foot { color: #330077; font-size: 8pt; font-weight: bold; text-align: right }");
  writeln("sup { font-size: 7pt; color: #330077; font-weight: bold }");
  writeln("td { font-size: 10pt; background-color: #f0fff4; font-weight: bold; cursor: default; text-align: center; } ");
  writeln("td.header { color: #101090; background-color: #99CCFF }");
  writeln("td.title { font-size: 13pt; color: #0000ee; background-color: #ffffdd }");
  writeln("td.datein { color: #000000; background-color: #fffff0 }");
  writeln("td.dateout { font-size: 10pt; color: #ff0000; background-color: #fffff0 }");
  writeln("td.unavail { color: #000000; background-color: #f0f0f0 }");
  writeln("td.gpsweek { background-color: #ffffdd }");
  writeln("td.selfield { background-color: #ffffdd; text-align: left }");
  writeln("-->");
  writeln("</style>");

  writeln("<script language=\"Javascript\" type=\"text/javascript\">");
  writeln("<!--");
  writeln("function DateOver() {");
  writeln(" var e = window.event.srcElement;");
  writeln(" if (e.className == \"datein\") {");
  writeln("  e.className = \"dateout\";");
  writeln(" }");
  writeln("}");
  writeln("");
  writeln("function DateOut() {");
  writeln(" var e = window.event.srcElement;");
  writeln(" if (e.className == \"dateout\") {");
  writeln("  e.className = \"datein\";");
  writeln(" }");
  writeln("}");
  writeln("//-->");
  writeln("</"+"script>");
  writeln("  </head>");

  writeln("  <body>");

  writeln("    <table border=\"1\" cellspacing=\"0\" bordercolor=\"#1144aa\" align=\"center\" summary=\"\">");
  writeln("      <tr>");
  writeln("        <td>");
  writeln("          <table border=\"1\" cellspacing=\"0\" bordercolor=\"#1144aa\" summary=\"\" onmouseover=\"DateOver()\" onmouseout=\"DateOut()\">");
  writeln("            <tr align=\"center\">");
  writeln("              <td colspan=\"8\" height=\"48\" class=\"title\">");

  writeln("                 " + monthname[ mm ] + " " + yy + "&nbsp;-&nbsp;GPS Week Calendar");

  writeln("              </td>");
  writeln("            </tr>");

  writeln("            <tr align=\"center\">");
  writeln("              <td width=\"81\" class=\"header\">GPS Week</td>");
  writeln("              <td width=\"54\" class=\"header\">Sun</td>");
  writeln("              <td width=\"54\" class=\"header\">Mon</td>");
  writeln("              <td width=\"54\" class=\"header\">Tues</td>");
  writeln("              <td width=\"54\" class=\"header\">Wed</td>");
  writeln("              <td width=\"54\" class=\"header\">Thu</td>");
  writeln("              <td width=\"54\" class=\"header\">Fri</td>");
  writeln("              <td width=\"54\" class=\"header\">Sat</td>");
  writeln("            </tr>");

 for(var i=0; i < 6; i++) {
//  if( tGPSWeek > lastgw )  break;
   writeln("            <tr align=\"center\">");
  if( tGPSWeek <= lastgw )  writeln("              <td class=\"gpsweek\" height=\"32\">" + tGPSWeek + "</td>");
  else                      writeln("              <td class=\"gpsweek\" height=\"32\">&nbsp;</td>");

  for(var j=1; j <= 7; j++) {
   if( (tDay > 0) && (tDay <= lastday) )
    {
      tdoy = ComputeDayOfYear( yy, mm, tDay );
      writeln("              <td class=\"datein\" title=\"Date: " + tDay + "/" +  tMonth + "/" + yy );
      writeln("GPS week: " + tGPSWeek);
      writeln("Day of week: " + j);
      writeln("Day of year: " + tdoy + "\">" + tDay + "</td>");
    }
   else                                   writeln("              <td class=\"unavail\">&nbsp;</td>");
    tDay ++;
  }
   writeln("            </tr>");
   tGPSWeek ++;
 }

  writeln("            <tr align=\"center\">");
  writeln("              <td class=\"header\">DOW</td>");
 for(i=1; i < 8; i++) {
   writeln("              <td class=\"header\">" + i + "</td>");
 }
  writeln("            </tr>");

  writeln("          </table>");
  writeln("        </td>");
  writeln("      </tr>");
  writeln("    </table>");

  writeln("    <div class=\"foot\">");
  writeln("      SNAP Group, School of Surveying & SIS, UNSW<br>");
  writeln("      Copyright <sup>&copy;</sup> " + yy);
  writeln("    </div>");
  writeln("  </body>");
  writeln("</html>");

// close the document - (not the window!)
  close();
 }
 this.focus();//gwcWin.focus();
}
