var BaseLayerIsDa=false;
var GoogleIsDa=false;
var NL = "\r\n";
var Msg = "";

//####################################################################################
function setLocalUrl(Url)
{
    var adres = window.location["protocol"] + "//" + window.location["host"];

    if(adres == Url.substr(0,adres.length))
    {   console.log(Url.substr(adres.length));
        Url = Url.substr(adres.length);
    }

    return(Url);
}

//####################################################################################
function parseWMCfile(WMCfile)
{
    WMCfile = setLocalUrl(WMCfile);

    var QMark = WMCfile.search(/\?/)!=-1 ? "&" : "?";
    var req = OpenLayers.Request.issue(
    {
        method  : 'GET',
        url     : WMCfile + QMark + "SERVICE=WMC",
        params  : {},
        success : showResponse,
        failure : showResponseFailure
        //callback: function(){alert('Calling back');}
    });
}

function showResponse(originalRequest)
{
    if(window.ActiveXObject)
    {   //alert(originalRequest.responseText);
        GetWMCxml(originalRequest.responseText);
    }
    else
        GetWMCxml(originalRequest.responseXML);
}


function showResponseFailure(originalRequest)
{
    alert("Es ist ein Fehler aufgetreten!");
    //window.location.href =
}

var myXMLdoc;

