/**
 * @projectDescription TÉKA térképi funkciók 
 * @version 1.0
 * @author BERÉNYI Attila 
 */

/**
 * Geocoder
 * @param {Object} inputData Amit keresünk.
 */
function geocode(inputData)
{
	var geocoder = new google.maps.Geocoder();
	
	geocoder.geocode
	(
	    {
		'address': inputData
	    },
	    function(results, status)
	    {
		if (status == "OK")
		{
		    var newCenter = transform(results[0].geometry.location.lng(), results[0].geometry.location.lat(), 2, 1);
		    if (map.maxExtent.contains(newCenter.lon, newCenter.lat))
		    {
			map.setCenter(newCenter, detailedZoomLevel, true, true);
			
			//highlight
			if (geocodeSearchResultHighlighted) map.removeLayer(geocodeSearchResultHighlightedLayer);
			
			var geocodeSearchResultBounds = new OpenLayers.Bounds();
			geocodeSearchResultBounds.extend
			(
			    new OpenLayers.LonLat
			    (
				newCenter.lon - 100,
				newCenter.lat - 100
			    )
			);
			geocodeSearchResultBounds.extend
			(
			    new OpenLayers.LonLat
			    (
				newCenter.lon + 100,
				newCenter.lat + 100
			    )
			);
			
			geocodeSearchResultHighlightedLayer = new OpenLayers.Layer.Image
			(
			    "celkereszt",
			    domainName + "/map/crosshair.gif",
			    geocodeSearchResultBounds, 
			    new OpenLayers.Size
			    (
				200,
				200
			    ),
			    {
				maxResolution: 32.0,
				minResolution: 0.125,
				isBaseLayer: false
			    },
			    {
				displayInLayerSwitcher: false
			    }
			);
					
			map.addLayer(geocodeSearchResultHighlightedLayer); 
			geocodeSearchResultHighlighted = true;
					
			map.zoomIn();
		    }
		     else
		     {
			Ext.MessageBox.alert('Info',localizedStringsArray[17]);
		    }
		} 
		else 
		{
		    Ext.MessageBox.alert('Info',localizedStringsArray[18]);
		}
	    }
	);
};

/**
 * Vetületi rendszerek közötti transzformáció (pont szintű).
 * @param {Number} lon X (GM), hosszúşág (WGS), Y (EOV).
 * @param {Number} lat Y (GM), szélesség (WGS), X (EOV).
 * @param {String} mode A forrás és a cél koordináta renszert határozza meg: 1: GM -> WGS, 2: WGS -> GM, 3: EOV -> GM. 
 * @param {String} resultFormat Az eredményeket prezentálásának kiválasztásához: 1 OL Point objektum, 2: WKT
 * @return {Object} transformedPoint {Openlayers.LonLat} objektum a transzformált koordinátákkal.
 */

function transform(lon, lat, mode, resultFormat)
{
	var origPoint = new OpenLayers.LonLat
	(
	    lon,
	    lat
	);
	
	switch (mode)
	{
	    case 1:
		var transformedPoint = origPoint.transform(new OpenLayers.Projection("EPSG:900913"), new OpenLayers.Projection("EPSG:4326"));
		break;
	    case 2:
		var transformedPoint = origPoint.transform(new OpenLayers.Projection("EPSG:4326"), new OpenLayers.Projection("EPSG:900913"));
		break;
	    case 3:
		var transformedPoint = origPoint.transform(new OpenLayers.Projection("EPSG:23700"), new OpenLayers.Projection("EPSG:900913"));
		break;
	}
	
	switch (resultFormat)
	{
	    case 1:
		return transformedPoint;
		break;
	    case 2:
		return new OpenLayers.Geometry.Point(transformedPoint.lon, transformedPoint.lat);
	}
}

/**
 * Távolságmérés.
 * @return {Number} distance Távolság értéke m-ben, vagy hiba esetén false.
 */
