--- calendar.js.orig	2008-09-15 11:06:40.000000000 +0200
+++ calendar.js	2008-09-15 12:14:46.000000000 +0200
@@ -1,7 +1,44 @@
 /* --- Swazz Javascript Calendar ---
 /* --- v 1.0 3rd November 2006
 By Oliver Bryant
-http://calendar.swazz.org */
+http://calendar.swazz.org/
+
+License: Public Domain
+  The javascript calendar available here is a free, lightweight widget
+  which shows a calendar for use in picking dates on form fields.
+
+Code to activate the calendar
+
+   <script src="calendar.js"></script>
+
+   <input type="text" value="dd/mm/yy" onfocus="lcs(this)" onclick="event.cancelBubble=true;lcs(this)">
+
+   <input id="date" type="text" value="dd/mm/yy">
+   <img src="calendar.gif" onclick="event.cancelBubble=true;popcalendar('date');">
+
+close.gif could be from
+  http://lh6.ggpht.com/_S4TaEbhoBZc/Rt8ad-K_AZI/AAAAAAAABlw/moApV80jJvo/close.gif
+  (search www.google.com for small pictures, pick one)
+
+Call calendar({opt1: val1, opt2: val2}) for configuration.
+*/
+
+var ccc = {past: false,
+	   startat: 0,
+	   close: false,
+	   delim: '/',
+	   imgpath: ''};
+
+var caldays = new Array('S','M','T','W','T','F','S');
+var mn=new Array('JAN','FEB','MAR','APR','MAY','JUN','JUL','AUG','SEP','OCT','NOV','DEC');
+
+function calendar(info)
+{
+    for (var e in ccc)
+	if (info[e])
+	    ccc[e] = info[e];
+    gencalendar();
+}
 
 function getObj(objID)
 {
@@ -59,9 +96,25 @@ function Top(obj)
 	return curtop;
 }
 	
