if (typeof google != 'undefined') {
	$.google = {};
	google.load('search', '1');
	google.load('maps', '2');
	google.setOnLoadCallback(function() {
		if (GBrowserIsCompatible()) {
			$.google.geocoder = new google.maps.ClientGeocoder();
			var initMap = function() {
				//console.info('start livequery - googlemap');
				if (!$.google.map || $.google.map.getContainer() != $('#googlemap').get(0)) {
					//{latlng:[59.3325,18.0691]} //Stockholm, för testning
					var latlng = $('#mapcenter').metadata({
						type: 'attr',
						name: 'value'
					}).latlng;
					if(latlng[0] != 0 && latlng[1] != 0) {
						$.google.map = new google.maps.Map2($('#googlemap').get(0));
						$.google.map.setCenter(new google.maps.LatLng(latlng[0], latlng[1]), 13);
						$.google.map.addControl(new google.maps.SmallMapControl());
						$.google.map.addControl(new google.maps.MapTypeControl());
					}
					else {
						$.google.map = false;
					}
				}
				$.google.bounds = new google.maps.LatLngBounds();
				//console.info('end livequery - googlemap');
			};
			if($('#googlemap').size() > 0) { //Need it right away!
				initMap();
			}
			$('#googlemap').livequery(initMap);
			$('input[name=mapdata]').livequery(function() {
				//console.info('start livequery - mapdata');
				if ($.google.map) {
					var data = $(this).metadata({
						type: 'attr',
						name: 'value'
					});
					if(data.latlng[0] != 0 && data.latlng[1] != 0) {
						var opts = {};
						if (data.letter && data.letter != '') {
							opts.icon = new google.maps.Icon(G_DEFAULT_ICON, '/_ApoLayouts/img/mapmarkers/red_Marker' + (data.letter.toUpperCase()) + '.png');
							opts.icon.iconSize = new google.maps.Size(20, 34);
							opts.icon.iconAnchor = new google.maps.Point(10, 34);
						}
						var marker = new google.maps.Marker(new google.maps.LatLng(data.latlng[0], data.latlng[1]), opts);
						$.google.map.addOverlay(marker);
						google.maps.Event.addListener(marker, "click", function() {
							this.openInfoWindowHtml('<a class="apoteket-link" href="' + data.url + '">' + data.text + '</a>');
						});
						$.google.bounds.extend(marker.getPoint());
						$.google.map.setZoom($.google.map.getBoundsZoomLevel($.google.bounds));
					}
				}
				//console.info('end livequery - mapdata');
			});
			
			if ($('#googlepane').size() > 0) {
				$('#googlepane').livequery(function() {
					//console.info('start livequery - googlepane');
					if (!!$.google.map && !$.google.directions) {
						$.google.directions = new google.maps.Directions($.google.map, this);
					}
					//console.info('end livequery - googlepane');
				});
			}
			
			var choosePoint = function() {
				//console.log('choosePoint')
				var input = $(this).parents('fieldset').find('input[type=text]:eq(0)');
				var from = input.val();
				var previousvalue = $.data(input.get(0), 'previousvalue')
				$.google._mapIsAdministrativeArea = false;
				if (from != '' && from != previousvalue) {
                    if ($.google.directions) {
    					$.google.directions.clear();
                    }
					$.data(input.get(0), 'previousvalue', from);
					from = from.replace(/sverige|sweden/ig,'').replace(/\s+/ig,' ') + " sweden";
					$.google.geocoder.getLocations(from.toLowerCase(), function(obj) {
						var html = [];
						if (obj.Status.code == G_GEO_UNKNOWN_ADDRESS) {
							html.push('<div class="hit"><p>Inga platser hittades</p></div>');
						}
						else if (obj.Placemark) {
							var addresses = {};
							var j = 0;
							var k = 0;
							for (var i in obj.Placemark) {
								var adr = obj.Placemark[i];
								if(adr.AddressDetails.Accuracy < 6 && $('div.directions_box').size() > 0) {
									k++;
									continue;
								}
								var address = [];
								addresses[i] = adr.address;
								if (adr.address && adr.address != '') { //Use Googles
									address.push(adr.address.replace(', Sweden','').replace(', Sverige','').replace(/, ?([^,]+)/,', <strong>$1</strong>'));
								}
								else { //Build it ourselves
									if (adr.AddressDetails.Accuracy >= 6) {
										address.push(adr.AddressDetails.Country.AdministrativeArea.Locality.Thoroughfare.ThoroughfareName);
									}
									if (adr.AddressDetails.Accuracy >= 4) {
										if (adr.AddressDetails.Country.AdministrativeArea) {
											address.push('<strong>' + adr.AddressDetails.Country.AdministrativeArea.Locality.LocalityName + '</strong>');
										}
										else if (adr.AddressDetails.Country.Locality) {
											address.push('<strong>' + adr.AddressDetails.Country.Locality.LocalityName + '</strong>');
										}
									}
									if (address.join('') == '' && adr.AddressDetails.Accuracy >= 2) {
										address = ['<strong>' + adr.AddressDetails.Country.AdministrativeArea.AdministrativeAreaName + '</strong>'];
										$.google._mapIsAdministrativeArea = true;
									}
								}
								html.push('<div class="hit"><input type="radio" id="placemark-' + i + '" name="placemark" value="' + adr.Point.coordinates[1] + ',' + adr.Point.coordinates[0] + '" /><label for="placemark-' + i + '">' + address.join(', ') + '</label></div>');
								j++;
							}
							
						}
						if($('div.directions_box').size() > 0 && html.join('') == '') {
							html = ['<div class="puff"><p>Inga resultat funna. Försök precisera din sökning, t.ex. med ett vägnamn.</p></div>'];
						}
						if((j-k) > 1) {
							$('div.results h3 span').text(j-k+' ');
						}
						else  {
							$('div.results h3 span').empty();
						}
						
						$('div.results').show().find('fieldset div').replaceWith($('<div>' + html.join('') + '</div>'));
					});
				}
				return false;
			};
			
			if ($('#local').size() > 0) {
				$('#local a.submit-white-button-container input').click(choosePoint);
				$('#local div.results fieldset div input').livequery('click', function() {
					//console.info('start livequery click - label');
					var val = $(this).val();
					if ($.google.map) {
						var latlng = val.split(',');
						$.google.map.setCenter(new google.maps.LatLng(latlng[0], latlng[1]), 13);
					}
					else {
						$('#local').append('<input type="hidden" id="mapcenter" value="{latlng:[' + val + ']}" />');
						$('#local').append('<div id="googlemap"></div>');
					}
					setTimeout(function() { //Timeout för att $.google.map måste instantieras
						$.google.local = new google.search.LocalSearch();
						$.google.local.setResultSetSize(google.search.Search.LARGE_RESULTSET);
						$.google.local.setCenterPoint($.google.map);
						$.google.local.apoResultCache = [];
						var apoCenter = $.google.map.getCenter();
						var apoSearchComplete = function(page) {
							var currentPage = (/[\d]+/.test(page)) ? page : $.google.local.cursor.currentPageIndex;
							var results = $.google.local.apoResultCache[currentPage];
							if (!results) {
								results = $.google.local.results;
								$.google.local.apoResultCache[currentPage] = [];
							}
							if (!results) {
								return;
							}
							
							$.google.map.clearOverlays();
							
							var bounds = new google.maps.LatLngBounds();
							bounds.extend(apoCenter);
							
							var arrow = new google.maps.Icon(G_DEFAULT_ICON, '/_ApoLayouts/img/mapmarkers/arrow.png');
							arrow.iconSize = new google.maps.Size(39, 34);
							arrow.iconAnchor = new google.maps.Point(11, 31);
							$.google.map.addOverlay(new google.maps.Marker(apoCenter, {icon: arrow, clickable:false, zIndexProcess: function(marker, b) {
								return 10000;
							}}));
							
							var n = results.length;
							var i = 0;
							
							for (i; i < n; i++) {
								var result = results[i];
								if ($.google.local.apoResultCache[currentPage].length == i) {
									$.google.local.apoResultCache[currentPage][i] = result;
								}
								if (result.country == 'Sweden') {
									marker = new google.maps.Marker(new google.maps.LatLng(result.lat, result.lng));
									$.google.map.addOverlay(marker);
									var url = "#";
									var text = '';
									if (result.title && result.title != '') {
										text += result.title + '<br/>';
									}
									if (result.addressLines && result.addressLines.length > 0) {
										if (result.addressLines[0] && result.addressLines[0] != '') {
											text += result.addressLines[0] + '<br/>';
										}
										if (result.addressLines[1] && result.addressLines[1] != '') {
											text += result.addressLines[1].replace(/(, )?sweden/ig, '');
										}
									}
									if (text == '') {
										text = 'Ingen information att visa';
									}
									marker._apoText = text;
									google.maps.Event.addListener(marker, "click", function() {
										this.openInfoWindowHtml('<div class="apotek">' + this._apoText + '</div>');
									});
									bounds.extend(marker.getPoint());
								}
							}
							
							$.google.map.setCenter(bounds.getCenter(), $.google.map.getBoundsZoomLevel(bounds));
							
							if ($('div#local div.pagination').size() < 1) {
								n = $.google.local.cursor.pages.length;
								i = 0;
								var div = $('<div class="pagination"></div>').insertBefore($('#googlemap')).click(function(e) {
									var current = parseInt($(this).find('a.active').text(), 10) - 1;
									var page = parseInt($(e.target).siblings('a').removeClass('active').end().addClass('active').text(), 10) - 1;
									if (page != current) {
										if($.google.local.apoResultCache[page] && $.google.local.apoResultCache[page].length > 0) {
											apoSearchComplete(page);
										}
										else {
											$.google.local.gotoPage(page);
										}
									}
								});
								for (i; i < n; i++) {
									div.append('<a>' + $.google.local.cursor.pages[i].label + '</a>');
								}
								div.find('a').eq($.google.local.cursor.currentPageIndex).addClass('active');
							}
						};
						
						$.google.local.setSearchCompleteCallback(null, apoSearchComplete);
						$.google.local.execute("apotek");
					}, 500);
					//console.info('end livequery click - label');
				});
			}
			
			if ($('div.directions_box').size() > 0) {
				
				if(!$.google.map) {
					$('#address-from').val('Fel: Ingen karta. 0,0 koordinater?').get(0).disabled = true;
				}
				
				$('div.directions_box div.head a.submit-white-button-container input:eq(0)').click(choosePoint);
				
				$('#address-from').bind('keydown', function(e) {
					if (e.keyCode == 13) {
						$('div.directions_box div.head a.submit-white-button-container input:eq(0)').click();
						return false;
					}
				});
				
				$('div.directions_box div.results :radio').livequery('click', function() {
					//console.info('start livequery click - label');
					var i = $(this).val().toString();
					var to = $('#address-to').metadata({
						type: 'attr',
						name: 'value'
					}).latlng.toString();
					
					$.google.directions.clear();
					$.google.directions.loadFromWaypoints([i, to], {
						locale: 'sv'
					});
					google.maps.Event.addListener($.google.directions, 'load', function() {
						$.google.map.clearOverlays();
					});
					google.maps.Event.addListener($.google.directions, 'error', function() {
						var status = this.getStatus();
						if(status && status.code == G_GEO_UNKNOWN_DIRECTIONS) {
							$('#googlepane').html('<div class="puff"><p>Kunde inte finna någon vägbeskrivning. Om möjligt försök att precisera din sökning genom att ange ett vägnamn.</p></div>');
						}
					})
					//59.3302,18.0591 //Stockholm
					//57.7092,11.9729 //Göteborg
					//console.info('end livequery click - label');
				});
			}
		}
	});
}
