/**
 * Allgemeine Klasse die alle Seiten betrifft (Regionen, Hotels, Termine)
 */

function TTStrecke () {
    /* enthält die gesamten Ajax-Objekte der Anfrage */
    this.objects = [];
    /* Wo befinden wir uns? (Regionen, Hotels, Termine) */
    this.step = '';
    // vorheriger Step
    this.stepOld = '';
    // Step hat sich geändert
    this.stepHasChanged = false;
    /* Aktuelle TopRegion */
    this.topReg = 0;
    /* Aktueller IFF Code */
    this.iff = 0;
    // Regionen wurden bereits aus einer Gruppe ausgewählt
    this.isSingleRegionView = false;
    // Letzte ausgewählte Region
    this.zgk = '';
    // Wert des Flugdauer-Parameters
    this.flugdauer = '';
    
    // Name des Reisezieles
    this.nameTravelTarget = '';
    
    // Name der Top-Region
    this.nameTopRegion = '';
    
    // Name des letzten Hotels
    this.nameHotel = '';
    
    /* TopHotel-Objekte */
    this.topHotelObjects = [];
    /* Termin-Objekte */
    this.terminObjects = [];
    /* Hotel-Objekte */
    this.hotelObjects = [];
    /* Regions-Objekte */
    this.regionDataObjects = [];
    /* Zielgebiets-Objekte */
    this.regionGroupObjects = [];
    /* Regionsdaten auf der Hotelseite */
    this.hotelRegionData = null;
    /* Hoteldaten auf der Terminseite */
    this.terminHotelData = null;
    /* Regionsdaten auf der Terminseite */
    this.terminRegionData = null;
    
    /* Request Handler für 'doMapFindMarker' */
    this.reqMapMarker = null;
    /* Request Handler für 'getPois' */
    this.reqGetPois = null;
    /* Request Handler für 'getHotelData' */
    this.reqGetHotelData = null;
    /* Request Handler für 'Vakanzprüfung' */
    this.reqGetVacancy = null;
    // request Handler für das Suchformular
    this.reqSearchForm = null;
    
    this.cachedObjects = [];
    // Konfigurationsparameter
    this.config = {};
    // letztes geprüftes Angebot
    this.lastCheckedItem = {};
    // HB-Detail Parameter-Typen
    this.aHbDetailTypes = ['minHotel', 'minPosition', 'minBeach', 'minRooms', 'minFood', 
        'minPool', 'minService', 'minSport', 'minFamily', 'minCulture',
        'minInfraStructure', 'minActivities', 'minSkiArea', 'minSkiOffers',
        'minWellness'];
    // aktuell angezeigte URL        
    this.currentUrl = '';
    
    this.reqByDreamreader = false;
    // Daten für den Skip-Mechanismus
    this.oSkip = {};
    /* Termin-Objekte gruppiert */
    this.terminObjectsGrouped = [];    
    // Tabs für die gruppierten Termin-Objekte
    this.terminObjectsGroupedTabs = [];    
    // Termin-Gruppierungen für die jeweils günstigsten Angebote
    this.terminObjectsGroupedCheapest = [];
    // Aufruf der Seite erfolgt durch die Browser-History
    this.reloadByHistory = false;
}

/**
 * Erstellt die JS-Objekte auf Basis der Engine-Result-Daten
 */

