
isol.gmap = {

	gkey: 'ABQIAAAAWwV82y6hqF_hWvs7RSovghT3-9iPpUQ4dLgAjDUuwg3CCSkjUxS6qALtWV4Kc6FovlekBZT48oNW2w',

	maps: [],

	load: function() {
		isol.loadScript('http://www.google.com/jsapi?key='+isol.gmap.gkey+'&callback=isol.gmap.loadGmaps')
	},

	loadGmaps: function() {
		google.load("maps", "2", {"callback" : isol.gmap.isLoaded})
	},

	isLoaded: function() {
		isol.addEvent('unload',google.maps.Unload)
		isol.gmap.init()
	},

	add: function(gmap,callback) {
		gmap.callback = callback
		isol.gmap.maps.push(gmap)
	},

	init: function() {
		if (typeof isol.gmap.maps != 'undefined') {
			for (var i = 0; i < isol.gmap.maps.length; i++) {
				isol.gmap.draw(isol.gmap.maps[i])
			}
		}		
	},

	draw: function(gmap) {

		if (GBrowserIsCompatible()) {

			var map = new google.maps.Map2(isol.getElement(gmap.el))
			map.setCenter(new google.maps.LatLng(gmap.clt,gmap.clg),gmap.z)
			map.setMapType(G_HYBRID_MAP)
			map.setUIToDefault()
			
			// create icons
			if (typeof gmap.icons != undefined) {			
				var icons = {}
				var baseIcon = new google.maps.Icon(G_DEFAULT_ICON)
				baseIcon.iconSize = new google.maps.Size(gmap.icons.w,gmap.icons.h)
				baseIcon.shadowSize = new google.maps.Size(gmap.icons.sw,gmap.icons.sh)
				baseIcon.iconAnchor = new google.maps.Point(gmap.icons.px,gmap.icons.py)

				if ((typeof gmap.icons.ids != undefined) && gmap.icons.ids.length) {
					var ilist = gmap.icons.ids
					var icount = gmap.icons.ids.length
					for (i=0; i<icount; i++) {
						icons[ilist[i]] = new google.maps.Icon(baseIcon)
						icons[ilist[i]].image = gmap.icons.base+ilist[i]+'.png'
						icons[ilist[i]].mozPrintImage = gmap.icons.base+ilist[i]+'.gif'
					}
				}
			}		
		
			// add items
			if (typeof gmap.items != 'undefined') {

				var item_count = gmap.items.length

				if (item_count > 1)	{
					var bounds = new google.maps.LatLngBounds()
				}

				var item_count = gmap.items.length
				if (item_count) {
					for (var i = 0; i < item_count; i++) {

						// get icon
						if (typeof gmap.items[i].icon != undefined) {
							var map_icon = icons[gmap.items[i].icon]
						} else {
							var map_icon = null
						}

						// define marker
						var latlng = new google.maps.LatLng(gmap.items[i].clt,gmap.items[i].clg)
						var marker = new google.maps.Marker(latlng,{icon:map_icon,title:gmap.items[i].title})

						// add to bounds if set
						if (bounds && gmap.items[i].ob!=1) {
							bounds.extend(latlng)
						}

						// add link
						marker.clink = gmap.items[i].url
						
						// add marker
						map.addOverlay(marker)

						// info window HTML
						var HTML = gmap.items[i].HTML
						if (HTML) {
							marker.openInfoWindowHtml(HTML)
						}					
					}

					// center single item
					if (item_count == 1) {
						map.setCenter(latlng,11)
						
					// or zoom to bounds
					} else if (bounds) {
						map.setCenter(bounds.getCenter())
						map.setZoom(map.getBoundsZoomLevel(bounds))
					}
				}			
			}

			// add click link
			map.clink = gmap.url
			
			// click events
			google.maps.Event.addListener(map,'click',function(overlay)	{
				// marker link
				if (overlay != undefined) {
					if (overlay.hasOwnProperty('clink')) {
						window.location.href = overlay.clink
					}				
				// map link
				} else if (this.clink) {
					window.location.href = this.clink
				}
			})

			// callback function
			if (typeof gmap.callback == 'function') {
				gmap.callback(map,icons)
			}
		}
	} 
}

isol.gmap.load()

