define(["dojo/on",
	"dojo/_base/declare",
	"dojo/_base/lang",
	"dojo/_base/window",
	"dojo/dom",
	"dojo/dom-geometry",
        "dojo/io/script",
	"dijit/registry",
	"dojox/mobile/ProgressIndicator",
	"./structure"],
function(on, declare, lang, win, dom, domGeom, script, registry, ProgressIndicator, structure){
	// Map class
	var Map = declare(null, {
		constructor: function(args){
			this.id = args.id;
			this.location = args.location;
			this.options = {
				center: args.location,
				zoom : (structure.layout.leftPane.hidden ? 11 : 12),
				mapTypeId : google.maps.MapTypeId.ROADMAP,
				panControl: false,
				zoomControl: true,
				mapTypeControl: true,
				scaleControl: true,
				streetViewControl: true,
				overviewMapControl: false,
				zoomControlOptions: {
					style: google.maps.ZoomControlStyle.SMALL
				}
			};
		},
		load: function(){
			this.map = new google.maps.Map(document.getElementById(this.id),
					this.options);
			// add a marker for current location
			var marker = new google.maps.Marker({
				map: this.map,
				position: this.location
			});
			// search the address of current location
			var geocoder = new google.maps.Geocoder();
			var infoWindow = new google.maps.InfoWindow();
			var map = this.map;
			geocoder.geocode({"latLng":this.location}, function(results, status){
				if (status === google.maps.GeocoderStatus.OK){
					google.maps.event.addListener(marker, "click", function(){
						infoWindow.setContent("Location
" + results[0].formatted_address.replace(", ", "