function numDays(date)
{ var year = date.getFullYear();
  switch(date.getMonth())
  { case 1:
      if(year % 4 == 0 && (year % 100 != 0 || year % 400 == 0))
      { return 29;
      } else
        { return 28;
        }
    case 3:
      return 30;
    case 5:
      return 30;
    case 8:
      return 30;
    case 10:
      return 30;
    default:
      return 31;
  }
}

function setMYMenus()
{ var monthoptions = document.getElementById("monthoptions");
  var selectedmonth = document.getElementById("selectedmonth");
  var monthwidth = monthoptions.offsetWidth;
  var months = new Array();
  for(var i=0; i<12; i++)
  { months[i] = document.getElementById(i);
    selectedmonth.innerHTML = months[i].innerHTML;
    monthwidth = Math.max(monthwidth, selectedmonth.offsetWidth);
  }
  monthoptions.style.width = monthwidth+"px";
  setYears();
  var yearoptionstable = "<table border='0px' cellpadding='2px' cellspacing='0px' id='yearoptions' class='optionsMenu'>";
  for(var i=0; i<yearsformenu.length; i++)
  { yearoptionstable += "<tr><td id='"+yearsformenu[i]+"' class='MYNoHighlight'>"+yearsformenu[i]+"</td></tr>";
  }
  yearoptionstable += "</table>";
  document.getElementById("yearoptionscell").innerHTML = yearoptionstable;
  var yearoptions = document.getElementById("yearoptions");
  var selectedyear = document.getElementById("selectedyear");
  var yearwidth = yearoptions.offsetWidth;
  var years = new Array();
  for(var i=0; i<yearsformenu.length; i++)
  { years[i] = document.getElementById(yearsformenu[i]);
    selectedyear.innerHTML = years[i].innerHTML;
    yearwidth = Math.max(yearwidth, selectedyear.offsetWidth);
  }
  yearoptions.style.width = yearwidth+"px";
  selectedmonth.style.width = monthwidth+"px";
  selectedyear.style.width = yearwidth+"px";
  for(var i=0; i<months.length; i++)
  { months[i].onmouseover = new Function("this.className='MYHighlight'");
    months[i].onmouseout = new Function("this.className='MYNoHighlight'");
    months[i].onclick = new Function("var selectedmonth = document.getElementById('selectedmonth'); selectedmonth.innerHTML=this.innerHTML; selectedmonth.value=this.id; document.getElementById('monthoptions').style.visibility='hidden'; this.className='MYNoHighlight'; writeCalendar(document.getElementById('selectedyear').innerHTML,selectedmonth.value);");
  }
  for(var i=0; i<years.length; i++)
  { years[i].onmouseover = new Function("this.className='MYHighlight'");
    years[i].onmouseout = new Function("this.className='MYNoHighlight'");
    years[i].onclick = new Function("var selectedyear = document.getElementById('selectedyear'); selectedyear.innerHTML=this.innerHTML; selectedyear.value=this.id; document.getElementById('yearoptions').style.visibility='hidden'; this.className='MYNoHighlight'; writeCalendar(selectedyear.innerHTML,document.getElementById('selectedmonth').value);");
  }
}