TTStrecke.prototype.buildObjects = function() { 
    this.terminObjects = [];
    this.terminObjectsGrouped = [];
    this.terminObjectsGroupedTabs = [];
    this.terminObjectsGroupedCheapest = [];
    this.objects = objJSON;
    this.stepOld = this.step;
    this.step = this.objects.type;
    
    if (this.stepOld != this.step) {
        this.stepHasChanged = true;
    } else {
        this.stepHasChanged = false;
    }
    
    // Request wurde durch den Dreamreader erzeugt
    if (typeof pStrecke.objects.reqByDreamreader != 'undefined' && pStrecke.objects.reqByDreamreader == '1') {
        this.reqByDreamreader = true;
        jQuery('#reqByDreamreader').val('');
    } else if (typeof pStrecke.objects.reqByDreamreader != 'undefined' && pStrecke.objects.reqByDreamreader != '1') {
        this.reqByDreamreader = false;
    }
    
    switch (this.step) {
        case 'region':
            pTermine.checkedTermineOk = [];
            this.regionGroupObjects = [];
            this.regionDataObjects = [];
            
            for (var i in this.objects.data) {
                if (typeof(this.objects.data[i]) == 'object') {
                    /* Regionsgruppen (Balearen etc.) */
                    this.regionGroupObjects.push(new TTRegionGroupElement(this.objects.data[i]));
                    /* Regionen (Mallorca etc.) */
                    for (var j in this.objects.data[i].regions) {
                        this.regionDataObjects.push(this.objects.data[i].regions[j]);
                    }
                }
            }  
            
            break;
        case 'hotel':
            this.isSingleRegionView = false;
            pTermine.checkedTermineOk = [];
            this.hotelObjects = [];
            this.topReg = this.objects.topRegion;
            this.hotelRegionData = this.objects.regionData;
            
            if (this.objects.data) {
                for (var i = 0; i < this.objects.data.length; i++) {
                    this.hotelObjects.push(new TTHotelElement(this.objects.data[i]));
                }
            }
            
            if (typeof this.objects.jsTopHotels != 'undefined') {
                this.buildTopHotels(this.objects.jsTopHotels);
            }            
            
            break;
        case 'termine':
            // bereits geprüfte Angebote nach einem Reload erneut anzeigen
            if (this.config.collectItems.maxItems > 0) {
                pTermine.checkedTermineOk = aVakReloadObj;
            }
        
            this.isSingleRegionView = false;
            this.terminHotelData = this.objects.hotelData;
            this.terminRegionData = this.objects.regionData;
            
            
            if (typeof this.objects.iff != 'undefined') {
                this.iff = this.objects.iff;
            } else {
                // sollte kein IFF geliefert werden, z.B. bei keinerlei Ergebnissen, so übernimmt man
                // den IFF mit dem angefragt wurde
                this.iff = jQuery('#IFF').val();
            }      
            
            if (pTracking != null && typeof pTracking.track == 'function') {
                pTracking.track('requestTermin');
            }             
            
            if (this.objects.data) {
                // Gruppieren für ajax-basierte Terminseiten
                if (pStrecke.config.groupByServicesAjaxTermin) {
                    for (var i = 0; i < this.objects.data.length; i++) {
                        var group = this.objects.data[i].verpflegungFull + '||' + this.objects.data[i].zimmer;
                        var isInGroup = false;
                        
                        for (var j = 0; j < this.terminObjectsGrouped.length; j++) {
                            if (this.terminObjectsGrouped[j].type == group) {
                                this.terminObjectsGrouped[j].data.push(new TTTerminElement(this.objects.data[i]));
                                isInGroup = true;
                                break;
                            }
                        }
                        
                        if (!isInGroup) {
                            this.terminObjectsGroupedTabs.push({board: this.objects.data[i].verpflegungFull, room: this.objects.data[i].zimmer, summation: false, data: this.objects.data[i]});
                            this.terminObjectsGrouped.push({type: group, data: [new TTTerminElement(this.objects.data[i])]});
                            this.terminObjectsGroupedCheapest.push(new TTTerminElement(this.objects.data[i]));
                        }
                        
                        this.terminObjects.push(new TTTerminElement(this.objects.data[i]));
                    }
                    
                    // Günstigste Angebote in einem zusätzlichen Tab sammeln
                    if (this.terminObjectsGrouped.length > 0) {
                        this.terminObjectsGroupedTabs.push({summation: true, board: '', room: ''});
                        var objCheapest = {type: 'summation', data: []};
                        
                        for (var i = 0; i < this.terminObjectsGroupedCheapest.length; i++) {
                            objCheapest.data.push(new TTTerminElement(this.terminObjectsGroupedCheapest[i].data));
                        }
                        
                        this.terminObjectsGrouped.push(objCheapest);
                    }
                } else {                    
                    for (var i = 0; i < this.objects.data.length; i++) {
                        this.terminObjects.push(new TTTerminElement(this.objects.data[i]));
                    }                    
                }                
            }
            break;    
    }
    
    if (typeof this.objects.numResults != 'undefined') {
        this.oSkip = {
            numResults: this.objects.numResults,
            numToShow: this.objects.numToShow,
            curSite: this.objects.curSite,
            currentPage: this.objects.currentPage,
            position: '1',
            startposition: this.objects.startposition
        };
    }

    // Debugging-Daten verwalten
    if (isDebuggable == '1' && typeof this.objects.debug != 'undefined') {
        pDebug.update(this.objects.debug);
    }
    
    // kundenspezifische Funktion, die nach jedem Request aufgerufen wird
    if (typeof TTMainCustomer.afterRequest == 'function') {
        TTMainCustomer.afterRequest();
    }
}

