Ok, first of all, have a look here: http://www.php.net/manual/en/function.date.php
To make a full year calendar, u can fetch the number of days with date('t',strtotime('2003-05-01'))
(2003-05-01 being an example, u have to loop through 12 months of the year you want and get the number of days for each)
As you loop throught the months store all those days in a multilevel array, so u have a full calendar, with all days free.
Now fetch your booked dates from your database, and with every new record, break it up in day, month, and year.
Now you can use this information to mark the given date in you array as booked.
When that's done you can output the array in any way you see fit.
I'd advise limiting the thing to one month per page. A full year calendar is a monstrous load on the both server and client.
I hope that helps.