function initialize_map(map, langtitude, longtitude, cat_id, zoom) {
	if(typeof langtitude != "undefined" && langtitude != '' && typeof longtitude != "undefined" && longtitude != ''){
		if(typeof zoom == "undefined") zoom = 15;
		map.setCenter(new GLatLng(langtitude, longtitude), zoom);
	}else
    //map.setCenter(new GLatLng(42.710000, 23.340000), minZoomLevel);
    map.setCenter(new GLatLng(42.698221, 23.329468), minZoomLevel);
    if(typeof districts != "undefined" && !is_small){
    	if(districts.length > 0) map.addControl(new ShowDistrictsControl());
    }
     setAllowedArea();
//    var gmwControl = new GMouseWheelControl();
//    map.addControl(gmwControl);
    /* hoverControls method to hide/show GControls by 'mouseout'/'mouseover' */
		GMap2.prototype.hoverControls = function(opt_noCloseIw){
		  var theMap = this;
		  theMap.hideControls();
		  GEvent.addListener(theMap, "mouseover", function(){
		    theMap.showControls();
		  });
		  GEvent.addListener(theMap, "mouseout", function(){
		    theMap.hideControls();
		  });
		}
		GMap.prototype.hoverControls = GMap2.prototype.hoverControls;
		
	  setZoomLimit(minZoomLevel, 17);
 /*old variant of controls
      //map.addControl(new GLargeMapControl());
      //map.addControl(new GMapTypeControl());
      //map.setMapType(G_HYBRID_MAP);
      //map.hoverControls();
*/
      
//    map.addMapType(G_PHYSICAL_MAP);
      var mapControl = new GHierarchicalMapTypeControl();
      // Set up map type menu relationships
      mapControl.clearRelationships();
      mapControl.addRelationship(G_SATELLITE_MAP, G_HYBRID_MAP, "Етикети", true);
      // Add control after you've specified the relationships
      map.addControl(mapControl);
      map.addControl(new GLargeMapControl());
     // map.setMapType(G_HYBRID_MAP);
      map.setMapType(G_NORMAL_MAP);
      map.hoverControls();
      map.enableScrollWheelZoom();
      map.enableContinuousZoom();
      // Add a move listener to restrict the bounds range
      GEvent.addListener(map, "move", function() {
        checkBounds(map, allowedBounds);
      });
      if(!is_small){
	      zoomListener = GEvent.addListener(map, "dragend", function() {
	      	//var iw = map.getInfoWindow();
  			//if (iw.isHidden() && !stopTrigger) {
  			
  				showObjectsInArea(cat_id);	
  			//}
  			//stopTrigger = false;
	      });
	      
	      zoomEndListener = GEvent.addListener(map, "zoomend", function(oldLevel, newLevel) {
	      	
	      	if(newLevel < oldLevel)
	      	{
		      	var limit = defineLimitForObjects();
		      	if(limit == '') return;
		      	
		      	if(pointArr.length > limit){
	      		
		      		var numPopElements = pointArr.length - limit;
		      		var p = 0;
		      		//alert(pointArr.length + '   '+numPopElements+'  '+limit);
		      		//alert(pointArr);
		      		
		      		for(var i= 0; i < pointArr.length; i++){//
		      			if(typeof pointArr[i][1] != "undefined"){//alert(p);
		      				if(p == numPopElements) break;
							map.removeOverlay(pointArr[i][1]);
							p++;
		      			}
		      			pointArr.splice(i, 1);
		      			i--;
					}
					ids_objects_arr = [];
					//alert(pointArr.length + '   '+numPopElements+'  '+limit);
	      			//GEvent.removeListener(zoomListener);
	      		}else{
	      			var iw = map.getInfoWindow();
		  			if (iw.isHidden() && !stopTrigger) {
		  				showObjectsInArea(cat_id);
		  			}
	      		}
	      	}else{
	      		var iw = map.getInfoWindow();
	  			if (iw.isHidden() && !stopTrigger) {
	  				showObjectsInArea(cat_id);
	  			}
	      	}
	      	stopTrigger = false;
	      	
	      });
      }
}

