﻿var iconHigh ;
var iconMedium ;
var iconLow ;
var mouselat ;
var mouselng ;
var localSearch ;

GMap2.prototype.wheelZoom = function(event)
{ 
   if(event.cancelable)    
      event.preventDefault(); 
      
    var m = map.fromLatLngToDivPixel(new GLatLng(mouselat,mouselng)); 
    var c = map.fromLatLngToDivPixel(map.getCenter());       
      
    if ((event.detail || -event.wheelDelta) < 0) 
    { 
        var x = c.x - ((m.x - c.x) * -.5); 
        var y = c.y - ((m.y - c.y) * -.5); 
        var n = map.fromDivPixelToLatLng(new GPoint(x,y)); 
        map.setCenter(n);     
        map.zoomIn(); 
    } 
    else 
    { 
        var x = c.x - (m.x - c.x); 
        var y = c.y - (m.y - c.y); 
        var n = map.fromDivPixelToLatLng(new GPoint(x,y)); 
        map.setCenter(n);     
        map.zoomOut(); 
    } 
    return false; 
} 

// function Map_Setup(x,y,zoom) 
function Map_Setup(swLng, swLat, neLng, neLat, x,y, zoom) 
{
    if (GBrowserIsCompatible()) 
    {
        map = new GMap2(document.getElementById("map"));
        map.addControl(new GLargeMapControl());
        map.addControl(new GMapTypeControl());
        map.addControl(new GScaleControl()) ;
        map.addControl(new GOverviewMapControl()) ;

        localSearch = new GlocalSearch() ;
        
        map.enableDoubleClickZoom() ;
        map.enableContinuousZoom() ;
        
        baseIcon = new GIcon(G_DEFAULT_ICON) ;
        baseIcon.iconSize = new GSize(31,40) ;        
        baseIcon.shadow = "images/marker_shadow.png" ;
        baseIcon.shadowSize = new GSize(39,48) ;
        //baseIcon.iconAnchor = new GPoint(15,39) ;
        //baseIcon.iconWindowAnchor = new GPoint(25,2) ; 
        //baseIcon.infoShadowAnchor = new GPoint(1, 1);
        baseIcon.printImage = "" ;
        baseIcon.mozPrintImage = "" ;
        baseIcon.printShadow = "" ;
        baseIcon.transparent = "" ;
        
        iconHigh   = new GIcon(baseIcon, "images/marker_high.png" ) ;
        iconMedium = new GIcon(baseIcon, "images/marker_medium.png") ;
        iconLow    = new GIcon(baseIcon, "images/marker_low.png") ;
             
        GEvent.addListener( map, "moveend", function(p)
        {
            Map_ViewChange() ;
        }) ;
        
        GEvent.addDomListener(document.getElementById("map"), "DOMMouseScroll", map.wheelZoom); 
        GEvent.addDomListener(document.getElementById("map"), "mousewheel",     map.wheelZoom); 
        
        GEvent.addListener(map, "mousemove", function(point) 
        { 
            mouselat = point.y.toFixed(6); 
            mouselng = point.x.toFixed(6); 
        }) ;         
 		
 		if (x != "0")
 		{
 		    var point = new GLatLng(y,x) ;
		    map.setCenter(point, zoom);  
		}
		else
		{
    		Map_ZoomToExtent(swLng, swLat, neLng, neLat) ; 
    	}
    }
}

function Map_ViewChange()
{
    var mapExtent = map.getBounds() ;
       
    var southWest = mapExtent.getSouthWest() ;
    var northEast = mapExtent.getNorthEast() ;
      
    var swLat = southWest.lat() ;
    var swLng = southWest.lng() ;
    var neLat = northEast.lat() ;
    var neLng = northEast.lng() ;   
    ReturnVisibleWorks(swLat, swLng, neLat, neLng) ;
}

function Map_MoveTo(lat, lng, zoom)
{
    var point = new GLatLng( lat, lng) ;
	map.setCenter(point, zoom);  

}

function Map_ClearWorks()
{
    map.clearOverlays() ;
}

function Map_ZoomToExtent(BottomX, BottomY, TopX, TopY)
{
   var sw = new GLatLng(BottomY, BottomX) ;
   var nw = new GLatLng(TopY, TopX) ;
   var bounds = new GLatLngBounds(sw,nw);
   
   var clat = (bounds.getNorthEast().lat() + bounds.getSouthWest().lat()) /2;
   var clng = (bounds.getNorthEast().lng() + bounds.getSouthWest().lng()) /2;
    
   var ZoomLevel = map.getBoundsZoomLevel(bounds) ;    
   map.setCenter(new GLatLng(clat,clng),ZoomLevel ); 

}


function Map_AddMarker(latitude, longitude, name, impact)
{
    var point = new GLatLng(latitude, longitude) ;
    
    var marker ;
    switch (impact)
    {
       case "HIGH" :
            marker = new GMarker(point, {icon: iconHigh} ) ;
            break ;
            
       case "MEDIUM" :
            marker = new GMarker(point, {icon: iconMedium} ) ;
            break ;
            
       default :
            marker = new GMarker(point, {icon: iconLow} ) ;
            break ;
    }

    GEvent.addListener(marker, "click", function () {
        markerClicked (marker, name) ;
    });
    
    map.addOverlay(marker) ;
}

function Map_ShowInfo(marker,html)
{
    marker.openInfoWindowHtml(html);
}

function Map_PostcodeSearch(postcode)
{
    localSearch.setSearchCompleteCallback(null, 
        function()
        {
            if (localSearch.results[0])
            {
               var resultLat = localSearch.results[0].lat ;
               var resultLng = localSearch.results[0].lng ;
               Map_MoveTo(resultLat, resultLng, 16) ;
            }
            else
            {
                SetStatus("Postcode invalid or not found.") ;
            }
        }
    ) ;
    
    var pc = postcode + "," + postcodeGeocode ;
    localSearch.execute(pc) ;
} 
