/**
 * This file handles the form actions for the searchbox. 
 * Based on the TT Showroom. 
 *
 * @copyright 2010 Traveltainment
 * @version 1.2.4
 * 
 * {@internal
 *  modified 30.03.2010 by Willi Man <wman@traveltainment.de>
 *  modified 06.05.2010 by Willi Man <wman@traveltainment.de>
 *  formActions.js must now handle the leftside QSM and pricegrid QSM
 *  onchange events must be triggered between the two quicksearches
 *  change request 10.06.2010 
 *  The second QSM should not be placed over the pricegrid due to usability issues.
 *  Instead it should be diplayed on the left side. Therefore the synchronization 
 *  between the two QSM versions must be handled different.
 *  modified 06.07.2010
 *  Remove pricegrid QSM related functionality
 *  modified 15.07.2010
 *  Reset param s_ort if one changes the country or region
 *  modified 28.07.2010
 *  Bugfix in method REGION.onChangeAction
 *  modified 05.08.2010
 *  IE bugfixes in connection with deeplinks
 * }
 */

/**
 *******************************************************************************
 * Toggle für GoogleMap
 *******************************************************************************
 */

var GOOGLEMAP = {

    isExpanded : true,
    
    deepLinkInit : function(param) {
        if (param == '1') {
            this.isExpanded = false; 
        }  
    },
            
    toggle : function() {        
        if (this.isExpanded == false) {
            $('#idMap').show();
            $('#headLineMap').html('Landkarte ausblenden');
            $('#headLineMap').attr('class','headLineMap');
            //pTracking.track('mapexpanded');              
        } else {
            $('#idMap').hide();
            $('#headLineMap').html('Landkarte einblenden');  
            $('#headLineMap').removeClass('headLineMap');
            $('#headLineMap').addClass('headLineMapIn');  
            //pTracking.track('mapcollapsed');
              
        }
        this.isExpanded = !this.isExpanded;
    },  
    
    display : function() {
        if (this.isExpanded == true) {
            $('#idMap').show();
            $('#headLineMap').html('Landkarte ausblenden');
            $('#headLineMap').attr('class','headLineMap');
            
            if (TTG.map == null) {                              
                TTG.initializeGoogleMap();
            }     
                    
        } else {
            $('#idMap').hide();
            $('#headLineMap').html('Landkarte einblenden');  
            $('#headLineMap').removeClass('headLineMap');
            $('#headLineMap').addClass('headLineMapIn');                
        }
    }   
}

/**
 *******************************************************************************
 * Toogle für Hoteloption
 *******************************************************************************
 */
var HOTELOPTION = {

    isOpen : false,
    
    show : function() {
        $('#hotelOption').show();
        $('#hotelOptionShow').hide();
        this.isOpen = true;
    },        
    
    deepLinkInit : function(param) {
        if (param == '1') {
            this.isOpen = true; 
        }        
    },
    
    
    set : function(bln) {
        if (bln == true) {
            if (this.isOpen == true) {
                $('#hotelOption').show();
                $('#hotelOptionShow').hide();  
                $('#hotelOptionDefault').hide();  
            } else {
                $('#hotelOption').hide();
                $('#hotelOptionShow').show();  
                $('#hotelOptionDefault').hide();  
            } 
        } else {
            $('#hotelOptionShow').hide();
            $('#hotelOption').hide();
            $('#hotelOptionDefault').show();
        }          
    }    
}

/**
 *******************************************************************************
 * Funktionalitäten für PERSONEN (Erwachsene / Kinder)
 *******************************************************************************
 */

var PERSONS = {

    /**
     * 
     * @param {Object} str
     */
    
    checkPersonenOnChilds : function (str) {
        var value = $('#personen').val();
        var valueArr = value.split(';');
        for (var i = 0; i < valueArr.length; i++) {
            if (valueArr[i] != '' && typeof valueArr[i] != 'undefined' && parseInt(valueArr[i]) < 17) {
                str += ';' + valueArr[i];
            }
        }
        return str;
    },
    
    /**
     * 
     * @param {Object} str
     */
    
    checkPersonenOnAdults : function (str) {
        var value = $('#personen').val();
        var valueArr = value.split(';');
        var adults = '';
        for (var i = 0; i < valueArr.length; i++) {
            if (valueArr[i] != '' && typeof valueArr[i] != 'undefined' && parseInt(valueArr[i]) > 16) {
                adults += valueArr[i] + ';';
            }
        }
        if (adults != '') {
            adults = adults.substr(0, (adults.length - 1));
        }
        var erg = adults + str;
        return erg;
    },
    
    /**
     * Handling ERWACHSENE 
     */
    
    ADULTS : {

        selected : null,
        valueArr : ['', '25', '25;25', '25;25;25', '25;25;25;25'],
    
        /**
         * 
         * @param {Object} action
         * @param {Object} num
         */
        
        changeCss : function (action, num) {
            
            var cssClass = 'adultsChoice'+num;
            
            if (action == 'active') {
                $('.' + cssClass).addClass('active');
            } else {
                $('.' + cssClass).removeClass('active');
            }
        },
        
        /**
         * 
         * @param {Object} action
         * @param {Object} num
         */
        
        mouseAction : function (action, num) {
            
            if (action == 'click') {
                var value     = this.valueArr[num];
                this.selected = num;
                
                for (var z = 1; z <= 4; z++) {
                	
                    if (z != this.selected) {
                    	this.changeCss('', z);
                    } else {
                    	
                    	this.changeCss('active', z);
                    	$('.amountAdultsValue').text(z);
                    }
                }
                
                var val       = PERSONS.checkPersonenOnChilds(value);
                var tmpVal    = $('#personen').val(); 
                $('#personen').val(val);
        
                if (!firstInit && tmpVal != val) {
                    sendSearchForm();
                }
                
            }
            
        },
        
        /**
         * Erstinitialisierung Erwachsene
         * @param {Object} val
         */
        
        deepLinkInit : function (val, valErwachsene) {
            if (typeof valErwachsene != 'undefined' && valErwachsene.length > 0) {
                val = valErwachsene;
            }
            
            if (val != '' && val != '25;25' && typeof val != 'undefined') {
                $('#personen').val(val);
                var tmpArr = val.split(';');
                var z = 0;
                for (var i = 0; i < tmpArr.length; i++) {
                    if (tmpArr[i] != '' && typeof tmpArr[i] != 'undefined' && parseInt(tmpArr[i]) > 16) {
                        z++;
                    }
                }
                
                this.selected = z;
                this.changeCss('active', z);
                
                for (var z = 1; z <= 4; z++) {
                	
                    if (z != this.selected) {
                    	this.changeCss('', z);
                    } else {
                    	this.changeCss('active', z);
                    	$('.amountAdultsValue').text(z);
                    }
                }
            } else {
                this.selected = 2;
                this.changeCss('', 1);
                this.changeCss('active',  2);
                this.changeCss('', 3);
                this.changeCss('', 4);
            }
        }
    },
    
    /**
     * Handling KINDER
     */
    
    CHILDS : {
    
        childItems : [
            {key:'-1', val:' --- '},
            {key:'1', val:'< 2 J.'},
            {key:'2', val:'2 J.'},
            {key:'3', val:'3 J.'},
            {key:'4', val:'4 J.'},
            {key:'5', val:'5 J.'},
            {key:'6', val:'6 J.'},
            {key:'7', val:'7 J.'},
            {key:'8', val:'8 J.'},
            {key:'9', val:'9 J.'},
            {key:'10', val:'10 J.'},
            {key:'11', val:'11 J.'},
            {key:'12', val:'12 J.'},
            {key:'13', val:'13 J.'},
            {key:'14', val:'14 J.'},
            {key:'15', val:'15 J.'},
            {key:'16', val:'16 J.'}
        ],        
    
       changeTxt : function (val, ID) {            
            var childsArr  = new Array();
            var childsTxt  = '';
            var x = 0;
            for (var i = 1; i <= 3; i++) {
                var childID    = '#childCombo' + i;
                if ($(childID)[0] !== undefined) {
                    var childVal   = parseInt($(childID)[0].selectedIndex);
                    if (typeof childVal != 'undefined' && childVal < 17) {
                        childsArr[x] = childVal;
                        x++;
                        if (childVal > 0) {
                            if (childVal == 1) {
                                childsTxt += '< 2 J | ';    
                            } else {
                                childsTxt += childVal + ' J | ';
                            }
                        }
                    }
                }
            }
            childsTxt = childsTxt.substr(0, childsTxt.length - 2);
            $('#childsTxt').html(childsTxt); 
            
        },
        
        /**
         * Set child values implementation
         * @param string elemId
         * @return boolean
         */
        
        setValueImpl : function (elemId) {
            var childsArr  = new Array();
            var childs     = '';
            var childsTxt  = '';
            
            var x = 0;
            for (var i = 1; i <= 3; i++) {
                var childID    = '#' + elemId + i;
                var childVal   = parseInt($(childID)[0].selectedIndex);
                
                if (typeof childVal != 'undefined' && childVal < 17) {
                    childsArr[x] = childVal;
                    x++;
                    if (childVal > 0) {
                        if (childVal == 1) {
                            childsTxt += '< 2 J | ';    
                        } else {
                            childsTxt += childVal + ' J | ';
                        }
                    }
                }
            }
            
            for (var x = 0; x < childsArr.length; x++) {
                if (childsArr[x] != 0) {
                    childs += ';' + childsArr[x];
                }
            }   
           
            var value = PERSONS.checkPersonenOnAdults(childs);
            var tmpVal = $('#personen').val();
            $('#personen').val(value);
            
            if (!firstInit && tmpVal != value) {
        		sendSearchForm();
            } 
            
            return value;
            
        },
        
        /**
         * Set child value
         * @param string elemId
         */
        setValue : function (elemId) {
        	
        	var persons;
        	if (elemId == 'childCombo') {
        		persons = this.setValueImpl('childCombo');
//        		this.setSelectbox(persons, null, null, null, 'childComboPricegrid');
        	} else{
//        		persons = this.setValueImpl('childComboPricegrid');
            	this.setSelectbox(persons, null, null, null, 'childCombo');
        	}
        
        },
          
        /**
         * Erstinitialisierung der Kinder mit deeplinkwerten
         * @param object personen
         * @param int    alter1
         * @param int    alter2
         * @param int    alter3
         */
        deepLinkInit : function (personen, alter1, alter2, alter3) {
            
            this.setSelectbox(personen, alter1, alter2, alter3, 'childCombo');
//            this.setSelectbox(personen, alter1, alter2, alter3, 'childComboPricegrid');
            this.changeTxt();            
        },
        
        /**
         * generate selectbox elements
         * 
         */
        setSelectbox : function (personen, alter1, alter2, alter3, elemId) {
        	
        	// Extra Altersangabe für Kinder wurde genutzt
            if (typeof alter1 != 'undefined') {
                personen += ';' + alter1;
            }
            if (typeof alter2 != 'undefined') {
                personen += ';' + alter2;
            }
            if (typeof alter3 != 'undefined') {
                personen += ';' + alter3;
            }  

            // personen may look like 25;25;7;10;8 (2 adults, 3 children - 7, 10 and 8 years old)
            if (personen) {
                var childsArr = [];
                var valueArr  = personen.split(';');
                var x = 0;
                for (var i = 0; i < valueArr.length; i++) {
                    if (valueArr[i] != '' && typeof valueArr[i] != 'undefined' && parseInt(valueArr[i]) < 17) {                        
                        childsArr[x] = valueArr[i];                        
                        x++;
                    }
                }                                 
            }
            
            var elem; 
            for (var j = 1; j < 4; j++) {
                var bool = false;
                var elementIdCnt = elemId + j;
                elem = document.getElementById(elementIdCnt);
                if (elem) {
                    var options = $(elem).find('option');
                    $(options).remove();
                    
                    for (var i = 0; i < this.childItems.length; i++) {
                        if (childsArr && childsArr[j-1] == this.childItems[i].key) {
                            bool = true;
                        } else {
                            bool = false;
                        }
                        newItem = new Option(this.childItems[i].val, this.childItems[i].key, false, bool);
                        elem.options[elem.length] = newItem;
                    }    
                }       
            }       
        },

        /**
         * Erste Initialisierung
         */
        
        init : function () {
            
            $("#childCombo1").bind("change",function(){ PERSONS.CHILDS.setValue('childCombo');});
            $("#childCombo2").bind("change",function(){ PERSONS.CHILDS.setValue('childCombo');});
            $("#childCombo3").bind("change",function(){ PERSONS.CHILDS.setValue('childCombo');});
            
//            $("#childComboPricegrid1").bind("change",function(){ PERSONS.CHILDS.setValue('childComboPricegrid');});
//            $("#childComboPricegrid2").bind("change",function(){ PERSONS.CHILDS.setValue('childComboPricegrid');});
//            $("#childComboPricegrid3").bind("change",function(){ PERSONS.CHILDS.setValue('childComboPricegrid');});
            
        }
    }  // ENDE CHILDS
} // ENDE PERSONS