// Creates a marker at the given point
// Clicking the marker will hide it
  function createMarker(langtitude, longtitude, myHtml, id_object, draggable, icon, by_search, by_dis_det) {
  	
  	//for distr details
  	//if(typeof by_dis_det != "undefined") execute_js('/districts/set_district/'+by_dis_det+"/"+id_object);
 
  	if(id_object != undefined && id_object != '' && by_search != 1 && typeof pointArr != "undefined" && typeof ids_objects_arr != "undefined"){
  		if(typeof ids_objects_arr[id_object] == "object") return;
  	}
  	
  	if((ids_objects_arr[id_object] == undefined || ids_objects_arr[id_object] == '') && (foundObjects[id_object] == undefined || foundObjects[id_object] == '')){
  	  var point = new GLatLng(langtitude, longtitude);
//  	  	switch(icon){
//  	  		case 1: var letteredIcon = letterIcon("darkgreen", '', 30, 52);//namereni obekti
//  	  				break;
//  	  		case 2: var letteredIcon = letterIcon("orange", '', 30, 52);//vij pove4e, redaktirane, dobavqne na obekt i moite obekti, koito sa na samata stranica
//  	  				break;
//  	  		default: var letteredIcon = letterIcon("blue", '', 30, 52);
//  	  				break;
//  	  	}
		var letteredIcon = letterIcon(icon, '', 18, 33);
  	  	if(draggable) var marker = new GMarker(point, {icon: letteredIcon, draggable:true, autoPan:false});
  	  	else var marker = new GMarker(point, {icon: letteredIcon});
      if(myHtml != undefined && myHtml != ''){
	      GEvent.addListener(marker,"click", function() {
	        this.openInfoWindowHtml(myHtml);
	        stopTrigger = true;
	      });
      }
      map.addOverlay(marker);
      //alert(id_object);
      if(id_object != undefined && id_object != '' && by_search != 1){
      	
      	pointArr.push(new Array(id_object, marker));
      	ids_objects_arr[id_object] = id_object;
//      	while(i--){
//      		if(typeof pointArr[i] == "undefined") pointArr.splice(i,1);
//      	}
      	
      }else if(by_search == 1){
      	foundObjects[id_object] = marker;
      }
      return marker;
  	}
  	return;
  }
  
  function createAddressMarker(lat, lng, i, address, is_cache, iter){
  	var letteredIcon = letterIcon("darkgreenSmall", '', 18, 18);
	if(typeof iter == "undefined") iter = i;
	var marker = new LabeledMarker(new GLatLng(lat, lng),{icon:letteredIcon, labelText: iter+1, labelClass: 'marker'});
	 
	
	addr[i] = address;
	if(!is_cache) addr[i] = addr[i].substr(0, addr[i].length-17);
	if(addr[i].length > 45) addr[i] = addr[i].substr(0, 45)+"...";
	$("#addr-result").append('<p class="address_mark result"><span class="num_over_img">'+(iter+1)+'</span><span class="num_with_name"><a href="javascript:get_target_address('+i+');">'+addr[i]+'</a></span></p>');
	addrFlag = true;
	     		
	if((marker.getPoint().lng() < min_lng) || min_lng == 0) min_lng = marker.getPoint().lng();
	if((marker.getPoint().lng() > max_lng) || max_lng == 0) max_lng = marker.getPoint().lng();
	if((marker.getPoint().lat() < min_lat) || min_lat == 0) min_lat = marker.getPoint().lat();
	if((marker.getPoint().lat() > max_lat) || max_lat == 0) max_lat = marker.getPoint().lat();
	
	pointArrAddress[i] = marker;
	
	//for response address by point
	GEvent.addListener(marker, "click", function() {
		var found_point = this.getLatLng();
		if(typeof moveAddMarkerToPoint != "undefined")
		{
			add_marker(found_point.lat(), found_point.lng());
		}
		else
		{
	    	for(j in pointArrAddress){
	        	if(pointArrAddress[j].getPoint().equals(found_point)){
	            	pointArrAddress[j].openInfoWindowHtml('<div class="care_news"><p class="address_label">'+addr[j]+'</p>'
	            											+'<p><a href="javascript:add_marker('+found_point.lat()+', '+found_point.lng()+');">добави обект тук или в околността</a></p>'
	            											+'<p><a href="javascript:get_link_marker('+found_point.lat()+', '+found_point.lng()+');">вземи линк</a></p>'
	            											+'<p><a href="javascript:get_objects_near_by_me('+found_point.lat()+', '+found_point.lng()+');">виж обектите в околността</a></p>'
	            											+'<p class="print_mode_hide"><a href="javascript:;" onclick="popUp(\'/main/print_mode/'+found_point.lat()+'/'+found_point.lng()+'/15/'+from_search+'/0/'+j+'\', 650, 700);">принтирай</a></p>'
	            											+'</div>');
	            }
	        }
		}
	});
	
	map.addOverlay(marker);
	$("#addr-result").show();
	return marker;
	
  }
  
  function checkBounds(map, allowedBounds) {//alert(allowedBounds);
        // Perform the check and return if OK
        if (allowedBounds.contains(map.getCenter())) {
          return;
        }
        // It`s not OK, so find the nearest allowed point and move there
        var C = map.getCenter();
        var X = C.lng();
        var Y = C.lat();

        var AmaxX = allowedBounds.getNorthEast().lng();
        var AmaxY = allowedBounds.getNorthEast().lat();
        var AminX = allowedBounds.getSouthWest().lng();
        var AminY = allowedBounds.getSouthWest().lat();

        if (X < AminX) {X = AminX;}
        if (X > AmaxX) {X = AmaxX;}
        if (Y < AminY) {Y = AminY;}
        if (Y > AmaxY) {Y = AmaxY;}
        //alert ("Restricting "+Y+" "+X);
        map.setCenter(new GLatLng(Y,X));
 }
 
 function checkBoundsPoint(Y, X, allowedBounds) {

        var AmaxX = allowedBounds.getNorthEast().lng();
        var AmaxY = allowedBounds.getNorthEast().lat();
        var AminX = allowedBounds.getSouthWest().lng();
        var AminY = allowedBounds.getSouthWest().lat();

        if (X < AminX || X > AmaxX || Y < AminY || Y > AmaxY) return false;
        return true;
 }
 
 function setAllowedArea(){
 	// The allowed region which the whole map must be within
//      var C = map.getCenter(); 
//      var X = C.lng();
//      var Y = C.lat();
	  	var X = 23.329468;
	  	var Y = 42.698221;
      allowedBounds = new GLatLngBounds(new GLatLng((Y-0.15),(X-0.20481)), new GLatLng((Y+0.21),(X+0.23519)));
 }
 
 
 function setZoomLimit(min, max){
 	  // ====== Restricting the range of Zoom Levels =====
      // Get the list of map types      
      var mt = map.getMapTypes();
      // Overwrite the getMinimumResolution() and getMaximumResolution() methods
      for (var i=0; i<mt.length; i++) {
        mt[i].getMinimumResolution = function() {return min;}
        mt[i].getMaximumResolution = function() {return max;}
      }
 }
 
 function defineLimitForObjects(){
 	var zoom = map.getZoom()-11;
    
    var limit;
    switch(zoom){
    	case 0: limit = 30;
    			break;
    	case 1: limit = 40;
    			break;
    	case 2: limit = 50;
    			break;
    	case 3: limit = 60;
    			break;
    	case 4: limit = 70;
    			break;
    	case 5: limit = 80;
    			break;
    	default: limit = '';
    			break;
    }
    return limit;
 }
 
 function get_target(i) {
 		var f;
 		f = true;
 		if(pointArr.length > 0){
	 		for(v in pointArr){
				if(pointArr[v][0] == i){
					GEvent.trigger(pointArr[v][1], "click");
					setCenterToPoint(pointArr[v][1]);
					f = false;
				}
			}
 		}
 		if(foundObjects.length > 0){
 			if(typeof foundObjects[i] != "undefined"){
				GEvent.trigger(foundObjects[i], "click");
				setCenterToPoint(foundObjects[i]);
				f = false;
			}
 		}
		if(f){
			$("#load_js").load("/objects/objects_by_id/", {id: i}, function(){
				if(pointArr.length > 0){
	 				for(v in pointArr){
	 					if(pointArr[v][0] == i){
							GEvent.trigger(pointArr[v][1], "click");
							setCenterToPoint(pointArr[v][1]);
	 					}
	 				}
				}
			});
		}
      }
 
 function get_target_address(i){
		if(pointArrAddress.length > 0){
			
				if(typeof pointArrAddress[i] != "undefined"){
					GEvent.trigger(pointArrAddress[i], "click");
					setCenterToPoint(pointArrAddress[i]);
				}
			
		}
	}
 
function setCenterToPoint(marker, zoom){
	if(typeof zoom == "undefined") zoom = 15;
	map.setCenter(new GLatLng(marker.getPoint().lat()+0.0009, marker.getPoint().lng()), zoom);
}


