// JScript File

var currentMarker;

function loadMap()
{
	if (GBrowserIsCompatible()) 
	{
		var map = document.getElementById("map");
		gmap = new GMap2(map);

		gmap.addControl( new GSmallMapControl() );
		gmap.addControl( new GMapTypeControl() ) ;

		gmap.enableScrollWheelZoom();
		gmap.enableDoubleClickZoom();	

		savedPoint = new GLatLng(lat,long);
		gmap.setCenter(savedPoint, 14);
		
		marker = new GMarker(savedPoint);
		gmap.addOverlay(marker);
		
		savedInfoWinHtml = infoWinHtml;

		// geocoder = new GClientGeocoder();
		// localSearch = new GlocalSearch();
		
		// usePointFromPostcode(postcode, infoWinHtml);
	} 
}

function gMapLoad (lat, long, zoom) 
{
	if (GBrowserIsCompatible()) 
	{
		var map = document.getElementById("map");
		gmap = new GMap2(map);

		gmap.addControl( new GSmallMapControl() );
		gmap.addControl( new GMapTypeControl() ) ;

		gmap.enableScrollWheelZoom();
		gmap.enableDoubleClickZoom();
		
		geocoder = new GClientGeocoder();
		localSearch = new GlocalSearch();

		var point = new GLatLng(lat,long);
		gmap.setCenter(point, zoom);
		
		var mgrOptions = { borderPadding: 50, maxZoom: 15, trackMarkers: false };
		mgr = new MarkerManager(gmap);
		
 		GDownloadUrl("GoogleMapAllPoints.cfm", function(data) {
			parseJson(data);
		});
	} 
}

function gMapLoadArchive (lat, long, zoom) 
{
	if (GBrowserIsCompatible()) 
	{
		var map = document.getElementById("map");
		gmap = new GMap2(map);

		gmap.addControl( new GSmallMapControl() );
		gmap.addControl( new GMapTypeControl() ) ;

		gmap.enableScrollWheelZoom();
		gmap.enableDoubleClickZoom();
		
		geocoder = new GClientGeocoder();
		localSearch = new GlocalSearch();

		var point = new GLatLng(lat,long);
		gmap.setCenter(point, zoom);
		
		var mgrOptions = { borderPadding: 50, maxZoom: 15, trackMarkers: false };
		mgr = new MarkerManager(gmap);
		
 		GDownloadUrl("GoogleMapAllPointsArchive.cfm", function(data) {
			parseJson(data);
		});
	} 
}

function gMapLoadAuctionMap (lat, long, zoom, auctionID) 
{
	if (GBrowserIsCompatible()) 
	{
		var map = document.getElementById("map");
		gmap = new GMap2(map);

		gmap.addControl( new GSmallMapControl() );
		gmap.addControl( new GMapTypeControl() ) ;

		gmap.enableScrollWheelZoom();
		gmap.enableDoubleClickZoom();
		
		geocoder = new GClientGeocoder();
		localSearch = new GlocalSearch();

		var point = new GLatLng(lat,long);
		gmap.setCenter(point, zoom);
		
		var mgrOptions = { borderPadding: 50, maxZoom: 15, trackMarkers: false };
		mgr = new MarkerManager(gmap);
		
 		GDownloadUrl("GoogleMapAuctionProperties.cfm?auction="+auctionID, function(data) {
			parseJson(data);
		});
	} 
}

function gMapLoadPropertyMap(lat, lng, zoom, propertyCode){
	if (GBrowserIsCompatible()) 
	{
		var map = document.getElementById("GoogleMap");
		gmap = new GMap2(map);

		gmap.addControl( new GLargeMapControl() );
		gmap.addControl( new GMapTypeControl() ) ;

		gmap.enableScrollWheelZoom();
		gmap.enableDoubleClickZoom();
		
		geocoder = new GClientGeocoder();
		localSearch = new GlocalSearch();

		var point = new GLatLng(lat,lng);
		gmap.setCenter(point, zoom, G_SATELLITE_MAP);

	        var overIcon = new GIcon(G_DEFAULT_ICON);
		var mgrOptions = { borderPadding: 50, maxZoom: 15, trackMarkers: true };
		
		mgr = new MarkerManager(gmap);

		var markerOptions = { icon:overIcon };

		var marker = new GMarker(point, markerOptions);
		
		mgr.addMarker(marker, 5, 17);
		
 		//GDownloadUrl("GoogleMapAuctionProperties.cfm?auction="+auctionID, function(data) {
//			parseJson(data);
	//	});
	} 
}

function reCenterMap()
{	
	gmap.setCenter(savedPoint, 14);
	marker.openInfoWindowHtml(savedInfoWinHtml);
	gmap.setCenter(savedPoint, 14);
}