/**
 *******************************************************************************
 * Funktionalitäten für VRA (Hotelbewertung)
 *******************************************************************************
 */

var VRA = {
    
    activeVraImg               : 6,
    switchVraImageIntervall    : null,
    emotionsImgSrc             : [],
    emotionsImgArr             : [
                                 imgPfad + '/search/emotions/single.png',
                                 imgPfad + '/search/emotions/freunde.png',
                                 imgPfad + '/search/emotions/beliebig.png',
                                 imgPfad + '/search/emotions/paar.png',
                                 imgPfad + '/search/emotions/familie.png',
                                 imgPfad + '/search/emotions/100prozent.png',
                                 imgPfad + '/search/emotions/super_hotels.png'
                                 ],

    vraStatArray  : [true, false, false, false, false],

    /**
     * MousActions (click, mouseOver, mouseOut)
     * @param {Object} action
     * @param {Object} num
     */    
    mouseAction : function (action, num) {        
        if (action == 'set' || action == 'click') {            
            if (!this.vraStatArray[num]) {                           
                for(var i=0; i<this.vraStatArray.length;i++) {
                    this.vraStatArray[i] = false;
                }
                this.vraStatArray[num] = true;
                this.setValue(num);
                
                this.changeCss(num);
            } else {                
                for(var i=0; i<this.vraStatArray.length;i++) {
                    this.vraStatArray[i] = false;
                }
                this.vraStatArray[0] = true;
                this.setValue(num);
                this.changeCss(0);
            }            
        }     
    },
    
    /**
     * checkBoxChange (click, mouseOver, mouseOut)
     * @param {Object} action
     * @param {Object} num
     */    
    checkBoxChange : function (action, num) {
        if (action == 'set') {            
            if (!this.vraStatArray[num]) {                           
                for(var i=0; i<this.vraStatArray.length;i++) {
                    this.vraStatArray[i] = false;
                }
                this.vraStatArray[num] = true;                                
                this.changeCss(num);
            } else {                
                for(var i=0; i<this.vraStatArray.length;i++) {
                    this.vraStatArray[i] = false;
                }
                this.vraStatArray[0] = true;               
                this.changeCss(0);
            }            
        }     
    },
    
    /**
     * Wechselt die CSS Klasse für Hover Effekte
     * @param {Object} action
     * @param {Object} num
     */
    
    changeCss  : function(num) {
        for(var i=0; i<this.vraStatArray.length;i++) {
            var imgId = 'vraCheck' + i;
            if (this.vraStatArray[i]) {
                $('#'+imgId).removeClass('vraCheckbox' + i);
                $('#'+imgId).removeClass('vraCheckbox' + i + 'Active');
                $('#'+imgId).addClass('vraCheckbox' + i + 'Active');
                
            } else {
                $('#'+imgId).removeClass('vraCheckbox' + i);
                $('#'+imgId).removeClass('vraCheckbox' + i + 'Active');
                $('#'+imgId).addClass('vraCheckbox' + i);
            }
        }        
    },
    
    
    /**
     * 
     */
                         
    imgPreload : function () {
        for (var x = 0; x < this.emotionsImgArr.length; x++) {
            this.emotionsImgSrc[x]        = new Image();
            this.emotionsImgSrc[x].src    = this.emotionsImgArr[x];
        }       
    },

    /**
     * 
     * @param {Object} val
     */

    changeColor : function (val) {
        var legendId = 'vra'+val;
        var curImg = '';
    
        for (var i=0; i <= 4; i++) {
            if (i == val) {
                $("#"+legendId).css({color:'#FDCC00'});
                
                if ($('.searchHotelRatImg' + i)[0]) {
                    $('.searchHotelRatImg' + i)[0].className = 'searchHotelRatImg' + i + 'Hover';
                } else {
                    //$('.searchHotelRatImg' + i + 'Hover')[0].className = 'searchHotelRatImg' + i + 'Hover';
                }
            } else {
                $("#vra"+i).css({color:'#FFF'});
                        
            }
        }
    },

    /**
     * 
     * @param int  val
     * @param bool sendform
     */

    setValue : function (val, sendform) {
        
        var sendform = (typeof sendform != 'undefined') ? sendform : true;
        var value = 0;
        switch (val) {
            case 0:  value  = "-1";  break;
            case 1:  value  = "4";  break;
            case 2:  value  = "2"; break;
            case 3:  value  = "3";  break;
            case 4:  value  = "1";  break;
            default: value  = "-1"; break;
        }
        
        if (val != 0) {
            pStrecke.setHbDetail('travelledAs', value);
        } 
        
        if (debug) debugForm();
    
        if (!firstInit && sendform) {
            sendSearchForm();
        }
    },
    
    /**
     * 
     */
    
    switchVraImageDo : function () {
        if (this.activeVraImg == 5) {
            this.activeVraImg = 6;
        } else if (this.activeVraImg == 6) {
                this.activeVraImg = 5;
        }
        $("#teaserLmpsOfferTopImg").animate({opacity:'0'}, 300).attr({'src':this.emotionsImgSrc[this.activeVraImg].src}).animate({opacity:'1'}, 300);
    },
    
    /**
     * 
     */
    
    switchVraImage : function () {
        this.switchVraImageIntervall = window.setInterval(function(){ VRA.switchVraImageDo(); }, 7000);
    },

    /**
     * Erstinitialisierung vra
     * @param {Object} val
     */

    deepLinkInit : function (val) {
        $('#hbf_detail').val(val);
        var sTestHBFDetail = jQuery('#hbf_detail').val();
        if (sTestHBFDetail !== undefined) {
            var obj = pStrecke.getHbfDetailParams();

            if (typeof obj.travelledAs == 'undefined') {
                val = 0;
            } else {
                val = obj.travelledAs.val;
            }
            
            if (val == '' || val == '-1' || typeof val == 'undefined') {
                val = 0;
            }
            
            switch (val) {
                case '-1' : value = 0;  break;
                case '4'  : value = 1;  break;
                case '2'  : value = 2;  break;
                case '3'  : value = 3;  break;
                case '1'  : value = 4;  break;
                default   : value = 0; break;
            } 
            
            $('#sliderRatingFilter').slider('value', value);
        }
    }
}

/**
 *******************************************************************************
 * Funktionalitäten für KALENDER / TERMINE
 *******************************************************************************
 */

var KALENDER = {

    tmpTermin  : 0,
    tmpRtermin : 0,
    
    /**
     * feuert Formular bei Auswahl eines Datum ab
     */

    setKalenderTermine : function (art) {
        var iT = $('#termin').val();
        var rT = $('#ruecktermin').val();
        
        if (art == 'hin' && !firstInit && this.tmpTermin != iT) {
            sendSearchForm();
        } else if (art == 'rueck' && !firstInit && this.tmpRtermin != rT) {
            sendSearchForm();
        }
    }
}

/**
 *******************************************************************************
 * Funktionalitäten für KATEGORIE / STERNE
 *******************************************************************************
 */

var STARS = {

    selRow  : 0,
    imgSrc1 : imgPfad + '/search/sternOrange.gif',
    imgSrc2 : imgPfad + '/search/sternBlau.gif',

    /**
     * Wechselt Img Sourcen für Hover Effekte
     * @param {Object} imgSrc
     * @param {Object} row
     */

    changeSrc : function (imgSrc, row) {
        for (var i = 1; i <= row; i++) {
            var imgId = 'star_' + row + '_' + i;
            $("#" + imgId).attr({'src': imgSrc});
        }
    },

    /**
     * MousActions (click, mouseOver, mouseOut)
     * @param {Object} actionk
     * @param {Object} row
     */

    mouseAction : function (action, num) {
        num = parseInt(num);
        var val = num - 2;
        
        for (var i = num; i > 0; i--) {
            $('#stars_' + i).attr('class', 'searchStarsChecked');
        }
        
        for (var i = (num + 1); i <= 5; i++) {
            $('#stars_' + i).attr('class', 'searchStarsUnchecked');
        }    
        
        if (num == '-1') {
            $('#stars_1').attr('class', 'searchStarsChecked');
            val = -1;
        }
        
        $("#kategorie").val(val);
        
        if (!firstInit) {
            
            sendSearchForm();
        }
    },

    /**
     * schaltet Disable Layer ON/OFF
     * @param {Object} stat
     */
    
    disable : function (stat) {
        if (stat == 0) {
            $('#sterneContainerDisabled').css({'display' : 'none'});
        } else if (stat == 1) {
            var h = $('#starsMiddleDiv').height();
            if (browser == 'IE6.0' || browser == 'IE7.0') {
                h = h - 2;
            }
            $('#sterneContainerDisabledSpacer').css({'height' : h + 'px'});
            $('#sterneContainerDisabled').css({'display' : 'block'});
        } else {
            $('#sterneContainerDisabled').css({'display' : 'none'});
        }
    },
    
    /**
     * Erstinitialisierung der Kategorie
     * @param {Object} val
     */
    
    deepLinkInit : function (val) {
        
        if (val == '' || val == '-1' || typeof val == 'undefined') {
            
            this.mouseAction('click', '-1');
           
        } else {
            var katRow = parseInt(val) + 2;
            this.mouseAction('click', katRow);
        }
    }
}

