// ### Google Maps #############################################################
var globalHotelCoords    = [];   // Koordinaten der Hotels
var globalTopHotelCoords = [];   // Koordinaten der TopHotels
var pGoogleMap           = [];     //Instanz der GoogleMap
//var ttPoiBubbleDiv = '';

/**
 * GoogleMap ausblenden
 */

function hideGoogleMap() {
    var elemGoogleMap = document.getElementById('idGoogleMap');

    jQuery(elemGoogleMap).slideUp('slow', function() {
        jQuery("#closeGoogleMap").hide();    
    });
}


/**
 * Zeigt die GoogleMap an
 */

function showGoogleMap(elemId, coordX, coordY) {

    if (typeof elemId != 'undefined' && elemId != 999) {
        var isHib     = true;
        var mapDiv    = 'idGoogleMap_' + elemId;
        if (typeof isMerkzettel != 'undefined' && isMerkzettel === true) {
            var mapWidth = 863;
        } else if (elemId == 'termin') {
            var mapWidth  = 769;
        } else {
            var mapWidth  = 715;
        }
        if (typeof isMerkzettel != 'undefined' && isMerkzettel === true) {
            var mapHeight = 445;
        } else {
            var mapHeight = 630;
        }
    } else {
        var isHib     = false;
        var mapDiv    = 'idGoogleMap';
        var mapWidth  = 638;
        var mapHeight = 608;
        elemId = 999;
        var elemGoogleMap = document.getElementById(mapDiv);
    }

    // --- Google Api dynamisch einbinden -------------
    if (typeof google == 'undefined' && typeof G_PHYSICAL_MAP == 'undefined' && typeof G_SATELLITE_MAP == 'undefined') {
        var elemScript = document.createElement('script');
        elemScript.type = 'text/javascript';
        elemScript.src  = 'http://maps.google.com/maps?file=api&v=2.s&sensor=false&async=2&key=' + ttGoogleMapsApiKey;
        var bodyElem = document.getElementsByTagName("body");    
        bodyElem[0].appendChild(elemScript);

        window.setTimeout(function() {
            showGoogleMap(elemId, coordX, coordY);
        }, 300);
        return false;
    }

    // --- Google-Klasse dynamisch einbinden ---
    if (typeof TTGoogleMap == 'undefined') {
        var elemScript = document.createElement('script');
        elemScript.type = 'text/javascript';
        elemScript.src  = '/tools/js/TTGoogleMap.js';
        var bodyElem = document.getElementsByTagName("body");    
        bodyElem[0].appendChild(elemScript); 
        
        window.setTimeout(function() {
            showGoogleMap(elemId, coordX, coordY);
        }, 100);
        return false;
        
    } else {
        if (!isHib) {
            window.setTimeout(function(){
                jQuery(elemGoogleMap).slideDown('slow', function() {
                    jQuery("#closeGoogleMap").fadeIn('slow');
                });
            }, 50);
        }
    }
    
    infoWindow.prototype = new GOverlay();
    
    // versuchen, die GoogleMap zu initialisieren (bis die Objekte vorhanden sind)
    var pInterval = setInterval(function() {
    
        if (typeof TTGoogleMap != 'undefined') {
            // Konfiguration der GoogleMap
            if (isHib == true) {
                var oConfig = {
                    id                 : mapDiv,
                    size               : [mapWidth, mapHeight],
                    zoom               : 1,
                    defaultMapType     : G_NORMAL_MAP,
                    overviewMapControl : false,
                    smallMapControl    : false,
                    largeMapControl    : true
                };
            } else {
                var oConfig = {
                    id                 : mapDiv,
                    size               : [mapWidth, mapHeight],
                    zoom               : 1,
                    defaultMapType     : G_NORMAL_MAP,
                    overviewMapControl : false,
                    smallMapControl    : false,
                    largeMapControl    : true
                 };
            }
            
            // GoogleMap initialisieren
            if (isHib == true) {
                pGoogleMap[idContent] = [];
                pGoogleMap[idContent][idContentPf] = new TTGoogleMap(oConfig);
                var aMarker = [];
                //--- Zoom-Event ----------------------------------------
                GEvent.addListener(pGoogleMap[idContent][idContentPf].pMap, 'zoomend', function(oldLevel, newLevel) {
                    closeBubbles('', isHib);
                });
            } else {
                pGoogleMap[elemId] = new TTGoogleMap(oConfig);
                var aMarker = [];
                //--- Zoom-Event ----------------------------------------
                GEvent.addListener(pGoogleMap[elemId].pMap, 'zoomend', function(oldLevel, newLevel) {
                    closeBubbles(pGoogleMap[elemId].marker, isHib);
                });
            }
            clearInterval(pInterval);
            
            // Koordinaten und Daten von den Hotels sammeln
            if (isHib == true) {
                if (typeof isMerkzettel != 'undefined' && isMerkzettel === true) {
                    //var obj = merkListObj[idContent];
                    var obj = merkListObj[(idContent - 100)];

                    var rawData = {
                        hotelName : (obj.hotelname.length > 18 ? '<span title="' + obj.hotelname + '">' + obj.hotelname.substring(0, 25) + '...</span>' : obj.hotelname),
                        IFF       : obj.iff,
                        country   : obj.hotelland,
                        region    : obj.hotelzielgebiet,
                        stars     : obj.sterne,
                        attribute : obj.hotAttributText,
                        price     : obj.preis,
                        link      : obj.str_pruef
                    };
                } else if (detail == 'hotel') {
                    if (typeof topHotelListObj != 'undefined' && idContent < HOTEL.countTopHotel) {
                        var isTopHotel = true;
                        var obj = topHotelListObj[idContent];
                    } else {
                        var isTopHotel = false;
                        var obj = hotelListObj[idContent - HOTEL.countTopHotel];
                    }
                    var rawData = {
                        hotelName : ((obj.hotelName != obj.hotelNameShort) ? '<span title="' + obj.hotelName + '">' + obj.hotelName.substring(0, 25) + '...</span>' : obj.hotelNameShort),
                        IFF       : obj.IFF,
                        country   : HLand,
                        region    : HRegion,
                        stars     : obj.stars,
                        attribute : obj.hotelAttribut.txt1,
                        price     : obj.price
                    };
                } else if (detail == 'termine') {
                    var rawData = {
                        hotelName : (pStrecke.terminHotelData.hotelName.length > 28 ? '<span title="' + pStrecke.terminHotelData.hotelName + '">' + pStrecke.terminHotelData.hotelName.substring(0, 25) + '...</span>' : pStrecke.terminHotelData.hotelName),
                        IFF       : pStrecke.objects.iff,
                        country   : pStrecke.terminHotelData.country,
                        region    : pStrecke.terminHotelData.region,
                        stars     : pStrecke.terminHotelData.stars,
                        mapType   : elemId,
                        attribute : pStrecke.terminHotelData.hotelattribute
                    };
                }

                var obj = {
                    x    : coordX,
                    y    : coordY,
                    data : {
                        rawData  : rawData,
                        pos      : idContent,
                        topHotel : isTopHotel,
                        isHib    : true,
                        instanz  : idContent,
                        prefix   : idContentPf,
                        isOpen   : false
                    }
                };
                aMarker.push(obj);
            } else {
                var countHotelsWithCoordinates = 0;
                for (var i = 0; i < globalHotelCoords.length; i++) {
                    if (parseInt(globalHotelCoords[i].x) != 0 || parseInt(globalHotelCoords[i].y) != 0) {
                        
                        if (detail == 'hotel') {
                            var rawData = {
                                hotelName : ((hotelListObj[i].hotelName != hotelListObj[i].hotelNameShort) ? '<span title="' + hotelListObj[i].hotelName + '">' + hotelListObj[i].hotelName.substring(0, 25) + '...</span>' : hotelListObj[i].hotelNameShort),
                                IFF       : hotelListObj[i].IFF,
                                country   : HLand,
                                region    : HRegion,
                                stars     : hotelListObj[i].stars,
                                attribute : hotelListObj[i].hotelAttribut.txt1,
                                price     : hotelListObj[i].price
                            };
                        } else if (detail == 'termine') {

                            var rawData = {
                                hotelName : (pStrecke.terminHotelData.hotelName.length > 28 ? '<span title="' + pStrecke.terminHotelData.hotelName + '">' + pStrecke.terminHotelData.hotelName.substring(0, 25) + '...</span>' : pStrecke.terminHotelData.hotelName),
                                IFF       : pStrecke.objects.iff,
                                country   : pStrecke.terminHotelData.country,
                                region    : pStrecke.terminHotelData.region,
                                stars     : pStrecke.terminHotelData.stars,
                                mapType   : elemId,
                                attribute : pStrecke.terminHotelData.hotelattribute
                            };
                        }
                        
                        var obj = {
                            x    : globalHotelCoords[i].x,
                            y    : globalHotelCoords[i].y,
                            data : {
                                rawData  : rawData,
                                pos      : i,
                                posCoord : countHotelsWithCoordinates,
                                topHotel : false,
                                isHib    : false,
                                instanz  : elemId,
                                prefix   : '',
                                isOpen   : false
                            }
                        };
                        countHotelsWithCoordinates++;
                        aMarker.push(obj);
                    }
                }
            }
            
            // Google-Marker konfigurieren
            var configMarker = {
                marker              : aMarker,
                img                 : '/kunden_parameter/expDe/ibe_v2/images/exp/googleMap/markerimages/marker_inaktiv.png',
                zoom                : true,
                //zoomLevel           : 16,
                posIconAnchor       : [4, 16],
                posIconWindowAnchor : [15, 1],
                onclick             : 'onClickGoogleMap',
                onmouseover         : 'onMouseOverMarker'
            };
            
            if (isHib == true) {
                
                // Zoomlevel nur für einzelnes Hotel setzen
                configMarker.zoomLevel = 16;
                
                pGoogleMap[idContent][idContentPf].clearOverlays();
                pGoogleMap[idContent][idContentPf].addMarker(configMarker);
                pGoogleMap[idContent][idContentPf].show();
            } else {
                pGoogleMap[elemId].clearOverlays();
                pGoogleMap[elemId].addMarker(configMarker);
                pGoogleMap[elemId].show();
            }
            
            if (isHib == true) {
                
                if (detail == 'hotel') {
                    var hotImg = 'marker_inaktiv.png';
                } else if (detail == 'termine') {
                    var hotImg = 'marker_inaktiv.png';
                }
                
                window.setTimeout(function() {
                    jQuery('#idGoogleMap_' + elemId).find("img[id^=mtgt_unnamed_]").css('z-index', '1').attr('src', '/kunden_parameter/expDe/ibe_v2/images/exp/googleMap/markerimages/' + hotImg);
                }, 600);
            } else {
                window.setTimeout(function() {
                    jQuery("#closeGoogleMap").fadeIn('slow');
                    
                    window.setTimeout(function() {
                        jQuery('#idGoogleMap').find("img[id^=mtgt_unnamed_]").each(function(i, elem){
                            jQuery(elem).css('z-index', '1500000').attr('src', '/kunden_parameter/expDe/ibe_v2/images/exp/googleMap/markerimages/marker_inaktiv_' + (i + 1) + '.png');
                            if (i > 100) {
                                return false;
                            }
                        });
                    }, 400);
                }, 600);
            }
        }
    }, 50);

}

