//-----------------------------
// All coding Copyright 2002 by Parshley Computer Consulting, LLC
//  HTML Calendar generator
//-----------------------------

function writeGotoMth(txtAry) {
   //--- write out 'goto the current month' function...
     txtAry[(++numOfLines)]=" <SCRIPT>";
     txtAry[(++numOfLines)]=" <!--";
     txtAry[(++numOfLines)]=" function gotoMonth() {";
     txtAry[(++numOfLines)]="  var thisDate=new Date();";
     txtAry[(++numOfLines)]="  var thisMonth=thisDate.getMonth();";
     txtAry[(++numOfLines)]="  switch (thisMonth) {";
     txtAry[(++numOfLines)]="    case 0 :";
     txtAry[(++numOfLines)]="      window.location.replace('#January');"; 
     txtAry[(++numOfLines)]="      break;"; 
     txtAry[(++numOfLines)]="    case 1 :"; 
     txtAry[(++numOfLines)]="      window.location.replace('#February');"; 
     txtAry[(++numOfLines)]="      break;"; 
     txtAry[(++numOfLines)]="    case 2 :"; 
     txtAry[(++numOfLines)]="      window.location.replace('#March');"; 
     txtAry[(++numOfLines)]="      break;"; 
     txtAry[(++numOfLines)]="    case 3 :"; 
     txtAry[(++numOfLines)]="      window.location.replace('#April');"; 
     txtAry[(++numOfLines)]="      break;"; 
     txtAry[(++numOfLines)]="    case 4 :"; 
     txtAry[(++numOfLines)]="      window.location.replace('#May');"; 
     txtAry[(++numOfLines)]="      break;"; 
     txtAry[(++numOfLines)]="    case 5 :"; 
     txtAry[(++numOfLines)]="      window.location.replace('#June');"; 
     txtAry[(++numOfLines)]="      break;"; 
     txtAry[(++numOfLines)]="    case 6 :"; 
     txtAry[(++numOfLines)]="      window.location.replace('#July');"; 
     txtAry[(++numOfLines)]="      break;"; 
     txtAry[(++numOfLines)]="    case 7 :"; 
     txtAry[(++numOfLines)]="      window.location.replace('#August');"; 
     txtAry[(++numOfLines)]="      break;"; 
     txtAry[(++numOfLines)]="    case 8 :"; 
     txtAry[(++numOfLines)]="      window.location.replace('#September');"; 
     txtAry[(++numOfLines)]="      break;"; 
     txtAry[(++numOfLines)]="    case 9 :"; 
     txtAry[(++numOfLines)]="      window.location.replace('#October');"; 
     txtAry[(++numOfLines)]="      break;"; 
     txtAry[(++numOfLines)]="    case 10 :"; 
     txtAry[(++numOfLines)]="      window.location.replace('#November');"; 
     txtAry[(++numOfLines)]="      break;"; 
     txtAry[(++numOfLines)]="    case 11 :"; 
     txtAry[(++numOfLines)]="      window.location.replace('#December');"; 
     txtAry[(++numOfLines)]="      break;"; 
     txtAry[(++numOfLines)]="  }";
     txtAry[(++numOfLines)]=" }";
     txtAry[(++numOfLines)]=" // hide from old browsers -->";
     txtAry[(++numOfLines)]=" </SCRIPT>";

}


function reDisplay() {

  today=new Date();
  todayYr=today.getYear();
  endDate=new Date(today.getMilliseconds()+(aDay*30) )
  endDate.setTime( today.getTime()+(aDay*30) );
  if (endDate.getMonth()==today.getMonth())
     endDate.setTime( today.getTime()+(aDay*31) );
  endYr=endDate.getYear();

  if (browser=="Netscape") {
     todayYr=todayYr+1900;
     endYr=endYr+1900;
  }
  
  endDate=new Date((endDate.getMonth()+1).toString()+"/01/"+endYr.toString());
  endDate.setTime(endDate.getTime()-aDay);

  document.calGen.startDay.value=(today.getMonth()+1).toString()+"/01/"+todayYr.toString();
  document.calGen.endDay.value=(endDate.getMonth()+1).toString()+"/"+(endDate.getDate()).toString()+"/"+endYr.toString();
} // default dates to this month


function codeString(oldS,newS,fullS) {
// Replaces oldS with newS in the string fullS
   for (var i=0; i<fullS.length; i++) {
      if (fullS.substring(i,i+oldS.length) == oldS) {
         fullS = fullS.substring(0,i)+newS+fullS.substring(i+oldS.length,fullS.length);
      }
   }
   return fullS;
}


function txtMth(thisMonth) {
  var returnMth=" ";

  switch (thisMonth) {
    case 0 : 
      returnMth="January"; 
      break; 
    case 1 : 
      returnMth="February"; 
      break; 
    case 2 : 
      returnMth="March"; 
      break; 
    case 3 : 
      returnMth="April"; 
      break; 
    case 4 : 
      returnMth="May"; 
      break; 
    case 5 : 
      returnMth="June"; 
      break; 
    case 6 : 
      returnMth="July"; 
      break; 
    case 7 : 
      returnMth="August"; 
      break; 
    case 8 : 
      returnMth="September"; 
      break; 
    case 9 : 
      returnMth="October"; 
      break; 
    case 10 : 
      returnMth="November"; 
      break; 
    case 11 : 
      returnMth="December"; 
      break; 
  }
  return returnMth;
}