function GetWMCxml(ajaxResponse)
{
    if(window.ActiveXObject)
    {
        var xmlObj = new OpenLayers.Format.XML;

        //Übergabe von ajaxResponse direkt an read funktioniert nicht!!!?
        document.getElementById("taMessage").value = ajaxResponse;
        xmlStr = document.getElementById("taMessage").value;

        XMLDocument = xmlObj.read(xmlStr);
    }
    else
        XMLDocument = ajaxResponse;

    myXMLdoc = XMLDocument;

    var ns="xmlns:";
    if(DefaultNSisDa(myXMLdoc))
        ns="ns:";

    myXMLdoc.setProperty("SelectionLanguage", "XPath");

     try{
         var WMTVER = myXMLdoc.documentElement.selectSingleNode("//" + ns + "ViewContext/@version").nodeValue;
     }catch(err){
         alert(err.message);
         return(false);
     }
     ;
     //Layer Parameter

     lyr_jsonstr = [];
     lyr_sid     = [];

     var Coll = myXMLdoc.documentElement.selectNodes("//" + ns + "LayerList/" + ns + "Layer");
     for(var i=0;i<Coll.length;i++)
     {
         theService = getInnerText( Coll[i].selectSingleNode(ns + "Server/@*[1]") );
         if(theService.toUpperCase() == "GOOGLE")
         {
             //es kann nur einen geben
             lyr_sid[lyr_sid.length] = "100000";
             BaseLayerIsDa=true;
             GoogleIsDa=true;
         }
         else if(theService == "OGC:WMS" || theService.toUpperCase() == "WMS")
         {
             lyr_sid[lyr_sid.length] = OpenLayers.Util.createUniqueID("lyrWMS_");
             lyr_jsonstr[lyr_jsonstr.length] = getWMSjson(lyr_sid[lyr_sid.length-1], Coll[i]);
         }
         else if(theService == "OL:IMG" || theService.toUpperCase() == "IMG")
         {
             lyr_sid[lyr_sid.length] = OpenLayers.Util.createUniqueID("lyrIMG_");
             lyr_jsonstr[lyr_jsonstr.length] = getIMGjson(lyr_sid[lyr_sid.length-1], Coll[i]);
         }
         else if(theService == "OGC:WFS")
         {
             lyr_sid[lyr_sid.length] = OpenLayers.Util.createUniqueID("lyrWFS_");
             lyr_jsonstr[lyr_jsonstr.length] = getWFSjson(lyr_sid[lyr_sid.length-1], Coll[i]);
         }
         else if(theService == "OL:KML" || theService == "OL:GML" || theService == "OL:GEOJSON" || theService == "OL:WKT" || theService == "OL:GEORSS")
         {
             lyr_sid[lyr_sid.length] = OpenLayers.Util.createUniqueID("lyr" + theService.split(":")[1] + "_");
             lyr_jsonstr[lyr_jsonstr.length] = getVECjson(lyr_sid[lyr_sid.length-1], theService.split(":")[1], Coll[i]);
         }
         else
             Msg += "Layer[" + i + "], Service : " + theService + " wird nicht unterstützt.";

     }

    //map Parameter
    var tmp = [];
    tmp[0] = parseFloat(getInnerText(myXMLdoc.documentElement.selectNodes("//" + ns + "ViewContext/" + ns + "General/" + ns + "BoundingBox/@minx")[0]));
    tmp[1] = parseFloat(getInnerText(myXMLdoc.documentElement.selectNodes("//" + ns + "ViewContext/" + ns + "General/" + ns + "BoundingBox/@miny")[0]));
    tmp[2] = parseFloat(getInnerText(myXMLdoc.documentElement.selectNodes("//" + ns + "ViewContext/" + ns + "General/" + ns + "BoundingBox/@maxx")[0]));
    tmp[3] = parseFloat(getInnerText(myXMLdoc.documentElement.selectNodes("//" + ns + "ViewContext/" + ns + "General/" + ns + "BoundingBox/@maxy")[0]));
    tmp[4] = parseFloat(getInnerText(myXMLdoc.documentElement.selectNodes("//" + ns + "ViewContext/" + ns + "General/" + ns + "Center/@centerx")[0]));
    tmp[5] = parseFloat(getInnerText(myXMLdoc.documentElement.selectNodes("//" + ns + "ViewContext/" + ns + "General/" + ns + "Center/@centery")[0]));

    tmp[6] = parseFloat(getInnerText(myXMLdoc.documentElement.selectNodes("//" + ns + "ViewContext/" + ns + "General/" + ns + "Zoom/@maxZoomLevel")[0]));
    tmp[7] = parseFloat(getInnerText(myXMLdoc.documentElement.selectNodes("//" + ns + "ViewContext/" + ns + "General/" + ns + "Zoom/@aktZoomLevel")[0]));

    tmp[8] = parseFloat(getInnerText(myXMLdoc.documentElement.selectNodes("//" + ns + "ViewContext/" + ns + "General/" + ns + "Scale/@maxScale")[0]));
    tmp[9] = parseFloat(getInnerText(myXMLdoc.documentElement.selectNodes("//" + ns + "ViewContext/" + ns + "General/" + ns + "Scale/@aktScale")[0]));

    tmp[10]= getInnerText(myXMLdoc.documentElement.selectNodes("//" + ns + "ViewContext/" + ns + "General/" + ns + "Units/@units")[0]);

    if(isNaN(tmp[6])) tmp[6]=16;
    if(isNaN(tmp[7])) tmp[7]=10;

    if(isNaN(tmp[4]))
    {   tmp[4] = (tmp[2]+tmp[0])/2;
        tmp[5] = (tmp[3]+tmp[1])/2;
    }

    var dx = tmp[2] - tmp[0];
    var dy = tmp[3] - tmp[1];

    //var fktr=2;
    var x0 = tmp[0];// - dx*fktr;
    var x1 = tmp[2];// + dx*fktr;
    var y0 = tmp[1];// - dy*fktr;
    var y1 = tmp[3];// + dy*fktr;

    mid_mid = OpenLayers.Util.createUniqueID("mid_");
    mid_title = getInnerText(myXMLdoc.documentElement.selectSingleNode("//" + ns + "ViewContext/" + ns + "General/" + ns + "Title"));

    mid_projection    = getInnerText(myXMLdoc.documentElement.selectNodes("/" + ns + "ViewContext/" + ns + "General/" + ns + "BoundingBox/@SRS")[0]);

    if(tmp[10]==null || tmp[10]=="")
        tmp[10] = mid_projection == "EPSG:4326" ? "dd" : "m";

Msg+=tmp[8] + "\r\n\r\n";

    if(isNaN(tmp[8]) && mid_projection=="EPSG:4326")
        tmp[8]=10;
    else if(isNaN(tmp[8]) && GoogleIsDa)
        tmp[8]=156543.03364453962;
    else if(isNaN(tmp[8]))
        tmp[8] = OpenLayers.Util.getResolutionFromScale(1000000,tmp[10]);
    else
        tmp[8]= OpenLayers.Util.getResolutionFromScale(tmp[8],tmp[10]);

Msg+=tmp[8] + "\r\n\r\n";

   mid_zoom          = tmp[7];
   if(GoogleIsDa)
   {
       mid_maxZoomLevel  = 22;
       mid_numZoomLevels = 22;
   }
   else
   {
       mid_maxZoomLevel  = tmp[6];
       mid_numZoomLevels = tmp[6];
   }

   mid_jsonstr  = '{map:';
   mid_jsonstr += ' [{';
   mid_jsonstr += '  mid : "' + mid_mid + '",';
   mid_jsonstr += '  title : "' + mid_title + '",';
   mid_jsonstr += '  options : {';
   mid_jsonstr += '    projection    : "' + mid_projection + '",';
   if(!GoogleIsDa)
       mid_jsonstr += '    maxExtent     : new OpenLayers.Bounds(' + x0 + ',' + y0 + ',' + x1 + ',' + y1 + '),';
   else
       mid_jsonstr += '    maxExtent     : new OpenLayers.Bounds(-120037508.34, -120037508.34, 120037508.34, 120037508.34),';

   mid_jsonstr += '    maxResolution : ' + tmp[8] + ',';

Msg+='    maxResolution : ' + tmp[8] + ',' + "\r\n\r\n";

   mid_jsonstr += '    zoom          : ' + mid_zoom + ',';
   mid_jsonstr += '    maxZoomLevel  : ' + mid_maxZoomLevel + ',';
   mid_jsonstr += '    numZoomLevels : ' + mid_numZoomLevels + ',';
   mid_jsonstr += '    center        : new OpenLayers.LonLat(' + tmp[4] + ',' + tmp[5] + '),';
   mid_jsonstr += '    units         : "' + tmp[10] + '",';
   mid_jsonstr += '    controls      : []';
   mid_jsonstr += '  }}]}';

 //Karte

     var kid_jsonstr="";
     var NL = "";

     var kid_kid = OpenLayers.Util.createUniqueID("kid_");

     kid_jsonstr += '{ karten :' + NL;
     kid_jsonstr += '[{';
     kid_jsonstr += '  title : "Projekt One",' + NL;
     kid_jsonstr += '    options : {' + NL;
     kid_jsonstr += '        kid    : "' + kid_kid + '",' + NL;
     kid_jsonstr += '        map    : "' + mid_mid + '",' + NL;

     if(BaseLayerIsDa)
         kid_jsonstr += '        layers : ["';
     else
         kid_jsonstr += '        layers : ["100030","';

 //Was ist mit Google !!! ?

     for(var i=0;i<lyr_sid.length;i++)
             kid_jsonstr += lyr_sid[i] + (i<lyr_sid.length-1 ? '","' : '"');

     kid_jsonstr += '],' + NL;


     kid_jsonstr += '        center : [' + tmp[4] + ', ' + tmp[5] + '],' + NL;
     kid_jsonstr += '        zoom   : ' + mid_zoom + NL;
     kid_jsonstr += '    }' + NL;
     kid_jsonstr += ' }]' + NL;
     kid_jsonstr += '}' + NL;

     for(var i=0;i<lyr_jsonstr.length;i++)
     {
         var objSrv = eval( '(' + lyr_jsonstr[i] + ')' );
         serverObj["server"][serverObj["server"].length] = objSrv["server"][0];
     }

     var objMap = eval( '(' + mid_jsonstr + ')' );

     mapObj["map"][mapObj["map"].length] = objMap["map"][0];

     var objKarten = eval( '(' + kid_jsonstr + ')' );
     kartenObj["karten"][kartenObj["karten"].length] = objKarten["karten"][0];

     mapInit(kid_kid);

     return (Msg + NL + kid_jsonstr + "\r\n" + mid_jsonstr + "\r\n" + lyr_jsonstr.join("\n"));
}