function measureDistance()
{
	// style the sketch fancy
	var sketchSymbolizers =
	{
	    "Point":
	    {
		pointRadius: 4,
		graphicName: "square",
		fillColor: "white",
		fillOpacity: 1,
		strokeWidth: 1,
		strokeOpacity: 1,
		strokeColor: "#333333"
	    },
	    "Line":
	    {
		strokeWidth: 3,
		strokeOpacity: 1,
		strokeColor: "#666666",
		strokeDashstyle: "dash"
	    }
	};
	
	var style = new OpenLayers.Style();
	style.addRules
	([
	    new OpenLayers.Rule
	    ({
		symbolizer: sketchSymbolizers
	    })
	]);
	
	var styleMap = new OpenLayers.StyleMap
	({
		"default": style
	});
	
	//create the control
	drawLine = new OpenLayers.Control.Measure
	(
	    OpenLayers.Handler.Path,
	    {
		handlerOptions:
		{
		    layerOptions:
		    {
			styleMap: styleMap
		    }
		}
	    }
	);
	
	//add the control to the map
	map.addControl
	(
	    drawLine
	);
	
	//activate the control
	drawLine.activate();
	
	drawLine.events.on
	({
	    "measurepartial": function(event)
	    {
		//calculate and display the distance
		if (event.units == "m")
		{
		    var value = event.measure.toFixed(0);
		}
		
		if (event.units == "km")
		{
		    var value = event.measure.toFixed(3);
		}
	    },
	    "measure": function(event)
	    {
		//calculate and display the distance
		if (event.units == "m")
		{
		    var value = event.measure.toFixed(0);
		}
		if (event.units == "km")
		{
		    var value = event.measure.toFixed(3);
		}
		
		//show the result to the user
		Ext.MessageBox.alert('Info', localizedStringsArray[19] + ': ' + value + ' ' + event.units);
		
		return value;
	    }
	});
}

/**
 * Területmérés.
 * @return {Number} Távolság értéke m2-ben, vagy vagy hiba esetén false.
 */
function measureArea()
{
    // style the sketch fancy
    var sketchSymbolizers = 
    {
	"Point": 
	{
	    pointRadius: 4,
	    graphicName: "square",
	    fillColor: "white",
	    fillOpacity: 1,
	    strokeWidth: 1,
	    strokeOpacity: 1,
	    strokeColor: "#333333"
	},
	"Line":
	{
	    strokeWidth: 3,
	    strokeOpacity: 1,
	    strokeColor: "#666666",
	    strokeDashstyle: "dash"
	},
	"Polygon":
	{
	    strokeWidth: 2,
	    strokeOpacity: 1,
	    strokeColor: "#666666",
	    fillColor: "white",
	    fillOpacity: 0.3
	}
    };

    var style = new OpenLayers.Style();

    style.addRules
    ([
	new OpenLayers.Rule
	({
	    symbolizer: sketchSymbolizers
	})
    ]);

    var styleMap = new OpenLayers.StyleMap
    ({
	"default": style
    });

    //create the control
    drawPolygon = new OpenLayers.Control.Measure
    (
	OpenLayers.Handler.Polygon,
	{
	    handlerOptions:
	    {
		layerOptions:
		{
		    styleMap: styleMap
		}
	    }
	}
    );

    //add the control to the map
    map.addControl
    (
	drawPolygon
    );

    //activate the control
    drawPolygon.activate();

    drawPolygon.events.on
    ({
	"measurepartial": function(event)
	{
	    //calculate and display the distance
	    if (event.measure <= 1 && event.units == "m")
	    {
		var value = 1;
		var unit = "m";
	    }
	    if (1 < event.measure && event.measure < 10000 && event.units == "m")
	    {
		var value = event.measure.toFixed(0);
		var unit = "m";
	    }
	    if (10000 < event.measure && event.units == "m")
	    {
		var value = (event.measure/1000000).toFixed(4);
		var unit = "km";
	    }
	    if (event.units == "km")
	    {
		var value = event.measure.toFixed(0);
		var unit = "km";
	    }
	}, 
	"measure": function(event)
	{
	    //calculate and display the area
	    if (event.measure <= 1 && event.units == "m")
	    {
		var value = 1;
		var unit = "m";
	    } 
	    if (1 < event.measure && event.measure < 10000 && event.units == "m")
	    {
		var value = event.measure.toFixed(0);
		var unit = "m";
	    }
	    if (10000 < event.measure && event.units == "m")
	    {
		var value = (event.measure/1000000).toFixed(4);
		var unit = "km";
	    }
	    if (event.units == "km")
	    {
		var value = event.measure.toFixed(0);
		var unit = "km";
	    }
	
	    Ext.MessageBox.alert('Info',localizedStringsArray[20] + ': ' + value + ' ' + unit);
	
	    return value;
	}
    });
}

