﻿(function($) {
  $.fn.extend({
    gmaps: function(options) {
      var defaults = {
        width     : 300,
        height    : 200,
        zoom      : '13',
        controls  : true,
        navform   : '',
        navlist   : ''
      };
      var options = $.extend(defaults, options);

      var setCenter = function(point){
        map.setCenter(point, parseInt(options.zoom));
      }

      var addMarker = function(point){
        map.addOverlay(new GMarker(point));
      }

      var addInfoBox = function(point,info){
        map.openInfoWindowHtml(point,info);
      }

      return this.each(function() {
        var obj = $(this);
        $(this).hide();
        //creating div
        var mapID=$(obj).attr('id')+'_map';
        $(obj).after('<div id="'+mapID+'">Google maps</div>');
        $('#'+mapID).attr('style','width:500px; height:500px;');
        $('#'+mapID).attr('style','width: '+options.width+'px; height: '+options.height+'px;');
//        $('#'+mapID).show();
      //creating map
        map = new GMap2($('#'+mapID)[0]);
        //adding controls
        if (options.controls){
          map.addControl(new GMapTypeControl());
          map.addControl(new GSmallMapControl());
        }
        //adding markers
        $('.position,.marker').each(function(){
          var marker=$(this);
          //getting data
          var position= $('span',marker).text();
          if (position.match(/\d+\.\d+,\d+\.\d+/)){
            var gps = position.split(',');
            point = new GLatLng(gps[0],gps[1]);
            if ($(marker).hasClass('marker')) addMarker(point);
            var infobox=$('div',marker).html()
            if (infobox) addInfoBox(point,infobox);
            if ($(marker).hasClass('position')) setCenter(point);
          } else {
            geocoder = new GClientGeocoder();
            //position of the map
            if (geocoder) {
              geocoder.getLatLng(position,function(point) {
              if (!point) {
                alert(position + " not found");
              } else {
                if ($(marker).hasClass('marker')) addMarker(point);
                var infobox=$('div',marker).html()
                if (infobox) addInfoBox(point,infobox);
                if ($(marker).hasClass('position')) setCenter(point);
              }
            });
          }
        }
        $(obj).data('mapa',map);
      });
      //map resize

//      map.checkResize();

      //find route control
      if (options.navform){
        $(options.navform).bind('submit',function(){
          var directions = new GDirections(map, $(options.navlist)[0]);
          directions.load("from: "+$(options.navform+' input[name=from]').val()+'  to: '+$(options.navform+' input[name=to]').val());//
          return false;
        })
      }
      return false;
    });
   }
  });
})(jQuery);