/**
 * Keine Angebote gefunden
 */

TTStrecke.prototype.noResults = function(type) {
    if (typeof(TTMainCustomer.noResults) == 'function') {
        TTMainCustomer.noResults();
    } else if (typeof(TTTerminListCustomer.noResults) == 'function') {
        TTTerminListCustomer.noResults();
    } else {
        jQuery('#idListContent').html('<div id="idMainNoResults" class="mainNoResults">Mit Ihren aktuellen Reisedaten und Filtern konnten leider keine Angebote gefunden werden.</div>');    
    }
}

/**
 * Initialisierung
 */

TTStrecke.prototype.init = function() {
    // Default-Konfiguration
    this.config = {
        fullAjax: true,
        usingUrlParams: false,
        speakingUrls: false,
        usingUrlSession: false,
        groupByServicesAjaxTermin: false, // Nach Leistungen gruppieren (Veranstalterportale)
        idForm: 'formSearch',           // ID des Such-Formulars
        flightTimes: 1,                 // Flugzeiten bei Vakanz überprüfen                                              
        onVacancyError: {               // Fehler bei der Vakanz
            reloadList: 0,              // Liste neu laden
            insertErrorItem: 0          // Fehler-Termin in Liste einfügen
        },
        collectItems: {                 // Geprüfte Angebote sammeln
            maxItems: 0                 // keine Angebote sammeln
        },
        urlCustomerParams: '/kunden_parameter/' + ordner_name + '/', // URL zu KundenParameter
        dateList: {                     // Angebotsliste
            firstView: 1                // erste Anzeige     
        },
        numToRequest: {                 // Anzahl der anzufragenden Listen-Elemente ($anzahl_treffer_seite)
            hotels : 0,                 // für Hotels
            offers: 10                  // für Termine
        },
        numToShow: {                    // Anzahl der anzuzeigenden Liste-Elemente                 
            hotels : 10,                // für Hotels
            offers: 10                  // für Termine
        },        
        bestOfferModule: false,         // Nutzung des BestOfferModuls
        terminListCalendar: false,      // Nutzung der Kalenderansicht auf der Terminseite
        hideOffers: false,              // Angebote NICHT darstellen (macht bei speziell designten Terminlisten Sinn)
        bookingUrl: '',                 // URL zur Buchungs-Seite
        vacancyUseOnlineIPs: '0',       // OnlineIPs bei Vakanzprüfung verwenden
        topHotels: false,                 // Top-Hotels anzeigen
        reloadListHeaders: {            // Header der Liste nach Ladevorgang ebenfalls reloaden
            regions: false,
            hotels: false,
            offers: false
        },
        reloadListFooters: {            // Header der Liste nach Ladevorgang ebenfalls reloaden
            regions: false,
            hotels: false,
            offers: true
        },
        comeFromMerkzettel: false      // wenn $merkzettel = 1 - kommt der Link vom Merkzettel  
    };
    
    // Session-Id
    if (typeof(ttSesPool) != 'undefined' && ttSesPool != '' && typeof(jQuery('#sessionPool')) != 'undefined') {
        jQuery('#sessionPool').val(ttSesPool);
    }
}

/**
 * Konfiguration setzen
 */

TTStrecke.prototype.setConfig = function(obj) {
    // Fehlende Konfigurationsparameter auf Standard setzen
    for (var i in this.config) {
        if (typeof obj[i] == 'undefined') {
            obj[i] = this.config[i];
        }
    }
    
    this.config = obj;
    
    if (this.config.topHotels) {
        jQuery('#getTopHotels').val('1');
    } else {
        jQuery('#getTopHotels').val('0');
    }
}

/**
 * Ermitteln der Regionsdaten
 * @param {Object} topReg
 */

TTStrecke.prototype.getRegionByTopReg = function(topReg) {
    for (var i in this.regionDataObjects) {
        if (this.regionDataObjects[i].topReg == topReg) {
            return this.regionDataObjects[i];
        }
    }
    
    return {};
}