/**
 *******************************************************************************
 * Funktionalitäten für VERPFLEGUNG
 *******************************************************************************
 */

var VERPFL = {
    
    selRow : 0,
    
    foodItems : [
        {key:'-1', val:'Alle keuzes'},
        {key:'0', val:'Logies'},
        {key:'1', val:'Logies met ontbijt'},
        {key:'2', val:'Halfpension'},
        {key:'3', val:'Volpension'},
        {key:'4', val:'All Inclusive'}
    ],
    
    /**
     * Wechselt die CSS Klasse für Hover Effekte
     * @param {Object} action
     * @param {Object} row
     */
    
    changeCss : function (action, row) {
        
    },
    
    /**
     * MousActions (click, mouseOver, mouseOut)
     * @param string elemId
     */    
    mouseAction : function (elemId) {
    	
    	if (typeof elemId != 'undefined') {
    		var elem = document.getElementById(elemId);
    	} else {
    		var elem = document.getElementById('foodSelect');
    	}
    	
        var key = $(elem).val();
        $('#verpflegung').val(key);
        sendSearchForm();    
    },
    
    /**
     * Initialize food implementation
     * @param object val
     * @param string elemId
     */    
    deepLinkInitImpl : function (val, elemId) {
    	
    	if (typeof elemId != 'undefined') {
    		var elem = document.getElementById(elemId);
    	} else {
    		var elem = document.getElementById('foodSelect');
    	}
        
        if (elem) {
            var newItem;        
            var bool;
            
            for (var i = 0; i < this.foodItems.length; i++) {
                if (val == this.foodItems[i].key) {
                    bool = true;
                } else {
                    bool = false;
                }
                newItem = new Option(this.foodItems[i].val, this.foodItems[i].key, false, bool);
                elem.options[elem.length] = newItem;
            }
        }
    },
    
    /**
     * Initialize food
     * @param Object val
     */    
    deepLinkInit : function (val) {
    	this.deepLinkInitImpl(val, 'foodSelect');
//    	this.deepLinkInitImpl(val, 'foodSelectPricegrid');
    	$('#verpflegung').val(val);
    },
    
    /**
	 * Trigger food selectbox leftside and pricegrid QSM 
	 * @param object food  The food selectbox
	 * @param string inputId   The id of the selectbox to trigger
	 * @derpecated since version 1.2.0
	 */
	triggerQSM : function (food, inputId) {
		$('#' + inputId).find('option').remove();
		this.deepLinkInitImpl($(food).val(), inputId);
	}
    
}

/**
 *******************************************************************************
 * Funktionalitäten für ZIMMER
 *******************************************************************************
 */

var ROOM = {
    
    selRow         : 0,
    
    //roomValueArray : ['-1','5','6','2','0','7','2_2','2_256','2_512','2_1024','2_4096','2_8192','2_16384','2_32768'],
    
    roomItems : [
        {key:'-1', val:'Alle keuzes'},
        {key:'5', val:'1 persoonskamer'},
        {key:'6', val:'2 persoonskamer'},
        {key:'2', val:'Familiekamer'},
        {key:'0', val:'Bungalow'},
        {key:'7', val:'Appartement'}
    ],
        
    /**
     * Wechselt die CSS Klasse für Hover Effekte
     * @param {Object} action
     * @param {Object} row
     */    
    changeCss : function (action, row) {
        
    },
    
    /**
     * change hidden input field on rommtype change and submit the form.
     */
    mouseAction : function (elemId) {
    	
    	if (typeof elemId != 'undefined') {
    		var elem = document.getElementById(elemId);
    	} else {
    		var elem = document.getElementById('roomSelect');
    	}
    	
    	if (elem) {
	        var key = $(elem).val();        
	        $('#zimmer').val(key);
	        sendSearchForm(); 
    	}
        
    },

    /**
     * Room initialization implementation
     * @param object val
     * @param string elemId
     */    
    deepLinkInitImpl : function (val, elemId) {
    	
    	if (typeof elemId != 'undefined') {
    		var elem = document.getElementById(elemId);
    	} else {
    		var elem = document.getElementById('roomSelect');
    	}
        
        if (elem) {
            var newItem;        
            var bool;
            
            for (var i = 0; i < this.roomItems.length; i++) {
                if (val == this.roomItems[i].key) {
                    bool = true;
                } else {
                    bool = false;
                }
                
                newItem = new Option(this.roomItems[i].val, this.roomItems[i].key, false, bool);
                elem.options[elem.length] = newItem;
            }              
        }
    },
    
    /**
     * Room initialization
     * @param object val
     */    
    deepLinkInit : function (val) {
    	
    	this.deepLinkInitImpl(val, 'roomSelect');
//    	this.deepLinkInitImpl(val, 'roomSelectPricegrid');
    	$('#zimmer').val(val);
    },
    
    /**
	 * Trigger room type selectbox leftside and pricegrid QSM 
	 * @param object roomType  The room type selectbox
	 * @param string inputId   The id of the selectbox to trigger
	 * @derpecated since version 1.2.0
	 */
	triggerQSM : function (roomType, inputId) {
		$('#' + inputId).find('option').remove();
		this.deepLinkInitImpl($(roomType).val(), inputId);
	}
    
}

/**
 *******************************************************************************
 * Funktionalitäten für HOTELDETAILS 
 * - speziell für Kinder
 * - direkte Strandlage
 * - Wellness
 * - Clubanlage
 ******************************************************************************* 
 */

var HD = {
    
    hdStatArray  : [false, false, false, false],
    hdNamesArray : ['familie_kinder', 'strand', 'wellness', 'typ', 'sportmoeglichkeiten'],
    hdValuesArray  : ['0', '0', '0', '0', '0'],
    
    /**
     * Wechselt die CSS Klasse für Hover Effekte
     * @param {Object} action
     * @param {Object} num
     */
    
    changeCss  : function(action, num) {
        var imgId = 'hotelDetailsCheck' + num;
        var txtId = 'hotelDetailsTxt' + num;
        
        if (action == 'hover') {
            $('#'+txtId).addClass('hotelDetailsTxtHover');
        } else if (action == 'click') {
            $('#'+txtId).addClass('hotelDetailsTxtHover');         
            $('#'+imgId).addClass('hotelDetailsCheckboxHover');
        } else {            
            $('#'+imgId).removeClass('hotelDetailsCheckboxHover');
            $('#'+txtId).removeClass('hotelDetailsTxtHover');
        }
    },
    
    /**
     * schaltet Disable Layer ON/OFF
     * @param {Object} stat
     * @todo check if we need this
     */
    
    disable : function (stat) {
        if (stat == 0) {
            $('#hotelDetailsContainerDisabled').css({'display' : 'none'});
        } else if (stat == 1) {
            $('#hotelDetailsContainerDisabled').css({'display' : 'block'});
        } else {
            $('#hotelDetailsContainerDisabled').css({'display' : 'none'});
        }
    },
    
    /**
     * MousActions (click, mouseOver, mouseOut)
     * @param {Object} action
     * @param {Object} num
     */
    
    mouseAction : function (action, num) {
        if (action == 'set' || action == 'click') {
            if (!this.hdStatArray[num]) {
                this.hdStatArray[num] = true;
                $('#' + this.hdNamesArray[num]).val(this.hdValuesArray[num]);
            } else {
                this.hdStatArray[num] = false;
                $('#' + this.hdNamesArray[num]).val('');
            }
            
        }
        
        if (action == 'click') {
            if (!firstInit) {
                /*if (this.hdStatArray[num] == false) {
                    pTracking.track('uncheckedattribute'+num);
                } else {
                    pTracking.track('checkedattribute'+num);
                }*/
                sendSearchForm();
            }
        }
        
    },
    
    /**
     * Erstinitialisierung der Hoteldetails
     * @param {Object} famChilds
     * @param {Object} strand
     * @param {Object} wellness
     * @param {Object} club
     * @param {Object} sportmoeglichkeiten 
     */
    
    deepLinkInit : function (famChilds, strand, wellness, club, sportmoeglichkeiten) {
        var tmpArr = [famChilds, strand, wellness, club, sportmoeglichkeiten];
        
        for (var i = 0; i < tmpArr.length; i++) {
            if (typeof tmpArr[i] != 'undefined' && tmpArr[i] != '' && tmpArr[i] == '0') {        
                //this.changeCss('click', i);
                this.mouseAction('set', i);
                var inputId = 'hotelDetailsCheck' + i;
                document.getElementById(inputId).checked = true;
            }           
        }
    }
} 

/**
 *******************************************************************************
 * COUNTRY 
 ******************************************************************************* 
 */

var COUNTRY = {
	/**
	 * @param string selCountry The selected country, which is a csv list of zgk 
	 * (zielgebietskenner) values e.g. 10006,541,540
	 */
	onChangeAction : function (selCountry) {

	    $('#position').val('-1');
        $("#s_ort").val('');
        
		if (selCountry == '-1') {
			$('#zgk').val('');
			$('#flugdauer').val('');
			try {
				// @see	/booking_ml/jslib/formulare/nl/zielauswahl_land.js
				// RZC := ReiseZiel onChange
		        IBELmpsPlus.RZC();
		    }
		    catch (e) {
		        alert("An error occured (" + e + ")\n\nPlease reload the page.");
		    }
			pStrecke.goToRegions();
			TTG.initializeGoogleMap();
			return;
		}
			
		try {
	        IBELmpsPlus.RZC(1);
	    }
	    catch (e) {
	    	alert("An error occured (" + e + ")\n\nPlease reload the page.");
	    }
		var zgkArr = selCountry.split(",");
		var zgkStr = zgkArr.join(";");
        //TTG.flagCenterMove = true;
        
		pRegionen.goToHotel(zgkArr[0]);
		
		/* 
		for (var i = 0; i < zgkArr.length; i++) {
			// doe's not work
			//pRegionen.openGroup(null, zgkArr[i]); 
			// @todo one must handle more than one zgk
		}
		*/
	},

	/**
	 * Reset the country and region settings, if the user jumps back to the first step.
	 */
	reset : function () {
		$('#zgk').val('');
		$('#flugdauer').val('');
        $("#s_ort").val('');
		initCountry();
	}
}

/**
 *******************************************************************************
 * REGION 
 ******************************************************************************* 
 */

