$(function() {
	if ($("#map_canvas").length > 0) {

		var map;
		var markersArray = [];
		var poses=[];
		var markerImage = "images/favicon.gif";

		// zoom prevention vars
		var inProcess = false;
		var minZoomLevel = 7;
		var maxZoomLevel = 20;


		
		function initialize() {
			var latlng = new google.maps.LatLng(SERVER_DATA['map']['latitude'],SERVER_DATA['map']['longitude']);
			var myOptions = {
			  zoom: SERVER_DATA['map']['zoom'],
			  center: latlng,
			  mapTypeId: google.maps.MapTypeId.ROADMAP
			};
			map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
			
			
			
			
			// zoom prevention
			function onZoomChanged() {
			    if (inProcess) return;
				
				
			    if (map.getZoom() > maxZoomLevel) {
			        inProcess = true;
			        map.setZoom(maxZoomLevel);
			        inProcess = false;
			        return
			    }
			    else if (map.getZoom() < minZoomLevel) {
			        inProcess = true;
			        map.setZoom(minZoomLevel);
			        inProcess = false;
			        return;
			    }
				
				manageMarkerDisplayPosition(map.getZoom());
			}

			google.maps.event.addListener(map, 'zoom_changed', onZoomChanged);
		
		// log lat lng on mouseover :: testing only
			google.maps.event.addListener(map,"mousemove",function(latlng) {
				// console.clear();
				// console.log(latlng);
			});	
		}

		var markerList = [];	
		function addExistingMarker(id_location,latitude,longitude,location) {
			var originalPosition = new google.maps.LatLng(latitude,longitude);
			
			var resolution = Math.pow(10,minZoomLevel-6);
			position = getPositionRoundedUp( originalPosition , resolution );
			
			var marker = new google.maps.Marker({
				id_location: id_location,
				position: position,
				map: map,
				title:location,
				icon:markerImage,
				originalPosition:originalPosition
			});
			google.maps.event.addListener(marker, 'click', function() {
				var url = window.location;
				url += '&location='+this.id_location;
				window.location = url;
			});
			
			markerList.push(marker);
		}
		initialize();
		
		
		
		var hideMarker = function(marker) {
			if (marker.isHidden()) {
				marker.show();
			 } else {
				marker.hide();
			}
		}
		
		
		var getPositionRoundedUp = function(originalPosition, resolution) {
			lat = originalPosition.lat();
			lng = originalPosition.lng();
			
			rLat = Math.round( lat * resolution ) / resolution;
			rLng = Math.round( lng * resolution ) / resolution;
			
			newPosition = new google.maps.LatLng(rLat,rLng);
			
			return newPosition;
		}

			
		var manageMarkerDisplayPosition = function(zoomlevel) {	
			var marker;
			var lat, lng, rLat,rLng;
			var newPosition;
			var resolution = Math.pow(10,zoomlevel-6);
			// console.log("resolution is", resolution);
			for (var y in markerList) {
				var x = y;
				var marker = markerList[x];
				marker.setPosition( getPositionRoundedUp( marker.originalPosition , resolution ) );
			}
		}
	
		
		$.post("modules/map/map.php",{action:'getlocations'},function(data) {
			var data = data;
			for (var x in data) {
				addExistingMarker(data[x].id_location,data[x].latitude,data[x].longitude,data[x].location);
			}
		},'json');
		
	//
	}
});
