/*
 * Google Maps Functions - jQuery Functions
 * 
 * Copyright (c) 2010 SORUDAN Solutions
 *
 * Version: 1.0.0 (22/11/2010)
 * Requires: jQuery v1.3+
 *
 */

// Define constants
var googleInfoWindow;
var googleMarkersArray = [];
var googleMapPinLat = "st_googlelat";
var googleMapPinLng = "st_googlelng";

// Define functions

function createGoogleMap(gLat,gLng,gZoom,gElement) {
  var googleLatLng = new google.maps.LatLng(gLat,gLng);
  var googleOpt = {
      zoom: gZoom,
      center: googleLatLng,
      mapTypeId: google.maps.MapTypeId.ROADMAP
  };
  
  var googleMap = new google.maps.Map(document.getElementById(gElement),googleOpt);
  return [googleMap,googleLatLng];
}

function createGoogleMarker(gMap,gLat,gLng,gTitle,gMessage,sDrag,googleMarkerImgUrl){
  var googleMarkerImg = new google.maps.MarkerImage(googleMarkerImgUrl,new google.maps.Size(28, 32),new google.maps.Point(0, 0));
  var marker = new google.maps.Marker({
    position: new google.maps.LatLng(gLat,gLng),
    map: gMap,
    title:gTitle,
    icon: googleMarkerImg,
    draggable: sDrag
  });
  googleMarkersArray.push(marker);
  if(gMessage){
    google.maps.event.addListener(marker, 'click', function() {
      if(googleInfoWindow) googleInfoWindow.close();
      googleInfoWindow = new google.maps.InfoWindow({ 
        content: gMessage,
        maxWidth: 300
      });
      googleInfoWindow.open(gMap,marker);
    });
  }
  if(sDrag) {
    google.maps.event.addListener (marker, 'dragstart', function (event) { 
      if(googleInfoWindow) googleInfoWindow.close();
    });
    google.maps.event.addListener (marker, 'dragend', function (event) { 
      var markerPos = marker.getPosition();
      gMap.panTo(markerPos);
      getGooleMarkerPos(markerPos);
    });
  }
}

function getGooleMarkerPos(pos) {
  $("."+googleMapPinLat).val(pos.lat());
  $("."+googleMapPinLng).val(pos.lng());
}

function resizeGoogleMap(gMap,gLatLng){
  google.maps.event.trigger(gMap, 'resize');
  gMap.setCenter(gLatLng);
}

function fitGoogleMapBounds(gMap,gBounds) {
  for (bIndex=0;bIndex<googleMarkersArray.length;bIndex++) { 
    gBounds.extend(googleMarkersArray[bIndex].getPosition());
  }
  zoomChangeListener = google.maps.event.addListener(gMap, 'zoom_changed', function() {
    zoomChangeBoundsListener = 
      google.maps.event.addListener(gMap, 'bounds_changed', function(event) {
        if (this.getZoom() > 14) {
            // Change max/min zoom here
            this.setZoom(14);
            this.initialZoom = false;
        }
      google.maps.event.removeListener(zoomChangeBoundsListener);
    });
    google.maps.event.removeListener(zoomChangeListener);
  });
  gMap.fitBounds(gBounds);
}

function setGoogleMarker(gLat,gLng,gMap,gMarker){
  var pinLat = $(gLat);
  var pinLng = $(gLng);
  var pinMapShow = createGoogleMap(pinLat.val(),pinLng.val(),11,gMap);
  createGoogleMarker(pinMapShow[0],pinLat.val(),pinLng.val(),"Marker","",true,gMarker);
}

