We've done this before with using jQuery. Below is some sample code to add to your calendar view page:
_spBodyOnLoadFunctionNames.push("setupCalendarClick");
function setupCalendarClick() {
copyAllDates();
applyClickActions();
}
function copyAllDates() {
$(".ms-acal-summary-dayrow").each( function(index, item){
copyDate($(item).children("td"), $($(".ms-acal-summary-itemrow")[index]).children("td"));
});
}
function copyDate( headers, cells ) {
for ( var i = 0; i < headers.length; i++ ) {
$(cells[i]).attr("date", $(headers[i]).attr("date"));
}
}
function applyClickActions() {
$(".ms-acal-summary-itemrow").children("td").off('click');
$(".ms-acal-summary-itemrow").children("td").click( function () {
var date = $(this).attr("date");
var url = "/site/Lists/Calendar/NewForm.aspx?date=" + escape(date);
basecampCalendar_OpenDialog(url);
});
}
function basecampCalendar_OpenDialog(url) {
var options = SP.UI.$create_DialogOptions();
options.url = url;
options.dialogReturnValueCallback = Function.createDelegate(null, basecampCalendar_CloseCallback);
SP.UI.ModalDialog.showModalDialog(options);
}
// Dialog callback
function basecampCalendar_CloseCallback(result, target) {
if (result === SP.UI.DialogResult.OK) {
SP.UI.ApplicationPages.CalendarInstanceRepository.lookupInstance("WPQ2").refreshItems();
}
if (result === SP.UI.DialogResult.cancel) {
}
}
And here is some code to add to your newform.aspx for the calendar:
ExecuteOrDelayUntilScriptLoaded(fillDefaultValues, "sp.js");
function fillDefaultValues() {
var date = GetUrlKeyValue("date");
setLookupFromFieldName("Start Time", date);
setLookupFromFieldName("End Time", date);
}
function setLookupFromFieldName(fieldName, value) {
if (value == undefined) return;
var theInput = findFieldElement( fieldName, "DateTimeFieldDate" );
theInput.value = unescape(value);
}
function findFieldElement( fieldName, fieldType, tagName ) {
if ( undefined === fieldType ) fieldType = "TextField";
if ( undefined === tagName ) tagName = "input";
var element = getTagFromIdentifierAndTitle(tagName, fieldType, fieldName);
if ( element == null ) alert("could not find the correct input field: " + fieldName + " - " + fieldType);
return element;
}
function getTagFromIdentifierAndTitle(tagName, identifier, title) {
var len = identifier.length;
var tags = document.getElementsByTagName(tagName);
for (var i=0; i < tags.length; i++) {
var tempString = tags[i].id;
if (tags[i].title == title && (identifier == "" || tempString.indexOf(identifier) == tempString.length - len)) {
return tags[i];
}
}
return null;
}
You will probably need to change some of this to get it to work for your calendar. Right now our code only did single click, so you'll have to change it for doubleclick.