var REGION = {
	/**
	 * @param string selRegion The selected (top) region
	 */
	onChangeAction : function (selRegion) {
		
        $('#position').val('-1');
        $("#s_ort").val('');
        
		if (selRegion == '-1') {
			
			var option = $('#tt_countries option:selected');
			COUNTRY.onChangeAction(option[0].value);
			addHistoryEntry('region');
			return;
		}
        
		var region = selRegion.split("|");
        var topRegion = region[2];
        var topRegionGroup = region[1];

		try {
			// @see	/booking_ml/jslib/formulare/nl/zielauswahl_land.js
			// REGC := Region onChange
            //IBELmpsPlus.REGC();        
            // @todo some topRegions do not have a topRegion group in optLaender654LamiPlus
            var tt_countries = document.getElementById('tt_countries');
            var options = $(tt_countries).find('option');
            $(options).remove();
            var defaultOption = new Option('Alle keuzes', '-1', true, true);
            tt_countries.options[0] = defaultOption;
            fillSelectbox("tt_countries", optLaender654LamiPlus, topRegionGroup);
           
	    }
	    catch (e) {
	    	alert("An error occured (" + e + ")\n\nPlease reload the page.");
	    }

		pRegionen.goToHotel(topRegion);
		
	}
}

/**
 *******************************************************************************
 * Funktionalitäten für ABFLUGHAFEN
 ******************************************************************************* 
 */

var DEPARTUREAIRPORT = {
	/**
	 * @param object airports The airport selectbox
	 */
	onChangeAction : function (airports) {
	
		if (airports) {
			$('#abflughafen').val($(airports).val());
			sendSearchForm();
		} 
	
	},

	/**
	 * Trigger airport selectbox leftside and pricegrid QSM
	 * @param object airports The airport selectbox
	 * @param string inputId  The id of the selectbox to trigger
	 * @derpecated since version 1.2.0
	 */
	triggerQSM : function (airports, inputId) {
		$('#' + inputId).find('option').remove();
		// set default option
        var selectbox = document.getElementById(inputId);
        var defaultOption = new Option('Alle keuzes', '-1', true, true);
        selectbox.options[0] = defaultOption;
        
		fillSelectbox(inputId, TTAFH, $(airports).val());
	}
}

/**
 *******************************************************************************
 * Funktionalitäten für Veranstalter
 *******************************************************************************
 */

var OPERATOR = {
    
    /**
     * MousActions (click, mouseOver, mouseOut)
     * @param string elemId 
     */    
    mouseAction : function (elemId) {
		if (typeof elemId != 'undefined') {
			var elem = document.getElementById(elemId);
		} else {
			var elem = document.getElementById('operatorSelect');
		}
	
        var key = $(elem).val();
        $('#marke').val(key);
        sendSearchForm();    
    },
    
    /**
	 * Trigger operator selectbox leftside and pricegrid QSM
	 * @param object operators The operator selectbox
	 * @param string inputId   The id of the selectbox to trigger
	 * @derpecated since version 1.2.0
	 */
	triggerQSM : function (operators, inputId) {
		$('#' + inputId).find('option').remove();
		// set default option
        var selectbox = document.getElementById(inputId);
        var defaultOption = new Option('Alle keuzes', '-1', true, true);
        selectbox.options[0] = defaultOption;
        
		fillSelectbox('input_marke', arrMarke_654, $(operators).val());
	}

}

/**
 * @todo description
 * @deprecated since version 1.2.0
 */
var DURATION_PRICEGRID = {
    /**
     * 
     */
    goForward : function () {
        var step = $("#travelDurationPricegrid").attr('step');
        var nextStep = ((parseInt(step) + 1) <= (parseInt(durationValues.length) - 1)) ? parseInt(step) + 1 : parseInt(durationValues.length) - 1;
        $("#selectedDuration").html(durationValues[nextStep][1]);
        $('#sliderTravelDuration').slider('value', nextStep);
        $("#travelDurationPricegrid").html(durationValues[nextStep][1]);
        $("#travelDurationPricegrid").attr('step', nextStep);
        changeDuration(durationValues[nextStep][0], durationValues[nextStep][2]);
    },
    
    /**
     * 
     */
    goBack : function () {
        var step = $("#travelDurationPricegrid").attr('step');
        var previousStep = ((parseInt(step) - 1) < 0) ? 0 : parseInt(step) - 1;
        $("#selectedDuration").html(durationValues[previousStep][1]);
        $('#sliderTravelDuration').slider('value', previousStep);
        $("#travelDurationPricegrid").html(durationValues[previousStep][1]);
        $("#travelDurationPricegrid").attr('step', previousStep);
        changeDuration(durationValues[previousStep][0], durationValues[previousStep][2]);
    }
}

/**
 * Handling the airport multiselect card
 * currently not used
 */