function infoWindow() {
    /**
    * Object Instanz der GoogleMap
    * @type GMap2   
    */
    this.map_   = null;
    
    /**
    * Div in dem die Infobubble dargestellt werden soll
    * @type HTML Element
    */
    this.div_   = null;
    
    /**
    * Ankerpunkt
    * @type GLatLng
    */
    this.point_ = null;
    
    /**
    * Verschiebung vom Ankerunkt
    * @type Object
    */
    this.delta_ = null;
}

//infoWindow.prototype = new GOverlay();

Object.extend(infoWindow.prototype,
    /**
    @lends InfoWindow.prototype 
    */
    {
        /**
        * Initialisiert das Infowindow
        * @param {GMap2} map Karten-Objekt
        */
        initialize: function(map) {
            var div = document.createElement('div');
            Object.extend(div.style, {
                position: 'absolute',
                visibility: 'hidden'
            });
            var divClass = document.createAttribute('class');
            divClass.nodeValue = 'ttGoogleMapBubble';
            div.setAttributeNode(divClass);
            
            //document.getElementById('idGoogleMap').appendChild(div);
            map.getPane(G_MAP_FLOAT_PANE).appendChild(div);
            
            this.map_ = map;
            this.div_ = div;
        },
        /**
        * Zeigt das Infowindow   
        */   
        show: function(content, point, delta) {
            this.point_ = point;
            this.delta_ = delta;
            
            var strHTML = '';
            
            strHTML += '<div class="ttGoogleMapHotelBubbleTop">';
            strHTML += '    <div class="ttGoogleMapHotelBubbleTopArrow">' + spacerImg + '</div>';
            strHTML += '</div>';
            strHTML += '<div class="ttGoogleMapHotelBubbleCenter">';
            strHTML += '    ' + content;
            strHTML += '</div>';
            strHTML += '<div class="ttGoogleMapHotelBubbleBottom">' + spacerImg + '</div>';
            
            this.div_.innerHTML = strHTML;
            
            var posTop  = this.map_.fromLatLngToDivPixel(point).y + delta[1];
            var posLeft = this.map_.fromLatLngToDivPixel(point).x + delta[0];
            
            // Map zentrieren, wenn die geöffnete Bubble nicht in vollständig in der Karte sichtbar wäre
            // oder der Marker außerhalb der sichtbaren Karte ist (z.B. bei Klick auf den Hotelnamen links
            // neben der Karte auf der Hotelseite
            var ptBubble = this.map_.fromDivPixelToLatLng(new GPoint(posLeft, posTop + this.div_.offsetHeight));
            var ptMarker = this.map_.fromDivPixelToLatLng(new GPoint(this.map_.fromLatLngToDivPixel(point).x, this.map_.fromLatLngToDivPixel(point).y));
            if (!this.map_.getBounds().contains(ptBubble) || !this.map_.getBounds().contains(ptMarker)) {
                this.map_.setCenter(this.map_.fromDivPixelToLatLng(new GPoint(this.map_.fromLatLngToDivPixel(point).x, this.map_.fromLatLngToDivPixel(point).y)));
                posTop  = this.map_.fromLatLngToDivPixel(point).y + delta[1];
                posLeft = this.map_.fromLatLngToDivPixel(point).x + delta[0];
            }
            
            this.div_.style.top        = posTop + 'px';
            this.div_.style.left       = posLeft + 'px';
            this.div_.style.visibility = 'visible';
        },
        /**
        * Entfernt das Infowindow
        */   
        remove: function(){
            this.div_.parentNode.removeChild(this.div_);
        }
    }
);

