/**
 * --------------------------------------------------------------------
 * jQuery-Plugin "gmaps"
 * Version: 0.1, 04.03.2009
 * by Xavier Ivars, xavi.ivars@gmail.com
 *                      http://xavi.infobenissa.com/
 *
 * Copyright (c) 2009 Xavi Ivars
 * Licensed under GPL (http://www.opensource.org/licenses/gpl-license.php)
 *
 * Changelog:
 *    04.03.2009 Version 0.1
 * --------------------------------------------------------------------
*/

(function($){
    $.gmaps = {
        maps : [],
        managers : [],

        name : 'JQueryGMaps',

        marker : function (m) {
            if (!m) {
                return null;
            } else {
                var markoptions = {};
                if(m.icon) {
                    var ticon = new GIcon();
                    ticon.image = m.icon.image;
                    ticon.iconAnchor = new GPoint(m.icon.anchorw,m.icon.anchorh);
                    ticon.iconSize = new GSize(m.icon.sizew,m.icon.sizeh);
                    ticon.shadow = m.icon.shadow;
                    ticon.shadowSize = new GSize(m.icon.shadowsizew,m.icon.shadowsizeh);
                    ticon.infoWindowAnchor = new GPoint(10,3);
                    ticon.infoShadowAnchor = new GPoint(10,3);
 
                    markoptions.icon = ticon;
                }
                var mk = new GMarker(new GLatLng(m.lat, m.lng),markoptions);

                if (m.txt) {
                    GEvent.addListener(mk, "click", function() {
                        mk.openInfoWindowHtml(m.txt);
                    });
                }

                return mk;
            }
        },

        add : function (element,options) {

            if (typeof GBrowserIsCompatible != 'undefined') {
                if (GBrowserIsCompatible()) {
                    settings = jQuery.extend({
                        control: ["GSmallMapControl","GMapTypeControl"],
                        lat:38.716406,
                        lng:0.053258,
                        zoom: 15,
                        width: 300,
                        heigth: 300,
                        manager : false,
                        markers:[]
                    }, options);

                    var map = new GMap2(element,{
                        size:new GSize(settings.width,settings.height)
                    });

                    if(settings.manager) {
                        jQuery.each(settings.control,function() {
                            map.addControl(eval("new "+this+"()"));
                        });

                        map.setCenter(new GLatLng(settings.lat,settings.lng),settings.zoom);
                        map.enableScrollWheelZoom();

                         mkrs = [];
                        jQuery.each(settings.markers,function() {
                            mkrs.push(jQuery.gmaps.marker(this));
                        });
                        //debugger;
                        var mgr = new MarkerManager(map);
                        //debugger;
                        mgr.addMarkers(mkrs,0);
                        //debugger;
                        mgr.refresh();
                        this.maps[jQuery(element).attr('id')]=map;
                        this.managers[jQuery(element).attr('id')]=mgr;
                        

                    } else {
                        jQuery.each(settings.control,function() {
                            map.addControl(eval("new "+this+"()"));
                        });

                        jQuery.each(settings.markers,function() {

                            map.addOverlay(jQuery.gmaps.marker(this));

                        });

                        map.setCenter(new GLatLng(settings.lat,settings.lng),settings.zoom);
                        map.enableScrollWheelZoom();
                        this.maps[jQuery(element).attr('id')]=map;
                    }
                } else {
                    jQuery(element).text('Your browser does not support Google Maps.');
                    return false;
                }
            } else {
                jQuery(element).text('You have no internet connection.');
            }
            return true;
        }
    };

    $.fn.gmaps = function(method,settings) {

        return this.each(function() {
            
            if(method == 'init') {
                $.gmaps.add(this,settings);
            } else if (method == 'clear') {
                $.gmaps.managers[jQuery(this).attr('id')].clearMarkers();
            } else if (method == 'add') {
                mk = $.gmaps.managers[jQuery(this).attr('id')];
                mkrs = [];
                options = { minZoom : 0, maxZoom: 17, center: false };
                $.extend(options,settings);
                var latlngbounds = new GLatLngBounds( );

                jQuery.each(options.markers,function() {
                    aux = jQuery.gmaps.marker(this);
                    latlngbounds.extend( aux.getLatLng() );
                    mkrs.push(aux);
                });

                

                mk.addMarkers(mkrs,options.minZoom,options.maxZoom);
                mk.refresh();
                if(options.center)
                    $.gmaps.maps[jQuery(this).attr('id')].setCenter( latlngbounds.getCenter( ));

            }
        });
    };
})(jQuery);


