$(document).ready(function() { var $calendar = $('#calendar'); var id = 10; if($calendar.weekCalendar !== undefined) { $calendar.weekCalendar({ displayOddEven:false, timeslotsPerHour : 4, allowCalEventOverlap : true, overlapEventsSeparate: true, firstDayOfWeek : 1, businessHours :{start: 8, end: 18, limitDisplay: false }, daysToShow : 8, title: function(daysToShow) { return daysToShow == 1 ? '%date%' : '%start% - %end%'; }, height : function($calendar) { return $(window).height() - $("h1").outerHeight() - 1; }, eventRender : function(calEvent, $event) { if (calEvent.end.getTime() < new Date().getTime()) { $event.css("backgroundColor", "#aaa"); $event.find(".wc-time").css({ "backgroundColor" : "#999", "border" : "1px solid #888" }); } }, draggable : function(calEvent, $event) { return calEvent.readOnly != true; }, resizable : function(calEvent, $event) { return calEvent.readOnly != false; }, eventNew : function(calEvent, $event) { var $dialogContent = $("#event_edit_container"); resetForm($dialogContent); var startField = $dialogContent.find("select[name='start']").val(calEvent.start); var endField = $dialogContent.find("select[name='end']").val(calEvent.end); var titleField = $dialogContent.find("input[name='title']"); var bodyField = $dialogContent.find("textarea[name='body']"); var publicField = $dialogContent.find("input[name='public']"); $dialogContent.dialog({ modal: true, title: "Neuer Termin", close: function() { $dialogContent.dialog("destroy"); $dialogContent.hide(); $('#calendar').weekCalendar("removeUnsavedEvents"); }, buttons: { speichern : function() { id++; calEvent.id = id; calEvent.start = new Date(startField.val()); calEvent.end = new Date(endField.val()); calEvent.title = titleField.val(); calEvent.body = bodyField.val(); if(publicField.prop("checked")) calEvent.publicEvent='1'; else calEvent.publicEvent='0'; publicField.prop("checked", false); $calendar.weekCalendar("removeUnsavedEvents"); $calendar.weekCalendar("updateEvent", calEvent); $dialogContent.dialog("close"); $calendar.weekCalendar("refresh"); }, abbrechen : function() { $dialogContent.dialog("close"); } } }).show(); $dialogContent.find(".date_holder").text($calendar.weekCalendar("formatDate", calEvent.start)); setupStartAndEndTimeFields(startField, endField, calEvent, $calendar.weekCalendar("getTimeslotTimes", calEvent.start)); }, eventDrop : function(calEvent, $event) { $calendar.weekCalendar("updateEvent", calEvent); $calendar.weekCalendar("refresh"); }, eventResize : function(calEvent, $event) { $calendar.weekCalendar("updateEvent", calEvent); $calendar.weekCalendar("refresh"); }, eventClick : function(calEvent, $event) { if (calEvent.readOnly) { return; } var $dialogContent = $("#event_edit_container"); resetForm($dialogContent); var startField = $dialogContent.find("select[name='start']").val(calEvent.start); var endField = $dialogContent.find("select[name='end']").val(calEvent.end); var titleField = $dialogContent.find("input[name='title']").val(calEvent.title); var bodyField = $dialogContent.find("textarea[name='body']").val(calEvent.body); if(calEvent.publicEvent=='1') publicChecked = true; else publicChecked = false; var publicField = $dialogContent.find("input[name='public']").prop('checked', publicChecked); $dialogContent.dialog({ modal: true, title: "Edit - " + calEvent.title, close: function() { $dialogContent.dialog("destroy"); $dialogContent.hide(); $('#calendar').weekCalendar("removeUnsavedEvents"); }, buttons: { save : function() { calEvent.start = new Date(startField.val()); calEvent.end = new Date(endField.val()); calEvent.title = titleField.val(); calEvent.body = bodyField.val(); if(publicField.attr("checked")) calEvent.publicEvent='1'; else calEvent.publicEvent='0'; $calendar.weekCalendar("updateEvent", calEvent); $dialogContent.dialog("close"); $calendar.weekCalendar("refresh"); }, "delete" : function() { $calendar.weekCalendar("removeEvent", calEvent.id); $dialogContent.dialog("close"); $calendar.weekCalendar("refresh"); }, cancel : function() { $dialogContent.dialog("close"); } } }).show(); var startField = $dialogContent.find("select[name='start']").val(calEvent.start); var endField = $dialogContent.find("select[name='end']").val(calEvent.end); $dialogContent.find(".date_holder").text($calendar.weekCalendar("formatDate", calEvent.start)); setupStartAndEndTimeFields(startField, endField, calEvent, $calendar.weekCalendar("getTimeslotTimes", calEvent.start)); $(window).resize().resize(); //fixes a bug in modal overlay size ?? }, eventMouseover : function(calEvent, $event) { }, eventMouseout : function(calEvent, $event) { }, noEvents : function() { }, data : "./index.php?module=kalender&action=data" }); } function resetForm($dialogContent) { $dialogContent.find("input").val(""); $dialogContent.find("textarea").val(""); } /* * Sets up the start and end time fields in the calendar event * form for editing based on the calendar event being edited */ function setupStartAndEndTimeFields($startTimeField, $endTimeField, calEvent, timeslotTimes) { $startTimeField.empty(); $endTimeField.empty(); for (var i = 0; i < timeslotTimes.length; i++) { var startTime = timeslotTimes[i].start; var endTime = timeslotTimes[i].end; var startSelected = ""; if (startTime.getTime() === calEvent.start.getTime()) { startSelected = "selected=\"selected\""; } var endSelected = ""; if (endTime.getTime() === calEvent.end.getTime()) { endSelected = "selected=\"selected\""; } $startTimeField.append(""); $endTimeField.append(""); $timestampsOfOptions.start[timeslotTimes[i].startFormatted] = startTime.getTime(); $timestampsOfOptions.end[timeslotTimes[i].endFormatted] = endTime.getTime(); } $endTimeOptions = $endTimeField.find("option"); $startTimeField.trigger("change"); } var $endTimeField = $("select[name='end']"); var $endTimeOptions = $endTimeField.find("option"); var $timestampsOfOptions = {start:[],end:[]}; //reduces the end time options to be only after the start time options. $("select[name='start']").change(function() { var startTime = $timestampsOfOptions.start[$(this).find(":selected").text()]; var currentEndTime = $endTimeField.find("option:selected").val(); $endTimeField.html( $endTimeOptions.filter(function() { return startTime < $timestampsOfOptions.end[$(this).text()]; }) ); var endTimeSelected = false; $endTimeField.find("option").each(function() { if ($(this).val() === currentEndTime) { $(this).prop("selected", "selected"); endTimeSelected = true; return false; } }); if (!endTimeSelected) { //automatically select an end date 2 slots away. $endTimeField.find("option:eq(1)").prop("selected", "selected"); } }); var $about = $("#about"); $("#about_button").click(function() { $about.dialog({ title: "About this calendar demo", width: 600, close: function() { $about.dialog("destroy"); $about.hide(); }, buttons: { close : function() { $about.dialog("close"); } } }).show(); }); });