﻿// JScript File
function createMapRequest() 
{
    var ro;
    var browser = navigator.appName;
    ro = (browser == "Microsoft Internet Explorer") ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
    return ro;
}

var mapRequest = createMapRequest(); // für die Karte und die abhängigen Kartenobjekte
var imageMapRequest = createMapRequest(); // für die Tooltips der Kartensymbole
var scaleBarRequest = createMapRequest(); // für die Maßstabsleiste der Kartensymbole

function getMapRequestByResize(width, height) 
{ 
    if (document.getElementById("wait")!=null) document.getElementById("wait").style.display = "block";
    mapRequest.open('get', 'WebMap_service/Wms.asmx/GetMapRequestByResize?width='+width+'&height='+height);
    mapRequest.onreadystatechange = setMapRequest;
    mapRequest.send(null);
}
    
function getMapRequestByExtent(x1,y1,x2,y2) 
{ 
    if (document.getElementById("wait")!=null) document.getElementById("wait").style.display = "block";
    mapRequest.open('get', 'WebMap_service/Wms.asmx/GetMapRequestByExtent?x1='+x1+'&y1='+y1+'&x2='+x2+'&y2='+y2);
    mapRequest.onreadystatechange = setMapRequest;
    mapRequest.send(null);
}

function getMapRequestByPan(x1,y1,x2,y2) 
{ 
    if (document.getElementById("wait")!=null) document.getElementById("wait").style.display = "block";
    mapRequest.open('get', 'WebMap_service/Wms.asmx/GetMapRequestByPan?x1='+x1+'&y1='+y1+'&x2='+x2+'&y2='+y2);
    mapRequest.onreadystatechange = setMapRequest;
    mapRequest.send(null);
}

function getMapRequestByCenter(x,y) 
{ 
    if (document.getElementById("wait")!=null) document.getElementById("wait").style.display = "block";
    mapRequest.open('get', 'WebMap_service/Wms.asmx/GetMapRequestByCenter?x='+x+'&y='+y);
    mapRequest.onreadystatechange = setMapRequest;
    mapRequest.send(null);
}

function getMapRequestByScale(scale) 
{ 
    if (document.getElementById("wait")!=null) document.getElementById("wait").style.display = "block";
    mapRequest.open('get', 'WebMap_service/Wms.asmx/GetMapRequestByScale?scale='+scale);
    mapRequest.onreadystatechange = setMapRequest;
    mapRequest.send(null);
}

function getMapRequestByZoom(mode) 
{ 
    if (document.getElementById("wait")!=null) document.getElementById("wait").style.display = "block";
    mapRequest.open('get', 'WebMap_service/Wms.asmx/GetMapRequestByZoom?mode='+mode);
    mapRequest.onreadystatechange = setMapRequest;
    mapRequest.send(null);
}

function getMapRequestByMove(mode) 
{ 
    if (document.getElementById("wait")!=null) document.getElementById("wait").style.display = "block";    
    mapRequest.open('get', 'WebMap_service/Wms.asmx/GetMapRequestByMove?mode='+mode);
    mapRequest.onreadystatechange = setMapRequest;
    mapRequest.send(null);
}

function getMapRequestByMapBase(layer)
{
    if (document.getElementById("wait")!=null) document.getElementById("wait").style.display = "block";
    document.getElementById("wait").src = document.getElementById("wait").src;
    mapRequest.open('get', 'WebMap_service/Wms.asmx/GetMapRequestByMapBase?layer='+layer);
    mapRequest.onreadystatechange = setMapRequest;
    mapRequest.send(null);
}

function getMapRequestByOutline(x,y)
{
    if (document.getElementById("wait")!=null) document.getElementById("wait").style.display = "block";
    mapRequest.open('get', 'WebMap_service/Wms.asmx/GetMapRequestByOutline?x='+x+'&y='+y);
    mapRequest.onreadystatechange = setMapRequest;
    mapRequest.send(null);
}

function getMapRequestByShortCut(index)
{
    if (document.getElementById("wait")!=null) document.getElementById("wait").style.display = "block";
    document.getElementById("wait").src = document.getElementById("wait").src;
    mapRequest.open('get', 'WebMap_service/Wms.asmx/GetMapRequestByShortCut?index='+index);
    mapRequest.onreadystatechange = setMapRequest;
    mapRequest.send(null);    
    ExecButtonCommand(this, "INFO");
}

