var $GoogleMaps=(function($){

	var $config={
		'pins':false,
		'nearpins': {'historic_lodging' : [], 'place_to_eat' : [], 'place_to_see' : [], 'battle' : []}
	}
    var $mainlocation = false;
//	$obj.hide();
//	GEvent.addListener($map,'tilesloaded',function(){
//	$obj.slideDown(2000);
//	});

	return {
		'setPins':function($image,$size){
			if($image || $size){
				if($config.pins){
					if($image){$config.pins.image=$image;}
					if($size){$config.pins.size=$size;}
					return true;
				}
				$config.pins={
					'image':$image,
					'size':$size
				};
				return true;
			}
			return false;
		},
		'basicMap':function($settings){
			
			var $obj=$('#google-map-'+$settings.hash+' .google-map-canvas'),
				$done = false;
				$map=new GMap2($obj.get(0));
			$map.addControl(new GLargeMapControl3D());
			$map.setMapType(G_NORMAL_MAP);
			var $bounds = new GLatLngBounds();
			if($settings.points){
				$.each($settings.points,function(i,p){
					$GoogleMaps.plotpoint(p, $bounds, $map);
				});
				$map.setCenter($bounds.getCenter());
				$map.setZoom($map.getBoundsZoomLevel($bounds));
				$done = true;
			}
			if($settings.nearby){
				$.each($settings.nearby,function(i,p){
					$GoogleMaps.plotpoint(p, $bounds, $map);
				});
				$done = true;
			}
			if($settings.location && $settings.location.lat != 0 && $settings.location.lat != '' && $settings.location.lat != null){
				$GoogleMaps.plotpoint($settings.location, $bounds, $map, true);
				$map.setCenter(new GLatLng($settings.location.lat,$settings.location.long));
				$map.setZoom($map.getBoundsZoomLevel($bounds) -1 );
				$done = true;
			}
			if (!$done) {
				$obj.parents('.zoneblock').remove();
				return true;
			}
			if($settings.directions){
				var $form=$('#directions-form-'+$settings.hash),
					$panelID='directions-'+$settings.hash;
				$form.after('<div id="'+$panelID+'"></div>');
				var $panel=$('#'+$panelID),
					$directions=new GDirections($map,$panel.get(0));
				$form.submit(function(){
					var $data=$(this);
					$directions.clear();
					$directions.load("from:"+$data.find('.address').val()+' to:'+$mainlocation.toUrlValue());
					return false;
				});
			}
		},
		'plotpoint':function(p, $bounds, $map, ismain){
			var $point=new GLatLng(p.lat,p.long),
				$icon=new GIcon(G_DEFAULT_ICON);
			if (ismain) $mainlocation = $point;
			if (p.cat) {
				cat_num = -1;
				for (key in $config.nearpins) {
					cat_num++;
					if (key == p.cat) break;
				}
				$icon.iconSize=new GSize(12,12);
				$icon.sprite={image:"/extension/site/design/site/images/map-sprite.png", left:0, top:10.5*cat_num};
				$icon.shadow=false;
			}else if($config.pins){
				if($config.pins.size){
					$icon.iconSize=new GSize($config.pins.size.width,$config.pins.size.height);
				}
				$icon.sprite={'image':$config.pins.image, left: 0, top: 0};
			}
			var $marker=new GMarker($point,{'icon':$icon});
			if(p.info){
				GEvent.addListener($marker, 'click', function(){
					$marker.openInfoWindowHtml(p.info);
				});
			}
			$bounds.extend($point);
			$map.addOverlay($marker);
			if (p.cat) {
				$config.nearpins[p.cat].push($marker);
				$marker.hide();
			}
		},
		'showpoints':function(cat, toggle){
			for (var i=0;i<$config.nearpins[cat].length;i++) {
				thisPin = $config.nearpins[cat][i];
				if ($(toggle).attr('checked')) {
					thisPin.show();
				} else {
					thisPin.hide();
				}
			}
		},
		'directionsMap':function($settings){
			var $obj=$('#google-map-'+$settings.hash+' .google-map-canvas'),
				$map=new GMap2($obj.get(0));
			$map.addControl(new GLargeMapControl3D());
			$map.setMapType(G_PHYSICAL_MAP);
			if($settings.location){
				var $bounds = new GLatLngBounds();
				var $point=new GLatLng($settings.location.lat,$settings.location.long),
					$icon=new GIcon(G_DEFAULT_ICON);
				if($settings.directions){
					var $form=$('#directions-form-'+$settings.hash),
						$panelID='directions-'+$settings.hash;
					$form.after('<div id="'+$panelID+'"></div>');
					var $panel=$('#'+$panelID),
						$directions=new GDirections($map,$panel.get(0));
					$form.submit(function(){
						var $data=$(this);
						$directions.clear();
						$directions.load("from:"+$data.find('.address').val()+' to:'+$point.toUrlValue());
						return false;
					});
				}
				if($config.pins){
					if($config.pins.size){
						$icon.iconSize=new GSize($config.pins.size.width,$config.pins.size.height);
					}
					$icon.sprite={'image':$config.pins.image};
				}
				var $marker=new GMarker($point,{'icon':$icon});
				if($settings.location.info){
					GEvent.addListener($marker, 'click', function(){
						$marker.openInfoWindowHtml($settings.location.info);
					});
				}
				$bounds.extend($point);
				$map.addOverlay($marker);
				$map.setCenter($bounds.getCenter());
				$map.setZoom($map.getBoundsZoomLevel($bounds));
			}
		}
	};


})(jQuery);

