/************************************************************************
*  Copyright Hinweis
*
*  (c) 2007 Rony Khoury - BASICWORX OHG
*  alle Rechte vorbehalten
*
*  Dieses Script steht unter Urheberrechten und ist Eigentum der
*  BASICWORX OHG. Es darf ohne Zustimmung des Entwicklers weder
*  verwendet noch in irgendeiner Form vervielfätigt und verbreitet
*  werden. Bei Zuwiderhandlung kann gerichtlich vorgegangen werden.
*
************************************************************************/


/** Funktionsüberischt
**
**  Zeile: 121       function onLoad(p_div)
**
**  Zeile: 175       function setNewMainMapObj(p_div) 
**
**  Zeile: 222       function loadXML()
**
**  Zeile: 277       function setMarkerManager(p_mm, p_makerArr)
**
**  Zeile: 292       function saveMapAttributes()
**
**  Zeile: 305       function enableMapResizing()
**
**  Zeile: 317       function disableMapResizing()
**
**  Zeile: 329       function resetCenterPosition()
**
**  Zeile: 369       function getFullscreenContent(p_label)
**
**  Zeile: 390       function switchStyle(p_modus, p_label)
**
**  Zeile: 437       function saveMarkerInformation(p_marker)
**
**  Zeile: 462       function removeOneMarkerFromArray(p_markerId)
**
**  Zeile: 484       function removeAllMarker()
**
**  Zeile: 496       function getMarkerID()
**
**  Zeile: 518       function createNewMarker(p_pos, p_icon, p_title, p_dragable, p_clickable, p_bouncy, p_bounceGravity, p_dragCrossMove, p_addData, p_id)
**
**  Zeile: 589       function refreshMarkerOnMap(p_makerArr)
**
**  Zeile: 604       function createMarkerFromArray(p_makerArr)
**
**  Zeile: 620       function removeMarkerOverlay(p_markerId, p_chk)
**
*/


/* ############################################################################################################################# */
/* KONSTANTEN und STANDARDWERTE */

    //Debugging ein-/ausschalten
    var debug = false;

    // abgeleitetes Objekt der GMap2 KLASSE
    var GMAP_OBJ;
    // aktuelle Zentrum der Ansicht
    var currCenter;
    // aktuelle Zoom Ebene
    var currZoomLevel;
    // aktuelle Kartentypauswahl
    var currMapType;
    // aktuelle Navigation
    var currMapControl;
    // ResizeListener des Browserfensters
    var rsListener;
    // DOM Pfad des HTML Elements der Karte
    var MAP_DIV = '';
    // Original Inhalt des HTML Elements "Body"
    var originalBodyContent = '';
    // Neuer Inhalt des HTML Elements "Body" für Vollbildmodus
    var newBodyContent = '';
    // relativer Pfad zum Verzeichnis
    if(!GM_PATH) var GM_PATH ="../../googlemaps/";
    // Zoombereich einschränken
    var maxZoomLevel = 17;
    var minZoomLevel = 2;
    // eindeutiger Index des Markers
    var MARKER_ID_COUNTER = 0;
    // Marker Manager
    var markerManager;
    // Informationen aller Marker speichern
    var markerArray = new Array();
    

/* ############################################################################################################################# */
/* weitere js Dateien laden */

    // Geocoding
    document.write('<script src="'+GM_PATH+'lib/bx_geocoding.js" type="text/javascript"></script>');
    
    // MarkerIcons
    document.write('<script src="'+GM_PATH+'lib/bx_gicons.js" type="text/javascript"></script>');
    
    // EventHandling
    document.write('<script src="'+GM_PATH+'lib/bx_gevents.js" type="text/javascript"></script>');
    
    // Debugging Funktionen, EventHandler, etc
    if(debug) document.write('<script src="'+GM_PATH+'lib/bx_debug.js" type="text/javascript"></script>');