function getWFSjson(sid, theColl)
{
    var ns="xmlns:";
    if(DefaultNSisDa(myXMLdoc))
        ns="ns:";

    var projection   = getInnerText( theColl.selectSingleNode(ns + "SRS") );

    var Opacity    = typeof getInnerText( theColl.selectSingleNode(ns + "Extension/" + ns + "Opacity") )    == 'undefined' ? 1     : getInnerText( theColl.selectSingleNode(ns + "Extension/" + ns + "Opacity") );
    var Visibility = typeof getInnerText( theColl.selectSingleNode(ns + "Extension/" + ns + "Visibility") ) == 'undefined' ? false : getInnerText( theColl.selectSingleNode(ns + "Extension/" + ns + "Visibility") );
    var Layers     = typeof getInnerText( theColl.selectSingleNode(ns + "Extension/" + ns + "Layers") )     == 'undefined' ? getInnerText( theColl.selectSingleNode(ns + "Name") )    : getInnerText( theColl.selectSingleNode(ns + "Extension/" + ns + "Layers") );
    var LyrTitles  = typeof getInnerText( theColl.selectSingleNode(ns + "Extension/" + ns + "LyrTitle") )   == 'undefined' ? getInnerText( theColl.selectSingleNode(ns + "Title") )   : getInnerText( theColl.selectSingleNode(ns + "Extension/" + ns + "LyrTitle") );
    var XLayers    = typeof getInnerText( theColl.selectSingleNode(ns + "Extension/" + ns + "XLayers") )    == 'undefined' ? null   : getInnerText( theColl.selectSingleNode(ns + "Extension/" + ns + "XLayers") );
    var XQLayers   = typeof getInnerText( theColl.selectSingleNode(ns + "Extension/" + ns + "XQLayers") )   == 'undefined' ? null   : getInnerText( theColl.selectSingleNode(ns + "Extension/" + ns + "XQLayers") );

    var Visibility = typeof getInnerText( theColl.selectSingleNode("@hidden") ) == 'undefined' ? false : (getInnerText( theColl.selectSingleNode("@hidden") ) == "0" ? true : false);

    //Ex da
    if(XLayers != null)
    {
        var typename     = Layers;
        var lyrNames     = Layers.split(",");
        var lyrTitles    = LyrTitles.split(",");
        var visibleArr   = XLayers.split(",");
        var queryableArr = XQLayers.split(",");
        var qCheckedArr  = [];
        for(var i=0;i<lyrNames.length;i++)
            qCheckedArr[qCheckedArr.length] = 0;
        var aktlayers = "";
        for(var i=0;i<visibleArr.length;i++)
            if(visibleArr[i]==1)
                aktlayers += lyrNames[i] + ",";
        aktlayers = aktlayers.replace(/,$/,"");
    }
    else
    {
        var lyrNames     = Layers.split(",");
        var lyrTitles    = Layers.split(",");
        var aktlayers    = lyrNames.join(",");
        var visibleArr   = [];
        var queryableArr = [];
        var qCheckedArr  = [];
        for(var i=0;i<lyrNames.length;i++)
            queryableArr[queryableArr.length] = 0;

        visibleArr = queryableArr.slice();
        for(var i=0;i<lyrNames.length;i++)
            visibleArr[i]=1;
        var qCheckedArr  = queryableArr.slice();
    }
Msg+="WFS:" + aktlayers + "," + lyrNames + "\r\n" + lyrTitles + "\r\n";

    jsonStr  = '{ server:';
    jsonStr += '[';
    jsonStr += ' {';
    jsonStr += '   title: "' + getInnerText( theColl.selectSingleNode(ns + "Server/@*[3]") ) + '",';
    jsonStr += '   url: "' + getInnerText( theColl.selectSingleNode("ns:Server/ns:OnlineResource/@*[2]") ) + '",';
    jsonStr += '   mapfile: "",';
    jsonStr += '   params : [';
    jsonStr += '     { typename: "' + typename + '"},';
    jsonStr += '     { typename: "' + typename + '",';
    jsonStr += '       maxfeatures:100,';
    jsonStr += '       extractAttributes:true,';
    jsonStr += '       projection : new OpenLayers.Projection("' + projection + '")';
    jsonStr += '     }';


    jsonStr += '   ],';
    jsonStr += '   options : {';
    jsonStr += '     typename          : "' + typename + '",';
    jsonStr += '     maxfeatures       : 100,';
    jsonStr += '     extractAttributes : true,';
    jsonStr += '     isBaseLayer       : false,';
    jsonStr += '     isVisible         : ' + Visibility + ',';
    jsonStr += '     buffer            : 1,';
    jsonStr += '     opacity           : 1';
    jsonStr += '   },';
    jsonStr += '   vendor : {';
    jsonStr += '     sid           : "' + sid + '",';
    jsonStr += '     service       : "WFS",';
    jsonStr += '     aktlayers     : "' + typename + '",';
    jsonStr += '     aktqlayers    : "",';
    jsonStr += '      lyrNames     : ["' + lyrNames.join('","') + '"],';
    jsonStr += '      lyrTitles    : ["' + lyrTitles.join('","') + '"],';
    jsonStr += '      lyrVisible   : [' + visibleArr.join(",") + '],';
    jsonStr += '      lyrQueryable : [' + queryableArr.join(",") + '],';
    jsonStr += '      lyrQChecked  : [' + qCheckedArr.join(",") + ']';
    jsonStr += '   }';
    jsonStr += ' }';
    jsonStr += ']';
    jsonStr += '}';

    return(jsonStr);
}

