﻿
var Map = null;
var LoadResultsMapListings = function(){};
var ListingMrkrs = new Array();
var ListingBounds = new GLatLngBounds();

var CrosshairControl;
var isFirstLoad = true;
var isLoading = true;

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//  Code runs when page first loads
//  Place transition logic here
//  FROM ..  TO Map View
//  FROM ..  TO Gallery View
//  FROM ..  TO List View
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
var MapOptions = {
	zoom: 8
	,scrollwheel: false
	//,center: new GLatLng(0, 0)
	,mapTypeId: google.maps.MapTypeId.ROADMAP
	,navigationControl: true
	,navigationControlOptions: 
	{
		style: google.maps.NavigationControlStyle.DEFAULT
		//ANDROID, DEFAULT, SMALL, ZOOM_PAN (biggest)
	}
	,mapTypeControl: true
	,mapTypeControlOptions: 
	{
		style: google.maps.MapTypeControlStyle.DROPDOWN_MENU
		//DEFAULT, DROPDOWN_MENU, HORIZONTAL_BAR
	}
	,scaleControl: true
};

$(function()
{
    var SearchType = GetSearchType(CacheObject.SEOQuery);
    var ViewType = GetViewType(CacheObject.SEOQuery);

    if (GetViewType(CacheObject.SEOQuery) == "gallery") return;

	/*v.2 Map = new GMap2($("#result-map")[0]); */
	/*v.3*/Map = new GMap3($("#result-map")[0], MapOptions);

	/*v.2 
    if (ViewType == "map")
    {
        Map.addControl(new GLargeMapControl3D());
        CrosshairControl = new K_CrossControl(17, 1, "black", Static + "/Reno/Mapping/img/crosshairs.large.png")
    }
    else if (document.location.href.toLowerCase().indexOf("/advanced") > -1)
    {
        Map.addControl(new GLargeMapControl3D());
        CrosshairControl = new K_CrossControl(6, 1, "black", Static + "/Reno/Mapping/img/crosshairs.small.png");
    }
    else
    {
        Map.addControl(new GSmallZoomControl3D());
        CrosshairControl = new K_CrossControl(6, 1, "black", Static + "/Reno/Mapping/img/crosshairs.small.png");
    }
	*/
	
	
    if (Map == null) return;
    /* v.2 Map.clearOverlays(); */
    /* v.3 */ // Map_clearMarkers(false); // Maanged by MarkerManager
   

	if (SearchType != "map") // for map search, we get the initial bounds from the listings
    {
		if (CacheObject.DefaultMapBounds != null)
		{
			ListingBounds = CacheObject.DefaultMapBounds;
			/* v.2
			Map.setCenter(ListingBounds.getCenter());
			Map.setZoom(Map.getBoundsZoomLevel(ListingBounds));
			*/
			/* v.3 */ Map.fitBounds(ListingBounds); // this fires a zoom event
		}
		else
		{
			 Map.setCenter(new GLatLng(0, 0), 0);
		}
    }
    
    if (ViewType == "map")
    {
        LoadMapViewData();
    }
    else
    {
        PostLoadMap();
    }

});


