function externalInterface(params)
{
   var queryParams = params.toQueryParams();
   externalInterfaceObj(queryParams) 
}

function externalInterfaceObj(queryParams)
{   
   if(queryParams.command)
   {
       var command = queryParams.command;
       
       if(command=="showObjectWFS")
       {
           extShowObjectWFS(queryParams.wfsurl);
       }
       else if(command=="showEncodedLayers")
       {
           extShowEncodedLayers(queryParams.encodedLayers);
       }
       else if(command=="showObject")
       {
           extShowObject(queryParams.title,queryParams.typename,queryParams.filter,queryParams.encodedLayers);
       }
       else if(command=="showMarker")
       {
           extShowMarker(queryParams.markerid,queryParams.geotyp);
       }
       else if(command=="showPoint")
       {
           extShowPoint(queryParams.lat,queryParams.lon,queryParams.zoom,queryParams.message,queryParams.maptype);
       }
       else if(command=="setMapType")
       {
           extSetMapType(queryParams.maptype);
       }
       else if(command=="setZoom")
       {
           extSetZoom(queryParams.zoom);
       }
       else if(command=="setCenter")
       {
           extSetCenter(queryParams.lat,queryParams.lon,queryParams.zoom);
       }
       
   }
}

function extShowObjectWFS(wfsurl)
{
    if(debug)
    {
       GLog.write("ExtShowObjectWFS:" + wfsurl);
    }
    var myAjax = new Ajax.Request
    (
    	  serverUrl + 'php/gml/gmlparser.php', 
    	  {
    		method: 'POST', 
    		parameters: 'WFSURL=' + escape(wfsurl), 
    	    onSuccess: callbackExtShowObjectWFS
    	  }
    );
}

function callbackExtShowObjectWFS(request)
{
    var res = eval('(' + request.responseText + ')');
    
    for(var i =0; i < res.length; i ++) 
    {
         var points = new Array();
            
         for(var j = 0;j < res[i].points.length;j++)
         {
             points[points.length] = new GLatLng(parseFloat(res[i].points[j].y),parseFloat(res[i].points[j].x));
         }
        
         if(res[i].geotype == "LINESTRING")	
         {   
            var polyline = new GPolyline(points,"#0000FF",5,0.7);
            
            map.addOverlay(polyline);
            
            var bounds = polyline.getBounds();
            map.setCenter(bounds.getCenter(),map.getBoundsZoomLevel(bounds));
         }
         else if(res[i].geotype == "POLYGON")	
         {   
            var polygon = new GPolygon(points);
            
            map.addOverlay(polygon);
            
            var bounds = polygon.getBounds();
            map.setCenter(bounds.getCenter(),map.getBoundsZoomLevel(bounds));
         }
         else if(res[i].geotype == "POINT")	
         {   
            var marker = new GMarker(points[0],dateIcon);
            
            map.addOverlay(marker);
            
            map.panTo(points[0]);
         }
         
    }
}

function extShowEncodedLayers(encodedLayers)
{
    if(debug)
    {
       GLog.write("ExtShowEncodedLayers:" + encodedLayers);
    }
    
    var pwms = Tool.decode(encodedLayers);
        
    var res = eval('(' + pwms + ')');
        
    var retArray = new Array();
    
    for(var i = 0;i < res.length;i++)
    {
       for(var j = 0;j < wmsArray.length;j++)
       {
           if(wmsArray[j].layers.title == res[i].t)
           {
              wmsArray[j].setEncodedLayers(res[i].a);
              retArray[retArray.length] = wmsArray[j];
              break;
           }
       }
    }
    
    return retArray;
}

function extShowObject(title,typename,filter,encodedLayers)
{
    if(debug)
    {
       GLog.write("ExtShowObject:" + title +","+ typename+","+filter+","+encodedLayers);
    }
    
    var selectedWMSArray = extShowEncodedLayers(encodedLayers);
    
    for(var i=0;i < selectedWMSArray.length; i++) 
    {
    	if(selectedWMSArray[i].layers.title == title)
    	{
        	var wmsurl = selectedWMSArray[i].overlay.wmsurl;
        	
        	var params = wmsurl.toQueryParams();
        	
        	var server = wmsurl.split("?")[0];
        	
        	var wfsurl = server + "?map=" + params.map + "&SERVICE=WFS&VERSION=1.0.0&REQUEST=GetFeature&TYPENAME=" + typename + "&FILTER=" + filter;
        	
        	extShowObjectWFS(wfsurl);
        	break;
    	}
    }
}

function extShowMarker(markerid,geotyp)
{
     if(debug)
     {
        GLog.write("ExtShowMarker:" + markerid + "," + geotyp);
     }
     var myAjax = new Ajax.Request
     (
    	serverUrl + 'php/ajax_control.php', 
    	{
    		   method: 'POST', 
    		   parameters: 'functionId=8&markerId=' + markerid + '&gtyp=' + geotyp + '&mandant=' + mandant, 
    		   onSuccess: callbackInfoBoxDblClicked,
   			   onLoading: showSearchWaitDiv,
       		   onLoaded:  hideSearchWaitDiv,
       		   onFailure: hideSearchWaitDiv
   		}
      );
}

function extShowPoint(lat,lon,zoom,message,maptype)
{
    if(debug)
    {
       GLog.write("ExtShowPoint:" + lat+","+lon+","+zoom+","+message+","+maptype);
    }
    
    var point = new GLatLng(parseFloat(lat),parseFloat(lon));
    
    var datingMarker = new GMarker(point,dateIcon);
    
    if(maptype)
    {
       extSetMapType(maptype);
    }
    
    extSetCenter(lat,lon,zoom);
    
    map.addOverlay(datingMarker);

    if(message)
    {
        GEvent.addListener(datingMarker, "click", function() 
        {
            datingMarker.openInfoWindowHtml("<div style='width:220px;height:100px;background-color:#FFFFFF;overflow:auto;'>" + Tool.decode(message) + "</div>",{maxWidth : 100});
        });   
                    
        datingMarker.openInfoWindowHtml("<div style='width:220px;height:100px;background-color:#FFFFFF;overflow:auto;'>" + Tool.decode(message) + "</div>",{maxWidth : 100});
    }
}

function extSetMapType(maptype)
{
    if(debug)
    {
       GLog.write("ExtSetMapType:" + maptype);
    }
    
    var mapTypes = map.getMapTypes();
            
    for(var i = 0;i < mapTypes.length;i++)
    {
        if(mapTypes[i].getName(false).toLowerCase() == maptype.toLowerCase())
        {
           map.setMapType(mapTypes[i]);
           break;
        }
    }   
}

function extSetZoom(zoom)
{
    if(debug)
    {
       GLog.write("ExtSetZoom:" + zoom);
    }
    map.setZoom(parseInt(zoom));
}

function extSetCenter(lat,lon,zoom)
{
    if(debug)
    {
       GLog.write("ExtSetCenter:" + lat + "," + lon + "," + zoom);
    }
    
    var point = new GLatLng(parseFloat(lat),parseFloat(lon));
    map.setCenter(point,parseInt(zoom));
}

  
