/* ////////////////////////////////////////////////////////////////////////////////// ///////Copyright � 2009 Bird Wing Productions, http://www.birdwingfx.com////////// ////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////// This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . ///////////////////////////////////////////////////////////////////// */ (function($) { $.GoogleMapObjectDefaults = { zoomLevel: 13, imagewidth: 50, imageheight: 50, center: '', start: '#start', end: '#end', directions: '', submit: '#', tooltip: 'false', image: 'false' }; function GoogleMapObject(elementId, options) { /* private variables */ this._inited = false; this._map = null; this._geocoder = null; /* Public properties */ this.ElementId = elementId; this.Settings = $.extend({}, $.GoogleMapObjectDefaults, options || ''); } $.extend(GoogleMapObject.prototype, { init: function() { if (!this._inited) { if (GBrowserIsCompatible()) { this._map = new GMap2(document.getElementById(this.ElementId)); this._map.addControl(new GSmallMapControl()); this._map.addControl(new GMapTypeControl()); this._geocoder = new GClientGeocoder(); } this._inited = true; } }, load: function() { //ensure existence this.init(); if (this._geocoder) { //"this" will be in the wrong context for the callback var zoom = this.Settings.zoomLevel; var center = this.Settings.center; var width = this.Settings.imagewidth; var height = this.Settings.imageheight; var map = this._map; if (this.Settings.tooltip != 'false') { var customtooltip = true; var tooltipinfo = this.Settings.tooltip; } if (this.Settings.image != 'false') { var customimage = true; var imageurl = this.Settings.image; } this._geocoder.getLatLng(center, function(point) { if (!point) { alert(center + " not found"); } else { //set center on the map map.setCenter(point, zoom); if (customimage == true) { //add the marker var customiconsize = new GSize(width, height); var customicon = new GIcon(G_DEFAULT_ICON, imageurl); customicon.iconSize = customiconsize; var marker = new GMarker(point, { icon: customicon }); map.addOverlay(marker); } else { var marker = new GMarker(point); map.addOverlay(marker); } if(customtooltip == true) { marker.openInfoWindowHtml(tooltipinfo); } } }); } //make this available to the click element $.data($(this.Settings.submit)[0], 'inst', this); $(this.Settings.submit).click(function(e) { e.preventDefault(); var obj = $.data(this, 'inst'); var outputto = obj.Settings.directions; var from = $(obj.Settings.start).val()+', New Zealand'; var to = $(obj.Settings.end).val(); map.clearOverlays(); gdir = new GDirections(map, document.getElementById(outputto)); GEvent.addListener(gdir, "error", function(){ $('#printdirectionsContainer').fadeOut('slow'); $('#'+outputto).fadeOut('slow', function(){ $('#').html("The address given does not appear to exist. Please ensure you have typed it correctly in a \ Street, Suburb & City format."); hs.htmlExpand('#'); /*$('#').fadeIn('slow'); $('#').html("The address given does not appear to exist. Please ensure you have typed it correctly in a \ Street, Suburb & City format."); goToByScroll('')*/; }); }) GEvent.addListener(gdir, "load", function(){ $('#fromaddresshidden').val($(obj.Settings.start).val()+' New Zealand'); hs.htmlExpand('#'); /*$('#printdirectionsContainer').fadeIn('slow'); $('#').fadeOut('slow', function(){ $('#fromaddresshidden').val($(obj.Settings.start).val()+' New Zealand'); $('#'+outputto).fadeIn('slow'); goToByScroll('');*/ }) gdir.load("from: " + from + " to: " + to); $('#'+outputto).html(''); //open the google window //window.open("http://maps.google.com/maps?saddr=" + from + "&daddr=" + to, "GoogleWin", "menubar=1,resizable=1,scrollbars=1,width=750,height=500,left=10,top=10"); }); return this; } }); $.extend($.fn, { googleMap: function(options) { // check if a map was already created var mapInst = $.data(this[0], 'googleMap'); if (mapInst) { return mapInst; } //create a new map instance mapInst = new GoogleMapObject($(this).attr('id'), options); $.data(this[0], 'googleMap', mapInst); return mapInst; } }); })(jQuery);