/**
 * Tájérték hozzáadás
 * @param {String} type A tájérték geometriai típusa.
 */
function addLV(type)
{
    switch(type)
    {
	case "point":
	    var handler = OpenLayers.Handler.Point;
	break;
	case "line":
	    var handler = OpenLayers.Handler.Path;
	break;
	case "polygon":
	    var handler = OpenLayers.Handler.Polygon;
	break;
    }

    addLVControl = new OpenLayers.Control.DrawFeature
    (
	userLayer,
	handler
    );
    map.addControl
    (
	addLVControl
    );
    addLVControl.activate();

    userLayer.events.on
    ({
	"beforefeatureadded": function(event)
	{
	    if (userLayer.features.length > 0) userLayer.destroyFeatures();
	}
    });

    addLVControl.events.on
    ({
	"featureadded": function(event) 
	{
	    //redraw
	    map.zoomIn();
	    map.zoomOut();
	
	    //var originalGeometry = userLayer.features[0].geometry.clone();
	    newLVFillMetaData(userLayer.features[0].geometry.clone());
	}
    });
}

function newLVFillMetaData(geometry)
{
    var centroid = geometry.getCentroid();
    
    var response = JSON.decode
	    (
		AJAXRequest
		(
		    SQLParser,
		    "POST",
		    "query=queryCountySettlementNationalPark&geometry=" + geometry.getCentroid(),
		    false,
		    "JSON"
		)
	    );
	    var neighbourNIDs = JSON.decode
	    (
		AJAXRequest
		(
		    SQLParser,
		    "POST",
		    "query=queryNeighbourNIDs&geometry=" + geometry.getCentroid() + "&distance=2000",
		    false,
		    "JSON"
		)
	    );
	
	    if (document.getElementById('edit-field-wkt-0-value') !== null)
	    {
		document.getElementById('edit-field-wkt-0-value').value = geometry.transform
		(
		    new OpenLayers.Projection("EPSG:900913"),
		    new OpenLayers.Projection("EPSG:4326")
		);
	    }
	    
	    if (document.getElementById('edit-field-wkt-centroid-0-value') !== null)
	    {
		document.getElementById('edit-field-wkt-centroid-0-value').value = transform
		(
		    centroid.x,
		    centroid.y,
		    1,
		    2
		);
	    }
	    
	    document.getElementById('edit-field-telepules-value').value = response.settlement; 
	    document.getElementById('edit-field-megye-value').value = response.county;
	    document.getElementById('edit-field-nemzetiparkigazgatosag-value').value = response.nationalPark;
	    document.getElementById('edit-field-neighbour-nids-0-value').value = neighbourNIDs.NIDs;

}

/**
 * Pontszerű tájérték hozzáadása GPS koordinátákkal
 * @param {Number} longitude Hosszúság.
 * @param {Number} latitude Szélesség.
 */