function follow(point, movable, disableEscKey){
  var noMore = false;
  var letteredIcon = letterIcon("orange", '', 18, 31);//dobavi obekt
  var marker = new GMarker(point,{draggable:true, autoPan:false, icon: letteredIcon});
  if(typeof movable == "undefined") movable = true;
  if(typeof disableEscKey == "undefined") disableEscKey = false;
  if(typeof movable == "undefined") movable = true;
  var noMore = false;
  var myHTML_1 = "<div class='care_news'><p>Кликнете с мишката или провлачете маркера до желаното от вас място.</p>"
					+"<p>Ако сте вече там последвайте линка:<div align=\"center\"><a style=\"color: red;font-size: 14px;\" href=\"/objects/addobject/";
  var myHTML_3 = "\">ТУК</a></div></p>"
				+"</div>";

  	 // This function deletes the marker when dragged outside map
	 add_markerMove = GEvent.addListener(marker, 'drag', function(markerPoint){
	    if(!map.getBounds().containsLatLng(markerPoint)){
          $("#add_object_btn_off").click();
        }
      });
      
      var dragStart = GEvent.addListener(marker, "dragstart", function() {
	    map.closeInfoWindow();
	  });
	
	  
	  var dragEnd = GEvent.addListener(marker, "dragend", function() {
		GEvent.trigger(this, "click");
	  });
	  
	  
	  //for following user move
	  if(movable){
		var mouseMove = GEvent.addListener(map, 'mousemove', function(cursorPoint){
      		marker.setLatLng(cursorPoint);
		});
	  }
   
	  
	//for move marker to user click place
	mapClick = GEvent.addListener(map, 'click', function(overlay, latlng){
		 if(overlay) return;
		 map.closeInfoWindow();
		 marker.setLatLng(latlng);
	     GEvent.trigger(marker, "click");
		 if(typeof mouseMove != "undefined") GEvent.removeListener(mouseMove);
		 // GEvent.removeListener(mapClick);
	});
	
	//event for click over polygon
      if(polygonDistrArr.length > 0 || dis.length > 0){
      	if(!polygonDistrArr.length > 0) polygonDistrArr = dis;
      	for(p in polygonDistrArr){
      		polygonListenerArr[p] = GEvent.addListener(polygonDistrArr[p], "click", function(cursorPoint){
				 map.closeInfoWindow();
				 marker.setLatLng(cursorPoint);
			     GEvent.trigger(marker, "click");
				 if(typeof mouseMove != "undefined") GEvent.removeListener(mouseMove);
      		});
      	}
      }
  
  	//for info window
  	var geocoder = new GClientGeocoder();
    GEvent.addListener(marker,"click", function() {
    	
    		var lat = this.getPoint().lat();
    		var lng = this.getPoint().lng();
    		var mark = this;
    		
    		if(pointArrAddress.length > 0){
    			for(it in pointArrAddress){
    				if(pointArrAddress[it].getPoint().equals(this.getLatLng())){
    					var for_url_addr = addr[it];
    					break;
    				}
    			}
    		}
    		if(typeof for_url_addr == "undefined")
    		{
    			
	    		geocoder.getLocations(this.getLatLng(), function (result) 
				{
					var for_url_addr = "";
					
					if (result.Status.code == G_GEO_SUCCESS)
					{
						var for_url_addr = result.Placemark[0].address.substr(0, result.Placemark[0].address.length-17);
					}
					
					var myHTML_2 = lat+"/"+lng+"/"+for_url_addr;
	  				var myHTML = myHTML_1+myHTML_2+myHTML_3;
	        		mark.openInfoWindowHtml(myHTML);
	        		
				});
				
    		}else{
    			var myHTML_2 = lat+"/"+lng+"/"+for_url_addr;
	  			var myHTML = myHTML_1+myHTML_2+myHTML_3;
	        	this.openInfoWindowHtml(myHTML);
    		}
	});
	
	map.addOverlay(marker);
	if(movable == false) GEvent.trigger(marker, "click");
	
	//for escape key
	if(!disableEscKey)
	{
		GEvent.addDomListener(document, "keydown", function(e) {
			 if(e.keyCode == 27){
			 	if($("#add_object_btn_off").length > 0 && $("#li_cancel").length > 0)
			 	{
			 		GEvent.trigger(document.getElementById("add_object_btn_off"), "click");
			 		GEvent.trigger(document.getElementById("li_cancel"), "click");
			 	}
			 }
		});
	}
	
  new_point = marker;
  return marker;
}


function follow_get_link(point, movable, disableEscKey){
  var noMore = false;
  var letteredIcon = letterIcon("orange", '', 18, 31);//dobavi obekt
  var marker = new GMarker(point,{draggable:true, autoPan:false, icon: letteredIcon});
  if(typeof movable == "undefined") movable = true;
  if(typeof disableEscKey == "undefined") disableEscKey = false;
  if(typeof movable == "undefined") movable = true;
  var noMore = false;
  var myHTML_1 = "<div class='care_news'><p class=\"get_link\">За да вземете линк към точка от картата кликнете с мишката или провлачете маркера до желаното от вас място.</p>"
					+"<p class=\"get_link\">Ако сте вече там последвайте линка:<div class=\"get_link\" align=\"center\"><a style=\"color: red;font-size: 14px;\" href=\"javascript:;\" onclick=\"execute_js('/ajaxtabs/get_link/'";
  var myHTML_3 = ")\">ТУК</a></div></p>"
					+"<div id=\"load_link\" style=\"display:none;\">&nbsp;</div>"
				+"</div>";

  	 // This function deletes the marker when dragged outside map
	 add_markerMove = GEvent.addListener(marker, 'drag', function(markerPoint){
	    if(!map.getBounds().containsLatLng(markerPoint)){
          $("#li_cancel_get").click();
        }
      });
      
      var dragStart = GEvent.addListener(marker, "dragstart", function() {
	    map.closeInfoWindow();
	  });
	
	  
	  var dragEnd = GEvent.addListener(marker, "dragend", function() {
		GEvent.trigger(this, "click");
	  });
	  
	  
	  //for following user move
	  if(movable){
		var mouseMove = GEvent.addListener(map, 'mousemove', function(cursorPoint){
      		marker.setLatLng(cursorPoint);
		});
	  }
   
	  
	//for move marker to user click place
	mapClick = GEvent.addListener(map, 'click', function(overlay, latlng){
		 if(overlay) return;
		 map.closeInfoWindow();
		 marker.setLatLng(latlng);
	     GEvent.trigger(marker, "click");
		 if(typeof mouseMove != "undefined") GEvent.removeListener(mouseMove);
		 // GEvent.removeListener(mapClick);
	});
	
	//event for click over polygon
      if(polygonDistrArr.length > 0 || dis.length > 0){
      	if(!polygonDistrArr.length > 0) polygonDistrArr = dis;
      	for(p in polygonDistrArr){
      		polygonListenerArr[p] = GEvent.addListener(polygonDistrArr[p], "click", function(cursorPoint){
				 map.closeInfoWindow();
				 marker.setLatLng(cursorPoint);
			     GEvent.trigger(marker, "click");
				 if(typeof mouseMove != "undefined") GEvent.removeListener(mouseMove);
      		});
      	}
      }
  
  	//for info window
  	var geocoder = new GClientGeocoder();
    GEvent.addListener(marker,"click", function() {
    	
    		var lat = this.getPoint().lat();
    		var lng = this.getPoint().lng();
    		var mark = this;		
	    		geocoder.getLocations(this.getLatLng(), function (result) 
				{
					var for_url_addr = "";
					
					if (result.Status.code == G_GEO_SUCCESS)
					{
						var for_url_addr = result.Placemark[0].address.substr(0, result.Placemark[0].address.length-17);
					}
					
					var myHTML_2 = ",'lat="+lat+"&lng="+lng+"&address="+for_url_addr+"'";
	  				var myHTML = myHTML_1+myHTML_2+myHTML_3;
	        		mark.openInfoWindowHtml(myHTML);
	        		
				});
	});
	
	map.addOverlay(marker);
	if(movable == false) GEvent.trigger(marker, "click");
	
	//for escape key
	if(!disableEscKey)
	{
		GEvent.addDomListener(document, "keydown", function(e) {
			 if(e.keyCode == 27){
			 	if($("#li_cancel_get").length > 0)
			 	{
			 		GEvent.trigger(document.getElementById("li_cancel_get"), "click");
			 	}
			 }
		});
	}
	
  new_point = marker;
  return marker;
}

function remove_a_point(object_id){
	for(i in pointArr){
		if(pointArr[i][0] == object_id)
		{
			map.removeOverlay(pointArr[object_id]);
			//delete pointArr[object_id];
			ids_objects_arr.splice(pointArr[i][0]);
			pointArr.splice(i, 1);
			map.closeInfoWindow();
			break;
		}
	}
}

