var markerArray = new Array();

var bootzMap = new Class({
	options: {
		'long': '',
		'lat': '',
		'settings': null,
		'mapContainer': null,
		'zoom': 8,
		'centerLong': 0,
		'centerLat': 0,
		'mapTypeId': 1,
		'defaultMapMarkerSettings': null,
		'ajaxUrl': ''
	},
	initialize: function(options) {
		this.setOptions(options);
		
		this.infoWindows = new Array();
		
		switch(this.options.mapTypeId) {
			case 1:
				var mapType = google.maps.MapTypeId.ROADMAP;
				break;
			case 2:
				var mapType = google.maps.MapTypeId.SATELLITE;
				break;
			case 3:
				var mapType = google.maps.MapTypeId.HYBRID;
				break;	
			case 4:
				var mapType = google.maps.MapTypeId.TERRAIN;
				break;
		}
		
		var longLat = new google.maps.LatLng(this.options.centerLat, this.options.centerLong);
		this.settings = {
			zoom: this.options.zoom,
			center: longLat,
			mapTypeId: mapType
		}
		
		this.map = new google.maps.Map($(this.options.mapContainer), this.settings);
	},
	addMarker: function(longitude, lattitude, options) {
		if (options) {
			var markerOptions = $merge(this.options.defaultMapMarkerSettings, options);
			markerOptions.position = new google.maps.LatLng(lattitude, longitude);
			markerOptions.map = this.map;
			var marker = new google.maps.Marker(markerOptions);
		} else {
			var markerOptions = $merge(this.options.defaultMapMarkerSettings);
			markerOptions.position = new google.maps.LatLng(lattitude, longitude);
			markerOptions.map = this.map;
			var marker = new google.maps.Marker(markerOptions);
		}
		
		var id = options.id;
		markerArray[id-1] = marker;
		
		
		if (options) {
			if($chk(options.infoWindow)) {
				var infoWindow = this.infoWindow(options.infoWindow);
				this.infoWindows.push(infoWindow);
				
				google.maps.event.addListener(marker, 'click', function(event) {
					if ($chk(options.onclick)) {
						options.onclick(event);
					}
					this.infoWindows.each(function(item, key) {
						item.close();
					});
					infoWindow.open(this.map, marker);
				}.bind(this));	
			} else {
				if ($chk(options.onclick)) {
					google.maps.event.addListener(marker, 'click', function(event) {
						options.onclick(event);
					}.bind(this));	
				}
			}
		}
	},
	addMarkerByAddress: function(address, options) {
		new Request.HTML({
			url: this.options.ajaxUrl,
			method: 'post',
			async: false,
			onComplete: function(r1, r2, r3) {
				r3 = r3.split('||');
				this.addMarker(r3[1], r3[0], options);
			}.bind(this)
		}).send('string='+escape(address));
	},
	goTo: function(longitude, lattitude, zoom) {
		var longLat = new google.maps.LatLng(lattitude, longitude);
		
		this.map.setCenter(longLat);	
		
		if (zoom) {
			this.map.setZoom(zoom);
		}
	},
	goToAddress: function(address, zoom) {
		new Request.HTML({
			url: this.options.ajaxUrl,
			method: 'post',
			async: false,
			onComplete: function(r1, r2, r3) {
				r3 = r3.split('||');
				this.goTo(r3[1], r3[0]);
			}.bind(this)
		}).send('string='+escape(address));
		
		if (zoom) {
			this.map.setZoom(zoom);
		}
	},
	infoWindow: function(options) {
		return new google.maps.InfoWindow(options);	
	},
	openInfoWindow: function(infoWindow, marker) {
		infoWindow.open(this.map, marker);	
	}
});
bootzMap.implement(new Events);
bootzMap.implement(new Options);

