var map;
var geocoder = new GClientGeocoder();
var marker;
var lat;
var lng;
var zoom;
var click;
var markers = [];
var sub_bounds = [];
//console.log(typeof(marker));

function getBounds(tablnglat){
	
	var minlat=tablnglat[0].y;
	var maxlat=tablnglat[0].y;
	var minlng=tablnglat[0].x;
	var maxlng=tablnglat[0].x;
	
  for (var i=0; i<tablnglat.length; i++){

	 if (minlat>tablnglat[i].y)  minlat=tablnglat[i].y;
	 if (maxlat<tablnglat[i].y)  maxlat=tablnglat[i].y;
	 if (minlng>tablnglat[i].x)  minlng=tablnglat[i].x;
	 if (maxlng<tablnglat[i].x)  maxlng=tablnglat[i].x;	 
  };

 
  var sw = new GLatLng(minlat, minlng);
  var ne = new GLatLng(maxlat, maxlng);
  latlngboundsarray = new GLatLngBounds(sw, ne);
  
  return latlngboundsarray;
  
}


function centerAndZoomToLatLngBounds (latlngboundsarray)
//TPcomment: NotUsed Function 
{
	//var boundingbox = new GLatLngBounds();

	var centerlat = (latlngboundsarray.getNorthEast().lat() + latlngboundsarray.getSouthWest().lat()) / 2;
	var centerlng = (latlngboundsarray.getNorthEast().lng() + latlngboundsarray.getSouthWest().lng()) / 2;
	
	if (this.map.getBoundsZoomLevel(latlngboundsarray)>12) var zoom = 12;	
	else var zoom = this.map.getBoundsZoomLevel(latlngboundsarray);
		
	this.map.setCenter(new GLatLng(centerlat, centerlng), zoom);
	//log(this.map.getBoundsZoomLevel(latlngboundsarray));
}

function objectsInCityOnLoad(lat, lng, zoom, type_array){
	initialize(lat,lng, zoom, true);
	searchOnMap(type_array);  
}

function searchOnMap(type_array) {

	var q=[];
    	 q[0]=map.getBounds().getSouthWest().x;
    	 q[1]=map.getBounds().getNorthEast().y;
    	 q[2]=map.getBounds().getNorthEast().x;
    	 q[3]=map.getBounds().getSouthWest().y;
		 q[4]= type_array;
    	var options={ coord:Object.toJSON(q) };
    	   	 
     $.post('/objects/loadObjects', options, function(response) {
	 	eval(response);
	 	for(var i=0; i<objects.length; i++) {
		    var info = "<div><b><a href=http://"+objects[i][7]+"/"+objects[i][2]+"/"+objects[i][5]+">"+objects[i][3]+"</b></a></div><div><center>"+objects[i][4]+"</center></div><div><a href=http://www.wartozwiedzic.pl/"+objects[i][2]+"/"+objects[i][5]+"><img src=/thumb.php?img=uploads/objects/"+objects[i][2]+"/"+objects[i][6]+"&w=80&h=80></a></a></div>";
			 drawPointInfo(objects[i][0], objects[i][1], info);									   	  						    	    
    	 }
	 });
}

function initialize(lat, lng, zoom, listeners, type_array) {
		
        map = new GMap2(document.getElementById("map"));
        map.setCenter(new GLatLng(lat, lng), zoom);

        map.setUIToDefault();  
        map.disableScrollWheelZoom();
		if (listeners) {
				
			GEvent.addListener(map, "zoomend", function(){
//				map.clearOverlays();
               removeNotInBounds();
				searchOnMap(type_array);
			});
			
			GEvent.addListener(map, "moveend", function(){				
				
				removeNotInBounds();
//                map.clearOverlays();
				searchOnMap(type_array);	
			});
		}
}

function removeNotInBounds(){
	 var markers_ =[] ;
	 var q=[];
    	 q[0]=map.getBounds().getSouthWest().x;
    	 q[1]=map.getBounds().getNorthEast().y;   //lat
    	 q[2]=map.getBounds().getNorthEast().x;   //lng
    	 q[3]=map.getBounds().getSouthWest().y;
     var j =0;
	for (var i=0; i<markers.length; i++ ){

		if ((markers[i].getLatLng().lat() > q[1] || markers[i].getLatLng().lat < q[3]) || (markers[i].getLatLng().lng() > q[2] || markers[i].getLatLng().lng() < q[0])) {
			map.removeOverlay(markers[i]);			
		}
		else {		
		    	
			markers_[j] = markers[i];
			j++;
		}
	}
	
	if (markers_.length > 0) {
		markers = markers_;
	}
 
		 
}
function initializes() {
	
	
    map = new GMap2($("#map"));
    map.setCenter(new GLatLng(51.5311945, 20.0086471), 13);
   
    map.setUIToDefault();  
    
}
function centerToObj(lat, lng, info){
	 if(!map) initialize();
	 var point = new GLatLng(lat, lng);
	 map.setCenter(point, 12);	 
	 map.openInfoWindowTabsHtml(point, "<center>"+info+"</center>"); 
}
function drawPointInfo(lat, lng, info){
 
		if(!map) initialize();
		 var point = new GLatLng(lat, lng);
		 
		 
		 	var exists=false;
		 	for (var i = 0; i < markers.length; i++) {
		 	
		 		if (markers[i].getLatLng().equals(point)) {
					exists=true;
					break;
		 		}
		 	}

			if (!exists) {
				var marker = createMarker(point, info);
				markers.push(marker);
				map.addOverlay(marker);
			}

		 
		

		  
}