function showAddress(address_val) {
	if(address_val == '') return;
	var address='София, '+address_val;
	$("#result-wrapper-1").hide();
	//removePoints(3);
		
		
/*	var reasons = [ ] ;
	reasons[G_GEO_SUCCESS]            = "Success" ;
	reasons[G_GEO_MISSING_ADDRESS]    = "Missing Address: The address was either missing or had no value." ;
	reasons[G_GEO_UNKNOWN_ADDRESS]    = "Unknown Address:  No corresponding geographic location could be found for the specified address." ;
	reasons[G_GEO_UNAVAILABLE_ADDRESS]= "Unavailable Address:  The geocode for the given address cannot be returned due to legal or contractual reasons." ;
	reasons[G_GEO_BAD_KEY]            = "Bad Key: The API key is either invalid or does not match the domain for which it was given" ;
	reasons[G_GEO_TOO_MANY_QUERIES]   = "Too Many Queries: The daily geocoding quota for this site has been exceeded." ;
	reasons[G_GEO_SERVER_ERROR]       = "Server error: The geocoding request could not be successfully processed." ;
*/
		
	var geocoder = new GClientGeocoder();

	geocoder.getLocations(address, function (result) 
	{
			
		if (result.Status.code == G_GEO_SUCCESS)
		{
			
//			  addr= [];
//			  $("#result-1").html("");
			  var found_objects = 0;
		      for (var i=0; i<result.Placemark.length; i++) 
		      {
			      	if(result.Placemark[i].AddressDetails.Accuracy != 4 && result.Placemark[i].AddressDetails.Accuracy != 1)
			    	{
			     		var p = result.Placemark[i].Point.coordinates;
			     		
			     		if(checkBoundsPoint(p[1], p[0], allowedBounds))
			     		{
			     			var alrdy_overlayed = false;
			     			
			     			//define if marker has already added by our DB
			     			for(k in pointArrAddress)
			     			{
			     				if(pointArrAddress[k].getPoint().lat() == p[1] && pointArrAddress[k].getPoint().lng() == p[0]) alrdy_overlayed = true;
			     			}
			     			
			     			if(!alrdy_overlayed)
			     			{
			     				cnt_addresses++;
			     				createAddressMarker(p[1], p[0], cnt_addresses, result.Placemark[i].address, false, cnt_addresses);	
			     			}
			     			
			     			//define which polygon has the point
			     			dis_id = getDistrIdForPointInPolygon(p[1], p[0]);
			     			if(!(dis_id > 0)) dis_id = 0;
			     			//insert found location by google
			     			execute_js('/streets/add_street/'+p[1]+'/'+p[0], 'street_name='+result.Placemark[i].address.substr(0, result.Placemark[i].address.length-17)+'&dis_id='+dis_id+'&word='+address_val);
			     			var found_something = true;
			     			
			     		}
			       }
		      }
		      
		      //for add address
		      if(typeof moveAddMarkerToPoint != "undefined"){
			      if(pointArrAddress.length > 0)
				  {
					for(it in pointArrAddress){
						GEvent.trigger(pointArrAddress[it], "click");
						break;
					}
				  }
		      }
			  
			  
		      if(!print_mode){
		      
		    	  found_objects = defineZoomForResult();
		    		
		    	  createResultBox();
		      
		      }
		      
		      if(!found_objects && !found_something && !(pointArrAddress.length > 0))
		      {
		      	
		      	//for add address
		    	if(typeof moveAddMarkerToPoint != "undefined")
		    	{
		    		var new_obj = follow(map.getCenter(), false, true);
		    	}
		      	$(".res-label").hide();
		      	$("#result-1").append("<p class=\"result\">Съжаляваме, но няма намерени резултати в региона на София за &quot;"+address_val+"&quot;</p>");
		      	$("#result-wrapper-1").show();
		      }
		      
	    	 
	   	} 
	   	 else 
	   	{ //alert(foundObjects);
	    	  for(t in foundObjects)
	    	  {//check if an object is found
	    		if(foundObjects[t] != '') var found_objects = true;
	    	  }
	    	  
	    	  for(t in pointArrAddress)
	    	  {//check if an object is found
	    		if(pointArrAddress[t] != '') var found_objects = true;
	    	  }
	    	  
	    	  
	    	  if(!found_objects)
	    	  {
	    	  	$(".res-label").hide();
	    	  	$("#result-1").append("<p class=\"result\">Съжаляваме, но няма намерени резултати в региона на София за &quot;"+address_val+"&quot;</p>");
		      	$("#result-wrapper-1").show();
	    	  }
	    	  else setCenterAndZoom(max_lng, min_lng, max_lat, min_lat);
	    	  
	    	  
	    	  //for add address
	    	 if(typeof moveAddMarkerToPoint != "undefined")
	    	 {
	    	 	var new_obj = follow(map.getCenter(), false, true);
	    	 }
	    	 
	    	 
	    	 /* var reason="Code "+result.Status.code;
	    	  if (reasons[result.Status.code]) reason = reasons[result.Status.code];
	    	  */
	   	}
	});
}

function createResultBox(){
	if(is_shown_res_box) return;
	if(typeof foundObjects != "undefined"){
		it = 1;
		for(i in foundObjects){
			if(typeof resultHtml[i] == "string" && resultHtml[i] != ''){
				//if(resultHtml[i].length > 45) resultHtml[i] = resultHtml[i].substr(0,45)+"...";
				if(it == 1) $("#result-1").append("<p class=\"clear found_label\">Намерени обекти</p>");
				if(catId[i] > 0){
					$("#result-1").append('<p class="result"><span class="object_img"><img src="/i/mapsMarkers/'+catId[i]+'_Marker.gif" alt=""/></span><span class="marginLN num_with_name_img"><a class="result_object" href="javascript:get_target('+i+');">'+resultHtml[i]+'</a></span></p>');
				}else {
					$("#result-1").append('<p class="result"><span class="dash">-</span><span class="marginLN num_with_name"><a class="result_object" href="javascript:get_target('+i+');">'+resultHtml[i]+'</a></span></p>');
				}
				it++;//'+it+'. 
			}else if(typeof resultHtml[i] == "object" && resultHtml[i][0] != ''){
				addrFlag = true;
				var next = parseInt(i)+1;
				if(resultHtml[i][0].length > 45) resultHtml[i][0] = resultHtml[i][0].substr(0,45)+"...";
				$("#result-1").prepend('<p class="address_mark result"><span class="kvartal_img"><img src="/i/design/kvartal.png" alt=""/></span><span class="num_with_name"><a href="javascript:zoomToDistrict('+i+','+next+');">кв. '+resultHtml[i][0]+'</a></span></p>');
			}
		}
	}
	$("#result-wrapper-1").show();
	
	if(typeof page_all != "undefined" && typeof prev_page_all != "undefined"){
		$("#result-1").append('<p class="result center"><span class="marginLN num_with_name"><a class="result_object res_page" href="?page_all='+prev_page_all+'"><b>&laquo; предишни</b></a>&nbsp;&nbsp;&nbsp;&nbsp;<a class="result_object res_page" href="?page_all='+page_all+'"><b>следващи &raquo;</b></a></span></p>');	
	}else if(typeof page_all != "undefined"){
		$("#result-1").append('<p class="result"><span class="marginLN num_with_name"><a class="result_object res_page" href="?page_all='+page_all+'"><b>следващи &raquo;</b></a></span></p>');	
	}else if(typeof prev_page_all != "undefined"){
		$("#result-1").append('<p class="result"><span class="marginLN num_with_name"><a class="result_object res_page" href="?page_all='+prev_page_all+'"><b>&laquo; предишни</b></a></span></p>');	
	}
	
	
	if(typeof page_any != "undefined" && typeof prev_page_any != "undefined"){
		$("#result-1").append('<p class="result center"><span class="marginLN num_with_name"><a class="result_object res_page" href="?page_any='+prev_page_any+'"><b>&laquo; предишни</b></a>&nbsp;&nbsp;&nbsp;&nbsp;<a class="result_object res_page" href="?page_any='+page_any+'"><b>следващи &raquo;</b></a></span></p>');	
	}else if(typeof page_any != "undefined"){
		$("#result-1").append('<p class="result"><span class="marginLN num_with_name"><a class="result_object res_page" href="?page_any='+page_any+'"><b>следващи &raquo;</b></a></span></p>');	
	}else if(typeof prev_page_any != "undefined"){
		$("#result-1").append('<p class="result"><span class="marginLN num_with_name"><a class="result_object res_page" href="?page_any='+prev_page_any+'"><b>&laquo; предишни</b></a></span></p>');	
	}
	
	if(addrFlag) $("#result-1").prepend("<p class=\"found_label\">Намерени квартали и улици</p>");
	is_shown_res_box = true;
}