function txtDay(thisDay) {
  var returnDay=" ";

  switch (thisDay) {
    case 0 : 
      returnDay="Sunday"; 
      break; 
    case 1 : 
      returnDay="Monday"; 
      break; 
    case 2 : 
      returnDay="Tuesday"; 
      break; 
    case 3 : 
      returnDay="Wednesday"; 
      break; 
    case 4 : 
      returnDay="Thursday"; 
      break; 
    case 5 : 
      returnDay="Friday"; 
      break; 
    case 6 : 
      returnDay="Saturday"; 
      break; 
  }
  return returnDay;
}


function setHtmlChkBox() {
   if (document.calGen.chkhtml.checked) {
      document.calGen.chkstyle.checked=true;
      document.calGen.chkstyle.disabled=false;
      document.calGen.chkauto.checked=true;
      document.calGen.chkauto.disabled=false;
   } else {     
      document.calGen.chkstyle.checked=false;
      document.calGen.chkstyle.disabled=true;
      document.calGen.chkauto.checked=false;
      document.calGen.chkauto.disabled=true;
   }
}


function writeCal(txtArray) {
    top.cal_mid.document.open("text/html","replace");

    for (var j = 0; j<=numOfLines; j++) {
       top.cal_mid.document.writeln(txtArray[j]);
    }
    top.cal_mid.document.close();
}


function calHdr(txtArray) {
   txtArray[numOfLines]="<HTML>";
   txtArray[(++numOfLines)]="<HEAD>";
   if (document.calGen.chkauto.checked) {
     writeGotoMth(txtArray);
   }
   if (document.calGen.chkstyle.checked) {
     txtArray[(++numOfLines)]=" <STYLE type='text/css'>";
     txtArray[(++numOfLines)]="   TABLE, TD { font: normal 9pt Arial}";
     txtArray[(++numOfLines)]=" </STYLE>";
   } // include CSS script

   txtArray[(++numOfLines)]="</HEAD>";
   if (document.calGen.chkauto.checked) {
      txtArray[(++numOfLines)]="<BODY TEXT='#000000' BGCOLOR='#FFFFFF' OnLoad='javascript:gotoMonth();'>";
   } else {
      txtArray[(++numOfLines)]="<BODY TEXT='#000000' BGCOLOR='#FFFFFF'>";
   }
   txtArray[(++numOfLines)]="<CENTER>";
}


function calFtr(txtArray) {
   txtArray[(++numOfLines)]="</CENTER>";
   txtArray[(++numOfLines)]="</BODY>";
   txtArray[(++numOfLines)]="</HTML>";
}


function genCal(txtArray) {
   startDate=new Date();

   var ChangeDay=0;
   startDate.setTime(firstDate.getTime());
   if (startDate.getDay() > selectWk) {
      changeDay=(startDate.getDay()-selectWk)*aDay;
      startDate.setTime( (firstDate.getTime()-changeDay) );
    } else {
      if (startDate.getDay() < selectWk) {
         changeDay=(8-selectWk)*aDay;
         startDate.setTime( (firstDate.getTime()-changeDay) );
      }
   } //    set first week day

   // ---set week day characters
   txtArray[(++numOfLines)]="<A NAME='topOfPage'></A>"; 
   txtArray[(++numOfLines)]="<TABLE BORDER='1' CELLPADDING='2' WIDTH='100%'>";
   txtArray[(++numOfLines)]="  <TR>";
   txtArray[(++numOfLines)]="    <TD WIDTH='13%' VALIGN='TOP' BGCOLOR='"+selectColor+"'>&nbsp;</TD>";

   var numLines=parseInt(document.calGen.LINECNT.value, 10)
   var setDate=new Date();
   setDate.setTime(startDate.getTime());
   for (var i=0; i<7; i++) {
      txtArray[(++numOfLines)]="    <TD WIDTH='12%' VALIGN='TOP' BGCOLOR='"+selectColor+"'><P ALIGN='CENTER'><B>"+txtDay(setDate.getDay())+"</B></TD>";
      setDate.setTime(setDate.getTime()+aDay);
   }
   txtArray[(++numOfLines)]="  </TR>";

   var stDay=new Date();
   stDay.setTime(startDate.getTime());
   var stMth=stDay.getMonth();
   var chrMth="";

   for (var j = startDate.getTime(); j<=lastDate.getTime(); j=j+(7*aDay)) {
      txtArray[(++numOfLines)]="  <TR>";
      stDay.setTime(j);
      if ( ((stDay.getMonth()!=stMth && (txtMth(stDay.getMonth())!=chrMth))) || (chrMth.length==0) ) {
         stMth=stDay.getMonth();
         chrMth=txtMth(stMth);
         if ((stDay.getTime()<firstDate.getTime()) && (stDay.getMonth()!=firstDate.getMonth())) {
            if (stMth==11) {
               chrMth=txtMth(0);
            } else {
               chrMth=txtMth(stMth+1);
            }
         }
         txtArray[(++numOfLines)]="    <TD VALIGN='TOP' BGCOLOR='"+selectColor+"'><A NAME='"+chrMth+"'></A><B>"+chrMth+"</B></TD>"
      } else {
         txtArray[(++numOfLines)]="    <TD VALIGN='TOP' BGCOLOR='"+selectColor+"'>&nbsp;</TD>";
      } //    begin month

      if ( (stDay.getTime()<firstDate.getTime()) || (stDay.getTime()>lastDate.getTime()) ) {
         txtArray[(++numOfLines)]="    <TD VALIGN='TOP'>&nbsp;</TD>";
      } else {
         txtArray[(++numOfLines)]="    <TD VALIGN='TOP'>"+stDay.getDate()+"</TD>";
      }  //   only print days within specified range

      for (var k=1; k<7; k++) {
         stDay.setTime((stDay.getTime()+aDay));
         if ( (stDay.getTime()<firstDate.getTime()) || (stDay.getTime()>lastDate.getTime()) ) {
            txtArray[(++numOfLines)]="    <TD VALIGN='TOP'>&nbsp;</TD>";
         } else {
            //txtArray[(++numOfLines)]="    <TD VALIGN='TOP'>"+stDay.getDate()+"</TD>";
            txtArray[(++numOfLines)]="    <TD VALIGN='TOP'>"+stDay.getDate();
            if (numLines>0) {
               for (var n=0; n<numLines; n=n+1) {
                  txtArray[numOfLines]=txtArray[numOfLines]+"<BR>&nbsp;";
                  //alert(txtArray[numOfLines]);
               } 
            }  //---pad cells w/extra lines
            txtArray[numOfLines]=txtArray[numOfLines]+"</TD>"

         }  //   only print days w/in specified range
      } //     write week
      txtArray[(++numOfLines)]="  </TR>";
   } //    write each week
   txtArray[(++numOfLines)]="</TABLE>";
   txtArray[(++numOfLines)]="[<A HREF='#topOfPage'>top of page</A>]";
}


