DWGoogleMaps = {
   /** Clave del API de Google. */
   key: "ABQIAAAAKo0ULEexQGXFur9I47QOahRmsnH5T4SzgzupyfxDfhlY6YSEtRRcS2BCOBgzbCcgOzkw3X9uw_AG1A", /* skiart.com */

   /** Elemento que contiene el mapa. */
   container: null,

   /** Elemento que contiene el mapa. */
   callback: null,

   /** Mapa de Google. */
   gMap: null,

   /** Objeto para hacer búsquedas por dirección. */
   gCoder: null,

   /** Objeto generico con el icono para marcar el mapa */
   mIcon : null,

   /** Imágen del icono genérico */
   mIconSrc : "images/theme/dw/icono-hotel-google.png",

   /**
    *
    * @param {Node} container Objeto que contendrá el mapa.
    */
   load: function (container, callback) {
      DWGoogleMaps.container = container;
      DWGoogleMaps.callback = callback;

      if (typeof GMap2 == "undefined" || !GMap2) {
         /* Carga del script */
         var script = document.createElement("script");
         script.setAttribute("src", "http://maps.google.es/maps?file=api&v=2.x&key=" + DWGoogleMaps.key +"&async=2&callback=DWGoogleMaps.loadMap");
         script.setAttribute("type", "text/javascript");
         document.documentElement.firstChild.appendChild(script);
      } else {
         DWGoogleMaps.loadMap();
      }
   },

   /** Función que se ejecutará una vez descargado el script de Google. */
   loadMap: function () {
      if (GBrowserIsCompatible()) {
         DWGoogleMaps.gMap = new GMap2(DWGoogleMaps.container);
         DWGoogleMaps.gMap.addControl(new GLargeMapControl());
         DWGoogleMaps.gMap.addControl(new GMapTypeControl());
         DWGoogleMaps.gMap.setCenter(new GLatLng(40.396764, -3.713379), 6);

         DWGoogleMaps.mIcon = new GIcon(G_DEFAULT_ICON);
         DWGoogleMaps.mIcon.image = DWGoogleMaps.mIconSrc;
         DWGoogleMaps.mIcon.iconSize = new GSize(29, 35);
      }

      if (DWGoogleMaps.callback) {
         DWGoogleMaps.callback();
      }
   },

   /**
    * Situa el icono en un punto del mapa con el icono que hemos predefinido
    *
    * @param {Point} point         Punto del mapa donde vamos a situar
    * @param {Object} map          Objeto que contiene el mapa
    * @param {Object} icon         Icono predefinido para marcar el punto
    * @param {String} info         Texto que aparece al clickar sobre el icono
    * @param {int} zoom            Entero que indica el zoom sobre el  punto
    */
   setIcon : function(point, map, icon, info, zoom) {
      DWGoogleMaps.gMap.setCenter(point, zoom);
      DWGoogleMaps.gMap.clearOverlays();
      var marker = new GMarker(point, icon);
      DWGoogleMaps.gMap.addOverlay(marker);
      if(info != null){
         marker.openInfoWindowHtml(info);
         GEvent.addDomListener(marker, "click", function() {
            marker.openInfoWindowHtml(info);
         });
      }
   },

   showAddress: function (address, info) {
      if (!DWGoogleMaps.gCoder) {
         DWGoogleMaps.gCoder = new GClientGeocoder();
      }

      DWGoogleMaps.gCoder.getLatLng(address, function (point) {
         if (point) {
            DWGoogleMaps.setIcon(point, DWGoogleMaps.map, DWGoogleMaps.mIcon, info, 15);
         }
      });
   },

   showLatLng: function (lat, lng, info) {
      var point = new GLatLng(lat, lng);
      DWGoogleMaps.setIcon(point, DWGoogleMaps.gMap, DWGoogleMaps.mIcon, info, 15);
   }
};
