/*
  (C) by KSI media sp. z o.o. ( www.ksimedia.pl )  
  Description : Google Maps class.
  Author      : MS
  Create date : 2010-09-16
  Comment     :
*/

function classGoogleMaps ()
{
  this.maps = new Array() ;
  this.lastPosLat = new Array() ;
  this.lastPosLng = new Array() ;
  
  this.markersArrays = new Array() ;  
  this.linesArrays = new Array() ;
  
  this.lastEvent = new Array() ;
  this.events_click = new Array() ;
  this.events_dblclick = new Array() ;
  
  this.setPositionByLatLng = function ( name, latLng )
  {
  }
  
  this.setPositionByName = function ( name, searchLoc )
  {
    alert ( searchLoc ) ;
    var address = searchLoc ;
    var geocoder;
    geocoder = new google.maps.Geocoder();
    geocoder.geocode ( { 'address': address}, function(results, status) {
      if (status == google.maps.GeocoderStatus.OK)
      {
        GoogleMaps.maps[name].setCenter(results[0].geometry.location);
        var marker = new google.maps.Marker({
            map: GoogleMaps.maps[name], 
            position: results[0].geometry.location
        });
      }
      else
      {
        alert ( "Nie znaleziono lokalizacji ( " + status + ") :" + searchLoc ) ;
      }
    });
  }

  // adding Marker to map
  this.addMarker = function ( name, location )
  {
    marker = new google.maps.Marker({
      position: location, 
      map: GoogleMaps.maps[name] 
    });
    GoogleMaps.markersArrays[name].push(marker);
  }
  
  this.getLatLng = function ( lat, lng )
  {
    return new google.maps.LatLng( lat,lng ) ;
  }
  
  this.addCircle = function (__0_,__0,_0_,__0__){var _0_____ ;var __0____ ;var ____0___ ;var _____0__ ;var ______0_ ;var _______0 ;var ___0____ ;var _0_______ ;var __0______ ;var ___0_____ ;var ____0____ ;var _____0___ ;var ______0__ ;var _______0_ ;var ________0 ;var ________0__ ;var _________0_ ;var __________0 ;var __0__________ ;var __________0__ ;if(__0__==undefined)__0__='888888';__________0__=Math.PI;_0_______=__________0__/(18*10);___0____=_0_*0.0089907844459429085187*_0_______;_0_____=__0.lng()*_0_______;__0____=__0.lat()*_0_______;____0____=Math.sin(__0____)*Math.cos(___0____);_____0___=Math.cos(__0____)*Math.sin(___0____);______0__=Math.sin(___0____);_______0_=Math.cos(__0____)*Math.cos(___0____);________0=Math.sin(__0____)*Math.sin(___0____);_______0=__0____-___0____;______0_=_0_____;for(___0_____=1;___0_____<=72;___0_____++){__0______=(___0_____*5)*_0_______;________0__=Math.cos(__0______);_____0__=Math.asin(____0____-_____0___*________0__);__________0=______0__*Math.sin(__0______);__0__________=Math.atan(__________0/(_______0_+________0*________0__));_________0_=__________0/Math.cos(_____0__);____0___=_0_____+__0__________;GoogleMaps.addLine(__0_,GoogleMaps.getLatLng(_______0/_0_______,______0_/_0_______),GoogleMaps.getLatLng(_____0__/_0_______,____0___/_0_______),__0__);_______0=_____0__;______0_=____0___;}
  }

  this.addLine = function ( name, from, to, color )
  {
    if ( color == undefined ) color = '888888' ;
    var myLineC = [ from, to ] ;
    var myLine = new google.maps.Polyline({
      path: myLineC,
      strokeColor: color,
      strokeOpacity: 0.85,
      strokeWeight: 2
    });
    myLine.setMap ( GoogleMaps.maps[name] ) ;
    GoogleMaps.linesArrays[name].push(myLine);
  }

  // Removes the overlays from the map, but keeps them in the array
  this.clearOverlays = function ( name )
  {
    if (GoogleMaps.markersArrays[name])
    {
      for (i in GoogleMaps.markersArrays[name])
      {
        GoogleMaps.markersArrays[name][i].setMap(null);
      }
    }
  }

  // Shows any overlays currently in the array
  this.showOverlays = function ( name )
  {
    if (GoogleMaps.markersArrays[name])
    {
      for (i in GoogleMaps.markersArrays[name])
      {
        GoogleMaps.markersArrays[name][i].setMap(map);
      }
    }
  }

  // Deletes all markers in the array by removing references to them
  this.deleteOverlays = function ( name )
  {
    if (GoogleMaps.markersArrays[name])
    {
      for (i in GoogleMaps.markersArrays[name])
      {
        GoogleMaps.markersArrays[name][i].setMap(null);
      }
      GoogleMaps.markersArrays[name].length = 0;
    }
    
    if (GoogleMaps.linesArrays[name])
    {
      for (i in GoogleMaps.linesArrays[name])
      {
        GoogleMaps.linesArrays[name][i].setMap(null);
      }
      GoogleMaps.linesArrays[name].length = 0;
    }
  }

  this.init = function ( name, centerLatLng, zoom, mapTypeId )
  {    
	if ( centerLatLng == undefined ) 
    {
      centerLatLng = new google.maps.LatLng( 34.25, 16.88 ) ;
    }
    
    if ( zoom == undefined ) 
    {
      zoom = 3 ;
    }

    if ( mapTypeId == undefined ) 
    {
      mapTypeId = google.maps.MapTypeId.TERRAIN ;
    }
    
    this.maps[name] = new google.maps.Map(document.getElementById(name), {
      'zoom': zoom,
      'center': centerLatLng,
      'navigationControl':true,
      'mapTypeControl': false,
      'scaleControl': false,
      'mapTypeId': mapTypeId
    });
    
    GoogleMaps.markersArrays[name] = new Array();
    GoogleMaps.linesArrays[name] = new Array();
  
    google.maps.event.addListener( this.maps[name], 'click', function(mEvent) {
      var fn ;
      GoogleMaps.lastEvent [ name ] = mEvent ;
      if ( GoogleMaps.events_click [ name ] == undefined )
      {
      }
      else
      {
        fn = GoogleMaps.events_click [ name ] + "('" + name + "')" ;
        eval ( fn ) ;
      }
    });
    
    google.maps.event.addListener( this.maps[name], 'dblclick', function(mEvent) {
      var fn ;
      GoogleMaps.lastEvent [ name ] = mEvent ;
      if ( GoogleMaps.events_dblclick [ name ] == undefined )
      {
      }
      else
      {
        fn = GoogleMaps.events_dblclick [ name ] + "('" + name + "')" ;
        eval ( fn ) ;
      }
    });
  }
}

GoogleMaps = new classGoogleMaps ;