var googleInfoWindow = new infoWindow();

function makeStars(stars) {
    var stars = stars.split('.');
    var out = '';
    if(stars[0] > 0) {
        for (var i = 1; i <= stars[0]; ++i) {
            out += '<img src="' + imgPfad + '/hotel/1stern.gif" border="0" class="ttGoogleMapHotelBubbleStarsImg" />';
        }
        if (typeof stars[1] != 'undefined' && stars[1] > 0) {
            out += '<img src="' + imgPfad + '/hotel/stern_halb.gif" border="0" class="ttGoogleMapHotelBubbleStarsImg" />';
        }
    }
    return out;
}

/**
 * Klick auf einen Marker in der GoogleMap
 * 
 * @param {Object} marker
 */
function onClickGoogleMap(marker) {
    if (typeof ttHibIframe != 'undefined' && ttHibIframe) {
        return;
    }
    
    //console.debug(marker.data);
    var point    = marker.getPoint();
    var latLong  = marker.getLatLng();
    var hotData  = marker.data.rawData;
    var hotPos   = marker.data.pos;
    var isHib    = marker.data.isHib;
    var instanz  = marker.data.instanz;
    var prefix   = marker.data.prefix;
    var topHotel = marker.data.topHotel;
    
    // erstmal alle Bubbles schließen
    closeBubbles(marker, isHib, instanz, prefix);
    
    var np = String(parseInt(parseInt(hotData.IFF) / 5000) * 5000);
    
    while (np.length < 5) {
        np = '0' + np;
    }
    
    if (typeof isMerkzettel != 'undefined' && isMerkzettel === true) {
        var link = 'window.location.href=\'' + hotData.link + '\'';
    } else if (detail == 'hotel') {
        var link = 'HOTEL.goToTermine(' + hotPos + ', ' + topHotel + ', \'\', ' + isHib + ', true);';
    } else {
        var link = '';
    }
    
    // Bubble-Gerüst bauen
    var strHTML = '';
    
    strHTML += '<div class="ttGoogleMapHotelBubbleImg">';
    strHTML += '    <img src="/tools/image.php?pfad=' + imgservPfad + '/images/content/booking_thumbs/' + np + '/THB_999_H' + parseInt(hotData.IFF) + '.jpg&b=70&h=70" height="70" width="70" border="0" alt="" />';
    strHTML += '</div>';
    strHTML += '<div class="ttGoogleMapHotelBubbleHotelBox">';
    strHTML += '    <div class="ttGoogleMapHotelBubbleHotelName">';
    strHTML += '        <div class="ttGoogleMapHotelBubbleHName">' + hotData.hotelName + '</div>';
    strHTML += '        <div class="ttGoogleMapHotelBubbleStars">' + makeStars(hotData.stars) + '</div>';
    strHTML += '    </div>';
    strHTML += '    <div class="ttGoogleMapHotelBubbleClose" onclick="closeBubbles(\'' + marker + '\', ' + isHib + ', \'' + instanz + '\', \'' + prefix + '\');">' + spacerImg + '</div>';
    strHTML += '    ' + clearBothDiv;
    strHTML += '    <div class="ttGoogleMapHotelBubbleCountry">' + hotData.country + ', ' + hotData.region + '</div>';
    if (hotData.mapType == 'termin' && (typeof isMerkzettel == 'undefined' || isMerkzettel === false)) {
        strHTML += '    <div class="ttGoogleMapHotelBubbleCountry">';
        if (hotData.attribute.length > 0) {
            strHTML += '<b>Details:</b> ';
        }
        for (var lauf = 0; lauf < hotData.attribute.length; ++lauf) {
            if(lauf > 0) {
                strHTML += ', ';
            }
            strHTML += hotData.attribute[lauf][1];
        }
        strHTML += '    </div>';
    } else {
        strHTML += '    <div class="ttGoogleMapHotelBubbleCountry">' + hotData.attribute + '</div>';
    }
    strHTML += '</div>';
    strHTML += clearBothDiv;
    if (detail == 'hotel' || (typeof isMerkzettel != 'undefined' && isMerkzettel === true)) {
        strHTML += '<div class="ttGoogleMapHotelBubbleButton">';
        strHTML += '    <img src="' + imgPfad + '/exp/weiter.gif" width="106" height="35" border="0" onclick="' + link + '">';
        strHTML += '</div>';
        strHTML += '<div class="ttGoogleMapHotelBubblePrice">ab <span onclick="' + link + '">&euro;' + hotData.price + '</span> Preis pro Person</div>';
    }
    strHTML += clearBothDiv;
    
    // Google-Spezifisches Info-Fenster anzeigen
    if (isHib) {
        googleInfoWindow.initialize(pGoogleMap[instanz][prefix].pMap);
    } else {
        googleInfoWindow.initialize(pGoogleMap[instanz].pMap);
        
        jQuery('.tt_googleMapHotelRowActive').removeClass('tt_googleMapHotelRowActive');
        jQuery('#tt_googleMapHotelRow_' + hotPos).addClass('tt_googleMapHotelRowActive');
        
        jQuery('.tt_googleMapHotelIconActive').removeClass('tt_googleMapHotelIconActive');
        jQuery('#tt_googleMapHotelIcon_' + hotPos).addClass('tt_googleMapHotelIconActive');
    }
    googleInfoWindow.show(strHTML, latLong, [-185, 25]);
    
    marker.data.isOpen = true;
    if (isHib == true) {
        marker.setImage('/kunden_parameter/expDe/ibe_v2/images/exp/googleMap/markerimages/marker_aktiv.png');
    } else {
        marker.setImage('/kunden_parameter/expDe/ibe_v2/images/exp/googleMap/markerimages/marker_aktiv_' + (marker.data.posCoord + 1) + '.png');
    }
    
    //var parts = marker.data.rawData.split('#');
    // Umgebungsinfos per Webservice abfragen - POIS generieren
    //TTAjaxRequest(url + 'booking/' + ordner_name + '/inc/getPOIs.script.php?x=' + point.x + '&y=' + point.y + '&iff=' + hotData.IFF, null, null, 'responsePois');
     
}