function DoRequeryOnMapBounds(googleEvent)
{
	if (!isFirstLoad)
	{
		var Time = 0;
		if (googleEvent == "zoom_changed")
		{
			Time = 100;
		}
		
		window.setTimeout(function()
		{
			//	alert("requery");
		   /* v.2 Map.clearOverlays(); */
		   /* v.3 */ // Map_clearMarkers(false); // Maanged by MarkerManager
		   /* v.2 Map.removeControl(CrosshairControl); */
			var rgx_alt = /(.+?)(\/[\(\)\-a-z0-9\.]+?\-(?:loc|map|center))(.*)/i;
			var rgx_location = /^\/([^\/]+?)\/([^\/]+?)\/(.*)$/i;
			var Bounds = Map.getBounds();
			if (Bounds != null)
			{
				var MapQuery = String.format("/{0}-{1}-{2}-{3}-map",
						(Math.round(Bounds.getNorthEast().lat() * 1000000) / 1000000),
						(Math.round(Bounds.getNorthEast().lng() * 1000000) / 1000000),
						(Math.round(Bounds.getSouthWest().lat() * 1000000) / 1000000),
						(Math.round(Bounds.getSouthWest().lng() * 1000000) / 1000000));
				var NewSEOQuery = CacheObject.SEOQuery.replace(rgx_alt, "$1$3/") + MapQuery;
				//var rgx = /^(.+?)(\/[^\/]+?-search)\/?(.*)$/i; // strip search
				//    NewSEOQuery = NewSEOQuery.replace(rgx, "$1$3");

				NewSEOQuery = NewSEOQuery.replace(/(.+?)(\/[0-9]+\-pg)(.*)/gi, "$1$3"); // strip pagination
				ReloadListByMap(NormalizeSEOQuery(NewSEOQuery));
			}
		},Time);
	}
}
        
var SelectedLocations = new Array();

//$.getScript("/Reno/SearchAdvanced/js/RegionNotationObject.js");

function LoadMapRegionsForLocation(trigger)
{

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	//	refresh all locations on zoom
	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	if (trigger=="zoom_changed")
	{
		Map_clearMarkers(MarkerCollection);
		MarkerCollection = new Array();
	}
	
	//alert(trigger);
	//return;
	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	//	Draw locations on map for selection
	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	JSONUrl = String.Format("/reno/mapping/GetMapRegionsData.aspx?SEOQuery={0}&NorthEast={1}&SouthWest={2}&Zoom={3}",
	escape(CacheObject.SEOQuery),
	//Map.getBounds().getNorthEast().toString().replace(/[\(\)]+/g,''),
	//Map.getBounds().getSouthWest().toString().replace(/[\(\)]+/g,''),
	Map.getBounds() ? Map.getBounds().getNorthEast().toString().replace(/[\(\)]+/g,'') : "",
	Map.getBounds() ? Map.getBounds().getSouthWest().toString().replace(/[\(\)]+/g,'') : "",

	Map.getZoom());

	//window.location.href = JSONUrl;
	//return;
	
	$.ajax({
		type: "POST",
		contentType: "application/json; charset=utf-8",
		url: JSONUrl,
		data: MarkerCollection.keys().join(","), // send all ids for regions already on map
		dataType: "json",
		error: function(XMLHttpRequest, textStatus, errorThrown)
		{
			$.log("Json Error Message: error(" + errorThrown + ") \"" + textStatus + "\""); 
		},
		success: function(response) 
		{
			//````````````````````````````````````````````````````````````````
			//	Loop through the data, adding region markers to the map
			//	Each group represents a type of marker
			//	Markers will have a flag for Selected
			//````````````````````````````````````````````````````````````````                                         
			if (response.group && response.group.length>0)
			{
				
				//````````````````````````````````````````````````````````````````
				//	Define Selected Locations Array
				//```````````````````````````````````````````````````````````````` 
				CacheObject.SelectedLocations = new Array();
				$("input[name='selected-location']:checked").each(function()
				{
					CacheObject.SelectedLocations.push($(this).attr("id"));
				});
				
				
				for(var x=0;x<response.group.length;x++)
				{
					var GroupType = response.group[x].name;
					for(var p=0;p<response.group[x].option.length;p++)
					{
						var Opt = response.group[x].option[p];
						if (MarkerCollection.keys().indexOf(Opt.valuegid) == -1) // only add if it's not already there
						{
							var Marker = GetRegionLocationMarker(Opt.value, Opt.count, Opt.valuegid, Opt.valuelatlng.split(',')[0], Opt.valuelatlng.split(',')[1], GroupType);
							Marker.setMap(Map);
						}
					}
				}
			}
			else
			{
				//alert("no locations");
			}
		}
	});
}