/**
 * Hoteldaten ermitteln
 * @param {Object} topReg
 */

TTStrecke.prototype.getHotelData  = function(iff) {
    for (var i in this.hotelObjects) {
        if (this.hotelObjects[i].data.iff == iff) {
            return this.hotelObjects[i].data;
        }
    }
    
    return {};
}

/**
 * Städte ermitteln
 */

TTStrecke.prototype.getCities = function() {
    var cities = [];
    
    for (var i in this.objects.data) {
        cities.push(this.objects.data[i].city);
    }
    
    return jQuery.unique(cities);
}

/**
 * Name der Bewertung ermitteln
 * @param {Object} obj
 */

TTStrecke.prototype.getRatingName = function(obj) {
    var aRatings = ['', 'Familienbewertung', 'Freundesbewertung', 'Paarbewertung', 'Singlebewertung'];
    var hbwText = 'Hotelbewertung';
    
    if (document.bengine.vra.value > 0 && document.bengine.vra.value < 5) {
        hbwText = aRatings[document.bengine.vra.value];
    }
    
    if (obj.hbw.num > 1) {
        hbwText += 'en';
    }
    
    return hbwText;
}

/* Callback wenn in den Flash-Angeboten auf einen Link geklickt wird */
TTStrecke.prototype.offerByFlash = function(data) {
    // Agent darf nicht zurückgesetzt werden
    var tmpAgent = jQuery('#agent').val();
    var dataJson = json_decode(data);
    
    jQuery("[type='hidden']").val('');
    
    jQuery('#agent').val(tmpAgent);
    jQuery('#IFF').val(dataJson.iff);
    jQuery('#KID').val(dataJson.KID);
    jQuery('#abflughafen').val(dataJson.afh);
    jQuery('#personen').val(dataJson.personen);
    jQuery('#termin').val(dataJson.termin);
    jQuery('#ruecktermin').val(dataJson.ruecktermin);
    jQuery('#dauer').val('6_' + dataJson.dauer + '-' + dataJson.dauer);
    jQuery('#preis').val('');
    jQuery('#kategorie').val(dataJson.kategorie);
    jQuery('#zimmer').val('');
    jQuery('#verpflegung').val('');
    jQuery('#marke').val(dataJson.va_short);
    jQuery('#detail').val('termine');
    jQuery('#port').val(port);
//    jQuery('#gruppe').val(dataJson.gruppe);

    /* Suche anpassen */
    if (dataJson.personen != '') {
        PERSONS.ADULTS.deepLinkInit(dataJson.personen);
        PERSONS.CHILDS.deepLinkInit(dataJson.personen);       
    }
    
    if (dataJson.afh != '') {
        jQuery('#input_DEPAIRPORT').val(getAfhName(dataJson.afh));
    }
    
    if (dataJson.price > 0) {
        /* bedeutet "beliebig" */
        jQuery("#sliderPrice").slider('value', '1510');
        PRICE.changeTxt('1510');
    }
    
    if (dataJson.dauer != '') {
        DAUER.changeTxt([parseInt(dataJson.dauer), parseInt(dataJson.dauer)]);
        try {
            jQuery("#sliderDauer").slider('values', 0, parseInt(dataJson.dauer));
            jQuery("#sliderDauer").slider('values', 1, parseInt(dataJson.dauer));
        } catch(e) {
            jQuery("#sliderDauer").slider('values', 1, parseInt(dataJson.dauer));   
            jQuery("#sliderDauer").slider('values', 0, parseInt(dataJson.dauer));
        }
    }
    
    if (dataJson.va_short != '') {
        VA.deepLinkInit(dataJson.va_short); 
    }
    
    if (dataJson.termin != '') {
        pCalenderFrom.setDate(dataJson.termin);
        pCalenderTo.setDate(dataJson.ruecktermin);
    }
    
    /* Beginne mit allen Angeboten */
    jQuery('#action').val('group');
    jQuery('#groupType').val('4');
    
    if (jQuery('#agent').val() != '') {
        jQuery('#agent').val(jQuery('#agent').val() + '#');
    } 
    
    if (pTracking != null) {
        pTracking.track('clickOnCoverFlow');
    }
    
    jQuery('#agent').val(jQuery('#agent').val() + 'cf_' + dataJson.offerboxnr + '_' + dataJson.topRegion);
    
    sendPostRequest(pathDevAbsolute + 'booking/ibe_ajax/inc/getTerminData.script.php?', pStrecke.config.idForm, null, 'pTermine.showList()', null, null, true);
}

