/**
  * rearrange the current list of events in a optimized way
  *
  * @param bool $new_mode use the new mode
  *
  * @return null
  */
 function rearrange($new_mode = false)
 {
     $events = array();
     //days
     foreach ($this->events_sorted as $_events_by_day) {
         $intervals = array();
         // tab
         foreach ($_events_by_day as $_events_by_hour) {
             foreach ($_events_by_hour as $_event) {
                 //used as background, skip the rearrange
                 if ($_event->below) {
                     $_event->width = 0.9;
                     $_event->offset = 0.1;
                     continue;
                 }
                 $intervals[$_event->internal_id] = array("lower" => $_event->start, "upper" => $_event->end);
                 $events[$_event->internal_id] = $_event;
             }
         }
         if ($new_mode) {
             $lines = CMbRange::rearrange2($intervals);
             foreach ($lines as $guid => $_line) {
                 /** @var CPlanningEvent $event */
                 $event = $events[$guid];
                 $event->offset = $_line["start"] / $_line["total"] + 0.1;
                 $event->width = ($_line["end"] - $_line["start"]) / $_line["total"] - 0.1;
             }
         } else {
             $lines = CMbRange::rearrange($intervals);
             $lines_count = count($lines);
             foreach ($lines as $_line_number => $_line) {
                 foreach ($_line as $_event_id) {
                     $event = $events[$_event_id];
                     //get the event
                     $event->height = $_line_number;
                     //global = first line
                     $event->width = 1 / $lines_count;
                     $event->offset = $_line_number / $lines_count;
                     if ($this->allow_superposition) {
                         $event->offset += 0.05;
                     }
                     if ($lines_count == 1 && $this->allow_superposition) {
                         $event->width = $event->width - 0.1;
                     }
                     //the line is not the first
                     if ($_line_number >= 1 && $this->allow_superposition) {
                         $event->width = 1 / $lines_count + 0.05;
                         $event->offset = $_line_number / $lines_count - 0.1;
                     }
                 }
             }
         }
     }
 }