Alot of people including myself have asked on the forums about an events calendar. I eventually built one myself. You can get it
here. The zip has binary and source.
How does it work?
The basic calendar is a control that I found on code project written by
Mike Ellison you can find it here. Sample 3 of the calendar has example where it binds to datasource that is populated by XML. That give me the idea
to pull umbraco events node xml and feed it into the calendar via the xmlreader. In the source if you look at the function GetEventData
you can see how thats done. The eventsStartNode is parameter passed into the control ie parent node where all events live.
In the transfromXML function using the events.xslt and in the GetEventData and using the events.xsd the Umbraco xml
is massaged into format that can then be pushed into dataset.
Initally I was doing simple caching but then decided to do some overkill with Microsoft application blocks caching because I had not
used the caching block before thought it would be good learning experience. The control itself is templated you can see this in the
eventsCalendar.ascx so you can make it look nice. On a page using the calendar if you pass into it querystring parameters debug=1 so you can see the xml before and after
useful for debugging. Also Refresh=1 and it will clear the cache however first load will be slow.
See below for screen shot of the calendar in action:

How to Install.
Copy the contents of the calender/bin dir to the bin dir of your Umbraco install. Copy the /calendar/eventscalendar directory to your usercontrols directory.
In your web.config you need to add the following extra entries to get the caching to work :
Copy the cachingConfiguration.xml file into the root of your website.
Create macro call it what you like point it to the eventscalendar.ascx make sure you update properties. EventsStartNode type content picker and ResourcePath type text this value will be /usercontrols/eventscalendar/ basically tells the control where to look for xsl and xsd.
This bit is very important!! You will need to modify the events.xslt to match the parameters of your events document type.
In the xslt you will have to change this so that your event items are picked up.
also ensure that all your field names are updated in the xsl. One key point in the xsl is the template processSpanNodes. Basically this is a hack
to get Mike's calendar to have start and end dates for events it assumes your events have a start and end date.
Apologies if instructions are a bit naff post a comment if any issues sugggestions etc.