function getVECjson(sid, theService, theColl)
{
    var ns="xmlns:";
    if(DefaultNSisDa(myXMLdoc))
        ns="ns:";

    var Visibility = typeof getInnerText( theColl.selectSingleNode("@hidden") ) == 'undefined' ? false : (getInnerText( theColl.selectSingleNode("@hidden") ) == "0" ? true : false);

    jsonStr  = '{ server:';
    jsonStr += '[';
    jsonStr += '  {';
    jsonStr += '     title: "' + getInnerText( theColl.selectSingleNode(ns + "Server/@*[3]") ) + '",';
    jsonStr += '     url: "' + getInnerText( theColl.selectSingleNode("ns:Server/ns:OnlineResource/@*[2]") ) + '",';
    jsonStr += '     mapfile: "",';
    jsonStr += '     params : {';
    jsonStr += '       transparent:true';
    jsonStr += '     },';
    jsonStr += '     options : {';
    jsonStr += '       projection  : "' + getInnerText( theColl.selectSingleNode(ns + "SRS") ) + '",';

    jsonStr += '       format : OpenLayers.Format.'+theService+',';
    jsonStr += '       formatOptions : {';

    if(dont_extractStyles)
        jsonStr += '         extractStyles: false,';
    else
        jsonStr += '         extractStyles: true,';
    if(dont_extractAttributes)
        jsonStr += '         extractAttributes: false';
    else
        jsonStr += '         extractAttributes: true';
    jsonStr += '       },';

    jsonStr += '       isBaseLayer : false,';
    jsonStr += '       isVisible   : ' + Visibility + ',';
    jsonStr += '       buffer      : 1,';
    jsonStr += '       opacity     : 1';
    jsonStr += '     },';
    jsonStr += '     vendor : {';
    jsonStr += '       sid          : "' + sid + '",';
    jsonStr += '       service      : "' + theService + '",';
    jsonStr += '       ftype        : "' + theService + '",';

    var parseOptions  = typeof getInnerText( theColl.selectSingleNode(ns + "Extension/" + ns + "parseOptions") )   == 'undefined' ? null   : getInnerText( theColl.selectSingleNode(ns + "Extension/" + ns + "parseOptions") );
    if(parseOptions!=null)
        jsonStr += '       parseOptions : "' + parseOptions + '",';

    jsonStr += '       reproject    : false,';
    jsonStr += '       aktlayers    : "' + getInnerText( theColl.selectSingleNode(ns + "Name") ) + '",';
    jsonStr += '       aktqlayers   : "",';
    jsonStr += '       lyrNames     : ["' + getInnerText( theColl.selectSingleNode(ns + "Name") ) + '"],';
    jsonStr += '       lyrTitles    : ["' + getInnerText( theColl.selectSingleNode(ns + "Name") ) + '"],';
    jsonStr += '       lyrVisible   : [1],';
    jsonStr += '       lyrQueryable : [0],';
    jsonStr += '       lyrQChecked  : [0]';
    jsonStr += '     }';
    jsonStr += '   }';
    jsonStr += ']';
    jsonStr += '}';

    return(jsonStr);
}

