
window.addEvent('load', function () {
	maps.each(function (m) {
		var map = new GoogleMap(m.element);
		m.markers.each(function (markerOptions) {
			$extend(markerOptions, {
				onComplete: function (marker) {
					map.getMap().setCenter(marker.getPosition());
					google.maps.event.addListener(marker.getMarker(), 'click', function() {
						window.location.href = 'http://maps.google.com/?q=' + escape(marker.getAddress()) + '&iwloc=A';
					});
				}
			});
			marker = new GoogleMarker(markerOptions);
			marker.setMap(map.getMap());
		});
	});

});


var maps = [];
function loadMap (map) {
	maps.push(map);
	return;

	var options = {
		title: 'BigHand US',
		address: '125 S.Wacker Drive, Chicago, IL 60606'
	}
	var m = new GoogleMarker(options);

	return;
	var myLatlng = new google.maps.LatLng(-25.363882,131.044922);
    var myOptions = {
      zoom: 4,
      center: myLatlng,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    }
    var map = new google.maps.Map(document.getElementById(map.element), myOptions);

    var marker = new GoogleMarker({
        position: myLatlng,
        map: map,
        title:"Hello World!"
    });

}

var GoogleMarker = new Class({
	Implements: [Options, Events],
	options: {
		title: '',
		address: ''
	},
	map: null,
	marker: null,
	initialize: function(options) {
		this.setOptions(options);
		this.marker = new google.maps.Marker(options);
		this.geocode();
	},
	getMarker: function () {
		return this.marker;
	},
	setMap: function (map) {
		this.marker.setMap(map);
	},
	getMap: function () {
		return this.marker.getMap();
	},
	setPosition: function (latlng) {
		this.marker.setPosition(latlng);
	},
	getPosition: function () {
		return this.marker.getPosition();
	},
	setAddress: function (address) {
		this.options.address = address;
	},
	getAddress: function () {
		return this.options.address;
	},
	setTitle: function (setTitle) {
		this.options.title = title;
		this.marker.setTitle(this.options.title);
	},
	getTitle: function () {
		return this.marker.getTitle();
	},
	geocode: function () {
		var geocoder = new google.maps.Geocoder();
		geocoder.geocode({
			address: this.options.address
		}, this.evtGeocoded.bind(this));
	},
	evtGeocoded: function (response, status) {
		if (status == 'OK' && response.length > 0) {
			var result = response[0];
			this.marker.setPosition(result.geometry.location);
		}
		this.fireEvent('complete', this);
	}
});

var GoogleMap = new Class({
	Implements: Options,
	options: {
		zoom: 13,
		coords: {
			x: 52.522906,
			y: -1.845703
		},
		mapTypeControl: true,
		mapTypeControlOptions: {style: google.maps.MapTypeControlStyle.DROPDOWN_MENU},
		navigationControl: true,
		navigationControlOptions: {style: google.maps.NavigationControlStyle.DEFAULT},
		mapTypeId: google.maps.MapTypeId.ROADMAP
	},
	element: null,
	initialize: function (element, options) {
		this.element = $(element);
		this.setOptions(options);

		this.element.empty();
		this.setMap(new google.maps.Map(this.element, this.options));
	},
	getElement: function () {
		this.element;
	},
	getMap: function () {
		return this.map;
	},
	setMap: function (map) {
		this.map = map;
	}
});