var XSLDocListings = null;
var XSLDocLocations = null;
var JavaScriptXSLDoc = null;
function ReloadListByMap(SEOQuery)
{
	if (isLoading == true) 
	{
		return;
	}
	isLoading = true;
	
//    if (SEOQuery.toLowerCase().indexOf("/map-view") > -1)
//    {
//        window.location.href=SEOQuery;
//    }
        SEOQuery = NormalizeSEOQuery(SEOQuery);
    var ViewType = GetViewType(SEOQuery);
    var SearchType = GetSearchType(SEOQuery);
    
    if (SEOQuery=="#" || SEOQuery=="") 
    {
		return;
	}
    
    //$('#result-list-wrap').fadeTo(0, 0.33, function()
    //{
			/* v.2 Map.clearOverlays(); */
			/* v.3 */ // Map_clearMarkers(false); // Maanged by MarkerManager
			if (!document.all)
			{
				$('#result-map').fadeTo(0, 0.66);
			}
            LoadingList('off', function() //add "loading" dialog
            {
                var XMLPath = NormalizeSEOQuery(SEOQuery, "/xml-out");
                var XSLPathListings = '/reno/listings/salesrentals/xsl/result_listinglist_' + ViewType + 'view.xslt';
                var XSLPathLocations = '/reno/listings/salesrentals/xsl/result_locations.xslt';
                var JavaScriptXSLPath = '/reno/listings/salesrentals/xsl/result_javascript.xslt';
                
                var Params = 
                { 
                    params: {                     // object for your own xsl parameters
                        LabelNewDaysLEQ: '7',
                        ListingsPerPage: '250', //TODO: Get this from a variable in JS
                        StaticServer: Static,
                        ViewType: ViewType,
                        SearchType: SearchType
                    },
                    eval: false, /* javascript is already added to the dom with this method goodness */ 
                    callback: function()
                    {
                       // $('#result-list-wrap').fadeTo(0, 1.0, function()
                       // {
                            //$('#result-map').fadeTo(0, 1.0);
                            //LoadingList('off'); /*remove "loading" dialog*/
                            //RoundCorners(); /*re-round corners with jQuery*/
                            SetupPagination(); /*set up pagination key event*/    
                            //SetIconToolTips(); /*Icon Tool  Tips */                       
                        //});
                    }
                }; 
                var ParamsLocations = 
                { 
                    params: {                     // object for your own xsl parameters
                        LabelNewDaysLEQ: '7',
                        ListingsPerPage: '250', //TODO: Get this from a variable in JS
                        StaticServer: Static,
                        ViewType: ViewType,
                        SearchType: SearchType
                    },
                    eval: false, /* javascript is already added to the dom with this method goodness */ 
                    callback: function()
                    {
                        SetUpLocationSuggest(); // RE-SET UP AFTER TRANSFORM
                    }
                }; 
				var XMLDoc = $.xsl.load(XMLPath);
				
				if (XSLDocListings == null)
				{
					XSLDocListings = $.xsl.load(XSLPathListings);
				}
				if (XSLDocLocations == null)
				{
					XSLDocLocations = $.xsl.load(XSLPathLocations);
				}
				if (JavaScriptXSLDoc == null)
				{
					JavaScriptXSLDoc = $.xsl.load(JavaScriptXSLPath);
				}
                $('#result-list-wrap').getTransform(XSLDocListings, XMLDoc, Params);
                $('#search_by_location_wrapper').getTransform(XSLDocLocations, XMLDoc, ParamsLocations);
                $('#JavaScriptWrap').getTransform(JavaScriptXSLDoc, XMLDoc, Params); // loads and executes javascript
                 
                var NewQuery = NormalizeSEOQuery(SEOQuery.replace("xml-out", ""));
                window.location.href = "#" + NewQuery;
                CacheObject.SEOQuery = NewQuery;
                
                if (Map == null) return;
                /* v.2 Map.clearOverlays(); */
				/* v.3 */ // Map_clearMarkers(false); // managed by MarkerManager
                //Map.setCenter(new GLatLng(0,0),0);
                //    ListingBounds = CacheObject.DefaultMapBounds;
                //Map.setCenter(ListingBounds.getCenter());
                //Map.setZoom(Map.getBoundsZoomLevel(ListingBounds));
//				if (distanceWidget != null)
//				{
//					alert('here');
//					distanceWidget.Remove();
//				}

	            if (ViewType == "map")
	            {
					if (OverlaysOnMapCollection.length > 0)
					{
						for(var x=0;x<OverlaysOnMapCollection.length;x++)
						{
							OverlaysOnMapCollection[x].setMap(null);
						}
						OverlaysOnMapCollection = new Array();
					}
	                LoadMapViewData();
	            }
	            else if (ViewType == "location")
	            {
                    PostLoadMap();
                }
            }); 
            
    //});
    
}