var AIRPORT = {
    
    objTTAFH                   : {},
    objTTAFH_ger               : {},
    objTTAFH_for               : {},    
    airportAltSelectedArr      : [],
    airportAltSelectedArrTmp   : [],
    airportAltSendValues       : [],
    idLayerButton              : 'airportAllButton',
    defaultStartAirport        : 'FRA', 
    afhGroups                  : [],
    minChoice                  : 1,
    maxChoice                  : 30,
    
    /**
     * 
     */
    
    buildData : function () {
        
        if (!this.objTTAFH.length || this.objTTAFH.length < 1) {    
            var tmpArr             = [];
            var jsonTxt            = '[';
            for (var i = 0; i < TTAFHDLC.length; i++) {
               tmpArr = TTAFHDLC[i].split(';');
               jsonTxt += '{"name":"'+tmpArr[0]+'","dlc":"'+tmpArr[1]+'"},';
            }
            jsonTxt = jsonTxt.replace(/,$/,'');
            jsonTxt += ']';     
            this.objTTAFH = eval('(' + jsonTxt + ')');
        }
        if (!this.objTTAFH_ger.length || this.objTTAFH_ger.length < 1) {
            var tmpArrGer          = [];
            var jsonTxtGer         = '[';
            for (var g = 0; g < TTAFHDLC_GER.length; g++) {
               tmpArrGer   = TTAFHDLC_GER[g].split(';');
               jsonTxtGer += '{"name":"'+tmpArrGer[0]+'","dlc":"'+tmpArrGer[1]+'"},';
            }
            jsonTxtGer  = jsonTxtGer.replace(/,$/,'');
            jsonTxtGer += ']';     
            this.objTTAFH_ger = eval('(' + jsonTxtGer + ')');
        }
        if (!this.objTTAFH_for.length || this.objTTAFH_for.length < 1) {
            var tmpArrFor          = [];
            var jsonTxtFor         = '[';
            for (var f = 0; f < TTAFHDLC_FOR.length; f++) {
               tmpArrFor   = TTAFHDLC_FOR[f].split(';');
               jsonTxtFor += '{"name":"'+tmpArrFor[0]+'","dlc":"'+tmpArrFor[1]+'"},';
            }
            jsonTxtFor  = jsonTxtFor.replace(/,$/,'');
            jsonTxtFor += ']';     
            this.objTTAFH_for = eval('(' + jsonTxtFor + ')');              
        }
        if (!this.afhGroups.length || this.afhGroups.length < 1) {
            for (var g = 0; g < TTAFHDLC_GROUP.length; g ++) {
                for (var k = 0; k < this.objTTAFH.length; k ++) {
                    if (TTAFHDLC_GROUP[g].id == this.objTTAFH[k].dlc) {
                        this.afhGroups.push(k);
                        break;
                    }
                }
            }
        }
        
    },
    
    setIdLayerButton : function (id) {
        if (id != '') {
            this.idLayerButton = id;
        }
    },
    
    /**
     * 
     * @param {Object} action
     * @param {Object} row
     */
    
    changeCss : function (action, row) {
        //var lId = 'airportAlt_' + row + '_l';
        var mId = 'airportAlt_' + row + '_m';
        //var rId = 'airportAlt_' + row + '_r';          
        var thisClassName = $('#' + mId).attr('class'); 
                
        if (action == 'hover') {
            //var cssClassL = 'airportAltRowLeftHover';
            if (thisClassName.indexOf('airportAltRowMiddle') >= 0) {
                var cssClassM = 'airportAltRowMiddleHover';
            } else {
                var cssClassM = 'ttAirportGroupRowLabelHover';
            }
            //var cssClassR = 'airportAltRowRightHover';
            //$('#' + lId).attr({'class':cssClassL});
            $('#' + mId).attr({'class':cssClassM});
            //$('#' + rId).attr({'class':cssClassR});
        } else if (action == 'click') {
            //var cssClassL = 'airportAltRowLeftClick';
            if (thisClassName.indexOf('airportAltRowMiddle') >= 0) {
                var cssClassM = 'airportAltRowMiddleClick';
            } else {
                var cssClassM = 'ttAirportGroupRowLabelClick';
            }
            //var cssClassR = 'airportAltRowRightClick';
            //$('#' + lId).attr({'class':cssClassL});
            $('#' + mId).attr({'class':cssClassM});
            //$('#' + rId).attr({'class':cssClassR});
        } else {
            //var cssClassL = 'airportAltRowLeft';
            if (thisClassName.indexOf('airportAltRowMiddle') >= 0) {
                var cssClassM = 'airportAltRowMiddle';
            } else {
                var cssClassM = 'ttAirportGroupRowLabel';
            }
            //var cssClassR = 'airportAltRowRight';
            //$('#' + lId).attr({'class':cssClassL});
            $('#' + mId).attr({'class':cssClassM});
            //$('#' + rId).attr({'class':cssClassR});
        }
    },
    
    // check: Anzahl der afh muss zwischen minChoice und maxChoice liegen
    checkForRangeError : function (range, num, group) {
        var ret      = false;
        var nr       = 0;
        var actGroup = new Array();         
        // aktivierte AFH zählen
        for (var i = 0; i < this.airportAltSelectedArrTmp.length; i ++) {             
            if (this.airportAltSelectedArrTmp[i] == 1) {
                // Gruppen nicht mitzählen
                var itsAGroup = false;
                for (var g = 0; g < this.afhGroups.length; g ++) {
                    if (i == this.afhGroups[g]) {
                        itsAGroup = true;
                        break;
                    }
                }
                if (!itsAGroup) {
                    actGroup.push(this.objTTAFH[i].dlc);                    
                    nr ++;
                }
            }
        }           
        // Anzahl der "wechselnden" AFH feststellen
        var toChange = 0;
        // Wenn Gruppe, dann einzelne Mitglieder zählen
        if (group >= 0) {             
            for (var gr = 0; gr < TTAFHDLC_GROUP.length; gr ++) {
                if (TTAFHDLC_GROUP[gr].id == this.objTTAFH[group].dlc) {
                    var tmpDlc = TTAFHDLC_GROUP[gr].dlc.split(',');
                    toChange = tmpDlc.length;
                    // sind schon Mitglieder aktiviert?    
                    if (range == 'max' && nr > 0) {
                        var foundAct = 0;
                        for (var a = 0; a < actGroup.length; a ++) {                             
                            for (var c = 0; c < tmpDlc.length; c ++) {
                                if (tmpDlc[c] == actGroup[a]) {
                                    toChange --;
                                    foundAct ++;
                                    break;
                                }    
                            } 
                            if (foundAct >= tmpDlc.length) {
                                break;
                            }
                        }   
                    } 
                    break;
                }
            }
        } else {
            toChange = 1;
        }
        
        if (range == 'min') {             
            if ((nr - toChange) < this.minChoice) {
                ret = true;
            }
        } else {
            if ((nr + toChange) > this.maxChoice) {
                ret = true;
            }
        }
        
        return ret;    
    },
    
    /**
     * 
     * @param {Object} action
     * @param {Object} num
     */
    
    mouseAction : function (action, num) {
        
        // Karte?
        var mapExists = false;
        if (typeof(MAP_AIRPORT) == 'object' && typeof(MAP_AIRPORT.oApMerge) == 'object') {
            if (MAP_AIRPORT.oApMerge.length > 0) {
                mapExists = true;
            }
        } 
        
        // check: ist aktuelles Element eine Gruppe?
        var isGroup = -1;
        for (var g = 0; g < this.afhGroups.length; g ++) {
            if (num == this.afhGroups[g]) {
                isGroup = num;
                break;
            }
        }        
        
        if (action == 'click' && !isActiveSearchDialog) {               
            
            var outOfRange = false;
            // setzt Value des aktuell geklickten Airport-Button in Array "airportAltSelectedArrTmp" und prüft auf "Anzahl-Fehler"
            if (typeof this.airportAltSelectedArrTmp[num] != 'undefined' && this.airportAltSelectedArrTmp[num] == 1) {
                outOfRange = this.checkForRangeError('min', num, isGroup);
                if (outOfRange) {
                    alert('Min. Anzahl Flughäfen: ' + this.minChoice);
                } else {
                    this.airportAltSelectedArrTmp[num] = 0;
                }
            } else if (typeof this.airportAltSelectedArrTmp[num] != 'undefined' && this.airportAltSelectedArrTmp[num] == 0) {
                outOfRange = this.checkForRangeError('max', num, isGroup);
                if (outOfRange) {
                    alert('Max. Anzahl Flughäfen: ' + this.maxChoice);
                } else {
                    this.airportAltSelectedArrTmp[num] = 1;
                }
            } else {
                outOfRange = this.checkForRangeError('max', num, isGroup);
                if (outOfRange) {
                    alert('Max. Anzahl Flughäfen: ' + this.maxChoice);
                } else {
                    this.airportAltSelectedArrTmp[num] = 1;
                }
            } 
            
            if (!outOfRange) {
                var x = 0;
                var tmpAfh = '';
                var tmpAfhTitle = '';
                var groupIndex  = -1;
                            
                // check: ist geklicktes Element eine Gruppe?             
                if (isGroup >= 0) {                
                    // dlc der Gruppe einzeln aktivieren / deaktivieren                    
                    // mit Gruppen-ID den afh-Index suchen
                    for (var m = 0; m < TTAFHDLC_GROUP.length; m ++) {
                        if (TTAFHDLC_GROUP[m].id == this.objTTAFH[isGroup].dlc) {
                            // dlc der Gruppe ermitteln
                            var searchDlc = TTAFHDLC_GROUP[m].dlc.split(',');                                
                            for (var s = 0; s < searchDlc.length; s ++) {
                                // mit Gruppen-dlc den afh-Index suchen
                                for (var a = 0; a < this.objTTAFH.length; a ++) {
                                    if (searchDlc[s] == this.objTTAFH[a].dlc) {
                                        if (this.airportAltSelectedArrTmp[isGroup] == 1) {
                                            this.airportAltSelectedArrTmp[a] = 1;
                                        } else {
                                            this.airportAltSelectedArrTmp[a] = 0;                                             
                                        }
                                        break;
                                    }                                         
                                }    
                            }
                            groupIndex = m;
                            break;
                        }
                    } 
                    // wenn Gruppe deaktiviert wurde, prüfe ob deren Mitglieder auch noch in anderen Gruppen sind  
                    if (groupIndex >= 0 && this.airportAltSelectedArrTmp[isGroup] != 1) {
                        for (var ma = 0; ma < TTAFHDLC_GROUP.length; ma ++) {
                            if (ma != groupIndex) {
                                var compareDlc = TTAFHDLC_GROUP[ma].dlc.split(',');
                                var foundCompare = 0;
                                for (var co = 0; co < compareDlc.length; co ++) {
                                    for (var se = 0; se < searchDlc.length; se ++) {
                                        if (searchDlc[se] == compareDlc[co]) {                                            
                                            for (var aa = 0; aa < this.objTTAFH.length; aa ++) {
                                                if (TTAFHDLC_GROUP[ma].id == this.objTTAFH[aa].dlc) {
                                                    this.airportAltSelectedArrTmp[aa] = 0;
                                                    break;
                                                }
                                            }
                                            foundCompare ++;
                                            break;
                                        }
                                    }
                                    if (foundCompare > 0) {
                                        break;
                                    }
                                }
                            }
                        }
                    }              
                } 
                
                // check: gehört deaktiviertes Element zu einer Gruppe?                 
                if (isGroup < 0 && this.airportAltSelectedArrTmp[num] != 1) {
                    var itsFound = 0;
                    for (var m = 0; m < TTAFHDLC_GROUP.length; m ++) {
                        var searchDlc = TTAFHDLC_GROUP[m].dlc.split(',');
                        // dlc der Gruppe mit angeklicktem dlc vergleichen
                        for (var s = 0; s < searchDlc.length; s ++) {
                            if (searchDlc[s] == this.objTTAFH[num].dlc) {
                                // index der Gruppe suchen + deaktivieren
                                for (var a = 0; a < this.objTTAFH.length; a ++) {
                                    if (TTAFHDLC_GROUP[m].id == this.objTTAFH[a].dlc) {                                         
                                        this.airportAltSelectedArrTmp[a] = 0;
                                        itsFound ++;                                         
                                    }
                                } 
                                break;                                  
                            }
                        }                           
                    }    
                }
                
                // Values sammeln für dlc und title
                for (var z = 0; z < this.airportAltSelectedArrTmp.length; z++) {
                    // Gruppen-Button nicht sammeln
                    var checkIfGroup = false; 
                    for (var g = 0; g < this.afhGroups.length; g ++) {
                        if (this.afhGroups[g] == z) {
                            checkIfGroup = true;
                            break;
                        }
                    }                  
                    if (!checkIfGroup) {
                        if (this.airportAltSelectedArrTmp[z] == 1) {                    
                            x++;
                            tmpAfh += this.objTTAFH[z].dlc + ',';
                            tmpAfhTitle += this.objTTAFH[z].name + ', ';
                        } else {
                            this.airportAltSelectedArrTmp[z] = 0;                             
                        }   
                    }               
                }
                
                if (x > 0) {                
                    tmpAfh = tmpAfh.substr(0, tmpAfh.length - 1);
                    tmpAfhTitle = tmpAfhTitle.substr(0, tmpAfhTitle.length - 2);
                    tmpAfhTitle = 'Ausgewählt: ' + tmpAfhTitle;
                }
                      
                this.airportAltSendValues = new Array(tmpAfh, tmpAfhTitle);
                    
                for (var z = 0; z < this.objTTAFH.length; z++) {
                    if (this.airportAltSelectedArrTmp[z] == 0 || typeof this.airportAltSelectedArrTmp[z] == 'undefined') {
                       this.changeCss('normal', z);
                       if (mapExists) {
                            MAP_AIRPORT.mouseAction('normal', z);
                       }
                    }
                    if (z == num && typeof this.airportAltSelectedArrTmp[num] != 'undefined' && this.airportAltSelectedArrTmp[num] == 0) {
                        this.changeCss('hover', z);
                    }
                    if (typeof this.airportAltSelectedArrTmp[z] != 'undefined' && this.airportAltSelectedArrTmp[z] == 1) {
                        this.changeCss('click', z);
                        if (mapExists) {
                            MAP_AIRPORT.mouseAction('active', z);
                        }
                    }
                }
            }
            if (debug) debugForm();  
            
        }
        
        if (action == 'akt' && !isActiveSearchDialog) {            
            for (var z = 0; z < this.objTTAFH.length; z++) {
                if (this.airportAltSelectedArrTmp[z] == 0 || typeof this.airportAltSelectedArrTmp[z] == 'undefined') {
                   this.changeCss('normal', z);                    
                }
                if (typeof this.airportAltSelectedArrTmp[z] != 'undefined' && this.airportAltSelectedArrTmp[z] == 1) {
                    this.changeCss('click', z);                     
                }
            }
        }
        
        if (action == 'send' && !isActiveSearchDialog) {
            var defDisplValue = 'Mehrfachauswahl';   
            if (this.airportAltSendValues.length > 0) {           
                var tmpSelTargets = this.airportAltSendValues[0].split(',');
                var tmpSelTitle   = this.airportAltSendValues[1].split(' ');
                // Wenn nur ein Afh gewählt...
                if (tmpSelTargets.length == 1) {
                    defDisplValue = tmpSelTitle[1];
                } else if (tmpSelTargets.length > 1) { // Mehrfachauswahl
                    defDisplValue += ' ('; 
                    for (var t = 0; t < tmpSelTitle.length; t ++) {
                        if (t > 0) {
                            defDisplValue += tmpSelTitle[t];                        
                        }    
                    } 
                    defDisplValue += ')';   
                }                          
                //Dreamreader löschen
                $('#DEPAIRPORT').val('');
                //drAfh.InputFieldDefaultValue = 'Mehrfachauswahl'
                $('#input_DEPAIRPORT').val(defDisplValue); 
                
                this.airportAltSelectedArr = [];
                $.each(AIRPORT.airportAltSelectedArrTmp, function(i, n){
                    AIRPORT.airportAltSelectedArr[i] = n;
                });
                    
                $('#abflughafen').val(this.airportAltSendValues[0]);
                $('#' + AIRPORT.idLayerButton).attr('title', this.airportAltSendValues[1]);          
                $('#input_DEPAIRPORT').attr('title', this.airportAltSendValues[1]);
                //pTracking.track('selectedairports',this.airportAltSendValues[0]);
                $.fn.colorbox.close(); //overlay schliessen                
                sendSearchForm();
            } else {
                $.fn.colorbox.close();
            }
        }
        
        if (this.airportAltSelectedArrTmp[num] != 1) {
            if (action == 'over') {
                this.changeCss('hover', num); 
                if (mapExists) {
                    MAP_AIRPORT.mouseAction('over', num);
                }                 
                // wenn Gruppe, dann alle Mitglieder ansprechen
                if (isGroup >= 0) {
                    // dlc der Gruppe einzeln ansprechen                    
                    // mit Gruppen-ID den afh-Index suchen
                    for (var m = 0; m < TTAFHDLC_GROUP.length; m ++) {
                        if (TTAFHDLC_GROUP[m].id == this.objTTAFH[isGroup].dlc) {
                            // dlc der Gruppe ermitteln
                            var searchDlc = TTAFHDLC_GROUP[m].dlc.split(',');                                
                            for (var s = 0; s < searchDlc.length; s ++) {
                                // mit Gruppen-dlc den afh-Index suchen
                                for (var a = 0; a < this.objTTAFH.length; a ++) {
                                    if (searchDlc[s] == this.objTTAFH[a].dlc) {                                         
                                        if (this.airportAltSelectedArrTmp[a] != 1) {
                                            this.changeCss('hover', a); 
                                            if (mapExists) {
                                                MAP_AIRPORT.mouseAction('over', a);
                                            }
                                        }  
                                        break;
                                    }                                         
                                }    
                            }                             
                            break;
                        }
                    }
                }             
            } else if (action == 'out') {
                this.changeCss('normal', num);
                if (mapExists) {
                    MAP_AIRPORT.mouseAction('out', num);
                }
                // wenn Gruppe, dann alle Mitglieder ansprechen
                if (isGroup >= 0) {
                    // dlc der Gruppe einzeln ansprechen                    
                    // mit Gruppen-ID den afh-Index suchen
                    for (var m = 0; m < TTAFHDLC_GROUP.length; m ++) {
                        if (TTAFHDLC_GROUP[m].id == this.objTTAFH[isGroup].dlc) {
                            // dlc der Gruppe ermitteln
                            var searchDlc = TTAFHDLC_GROUP[m].dlc.split(',');                                
                            for (var s = 0; s < searchDlc.length; s ++) {
                                // mit Gruppen-dlc den afh-Index suchen
                                for (var a = 0; a < this.objTTAFH.length; a ++) {
                                    if (searchDlc[s] == this.objTTAFH[a].dlc) {                                         
                                        if (this.airportAltSelectedArrTmp[a] != 1) {
                                            this.changeCss('normal', a); 
                                            if (mapExists) {
                                                MAP_AIRPORT.mouseAction('out', a);
                                            }
                                        }  
                                        break;
                                    }                                         
                                }    
                            }                             
                            break;
                        }
                    }
                }
            }            
        }        
    },
    
    /**
     * schreibt die einzelnen Airport-Zeilen     
     */    
    listAirportsForCol : function (col, maxCol, obj) {
        
        if (typeof(obj) == 'undefined') {
            var obj = this.objTTAFH;
        }        
        var strHtml  = '';
        var nrStart  = 0;
        var nrEnd    = 0;
        var nrCount  = 0;
        var nrInCol  = Math.ceil((obj.length / maxCol));   
        // index für erstes und letztes Element setzen        
        for (var c = 1; c <= maxCol; c ++) {
            if (c == 1) {
                nrCount = nrInCol;
                nrEnd   = nrInCol;                    
            } else if (c == maxCol) {
                nrStart += nrInCol;
                nrEnd    = obj.length;    
            } else {
                nrCount += nrInCol;
                nrStart += nrInCol;
                nrEnd    = nrCount;
            }             
            if (c == col) {                 
                break;
            }                 
        }
        // index aus Gesamtarray holen + Ausgabe
        for (var i = nrStart; i < nrEnd; i ++) {
            if (obj[i]) {
                var key;
                for (var k = 0; k < this.objTTAFH.length; k ++) {
                    if (obj[i].dlc == this.objTTAFH[k].dlc) {
                        key = k;
                        break;
                    }
                }
                strHtml += '<div id="airportAlt_' + key + '" class="airportAltRow" onmouseover="AIRPORT.mouseAction(\'over\', \'' + key + '\');" onmouseout="AIRPORT.mouseAction(\'out\', \'' + key + '\');" onclick="AIRPORT.mouseAction(\'click\', \'' + key + '\');">';
                strHtml += '<div id="airportAlt_' + key + '_m" class="airportAltRowMiddle">' + obj[i].name + '</div>';             
                strHtml += '</div>';
            }
        }         
        
        return strHtml;
        
    },
    
    /**
     * schreibt die einzelnen Airport-Gruppen     
     */    
    listAirportGroups : function (obj) {
        
        var strHtml  = '';
        if (typeof(obj) == 'undefined') {
            return strHtml;
        } 
        
        // index aus Gesamtarray holen + Ausgabe
        for (var i = 0; i < obj.length; i ++) {
            if (obj[i]) {
                var key;
                for (var k = 0; k < this.objTTAFH.length; k ++) {
                    if (obj[i].id == this.objTTAFH[k].dlc) {
                        key = k;
                        break;
                    }
                }
                strHtml += '<div id="airportAlt_' + key + '" class="ttAirportGroupRow" onmouseover="AIRPORT.mouseAction(\'over\', \'' + key + '\');" onmouseout="AIRPORT.mouseAction(\'out\', \'' + key + '\');" onclick="AIRPORT.mouseAction(\'click\', \'' + key + '\');">';
                strHtml += '<div id="airportAlt_' + key + '_m" class="ttAirportGroupRowLabel">' + this.objTTAFH[key].name + '</div>';             
                strHtml += '</div>';
            }
        }
        
        strHtml += '<div class="tt_clearboth"><img src="/images/spacer.gif" alt="" width="0" height="0" /></div>';         
        
        return strHtml;
        
    },
    
    /**
     * 
     */
    
    init : function () {
       
        this.buildData();
        var elemBody = $('body')[0];
        elemBody.appendChild($('#airportAltContainer')[0]);          
        
        $("div[id='airportAltContainer']:eq(1)").remove();
        var outHtml;
        outHtml = this.listAirportGroups(TTAFHDLC_GROUP);
        $('#ttBoxAirportGroupElements').html(outHtml);
        outHtml = this.listAirportsForCol(1, 2, this.objTTAFH_ger);
        $('#airportAltContentCol1').html(outHtml);
        outHtml = this.listAirportsForCol(2, 2, this.objTTAFH_ger);
        $('#airportAltContentCol2').html(outHtml);
        outHtml = this.listAirportsForCol(1, 2, this.objTTAFH_for);
        $('#airportAltContentCol3').html(outHtml);
        outHtml = this.listAirportsForCol(2, 2, this.objTTAFH_for);
        $('#airportAltContentCol4').html(outHtml);   
        
        // --- Default-Belegung ---
        if (AIRPORT.airportAltSelectedArr.length == 0) {
            var tmpDefault = null;  
            var tmpTarget  = ''; 
            if ($('#abflughafen').val() != '') {
                tmpDefault = $('#abflughafen').val().split(',');
                tmpTarget  = $('#abflughafen').val();
            } else if (AIRPORT.defaultStartAirport != '') {         
                tmpDefault = AIRPORT.defaultStartAirport.split(','); 
                tmpTarget  = AIRPORT.defaultStartAirport;
            }             
            if (tmpDefault != null) {
                var foundIt     = 0;
                var nameAirport = '';
                for (var d = 0; d < this.objTTAFH.length; d ++) {
                    AIRPORT.airportAltSelectedArr[d] = 0;
                    for (fi = 0; fi < tmpDefault.length; fi ++) {
                        if (tmpDefault[fi] == this.objTTAFH[d].dlc) { 
                            AIRPORT.airportAltSelectedArr[d] = 1;
                            if (nameAirport != '') {
                                nameAirport += ',';
                            }
                            nameAirport += this.objTTAFH[d].name;
                            foundIt ++;
                            if (foundIt == tmpDefault.length) {
                                break;
                            }
                        }
                    } 
                    if (foundIt == tmpDefault.length) {
                        break;
                    }   
                }                  
                
                var defDisplValue = 'Mehrfachauswahl';
                // Wenn nur ein Afh gewählt...                   
                if (tmpDefault.length == 1) {                 
                    defDisplValue = nameAirport;
                } else if (tmpDefault.length > 1) {
                    defDisplValue += ' (';
                    defDisplValue += nameAirport;
                    defDisplValue += ')';
                }              
                //Dreamreader löschen
                $('#DEPAIRPORT').val('');
                //drAfh.InputFieldDefaultValue = 'Mehrfachauswahl'
                $('#input_DEPAIRPORT').val(defDisplValue);                      
                $('#abflughafen').val(tmpTarget);
                $('#' + AIRPORT.idLayerButton).attr('title', 'Ausgewählt: ' + nameAirport); 
                $('#input_DEPAIRPORT').attr('title', 'Ausgewählt: ' + nameAirport);
                //pTracking.track('selectedairports',$('#abflughafen').val());                                   
            }
        }
                
        $("#" + this.idLayerButton).click(
            function() {
                AIRPORT.airportAltSelectedArrTmp = [];
                $.each( AIRPORT.airportAltSelectedArr, function(i, n){
                    AIRPORT.airportAltSelectedArrTmp[i] = n;
                });
                AIRPORT.mouseAction('akt');
                //pTracking.track('openedairportdialog');  
                // AFH-Karte aufbauen
                MAP_AIRPORT.init(AIRPORT.objTTAFH);                
            }
        );         
        $("#airportAltCloseButton2").click(
            function() {
                if (!isActiveSearchDialog) {
                    AIRPORT.mouseAction('send');
                }
            }
        );
        $("#airportAltCloseButton").hover(
            function() {
                $("#airportAltCloseButton").addClass('airportAltCloseButtonHover');
            },
            function() {
                $("#airportAltCloseButton").removeClass('airportAltCloseButtonHover');
            }
        );
        $("#airportAltCloseButton2").hover(
            function() {
                $("#airportCloseButton2").addClass('airportAltCloseButton2Hover');
            },
            function() {
                $("#airportAltCloseButton2").removeClass('airportAltCloseButton2Hover');
            }
        );
        // Wenn AFH per Deeplink als int kommt...
        if (typeof(getParams.abflughafen) != 'undefined' && getParams.abflughafen >= 0 && !isActiveSearchDialog) {            
            if (Number(getParams.abflughafen) >= 0) {
                $('#input_DEPAIRPORT').val(getAfhName(getParams.abflughafen));            
            }
        }
        
        if ($('#isSetSearchDialog').val() == '1') {
            $("#searchCloseButton").click(
                function() {                
                    $.fn.colorbox.close();             
                }
             );
         }
        
    }
    
}

