Mi manca qualche particolare e non ho esaminato a forndo la logica degli script... potrebbe esserci qualche difetto sugli indici e non ho modo di provarlo
codice:
var DataInizio = new Date(anno, mese-1, 01);
	
	// saltiamo primi giorni della settimana
	for (var i=0; i=DataInizio.getDay();i++) {
	  if (i == 0) Response.Write("<tr>");
	  Response.write('<td class="CellaSenzaGiorni"></td>');
	}
	
	// mostriamo il calendario
	for (var i=1; i=giornidelmese(mese,anno); i++) {
	  data = new Date(anno, mese-1, i);
	  if (data.getDay() == 0) Response.Write("<tr>");
	  Response.Write('<td class="CellaGiorni">' + i + '</td>')
	  if (data.getDay() == 6) Response.Write("</tr>");
	}
	
	// saltiamo gli ultimi giorni della settimana
	for (var j = data.getDay(); j=6; j++) {
	  Response.write ('<td class="CellaSenzaGiorni"></td>');
	  if (j % 6 == 0 ) {
	    Response.Write "</tr>";
		j = 999;
	  }
	}



<td><a class="GiornoAnno" href="index.asp?data=<%
// non ho idea di quale formato in output ti serva...
DataWork = data;
DataWork.setMonth(DataWork.getMonth()-1);
Response.Write(DataWork);
%>"><</a></td>
<td colspan="5" align="center"><%
NomiMesi = ("Gennaio,Febbraio,Marzo,Aprile,Maggio,Giugno,Luglio,Agosto,Settembre,Ottobre,Novembre,Dicembre").split(",");
Response.Write(NomiMesi[data.getMonth()] + " " + data.getFullYear());
%></td>
<td style="text-align:right;">
<a class="GiornoAnno" href="index.asp?data=<%
// non ho idea di quale formato in output ti serva...
DataWork = data;
DataWork.setMonth(DataWork.getMonth()+1);
Response.Write(DataWork);
%>">></a>



If (Request("data") == "") {
	data = new Date();
} else {
// qui dipende da come e' formato il parametro data....
    data = new Date(Request("data"));
}

mese = data.getMonth();
anno = data.getFullYear();



// conta il numero di giorni in un mese
function giornidelmese(mese, anno) {
	DataInizio = new Date(anno, mese-1, 01);
    DataFine = DateInizio;
	DataFine.setMonth(DataFine.getMonth()+1);
    return (DataFine - DataInizio);
}
ciao