function writeCalendar(y,m)
{ var displaymonth = new Date();
  var today = displaymonth.getFullYear()+"."+(displaymonth.getMonth()+1)+"."+displaymonth.getDate();
  displaymonth.setFullYear(y,m,1);
  var selectedmonth = document.getElementById("selectedmonth");
  selectedmonth.value = m;
  var selectedyear = document.getElementById("selectedyear");
  selectedmonth.innerHTML = document.getElementById(m).innerHTML;
  selectedyear.innerHTML = y;
  var currentday = 1;
  var numdays = numDays(displaymonth);
  var newcaltable = "<table id='calendar' border='0px' cellspacing='1px' cellpadding='3px'><tr><td id='su' class='dayName'>Su</td><td id='mo' class='dayName'>Mo</td><td id='tu' class='dayName'>Tu</td><td id='we' class='dayName'>We</td><td id='th' class='dayName'>Th</td><td id='fr' class='dayName'>Fr</td><td id='sa' class='dayName'>Sa</td></tr><tr>";
//FIRST EMPTY CELLS
  if(displaymonth.getDay() > 0)
  { for(var i=0; i<displaymonth.getDay(); i++)
    { newcaltable += "<td class='calDay'>&nbsp;</td>";
    }
  }
//REST OF FIRST ROW
  for(var i=displaymonth.getDay(); i<7; i++)
  { var eventmonth = displaymonth.getMonth()+1;
    var eventdate = displaymonth.getFullYear()+"."+eventmonth+"."+currentday;
    if(events[eventdate] != null)
    { newcaltable += "<td class='eventDay' onmouseover='this.className=\"eventDayHighlight\"; var eventcell=document.getElementById(\"eventcell\"); eventcell.innerHTML=\"";
      for(var j=0; j<events[eventdate].length-1; j++)
      { newcaltable += events[eventdate][j].replace(/\"/,"\\\"")+"<br><br>";
      }
      newcaltable += events[eventdate][events[eventdate].length-1].replace(/\"/,"\\\"");
      newcaltable +="\"; eventcell.className=\"eventCell\"; window.status=\"http://ivgcf.rso.wisc.edu/events.shtml\";' onmouseout='this.className=\"eventDay\"; document.getElementById(\"eventcell\").className=\"hideEventCell\"; window.status=\"\";' onclick='window.location=\"http://ivgcf.rso.wisc.edu/events.shtml\"'";
    } else
      { newcaltable += "<td class='calDay'";
      }
    if(eventdate == today)
    { newcaltable += " style='text-decoration:underline;'";
    }
    newcaltable += ">"+currentday+"</td>";
    currentday++;
  }
  newcaltable += "</tr>";
//MAIN CALENDAR ROWS
  while(currentday+7 <= numdays)
  { newcaltable += "<tr>";
    for(var i=0; i<7; i++)
    { var eventmonth = displaymonth.getMonth()+1;
      var eventdate = displaymonth.getFullYear()+"."+eventmonth+"."+currentday;
      if(events[eventdate] != null)
      { newcaltable += "<td class='eventDay' onmouseover='this.className=\"eventDayHighlight\"; var eventcell=document.getElementById(\"eventcell\"); eventcell.innerHTML=\"";
        for(var j=0; j<events[eventdate].length-1; j++)
        { newcaltable += events[eventdate][j].replace(/\"/,"\\\"")+"<br><br>";
        }
        newcaltable += events[eventdate][events[eventdate].length-1].replace(/\"/,"\\\"");
        newcaltable +="\"; eventcell.className=\"eventCell\"; window.status=\"http://ivgcf.rso.wisc.edu/events.shtml\";' onmouseout='this.className=\"eventDay\"; document.getElementById(\"eventcell\").className=\"hideEventCell\"; window.status=\"\";' onclick='window.location=\"http://ivgcf.rso.wisc.edu/events.shtml\"'";
      } else
        { newcaltable += "<td class='calDay'";
        }
      if(eventdate == today)
      { newcaltable += " style='text-decoration:underline;'";
      }
      newcaltable += ">"+currentday+"</td>";
      currentday++;
    }
    newcaltable += "</tr>";
  }
//LAST ROW
  displaymonth.setDate(numdays);
  newcaltable += "<tr>";
  for(var i=0; i<=displaymonth.getDay(); i++)
  { var eventmonth = displaymonth.getMonth()+1;
    var eventdate = displaymonth.getFullYear()+"."+eventmonth+"."+currentday;
    if(events[eventdate] != null)
    { newcaltable += "<td class='eventDay' onmouseover='this.className=\"eventDayHighlight\"; var eventcell=document.getElementById(\"eventcell\"); eventcell.innerHTML=\"";
      for(var j=0; j<events[eventdate].length-1; j++)
      { newcaltable += events[eventdate][j].replace(/\"/,"\\\"")+"<br><br>";
      }
      newcaltable += events[eventdate][events[eventdate].length-1].replace(/\"/,"\\\"");
      newcaltable +="\"; eventcell.className=\"eventCell\"; window.status=\"http://ivgcf.rso.wisc.edu/events.shtml\";' onmouseout='this.className=\"eventDay\"; document.getElementById(\"eventcell\").className=\"hideEventCell\"; window.status=\"\";' onclick='window.location=\"http://ivgcf.rso.wisc.edu/events.shtml\"'";
    } else
      { newcaltable += "<td class='calDay'";
      }
    if(eventdate == today)
    { newcaltable += " style='text-decoration:underline;'";
    }
    newcaltable += ">"+currentday+"</td>";
    currentday++;
  }
  if(displaymonth.getDay() % 7 < 6)
  { for(var i = displaymonth.getDay()+1 % 7; i<7; i++)
    { newcaltable += "<td class='calDay'>&nbsp;</td>";
    }
  }
//WEEKLY EVENTS ROW
  newcaltable += "</tr><tr><td class='weekly' style='cursor:pointer;' onmouseover='this.className=\"weeklyHighlight\"; window.status=\"http://ivgcf.rso.wisc.edu/events.shtml#weekly\"' onmouseout='this.className=\"weekly\"; window.status=\"\"' onclick='Do(\"http://ivgcf.rso.wisc.edu/events.shtml#weekly\")' colspan='7'>Weekly Events</td></tr><tr><td class='weekly' style='cursor:pointer;' onmouseover='this.className=\"weeklyHighlight\"; window.status=\"http://ivgcf.rso.wisc.edu/sgroup.shtml#sgsched\"' onmouseout='this.className=\"weekly\"; window.status=\"\"' onclick='Do(\"http://ivgcf.rso.wisc.edu/sgroup.shtml#sgsched\")' colspan='7'>Small Group Schedule</td></tr></table>";
  var calcell = document.getElementById("calcell");
  calcell.innerHTML = newcaltable;
  var daynames = new Array(document.getElementById("su"), document.getElementById("mo"), document.getElementById("tu"), document.getElementById("we"), document.getElementById("th"), document.getElementById("fr"),document.getElementById("sa"));
  var maxdaywidth = maxDayWidth(daynames);
  document.getElementById("calendar").style.width = 7*(maxdaywidth+1)+1+"px";
  for(var i=0; i<daynames.length; i++)
  { daynames[i].style.width = maxdaywidth+"px";
  }
}