/**
 * Gibt die einzelnen hbf_detail - Werte zurück
 */

TTStrecke.prototype.getHbfDetailParams = function() {
    var sDetail = jQuery('#hbf_detail').val();
    var oRetData = {};
    var aTmp = [];
    
    var aDetail = sDetail.split('_');
    var aTypes = this.aHbDetailTypes;
    
    for (var i = 0; i < 15; i++) {
        if (typeof aDetail[i] != 'undefined' && aDetail.length > 1) {
            aTmp = aDetail[i].split('|');
            oRetData[aTypes[i]] = {val: aTmp[0], bit: aTmp[1]};            
        } else {
            oRetData[aTypes[i]] = {val: '', bit: ''};            
        }
    }
    
    // verreist als
    if (typeof aDetail[15] != 'undefined') {
        aTmp = aDetail[15].split(':');
        oRetData.travelledAs = {val: aTmp[1], bit: ''};        
    } else {
        oRetData.travelledAs = {val: '', bit: ''};        
    }

    // Reiseart
    if (typeof aDetail[16] != 'undefined') {
        aTmp = aDetail[16].split(':');
        oRetData.travelType = {val: aTmp[1], bit: ''};        
    } else {
        oRetData.travelType = {val: '', bit: ''}; 
    }
    
    return oRetData;
}

/**
 * Zur Terminseite springen
 * 
 * @param {Object} iff
 * @param {Object} zgk
 */

TTStrecke.prototype.goToTermine = function(iff, zgk) {
    jQuery('#reqByDreamreader').val('');
    
    if (!pStrecke.config.fullAjax) {
        if (isTypo3) {
            jQuery('#IFF').val('');
            sendReloadRequest('index.php?id=' + typo_id + '&detail=termine&IFF=' + iff + '&zgk=' + zgk);
        } else {
            sendReloadRequest('index.php?detail=termine&IFF=' + iff + '&zgk=' + zgk);
        }
    } else {
        jQuery('#IFF').val(iff);
        jQuery('#zgk').val(zgk);
        
        if (pStrecke.config.usingUrlSession) {
            // Parameter speichern wenn Parameter über Session gespeichert werden
            sendPostRequest(pathDevAbsolute + 'booking/ibe_ajax/inc/saveParams.ajax.php', 'formSearch');
        }        
        
        // Check, ob das BestOfferModul genutzt werden soll statt der normalen Engine-Anfrage
        if (this.config.bestOfferModule) {
            jQuery('#bomType').val('');
            jQuery('#bomRequest').val('');
            pBom.emptyFilterCollected();
            sendPostRequest(pathDevAbsolute + 'booking/ibe_ajax/inc/getBomData.script.php', 'formSearch', null, 'pTermine.responseBom()');
        } else {
            sendPostRequest(pathDevAbsolute + 'booking/ibe_ajax/inc/getTerminData.script.php', 'formSearch', null, 'pTermine.showList()');
        }
    }
}

/**
 * Zur Terminseite springen (Flug Strecke
 * 
 * @param {Object} iff
 * @param {Object} zgk
 */

TTStrecke.prototype.goToTerminCharter = function( topRegion, byHistory) {
    if (!pStrecke.config.fullAjax) {
        if (isTypo3) {
            sendReloadRequest('index.php?id=' + typo_id + '&detail=termine&topRegion=' + topRegion);
        } else {
            sendReloadRequest('index.php?detail=termine&topRegion=' + zgk);
        }
    } else {
        if (pStrecke.config.usingUrlParams) {
            jQuery('#topRegion').val(topRegion);
        }
        
        if (!byHistory) {
            addHistoryEntry('termine');
        }        
        sendPostRequest(pathDevAbsolute + 'booking/ibe_ajax/inc/getTerminData.script.php?topRegion=' + topRegion, 'formSearch', null, 'pTermine.showList()');
    }
}

/**
 * Baut aus den Top-Hotel-Objekten das richtige Format zusammen
 * @param {Object} data
 */