function defineZoomForResult(){
	if(print_mode) return false;
	var found_districts = 0;
	var found_objects = 0;
	
	for(t in foundObjects)
	{//check if an object is found
		if(foundObjects[t] != '') found_objects++;
		if(typeof resultHtml[t] == "object" && resultHtml[t][0] != '') found_districts++;
	}
		      
	found_objects -= found_districts;
	
	if(pointArrAddress.length == 1)
	{
		for(k in pointArrAddress) var zoom_to_marker = pointArrAddress[k];
	}
		      
	if(!found_objects && pointArrAddress.length == 1) setCenterToPoint(zoom_to_marker, 15); 
	else
	{ 
		setCenterAndZoom(max_lng, min_lng, max_lat, min_lat);
	}
	
	return found_objects;
}

function getDistrIdForPointInPolygon(lat, lng){
	
	//fill array
	if(polygonDistrArr.length == 0){
		polygonDistrArr = draw_polygon_districts(districts, districtsContent, "#227AC4", "#299DFF", false, true);
	}
	
	if(typeof polygonDistrArr != "undefined")
	{
		if(polygonDistrArr.length != 0)
		{
			for(d in polygonDistrArr)
			{
				if (polygonDistrArr[d].containsLatLng(new GLatLng(lat, lng)))
				{
					return districtsContent[d][0];
				}
			}
		}
	}
	return 0;
}
function letterIcon(prefix_file, letter, icon_size_x, icon_size_y, shadow_x, shadow_y, anchor_x, anchor_y, w_anchor_x, w_anchor_y){
	var baseIcon = new GIcon(G_DEFAULT_ICON);
//	if(typeof icon_size_x != "undefined" && typeof icon_size_y != "undefined" && typeof shadow_x != "undefined" && typeof shadow_y != "undefined" && typeof anchor_x != "undefined" && typeof anchor_y != "undefined" && typeof w_anchor_x != "undefined" && typeof w_anchor_y != "undefined"){
//		baseIcon.iconSize = new GSize(icon_size_x, icon_size_y);
//		baseIcon.shadowSize = new GSize(shadow_x, shadow_y);
//		baseIcon.iconAnchor = new GPoint(anchor_x, anchor_y);
//		baseIcon.infoWindowAnchor = new GPoint(w_anchor_x, w_anchor_y);
//	}
	
	var ext = ".png";
	
	if(prefix_file == 0 || prefix_file == ""){
		//global case
		icon_size_x = 9;
		icon_size_y = 9;
		prefix_file = "small";
		
	}else if(typeof prefix_file == "number" && prefix_file > 0){
		//from administration
		icon_size_x = 25;
		icon_size_y = 25;
		ext = ".gif";
		
	}else if(icon_size_x <= 0 || icon_size_y <= 0){
		//other cases
		icon_size_x = 18;
		icon_size_y = 18;
	}
	
	//if(typeof icon_size_x != "undefined" && typeof icon_size_y != "undefined"){
//		var img = new Image();
//		img.src = "/i/mapsMarkers/"+prefix_file+"_Marker" + letter + ext;
//		//alert(img.width+", "+img.height);
//		if(img.width != 0 && img.height != 0){
//			icon_size_x = img.width;
//			icon_size_y = img.height;//alert(img.width+", "+img.height);
//		}
//		else if(icon_size_x == 0 || icon_size_y == 0){
//			icon_size_x = 18;
//			icon_size_y = 31;
//		}
		baseIcon.iconSize = new GSize(icon_size_x, icon_size_y);
		baseIcon.iconAnchor = new GPoint(icon_size_x/2, icon_size_y);
		baseIcon.infoWindowAnchor = new GPoint(icon_size_x/2, icon_size_y/5);
		baseIcon.shadow = "";
	//}
	
	var letteredIcon = new GIcon(baseIcon, "/i/mapsMarkers/"+prefix_file+"_Marker" + letter + ext);
	return letteredIcon;
}

function setCenterAndZoom(max_lng, min_lng, max_lat, min_lat, by_dis){//PVM
	//grani4na 6irina width_lng 0.709304809570313
	//grani4na viso4ina height_lng 0.21144386923111
			if(pointArr.length > 0){//global variable
				for(i in pointArr){
					if((pointArr[i][1].getPoint().lng() < min_lng) || min_lng == 0) min_lng = pointArr[i][1].getPoint().lng();
	     			if((pointArr[i][1].getPoint().lng() > max_lng) || max_lng == 0) max_lng = pointArr[i][1].getPoint().lng();
	     			if((pointArr[i][1].getPoint().lat() < min_lat) || min_lat == 0) min_lat = pointArr[i][1].getPoint().lat();
	     			if((pointArr[i][1].getPoint().lat() > max_lat) || max_lat == 0) max_lat = pointArr[i][1].getPoint().lat();
				}
			}
			if(foundObjects.length > 0){//global variable
				for(i in foundObjects){
					if((foundObjects[i].getPoint().lng() < min_lng) || min_lng == 0) min_lng = foundObjects[i].getPoint().lng();
	     			if((foundObjects[i].getPoint().lng() > max_lng) || max_lng == 0) max_lng = foundObjects[i].getPoint().lng();
	     			if((foundObjects[i].getPoint().lat() < min_lat) || min_lat == 0) min_lat = foundObjects[i].getPoint().lat();
	     			if((foundObjects[i].getPoint().lat() > max_lat) || max_lat == 0) max_lat = foundObjects[i].getPoint().lat();
				}
			}
			if(max_lng != 0){
		    	av_lng = (max_lng + min_lng)/2;
		    	av_lat = (max_lat + min_lat)/2;
//		    	var width_lng = 0.709304809570313/2;
//		    	var height_lng = 0.20564386923111/2;
		    	var zoom = 11;
		    	var bounds = new GLatLngBounds(new GLatLng(min_lat-0.0005, min_lng-0.0005), new GLatLng(max_lat+0.0005, max_lng+0.0005)); // sw, ne
				zoom = map.getBoundsZoomLevel(bounds);
//		    	while((max_lng - min_lng) < (width_lng) && (max_lat - min_lat) < (height_lng)){
//		    		width_lng = width_lng/2;
//		    		height_lng = height_lng/2;
//		    		zoom++;
//		    	}
//				GEvent.removeListener(zoomListener);

				if((zoom-2) >= 11 && typeof by_dis == "undefined") zoom = zoom-2;//za da e malko po-otgore na namerenoto
		    	map.setCenter(new GLatLng(av_lat+0.0009, av_lng), zoom);
//		    	zoomListener = GEvent.addListener(map, "moveend", function() {
//		      		showObjectsInArea();
//		      	});
		      	//GEvent.trigger(map, "moveend"); //if i want to show all the objects
	    	}
}

