<!-- hide this script tag's contents from old browsers

function checkNumber(input, min, max, msg)
{
    msg = msg + " field has invalid data: " + input.value;

    var str = input.value;
    for (var i = 0; i < str.length; i++) {
        var ch = str.substring(i, i + 1)
        if ((ch < "0" || "9" < ch) && ch != '.') {
            alert(msg);
	    return false;
        }
    }
    var num = 0 + str;
    if (num < min || max < num) {
        alert(msg + " not in range [" + min + ".." + max + "]");
        return false;
    }
    input.value = str;
    return true;
}

function computeForm(form)
{
//   var ml={31,28,31,30,31,30,31,31,30,31,30,31};

   MNames=new Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep",
      "Oct","Nov","Dec");

   if( (form.yd.value == null || form.yd.value.length == 0) ||
//       form.md.selectedIndex== null ||
       (form.dd.value == null || form.dd.value.length == 0) ||
       (form.ya.value == null || form.ya.value.length == 0) ||
       (form.ma.value == null || form.ma.value.length == 0) ||
       (form.da.value == null || form.da.value.length == 0))
   {
      return;
   }

   form.db.value = db;
   form.mb.value = mb;
   form.yb.value = yb;

   if( !checkNumber(form.dd,1, 31, "Day of death") ||
       !checkNumber(form.da,0, 31, "Days aged") ||
       !checkNumber(form.ma,0, 12, "Months aged"))
   {
      return;
   }

   var yd = form.yd.value;
   var md = form.md.options[form.md.selectedIndex].value;
   // Month length 0->use calendar length
   var mLength =parseInt(
      form.monthLength.options[form.monthLength.selectedIndex].value);
   var mon=0; // Will hold month index
   // 0 if Gregorian, 1 is Julian
   var isJulian =
      form.isJulian.options[form.isJulian.selectedIndex].value;
   var mb=0;
   var yb=0;
   var db = form.dd.value-form.da.value;

   if(db<1)
   {
      md--;
      if(md<1)
      {
	 yd--;
	 // Determine no. of months in year
	 if(mLength)
	    {md=md+parseInt(365/mLength);}
	 else
	    {md=md+12;}
      }
      if(mLength==0) // Use real month length if no fixed
      {              // length is indicated
	 mon=md;
	 if(mon==1 || mon==3 || mon==5 || mon==7 || mon==8 || mon==10 || mon==12)
	    {ml = 31;}
	 else {
	    if(mon==2) {ml = 28;}
	    else
	       {ml = 30;}
	 }
	 db=db+ml+(((mon==2)&&(!(yd%4) &&
	    (isJulian==1 || yd%100 || !(yd%400))))?1:0);
      }
      else
	 {db+=mLength;} // Use fixed month length
   }

   mb = md - form.ma.value;

   if(mb<1)
   {
      yd--;
      if(mLength!=0)
	 {mb=mb+parseInt(365/mLength);}
      else
	 {mb=mb+12;}
   }

   yb = yd - form.ya.value;

   form.db.value = db;

   form.mb.value = MNames[mb-1];
   if(form.mb.value=="null") // Handle JS versions without Array
      {form.mb.value = mb;}  // capability by just giving the mo. no.

   form.yb.value = yb;
}


<!-- done hiding from old browsers -->