function getWMSjson(sid, theColl)
{
    var ns="xmlns:";
    if(DefaultNSisDa(myXMLdoc))
        ns="ns:";

    var Opacity    = typeof getInnerText( theColl.selectSingleNode(ns + "Extension/" + ns + "Opacity") )    == 'undefined' ? 1     : getInnerText( theColl.selectSingleNode(ns + "Extension/" + ns + "Opacity") );
    var Visibility = typeof getInnerText( theColl.selectSingleNode(ns + "Extension/" + ns + "Visibility") ) == 'undefined' ? false : getInnerText( theColl.selectSingleNode(ns + "Extension/" + ns + "Visibility") );
    var Layers     = typeof getInnerText( theColl.selectSingleNode(ns + "Extension/" + ns + "Layers") )     == 'undefined' ? getInnerText( theColl.selectSingleNode(ns + "Name") )    : getInnerText( theColl.selectSingleNode(ns + "Extension/" + ns + "Layers") );
    var LyrTitles  = typeof getInnerText( theColl.selectSingleNode(ns + "Extension/" + ns + "LyrTitle") )   == 'undefined' ? getInnerText( theColl.selectSingleNode(ns + "Title") )   : getInnerText( theColl.selectSingleNode(ns + "Extension/" + ns + "LyrTitle") );
    var XLayers    = typeof getInnerText( theColl.selectSingleNode(ns + "Extension/" + ns + "XLayers") )    == 'undefined' ? null   : getInnerText( theColl.selectSingleNode(ns + "Extension/" + ns + "XLayers") );
    var XQLayers   = typeof getInnerText( theColl.selectSingleNode(ns + "Extension/" + ns + "XQLayers") )   == 'undefined' ? null   : getInnerText( theColl.selectSingleNode(ns + "Extension/" + ns + "XQLayers") );

    var SLDResource= typeof getInnerText( theColl.selectSingleNode("ns:Extension/ns:SLDResource/@*[2]") )== 'undefined' ? null   : getInnerText( theColl.selectSingleNode("ns:Extension/ns:SLDResource/@*[2]") );
    var SLD_BODY   = typeof getInnerText( theColl.selectSingleNode(ns + "Extension/" + ns + "SLD_BODY") )   == 'undefined' ? null   : getInnerText( theColl.selectSingleNode(ns + "Extension/" + ns + "SLD_BODY") );

    var Visibility = typeof getInnerText( theColl.selectSingleNode("@hidden") ) == 'undefined' ? false : (getInnerText( theColl.selectSingleNode("@hidden") ) == "0" ? true : false);

    //Ex da
    if(XLayers != null)
    {
        var lyrNames     = Layers.split(",");
        var lyrTitles    = LyrTitles.split(",");
        var visibleArr   = XLayers.split(",");
        var queryableArr = XQLayers.split(",");
        var qCheckedArr  = [];
        for(var i=0;i<lyrNames.length;i++)
            qCheckedArr[qCheckedArr.length] = 0;
        var aktlayers = "";
        for(var i=0;i<visibleArr.length;i++)
            if(visibleArr[i]==1)
                aktlayers += lyrNames[i] + ",";
        aktlayers = aktlayers.replace(/,$/,"");
    }
    else
    {
        var lyrNames     = Layers.split(",");
        var lyrTitles    = Layers.split(",");
        var aktlayers    = lyrNames.join(",");
        var visibleArr   = [];
        var queryableArr = [];
        var qCheckedArr  = [];
        for(var i=0;i<lyrNames.length;i++)
            queryableArr[queryableArr.length] = 0;

        visibleArr = queryableArr.slice();
        for(var i=0;i<lyrNames.length;i++)
            visibleArr[i]=1;
        var qCheckedArr  = queryableArr.slice();
    }
Msg+="WMS:" + aktlayers + "," + lyrNames + "\r\n" + lyrTitles + "\r\n";

    if( (typeof getInnerText( theColl.selectSingleNode(ns + "FormatList/" + ns + "Format") )) == "undefined")
        var imgFormat = "image/gif";
    else
        var imgFormat = getInnerText( theColl.selectSingleNode(ns + "FormatList/" + ns + "Format") );

    var jsonStr  = '{ server:';
    jsonStr += '[';
    jsonStr += ' {';
    jsonStr += '     title: "' + getInnerText( theColl.selectSingleNode(ns + "Title") ) + '",';
    jsonStr += '     url: "' + getInnerText( theColl.selectSingleNode("ns:Server/ns:OnlineResource/@*[2]") ) + '",';
    jsonStr += '    mapfile: "",';
    jsonStr += '    params : {';
    jsonStr += '      layers        : "' + aktlayers + '",';
    jsonStr += '      format        : "' + imgFormat + '",';
    jsonStr += '      version       : "' + getInnerText( theColl.selectSingleNode(ns + "Server/@*[2]") ) + '",';

    if(SLD_BODY!=null)
        jsonStr += '      SLD_BODY        : "' + SLD_BODY + '",';
    if(SLDResource!=null)
        jsonStr += '      SLD        : "' + SLDResource + '",';


    jsonStr += '      transparent   : "TRUE"';
    jsonStr += '    },';
    jsonStr += '    options : {';
    jsonStr += '      isBaseLayer : false,';
    jsonStr += '      isVisible   : ' + Visibility + ',';
    jsonStr += '      gutter      : 10,';
    jsonStr += '      buffer      : 1,';
    jsonStr += '      opacity     : ' + Opacity;
    jsonStr += '    },';
    jsonStr += '    vendor : {';
    jsonStr += '      sid          : "' + sid + '",';
    if(theService=="GOOGLE")
    {   jsonStr += '      service      : "GOOGLE",';
        BaseLayerIsDa=true;
    }
    else
        jsonStr += '      service      : "WMS",';
    jsonStr += '      aktlayers    : "' + aktlayers + '",';
    jsonStr += '      aktqlayers   : "",';
    jsonStr += '      lyrNames     : ["' + lyrNames.join('","') + '"],';
    jsonStr += '      lyrTitles    : ["' + lyrTitles.join('","') + '"],';
    jsonStr += '      lyrVisible   : [' + visibleArr.join(",") + '],';
    jsonStr += '      lyrQueryable : [' + queryableArr.join(",") + '],';
    jsonStr += '      lyrQChecked  : [' + qCheckedArr.join(",") + ']';
    jsonStr += '    }';
    jsonStr += ' }';
    jsonStr += ']';
    jsonStr += '}';

    //jsonStr = jsonStr.replace(/ /g,"");

    return(jsonStr);
}

