var GoogleMap = new Class({
	Implements: Options,
	
	options: {
		center: [],
		zoom: 13,
		controls: {
			zoom: "large",
			type: true
		},
		icon: "fattire"
		
	},
	
	initialize: function(element, latitude, longitude, opts){
	
		this.setOptions(opts);
		
		this.server = config.get('site_url');
		
		this.container = $(element);
		this.lat = latitude;
		this.lon = longitude;
		
		if(this.options.center.length == 0){
			this.options.center = [this.lat, this.lon];
		}

		this.makeMap();
	},
	
	makeMap: function(){
		
		var center = new google.maps.LatLng(this.options.center[0],this.options.center[1]);
		var myOptions = {
	    	zoom:this.options.zoom,
	    	center: center,
	    	mapTypeId: google.maps.MapTypeId.ROADMAP
	    };
		this.map = new google.maps.Map(document.getElementById(this.container.get('id')), myOptions);
		

		if(this.options.icon == "fattire"){
			var markerOptions = this.fatTireIcon();
			var marker = new google.maps.Marker(markerOptions);
			this.addDirections(marker, this.lat, this.lon);
		}else{
			this.addIcon([this.lat, this.lon], this.options.icon.image, this.options.icon);
		}
		
		/*
if(this.options.controls.type == true){
			this.map.addControl(new GMapTypeControl());
			new google.maps.ZoomControlStyle
		}
		if(this.options.controls.zoom == "large"){
			this.map.addControl(new GLargeMapControl());
		} else
		if(this.options.controls.zoom == "small"){
			this.map.addControl(new GSmallZoomControl());
		}
*/
		
	},
	
	addIcon: function(loc, name, opts){
		var center = new google.maps.LatLng(loc[0],loc[1]);
		var icn = new google.maps.MarkerImage(this.server+"/assets/images/icons/maps/"+name+"_icn.png");
		icn.size = new google.maps.Size(opts.size[0], opts.size[1]);
		icn.anchor = new google.maps.Point(opts.anchor[0], opts.anchor[1]);
		icn.infoWindowAnchor = new google.maps.Point(Math.round(opts.size[0]/2), 1);
		
		var shadow_origin = new google.maps.Point(15,18)
		if(typeof opts.shadow_origin != 'undefined')
		{
			shadow_origin = new google.maps.Point(opts.shadow_origin[0],opts.shadow_origin[1]);
		}
		
		var shadow = new google.maps.MarkerImage(this.server+"/assets/images/icons/maps/"+name+"_shadow.png",
	    	new google.maps.Size(opts.size[0], opts.size[1]),
	    	shadow_origin,
	    	new google.maps.Point(0, 32)
	    );
		
		var marker = new google.maps.Marker({
	    	position: center,
	    	map: this.map,
	    	icon: icn,
	    	shadow: shadow
	   	});
		
		this.addDirections(marker, center.lat(), center.lng());
	},
	
	fatTireIcon: function(){
		var center = new google.maps.LatLng(this.lat, this.lon);
		var fatIcon = new google.maps.MarkerImage(this.server+"/assets/images/icons/maps/fattire_large.png");
		fatIcon.size = new google.maps.Size(62, 60);
		fatIcon.Anchor = new google.maps.Point(26, 60);
		fatIcon.infoWindowAnchor = new google.maps.Size(5, 1);
		var shadow = new google.maps.MarkerImage(this.server+'/assets/images/icons/maps/fattire_large_shadow.png',
	    	new google.maps.Size(76, 66),
	    	new google.maps.Point(25,18),
	    	new google.maps.Point(0, 42)
	    );
	
		var markerOptions = {
	    	position: center,
	    	map: this.map,
	    	icon: fatIcon,
	    	shadow: shadow
	   	};
		
		return markerOptions;
	},
	
	
	addDirections: function(marker, l, lng){
		
		var latlng = new google.maps.LatLng(l, lng);
		var loc = window.location.pathname.split('/');
		var infowindow = new google.maps.InfoWindow({
		    content: '<a href="/'+loc[1]+'/directions">Get Directions</a>'
		});
		google.maps.event.addListener(marker,"click", function() {
			
			infowindow.open(this.map,marker);
			
		}.bind(this));
	}
	
});

