// create map object
var map;
// create geocoder object
var geocoder;
// current region
// check the official documentation to change region
// http://code.google.com/apis/maps/documentation/v3/services.html#CountryCodes
// requires a ccTLD (county code top-level domain)
// for a list of ccTLD's visit: http://en.wikipedia.org/wiki/CcTLD
var region = 'uk';

// on dom ready
$(document).ready(function(){

	// if the store locator form is on the page
	if($('#store_locator').length) {		
		// take over submit action
		$('#store_locator').submit(function(){
			// get address
			var address = $('#address').val();
			var distance = $('#distance').val();

			// do lookup if address not empty
			if(address != '') {
				address_lookup(address, distance, region);
			} else {
				$('#ajax_msg').html("<ul class='flash_bad'><li>Please enter a full address or a Postcode</li></ul>");
			}
			
		return false;
		});
	}
});


/**
 * Lookup an address
 * @param string address
 * @param int distance
 * @param string region
 */
function address_lookup(address,distance,region) {
	// set default region
	if(region==null || region == '') {
		region = 'uk';
	}

	// address not empty
	if(address != '') {
		// show ajax loading image
		$('#map_canvas').html("<img src='./imgs/ajax-loader.gif' alt='Ajax Loading Image' />").show();
		$('#ajax_msg').hide();
		// create new geocoder object
		geocoder = new google.maps.Geocoder();
		// lookup the address
		geocoder.geocode( {'address':address,'region':region}, function(results, status) {
			// if the address was found
			if(status == google.maps.GeocoderStatus.OK) {
				// get lat/lng
				var lat = results[0].geometry.location.lat();
				var lng = results[0].geometry.location.lng();
				var location = results[0].geometry.location;

				// set map options
				var myOptions = {
					zoom: 11,
					center: location,
					mapTypeId: google.maps.MapTypeId.ROADMAP
				};
				// display map
				map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

				// create a map marker
				var marker = new google.maps.Marker({
					map: map,
					position: results[0].geometry.location,
					title:'You Are Here',
					icon: '/find-us/imgs/hand.png'
				});

				// do ajax request to find nearby stores
				$.ajax({
					type:"POST",
					url:$('#store_locator').attr('action'),
					data:"ajax=1&action=get_nearby_stores&distance="+distance+"&lat="+lat+"&lng="+lng,
					success:function(msg) {
						// parse the JSON result
						var results = JSON.parse(msg);

						// if request successful
						if( results.success ) {
							// loop through stores and display marker
							jQuery.each( results.stores,function(k,v){
								var marker = new google.maps.Marker({
									map: map,
									position: new google.maps.LatLng(v.lat,v.lng),
									title: v.name+' : '+v.address,
									icon: '/find-us/imgs/logo.png'
								});
							} );
							$('#ajax_msg').html("<p class='flash_good'>"+results.stores.length+" stores have been found</p>").fadeIn();
						} else {
							// display error message
							$('#ajax_msg').html("<p class='flash_bad'>"+results.msg+"</p>").fadeIn();
						}
					}
				});
			}
		});
	}
}
