public static function repeats($meta, $from, $to, $start, $end, $id, $name, $elements)
 {
     $settings = unserialize(get_option("chronosly-settings"));
     if (isset($meta["ev-repeat"][0]) and $meta["ev-repeat"][0] != "" and isset($meta["ev-repeat-every"][0]) and $meta["ev-repeat-every"][0] > 0) {
         $start_min = strtotime($from);
         //start building array
         $end_top = strtotime($to);
         //limit of repeats per year
         if (isset($meta["ev-repeat-option"][0]) and $meta["ev-repeat-option"][0] == "until" and isset($meta["ev-until"][0]) and strtotime($meta["ev-until"][0]) < $end_top) {
             $end_top = strtotime($meta["ev-until"][0]);
         }
         if ($start_min > $end_top) {
             return $elements;
         }
         //el ev until elimina los eventos que no llega ni al inicio
         $count = -1;
         //for count repetitions
         if (isset($meta["ev-repeat-option"][0]) and $meta["ev-repeat-option"][0] == "count" and isset($meta["ev-end_count"][0]) and $meta["ev-end_count"][0] > 0) {
             $count = $meta["ev-end_count"][0];
         }
         $distance = $meta["ev-repeat-every"][0];
         //distance between repeats
         $event_days = $end - $start;
         // event days duration
         switch ($meta["ev-repeat"][0]) {
             case "day":
                 $start = $end;
                 while ($start < $end_top and $count) {
                     //mientras no estemos en el tope superior
                     $start += $distance * 60 * 60 * 24;
                     //añadimos la distancia de dias
                     $end = $start + $event_days;
                     //recalculamos el final
                     --$count;
                     if ($start >= $start_min and $start <= $end_top) {
                         $pos = Post_Type_Chronosly::get_event_position($name, $meta, $id, $start);
                         if (Post_Type_Chronosly::filter($id)) {
                             $elements[$pos] = array("id" => $id, "start" => $start, "end" => $end);
                         }
                     }
                     $start = $end;
                     //restamos un dia porque si no el ultimo dia no se cuenta al salir del bucle
                 }
                 break;
             case "week":
                 $start = $end;
                 while ($start < $end_top and $count) {
                     //mientras no estemos en el tope superior
                     $start += $distance * 7 * 60 * 60 * 24 - $event_days;
                     //añadimos la distancia de semanas, restando los dias que dura el evento...si el evento dura mas de una semana es un total absurdo usarlo
                     $end = $start + $event_days;
                     //recalculamos el final
                     --$count;
                     if ($start >= $start_min and $start <= $end_top) {
                         $pos = Post_Type_Chronosly::get_event_position($name, $meta, $id, $start);
                         if (Post_Type_Chronosly::filter($id)) {
                             $elements[$pos] = array("id" => $id, "start" => $start, "end" => $end);
                         }
                     }
                     $start = $end;
                     //restamos un dia porque si no el ultimo dia no se cuenta al salir del bucle
                 }
                 break;
             case "month":
                 $start = $end;
                 while ($start < $end_top and $count) {
                     //mientras no estemos en el tope superior
                     $start = strtotime("+{$distance} month", $start) - $event_days;
                     //añadimos la distancia de semanas, restando los dias que dura el evento...si el evento dura mas de una semana es un total absurdo usarlo
                     $end = $start + $event_days;
                     //recalculamos el final
                     --$count;
                     //echo date('Y-m-d',$start)." ".date('Y-m-d',$end)."<br/>";
                     if ($start >= $start_min and $start <= $end_top) {
                         $pos = Post_Type_Chronosly::get_event_position($name, $meta, $id, $start);
                         if (Post_Type_Chronosly::filter($id)) {
                             $elements[$pos] = array("id" => $id, "start" => $start, "end" => $end);
                         }
                     }
                     $start = $end;
                     //restamos un dia porque si no el ultimo dia no se cuenta al salir del bucle
                 }
                 break;
             case "year":
                 $start = $end;
                 while ($start < $end_top and $count) {
                     //mientras no estemos en el tope superior
                     $start = strtotime("+{$distance} year", $start) - $event_days;
                     //añadimos la distancia de semanas, restando los dias que dura el evento...si el evento dura mas de una semana es un total absurdo usarlo
                     $end = $start + $event_days;
                     //recalculamos el final
                     --$count;
                     if ($start >= $start_min and $start <= $end_top) {
                         $pos = Post_Type_Chronosly::get_event_position($name, $meta, $id, $start);
                         if (Post_Type_Chronosly::filter($id)) {
                             $elements[$pos] = array("id" => $id, "start" => $start, "end" => $end);
                         }
                     }
                     $start = $end;
                     //restamos un dia porque si no el ultimo dia no se cuenta al salir del bucle
                 }
                 break;
         }
     }
     return $elements;
 }
 public static function get_array_days_by_repeated($year, $month, $week, $query, $elements)
 {
     $settings = unserialize(get_option("chronosly-settings"));
     if (!$month and !$week) {
         while ($query->have_posts()) {
             $query->the_post();
             if (is_array($elements["ids"]) and in_array(get_the_ID(), $elements["ids"])) {
                 continue;
             }
             //if the day is already done.
             $meta = get_post_meta(get_the_ID());
             if (isset($meta["ev-from"][0])) {
                 //Miramos cuando empieza y acaba y generamos sus repeticiones para ver si hay que mostrarlo
                 $start = strtotime($meta["ev-from"][0]);
                 $end = strtotime($meta["ev-to"][0]);
                 if ($settings["chronosly_week_start"] == 1) {
                     //$start -= (60*60*24);
                     //$end -= (60*60*24);
                 }
                 //do repeats
                 if (Post_Type_Chronosly::filter(get_the_ID())) {
                     $elements = Post_Type_Chronosly_Calendar::repeats($meta, $year, $month, $week, $start, $end, get_the_ID(), $elements, 1);
                 }
             }
         }
     } else {
         if ($week) {
             while ($query->have_posts()) {
                 $query->the_post();
                 if (is_array($elements["ids"]) and in_array(get_the_ID(), $elements["ids"])) {
                     continue;
                 }
                 //if the day is already done.
                 $meta = get_post_meta(get_the_ID());
                 if (isset($meta["ev-from"][0])) {
                     $start = strtotime($meta["ev-from"][0]);
                     $end = strtotime($meta["ev-to"][0]);
                     if ($settings["chronosly_week_start"] == 1) {
                         //  $start -= (60*60*24);
                         // $end -= (60*60*24);
                     }
                     //do repeats
                     if (Post_Type_Chronosly::filter(get_the_ID())) {
                         $elements = Post_Type_Chronosly_Calendar::repeats($meta, $year, $month, $week, $start, $end, get_the_ID(), $elements, 1);
                     }
                 }
             }
         } else {
             if ($month) {
                 while ($query->have_posts()) {
                     $query->the_post();
                     if (is_array($elements["ids"]) and in_array(get_the_ID(), $elements["ids"])) {
                         continue;
                     }
                     //if the day is already done.
                     $meta = get_post_meta(get_the_ID());
                     if (isset($meta["ev-from"][0])) {
                         $start = strtotime($meta["ev-from"][0]);
                         $end = strtotime($meta["ev-to"][0]);
                         if ($settings["chronosly_week_start"] == 1) {
                             //$start -= (60*60*24);
                             //$end -= (60*60*24);
                         }
                         if (Post_Type_Chronosly::filter(get_the_ID())) {
                             $elements = Post_Type_Chronosly_Calendar::repeats($meta, $year, $month, $week, $start, $end, get_the_ID(), $elements, 1);
                         }
                     }
                 }
             }
         }
     }
     return $elements;
 }