/**
 * Schließen der Bubbles
 */
function closeBubbles(marker, isHib, instanz, prefix) {
    jQuery('.ttGoogleMapBubble').hide();
    
    if (isHib == true) {
        if (typeof prefix != 'undefined' && typeof instanz != 'undefined' && typeof pGoogleMap[instanz][prefix].marker[0].data != 'undefined') {
            pGoogleMap[instanz][prefix].marker[0].data.isOpen = false;
            pGoogleMap[instanz][prefix].marker[0].setImage('/kunden_parameter/expDe/ibe_v2/images/exp/googleMap/markerimages/marker_inaktiv.png');
        } else {
            if (typeof isMerkzettel != 'undefined' && isMerkzettel !== true && detail == 'hotel') {
                var countElements = parseInt(anzahlTrefferSeite);
                if (typeof HOTEL == 'object') {
                    countElements += parseInt(HOTEL.countTopHotel);
                }
                for (var i = 0; i < countElements; i++) {
                    if (typeof pGoogleMap[i] != 'undefined' && typeof pGoogleMap[i]['_0'] != 'undefined') {
                        pGoogleMap[i]['_0'].marker[0].data.isOpen = false;
                        pGoogleMap[i]['_0'].marker[0].setImage('/kunden_parameter/expDe/ibe_v2/images/exp/googleMap/markerimages/marker_inaktiv.png');
                    }
                }
            }
        }
    } else {
        jQuery('.tt_googleMapHotelRowActive').removeClass('tt_googleMapHotelRowActive');
        jQuery('.tt_googleMapHotelIconActive').removeClass('tt_googleMapHotelIconActive');
        
        for (var i = 0; i < pGoogleMap[999].marker.length; i++) {
            if (pGoogleMap[999].marker[i].data.isOpen == true) {
                pGoogleMap[999].marker[i].data.isOpen = false;
                pGoogleMap[999].marker[i].setImage('/kunden_parameter/expDe/ibe_v2/images/exp/googleMap/markerimages/marker_inaktiv_' + (pGoogleMap[999].marker[i].data.posCoord + 1) + '.png');
                
                // da es nur eine geöffnete Bubble zur selben Zeit geben kann, braucht der Rest nicht mehr beachtet werden
                break;
            }
        }
    }
}