TTStrecke.prototype.buildTopHotels = function(data) {
    for (var i = 0; i < data.length; i++) {
        var newObj = {};
        newObj['hotelName'] = data[i].Hotel_Name;
        newObj['iff'] = data[i].IFF;
        newObj['laenderRefId'] = data[i].Laender_Ref_ID;
        newObj['termin'] = data[i].Termin;
        newObj['days'] = data[i].anzahl_tage;
        newObj['region'] = data[i].ausgabe_reisezielplus;
        newObj['airport'] = data[i].flughafen;
        newObj['attribute'] = data[i].hotelattribut;
        newObj['country'] = data[i].landplus;
        newObj['city'] = data[i].ort;
        newObj['price'] = data[i].preis;
        newObj['stars'] = data[i].stern;
        newObj['zgk'] = data[i].zielgebiets_kenner;
        newObj['cnt'] = '-1';
        newObj['pathImage'] = '';
        newObj['topReg'] = '';
        
        if (data[i].LatLongDist) {
            var coordinates = data[i].LatLongDist.split(';');
            newObj['coords'] = {dist: coordinates[2], x: coordinates[0], y: coordinates[1]};
        } else {
            newObj['coords'] = {dist:'', x:'', y:''};
        }
        
        newObj['topHotelData'] = data[i];
        
        // Veranstalter
        var aTop = data[i].veranstalter.split(';');
        newObj['topValues'] = {nameLong: aTop[1], nameShort: aTop[0]};
        newObj['touroperator'] = aTop[0];
        
        // Hotelbewertung
        var aHbw = data[i].hbw.split('_');
        newObj['hbw'] = {empf: aHbw[1], num: aHbw[0], rating: aHbw[2]};
        
        this.topHotelObjects.push(new TTHotelElement(newObj));
        // Top-Hotels zu den normalen Hotels am Anfang hinzufügen
        this.hotelObjects.unshift(new TTHotelElement(newObj));
    }
}

/**
 * Zur Regionsseite springen
 * 
 * @param {Boolean} openGroup [true == Regionsuntergruppe anzeigen]
 * @param {String} flugdauer [10000|20000 ...]
 * @param {Boolean} byHistory Aufruf der Funktion erfolgt durch die Browser-History
 */

TTStrecke.prototype.goToRegions = function(openGroup, flugdauer, byHistory) {
    jQuery('#topRegion').val('');
    jQuery('#DESTINATION').val('');
    jQuery('#HOTELNAMES').val('');
    jQuery('#input_DESTINATION').val('Reisezielname eingeben...');
    jQuery('#udfregionen').val('');
    jQuery('#IFFVillage').val('');
    
    if (typeof pStrecke.hotelRegionData != 'undefined' && pStrecke.hotelRegionData != null) {
        var byDreamreader = pStrecke.hotelRegionData.reqByDreamreader;
    } else {
        var byDreamreader = '0';
    }
    
    if (TTMainCustomer.zgkName != '') {
        jQuery('#sessZg').val(TTMainCustomer.zgkName);
    }
    
    // Keine Flugdauer vorhanden
    if (jQuery('#flugdauer').val() == '') {
        if (typeof flugdauer != 'undefined' && flugdauer != '') {
            jQuery('#flugdauer').val(flugdauer);
            pStrecke.flugdauer = flugdauer;
            // BestOfferModul-Daten
        } else if (typeof pStrecke.objects.regionData != 'undefined') {
            jQuery('#flugdauer').val(pStrecke.objects.regionData.regionFlugdauer);
            pStrecke.flugdauer = pStrecke.objects.regionData.regionFlugdauer;
        }
    }
    
    // Gesamte Regionsliste -> Keine Einschränkungen
    if (typeof openGroup == 'undefined' || !openGroup) {
        jQuery('#flugdauer').val('');
        jQuery('#udfregionen').val('');
        pStrecke.isSingleRegionView = false;
    } else {
        // Region soll geöffnet werden
        pStrecke.isSingleRegionView = true;
        
        // wegen Dreamreader
        if (jQuery('#flugdauer').val() == '40000') {
            var regionGroup = this.getRegionGroupCacheFileByTopReg(pStrecke.topReg);
            
            if (regionGroup != '') {
                jQuery('#flugdauer').val(regionGroup);
                pStrecke.flugdauer = regionGroup;
                jQuery('#zgk').val(regionGroup);
                pStrecke.zgk = regionGroup;                
            }
        }
    }
    
    if (pStrecke.nameTravelTarget == '') {
        pStrecke.nameTravelTarget = jQuery('#sessZg').val();
    }
    
    // Seite reloaden
    if (!pStrecke.config.fullAjax) {
        if (pStrecke.isSingleRegionView) {
            if (isTypo3) {
                sendReloadRequest('index.php?id=' + typo_id + '&detail=zielgebiet&flugdauer=' + flugdauer);
            } else {
                sendReloadRequest('index.php?detail=zielgebiet&flugdauer=' + flugdauer);
            }
        } else {
            if (isTypo3) {
                sendReloadRequest('index.php?id=' + typo_id);
            } else {
                sendReloadRequest('index.php');
            }
        }
    } else {    
        sendPostRequest(pathDevAbsolute + 'booking/ibe_ajax/inc/getRegionData.script.php?', 'formSearch', null, 'pRegionen.showList(null, true)');
    }
}

