// Used by Google Maps
var mymap = null;
var geocoder = null;
var baseicon = null;
var searchStringSaved = null;
var active_markers = [];
var marker = null;

// Used by Google Directions
var gdir;
var addressMarker;
		
	
$.fn.loadMap = function(settings) {
    var params = jQuery.extend({
    business: {latitude: 38.6, longitude: 75.36, address_1: 'test address', city: 'test city', state: 'test state'}, map: {latitude: 38.607522374855736, longitude: -75.3641942024231, zoom: 10}}, settings);

    if (GBrowserIsCompatible()) {
        // Create map
        mymap = new GMap2($("#map")[0]);
        // Load Directions
		if (params.directions) {
		  $.getScript("/js/gdirections.js");
		  gdir = new GDirections(mymap, $("#directions")[0]);
		  GEvent.addListener(gdir, "error", $().handleErrors);
        }
        // Add Controls
		mymap.addControl(new GLargeMapControl());
		mymap.addControl(new GMapTypeControl());
		// Create a base icon for all of our markers that specifies the
        // shadow, icon dimensions, etc.
        baseIcon = new GIcon();
        baseIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";
        baseIcon.iconSize = new GSize(20, 34);
        baseIcon.shadowSize = new GSize(37, 34);
        baseIcon.iconAnchor = new GPoint(9, 34);
        baseIcon.infoWindowAnchor = new GPoint(9, 2);
        baseIcon.infoShadowAnchor = new GPoint(18, 25);
		GEvent.addListener(mymap, "moveend", function() {
		  if (searchStringSaved != null) {
		  	$().getMarkers(searchStringSaved);
		  }
        });
		geocoder = new GClientGeocoder();

		if (params.business.business_id) {
		  if (params.business.longitude == 0 && params.business.latitude == 0) {
		      if (!showAddress(params.business.address_1+"; "+params.business.city+", "+params.business.state, true)) {
		          showAddress(params.business.city+", "+params.business.state, false)
		      }
		  } else {
		      var center = new GLatLng(params.business.latitude, params.business.longitude);
		      mymap.setCenter(center, 13);
		      var marker = new GMarker(center);
		      mymap.addOverlay(marker);		      
		  }
		} else {
		  center = new GLatLng(params.map.latitude, params.map.longitude);
		  mymap.setCenter(center, params.map.zoom);
		  if (params.addMarker) {
		      $().addMarker();
		  }
		  
		  // append select box
		  if (!params.hideMarkerSelect) {
		      $('#map').after('<div id="mapMarkerSelectDiv" style="text-align: left;">Display information on map: <select id="mapMarkerSelect" name="showMarkers" onchange="$().getMarkers(this.value);"><option value="">Select an Option:</option><option value="shopping">Shopping</option><option value="lodging">Lodging</option><option value="restaurants">Restaurants</option></select></div>');
		  }
		      
		}
	  }
	  
	}
	

	$.fn.getMarkers = function(searchString) {
		if (searchString != searchStringSaved) {
			mymap.clearOverlays();
			active_markers = null;
			active_markers = [];
			searchStringSaved = searchString;
		}
		var bounds = mymap.getBounds();
	  	var southWest = bounds.getSouthWest();
	  	var northEast = bounds.getNorthEast();
		var min_latitude = southWest.lat();
		var min_longitude = southWest.lng();
		var max_latitude = northEast.lat();
		var max_longitude = northEast.lng();
		if (searchStringSaved != '') {
		
            $.get('/business/get-markers', {search_string: searchString, min_latitude: min_latitude, min_longitude: min_longitude, max_latitude: max_latitude, max_longitude: max_longitude},
                function(jsondata) {
                    var data = jsondata.data;
					for (var i = 0; i < data.length; i++) {
						if ($.inArray(data[i].id, active_markers) < 0) {
							active_markers.push(data[i].id);
							mymap.addOverlay($().createMarker(new GLatLng(data[i].latitude,data[i].longitude), i, data[i].name, data[i].address_1, data[i].address_2, data[i].city, data[i].state, data[i].zip, data[i].phone, data[i].clean_name));
							
						}
						
					}
                }, 'json'
            );
		}
	}
	
	$.fn.createMarker = function(point, index, name, address_1, address_2, city, state, zip, phone, clean_name) {
	  // Create a lettered icon for this point using our icon class
	  //var letter = String.fromCharCode("A".charCodeAt(0) + index);
	  //var letteredIcon = new GIcon(baseIcon);
	  //letteredIcon.image = "http://www.google.com/mapfiles/marker" + letter + ".png";

	  // Set up our GMarkerOptions object
	  //markerOptions = { icon:letteredIcon };
	  //var marker = new GMarker(point, markerOptions);
	  var marker = new GMarker(point);
	  var markerText = "<b>" + name + "</b><br/>";
	  markerText += address_1 + "<br/>";
	  if (address_2 != '') {
	  	markerText += address_2 + "<br/>";
	  }
	  markerText += city + ", " + state + " " + zip + "<br/>";
	  markerText += phone + '<br/>';
	  markerText += '<a href="/business/' + clean_name + '.html">More Information</a>';

	  GEvent.addListener(marker, "click", function() {
		marker.openInfoWindowHtml(markerText);
	  });
	  return marker;
	}
		
	$.fn.showAddress = function(address, addMarker) {
	  if (address) {
		  if (geocoder) {
			geocoder.getLatLng(
			  address,
			  function(point) {
			  	mymap.clearOverlays();
				if (!point) {
				  alert('Address not found on map.');
				  return false;
				} else {
				  mymap.setCenter(point, 13);
				  if (addMarker) {
					  var marker = new GMarker(point);
					  mymap.addOverlay(marker);
				  }
				}
			  }
			);
		  }
	  } else {
	  	center = new GLatLng(38.607522374855736, -75.3641942024231);
		mymap.setCenter(center, 10);
	  }
	}
	
	$.fn.mPT = function(lat, lon, zoom) {
		mymap.panTo(new GLatLng(lat, lon));
		if (zoom != mymap.getZoom()) {
			mymap.setZoom(zoom);
		}
	}
	
$.fn.returnCoords = function() {
    var coords = center.toString().replace("(", "").replace(")", "").split(", ");
    window.opener.$('#latitude').val(coords[0]);
    window.opener.$('#longitude').val(coords[1]);
    window.opener.$('#latlngstatus').html('Set');
    window.close();
}
	
$.fn.addMarker = function() {
    if (marker) {
        mymap.removeOverlay(marker);
    }
    center = mymap.getCenter();
    marker = new GMarker(center, {draggable: true})
    GEvent.addListener(marker, "dragend", function() {
        center = marker.getLatLng();
    });
    mymap.addOverlay(marker);
}

$(document).ready(function() {
    $().loadMap(mapParams);
});

$(document).unload(function() {
    GUnload();
});