function PostLoadMap() 
{
	
    try
    {
        if (Map == null) return;
    }
    catch (ex)
    {
        return; // for IE
    }
    
    
    var SearchType = GetSearchType(CacheObject.SEOQuery);
    var ViewType = GetViewType(CacheObject.SEOQuery);
    
    var ListingBounds = null;
    
    /* v.2 Map.clearOverlays(); */
    /* v.3 */ // Map_clearMarkers(false); // managed by MarkerManager
	
	
    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    //  Display conditions
    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    //  Radius
    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    if (SearchType == "radius")
    {
        var RadiusMiles = GetSearchRadius(CacheObject.SEOQuery);
        //alert("here1");
        var GLatLngCenter;
			if (isCustomRadius(CacheObject.SEOQuery))
			{
				GLatLngCenter = GetCustomRadiusCenter(CacheObject.SEOQuery);
			}
			else
			{
				GLatLngCenter = CacheObject.DefaultMapBounds.getCenter();
			}
			
            ListingBounds = DrawRadius(Map, GLatLngCenter, RadiusMiles); // draws circle and returns bounds
            //alert("here2");
            PlotMarkersGetBounds();
            //alert("here3");
            

        if (isFirstLoad)
        {
			/* v.2
            Map.setCenter(ListingBounds.getCenter());
            //alert("here4");
            Map.setZoom(Map.getBoundsZoomLevel(ListingBounds));
            //alert("here5");
            */
            /* v.3 */ Map.fitBounds(ListingBounds);
            DrawRadiusSearchHelperControl(Map);
        }
        else
        {
			var NewBounds = new GLatLngBounds(Map.getBounds().getSouthWest(), Map.getBounds().getNorthEast());
				NewBounds = NewBounds.union(ListingBounds);
				//alert(NewBounds + "\n\n" + Map.getBounds());
			if (!NewBounds.equals(Map.getBounds()))
			{
				Map.fitBounds(ListingBounds);
			}
        }
        
    }
    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    //  Map
    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    else if (SearchType == "map")
    {
        //ListingBounds = GetGLatLngBoundsFromSEOQuery(CacheObject.SEOQuery);
        PlotMarkersGetBounds();
        if (isFirstLoad)
        {
			if (MarkersOnMapCollection.length > 0)
			{
				ListingBounds = new GLatLngBounds();
				for (var x=0;x<MarkersOnMapCollection.length;x++)
				{
					ListingBounds.extend(MarkersOnMapCollection[x].getPosition());
				}
			}
			else
			{
				ListingBounds = GetGLatLngBoundsFromSEOQuery(CacheObject.SEOQuery);
			}
			Map.fitBounds(ListingBounds);
			
			//alert(ListingBounds);
			/* v.2
            Map.setCenter(ListingBounds.getCenter());
            Map.setZoom(Map.getBoundsZoomLevel(ListingBounds));
            */
            /* v.3 */ 
            //Map.fitBounds(ListingBounds); // this is done with the default map bounds
        }       
    }
    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    //  Other
    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    else
    {
		
        ListingBounds = PlotMarkersGetBounds();
        
        if (CacheObject.TopLevelSupported == "international")
        {
            
            if (ListingBounds == null)
            {
                Map.setCenter(new GLatLng(33, -33));
                if (ViewType == "map")
                {
                    Map.setZoom(2);
                }
                else
                {
                    Map.setZoom(1);
                }
            }
            else
            {
                if (CacheObject.doReloadMap)
                {
					Map.fitBounds(ListingBounds);
				}
				else
				{
					CacheObject.doReloadMap = true; // reset
				}
            }
        }
        else
        {
            if (ListingBounds == null)
            {
                ListingBounds = CacheObject.DefaultMapBounds;
            }
            
            if (CacheObject.doReloadMap)
            {
				Map.fitBounds(ListingBounds);
			}
			else
			{
				CacheObject.doReloadMap = true; // reset
			}
        }


    }
    
    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    //	At this point we have a drawn map and all markers in the
    //	MarkersOnMapCollection
    //	Invoke MarkerManager and draw markers
    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    if (isFirstLoad && SearchType == "location")
	{
		window.setTimeout(function()
		{
			LoadMapRegionsForLocation("isFirstLoad");
		},1000);
	}
		
	
	if (SearchType == "map")
	{
		if (isFirstLoad)
		{
			GEvent.addListener(Map, "idle", function() // idle is fired after a pan or zoom ends
			{
				LoadMarkerManager(function()
				{
					GEvent.addListener(Map, "bounds_changed", function()
					{
						if (GInfoWindow == "justClosed") // close event called panTo, which called this event
						{
							GInfoWindow == null;
						}
						else if (GInfoWindow == null) // if GInfoWindow is not open
						{
							if (RequeryTimer != null)
							{
								window.clearTimeout(RequeryTimer);
							}
							RequeryTimer = window.setTimeout(function()
							{
								DoRequeryOnMapBounds("bounds_changed");
								RequeryTimer = null;
							},500);
						}
					});
					
					GEvent.clearListeners(Map, "idle");
				});
			});
		}
		else
		{
			LoadMarkerManager();
		}
	}
	else
	{
		if (isFirstLoad)
		{
			GEvent.addListener(Map, "idle", function() // idle is fired after a pan or zoom ends
			{
				if (SearchType == "location")
				{
					GEvent.addListener(Map, "dragend", function()
					{
						LoadMapRegionsForLocation("dragend");
					});
					GEvent.addListener(Map, "zoom_changed", function()
					{
						LoadMapRegionsForLocation("zoom_changed");
					});
				}
				GEvent.clearListeners(Map, "idle");
			});
		}
		
		LoadMarkerManager();
	}
		
    isFirstLoad = false;
    isLoading = false;
    if (!document.all)
    {
		$('#result-map').fadeTo(0, 1.0);
	}
}