/**
 * hbf_detail verändern
 * 
 * @param {Object} type
 * @param {Object} value
 */

TTStrecke.prototype.setHbDetail = function(type, value) {
    var oHbDetail = this.getHbfDetailParams();
    
    if (typeof oHbDetail[type] != 'undefined') {
        oHbDetail[type].val = value;
    } else {
        alert('Unbekannter HbDetail-Typ! (' + type + ')');
    }
    
    var sHbDetail = '';
    var aTypes = this.aHbDetailTypes;   
    
    for (var i = 0; i < 15; i++) {
       
        sHbDetail += oHbDetail[aTypes[i]]['val'] + '|' + oHbDetail[aTypes[i]]['bit'] + '_'
    }
    
    sHbDetail += 'va:' + oHbDetail.travelledAs.val + '_ar:' + oHbDetail.travelType.val;
    jQuery('#hbf_detail').val(sHbDetail);
}

/**
 * Ermittelt die Regionsgruppe anhand eines Zielgebietes mit Hilfe der Cachefiles
 * 
 * @param {Object} regionName
 */
TTStrecke.prototype.getRegionGroupByCacheFile = function(regionName) {
    var aValues = [];
    var aValues2 = [];
    var newRegionName = '';
    var zgk = '';
    
    for (var i = 0; i < TTREGS_654.length; i++) {
        aValues = TTREGS_654[i].split('|');
        
        if (aValues[0] == regionName) {
            zgk = aValues[2];
            
            for (var j = 0; j < TTREGS_654.length; j++) {
                aValues2 = TTREGS_654[j].split('|');
                
                if (aValues2[1] == zgk) {
                    newRegionName = aValues2[0];
                    jQuery('#udfregionen').val('');
                    jQuery('#sessZg').val(newRegionName);
                    jQuery('#zgk').val(aValues2[2]);
                    pStrecke.zgk = aValues2[2];
                    jQuery('#IFF').val('');
                    jQuery('#IFFOrt').val('');
                    jQuery('#flugdauer').val(aValues2[2]);
                    pStrecke.flugdauer = aValues2[2];
                }
            }             
        }
    }
    
    // Da diese Funktion nur aufgerufen wird, wenn der Reiseziel-Name fehlt, kann
    // man diesen an dieser Stelle auch global überschreiben
    pStrecke.nameTravelTarget = newRegionName;
    
    if (typeof pStrecke.hotelRegionData != 'undefined' && pStrecke.hotelRegionData != null) {
        pStrecke.hotelRegionData.regionName = newRegionName;
    }
    
    return newRegionName;
}

/**
 * Ermittelt aus den Cachefiles die Flugdauer
 * 
 * @param {Object} topReg
 */

TTStrecke.prototype.getRegionGroupCacheFileByTopReg = function(topReg) {
    var aValues = [];
    
    for (var i = 0; i < TTREGS_654.length; i++) {
        aValues = TTREGS_654[i].split('|');
        
        if (aValues[3] == topReg) {
            return aValues[2];
        }
    }
    
    return '';
}

/**
 * Wird nach dem Bauen der einzelnen Listen aufgerufen 
 */