function adjMonth(plusminus)
{ var selectedmonth = document.getElementById("selectedmonth");
  var selectedyear = document.getElementById("selectedyear");
  var newmonth = (parseInt(selectedmonth.value) + 12 + plusminus) % 12;
  selectedmonth.innerHTML = document.getElementById(newmonth).innerHTML;
  selectedmonth.value = newmonth;
  if((newmonth==0 && plusminus==1) || (newmonth==11 && plusminus==-1))
  { selectedyear.innerHTML = parseInt(selectedyear.innerHTML) + plusminus;
  }
  writeCalendar(parseInt(selectedyear.innerHTML),parseInt(selectedmonth.value));
}

function maxDayWidth(arrayobj)
{ var tempmax = 0;
  for(var i=0; i<arrayobj.length; i++)
  { tempmax = Math.max(tempmax, arrayobj[i].offsetWidth);
  }
  return tempmax;
}

function setYears()
{ var today = new Date();
  var currentyear = today.getFullYear();
  if(yearswithevents[0] == "0")
  { yearsformenu[0] = currentyear;
  }
  else if(currentyear < yearswithevents[0])
  { var i = 0;
    do
    { yearsformenu[i++] = "\""+(currentyear++)+"\"";
    } while(currentyear <= yearswithevents[yearswithevents.length-1])
  }
  else
  { yearsformenu = yearswithevents; 
    if(currentyear > yearsformenu[yearsformenu.length-1])
    { var i = yearsformenu.length;
      var tempyear = yearsformenu[i-1];
      do
      { yearsformenu[i++] = "\""+(tempyear++)+"\"";
      } while(tempyear <= currentyear)
    }
  }
}