var exproMap = new Array();
var markers = new Array();
var contents = new Array();

/*** ==== API v3 ==== ***

function exproGoogleMapInit (id) {
	exproMap[id] = new google.maps.Map(document.getElementById("map_" + id), {
		zoom: 6,
		center: new google.maps.LatLng(52.02545860348814, 19.2919921875),
		navigationControl: true,
		scaleControl: true,
		mapTypeId: google.maps.MapTypeId.ROADMAP
    	});
	markers[id] = new Array();
	contents[id] = new Array();
}

*/


/*
GEvent.addListener(exproMap[id],"click",function(overlay,point){
	if (!overlay) {
		
		exproCreateInputMarker(point.lat(),point.lng(),false,'',exproMap[id],id);
	}
});
*/

function exproEnter (e) {
	var evt = e || window.event;
	var keyPressed = evt.which || evt.keyCode;
	if (keyPressed == 13) {
		exproSearchAddress(0);
	}
}

function exproSearchAddress(id) {
	exproMap[id].geocoder.getLocations($("#googlemaps_address").val(), function(result){
		if (result.Status.code == G_GEO_SUCCESS) {
			// ===== If there was more than one result, "ask did you mean" on them all =====
			if (result.Placemark.length > 1) { 
			
				$("#googlemaps_addresses").show();
				// Loop through the results
				$("#googlemaps_addresses_results").html('');
				for (var i=0; i<result.Placemark.length; i++) {
					var p = result.Placemark[i].Point.coordinates;
					var link = document.createElement("a");
					$(link).attr("href","javascript:exproCreateInputMarker2(" +p[1]+","+p[0]+",true,'',"+id+");");
					//$(link).attr("onclick","javascript:exproCreateInputMarker(" +p[1]+","+p[0]+",true,'',"+id+");");
					$(link).text(result.Placemark[i].address);
					$("#googlemaps_addresses_results").append(link);
				}
			}
			// ===== If there was a single marker =====
			else {
				$("#googlemaps_addresses").hide();
				var p = result.Placemark[0].Point.coordinates;
				exproCreateInputMarker(p[1],p[0],true,'',id);
			}
		}
		// ====== Decode the error status ======
		else {
			alert('Nie można znaleźć "'+$("#googlemaps_address").val()+ '" ');
		}
	});


}

function exproMapSave(id) {
	switch(exproMap[id].getCurrentMapType()) {
		case G_NORMAL_MAP:	// Normal Map
			var mapType = "map";
		break;
		case G_SATELLITE_MAP:	// Satallite Imagery
			var mapType = "sat";
		break;
		case G_HYBRID_MAP:	//Hybrid Map
			var mapType = "hybrid";
		break;
	};
	var text=mapType+"<BR>";
	$(markers[id]).each(function(i){
		if (this!='') {
			text+= "Punkt:<br>";
			text+=this.getPoint().lat()+"<BR>";
			text+=this.getPoint().lng()+"<BR>";
			text+=contents[id][i]+"<br>";
		}
	});
	$("#return").html(text);

}

function exproMapType (map_type, id) {
	switch(map_type) {
		case "map":	// Normal Map
			exproMap[id].setMapType(G_NORMAL_MAP);
		break;
		case "sat":	// Satallite Imagery
			exproMap[id].setMapType(G_SATELLITE_MAP);
		break;
		case "hybrid":	//Hybrid Map
			exproMap[id].setMapType(G_HYBRID_MAP);
		break;
	};
}

function exproPlace(lat,lng,id) {
	var point = new GLatLng(lat,lng);
	exproMap[id].setCenter(point,14); 
	exproMap[id].addOverlay(new GMarker(point));
	$("#return").html("");
}



// == creates a draggable marker with an input form ==
function exproCreateInputMarker(lat,lng,zoom,text,id) {
	var point = new GLatLng(lat,lng);
	if (zoom) exproMap[id].setCenter(point,14);
	var marker = new GMarker(point,{draggable:true, icon:G_START_ICON});
	var iwform = 'Opis:<br>'
		   + '<form action="#" onsubmit="exproProcess('+id+'); return false" action="#">'
		   + '  <textarea name="map_data" id="map_data" rows="5" cols="40">'
							 + text
							 + '<\/textarea><br>'
		   + '	<a href="javascript:exproProcess('+id+');">Zatwierdź</a> | '
							 + '	<a href="javascript:exproDeleteMarker(lastmarker,'+id+');;">Usuń</a>'
		   + '<\/form>';
						 
	GEvent.addListener(marker, "click", function() {
		lastmarker = marker;
		marker.openInfoWindowHtml(iwform);
	});
	exproMap[id].addOverlay(marker);
	marker.openInfoWindowHtml(iwform);
	lastmarker=marker;
	return marker;
}

function exproCreateInputMarker2 (lat,lng,zoom,text,id) {
	exproCreateInputMarker(lat,lng,zoom,text,id);
}