function addLVWithGPSCoordinates(longitue, latitude)
{
    //draw something on the map
    var coordinates = transform
    (
	longitue,
	latitude,
	2,
	1
    );
    visualizeWKT("POINT(" + coordinates.lon + " " + coordinates.lat +")");

    //update the appropriate fields
    var originalGeometry = transform
    (
	longitue,
	latitude,
	2,
	2
    );
    
    newLVFillMetaData(originalGeometry);
    /*
    var centroid = originalGeometry.getCentroid();
    document.getElementById('edit-field-wkt-0-value').value = originalGeometry.transform
    (
	new OpenLayers.Projection("EPSG:900913"),
	new OpenLayers.Projection("EPSG:4326")
    );
    document.getElementById('edit-field-wkt-centroid-0-value').value = transform
    (
	centroid.x,
	centroid.y,
	1,
	2
    );
    */
}

/**
 * Tájérték keresés.
 * @param {String} type A kereső geometria típusa.
 */
function searchLV(type)
{
    userLayer.events.on
    ({
	"sketchstarted": function(event)
	{
	    //remove the 'old' feature
	    if (userLayer.features.length == 1) userLayer.destroyFeatures();
	}
    });

    switch (type)
    {
	case "square":
	    searchLVControl = new OpenLayers.Control.DrawFeature
	    (
		userLayer,
		OpenLayers.Handler.RegularPolygon,
		{
		    handlerOptions:
		    {
			sides: 4,
			irregular: true
		    }
		}
	    );
	break;
	case "circle":
	    searchLVControl = new OpenLayers.Control.DrawFeature
	    (
		userLayer,
		OpenLayers.Handler.RegularPolygon,
		{
		    handlerOptions:
		    {
			sides: 40
		    }
		}
	    );
	break;
    }

    map.addControl
    (
	searchLVControl
    );
    //pressed:true doesn't trigger the toggle event
    searchLVControl.activate();

    searchLVControl.events.on
    ({
	"featureadded": function(event) 
	{
	    var originalGeometry = event.feature.geometry;
	    var response = JSON.decode
	    (
		AJAXRequest
		(
		    SQLParser,
		    "POST",
		    "query=queryNIDs&geometry=" + originalGeometry,
		    false,
		    "JSON"
		)
	    );
	    var nids = response.NIDs;
	    document.getElementById('edit-nids').value = nids;
	    document.getElementById('edit-wkt').value = originalGeometry;
	}
    });
}

/**
 * Tájérték megjelenítés.
 * @param {Object} LVs A megjelenítendő tájértékek listája vesszővel elválasztva.
 * @param {String} layerName Opcionális. A fólia, amire a tájértéket kerül, ha nincs megadva, akkor egy 'default' fóliára kerül.
 */
function visualizeLV(LVs, layerName)
{
    //var newCenter = null;
    var response = JSON.decode
    (
	AJAXRequest
	(
	    SQLParser,
	    "POST",
	    "query=queryNIDDeatils&NIDsArray=" + LVs,
	    false,
	    "JSON"
	)
    );

    var WKT = new OpenLayers.Format.WKT();
    if (response.success) 
    {
	for (var i = 0; i < response.data.length; i++)
	{
	    var newFeature = WKT.read(response.data[i].geometry);
	
	    //compatibility with the previous versions: the second argument is optional
	    if (!layerName)
	    {
		var layerName = "tempLVLayer";
	    }
	    
	    window[layerName].addFeatures
	    (
	        newFeature
	    );
	
	    //add every attribute from the GML to the object
	    for (var j in response.data[i])
	    {
		newFeature.attributes[j] = eval
		(
		    'response.data[i].' + j
		);
		newFeature.attributes.geomType = newFeature.geometry.CLASS_NAME;
	    }
	}
	
	map.zoomToExtent
	(
	    window[layerName].getDataExtent()
	);
	
	if (response.data.length == 1 && response.data[0].geometry.indexOf("POINT") != -1)
	{
	    map.zoomTo
	    (
		detailedZoomLevel
	    );
	}
	
    }
}