function makeCalCode() {
    var lessThan="&lt;";
    var gtrThan="&gt;";

    var codeLines = new Array();
    numOfLines=0;

    top.cal_ftr.document.open("text/html","replace");
    top.cal_ftr.document.writeln("<HTML><HEAD>");
    top.cal_ftr.document.writeln("</HEAD>");
    top.cal_ftr.document.writeln("<BODY TEXT='#000000' BGCOLOR='#C0C0C0'>");
    top.cal_ftr.document.writeln("<PRE>");
    //------CREATED CODE...
    if (document.calGen.chkhtml.checked) {
       calHdr(codeLines);
    } else {
       codeLines[numOfLines]="<CENTER>";
    }

    genCal(codeLines);

    if (document.calGen.chkhtml.checked) {
       calFtr(codeLines);
    } else {
       codeLines[(++numOfLines)]="<BR>";
    }

    for (var i = 0; i <=numOfLines; i++) {
       codeLines[i]=codeString("<",lessThan,codeLines[i]);
       codeLines[i]=codeString(">",gtrThan,codeLines[i]);
       codeLines[i]=codeString("&nbsp;","&amp;nbsp;",codeLines[i]);
    }

    for (var j = 0; j<=numOfLines; j++) {
       top.cal_ftr.document.writeln(codeLines[j]);
    }
    //------END OF CREATED CODE...
    top.cal_ftr.document.writeln("</PRE>");
    top.cal_ftr.document.writeln("</BODY>");
    top.cal_ftr.document.writeln("</HTML>");
    top.cal_ftr.document.close();
}


function makeCal() {
   //alert(selectWk);
   firstDate=new Date(document.calGen.startDay.value);
   lastDate=new Date(document.calGen.endDay.value);
   if ( isNaN(firstDate.getMonth()) || isNaN(lastDate.getMonth()) ) {
      alert("ERROR! you must enter valid dates...");
      return false;
   }

   if (firstDate.getTime()>lastDate.getTime()) {
      alert("ERROR! you must enter a valid period...");
      return false;
   }

   document.calGen.genBtn.value="PLEASE WAIT...";
   document.calGen.genBtn.disabled=true;
    numOfLines=0;
    var txtLines = new Array();
    calHdr(txtLines);
    genCal(txtLines);
    //if (browser=="Netscape") {
      for (var i = 0; i <=numOfLines; i++) {
         txtLines[i]=codeString("OnLoad='javascript:gotoMonth();'","",txtLines[i]);
      }
      for (i = 0; i <=numOfLines; i++) {
         txtLines[i]=codeString("<A HREF='#topOfPage'>top of page</A>","top of page",txtLines[i]);
      }

    //}
    calFtr(txtLines);
    writeCal(txtLines);
    document.calGen.genBtn.value="making code, PLEASE WAIT...";
    makeCalCode();
    document.calGen.genBtn.value="Generate Calendar...";
    document.calGen.genBtn.disabled=false;
}