function drawPoint(lat, lng){
	 if(!map) initialize();
	 var point = new GLatLng(lat, lng);
	 
     GEvent.addListener(map, "zoomend", function() {

     	zoom = map.getZoom();
         $("#obj_zoom").val(zoom);  
     });
	 map.addOverlay(createMark(point));   
	 
}

function showCities(address) {
	
	  geocoder.getLatLng(
	    address,
	    function(point) {
	      if (!point) {
	        alert(address + " nie znaleziono");
	      } else {

	    //	map.addOverlay(createMark(point));
		
			var zoom = map.getZoom();
		//	console.log(zoom);
	    	marker.setPoint(point);
	    	//map.setZoom(zoom);
	        lat = marker.getLatLng().lat();
            lng = marker.getLatLng().lng();
            
            document.getElementById("obj_lat").value = lat; 
            document.getElementById("obj_lng").value = lng; 
            document.getElementById("obj_zoom").value = zoom; 
            map.setCenter(point, zoom);
          //  map.setZoom(zoom);
	                
	      }
	    }
	  );
	}


function showAddress(address) {
	
	 if(!map) initialize();	
	  geocoder.getLatLng(
	    address,
	    function(point) {
	      if (!point) {
	        alert("Nie znaleziono miejscowości " + address);
	      } else {
	    	 
	        map.setCenter(point, 13);
	        	//console.log(marker);
	    	   if (typeof(marker) == 'undefined'){
	    		  
			        map.addOverlay(createMark(point));
			      //  console.log(marker);
			        var zoom = map.getZoom();
			        lat = marker.getLatLng().lat();
		            lng = marker.getLatLng().lng();
		         
		            GEvent.addListener(map, "zoomend", function() {

		            	zoom = map.getZoom();
			            document.getElementById("obj_zoom").value = zoom;  
		            });
		            
		            document.getElementById("obj_lat").value = lat; 
		           document.getElementById("obj_lng").value = lng; 
		           document.getElementById("obj_zoom").value = zoom; 
		        } else { 

		        	marker.setPoint(point);
		        	zoom = map.getZoom();
			        lat = marker.getLatLng().lat();
		            lng = marker.getLatLng().lng();
		            GEvent.addListener(map, "zoomend", function() {

		            	zoom = map.getZoom();
			            document.getElementById("obj_zoom").value= zoom;  
		            });
		           document.getElementById("obj_lat").value = lat; 
		           document.getElementById("obj_lng").value = lng; 
		           document.getElementById("obj_zoom").value = zoom; 
     	
		        }

	      }
	    }
	  );
	}


function createMarker(point, info) {
	
	var blueIcon = new GIcon(G_DEFAULT_ICON); 

	blueIcon.image = "/images/marker.png"; 
    
	blueIcon.iconSize = new GSize(32, 32); 
	blueIcon.iconAnchor = new GPoint(16, 32); 
	blueIcon.shadow = "/images/marker_shadow.png"; 
	blueIcon.shadowSize = new GSize(49, 32); 

	markerOptions = { icon:blueIcon }; 
	          marker = new GMarker(point, markerOptions); 

	          GEvent.addListener(marker, "click", function() { 

	              map.openInfoWindowTabsHtml(point, "<center>"+info+"</center>"); 
	            });
			
	          return marker; 
} 

function createMark(point) {
	

	//GEvent.addListener(map, "click", function() {

		var blueIcon = new GIcon(G_DEFAULT_ICON); 

		blueIcon.image = "/images/marker.png"; 

		blueIcon.iconSize = new GSize(32, 32); 
		blueIcon.iconAnchor = new GPoint(16, 32); 
		blueIcon.shadow = "/images/marker_shadow.png"; 
		blueIcon.shadowSize = new GSize(49, 32); 
		markerOptions = { icon:blueIcon, draggable: true}; 
        marker = new GMarker(point, markerOptions); 
    	

        var zoom = map.getZoom();
        lat = marker.getLatLng().lat();
        lng = marker.getLatLng().lng();
        
      	GEvent.addListener(marker, "dragend", function() {

      	    	lat = marker.getLatLng().lat();
	            lng = marker.getLatLng().lng(); 
	           document.getElementById("obj_lat").value = lat; 
	            document.getElementById("obj_lng").value = lng; 

      	 });
      	
      	 document.getElementById("obj_lat").value = lat; 
         document.getElementById("obj_lng").value = lng; 
         document.getElementById("obj_zoom").value = zoom; 
    	
	//});
	return marker; 


}



function log(s){
    if (typeof(console) == 'object' && typeof(console.log) == "function") {
        console.log(s);
    }
}   