function initialize_map(map, langtitude, longtitude, cat_id, zoom) {
	
	//create loader
	mapLoading = document.createElement('div');
	mapLoading.setAttribute('id', 'mapLoading');
	mapDiv.appendChild(mapLoading);
	centerBox("mapLoading", "google_map");
	//end create loader
	
	
	//panoramio and wikipedia layer
		photoLayer = new GLayer("com.panoramio.all");
		wikiLayer = new GLayer("org.wikipedia.bg");
		youtubeLayer = new GLayer("com.youtube.all");
		var overlayDiv = document.createElement('div');
		overlayDiv.setAttribute('id', 'overlayControl');
		mapDiv.appendChild(overlayDiv);
		overlayDiv.style.position = "absolute";
		var overlayHTML = "";
		overlayHTML = overlayHTML + '<a id="wikiLayer" onclick="toggleOverlay(' + "'off', wikiLayer, 'wikiLayer'" + ')" style="cursor:pointer; display: block"></a>';
		overlayHTML = overlayHTML + '<a id="photoLayer" onclick="toggleOverlay(' + "'off', photoLayer, 'photoLayer'" + ')" style="cursor:pointer; display: block"></a>';
		overlayHTML = overlayHTML + '<a id="youtubeLayer" onclick="toggleOverlay(' + "'off', youtubeLayer, 'youtubeLayer'" + ')" style="cursor:pointer; display: block"></a>';
		overlayDiv.innerHTML = overlayHTML;
	//end panoramio and wikipedia layer
	
	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(LatKarta, LngKarta), minZoomLevel);
    
    map.addControl(new ShowDistrictsControl());
    
    //set logo
    map.addControl(new SetLogo());
    
     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();
		  $("#holderLogo").css("visibility", "visible");
		  GEvent.addListener(theMap, "mouseover", function(){
		    theMap.showControls();
		    if(map.getZoom() > 12){
		    	$("#overlayControl").show();
		    }else{
		    	$("#overlayControl").hide();
		    }
		  });
		  GEvent.addListener(theMap, "mouseout", function(){
		    theMap.hideControls();
		    $("#overlayControl").hide();
		    $("#holderLogo").css("visibility", "visible");
		  });
		}
		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 && !is_obj_details){
	      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 > 12){
		    		$("#overlayControl").show();
				}else{
					if($("#overlayControl").is(":visible")){
						$("#overlayControl").hide();
						
						if($("#wikiLayer").hasClass("on")){
							//resetOverlayControl(wikiLayer, "wikiLayer");
							$("#wikiLayer").click();
						}
						if($("#photoLayer").hasClass("on")){
							//resetOverlayControl(photoLayer, "photoLayer");
							$("#photoLayer").click();
						}
						if($("#youtubeLayer").hasClass("on")){
							//resetOverlayControl(photoLayer, "youtubeLayer");
							$("#youtubeLayer").click();
						}
					}
				}
	      	
	      	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[0] = [];
					//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;
	      	
	      });
      }
}

function centerBox(child, parent) {
	  var h = document.getElementById(child).offsetHeight;
	  var a = Math.round(parseInt(document.getElementById(parent).offsetHeight) / 2);
	  var b = Math.round(h / 2);
	  var c = (a - b) + "px";
	  document.getElementById(child).style.top = c;
	  var w = $("#"+child).width();
	  var x = Math.round(parseInt(document.getElementById(parent).offsetWidth) / 2);//alert(w);
	  var y = Math.round(w / 2);
	  var z = x - y;
	  document.getElementById(child).style.left = z + "px";
}