function getMapRequestByInfo(infoId,x,y)
{    
    if (document.getElementById("wait") != null) document.getElementById("wait").style.display = "block";
    var id = infoId.substring(3, infoId.length); // extrahieren der id
    mapRequest.open('get', 'WebMap_service/Wms.asmx/GetMapRequestByInfo?id='+id+'&x='+x+'&y='+y);
    mapRequest.onreadystatechange = setMapRequest;
    mapRequest.send(null);
    document.getElementById(InfoControl_MapFeatureInfo).style.display = "none";
    //$(InfoControl_MapFeatureInfo).fade();
}

function deleteFeatureInfo(e)
{
    
    if (document.getElementById("wait")!=null) document.getElementById("wait").style.display = "block";
    mapRequest.open('get', 'WebMap_service/Wms.asmx/DeleteFeatureInfo');
    mapRequest.onreadystatechange = setMapRequest;
    mapRequest.send(null);    
    
    if(msie) e.cancelBubble = true; else e.stopPropagation();
    document.getElementById(InfoControl_MapFeatureInfo).style.display = "none";
    //$(InfoControl_MapFeatureInfo).fade();

    return false;
}

function stopPropagation(e)
{
    if(msie) e.cancelBubble = true; else e.stopPropagation();
    return false;
}

function toggleFeatureInfo()
{
    mapRequest.open('get', 'WebMap_service/Wms.asmx/ToggleFeatureInfo');
    mapRequest.send(null);
    
    // Das Objekt welches den FeatureInfo aufnimmt
    var featureInfo = document.getElementById(InfoControl_MapFeatureInfo);
    
    if (featureInfo.style.position == 'absolute')
    {
        featureInfo.style.top = "0px";
        featureInfo.style.left = "0px";
        featureInfo.style.position = "relative";
        featureInfo.style.display = "block";
        featureInfo.parentElement.insertBefore(featureInfo);
    }
    else
    {
        featureInfo.style.top = oMapPos.top + "px";
        featureInfo.style.left = oMapPos.left + "px";
        featureInfo.style.position = "absolute";        
    }
}

function getImageMaps() 
{ 
    imageMapRequest.open('get', 'WebMap_service/Wms.asmx/GetImageMaps');
    imageMapRequest.onreadystatechange = setImageMaps;
    imageMapRequest.send(null);
}

//function setFeatureInfoRequest() 
function setFeatureInfoRequest(FeatureInfoNode)
{   
    // Das Objekt welches den FeatureInfo aufnimmt zuweisen
    if( typeof InfoControl_MapFeatureInfo == "undefined") return;
    var featureInfo = document.getElementById(InfoControl_MapFeatureInfo);
    
    
    // Sichtbarkeit festlegen
    InfoVisible = FeatureInfoNode.getElementsByTagName("Visible").item(0);
    
    if (InfoVisible != null && getInnerText(InfoVisible) == "True")
    {
        InfoText= FeatureInfoNode.getElementsByTagName("Info").item(0);                
        
        if (InfoText != null) 
        {
            var gml = getInnerText(InfoText); // Informationstext setzen  
            featureInfo.innerHTML = "";                             
            featureInfo.innerHTML = gml; 
        }

        // Wenn ein Element FeatureDisplay da ist (Anzeige der Information in Karte)
        // Element ist erst nach setzen von featureInfo.innerHTML vorhanden
        var featureDisplay = FeatureInfoNode.getElementsByTagName("DisplayMode").item(0);
        setTaskPane(getInnerText(featureDisplay));
            
        // Sichtbarschalten von FeatureInfo
        $(InfoControl_MapFeatureInfo).appear({ to: 0.95 });
    }
    else
    {
        if ($(InfoControl_MapFeatureInfo).style.display=="block")
            $(InfoControl_MapFeatureInfo).fade();
    }
}

