﻿/*************************************************************
// Google Maps helper class
*************************************************************/

if( "undefined" == typeof( sgf ) ) sgf = {};

( 
  function() 
  {  
    function GMAdaptor( canvasId ) 
    {
      this.CanvasId = canvasId;
      if( GBrowserIsCompatible() ) 
      {
        this.Canvas   = document.getElementById( this.CanvasId );
        this.Map      = new GMap2( this.Canvas );
        this.Geocoder = new GClientGeocoder();
      }
    };

    GMAdaptor.prototype.CanvasId            = null;
    GMAdaptor.prototype.Canvas              = null;
    GMAdaptor.prototype.Map                 = null;
    GMAdaptor.prototype.Geocoder            = null;
    GMAdaptor.prototype.CanvasStyleShow     = 'GMap_shown'  ;
    GMAdaptor.prototype.CanvasStyleHide     = 'GMap_hidden' ;
    GMAdaptor.prototype.AddressNotFoundHTML = "<div class='missing_address'>Address not found on Google Maps</div>";

    GMAdaptor.Uninit = function() 
    {
      GUnload();
    }

    GMAdaptor.prototype.Setup = function( address ) 
    {
      if( null != this.Geocoder )
      {
        var ref = this;
        this.Geocoder.getLatLng( address,
                                 function( point ) 
                                 {
                                   if (!point) 
                                   { 
                                     ref.innerHTML = ref.AddressNotFoundHTML; 
                                   } 
                                   else 
                                   {
                                      ref.Map.setCenter( point, 15 );
                                      var marker = new GMarker( point );
                                      ref.Map.addOverlay( marker );
                                      
                                      ref.Map.addControl( new GSmallZoomControl() );
                                      //marker.openInfoWindowHtml(address);
                                   }
                                 });    
      }
    }
    
    GMAdaptor.prototype.ShowCanvas = function( evt ) 
    {
	    var element = evt.srcElement ? evt.srcElement : evt.target;
	    if( element.parentNode.className.indexOf( this.CanvasStyleHide ) >-1 ) 
	      { element.parentNode.className = this.CanvasStyleShow; }
	    else
		    { element.parentNode.className = this.CanvasStyleHide; }

	    event.cancelBubble = true;
	    return false;
    };  
    
    sgf.GMAdaptor = GMAdaptor;
  }
)();
    