// 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, by_cat, type) {
  	//for distr details
  	//if(typeof by_dis_det != "undefined") execute_js('/districts/set_district/'+by_dis_det+"/"+id_object);
	  
	if(type == 1){
		//address
	}else{
		//marker
		type = 0;
	}
  	if(id_object != undefined && id_object != '' && by_search != 1 && typeof pointArr != "undefined" && typeof ids_objects_arr[type] != "undefined"){
  		if(typeof ids_objects_arr[type][id_object] == "object") return;
  	}
  	
  	
  	if((ids_objects_arr[type][id_object] == undefined || ids_objects_arr[type][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 != ''){
    	  if(by_search == 1){
    		  GEvent.addListener(marker,"click", function() {
  		        this.openInfoWindowHtml(myHtml);
  		        stopTrigger = true;
  		        setCenterToPoint(this);
  		        objects_near_by_found(this.getPoint().lat(), this.getPoint().lng());
  		      });
    	  }else{
		      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[type][id_object] = id_object;
      	if(typeof by_cat != "undefined" && by_cat >= 0){
      		if(typeof pointArrByCat[by_cat] == "undefined") pointArrByCat[by_cat] = [];
      		pointArrByCat[by_cat].push(new Array(id_object, marker));
      	}
//      	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, is_block){
	  	
	  	if(typeof is_block != "undefined" && is_block == true){
			var letteredIcon = letterIcon("darkblueSmall", '', 18, 18);
			var resultClass = "num_over_img_block";
		}else{
			var letteredIcon = letterIcon("darkgreenSmall", '', 18, 18);
			var resultClass = "num_over_img";
		}
	  	
	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-offsetCity);
	if(addr[i].length > 45) addr[i] = addr[i].substr(0, 45)+"...";
	$("#addr-result").append('<p class="address_mark result"><span class="'+resultClass+'">'+(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();
	
	
	//for response address by point
	address = addr[i];
	GEvent.addListener(marker, "click", function() {
		var found_point = this.getLatLng();
		if(typeof moveAddMarkerToPoint != "undefined")
		{
			add_marker(found_point.lat(), found_point.lng());
		}
		else
		{
			this.openInfoWindowHtml('<div class="care_news"><p class="address_label">'+address+'</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/'+i+'\', 650, 700);">принтирай</a></p>'
					+'<p><a id="address_actions_'+i+'" href="javascript:;" title="Покажи ми пътя до..." onclick="showDirectionByLatLng('+i+', '+found_point.lat()+', '+found_point.lng()+', \'address_\');">Покажи ми пътя до...</a></p>'
					+'<span id="to_addr_span_address_'+i+'"></span>'
					+'</div>');
			//get_objects_near_by_me(found_point.lat(), found_point.lng(), true);
			setCenterToPoint(this);
			
			objects_near_by_found(found_point.lat(), found_point.lng());
			
			
		}
	});
	
	pointArrAddress[i] = marker;
	
	map.addOverlay(marker);
	$("#addr-result").show();
	return marker;
	
  }
  
  function createStationMarker(langtitude, longtitude, myHtml, id_station, draggable, icon) {
		if(typeof id_station != "undefined"){
			if(typeof assocArrStation[id_station] != "undefined"){
				if(assocArrStation[id_station] > 0) return;
			}
		}
		
		
		var point = new GLatLng(langtitude, longtitude);
		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(typeof myHtml != "undefined"){
		 	GEvent.addListener(marker,"click", function() {
			 	if(myHtml == ""){
			 		  setCenterToPoint(this);
					  objects_near_by_found(this.getPoint().lat(), this.getPoint().lng());
			 		  centerBox("mapLoading", "google_map");
			 		  m = this;
			 		  $("#mapLoading").show();
					  $.ajax({
					      type: 'post',
					      url: "/transport/get_station_box",
					      data: {id_station : id_station},
					      cache: false,
					      success: function(html){
					    	$("#mapLoading").hide();
						  	m.openInfoWindowHtml(html);
					      }
					   });
			 	}else this.openInfoWindowHtml(myHtml);
			}); 
		}
		map.addOverlay(marker);
		pointArrStation.push(new Array(id_station, marker));
		assocArrStation[id_station] = id_station;
	   	
	   	return marker;
	  }
  
  function objects_near_by_found(lat, lng){
	  if($("#poiBox").is(":hidden")){
			$("#google_map").addClass("map_holder_small");
			$("#google_map").css("width", "70%");
			$("#poiBox").show();
			map.checkResize();
		}
		
		if(selectedLat != lat && selectedLng != lng){
			selectedLat = lat;
			selectedLng = lng;
			$(".visibleLayer").each(function(i){
				 cat_id = $(this).find("a").attr("id").substr(4);
				 removePoints(4, cat_id);
				 show_near_points(lat, lng, cat_id);
			});
		}
  }
  
  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 = LngKarta;
	  	var Y = LatKarta;
      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 = 5;
    			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]);
					$.scrollTo('body');
					f = false;
				}
			}
 		}
 		if(foundObjects.length > 0){
 			if(typeof foundObjects[i] != "undefined"){
				GEvent.trigger(foundObjects[i], "click");
				//setCenterToPoint(foundObjects[i]);
				$.scrollTo('body');
				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]);
							$.scrollTo('body');
	 					}
	 				}
				}
			});
		}
      }
 
 function get_target_address(i){
	if(pointArrAddress.length > 0){
			
		if(typeof pointArrAddress[i] != "undefined"){
			GEvent.trigger(pointArrAddress[i], "click");
		}
			
	}
 }
 
 function get_target_station(id){
	 if(pointArrStation.length > 0){
		 for(i in pointArrStation){
			 if(id == pointArrStation[i][0]){
				 GEvent.trigger(pointArrStation[i][1], "click");
				 break;
			 }
		 }
	 }
 }
 
 function get_target_address_by_coords(lat, lng, address){
		if(pointArrAddress.length > 0){
			for(v in pointArrAddress){
				if(pointArrAddress[v].getPoint().lat() == lat && pointArrAddress[v].getPoint().lng() == lng){
					GEvent.trigger(pointArrAddress[v], "click");
					setCenterToPoint(pointArrAddress[v]);
					$.scrollTo('body');
					return;
				}
			}
		}
		
			var letteredIcon = letterIcon("darkgreenSmall", '', 18, 18);
			
			var marker = new LabeledMarker(new GLatLng(lat, lng),{icon:letteredIcon, labelClass: 'marker'});
			
			
			
			//for response address by point
			GEvent.addListener(marker, "click", function() {
				var found_point = this.getLatLng();
			        	
			            	this.openInfoWindowHtml('<div class="care_news"><p class="address_label">'+address+'</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>'
			            											+'</div>');
			            	//+'<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>'
			            	get_objects_near_by_me(found_point.lat(), found_point.lng(), true);    
			});
			
			pointArrAddress.push(marker);
			
			map.addOverlay(marker);
			setCenterToPoint(marker);
			GEvent.trigger(marker, "click");
			$.scrollTo('body');
			
	}
 
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-offsetCity);
					}
					
					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-offsetCity);
					}
					
					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[0].splice(pointArr[i][0]);
			pointArr.splice(i, 1);
			map.closeInfoWindow();
			break;
		}
	}
}

