var geocoder = null;
var map = new GMap2($("map"));
var polygon;

//map.setCenter(new GLatLng(40.75,-73.98), 5);
var lat = geoip_latitude() || 40.75;
var lon = geoip_longitude() || -73.98;
var point = new GLatLng(lat, lon);
map.setCenter(point, 11);
//map.addControl(new GMapTypeControl(1));
map.addControl(new GLargeMapControl());
geocoder = new GClientGeocoder();

map.enableContinuousZoom();
map.enableDoubleClickZoom();
map.enableScrollWheelZoom();

//var point = new GLatLng(geoip_latitude(), geoip_longitude());
var markerD2 = new GMarker(point, {icon:G_DEFAULT_ICON, draggable: true}); 
map.addOverlay(markerD2);
markerD2.enableDragging();

var icon = new GIcon();
icon.image = "/images/mm_20_blue.png";
icon.shadow = "/images/mm_20_shadow.png";
icon.iconSize = new GSize(12, 20);
icon.shadowSize = new GSize(22, 20);
icon.iconAnchor = new GPoint(6, 20);
icon.infoWindowAnchor = new GPoint(5, 1);


function setCenter(MapCoordx, MapCoordy){
	map.setCenter(new GLatLng(MapCoordx,MapCoordy), 0);
}
function setCatoen(){
	var point  = markerD2.getPoint();
  var sonx   = parseInt((point.lng() + 180) * 100);
	var sony   = parseInt((point.lat() + 90)  * 100);
	var cPoint = 36000 * (sony-1) + sonx + 1000000000;
  
	if ($("tfActPlcID7").value != "3|" + cPoint){
		$("tfActPlcID7").value = "3|" + cPoint;
		var xy = [];
		xy = getXYFromCatoenPoint(cPoint);
		jDrawPolygon(xy[0], xy[1], 1);
	}
}

function getXYFromCatoenPoint(catPoint){
	y = ((Math.floor((catPoint-1000000000) / 36000)) + 1);
	x = (((catPoint - 1000000000 - ((y - 1) * 36000))) / 100) - 180 + 0.01;
	y = y / 100 - 90 + 0.01;		
	return [x, y];
}

GEvent.addListener(markerD2, "drag", function(){
	setCatoen();
});

GEvent.addListener(map, "zoomend", function(pz, nz){
	markerD2.setPoint(map.getCenter());
	setCatoen();
});

GEvent.addListener(map, "move", function(pz, nz){
	markerD2.setPoint(map.getCenter());
	setCatoen();
});

var accuracyToZoomLevel = [
	1,  // 0 - Unknown location
	5,  // 1 - Country
	8,  // 2 - Region (state, province, prefecture, etc.)
	8,  // 3 - Sub-region (county, municipality, etc.)
	11, // 4 - Town (city, village)
	13, // 5 - Post code (zip code)
	15, // 6 - Street
	15, // 7 - Intersection
	16, // 8 - Address
	16, // 9 - Building  
	17, // 10 - 
	17, // 11 -  		
];

function geocodeComplete(result) {
	if (result.Status.code != 200) {
		alert(jStr[3]+': "' + result.name + '"');
		return;
	}

	var placemark = result.Placemark[0]; // Only use first result
	var accuracy  = placemark.AddressDetails.Accuracy;
	var zoomLevel = accuracyToZoomLevel[accuracy] || 1;
	var point     = new GLatLng(placemark.Point.coordinates[1], placemark.Point.coordinates[0]);
	markerD2.setPoint(point);
	address  = placemark["address"];
	if (placemark["AddressDetails"]["Country"]["AdministrativeArea"] && placemark["AddressDetails"]["Country"]["AdministrativeArea"]["SubAdministrativeArea"] && accuracy < 5){
		zoomLevel += 1;
	}
	map.setCenter(point, zoomLevel);
	markerD2.openInfoWindowHtml(address);
	setCatoen();
}

function showAddress() {
  geocoder.getLocations($("haritaadres").value, geocodeComplete);
}

function rand(n)
{
	return (Math.floor(Math.random() * n + 1 ));
}

function byte2Hex(n)
{
	var nybHexString = "0123456789ABCDEF";
	return String(nybHexString.substr((n >> 4) & 0x0F,1)) + nybHexString.substr(n & 0x0F, 1);
}

function jDrawPolygon(lng, lat, cls){
	var PGpoints = [];
	
	PGpoints.push(new GPoint(lng, lat));
	PGpoints.push(new GPoint(lng, lat - 0.01));	
	PGpoints.push(new GPoint(lng - 0.01, lat - 0.01));
	PGpoints.push(new GPoint(lng - 0.01, lat));
	PGpoints.push(new GPoint(lng, lat));
	
	var polyColor = '#' + byte2Hex(rand(255)) + byte2Hex(rand(255)) + byte2Hex(rand(255));
	if (polygon && cls){
		map.removeOverlay(polygon);
	}
	polygon = new GPolygon(PGpoints,"#000000",2,.5,polyColor,.5);		
	map.addOverlay(polygon);
}

function jClearMap(){
	$("haritaadres").value = "";
	map.clearOverlays();
	markerD2 = new GMarker(map.getCenter(), {icon:G_DEFAULT_ICON, draggable: true}); 
	map.addOverlay(markerD2);
	markerD2.enableDragging();		
	
	GEvent.addListener(markerD2, "drag", function(){
		setCatoen();
	});
	
	var tmpCatPoint = $("tfActPlcID7").value;		
	var xy = [];
	
	xy = getXYFromCatoenPoint($("tfActPlcID7").value.split("|")[1]);
	$("tfActPlcID7").value = "";
	jDrawPolygon(xy[0], xy[1], 1);		
	$("tfActPlcID7").value = tmpCatPoint;
}

function jShowRecords(){
	new Ajax.Request('includes/ajax.asp?option=GetMapPointRecordCount&p1=' + $("tfActPlcID7").value.split("|")[1] ,
  {
	method: "get",
	onSuccess: function(transport){
			if (transport.responseText == ""){
				//alert("dris");
				//var xy   = getXYFromCatoenPoint($("tfActPlcID7").value.split("|")[1]);
				//var marker = new GMarker(new GLatLng(xy[1]-0.005, xy[0]-0.005), {icon:icon, draggable: false}); 
				//map.addOverlay(marker);
				markerD2.openInfoWindowHtml(jStr[3]);						
			}else{				
				var nArr = transport.responseText.split("#");
				for (var i=0; i<nArr.length; i++){
					var vArr = nArr[i].split("|");
					var xy   = getXYFromCatoenPoint(vArr[0]);
					var marker = new GMarker(new GLatLng(xy[1]-0.005, xy[0]-0.005), {icon:icon, draggable: false}); 
					marker.bindInfoWindowHtml(vArr[1] + " " + jStr[2]);						
					map.addOverlay(marker);								
					jDrawPolygon(xy[0], xy[1], 0);			
				}
			}
	},
	onFailure: function(){ alert('...') }
  });				
}

setCatoen();	
jShowRecords();