+function gencalendar()
+{
+    if (getObj('fc'))
+	return;
+
 document.write('<table id="fc" style="position:absolute;border-collapse:collapse;background:#FFFFFF;border:1px solid #ABABAB;display:none" cellpadding=2>');
-document.write('<tr><td style="cursor:pointer" onclick="csubm()"><img src="arrowleftmonth.gif"></td><td colspan=5 id="mns" align="center" style="font:bold 13px Arial"></td><td align="right" style="cursor:pointer" onclick="caddm()"><img src="arrowrightmonth.gif"></td></tr>');
-document.write('<tr><td align=center style="background:#ABABAB;font:12px Arial">S</td><td align=center style="background:#ABABAB;font:12px Arial">M</td><td align=center style="background:#ABABAB;font:12px Arial">T</td><td align=center style="background:#ABABAB;font:12px Arial">W</td><td align=center style="background:#ABABAB;font:12px Arial">T</td><td align=center style="background:#ABABAB;font:12px Arial">F</td><td align=center style="background:#ABABAB;font:12px Arial">S</td></tr>');
+document.write('<tr><td style="cursor:pointer" onclick="csubm()"><img src="'+ccc.imgpath+'arrowleftmonth.gif"></td>');
+if (ccc.close)
+    document.write('<td colspan=4 id="mns" align="center" style="font:bold 13px Arial">');
+else
+    document.write('<td colspan=5 id="mns" align="center" style="font:bold 13px Arial">');
+document.write('</td><td align="right" style="cursor:pointer" onclick="caddm()"><img src="'+ccc.imgpath+'arrowrightmonth.gif"></td>');
+if (ccc.close)
+    document.write('<td align="right" style="cursor:pointer" onclick="cal_close()"><img src="'+ccc.imgpath+'close.gif"></td>');
+document.write('</tr>');
+document.write('<tr>');
+for (var i=0; i<7; i++)
+    document.write('<td align=center style="background:#ABABAB;font:12px Arial">'+caldays[(i+ccc.startat)%7]+'</td>');
+document.write('</tr>');
 for(var kk=1;kk<=6;kk++) {
 	document.write('<tr>');
 	for(var tt=1;tt<=7;tt++) {
@@ -71,6 +124,7 @@ for(var kk=1;kk<=6;kk++) {
 	document.write('</tr>');
 }
 document.write('</table>');
+}
 
 document.all?document.attachEvent('onclick',checkClick):document.addEventListener('click',checkClick,false);
 
@@ -79,19 +133,30 @@ document.all?document.attachEvent('oncli
 var now = new Date;
 var sccm=now.getMonth();
 var sccy=now.getFullYear();
-var ccm=now.getMonth();
-var ccy=now.getFullYear();
+var ccm;
+var ccy;
+
+function popcalendar(name)
+{
+  var input = getObj(name);
+
+  if (!input) return;
+
+  lcs(input);
+}
 
 var updobj;
 function lcs(ielem) {
+	gencalendar();
 	updobj=ielem;
+	updobj.select();
 	getObj('fc').style.left=Left(ielem);
 	getObj('fc').style.top=Top(ielem)+ielem.offsetHeight;
 	getObj('fc').style.display='';
 	
 	// First check date is valid
 	curdt=ielem.value;
-	curdtarr=curdt.split('/');
+	curdtarr=curdt.split(ccc.delim);
 	isdt=true;
 	for(var k=0;k<curdtarr.length;k++) {
 		if (isNaN(curdtarr[k]))
@@ -102,6 +167,12 @@ function lcs(ielem) {
 		ccy=curdtarr[2];
 		prepcalendar(curdtarr[0],curdtarr[1]-1,curdtarr[2]);
 	}
+	else
+	{
+		ccm=now.getMonth();
+		ccy=now.getFullYear();
+		prepcalendar('',ccm,ccy);
+	}
 	
 }
 
@@ -123,10 +194,12 @@ function cs_out(e) {
 function cs_click(e) {
 	updobj.value=calvalarr[evtTgt(EvtObj(e)).id.substring(1,evtTgt(EvtObj(e)).id.length)];
 	getObj('fc').style.display='none';
+}
+function cal_close(e) {
+	getObj('fc').style.display='none';
 	
 }
 
-var mn=new Array('JAN','FEB','MAR','APR','MAY','JUN','JUL','AUG','SEP','OCT','NOV','DEC');
 var mnn=new Array('31','28','31','30','31','30','31','31','30','31','30','31');
 var mnl=new Array('31','29','31','30','31','30','31','31','30','31','30','31');
 var calvalarr=new Array(42);
@@ -168,14 +241,16 @@ function prepcalendar(hd,cm,cy) {
 	td.setDate(1);
 	td.setFullYear(cy);
 	td.setMonth(cm);
-	cd=td.getDay();
+	cd=td.getDay() - ccc.startat;
+	if (cd<0) cd += 7;
 	getObj('mns').innerHTML=mn[cm]+ ' ' + cy;
-	marr=((cy%4)==0)?mnl:mnn;
+	marr=( (ccy % 4 == 0) || (ccy % 100 == 0) || (ccy % 400 == 0) )?mnl:mnn;
 	for(var d=1;d<=42;d++) {
 		f_cps(getObj('v'+parseInt(d)));
 		if ((d >= (cd -(-1))) && (d<=cd-(-marr[cm]))) {
-			dip=((d-cd < sd)&&(cm==sccm)&&(cy==sccy));
+			dip=ccc.past?false:((d-cd < sd)&&(cm==sccm)&&(cy==sccy));
 			htd=((hd!='')&&(d-cd==hd));
+
 			if (dip)
 				f_cpps(getObj('v'+parseInt(d)));
 			else if (htd)
@@ -188,7 +263,7 @@ function prepcalendar(hd,cm,cy) {
 			getObj('v'+parseInt(d)).onclick=(dip)?null:cs_click;
 			
 			getObj('v'+parseInt(d)).innerHTML=d-cd;	
-			calvalarr[d]=''+(d-cd)+'/'+(cm-(-1))+'/'+cy;
+			calvalarr[d]=''+(d-cd)+ccc.delim+(cm-(-1))+ccc.delim+cy;
 		}
 		else {
 			getObj('v'+d).innerHTML='&nbsp;';
@@ -199,11 +274,10 @@ function prepcalendar(hd,cm,cy) {
 	}
 }
 
-prepcalendar('',ccm,ccy);
 //getObj('fc'+cc).style.visibility='hidden';
 
 function caddm() {
-	marr=((ccy%4)==0)?mnl:mnn;
+	marr=( (ccy % 4 == 0) || (ccy % 100 == 0) || (ccy % 400 == 0) )?mnl:mnn;
 	
 	ccm+=1;
 	if (ccm>=12) {
@@ -215,7 +289,7 @@ function caddm() {
 }
 
 function csubm() {
-	marr=((ccy%4)==0)?mnl:mnn;
+	marr=( (ccy % 4 == 0) || (ccy % 100 == 0) || (ccy % 400 == 0) )?mnl:mnn;
 	
 	ccm-=1;
 	if (ccm<0) {
@@ -227,11 +301,13 @@ function csubm() {
 }
 
 function cdayf() {
+if (ccc.past)
+	return;
+
 if ((ccy>sccy)|((ccy==sccy)&&(ccm>=sccm)))
 	return;
 else {
 	ccy=sccy;
 	ccm=sccm;
-	cfd=scfd;
 	}
 }
