
//var mgr;

//var minZoomShow = 10;
var minZoomShow = 8;

var baseIcon = new GIcon();
baseIcon.iconAnchor = new GPoint(29, 29);
baseIcon.iconSize = new GSize(40, 40);
var resultMarker;

var foundIcon = new GIcon();
foundIcon.iconSize = new GSize(59, 59);
foundIcon.iconAnchor = new GPoint(29,29);
foundIcon.image = pinIcon;


var foundKreisIcon = new GIcon();
foundKreisIcon.iconSize = new GSize(32, 32);
foundKreisIcon.iconAnchor = new GPoint(16,16);
foundKreisIcon.image = kreisIcon;


var infoboxPoiPoint = null;

var poisBbox = new Array(0, 0, 0, 0);

var ortmarker;

    function OrtMarker(point, icon) {
        this.point = point;
        this.icon = icon;
        this.marker = new GMarker(point, icon);
    }

    function setPointCoords(myPoint){
        infoboxPoiPoint = myPoint;
    }
    function getPointLat(){
        return infoboxPoiPoint.lat();
    }

    function getPointLng(){
        return infoboxPoiPoint.lng();
    }

    function getResultMarker(){
        return resultMarker;
    }
    
    function handleLayers(xmlurl, myMap, addListener){
        if(myMap.getZoom() >= minZoomShow){
            GDownloadUrl(xmlurl, function(data, responseCode) {
                if(data==""){
                     myMap.clearOverlays();
                     return;
                }
                var xml = GXml.parse(data);
                var placemarks;
                try{
                    placemarks = xml.documentElement.getElementsByTagName("Placemark");
                }catch(e){
                    
                }
                var mrks = new Array();
                var type;
                for (var i = 0; i < placemarks.length; i++) {
                    type = placemarks[i].getAttribute("type");
                    if(type == "point"){
                        handlePoint(placemarks[i], myMap, addListener, mrks);
                    }
                }
                    myMap.clearOverlays();
                    for (var i = 0; i < mrks.length; i++)
                        myMap.addOverlay(mrks[i]);
            });
        }else{
            myMap.clearOverlays();
        }
    }
    
    function handleCommon(xmlurl, myMap, addListener){
        if(myMap.getZoom() >= minZoomShow){
            GDownloadUrl(xmlurl, function(data, responseCode) {
                if(data==""){
                    myMap.clearOverlays();
                    if(resultMarker){
                        myMap.addOverlay(resultMarker);
                    }
                    return;
                }
                var xml = GXml.parse(data);
                var placemarks;
                try{
                    placemarks = xml.documentElement.getElementsByTagName("Placemark");
                }catch(e){
                    myMap.clearOverlays();
                    if(resultMarker){
                        myMap.addOverlay(resultMarker);
                    }
                    return;
                }
                var mrks = new Array();
                var type;
                for (var i = 0; i < placemarks.length; i++) {
                    type = placemarks[i].getAttribute("type");
                    if(type == "point"){
                        handlePoint(placemarks[i], myMap, addListener, mrks);
                    }
                }
                myMap.clearOverlays();
                for (var i = 0; i < mrks.length; i++)
                    myMap.addOverlay(mrks[i]);
                if(resultMarker){
                    myMap.addOverlay(resultMarker);
                }
                try{
                    if(ortmarker){
                        myMap.addOverlay(ortmarker);
                        ortmarker.marker = new GMarker(ortmarker.point, ortmarker.icon);
                        myMap.addOverlay(ortmarker);
                    }
                }catch(e){ alert(e);}
            });
        }else{
            myMap.clearOverlays();
        }
    }

    function handleXML(xmlurl, myMap, addListener){
        if(lays == true)
            handleLayers(xmlurl, myMap, addListener);
        else
            handleCommon(xmlurl, myMap, addListener);
    }


    function handlePolygon(placemark, myMap, myPolygons){
        try{
            // Spitzen- Koordinaten ermitteln
            var coordHelp = (placemark.getElementsByTagName("coordinates"))[0].childNodes[0].nodeValue.split(" ");
            var coords = new Array();
            for(var i = 1; i < coordHelp.length; i+=2){
                setMinMax(coordHelp[i-1], coordHelp[i]);
                coords.push(new GLatLng(parseFloat(coordHelp[i]),parseFloat(coordHelp[i-1])));
            }

            var strokeWidth = (placemark.getElementsByTagName("strokewidth"))[0].childNodes[0].nodeValue;
            var strokeColor = (placemark.getElementsByTagName("strokecolor"))[0].childNodes[0].nodeValue;
            var strokeOpacity = parseInt(strokeColor.substring(0,2),16)/255;
            strokeColor = "#"+strokeColor.substring(6)+strokeColor.substring(4,6)+strokeColor.substring(2,4);

            var fillColor = (placemark.getElementsByTagName("fillcolor"))[0].childNodes[0].nodeValue;
            var fillOpacity = parseInt(fillColor.substring(0,2),16)/255;
            fillColor = "#"+fillColor.substring(6)+fillColor.substring(4,6)+fillColor.substring(2,4);
             myPolygons.push(new GPolygon(coords, strokeColor, strokeWidth, strokeOpacity, fillColor, fillOpacity));
        }catch(e){ alert(e);}
    }

    // zum Darstellen von Punkt- objekten
    function handlePoint(placemark, myMap, addListener, mrks,myicon){
        // Icon-Koordinaten  ermitteln
        var coordHelp = (placemark.getElementsByTagName("coordinates"))[0].childNodes[0].nodeValue.split(" ");
        setMinMax(coordHelp[0], coordHelp[1]);
        var point = new GLatLng(parseFloat(coordHelp[1]),parseFloat(coordHelp[0]));
        // das Icon erstellen
        var icon;
        if(myicon){
            icon = myicon;
        }else{
            icon= new GIcon(baseIcon);
            var iconHref = (placemark.getElementsByTagName("href"))[0].childNodes[0].nodeValue;
            icon.image = iconHref;
        }
        var marker = new GMarker(point, icon);
        marker.setPoint(point);
        if(addListener == true){
            // dem Punkt den onMouseOver- Listener hinzufuegen

            GEvent.addListener(marker, "mouseover", function(overlay, point) {
                    // zuzaetzliche parameter ermitteln
                    var name = (placemark.getElementsByTagName("name"))[0].childNodes[0].nodeValue;
                    var typ = placemark.getAttribute("id");

                    my_multi_tooltip_open(new Array(name), new Array(placemark.getAttribute("id")),new Array(typ), 
                                        new Array(' '), '<font class=tooltip_titel>'+name+'<br></font>');

                    var myPos = getMyPos(marker.getPoint(), myMap);
                    if (myPos.x+tooltipwidth+2>myMapSize[0]-10) shiftx=-tooltipwidth-20-2; else shiftx=20;

                    shifty=30;
                    tooltip.style.left = (myMapPos[0]+myPos.x+shiftx)+"px";     
                    tooltip.style.top = (myMapPos[1]+myPos.y+shifty)+"px";
            });

            // dem Punkt den onMouseOut- Listener hinzufuegen
            GEvent.addListener(marker, "mouseout", function() {
                // Tooltip schliessen
                my_tooltip_close();
            });
            // dem Punkt den onClick- Listener hinzufuegen
            GEvent.addListener(marker, "click", function(overlay, point) {
//outMessage("click "+marker.getLatLng()+" "+marker.getLatLng().lat()+" "+marker.getLatLng().lng());
                // Koordinaten des Punkts setzen
                setPointCoords(marker.getPoint());
//outMessage(getPointLat()+' '+getPointLng());
                // id ermitteln
                my_infobox_open(placemark.getAttribute("id"));
                my_tooltip_close();
                infobox=document.getElementById("divInfoBox");
                infowidth = 260;  //parseInt(infobox.style.width);
                infoheight = 200; //parseInt(infobox.style.height)
                // marker- Koordinaten ermitteln
                var myPos = getMyPos(marker.getPoint(), myMap);

                if (myPos.x+infowidth+2>myMapSize[0]-10) shiftx=-infowidth-10-2; else shiftx=10;
                if (myPos.y+infoheight+2>myMapSize[1]-10) shifty=-infoheight-10-2; else shifty=10;

                // Position setzen und anzeigen
                infobox.style.left = (myMapPos[0]+myPos.x+shiftx)+"px";     
                infobox.style.top = (myMapPos[1]+myPos.y+shifty)+"px";
                infobox.style.visibility = "visible";

            });
        }
        mrks.push(marker);
    }

    function handleLine(placemark, myMap, myPolylines){
    
        // Spitzen- Koordinaten ermitteln
        var coordHelp = (placemark.getElementsByTagName("coordinates"))[0].childNodes[0].nodeValue.split(" ");
        var coords = new Array();
        for(var i = 1; i < coordHelp.length; i+=2){
            setMinMax(coordHelp[i-1], coordHelp[i]);
            coords.push(new GLatLng(parseFloat(coordHelp[i]),parseFloat(coordHelp[i-1])));
        }
        var color = (placemark.getElementsByTagName("color"))[0].childNodes[0].nodeValue;
        var opacity = parseInt(color.substring(0,2),16)/255;
        color = "#"+color.substring(6)+color.substring(4,6)+color.substring(2,4);
        var width = (placemark.getElementsByTagName("width"))[0].childNodes[0].nodeValue;

        var polyline = new GPolyline(coords, color, width, opacity);

        myPolylines.push(polyline);
    }


    function getMyPos(markerGetPoint, myMap){
        var latMin = myMap.getBounds().getSouthWest().lat();
        var latMax = myMap.getBounds().getNorthEast().lat();
        var lngMin = myMap.getBounds().getSouthWest().lng();
        var lngMax = myMap.getBounds().getNorthEast().lng();
        
        var karteWidth = myMap.getSize().width;
        var karteHeight = myMap.getSize().height;

        var markerLat = +markerGetPoint.lat();
        var markerLng = +markerGetPoint.lng();

        var myX = parseInt(lngMin+(markerLng-lngMin)/((lngMax-lngMin)/karteWidth));
        var myY = parseInt(karteHeight-(markerLat-latMin)/((latMax-latMin)/karteHeight));

        return new GPoint(myX, myY);
    }

    function setResultPoint(x,y){
        if(resultMarker){
            resultMarker = null;
        }
        var point = new GLatLng(parseFloat(y),parseFloat(x));
        resultMarker = new GMarker(point, foundIcon);
    }
    
    function rersetPoisBBox(){
        poisBbox[0] = parseFloat(360);
        poisBbox[1] = parseFloat(360);
        poisBbox[2] = parseFloat(-360);
        poisBbox[3] = parseFloat(-360);
        outMessage("poisBbox reset "+poisBbox);
    }
    function setMinMax(rw,hw){
        if(rw > poisBbox[2]) 
            poisBbox[2] = parseFloat(rw);
        if(rw < poisBbox[0]) 
            poisBbox[0] = parseFloat(rw);
        if(hw > poisBbox[3]) 
            poisBbox[3] = parseFloat(hw);
        if(hw < poisBbox[1]) 
            poisBbox[1] = parseFloat(hw);
    }
    
    function getResultCenter(){
        outMessage("poisBbox "+poisBbox+ new GLatLng(parseFloat((poisBbox[3]+poisBbox[1])/2),parseFloat((poisBbox[2]+poisBbox[0])/2)));
        return new GLatLng(parseFloat((poisBbox[3]+poisBbox[1])/2),parseFloat((poisBbox[2]+poisBbox[0])/2));
    }
    
    function getResultZoom(myMap){
        try{
            var mt = myMap.getCurrentMapType();
            outMessage("GMapType"+myMap.getMapTypes());
            var sw = new GLatLng(poisBbox[1], poisBbox[0]);
            var ne = new GLatLng(poisBbox[3], poisBbox[2]);
            outMessage("GMapType"+myMap.getBoundsZoomLevel(new GLatLngBounds(sw,  ne))+" "+myMap.getZoom());
            return myMap.getBoundsZoomLevel(new GLatLngBounds(sw,  ne))-1;
        }catch(e){ 
            return myMap.getZoom();
        }
        
        
    }
    
    function handleXMLFid(xmlurl, myMap, addListener){
        if(myMap.getZoom() >= minZoomShow){
            rersetPoisBBox();
            GDownloadUrl(xmlurl, function(data, responseCode) {
                if(data==""){
                     myMap.clearOverlays();
                    if(resultMarker){
                        myMap.addOverlay(resultMarker);
                    }
                    return;
                }
                var xml = GXml.parse(data);
                var placemarks;
                try{
                    placemarks = xml.documentElement.getElementsByTagName("Placemark");
                }catch(e){
                    myMap.clearOverlays();
                    if(resultMarker){
                        myMap.addOverlay(resultMarker);
                    }
                    return;
                }
                var mrks = new Array();
                for (var i = 0; i < placemarks.length; i++) {
                    //handlePoint(placemarks[i], myMap, addListener, mrks);
                    if(myCID)
                        handlePoint(placemarks[i], myMap, addListener, mrks, foundIcon);
		      else
			   handlePoint(placemarks[i], myMap, addListener, mrks);
                    myobjcid = placemarks[i].getAttribute("id");
                }

                myMap.clearOverlays();
                for (var i = 0; i < mrks.length; i++)
                    myMap.addOverlay(mrks[i]);
                addAddress(mybaseurl);
                
                if(resultMarker){
                    myMap.addOverlay(resultMarker);
                }
                try{
                    if(ortmarker){
                        ortmarker.marker = new GMarker(ortmarker.point, ortmarker.icon);
                        myMap.addOverlay(ortmarker);
                    }
                }catch(e){ alert(e);}
                
                setMapCenter(myMap, getResultCenter(), getResultZoom(myMap));
                setHome(myMap.getCenter().lat(), myMap.getCenter().lng(), myMap.getZoom());
            });
            setTimeout("setSlider()",500);
        }else{
            myMap.clearOverlays();
        }
        
    }
    
    function getHttpRequest(){
        var httpReq = null;
        if (window.XMLHttpRequest) {
            httpReq = new XMLHttpRequest(); // Mozilla, Safari, Opera
        }else if (window.ActiveXObject) {
            httpReq = new ActiveXObject('Microsoft.XMLHTTP');
        }
        return httpReq;
    }

var myobjcid;
var request;    
    function addAddress(myurl){
        request = getHttpRequest();
        if (request) {
            // Request-Handler setzen
            request.onreadystatechange = addData;
            // Request öffnen
            request.open('get', myurl+"CID="+myobjcid+"&url=mindwerk/gmclient/address.jsp", true);
            // Request senden
            request.send(null);
        }
    }
    function addData(){
        switch (request.readyState) {
            case 4:
                if (request.status != 200) {
                    alert("Die Adresse von dem eingegebenen Objekt kann nicht ermittelt werden\nFehler:"+request.status);
                }else{
                    //alert(request.responseText);
                    var data = request.responseText.split(";");
                    setIdAddress(data[1], data[2], data[3], data[4], data[5]);

                }
                break;
            default:
                break;
	}
    }