TTStrecke.prototype.afterBuildingList = function() {
    // Zurücksetzen des Histoy-Flags
    pStrecke.reloadByHistory = false; 
}

/**
 * Angebot in den Merkzettel packen
 * @param {Object} regionName
 * @param {Boolean} openWin [1 == Merkzettel PopUp öffnen]
 */

TTStrecke.prototype.addToMerkzettel = function(obj,openWin) {

    var vakData = {
        miff:               pStrecke.iff,
        mhotname:           pStrecke.objects.hotelData.hotelName,
        mzielg:             pStrecke.objects.hotelData.zgk,
        mhotort:            pStrecke.objects.hotelData.city,
        mhotreg:            pStrecke.objects.hotelData.region,
        mhotland:           pStrecke.objects.hotelData.country,
        obj_sterne:         pStrecke.objects.hotelData.stars,
        obj_lrefid:         pStrecke.objects.regionData.laenderRefId,
        port:               pStrecke.objects.port,
        mhin_dlc:           obj.airport.kuerzel,
        mru_dlc:            obj.vakanz.data[2],
        mhin_termin:        obj.dateFromTimestamp,
        mrueck_termin:      obj.vakanz.data[4],
        mbuchungsid:        obj.bookingId,
        mleistungscode:     obj.hotelcodex,
        mpersonen:          obj.hotelattribute.personenUnparsed,
        mabflughafen:       obj.airport.nameLong,
        mhindatum:          obj.dateFromWeekShort + ', ' + obj.dateFromDay + '.' + obj.dateFromMonth + '.' + obj.dateFromYear,
        mrueckdatum:        obj.dateToWeek.substring(0, 2) + ', ' + obj.dateToDay + '.' + obj.dateToMonth + '.' + obj.dateToYear,
        mdauer:             obj.dauer,
        mgesamtpreis:       obj.vakanz.priceAll,
        mhotva:             obj.tourOperator,
        vbit:               obj.verpflegung,
        magent:             agent,
        mpreise:            obj.vakanz.data[7],
        mzcodex:            obj.zimmercodex,
        mleistung:          obj.zimmer,
        mverpflegung:       obj.verpflegungFull,
        mRoom:              obj.zimmer,
        mRoomShort:         obj.unterkunft,
        mBoard:             obj.verpflegungFull,
        mBoardShort:        obj.verpflegung,
        mzusatz:            obj.zusatzleistung,
        mveranstalter_lang: obj.longNameVa,
        mfewoCRS:           obj.crs
    };

    var vakDataString = '';
    jQuery.each(vakData, function(key, value) {
        vakDataString += '&' + key + '=' + escape(value);
    });

    jQuery('#merkzettelContainer').load(
        // Wegschreiben des Angebots in die Session und aktualisieren der Mkz-Vorschau
        ((port == 653 || port == 655) ? '../' : '') + 'teaser/merkzettel/m_merkzettel.php?KID=' + KID + '&HID=' + HID + '&ordner_name=' + ordner_name_strecke + '&' + tmp_sessid + '&TTPIC_IMG_PATH=' + ttPicImgPath + '&ajaxLoad=1&merkzettel_aktion=safe' + vakDataString, 
        function() {
            if (typeof openWin != 'undefined') {
                if (openWin == 1) {
                    // Das Mkz-Popup öffnen
                    window.open(url + 'booking/' + ordner_name_strecke + '/teaser/merkzettel/merkzettel.php?KID=' + KID + '&HID=' + HID + '&ordner_name=' + ordner_name_strecke + '&agent=' + agent + '&merkzettel_aktion=show&' + tmp_sessid, 'merkzettel629888', 'dependent=yes,menubar=no,scrollbars=yes,resizable=no,status=no,toolbar=no,width=633,height=600');
                }
            } else {
                // Nach wegschreiben in die Session und aktualisieren der Mkz-Vorschau das Mkz-Popup öffnen
                window.open(url + 'booking/' + ordner_name_strecke + '/teaser/merkzettel/merkzettel.php?KID=' + KID + '&HID=' + HID + '&ordner_name=' + ordner_name_strecke + '&agent=' + agent + '&merkzettel_aktion=show&' + tmp_sessid, 'merkzettel629888', 'dependent=yes,menubar=no,scrollbars=yes,resizable=no,status=no,toolbar=no,width=633,height=600');
            }
        }
    );    
}