// 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 = 'ca';



// 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;

		});

	}

});


   function attachSecretMessage(marker, number,store_data_info_marker) {
  var infowindow = new google.maps.InfoWindow(
      { content: store_data_info_marker
      });
  google.maps.event.addListener(marker, 'click', function() {
    infowindow.open(map,marker);
  });
}




/**

 * 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 = 'ca';

	}



	// 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.wh;

				//var lng = results[0].geometry.location.xh;

				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:'Your entered address'

				});



				// 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);
						var store_data="<br><br><p class='flash_results'>";
					       var i=0;


						// 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

								});
								if (v.website != '')
									website_formatted = "<br>"+"<a href='"+v.website+"' target='_blank'>"+v.website+"</a>";
								else {
									website_formatted = "";
								}
									var store_data_info_marker = "";

									store_data = store_data +"<span class='result_heading'>" +"<b>"+v.name+"</b>" + "</span><br>" + v.street+ "<br>"+ v.city+ " "+v.province + " " + v.postcode+"<br>"+v.phone+ website_formatted +"<br><br>";
									store_data_info_marker = store_data_info_marker +"<b>"+v.name+"</b>" + "<br>" + v.street+ "<br>"+ v.city+ " "+v.province + " " + v.postcode+"<br>"+v.phone+ website_formatted +"<br><br>";

									i = i+1;
									var latitude="";
									var longtitude="";
									latitude=v.lat;
									lngtitude=v.lng;
									var latlng = google.maps.LatLng(latitude,longtitude);
									attachSecretMessage(marker, i,store_data_info_marker);

									


									
								
							} );

							store_data = store_data + "</p>";

							$('#ajax_msg').html("<p class='flash_good'>"+results.stores.length+" stores have been found</p>").fadeIn();
							$('#ajax_results').html(store_data).fadeIn();

							


						} else {

							// display error message

							$('#ajax_msg').html("<p class='flash_bad'>"+results.msg+"</p>").fadeIn();

						}

					}

				});

			}

		});

	}

}