/**
 * WKT megjelenítése.
 * @param {Object} WKTString A geometria WKT formátumban.
 */
function visualizeWKT(WKTString) 
{
    if (WKTString)
    {
	var WKT = new OpenLayers.Format.WKT();
	userLayer.addFeatures
	(
	    WKT.read
	    (
		WKTString
	    )
	);
    }
}

/**
 * Tájérték megrendelés.
 */
function orderLVs()
{
    userLayer.events.on
    ({
	"sketchstarted": function(event)
	{
	    //remove the 'old' feature
	    if (userLayer.features.length == 1) userLayer.destroyFeatures();
	}
    });

    drawOrderBoxControl = new OpenLayers.Control.DrawFeature
    (
	userLayer,
	OpenLayers.Handler.RegularPolygon,
	{
	    handlerOptions: 
	    {
		irregular: true,
		sides: 4,
		snapAngle: 90
	    }
	}
    );

    map.addControl(drawOrderBoxControl);
    //in initMap pressed:true doesn't trigger the toggle event
    drawOrderBoxControl.activate();

    drawOrderBoxControl.events.on
    ({
	"featureadded": function(event) 
	{
	    var originalGeometry = event.feature.geometry;
	    var response = JSON.decode
	    (
		AJAXRequest
		(
		    SQLParser,
		    "POST",
		    "query=queryNIDs&geometry=" + originalGeometry,
		    false,
		    "JSON"
		)
	    );
	    document.getElementById('edit-field-nids-0-value').value = response.NIDs;
	    document.getElementById('edit-field-wkt-0-value').value = event.feature.geometry;
	    document.getElementById('edit-field-megrendeles-terulet-0-value').value = Math.round
	    (
		parseFloat
		(
		    event.feature.geometry.getArea() / 1000000
		)
	    );
	}
    });
}

/**
 * Tájértékek törlése.
 * @param {String} layerName Opcionális. Melyik fóliáról töröljük a tájértékeket? Ha nincs megadva minden fóliáról törli őket.
 */
function clearLVs(layerName)
{
    if (layerName)
    {
	window[layerName].destroyFeatures();
    }
    else
    {
	for (var i = 0; i < LVLayers.length; i++)
	{
	    LVLayers[i].destroyFeatures();
	}
    }
}

function editLV(NID)
{
    visualizeLV
    (
	NID,
	"userLayer"
    );
    var editControl = new OpenLayers.Control.ModifyFeature
    (
	userLayer
    );
    editControl.mode = OpenLayers.Control.ModifyFeature.RESHAPE | OpenLayers.Control.ModifyFeature.DRAG;
    map.addControl
    (
	editControl
    );
    editControl.activate();
    
    editControl.selectFeature(userLayer.features[0]);

    userLayer.events.on
    ({
	"featuremodified": function(event) 
	{
	    var response = JSON.decode
	    (
		AJAXRequest
		(
		    SQLParser,
		    "POST",
		    "query=queryCountySettlementNationalPark&geometry=" + event.feature.geometry.getCentroid(),
		    false,
		    "JSON"
		)
	    );
	
	    var clonedPoint = event.feature.geometry.clone();
	    var centroid = clonedPoint.getCentroid();
	    document.getElementById('edit-field-wkt-0-value').value = clonedPoint.transform
	    (
		new OpenLayers.Projection("EPSG:900913"),
		new OpenLayers.Projection("EPSG:4326")
	    );
	    document.getElementById('edit-field-wkt-centroid-0-value').value = transform
	    (
		centroid.x,
		centroid.y,
		1,
		2
	    );
	    document.getElementById('edit-field-telepules-value').value = response.settlement; 
	    document.getElementById('edit-field-megye-value').value = response.county;
	    document.getElementById('edit-field-nemzetiparkigazgatosag-value').value = response.nationalPark;
	}
    });
}