function GetIsLoadingStatus()
{
	return isLoading;
}

var MMgr = null;
var RequeryTimer = null;

function LoadMarkerManager(callback)
{
	Map_clearMarkers(MarkersOnMapCollection_Last);
	MarkersOnMapCollection_Last = new Array();		// clear array
	
	if (MarkersOnMapCollection.length > 0)			// add new batch
	{
		for(var x=0;x<MarkersOnMapCollection.length;x++)
		{
			MarkersOnMapCollection[x].setMap(Map);
			MarkersOnMapCollection_Last.push(MarkersOnMapCollection[x]);
		}
		
		MarkersOnMapCollection = new Array();
	}
	
	if (callback != undefined)
	{
		callback();
	}
	
//	if (isFirstLoad)
//	{
//		MarkersOnMapCollection_Last = new Array();		// clear array
//		
//		if (MarkersOnMapCollection.length > 0)			// add new batch
//		{
//			for(var x=0;x<MarkersOnMapCollection.length;x++)
//			{
//				MarkersOnMapCollection[x].setMap(Map);
//				MarkersOnMapCollection_Last.push(MarkersOnMapCollection[x]);
//			}
//			
//			MarkersOnMapCollection = new Array();
//		}
//	}
//	else
//	{
//		window.setTimeout(function()
//		{
//			var MarkersAddedOrRemovedIds = new Array();
//			//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//			//	Remove markers from last set not in new set
//			//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//			var removed = 0;
//			var added = 0;
//			var spliceIndexes = new Array();
//			for(var last=0;last<MarkersOnMapCollection_Last.length;last++)
//			{
//				var LastMarker = MarkersOnMapCollection_Last[last];
//				if (LastMarker.isListingMarker)
//				{
//					var MarkerToRemove = LastMarker;
//					for(var next=0;next<MarkersOnMapCollection.length;next++)
//					{
//						var NextMarker = MarkersOnMapCollection[next];
//						if (NextMarker.isListingMarker)
//						{
//							//alert("NextMarker.IdListing:\t" + NextMarker.IdListing + "\nLastMarker.IdListing:\t" + LastMarker.IdListing);
//							if (NextMarker.IdListing == LastMarker.IdListing)
//							{
//								MarkerToRemove = null;
//								break;
//							}
//						}
//					}
//					if (MarkerToRemove != null)
//					{
//						MarkerToRemove.setMap(null);
//						spliceIndexes.push(last);
//						removed++;
//					}
//				}
//			}
//			//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//			//	Remove markers from last array
//			//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//			for(var x=0;x<spliceIndexes.length;x++)
//			{
//				MarkersOnMapCollection_Last.splice(spliceIndexes[x],1);
//			}
//			
//			//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//			//	Add markers in new set not in last set
//			//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//			for(var next=0;next<MarkersOnMapCollection.length;next++)
//			{
//				var NextMarker = MarkersOnMapCollection[next];
//				if (NextMarker.isListingMarker)
//				{
//					var MarkerToAdd = null;
//					for(var last=0;last<MarkersOnMapCollection_Last.length;last++)
//					{
//						var LastMarker = MarkersOnMapCollection_Last[last];
//						if (LastMarker.isListingMarker)
//						{
//							if (NextMarker.IdListing == LastMarker.IdListing)
//							{
//								MarkerToAdd = NextMarker;
//								break;
//							}
//						}
//					}
//					if (MarkerToAdd != null)
//					{
//						MarkerToAdd.setMap(Map);
//						MarkersAddedOrRemovedIds.push(MarkerToAdd.IdListing);
//						added++;
//					}
//				}
//			}
//			
//			//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//			//	Transpose next to last
//			//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//			MarkersOnMapCollection_Last = new Array();		// clear array
//			
//			if (MarkersOnMapCollection.length > 0)			// add new batch
//			{
//				for(var x=0;x<MarkersOnMapCollection.length;x++)
//				{
//					MarkersOnMapCollection_Last.push(MarkersOnMapCollection[x]);
//				}
//				
//				MarkersOnMapCollection = new Array(); // clear array
//			}
//		},500);
//	}
	

	
//	if (MMgr==null)
//	{
//		MMgr = new MarkerClusterer(Map, [], {
//		  maxZoom: 16,
//		  gridSize: 10
//		});
//	}
//	if (MarkersOnMapCollection.length > 0)
//	{
//		for(var x=0;x<MMgr.getTotalMarkers().length;x++)
//		{
//			MMgr.getTotalMarkers()[x].setMap(null);
//		}
//		MMgr.clearMarkers();
//		MMgr.addMarkers(MarkersOnMapCollection, false);
//		MMgr.redraw();
//		MarkersOnMapCollection = new Array();
//	}

}






