var map;
var storePostcode;


function GM_cancomStores(postcode){

	document.write('<div id="googleMap" class="googleMap"></div><div style="display: none;" id="googleDirectionsPanel"></div>');
	
	// Add all the stores into an array or something?
	
	var zoom = 5;
	
	if(!postcode || postcode == 'ALL'){
		GM_findAddress('GU47BN', GM_setupMap);
		GM_addStore('GU47BN', '<b>Cancom Ltd Guildford</b><br /><br />Genesis House<br />Merrow Lane<br />Guildford<br />GU4 7BN<br /><br /><b>Tel:</b> 0845 686 3500<br /><b>Fax:</b> 0845 686 3501<br /><b>Email:</b> <a href="mailto:guildford.sales@cancomuk.com">guildford.sales@cancomuk.com</a>', zoom);
		GM_addStore('BN13XF', '<b>Cancom Ltd Brighton</b><br /><br />110 Queens Road<br />Brighton<br />East Sussex<br />BN1 3XF<br /><br /><b>Tel:</b> 0845 686 3200<br /><b>Fax:</b> 0845 686 3201<br /><b>Email:</b> <a href="mailto:brighton.sales@cancomuk.com">brighton.sales@cancomuk.com</a>', zoom);
		GM_addStore('CB21DP', '<b>Cancom Ltd Cambridge</b><br /><br />58 Regent Street<br />Cambridge<br />CB2 1DP<br /><br /><b>Tel:</b> 0845 686 3300<br /><b>Fax:</b> 0845 686 3301<br /><b>Email:</b> <a href="mailto:cambridge.sales@cancomuk.com">cambridge.sales@cancomuk.com</a>', zoom);
		GM_addStore('W148NZ', '<b>Cancom Ltd Kensington</b><br /><br />290 High St Kensington<br />London<br />W14 8NZ<br /><br /><b>Tel:</b> 0845 656 3400<br /><b>Fax:</b> 0845 686 3401<br /><b>Email:</b> <a href="mailto:kensington.sales@cancomuk.com">kensington.sales@cancomuk.com</a>', zoom);
		GM_addStore('EH89EW', '<b>Cancom Ltd Edinburgh</b><br /><br />95-97 Nicolson Street<br />Edinburgh<br />EH89BY<br /><br /><b>Tel:</b> 0845 686 3100<br /><b>Fax:</b> 0845 686 3101<br /><b>Email:</b> <a href="mailto:edinburgh.sales@cancomuk.com">edinburgh.sales@cancomuk.com</a>', zoom);
	}else if(postcode == 'TRAINING'){
		GM_findAddress('GU47BN', GM_setupMap);
		GM_addStore('GU47BN', '<b>Cancom Ltd Guildford</b><br /><br />Genesis House<br />Merrow Lane<br />Guildford<br />GU4 7BN<br /><br /><b>Tel:</b> 01483 500542<br /><b>Email:</b> <a href="mailto:training@cancomuk.com">training@cancomuk.com</a>', zoom);
		GM_addStore('M45JW', '<b>Swan Buildings</b><br /><br />Swan Street<br />Manchester<br />M4 5JW<br /><br /><b>Tel:</b> 01483 500542<br /><b>Email:</b> <a href="mailto:training@cancomuk.com">training@cancomuk.com</a>', zoom);
	}else{
		GM_findAddress(postcode, GM_setupMap);
		if(postcode == 'GU47BN'){
			GM_addStore('GU47BN', '<b>Cancom Ltd Guildford</b><br /><br />Genesis House<br />Merrow Lane<br />Guildford<br />GU4 7BN<br /><br /><b>Tel:</b> 0845 686 3500<br /><b>Fax:</b> 0845 686 3501<br /><b>Email:</b> <a href="mailto:guildford.sales@cancomuk.com">guildford.sales@cancomuk.com</a>');
		}else if(postcode == 'BN13XF'){
			GM_addStore('BN13XF', '<b>Cancom Ltd Brighton</b><br /><br />110 Queens Road<br />Brighton<br />East Sussex<br />BN1 3XF<br /><br /><b>Tel:</b> 0845 686 3200<br /><b>Fax:</b> 0845 686 3201<br /><b>Email:</b> <a href="mailto:brighton.sales@cancomuk.com">brighton.sales@cancomuk.com</a>');
		}else if(postcode == 'CB21DP'){
			GM_addStore('CB21DP', '<b>Cancom Ltd Cambridge</b><br /><br />58 Regent Street<br />Cambridge<br />CB2 1DP<br /><br /><b>Tel:</b> 0845 686 3300<br /><b>Fax:</b> 0845 686 3301<br /><b>Email:</b> <a href="mailto:cambridge.sales@cancomuk.com">cambridge.sales@cancomuk.com</a>');
		}else if(postcode == 'W148NZ'){
			GM_addStore('W148NZ', '<b>Cancom Ltd Kensington</b><br /><br />290 High St Kensington<br />London<br />W14 8NZ<br /><br /><b>Tel:</b> 0845 656 3400<br /><b>Fax:</b> 0845 686 3401<br /><b>Email:</b> <a href="mailto:kensington.sales@cancomuk.com">kensignton.sales@cancomuk.com</a>');
		}else if(postcode == 'EH89BY'){
			GM_addStore('EH89EW', '<b>Cancom Ltd Edinburgh</b><br /><br />95-97 Nicolson Street<br />Edinburgh<br />EH89BY<br /><br /><b>Tel:</b> 0845 686 3100<br /><b>Fax:</b> 0845 686 3101<br /><b>Email:</b> <a href="mailto:edinburgh.sales@cancomuk.com">edinburgh.sales@cancomuk.com</a>');
		}else{
			GM_addStore(postcode);
		};
	};
	
};