/**
 * WMS szolgáltatás becsatolása.
 * @param {String} wmsName Réteg neve.
 * @param {String} url URL, ahol a WMS szogláltatás elérhető.
 * @param {String} layer A WMS-ből lekérendő réteg neve (max 1 db!).
 * @return {Object} Sikerült-e hozzáadni?
 *
 */

function insertWMS(name, url, layer)
{
    //aux. variables
    var pattern = new RegExp("[a-z]");

    if (name != "" && layer != "" && url != "")
    {
	var response = AJAXRequest
	(
	    proxyURL + url + "%3FSERVICE=WMS%26REQUEST=GetCapabilities%26VERSION=1.0.0",
	    "GET",
	    null,
	    false,
	    "XML"
	);
	
	//collect the available layers from the WMS service
	var availableWMSLayers = [];
	
	//the first one (0th) is the layer container
	for (var i = 1; i < response.getElementsByTagName("Layer").length; i++)
	{
	    if (navigator.userAgent.indexOf("MSIE") == -1)
	    {
		availableWMSLayers.push
		(
		    response.getElementsByTagName("Layer")[i].getElementsByTagName("Name")[0].textContent
		);
	    }
	    else
	    {
		availableWMSLayers.push(response.getElementsByTagName("Layer")[i].getElementsByTagName("Name")[0].text);
	    }
	}
	
	//check that the requested layer is offered by the WMS service
	var layerFound = false;
	for (var j = 0; j < availableWMSLayers.length; j++)
	{
	    if (layer == availableWMSLayers[j])
	    {
		layerFound = true;
		
		var WMSLayer = new OpenLayers.Layer.WMS
		(
		    name,
		    url,
		    {
			layers: layer,
			transparent: "true",
			format: "image/png"
		    },
		    {
			buffer: 0,
			isBaseLayer: false,
			visibility: true
		    }
		);
		
		map.addLayer(WMSLayer);
	    }
	}
    }
}

/*
 * Kereslsi eredmények exportálása a megvásárolt területre
 * @param {String} exportType Az export (file)típusa
 */

function exportSearchResult(exportType)
{
    var SID = getSID();
    //get search results bound
    var searchResultBound = tempLVLayer.getDataExtent();
    if (searchResultBound)
    {
	//debug
	//var searchResultBoundObject = new OpenLayers.Feature.Vector();
	//searchResultBoundObject.geometry = searchResultBound.toGeometry();
	
	//get the extent(s) of the user's approved orders
	var WKT = new OpenLayers.Format.WKT();
	var foundInstersectingGeometry = false;
	var response = JSON.decode
	(
	    AJAXRequest
	    (
		domainName + "/map/queryMySQL.php",
		"POST",
		"query=listActiveOrders&SID=" + SID,
		false,
		"JSON"
	    )
	);
	if (response.success)
	{
	    for (var i = 0; i < response.orders.length; i++)
	    {
		if (response.orders[i].geom != "")
		{
		    var orderObject = WKT.read
		    (
			response.orders[i].geom
		    );
		    var orderBound = orderObject.geometry.getBounds();
		
		    //fully contain
		    if (orderBound.containsBounds(searchResultBound) == true)
		    {
			//the whole set of the search results could be exported
			//console.log('fully contain');
			
			//collect exportable 
			var exportNIDs = "";
			for (var j = 0; j < tempLVLayer.features.length; j++)
			{
			    exportNIDs += tempLVLayer.features[j].attributes.teka_id;
			    if (j != tempLVLayer.features.length - 1) exportNIDs += ",";
			}
			
			//export
			//var exportResult = JSON.decode(AJAXRequest(SQLParser, "POST", "query=createExportFiles&type=" + exportType + "&NIDs=" + exportNIDs, false, "JSON"));
			window.open(
			    SQLParser + "?query=createExportFiles&type=" + exportType + "&NIDs=" + exportNIDs
			);
		    }
		    else if (orderBound.intersectsBounds(searchResultBound) == true)
		    {
			//debug
			//console.log('intersects, partly contain');
			//TODO: merge these two AJAX request
			var intersectingBounds = JSON.decode
			(
			    AJAXRequest
			    (
				SQLParser,
				"POST",
				"query=calculateIntersectingGeometry&geom1=" + orderBound.toGeometry() + "&geom2=" + searchResultBound.toGeometry(),
				false,
				"JSON"
			    )
			);
			//debug
			var intersectingBoundsObject = WKT.read
			(
			    intersectingBounds.geometry
			);
			//wipeLVLayer.addFeatures(intersectingBoundsObject);
			var exportableNIDs = JSON.decode
			(
			    AJAXRequest
			    (
				SQLParser,
				"POST",
				"query=queryNIDs&geometry=" + intersectingBounds.geometry,
				false,
				"JSON"
			    )
			);
			//export
			window.open
			(
			    SQLParser + "?query=createExportFiles&type=" + exportType + "&NIDs=" + exportableNIDs.NIDs
			);
		    } 
		    else
		    {
			//TODO: localize
			console.log('no intersection');
		    }
		}
	    }
	}
	else
	{
	    console.log(response.reason);
	}
    }
    else
    {
	//TODO: localize
	console.log('no search result');
    }
}