function getIMGjson(sid, theColl)
{
    var ns="xmlns:";
    if(DefaultNSisDa(myXMLdoc))
        ns="ns:";

    var projection   = getInnerText( theColl.selectSingleNode(ns + "SRS") );

    var Opacity    = typeof getInnerText( theColl.selectSingleNode(ns + "Extension/" + ns + "Opacity") )    == 'undefined' ? 1     : getInnerText( theColl.selectSingleNode(ns + "Extension/" + ns + "Opacity") );
    var Visibility = typeof getInnerText( theColl.selectSingleNode(ns + "Extension/" + ns + "Visibility") ) == 'undefined' ? false : getInnerText( theColl.selectSingleNode(ns + "Extension/" + ns + "Visibility") );
    var Layers     = typeof getInnerText( theColl.selectSingleNode(ns + "Extension/" + ns + "Layers") )     == 'undefined' ? getInnerText( theColl.selectSingleNode(ns + "Name") )    : getInnerText( theColl.selectSingleNode(ns + "Extension/" + ns + "Layers") );
    var LyrTitles  = typeof getInnerText( theColl.selectSingleNode(ns + "Extension/" + ns + "LyrTitle") )   == 'undefined' ? getInnerText( theColl.selectSingleNode(ns + "Title") )   : getInnerText( theColl.selectSingleNode(ns + "Extension/" + ns + "LyrTitle") );
    var XLayers    = typeof getInnerText( theColl.selectSingleNode(ns + "Extension/" + ns + "XLayers") )    == 'undefined' ? null   : getInnerText( theColl.selectSingleNode(ns + "Extension/" + ns + "XLayers") );
    var XQLayers   = typeof getInnerText( theColl.selectSingleNode(ns + "Extension/" + ns + "XQLayers") )   == 'undefined' ? null   : getInnerText( theColl.selectSingleNode(ns + "Extension/" + ns + "XQLayers") );

    var imgExtent  = typeof getInnerText( theColl.selectSingleNode(ns + "Extension/" + ns + "Extent") )   == 'undefined' ? null   : getInnerText( theColl.selectSingleNode(ns + "Extension/" + ns + "Extent") );

    var Visibility = typeof getInnerText( theColl.selectSingleNode("@hidden") ) == 'undefined' ? false : (getInnerText( theColl.selectSingleNode("@hidden") ) == "0" ? true : false);

    //Ex da
    if(XLayers != null)
    {
        var lyrNames     = Layers.split(",");
        var lyrTitles    = LyrTitles.split(",");
        var visibleArr   = XLayers.split(",");
        var queryableArr = XQLayers.split(",");
        var qCheckedArr  = [];
        for(var i=0;i<lyrNames.length;i++)
            qCheckedArr[qCheckedArr.length] = 0;
        var aktlayers = "";
        for(var i=0;i<visibleArr.length;i++)
            if(visibleArr[i]==1)
                aktlayers += lyrNames[i] + ",";
        aktlayers = aktlayers.replace(/,$/,"");
    }
    else
    {
        var lyrNames     = Layers.split(",");
        var lyrTitles    = Layers.split(",");
        var aktlayers    = lyrNames.join(",");
        var visibleArr   = [];
        var queryableArr = [];
        var qCheckedArr  = [];
        for(var i=0;i<lyrNames.length;i++)
            queryableArr[queryableArr.length] = 0;

        visibleArr = queryableArr.slice();
        for(var i=0;i<lyrNames.length;i++)
            visibleArr[i]=1;
        var qCheckedArr  = queryableArr.slice();
    }
Msg+="IMG:" + aktlayers + "," + lyrNames + "\r\n" + lyrTitles + "\r\n";

    if( (typeof getInnerText( theColl.selectSingleNode(ns + "FormatList/" + ns + "Format") )) == "undefined")
        var imgFormat = "image/gif";
    else
        var imgFormat = getInnerText( theColl.selectSingleNode(ns + "FormatList/" + ns + "Format") );

    var jsonStr  = '{ server:';
    jsonStr += '[';
    jsonStr += ' {';
    jsonStr += '     title: "' + getInnerText( theColl.selectSingleNode(ns + "Title") ) + '",';
    jsonStr += '     url: "' + getInnerText( theColl.selectSingleNode("ns:Server/ns:OnlineResource/@*[2]") ) + '",';
    jsonStr += '    mapfile: "",';
    jsonStr += '    params : {';
    jsonStr += '    },';
    jsonStr += '    options : {';
    jsonStr += '      projection  : "' + projection + '",';
    jsonStr += '      isBaseLayer : false,';
    jsonStr += '      isVisible   : ' + Visibility + ',';
    jsonStr += '      opacity     : ' + Opacity;
    jsonStr += '    },';
    jsonStr += '    vendor : {';
    jsonStr += '      sid          : "' + sid + '",';
    jsonStr += '      service      : "IMG",';

    jsonStr += '      imgBounds    : new OpenLayers.Bounds(' + imgExtent + '),';
    jsonStr += '      imgSize      : new OpenLayers.Size(100,100),';  //Wert ist uninteressant, notwendig für Layererstellung?

    jsonStr += '      aktlayers    : "' + aktlayers + '",';
    jsonStr += '      aktqlayers   : "",';
    jsonStr += '      lyrNames     : ["' + lyrNames.join('","') + '"],';
    jsonStr += '      lyrTitles    : ["' + lyrTitles.join('","') + '"],';
    jsonStr += '      lyrVisible   : [' + visibleArr.join(",") + '],';
    jsonStr += '      lyrQueryable : [' + queryableArr.join(",") + '],';
    jsonStr += '      lyrQChecked  : [' + qCheckedArr.join(",") + ']';
    jsonStr += '    }';
    jsonStr += ' }';
    jsonStr += ']';
    jsonStr += '}';

    return(jsonStr);
}