function GM_setupMap(startPoint, id){
	
	map = new GMap2(document.getElementById('googleMap'));
	
	var icon = new GIcon();
	var marker = new GMarker(startPoint, icon);
	var bounds = new GLatLngBounds();
	
	icon.image = '/_img/googleMaps/icon.png';
	icon.iconSize = new GSize(132, 53);
	icon.iconAnchor = new GPoint(66, 53);
	icon.infoWindowAnchor = new GPoint(45, 53);

	icon.shadow = '/_img/googleMaps/shadow.png';
	icon.shadowSize = new GSize(132, 53);

	map.setCenter(startPoint, 2);

	map.addControl(new GLargeMapControl());
	map.addOverlay(marker);
//	map.enableScrollWheelZoom();
	bounds.extend(startPoint);
	
	map.cancomPointer = startPoint;
	map.icon = icon;
	map.bounds = bounds;
	
};


function GM_addStore(postcode, html, zoom){
	
	GM_findAddress(postcode, function(point){
		
		var marker = new GMarker(point, map.icon);
		
		map.addOverlay(marker);
		map.panTo(point);
		map.bounds.extend(point);
		
		GEvent.addListener(marker, 'click', function() {
			marker.openInfoWindowHtml(html + '<br /><br /><span id="directionsToHere"><a href="#">Get directions</a></span><br /><br /><br />');
			storePostcode = postcode;
			setTimeout('GM_directionsToHere()', 500);
		});
		
		GM_showAll(zoom);
		
	});
	
};
		
		
function GM_fromHere(from, to){
	
	GM_findAddress(from, function(fromPoint){

		fromPoint = new String(fromPoint).replace('(', '').replace(')', '');
		startPoint = new String(to).replace('(', '').replace(')', '');
		
		var directionsPanel = document.getElementById('googleDirectionsPanel');
		
		if(map.directions) 
			map.directions.clear();
		
		map.directions = new GDirections(map, directionsPanel);
		map.directions.load(fromPoint + ' to ' + startPoint)
		map.closeInfoWindow();
		
		$('#googleDirectionsPanel').slideDown('slow');
		
	});
	
};


function GM_findAddress(address, callback){
	
	var localSearch = new GlocalSearch();
		
	$('#googleDirectionsPanel').slideUp('fast');
	
	localSearch.setSearchCompleteCallback(function(test){console.log(test)}, function(){
		
		if(!localSearch.results[0]){
			
			var directionsToHere = $('#directionsToHere').find('a');
			directionsToHere.html('Not found!');
			directionsToHere.fadeOut('normal', function(){
				directionsToHere.fadeIn('normal', function(){
					directionsToHere.fadeOut('normal', function(){
						directionsToHere.fadeIn('normal', function(){
							directionsToHere.html('Get route!');
						});
					});
				});
			});
			
		}else{
			
			var point = new GLatLng(localSearch.results[0].lat, localSearch.results[0].lng);
			callback(point);
			
		};
		
	});
	
	localSearch.execute(address + ', UK');
	
};


function GM_showAll(zoom){
	
	if(zoom > 0){
		map.setZoom(zoom);
	}else{
		map.setZoom(map.getBoundsZoomLevel(map.bounds))
		map.zoomOut();
	};
	map.panTo(map.bounds.getCenter());
	
};


function GM_directionsToHere(store){
	
	if(!store){
		store = storePostcode;
	};
	
	console.log('Store: ' + store);
	
	$('#googleMap span#directionsToHere a').unbind().bind('click', function(){
		
		$(this).parent().html('<b>Postcode</b>: <input type="text" style="border-width: 1px; width: 90px;" maxlength="7" /> <a href="#">Get route!</a>');
		
		$('span#directionsToHere input').focus();
		
		$('span#directionsToHere a').unbind().bind('click', function(){
			
			var postcode = $(this).parent().find('input').val();
			
			$(this).html('Working...');
			
			GM_fromHere(postcode, store);
			
			return false;
			
		});
		
		return false;
				
	});
	
};
