This was a simple but effective solution, using cck and views:
Create a 'header pics' content type. Add fields for images, url, and 'show when' select list.
Images I used image upload with cropping module, constrained to 400px wide by 100px high to fit in header block.
'show when' select list I populated with summer, winter, fall, Halloween, Christmas, Veteran's Day, etc.
url is optional.
In view, filter by type = header_pic and show_when = whatever you want displayed now
Need the Customfield PHP module addon for views, and add:
<?php
$temp = node_load($data->nid);
if ($data->node_data_field_header_pic_url_field_header_pic_url_url) {
echo '<a href="' . $data->node_data_field_header_pic_url_field_header_pic_url_url
. '" title="' . $data->node_data_field_header_pic_url_field_header_pic_url_title
.'"><img src="/' . $temp->field_header_image[0]['filepath'] . '" /></a>';
}
else {
echo '<img src="/' . $temp->field_header_image[0]['filepath'] . '" />';
}
?>
Where the fields I've noted correlate to your actual fields.
What this does is wrap the image with that url field only if the url field is populated.
Then set the view in a block display, and set that block in the header region. Depending on theme, you may need to hack the page.tpl.php a little to move that header block region into the real header area (but once you get in there it's easy to see what you need to do).
You can even make a page view of this same view to display all of your great header images at once on a page (/headerpics), with an edit link by each for easy manageability.
This will work if you just want seasonal images.