function zoomToDistrict(southWestIt, northEastIt){
	if(southWestIt !== '' && northEastIt !== ''){
		//alert(foundObjects[northEastIt]);
		av_lat = (foundObjects[northEastIt].getPoint().lat() + foundObjects[southWestIt].getPoint().lat())/2;
		av_lng = (foundObjects[northEastIt].getPoint().lng() + foundObjects[southWestIt].getPoint().lng())/2;
		var zoom = 11;
		var bounds = new GLatLngBounds(foundObjects[southWestIt].getPoint(), foundObjects[northEastIt].getPoint()); // sw, ne
		zoom = map.getBoundsZoomLevel(bounds);
		map.setCenter(new GLatLng(av_lat+0.0009, av_lng), zoom);
	}
}

function showObjectsInArea(cat_id){
	
	var limit = defineLimitForObjects();
    
    
    if(typeof pointArr != "undefined"){
    	if(limit != '' && limit <= pointArr.length && map.getZoom() == minZoomLevel) return;
    }
    
    
//	if(type == 7){//for districts
//		var min_lng = dis[0].getBounds().getSouthWest().lng();
//	    var min_lat = dis[0].getBounds().getSouthWest().lat();
//	    var max_lng = dis[0].getBounds().getNorthEast().lng();
//	    var max_lat = dis[0].getBounds().getNorthEast().lat();
//	}else{
//		var min_lng = map.getBounds().getSouthWest().lng();
//	    var min_lat = map.getBounds().getSouthWest().lat();
//	    var max_lng = map.getBounds().getNorthEast().lng();
//	    var max_lat = map.getBounds().getNorthEast().lat();
//	}

	if(type != 7){
		var min_lng = map.getBounds().getSouthWest().lng();
	    var min_lat = map.getBounds().getSouthWest().lat();
	    var max_lng = map.getBounds().getNorthEast().lng();
	    var max_lat = map.getBounds().getNorthEast().lat();
	}
    
    //limit = '';
    if(typeof cat_id != "undefined" && cat_id != '' && type != 5 && type != 6 && type != 7){
    	execute_js('/objects/findObjects/3/', 'min_lng='+min_lng+'&min_lat='+min_lat+'&max_lng='+max_lng+'&max_lat='+max_lat+'&limit='+limit+'&entered_val='+cat_id);
    }else  if(type == 5){
    	execute_js('/objects/findObjects/5/', 'min_lng='+min_lng+'&min_lat='+min_lat+'&max_lng='+max_lng+'&max_lat='+max_lat+'&limit='+limit+'&user_id='+user_id);
    }else if(type == 6){
    	execute_js('/objects/findObjects/6/', 'min_lng='+min_lng+'&min_lat='+min_lat+'&max_lng='+max_lng+'&max_lat='+max_lat+'&limit='+limit+'&user_id='+user_id);
    }else if(type == 7 && typeof cat_id != "undefined" && cat_id != '' && distr_id > 0){//for districts in cat
    	execute_js('/objects/findObjects/7/', 'dist_id='+distr_id+'&cat_id='+categ_ids+'&limit='+limit);
    }else if(type == 7 && distr_id > 0){//for districts
    	execute_js('/objects/findObjects/7/', 'dist_id='+distr_id+'&limit='+limit); 	
    }else{
    	execute_js('/objects/findObjects/4', 'min_lng='+min_lng+'&min_lat='+min_lat+'&max_lng='+max_lng+'&max_lat='+max_lat+'&limit='+limit);
    }
}

function var_dump(obj) {
   if(typeof obj == "object") {
      return "Type: "+typeof(obj)+((obj.constructor) ? "\nConstructor: "+obj.constructor : "")+"\nValue: " + obj;
   } else {
      return "Type: "+typeof(obj)+"\nValue: "+obj;
   }
}//end function var_dump

function draw_polygon(){
	  var p = 0;
      polygonClickListener = GEvent.addListener(map, "click", function(overlay,latlng) {
      	if(typeof latlng != "undefined"){
	      	  var lat = latlng.lat();
		      var lon = latlng.lng();
		      arrayP[p] = latlng;    
		    if(arrayP.length > 1 && typeof arrayP[p-1] != "undefined"){
			     polylineArr[p] = new GPolyline([
				    new GLatLng(lat, lon),
				    new GLatLng(arrayP[p-1].lat(), arrayP[p-1].lng())
				], "#227AC4", 5);
				map.addOverlay(polylineArr[p]);
				polylineArr[p].enableEditing();
				GEvent.addListener(polylineArr[p], "click", function(marker) {
					if(this.getVertex(1).lat() == marker.lat() && this.getVertex(1).lng() == marker.lng()){
						arrayP[p] = marker;
						for(t in polylineArr){
						   map.removeOverlay(polylineArr[t]);
						}
				      	var latOffset = 0.01;
				      	var lonOffset = 0.01;
				       	polygon = new GPolygon(arrayP, "#227AC4", 5, 1, "#299DFF", 0.2);
					  	map.addOverlay(polygon);
					  	var polygons_point = "new GLatLng "+arrayP[p].toString()+", ";
					  	for(i in arrayP){
					  			polygons_point += "new GLatLng "+arrayP[i].toString()+", ";
					  	}
					  	var myHTML = "<div class=\"care_news\">"
										+"<p>Ако това е правилното очертание на квартала, който искате да добавите натиснете <a href =\"javascript:;\" onclick=\"execute_js('/ajaxtabs/get_array', 'arr="+polygons_point.substr(0,polygons_point.length-2)+"')\">"
					  					+"продължи</a></p>"
									+"</div>";
					  	map.openInfoWindowHtml(polygon.getBounds().getCenter() , myHTML);
						arrayP = [];
						polylineArr = [];
						GEvent.removeListener(polygonClickListener); 
					}
					
				});
		    }
		    p++;
      	}
	    });
}

function draw_polygon_districts(districts, districtsContent, color, innerColor, hideInfoWindow, for_def_point_in_distr){
	var a_polygon = [];
	for(i in districts){
		
		
		var k=0;
		var c_border_def = 0;
		var c_polygon_def = 0;
		var distP = new Array();
		var pointD = districts[i].split(", n");
		
		
		for(p in pointD){
			if(p != 0) pointD[p] = "n"+pointD[p];
			distP[k] = eval(pointD[p]);
			k++;
		}
		//a_polygon[i] = new GPolygon(distP, "#227AC4", 1, 1, "#299DFF", 0.2);
		
		//color defined by call or by DB
		if(typeof districtsContent[i] != "undefined")
		{
			if(typeof districtsContent[i][4] != "undefined" && districtsContent[i][4].length == 6) c_border_def = "#"+districtsContent[i][4];
			if(typeof districtsContent[i][5] != "undefined" && districtsContent[i][5].length == 6) c_polygon_def = "#"+districtsContent[i][5];
		}
		
		
		if(c_border_def != 0 && c_polygon_def != 0)
		{
			a_polygon[i] = new GPolygon(distP, c_border_def, 1, 1, c_polygon_def, 0.2);
		}
		else if(c_border_def != 0)
		{
			a_polygon[i] = new GPolygon(distP, c_border_def, 1, 1, innerColor, 0.2);
		}
		else if(c_polygon_def != 0)
		{
			a_polygon[i] = new GPolygon(distP, color, 1, 1, c_polygon_def, 0.2);	
		}
		else
		{
			a_polygon[i] = new GPolygon(distP, color, 1, 1, innerColor, 0.2);
		}
		//alert(distP);
		//end color defined by call or by DB
		if(typeof for_def_point_in_distr == "undefined") map.addOverlay(a_polygon[i]);
//		GEvent.addListener(a_polygon[i], "mouseover", function(){
//			this.setFillStyle({color:'#FF0000'});
//			this.setStrokeStyle({color:'#FF0000'});
//		});
//		GEvent.addListener(a_polygon[i], "mouseout", function(){
//			this.setFillStyle({color:'#227AC4'});
//			this.setStrokeStyle({color:'#227AC4'});
//		});
		if(typeof hideInfoWindow == "undefined" && typeof for_def_point_in_distr == "undefined"){
			var myHTML = [];
			var htm_1 = "<div class=\"care_news\">"
							+"<p><a href=\""+districtsContent[i][1].toLowerCase()+"-district"+districtsContent[i][0]+".html\">"+districtsContent[i][1]+"</a></p>"
							+'<a href="'+districtsContent[i][1].toLowerCase()+"-district"+districtsContent[i][0]+'.html">';
			var dir = parseInt(districtsContent[i][0]/1000);
			if(districtsContent[i][3] != ''){
				var htm_2 = '<img src="/f/districts/'+dir+'/th_'+districtsContent[i][3]+'.jpg" alt="Квартал '+districtsContent[i][1]+'" width="86" height="65" /></a>\n';
			}else{
				var htm_2 = '<img src="/i/no_photo_th.gif" border="0" alt="Квартал '+districtsContent[i][1]+'" width="86" height="65" /></a>\n';
			}
			var htm_3 = "<p>"+districtsContent[i][2].substr(0,350)+"...</p>"
						+"<p><a class=\"floatR\" href=\""+districtsContent[i][1].toLowerCase()+"-district"+districtsContent[i][0]+".html\">виж повече</a></p>"
						+"</div>";;
			myHTML[i] = htm_1+htm_2+htm_3;
			addInfoWindowToPolygon(a_polygon[i], myHTML[i]);
		}
	}
	return a_polygon;
}

