var evs = scheduler.getEvents(new Date(), new Date(9999,1,1); //evs - list of all oncoming events evs.sort(function(a,b){ return (a.start_date > b.start_date ? 1 : -1); }); //evs[0] - nearest oncoming event
Add the next code before scheduler initialization
var old = scheduler._on_mouse_up; scheduler._on_mouse_up = function(){ if (this._drag_id){ var parts = this._drag_id.toString().split("#"); if (parts.length > 1) { var dev = this.getEvent(this._drag_id); this._drag_id= parts[0]; var ev = this.getEvent(parts[0]); ev._end_date = ev.end_date; ev.start_date = dev.start_date; ev.end_date = dev.end_date; } } return old.apply(this,arguments); }
Relates samples : samples/shared_events
While there is no such concept as different calendars, you can use multiple data feeds in the same scheduler to mimic such behavior.
//load two data feeds scheduler.load("events_shared.php?user=1"); scheduler.load("events_shared.php?user=2"); scheduler.config.readonly = true;
and on server side
$scheduler->render_sql("select * from events_shared where event_type=1 AND userId = ".$user_id,"event_id","start_date,end_date,text,event_type,userId");
With such approach it possible to load and show data from multiple sources. userId in above code used just for sample purpose - it may be any different set of rules in your case.
The same code can be used in more complex scenario - see all, edit only own events
//enable saving for first data feed var dp = new dataProcessor("events.php?user=1"); dp.init(scheduler); //allow edit operations only for own events function allow_own(id){ var ev = this.getEvent(id); return ev.userId == 1; } scheduler.attachEvent("onClick",allow_own); scheduler.attachEvent("onDblClick",allow_own); //default properties of new event scheduler.attachEvent("onEventCreated",function(id){ var ev = this.getEvent(id); ev.userId = 1; //just for rendering on client, will not affect server data });