function crea_quadro_disp($id_data_inizio_tab_disp, $num_colonne_tab_disp, $mostra_quadro_disp, $mostra_num_liberi, $app_consentito, $app_consentito_sett, $app_regola2_orig, $tipo_periodi, $numero_tariffe, $nome_tariffa, $dati_app, $prenota_in_app_sett, $app_orig_prenota_id, $tableperiodi, $allinea_disp = "", $dati_tariffe = "")
{
    global $c_sfondo_tab_disp, $c_inisett_tab_disp, $c_libero_tab_disp, $c_occupato_tab_disp, $aper_font_tab_disp, $chiu_font_tab_disp, $fr_persone, $fr_persona, $nome_mese, $colonna_destra_tab_disp, $tablepersonalizza, $id_utente, $anno;
    if ($tipo_periodi == "s") {
        $colspan = 14;
    } else {
        $colspan = 2;
    }
    $num_raggr = 0;
    unset($nome_raggr);
    unset($app_ric_raggr);
    unset($tipotariffa);
    unset($num_app_ric_raggr);
    if ($mostra_quadro_disp == "app") {
        $mostra_num_liberi = "NO";
        ksort($dati_app['maxocc']);
        reset($dati_app['maxocc']);
        while (list($key, $val) = each($dati_app['maxocc'])) {
            if ($app_consentito[$key] == "SI") {
                $app_ric_raggr[$num_raggr] = $key;
                $nome_raggr[$num_raggr] = $key;
                $num_raggr++;
            }
            # fine if ($app_consentito[$numapp] == "SI")
        }
        # fine while (list($key, $val) = each($dati_app['maxocc']))
    }
    # fine if ($mostra_quadro_disp == "app")
    if ($mostra_quadro_disp == "reg2") {
        for ($numtariffa = 1; $numtariffa <= $numero_tariffe; $numtariffa++) {
            if ($app_regola2_orig[$numtariffa]) {
                $app_regola2 = explode(",", $app_regola2_orig[$numtariffa]);
                for ($num1 = 0; $num1 < count($app_regola2); $num1++) {
                    if ($app_consentito[$app_regola2[$num1]] == "SI") {
                        $app_ric_raggr[$num_raggr] .= "{$app_regola2[$num1]},";
                    }
                }
                if ($app_ric_raggr[$num_raggr]) {
                    $app_ric_raggr[$num_raggr] = substr($app_ric_raggr[$num_raggr], 0, -1);
                    $nome_raggr[$num_raggr] = str_replace(" ", "&nbsp;", $nome_tariffa[$numtariffa]);
                    $tipotariffa[$num_raggr] = "tariffa{$numtariffa}";
                    $num_raggr++;
                }
                # fine if ($app_ric_raggr[$num_raggr])
            }
            # fine if ($app_regola2_orig[$numtariffa])
        }
        # fine for $numtariffa
    }
    # fine if ($mostra_quadro_disp == "reg2")
    if ($mostra_quadro_disp == "pers") {
        asort($dati_app['maxocc']);
        reset($dati_app['maxocc']);
        $ultime_persone_casa = "vuoto";
        while (list($key, $val) = each($dati_app['maxocc'])) {
            $persone_casa = $val;
            if ($persone_casa != $ultime_persone_casa) {
                if ($app_ric_raggr[$num_raggr]) {
                    $app_ric_raggr[$num_raggr] = substr($app_ric_raggr[$num_raggr], 0, -1);
                    if ($ultime_persone_casa) {
                        if ($ultime_persone_casa == 1) {
                            $nome_raggr[$num_raggr] = $ultime_persone_casa . "&nbsp;" . $fr_persona;
                        } else {
                            $nome_raggr[$num_raggr] = $ultime_persone_casa . "&nbsp;" . $fr_persone;
                        }
                    } else {
                        $nome_raggr[$num_raggr] = "?&nbsp;{$fr_persone}";
                    }
                    $num_raggr++;
                }
                # fine if ($app_ric_raggr[$num_raggr])
                $ultime_persone_casa = $persone_casa;
            }
            # fine if ($persone_casa != $ultimepersone_casa)
            if ($app_consentito[$key] == "SI") {
                $app_ric_raggr[$num_raggr] .= "{$key},";
            }
        }
        # fine while (list($key, $val) = each($dati_app[maxocc]))
        if ($app_ric_raggr[$num_raggr]) {
            $app_ric_raggr[$num_raggr] = substr($app_ric_raggr[$num_raggr], 0, -1);
            if ($ultime_persone_casa) {
                if ($ultime_persone_casa == 1) {
                    $nome_raggr[$num_raggr] = $ultime_persone_casa . "&nbsp;" . $fr_persona;
                } else {
                    $nome_raggr[$num_raggr] = $ultime_persone_casa . "&nbsp;" . $fr_persone;
                }
            } else {
                $nome_raggr[$num_raggr] = "?&nbsp;{$fr_persone}";
            }
            $num_raggr++;
        }
        # fine if ($app_ric_raggr[$num_raggr])
    }
    # fine if ($mostra_quadro_disp == "pers")
    $righe_tab_disp = "";
    for ($num1 = 0; $num1 < $num_raggr; $num1++) {
        if ($app_ric_raggr[$num1]) {
            $righe_tab_disp .= "<tr><td style=\"text-align: right;\">{$aper_font_tab_disp}" . $nome_raggr[$num1] . "{$chiu_font_tab_disp}</td>";
            $max_app_liberi = explode(",", $app_ric_raggr[$num1]);
            $max_app_liberi = count($max_app_liberi);
            $app_ric_colonna = "," . $app_ric_raggr[$num1] . ",";
            for ($num2 = 0; $num2 < $num_colonne_tab_disp; $num2++) {
                $id_periodo = $id_data_inizio_tab_disp + $num2;
                $num_app_liberi = $max_app_liberi;
                if ($app_consentito_sett[",attivo,"] == "SI") {
                    if ($num2 == 0) {
                        $app_ric_col_vett = explode(",", $app_ric_raggr[$num1]);
                        $num_app_ric_col = count($app_ric_col_vett);
                    }
                    # fine if ($num2 == 0)
                    $app_ric_colonna = "," . $app_ric_raggr[$num1] . ",";
                    for ($num3 = 0; $num3 < $num_app_ric_col; $num3++) {
                        if ($app_consentito_sett[$app_ric_col_vett[$num3]][$id_periodo] != "SI") {
                            $app_ric_colonna = str_replace("," . $app_ric_col_vett[$num3] . ",", ",", $app_ric_colonna);
                            $num_app_liberi--;
                        }
                        # fine if ($app_consentito_sett[$app_ric_col_vett[$num3]][$id_periodo] != "SI")
                    }
                    # fine for $num3
                }
                # fine if ($app_consentito_sett[",attivo,"] == "SI")
                $pren_pres_in_lista = "";
                $lista_prenota_periodo = "";
                $num_lista_pren_per = 0;
                lista_prenota_periodo($id_periodo, $id_periodo, $dati_app, $prenota_in_app_sett, $pren_pres_in_lista, $lista_prenota_periodo, $num_lista_pren_per);
                for ($num3 = 0; $num3 < $num_lista_pren_per; $num3++) {
                    if (str_replace("," . $app_orig_prenota_id[$lista_prenota_periodo[$num3]] . ",", "", $app_ric_colonna) != $app_ric_colonna) {
                        $num_app_liberi--;
                    }
                }
                # fine for $num3
                if ($mostra_quadro_disp == "reg2" and $dati_tariffe and $dati_tariffe[$tipotariffa[$num1]]['chiusa'][$id_periodo]) {
                    $num_app_liberi = 0;
                }
                if ($num_app_liberi > 0) {
                    $color = $c_libero_tab_disp;
                } else {
                    $color = $c_occupato_tab_disp;
                }
                if ($num_app_liberi > 0 and $mostra_num_liberi == "SI") {
                    $val_liberi = $num_app_liberi;
                } else {
                    $val_liberi = "&nbsp;";
                }
                if ($num2 == 0 and $allinea_disp == "SI") {
                    $colspan_v = $colspan / 2;
                } else {
                    $colspan_v = $colspan;
                }
                $righe_tab_disp .= "<td style=\"background-color: {$color};\" colspan=\"{$colspan_v}\">{$aper_font_tab_disp}{$val_liberi}{$chiu_font_tab_disp}</td>";
            }
            # fine for $num2
            if ($colonna_destra_tab_disp != "NO") {
                $righe_tab_disp .= "<td>{$aper_font_tab_disp}" . $nome_raggr[$num1] . "{$chiu_font_tab_disp}</td></tr>";
            } else {
                $righe_tab_disp .= "</tr>";
            }
        }
        # fine if ($app_ric_raggr[$num1])
    }
    # fine for $num1
    if ($righe_tab_disp) {
        if ($tipo_periodi == "s") {
            $ripeti_giorni = 7;
        } else {
            $ripeti_giorni = 1;
            if (!$id_utente) {
                $id_utente_gio = 1;
            } else {
                $id_utente_gio = $id_utente;
            }
            $giorno_vedi_ini_sett = esegui_query("select valpersonalizza_num from {$tablepersonalizza} where idpersonalizza = 'giorno_vedi_ini_sett{$anno}' and idutente = '{$id_utente_gio}'");
            if (numlin_query($giorno_vedi_ini_sett) == 1) {
                $giorno_vedi_ini_sett = risul_query($giorno_vedi_ini_sett, 0, 'valpersonalizza_num');
            } else {
                $giorno_vedi_ini_sett = 0;
            }
        }
        # fine else if ($tipo_periodi == "s")
        $ultimo_mese = "";
        $num_col_mese = 0;
        $riga_mese = "<tr><td rowspan=\"2\">{$aper_font_tab_disp}&nbsp;{$chiu_font_tab_disp}</td>";
        $riga_giorni = "<tr>";
        for ($num1 = 0; $num1 < $num_colonne_tab_disp + 1; $num1++) {
            if ($allinea_disp != "SI" or $num1 != $num_colonne_tab_disp) {
                if ($num1 != $num_colonne_tab_disp) {
                    $id_periodo = $id_data_inizio_tab_disp + $num1;
                } else {
                    $id_periodo = $id_data_inizio_tab_disp + $num1 - 1;
                }
                $riga_periodo = esegui_query("select * from {$tableperiodi} where idperiodi = '{$id_periodo}'");
                if ($num1 != $num_colonne_tab_disp) {
                    $inizio_periodo = risul_query($riga_periodo, 0, 'datainizio');
                } else {
                    $inizio_periodo = risul_query($riga_periodo, 0, 'datafine');
                }
                $inizio_periodo = explode("-", $inizio_periodo);
                $g_inizio_periodo = $inizio_periodo[2];
                $m_inizio_periodo = $inizio_periodo[1];
                $a_inizio_periodo = $inizio_periodo[0];
                if ($num1 == $num_colonne_tab_disp) {
                    $ripeti_giorni = 1;
                }
                for ($num2 = 0; $num2 < $ripeti_giorni; $num2++) {
                    $timestamp_periodo = mktime(0, 0, 0, $m_inizio_periodo, $g_inizio_periodo + $num2, $a_inizio_periodo);
                    $g_mostra = date("d", $timestamp_periodo);
                    $m_mostra = date("m", $timestamp_periodo);
                    if ($ultimo_mese != $m_mostra) {
                        if ($ultimo_mese) {
                            $a_mostra = date("Y", mktime(0, 0, 0, $m_inizio_periodo, $g_inizio_periodo + $num2 - 1, $a_inizio_periodo));
                            $riga_mese .= "<td colspan=\"{$num_col_mese}\">{$aper_font_tab_disp}";
                            if ($num_col_mese > 7) {
                                $riga_mese .= $nome_mese[$ultimo_mese] . "&nbsp;{$a_mostra}";
                            } else {
                                $riga_mese .= "&nbsp;";
                            }
                            $riga_mese .= "{$chiu_font_tab_disp}</td>";
                            $num_col_mese = 0;
                        }
                        # fine if ($ultimo_mese)
                        $ultimo_mese = $m_mostra;
                    }
                    # fine if ($ultimo_mese != $m_mostra)
                    if (($num1 != 0 or $num2 != 0) and $num1 != $num_colonne_tab_disp) {
                        $num_col_mese = $num_col_mese + 2;
                    } else {
                        $num_col_mese++;
                    }
                    $bgcolor = "";
                    if ($tipo_periodi != "s") {
                        $giorno_sett_corr = date("w", $timestamp_periodo);
                        if ($giorno_sett_corr == $giorno_vedi_ini_sett) {
                            $bgcolor = "{$c_inisett_tab_disp}";
                        }
                    } else {
                        if ($num2 == 0) {
                            $bgcolor = "{$c_inisett_tab_disp}";
                        }
                    }
                    $riga_giorni .= "<td";
                    if ($bgcolor) {
                        $riga_giorni .= " style=\"background-color: {$bgcolor};\"";
                    }
                    if (($num1 != 0 or $num2 != 0) and $num1 != $num_colonne_tab_disp) {
                        $riga_giorni .= " colspan=2";
                    }
                    $riga_giorni .= ">{$aper_font_tab_disp}{$g_mostra}{$chiu_font_tab_disp}</td>";
                }
                # fine for $num2
            }
            # fine if ($allinea_disp != "SI" or $num1 != $num_colonne_tab_disp)
        }
        # fine for $num1
        $a_mostra = date("Y", mktime(0, 0, 0, $m_inizio_periodo, $g_inizio_periodo + $num2 - 1, $a_inizio_periodo));
        $riga_mese .= "<td colspan=\"{$num_col_mese}\">{$aper_font_tab_disp}";
        if ($num_col_mese > 6) {
            $riga_mese .= $nome_mese[$ultimo_mese] . "&nbsp;{$a_mostra}";
        } else {
            $riga_mese .= "&nbsp;";
        }
        if ($colonna_destra_tab_disp != "NO") {
            $riga_mese .= "{$chiu_font_tab_disp}</td><td rowspan=\"2\">{$aper_font_tab_disp}&nbsp;{$chiu_font_tab_disp}</td></tr>";
        } else {
            $riga_mese .= "{$chiu_font_tab_disp}</td></tr>";
        }
        $riga_giorni .= "</tr>";
        $righe_tab_disp = "{$riga_mese}\n{$riga_giorni}\n{$righe_tab_disp}";
    }
    # fine if ($righe_tab_disp)
    return $righe_tab_disp;
}
function liberasettimane($idinizio, $idfine, &$limiti_var, $anno, &$fatto, &$appartamento, $profondita, $app_richiesti, &$app_prenota_id, &$app_orig_prenota_id, &$inizio_prenota_id, &$fine_prenota_id, &$app_assegnabili_id, &$prenota_in_app_sett, &$dati_app, $nome_tab_prenota = "prenota")
{
    global $debug;
    if (@is_array($app_richiesti) and $app_richiesti[',numero,']) {
        $app_richiesti_vett = $app_richiesti;
        $idinizio_vett = $idinizio;
        $idfine_vett = $idfine;
        if (@is_array($appartamento)) {
            $appartamento_vett = $appartamento;
        }
        if (!$app_richiesti_vett['id']) {
            $app_richiesti_vett['id'] = 1;
            $limiti_var['n_ini'] = "";
            $limiti_var['n_fine'] = "";
            for ($num1 = 1; $num1 <= $app_richiesti_vett[',numero,']; $num1++) {
                if (!$limiti_var['n_ini'] or $limiti_var['n_ini'] > $idinizio_vett[$num1]) {
                    $limiti_var['n_ini'] = $idinizio_vett[$num1];
                }
                if (!$limiti_var['n_fine'] or $limiti_var['n_fine'] < $idfine_vett[$num1]) {
                    $limiti_var['n_fine'] = $idfine_vett[$num1];
                }
            }
            # fine for $num1
        } else {
            $app_richiesti_vett['id']++;
            $limiti_var['n_ini'] = $idinizio_vett[$app_richiesti_vett['id']];
            $limiti_var['n_fine'] = $idfine_vett[$app_richiesti_vett['id']];
        }
        # fine else if (!$app_richiesti_vett['id'])
        unset($app_richiesti);
        if ($app_richiesti_vett[$app_richiesti_vett['id']] != ",tutti,") {
            $vett_app = explode(",", $app_richiesti_vett[$app_richiesti_vett['id']]);
            $n_vett_app = count($vett_app);
            for ($num1 = 0; $num1 < $n_vett_app; $num1++) {
                $app_richiesti[$vett_app[$num1]] = "SI";
            }
        }
        # fine if ($app_richiesti_vett[$app_richiesti_vett[id]] != ",tutti,")
        $idinizio = $idinizio_vett[$app_richiesti_vett['id']];
        $idfine = $idfine_vett[$app_richiesti_vett['id']];
        $appartamento = "";
    } else {
        $limiti_var['n_ini'] = $idinizio;
        $limiti_var['n_fine'] = $idfine;
    }
    # fine else if (@is_array($app_richiesti) and $app_richiesti[',numero,'])
    if (!@is_array($profondita)) {
        $primo_ciclo = "SI";
        $prof_copia = $profondita;
        $profondita = "";
        $profondita['iniziale'] = $prof_copia;
        $profondita['attuale'] = $prof_copia;
        $tableprenota = $nome_tab_prenota . $anno . $profondita['iniziale'];
        $max_prenota = esegui_query("select max(idprenota) from {$tableprenota}");
        $tot_prenota = risul_query($max_prenota, 0, 0);
        $profondita['tot_prenota_ini'] = $tot_prenota;
        $profondita['tot_prenota_attuale'] = $tot_prenota;
        tab_a_var($limiti_var, $app_prenota_id, $app_orig_prenota_id, $inizio_prenota_id, $fine_prenota_id, $app_assegnabili_id, $prenota_in_app_sett, $anno, $dati_app, $profondita, $nome_tab_prenota);
    }
    # fine if (!@is_array($profondita))
    if ($profondita['controllato_tutti_occupati'] != "SI") {
        $tutti_occupati = controlla_tutti_occupati($idinizio, $idfine, $app_richiesti, $prenota_in_app_sett, $app_prenota_id, $app_assegnabili_id, $dati_app, $fine_prenota_id);
        $profondita['controllato_tutti_occupati'] = "SI";
    }
    # fine if ($profondita[controllato_tutti_occupati] != "SI")
    if ($tutti_occupati == "SI") {
        $fatto = "SI";
    } else {
        $fatto = "NO";
    }
    $num_da_liberare = 1;
    $num_da_liberare2 = 1;
    # cicli da ripetere per ogni appartamento fino a che $fatto = SI
    # primo ciclo che controlla se c'é già un appartamento libero
    if ($fatto != "SI") {
        for ($num1 = 0; $num1 < $dati_app['totapp']; $num1++) {
            $numapp = $dati_app['posizione'][$num1];
            if (!$app_richiesti or $app_richiesti[$numapp] == "SI") {
                if ($app_richiesti_vett[',vicini,'] != "SI" or $dati_app['vicini'][$numapp] != $numapp) {
                    $prenotainperiodo = prenota_in_app_e_periodo($numapp, $idinizio, $idfine, $prenota_in_app_sett, $fine_prenota_id, $num_pp);
                    if (!$num_pp) {
                        $appartamento = $numapp;
                        $fatto = "SI";
                        if ($debug == "on") {
                            echo "LIBERATO1 {$appartamento}<br>";
                        }
                        break;
                    }
                    # fine if (!$num_pp)
                }
                # fine if ($app_richiesti_vett[',vicini,'] != "SI" or $dati_app['vicini'][$numapp] != $numapp)
            }
            # fine if (!$app_richiesti or $app_richiesti[$numapp] == "SI")
        }
        # fine for $num1
    }
    # fine if ($fatto != "SI")
    if ($fatto != "SI") {
        # allargo il periodo passato dalla tabella alle variabili se necessario
        $lista_prenota_periodo = "";
        $pren_pres_in_lista = "";
        $num_lista_pren_per = 0;
        if (!$limiti_var[s_ini]) {
            lista_prenota_periodo($idinizio, $idfine, $dati_app, $prenota_in_app_sett, $pren_pres_in_lista, $lista_prenota_periodo, $num_lista_pren_per);
            $limiti_var[s_ini] = $idinizio;
            $limiti_var[s_fine] = $idfine;
        }
        # fine if (!$limiti_var[s_ini])
        if ($limiti_var['s_ini'] > $idinizio) {
            lista_prenota_periodo($idinizio, $limiti_var['s_ini'] - 1, $dati_app, $prenota_in_app_sett, $pren_pres_in_lista, $lista_prenota_periodo, $num_lista_pren_per);
            $limiti_var['s_ini'] = $idinizio;
        }
        # fine if ($limiti_var['s_ini'] > $idinizio)
        if ($limiti_var['s_fine'] < $idfine) {
            lista_prenota_periodo($limiti_var['s_fine'] + 1, $idfine, $dati_app, $prenota_in_app_sett, $pren_pres_in_lista, $lista_prenota_periodo, $num_lista_pren_per);
            $limiti_var['s_fine'] = $idfine;
        }
        # fine if ($limiti_var['s_ini'] > $idinizio)
        for ($num1 = 0; $num1 < $num_lista_pren_per; $num1++) {
            if ($inizio_prenota_id[$lista_prenota_periodo[$num1]] < $limiti_var['n_ini']) {
                $limiti_var['n_ini'] = $inizio_prenota_id[$lista_prenota_periodo[$num1]];
            }
            if ($fine_prenota_id[$lista_prenota_periodo[$num1]] > $limiti_var['n_fine']) {
                $limiti_var['n_fine'] = $fine_prenota_id[$lista_prenota_periodo[$num1]];
            }
        }
        # fine for $num1
        if ($limiti_var['n_ini'] < $limiti_var['ini'] or $limiti_var['n_fine'] > $limiti_var['fine']) {
            tab_a_var($limiti_var, $app_prenota_id, $app_orig_prenota_id, $inizio_prenota_id, $fine_prenota_id, $app_assegnabili_id, $prenota_in_app_sett, $anno, $dati_app, $profondita, $nome_tab_prenota);
        }
        # fine if ($limiti_var['n_ini'] < $limiti_var['ini'] or $limiti_var['n_fine'] > $limiti_var['fine'])
        # ciclo che prova a spostare le prime prenotazioni ed eventualmente le
        # mette in $da_liberare o $da_scambiare
        for ($num1 = 0; $num1 < $dati_app['totapp']; $num1++) {
            $numapp = $dati_app['posizione'][$num1];
            if (!$app_richiesti or $app_richiesti[$numapp] == "SI") {
                $prenotainperiodo = prenota_in_app_e_periodo($numapp, $idinizio, $idfine, $prenota_in_app_sett, $fine_prenota_id, $num_pp);
                $idiniziop = "";
                $idfinep = "";
                unset($app_assegnabili);
                $mobile = "SI";
                $tutti_liberabili = "SI";
                # Trovo le prenotazioni del periodo per l'appartamento $numapp, controllo
                # che si posssano muovere e trovo le settimane iniziale e finale, e i
                # vincoli sull'appartamento di destinazione ($num_min_persome, $numcasa e
                # $num_piano).
                for ($num2 = 1; $num2 <= $num_pp; $num2++) {
                    $idprenotainperiodo = $prenotainperiodo[$num2];
                    if ($app_assegnabili_id[$idprenotainperiodo] and $app_assegnabili_id[$idprenotainperiodo] != "v") {
                        $vett_assegnabili = explode(",", $app_assegnabili_id[$idprenotainperiodo]);
                        $num_assegnabili = count($vett_assegnabili);
                        for ($num3 = 0; $num3 < $num_assegnabili; $num3++) {
                            $app_ = $vett_assegnabili[$num3];
                            $app_assegnabili[$idprenotainperiodo][$app_] = "SI";
                        }
                        # fine for $num3
                    }
                    # fine if ($app_assegnabili_id[$idprenotainperiodo] and $app_assegnabili_id[$idprenotainperiodo] != "v")
                    if ($app_assegnabili_id[$idprenotainperiodo]) {
                        if (!$idiniziop or $idiniziop > $inizio_prenota_id[$idprenotainperiodo]) {
                            $idiniziop = $inizio_prenota_id[$idprenotainperiodo];
                        }
                        # fine if (!$idiniziop or $idiniziop > $inizio_prenota_id[$idprenotainperiodo])
                        if (!$idfinep or $idfinep < $fine_prenota_id[$idprenotainperiodo]) {
                            $idfinep = $fine_prenota_id[$idprenotainperiodo];
                        }
                        # fine if (!$idfinep or $idfinep < $fine_prenota_id[$idprenotainperiodo])
                    } else {
                        $mobile = "NO";
                    }
                    if ($app_richiesti_vett[',vicini,'] == "SI" and !$dati_app['vicini'][$numapp] == $numapp) {
                        $mobile = "NO";
                    }
                }
                # fine for $num2
                if ($mobile == "SI") {
                    # Provo a spostare le prenotazioni dell'appartamento $numapp.
                    $mobile2 = "SI";
                    $prenota_comp_presente = "NO";
                    #$liberabile = "";
                    #$scambiabile = "";
                    #$da_scambiare = "";
                    for ($num2 = 1; $num2 <= $num_pp; $num2++) {
                        $idprenotainperiodo = $prenotainperiodo[$num2];
                        for ($num3 = 0; $num3 < $dati_app['totapp']; $num3++) {
                            if ($num3 != $num1) {
                                $numapp2 = $dati_app[posizione][$num3];
                                if ($app_assegnabili_id[$idprenotainperiodo] == "v" or $app_assegnabili[$idprenotainperiodo][$numapp2] == "SI") {
                                    $prenotainperiodo2 = prenota_in_app_e_periodo($numapp2, $inizio_prenota_id[$idprenotainperiodo], $fine_prenota_id[$idprenotainperiodo], $prenota_in_app_sett, $fine_prenota_id, $num_pp2);
                                    if (!$num_pp2 and !$app_assegnabili_id[0][$idprenotainperiodo]) {
                                        $nuovo_app[$idprenotainperiodo] = $numapp2;
                                        $liberabile[$idprenotainperiodo] = "SI";
                                        $scambiabile[$idprenotainperiodo] = "NO";
                                        break;
                                    } else {
                                        # Se non si possono spostare vedere se sono da scambiare
                                        if ($app_assegnabili_id[0][$idprenotainperiodo]) {
                                            $prenota_comp_presente = "SI";
                                        }
                                        $prenota_fissa_presente = "NO";
                                        for ($num4 = 1; $num4 <= $num_pp2; $num4++) {
                                            $idprenotainperiodo2 = $prenotainperiodo2[$num4];
                                            if (!$app_assegnabili_id[$idprenotainperiodo2]) {
                                                $prenota_fissa_presente = "SI";
                                            } else {
                                                # se $idprenotainperiodo è uguale o minore di $idprenotainperiodo2 e ne contiene gli app. assegnabili è inutile fare lo scambio
                                                if ($inizio_prenota_id[$idprenotainperiodo2] <= $inizio_prenota_id[$idprenotainperiodo] and $fine_prenota_id[$idprenotainperiodo2] >= $fine_prenota_id[$idprenotainperiodo]) {
                                                    if ($app_assegnabili_id[$idprenotainperiodo] == "v") {
                                                        $prenota_fissa_presente = "SI";
                                                    } else {
                                                        if ($app_assegnabili_id[$idprenotainperiodo2] != "v" and !$app_assegnabili_id[0][$idprenotainperiodo]) {
                                                            $vett_assegnabili = explode(",", $app_assegnabili_id[$idprenotainperiodo2]);
                                                            $num_assegnabili = count($vett_assegnabili);
                                                            $lista_app_contenuta = "SI";
                                                            for ($num5 = 0; $num5 < $num_assegnabili; $num5++) {
                                                                if ($app_assegnabili[$idprenotainperiodo][$vett_assegnabili[$num5]] != "SI") {
                                                                    $lista_app_contenuta = "NO";
                                                                    break;
                                                                }
                                                            }
                                                            # fine for $num5
                                                            if ($lista_app_contenuta == "SI") {
                                                                $prenota_fissa_presente = "SI";
                                                            }
                                                        }
                                                        # fine if ($app_assegnabili_id[$idprenotainperiodo2] != "v" and !$app_assegnabili_id[0][$idprenotainperiodo])
                                                    }
                                                    # fine else if ($app_assegnabili_id[$idprenotainperiodo] == "v")
                                                }
                                                # fine if ($inizio_prenota_id[$idprenotainperiodo2] <= $inizio_prenota_id[$idprenotainperiodo] and...
                                            }
                                            # fine else if (!$app_assegnabili_id[$idprenotainperiodo2])
                                        }
                                        # fine fine for $num4
                                        if ($prenota_fissa_presente == "NO") {
                                            $scambiabile[$idprenotainperiodo] = "SI";
                                            $da_scambiare[$idprenotainperiodo][$numapp2] = "SI";
                                        }
                                        # fine if ($prenota_fissa_presente == "NO")
                                    }
                                    # fine else if (!$num_pp2)
                                }
                                # fine if ($app_assegnabili_id[$idprenotainperiodo] == "v" or ...
                            }
                            # fine if ($num3 != $num1)
                        }
                        # fine for $num3
                        if ($liberabile[$idprenotainperiodo] != "SI") {
                            $tutti_liberabili = "NO";
                        }
                        if ($liberabile[$idprenotainperiodo] != "SI" and $scambiabile[$idprenotainperiodo] != "SI") {
                            $mobile2 = "NO";
                        }
                    }
                    # fine for $num2
                    # Applico gli eventuali spostamenti, altrimenti metto i data in $da_liberare
                    if ($tutti_liberabili != "NO") {
                        for ($num2 = 1; $num2 <= $num_pp; $num2++) {
                            $idprenotainperiodo = $prenotainperiodo[$num2];
                            $n_app = $nuovo_app[$idprenotainperiodo];
                            for ($num3 = $inizio_prenota_id[$idprenotainperiodo]; $num3 <= $fine_prenota_id[$idprenotainperiodo]; $num3++) {
                                $prenota_in_app_sett[$numapp][$num3] = "";
                                $prenota_in_app_sett[$n_app][$num3] = $idprenotainperiodo;
                            }
                            # fine for $num3
                            $app_prenota_id[$idprenotainperiodo] = $n_app;
                        }
                        # fine for $num2
                        $appartamento = $numapp;
                        $fatto = "SI";
                        if ($debug == "on") {
                            echo "LIBERATO2 {$appartamento}<br>";
                        }
                        break;
                    }
                    # fine if ($tutti_liberabili != "NO")
                    if ($mobile2 == "SI") {
                        if ($prenota_comp_presente == "NO") {
                            $idinizio_da_liberare[$num_da_liberare] = $idiniziop;
                            $idfine_da_liberare[$num_da_liberare] = $idfinep;
                            $app_da_liberare[$num_da_liberare] = $numapp;
                            $prenotainperiodo_da_liberare[$num_da_liberare] = $prenotainperiodo;
                            $num_pp_da_liberare[$num_da_liberare] = $num_pp;
                            $num_da_liberare++;
                        } else {
                            $idinizio_da_liberare2[$num_da_liberare2] = $idiniziop;
                            $idfine_da_liberare2[$num_da_liberare2] = $idfinep;
                            $app_da_liberare2[$num_da_liberare2] = $numapp;
                            $prenotainperiodo_da_liberare2[$num_da_liberare2] = $prenotainperiodo;
                            $num_pp_da_liberare2[$num_da_liberare2] = $num_pp;
                            $num_da_liberare2++;
                        }
                        # fine else if ($prenota_comp_presente == "NO")
                    } else {
                        $riprova_app[$numapp] = "NO";
                    }
                    if ($fatto == "SI") {
                        break;
                    }
                } else {
                    $riprova_app[$numapp] = "NO";
                }
            }
            # fine if (!$app_richiesti or $app_richiesti[$numapp] == "SI")
        }
        # fine for $num1
    }
    # fine if ($fatto != "SI")
    # Se non è ancora $fatto chiamo ricorsivamente liberasettimane con i data
    # in $da_liberare e $da_scambiare, operando su una variabile temporanea.
    if ($fatto == "NO" and $limiti_var['t_limite'] >= time()) {
        $nuova_profondita = $profondita;
        $nuova_profondita['attuale'] = $profondita['attuale'] + 1;
        $num_da_lib_no_comp = $num_da_liberare;
        for ($num1 = 1; $num1 < $num_da_liberare2; $num1++) {
            $idinizio_da_liberare[$num_da_liberare] = $idinizio_da_liberare2[$num1];
            $idfine_da_liberare[$num_da_liberare] = $idfine_da_liberare2[$num1];
            $app_da_liberare[$num_da_liberare] = $app_da_liberare2[$num1];
            $prenotainperiodo_da_liberare[$num_da_liberare] = $prenotainperiodo_da_liberare2[$num1];
            $num_pp_da_liberare[$num_da_liberare] = $num_pp_da_liberare2[$num1];
            $num_da_liberare++;
        }
        # fine for $num1
        for ($num1 = 1; $num1 < $num_da_liberare; $num1++) {
            if ($app_da_liberare[$num1] != ",,NO") {
                $n_app_prenota_id = $app_prenota_id;
                $n_prenota_in_app_sett = $prenota_in_app_sett;
                $nuova_profondita['tot_prenota_attuale'] = $profondita['tot_prenota_attuale'];
                $idiniziop = $idinizio_da_liberare[$num1];
                $idfinep = $idfine_da_liberare[$num1];
                $numapp = $app_da_liberare[$num1];
                $prenotainperiodo = $prenotainperiodo_da_liberare[$num1];
                $num_pp = $num_pp_da_liberare[$num1];
                # Muovo le prenotazioni liberabili
                for ($num2 = 1; $num2 <= $num_pp; $num2++) {
                    $idprenotainperiodo = $prenotainperiodo[$num2];
                    if ($liberabile[$idprenotainperiodo] == "SI") {
                        $n_app = $nuovo_app[$idprenotainperiodo];
                        for ($num3 = $inizio_prenota_id[$idprenotainperiodo]; $num3 <= $fine_prenota_id[$idprenotainperiodo]; $num3++) {
                            $n_prenota_in_app_sett[$numapp][$num3] = "";
                            $n_prenota_in_app_sett[$n_app][$num3] = $idprenotainperiodo;
                        }
                        # fine for $num3
                        $n_app_prenota_id[$idprenotainperiodo] = $n_app;
                    }
                    # fine if ($liberabile[$idpenotainperiodo] == "SI")
                }
                # fine for $num2
                # Riempio gli spazi vuoti con prenotazioni kostanti.
                $idinizio_prenota_falsa = $idinizio;
                $prenota_falsa_da_inserire = "NO";
                for ($num2 = $idinizio; $num2 <= $idfine + 1; $num2++) {
                    if ($n_prenota_in_app_sett[$numapp][$num2] or $num2 == $idfine + 1) {
                        if ($prenota_falsa_da_inserire == "SI") {
                            $nuova_profondita['tot_prenota_attuale']++;
                            $n_app_prenota_id[$nuova_profondita['tot_prenota_attuale']] = $numapp;
                            $inizio_prenota_id[$nuova_profondita['tot_prenota_attuale']] = $idinizio_prenota_falsa;
                            $fine_prenota_id[$nuova_profondita['tot_prenota_attuale']] = $idfine_prenota_falsa;
                            for ($num3 = $idinizio_prenota_falsa; $num3 <= $idfine_prenota_falsa; $num3++) {
                                $n_prenota_in_app_sett[$numapp][$num3] = $nuova_profondita['tot_prenota_attuale'];
                            }
                            # fine for $num3
                        }
                        # fine if ($prenota_falsa_da_inserire == "SI")
                        $prenota_falsa_da_inserire = "NO";
                        $idinizio_prenota_falsa = $num2 + 1;
                    } else {
                        $prenota_falsa_da_inserire = "SI";
                        $idfine_prenota_falsa = $num2;
                    }
                    # fine else if ($n_prenota_in_app_sett[$numapp][$num2] or $num2 == ($idfine+1))
                }
                # fine for $num2
                #chiamo ricorsivamente liberasettimane con gli app. $da_scambiare
                $fatto3 = "SI";
                $limiti_var_orig = $limiti_var;
                $num_pp_s = $num_pp;
                $prenotainperiodo_s = $prenotainperiodo;
                $scambiabile_s = $scambiabile;
                unset($prenotainperiodo_agg);
                for ($num2 = 1; $num2 <= $num_pp_s; $num2++) {
                    $idprenotainperiodo = $prenotainperiodo_s[$num2];
                    if ($scambiabile_s[$idprenotainperiodo] == "SI") {
                        $idinizioprenota2 = $inizio_prenota_id[$idprenotainperiodo];
                        $idfineprenota2 = $fine_prenota_id[$idprenotainperiodo];
                        if ($idinizioprenota2 > $idinizio) {
                            $idinizio_rimpicciolito = $idinizioprenota2;
                        } else {
                            $idinizio_rimpicciolito = $idinizio;
                        }
                        if ($idfineprenota2 < $idfine) {
                            $idfine_rimpicciolito = $idfineprenota2;
                        } else {
                            $idfine_rimpicciolito = $idfine;
                        }
                        # Se la prenotazione scambiabile che c'era prima è stata spostata in un altro appartamento
                        # riempio gli spazi vuoti ed aggiungo eventuali nuove prenotazioni a $prenotainperiodo_s
                        if ($numapp != $n_app_prenota_id[$idprenotainperiodo]) {
                            $idinizio_prenota_falsa = $idinizio_rimpicciolito;
                            $prenota_falsa_da_inserire = "NO";
                            for ($num3 = $idinizio_rimpicciolito; $num3 <= $idfine_rimpicciolito + 1; $num3++) {
                                if ($n_prenota_in_app_sett[$numapp][$num3] and !$prenotainperiodo_agg[$n_prenota_in_app_sett[$numapp][$num3]] and $num3 != $idfine_rimpicciolito + 1) {
                                    $prenotainperiodo_agg[$n_prenota_in_app_sett[$numapp][$num3]] = 1;
                                    $num_pp_s++;
                                    $prenotainperiodo_s[$num_pp_s] = $n_prenota_in_app_sett[$numapp][$num3];
                                    $scambiabile_s[$n_prenota_in_app_sett[$numapp][$num3]] = "SI";
                                }
                                # fine ($n_prenota_in_app_sett[$numapp][$num3] and !$prenotainperiodo_agg[$n_prenota_in_app_sett[$numapp][$num3]] and...
                                if ($n_prenota_in_app_sett[$numapp][$num3] or $num3 == $idfine_rimpicciolito + 1) {
                                    if ($prenota_falsa_da_inserire == "SI") {
                                        $nuova_profondita['tot_prenota_attuale']++;
                                        $n_app_prenota_id[$nuova_profondita['tot_prenota_attuale']] = $numapp;
                                        $inizio_prenota_id[$nuova_profondita['tot_prenota_attuale']] = $idinizio_prenota_falsa;
                                        $fine_prenota_id[$nuova_profondita['tot_prenota_attuale']] = $idfine_prenota_falsa;
                                        for ($num4 = $idinizio_prenota_falsa; $num4 <= $idfine_prenota_falsa; $num4++) {
                                            $n_prenota_in_app_sett[$numapp][$num4] = $nuova_profondita['tot_prenota_attuale'];
                                        }
                                        # fine for $num4
                                    }
                                    # fine if ($prenota_falsa_da_inserire == "SI")
                                    $prenota_falsa_da_inserire = "NO";
                                    $idinizio_prenota_falsa = $num3 + 1;
                                } else {
                                    $prenota_falsa_da_inserire = "SI";
                                    $idfine_prenota_falsa = $num3;
                                }
                                # fine else if ($n_prenota_in_app_sett[$numapp][$num2] or $num2 == ($idfine+1))
                            }
                            # fine for $num3
                        } else {
                            $inizio_prenota_id[$idprenotainperiodo] = $idinizio_rimpicciolito;
                            $fine_prenota_id[$idprenotainperiodo] = $idfine_rimpicciolito;
                            for ($num3 = $idinizioprenota2; $num3 < $idinizio_rimpicciolito; $num3++) {
                                $n_prenota_in_app_sett[$numapp][$num3] = "";
                            }
                            # fine for $num3
                            for ($num3 = $idfine_rimpicciolito + 1; $num3 <= $idfineprenota2; $num3++) {
                                $n_prenota_in_app_sett[$numapp][$num3] = "";
                            }
                            # fine for $num3
                            $app_assegnabili_id2 = $app_assegnabili_id[$idprenotainperiodo];
                            $app_assegnabili_id[$idprenotainperiodo] = "";
                            $ap_ric = "";
                            for ($num3 = 0; $num3 < $dati_app['totapp']; $num3++) {
                                $numapp2 = $dati_app['posizione'][$num3];
                                if ($da_scambiare[$idprenotainperiodo][$numapp2] == "SI") {
                                    $ap_ric[$numapp2] = "SI";
                                }
                                # fine if ($da_scambiare[$idprenotainperiodo][$numapp2] == "SI")
                            }
                            # fine for $num3
                            # Se la prenotazione da scambiare ne ha altre compagne
                            if ($app_assegnabili_id[0][$idprenotainperiodo]) {
                                $idprenota_comp = explode(",", $app_assegnabili_id[0][$idprenotainperiodo]);
                                $num_idprenota_comp = count($idprenota_comp);
                                cancella_prenota_compagne($idprenota_comp, $num_idprenota_comp, $idinizioprenota2, $idfineprenota2, $ap_ric, $inizio_prenota_id, $fine_prenota_id, $app_assegnabili_id, $n_app_prenota_id, $n_prenota_in_app_sett);
                            }
                            # fine if ($app_assegnabili_id[0][$idprenotainperiodo])
                            $appartamento2 = "";
                            $fatto2 = "";
                            if ($debug == "on") {
                                global $passo;
                                $passo++;
                                echo $passo;
                                for ($i = 0; $i < $profondita['attuale']; $i++) {
                                    echo "&nbsp;&nbsp;";
                                }
                                if ($ap_ric[',numero,']) {
                                    $ap_ric_ved = $ap_ric[1] . " (pren {$idprenotainperiodo} + " . $app_assegnabili_id[0][$idprenotainperiodo] . ")";
                                    $idinizioprenota2_ved = $idinizioprenota2[1];
                                    $idfineprenota2_ved = $idfineprenota2[1];
                                } else {
                                    $ap_ric_ved = implode(",", array_keys($ap_ric)) . " (pren {$idprenotainperiodo})";
                                    $idinizioprenota2_ved = $idinizioprenota2;
                                    $idfineprenota2_ved = $idfineprenota2;
                                }
                                # fine else if ($ap_ric[',numero,'])
                                echo "<b>" . $profondita['attuale'] . "</b> <em>" . date("H:i:s") . "</em> libera il {$numapp} da {$idinizioprenota2_ved} a {$idfineprenota2_ved} negli app {$ap_ric_ved}<br>";
                            }
                            # fine if ($debug == "on")
                            liberasettimane($idinizioprenota2, $idfineprenota2, $limiti_var, $anno, $fatto2, $appartamento2, $nuova_profondita, $ap_ric, $n_app_prenota_id, $app_orig_prenota_id, $inizio_prenota_id, $fine_prenota_id, $app_assegnabili_id, $n_prenota_in_app_sett, $dati_app, $nome_tab_prenota);
                            if ($debug == "on") {
                                echo $passo;
                                for ($i = 0; $i < $profondita['attuale']; $i++) {
                                    echo "&nbsp;&nbsp;";
                                }
                                echo "<b>" . $profondita['attuale'] . "</b> finito <em>" . date("H:i:s") . "</em> {$fatto2} (app {$appartamento2})<br>";
                            }
                            # fine if ($debug == "on")
                            if ($app_assegnabili_id[0][$idprenotainperiodo]) {
                                $inizio_prenota_id[$idprenotainperiodo] = $idinizioprenota2[1];
                                $fine_prenota_id[$idprenotainperiodo] = $idfineprenota2[1];
                                if ($fatto2 == "SI") {
                                    ripristina_prenota_compagne($idprenota_comp, $num_idprenota_comp, $idinizioprenota2, $idfineprenota2, $appartamento2, $n_app_prenota_id, $n_prenota_in_app_sett, $fine_prenota_id, $profondita);
                                }
                            } else {
                                $inizio_prenota_id[$idprenotainperiodo] = $idinizioprenota2;
                                $fine_prenota_id[$idprenotainperiodo] = $idfineprenota2;
                            }
                            # fine else if ($app_assegnabili_id[0][$idprenotainperiodo])
                            $app_assegnabili_id[$idprenotainperiodo] = $app_assegnabili_id2;
                            if ($fatto2 == "SI") {
                                for ($num3 = $idinizio_rimpicciolito; $num3 <= $idfine_rimpicciolito; $num3++) {
                                    $n_prenota_in_app_sett[$numapp][$num3] = "";
                                }
                                # fine for $num3
                                for ($num3 = $idinizioprenota2; $num3 <= $idfineprenota2; $num3++) {
                                    $n_prenota_in_app_sett[$appartamento2][$num3] = $idprenotainperiodo;
                                }
                                # fine for $num3
                                $n_app_prenota_id[$idprenotainperiodo] = $appartamento2;
                                if ($debug == "on") {
                                    echo $passo;
                                    for ($i = 0; $i < $profondita['attuale']; $i++) {
                                        echo "&nbsp;&nbsp;";
                                    }
                                    echo "<b>" . $profondita['attuale'] . "</b> spostata pren {$idprenotainperiodo} in " . $appartamento2 . "<br>";
                                }
                                # fine if ($debug == "on")
                                $nuova_profondita['tot_prenota_attuale']++;
                                $n_app_prenota_id[$nuova_profondita['tot_prenota_attuale']] = $numapp;
                                $inizio_prenota_id[$nuova_profondita['tot_prenota_attuale']] = $idinizio_rimpicciolito;
                                $fine_prenota_id[$nuova_profondita['tot_prenota_attuale']] = $idfine_rimpicciolito;
                                for ($num3 = $idinizio_rimpicciolito; $num3 <= $idfine_rimpicciolito; $num3++) {
                                    $n_prenota_in_app_sett[$numapp][$num3] = $nuova_profondita['tot_prenota_attuale'];
                                }
                                # fine for $num3
                            } else {
                                $fatto3 = "NO";
                                aggiorna_app_aggiunti($limiti_var, $limiti_var_orig, $app_orig_prenota_id, $app_prenota_id, $inizio_prenota_id, $fine_prenota_id, $prenota_in_app_sett);
                                break;
                            }
                            # fine else if ($fatto2 == "SI")
                        }
                        # fine else if ($numapp != $n_app_prenota_id[$idprenotainperiodo])
                    }
                    # fine if ($scambiabile_s[$idprenotainperiodo] == "SI")
                }
                # fine for $num2
                # cancello le prenotazioni kostanti
                for ($num2 = $profondita['tot_prenota_attuale'] + 1; $num2 <= $nuova_profondita['tot_prenota_attuale']; $num2++) {
                    for ($num3 = $inizio_prenota_id[$num2]; $num3 <= $fine_prenota_id[$num2]; $num3++) {
                        $n_prenota_in_app_sett[$numapp][$num3] = "";
                    }
                    # fine for $num3
                    $n_app_prenota_id[$num2] = "";
                    $inizio_prenota_id[$num2] = "";
                    $fine_prenota_id[$num2] = "";
                }
                # fine for $num2
                if ($fatto3 == "SI") {
                    $app_prenota_id = $n_app_prenota_id;
                    $prenota_in_app_sett = $n_prenota_in_app_sett;
                    $fatto = "SI";
                    $appartamento = $numapp;
                    break;
                } else {
                    $riprova_app[$numapp] = "NO";
                }
                # Elimino gli appartamenti successivi che si possono scambiare con questo
                if ($num1 != $num_da_liberare - 1 and $num1 < $num_da_lib_no_comp) {
                    $lista_app_assegnabili = "";
                    for ($num2 = 1; $num2 <= $num_pp; $num2++) {
                        $idprenotainperiodo = $prenotainperiodo[$num2];
                        if (!$lista_app_assegnabili or $lista_app_assegnabili == "v") {
                            $lista_app_assegnabili = $app_assegnabili_id[$idprenotainperiodo];
                        } else {
                            $app_ass_num2 = $app_assegnabili_id[$idprenotainperiodo];
                            if ($app_ass_num2 != "v" and $app_ass_num2 != $lista_app_assegnabili) {
                                $app_ass_num2 = explode(",", $app_ass_num2);
                                $num_app_ass_num2 = count($app_ass_num2) - 1;
                                $n_lista_app_assegnabili = "";
                                for ($num3 = 1; $num3 < $num_app_ass_num2; $num3++) {
                                    if (str_replace("," . $app_ass_num2[$num3] . ",", "", $lista_app_assegnabili) != $lista_app_assegnabili) {
                                        $n_lista_app_assegnabili .= "," . $app_ass_num2[$num3];
                                    }
                                }
                                # fine for $num3
                                $lista_app_assegnabili = $n_lista_app_assegnabili;
                                if (!$lista_app_assegnabili) {
                                    break;
                                } else {
                                    $lista_app_assegnabili .= ",";
                                }
                            }
                            # fine if ($app_ass_num2 != "v" and $app_ass_num2 != $lista_app_assegnabili)
                        }
                        # fine else if (!$lista_app_assegnabili or...
                    }
                    # fine for $num2
                    if ($lista_app_assegnabili) {
                        for ($num2 = $num1 + 1; $num2 < $num_da_liberare; $num2++) {
                            $numapp2 = $app_da_liberare[$num2];
                            if (($lista_app_assegnabili == "v" or str_replace(",{$numapp2},", "", $lista_app_assegnabili) != $lista_app_assegnabili) and $numapp2 != ",,NO") {
                                if ($prenota_in_app_sett[$numapp2][$idiniziop]) {
                                    $ini_blocco2 = $inizio_prenota_id[$prenota_in_app_sett[$numapp2][$idiniziop]];
                                } else {
                                    $ini_blocco2 = $idiniziop;
                                }
                                if ($prenota_in_app_sett[$numapp2][$idfinep]) {
                                    $fine_blocco2 = $fine_prenota_id[$prenota_in_app_sett[$numapp2][$idfinep]];
                                } else {
                                    $fine_blocco2 = $idfinep;
                                }
                                if ($ini_blocco2 == $idiniziop and $fine_blocco2 == $idfinep) {
                                    $scambiabili = "SI";
                                    for ($num3 = $idiniziop; $num3 <= $idfinep; $num3++) {
                                        if ($prenota_in_app_sett[$numapp2][$num3]) {
                                            $app_ass_num3 = $app_assegnabili_id[$prenota_in_app_sett[$numapp2][$num3]];
                                            if ($app_ass_num3 != "v" and str_replace(",{$numapp},", "", $app_ass_num3) == $app_ass_num3) {
                                                $scambiabili = "NO";
                                                break;
                                            }
                                            # fine if ($app_ass_num5 != "v" and...
                                            $num3 = $fine_prenota_id[$prenota_in_app_sett[$numapp2][$num3]];
                                        }
                                        # fine if ($prenota_in_app_sett[$numapp3][$num3])
                                    }
                                    # fine for $num3
                                    if ($scambiabili == "SI") {
                                        $app_da_liberare[$num2] = ",,NO";
                                        $riprova_app[$numapp2] = "NO";
                                    }
                                    # fine if ($scambiabili == "SI")
                                }
                                # fine if ($ini_blocco2 == $ini_blocco1 and...
                            }
                            # fine if (($lista_app_assegnabili == "v" or...
                        }
                        # fine for $num2
                    }
                    # fine if ($lista_app_assegnabili)
                }
                # fine if ($num1 != ($num_da_liberare - 1) and...
            }
            # fine if ($app_da_liberare[$num1] != ",,NO")
        }
        # fine for $num1
    }
    # fine if ($fatto == "NO")
    if ($tutti_occupati == "SI") {
        $fatto = "NO";
    }
    # Se bisogna liberare altri appartamenti oltre a quello appena liberato
    if ($fatto == "SI" and $app_richiesti_vett[',numero,']) {
        if ($app_richiesti_vett[',numero,'] > $app_richiesti_vett['id']) {
            $nuova_profondita = $profondita;
            $nuova_profondita['attuale']++;
            $nuova_profondita['controllato_tutti_occupati'] = "NO";
            $n_app_prenota_id = $app_prenota_id;
            $n_prenota_in_app_sett = $prenota_in_app_sett;
            $nuova_profondita['tot_prenota_attuale']++;
            $id_prenota_lib = $nuova_profondita['tot_prenota_attuale'];
            if ($debug == "on") {
                echo "inserita " . $nuova_profondita['tot_prenota_attuale'] . " in {$appartamento} da {$idinizio} a {$idfine}<br>";
            }
            $n_app_prenota_id[$id_prenota_lib] = $appartamento;
            $inizio_prenota_id[$id_prenota_lib] = $idinizio;
            $fine_prenota_id[$id_prenota_lib] = $idfine;
            for ($num1 = $idinizio; $num1 <= $idfine; $num1++) {
                $n_prenota_in_app_sett[$appartamento][$num1] = $id_prenota_lib;
            }
            # fine for $num1
            # Se gli app devono essere vicini mantengo l'app liberato fisso e provo i restanti da liberare
            if ($app_richiesti_vett[',vicini,'] == "SI") {
                $fatto = "NO";
                $lim_for = $app_richiesti_vett[',numero,'];
                if ($lim_for != $app_richiesti_vett['id'] + 1 and $limiti_var['t_limite'] < time()) {
                    $lim_for = $app_richiesti_vett['id'] + 1;
                    if ($debug == "on") {
                        echo "timeout<br>";
                    }
                }
                # fine if ($limiti_var['t_limite'] < time())
                for ($num1 = $app_richiesti_vett['id'] + 1; $num1 <= $lim_for; $num1++) {
                    if ($provato[$idinizio_vett[$num1]][$idfine_vett[$num1]][$app_richiesti_vett[$num1]] != "SI") {
                        $provato[$idinizio_vett[$num1]][$idfine_vett[$num1]][$app_richiesti_vett[$num1]] = "SI";
                        $n_app_prenota_id2 = $n_app_prenota_id;
                        $n_prenota_in_app_sett2 = $n_prenota_in_app_sett;
                        $n_app_richiesti_vett = $app_richiesti_vett;
                        if ((string) $n_app_richiesti_vett[',app_vicini,'] == "") {
                            $n_app_richiesti_vett[',app_vicini,'] = $dati_app['vicini'][$appartamento];
                        } else {
                            $app_vicini = explode(",", $dati_app['vicini'][$appartamento]);
                            $num_app_vicini = count($app_vicini);
                            for ($num2 = 0; $num2 < $num_app_vicini; $num2++) {
                                if (str_replace("," . $app_vicini[$num2] . ",", "", "," . $n_app_richiesti_vett[',app_vicini,'] . ",") == "," . $n_app_richiesti_vett[',app_vicini,'] . ",") {
                                    $n_app_richiesti_vett[',app_vicini,'] .= "," . $app_vicini[$num2];
                                }
                            }
                            # fine for $num2
                        }
                        # fine else if ((string) $app_richiesti_vett[',app_vicini,'] == "")
                        $n_app_richiesti_vett[$num1] = incrocia_app_richiesti($n_app_richiesti_vett[$num1], $n_app_richiesti_vett[',app_vicini,']);
                        if ((string) $n_app_richiesti_vett[$num1] != "") {
                            $n_idinizio_vett = $idinizio_vett;
                            $n_idfine_vett = $idfine_vett;
                            $val = $n_app_richiesti_vett[$app_richiesti_vett['id'] + 1];
                            $n_app_richiesti_vett[$app_richiesti_vett['id'] + 1] = $n_app_richiesti_vett[$num1];
                            $n_app_richiesti_vett[$num1] = $val;
                            $n_idinizio_vett[$app_richiesti_vett['id'] + 1] = $idinizio_vett[$num1];
                            $n_idinizio_vett[$num1] = $idinizio_vett[$app_richiesti_vett['id'] + 1];
                            $n_idfine_vett[$app_richiesti_vett['id'] + 1] = $idfine_vett[$num1];
                            $n_idfine_vett[$num1] = $idfine_vett[$app_richiesti_vett['id'] + 1];
                            if ($debug == "on") {
                                global $passo;
                                echo $passo;
                                for ($i = 0; $i < $profondita['attuale']; $i++) {
                                    echo "&nbsp;&nbsp;";
                                }
                                echo "<b>" . $profondita['attuale'] . "</b> libera vicini a {$appartamento} da " . $n_idinizio_vett[$app_richiesti_vett['id'] + 1] . " a " . $n_idfine_vett[$app_richiesti_vett['id'] + 1] . " in " . $n_app_richiesti_vett[$app_richiesti_vett['id'] + 1] . "<br>";
                            }
                            # fine if ($debug == "on")
                            liberasettimane($n_idinizio_vett, $n_idfine_vett, $limiti_var, $anno, $fatto, $appartamento_vett, $nuova_profondita, $n_app_richiesti_vett, $n_app_prenota_id2, $app_orig_prenota_id, $inizio_prenota_id, $fine_prenota_id, $app_assegnabili_id, $n_prenota_in_app_sett2, $dati_app, $nome_tab_prenota);
                            if ($debug == "on") {
                                echo $passo;
                                for ($i = 0; $i < $profondita['attuale']; $i++) {
                                    echo "&nbsp;&nbsp;";
                                }
                                echo "<b>" . $profondita['attuale'] . "</b> fatto libera vicini a {$appartamento} {$fatto}<br>";
                            }
                            # fine if ($debug == "on")
                            if ($fatto == "SI") {
                                $n_app_prenota_id = $n_app_prenota_id2;
                                $n_prenota_in_app_sett = $n_prenota_in_app_sett2;
                                $val = $appartamento_vett[$app_richiesti_vett['id'] + 1];
                                $appartamento_vett[$app_richiesti_vett['id'] + 1] = $appartamento_vett[$num1];
                                $appartamento_vett[$num1] = $val;
                                break;
                            }
                            # fine if ($fatto == "SI")
                        }
                        # fine if ((string) $n_app_richiesti_vett[$num1] != "")
                    }
                    # fine if ($provato[$idinizio_vett[$num1]][$idfine_vett[$num1]][$app_richiesti_vett[$num1]] != "SI")
                }
                # fine for $num1
                if ($fatto != "SI") {
                    $riprova_senza_app_liberato = $appartamento;
                }
            } else {
                if ($app_richiesti_vett[$app_richiesti_vett['id']] == ",tutti,") {
                    $app_assegnabili_id[$id_prenota_lib] = "v";
                } else {
                    if (str_replace(",", "", $app_richiesti_vett[$app_richiesti_vett['id']]) != $app_richiesti_vett[$app_richiesti_vett['id']]) {
                        $app_assegnabili_id[$id_prenota_lib] = $app_richiesti_vett[$app_richiesti_vett['id']];
                    }
                }
                liberasettimane($idinizio_vett, $idfine_vett, $limiti_var, $anno, $fatto, $appartamento_vett, $nuova_profondita, $app_richiesti_vett, $n_app_prenota_id, $app_orig_prenota_id, $inizio_prenota_id, $fine_prenota_id, $app_assegnabili_id, $n_prenota_in_app_sett, $dati_app, $nome_tab_prenota);
            }
            # fine elseif ($app_richiesti[',vicini,'] == "SI")
            if ($fatto == "SI") {
                $app_prenota_id = $n_app_prenota_id;
                $prenota_in_app_sett = $n_prenota_in_app_sett;
                for ($num1 = $idinizio; $num1 <= $idfine; $num1++) {
                    $prenota_in_app_sett[$app_prenota_id[$id_prenota_lib]][$num1] = "";
                }
                # fine for $num1
                $appartamento_vett[$app_richiesti_vett['id']] = $app_prenota_id[$id_prenota_lib];
                $app_prenota_id[$id_prenota_lib] = "";
            } else {
                $appartamento_vett[$app_richiesti_vett['id']] = "";
                aggiorna_app_aggiunti($limiti_var, $limiti_var_orig, $app_orig_prenota_id, $app_prenota_id, $inizio_prenota_id, $fine_prenota_id, $prenota_in_app_sett);
            }
            # fine else if ($fatto == "SI")
            $inizio_prenota_id[$id_prenota_lib] = "";
            $fine_prenota_id[$id_prenota_lib] = "";
            $app_assegnabili_id[$id_prenota_lib] = "";
        } else {
            $appartamento_vett[$app_richiesti_vett['id']] = $appartamento;
        }
        $appartamento = $appartamento_vett;
    }
    # fine if ($fatto == "SI" and $app_richiesti_vett[',numero,'])
    # Se si era liberato un appartamento ma non se ne sono trovati altri vicini riprovo
    if ($riprova_senza_app_liberato) {
        $n_lista_app_ric = "";
        for ($num1 = 0; $num1 < $dati_app['totapp']; $num1++) {
            $numapp = $dati_app['posizione'][$num1];
            if ($numapp != $riprova_senza_app_liberato and $riprova_app[$numapp] != "NO") {
                $n_lista_app_ric .= $numapp . ",";
            }
        }
        # fine for $num1
        $n_lista_app_ric = substr($n_lista_app_ric, 0, -1);
        $app_richiesti_vett[$app_richiesti_vett['id']] = incrocia_app_richiesti($app_richiesti_vett[$app_richiesti_vett['id']], $n_lista_app_ric);
        if ((string) $app_richiesti_vett[$app_richiesti_vett['id']] != "") {
            $nuova_profondita = $profondita;
            $nuova_profondita['attuale']++;
            $nuova_profondita['controllato_tutti_occupati'] = "NO";
            $n_app_prenota_id = $app_prenota_id;
            $n_prenota_in_app_sett = $prenota_in_app_sett;
            if ($debug == "on") {
                global $passo;
                echo $passo;
                for ($i = 0; $i < $profondita['attuale']; $i++) {
                    echo "&nbsp;&nbsp;";
                }
                echo "<b>" . $profondita['attuale'] . "</b> <em>" . date("H:i:s") . "</em> riprova " . $app_richiesti_vett['id'] . " negli app " . $app_richiesti_vett[$app_richiesti_vett['id']] . "<br>";
            }
            # fine if ($debug == "on")
            $app_richiesti_vett['id'] = $app_richiesti_vett['id'] - 1;
            liberasettimane($idinizio_vett, $idfine_vett, $limiti_var, $anno, $fatto, $appartamento_vett, $nuova_profondita, $app_richiesti_vett, $n_app_prenota_id, $app_orig_prenota_id, $inizio_prenota_id, $fine_prenota_id, $app_assegnabili_id, $n_prenota_in_app_sett, $dati_app, $nome_tab_prenota);
            if ($fatto == "SI") {
                $app_prenota_id = $n_app_prenota_id;
                $prenota_in_app_sett = $n_prenota_in_app_sett;
                $appartamento = $appartamento_vett;
            } else {
                aggiorna_app_aggiunti($limiti_var, $limiti_var_orig, $app_orig_prenota_id, $app_prenota_id, $inizio_prenota_id, $fine_prenota_id, $prenota_in_app_sett);
            }
        }
        # fine if ((string) $app_richiesti_vett[$app_richiesti_vett['id']] != "")
    }
    # fine if ($riprova_senza_app_liberato)
    if ($primo_ciclo == "SI" and $fatto == "SI") {
        $risul_agg = aggiorna_tableprenota($app_prenota_id, $app_orig_prenota_id, $tableprenota);
        if (!$risul_agg) {
            $fatto = "NO";
        }
    }
    # fine if ($primo_ciclo == "SI" and $fatto == "SI")
}