function DefaultNSisDa(objXML)
{
    var defaultNS = "xmlns:ns='http://default'";
    var root = objXML.documentElement;
    var CollAtt = root.attributes;
    for(var i=0;i<CollAtt.length;i++)
    {
        if(CollAtt[i].name == "xmlns")
            defaultNS = "xmlns:ns='" + CollAtt[i].value + "'";
    }
    //alert(defaultNS);
    if(defaultNS != "xmlns:ns='http://default'")
    {
        objXML.setProperty("SelectionNamespaces", defaultNS);
        return true;
    }

    return false;
}

var IEuseServer = false;
//
// Implementierung selectNodes und selectSingleNode für Firefox
//
if( document.implementation.hasFeature("XPath", "3.0") )
{
 XMLDocument.prototype.selectNodes = function(cXPathString, xNode){
  if( !xNode ) {
   xNode = this;
  }

  var defaultNS = this.defaultNS;

  var aItems = this.evaluate(cXPathString, xNode,{
   normalResolver:
    this.createNSResolver(this.documentElement),
        lookupNamespaceURI : function (prefix) {
           switch (prefix) {
             case "dflt":
                return defaultNS;
             default:
                //changed for FF3
                return defaultNS;//return this.normalResolver.lookupNamespaceURI(prefix);
           }
        }
      },XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null);

  var aResult = [];
  for( var i = 0; i < aItems.snapshotLength; i++){
           aResult[i] =  aItems.snapshotItem(i);
  }
  return aResult;
 }

 Element.prototype.selectNodes = function(cXPathString){
  if(this.ownerDocument.selectNodes){
   return this.ownerDocument.selectNodes(cXPathString, this);
  }else{
   throw "For XML Elements Only";
  }
 }

 XMLDocument.prototype.selectSingleNode = function(cXPathString, xNode){
  if( !xNode ) {
   xNode = this;
  }

  var defaultNS = this.defaultNS;

  var oResult = this.evaluate(cXPathString, xNode, //null,XPathResult.FIRST_ORDERED_NODE_TYPE,null);//
  {
   normalResolver:
    this.createNSResolver(this.documentElement),
        lookupNamespaceURI : function (prefix) {
           switch (prefix) {
             case "dflt":
                return defaultNS;
             default:
                return defaultNS;//this.normalResolver.lookupNamespaceURI(prefix);
           }
        }
      },XPathResult.FIRST_ORDERED_NODE_TYPE,null);

    //alert(oResult + "\n" + oResult.singleNodeValue + "\n" + oResult.resultType + "\n" + oResult.singleNodeValue.nodeValue);//singleNodeValue);

    if(oResult != null)
      return oResult.singleNodeValue;//.nodeValue;
    else
      return null;
 }

 Element.prototype.selectSingleNode = function(cXPathString){
  if(this.ownerDocument.selectSingleNode){
   return this.ownerDocument.selectSingleNode(cXPathString, this);
  }else{
   throw "For XML Elements Only";
  }
 }

 /* set the SelectionNamespaces property the same for NN or IE: */
 XMLDocument.prototype.setProperty = function(p,v){
//alert(v + "\n" + v.indexOf("xmlns:dflt"));
  if(p=="SelectionNamespaces" && v.indexOf("xmlns:dflt")==-1){
   this.defaultNS = v.replace(/^.*=\'(.+)\'/,"$1");
//alert(this.defaultNS);
  }
 }

 XMLDocument.prototype.defaultNS;

}
//
// Ende XMLDocument.prototype
//

//
// Implementierung für node.text(IE) und node.textContent (FF) etc.
//
function getInnerText (node)
{
    try{
        var tmp = node.length;
    }
    catch(err){
        //alert(err);
        return;
    }

    if (typeof node.textContent != 'undefined') {
        return node.textContent;
    }
    else if (typeof node.innerText != 'undefined') {
        return node.innerText;
    }
    else if (typeof node.text != 'undefined') {
        return node.text;
    }
    else {
        switch (node.nodeType) {
            case 3:
            case 4:
            return node.nodeValue;
            break;
            case 1:
            case 11:
            var innerText = '';
            for (var i = 0; i < node.childNodes.length; i++) {
                innerText += getInnerText(node.childNodes[i]);
            }
            return innerText;
            break;
            default:
            return '';
        }
    }
}

