// ustawienia ogolne
// wprowadzanie danych
// wyswietlanie danych

var myMap = null;
var myIcons = Array();

var MAP_MODE_FORMS_INPUT_MARKER = 0;
var MAP_MODE_MARKER_LIST = 1;


// ///////////////////////////////////////////////////// configuration

    var map_BaseUrl = '';
    var map_GOverviewMapControl = false;
    var map_enableDoubleClickZoom = false;
    var map_Mode = MAP_MODE_FORMS_INPUT_MARKER;
    var map_Markers = new Array();
    var map_Zoom = 10;
    var map_Lat = 53.1344137290817;
    var map_Lng = 18.018951416015625;
    var map_LatLngForm = 'myForm';
    var map_InputMarker_Lat = 0;
    var map_InputMarker_Lng = 0;
    var map_InfoWin_Zoom = 15;
    var map_InfoWin_Zoom_Enable = true;

// /////////////////////////////////////////////////////


//
// Creates a marker at the given point with the given number label
//

function createLabeledMarker (map, point, icon, label, width) {
	var marker = new GMarker( point, icon );
	var text = (width > 0) ? '<div style="width:300px;">'+label+'</div>' : label;
	GEvent.addListener(
		marker,
		"click",
		function() {
			// map.panTo(point); map.setZoom(15);
			marker.openInfoWindowHtml(text);
		}
	);
	return marker;
}

function panToAndZoom (lat, lng, zoom) {
    myMap.setZoom( zoom );
	myMap.panTo( new GLatLng(lat, lng) );
	myMap.closeInfoWindow();
}

//
// Init mode: add/remove one marker
//

function OneMarkerControlListenterInit ( map, icon ) {

	// listener : click
	GEvent.addListener( myMap, "click",
		function( marker, point ) {

			/* dodawanie lub usuwanie markera */
			form = document.getElementById( map_LatLngForm );

			if (marker) {
				map.removeOverlay(marker);
				form.elements['lat'].value = '';
				form.elements['lng'].value = '';
			}
			else {
				map.clearOverlays(); // usuwamy wszystkie markery
				map.addOverlay( new GMarker(point, icon) );
				form.elements['lat'].value = point.lat();
				form.elements['lng'].value = point.lng();
			}
		}
	);

	// add initial marker if defined
	if (map_InputMarker_Lat!=0 && map_InputMarker_Lng!=0) {

	    var pointInit = new GLatLng(map_InputMarker_Lat, map_InputMarker_Lng);
	    map.addOverlay( new GMarker(pointInit, icon) );

	    form = document.getElementById( map_LatLngForm );
		form.elements['lat'].value = map_InputMarker_Lat;
    	form.elements['lng'].value = map_InputMarker_Lng;
    	map.setCenter( pointInit, map_Zoom );
	}
}

//
// Init mode: load markers on map
//

function DefaultMarkersInit ( map ) {

	for (var i=0; i<map_Markers.length; i++) {
		var point = new GLatLng( map_Markers[i][0], map_Markers[i][1] );
		var label = map_Markers[i][3];
		if (map_InfoWin_Zoom_Enable) label += '<div style="height:30px;padding:2px;border-top:1px solid silver"><a href="javascript:;" onClick="panToAndZoom(' + map_Markers[i][0] + ', ' + map_Markers[i][1] + ', ' + map_InfoWin_Zoom + ');"><img src="images/magnifier_ico.png" border="0" align="absmiddle" /> PRZYBLIŻ</a></div>';
		map.addOverlay( createLabeledMarker( map, point, myIcons[ map_Markers[i][2] ], label, map_Markers[i][4] ) );
	}
}

function UpdateMapStateURL ( map, htmlElement ) {

	var point = map.getCenter();
	var latlng = point.toUrlValue();
	var zoom = map.getZoom();
	var url = 'latlng=' + latlng + '&zoom=' + zoom;

	document.getElementById(htmlElement).innerHTML = map_BaseUrl + url;
}

function GMapLoad() {

	// check browser compatibility
	if (!GBrowserIsCompatible()) return;

	// create GMap2 object
	myMap = new GMap2( document.getElementById('GoogleMapContainer') );

	var pointStart = new GLatLng( map_Lat, map_Lng );

	// configure GMap2 object
	myMap.addControl( new GLargeMapControl() ); // set navigations icons
	myMap.addControl( new GMapTypeControl() ); // type change icons (map, satelite, hybrid)
	if (map_GOverviewMapControl) myMap.addControl( new GOverviewMapControl() ); // overview map
	if (map_enableDoubleClickZoom) myMap.enableDoubleClickZoom(); // zoom by dblClick
	myMap.setCenter( pointStart, map_Zoom ); // start point, zoom

	// Create custom marker icon
	myIcons['house'] = new GIcon();
	myIcons['house'].image = "images/house_ico.png";
	myIcons['house'].shadow = "images/house_shade.png";
	myIcons['house'].iconSize = new GSize(37, 34);
	myIcons['house'].shadowSize = new GSize(37, 34);
	myIcons['house'].iconAnchor = new GPoint(18, 28);
	myIcons['house'].infoWindowAnchor = new GPoint(18, 1);

	// Create custom marker icon 2
	myIcons['house2'] = new GIcon();
	myIcons['house2'].image = "images/house2_ico.png";
	myIcons['house2'].shadow = "images/house2_shade.png";
	myIcons['house2'].iconSize = new GSize(40, 47);
	myIcons['house2'].shadowSize = new GSize(63, 47);
	myIcons['house2'].iconAnchor = new GPoint(19, 46);
	myIcons['house2'].infoWindowAnchor = new GPoint(20, 2);

	// Create custom marker icon 3
	myIcons['apart'] = new GIcon();
	myIcons['apart'].image = "images/apart_ico.png";
	myIcons['apart'].shadow = "images/apart_shade.png";
	myIcons['apart'].iconSize = new GSize(40, 47);
	myIcons['apart'].shadowSize = new GSize(63, 47);
	myIcons['apart'].iconAnchor = new GPoint(19, 46);
	myIcons['apart'].infoWindowAnchor = new GPoint(20, 2);

	// Create marker manager object
	// var mgrOptions = { borderPadding: 50, maxZoom: 15, trackMarkers: true };
	// myMngr = new GMarkerManager( myMap, mgrOptions );
	// myMngr.refresh();

	GEvent.addListener( myMap, "moveend", function() { UpdateMapStateURL( myMap, 'mapURL' ); } );
	GEvent.addListener( myMap, "zoomend", function(oldLevel, newLevel) { UpdateMapStateURL( myMap, 'mapURL' ); } );
	
	

	switch (map_Mode) {
		case MAP_MODE_MARKER_LIST:
			DefaultMarkersInit( myMap, myIcons['house'] );
		break;
		case MAP_MODE_FORMS_INPUT_MARKER:
			OneMarkerControlListenterInit( myMap, myIcons['house'] );
		break;
		default:
	}
	UpdateMapStateURL( myMap, 'mapURL' );
}