/**
 *******************************************************************************
 * Funktionalitäten für ORTSFILTER
 *******************************************************************************
 */

var OF = {
    
    citiesArray : [],
    selectedRow : 0,
    selectedOrt : '',
    isClicked   : false,
    cityName    : null,
    
    printCitiesFilterDiv : function (col, cities) {
        if (pStrecke.objects.allCities) {
            cities = pStrecke.objects.allCities;
            this.citiesArray = pStrecke.objects.allCities;
            
            if (cities[0] != 'Alle Orte') {
                cities.unshift('Alle Orte');
            }
            
            //this.citiesArray.unshift('Alle Orte');
        }
        
        var strHtml        = '';
        var anfang         = 0;
        var ende           = 0;
        var gesamt         = this.citiesArray.length;
        var colAnzahl      = Math.ceil((gesamt/2));
        var txt            = '';
        var tit            = '';
        var maxTxt         = 29;
        
        if (col == 5) {
            anfang     = 0;
            ende       = colAnzahl;
        } else {
            anfang     = colAnzahl;
            ende       = gesamt;
        }
    
        for (var i = anfang; i < ende; i++) {
    
            if (cities[i].length > maxTxt && i > 0) {
                txt = this.citiesArray[i].substr(0, maxTxt) + '...';
                tit = this.citiesArray[i];
            } else {
                txt = this.citiesArray[i];
                tit = '';
            }
    
            strHtml += '<div id="ortsFilter_'+i+'" class="ortsFilterRow" onmouseover="OF.mouseAction(\'over\',\''+i+'\');" onmouseout="OF.mouseAction(\'out\',\''+i+'\');" onclick="OF.mouseAction(\'click\',\''+i+'\');">';
            strHtml += '  <div id="ortsFilter_'+i+'_m" class="ortsFilterRowMiddle" title="'+tit+'">'+txt+'</div>';
            strHtml += '  <div class="clearBoth"><img src="/images/spacer.gif" height="1" width="1" alt="" /></div>';
            strHtml += '</div>';
        }
        strHtml += '  <div class="clearBoth"><img src="/images/spacer.gif" height="1" width="1" alt="" /></div>';
        $('#SearchBox1MM'+col).html(strHtml);
    },
    
    /**
     * 
     */
    
    handleOrtsFilter : function () {
        if (!this.isClicked) {
            this.citiesArray   = [];
            var citiesObj      = pStrecke.getCities();
            //this.citiesArray.push('<b>&raquo; Alle Orte &laquo;</b>');
            for (var i in citiesObj ) {
                if (citiesObj[i] != '' && citiesObj[i] != 'undefined' && typeof citiesObj[i] != 'undefined') {
                    this.citiesArray.push(citiesObj[i]);
                }
            }
            this.citiesArray = this.citiesArray.sort();
        }
    
        var selOrt = false;
        for (var i = 0; i < this.citiesArray.length; i++) {
            if (this.selectedOrt == this.citiesArray[i]) {
                this.selectedRow = i;
                selOrt = true;
            }
        }
    
        this.printCitiesFilterDiv(5, this.citiesArray);
        this.printCitiesFilterDiv(6, this.citiesArray);
    
        setTimeout(function() {
            var middleHeight = $("#SearchBox1MM5").height();
            $("#SearchBox1ML5").height(middleHeight);
            $("#SearchBox1MR5").height(middleHeight);
            $("#SearchBox1ML6").height(middleHeight);
            $("#SearchBox1MR6").height(middleHeight);
            $("#SearchBox1MM6").height(middleHeight);
        },100);
    
        if (!selOrt) {
              this.selectedRow     = 0;
              this.selectedOrt     = '';
              var changeTxt        = '';
              var changeTitle      = 'Alle Orte';
              $('#hotelSortFilterButton').attr({'title':changeTitle});
//              $('#hotelSortFilterButton').html(changeTxt);
              $('#s_ort').val('');
        } else {
            var changeTxt      = this.selectedOrt;
            var changeTitle    = this.selectedOrt;
            if (changeTxt.length > 6) {
                changeTxt = changeTxt.substr(0,6) + '...';
                $('#hotelSortFilterButton').attr({'title':changeTitle});
            }
//            $('#hotelSortFilterButton').html(changeTxt);
        }
        this.changeCss('click', this.selectedRow);
        if (debug) debugForm();
    },
    
    /**
     * 
     * @param {Object} action
     * @param {Object} row
     */
    
    changeCss : function (action, row) {
        
        /* Workaround da nach moven der Map der Counter nicht mehr stimmt ... */
        for (var i = 0; i < this.citiesArray.length; i++) {
            if (this.citiesArray[i] == this.cityName) {
                row = i;
            }
        }
        
        var lId = 'ortsFilter_' + row + '_l';
        var mId = 'ortsFilter_' + row + '_m';
        var rId = 'ortsFilter_' + row + '_r';
        
        if (action == 'hover') {
            var cssClassL = 'ortsFilterRowLeftHover';
            var cssClassM = 'ortsFilterRowMiddleHover';
            var cssClassR = 'ortsFilterRowRightHover';
            $('#' + lId).attr({'class':cssClassL});
            $('#' + mId).attr({'class':cssClassM});
            $('#' + rId).attr({'class':cssClassR});
        } else if (action == 'click') {
            var cssClassL = 'ortsFilterRowLeftClick';
            var cssClassM = 'ortsFilterRowMiddleClick';
            var cssClassR = 'ortsFilterRowRightClick';
            $('#' + lId).attr({'class':cssClassL});
            $('#' + mId).attr({'class':cssClassM});
            $('#' + rId).attr({'class':cssClassR});
        } else {
            var cssClassL = 'ortsFilterRowLeft';
            var cssClassM = 'ortsFilterRowMiddle';
            var cssClassR = 'ortsFilterRowRight';
            $('#' + lId).attr({'class':cssClassL});
            $('#' + mId).attr({'class':cssClassM});
            $('#' + rId).attr({'class':cssClassR});
        }
    },
    
    /**
     * 
     * @param {Object} action
     * @param {Object} row
     */
    
    mouseAction : function (action, row) {
        if (action == 'click') {
            this.cityName    = this.citiesArray[row];
            this.selectedRow = row;
            this.isClicked   = true;
            this.selectedOrt = this.citiesArray[row];
            this.changeCss('click', row);
            if (row == 0) {
                var changeTxt      = '';
                var changeTitle    = 'Alle Orte';
                this.selectedOrt   = '';
                $("#s_ort").val('');
            } else {
                var changeTxt      = this.citiesArray[row];
                var changeTitle    = this.citiesArray[row];
    
                if (changeTxt.length > 6) {
                    changeTxt = changeTxt.substr(0,6) + '...';
                    $('#hotelSortFilterButton').attr({'title':changeTitle});
                }
                var tmpOrt = $("#s_ort").val();
                $("#s_ort").val(this.citiesArray[row]);
            }
//            $('#hotelSortFilterButton').html(changeTxt);
    
            for (var z = 0; z < this.citiesArray.length; z++) {
                if (z != this.selectedRow) {
                   this.changeCss('normal', z);
                }
            }
    
            if (!firstInit) {
                if (tmpOrt != this.citiesArray[row]) {
                    //pTracking.track('cityfilterselected',this.citiesArray[row]);                     
                    sendSearchForm('oF');  
                }
                $.fn.colorbox.close(); //overlay schliessen
                //modalClose('ortsFilterContainer');
            }
        }
    
        if (this.selectedRow != row) {
            if (action == 'over') {
                this.changeCss('hover', row);
            } else if (action == 'out') {
                this.changeCss('normal', row);
            }
        } else {
            this.changeCss('click', row);
        }
    },
    
    /**
     * 
     */
    
    init : function () {
      
        var elemBody = $('body')[0];
        elemBody.appendChild($('#cityFilterOverlayBox')[0]);      
        
        $("div[id='cityFilterOverlayBox']:eq(1)").remove();
        
        $("#hotelSortFilterButton").click(
            function() {                
                //pTracking.track('cityfilteropen');
                //modalOpen('ortsFilterContainer');
            }
        );
        
        $("#ortsFilterCloseButton, #ortsFilterCloseButton2").click(
            function() {
                $.fn.colorbox.close();
                //modalClose('ortsFilterContainer');
            }
        );
        
    }
}