/* ############################################################################################################################# */
/* Funktionen */


    /** Initialisierung der gesamten Karte
    **
    ** @param::p_div -> TYPE: DOM-Node (Platzhalter DIV im Body-Tag der Website welcher mit der GoogleMaps befüllt werden soll)
    **
    */
    function onLoad(p_div)
    {
        if (GBrowserIsCompatible())
        {
            
            MAP_DIV = document.getElementById(p_div);
            
            GMAP_OBJ = new GMap2(MAP_DIV);
            
            // Zoom Steuerung oben links
            currMapControl = new GLargeMapControl();
            GMAP_OBJ.addControl(currMapControl);
            
            // Längenanzeige unten links
            GMAP_OBJ.addControl(new GScaleControl());
            
            // Kartentypauswahl oben rechts
            GMAP_OBJ.addControl(new GHierarchicalMapTypeControl());
            GMAP_OBJ.addMapType(G_PHYSICAL_MAP);
            
            // kleinste und größte Zoomansicht für jeden Kartentyp einstellen
            var MAP_TYPES = GMAP_OBJ.getMapTypes();
            for (var i=0; i<MAP_TYPES.length; i++)
            {
                MAP_TYPES[i].getMinimumResolution = function() {return minZoomLevel;}
                //MAP_TYPES[i].getMaximumResolution = function() {return maxZoomLevel;}
            }
            
            // Karte bei vorgegeben Koordinaten zentrieren
            GMAP_OBJ.setCenter(new GLatLng(51.165691, 10.451526), 6);
            
            // zoom bei Doppelklick aktivieren
            GMAP_OBJ.enableDoubleClickZoom();
            
            // animierte Zoomansicht
            GMAP_OBJ.enableContinuousZoom();
            
            // aktuelle Karteneigenschaften speichern
            saveMapAttributes();
            
            // Marker laden
            parseTruckstopArray();
            
            // DEBUG-FUNKTION
            if(debug) initOnZoomEventMap(GMAP_OBJ);
        }
    }
    

    /** Beim Wechsel zwischen Normal und Vollbildmodus die Karte neu initialisieren
    **
    ** @param::p_div -> TYPE: DOM-Node (Platzhalter DIV im Body-Tag der Website welcher mit der GoogleMaps befüllt werden soll)
    **
    */
    function setNewMainMapObj(p_div)
    {
        if (GBrowserIsCompatible())
        {
            MAP_DIV = document.getElementById(p_div);
            
            GMAP_OBJ = new GMap2(MAP_DIV);
            
            // Zoom Steuerung oben links
            currMapControl = new GLargeMapControl();
            GMAP_OBJ.addControl(currMapControl);
            
            // Längenanzeige unten links
            GMAP_OBJ.addControl(new GScaleControl());
            
            // Kartentypauswahl oben rechts
            GMAP_OBJ.addControl(new GHierarchicalMapTypeControl());
            GMAP_OBJ.addMapType(G_PHYSICAL_MAP);
            
            // Karte bei vorgegeben Koordinaten zentrieren
            GMAP_OBJ.setCenter(currCenter, currZoomLevel);
            GMAP_OBJ.setMapType(currMapType);
            
            // zoom bei Doppelklick aktivieren
            GMAP_OBJ.enableDoubleClickZoom();
            
            // animierte Zoomansicht
            GMAP_OBJ.enableContinuousZoom();
            
            if(MAP_DIV.id == 'gmap_container_2')
            {
                GMAP_OBJ.enableScrollWheelZoom();
            }else{
                GMAP_OBJ.disableScrollWheelZoom();
            }
            
            // Markermanager initialisieren
            markerManager = setMarkerManager(markerArray);
            
            // DEBUG-FUNKTION
            if(debug) initOnZoomEventMap(GMAP_OBJ);

        }
    }
    
    
    
    /** Array im HTML Code einlesen und Marker erstellen. Sollte ein aktiver Marker dabei sein, wird dieser zentriert und sein InfoWindow wird geöffnet
    **
    ** keine Funktionsparameter vorhanden
    **
    */
    function parseTruckstopArray()
    {
    	var urlparams = window.location.search.split("&");
    	var tsid = urlparams[urlparams.length-1].split("=")[1];
    	
        if(truckstopMarkerData.length > 0)
        {
            var marker;
            var marker_aktiv = '';
            var micon;
            var markerData = new Array();
            
            for(var i=0; i<truckstopMarkerData.length; i++)
            {
                if((truckstopMarkerData[i]["lat"]!= '') && (truckstopMarkerData[i]["lng"] != ''))
                {
                    var point = new GLatLng(parseFloat(truckstopMarkerData[i]["lat"]),parseFloat(truckstopMarkerData[i]["lng"]));

                    var showAtZoomLevel = (truckstopMarkerData[i]["id"] == tsid) ? "4" : truckstopMarkerData[i]["showAtZL"];
                    var hideAtZoomLevel = truckstopMarkerData[i]["hideAtZL"];
                    
                    markerData['typ'] = truckstopMarkerData[i]["typ"];
                    markerData['idkenn'] = truckstopMarkerData[i]["id"];
                    markerData['aktiv'] = (truckstopMarkerData[i]["id"] == tsid) ? "1" : truckstopMarkerData[i]["aktiv"];
                    markerData['og'] = truckstopMarkerData[i]["og"];
                    markerData['link'] = truckstopMarkerData[i]["link"];
                    
                    switch (markerData['typ'])
                    {
                        case "Autohof":
                                micon = BlueArrow3D();
                                break;
                        case "Tank&Rast":
                                micon = RedArrow3D();
                                break;
                        default:
                                micon = stdIcon();
                    }
                    
                    marker = createNewMarker(point, micon, '', false, true, false, 1, false, markerData);
                            
                    if(marker.aktiv == "1") marker_aktiv = marker;
                    
                    marker.showAtZoomLevel = parseInt(showAtZoomLevel);
                    marker.hideAtZoomLevel = parseInt(hideAtZoomLevel);
                    markerArray.push(marker);
                    
                    // Markerinformationen abspeichern
                    saveMarkerInformation(marker);
                }
            }
            // nach Erfassung aller Marker, den Markermanager starten
            markerManager = setMarkerManager(markerArray);

            if(marker_aktiv != '')
            {
                GMAP_OBJ.setCenter(marker_aktiv.pos);
                marker_aktiv.openInfoWindowHtml(marker_aktiv.infoWindowContent);
            }
        }
        else
        {
            alert("Es sind keine Informationen verfügbar!");
        }
    }
    
    
    /** XML Datei mit sämtlichen Markerinformationen laden
    **
    ** keine Funktionsparameter vorhanden
    **
    function loadXML()
    {
        GDownloadUrl(GM_PATH+"truckstops.xml", function (doc)
        {     
            var xmlDoc = GXml.parse(doc);
            var allMarkers = xmlDoc.documentElement.getElementsByTagName("marker");
            
            var xmlMarkerData = new Array();
            var marker;
            
            for (var i=0; i < allMarkers.length; i++)
            {
                // Längen-, Breitengrade
                var point = new GLatLng(parseFloat(allMarkers[i].getAttribute("lat")),parseFloat(allMarkers[i].getAttribute("lng")));
                
                var showAtZoomLevel = allMarkers[i].getAttribute("showAtZoomLevel");
                var hideAtZoomLevel = allMarkers[i].getAttribute("hideAtZoomLevel"); // noch nicht eingebaut
                
                xmlMarkerData['label'] = GXml.value(allMarkers[i].getElementsByTagName("label")[0]);
                xmlMarkerData['strasse'] = GXml.value(allMarkers[i].getElementsByTagName("strasse")[0]);
                xmlMarkerData['plz_ort'] = GXml.value(allMarkers[i].getElementsByTagName("plz_ort")[0]);
                xmlMarkerData['land'] = GXml.value(allMarkers[i].getElementsByTagName("land")[0]);
                xmlMarkerData['email'] = GXml.value(allMarkers[i].getElementsByTagName("email")[0]);
                xmlMarkerData['web'] = GXml.value(allMarkers[i].getElementsByTagName("web")[0]);
                
                // createNewMarker(p_pos, p_icon, p_title, p_dragable, p_clickable, p_bouncy, p_bounceGravity, p_dragCrossMove, p_addData, p_id)
                
                // Zuweisung der Maker in die seperate Arrays in Abhängigkeit der ZoomEinstellung
                switch(parseInt(showAtZoomLevel))
                {
                    case 10:
                        marker = createNewMarker(point, GreenArrow3D(), xmlMarkerData['label'], false, true, false, 1, false, xmlMarkerData);
                        break;
                    case 8:
                        marker = createNewMarker(point, BlueArrow3D(), xmlMarkerData['label'], false, true, false, 1, false, xmlMarkerData);
                        break;
                    default:
                        marker = createNewMarker(point, RedArrow3D(), xmlMarkerData['label'], false, true, false, 1, false, xmlMarkerData);
                        break;
                }
                
                marker.showAtZoomLevel = parseInt(showAtZoomLevel);
                marker.hideAtZoomLevel = parseInt(hideAtZoomLevel);
                markerArray.push(marker);
                
                // Markerinformationen abspeichern
                saveMarkerInformation(marker);
            }
            // nach Erfassung aller Marker, den Markermanager starten
            markerManager = setMarkerManager(markerArray);
        });
    }
    */
    
    /** Markermanager mit Arrays der einzelnen Zoomlevel füllen
    **
    ** @param::p_markerArr  -> TYPE: Array              (Array mit allen Markern)
    **
    ** @return::mgr          -> TYPE: GMarkerManager    (verwaltet alle Marker)
    **
    */
    function setMarkerManager(p_markerArr)
    {
        if(!p_markerArr) p_markerArr = markerArray;
        var mmgr = new GMarkerManager(GMAP_OBJ, {trackMarkers:true, borderPadding:1});
        for(var i=0; i<p_markerArr.length; i++)
        {
            mmgr.addMarker(p_markerArr[i], p_markerArr[i].showAtZoomLevel, p_markerArr[i].hideAtZoomLevel);
        }
        mmgr.refresh();
        
        return mmgr;
    }
    

    /** Karteneigenschaften zwischenspeichern
    **
    ** keine Funktionsparameter vorhanden
    **
    */
    function saveMapAttributes()
    {
        currCenter = GMAP_OBJ.getCenter();
        currZoomLevel = GMAP_OBJ.getZoom();
        currMapType = GMAP_OBJ.getCurrentMapType();
    }

    
    /** Größenpassung an das Browserfenster aktivieren
    **
    ** keine Funktionsparameter vorhanden
    **
    */
    function enableMapResizing()
    {
        GMAP_OBJ.enableScrollWheelZoom();
        rsListener = initOnResizeEventWindow('resetCenterPosition');
    }


    /** Größenpassung an das Browserfenster deaktivieren
    **
    ** keine Funktionsparameter vorhanden
    **
    */
    function disableMapResizing()
    {
        GMAP_OBJ.disableScrollWheelZoom();
        GEvent.removeListener(rsListener);
    }

    
    /** Aktueller Mittelpunkt wiederherstellen wenn Karte in der Größe angepasst wird
    **
    ** keine Funktionsparamter vorhanden
    **
    */
    function resetCenterPosition()
    {
        var winH = 0;
        var winW = 0;                    
        
        saveMapAttributes();
        
        if (parseInt(navigator.appVersion)>3)
        {
        
            if (navigator.appName=="Netscape")
            {
                winW = window.innerWidth;
                winH = window.innerHeight;
                l = (MAP_DIV.offsetLeft+1)*2;
            }
            
            if (navigator.appName.indexOf("Microsoft")!=-1)
            {
                winW = document.body.offsetWidth;
                winH = document.body.offsetHeight;
                l = MAP_DIV.getBoundingClientRect().left*2;
            }
            
            h = document.getElementById('viewControls').offsetHeight;
        }
        
        MAP_DIV.style.width = (winW-l)+"px";
        MAP_DIV.style.height = (winH-h-l)+"px";
        
        GMAP_OBJ.checkResize();
        GMAP_OBJ.setCenter(currCenter, currZoomLevel);
    }

    
    /** HTML Code für Vollbildmodus generieren
    **
    ** @param::p_label -> TYPE: String ('Plaintext zur Anzeige als Link)
    **
    */
    function getFullscreenContent(p_label)
    {
        newBodyContent = '<div id="gmap_wrap_fullscreen">';
            newBodyContent += '<div id="gmap_wrap_all">';
                newBodyContent += '<div id="gmap_wrap">';
                    newBodyContent += '<p id="viewControls" class="show_page">';
                    if(debug) newBodyContent += '<span id="ZOOMLEVEL_CONTAINER"></span> | ';
                    newBodyContent += '<a href="javascript:void(0);" onClick="switchStyle(\'PAGE\');">'+p_label+'</a></p>';
                    newBodyContent += '<div id="gmap_container_2"></div>';
                newBodyContent += '</div>';
            newBodyContent += '</div>';
        newBodyContent += '</div>';
        
        return newBodyContent;
    }

    
    /** Wechsel der Ansicht der Website zwischen Normal und Vollbildmodus
    **
    ** @param::p_modus -> TYPE: String ('MAP' für Vollbildmodus, 'PAGE' für Standardansicht)
    ** @param::p_label -> TYPE: String ('Plaintext als Label für Links)
    **
    */
    function switchStyle(p_modus, p_label)
    {
        saveMapAttributes();
        
        if(!p_label) p_label="";
        
        if(p_modus == 'MAP')
        {
            originalBodyContent = document.getElementsByTagName('body')[0].innerHTML;
            
            document.getElementsByTagName('body')[0].innerHTML = getFullscreenContent(p_label);
            document.getElementsByTagName('body')[0].style.padding = '10px';
            document.getElementsByTagName('body')[0].style.minHeight = '0';
            document.getElementsByTagName('body')[0].style.height = 'auto';
            document.getElementsByTagName('body')[0].style.width = 'auto';
            
            setNewMainMapObj('gmap_container_2');
            
            resetCenterPosition();
            enableMapResizing();
        }
        
        if(p_modus == 'PAGE')
        {
            disableMapResizing();
            
            document.getElementsByTagName('body')[0].innerHTML = originalBodyContent;
            
            document.getElementsByTagName('body')[0].style.padding = '10px';
            document.getElementsByTagName('body')[0].style.minHeight = '101%';
            document.getElementsByTagName('body')[0].style.height = 'auto';
            
            setNewMainMapObj('gmap_container');
            
            GMAP_OBJ.removeControl(currMapControl);
            currMapControl = new GLargeMapControl();
            GMAP_OBJ.addControl(currMapControl);
        }
    }

    
    
    /** speichern aller Marker in ein Array
    **
    ** @param::p_marker -> TYPE: Boolean (einzelner Marker)
    **
    */
    function saveMarkerInformation(p_marker)
    {
        // n = true  -> neuen Marker speichern
        // n = false -> bestehenden Marker überschreiben
        var n = true;
        
        for(var k=0; k<markerArray.length; k++)
        {
            if(p_marker.id == markerArray[k].id)
            {
                markerArray.splice(k, 1, p_marker);
                n = false;
            }
        }
        
        // neuen Marker an die hinterste Stelle im Array speichern
        if(n == true) markerArray[markerArray.length] = p_marker;
    }
    
    
    /** ID für neuen Marker ermitteln
    **
    ** keine Funktionsparameter vorhanden
    **
    */
    function getMarkerID()
    {
        return (MARKER_ID_COUNTER++);
    }

    
    /** Hauptfunktion um Marker zu erstellen
    **
    ** @param::p_pos            -> TYPE: GPoint / GLatLng    (Positionskoordinaten Längen-, Breitengrad) 
    ** @param::p_icon           -> TYPE: GIconIcon           (grafisches Symbol des Markers)
    ** @param::p_title,         -> TYPE: String              (Plaintext für InfoWindowHTML-Box)
    ** @param::p_dragable       -> TYPE: Boolean             (verschieben des Markers)
    ** @param::p_clickable      -> TYPE: Boolean             (Reaktion auf Mausklick)
    ** @param::p_bouncy         -> TYPE: Boolean             (Springeffekt beim Verschieben des Markers)
    ** @param::p_bounceGravity  -> TYPE: Number              (Gravitationsstärke)
    ** @param::p_dragCrossMove  -> TYPE: Boolean             (kleines Kreuz auf Karte beim Verschieben anzeigen)
    ** @param::p_addData        -> TYPE: Boolean OR GXml     (bei FALSE: Marker auf Map darstellen, bei TRUE oder GXml: keine Darstellung des Markers)
    ** @param::p_id             -> TYPE: Number              (ID des Markers, falls vorhanden)
    **
    ** @return::marker          -> TYPE: GMarker (neu erzeugtes MarkerObject wird zurückgegeben)
    **
    */
    function createNewMarker(p_pos, p_icon, p_title, p_dragable, p_clickable, p_bouncy, p_bounceGravity, p_dragCrossMove, p_addData, p_id)
    {
        var marker = '';
        
        if(p_icon == '')             p_icon = G_DEFAULT_ICON;
        if(p_title == '')            p_title = '';
        if(p_dragable == '')         p_dragable = false;
        if(p_clickable == '')        p_clickable = true;
        if(p_bouncy == '')           p_bouncy = true;
        if(p_bounceGravity == '')    p_bounceGravity = 1;
        if(p_dragCrossMove == '')    p_dragCrossMove = true;
        if(p_id == undefined)        p_id = getMarkerID();
        
        marker = new GMarker(p_pos, {icon: p_icon, title: p_title, draggable: p_dragable, clickable: p_clickable, bouncy: p_bouncy, bounceGravity: p_bounceGravity, dragCrossMove: p_dragCrossMove});
        
        marker.pos =            p_pos;
        marker.icon =           p_icon;
        marker.title =          p_title;
        marker.dragable =       p_dragable;
        marker.clickable =      p_clickable;
        marker.bouncy =         p_bouncy;
        marker.bounceGravity =  p_bounceGravity;
        marker.dragCrossMove =  p_dragCrossMove;
        marker.id =             p_id;

        marker.label =          p_addData['label'];
        marker.typ =            p_addData['typ'];
        marker.aktiv =          p_addData['aktiv'];
        marker.idkenn =         p_addData['idkenn'];
        marker.link =           p_addData['link'];
        
        if(p_addData)
        {
            marker.infoWindowContent = '';
            marker.infoWindowContent += '<div id="infoWindowContentInformation">';
                marker.infoWindowContent += '<img src="fileadmin/googlemaps/contentpics/map_'+marker.idkenn+'.gif" height="65" />';
                marker.infoWindowContent += '<div class="linkToDetails">';
                    marker.infoWindowContent += '<a href="'+marker.link+'" title="Alle Details anzeigen">alle Details anzeigen</a> (<a class="link_new_window" href="'+marker.link+'" target="_blank" title="in neuem Fenster öffnen">in neuem Fenster</a>)';
                marker.infoWindowContent += '</div>';
            marker.infoWindowContent += '</div>';
            
        }else{
        
            GMAP_OBJ.addOverlay(marker);
            alert("MARKER WURDE NICHT VOM MARKERMANAGER GESETZT!");
        
        }
        
        if(p_dragable) { initOnDragEventMarker(marker); }
        
        if(p_clickable)
        {
            initOnClickEventMarker(marker, 'infoWindowContent');
            initOnDoubleClickEventMarker(marker);
        }
        
        return marker;
    }
    
    
    /** Marker auf der Karte neu anzeigen
    **
    ** @param::p_markerArr -> TYPE: Array (Array mit allen Markerinformationen)
    **
    */
    function refreshMarkerOnMap(p_markerArr)
    {
        if(!p_markerArr) p_markerArr = markerArray;
        GMAP_OBJ.clearOverlays();
        
        saveMapAttributes();
        setNewMainMapObj(MAP_DIV.id);
    }
    
    
    /** Marker auf Karte wiederherstellen
    **
    ** @param::p_markerArr -> TYPE: Array (Array mit allen Markerinformationen)
    **
    */
    function createMarkerFromArray(p_markerArr)
    {
        for(var i=0; i<p_markerArr.length; i++)
        {
            createNewMarker(p_markerArr[i].pos, p_markerArr[i].icon, p_markerArr[i].title, p_markerArr[i].dragable, p_markerArr[i].clickable, p_markerArr[i].bouncy, p_markerArr[i].bounceGravity, p_markerArr[i].dragCrossMove, false, p_markerArr[i].id);        
            saveMarkerInformation(p_markerArr[i]);
        }
    }
    
    
    /** Marker auf der Karte entfernen
    **
    ** @param::p_markerId   -> TYPE: Number  (eindeutige ID des Markers)
    ** @param::p_chk        -> TYPE: Boolean (Wert der Checkbox im InfoWindow)
    **
    */
    function removeMarkerOverlay(p_markerId, p_chk)
    {
        if(!p_chk)
        {
            alert('Bitte bestätigen Sie zuerst das Löschen!');
        }else{
            removeOneMarkerFromArray(p_markerId);
        }
    }
    
    
    /** einen Marker aus dem Array löschen und die Ansicht refreshen
    **
    ** @param::p_markerId -> TYPE: Number (eindeutige ID eines Markers)
    **
    */
    function removeOneMarkerFromArray(p_markerId)
    {
        /*traceMarkerArray()*/
        if(p_markerId == markerArray[markerArray.length-1].id)
            newMarkerAdded = false;
        
        for(var i=0; i<markerArray.length; i++)
        {
            if(p_markerId == markerArray[i].id)
                markerArray.splice(i, 1);
        }

        refreshMarkerOnMap(markerArray);
        /*traceMarkerArray()*/
    }
    
    
    /** nur ein eiziger Marker in ein Array speichern
    **
    ** keine Funktionsparameter vorhanden
    **
    */
    function removeAllMarker()
    {
        markerArray = new Array();
        GMAP_OBJ.clearOverlays();
    }
    
/* ############################################################################################################################# */
