Reduce code handling start and end datepickers
From a once over;


This code does not do what the tin says:

// If selected start date is later than currently selected
// end date, set end date to start date + 1 day
var date = $('#startDate').datepicker('getDate');
if (date) { date.setDate(date.getDate() + 1); }


what this actually does is always set the first possible date to startdate + 1
Not sure about this :)

&lt;option value="2"&gt;Any Future Date&lt;/option&gt;
&lt;option value="3"&gt;Any Future Date&lt;/option&gt;

The continued checks for input.id are a good indication that perhaps you need 2 distinct functions
The id's 1 and 2 are rather meaningless, they could be meaningful strings, or even better they could be function names that need to be executed.
There a number of non-sensical assignments like here:

dateMax = null;
if ($('#startDate').datepicker('getDate') != null) { dateMax = null; }


if you set dateMax already to null, then why would you set dateMax again to null?
Your code dies when the user tries to select an end date without first selecting first a starting date in 30 days mode with Cannot read property 'getFullYear' of null because you are indeed trying to calculate on an empty field..
I am not sure why in 30 day mode the start date is impacted by the end date, especially since clearing out the end date opens up the calendar again.


All in all, I would go with something like this:

$('#startDate, #endDate').datepicker({
    beforeShow: setDateRange,
    dateFormat: "mm/dd/yy",
    firstDay: 1,
    changeFirstDay: false,
    onChange: function () {
        $(this).valid();
    }
});

var dateLogic = {

    addDays: function addDays(initialDate, dayCount) {
        var newDate = new Date(initialDate);
        newDate.setDate(newDate.getDate() + dayCount);
        return newDate;
    },
    openWide: {
        minDate: null,
        maxDate: null
    },
    futureDays: {
        startDate: function startDateFutureDays(currentStart, currentEnd) {
            return !currentEnd ? dateLogic.openWide : {
                minDate: null,
                maxDate: dateLogic.addDays(currentEnd, -1)
            }
        },
        endDate: function endDateFutureDays(currentStart) {
            return {
                minDate: currentStart,
                maxDate: null
            }
        }
    },
    thirtyDays: {
        startDate: function startDateThirtyDays(currentStart, currentEnd) {
            return !currentEnd ? dateLogic.openWide : {
                maxDate: currentEnd,
                minDate: dateLogic.addDays(currentEnd, -30)
            };
        },
        endDate: function endDateThirtyDays(currentStart) {
            return !currentStart ? dateLogic.openWide : {
                minDate: currentStart,
                maxDate: dateLogic.addDays(currentStart, 30)
            }
        }
    }
};

function setDateRange(input) {

    var opt = $('#select1'),
        startDate = $('#startDate').datepicker('getDate'),
        endDate = $('#endDate').datepicker('getDate');

    return dateLogic[opt.val()][input.id](startDate, endDate);
}

$('#select1').change(function () {
    $('#startDate, #endDate').val('');
    $('#startDate, #endDate').removeAttr('disabled');
});


You can play with this on http://jsfiddle.net/konijn_gmail_com/rc0kr718/