/**
 *******************************************************************************
 * Funktionalitäten für ERRORMESSAGE
 *******************************************************************************
 */

var ERRORMSG = {
    
    init : function () {
        $('#ErrorMessage').clone(true).insertAfter($('#modalLayer'));
        $("div[id='ErrorMessage']:eq(1)").remove();
        
        $("#ErrorMessageCloseButton, #ErrorMessageCloseButton2").click(
            function() {
                //modalClose('ErrorMessage');
            }
        );
        $("#ErrorMessageCloseButton").hover(
            function() {
                $("#ErrorMessageCloseButton").addClass('ErrorMessageCloseButtonHover');
            },
            function() {
                $("#ErrorMessageCloseButton").removeClass('ErrorMessageCloseButtonHover');
            }
        );
        $("#ErrorMessageCloseButton2").hover(
            function() {
                $("#ErrorMessageCloseButton2").addClass('ErrorMessageCloseButton2Hover');
            },
            function() {
                $("#ErrorMessageCloseButton2").removeClass('ErrorMessageCloseButton2Hover');
            }
        );
    }
}

/**
 *******************************************************************************
 * Funktionalitäten für KARTE ABFLUGHAFEN
 ******************************************************************************* 
 * currently not used
 */
var MAP_AIRPORT = {
    
    oApCus            : {},  // Kundenspez. AFH der Strecke
    oApDef            : {},  // alle default definierten AFH     
    oApMerge          : [],  // Schnittmenge dieser beiden  
    oApOut            : [],  // diese AFH für Ausgabe auf kundenspez. Karte verwenden    
    cusMapWidth       : 335, // Breite der Kunden-Karte    
    cusMapHeight      : 245, // Höhe der Kunden-Karte    
    cusIconWidth      : 11,  // Breite des Kunden-Icon
    cusIconHeight     : 12,  // Höhe des Kunden-Icon
    
    // cusAp: array mit den Flughäfen des Kunden
    init : function (cusAp) {
        
        if (typeof(cusAp) == 'object') {
            // wenn Elemente klassisch als string, dann erst json kodieren
            if (typeof(cusAp[0]) == 'string') {                 
                var tmpObj;
                var tmpArr  = [];                 
                var jsonTxt = '[';
                for (var i = 0; i < cusAp.length; i++) {
                   tmpArr   = cusAp[i].split(';');
                   jsonTxt += '{"name":"'+tmpArr[0]+'","dlc":"'+tmpArr[1]+'"},';
                }
                jsonTxt     = jsonTxt.replace(/,$/,'');
                jsonTxt    += ']';     
                tmpObj      = eval('(' + jsonTxt + ')');
                this.oApCus = tmpObj;                 
            } else {
                this.oApCus = cusAp;
            } 
            
            // Positionsberechnung
            this.generateAllAirports();
            
            // HTML-Ausgabe der AFH-Icon
            var outHtml;
            if (this.oApMerge.length > 0 && document.getElementById('ttBoxAirportMapImg').innerHTML == '') {                 
                outHtml = this.printAirportsOnMap();
                document.getElementById('ttBoxAirportMapImg').innerHTML = outHtml;                 
            }
                        
            this.setStartValues();
        
        } else {
            return false;
        }
            
    },
    
    // AFH-Arrays generieren und Positionen berechnen
    generateAllAirports : function () {
        
        // Werte der Basiskarte - nicht ändern!
        var baseMapWidth   = 335;
        var baseMapHeight  = 245;
        var baseIconWidth  = 11;
        var baseIconHeight = 12; 
        
        // Werte für Mittellinien anhand Basiskarte
        var baseMidWi   = (baseMapWidth / 2);
        var baseMidHe   = (baseMapHeight / 2);
        var baseMidWiIc = (baseIconWidth / 2);
        var baseMidHeIc = (baseIconHeight / 2); 
        
        // Werte für Mittellinien anhand Kundenkarte
        var cusMidWi   = (this.cusMapWidth / 2);
        var cusMidHe   = (this.cusMapHeight / 2);
        var cusMidWiIc = (this.cusIconWidth / 2);
        var cusMidHeIc = (this.cusIconHeight / 2);       
        
        // Default-Positionen aller AFH - nicht ändern!
        this.oApDef = [
            {"dlc":"AMS", "xPos":-119,  "yPos":31.5},
            {"dlc":"AOC", "xPos":36.5,  "yPos":3},            
            {"dlc":"BLL", "xPos":-33,   "yPos":113.5},            
            {"dlc":"BRE", "xPos":-42,   "yPos":52.5},
            {"dlc":"BRU", "xPos":-130,  "yPos":-0.5},
            {"dlc":"CGN", "xPos":-73,   "yPos":-3.5},
            {"dlc":"DRS", "xPos":58,    "yPos":7},
            {"dlc":"DTM", "xPos":-62,   "yPos":11.5},
            {"dlc":"DUS", "xPos":-78,   "yPos":6},
            {"dlc":"EIN", "xPos":-107,  "yPos":15.5},
            {"dlc":"ENS", "xPos":-80,   "yPos":32.5},
            {"dlc":"ERF", "xPos":5.5,   "yPos":3},
            {"dlc":"FDH", "xPos":-24.5, "yPos":-82},
            {"dlc":"FKB", "xPos":-51,   "yPos":-56.5},
            {"dlc":"FMM", "xPos":-8,    "yPos":-72.5},
            {"dlc":"FMO", "xPos":-60,   "yPos":26.5},
            {"dlc":"FRA", "xPos":-40.5, "yPos":-20.5},
            {"dlc":"GRQ", "xPos":-84,   "yPos":52.5},
            {"dlc":"GRZ", "xPos":91,    "yPos":-93.5},
            {"dlc":"GVA", "xPos":-90.5, "yPos":-114},
            {"dlc":"HAJ", "xPos":-25,   "yPos":33.5},
            {"dlc":"HAM", "xPos":-18,   "yPos":62.5},
            {"dlc":"HHN", "xPos":-65,   "yPos":-25.5},
            {"dlc":"INN", "xPos":13,    "yPos":-92.5},
            {"dlc":"KLU", "xPos":63,    "yPos":-103.5},
            {"dlc":"LBC", "xPos":-4,    "yPos":70},
            {"dlc":"LEJ", "xPos":30.5,  "yPos":14},
            {"dlc":"LGG", "xPos":-105,  "yPos":-11.5},
            {"dlc":"LNZ", "xPos":64,    "yPos":-64.5},
            {"dlc":"LUX", "xPos":-91.5, "yPos":-31.5},
            {"dlc":"MLH", "xPos":-68,   "yPos":-81.5},
            {"dlc":"MST", "xPos":-98,   "yPos":-1.5},
            {"dlc":"MUC", "xPos":19,    "yPos":-64.5},
            {"dlc":"NRN", "xPos":-89.5, "yPos":17},
            {"dlc":"NUE", "xPos":7,     "yPos":-35.5},
            {"dlc":"PAD", "xPos":-45,   "yPos":16.5},
            {"dlc":"RLG", "xPos":28,    "yPos":75},
            {"dlc":"SCN", "xPos":-72.5, "yPos":-43.5},
            {"dlc":"STR", "xPos":-29,   "yPos":-59.5},
            {"dlc":"SXB", "xPos":-64,   "yPos":-63},
            {"dlc":"SXF", "xPos":52,    "yPos":34},
            {"dlc":"SZG", "xPos":47,    "yPos":-78.5},
            {"dlc":"SZW", "xPos":17.5,  "yPos":58.5},
            {"dlc":"TXL", "xPos":47,    "yPos":38},
            {"dlc":"VIE", "xPos":113,   "yPos":-68.5}, 
            {"dlc":"WAW", "xPos":158,   "yPos":32.5},
            {"dlc":"ZQW", "xPos":-63.5, "yPos":-44.5},
            {"dlc":"ZRH", "xPos":-46,   "yPos":-89.5}
        ];
        
        this.oApOut = this.oApDef;
        
        // wenn Kundenkarte von Basiskarte abweicht, dann Positionswerte neu berechnen
        if (baseMapWidth != this.cusMapWidth || baseMapHeight != this.cusMapHeight || baseIconWidth != this.cusIconWidth || baseIconHeight != this.cusIconHeight) {            
            
            for (var a = 0; a < this.oApOut.length; a ++) {  
                // unterschiedliche x-Werte
                if (baseMapWidth != this.cusMapWidth || baseIconWidth != this.cusIconWidth) {
                    // Left-Pos in Basiskarte
                    var oldIcPosLeft = Math.ceil((baseMidWi + this.oApOut[a].xPos) - baseMidWiIc);
                    // Quotient der Left-Pos zur Basis-Karten-Mittellinie
                    var quotWidthOrig =  baseMidWi / oldIcPosLeft;
                    // Left-Pos berechnen aus Quotient und Mittellinie der Kundenkarte
                    var newIcPosLeft = cusMidWi / quotWidthOrig;    
                    // Neuer xPos-Wert
                    var newXpos = newIcPosLeft + cusMidWiIc - cusMidWi;  
                    this.oApOut[a].xPos = newXpos;  
                } 
                // unterschiedliche y-Werte
                if (baseMapHeight != this.cusMapHeight || baseIconHeight != this.cusIconHeight) {
                    // Top-Pos in Basiskarte
                    var oldIcPosTop  = Math.ceil((baseMidHe - this.oApOut[a].yPos) - baseMidHeIc);                     
                    // Quotient der Top-Pos zur Basis-Karten-Mittellinie
                    var quotHeightOrig =  baseMidHe / oldIcPosTop; 
                    // Top-Pos berechnen aus Quotient und Mittellinie der Kundenkarte
                    var newIcPosTop = cusMidHe / quotHeightOrig; 
                    // Neuer yPos-Wert
                    var newYpos = cusMidHe - cusMidHeIc - newIcPosTop;
                    this.oApOut[a].yPos = newYpos;                        
                }                  
            }
            
        } 
        
        // Basis-Array und Kunden-Array mergen
        var nrMerge = 0;
        for (var c = 0; c < this.oApCus.length; c ++) {             
            for (var d = 0; d < this.oApOut.length; d ++) {                 
                if (this.oApCus[c].dlc == this.oApOut[d].dlc) {                                         
                    var icPosLeft = Math.ceil((cusMidWi + this.oApOut[d].xPos) - cusMidWiIc);
                    var icPosTop  = Math.ceil((cusMidHe - this.oApOut[d].yPos) - cusMidHeIc);
                    if (icPosLeft >= 0 && icPosTop >= 0 && (icPosLeft + this.cusIconWidth) <= this.cusMapWidth && (icPosTop + this.cusIconHeight) <= this.cusMapHeight) {
                        this.oApMerge.push({"dlc":this.oApCus[c].dlc,"id":c,"name":this.oApCus[c].name,"left":icPosLeft,"top":icPosTop}); 
                    }                   
                    nrMerge ++;
                    break;
                }                   
            } 
            if (nrMerge >= this.oApOut.length || nrMerge >= this.oApCus.length) {
                break;
            }
        }           
        
    },
    
    // HTML-Ausgabe der icon-Divs
    printAirportsOnMap : function () { 
        
        var strHtml = ''; 
        
        for (var i = 0; i < this.oApMerge.length; i ++) {
            strHtml += '<div id="ttMapAirport_' + this.oApMerge[i].id + '" class="ttAirportMapIcon" title="' + this.oApMerge[i].name + '" style="left: ' + this.oApMerge[i].left + 'px; top: ' + this.oApMerge[i].top + 'px;" onmouseover="MAP_AIRPORT.mouseAction(\'over\', \'' + this.oApMerge[i].id + '\', \'1\');" onmouseout="MAP_AIRPORT.mouseAction(\'out\', \'' + this.oApMerge[i].id + '\', \'1\');" onclick="MAP_AIRPORT.mouseAction(\'click\', \'' + this.oApMerge[i].id + '\', \'1\');"></div>';
        }       
        
        return strHtml;
        
    },
    
    // Start-Werte der Icon, wenn Karte geöffnet wird
    setStartValues : function () {
                
        var relationGroup = null;
        
        if (isActiveSearchDialog && typeof(AIRPORT_SD) != 'undefined') {
            relationGroup = AIRPORT_SD.airportAltSelectedArr;
        } else if (typeof(AIRPORT) != 'undefined') {
            relationGroup = AIRPORT.airportAltSelectedArr;
        }
        
        for (var m = 0; m < this.oApMerge.length; m ++) {
            if (relationGroup[m] != 'undefined') {
                if (relationGroup[m] == 1) {
                    this.mouseAction('active', m);
                } else {
                    this.mouseAction('normal', m);
                }
            } else {
                this.mouseAction('normal', m);
            }
        }
        
    },
    
    // Mausaktionen bei click, over und out: css der icon und evt. der Elementlabel setzen
    mouseAction : function (action, key, switchLabel) { 
        
        // Auch Label der Formularelemente setzen?        
        if (typeof(switchLabel) == 'undefined') {
            var setLabel = false;
        } else {
            var setLabel = true;
        }
        
        var obj = document.getElementById('ttMapAirport_' + key);
        
        if (obj != null) {
        
            if (action == 'over' && obj.className != 'ttAirportMapIconActive') {
                obj.className = 'ttAirportMapIconHover';
                if (setLabel) {
                    // AIRPORT-Objekt des Einstiegdialogs oder der Basis-Suche?
                    if (isActiveSearchDialog) {
                        AIRPORT_SD.mouseAction(action, key);
                    } else {
                        AIRPORT.mouseAction(action, key);
                    }
                }
            } else if (action == 'out' && obj.className != 'ttAirportMapIconActive') {
                obj.className = 'ttAirportMapIcon';
                if (setLabel) {
                    if (isActiveSearchDialog) {
                        AIRPORT_SD.mouseAction(action, key);
                    } else {
                        AIRPORT.mouseAction(action, key);
                    }
                }
            } else if (action == 'click') {
                if (obj.className == 'ttAirportMapIconActive') {
                    obj.className = 'ttAirportMapIcon';
                } else {
                    obj.className = 'ttAirportMapIconActive';
                } 
                if (setLabel) {
                    if (isActiveSearchDialog) {
                        AIRPORT_SD.mouseAction(action, key);
                    } else {
                        AIRPORT.mouseAction(action, key);
                    }
                }   
            } else if (action == 'normal' && obj.className != 'ttAirportMapIcon') {
                obj.className = 'ttAirportMapIcon';
            } else if (action == 'active' && obj.className != 'ttAirportMapIconActive') {
                obj.className = 'ttAirportMapIconActive';
            }              
            
        } // if (obj != null)
    }
    
}