/**
 * MouseOver und MouseOut über einen Marker in der GoogleMap
 * 
 * @param {Object} marker
 * @param {Object} status
 */
function onMouseOverMarker(marker, over) {
    var isHib  = marker.data.isHib;
    var isOpen = marker.data.isOpen;
    
    if (isOpen == true) {
    } else {
        if (isHib == true) {
            if (over) {
                marker.setImage('/kunden_parameter/expDe/ibe_v2/images/exp/googleMap/markerimages/marker_over.png');
            } else {
                marker.setImage('/kunden_parameter/expDe/ibe_v2/images/exp/googleMap/markerimages/marker_inaktiv.png');
            }
        } else {
            if (over) {
                marker.setImage('/kunden_parameter/expDe/ibe_v2/images/exp/googleMap/markerimages/marker_over_' + (marker.data.posCoord + 1) + '.png');
            } else {
                marker.setImage('/kunden_parameter/expDe/ibe_v2/images/exp/googleMap/markerimages/marker_inaktiv_' + (marker.data.posCoord + 1) + '.png');
            }
        }
    }
}

/**
 * Mausover über einen POI
 * 
 * @param {Object} marker
 * @param {Object} status
 */
function onHoverGoogleMap(marker, status) {

    if (ttPoiBubbleDiv == 'idGoogleMapTerminPoiMarker') {
        var Hib = '';
    } else {
        var Hib = 'Hib';
    }

    var elemPoiBubble = document.getElementById('idGoogleMapTerminPoiMarker' + Hib);

    if (status) {
        var oConfig = {
            offset: [20, -110]
        };
        
        var data = marker.data;
        var sType = '';
        var img = '';
        var poiName = data.headline;
        var villageName = data.village;
        
        if (data.thumbnail != '') {
            img = '<img src="/tools/image.php?pfad=' + imgservPfad + '/' + data.thumbnail + '&b=65&h=45" alt="" />';
        }
        
        if (poiName.length > 18) {
            poiName = poiName.substring(0, 15) + ' ...';
        }
        
        if (villageName.length > 15) {
            villageName = villageName.substring(0, 12) + ' ...';
        }        
        
        switch(data.poiType){
            case 'SW' :
                sType = 'Sehensw&uuml;rdigkeit';
                break;
            case 'O' :
                sType = 'Ort';
                break;
            case 'S' :
                sType = 'Strand';
                break;
            case 'F' :
                sType = 'Freizeitpark';
                break;
            case 'A' :
                sType = 'Aktivit&auml;t';
                break;
            case 'E' :
                sType = 'Einkaufsmeile';
                break;
            case 'N' :
                sType = 'Nightlife';
                break;
            case 'WK' :
                sType = 'Weltkulturerbe';
                break;
            case 'G' :
                sType = 'Golfplatz';
                break;
            case 'VB' :
                sType = 'Bahnhof';
                break;
            case 'VF' :
                sType = 'Flughafen';
                break;
            case 'Y' :
                sType = 'Yachthafen';
                break;
            case 'K' :
                sType = 'Kirche';
                break;
            case 'L' :
                sType = 'Landschaft';
                break;
            default  :
                sType = 'Sehensw&uuml;rdigkeit';
                break;
        }
        
        var elemPoiBubbleTop      = document.getElementById('idPOIBubbleTop' + Hib);
        var elemPoiBubbleThumb    = document.getElementById('idPOIBubbleThumb' + Hib);
        var elemPoiBubbleDataRow  = document.getElementById('idPOIBubbleDataRow' + Hib);
        var elemPoiBubbleDataRow1 = document.getElementById('idPOIBubbleDataRow1' + Hib);
        var elemPoiBubbleDataRow2 = document.getElementById('idPOIBubbleDataRow2' + Hib);
        
        elemPoiBubbleTop.innerHTML      = sType;
        elemPoiBubbleThumb.innerHTML    = img;
        elemPoiBubbleDataRow.innerHTML  = poiName;
        elemPoiBubbleDataRow1.innerHTML = 'Hotelentfernung: ' + (data.distance / 1000) + ' km';
        if (villageName != '') {
            elemPoiBubbleDataRow2.innerHTML = 'Ort: ' + villageName;    
        }
        
        pGoogleMap.showBubbleOnMarker(marker, elemPoiBubble, oConfig);
    } else {
        elemPoiBubble.style.display = 'none';
    }    
}