function showAddress(address_val) {
	if(address_val == '') return;
	var address = C_NAME+', '+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-offsetCity)+'&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\">Съжаляваме, но няма намерени резултати в региона на "+C_NAME+" за &quot;"+address_val+"&quot;</p>");
		      	$("#result-wrapper-1").show();
		      }
		      
		      if(more_addresses_down == 1) $("#addr-result").append('<p class="result" align="right"><span class="marginLN num_with_name"><a class="result_object res_page" href="#more_results"><b>още резултати за адреси &raquo;</b></a></span></p>');
	    	 
	   	} 
	   	 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\">Съжаляваме, но няма намерени резултати в региона на "+C_NAME+" за &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)
		{
			var prevVip = null;
			var cVip = null;
			var lessVip = null;
			var vipIcon = "<img style='margin: 6px 0px 0px 5px;' src='/i/ico-vip.png' alt='vip' />";
			
			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)
				{
					if(catId[i] <= 61) ext = ".gif"; else ext = "_s.png";
					
					if (typeof isVip[i] != "undefined" && isVip[i] == 1)
					{
						vips = $(".vip-object");
						vips.each(function(index){ 
							cVipDays = parseInt($(this).attr("id").replace("days-left-", ""));
							
//							if (prevVip == null)
//							{
//								prevVip = $(this);
//							}
							
							if (parseInt(daysVip[i]) > cVipDays)
							{
								prevVip = $(this);
							}
							else
							{
								lessVip = $(this);
							}
						});
						
						if (prevVip == null)
						{
							if (lessVip == null)
								$('<p class="result vip-object" id="days-left-' + daysVip[i] + '"><span class="object_img"><img src="/i/mapsMarkers/'+catId[i]+'_Marker'+ext+'" alt=""/></span><span class="marginLN num_with_name_img"><a class="result_object" href="javascript:get_target('+i+');">'+resultHtml[i]+ vipIcon + '</a></span></p>').insertAfter("#result-1 .found_label");
							else
								$('<p class="result vip-object" id="days-left-' + daysVip[i] + '"><span class="object_img"><img src="/i/mapsMarkers/'+catId[i]+'_Marker'+ext+'" alt=""/></span><span class="marginLN num_with_name_img"><a class="result_object" href="javascript:get_target('+i+');">'+resultHtml[i]+ vipIcon + '</a></span></p>').insertAfter(lessVip);
						}
						else
							$('<p class="result vip-object" id="days-left-' + daysVip[i] + '"><span class="object_img"><img src="/i/mapsMarkers/'+catId[i]+'_Marker'+ext+'" alt=""/></span><span class="marginLN num_with_name_img"><a class="result_object" href="javascript:get_target('+i+');">'+resultHtml[i]+ vipIcon + '</a></span></p>').insertBefore(prevVip);
					}
					else
						$("#result-1").append('<p class="result"><span class="object_img"><img src="/i/mapsMarkers/'+catId[i]+'_Marker'+ext+'" alt=""/></span><span class="marginLN num_with_name_img"><a class="result_object" href="javascript:get_target('+i+');">'+resultHtml[i]+'</a></span></p>');
					
				}
				else
				{
					if (typeof isVip[i] != "undefined" && isVip[i] == 1)
					{
//						vips = $(".vip-object");
						vips = $(".vip-object");
						vips.each(function(index){ 
							cVipDays = parseInt($(this).attr("id").replace("days-left-", ""));
							
//							if (prevVip == null)
//							{
//								prevVip = $(this);
//							}
							
							if (parseInt(daysVip[i]) > cVipDays)
							{
								prevVip = $(this);
							}
							else
							{
								lessVip = $(this);
							}
						});
						
						if (prevVip == null)
						{
							if (lessVip == null)
							{
								$('<p class="result vip-object" id="days-left-' + daysVip[i] + '"><span class="dash">-</span><span class="marginLN num_with_name"><a class="result_object" href="javascript:get_target('+i+');">'+resultHtml[i]+ vipIcon + '</a></span></p>').insertAfter("#result-1 .found_label");
							}
							else
								$('<p class="result vip-object" id="days-left-' + daysVip[i] + '"><span class="dash">-</span><span class="marginLN num_with_name"><a class="result_object" href="javascript:get_target('+i+');">'+resultHtml[i]+ vipIcon + '</a></span></p>').insertAfter(lessVip);
						}
						else
							$('<p class="result vip-object" id="days-left-' + daysVip[i] + '"><span class="dash">-</span><span class="marginLN num_with_name"><a class="result_object" href="javascript:get_target('+i+');">'+resultHtml[i]+ vipIcon + '</a></span></p>').insertBefore(prevVip);
					}
					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(more_objects_down == 1) $("#result-1").append('<p class="result" align="right"><span class="marginLN num_with_name"><a class="result_object res_page" href="#more_results"><b>още резултати за обекти &raquo;</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 && prefix_file <= 61){
		//from administration
		icon_size_x = 25;
		icon_size_y = 25;
		ext = ".gif";
		
	}else if(typeof prefix_file == "number" && prefix_file > 0 && prefix_file > 61){
		//from administration
		if(prefix_file == 100){
			//Detailen pregled na obekt!!!
			icon_size_x = 50;
			icon_size_y = 50;
		}else{
			icon_size_x = 32;
			icon_size_y = 37;
		}
		ext = ".png";
		
	}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 = "http://www.kartabg.com/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);
		if(prefix_file != 100){
			baseIcon.iconAnchor = new GPoint(icon_size_x/2, icon_size_y);
			baseIcon.shadow = "";
		}else{
			baseIcon.iconAnchor = new GPoint(13, 48);
			baseIcon.shadowSize = new GSize(50, 50);
			baseIcon.shadow = "http://www.kartabg.com/i/mapsMarkers/100_Marker_shadow.png";
		}
		baseIcon.infoWindowAnchor = new GPoint(icon_size_x/2, icon_size_y/5);
	//}
	
	var letteredIcon = new GIcon(baseIcon, "http://www.kartabg.com/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 = '';
	$("#mapLoading").show();
	var success = '$("#mapLoading").hide();';
    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, success);
    }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, success);
    }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, success);
    }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, success);
    }else if(type == 7 && distr_id > 0){//for districts
    	execute_js('/objects/findObjects/7/', 'dist_id='+distr_id+'&limit='+limit, success); 	
    }else{
    	execute_js('/objects/findObjects/4', 'min_lng='+min_lng+'&min_lat='+min_lat+'&max_lng='+max_lng+'&max_lat='+max_lat+'&limit='+limit, success);
    }
}

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;
				      	//alert(3);
				       	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, isClickable){
	var a_polygon = [];
	if(typeof isClickable == "undefined") isClickable = false;
	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, {clickable:isClickable});
		}
		else if(c_border_def != 0)
		{
			a_polygon[i] = new GPolygon(distP, c_border_def, 1, 1, innerColor, 0.2, {clickable:isClickable});
		}
		else if(c_polygon_def != 0)
		{
			a_polygon[i] = new GPolygon(distP, color, 1, 1, c_polygon_def, 0.2, {clickable:isClickable});	
		}
		else
		{
			a_polygon[i] = new GPolygon(distP, color, 1, 1, innerColor, 0.2, {clickable:isClickable});
		}
		//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");
  if(!is_small){
	  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(!print_mode){
	  var banner_bottom = "<iframe id='a29bc891' name='a29bc891' src='http://pagead.topobiavi.com/www/delivery/afr.php?zoneid=66&amp;cb=INSERT_RANDOM_NUMBER_HERE' frameborder='0' scrolling='no' width='728' height='90'><a href='http://pagead.topobiavi.com/www/delivery/ck.php?n=a6d12b1d&amp;cb=INSERT_RANDOM_NUMBER_HERE' target='_blank'><img src='http://pagead.topobiavi.com/www/delivery/avw.php?zoneid=66&amp;cb=INSERT_RANDOM_NUMBER_HERE&amp;n=a6d12b1d' border='0' alt='' /></a></iframe>";
	  var fsModeOn = document.createElement("div");
	  this.setButtonStyle_(fsModeOn, 1);
	  container.appendChild(fsModeOn);
	  fsModeOn.appendChild(document.createTextNode("Цял екран"));
	  fsModeOn.setAttribute("title", banner_bottom) ;
	  fsModeOn.setAttribute("id", "fsModeOn");
	  fsModeOn.setAttribute("href", "#fscreen");
  }
  
  
  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 SetLogo(){}

SetLogo.prototype = new GControl({printable: true, selectable: false});
SetLogo.prototype.initialize = function(map) {
  var container = document.createElement("div");
  var holderLogo = document.createElement("div");
  container.setAttribute("id", "holderLogo") ;
  this.setButtonStyle_(holderLogo);
  container.appendChild(holderLogo);
  map.getContainer().appendChild(container);
  return container;
}

SetLogo.prototype.getDefaultPosition = function() {
	return new GControlPosition(G_ANCHOR_BOTTOM_LEFT, new GSize(0, 30));
}

	// Sets the proper CSS for the given button element.
SetLogo.prototype.setButtonStyle_ = function(logo) {
	logo.style.width = "68px";
	logo.style.height = "49px";
	logo.style.cursor = "pointer";
	if(typeof webPath == "undefined") webPath = "/";
	logo.onclick = function(){window.open(webPath)}
	logo.style.background = "url('../i/design/map_logo.png')";
}


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 setCetnterToPoint(center){
	map.setCenter(center);
	map.setZoom(14);
	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, is_result_call, fi, cat_id, dx, dy, retry){//dx dy sa s prioritet ako sa podadeni, ako ne FI
	if(lat == '' || lng == ''){
		if(typeof selectedLat != "undefined" && typeof selectedLng != "undefined"){
			lat = selectedLat;
			lng = selectedLng;
			retry = false;
		}
	}
	
	if(typeof lat != "undefined" && typeof lng != "undefined" && lat != '' && lng != ''){
		if(typeof is_result_call == "undefined") is_result_call = false;
		if(cat_id >= 0) $("#mapLoading").show();
		
		if(cat_id == 0){
			load_location = "/streets/addresses_near_by_me/";
		}else{
			load_location = "/objects/objects_near_by_me/";
		}
		
		$("#load_js").load(load_location, {lat:lat, lng:lng, is_result_call:is_result_call, fi:fi, cat_id:cat_id, dx:dx, dy:dy}, function(response){
			
			if(response == "" && retry == true){
				show_near_points(lat, lng, cat_id);
			}
			
			if(!is_result_call){
				map.closeInfoWindow();
				map.setCenter(new GLatLng(lat, lng), 16);
			}
			if(cat_id >= 0) $("#mapLoading").hide();
		});
	
	}
	
}


function toggle_group(id, lat, lng, cat_id){
	if($("#"+id).hasClass("visibleLayer")){
		//remove points
		removePoints(4, cat_id);
		$("#"+id).removeClass("visibleLayer");
	}else{
		//get and show points, and set zoomEnd listener
		
		show_near_points(lat, lng, cat_id, true);
		
		$("#"+id).addClass("visibleLayer");
		
		if(typeof zoomEndListener == "undefined"){
			 zoomEndListener = GEvent.addListener(map, "zoomend", function(oldLevel, newLevel) {
				 if(oldLevel > newLevel || typeof oldLevel == "undefined"){
					 $(".visibleLayer").each(function(i){
						 cat_id = $(this).find("a").attr("id").substr(4);
						 show_near_points(lat, lng, cat_id);
					 });
				 }
			 });
		}
		
	}
}

function show_near_points(lat, lng, cat_id, retry){
	var fi, dx, dy;
	
	if(retry != true){
		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();
	
		dx = (max_lat - min_lat)/2;
		dy = (max_lng - min_lng)/2;
	}else{
		fi = 0.005;
	}
	
	get_objects_near_by_me(lat, lng, true, fi, cat_id, dx, dy, retry);
}

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[0] = [];
					//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");
	}
	
	
	function resetOverlayControl(control, id) {
		  var LayerControl = document.getElementById(id);
		  LayerControl.removeAttribute("onclick");
		  LayerControl.onclick = function(){toggleOverlay("off", control, id);}
		  LayerControl.style.backgroundColor = "#fff";
		  control.hide();
	}

	function toggleOverlay(layerState, layer, control) {
		  var toggleControl = document.getElementById(control);
		  if (layerState == "off") {
		    if (layer.isHidden() == true) {
		      layer.show();
		    } else {
		      map.addOverlay(layer);
		    }
		    toggleControl.style.backgroundColor = "#299DFF";
		    $("#"+control).removeClass("off").addClass("on");
		    toggleControl.removeAttribute("onclick");
		    toggleControl.onclick = function(){toggleOverlay("on", layer, control);}
		    isGlayerActive = true;
		    if($('#show_d').is(':hidden')){//tova e za da promeni clickable-a na polygonite. trqbva da sa false za da moje da se otvarq
		    	$("#hide_d").click();
		    	$('#show_d').click();
		    }
		  }
		  if (layerState == "on") {
		    layer.hide();
		    toggleControl.style.backgroundColor = "#fff";
		    $("#"+control).removeClass("on").addClass("off");
		    toggleControl.removeAttribute("onclick");
		    toggleControl.onclick = function(){toggleOverlay("off", layer, control);}
		    isGlayerActive = false;
		    if($('#show_d').is(':hidden')){
		    	$("#hide_d").click();
		    	$('#show_d').click();
		    }
		  }
	}
	
	
	//SHOW DIRECTION TO
	function showDirectionByLatLng(id, lat, lng, prefix){
		if(typeof prefix == "undefined") prefix = "";
		var from;
		if($("#to_addr_form_"+prefix+id).length == 0){
			var geocoder = new GClientGeocoder();
			geocoder.getLocations(new GLatLng(lat, lng), function (result) 
			{	
				if($("#to_addr_form_"+prefix+id).length == 0){
					from = "";
					if (result.Status.code == G_GEO_SUCCESS)
					{
						$("#to_addr_span_"+prefix+id).next().hide();
						from = result.Placemark[0].address.substr(0, result.Placemark[0].address.length);
						var html = 		"<form method=\"post\" action=\"\" id=\"to_addr_form_"+prefix+id+"\">"
											+"<label for=\"to_addres\">Въведете адрес:</label>"
											+"<input type=\"text\" class=\"input-text\" name=\"to_address\" id=\"to_address_"+prefix+id+"\"/>"
											+"<input type=\"image\" class=\"input-submit\" src=\"/i/design/submit.png\"/>"
										+"</form>";
						$(html).appendTo("#to_addr_span_"+prefix+id);
						
						$("#to_addr_form_"+prefix+id).submit(function(e){
							e.preventDefault();
							if($('#to_address_'+prefix+id).val() != ''){
								showDirectionTo(from, $('#to_address_'+prefix+id).val());
							}else{ 
								alert('Въведете адрес, до който искате да видите пътя! Пример: ул. Солунска 5');
							}return false;
						});
						
						
					}else{
						alert("Съжаляваме, но от тази точка не е възможно да се показва път!");
					}
				}
			        		
			});
		}else{
				$("#to_addr_form_"+prefix+id).toggle();
				$("#to_addr_span_"+prefix+id).next().toggle();
		}
	}
	
	function showDirectionTo(from_addr, to_addr){
		
		  var ddFrame = document.createElement('div');
		  ddFrame.setAttribute('id', 'ddFrame');
		  mapDiv.appendChild(ddFrame);
		  centerBox("ddFrame", "google_map");
		  ddBoxDiv = document.createElement('div');
		  ddBoxDiv.setAttribute('id', 'ddBox');
		  ddFrame.appendChild(ddBoxDiv);
		  ddBoxDiv.style.position = "absolute";
		  var ddBoxClose = document.createElement('a');
		  ddBoxClose.setAttribute('id', 'ddBoxClose');
		  ddFrame.appendChild(ddBoxClose);
		  ddBoxClose.style.position = "absolute";
		  ddBoxClose.style.zIndex = "10";
		  ddBoxClose.style.top = "0px";
		  ddBoxClose.style.left = (ddFrame.offsetWidth - ddBoxClose.offsetWidth - 4) + "px";
		  ddBoxClose.onclick = function(){mapDiv.removeChild(document.getElementById("ddFrame"));}
		  
		to_addr += ", "+C_NAME;
		if(typeof directions != "undefined") directions.clear();
		directions = new GDirections(map, ddBoxDiv);
		
		GEvent.addListener(directions, 'error',
                function ()
                {
						if(directions.getStatus().code != G_GEO_SUCCESS){
						  var bul_txt = "";
					      if(!(to_addr.substr(0, 4) == "ул. " || to_addr.substr(0, 5) == "бул. ")) bul_txt = "\nБъдете по-конкретни като добавите отпред ул. или бул.";
						  var ddError = "<h4>Съжалявам, но не е възможно да бъде показан пътя до въведения от вас адрес или не се намира в района на "+C_NAME+"!"+bul_txt+"</h4><a onclick=\"$('#ddBoxClose\').click();\" style='text-decoration: underline; cursor: pointer; color: blue'>затвори</a>";
						  var ddErrorDiv = document.createElement('div');
						  ddErrorDiv.setAttribute('id', 'ddError');
						  ddBoxDiv.appendChild(ddErrorDiv);
						  ddErrorDiv.innerHTML = ddError;
						  ddErrorDiv.style.width = "90%";
						  ddErrorDiv.style.marginLeft = "5%";
						  ddErrorDiv.style.marginRight = "5%";
						}
                }
        );
		
		GEvent.addListener(directions, 'load',
                function ()
                {
					map.closeInfoWindow();
                }
		);
		
		directions.load("from: "+from_addr+" to: "+to_addr);
	}
	
	
	function initialize_map_basic(map, langtitude, longtitude) {
		map.setCenter(new GLatLng(langtitude, longtitude), 15);
		map.enableScrollWheelZoom();
		map.enableContinuousZoom();
		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);
		
		// 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 7;}
	      mt[i].getMaximumResolution = function() {return 17;}
	    }
	}
	
	function createMarkerBasic(map, langtitude, longtitude, draggable){
		var letteredIcon = letterIcon(100, '', 18, 33);
	  	var marker = new GMarker(new GLatLng(langtitude, longtitude), {icon: letteredIcon, draggable:draggable, autoPan:false});
	  	map.addOverlay(marker);
	  	return marker;
	}
	