function setMapRequest() 
{ 

    if(mapRequest.readyState == 4)
    {
        var response = mapRequest.responseXML;
        
        var containerWidth = getContainerWidth();
        var containerHeight = getContainerHeight();

        // Hole die Knoten für die unterschiedlichen Objekte
        WmsNode = response.getElementsByTagName("Wms").item(0);
        
        if(WmsNode != null)
        {
            TimeOutNode = WmsNode.getElementsByTagName("TimeOut").item(0);
            
            if (TimeOutNode!=null) 
            {
                self.location.href = getInnerText(TimeOutNode);
                return false;
            }
            
            MapNode = WmsNode.getElementsByTagName("GetMap").item(0);
            OutlineNode = WmsNode.getElementsByTagName("GetOutline").item(0);
            SliderNode = WmsNode.getElementsByTagName("GetSlider").item(0);
            CopyrightNode = WmsNode.getElementsByTagName("GetMapCopyright").item(0);
            LegendNode = WmsNode.getElementsByTagName("GetLegend").item(0);
            XLinkNode = WmsNode.getElementsByTagName("GetLinks").item(0);
            FeatureInfoNode = WmsNode.getElementsByTagName("GetFeatureInfo").item(0);
            
            // Clippen der Karte mit dem neuen Extent     
            var clipRegion = "rect(0px "+containerWidth+"px "+containerHeight+"px 0px)";
            document.getElementById(MapControl_MapClip).style.clip = clipRegion;

            // Setzen des MapRequests
            if (MapNode!=null)
                getMap().src = getInnerText(MapNode); // setzen von GetMap
            
            // Setzen der Maßstabsleiste
            if (document.getElementById("Scalebar")!=null)
                document.getElementById("Scalebar").src = "GetScaleBar.ashx?MaxDisplayWidth=500&PaddingWidth=5&PaddingHeight=5&rid="+Math.random();
           
            // Setze FeatureInfo
            if (FeatureInfoNode!=null)
                setFeatureInfoRequest(FeatureInfoNode)
            
            // Setzen des Übersichtskärtchen
            if (OutlineNode!=null)
            {        
                // Übersichtskarte absolut positionieren
                var OutlineRect = document.getElementById("OutlineRect")
                
                // Übersichtrechteck positioneieren und sichtbar schalten
                if (OutlineRect!=null) {
                    OutlineRect.style.left = parseInt(getInnerText(OutlineNode.getElementsByTagName("Left").item(0)))+"px";
                    OutlineRect.style.top = parseInt(getInnerText(OutlineNode.getElementsByTagName("Top").item(0)))+"px";
                    OutlineRect.style.width = parseInt(getInnerText(OutlineNode.getElementsByTagName("Width").item(0)))+"px";
                    OutlineRect.style.height = parseInt(getInnerText(OutlineNode.getElementsByTagName("Height").item(0)))+"px";
                    OutlineRect.style.display = "block";
                }
            }
            
            // Setzen des ZoomSliders wenn der Knoten vorhanden ist
            if (SliderNode!=null)
            {
                minScale = parseInt(getInnerText(SliderNode.getElementsByTagName("MinScale").item(0)));
                maxScale = parseInt(getInnerText(SliderNode.getElementsByTagName("MaxScale").item(0)));
                curScale = parseInt(getInnerText(SliderNode.getElementsByTagName("CurScale").item(0)));
                moveFactor = parseFloat(getInnerText(SliderNode.getElementsByTagName("MoveFactor").item(0)));
                zoomFactor = parseFloat(getInnerText(SliderNode.getElementsByTagName("ZoomFactor").item(0)));

                SetScaleSliderPos();
            }
            
            var MapCopyright = document.getElementById(MapControl_MapCopyright);
            if(CopyrightNode != null && MapCopyright != null)
            {
                //Copyrighttext setzen
                document.getElementById(MapControl_MapCopyright).innerHTML = getInnerText(CopyrightNode);
                
                //Position des Copyrightvermerks setzen
                MapCopyright.style.display = "block";
            }
            else
                MapCopyright.style.display = "none";

            // Setzen des externen Links, sofern vorhanden
            if( typeof XLinkControl_MapXLink != 'undefined') 
            {
                var XLinkCtrl = document.getElementById(XLinkControl_MapXLink); // Container
                
                if (XLinkNode!=null && XLinkCtrl != null) 
                {
                    XLinkCtrl.innerHTML = getInnerText(XLinkNode); // Link
                    setTaskPane("Outside");
                    $(XLinkCtrl).appear({ to: 0.95 });
                }
                   
            }
            
            // Setzen der Legende
            if (LegendNode!=null && document.getElementById("LegendPlaceHolder") != null)
                if (document.getElementById("LegendPlaceHolder").innerHTML != getInnerText(LegendNode))
                    document.getElementById("LegendPlaceHolder").innerHTML = getInnerText(LegendNode);            
        }       
    }
}