function exproCreateMarker(point,text,id) { 
	var marker = new GMarker(point,{draggable:true});
	markers[id].push(marker);
	contents[id].push(text);
	text = '<span id="map_data">'
			+ text
			+ '</span><br />'
			+ '	<a href="javascript:exproEditMarker('+id+');">Edytuj</a> | <a href="javascript:exproDeleteMarker(lastmarker,'+id+');">Usuń</a>';
	GEvent.addListener(marker,"click", function() {
		lastmarker = marker;
		marker.openInfoWindow(text);
	});
	exproMap[id].addOverlay(marker);
	return marker;
}

function exproCreateMarker2(point,text,id) { 
	var marker = new GMarker(point);
	markers[id].push(marker);
	contents[id].push(text);
	GEvent.addListener(marker,"click", function() {
		lastmarker = marker;
		marker.openInfoWindow(text);
	});
	exproMap[id].addOverlay(marker);
	return marker;
}

function exproDeleteMarker(marker,id) 
{ 
	exproMap[id].closeInfoWindow()
	if(marker) 
	{ 
		exproMap[id].removeOverlay(marker); 
		$(markers[id]).each(function(i){
			if (this==marker) {
				markers[id][i]='';
				contents[id][i]='';
			}

		});
	} 
}

function exproProcess(id) {
	// == obtain the data
	var details = $("#map_data").val().toString().replace(/\n/g, "<br>");
	var lat = lastmarker.getPoint().lat();
	var lng = lastmarker.getPoint().lng();


	exproMap[id].closeInfoWindow();
	exproDeleteMarker(lastmarker,id);
	var marker = exproCreateMarker(lastmarker.getPoint(),details,id);
	GEvent.trigger(marker,"click");

}

function exproEditMarker(id) {
	var details = $("#map_data").html().toString().replace(/<br>/g, "\n");
	var lat = lastmarker.getPoint().lat();
	var lng = lastmarker.getPoint().lng();


	exproMap[id].closeInfoWindow();
	exproDeleteMarker(lastmarker,id);
	var marker = exproCreateInputMarker(lat,lng,false,details,id);
	GEvent.trigger(marker,"click");

}

function exproRemoveAllMarkers(id) {
	exproMap[id].clearOverlays();
	markers[id] = new Array();
	contents[id] = new Array();
}

function exproShowMarkers(id) {

	var bounds = '';
	bounds = new GLatLngBounds();
	$(markers[id]).each(function(i){
		if (this!='') {
			bounds.extend(this.getPoint());
		}
	});
	exproMap[id].setZoom(exproMap[id].getBoundsZoomLevel(bounds));
	exproMap[id].setCenter(bounds.getCenter());
					
}

