
function Calendar1(W,P,Y,M,R,C,H) {var J,K,L,L1,T1                        // StartDoW,Pic,Year,Month,Row,Col,Headn
T="<table width=100%>"                                                    // Outer table
if(P!="") {J_InsT("<tr><td rowspan="+C+"><img src="+P+"></td></tr>")}     // Image if required
for(I=1; I<=R*C; I++) {if (I%C==1) {T=T+"<tr>"}                           // For each month; New Row?
FoM=J_FoM(Y,M); DiM=J_DiM(Y,M); Cw=100/C;                                 // First dow, Days in Month, Width
T=T+"<td class='CalMonth' width="+Cw+"%><table class='Month' width=100%>" // Month Table
J_InsT("<tr><th colspan=7>"+J_MName(M,3)+" "+Y+"</th></tr>")              // Month Header
T=T+"<tr>"; for (var J=W; J<W+7; J++) {K=(J-1)%7+1;                       // For each Weekday
T=T+"<td width='14%' class='CalCol'>"+J_DoW(K,H)+"</td>"}; J_InsT("</tr>")// Print Day-of-Week Col Headers                                  // Column Headers
D=0; P=0; for(K=W; K<W+42; K++) {if (P%7==0) {T=T+"<tr>"}; P=P+1          // Individual dates
//alert("K="+K+";P="+P+";D="+D+";FoM="+FoM)
if(D>0) {D=D+1}; if((D==0)&&(K%7==FoM%7)) {D=1};                          // Set Next day
T1="&nbsp;"; L="CalNone"; if((D>0)&&(D<=DiM))                             // Default if no print
{T1=D; L1=CalEvents(Y,M,D); if(L1!="") {L=L1} else {L="CalDay"}}          // Date to print
//alert("T1="+T1+"; L="+L)
T=T+"<td class='"+L+"'>"+T1+"</td>"; if(P%7==0) {T=T+"</tr>"}; J_InsT()}  // Print next date; End Month loop
T=T+"</table></td>"; if(I%C==0) {T=T+"</tr>"}                             // End of month; End of row?
M=M+1; if(M==13) {M=1; Y=Y+1}};  J_InsT("</table>")}                      // End of Calendar loop; Close

function CalEvents(Y,M,D) {var C,D1,D2,I,I1,J,K,L,M1,M2,Y1,Y2             // Event,Key,FromD,FromM,FromY,ToD,ToM,ToY
K=J_YMD(Y,M,D); for(J=0; J<A_Events.length; J++) {                        // Loop through Events
Y1=A_Events[J][4]; M1=A_Events[J][3]; D1=A_Events[J][2]                   // Event Start Date (D/M/Y)
if(!Y1) {Y1=0}; if(Y1==0) {Y1=Y}                                          // Start Date defaults   
Y2=A_Events[J][7]; M2=A_Events[J][6]; D2=A_Events[J][5]                   // End Date defaults
if(!Y2) {Y2=0}; if(Y2==0) {Y2=Y1}                                         // End Year defaults 
if(!M2) {M2=0}; if(M2==0) {M2=M1}; if (!D2) {D2=0}; if (D2==0) {D2=D1}    // End Day/Month defaults 
if ((K>=J_YMD(Y1,M1,D1))&&(K<=J_YMD(Y2,M2,D2)))                           // If Date is an event ..
{L=A_Events[J][0]; C=A_Events[J][1];                                      // Get Event data
for(I=0;I<V_KeyClasses.length;I++)                                        // Loop through Keys
{I1=V_KeyClasses[I][0]; if((I1==C)||(I1=="")) {return V_KeyClasses[I][2]}}}// Return Class Key; End Key loop
}; return ""}                                                             // End Event Loop; End Function

function CalKeys(J_1) {var I,K; T="<table width='100%'><tr>"              // Show Calendar Keys, (Default Text)
for (I=0; I<V_KeyClasses.length; I++)                                     // Loop through Keys
{K=V_KeyClasses[I][1]; if(K=="") {K=J_1}                                  // Get Key
J_InsT("<td class='"+V_KeyClasses[I][2]+"'>"+K+"</td>")}; J_InsT("</tr></table>")} // Show Key Texts; End Loop; End 

function J_FoM(Y,M) {var K=new Date(Y,M-1,1); return K.getDay()+1}        // "First of Month" Function

function J_DiM(Y,M) {var K=29; if((M!=2)||(Y%4!=0)||((Y%100==0)&&(Y%400!=0))) // "Days in Month" Function
{K=Number("312831303130313130313031".substr(2*M-2,2))}; return K}         // Days in month

function J_DoW(D,J) {var DNames=["Sunday","Monday","Tuesday"              // "Day Name" Function
,"Wednesday","Thursday","Friday","Saturday"]                              // "Day Names" Array
//alert("Day is "+D)
var K=DNames[D-1]; if (!J) {J=0}; if (J!=0) {K=K.substr(0,J)}; return K}  // Get "Day Name"; abbreviate if required

function J_MName(M,J) {var MNames=["January","February","March","April"   // "Month Name" Function
,"May","June","July","August","September","October","November","December"]// "Month Name" Array
var K=MNames[M-1]; if(!J) {J=0} if (J!=0) {K=K.substr(0,J)} return K}     // Return "Month Name"