function usePointFromPostcode(postcode) {
  
    localSearch.setSearchCompleteCallback(null, 
        function() {
            if (localSearch.results[0]) {    
                var resultLat = localSearch.results[0].lat;
                var resultLng = localSearch.results[0].lng;
                var point = new GLatLng(resultLat,resultLng);
                
                gmap.setCenter(point, 10);
                
                /* callBackAddMarker(point); */
            }else{
                alert("Town/Postcode not found, please revise your search criteria and try again");
            }
    });  

    localSearch.execute(postcode + ", UK");
}

function callBackAddMarker(point,infoWinHtml) 
{
	savedPoint = point;
	gmap.setCenter(point, 14);
	var marker = new GMarker(point);        
	gmap.addOverlay(marker);
    
	gmap.addControl( new GSmallMapControl() );
	gmap.addControl( new GMapTypeControl()) ;

	gmap.enableScrollWheelZoom();
	gmap.enableDoubleClickZoom();		
	
	marker.openInfoWindowHtml(infoWinHtml)
}

function resetMapCenter()
{
	gmap.setCenter(savedPoint, 13);
}

function processMove()
{
    var center = gmap.getCenter();
    
    GDownloadUrl("getpoints.aspx?lat="+center.x+"&lang="+center.y, function(data) {
        parseJson(data);
    });
}

function createMarker(input) 
{
        var overIcon = new GIcon(G_DEFAULT_ICON);
        overIcon.image = "images/" + input.icon + ".gif";
        overIcon.iconSize = new GSize(input.iwidth, input.iheight); 
        overIcon.iconAnchor = new GPoint(input.iwidth / 2, input.iheight); 
        overIcon.infoWindowAnchor = new GPoint(6, 0); 
        overIcon.shadow = '';

	var markerOptions = { icon:overIcon };

	var marker = new GMarker(input.point, markerOptions);

	/* GEvent.addListener(marker, "click", function() {
		marker.openInfoWindowHtml(input.html);
	}); */
	
	GEvent.addListener(marker, "click", function() 
	{
		if (typeof FGOverlay !== 'undefined') 
		{
			if (currentMarker) 
			{
				closeOverlay();
			}
			if (!this.overlay) 
			{
				marker.overlay = new FGOverlay(this, input.html);
			}
			currentMarker = this;
			
			var yShift = gmap.fromContainerPixelToLatLng(new GPoint(50,50)).lng() - gmap.fromContainerPixelToLatLng(new GPoint(0,0)).lng();
			
			gmap.panTo(new GLatLng(this.getPoint().lat() + yShift, this.getPoint().lng()));
			gmap.addOverlay(marker.overlay);
		} 
		else 
		{
			marker.openInfoWindowHtml(input.html);
		}
	});

	/* GEvent.addListener(marker, "click", function() 
	{
		if (typeof FGOverlay !== 'undefined') 
		{
			if (currentMarker) 
			{
				closeOverlay();
			}
			if (!this.overlay) 
			{
				marker.overlay = new FGOverlay(this, input.html);
			}
			currentMarker = this;
			
			gmap.panTo(new GLatLng(this.getPoint().lat(), this.getPoint().lng()));
			gmap.addOverlay(marker.overlay);
		} 
		else 
		{
			marker.openInfoWindowHtml(input.html);
		}
	}); */


	return marker;
}

function closeOverlay() {
	if (currentMarker) {
		gmap.removeOverlay(currentMarker.overlay);
		currentMarker.show();
	}
}

function parseJson (doc) 
{	   
	var jsonData = eval("(" + doc + ")");
	
	for (var i = 0; i < jsonData.markers.length; i++) 
	{
 		var marker = createMarker(jsonData.markers[i]);
 		mgr.addMarker(marker, jsonData.markers[i].min, jsonData.markers[i].max);
	}
}

var FGOverlay = function(marker, html) {
	this.marker = marker;
	this.html = html;
}
FGOverlay.prototype = new GOverlay();
FGOverlay.prototype.initialize = function(map) {

	var div = document.createElement("div");
	div.className = 'mapPropertyWindow';
	div.innerHTML = this.html;
	
	map.getPane(G_MAP_FLOAT_PANE).appendChild(div);

	// div.onclick = closeOverlay;

	this._map = map;
	this._div = div; 
	this._offsetTop = -1 * (this._div.offsetHeight + 15);
	this._offsetLeft = -34;
}
FGOverlay.prototype.remove = function(){
	this._div.parentNode.removeChild(this._div);
}
FGOverlay.prototype.redraw = function() {
	this._div.style.top = (this._map.fromLatLngToDivPixel(this.marker.getPoint()).y + this._offsetTop) + 'px';
	this._div.style.left = (this._map.fromLatLngToDivPixel(this.marker.getPoint()).x + this._offsetLeft) + 'px';
}