/*

var exproMap = new Array();
var markers = new Array();
var contents = new Array();
*/
function exproGoogleMapInit (id) {
	var temp = "map_" + id;
	exproMap[id] = new GMap2(document.getElementById(temp));
	exproMap[id].setCenter(new GLatLng(52.02545860348814, 19.2919921875), 6);
	exproMap[id].addControl(new GLargeMapControl());
	exproMap[id].addControl(new GMapTypeControl());
	exproMap[id].geocoder = new GClientGeocoder;
	exproMap[id].enableContinuousZoom();
	markers[id] = new Array();
	contents[id] = new Array();
}/*
GEvent.addListener(exproMap[id],"click",function(overlay,point){
	if (!overlay) {
		
		exproCreateInputMarker(point.lat(),point.lng(),false,'',exproMap[id],id);
	}
});
*//*

function exproEnter (e) {
	var evt = e || window.event;
	var keyPressed = evt.which || evt.keyCode;
	if (keyPressed == 13) {
		exproSearchAddress(0);
	}
}

function exproSearchAddress(id) {
	exproMap[id].geocoder.getLocations($("#googlemaps_address").val(), function(result){
		if (result.Status.code == G_GEO_SUCCESS) {
			// ===== If there was more than one result, "ask did you mean" on them all =====
			if (result.Placemark.length > 1) { 
			
				$("#googlemaps_addresses").show();
				// Loop through the results
				$("#googlemaps_addresses_results").html('');
				for (var i=0; i<result.Placemark.length; i++) {
					var p = result.Placemark[i].Point.coordinates;
					var link = document.createElement("a");
					$(link).attr("href","javascript:exproCreateInputMarker2(" +p[1]+","+p[0]+",true,'',"+id+");");
					//$(link).attr("onclick","javascript:exproCreateInputMarker(" +p[1]+","+p[0]+",true,'',"+id+");");
					$(link).text(result.Placemark[i].address);
					$("#googlemaps_addresses_results").append(link);
				}
			}
			// ===== If there was a single marker =====
			else {
				$("#googlemaps_addresses").hide();
				var p = result.Placemark[0].Point.coordinates;
				exproCreateInputMarker(p[1],p[0],true,'',id);
			}
		}
		// ====== Decode the error status ======
		else {
			alert('Nie można znaleźć "'+$("#googlemaps_address").val()+ '" ');
		}
	});


}

function exproMapSave(id) {
	switch(exproMap[id].getCurrentMapType()) {
		case G_NORMAL_MAP:	// Normal Map
			var mapType = "map";
		break;
		case G_SATELLITE_MAP:	// Satallite Imagery
			var mapType = "sat";
		break;
		case G_HYBRID_MAP:	//Hybrid Map
			var mapType = "hybrid";
		break;
	};
	var text=mapType+"<BR>";
	$(markers[id]).each(function(i){
		if (this!='') {
			text+= "Punkt:<br>";
			text+=this.getPoint().lat()+"<BR>";
			text+=this.getPoint().lng()+"<BR>";
			text+=contents[id][i]+"<br>";
		}
	});
	$("#return").html(text);

}

function exproMapType (map_type, id) {
	switch(map_type) {
		case "map":	// Normal Map
			exproMap[id].setMapType(G_NORMAL_MAP);
		break;
		case "sat":	// Satallite Imagery
			exproMap[id].setMapType(G_SATELLITE_MAP);
		break;
		case "hybrid":	//Hybrid Map
			exproMap[id].setMapType(G_HYBRID_MAP);
		break;
	};
}

function exproPlace(lat,lng,id) {
	var point = new GLatLng(lat,lng);
	exproMap[id].setCenter(point,14); 
	exproMap[id].addOverlay(new GMarker(point));
	$("#return").html("");
}



// == creates a draggable marker with an input form ==
function exproCreateInputMarker(lat,lng,zoom,text,id) {
	var point = new GLatLng(lat,lng);
	if (zoom) exproMap[id].setCenter(point,14);
	var marker = new GMarker(point,{draggable:true, icon:G_START_ICON});
	var iwform = 'Opis:<br>'
		   + '<form action="#" onsubmit="exproProcess('+id+'); return false" action="#">'
		   + '  <textarea name="map_data" id="map_data" rows="5" cols="40">'
							 + text
							 + '<\/textarea><br>'
		   + '	<a href="javascript:exproProcess('+id+');">Zatwierdź</a> | '
							 + '	<a href="javascript:exproDeleteMarker(lastmarker,'+id+');;">Usuń</a>'
		   + '<\/form>';
						 
	GEvent.addListener(marker, "click", function() {
		lastmarker = marker;
		marker.openInfoWindowHtml(iwform);
	});
	exproMap[id].addOverlay(marker);
	marker.openInfoWindowHtml(iwform);
	lastmarker=marker;
	return marker;
}

function exproCreateInputMarker2 (lat,lng,zoom,text,id) {
	exproCreateInputMarker(lat,lng,zoom,text,id);
}

function exproCreateMarker(point,text,id) { 
	var marker = new GMarker(point,{draggable:true});
	markers[id].push(marker);
	contents[id].push(text);
	text = '<span id="map_data">'
			+ text
			+ '</span><br />'
			+ '	<a href="javascript:exproEditMarker('+id+');">Edytuj</a> | <a href="javascript:exproDeleteMarker(lastmarker,'+id+');">Usuń</a>';
	GEvent.addListener(marker,"click", function() {
		lastmarker = marker;
		marker.openInfoWindow(text);
	});
	exproMap[id].addOverlay(marker);
	return marker;
}

function exproCreateMarker2(point,text,id) { 
	var marker = new GMarker(point);
	markers[id].push(marker);
	contents[id].push(text);
	GEvent.addListener(marker,"click", function() {
		lastmarker = marker;
		marker.openInfoWindow(text);
	});
	exproMap[id].addOverlay(marker);
	return marker;
}

function exproDeleteMarker(marker,id) 
{ 
	exproMap[id].closeInfoWindow()
	if(marker) 
	{ 
		exproMap[id].removeOverlay(marker); 
		$(markers[id]).each(function(i){
			if (this==marker) {
				markers[id][i]='';
				contents[id][i]='';
			}

		});
	} 
}

function exproProcess(id) {
	// == obtain the data
	var details = $("#map_data").val().toString().replace(/\n/g, "<br>");
	var lat = lastmarker.getPoint().lat();
	var lng = lastmarker.getPoint().lng();


	exproMap[id].closeInfoWindow();
	exproDeleteMarker(lastmarker,id);
	var marker = exproCreateMarker(lastmarker.getPoint(),details,id);
	GEvent.trigger(marker,"click");

}

function exproEditMarker(id) {
	var details = $("#map_data").html().toString().replace(/<br>/g, "\n");
	var lat = lastmarker.getPoint().lat();
	var lng = lastmarker.getPoint().lng();


	exproMap[id].closeInfoWindow();
	exproDeleteMarker(lastmarker,id);
	var marker = exproCreateInputMarker(lat,lng,false,details,id);
	GEvent.trigger(marker,"click");

}

function exproRemoveAllMarkers(id) {
	exproMap[id].clearOverlays();
	markers[id] = new Array();
	contents[id] = new Array();
}

function exproShowMarkers(id) {

	var bounds = '';
	bounds = new GLatLngBounds();
	$(markers[id]).each(function(i){
		if (this!='') {
			bounds.extend(this.getPoint());
		}
	});
	exproMap[id].setZoom(exproMap[id].getBoundsZoomLevel(bounds));
	exproMap[id].setCenter(bounds.getCenter());
					
}*/