/**
 * Callback-Funktion für die POI-Anfrage
 * 
 * @param {Object} data
 */
function responsePois(data) {
    var data = pGoogleMap.jsonDecode(unescape(data));
    var aMarker = [];
    
    if (data != null) {
        for (var i = 0; i < data.pois.length; i++) {
            var iAnchorLeft = 5;
            var iAnchorTop  = 1;
            
            switch(data.pois[i].poiType) {
                case 'SW' :
                    iAnchorLeft = 18;
                    iAnchorTop  = 1;
                    break;
                case 'O' :
                    iAnchorLeft = 14;
                    iAnchorTop  = -5;
                    break;
                case 'S' :
                    iAnchorLeft = 13;
                    iAnchorTop  = 1;
                    break;
                case 'F' :
                    iAnchorLeft = 10;
                    iAnchorTop  = 1;
                    break;
                case 'A' :
                    iAnchorLeft = 6;
                    iAnchorTop  = 1;
                    break;
                case 'E' :
                    iAnchorLeft = 16;
                    iAnchorTop  = 1;
                    break;
                case 'N' :
                    iAnchorLeft = 14;
                    iAnchorTop  = 1;
                    break;
                case 'WL' :
                    iAnchorLeft = 10;
                    iAnchorTop  = 1;
                    break;
                case 'G' :
                    iAnchorLeft = 10;
                    iAnchorTop  = 1;
                    break;
                case 'V' :
                    iAnchorLeft = 14;
                    iAnchorTop  = 1;
                    break;
                case 'Y' :
                    iAnchorLeft = 8;
                    iAnchorTop  = 1;
                    break;
                case 'K' :
                    iAnchorLeft = 0;
                    iAnchorTop  = 1;
                    break;
                case 'L' :
                    iAnchorLeft = 13;
                    iAnchorTop  = 1;
                    break;
                default  :
                    iAnchorLeft = 18;
                    iAnchorTop  = 1;
                    break;
            }
            
            // Marker hinzufügen
            aMarker.push({
                x: data.pois[i].latitude,
                y: data.pois[i].longitude,
                img: '/kunden_parameter/expDe/ibe_v2/imgages/googleMap/pois/' + data.pois[i].poiType + '.png',
                posIconWindowAnchor: [iAnchorLeft, iAnchorTop],
                type: 'poi',
                data: data.pois[i]
            });        
        }    
        
        // Konfiguration der Marker
        var configMarker = {
            marker          : aMarker,
            zoom            : false,
            clearMarkerType : 'poi',
            posIconAnchor   : [4, 16],
            onmouseover     : 'onHoverGoogleMap'
        };  
        
        pGoogleMap.addMarker(configMarker);            
    }
}

/**
 * Ajax-Success-Funktion
 * 
 * @param {Object} funcName
 */
/* funzt nich im IE
if (typeof onAjaxSuccess != 'function') {
    function onAjaxSuccess(funcName) {
        alert('böse');
        setTimeout(funcName + '(\'' + escape(xmlReq.responseText) + '\')', 10);
    }
}
*/
