/**
 * Konvertiert eine Datenstruktur in einen JSON-String
 *
 * @param arr - Die Datenstruktur, die in einen JSON String konvertiert werden soll
 * @example     var json_string = array2json(['ein', {einfaches: 'beispiel'}]);
 * 		var json = array2json({"ein":"anderes","einfaches":false,"Beispiel":[],"zahlen":[1,2,3],"info":{"name":"guido"}});
 */
function array2json(arr) {
    var parts   = [];
    var is_list = (Object.prototype.toString.apply(arr) === '[object Array]');

    for(var key in arr) {
    	var value = arr[key];
        if(typeof value == "object") {                  // Custom handling for arrays
            if(is_list) parts.push(array2json(value));  /* :RECURSION: */
            else parts[key] = array2json(value);        /* :RECURSION: */
        } else {
            var str = "";
            if(!is_list) str = '"' + key + '":';

            //Custom handling for multiple data types
            if(typeof value == "number") str += value;  // Numbers
            else if(value === false) str += 'false';    // The booleans
            else if(value === true) str += 'true';
            else str += '"' + value + '"';              // All other things

            parts.push(str);
        }
    }
    var json = parts.join(",");

    if(is_list) return '[' + json + ']';                // Return numerical JSON
    return '{' + json + '}';                            // Return associative JSON
}
/** ----------- **/

function zur_suche(showresult)
{
    if (uebergabe_suchestart) {
        window.location.href=t3url+uebergabe_suchestart+'&showresult='+showresult;
    }
    else {
        window.location.href=t3url+uebergabe+'&showresult='+showresult;
    }
}
function zum_zielgebiet(showresult)
{
    window.location.href=t3url+uebergabe+'&detail=zielgebiet&showresult='+showresult;
}
function zum_hotel(showresult,startposition_hotel,zielgebiets_kenner)
{
    part=str_hinfo.split('#');
    var tmp_title = part[3].replace("&", "%26");
    window.location.href=t3url+uebergabe+'&detail=hotel&showresult='+showresult+'&startposition='+startposition_hotel+'&zielgebiets_kenner='+zielgebiets_kenner+'&temp_title_hotel='+tmp_title;
}
function skippen(zaehler,sortierung)
{
    window.location.href=t3url+uebergabe+'&startposition='+zaehler+'&sortierung='+sortierung+'&detail=termine'+skip_and_order;
}
function order(sortierung)
{
    window.location.href=t3url+uebergabe+'&sortierung='+sortierung+'&detail=termine&startposition=0'+skip_and_order;
}
//_______________________________________________________________________________
function zurueck_ter()
{
    window.location.href=t3url+uebergabe+'&detail=termine&'+skip_and_order+'&'+ter_back;
}
//_______________________________________________________________________________
function jetzt_buchen(kenner_ba)
{
    var form=document.forms['bengine'];
    if(onlineR()){
        form.detail.value="buchung";
        if(kenner_ba>=0){
            form.vakanz.value=vak_data[kenner_ba];
        }
        else{
            form.vakanz.value=anzeige_vakanz;
        }

        // Omniture Tracking
        // hidden Feld (gesetzt in Hidden_fields.php)
        form.omniParams.value = HSELNR + '|' + TOPHOTEL;

        form.id.value=typo_book_id;
        form.method = 'POST';
        form.action=vak_suc_action;

        form.submit();
    }

}

function onlineR()
{
    if(document.bengine.refresh.value=='1'){
        var errStr="Klik a.u.b. eerst op Zoeken!"
        alert(errStr)
        return false;
    }
    return true;
}

//_______________________________________________________________________________
function vakASF() {
    this.erika  = "Erika";
    this.xmlReq = null;
    this.vakstring = '';
    sterm = '';
    this.onAjaxSuccess = function(){
        slp = this.xmlReq.responseText;
        slp = slp.split(";");
        var terminal = slp[0];
        if(terminal!= '')
            sterm = '&terminal='+terminal;
        else
            sterm = '';
        if (typeof this.vakstring == 'undefined' || this.vakstring == '') {
            return false;
        }
        document.bengine.terminal_vak.value = terminal;
        window.vak.location.href = this.vakstring+sterm;
    }
    this.onAjaxError = function(){
        if(typeof this.vakstring == 'undefined' || this.vakstring == '')
            return false;
        window.vak.location.href = this.vakstring+sterm;
    }
}
//_______________________________________________________________________________

//______________________________________________________________________________
function TTin_array(item,arr) {
    for(p=0;p<arr.length;p++) {
        var tmp_bid = arr[p].split('%');
        if (item==tmp_bid[9]) return true;
    }
    return false;
}

//_______________________________________________________________________________
function show_smile(val,alt){
    var smile_images="";
    if(val==1)
        smile_images='<img src="'+pfad_images+'/smile.gif" alt="'+alt+'" border="0" width="13" height="12">';
    return smile_images;
}

function pageSkip(seiten,apage,sortierung){
    for (t=1;t<=seiten;t++)
    {
        zaehler=(t-1)*20;
        if(t!=apage) {
            document.write('<a href="javascript:void(0);" onClick="skippen('+zaehler+',\''+sortierung+'\');return false;" class="tt_pageskip" title="Aanbiedingen van zijkant '+t+'">'+t+'</a>');
        }
        else {
            document.write('<span class="tt_pageaktive">'+t+'</span>');
        }
        if(t!=seiten) document.write('&nbsp;&nbsp;');
    }
}

function pageSkipBySteps(seiten,apage,sortierung){
    seiten = parseInt(seiten);
    apage = parseInt(apage);
    if(seiten >3)
    {
        if(apage<=2){
            var mPageStart = 1;
            var mPageEnde  = 3;
        }
        else if(apage>(seiten-1)){
            var mPageStart = (seiten-2);
            var mPageEnde  = seiten;
        }
        else{
            var mPageStart = (apage - 1);
            var mPageEnde  = (apage + 1);
        }
    }
    else
    {
        var mPageStart = 1;
        var mPageEnde  = seiten;
    }

    for(t=mPageStart;t<=mPageEnde;t++)
    {
        var zaehler=(t-1)*20;
        if(t!=apage){
            document.write('<td width="32" class="tt_font21"><a href="javascript:void(0);" onClick="skippen('+zaehler+',\''+sortierung+'\');return false;" class="tt_pageskip" title="Aanbiedings op pagina '+t+'">'+t+'</a>&nbsp;-&nbsp;</td>');
        }
        else{
            document.write('<td width="32" class="tt_font21"><span class="tt_pageaktive">'+t+'</span>');
            if(apage < seiten){
                document.write('&nbsp;-&nbsp;');
            }
            document.write('</td>');
        }
    }

}

//_______________________________________________________________________________
function flugzeiten(veranstalter,abflughafen,B_ID,zielflughafen)
{
    var top=screen.height;
    var left=screen.width;
    posx=((left/2)-190);
    posy=((top/2)-150);
    window.open(flugzeiten_url+'&start='+abflughafen+'&ziel='+zielflughafen+'&Buchungs_ID='+B_ID+'&veranstalter='+veranstalter,'Flugzeiten','toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=no,copyhistory=no,width=500,height=250,screenX='+posx+',screenY='+posy+',left='+posx+',top='+posy+'');
}

function twoDigitTer(val){
    return parseInt(val,10)<10?"0"+parseInt(val,10):parseInt(val,10);
}

function genHinRueckTag (thisdauer, thisdatum, ttkenn)
{
    var tmp_rueck=parseInt(thisdatum)+parseInt((thisdauer*60*60*24));
    var dt = new Date(tmp_rueck*1000);
    var woTage;

    if (window['nurflug'] !== 1) {
        woTage = ["zo.","ma.","di.","wo.","do.","vr.","za."];
    } else {
        woTage = ["Zondag.","Maandag.","Dinsdag.","Woensdag.","Donderdag.","Vrijdag.","Zaterdag."];
    }
    
    if(ttkenn==1){
        var rueckTag = woTage[dt.getDay()]+" "+twoDigitTer(dt.getDate())+"."+twoDigitTer(dt.getMonth()+1)+"."+dt.getFullYear();
    }
    else{
        var rueckTag = woTage[dt.getDay()]+" "+twoDigitTer(dt.getDate())+"."+twoDigitTer(dt.getMonth()+1)+"."+String(dt.getFullYear()).substr(2);
    }
    var dt2 = new Date(thisdatum*1000);
    if(ttkenn==1){
        var hinTag = woTage[dt2.getDay()]+" "+twoDigitTer(dt2.getDate())+"."+twoDigitTer(dt2.getMonth()+1)+"."+dt2.getFullYear();
    }
    else{
        var hinTag = woTage[dt2.getDay()]+" "+twoDigitTer(dt2.getDate())+"."+twoDigitTer(dt2.getMonth()+1)+"."+String(dt2.getFullYear()).substr(2);
    }
    var thereturn = hinTag+'#'+rueckTag;
    return thereturn;
}