function setImageMaps()
{
    if(imageMapRequest.readyState == 4)
    {
        var response = imageMapRequest.responseXML;
        var infoMap = document.getElementById("InfoMap");
        
        if (infoMap==null) 
        {
            infoMap = document.createElement("map");
            infoMap.id = "InfoMap";
            infoMap.name = "InfoMap";
            infoMap.onmousewheel = cancleOnMouseWheel;
        }
           
        var imageMapNode = response.getElementsByTagName("ImageMap").item(0);
        if (imageMapNode!=null)
        {
            infoMap.innerHTML = getInnerText(imageMapNode);
            document.getElementById(MapControl_MapClip).appendChild(infoMap);
            
            // Hand über Symbol setzen
            var areaColl = infoMap.getElementsByTagName("AREA");
            for (i=0;i<areaColl.length;i++)
                if (executeCommand == MAP_INFO) 
                    areaColl.item(i).setAttribute("href","javascript:ret()");
        }
    }
}

function setTaskPane(mode)
{
    var taskPane = document.getElementById("Task");
    if (mode == "Outside" && taskPane!=null)
    {
        taskPane.style.top = (getElementPosition(getContainer()).top) +"px";
        taskPane.style.left = (getElementPosition(getContainer()).left + getContainerWidth() - 312)+"px";
        taskPane.style.position = "absolute";
    }
    else
    {   
        $(InfoControl_MapFeatureInfo).style.top = "0px";
        $(InfoControl_MapFeatureInfo).style.right = "0px";
        $(InfoControl_MapFeatureInfo).style.position = "relative";        
    }
}

function cancleOnMouseWheel()
{
    // Beim Drehen des Mausrads wird die Seite gescrollt, deswegen unterbinden
    var infoMap = document.getElementById("InfoMap");
    infoMap.removeNode(true);
    window.event.cancelBubble = true;
    return false;
}

// Hilfsfunktion zum ermitteln des Strings in einem bestimmten XMLNode
function getInnerText(XMLnode) 
{
   var text="";
    
   if (typeof XMLnode.textContent != 'undefined') { 
     text = XMLnode.textContent; 
   } 
   else if (typeof XMLnode.innerText != 'undefined') { 
     text = XMLnode.innerText; 
   } 
   else if (typeof XMLnode.text != 'undefined') { 
     text = XMLnode.text; 
   }
      
   return text;
}

function checkMapSize()
{
    // Den ViewerFrame neu anpassen, wichtig für Layout in XHtml
    resizeViewerFrame();
    
    // Größe und Breite des Containers
    var width = getContainerWidth();
    var height = getContainerHeight();
    
    // ACHTUNG: Safari 3 Workaround, weil der Browser anscheinend anders rendert
    if (height==0) height = parseInt(document.getElementById('mapframe').offsetHeight);

    // Anfordern des MapRequests
    getMapRequestByResize(width, height);   
    
    //Tools neu positionieren
    InitToolPosition(true);
}

function onMapLoaded()
{
    // Zurücksetzen der Kartenparameter
    var width = getContainerWidth();
    var height = getContainerHeight();
    
    // Zurücksetzen des Kartenextents auf die aktuelle Größe
    // da durch Mausrad oder ZoomSlider diese verstellt worden sein könnte
    getMap().style.width = width+"px";
    getMap().style.height = height+"px";
    
    // Zurücksetzen der Position, wenn Karte durch Pan verschoben wurde
    getMap().style.top = "0px";
    getMap().style.left = "0px";
    getMap().style.position = "absolute";   //wichtig bei älteren Browsern
    
    // Hole die ImageMaps für die Tooltips
    getImageMaps();
    
    // Karte geladen
    if (document.getElementById("wait")!=null)
    {
        if (getMap().src.indexOf("transparentpixel.gif") == -1)
            document.getElementById("wait").style.display = "none";
    }
}