<?php
/**
 * @author Ulrich Hecht <ulrich.hecht@hecht-software.de>
 * @date 02/17/2017
 */

namespace AppBundle\Form;


use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;

class TtSearchRequestType extends AbstractType
{
    /**
     * @param OptionsResolver $resolver
     */
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'csrf_protection' => false,
            'country' => null,
        ));

        $resolver->setAllowedTypes('country', ['AppBundle\Entity\TravelCountry', 'null']);
    }

    /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        if ($options['country'])
        {
            // Find matching destinations.
            // See the structure of the $DESTINATION_CHOICES array below, to understand the following algorithm

            $countryName = $options['country']->getName();

            $destChoices = [];
            $childDestChoices = [];
            $addChildrenState = false;
            foreach (self::$DESTINATION_CHOICES as $label => $id)
            {
                if ($addChildrenState)
                {
                    if ($label[0] == '-')
                    {
                        $destChoices[$label] = $id;
                    }
                    else
                    {
                        $addChildrenState = false;
                    }
                }

                if (mb_strpos($label, $countryName) !== false && !$addChildrenState)
                {
                    if ($label[0] == '-')
                    {
                        $childDestChoices[$label] = $id;
                    }
                    else
                    {
                        $destChoices[$label] = $id;
                        $addChildrenState = true;
                    }
                }
            }
            foreach ($childDestChoices as $label => $id)
            {
                if (!isset($destChoices[$label]))
                {
                    // Add this matching entry (beginning with a "- "), which is the child of a non-matching entry
                    // to the result and act as if this entry is not a child (by removing the leading "- ").
                    //
                    // Example:
                    //  "Naher Osten"
                    //      "- Israel- Totes Meer"
                    //      "- Iran"
                    // When looking for country "Israel", the second entry matches and will be added without the
                    // leading "- " (i.e. "Israel- Totes Meer") to the result list.
                    $destChoices[preg_replace('/^-\s*/', '', $label)] = $id;
                }
            }
        }
        else
        {
            $destChoices = self::$DESTINATION_CHOICES;
        }


        $childChoices = ['< 2 Jahre' => 1];
        for ($i = 2; $i <= 16; ++$i)
        {
            $childChoices[$i .' Jahre'] = $i;
        }
        //$defaultStartDate = new \DateTime('+5 day');
        //$defaultEndDate = new \DateTime('+19 day');

        $builder->setMethod('GET');
        $builder
            ->add('termin', StDateType::class, [
                'required' => false,
                //'empty_data' => $defaultStartDate->format('d.m.Y'),
                //'data' => $defaultStartDate,
            ])
            ->add('ruecktermin', StDateType::class, [
                'required' => false,
                //'empty_data' => $defaultEndDate->format('d.m.Y'),
                //'data' => $defaultEndDate,
            ])
            ->add('dauer', ChoiceType::class, [
                'required' => false,
                'empty_data' => '6_14',
                'placeholder' => 'beliebige Reisedauer',
                'choices' => self::$DURATION_CHOICES,
            ])
            ->add('topRegion', DatalistType::class, [
                'required' => false,
                'choices' => array_keys($destChoices),
            ])
            ->add('t', ChoiceType::class, [
                'choices' => self::$TRAVELER_CHOICES,
            ])
            ;
        for ($i = 0; $i < 3; ++$i)
        {
            $builder->add('child'. $i, ChoiceType::class, [
                'required' => false,
                'placeholder' => 'Kind '. ($i + 1) .' - nicht vorhanden',
                'choices' => $childChoices
            ]);
        }
        $builder
            ->add('abflughafen', ChoiceType::class, [
                'required' => false,
                'placeholder' => 'Abflughafen - beliebig',
                'choices' => self::$DEPARTURE_CHOICES,
            ])
            ->add('shotel', TextType::class, ['required' => false])
            ->add('kategorie', ChoiceType::class, [
                'required' => false,
                'placeholder' => 'Hotel - beliebig',
                'choices' => self::$HOTEL_CATEGORY_CHOICES,
            ])
            ->add('zimmer', ChoiceType::class, [
                'required' => false,
                'placeholder' => 'Zimmertyp - beliebig',
                'choices' => self::$ROOM_TYPE_CHOICES,
            ])
            ->add('verpflegung', ChoiceType::class, [
                'required' => false,
                'placeholder' => 'Verpflegung - beliebig',
                'choices' => self::$FARE_CHOICES
            ])
            ->add('hbfges', ChoiceType::class, [
                'required' => false,
                'placeholder' => 'Bewertung - beliebig',
                'choices' => self::$HOTEL_RATING_CHOICES,
            ])
            ->add('hbfanz', ChoiceType::class, [
                'required' => false,
                'placeholder' => 'Anzahl Bewertungen - beliebig',
                'choices' => self::$HOTEL_RATING_COUNT_CHOICES,
            ])
            ->add('hbfempf', ChoiceType::class, [
                'required' => false,
                'placeholder' => 'Weiterempfehlungen - beliebig',
                'choices' => self::$HOTEL_RECOMM_CHOICES,
            ])
            ->add('familie_kinder', CheckboxType::class, ['required' => false])
            ->add('strand', CheckboxType::class, ['required' => false])
            ->add('wellness', CheckboxType::class, ['required' => false])
            ->add('typ', CheckboxType::class, ['required' => false])
            ->add('sportangebot', ChoiceType::class, [
                'required' => false,
                'placeholder' => 'Sportangebot - beliebig',
                'choices' => self::$SPORT_CHOICES,
            ])
            ;
    }

    public function getBlockPrefix()
    {
        return null;
    }

    private static $TRAVELER_CHOICES = [
        '1 Erwachsene(r)' => 1,
        '2 Erwachsene' => 2,
        '3 Erwachsene' => 3,
        '4 Erwachsene' => 4,
    ];

    private static $DURATION_CHOICES = [
        '1 - 4 Tage' => '9',
        '5 - 8 Tage' => '10',
        '1 Woche' => '6_7',
        '9 - 12 Tage' => '7',
        '13 - 15 Tage' => '3',
        '2 Wochen' => '6_14',
        '16 - 22 Tage' => '12',
        '3 Wochen' => '6_21',
        '> 22 Tage oder länger' => '13',
    ];

    private static $HOTEL_CATEGORY_CHOICES = [
        '2 Sterne' => 0,
        '3 Sterne' => 1,
        '4 Sterne' => 2,
        '5 Sterne' => 3,
    ];

    private static $ROOM_TYPE_CHOICES = [
        'Einzelzimmer' => 5,
        'Doppelzimmer' => 6,
        'Familienzimmer' => 2,
        'Bungalow' => 0,
        'Appartment' => 7,
    ];

    private static $FARE_CHOICES = [
        'nur Übernachtung' => 0,
        'Frühstück' => 1,
        'Halbpension' => 2,
        'Vollpension' => 3,
        'All Inclusive' => 4,
    ];

    private static $HOTEL_RATING_CHOICES = [
        'min. 3.0 von 6.0' => 30,
        'min. 4.0 von 6.0' => 40,
        'min. 5.0 von 6.0' => 50,
        '6.0 von 6.0' => 60,
    ];

    private static $HOTEL_RATING_COUNT_CHOICES = [
        'min. 5' => 5,
        'min. 10' => 10,
        'min. 25' => 25,
        'min. 50' => 50,
        'min. 100' => 100,
    ];

    private static $HOTEL_RECOMM_CHOICES = [
        'min. 80%' => 800,
        'min. 90%' => 900,
        '100%' => 1000,
    ];

    private static $SPORT_CHOICES = [
        'großes Sportangebot' => 10,
        'Tennis' => 0,
        'Golf' => 1,
        'Squash' => 2,
        'Radsport' => 3,
        'Wassersport' => 4,
        'Tauchen' => 5,
        'Reiten' => 6,
        'Wandern' => 7,
        'Surfen' => 8,
    ];

    private static $DEPARTURE_CHOICES = [
        'Nord' => 5000,
        'Süd' => 5001,
        'West' => 5002,
        'Ost' => 5003,
        'Amsterdam (NL)' => 1,
        'Basel-Mulhouse (CH)' => 3,
        'Berlin Brandenburg' => 141,
        'Berlin-Schönefeld' => 4,
        'Berlin-Tegel' => 5,
        'Bremen' => 8,
        'Brüssel (B)' => 9,
        'Brüssel Charleroi (B)' => 67,
        'Dortmund' => 10,
        'Dresden' => 11,
        'Düsseldorf' => 12,
        'Eindhoven (NL)' => 73,
        'Enschede (NL)' => 13,
        'Erfurt-Weimar' => 14,
        'Frankfurt' => 15,
        'Frankfurt-Hahn' => 16,
        'Friedrichshafen' => 17,
        'Genf (CH)' => 18,
        'Graz (A)' => 19,
        'Groningen (NL)' => 81,
        'Hamburg' => 20,
        'Hannover' => 21,
        'Innsbruck (A)' => 23,
        'Karlsruhe' => 24,
        'Kassel-Calden' => 25,
        'Klagenfurt (A)' => 27,
        'Köln-Bonn' => 28,
        'Leipzig/Halle' => 29,
        'Linz (A)' => 30,
        'Lübeck' => 31,
        'Lüttich (B)' => 32,
        'Luxemburg' => 33,
        'Maastricht - Aachen (NL)' => 34,
        'Magdeburg Cochstedt' => 139,
        'Memmingen' => 90,
        'München' => 36,
        'Münster-Osnabrück' => 37,
        'Niederrhein (Weeze)' => 49,
        'Nürnberg' => 38,
        'Paderborn' => 39,
        'Rostock' => 40,
        'Saarbrücken' => 41,
        'Salzburg (A)' => 42,
        'Schwerin' => 43,
        'Strasbourg (F)' => 44,
        'Stuttgart' => 45,
        'Warschau (PL)' => 77,
        'Wien (A)' => 46,
        'Zürich (CH)' => 47,
        'Zweibrücken' => 48,
    ];

    public static $DESTINATION_CHOICES = [
        'Balearen' => 10000,
        '- Formentera' => 627,
        '- Ibiza' => 32,
        '- Mallorca' => 35,
        '- Menorca' => 630,
        'Kanaren' => 10001,
        '- Fuerteventura' => 832,
        '- Teneriffa' => 56,
        '- La Palma' => 675,
        '- Lanzarote' => 676,
        '- Gran Canaria' => 345,
        '- La Gomera' => 50,
        '- El Hierro' => 59,
        '- Graciosa' => 670,
        'Portugal' => 10002,
        '- Faro & Algarve' => 637,
        '- Lissabon & Umgebung' => 674,
        '- Costa da Caparica (Setúbal)' => 636,
        '- Alentejo - Beja / Setubal / Evora / Santarem / Portalegre' => 339,
        '- Porto' => 467,
        '- Costa do Estoril (Lissabon)' => 695,
        '- Costa de Prata (Leira / Coimbra / Aveiro)' => 457,
        '- Costa Verde (Braga / Viana do Castelo)' => 494,
        '- Madeira' => 639,
        '- Madeira Rundreisen' => 2244,
        '- Coimbra / Leiria / Castello Branco' => 338,
        '- Azoren' => 664,
        '- Azoren Rundreisen' => 2246,
        '- Porto Santo' => 2662,
        '- Braga / Vila Real / Viano do Castelo / Branganca' => 2660,
        '- Aveiro / Guarda / Viseu' => 2659,
        '- Costa Azul (Setubal / Beja)' => 2658,
        'Spanisches Festland' => 10003,
        '- Spanien Rundreise' => 2068,
        '- Barcelona & Umgebung' => 2068,
        '- Golf von Almeria' => 63,
        '- Costa del Sol & Costa Tropical' => 62,
        '- Costa Blanca & Costa Calida' => 64,
        '- Costa Brava' => 2013,
        '- Madrid & Umgebung' => 794,
        '- Andalusien Inland' => 229,
        '- Andalusien Rundreisen' => 2253,
        '- Costa Barcelona' => 931,
        '- Costa Dorada' => 2054,
        '- Costa de la Luz' => 61,
        '- Nordspanien - Atlantikküste' => 505,
        '- Costa Azahar' => 2014,
        '- Zentral Spanien' => 793,
        '- Provinz Murcia Inland' => 2661,
        '- Provinz Valencia Inland' => 4202,
        '- Spanien Nordosten & Pyrenäen' => 65,
        '- Ceuta' => 4203,
        '- Melilla' => 4204,
        'Türkei' => 10004,
        '- Rundreisen' => 946,
        '- Side & Alanya' => 643,
        '- Kemer & Beldibi' => 644,
        '- Istanbul & Umgebung' => 373,
        '- Antalya & Belek' => 434,
        '- Kusadasi & Didyma' => 651,
        '- Dalaman - Fethiye - Ölüdeniz' => 646,
        '- Ayvalik, Cesme & Izmir' => 652,
        '- Marmaris & Icmeler & Datca' => 647,
        '- Bodrum' => 648,
        '- Ost-Thrakien & Marmarameer' => 4108,
        '- Schwarzmeerküste Türkei' => 2511,
        '- Türkei Inland' => 526,
        '- Mersin - Adana - Antakya' => 542,
        'Griechische Inseln' => 10005,
        '- Kreta' => 616,
        '- Rhodos' => 655,
        '- Kos' => 7,
        '- Santorin' => 12,
        '- Korfu & Paxi' => 6,
        '- Mykonos' => 9,
        '- Zakynthos' => 14,
        '- Euböa (Evia)' => 383,
        '- Karpathos & Kasos' => 15,
        '- Lesbos & Lemnos' => 8,
        '- Poros' => 546,
        'Griechische Festland' => 10006,
        '- Athen & Umgebung' => 18,
        '- Thessaloniki' => 625,
        '- Olympische Riviera' => 733,
        '- Chalkidiki' => 534,
        '- Peloponnes' => 382,
        '- Epirus & Westgriechenland' => 553,
        '- Pilion' => 734,
        '- Thessalien & Mittelgriechenland' => 4103,
        'Italien, Malta' => 10007,
        '- Italien Rundreise' => 2235,
        '- Malta Rundreise' => 2513,
        '- Venetien' => 82,
        '- Malta' => 595,
        '- Rom & Umgebung' => 560,
        '- Toskana' => 537,
        '- Emilia Romagna' => 81,
        '- Aostatal & Piemont & Lombardei' => 845,
        '- Neapel & Umgebung' => 76,
        '- Sizilien' => 77,
        '- Sizilien Rundreisen' => 2222,
        '- Apulien' => 464,
        '- Latium' => 3005,
        '- Trentino & Südtirol' => 844,
        '- Oberitalienische Seen' => 2012,
        '- Friaul - Julisch Venetien' => 297,
        '- Ligurien' => 818,
        '- Ischia' => 75,
        '- Sardinien' => 78,
        '- Gardasee' => 2048,
        '- Kalabrien' => 536,
        '- Umbrien' => 817,
        '- Basilikata' => 291,
        '- Dolomiten' => 2046,
        '- Italienische Alpen' => 2047,
        '- Capri' => 79,
        'Marroko, Tunesien Pauschalreisen' => 10008,
        '- Marokko Rundreisen' => 2237,
        '- Tunesien Rundreisen' => 959,
        '- Marokko - Marrakesch' => 126,
        '- Marokko - Atlantikküste: Agadir / Safi / Tiznit' => 125,
        '- Marokko - Atlantikküste: Casablanca / El Jadida / Rabat' => 4200,
        '- Marokko - Inland' => 705,
        '- Tunesien - Monastir' => 614,
        '- Tunesien - Hammamet' => 132,
        '- Tunesien - Insel Djerba' => 133,
        '- Tunesien - Oase Zarzis' => 135,
        '- Tunesien - Norden' => 131,
        '- Tunesien - Inland & Gabès & Sfax' => 136,
        '- Tunesien - Oase Tozeur / Tamerza / Nefta' => 134,
        'Ägypten Pauschalreisen' => 10010,
        '- Nilkreuzfahrten' => 2202,
        '- Rundreisen & Badeurlaub' => 2204,
        '- Hurghada & Safaga' => 350,
        '- Marsa Alam & Quseir' => 330,
        '- Luxor & Assuan' => 349,
        '- Sharm el Sheikh / Nuweiba / Taba' => 351,
        '- Kairo & Gizeh & Memphis & Ismailia' => 348,
        '- weitere Angebote Ägypten' => 2500,
        '- Marsa Matruh & Alexandria' => 4144,
        'Afrika' => 10011,
        '- Kap Verde - Sal' => 585,
        '- Kap Verde - Boavista' => 280,
        '- Kenia - Nairobi & Inland' => 174,
        '- Gambia' => 137,
        '- Kenia - Südküste' => 359,
        '- Kenia - Nordküste' => 358,
        '- Namibia' => 453,
        '- Western Cape (Kapstadt)' => 873,
        '- Senegal' => 139,
        '- Tansania - Sansibar' => 454,
        '- Eastern Cape (Port Elizabeth)' => 4109,
        '- Northern Cape (Kimberley)' => 875,
        '- Gauteng (Johannesburg)' => 883,
        '- KwaZulu-Natal (Durban)' => 881,
        '- Limpopo (Polokwane)' => 879,
        '- Northwest (Mahikeng)' => 876,
        '- Äthiopien' => 4112,
        '- Madagaskar' => 161,
        '- Botswana' => 842,
        '- Malawi' => 1019,
        'Kuba' => 10012,
        '- Kuba - Havanna & Varadero' => 369,
        '- Kuba - Holguin' => 371,
        '- weitere Angebote Kuba' => 2522,
        'Dom. Republik' => 10013,
        '- Dom. Republik - Süden (Santo Domingo)' => 368,
        '- Dom. Republik - Norden (Puerto Plata & Samana)' => 366,
        '- Dom. Republik - Osten (Punta Cana)' => 367,
        'Karibik' => 10014,
        '- Jamaika' => 247,
        '- Curacao' => 582,
        '- Martinique' => 571,
        '- Guadeloupe' => 572,
        '- Barbados' => 245,
        '- Saint-Martin (frz.)' => 4098,
        '- Grenada' => 377,
        '- Puerto Rico' => 251,
        '- Aruba' => 4197,
        '- Tobago' => 378,
        '- Sint Maarten (nl.)' => 4198,
        '- Antigua & Barbuda' => 250,
        '- Bonaire, Sint Eustatius & Saba' => 4110,
        '- Bahamas' => 566,
        '- Saint Kitts & Nevis' => 578,
        '- Cayman Islands' => 581,
        '- St.Lucia' => 249,
        '- Bermuda' => 437,
        '- Saint-Barthélemy' => 2648,
        '- Virgin Islands British' => 680,
        '- Turks & Caicosinseln' => 574,
        '- St. Vincent & Grenadinen' => 747,
        '- Virgin Islands USA' => 4199,
        'USA' => 10015,
        '- New York' => 697,
        '- Illinois & Wisconsin' => 759,
        '- New Jersey & Delaware' => 782,
        '- Florida Ostküste' => 521,
        '- Nevada' => 692,
        '- Florida Orlando & Inland' => 524,
        '- Florida Westküste' => 522,
        '- Florida Südspitze' => 523,
        '- Kalifornien' => 688,
        '- New England' => 886,
        '- Pennsylvania' => 758,
        '- Texas' => 755,
        '- Arizona' => 484,
        '- Georgia' => 757,
        '- Tennessee' => 773,
        '- Louisiana & Mississippi' => 756,
        '- Michigan' => 762,
        'Mexiko' => 10016,
        '- Mexiko: Yucatan / Cancun' => 282,
        '- Mexiko Stadt' => 541,
        '- Mexiko: Acapulco / Oaxaca' => 701,
        '- Mexiko: Pazifikküste' => 704,
        '- Mexiko: Karibikküste' => 2241,
        '- Mexiko: Inland' => 438,
        'Asien' => 10017,
        '- Sri Lanka' => 361,
        '- Malaysia' => 452,
        '- Hongkong & Kowloon & Hongkong Island' => 474,
        '- China - Peking (Beijing)' => 439,
        '- China - Hubei / Shaanxi / Shanxi / Henan' => 2654,
        '- China - Shanghai' => 4141,
        '- Singapur' => 473,
        '- Neu Delhi / Rajasthan / Uttar Pradesh / Madhya Pradesh' => 488,
        '- Vietnam' => 448,
        '- Karnataka / Kerala / A. Pradesh / T. Nadu / Lakkadiven' => 197,
        '- Indonesien: Bali' => 311,
        '- Nepal' => 461,
        '- Punjab / Uttarakhand / Himachal Pradesh & Hoher Norden' => 2629,
        '- Indonesien: Java' => 470,
        '- Indien: Goa' => 360,
        '- Kambodscha' => 843,
        '- Taipeh & Umgebung' => 489,
        '- Bihar / Jharkhand / West Bengal / Odisha & Ostindien' => 2630,
        '- China - Hainan / Guangdong / Hunan / Jiangxi' => 2653,
        '- Indonesien: Insel Bintan & Batam' => 871,
        '- Indonesien: Kleine Sundainseln' => 528,
        '- Laos' => 847,
        '- Myanmar' => 645,
        '- Indien: Maharashtra - Mumbai / Gujarat' => 4201,
        '- Macao' => 708,
        '- Indonesien: Nordosten' => 4166,
        '- Tokio, Osaka, Hiroshima, Japan. Inseln' => 469,
        'Zypern' => 10019,
        '- Zypern Rundreisen' => 2276,
        '- Republik Zypern - Süden' => 620,
        '- Nordzypern' => 99,
        'Dubai, Arabische Halbinsel' => 10020,
        '- Oman Rundreisen' => 2164,
        '- Arabische Halbinsel Rundreisen' => 2273,
        '- Oman' => 532,
        '- Ras Al-Khaimah' => 723,
        '- Dubai' => 353,
        '- Sharjah / Khorfakkan' => 352,
        '- Abu Dhabi' => 354,
        '- Fujairah' => 722,
        '- Ajman' => 724,
        '- Al Ain' => 884,
        '- Bahrain' => 721,
        '- Umm Al Quwain' => 725,
        '- Katar' => 720,
        'Frankreich' => 10021,
        '- Côte d\'Azur' => 2055,
        '- Paris & Umgebung' => 495,
        '- Pays de la Loire' => 4188,
        '- Aquitanien' => 25,
        '- Disneyland Paris' => 2041,
        '- Normandie & Picardie & Nord-Pas-de-Calais' => 1023,
        '- Burgund & Centre' => 2017,
        '- Provence-Alpes-Côte d\'Azur' => 2056,
        '- Languedoc Roussillon' => 2057,
        '- Monaco' => 880,
        '- Franche-Comté & Champagne-Ardenne' => 200,
        '- Korsika' => 23,
        '- Rhone Alpes' => 2042,
        'Nordeuropa' => 10022,
        '- Schweden' => 851,
        '- Dänemark' => 902,
        '- Norwegen' => 813,
        '- Finnland' => 490,
        '- Island' => 449,
        'Südamerika' => 10023,
        '- Brasilien: Distrito Federal (Brasilia)' => 2599,
        '- Brasilien: Ceara (Fortaleza)' => 4170,
        '- Brasilien: Rio Grande de Norte (Natal)' => 4169,
        '- Brasilien: Alagoas (Maceio)' => 4172,
        '- Brasilien: Rio de Janeiro & Umgebung' => 375,
        '- Brasilien: Parana (Curitiba)' => 2592,
        '- Brasilien: Bahia (Salvador da Bahia)' => 4167,
        '- Brasilien: Amazonas (Manaus)' => 4171,
        '- Brasilien: Sergipe (Aracaju)' => 2594,
        '- Brasilien: Rio Grande do Sul (Porto Alegre)' => 2590,
        '- Kolumbien' => 376,
        '- Brasilien: Pernambuco (Recife)' => 374,
        '- Ecuador' => 783,
        '- Peru' => 787,
        '- Venezuela - Isla Margarita' => 440,
        '- Uruguay' => 785,
        '- Argentinien' => 450,
        '- Chile' => 784,
        '- Venezuela - Küste & Inland & Los Roques Archipel' => 293,
        '- Brasilien: Paraiba (Joao Pessoa)' => 2595,
        'Kanada' => 10024,
        '- Ontario' => 766,
        '- Alberta' => 767,
        '- Quebec' => 765,
        '- British Columbia' => 768,
        'Naher Osten' => 10026,
        '- Israel - Tel Aviv & Umgebung' => 510,
        '- Israel- Eilat' => 225,
        '- Israel- Totes Meer' => 727,
        '- Israel' => 511,
        '- Jordanien' => 515,
        '- Israel - Jerusalem & Umgebung' => 509,
        '- Iran' => 2580,
        'Thailand' => 10027,
        '- Bangkok & Umgebung' => 321,
        '- Insel Phuket' => 322,
        '- Insel Ko Samui' => 325,
        '- Nordthailand (Chiang Mai, Chiang Rai, Sukhothai)' => 4128,
        '- Südostthailand (Pattaya, Jomtien)' => 4131,
        '- Khao Lak & Umgebung' => 846,
        '- Krabi & Umgebung' => 4133,
        '- Westthailand (Hua Hin, Cha Am, River Kwai)' => 4130,
        '- Südthailand (Surat Thani, Trang)' => 4132,
        '- Inseln im Golf von Thailand (Koh Chang, Koh Phangan)' => 323,
        '- Inseln in der Andaman See (Koh Pee Pee, Koh Lanta)' => 327,
        '- Nordostthailand (Issan)' => 4129,
        '- sonstige Angebote Thailand' => 2535,
        'Mitteleuropa' => 10028,
        '- Niederlande' => 854,
        '- Irland' => 503,
        '- London & Südengland' => 178,
        '- Wien & Umgebung' => 958,
        '- Salzburg - Salzburger Land' => 2007,
        '- Schottland' => 901,
        '- Belgien' => 855,
        '- Kärnten' => 951,
        '- Österreich Rundreisen' => 2243,
        '- Niederösterreich' => 952,
        '- Wallis' => 934,
        '- Tirol - Osttirol' => 2018,
        '- Salzburg - Salzburg' => 954,
        '- Bern & Berner Oberland' => 916,
        '- Tirol - Innsbruck, Mittel- und Nordtirol' => 956,
        '- Steiermark' => 955,
        '- Graubünden' => 920,
        '- Mittel- & Nordengland' => 179,
        '- Tirol - Westtirol & Ötztal' => 2009,
        '- Oberösterreich' => 953,
        '- Genf' => 918,
        '- Tirol - Region Seefeld' => 2001,
        '- Zürich' => 936,
        '- Luzern & Aargau' => 922,
        '- Uri & Glarus' => 932,
        '- Nordirland' => 905,
        '- Salzkammergut - Salzburg' => 2006,
        '- Burgenland' => 950,
        '- Waadt & Jura & Neuenburg' => 933,
        '- Tirol - Zillertal' => 2004,
        '- St.Gallen & Thurgau' => 926,
        '- Jersey - Kanalinsel' => 962,
        '- Tirol - Paznaun' => 1003,
        '- Bodensee (Österreich)' => 4190,
        '- Tessin' => 930,
        'Deutschland' => 10029,
        '- Allgäu' => 2026,
        '- Baden-Württemberg' => 104,
        '- Bayerisch-Schwaben' => 4196,
        '- Bayerische Alpen' => 2058,
        '- Bayerischer Wald' => 2025,
        '- Berchtesgadener Land' => 2069,
        '- Berlin' => 106,
        '- Bodensee (Deutschland)' => 2028,
        '- Borkum' => 2078,
        '- Brandenburg' => 107,
        '- Bremen' => 112,
        '- Düsseldorf & Umgebung' => 2019,
        '- Eifel & Westerwald' => 2052,
        '- Elbsandsteingebirge' => 2051,
        '- Emsland' => 2037,
        '- Erzgebirge' => 2050,
        '- Fichtelgebirge' => 2030,
        '- Franken' => 2060,
        '- Hamburg' => 113,
        '- Harz' => 2031,
        '- Hessen' => 114,
        '- Hessisches Bergland' => 2072,
        '- Hochschwarzwald' => 4111,
        '- Hunsrück / Taunus' => 2061,
        '- Insel Rügen' => 2032,
        '- Insel Usedom' => 2033,
        '- Köln & Umgebung' => 2020,
        '- Lausitz' => 2071,
        '- Lüneburger Heide' => 2024,
        '- Mecklenburg Ostseeküste' => 2035,
        '- Mecklenburg-Vorpommern' => 115,
        '- Mecklenburgische Seenplatte' => 2034,
        '- Mosel' => 2062,
        '- München' => 264,
        '- Münsterland' => 2074,
        '- Niederbayern' => 2063,
        '- Niedersachsen' => 116,
        '- Nordfriesland & Inseln' => 127,
        '- Nordrhein-Westfalen' => 117,
        '- Nordseeküste und Inseln - sonstige Angebote' => 2036,
        '- Oberbayern' => 2008,
        '- Oberpfalz' => 105,
        '- Ostseeküste' => 2039,
        '- Pfalz' => 2053,
        '- Radtouren und andere Specials' => 3001,
        '- Rheingau' => 2022,
        '- Rheinland' => 2065,
        '- Rheinland-Pfalz' => 118,
        '- Rhön' => 2029,
        '- Ruhrgebiet' => 2059,
        '- Rundreise Deutschland & sonstige Angebote' => 2501,
        '- Saarland' => 119,
        '- Sachsen' => 121,
        '- Sachsen-Anhalt' => 123,
        '- Sauerland' => 2038,
        '- Schleswig-Holstein' => 4102,
        '- Schwarzwald' => 2002,
        '- Schwäbische Alb' => 2066,
        '- Spessart - Odenwald' => 2070,
        '- Teutoburger Wald' => 2021,
        '- Thüringen' => 128,
        '- Thüringer Wald' => 2067,
        'Kroatien, Bulgarien, Osteuropa' => 10030,
        '- Estland' => 838,
        '- Georgien' => 837,
        '- Angebote Rad- und Schiff Kroatien' => 3014,
        '- Insel Brac' => 501,
        '- Insel Hvar' => 500,
        '- Insel Krk' => 507,
        '- Istrien' => 483,
        '- Kroatische Inseln' => 504,
        '- Kvarner Bucht' => 480,
        '- Mitteldalmatien' => 877,
        '- Mittelkroatien' => 301,
        '- Norddalmatien' => 2011,
        '- Slavonien' => 302,
        '- Süddalmatien' => 635,
        '- Lettland' => 836,
        '- Litauen' => 316,
        '- Mazedonien' => 909,
        '- Moldavien' => 835,
        '- Montenegro' => 455,
        '- Polen' => 852,
        '- Bukarest & Umgebung' => 816,
        '- Rumänien' => 110,
        '- Baikalsee' => 892,
        '- Moskau & Umgebung' => 820,
        '- Sankt Petersburg & Russland Nordwest (Murmansk)' => 821,
        '- Serbien' => 2579,
        '- Slowakei' => 850,
        '- Slowenien Inland' => 497,
        '- slowenische Adria' => 628,
        '- Tschechien' => 853,
        '- Ukraine & Krim' => 751,
        '- Plattensee / Balaton' => 2016,
        '- Ungarn' => 849,
        '- Weißrussland' => 834,
    ];
}