+ $this.css('background-color', '#ffffff');
+ set_cell_div($this,'','#ffffff');
+ $this.css('border', '1px solid #D7D7D7'); //watch out in IE8 woes, empty string removes cell borders
+ var rownum = $this.parent().prevAll('tr').length;
+ var colnum = $this.prevAll('td').length;
+ $this = $this.parent().parent().children('tr').eq(rownum+1).children('td').eq(colnum);
+ }
+ }
+
+
+% } else {
+
+ // functions for drag-and-drop rescheduling
+
+ // ticket-dependant test if we can drop here
+ // prevent overlap with other appointments, while allowing appointment to overlap itself
+ function can_drop ($where, ui) {
+ var cells = ui.draggable.data('cell').data('cells');
+ var ticketid = ui.draggable.data('cell').data('ticketid');
+ for (var c=0; c < cells; c++) {
+ if (!$where.is('.ui-droppable')) {
+ return false;
+ }
+ if ($where.data('ticketid')) {
+ if ($where.data('ticketid') != ticketid) {
+ return false;
+ }
+ if ($where.data('offset') == c) { // don't reschedule in the same slot
+ return false;
+ }
+ }
+ var rownum = $where.parent().prevAll('tr').length;
+ var colnum = $where.prevAll('td').length;
+ $where = $where.parent().parent().children('tr').eq(rownum+1).children('td').eq(colnum);
+ }
+ return true;
+ }
+
+ // makes cell droppable (can reschedule here, subject to can_drop)
+ function set_droppable_cell ($cell) {
+ $cell.droppable({
+ over: appointment_drag_over,
+ drop: reschedule_appointment,
+ tolerance: 'pointer'
+ });
+ }
+
+ // makes cell draggable (able to be rescheduled)
+ function set_draggable_cell ($cell) {
+ var $div = $cell.data('div');
+ $div.draggable({
+ containment: '.titlebox-content',
+ revert: true,
+ revertDuration: 0,
+ start: appointment_drag_start,
+ stop: appointment_drag_stop,
+ zIndex: 10,
+ });
+ }
+
+ // gives cell a white (schedulable) appearance, without changing cell data
+ function set_white_cell ($cell) {
+ $cell.css('border', '1px solid #D7D7D7' );
+ $cell.css('background-color', '#FFFFFF');
+ set_cell_div($cell,'','#FFFFFF');
+ }
+
+ // track drag highlighting
+ var drag_hi;
+
+ // clear drag highlighting
+ function clear_drag_hi (cells) {
+ if ( drag_hi ) {
+ for ( var c=0; c < cells; c++) {
+ if (drag_hi.data('isdragging')) {
+ drag_hi.css('border', '1px solid #D7D7D7' );
+ drag_hi.css('background-color', '#FFFFFF' );
+ } else {
+ set_white_cell(drag_hi);
+ }
+ var rownum = drag_hi.parent().prevAll('tr').length;
+ var colnum = drag_hi.prevAll('td').length;
+ drag_hi = drag_hi.parent().parent().children('tr').eq(rownum+1).children('td').eq(colnum);
+ }
+ drag_hi = undefined;
+ }
+ }
+
+ // drag start event
+ function appointment_drag_start(event, ui) {
+ var $this = $(this);
+ // cell that's dragging
+ $this = $this.data('cell');
+ set_cell_div($this,$this.data('label'),$this.data('bgcolor'));
+ $this.data('isdragging',true);
+ var offset = $this.data('offset');
+ var cells = $this.data('cells');
+ // jump to first cell in appointment
+ var rownum = $this.parent().prevAll('tr').length;
+ var colnum = $this.prevAll('td').length;
+ $this = $this.parent().parent().children('tr').eq(rownum-offset).children('td').eq(colnum);
+ // loop through all cells in appointment
+ for ( var c=0; c < cells; c++) {
+ if ($this.data('isdragging')) {
+ $this.css('background-color', '#FFFFFF');
+ } else {
+ set_white_cell($this);
+ }
+ var rownum = $this.parent().prevAll('tr').length;
+ var colnum = $this.prevAll('td').length;
+ $this = $this.parent().parent().children('tr').eq(rownum+1).children('td').eq(colnum);
+ }
+ }