function addInfoWindowToPolygon(a_polygon, myHTML){
		GEvent.addListener(a_polygon, "click", function(){
			map.openInfoWindowHtml(this.getBounds().getCenter() , myHTML);
		});
}

function ShowDistrictsControl() {}
ShowDistrictsControl.prototype = new GControl();
ShowDistrictsControl.prototype.initialize = function(map) {
  var container = document.createElement("div");
  var hide = true;
 
  var add_object_on = document.createElement("div");
  this.setButtonStyle_(add_object_on, 1);
  container.appendChild(add_object_on);
  add_object_on.appendChild(document.createTextNode("Добави обект"));
  add_object_on.setAttribute("title", "Добавяне на обект към картата чрез влачене на маркер до желаното място") ;
  add_object_on.setAttribute("id", "add_object_btn_on") ;
  GEvent.addDomListener(add_object_on, "click", function() {
  		var point = map.getBounds().getNorthEast();
  		$("#add_object_btn_on").hide();
  		$("#add_object_btn_off").show();
  		if($('#li_cancel_get').is(":visible")) GEvent.trigger(document.getElementById("li_cancel_get"), "click");
  		
  		if($("#li_add").is(":visible")){
			remove_add_marker();
			var new_obj = follow(point);
			GEvent.trigger(document.getElementById("li_add"), "click");
  		}
  });
  
  var add_object_off = document.createElement("div");
  this.setButtonStyle_(add_object_off, 0);
  container.appendChild(add_object_off);
  add_object_off.appendChild(document.createTextNode("Откажи"));
  add_object_off.setAttribute("title", "Спри добавянето на обект");
  add_object_off.setAttribute("id", "add_object_btn_off") ;
  GEvent.addDomListener(add_object_off, "click", function() {
  		//GEvent.trigger(map, "click");
  		this.style.display="none";
   		$("#add_object_btn_on").show();
   		if($("#li_cancel").is(":visible")){
  			remove_add_marker();
  			GEvent.trigger(document.getElementById("li_cancel"), "click");
  		}
  });
  
  
  
  var get_link_on = document.createElement("div");
  this.setButtonStyle_(get_link_on, 1);
  container.appendChild(get_link_on);
  get_link_on.appendChild(document.createTextNode("Вземи линк"));
  get_link_on.setAttribute("title", "Взимане на линк към посочена от вас точка на картата.") ;
  get_link_on.setAttribute("id", "get_link_on") ;
  GEvent.addDomListener(get_link_on, "click", function() {
  		var point = map.getBounds().getNorthEast();
  		$("#get_link_on").hide();
  		$("#get_link_off").show();
  		if($('#li_cancel').is(":visible")) GEvent.trigger(document.getElementById("li_cancel"), "click");
  		
  		
  		if($("#li_add_link").is(":visible")){
			remove_add_marker();
			var new_obj = follow_get_link(point);
			GEvent.trigger(document.getElementById("li_add_link"), "click");
  		}
  });
  
  var get_link_off = document.createElement("div");
  this.setButtonStyle_(get_link_off, 0);
  container.appendChild(get_link_off);
  get_link_off.appendChild(document.createTextNode("Откажи"));
  get_link_off.setAttribute("title", "Спри взимането на линк към точка от картата.");
  get_link_off.setAttribute("id", "get_link_off") ;
  GEvent.addDomListener(get_link_off, "click", function() {
  		
  		this.style.display="none";
   		$("#get_link_on").show();
   		if($("#li_cancel_get").is(":visible")){
  			remove_add_marker();
  			GEvent.trigger(document.getElementById("li_cancel_get"), "click");
  		}
  		
  });
  
  
  
 if(!print_mode){
  	
  var printModeOn = document.createElement("div");
  this.setButtonStyle_(printModeOn, 1);
  container.appendChild(printModeOn);
  printModeOn.appendChild(document.createTextNode("Принтирай"));
  printModeOn.setAttribute("title", "Принтирай текущото положение на картата.") ;
  printModeOn.setAttribute("id", "printModeOn") ;
  GEvent.addDomListener(printModeOn, "click", function() {
  		var zoomLevel = map.getZoom();
  		var centerLocation = map.getCenter();
   		popUp('/main/print_mode/'+centerLocation.lat()+'/'+centerLocation.lng()+'/'+zoomLevel+'/'+from_search, 650, 700);
  });
  
 }
  
 if( type != 7){
  var showDistrictsDiv = document.createElement("div");
  this.setButtonStyle_(showDistrictsDiv, 1);
  container.appendChild(showDistrictsDiv);
  showDistrictsDiv.appendChild(document.createTextNode("Квартали"));
  showDistrictsDiv.setAttribute("title", "Покажи очертанията на кварталите") ;
  showDistrictsDiv.setAttribute("id", "show_d") ;
  GEvent.addDomListener(showDistrictsDiv, "click", function() {
   		if(hide){
   			if(polygonDistrArr.length == 0) polygonDistrArr = draw_polygon_districts(districts, districtsContent, "#227AC4", "#299DFF");
   			else
   			{
   				for(d in polygonDistrArr){
   					map.addOverlay(polygonDistrArr[d]);
   				}
   			}
  			hide = false;
  			$("#show_d").hide();
  			$("#hide_d").show();
   		}
  });
  
  var hideDistrictsDiv = document.createElement("div");
  this.setButtonStyle_(hideDistrictsDiv, 0);
  container.appendChild(hideDistrictsDiv);
  hideDistrictsDiv.appendChild(document.createTextNode("Квартали"));
  hideDistrictsDiv.setAttribute("title", "Скрий очертанията на кварталите") ;
  hideDistrictsDiv.setAttribute("id", "hide_d") ;
  GEvent.addDomListener(hideDistrictsDiv, "click", function() {
   		if(polygonDistrArr.length != 0){
   			for(t in polygonDistrArr){
   				map.removeOverlay(polygonDistrArr[t]);
   			}
   			hide = true;
   			this.style.display="none";
   			$("#show_d").show();
   		}
  });
}

  map.getContainer().appendChild(container);
  return container;
}