var mon_sh = new Array("jan.","feb.","maart","april","mei","juni","juli","aug.","sept.","okt.","nov.","dec.");
var mon_long = new Array("januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december");

function formatDateToFr (thisdate,tt_kenn)
{
    var txt_dat_fr = '';
    var tmp_showDat = thisdate.split(".");
    for (dd=0;dd<tmp_showDat.length;dd++)
    {
        tmp_showDat[dd] = tmp_showDat[dd].replace(" ","");
        if (dd>0 && dd<3){
            if(tmp_showDat[dd].substr(0,1) == '0'){
                tmp_showDat[dd] = tmp_showDat[dd].substr(1,1);
            }
            tmp_showDat[dd] = parseInt(tmp_showDat[dd]);
            if (dd==2){
                var tmp_numMon = tmp_showDat[dd]-1;
                if(tt_kenn==1){
                    tmp_showDat[dd] = mon_long[tmp_numMon];
                }
                else{
                    tmp_showDat[dd] = mon_sh[tmp_numMon];
                }
            }
        }
        if (dd>0){
            txt_dat_fr += String(tmp_showDat[dd])+'&nbsp;';
        }

    }
    return txt_dat_fr;
}

/* Werte für google track setzen */
function setGoogleTrackParams(this_go_hotelname, this_type){

    if (typeof(tt_go_tt_countries) != 'undefined' && typeof(tt_go_tt_region) != 'undefined'){
        var this_go_tt_countries = getSelectedText('tt_countries', 1);
        var this_go_tt_region = getSelectedText('tt_region', 1);
        if (this_go_hotelname != '')
            this_go_hotelname = editSpecialChars(this_go_hotelname);

        if(typeof(urchinTracker) != 'undefined'){
            if (this_type == 'guide'){
                if (this_go_hotelname != '')
                    urchinTracker('/guide/'+this_go_tt_countries+'/'+this_go_tt_region+'/'+this_go_hotelname+'/');
                else
                    urchinTracker('/guide/'+this_go_tt_countries+'/'+this_go_tt_region+'/');
            }
            else if (this_type == 'abandon'){
                urchinTracker('/hotel/'+tt_go_tt_countries+'/'+tt_go_tt_region+'/'+tt_go_hotelname+'/abandon/');
            }
        }
    }

}

function disableLinksByElement(index) {
    var idElement, i, end, anchors, vakanzImg, height, width;

    idElement = document.getElementById('offer' + index)
    anchors = idElement.getElementsByTagName('a');
    end     = anchors.length
    for (i=0; i < end; i++) {
        anchors[i].onclick = function() {
            return false;
        };
    }

    // Button ausschalten
    vakanzImg = document.getElementById('btnTermine' + index);
    height = vakanzImg.height;
    width  = vakanzImg.width;

    vakanzImg.src = '/images/spacer.gif';                      // Alternativ-Image setzten
    vakanzImg.width  = width;
    vakanzImg.height = height;
}