/**
 * Az aktuális session id lekérdezése
 */
function getSID()
{
    var i,x,y,ARRcookies=document.cookie.split(";");
    for (i = 0; i < ARRcookies.length; i++)
    {
	x = ARRcookies[i].substr
	(
	    0,
	    ARRcookies[i].indexOf("=")
	);
	y = ARRcookies[i].substr
	(
	    ARRcookies[i].indexOf("=") + 1
	);
	x = x.replace(/^\s+|\s+$/g,"");
	if (x.indexOf("SESS") != -1)
	{
	    return unescape(y);
	}
    }
}

/**
 * Felhasználói koordinátákból geometria generálás és elhelyezés a térképen, zoom, kiegészítő adatok lekérdezése
 * @param {Float} lon Szélesség.
 * @param {Float} lat Hosszúság.
 */
function createWKTPoint(lon, lat)
{
	var geometry = new OpenLayers.Geometry.Point
	(
	    lon,
	    lat
	);
	
	var response = JSON.decode
	(
	    AJAXRequest
	    (
		SQLParser,
		"POST",
		"query=queryCountySettlementNationalPark&geometry=" + transform
		(
		    geometry.x,
		    geometry.y,
		    2,
		    2
		),
		false,
		"JSON"
	    )
	);
	document.getElementById('edit-field-wkt-0-value').value = geometry;
	document.getElementById('edit-field-wkt-centroid-0-value').value = geometry.getCentroid();
	document.getElementById('edit-field-telepules-value').value = response.settlement; 
	document.getElementById('edit-field-megye-value').value = response.county;
	document.getElementById('edit-field-nemzetiparkigazgatosag-value').value = response.nationalPark;
	
	userLayer.destroyFeatures();
	visualizeWKT
	(
	    transform
	    (
		geometry.x,
		geometry.y,
		2,
		2
	    ).toString());
	map.zoomToExtent
	(
	    userLayer.getDataExtent()
	);
}

function countProperties(obj) {
    var count = 0;

        for(var prop in obj) {
	    if(obj.hasOwnProperty(prop))
    		++count;
        }

    return count;
}

function fixCSS()
{
    for (var j = 1; j < document.styleSheets[2].cssRules.length - 1; j++)
    {
        if (document.styleSheets[2].cssRules.item(j).selectorText !== undefined)
        {
	    if (document.styleSheets[2].cssRules.item(j).selectorText.indexOf("p, ul, ol, dl, pre, table, fieldset") != -1)
	    {
		document.styleSheets[2].cssRules.item(j).style.margin = 0;
	    }
	}
    }
}