// By default, the control will appear in the top left corner of the
// map with 7 pixels of padding.
ShowDistrictsControl.prototype.getDefaultPosition = function() {
  return new GControlPosition(G_ANCHOR_BOTTOM_RIGHT, new GSize(7, 7));
}

// Sets the proper CSS for the given button element.
ShowDistrictsControl.prototype.setButtonStyle_ = function(button, is_on) {
	if(is_on){
		button.style.border		= "2px outset #BBB" ;
	}else{
		button.style.display="none";
//  		/button.style.fontWeight="bold";
  		button.style.border = "3px outset #BBB";
	}
	button.style.padding = "3px";
	button.style.height		= "15px";
	button.style.width		= "80px";
	button.style.color		= "#000" ;
	button.style.font		= "small Arial" ;
	button.style.textAlign	= "center" ;
	button.style.cursor		= "pointer" ;
	button.style.overflow	= "hidden" ;
	button.style.background = "#FFF no-repeat left center" ;
	
	if(button.addEventListener)
		button.style.cssFloat	= "left" ;
	else
		button.style.styleFloat = "left" ;
}


function district_details(district, color, innerColor){
	if(color != '' && innerColor != '')
	{
		dis = draw_polygon_districts(district, '', "#"+color, "#"+innerColor, 1);
	}
	else if(color != '')
	{
		dis = draw_polygon_districts(district, '', "#"+color, "299DFF", 1);
	}
	else if(innerColor != '')
	{
		dis = draw_polygon_districts(district, '', "#227AC4", "#"+innerColor, 1);
	}
	else
	{
		dis = draw_polygon_districts(district, '', "#227AC4", "#299DFF", 1);
	}
	
	
	if(typeof dis != "undefined"){
		if(dis.length > 0){
			for(i in dis){
				
				//map.setCenter(dis[i].getBounds().getCenter());
				var n_east = new GMarker(dis[i].getBounds().getNorthEast());
				var s_west = new GMarker(dis[i].getBounds().getSouthWest());
				allowedBounds = dis[i].getBounds();
				setCenterAndZoom(dis[i].getBounds().getNorthEast().lng(), dis[i].getBounds().getSouthWest().lng(), dis[i].getBounds().getNorthEast().lat(), dis[i].getBounds().getSouthWest().lat(), true);
				minZoomLevel = map.getZoom();
				setZoomLimit(minZoomLevel, 17);
				
			}
		}
	}
}

function add_marker(lat, lng){
	var point = new GLatLng(lat, lng);
	remove_add_marker();
	var new_obj = follow(point, false);
	if($('#add_object_btn_on').length > 0 && $('#li_add').length > 0){
		$("#li_add").hide();
		GEvent.trigger(document.getElementById("add_object_btn_on"), "click");
		$("#add_object_btn_on").hide();
		GEvent.trigger(document.getElementById("li_add"), "click");
	}
}

function get_link_marker(lat, lng){
	var point = new GLatLng(lat, lng);
	remove_add_marker();
	var new_obj = follow_get_link(point, false);
	if($('#get_link_on').length > 0 && $('#li_add_link').length > 0){
		$("#li_add_link").hide();
		GEvent.trigger(document.getElementById("get_link_on"), "click");
		$("#get_link_on").hide();
		GEvent.trigger(document.getElementById("li_add_link"), "click");
	}
}

function get_objects_near_by_me(lat, lng){
	if(typeof lat != "undefined" && typeof lng != "undefined"){
		
		$("#load_js").load("/objects/objects_near_by_me/", {lat:lat, lng:lng}, function(){
			map.closeInfoWindow();
			map.setCenter(new GLatLng(lat, lng), 16);
		});
	
	}
	
}


function remove_add_marker(){
	if(new_point){
		map.closeInfoWindow();
  		map.removeOverlay(new_point);
  		if(typeof add_markerMove != "undefined") GEvent.removeListener(add_markerMove);
  		if(typeof mapClick != "undefined") GEvent.removeListener(mapClick);
  		if(typeof polygonListenerArr != "undefined"){
  			if(polygonListenerArr.length > 0){
  				for(i in polygonListenerArr){
  					GEvent.removeListener(polygonListenerArr[i]);
  				}
  			}
  		}
  		delete new_point;
  	}
}

// Create polygon method for collision detection
GPolygon.prototype.containsLatLng = function(latLng) {
    // Do simple calculation so we don't do more CPU-intensive calcs for obvious misses
    var bounds = this.getBounds();
   
    if(!bounds.containsLatLng(latLng)) {
        return false;
    }
   
    var numPoints = this.getVertexCount();
    var inPoly = false;
    var i;
    var j = numPoints-1;
   
    for(var i=0; i < numPoints; i++) {
        var vertex1 = this.getVertex(i);
        var vertex2 = this.getVertex(j);
       
        if (vertex1.lng() < latLng.lng() && vertex2.lng() >= latLng.lng() || vertex2.lng() < latLng.lng() && vertex1.lng() >= latLng.lng())  {
            if (vertex1.lat() + (latLng.lng() - vertex1.lng()) / (vertex2.lng() - vertex1.lng()) * (vertex2.lat() - vertex1.lat()) < latLng.lat()) {
                inPoly = !inPoly;
            }
        }
       
        j = i;
    }
   
    return inPoly;
};



	function hideObjectsOnMap(){
		removePoints(1);
		
		if(typeof zoomListener != "undefined") GEvent.removeListener(zoomListener);
		if(typeof zoomEndListener != "undefined") GEvent.removeListener(zoomEndListener);
		
	}
	
	function showObjectsOnMap(){
		zoomListener = GEvent.addListener(map, "dragend", function() {
	      	//var iw = map.getInfoWindow();
  			//if (iw.isHidden() && !stopTrigger) {
  			
  				showObjectsInArea();	
  			//}
  			//stopTrigger = false;
	      });
	      
	      zoomEndListener = GEvent.addListener(map, "zoomend", function(oldLevel, newLevel) {
	      	
	      	if(newLevel < oldLevel)
	      	{
		      	var limit = defineLimitForObjects();
		      	if(limit == '') return;
		      	
		      	if(pointArr.length > limit){
	      		
		      		var numPopElements = pointArr.length - limit;
		      		var p = 0;
		      		//alert(pointArr.length + '   '+numPopElements+'  '+limit);
		      		//alert(pointArr);
		      		
		      		for(var i= 0; i < pointArr.length; i++){//
		      			if(typeof pointArr[i][1] != "undefined"){//alert(p);
		      				if(p == numPopElements) break;
							map.removeOverlay(pointArr[i][1]);
							p++;
		      			}
		      			pointArr.splice(i, 1);
		      			i--;
					}
					ids_objects_arr = [];
					//alert(pointArr.length + '   '+numPopElements+'  '+limit);
	      			//GEvent.removeListener(zoomListener);
	      		}else{
	      			var iw = map.getInfoWindow();
		  			if (iw.isHidden() && !stopTrigger) {
		  				showObjectsInArea();
		  			}
	      		}
	      	}else{
	      		var iw = map.getInfoWindow();
	  			if (iw.isHidden() && !stopTrigger) {
	  				showObjectsInArea();
	  			}
	      	}
	      	stopTrigger = false;
	      	
	      });
	      
	      GEvent.trigger(map, "dragend");
	}