var Termin = {

    clearBothDiv      : '<div class="clearBoth"><img src="/images/spacer.gif" width="1" height="1" alt=""></div>',
    spacerImg         : '<img src="/images/spacer.gif" width="1" height="1" alt="">',
    kpFolder          : httpHost + 'kunden_parameter/' + ordner_name + '/',

    offerGroupNum     : null,
    offerShowCount    : null,
    offerSite         : null,
    offerSites        : null,
    offerCount        : null,
    offerObj          : null,
    offerObjLength    : null,

    sortKey           : '',
    sortGroupArr      : [],
    sortGroupArrDir   : [],

    vakanzCheckId     : null,
    vakanzOpenId      : null,
    vakanzErrorStatus : false,
    vakanzErrorNum    : 0,
    vakanzErrorIndex  : null,
    vakanzCheckIndex  : null,

    vakanzOffer       : null,
    vakanzData        : null,
    initVakanzFlag    : false,
    vakanzCount       : 0,

    firstVakanzError  : true,
    cancelVacancy     : [],

    overlayDiv        : null,
    waitingTxt        : null,

    bucvak            : null,
    zaehler           : 1,
    alt_point         : 0,

    found_vacancy     : false,

    nurflug           : false,

    init : function () {
        var tmpBID;
        for (var i = 0; i < this.offerObjLength; i++) {
            this.sortGroupArr[i]    = '';
            this.sortGroupArrDir[i] = 'asc';
            this.cancelVacancy[i]   = false;

            if (this.vakanzOffer != null && typeof this.vakanzOffer == 'object') {
                tmpBID  = this.offerObj[i].Buchungs_ID;
                if (typeof this.vakanzOffer[tmpBID] != 'undefined') {
                    this.offerObj[i].vakanzString = this.vakanzOffer[tmpBID].vakanzString;
                    this.offerObj[i].vakanzStatus = 1;
                }
            }
        }
        this.initVacancies();
    },


    /**
     * generiert alle angeforderten Termin Angebote
     *
     * @param {Object} obj
     * @return string
     */

    getOffersHtml : function () {
        var n_AltFlag=0,n_TopFlag=0,noneborder="",Fpos="",show_akt_vak="";
        anz_buchung=new Array();
        this.offerCount = this.offerObj.length;

        var countBegin     = (this.offerSite - 1) * this.offerShowCount;
        var countEnd       = ((this.offerSite - 1) * this.offerShowCount) + (this.offerShowCount - 1);
        var strHTML        = '';
        var rowCss         = 'terminRow';
        var obj;
        var next;
        var isAltHeaderSet = false;
        var scrollIndex    = 0;
        var val = '';

        // wenn auf der aktuellen Seite keine Angebote vorhanden sind
        if (this.offerSite > 1 && this.offerCount <= countBegin) {
            var newPageSkip = (this.offerSite * 1) - 1;
            this.skipPage(newPageSkip);
        }

        for (var i = countBegin; i <= countEnd; i++) {

            var zl_kurz="",parts_hotel_attribut="",zl_lang="",attribut_img="",alt_attribut="";

            obj     = this.offerObj[i];
            next    = i + 1;
            objNext = this.offerObj[next];

            if (typeof obj != 'undefined') {

                //---Veranstalter Logo
                va_logo=obj.veranstalter.split("-");
                if (va_logo[1]) {
                    va_bild=KID+'-'+va_logo[0];
                }
                else {
                    va_bild=va_logo[0];
                }

                if(va_logo[0]=="VTO") {
                    vto_check=1;
                }

                //---AngebotsIcon //$lm_icon[$k]
                switch(obj.lm_icon) {
                    case 0:
                        alt_attribut="";
                        break;
                    case 1: {
                        if((typeof obj.Buchungs_ID == 'string' && obj.Buchungs_ID.substring(0,3)<=41 || va_logo[0]=="TSYS") && port==654)
                            alt_attribut='Last Minute aanbieding';
                        else
                            alt_attribut="";
                        break;
                    }
                    case 2: {
                        alt_attribut='Vroegboekvoordeel';
                        break;
                    }
                    case 3: {
                        alt_attribut='Vroegboekvoordeel';
                        break;
                    }
                    case 4: {
                        alt_attribut='Kinderkorting';
                        break;
                    }
                    case 5: {
                        if((obj.Buchungs_ID.substring(0,3)<=41 || va_logo[0]=="TSYS") && port==654) {
                            alt_attribut='Last Minute aanbieding<br>Kinderkorting';
                        }
                        else {
                            alt_attribut='Kinderkorting';
                        }
                        break;
                    }
                    case 6: {
                        alt_attribut='Vroegboekvoordeel<br>Kinderkorting';
                        break;
                    }
                    case 7: {
                        alt_attribut='Vroegboekvoordeel<br>Kinderkorting';
                        break;
                    }
                }

                mangAttribut = alt_attribut;
                obj.alt_attribut = alt_attribut;
                obj.zl_kurz = "";
                obj.zl_lang = "";

                //---Zusatzleistung
                if(obj.zleistung_e!=""){
                    obj.zl_kurz="/ZL";
                    obj.zl_lang="<br>"+obj.zleistung_e;
                }

                //Abflughafen
                abflug=obj.abflughafen_e.split(";");
                obj.abflug = abflug;

                //---Dauer
                str_dauer=(obj.dauer_e>1)?"Tage":"Tag";


                // --- SortHeader ganz oben---
                if (i == countBegin) {
                    strHTML += this.getHeaderHtml();
                    if (obj.alternativeTermin == 1) {
                        isAltHeaderSet = true;
                    }
                }

                obj.tt_class_row='tt_terRowTermin';
                
                // Angebote 100%
                if (obj.alternativ_termin_e == 0) {
                    if(n_TopFlag == 0) {
                        n_TopFlag = 1;

                        strHTML += '<table class="tt_terAreaIn" cellpadding="0" cellspacing="0" border="0">';
                        strHTML += '<tr><td class="tt_terAreaInBack">';
                        strHTML += '    <div class="tt_terRowBlank">';
                        strHTML += '        <div class="tt_padtop tt_padbot tt_padleftEx tt_padrightEx">';
                        strHTML += '            <div class="tt_terRowHead">';
                        strHTML += '                <div class="tt_padleft2 tt_padright2 tt_font16b tt_terRowHeadTxt">';
                        strHTML += '                 Resultaten die voldoen aan uw zoekopdracht:';
                        strHTML += '                </div>';
                        strHTML += '                <div>';
                        strHTML += '                </div>';
                        strHTML += '            </div>';
                        strHTML += '        </div>';
                        strHTML += '    </div>';
                        strHTML += '</td></tr>';
                        strHTML += '</table>';
                    }
                } else{
                    //Alternative Angebote
                    if(this.alt_point!=1) {
                        linienchecker = 0;
                        obj.tt_class_row='tt_terRowTerminAlt';

                        //Header
                        strHTML += '<table class="tt_terAreaIn tt_martop2" cellpadding="0" cellspacing="0" border="0">';
                        strHTML += '<tr><td class="tt_terAreaInBack">';
                        strHTML += '    <div class="tt_terRowBlank">';
                        strHTML += '        <div class="tt_padtop tt_padbot tt_padleftEx tt_padrightEx">';
                        strHTML += '            <div class="tt_terRowHead">';
                        strHTML += '                <div class="tt_padleft2 tt_padright2 tt_font16b tt_terRowHeadTxt">';
                        strHTML += '                 '+anzTermAlt+' Alternatieve vakanties passend bij uw zoekopdracht:';
                        strHTML += '                </div>';
                        strHTML += '            </div>';
                        strHTML += '        </div>';
                        strHTML += '    </div>';
                        strHTML += '</td></tr>';
                        strHTML += '</table>';

                        this.alt_point=1;
                    }
                }

                // --- Angebote ---
                if (!(typeof obj.vakanzString == 'string' && obj.vakanzString != "")) {
                    strHTML += this.getOfferRowHtml(obj, i, scrollIndex);
                }
            }
            scrollIndex++;
        }

        if (this.offerCount == 0) {

            var myUrl = '';
            myUrl += window.location.protocol + '//';
            myUrl += window.location.hostname;
            myUrl += window.location.pathname;
            myUrl += window.location.search;
            myUrl += '&offerGroupNum=' + this.offerGroupNum +'&offerShowCount=' + this.offerShowCount;

            strHTML += '<div class="terminNoOffers">Leider stehen aktuell keine Angebote zur Verfügung.<br />Klicken Sie <a href="javascript:window.location.href=\'' + myUrl + '\'">hier</a>, um die Angebote zu aktualisieren.<br />Eventuell sind keine Angebote zur dieser Zimmer- und Verpflegungskombination verfügbar.</div>';
        }

        return strHTML;
    },

    /**
	 * generiert Termin-Angebots-Zeile
	 *
	 * @param {Object} obj
	 * @param int index
	 * @param int scrollIndex
	 * @return string
	 */

    getOfferRowHtml : function (obj, index, scrollIndex) {
        var abflug, va_logo, va_bild, str_dauer, parts_hotel_attribut;
        var rowHTML = '';
        //---Verpflegung
        parts_hotel_attribut=obj.hotel_attribut.split(";");
        var ttvf=getvf(parts_hotel_attribut[0]);
        if (ttvf != '') {
            ttvf = '<br>'+ttvf;
        }

        //Abflughafen
        abflug = obj.abflughafen_e.split(";");

        //---Veranstalter Logo
        va_logo = obj.veranstalter.split("-");
        if (va_logo[1]) {
            va_bild = KID + '-' + va_logo[0];
        } else {
            va_bild = va_logo[0];
        }

        //---Dauer
        if (this.alt_point == 1) {
            obj.tt_class_row='tt_terRowTerminAlt';
        } else {
            obj.tt_class_row='tt_terRowTermin';
        }
        
        str_dauer=(obj.dauer_e>1)?"Tage":"Tag";
        rowHTML += '<div id="offer' + index + '" style="position:relative;">';
        rowHTML += '<table class="tt_terAreaIn22" cellpadding="0" cellspacing="0" border="0"><tr>';
        rowHTML += '    <td class="tt_terAreaInBack">';
        rowHTML += '        <table class="tt_terRowBlank22" cellpadding="0" cellspacing="0" border="0">';
        rowHTML += '        <tr>';
        rowHTML += '            <td class="tt_padtop tt_padbot tt_padleft3 tt_padright">';
        rowHTML += '                <table cellpadding="0" cellspacing="0" border="0" class="'+obj.tt_class_row+'">';
        rowHTML += '                <tr>';
        rowHTML += '                    <td style="width:1px;" valign="top"><img src="'+pfad_images+'/spacer.gif" width="1" height="1" alt="" border="0"></td>'

        var tmpDatumReturn, tmpDatAnz, tmpDatAnzFr;
        str_dauer = (obj.dauer_e>1)?"nachten":"nacht";
        if (window['nurflug'] != 1) {
            tmpDatumReturn = genHinRueckTag (obj.dauer_e, obj.datum_e,0);
            tmpDatAnz      = tmpDatumReturn.split("#");
            tmpDatAnzFr    = formatDateToFr(tmpDatAnz[0],0);

            //---Abreisetag
            rowHTML += '                    <td class="tt_ter_colA" valign="top"><div class="tt_font27b tt_padleft2 tt_padtop4">'+tmpDatAnzFr+'</div></td>';
            //---Dauer
            rowHTML += '                    <td class="tt_ter_colB" valign="top" style="text-align:center;"><div class="tt_font27b tt_padtop4">'+obj.dauer_e+' '+str_dauer+'</div></td>';
            //---Abflughafen
            rowHTML += '                    <td class="tt_ter_colC" valign="top"><div class="tt_padright2 tt_font27b tt_padtop4">'+abflug[1]+'</div></td>';
            //}
            //------Anbieter
            rowHTML += '                    <td class="tt_ter_colD" valign="top">';
            rowHTML += '                        <div style="padding-left:8px;" class="tt_padtop4"><img src="'+imgservPfad+'/images/content/va_logos/small/'+va_bild+'.gif" alt="Touroperator: '+obj.veranstalter_anzeige+'" title="Touroperator: '+obj.veranstalter_anzeige+'" border="0" width="75" height="21"></div>';
            //Hotelinfo
            rowHTML += '                    </td>';
        } else {
            tmpDatumReturn = genHinRueckTag (obj.dauer_e, obj.datum_e,1);
            tmpDatAnz      = tmpDatumReturn.split("#");
            tmpDatAnzFr    = formatDateToFr(tmpDatAnz[0],0);
            
            var ttwann=tmpDatAnz[0].split(".");
            if(abflug[2] & 16){
                rowHTML += '             <td class="tt_ter_colCCharter" valign="top"><div class="tt_padleft tt_font27b tt_padtop4" class="tt_agb">'+abflug[1]+'</div></td>';
            } else {
                rowHTML += '             <td class="tt_ter_colCCharter" valign="top"><div class="tt_padleft tt_font27b tt_padtop4">'+abflug[1]+'</div></td>';
            }
            //---Dauer
            rowHTML += '                 <td class="tt_ter_colBCharter" valign="top" style="text-align:left;"><div class="tt_font27b tt_padtop4">'+obj.dauer_e+' '+str_dauer+'</div></td>';

            if (typeof(obj.zleistung_e) != 'undefined' && obj.zleistung_e != null) {
                var tmp_flzeit = obj.zleistung_e.replace("H:","Heen:");
            } else {
                var tmp_flzeit = '';
            }
            tmp_flzeit = tmp_flzeit.replace("R:","<p class=tt_fontTerug> Terug:");
            rowHTML += '                    <td class="tt_ter_colACharter" valign="top"><div class="tt_font16CHarterb tt_padleft tt_padtop4">'+ttwann[0]+' '+tmpDatAnzFr+'<br></div><div class="tt_font7 tt_padleft tt_padtop" style="font-weight:normal;">'+tmp_flzeit+'</div></p></td>';
            //------Anbieter
            rowHTML += '                    <td class="tt_ter_colDCharter" valign="top">';
            rowHTML += '                        <div style="padding-left:8px;" class="tt_padtop4"><img src="'+imgservPfad+'/images/content/va_logos/small/'+va_bild+'.gif" alt="Touroperator: '+obj.veranstalter_anzeige+'" title="Touroperator: '+obj.veranstalter_anzeige+'" border="0" width="75" height="21"></div>';
            rowHTML += '                    </td>';
            rowHTML += '                    <td class="tt_ter_colFCharter" valign="top">';
            rowHTML += '                        <div class="tt_padtop2 tt_padright">';
            rowHTML += '                            <table cellspacing="0" cellpadding="0" border="0" width="230">';
        }

        if (window['nurflug'] != 1) {
            //---Leistung
            rowHTML += '                    <td class="tt_ter_colE tt_padtop3" valign="top">';
            rowHTML += '                    <div class="tt_padright tt_font27">'+obj.zimmer_lang_e;
            if(obj.Zimmercodex_e!="" && (va_logo[0]=="NVN")) {
                rowHTML += '                    <br><span class="tt_font27" style="font-weight:normal"><a class="tt_font27" style="text-decoration:none;" href="javascript:void(0);" onClick="oHIB(\''+IFF+'\',\'Hotelinfobox\',\''+Laender_Ref_ID+'\',\'1\',\''+va_logo[0]+'\',\'\',\''+obj.Kategorie_e+'\',\''+obj.datum_e+'\',\''+va_logo[0]+'\',\''+obj.Hotelcodex_e+'\',\''+obj.reiseart_e+'\',\''+obj.programmart_e+'\',\''+obj.Zimmercodex_e+'\',\'termine\',\'\',\'\',\''+obj.tmp_ZF+'\',\'\',\'\',\''+obj.datum_e+'\');return false;">Type: '+obj.Zimmercodex_e.substring(0,(obj.Zimmercodex_e.length-2))+'</a></span>';
            }
            rowHTML += ttvf + ' ' + obj.zl_lang + '<br>';
            rowHTML += '                    </div>';
            //Attr.
            if(obj.alt_attribut!=""){
                rowHTML += '                <div class="tt_martop tt_font18">'+obj.alt_attribut+'</div>';
            }
            rowHTML += '                    </td>';
            rowHTML += '                    <td class="tt_ter_colF" valign="top">';
            rowHTML += '                        <div class="tt_padtop2 tt_padright">';
            rowHTML += '                            <table cellspacing="0" cellpadding="0" border="0">';
        }

        //---Preis + Prüfen
        rowHTML += '                                <tr>';
        rowHTML += '                                    <td class="tt_font7 tt_padright" align="right">vanaf</td>';
        rowHTML += '                                </tr>';
        rowHTML += '                                <tr>';
        rowHTML += '                                    <td class="tt_padright" align="right" valign="bottom"><span class="tt_font13b">&euro;</span>&nbsp;<a class="tt_terho" href="javascript:void(0);" onClick="Termin.checkVakanz(\''+index+'\',undefined);return false;">'+obj.preis_termin_einzel_e+'</a></td>';
        rowHTML += '                                </tr>';
        rowHTML += '                                <tr>';
        rowHTML += '                                    <td><img src="'+pfad_images+'/spacer.gif" border="0" alt="" width="104" height="10"></td>';
        rowHTML += '                                </tr>';
        rowHTML += '                                <tr>';
        if (window['nurflug'] != 1) {
            rowHTML += '                                <td valign="top"><a class="tt_terreser" href="javascript:void(0)" onClick="Termin.checkVakanz(\''+index+'\',undefined);return false;" onMouseOut="document.getElementById(\'btnTermine'+index+'\').src=\''+pfad_images+'/button_check_inactive.gif\';" onMouseOver="document.getElementById(\'btnTermine'+index+'\').src=\''+pfad_images+'/button_check_active.gif\';"><img id="btnTermine'+index+'" src="'+pfad_images+'/button_check_inactive.gif" alt="" border="0"></a></td>';
        } else {
            rowHTML += '                                <td valign="top" align="right"><a class="tt_terreser" href="javascript:void(0)" onClick="Termin.checkVakanz(\''+index+'\',undefined);return false;" onMouseOut="document.getElementById(\'btnTermine'+index+'\').src=\''+pfad_images+'/button_check_inactive.gif\';" onMouseOver="document.getElementById(\'btnTermine'+index+'\').src=\''+pfad_images+'/button_check_active.gif\';"><img id="btnTermine'+index+'" src="'+pfad_images+'/button_check_inactive.gif" alt="" border="0"></a></td>';
        }
        rowHTML += '                                </tr>';
        rowHTML += '                            </table>';
        rowHTML += '                        </div>';
        rowHTML += '                    </td>';
        rowHTML += '                </tr>';
        rowHTML += '                </table>';
        rowHTML += '            </td>';
        rowHTML += '        </tr>';
        rowHTML += '        </table>';
        rowHTML += '    </td>';
        rowHTML += '</table>'
        rowHTML += '</div>';

        return rowHTML;
    },

    /**
	 * generiert HTML Code für geprüfte Vakanz
	 *
	 * @param {Object} obj
	 * @param int index
	 * @param int scrollIndex
	 * @return string
	 */

    getVakanzHtml : function (obj, index, scrollIndex) {
        var vakDataArr, hotelAttributeArr, crsinfoArr;
        
        vakDataArr = obj.vakanzString.split('|');

        hotelAttributeArr = vakDataArr[0].split(';');
        crsinfoArr        = vakDataArr[17].split(';');

        var vakData = {

            hotelAttributeStr  : vakDataArr[0],
            airportDeparture   : vakDataArr[1],
            airportDestination : vakDataArr[2],
            dateFrom           : vakDataArr[3],
            dateTo             : vakDataArr[4],
            vaMessage          : vakDataArr[5],
            statusMessage      : vakDataArr[6],
            price              : vakDataArr[7].split(";"),
            duration           : vakDataArr[8],
            errorCode          : vakDataArr[9],
            bookingId          : vakDataArr[10],
            room               : vakDataArr[11],
            statusBooking      : vakDataArr[12],
            stars              : vakDataArr[13],
            paymentBit         : vakDataArr[14],
            priceCatalog       : vakDataArr[15],
            specialService     : vakDataArr[16],
            crsinfoStr         : vakDataArr[17],
            toMessage          : vakDataArr[18],
            currency           : vakDataArr[19],
            traveller          : vakDataArr[20],
            hotelAttribute     : {
                board          : hotelAttributeArr[0],
                room           : hotelAttributeArr[1],
                tourOperator   : hotelAttributeArr[2],
                countTraveller : hotelAttributeArr[3],
                lcfilter       : hotelAttributeArr[4]
            },
            crsinfo            : {
                serviceCode    : crsinfoArr[0],
                travelType     : crsinfoArr[1]
            }
        }

        var tmpTOArr = vakData.hotelAttribute.tourOperator.split('-');
        vakData.hotelAttribute.tourOperatorShort = tmpTOArr[0];

        this.vakanzData = vakData;

        /* *** Ausgabe geprüfte Vakanz *** */
        var rowHTML = '';
        //Abflughafen
        abflug=obj.abflughafen_e.split(";");

        //---Dauer
        str_dauer=(obj.dauer_e > 1)?"Tage":"Tag";

                // Ausgabe Header (nur bei erster gefundener Vakanz
                if (!this.found_vacancy) {
                    rowHTML += '<div class="tt_terAreaIn" style="clear:both;height:10px;"><img src="'+pfad_images+'/spacer.gif" width="100" height="10" alt="" border="0"></div>';
                    rowHTML += '<table class="tt_terAreaIn" cellpadding="0" cellspacing="0" border="0"><tr>';
                    rowHTML += '    <td class="tt_terVakHead">';
                    rowHTML += '        <div id="freeVacanciesHeadline" class="tt_font24b tt_padleft2">Uw aanbieding</div>';
                    rowHTML += '    </td>';
                    rowHTML += '</tr></table>';
                } else {
                    jQuery("#freeVacanciesHeadline").html("Uw aanbiedingen");
                }
                //---Veranstalter Logo
                var va_logo, va_bild, vto_check;
                va_logo = obj.veranstalter.split("-");
                if (va_logo[1]) {
                    va_bild = KID + '-' + va_logo[0];
                }
                else {
                    va_bild = va_logo[0];
                }

                if(va_logo[0]=="VTO") {
                    vto_check=1;
                }


                //Ausgabe Liste
                rowHTML += '<table id="vak' + obj.Buchungs_ID.replace(/[_]/g, "") + '" class="tt_terAreaIn" cellpadding="0" cellspacing="0" border="0">';
                rowHTML += '<tr>';
                rowHTML += '    <td class="tt_terAreaInBack22">';
                rowHTML += '        <table class="tt_terRowBlank" cellpadding="0" cellspacing="0" border="0">';
                rowHTML += '        <tr>';
                rowHTML += '            <td class="tt_padtop2 tt_padleft3"><img src="'+pfad_images+'/background/4_top_orange_730px.gif" alt="" border="0"></td>';
                rowHTML += '        </tr>';
                rowHTML += '        <tr>';
                rowHTML += '            <td class="tt_padleft3">';
                rowHTML += '                <table class="tt_terRowVak" cellpadding="0" cellspacing="0" border="0">';
                rowHTML += '                <tr>';
                rowHTML += '                    <td valign="top" class="tt_padtop tt_padbot tt_tervaksammel">';
                //Abschnitt 1 (Votre séjour)
                rowHTML += '                        <table cellpadding="0" cellspacing="0" border="0">';
                rowHTML += '                        <tr>';
                rowHTML += '                            <td valign="top" style="width:725px;">';
                rowHTML += '                                <table cellpadding="0" cellspacing="0" border="0">';
                rowHTML += '                                <tr>';
                rowHTML += '                                    <td colspan="3">';
                rowHTML += '                                        <div class="tt_padleft2 tt_padbot tt_padtop tt_font31b">Uw reisgegevens</div>';
                rowHTML += '                                    </td>';
                rowHTML += '                                </tr>';
                rowHTML += '                                <tr>';
                rowHTML += '                                    <td valign="top" width="280">';
                rowHTML += '                                        <table cellpadding="0" cellspacing="0" border="0">';
                rowHTML += '                                        <tr>';
                //---Abreisetag
                var tmpDatumReturn = genHinRueckTag (obj.dauer_e, obj.datum_e, 1);
                var tmpDatAnz      = tmpDatumReturn.split("#");
                var tmpDatAnzFr    = formatDateToFr(tmpDatAnz[0],1);
                var tmpDatReAnzFr  = formatDateToFr(tmpDatAnz[1],1);
                rowHTML += '                                            <td class="tt_font21 tt_padleft2 tt_lineheight20" nowrap>Vertrekdatum:&nbsp;</td>';
                rowHTML += '                                            <td class="tt_font20b tt_lineheight20">'+tmpDatAnzFr+'</td>';
                rowHTML += '                                        </tr>';
                rowHTML += '                                        <tr>';
                //---Rückreisetag
                rowHTML += '                                            <td class="tt_font21 tt_padleft2 tt_lineheight20" nowrap>Retourdatum:&nbsp;</td>';
                rowHTML += '                                            <td class="tt_font20b tt_lineheight20">'+tmpDatReAnzFr+'</td>';
                rowHTML += '                                        </tr>';
                rowHTML += '                                        <tr>';
                //---Dauer
                str_dauer=(obj.dauer_e > 1) ? "nachten" : "nacht";
                rowHTML += '                                            <td class="tt_font21 tt_padleft2 tt_lineheight20" nowrap>Reisduur:&nbsp;</td>';
                rowHTML += '                                            <td class="tt_font20b tt_lineheight20">'+obj.dauer_e +' '+str_dauer+'</td>';
                rowHTML += '                                        </tr>';
                rowHTML += '                                        <tr>';
                //---Abflughafen
                rowHTML += '                                            <td class="tt_font21 tt_padleft2 tt_lineheight20" nowrap>Vertrekluchthaven:&nbsp;</td>';
                rowHTML += '                                            <td class="tt_font20b tt_lineheight20">'+abflug[1]+'</td>';
                rowHTML += '                                        </tr>';
                rowHTML += '                                        </table>';
                rowHTML += '                                    </td>';
                rowHTML += '                                    <td valign="top" width="260">';
                rowHTML += '                                        <table cellpadding="0" cellspacing="0" border="0">';
                rowHTML += '                                        <tr>';
                //------Anbieter
                rowHTML += '                                            <td class="tt_font21 tt_padleft2" nowrap>Touroperator:&nbsp;</td>';
                rowHTML += '                                            <td class="tt_font20b tt_padright"><div class="tt_ter_bgVa"><div style="padding-left:8px; padding-top:10px;"><img src="'+imgservPfad+'/images/content/va_logos/small/'+va_bild+'.gif" alt="Touroperator: ' + obj.veranstalter_anzeige /*parts_i[5]*/ +'" title="Touroperator: '+obj.veranstalter_anzeige /*parts_i[5]*/+'" border="0" width="75" height="21"></div></div></td>';
                rowHTML += '                                        </tr>';

                //---------------------
                if (window['nurflug'] != 1) {
                    rowHTML += '                                        <tr>';
                    //---Leistung
                    rowHTML += '                                            <td class="tt_font21 tt_padleft2 tt_padtop" nowrap valign="top">Inbegrepen:&nbsp;</td>';
                    rowHTML += '                                            <td valign="top"><div class="tt_font27 tt_padtop tt_padright">' + obj.zimmer_lang_e;

                    if(obj.Zimmercodex_e != "" && (va_logo[0]=="NVN")) {
                      rowHTML += '<br><span class="tt_font27" style="font-weight:normal"><a class="tt_font27" style="text-decoration:none;" href="javascript:void(0);" onClick="oHIB(\''+IFF+'\',\'Hotelinfobox\',\''+Laender_Ref_ID+'\',\'1\',\''+va_logo[0]+'\',\'\',\''+obj.Kategorie_e/*parts_i[24]*/+'\',\''+obj.datum_e/*parts_i[21]*/+'\',\''+va_logo[0]+'\',\''+obj.Hotelcodex_e/*parts_i[20]*/+'\',\''+obj.reiseart_e/*parts_i[22]*/+'\',\''+obj.programmart_e/*parts_i[23]*/+'\',\''+obj.Zimmercodex_e/*parts_i[19]*/+'\',\'termine\',\'\',\'\',\''+obj.tmp_ZF/*parts_i[25]*/+'\',\'\',\'\',\''+obj.dauer_e/*parts_i[2]*/+'\');return false;">Type: '+obj.Zimmercodex_e.substring(0,(obj.Zimmercodex_e.length-2))+'</a></span>';
                    }
                    //---Verpflegung
                    parts_hotel_attribut=obj.hotel_attribut.split(";");
                    var ttvf=getvf(parts_hotel_attribut[0]);
                    if (ttvf != '') {
                        ttvf = '<br>'+ttvf;
                    }
                    rowHTML += ttvf+'<br>'+obj.zl_lang;
                    if(obj.alt_attribut!=""){
                        rowHTML += '                                    <br><span class="tt_font18 tt_padright tt_padtop">'+obj.alt_attribut+'</span>';
                    }
                    rowHTML += '</div>';
                    rowHTML += '</td>';
                    //Attr.
                    rowHTML += '                                            </td>';
                    rowHTML += '                                        </tr>';
                }
                //---------------------
                rowHTML += '                                        </table>';
                rowHTML += '                                    </td>';
                rowHTML += '                                    <td valign="top" width="185" align="left">';
                //----Preise
                rowHTML += '                                        <table cellpadding="0" cellspacing="0" border="0">';
                rowHTML += '                                        <tr>';
                rowHTML += '                                            <td colspan="2" class="tt_font16b tt_padbot">Uw reissom</td>';
                rowHTML += '                                        </tr>';
                var tmp_tt_alt_kind='';
                var tmp_zahl=0;
                var t=0;
                var p;
                var tmp_personen = mpersonen.split(";");
                if (vakData.price.length > vakData.hotelAttribute.countTraveller) {
                    for(p = 0; p < (vakData.price.length-1); p++) {
                        var txt_reisender = 'Volwassene';
                        if(tmp_personen[p] < 25){
                            txt_reisender = 'kind';
                            if (window['nurflug'] != 1) {
                                tmp_tt_alt_kind = '(' + tmp_personen[p] + ' jaar)';
                            } else {
                                var tt_newAlter=tmp_personen[p];
                                if(tmp_personen[p]==1){
                                    tt_newAlter='&lt; 2';
                                }
                                tmp_tt_alt_kind='('+tt_newAlter+' jaar)';
                            }

                            t++;
                            tmp_zahl=t;
                        }
                        else{
                            tmp_zahl=p+1;
                        }

                        rowHTML += '                                        <tr>';
                        rowHTML += '                                            <td class="tt_font20 tt_lineheight16" width="100" nowrap>'+tmp_zahl+'.&nbsp;'+txt_reisender+' '+tmp_tt_alt_kind+'</td>';
                        rowHTML += '                                            <td class="tt_font20b tt_lineheight16" align="right" width="70" nowrap>&euro;&nbsp;'+vakData.price[p]+'</td>';
                        rowHTML += '                                        </tr>';
                    }
                }
                var gesamtpreis = vakData.price[vakData.hotelAttribute.countTraveller];
                rowHTML += '                                        <tr>';
                rowHTML += '                                            <td class="tt_font25b" style="border-top:1px solid #FF9900;" width="100" nowrap>Totaalprijs</td>';
                rowHTML += '                                            <td class="tt_font11b" style="border-top:1px solid #FF9900;" align="right" width="70" nowrap>&euro;&nbsp;'+gesamtpreis+'</td>';
                rowHTML += '                                        </tr>';
                rowHTML += '                                        </table>';
                rowHTML += '                                    </td>';
                rowHTML += '                                </tr>';
                rowHTML += '                                <tr>';
                rowHTML += '                                    <td valign="top" colspan="2">';
                //----Flugzeiten
                rowHTML += '                                        <div class="tt_padleft2 tt_padtop4"><a class="tt_terinfolink" href="javascript:void(0);" onClick="flugzeiten(\''+obj.veranstalter/*parts_i[6]*/+'\',\''+vakData.airportDeparture /*abflugshafen_e*/+'\',\''+obj.Buchungs_ID /*parts_i[9]*/+'\',\''+vakData.airportDestination/*rueckflugsflughafen_e*/+'\');return false;\"  title="Vliegtijden onder voorbehoud"><img src="'+pfad_images+'/pfeil_blau.gif" border="0" alt="Vliegtijden onder voorbehoud">Bekijk de vluchtgegevens voor deze vakantie <span style=" font-family:Verdana, Arial;font-size:12px;color:#214899;font-weight:normal;"> (onder voorbehoud)</span></a></div>';
                rowHTML += '                                    </td>';
                rowHTML += '                                    <td valign="bottom" align="right">';
                //---Buchen
                rowHTML += '                                        <div class="tt_padright"><a href="javascript:void(0);" onClick="Termin.doBooking('+index+');return false;" onMouseOut="document.getElementById(\'btnTerBu'+index+'\').src=\''+pfad_images+'/button_boeken_inactive.gif\';" onMouseOver="document.getElementById(\'btnTerBu'+index+'\').src=\''+pfad_images+'/button_boeken_active.gif\';">';
                rowHTML += '                                         <img src="'+pfad_images+'/button_boeken_inactive.gif" alt="Boeken" title="Boeken" id="btnTerBu'+index+'" border="0"></a></div>';
                rowHTML += '                                    </td>';
                rowHTML += '                                </tr>';
                rowHTML += '                                </table>';
                rowHTML += '                            </td>';
                rowHTML += '                        </tr>';
                rowHTML += '                        </table>';
                rowHTML += '                    </td>';
                rowHTML += '                </tr>';
                rowHTML += '                </table>';
                rowHTML += '            </td>';
                rowHTML += '        </tr>';
                rowHTML += '        <tr>';
                rowHTML += '            <td class="tt_padbot2 tt_padleft3"><img src="'+pfad_images+'/background/4_end_orange_730px.gif" alt="" border="0"></td>';
                rowHTML += '        </tr>';
                rowHTML += '        </table>';
                rowHTML += '    </td>';
                rowHTML += '</tr>';
                rowHTML += '</table>';

        // Footer ausgeben
        if (!this.found_vacancy) {
            rowHTML += '<table id="freeVacanciesFooter" class="tt_terAreaIn" cellpadding="0" cellspacing="0" border="0">';
            rowHTML += '<tr>';
            rowHTML += '    <td><img src="'+pfad_images+'/background/box_white1_end_760px.gif" alt="" border="0" width="760" height="13"><td>';
            rowHTML += '</tr>';
            rowHTML += '</table>';
        }

        return rowHTML;

    },


    /**
     * liefert SortierHeader (Normal und Alternativen)
     * und SeitenSkip
     *
     * @param int begin
     * @return string
     */

    getSortHeaderHtml : function (begin) {

        var strHTML     = '';

        if (window['nurflug'] != '1') {
            strHTML += '<table class="tt_terHeadSort2" cellpadding="0" cellspacing="0" border="0">';
            strHTML += '    <tr>';
            strHTML += '        <td width="102" style="padding-left:19px;"><div><span class="tt_font26b"><a class="tt_terlink" href="javascript:order(\'termin\');">Vertrekdatum</a></span></td>';
            strHTML += '        <td width="62"><div><span class="tt_font26b"><a class="tt_terlink" href="javascript:order(\'dauer\');">Reisduur</a></span></td>';
            strHTML += '        <td width="130"><div style="padding-left:8px;"><span class="tt_font26b"><a class="tt_terlink" href="javascript:order(\'abflug\');">Vertrekluchthaven</span></td>';
            strHTML += '        <td width="100" style="padding-left:4px;"><span class="tt_font26b">Reisorganisatie</span></td>';
            strHTML += '        <td width="160"><span class="tt_font26b"> 	Verzorging</span></td>';
            strHTML += '        <td width="173"><div style="text-align:right;padding-right:15px;"><span class="tt_font26b"><a class="tt_terlink" href="javascript:order(\'preis\');">Prijs p.p.</a></span></td>';
            strHTML += '        <td>&nbsp;</td>';
            strHTML += '    </tr>';
            strHTML += '</table>';
        } else {
	    strHTML += '<table class="tt_terHeadSort2" cellpadding="0" cellspacing="0" border="0">';
	    strHTML += '    <tr>';
            strHTML += '        <td width="170"><div style="padding-left:19px;"><span class="tt_font26b"><a class="tt_terlink" href="javascript:order(\'abflug\');">Vertrekluchthaven</span></td>';
            strHTML += '        <td width="90"><div><span class="tt_font26b"><a class="tt_terlink" href="javascript:order(\'dauer\');">Reisduur</a></span></td>';
            strHTML += '        <td width="145"><div><span class="tt_font26b"><a class="tt_terlink" href="javascript:order(\'termin\');">Vertrekdatum</a></span></td>';
	    strHTML += '        <td width="100" style="padding-left:4px;"><span class="tt_font26b">Reisorganisatie</span></td>';
	    strHTML += '        <td width="233"><div style="text-align:right;padding-right:15px;"><span class="tt_font26b"><a class="tt_terlink" href="javascript:order(\'preis\');">Prijs p.p.</a></span></td>';
	    strHTML += '        <td>&nbsp;</td>';
	    strHTML += '    </tr>';
	    strHTML += '</table>';
        }

        return strHTML;

    },

    /**
	 * liefert Header
	 *
	 * @return string
	 */
    getHeaderHtml : function () {
        var strHTML = '';

        if (window['nurflug'] != 1) {
            strHTML += '<div class="tt_terAreaIn" style="clear:both;width:height:10px;"><img src="'+pfad_images+'/spacer.gif" width="100" height="10" alt="" border="0"></div>';
            strHTML += '<table class="tt_terHeadSort2" cellpadding="0" cellspacing="0" border="0">';
            strHTML += '    <tr>';
            strHTML += '        <td width="102" style="padding-left:19px;"><div><span class="tt_font26b"><a class="tt_terlink" href="javascript:order(\'termin\');">Vertrekdatum</a></span></td>';
            strHTML += '        <td width="62"><div><span class="tt_font26b"><a class="tt_terlink" href="javascript:order(\'dauer\');">Reisduur</a></span></td>';
            strHTML += '        <td width="130"><div style="padding-left:8px;"><span class="tt_font26b"><a class="tt_terlink" href="javascript:order(\'abflug\');">Vertrekluchthaven</span></td>';
            strHTML += '        <td width="100" style="padding-left:4px;"><span class="tt_font26b">Reisorganisatie</span></td>';
            strHTML += '        <td width="160"><span class="tt_font26b"> 	Verzorging</span></td>';
            strHTML += '        <td width="173"><div style="text-align:right;padding-right:15px;"><span class="tt_font26b"><a class="tt_terlink" href="javascript:order(\'preis\');">Prijs p.p.</a></span></td>';
            strHTML += '        <td>&nbsp;</td>';
            strHTML += '    </tr>';
            strHTML += '</table>';
        } else {
	    strHTML += '<table class="tt_terHeadSort2" cellpadding="0" cellspacing="0" border="0">';
	    strHTML += '    <tr>';
            strHTML += '        <td width="170"><div style="padding-left:19px;"><span class="tt_font26b"><a class="tt_terlink" href="javascript:order(\'abflug\');">Vertrekluchthaven</span></td>';
            strHTML += '        <td width="90"><div><span class="tt_font26b"><a class="tt_terlink" href="javascript:order(\'dauer\');">Reisduur</a></span></td>';
            strHTML += '        <td width="145"><div><span class="tt_font26b"><a class="tt_terlink" href="javascript:order(\'termin\');">Vertrekdatum</a></span></td>';
	    strHTML += '        <td width="100" style="padding-left:4px;"><span class="tt_font26b">Reisorganisatie</span></td>';
	    strHTML += '        <td width="233"><div style="text-align:right;padding-right:15px;"><span class="tt_font26b"><a class="tt_terlink" href="javascript:order(\'preis\');">Prijs p.p.</a></span></td>';
	    strHTML += '        <td>&nbsp;</td>';
	    strHTML += '    </tr>';
	    strHTML += '</table>';
        }

        return strHTML;
    },


    /**
	 * generiert den HTML Code für das Warte Div bei Vakanzprufung
	 *
	 * @param int index
	 * @return string
	 */

    getVakanzWaitingHtml : function (index) {
        var strHTML = '';
        strHTML = '<div id="overlay" style="display:none;position:absolute;top:10px;left:12px;">';
        strHTML = '        <table cellspacing="0" cellpadding="0" border="0" class="tt_terladevak">';
        strHTML = '            <tr>';
        strHTML = '                <td id="pleaseWaitTxt" style="padding-top:30px;" align="center">';
        strHTML = '                    <img src="'+pfad_images+'/vakanz_ani.gif" width="338" height="15" alt="" border="0">';
        strHTML = '                </td>';
        strHTML = '                <td id="cancelLink" class="tt_terladevakCancel">';
        strHTML = '                </td>';
        strHTML = '            </tr>';
        strHTML = '        </table>';
        strHTML = '    </div>';
        return strHTML;
    },

    /**
     * Zeigt das "Bitte warten" Div an
     */
    startOverlay : function (index) {
        this.overlayDiv = document.getElementById("overlay");
        this.waitingTxt = document.getElementById("pleaseWaitTxt");
        this.cancelLink = document.getElementById("cancelLink");
        this.cancelLink.innerHTML = '<a href="javascript:void(0);" class="tt_hotelinfo" onclick="Termin.vakanzCancel('+index+');">afbreken</a>';
        jQuery("#offer" + index).prepend(jQuery(this.overlayDiv));
        jQuery(this.overlayDiv).hide();
        jQuery(this.overlayDiv).fadeIn(250);
        this.vakanzOpenId = index;
    },

    /**
     * Blendet das "Bitte warten" Div aus
     */
    stopOverlay : function () {
        this.vakanzOpenId = null;
        jQuery(this.overlayDiv).fadeOut(250);
        jQuery("#overlay").prependTo(jQuery("#overlayRestPosition"));
    },

    /**
	 * liefert OstfriesenFlagge
	 *
	 * @param {Object} index
	 */

    showStatusbarInfo : function (index) {

        var infoTxt = '';

        infoTxt += this.offerObj[index].hotelCodex + '|';
        infoTxt += this.offerObj[index].IFF + '|';
        infoTxt += this.offerObj[index].travelType + '|';
        infoTxt += this.offerObj[index].tourOperator + '|<br />';
        infoTxt += this.offerObj[index].hotelName + '|';
        infoTxt += ((this.vakanzData != null) ? this.vakanzData.airportDestination : '') + '|';
        infoTxt += this.offerObj[index].boardStr + '|';
        infoTxt += this.offerObj[index].roomCodex;

        return infoTxt;

    },


    /**
	 * skippt den Seiteninhalt und Footer
	 *
	 * @param int site
	 */

    skipPage : function (site) {

        this.offerSite = site;

        this.updateOffersData();
        this.renderContent();

    },

    /**
	 * sortiert die Terminangebote
	 *
	 * @param string sortKey
	 * @raram int updateData
	 */

    sortOffersBy : function (sortKey, updateData) {

        this.sortGroupArr = sortKey;

        SortKenner.firstSort = true;

        if (this.sortKey == '' || this.sortKey != sortKey) {
            this.sortKey = sortKey;
        }

        if (updateData == 1) {
            SortKenner.switchSortKennerUpdate(sortKey);
            var sortOrder = SortKenner[sortKey];
        } else {
            var sortOrder = SortKenner[sortKey];
        }

        var urlParam = null;

        urlParam = {
            'sortKey' : sortKey,
            'sortOrder' : sortOrder,
            'offerObjStr' : this.getJsonString(this.offerGroupNum)
        };

        jQuery.ajax({
            type: "POST",
            url: this.kpFolder + 'tpl/ajax/terminOfferData.php',
            data: urlParam,
            success: function(str){
                if (str != '') {

                    Termin.offerObj[Termin.offerGroupNum] = eval( '(' + str + ')' );
                    SortKenner.switchSortKennerUpdate(sortKey);
                    Termin.sortGroupArrDir[Termin.offerGroupNum] = SortKenner[Termin.sortKey];

                    Termin.vakanzErrorStatus = false;
                    Termin.vakanzErrorNum    = null;
                    Termin.offerSite         = 1;

                    Termin.renderContent();

                }
            }
        });
    },

    /**
     * sortiert die Terminangebote
     *
     * @param {Object} sortKey
     * @param {Object} imgId
     */

    updateOffersData : function (groupNum) {

        if (typeof groupNum == 'undefined') {
            groupNum = this.offerGroupNum;
        }

        if (this.vakanzErrorStatus == true && this.vakanzErrorNum != null && this.vakanzErrorNum < -2) {

            var tmpObj = new Array()
            var x      = 0;

            for (var i = 0; i < this.offerObj.length; i++) {

                if (this.offerObj[i].vakanzStatus != '' && this.offerObj[i].vakanzStatus < -2) {
                    continue;
                }

                tmpObj[x] = this.offerObj[i];

                x++;
            }

            this.offerObj = tmpObj;
            this.vakanzErrorStatus  = false;
            this.vakanzErrorNum     = null;

        }
    },

    /**
	 * austausch des Contents und Footers
	 */

    renderContent : function () {

        setTimeout( function () {
            jQuery('#TERMINOFFERS').html(Termin.getOffersHtml());
        }, 100);

    },


    /**
	 * wechselt den Termincontent- und Footer abhängig von
	 * Zimmer/Verpflegungs Filter
	 *
	 * @param {Object} filterGroup
	 */

    changeOffersByGroup : function (filterGroupNum) {

        if (filterGroupNum != this.offerGroupNum) {

            // scroll manipulation

            if (aktOpenBoxId < 90) aktOpenBoxId = -1;

            var tmpOfferGroupNum = this.offerGroupNum;
            var updateData       = false;

            this.offerGroupNum = filterGroupNum;
            this.offerSite     = 1;

            if (this.sortGroupArr != this.sortKey || (this.sortGroupArr == this.sortKey && this.sortGroupArrDir != this.sortGroupArrDir[tmpOfferGroupNum])) {
                updateData = true;
                this.sortOffersBy(this.sortKey, 1);
            }

            this.updateOffersData(tmpOfferGroupNum);

            var groupCount = this.offerObj.length;
            var idLeft = '';
            var idMiddle = '';
            var idRight = '';
            var cssClass = ''

            for (var i = 0; i < groupCount; i++) {

                idLeft   = 'terminReiterLeft' + i;
                idMiddle = 'terminReiterMiddle' + i;
                idRight  = 'terminReiterRight' + i;
                idBottom = 'terminReiterBottom' + i;

                if (i == this.offerGroupNum) {
                    cssClass = 'Active';
                }
                else {
                    cssClass = '';
                }

                document.getElementById(idLeft).className = 'terminReiterLeft' + cssClass;
                document.getElementById(idMiddle).className = 'terminReiterMiddle' + cssClass;
                document.getElementById(idBottom).className = 'terminReiterBottom' + cssClass;

                if (i == (groupCount - 1)) {
                    document.getElementById(idRight).className = 'terminReiterRight' + cssClass;
                }

            }

            if (!updateData) {
                this.renderContent();
            }
        }
    },

    /* *************************************************************************
     * json Verarbeitung
     **************************************************************************/

    /**
	 * liefert den Json String eines Objektes zurück
	 *
	 * @param int groupNum
	 * @return string
	 */

    getJsonString : function (groupNum) {

        return JSON.encode(this.offerObj[groupNum]);

    },


    /* *************************************************************************
	 * VAKANZPRÜFUNG
	 **************************************************************************/

    /**
	 * prüft, ob User Suchparameter verändert hat
	 *
	 * @return bool
	 */

    checkUserInput : function () {
        if (document.bengine.refresh.value == '1') {
            var errStr = 'Klik a.u.b. eerst op Zoeken!';
            alert(errStr)
            return false;
        }
        return true;
    },


    /**
	 * ausführen der Vakanzprüfung eines Terminangebots
	 *
	 * @param int index
	 */

    checkVakanz : function (index, scrollIndex) {
        if (this.checkUserInput()) {
            
            if (this.vakanzOpenId != null && this.vakanzOpenId != index) {
                this.vakanzOpenId = null;
                this.stopOverlay();
            }

            // Anzeigen des "Bitte warten"-Layers
            this.startOverlay(index);
            this.vakanzOpenId = index;

            this.bucvak = '';

            for (var key in this.offerObj[index]) {
                this.bucvak += this.offerObj[index][key] + '%';
            }

            if(Ano != '') {
                vakas = new vakASF();
                vakas.vakstring = vakanz+'&Buchungs_ID='+this.offerObj[index].Buchungs_ID+'&hotel_attribut='+this.offerObj[index].hotel_attribut;
                var myReq = new TTAjaxRequest(
                    '/kunden_parameter/thomascook_nl/ibe_v2/tpl/get_agtbst.php',
                    {
                        method:'get',
                        params: 'ret_js=1&Ano='+Ano+'&veranstalter_kuerzel='+this.offerObj[index].veranstalter
                    },
                    vakas
                    );
            }
            else {
                jQuery.ajax({
                    type: "POST",
                    url: vakanz,
                    data: vakanz_params + '&Buchungs_ID=' + this.offerObj[index].Buchungs_ID + '&hotel_attribut=' + this.offerObj[index].hotel_attribut + '&doNotAddScript=1',
                    success: function(str){
                        if (str != '') {
                            var result = str.split('###');
                            if (result[0] == 'SUCCESS') {
                                setTimeout( function () {
                                    Termin.vakanzSuccess(result[1], index, scrollIndex);
                                }, 500);
                            } else if (result[0] == 'ERROR') {
                                setTimeout( function () {
                                    Termin.vakanzError(str, index);
                                }, 500);
                            }

                        }
                    },
                    error: function(XMLHttpRequest, textStatus, errorThrown) {
                    }
                });
            }
        }
    },

    /**
	 * Abbrechen der Vakanzprüfung
	 *
	 * @param int index
	 */

    vakanzCancel : function (index) {
        this.vakanzOpenId = null;
        this.cancelVacancy[index] = true;
        this.stopOverlay();
    },

    /**
	 * handling bei VakanzSuccess
	 *
	 * @param string val
	 * @param int index
	 */

    vakanzSuccess : function (val, index, scrollIndex) {
        var vakIndex, vakanz;

        this.firstVakanzError = true;

        if (!this.cancelVacancy[index]) {
            this.vakanzOpenId = null;

            this.offerObj[index].vakanzStatus = 1;
            this.offerObj[index].vakanzString = val;
            this.vakanzCheckIndex = this.offerObj[index].Buchungs_ID;

            if (this.vakanzOffer == null) {
                this.vakanzOffer = {};
            }

            this.vakanzOffer[this.offerObj[index].Buchungs_ID] = this.offerObj[index];

            // älteste Vakanz löschen
            if (this.vakanzCount > 2) {
                vakIndex = -1;
                for (vakanz in this.vakanzOffer) {
                    vakIndex = vakIndex + 1;
                    if (vakIndex == 0) {
                        delete this.vakanzOffer[vakanz];
                        jQuery("table#vak" + vakanz.replace(/[_]/g, "")).fadeOut(250);
                        jQuery("table#vak" + vakanz.replace(/[_]/g, "")).remove();
                    } else if (vakIndex == this.vakanzCount - 1) {
                        this.vakanzOffer[this.offerObj[index].Buchungs_ID] = this.offerObj[index];
                    }
                }
            } else {
                this.vakanzCount++;
            }

            strHTML = this.getVakanzHtml(this.offerObj[index], index, scrollIndex);
            this.stopOverlay();
            jQuery('#offer' + index).fadeOut(250);
            if (!this.found_vacancy) {
                jQuery('#freeVacancies').append(strHTML);
                this.found_vacancy = true;
            } else {
                jQuery('#freeVacanciesFooter').before(strHTML);
            }

        }
        this.cancelVacancy[index] = false;
        
        var urlParam = null;
        var jetzt    = new Date();
        urlParam = {
            'vakanz' : val,
            'bucvak' : array2json(this.offerObj[index]), 
            'tstamp' : jetzt.getTime()
        };
        if (!this.nurflug) {
            urlParam.IFF = window['IFF'];
        } else {
            urlParam.zielgebiets_kenner = window['zielgebiets_kenner'];
            urlParam.nurflug = '1';
        }

        jQuery.ajax({
            type   : "POST",
            url    : ba_submit_path+ordner_name + "/ba_submit_vakrob.php",
            data   : urlParam,
            success: function(str){},
            error  : function(str){}
        });
        var targetOffset  = jQuery("#freeVacancies").offset().top;
        jQuery('html, body').animate({scrollTop : targetOffset }, 1000);

    },

    /**
     * Initialisiere die Vakanzen am Kopf der Seite, nach einem Seitenaufbau.
     */
    initVacancies : function () {
        var index, tmpBID, strHTML;

        this.initVakanzFlag = true;

        for (tmpBID in this.vakanzOffer) {
            this.offerObj.push(this.vakanzOffer[tmpBID]);
            index   = this.offerObj.length - 1;
            strHTML = this.getVakanzHtml(this.vakanzOffer[tmpBID], index, undefined);
            if (!this.found_vacancy) {
                jQuery('#freeVacancies').append(strHTML);
                this.found_vacancy = true;
            } else {
                jQuery('#freeVacanciesFooter').before(strHTML);
            }
            this.vakanzCount++;
        }
        this.initVakanzFlag = false;
    },

    /**
     * Sonderleistungen
     */

    getSpecialService : function () {
        if (this.vakanzData != null) {

            var sParams = 'ServiceCode=' + this.vakanzData.crsinfo.serviceCode
            + '&TourOperator=' + this.vakanzData.hotelAttribute.tourOperator
            + '&StartDate=' + this.vakanzData.dateFrom
            + '&EndDate=' + this.vakanzData.dateTo
            + '&Travellers=' + this.vakanzData.traveller
            + '&Prices=' + this.vakanzData.price
            + '&TravelType=' + this.vakanzData.crsinfo.travelType
            + '&Currency=EUR';
            pSpecialService = new TTSpecialService();
            pSpecialService.setData(this.vakanzData.traveller);
            pSpecialService.request(sParams);

        } else {
            setTimeout( function () {
                Termin.getSpecialService();
            }, 200);
        }
    },


    /**
	 * handling bei VakanzError
	 *
	 * @param string val
	 * @param int index
	 */

    vakanzError : function (val, index) {
        this.vakanzOpenId = null;
        this.stopOverlay();

        if (!this.cancelVacancy[index]) {
            var errorArr = val.split('###');

            var offerRowId = 'offer' + index;
            var vakErrorOverlayDiv = jQuery("#vakanzLayerOverlay").clone();
            jQuery(vakErrorOverlayDiv).attr("id", "vakanzLayerOverlayOffer" + index);
            jQuery("#msgTxt",vakErrorOverlayDiv).html(errorArr[1]).attr("id", "vakanzLayerMsgTxtOffer" + index);
            jQuery("#offer" + index).prepend(vakErrorOverlayDiv);
            jQuery(vakErrorOverlayDiv).fadeTo(250, '0.8');

            disableLinksByElement(index);

            this.offerObj[index].vakanzStatus = errorArr[2];

            this.vakanzOpenId       = null;
            this.vakanzErrorStatus  = true;
            this.vakanzErrorNum     = errorArr[2];
            this.vakanzErrorIndex   = index;
            this.firstVakanzError   = false;

            if (this.offerSites == 1) {
                var tmpStat = true;
                for (var i = 0; i < this.offerObj.length; i++) {
                    if (this.offerObj[i].vakanzStatus == '' || this.offerObj[i].vakanzStatus == 1) {
                        tmpStat = false;
                    }
                }
            }

            if ((this.offerObj.length == 1 && this.offerObj[index].vakanzStatus < -2) || tmpStat) {

                var myUrl = '';
                myUrl += window.location.protocol + '//';
                myUrl += window.location.hostname;
                myUrl += window.location.pathname;
                myUrl += window.location.search;
                myUrl += '&offerGroupNum=' + this.offerGroupNum +'&offerShowCount=' + this.offerShowCount;

                strHTML = '<div class="terminNoOffers">Leider stehen aktuell keine Angebote in dieser Kombination zur Verfügung.<br />Klicken Sie <a href="javascript:window.location.href=\'' + myUrl + '\'">hier</a>, um die Angebote zu aktualisieren.<br />Eventuell sind keine Angebote zur dieser Zimmer- und Verpflegungskombination verfügbar.</div>';

                jQuery('#' + offerRowId).after(strHTML);

            }
            var newIndex = index;
            /* newIndex solange erhöhen, bis ein noch NICHT geprüftes Angebot gefunden wurde;
    		   vakanzStatus: -4 => "ausgebucht"; -2 => "Bestand aktualisiert"; 1 => "BA oder Buchung möglich" */
            while (newIndex < this.offerObjLength
                && this.offerObj[newIndex].vakanzStatus != 'undefined'
                && (this.offerObj[newIndex].vakanzStatus <= -2 || this.offerObj[newIndex].vakanzStatus == 1)) {
                newIndex++;
                if (newIndex == this.offerObjLength) {
                    // Ende der Liste erreicht:
                    this.stopOverlay();
                    break;
                }
            }
            if (newIndex < this.offerObjLength) {
                this.checkVakanz(newIndex, undefined);
            }

        }

        this.cancelVacancy[index] = false;
    },


    /**
	 * führt Aktion zum buchen aus, Weiterleitung zum Schritt buchen
	 *
	 * @param int index
	 * @param bool noSpecialService
	 */

    doBooking : function (index, noSpecialService) {

        var form=document.forms['bengine'];
        if(onlineR()){
            form.detail.value="buchung";
            if(index>=0){
                form.vakanz.value=this.offerObj[index].vakanzString;
            }
            else{
                form.vakanz.value=anzeige_vakanz;
            }

             form.id.value=typo_book_id;
            if(typeof(form.shotel) != 'undefined' && (form.shotel.value=='Hotelname' || form.shotel.value=='Kreuzfahrtname' || form.shotel.value=='Rundreisename'))
                form.shotel.value='';
            form.method = 'POST';
            form.action=vak_suc_action;

            form.submit();
        }
    }


} /* END of Object Termin */

function vakanz_fail_errorbucvak(strErrorBucVak) {
    var strErrorBucVakOut;
    var strsplit1 = strErrorBucVak.split("%");
    var zw_abflh_arr = strsplit1[4].split(";");
    //                        0               1                2                3                4                 5
    strErrorBucVakOut = zw_abflh_arr[1]+"%"+strsplit1[21]+"%"+strsplit1[2]+"%"+strsplit1[6]+"%"+strsplit1[20]+"%"+strsplit1[8];
    // 0 = Abflughafen DLC            1 = Abflugdatum (tmstamp)                 2 = Reisedauer
    // 3 = VA Kürzel                  4 = Hotel/ObjektCode                      5 = Einzelpreis
    return strErrorBucVakOut;
}


